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

.table-wrapper {
  width: 100%;

}

.reporting {
  width: 100%;
  min-width: 1100px;
  overflow: auto;
  border-collapse: inherit;

  .mat-cell {
    vertical-align: middle;
  }

  tr {
    th {
      padding-right: 5px;
      z-index: 2 !important;
      &.th_charges{
        z-index: 3 !important;
      }
    }

    td {
      font-size: 13px;
      padding-left: 15px;

      &.info {
        z-index: 1 !important;
        text-align: center;
        padding: 40px;
      }
    }

    &.filter-row {
      th {
        padding: 5px;
        font-size: 13px;
      }

      .filter-field {
        font-size: 13px;
      }

    }

    &.header-row {
      th {
        font-size: 11px;
        .label{
          padding-left: 0;
        }
      }
    }
  }

  .th_shape {
    width: 10%;
    min-width: 150px;
  }

  .th_user,
  .env_name,
  .service,
  .tags {
    width: 15%;
    min-width: 150px;
    overflow: hidden;
    word-wrap: break-word;
  }

  .tags {
    .label {
      padding-top: 0;
    }
  }

  .service {
    min-width: 175px;
  }

  .env_name {
    width: 16%;
    min-width: 200px;
  }

  .th_project{
    width: 12%;
  }

  .th_type {
    width: 10%;
    min-width: 150px;
  }

  .th_status {
    width: 8%;
    min-width: 150px;
  }

  .th_charges {
    width: 10%;
    min-width: 155px;
    text-align: right;

    .label {
      padding-top: 0;
    }
  }

  .th_project {
    min-width: 150px;
  }

  .tags-col {
    padding: 5px;

    mat-chip {
      min-height: 20px;
      padding: 5px 10px;
      font-size: 13px;
      max-width: 110px !important;
      text-overflow: ellipsis;
      white-space: nowrap;
      display: inline-block;
      line-height: 10px;
      margin: 2px;
    }
  }

  .mat-column-charge {
    text-align: right;
  }

  .header-row {
    position: unset;

    .th_charges {
      padding-top: 0;

      .label {
        padding-top: 12px;
      }
    }

    .label {
      display: inline-block;
      padding-top: 13px;
      vertical-align: super !important;

      .text{
     padding-left: 15px;
      }
    }

    .sort{
      position: absolute;
      bottom: 20px;

      &-arrow{
        width: 6px;
        height: 6px;
        border: 3px solid transparent;
        border-bottom: 3px solid rgba(0,0,0,.54);
        border-left: 3px solid rgba(0,0,0,.54);
        cursor: pointer;

        &.active{
          border-bottom: 3px solid #35afd5;
          border-left: 3px solid #35afd5;
        }
      }

      .down{
        transform: rotate(-45deg);
      }

      .up{
        transform: rotate(135deg);
      }
    }
  }



  .filter-row {
    .actions {
      text-align: right;
    }
  }

  .table-footer{
    position: sticky;
    bottom: 0;
    background: inherit;
    border-top: 1px solid #E0E0E0;
    transform: translateY(-1px);
    border-bottom: none;
    padding-left: 0 !important;
  }
}

.dashboard_table_body {
  td:first-child {
    cursor: default;
  }

  .dropdown-multiselect {
    button {
      font-size: 14px;
      height: 34px;
      padding: 7px 20px;
    }
  }
}

.table-footer{
  position: sticky;
  bottom: 0;
  background: inherit;
  border-top: 1px solid #E0E0E0;
  transform: translateY(-1px);
  border-bottom: none;

  &.total-cost{
    min-width: 140px;
    padding-left: 0 !important;
  }
}

@media screen and (max-width: 1280px) {
  .dashboard_table.reporting {
    .env_name,
    .service,
    .th_type,
    .th_status {
      width: 10%;
    }

    .th_user {
      width: 12%;
    }

    .th_charges {
      width: 6%;
    }

    .user-field {
      word-wrap: break-word;
    }
  }
}
