/*
 Copyright 2020 TATA ELXSI

 Licensed 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.

 Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
 */
/** Styles for the application **/
@use "sass:math";

@import "../../assets/scss/mixins/mixin";
@import "../../assets/scss/variable";
$customnavbar-padding-x: math.div($spacer, 0.5) !default;
* {
  outline: 0;
}
button[type="submit"]:focus,
.sidebar-body button[type="button"]:focus {
  @include box-shadow(0, 0, 0, 0.2rem, lighten($primary, 50%) !important);
}
.btn-danger:focus {
  @include box-shadow(0, 0, 0, 0.2rem, lighten($danger, 30%) !important);
}
.btn-success {
  --bs-btn-hover-bg: #198754;
}
.btn-danger {
  --bs-btn-hover-bg: #cb3424;
  --bs-btn-color: #fff;
  --bs-btn-hover-color: #fff;
  --bs-btn-active-bg: #cb3424;
  --bs-btn-active-color: #fff;
}
body,
.list-overflow,
.scroll-box,
.smarttable-style,
.modal-body-custom-height,
.layout-wrapper,
.CodeMirror-vscrollbar,
.ng-sidebar,
.runninginstances .popover-body,
.resources-chart-popover .popover-body,
.ng-dropdown-panel .scroll-host {
  &::-webkit-scrollbar {
    @include wh-value(10px, null);
  }
  &::-webkit-scrollbar-thumb {
    background-clip: content-box;
    @include border(all, 3, solid, transparent);
    @include roundedCorners(7);
    @include box-shadow(0, 0, 0, 10px, rgba($black, 0.8), inset);
  }
  &::-webkit-scrollbar-button {
    @include wh-value(0, 0);
    @include flexbox(none, null, null, null, null, null);
  }
  &::-webkit-scrollbar-corner {
    @include background(null, transparent, null, null, null);
  }
}
body {
  @include font-family("Roboto");
  @include background(null, $theme-bg-color, null, null, null);
  overflow-x: hidden;
  .osm-logo {
    @include wh-value(100px, auto);
  }
  .bg-light {
    @include background(null, $theme-bg-color !important, null, null, null);
  }
  a {
    text-decoration: none;
    color: $primary;
    &:hover,
    &:focus {
      text-decoration: none;
    }
    &:not([href]),
    &:not([href]):hover {
      color: inherit;
    }
  }
  .badge {
    @include line-height(normal);
    &.badge-pill {
      @include padding-percentage-value(0.2em, 0.6em, 0.2em, 0.6em);
    }
  }
  button {
    outline: none;
    @include box-shadow(0, 0, 0, 0, transparent);
    &:hover,
    &:focus,
    &:active {
      outline: none;
      @include box-shadow(0, 0, 0, 0, transparent !important);
    }
    &.btn-primary,
    &.btn-default,
    &.btn-warning,
    &.btn-outline-primary:hover,
    &.btn-outline-warning:hover {
      color: $white;
      &:hover,
      &:focus,
      &:not(:disabled):not(.disabled):active {
        color: $white;
        @include background(null, $primary, null, null, null);
        border-color: $primary;
      }
      &:disabled {
        cursor: not-allowed;
        background-color: grey;
      }
    }
  }
  .row {
    margin-left: 0;
    margin-right: 0;
  }
  .navbar {
    @include padding-percentage-value(
      $navbar-padding-y,
      $customnavbar-padding-x,
      $navbar-padding-y,
      $customnavbar-padding-x
    );
  }
  .form-control {
    color: #4f5467;
    border-radius: 4px;
    background-color: $white;
    @include roundedCorners(4);
    @include font(null, 12px, null);
    &::placeholder {
      color: $gray-400;
    }
    background-color: $white;
  }
  .header-style {
    @include font(null, 1.2rem, 700);
    color: $primary;
    @include line-height(1.25);
  }
  .cursor-default {
    cursor: default;
  }
  .cursor-pointer {
    cursor: pointer;
  }
  .me-top-5 {
    @include margin-value-percentage(5px, auto, auto, auto);
  }
  .padLeft0 {
    padding-left: 0px;
  }
  .padRight0 {
    padding-right: 0px;
  }
  .mandatory-label {
    @include font(null, 11px, null);
  }
  .dropzone {
    min-height: 50px;
    @include flexbox(table, null, null, null, null, null);
    @include wh-value(100%, 50px);
    @include border(all, 1, dashed, $secondary);
    cursor: pointer;
    .text-wrapper {
      @include padding-value(5, 5, 5, 5);
      @include flexbox(table-cell, null, null, null, null, null);
      vertical-align: middle;
    }
    .file-drop-title {
      @include font(null, 16px, null);
    }
  }
  .close {
    opacity: 1 !important;
    background-color: transparent;
    border: 0;
    position: absolute;
    right: 10px;
    font-size: 1.3125rem;
  }
  .closeVersion {
    text-shadow: none;
  }
  .roles-section {
    .card {
      .card-body {
        background-color: #fff;
      }
      .bg-secondary {
        padding: 11px;
        @include background(null, $gray-400 !important, null, null, null);
      }
    }
  }
  .juju-section {
    .col-form-label {
      position: relative;
      bottom: 3px;
    }
    .card {
      @include roundedCorners(4);
      margin-bottom: 0.25rem;
      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);
      .bg-secondary {
        @include background(null, $primary !important, null, null, null);
        b,
        span {
          color: $white;
        }
      }
      .card-header {
        padding: 0.75rem 1.25rem;
        border-top-left-radius: 4px;
        border-top-right-radius: 4px;
      }
      .card-body {
        border-radius: 2px;
        .seconds-btn-group .active {
          color: $white;
          @include background(null, $primary !important, null, null, null);
        }
        @include border(all, 2, dashed, $primary);
        @include padding-value(5, 5, 5, 5);
        border-top: 0;
        table {
          th,
          td {
            color: $body-color;
          }
          thead th {
            font-size: 12px;
            color: $body-color;
          }
          tbody th i.active-icon {
            font-size: 10px;
          }
        }
      }
      background-color: #fff;
    }
  }
  .card {
    margin-bottom: 1rem;
  }
  .custom-card {
    @include border(top, 3, solid, $primary);
    @include roundedCorners(3);
    .custom-card-body {
      @include padding-value(15, 15, 15, 15);
      background-color: #fff;
    }
  }
  table-cell-default-editor select-editor select {
    @include wh-value(null, calc(2rem + 8px) !important);
    @include padding-value(0, 10, 0, 10);
  }
  .edit-packages .CodeMirror {
    min-height: 400px !important;
  }
  .new-vim .CodeMirror {
    @include border(all, 1, solid, #eee !important);
  }
  .table-layout-fixed {
    table-layout: fixed;
    word-wrap: break-word;
  }
  .border-radius-default {
    @include roundedCorners(3);
  }
  /** Model Popup-Design **/
  .modal-header {
    .close {
      top: 10px;
    }
  }
  .modal-content {
    background-color: #fff;
  }
  .modal-body-custom-height {
    background-color: #fff !important;
    color: $body-color;
    max-height: 65vh;
    overflow-y: auto;
  }
  /** Hide input clear icon in IE */
  input::-ms-clear {
    @include flexbox(none, null, null, null, null, null);
  }
  /** Overwrite the tooltip z-index */
  .tooltip {
    z-index: 1010;
  }
  /** Popover Header **/
  .popover-header {
    margin-top: 7px;
    color: $primary;
    @include background(null, $theme-bg-color, null, null, null);
  }
  /** Vim Show running instance Details **/
  .runninginstances {
    width: 200px;
    margin-top: 10px;
    .popover-body {
      max-height: 200px;
      overflow-y: scroll;
      background-color: $white !important;
    }
  }
  .resources-chart-popover {
    margin-top: 4px;
    max-width: 60% !important;
    width: 600px !important;
    @include font-family("Roboto");
    .popover-body {
      max-height: 60vh;
      overflow-y: scroll;
      background-color: #fff !important;
    }
  }
  /****************************************************************************/
  /************************** Smart table custom design ***********************/
  /****************************************************************************/
  ng2-smart-table {
    background-color: #fff;
    background-color: none;
    @include font(null, 15px, null);
    color: $gray-700;
    .form-control {
      @include wh-value(null, auto);
    }
    &.dataTables_empty td {
      text-align: center;
    }
    ng2-smart-table-title {
      * {
        @include font(null, 12px, null);
      }
      a {
        color: $gray-700 !important;
        @include flexbox(block, null, null, null, null, null);
        text-decoration: none;
        &::after {
          content: "\f0dc" !important;
          @include font-family("Font Awesome 5 Free");
          float: right;
          color: $gray-500;
          @include wh-value(0, 0);
        }
        &.asc::after {
          content: "\f0de" !important;
          @include font-family("Font Awesome 5 Free");
          float: right;
          color: $gray-500;
        }
        &.desc::after {
          content: "\f0dd" !important;
          @include font-family("Font Awesome 5 Free");
          float: right;
          color: $gray-500;
        }
        &:hover {
          text-decoration: none !important;
        }
        &.sort.desc::after {
          transform: none !important;
          margin-bottom: 0;
        }
        &.sort.asc::after,
        &.sort.desc::after {
          content: "";
          @include flexbox(inline-block, null, null, null, null, null);
          @include wh-value(0, 0);
          @include border(all, 0, solid, transparent !important);
          margin-bottom: 0 !important;
        }
      }
      span {
        color: $gray-700;
      }
    }
    ng2-smart-table-cell {
      word-break: break-word;
      table-cell-view-mode {
        @include font(null, 12px, null);
        .icon-label {
          @include font(null, 20px, null);
          @include flexbox(inline-block, null, null, null, null, null);
          @include wh-value(100px, 0);
          text-align: center;
          cursor: default;
        }
      }
    }
    .ng2-smart-filter {
      background-color: #fff;
      @include wh-value(null, calc(2rem + 2px) !important);
      @include font(null, 12px, null);
      margin-top: 6px;
    }
    input {
      background-color: #fff !important;
    }
    table.list-data {
      tr td,
      tr th {
        @include padding-value(2, 10, 2, 10);
        vertical-align: middle !important;
        background-color: #fff;
        color: grey;
      }
      input[type="checkbox"] {
        padding: 6px 6px;
        border-color: rgba(0, 0, 0, 0.5);
        &:checked {
          background-color: $blue !important;
          border: black;
        }
      }
      tbody {
        tr.selected {
          background: none !important;
        }
      }
    }
    default-table-filter {
      select-filter {
        select.form-control {
          background-color: #fff !important;
          @include flexbox(inline-block, null, null, null, null, null);
          @include wh-value(null, calc(1.5rem + 2px) !important);
          vertical-align: middle;
          background: $white
            url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E")
            no-repeat right 0.75rem center;
          background-size: 8px 10px;
          @include border(all, 1, solid, $gray-200);
          @include roundedCorners(2);
          -webkit-appearance: none;
          -moz-appearance: none;
          appearance: none;
          &::-ms-expand {
            visibility: hidden;
          }
        }
      }
      select-filter {
        select {
          @include roundedCorners(4);
        }
      }
      input-filter {
        input[type="text"] {
          background-color: #fff;
          @include position_value(relative, null, null, null, null);
        }
        &:after {
          color: #afb5c1;
          @include position_value(relative, -26px, null, null, 100%);
          content: "\f002";
          @include font("Font Awesome 5 Free", 10px, null);
          @include padding-value(0, 0, 0, 2);
          color: $gray-500;
        }
      }
    }
    ng2-smart-table-pager {
      @include flexbox(null, null, row-reverse, null, null, null);
      @include padding-value(5, 20, 5, 20);
      .ng2-smart-pagination {
        .ng2-smart-page-item {
          @include font(null, 10px, null);
          a {
            &:hover {
              text-decoration: none;
            }
          }
          .ng2-smart-page-link {
            background-color: #fff;
            box-shadow: none;
            @include font(null, 12px !important, null);
            &.page-link {
              text-align: center;
              vertical-align: middle;
              color: $primary;
              @include border(all, 1, solid, $primary !important);
              &:hover {
                @include background(null, $primary !important, null, null, null);
                color: $white;
              }
            }
          }
          span.ng2-smart-page-link.page-link {
            color: $white;
            @include background(null, $primary !important, null, null, null);
            @include border(all, 1, solid, $primary !important);
          }
        }
      }
    }
  }
  /****************************************************************************/
  /*********************** Button styles under list class *********************/
  /****************************************************************************/
  .list {
    &.action {
      button.btn.btn-primary {
        @include padding-value(2, 8, 2, 8);
      }
    }
    button:focus {
      outline: 0;
      @include box-shadow(0, 0, 0, 0, transparent);
    }
    button.btn.btn-primary {
      color: $primary;
      @include background(null, $white, null, null, null);
      &:not(.active:hover) {
        @include background(null, $white, null, null, null);
      }
      &:active {
        color: $primary;
        @include background(null, $white, null, null, null);
      }
      &.action-button {
        color: $white;
        @include background(null, $primary !important, null, null, null);
        &:hover {
          @include background(null, $primary, null, null, null);
        }
      }
    }
  }
  /****************************************************************************/
  /*********************** List Action Dropdown section ***********************/
  /****************************************************************************/
  .list-action-dropdown {
    background-color: #fff;
    @include border(all, 1, solid, $primary);
    @include padding-value(0, 0, 0, 0);
    margin-top: 3px;
    button.btn.btn-primary {
      @include background(null, transparent, null, null, null);
      @include padding-value(8, 8, 8, 8);
      @include roundedCorners(0);
      background-color: #fff;
      color: $primary;
      &:hover {
        @include background(null, $primary, null, null, null);
        color: $white;
      }
      &:not(:last-child) {
        @include border(bottom, 1, solid, $primary);
      }
    }
  }
  /****************************************************************************/
  /*********************** Custom tabel design in topology ********************/
  /****************************************************************************/
  .custom-table {
    border: 1px solid rgba(0, 0, 0, 0.1);
    td:first-child {
      @include font(null, null, bold);
      text-align: right;
    }
    th,
    td {
      border: 1px solid rgba(0, 0, 0, 0.1);
      @include padding-value(5, 7, 5, 7);
      @include font(null, 10px, null);
      @include line-height(15px);
    }
  }
  /****************************************************************************/
  /************************** Ng select custom design *************************/
  /****************************************************************************/
  .ng-select {
    &.is-invalid .ng-select-container {
      @include border(all, 1, solid, $red);
    }
    .ng-select-container {
      @include border(all, 1, solid, $gray-200);
      .ng-value-container .ng-placeholder {
        color: $gray-80;
      }
    }
  }
  .ng-dropdown-panel .scroll-host {
    overflow-x: auto;
  }
  .ng-dropdown-panel .ng-dropdown-panel-items .ng-option {
    text-overflow: unset;
    overflow: unset;
  }
  /****************************************************************************/
  /******************** Custom nav section for default status *****************/
  /****************************************************************************/
  .list-utilites-actions {
    margin-left: 10px;
    @include flexbox(flex, null, row, null, center, null);
    nav.custom-items-config {
      @include position_value(relative, null, null, null, null);
      @include roundedCorners(3);
      span {
        @include font(null, 13px, 600);
        @include flexbox(inline-block, null, null, null, null, null);
        @include position_value(relative, null, null, null, null);
        text-decoration: none;
        text-align: center;
        @include margin-value(0, 0, 0, 10);
        &:first-child {
          @include margin-value(0, 0, 0, 0);
        }
        i {
          @include font(null, 14px, null);
          @include margin-value(0, 5, 0, 0);
        }
      }
    }
  }
  /****************************************************************************/
  /************************* File upload custom design ************************/
  /****************************************************************************/
  .fileupload {
    border: 1px solid;
    border: 1px solid;
    border-color: #054c8c;
    border-radius: 4px;
  }
  input[type="file"] {
    width: 100%;
  }
  input[type="file"]::file-selector-button {
    border: none;
    background: #054c8c;
    padding: 7px 10px;
    border-radius: 2px;
    color: #fff;
  }
  .custom-file-label {
    color: $primary;
    @include roundedCorners(4);
    @include border(all, 1, solid, $primary);
    overflow: hidden;
    @include margin-value(0, 0, 0, 0);
    text-overflow: ellipsis;
    white-space: nowrap;
    padding-right: 80px;
    &::after {
      color: $white;
      @include background(null, $primary, null, null, null);
    }
  }
  /****************************************************************************/
  /************************* Notifier Container Design ************************/
  /****************************************************************************/
  .notifier__container {
    ul {
      @include margin-value(0, 0, 0, 0);
    }
  }
  /***************************************************************************/
  /************************* Topology Common Design **************************/
  /****************************************************************************/
  .ns-composer-form,
  .vnf-composer-form,
  .ns-instance-form {
    @include font(null, 12px, null);
    .ns-svg,
    .vnf-svg {
      @include wh-value(30px, 25px);
    }
    .svg-container {
      min-height: 60vh;
    }
    .form-control {
      @include font(null, 10px, null);
    }
    .scroll-box {
      max-height: 285px;
      overflow-y: scroll;
    }
    .border-all {
      @include border(all, 1, solid, $primary);
    }
    .list-group {
      &.inside-svg {
        .list-group-item {
          @include padding-value(3.2, 8, 3.2, 8);
        }
      }
      &.dragable {
        .list-group-item {
          cursor: move;
          @include padding-value(4.8, 4.8, 4.8, 4.8);
          @include margin-value(0, 0, 5, 0);
          @include background(null, $gray-200, null, null, null);
          @include flexbox(flex, null, null, null, center, null);
          border: none;
          .span-overflow-text {
            color: $black;
            @include wh-value(90%, null);
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            @include line-height(25px);
          }
        }
      }
    }
    .drag-icon {
      color: $gray-600;
      @include font(null, 15px, null);
    }
    .ctrl {
      cursor: move;
    }
    svg {
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      -o-user-select: none;
      user-select: none;
      image.node:hover,
      circle.node:hover {
        opacity: 0.7 !important;
      }
      image.active,
      circle.active {
        opacity: 0.7 !important;
      }
      path.link {
        stroke: $dark-gray;
        stroke-width: 2px;
        fill: none;
        &:hover {
          stroke-width: 4px;
        }
        .dragline {
          pointer-events: none;
        }
      }
      .node_text {
        text-anchor: middle;
        pointer-events: none;
      }
      :not(.ctrl) {
        cursor: pointer;
      }
    }
    fieldset {
      @include border(all, 1, solid, $primary);
      legend {
        float: none;
        @include padding-value(0, 5, 0, 5);
        @include font(null, 15px, null);
        color: $primary;
        &.vl-legend,
        &.element-legend {
          @include wh-value(55%, null);
        }
        &.vnfd-legend {
          @include wh-value(25%, null);
        }
      }
      .font-weight-bold {
        font-weight: 700 !important;
      }
    }
    .btn-icon {
      @include wh-value(36px, 36px);
      text-align: center;
      @include margin-value(0, 10, 10, 0);
    }
    .topology-btn {
      color: $primary;
      border-color: $primary;
      &:hover,
      &.pinned {
        color: $white !important;
        @include background(null, $primary !important, null, null, null);
      }
    }
    .badgegroup {
      @include flexbox(flex, flex-end, row, center, center, null);
    }
  }
  .ns-topology-sidebar-container,
  .vnf-topology-sidebar-container,
  .ns-instance-topology-sidebar-container {
    @include position_value(absolute !important, 0px, null, null, 0px);
    .ng-sidebar {
      @include wh-value(27%, null);
      @include background(null, $white, null, null, null);
      @include border(all, 1, solid, $gray-300);
      .sidebar-header {
        @include background(null, $modalheader-gray, null, null, null);
        @include padding-value(5, 10, 5, 10);
        @include border(bottom, 1, solid, $gray-300);
        @include flexbox(flex, space-between, null, center, center, null);
        .topology_title {
          color: $primary;
        }
      }
      .sidebar-body {
        @include padding-value(10, 5, 10, 5);
      }
    }
    .ng-sidebar__content {
      button {
        @include position_value(absolute, 45%, null, null, 0px);
        @include background(null, $primary, null, null, null);
      }
      .detail-sidebar {
        @include flexbox(inline-block, null, null, null, null, null);
        @include position_value(relative, null, null, null, null);
        animation: push 0.5s infinite linear;
      }
    }
    @keyframes push {
      0% {
        right: 0;
      }
      50% {
        right: -0.2em;
      }
      70% {
        right: -0.3em;
      }
      100% {
        right: 0;
      }
    }
  }
  /** Switch Design **/
  .switch {
    @include position_value(relative, null, null, null, null);
    @include flexbox(inline-block, null, null, null, null, null);
    @include wh-value(50px, 15px);
    @include margin-value(0, 0, 0, 0);
    input {
      opacity: 0;
      @include wh-value(0px, 0px);
      &:checked + .slider {
        @include background(null, $gray-400, null, null, null);
        &:before {
          @include background(null, $pure-red, null, null, null);
          left: 5px;
          animation: pulse 2s infinite;
          -webkit-transform: translateX(26px);
          -ms-transform: translateX(26px);
          transform: translateX(26px);
        }
        .on {
          @include flexbox(block, null, null, null, null, null);
        }
        .off {
          @include flexbox(none, null, null, null, null, null);
        }
      }
    }
    .slider {
      @include position_value(absolute, 0, 0, 0, 0);
      cursor: pointer;
      @include background(null, $gray-400, null, null, null);
      -webkit-transition: 0.4s;
      transition: 0.4s;
      box-shadow: 0 0 1px $gray-400;
      &.round {
        @include roundedCorners(30);
        &:before {
          @include roundedCornersPercentage(50%);
        }
      }
      &:before {
        @include position_value(absolute, null, null, -2px, 0px);
        @include wh-value(20px, 20px);
        @include background(null, $white, null, null, null);
        content: "";
        -webkit-transition: 0.4s;
        transition: 0.4s;
        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
      }
      .on {
        @include flexbox(none, null, null, null, null, null);
        @include position_value(absolute, 50%, null, null, 35% !important);
      }
      .on,
      .off {
        @include position_value(absolute, 50%, null, null, 65%);
        color: $primary;
        transform: translate(-50%, -50%);
        @include font(null, 11px, bold);
      }
    }
    @-webkit-keyframes pulse {
      0% {
        -webkit-box-shadow: 0 0 0 0 rgba(204, 89, 44, 0.4);
      }
      70% {
        -webkit-box-shadow: 0 0 0 10px rgba(204, 89, 44, 0);
      }
      100% {
        -webkit-box-shadow: 0 0 0 0 rgba(204, 89, 44, 0);
      }
    }
    @keyframes pulse {
      0% {
        -moz-box-shadow: 0 0 0 0 rgba(204, 89, 44, 0.4);
        box-shadow: 0 0 0 0 rgba(204, 89, 44, 0.4);
      }
      70% {
        -moz-box-shadow: 0 0 0 10px rgba(204, 89, 44, 0);
        box-shadow: 0 0 0 10px rgba(204, 89, 44, 0);
      }
      100% {
        -moz-box-shadow: 0 0 0 0 rgba(204, 89, 44, 0);
        box-shadow: 0 0 0 0 rgba(204, 89, 44, 0);
      }
    }
  }
}
/****************************************************************************/
/************************** MEDIA QUERIES ***********************************/
/****************************************************************************/
@media (max-width: map-get($grid-breakpoints, md)) {
  .smarttable-style {
    @include flexbox(block, null, null, null, null, null);
    overflow-x: auto;
    white-space: nowrap;
  }
}

