/**
 * 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.
 */
.dashboardBox {
  padding: 0;
  h3 {
    margin: 0 0 5px 0;
  }
}

@listTbodyBackground: transparent;

.listTable {
  margin-top: 5px;
  border-collapse: separate;
  /*border-radius: 4px;*/
  border: 1px solid @table-border-color;
  width: 100%;
  min-height: 140px;
  overflow: hidden;
  position: relative;
  font-size: 12px;
  .ptb5px {
	padding: 5px 0;
  }
  input , select {
	background-color: @input-background-color;
	padding-left: 4px;
	color: @input-color;
    font-weight: normal;
  }
  .border0px {
	border: 0px;
  }
  .spinner {
    .transition (all, 1s, linear);
    display: none;
    width:0;
    height:0;
    img {
      margin: 60px auto 10px;
      display: none;
      //background-color: #323032;
      color: #323032;
    }
    &.active {
      display: block;
      position: absolute;
      z-index: 2;
      .background-opacity(@table-inactive-bg, 0.8);
      width: 100%;
      height: 100%;
      top: 0;
      left: 0;
      img {
        display: block;
        //.trayAnimation;
      }
    }

  }
  h5 {
    text-align: left;
    font-weight: bold;
    small {
      margin-top: -5px;
      display: block;
      font-weight: bold;
    }
  }
  thead {
    padding: 5px;
    text-align: left;
    background-color: @table-header-background-color;
    color: @table-header-color;
    tr > th { border: none; }
  }
  tbody {
    padding: 5px;
    display: table-row-group;
    background-color: @listTbodyBackground;
	tr > th { border: none; }
  }
  tbody:nth-child(2) {
    border-bottom: 20px solid transparent;
  }
  tr {
    width: 100%;
    height: 24px;
  }
  .filtersBox {
    font-weight: normal;
    font-size: 10px;
    width: 35%;
    float:left;
    margin: 3px 1%;
    &.clusterFilters {
      width: 48%;
    }
  }
  .filtersSelectBox {
    float:left;
    font-weight: normal;
    font-size: 10px;
    width: 24%;
    margin: 3px 1%;
    select {
      padding:0;
      font-size: 10px;
    }
  }


  .entityRow {
    &:hover, &.rowSelected {
      background: @table-row-selected-background-color;
	  color: @table-cell-hover-color;
      td {
        color: @table-cell-hover-color;
      }
    }

    td {
      padding: 0;
      line-height: 22px;
      border-top: 0;
      border-bottom: 0;
      vertical-align: middle;
      color: @table-cell-color;
    }

    &.lastEntityRow {
      td {
        padding-bottom: 6px;
      }
    }
  }
  .paginationRow td {
    background-color: @table-header-background-color;
    .pagination {
      border-radius: 0px;
      li {
        a {
          background-color: @pagination-active-bg;
          color: @pagination-active-color;
          border: none;
          border-radius: inherit;
          &.pagDisabled {
            background-color: @pagination-disabled-bg !important;
            text-decoration: underline;
            color: @pagination-disabled-color;
          }
        }
      }
    }
  }
  label {
    font-weight: normal;
    font-size: 10px;
  }
  .checkboxCell {
    width: 20px;
    text-align: center;
	  input[type="radio"], input[type="checkbox"] {
	    vertical-align: middle;
	  }
  }
  .stateCell {
    width: 120px;
  }
  .dateCell {}
  input[type="radio"] {
    margin: -1px 0 0 -18px;
    font-size: 10px;
  }

  .nameCell {
    cursor: pointer;
	.entypo {
	  font-size: 1.4em;
	}
    &:hover {
      text-decoration: underline;
    }
    button {
      color: @green-light;
	  padding: 0 6px;
      border: none;
      background-color: transparent;
      font-size: 12px;
    }
  }
}
.buttons-to-show {
  margin:2px 0;
  color: @table-header-button-color;
  &:hover {
    color: @table-header-button-hover-color;
  }
}
/* LOGIN */
.login {
  margin-top: 20px;
  h3{
    padding: 0 20px;
  }
  .detailsBox{
    padding: 30px 15px;
    float: none;
    margin: 0 auto;
  }
  .error{
    color: red;
  }
  .hint{
    color: gray;
  }
}

/* New Dashboard */

.filtersResultBox {
  font-weight: normal;
//  font-size: 14px;
  width: 35%;
  float:left;
  margin: 3px 1%;
  &.clusterFilters {
    width: 48%;
  }
}

.tag {
  padding: 0px 3px;
  &:hover {
    cursor: pointer;
    color: #fff;
    background-color: #5fa33e;
    /*font-weight: bold;*/
  }
}




.waitingLayer {
  position: absolute;
  background-color: red;
  width: 100%;
  height:100%;
  opacity:0;
  z-index: -1;
  .active {
    opacity:1;
    z-index: 2;
  }
}