/*!
 * 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.
 */
.billing-page-wrapper{
  height: calc(100vh - 130px);
  scroll-behavior: smooth;
  margin-left: -15px;
  margin-right: -15px;
  padding-left: 15px;
  padding-right: 15px;
  &.scroll{
    overflow: auto;
  }
}


.table-wrapper {
  width: 100%;
  display: block;
  max-height: calc(100vh - 130px);
  overflow: unset;
  position: relative;
  scroll-behavior: smooth;
  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;
  }
}

.charges-th {
  right: 0px !important;
}

.wrapper{
  position: relative;

  .nav-buttons {
    position: absolute;
    z-index: 105;
    bottom: 0;
    display: flex;
    justify-content: space-around;
    align-items: center;
    height: 48px;
    background-color: #ffffff;
  
    .mat-mini-fab {
      height: 25px;
      width: 25px;
  
      .mat-button-wrapper {
        padding: 0;
        line-height: unset;
        display: flex;
        align-items: center;
        justify-content: center;
        padding-top: 2px;
      }
    }
  }
  
  button{
    display: flex;
    align-items: center;
    background-color: #fff;
    box-shadow: none;
    mat-icon{
      color: lightgrey;
      &.highlight{
        color: #35afd5;
      }
    }
  }
}

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

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

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

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

      &.mat-cell{
        border-bottom-color: #e3e5e8;
      }

      &.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 {

        .label{
          padding-left: 0;
          position: relative;
          font-size: 13px;
        }
      }
    }
  }

  .th_shape {
    width: 12%;
    min-width: 150px;
    z-index: 10 !important;
  }

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

  .service{
    width: 10%;
  }

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

  .service {
    min-width: 175px;
    z-index: 9 !important;
  }

  .env_name {
    width: 21%;
    min-width: 200px;
    z-index: 15 !important;
    padding-left: 0;
  }

  .th_user{
    z-index: 14 !important;
  }

  .th_empty {
    width: 3%;
    z-index: 4 !important;
  }

  .th_project{
    width: 12%;
    z-index: 13 !important;
    min-width: 150px;
  }

  .th_type {
    width: 12%;
    min-width: 170px;
    z-index: 12 !important;
  }

  .th_status {
    width: 8%;
    min-width: 150px;
    z-index: 11 !important;
  }

  .th_charges {
    min-width: 135px;
    text-align: right;

    .label {
      padding-top: 0;
    }
  }

  .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,
  .filter-row-item:last-child,
  .table-footer.mat-column-charge{
    text-align: right;
    background-color: #f8f8f8;
  }

  .header-row {
    position: unset;

    .th_charges {
      padding-top: 0;

      .label {
        padding-top: 10px;
      }

      &.label-header{
        box-shadow: none;
        border-bottom: 1px solid lightgrey !important;
      }
    }

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

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

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

      &-user,
      &-project{
        right: -15px;
      }

      &-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;

      button{
        background: inherit;
      }
    }
  }

  .table-footer{
    position: sticky;
    bottom: -1px;
    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: -1px;
  background: inherit;
  border-top: 1px solid #E0E0E0;
  transform: translateY(-1px);
  border-bottom: none;

  &.total-cost{
    min-width: 140px;
    padding-left: 0 !important;
    text-align: right;
    padding-right: 25px;
    position: sticky;
    right: 0;
    z-index: 101;
  }
}

.user-name-cell {
  cursor: default;
}

.right {
  position: absolute;
  right: 0;
}

.wrapper{
  .table-wrapper{
    .reporting{
      tr{
        th.th_charges.index-105,
        .filter-row-item.index-105
        {
          z-index: 105 !important;
        }
      }
    }
  }
}



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

    .th_user {
      width: 12%;
    }

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

.totaL-item{
  position: absolute;
  right: 0;
  padding-right: 24px;
  z-index: 115;
  font-size: 13px;

  &.scrollbar-right{
    right: 3px;
  }

  &.scrollbar-bottom{
    bottom: 3px;
  }

  span {
    padding-left: 2px;
  }
}



@-moz-document url-prefix() {
  .totaL-item {
    &.scrollbar-right{
      right: 8px !important;
    }

    &.scrollbar-bottom{
      bottom: 8px !important;
    }
  }
}
