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

.audit-table-wrapper {
  position: relative;
  width: 100%;
  max-height: calc(100vh - 130px);
  max-height: -moz-calc(100vh - 130px);
  max-height: -webkit-calc(100vh - 130px);
  overflow: visible;
  box-shadow: 0 3px 5px -1px rgba(0,0,0,.2), 0 6px 10px 0 rgba(0,0,0,.14), 0 1px 18px 0 rgba(0,0,0,.12);

  &.scroll{
    overflow: auto;
  }

  .audit {
    width: 100%;
    min-width: 1100px;
    overflow: auto;
    border-collapse: inherit;
    box-shadow: none;

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

    tr {
      .th_user {
        width: 19%;
        z-index: 9 !important;
      }

      .th_action {
        width: 11%;
        z-index: 8 !important;
        max-width: 250px;
      }

      .th_date {
        width: 14%;
        z-index: 10 !important;
        padding-left: 0;
        max-width: 240px;
      }

      .th_project {
        width: 11%;
        z-index: 7 !important;
        max-width: 206px;
      }

      .th_resource {
        width: 14%;
        z-index: 5 !important;
        max-width: 240px;
      }

      .th_resource-type {
        width: 14%;
        z-index: 6 !important;
        max-width: 240px;
      }

      .th_buttons {
        width: 6%;
        z-index: 4 !important;
      }

      th {
        padding-right: 5px;
        z-index: 2 !important;

        &.th_charges {
          z-index: 3 !important;
        }
      }

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

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

      &.filter-row {
        th {
          padding: 5px;
          font-size: 13px;
          z-index: 103 !important;
        }

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

      }

      &.header-row {
        th {
          font-size: 11px;

          .label {
            padding-left: 0;
          }
        }
      }
    }


    .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;
        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: 20px;
        }
      }

      .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);
        }
      }
    }
  }

  .table-item-wrapper{
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding-right: 10px;
    span{
      cursor: default;

      &::after{
        content: '';
        display: block;
      }
    }
  }

  .action-wrapper {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding-right: 10px;
    span{
      max-width: 85%;
    }

    .audit-info {
      color: lightgray;
      cursor: pointer;
      margin-left: 5px;
    }
  }

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

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

.selected-items-wrapper {
  display: flex;
  align-items: center;

  .select-wrapper {
    margin-left: 20px;
    width: 80px;
  }
}

.pagination-wrapper {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-right: 30px;

  .not-active {
    .navigation-butts {
      color: lightgray;
    }
  }

    .navigation-butts {
      cursor: pointer;
      color: #35afd5;

      .not-active {
        color: lightgray;
      }
    }
  }


.audit-actions {
  text-align: right;
}

.audit-user {
  padding-left: 20px;
}

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

