/*
 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 **/
@import "../../assets/scss/mixins/mixin";
@import "../../assets/scss/variable";
$customnavbar-padding-x: ($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);
}
body,
.list-overflow,
.scroll-box,
.smarttable-style,
.modal-body-custom-height,
.layout-wrapper, .CodeMirror-vscrollbar, .ng-sidebar, .runninginstances .popover-body {
  &::-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 {
    color: $primary;
    &:hover,
    &:focus {
      text-decoration: none;
    }
  }
  .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;
      }
    }
  }
  .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 {
    @include roundedCorners(4);
    @include font(null, 12px, null);
    &::placeholder {
      color: $gray-400;
    }
  }
  .modal-dialog {
    max-width: 600px;
  }
  .header-style {
    @include font(null, 1.2rem, 700);
    color: $primary;
    @include line-height(1.25);
  }
  .cursor-default {
    cursor: default;
  }
  .cursor-pointer {
    cursor: pointer;
  }
  .mr-top-5 {
    @include margin-value-percentage(5px, auto, auto, auto);
  }
  .padLeft0 {
    padding-left: 0px;
  }
  .padRight0 {
    padding-right: 0px;
  }
  .mandatory-label {
    @include font(null, 10px, 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;
  }
  .roles-section {
    .card {
      .bg-secondary {
        @include background(null, $gray-400 !important, null, null, null);
      }
    }
  }
  .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);
    }
  }
  table-cell-default-editor select-editor select {
    @include wh-value(null, calc(2rem + 8px) !important);
    @include padding-value(0, 10, 0, 10);
  }
  .CodeMirror {
    min-height: 400px !important;
  }
  .table-layout-fixed {
    table-layout: fixed;
    word-wrap: break-word;
  }
  .border-radius-default {
    @include roundedCorners(3);
  }
  /** Model Popup-Design **/
  .modal-body-custom-height {
    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 {
    color: $primary;
    @include background(null, $theme-bg-color, null, null, null);
  }
  /** Vim Show running instance Details **/
  .runninginstances{
     width:200px;
     .popover-body{
      max-height: 200px;
      overflow-y: scroll;
     }
  }
  /****************************************************************************/
  /************************** Smart table custom design ***********************/
  /****************************************************************************/
  ng2-smart-table {
    @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 {
      @include wh-value(null, calc(2rem + 2px) !important);
      @include font(null, 12px, null);
      margin-top: 6px;
    }
    table.list-data {
      tr td,
      tr th {
        @include padding-value(2, 10, 2, 10);
        vertical-align: middle !important;
      }
      tbody {
        tr.selected {
          background: none !important;
        }
      }
    }
    default-table-filter {
      select-filter {
        select.form-control {
          @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"] {
          @include position_value(relative, null, null, null, null);
        }
        &:after {
          @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 {
            @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);
        }
      }
    }
    .dropdown-menu {
      @include border(all, 1, solid, $primary);
      @include padding-value(0, 0, 0, 0);
      button.btn.btn-primary {
        @include background(null, transparent, null, null, null);
        @include padding-value(8, 8, 8, 8);
        @include roundedCorners(0);
        &: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 {
    td:first-child {
      @include font(null, null, bold);
      text-align: right;
    }
    th,
    td {
      @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;
      }
    }
  }
  /****************************************************************************/
  /******************** Custom nav section for default status *****************/
  /****************************************************************************/
  .list-utilites-actions {
    @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 ************************/
  /****************************************************************************/
  .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 {
            @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 {
        @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);
        }
      }
    }
    .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;
      }
    }
  }
}
/****************************************************************************/
/************************** MEDIA QUERIES ***********************************/
/****************************************************************************/
@media (max-width: map-get($grid-breakpoints, md)) {
  .smarttable-style {
    overflow-x: auto;
    white-space: nowrap;
  }
}