@use "sass:math";

// Buttons

// 2x Outline Border
$btn-block-spacing-y:         .5rem !default;

.btn-outline-2x {
  border-width: 2px;
}

.btn-group {
  .btn {
    font-size: 0.8rem;
    font-weight: 500;
  }

  .btn-outline-2x + .btn-outline-2x {
    margin-left: -2px;
  }

  .btn-square {
    @include border-radius(0);
  }
}

.btn {
  font-size: 0.8rem;
  font-weight: 500;

  // Pills Buttons

  &.btn-pill.btn-wide,
  &.btn-pill {
    @include border-start-radius(50px);
    @include border-end-radius(50px);
  }

}

// Dashed Border

.btn-dashed {
  border-style: dashed;
}

// Icon Buttons

.btn-icon {
  vertical-align: bottom;

  &.btn-icon-right {
    .btn-icon-wrapper {
      margin-left: math.div($spacer, 2);
      margin-right: 0;
    }
  }

  .btn-icon-wrapper {
    margin-right: math.div($spacer, 2);
    margin-left: 0;
    margin-top: 0;
    font-size: 17px;
    vertical-align: middle;
    transition: color .1s;
    display: inline-block;
  }

  &.btn-link {
    text-decoration: none;
  }

  &.btn-lg:not(.btn-block) {
    .btn-icon-wrapper {
      font-size: 25px;
    }
  }

  &.btn-sm:not(.btn-block) {
    .btn-icon-wrapper {
      font-size: 16px;
    }
  }
}

.btn-icon-only {
  .btn-icon-wrapper {
    margin-left: 0;
    margin-right: 0;
  }
}

// Hover Shine {

.btn-hover-shine {
  position: relative;

  &:after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 0;
    height: 100%;
    background-color: rgba(255, 255, 255, 0.4);
    -webkit-transition: none;
    -moz-transition: none;
    transition: none;
  }

  &:hover:after {
    width: 120%;
    background-color: rgba(255, 255, 255, 0);
    transition: all 0.4s ease-in-out;
  }

  &.btn-pill {
    &::after {
      @include border-start-radius(50px);
      @include border-end-radius(50px);
    }
  }
}

// Vertical Icons {

.btn-icon-vertical {
  padding-top: ($btn-block-spacing-y * 2);
  padding-bottom: ($btn-block-spacing-y * 2);

  .btn-icon-wrapper {
    display: block;
    font-size: 200%;
    margin: 5px 0;
    opacity: .6;
  }

  &.btn-link {
    text-decoration: none;
  }

  &.btn-lg:not(.btn-block) {
    .btn-icon-wrapper {
      font-size: 25px;
    }
  }

  &.btn-sm:not(.btn-block) {
    .btn-icon-wrapper {
      font-size: 16px;
    }
  }

  &:active,
  &.active,
  &:hover {
    .btn-icon-wrapper {
      opacity: 1;
    }
  }

  &.btn-icon-bottom {
    .btn-icon-wrapper {
      margin: math.div($spacer, 5) 0 5px;
    }
  }

  &.btn-transition-text {
    .btn-icon-wrapper {
      transition: all .2s !important;
    }

    &:hover {
      .btn-icon-wrapper {
        transform: scale(1.3);
      }
    }

    &.btn-transition-alt {

      &:hover {
        .btn-icon-wrapper {
          color: $white !important;
        }
      }
    }
  }
}

.btn-icon-lg {
  font-size: $h1-font-size !important;
}

// Buttons Transitions

.btn-transition {
  color: $gray-600;
  border-color: $gray-200;
  background-color: none;

  &.btn-outline-link {
    border-color: transparent;
    background-color: transparent;

    &:hover {
      color: $primary;
      background: $gray-100;
    }
  }

  &.disabled,
  &:disabled {
    color: $gray-600;
    border-color: $gray-200;
  }

  &:hover {
    .btn-icon-wrapper {
      transition: none;
    }
  }
}

.btn-transition-alt {
  &:hover {
    .icon-gradient {
      -webkit-background-clip: initial;
      -webkit-text-fill-color: initial;
      background-clip: initial;
      text-fill-color: initial;
      background: none !important;
      color: $white;
    }
  }
}

// Square Buttons

.btn-square {
  @include border-radius(0 !important);
}

// Wide buttons

.btn {
  &.btn-wide {
    @include button-size($btn-padding-y, ($btn-padding-x * 2), $font-size-xs, $btn-border-radius);
  }
}

.btn-lg {
  &.btn-wide {
    @include button-size($btn-padding-y-lg, ($btn-padding-x-lg * 2), $font-size-lg, $btn-border-radius-lg);
  }
}

.btn-sm {
  &.btn-wide {
    @include button-size($btn-padding-y-sm, ($btn-padding-x-sm * 2), $font-size-xs, $btn-border-radius-sm);
  }
}

// Dropdown toggle

.dropdown-toggle {
  &::after {
    position: relative;
    top: 2px;
    opacity: .8;
  }
}

.dropright {
  .dropdown-toggle {
    &::after {
      top: 0;
    }
  }
}

.dropdown-toggle-split {
  border-left: rgba(255, 255, 255, .1) solid 1px;
}

// Buttons Gradients

$btn-gradients: ();

