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

::ng-deep .mat-option:first-child .mat-pseudo-checkbox {
  display: none;
}

.caret {
  width: 40px;
  color: #4ab8dc;
  border: none;
  border-left: 1px solid #ececec;
  background-color: #fff;
  position: absolute;
  right: 0;
  top: 0px;
  height: 36px;
  line-height: 1;
  cursor: pointer;

  &.not-allowed {
    background-color: #dcdcdc;
  }
}

.content-box {
  padding: 20px 30px 35px;
  height: 85vh;
  overflow-y: auto;
}

.no-details {
  color: #d8d8d8;
}

.stepper {
  height: 190px;
  margin-top: 10px;

  .inner-step {
    height: 70px;
    padding: 5px;
    display: flex;
    justify-content: center;
    flex-direction: column;
    text-align: center;
    position: relative;

    input {
      width: 490px;
      align-self: center;
    }

    .error {
      position: absolute;
      bottom: 2px;
    }

    .caret {
      i {
        margin-top: 3px;
      }
    }
  }

  .text-center {
    button {
      &:not(:last-child) {
        margin-right: 5px;
      }
    }
  }
}

.mat-horizontal-content-container{
  overflow: visible !important;
}

.selector-wrapper {
  display: flex;
  align-self: center;
  width: 490px;
  height: 36px;
  padding-left: 0;
  font-family: 'Open Sans', sans-serif;
  font-size: 15px;
  font-weight: 300;
  box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
  multi-level-select-dropdown{
    width: 100%;
  }
  mat-form-field {
    width: 100%;

    .mat-form-field-wrapper {
      padding-bottom: 0;
    }

    .mat-icon {
      font-size: 20px;
    }
  }

  .dropdown-multiselect {
    width: 100% !important;

    >button {
      padding: 6px 22px;
    }
  }
}

.list-header {
  padding: 0 15px;
}

.scrolling-content {
  max-height: 450px;
  overflow-x: hidden;
  overflow-y: auto;
  display: block;
  padding: 15px 5px;

  &.stepper-opened {
    height: 250px;
  }
}

.roles {

  .selector-wrapper-edit {
    position: relative;
    display: flex;
    justify-content: space-between;
    height: 36px;
    padding-left: 10px;
    background: #fff;
    box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);

    multi-select-dropdown {
      width: 100%;

      .dropdown-multiselect {
        >button {
          padding: 8px 22px 5px;
        }
      }
    }

    .caret {
      &:hover {
        box-shadow: 0 3px 1px -10px rgba(0, 0, 0, 0.2), 0 2px 1px 0 rgba(0, 0, 0, 0.17), 0 1px 5px 0 rgba(0, 0, 0, 0.12)
      }
    }
  }
}

.groups {
  width: 20%;
}

.users {
  width: 30%;
  padding: 0 10px;
}

.users-list {
  padding: 5px 10px;
  font-family: 'Open Sans', sans-serif;
  font-size: 15px;
  font-weight: 300;
  color: #577289;
  position: relative;

  i {
    color: #FF5722;
    font-size: 18px;
    cursor: pointer;
  }

  .list-selected {
    width: 100%;
    margin-top: 50px;
    height: inherit;
    min-height: 0;
    overflow: hidden;
  }
}


.expanded-panel {
  display: flex;
  align-items: flex-end;

  .add-input-block {
    display: flex;
    height: 36px;
    padding-right: 0;
    outline: none;
    box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);

    input {
      height: 36px;
      padding: 0;
      padding-left: 10px;
      width: 170px;
    }

    .caret {
      width: 50px;
    }
  }
}


mat-expansion-panel-header {
  &.mat-expansion-panel-header {
    font-family: 'Open Sans', sans-serif;
    font-size: 15px;
    font-weight: 300;
    color: #577289;
  }
}

.mat-step-header {
  .mat-step-icon {
    background-color: #36afd5 !important;
  }

  .mat-step-label {
    font-family: 'Open Sans', sans-serif;
    font-size: 16px;
    font-weight: 300;
  }
}

.dashboard_table {
  .dashboard_table_body {
    .actions {
      padding: 10px 0;
    }

    &.filter-row {
      .actions {
        button {
          background: none;

          .mid {
            vertical-align: sub;
          }
        }
      }
    }
  }

  .th_actions {
    width: 10%;
  }
}

.mat-chip:not(.mat-basic-chip) {
  transition: box-shadow 280ms cubic-bezier(.4, 0, .2, 1);
  padding: 7px 0 7px 10px;
  border-radius: 24px;
  cursor: default;
  display: inline-block;
  position: relative;
  padding-right: 25px;
  white-space: nowrap;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
}

mat-chip.mat-chip a {
  position: absolute;
  right: 15px;
}

mat-form-field.chip-list {
  &.mat-form-field {
    position: absolute;
    top: 2px;
    width: 94%;
    font-size: 16px;
    font-weight: 300;
  }
}

.mat-raised-button {
  &.butt {
    &.butt-success {
      margin-left: 0;
    }
  }
}

.multiple-select {
  border-bottom: 1px solid #dedbdb;
  padding: 0;

  a {
    display: inline-block;
    width: 50%;
    padding: 0 15px;
    vertical-align: middle;
    color: #575757;
    cursor: pointer;

    i {
      vertical-align: sub;
      font-size: 20px;
    }

    &:hover {
      color: #4eaf3e;
      background: #f9fafb;
    }

    &.deselect {
      &:hover {
        color: #f1696e;
      }
    }
  }
}

table {
  width: 100%;

  .name {
    width: 15%;
  }

  .roles {
    width: 35%;
  }

  .users {
    width: 35%;
  }

  .actions {
    color: #607d8b;
    width: 10%;
    text-align: center;

    .actions-wrapper{
      height: 41px;
      display: flex;
      align-items: center;
      justify-content: flex-end;
    }

    span {
      transition: all .35s ease-in-out;
      cursor: pointer;

      &.action-disabled{
        cursor: not-allowed;
      }

      .mat-icon {
        font-size: 18px;
        padding-top: 12px;
        &.big-icon{
          font-size: 25px;
          padding-top: 10px;
          transition: .25s;
        }
      }

      &:hover {
        color: darken(#607d8b, 10%);
      }
    }
  }
}
