/*
 * 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.
 */

/* Tables */

body[fds] .td-data-table-cell {
  font-size: 13px;
  color: $grey2;
  padding: 0 28px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  height: 100%;
  line-height: 30px;
}

body[fds] .td-data-table-column {
  color: $grey3;
  font-weight: normal;
}

body[fds] .td-data-table-row {
  height: 34px;
  border-top: 1px solid #fff;
  border-left: 1px solid #fff;
  border-right: 1px solid #fff;
  border-bottom: 1px solid $grey5;
}

body[fds] .td-data-table-row.selected {
  background-color: $grey5;
  border: 1px solid $grey5;
}

body[fds] .td-data-table-row:hover {
  background-color: $grey6;
  border: 1px solid $blue-grey2;
}

body[fds] .td-data-table-cell .mat-icon-button {
  color: $linkColor;
}

body[fds] .td-data-table-cell .mat-icon-button:disabled {
  color:  $grey13;
  cursor: not-allowed;
}

body[fds] .td-data-table-cell .mat-button, body[fds] .td-data-table-cell .mat-icon-button, body[fds] .td-data-table-cell .mat-raised-button {
  height: 24px;
  width: 24px;
  line-height: 0;
}

body[fds] .td-data-table-cell .mat-icon-button.badge {
  border-top-left-radius: 0px;
  border-top-right-radius: 0px;
}

body[fds] .td-data-table-cell .mat-icon-button.badge[disabled] {
  opacity: .3;
}

body[fds] .td-data-table-column {
  font-size: 12px;
  color: $grey3;
  height: 34px;
  line-height: 34px;
  padding: 0 28px;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}

body[fds] .td-data-table-column .fa-caret-up, body[fds] .td-data-table-column .fa-caret-down {
  color: $blue-grey1;
  font-size: 12px;
  margin-bottom: 2px;
}

body[fds] td-paging-bar {
  color: $grey3;
}

body[fds] td-paging-bar mat-select .mat-select-value, body[fds] td-paging-bar mat-select .mat-select-arrow {
  color: $blue-grey1;
}

body[fds] .table-title {
  font-size: 20px;
  color: $grey1;
  min-width: 250px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 50%;
  margin-right: 10px;
}

body[fds] div .td-data-table {
  border-bottom: 2px solid $grey7;
  border-right: 1px transparent;
  border-left: 1px transparent;
}
