//
// Checkboxes
// --------------------------------------------------

// Colors
$brand-primary:         darken(#428bca, 6.5%) !default; // #337ab7
$brand-success:         #5cb85c !default;
$brand-info:            #5bc0de !default;
$brand-warning:         #f0ad4e !default;
$brand-danger:          #d9534f !default;

$input-border:                   #ccc !default;
$input-bg:                       #fff !default;

$font-family-icon: 'Font Awesome 5 Free' !default;
$fa-var-check: "\f00c" !default;
$check-icon: $fa-var-check !default;
$abc-border-width: 1px !default;

$awesome-label-inline-margin-left: 0 !default;

@mixin checkbox-variant($parent, $color) {
  #{$parent} input[type="checkbox"]:checked + label,
  #{$parent} input[type="radio"]:checked + label {
    &::before {
      background-color: $color;
      border-color: $color;
    }
    &::after{
      color: #fff;
    }
  }
}

@mixin checkbox-variant-indeterminate($parent, $color) {
  #{$parent} input[type="checkbox"]:indeterminate + label,
  #{$parent} input[type="radio"]:indeterminate + label {
    &::before {
      background-color: $color;
      border-color: $color;
    }
    &::after{
      background-color: #fff;
    }
  }
}

.form-check-label-inline{
  margin-left: $awesome-label-inline-margin-left;
}

.awesome-checkbox{
  padding-left: 20px;

  label{
    display: inline-block;
    vertical-align: top;
    position: relative;
    padding-left: 5px;
    font-weight: 400;
    cursor: pointer;
    margin-bottom: 0;

    &::before{
      content: "";
      display: inline-block;
      position: absolute;
      width: 17px;
      height: 17px;
      left: 0;
      top: 2px;
      margin-left: -20px;
      border: $abc-border-width solid $input-border;
      border-radius: 3px;
      background-color: $input-bg;
      @include transition(border 0.15s ease-in-out, color 0.15s ease-in-out);
    }

    &::after{
      display: inline-block;
      position: absolute;
      width: 16px;
      height: 16px;
      left: 0;
      top: 2px;
      margin-left: -20px;
      padding-left: 3px;
      padding-top: 1px;
      font-size: 11px;
      color: $input-color;
      line-height: 1.4;
    }
  }

  input[type="checkbox"],
  input[type="radio"] {
    opacity: 0;
    z-index: 1;
    cursor: pointer;
    position: absolute;

    &:focus + label::before{
      @include tab-focus();
    }

    &:checked + label::after{
      font-family: $font-family-icon;
      font-weight: 900;
      content: $check-icon;
    }

    &:indeterminate + label::after{
      display: block;
      content: "";
      width: 10px;
      height: 3px;
      background-color: #555555;
      border-radius: 2px;
      margin-left: -16.5px;
      margin-top: 7px;
    }

    &:disabled{
      cursor: not-allowed;
    }

    &:disabled + label{
      opacity: 0.65;

      &::before{
        background-color: $input-bg-disabled;
        cursor: not-allowed;
      }
    }

  }

  &.checkbox-circle label::before{
    border-radius: 50%;
  }

  &.checkbox-inline{
    margin-top: 0;
  }
}

@include checkbox-variant('.checkbox-primary', $brand-primary);
@include checkbox-variant('.checkbox-danger', $brand-danger);
@include checkbox-variant('.checkbox-info', $brand-info);
@include checkbox-variant('.checkbox-warning', $brand-warning);
@include checkbox-variant('.checkbox-success', $brand-success);


@include checkbox-variant-indeterminate('.checkbox-primary', $brand-primary);
@include checkbox-variant-indeterminate('.checkbox-danger', $brand-danger);
@include checkbox-variant-indeterminate('.checkbox-info', $brand-info);
@include checkbox-variant-indeterminate('.checkbox-warning', $brand-warning);
@include checkbox-variant-indeterminate('.checkbox-success', $brand-success);

//
// Radios
// --------------------------------------------------

@mixin radio-variant($parent, $color) {
  #{$parent} input[type="radio"]{
    + label{
      &::after{
        background-color: $color;
      }
    }
    &:checked + label{
      &::before {
        border-color: $color;
      }
      &::after{
        background-color: $color;
      }
    }
  }
}

.awesome-radio{
  padding-left: 5px;

  label{
    display: inline-block;
    vertical-align: top;
    position: relative;
    padding-left: 5px;
    font-weight: 400;
    cursor: pointer;
    margin-bottom: 0;

    &::before{
      content: "";
      display: inline-block;
      position: absolute;
      width: 17px;
      height: 17px;
      left: 0;
      top: 2px;
      margin-left: -20px;
      border: $abc-border-width solid $input-border;
      border-radius: 50%;
      background-color: $input-bg;
      @include transition(border 0.15s ease-in-out);
    }

    &::after{
      display: inline-block;
      position: absolute;
      content: " ";
      width: 11px;
      height: 11px;
      left: 3px;
      top: 5px;
      margin-left: -20px;
      border-radius: 50%;
      background-color: $input-color;
      @include scale(0, 0);

      @include transition-transform(.1s cubic-bezier(.8,-0.33,.2,1.33));
      //curve - http://cubic-bezier.com/#.8,-0.33,.2,1.33
    }
  }

  input[type="radio"]{
    opacity: 0;
    z-index: 1;
    cursor: pointer;

    &:focus + label::before{
      @include tab-focus();
    }

    &:checked + label::after{
      @include scale(1, 1);
    }

    &:disabled{
      cursor: not-allowed;
    }

    &:disabled + label{
      opacity: 0.65;

      &::before{
        cursor: not-allowed;
      }
    }

  }

  &.radio-inline{
    display: inline-block;
    margin-top: 0;
  }
}

@include radio-variant('.radio-primary', $brand-primary);
@include radio-variant('.radio-danger', $brand-danger);
@include radio-variant('.radio-info', $brand-info);
@include radio-variant('.radio-warning', $brand-warning);
@include radio-variant('.radio-success', $brand-success);


input[type="checkbox"],
input[type="radio"] {
  &.styled:checked + label:after {
    font-family: $font-family-icon;
    content: $check-icon;
    font-weight: 900;
  }
  .styled:checked + label {
    &::before {
      color: #fff;
    }
    &::after {
      color: #fff;
    }
  }
}