.text-captilize {
  text-transform: capitalize;
}
.text-info {
  color: $secondary !important;
}
.hide {
  @include flexbox(none, null, null, null, null, null);
}
.title-bar {
  .name-width {
    @include wh-value(20%, null);
  }
  .id-width {
    @include wh-value(25%, null);
  }
}
.filter-actions {
  button {
    @include roundedCorners(10);
    @include padding-percentage-value(0.2rem, 1rem, 0.2rem, 1rem);
    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);
    border: none;
  }
}

.custom-select {
  background-color: #fff !important;
  padding: 0.375rem 1.75rem 0.375rem 0.75rem;
  @include background(
    url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='100' height='10' viewBox='0 0 10 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e"),
    var(--input-bg-color),
    null,
    no-repeat,
    0px 10px
  );
}
/****************************************************************************/
/************************** HEALING STYLE ***********************************/
/****************************************************************************/

app-healing {
  .card {
    border-radius: 15px;
    width: auto;
    height: auto;
    margin-bottom: 5px;
  }

  .card-body {
    flex: 1 1 auto;
    min-height: 1px;
    padding: 5px;
  }

  .form-group {
    margin-bottom: 1px;
    .row {
      margin-bottom: 16px;
    }
  }

  .col-sm-1 {
    bottom: 20px;
  }

  .col-5 {
    left: 79px;
  }
}

.table thead th {
  vertical-align: bottom;
  border-bottom: 2px solid rgba(0, 0, 0, 0.1);
}
.table th,
.table td {
  background-color: #fff;
  padding: 5px;
  vertical-align: top;
  border-top: 1px solid rgba(0, 0, 0, 0.1);
  border-bottom: transparent;
}
.table b {
  background: none;
  color: $body-color;
  padding-right: 0px;
  padding-left: 0px;
}