$gradient-primary: $brand;
$gradient-secondary: $gray-600;
$gradient-success: $green;
$gradient-info: $cyan;
$gradient-warning: $yellow;
$gradient-danger: $red;
$gradient-light: $blue-light;
$gradient-dark: $gray-800;
$gradient-focus: $indigo;
$gradient-alt: $purple;

$gradinet-percent: 15%;

$btn-gradients: map_merge(
                (
                        "primary": (
                                shade-color($gradient-primary, $gradinet-percent), // color-start
                                $gradient-primary, // color-end
                                0%, // gr-start
                        ),
                        "secondary": (
                                shade-color($gradient-secondary, $gradinet-percent), // color-start
                                $gradient-secondary, // color-end
                                0%, // gr-start
                        ),
                        "success": (
                                shade-color($gradient-success, $gradinet-percent), // color-start
                                $gradient-success, // color-end
                                0%, // gr-start
                        ),
                        "info": (
                                shade-color($gradient-info, $gradinet-percent), // color-start
                                $gradient-info, // color-end
                                0%, // gr-start
                        ),
                        "warning": (
                                shade-color($gradient-warning, $gradinet-percent), // color-start
                                $gradient-warning, // color-end
                                0%, // gr-start
                        ),
                        "danger": (
                                shade-color($gradient-danger, $gradinet-percent), // color-start
                                $gradient-danger, // color-end
                                0%, // gr-start
                        ),
                        "focus": (
                                shade-color($gradient-focus, $gradinet-percent), // color-start
                                $gradient-focus, // color-end
                                0%, // gr-start
                        ),
                        "alternate": (
                                shade-color($gradient-alt, $gradinet-percent), // color-start
                                $gradient-alt, // color-end
                                0%, // gr-start
                        ),
                        "light": (
                                shade-color($gradient-light, $gradinet-percent), // color-start
                                $gradient-light, // color-end
                                0%, // gr-start
                        ),
                        "dark": (
                                shade-color($gradient-dark, $gradinet-percent), // color-start
                                $gradient-dark, // color-end
                                0%, // gr-start
                        ),
                ),
                $btn-gradients
);

@mixin btn-grad-variant($color-start, $color-end, $gr-start) {
  background-image: linear-gradient(140deg, $color-start -30%, $color-end 90%);
  background-color: $color-start;
  border-color: $color-start;
  color: color-yiq(shade-color($color-start, 10%));

  &.active,
  &:active,
  &:not(:disabled):not(.disabled):hover {
    background-image: linear-gradient(120deg, shade-color($color-start, 3%) 0%, shade-color($color-end, 3%) 100%);
    color: color-yiq(shade-color($color-start, 10%));
    border-color: shade-color($color-start, 10%);
  }

  &:focus,
  &.focus,
  &:active,
  &.active {
    color: color-yiq(shade-color($color-start, 10%)) !important;
    border-color: shade-color($color-end, 20%) !important;
  }

}

@each $grad, $colors in $btn-gradients {
  $color: nth($colors, 1);
  $color1: nth($colors, 2);
  $color2: nth($colors, 3);

  .btn-gradient-#{$grad} {
    @include btn-grad-variant($color, $color1, $color2);

    &.btn-shadow {
      box-shadow: 0 0.125rem 0.625rem rgba($color1, .4), 0 0.0625rem 0.125rem rgba($color1, .5);

      &:hover {
        box-shadow: 0 0.125rem 0.625rem rgba($color1, .5), 0 0.0625rem 0.125rem rgba($color1, .6);
      }
    }
  }
}

.btn.btn-shadow {
  &.active {
    box-shadow: 0 0 0 0 transparent !important;
  }
}

// Links

$link-color: $primary;
$link-hover-color: shade-color($link-color, 15%);

// Generate Buttons

@each $color, $value in $theme-colors {
  .btn-#{$color} {
    @include button-variant($value, $value);

    &.btn-shadow {
      box-shadow: 0 0.125rem 0.625rem rgba($value, .4), 0 0.0625rem 0.125rem rgba($value, .5);

      &:hover {
        box-shadow: 0 0.125rem 0.625rem rgba($value, .5), 0 0.0625rem 0.125rem rgba($value, .6);
      }
    }
  }
}

@each $color, $value in $theme-colors {
  .btn-shadow-#{$color} {
    &:hover {
      box-shadow: 0 0.125rem 0.625rem rgba($value, .4), 0 0.0625rem 0.125rem rgba($value, .5);
    }
  }
}

@each $color, $value in $theme-colors {
  .btn-outline-#{$color} {
    @include button-outline-variant($value);

    &.btn-shadow {
      box-shadow: 0 0.125rem 0.625rem rgba($value, .4), 0 0.0625rem 0.125rem rgba($value, .5);

      &.active:hover,
      &.disabled:hover,
      &:active:hover,
      &:disabled:hover {
        box-shadow: 0 0.125rem 0.625rem rgba($value, .5), 0 0.0625rem 0.125rem rgba($value, .6);
      }

      &:hover {
        box-shadow: (0px 5px 15px 2px rgba($value, 0.19));
      }
    }
  }
}

.btn {
  position: relative;
  @include transition($btn-transition);
}

.btn-light {
  border-color: shade-color(#f5f5f5, 10%);
}

.btn-outline-light {
  color: shade-color(#f5f5f5, 40%);
}