/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

@import 'common.less';

#dashboard-widgets-container {
  .btn-toolbar {
    float: right;
    padding-top: 5px;
    margin-bottom: 20px;
    margin-top: -60px;
  }
  .dashboard-widgets-box {
    clear: both;
    display: inline-block;
    padding: 10px 1.1% 10px 1.1%;
    background-color: #ffffff;
    .dashboard-widget-groups-container {
      float: left;
      width: 100%;
    }
  }
  .widgets-options-menu {
    .add-widgets-text {
      .dropdown-menu {
        .add-widgets-dropdown-list {
          ul {
            list-style: none;
            padding-top: 10px;
            padding-bottom: 10px;
          }
        }
        .add-widgets-apply-button {
          margin: 0 20px 40px 0;
        }
      }
      &.pull-left {
        .dropdown-menu {
          overflow: auto;
          width: 210px;
          left: -210px;
        }
      }
    }
    .reset-all-widgets.pull-left .dropdown-menu {
      width: 250px;
      left: -250px;
    }
    .nothing-to-add {
      padding: 5px 15px;
    }
  }

  #dashboard-widgets {
    .span2p4 {
      width: 22.70%;
      *width: 22.70%;
    }
  }

}

@media (min-width: 1200px) {

  #dashboard-widgets-container {

    .dashboard-widgets-box {
      padding: 10px 1.3% 10px 1.3%;
    }

    #dashboard-widgets {
      .span2p4 {
        width: 23.1%;
        *width: 23.1%;
      }
      .img-thumbnail {
        .caption {
          font-size: 14px;
        }
        .hidden-info-two-line, .hidden-info-three-line, .hidden-info-five-line, .hidden-info-six-line {
          font-size: 12px;
        }
      }
      .links .img-thumbnail {
        .widget-content {
          font-size: 12px;
        }
      }
    }
  }

}

@media (min-width: 1500px) {
  #dashboard-widgets-container {
    #dashboard-widgets {
      .span2p4 {
        width: 23.4%;
        *width: 23.4%;
      }
    }
  }
}