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

html, body {
  height: 100%;
}

body {
  font-family: "Open Sans", sans-serif;
  font-size: 15px;
  overflow-x: hidden;
  font-weight: 300;
}

body.modal-open {
  overflow: hidden;
}

.alignleft, .al {
  float: left;
}

.alignright, .ar {
  float: right;
  left: 26px;
  z-index: 1010;
}

.aligncenter, .ac {
  margin-left: auto;
  margin-right: auto;
}

.mt-5 {
  margin-top: 5px;
}

.pr-3 {
  padding-right: 3px;
}

.pb-50 {
  padding-bottom: 50px;
}
.pb-25 {
  padding-bottom: 25px;
}
.pb-10 {
  padding-bottom: 10px;
}

.full-width {
  width: 100%;
}

.txt-r {
  text-align: right;
}
.txt-l {
  text-align: left;
}

input[type="text"]:not(.mat-input-element),
input[type="number"]:not(.mat-input-element),
input[type="email"]:not(.mat-input-element),
input[type="password"]:not(.mat-input-element),
textarea {
  width: 100%;
  height: 36px;
  padding: 0 10px;
  color: #6e7ca0;
  border: 1px solid transparent;
  background: rgba(247, 247, 247, 0.87);
  transition: border 0.1s ease-out;
  outline: none;
  font: 300 16px/26px "Open Sans", sans-serif;
}

input[type="text"]:not(.mat-input-element):focus,
input[type="number"]:not(.mat-input-element):focus,
input[type="email"]:not(.mat-input-element):focus,
input[type="password"]:not(.mat-input-element):focus,
textarea:focus {
  border: none;
  background: #fff;
  transition: border 0.2s ease-in;
  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[type="text"]:not(.mat-input-element):disabled {
  opacity: 0.4;
  cursor: not-allowed;
  color: rgba(0, 0, 0, 0.38);
  background-color: rgba(0, 0, 0, 0.12);
}

input[type="text"]:not(.mat-input-element)::placeholder,
input[type="number"]:not(.mat-input-element)::placeholder,
input[type="email"]:not(.mat-input-element)::placeholder,
input[type="password"]:not(.mat-input-element)::placeholder,
textarea::placeholder {
  color: #718ba6;
}

.control-group,
.row-wrap {
  position: relative;
  display: flex;
  flex-flow: row wrap;
  padding-bottom: 20px;
}

.row-wrap {
  padding-bottom: 0;
}

.row-wrap .col {
  width: 50%;
}

.control-group .label {
  align-self: center;
  width: 35%;
  color: #718ba6;
  font-size: 15px;
  font-weight: 600;
  text-align: left;
  font-family: "Open Sans", sans-serif;
}

.control-group .control {
  width: 65%;
}

button {
  font-family: "Open Sans", sans-serif;
}

.info_color {
  color: #5bc0de;
}

.primary_color {
  color: #337ab7;
}

.success_color {
  color: #5cb85c;
}

.warning_color {
  color: #f0ad4e;
}

.danger_color {
  color: #d9534f;
}

.list-header {
  width: 100%;
  border-top: 1px solid #edf1f5;
  border-bottom: 1px solid #edf1f5;
  color: #577289 !important;
  font-size: 15px !important;
  font-weight: 600 !important;
}

.dropdown-list {
  .title {
    span {
      .capt {
        margin-right: 50px;
      }
    }
  }

  .capt {
    margin-right: 0px;
    font-size: 13px;
    color: #35afd5;
    font-style: normal;
  }
}

.helper_instruction {
  color: #35afd5;
  overflow: hidden;
  cursor: pointer;
  transition: all 0.45s ease-in-out;

  &:hover {
    color: #3392b0;
  }

  .material-icons {
    padding-right: 5px;
    font-size: 20px;
    vertical-align: top;
    overflow: hidden;
  }
}

.icon-label {
  display: inline-block;
  width: 30px;
  text-align: center;
  vertical-align: middle;
  color: #35afd5;
  line-height: 26px;
}

input[type="file"],
input[type="file"]::-webkit-file-upload-button {
  cursor: pointer;
}

.refresh-icon {
  color: #35afd5;
}

.buttons {
  position: absolute;
  bottom: 9px;
  z-index: 102;
  display: flex;
  justify-content: space-around;
  width: 100%;

  .mat-mini-fab {
    height: 25px;
    width: 25px;

    .mat-button-wrapper {
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 2px 0 0;
      line-height: unset;
    }
  }
}

.shadow-none {
  box-shadow: none !important;
}

.right-sticky {
  right: -15px !important;
}

.cursor-pointer {
  cursor: pointer;
}
