/*
 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)
*/
@import "../../assets/scss/mixins/mixin";
@import "../../assets/scss/variable";

.login-container {
  @include wh-value(100%, 100vh);
  @include flexbox(flex, center, null, null, center, null);
  @include background(url("../../images/login_background.jpg"), null, cover, no-repeat, center);
  background-attachment: fixed;
  flex-wrap: wrap;
  .wrap-login {
    @include background(
      linear-gradient(
        to left bottom,
        #00c0ef,
        #00b3f9,
        #3ea3fd,
        #7190f8,
        #9c78e8,
        #a86cdd,
        #b25fd1,
        #bb51c3,
        #b151c4,
        #a652c6,
        #9b53c6,
        #9053c7
      ),
      null,
      null,
      null,
      null
    );
    @include roundedCorners(15);
    @include flexbox(flex, space-between, null, null, null, null);
    @include position_value(relative, null, null, null, null);
    @include box-shadow(0px, 3px, 10px, 0px, rgba($black, 0.5));
    @include padding-value(20, 30, 20, 30);
    flex-wrap: wrap;
    color: $white;
    overflow: visible;
    .login-logo {
      @include flexbox(flex, center, null, null, center, null);
      @include position_value(absolute, -80px, null, null, 95px);
      @include box-shadow(1px, 2px, 0px, 0px, $cerise-pink);
      @include margin-value(0, 0, 10, 0);
      @include wh-value(160px, 150px);
      @include background(null, $white, null, null, null);
      @include roundedCornersPercentage(50%);
      img {
        @include wh-value(130px, auto);
        @include position_value(null, 50px, null, null, null);
      }
    }
    .login-form {
      @include wh-value(290px, null);
      @include padding-value(70, 0, 0, 0);
      text-align: center;
      .wrap-input {
        @include position_value(relative, null, null, null, null);
        @include wh-value(100%, null);
        @include margin-value(0, 0, 10, 0);
        z-index: 1;
        .input-control {
          @include font(null, 15px, null);
          @include line-height(1.5);
          @include wh-value(100%, 42px);
          @include padding-value(0, 30, 0, 65);
          @include flexbox(block, null, null, null, null, null);
          @include roundedCorners(25);
          @include border(all, 0, solid, $gray-80);
          @include background(null, $white, null, null, null);
          &:focus + .input-icon {
            color: $cerise-pink;
            @include padding-value(0, 0, 0, 25);
          }
        }
        .input-icon {
          @include font(null, 13px, null);
          @include flexbox(flex, null, null, null, center, null);
          @include position_value(absolute, null, null, 0, 0);
          @include wh-value(100%, 100%);
          @include padding-value(0, 0, 0, 35);
          @include roundedCorners(25);
          @include transition(all, 0.5s, null, null);
          pointer-events: none;
          color: $gray-600;
        }
      }
      .submit-btn {
        @include background(null, $white, null, null, null);
        @include roundedCornersPercentage(50%);
        @include border(all, 0, solid, $gray-80);
        @include transition(all, 0.3s, null, null);
        @include box-shadow(1px, 5px, 5px, 0px, rgba($black, 0.3), inset);
        cursor: pointer;
        @include font(null, 25px, null);
        @include wh-value(60px, 60px);
        @include margin-value(0, 0, 10, 0);
        @include padding-value(0, 0, 0, 0);
        color: $cerise-pink;
        &:hover {
          @include box-shadow(1px, 5px, 10px, 0px, rgba($black, 0.3));
        }
        .fa {
          @include transition(all, 0.4s, null, null);
          @include flexbox(block, null, null, null, null, null);
          @include padding-value(18, 18, 18, 18);
          &:hover {
            transform: scale(1.2);
          }
        }
      }
      .input-validation-msg {
        @include roundedCorners(25);
        @include background(null, $cerise-pink, null, null, null);
        @include margin-value(0, 0, 10, 0);
        @include padding-value(1, 0, 1, 15);
        @include font(null, 11px, null);
        color: $white;
        text-align: left;
      }
    }
  }
}
.login-footer {
  @include flexbox(flex, space-between, null, null, center, null);
  @include position_value(fixed, null, null, 0px, null);
  @include background(null, $purple, null, null, null);
  @include wh-value(100%, 40px);
  @include padding-value(0, 10, 0, 10);
  color: $white;
  opacity: 0.9;
  a {
    @include font(null, null, bold);
    color: $white;
    &:hover {
      text-decoration: underline;
    }
  }
}