// --------------------------------------------------
// Buttons
// --------------------------------------------------

// Base
// --------------------------------------------------

@mixin btn(
  $text-color: $primary,
  $bg-color: $primary-low,
  $icon-color: $primary-high,
  $hover-text-color: $secondary,
  $hover-bg-color: $primary-medium,
  $hover-icon-color: $primary-low
) {
  display: inline-block;
  margin: 0;
  padding: 6px 12px;
  min-height: 30px;
  border: none;
  box-sizing: border-box;
  font-weight: normal;
  color: $text-color;
  background: $bg-color;
  font-size: $font-0;
  line-height: $line-height-small;
  text-align: center;
  cursor: pointer;
  transition: all 0.25s;
  .d-icon {
    color: $icon-color;
    margin-right: 0.45em;
    transition: color 0.25s;
    line-height: $line-height-medium; // Match button text line-height
  }
  &.no-text {
    .d-icon {
      margin-right: 0;
    }
  }
  @include hover {
    background: $hover-bg-color;
    color: $hover-text-color;
    .d-icon {
      color: $hover-icon-color;
    }
  }
  &[href] {
    color: $text-color;
  }
  &:active,
  &.btn-active {
    @include linear-gradient(
      scale-color($bg-color, $lightness: -20%),
      $bg-color
    );
  }
  &[disabled],
  &.disabled {
    opacity: 0.4;
    &:hover {
      color: $text-color;
      background: $bg-color;
      .d-icon {
        color: $icon-color;
      }
    }
    cursor: not-allowed;
  }

  .loading-container {
    display: none;
    margin: 0 6.75px 0 0;
  }

  &.is-loading {
    &.btn-text {
      .d-button-label {
        font-size: $font-down-2;
      }

      &.btn-small {
        .loading-icon {
          font-size: $font-down-1;
          margin-right: 0.2em;
        }
      }
    }

    .loading-icon {
      -webkit-animation: rotate-forever 1s infinite linear, fadein 1s;
      animation: rotate-forever 1s infinite linear, fadein 1s;
    }
  }
}

.btn.hidden {
  display: none;
}

// Default button
// --------------------------------------------------

.btn {
  @include btn;
}

// Primary button
// --------------------------------------------------

.btn-primary {
  @include btn(
    $text-color: $secondary,
    $bg-color: $tertiary,
    $icon-color: $secondary,
    $hover-bg-color: darken($tertiary, 10%),
    $hover-icon-color: $secondary
  );
}

// Danger button
// --------------------------------------------------

.btn-danger {
  @include btn(
    $text-color: $secondary,
    $bg-color: $danger,
    $icon-color: $danger-low,
    $hover-bg-color:
      dark-light-choose(
        scale-color($danger, $lightness: -20%),
        scale-color($danger, $lightness: 20%)
      ),
    $hover-icon-color: $danger-low
  );
}

// ✘ and ✔ buttons
// --------------------------------------------------

.btn.cancel {
  @include btn(
    $text-color: $secondary,
    $bg-color: $danger,
    $icon-color: $secondary,
    $hover-bg-color:
      dark-light-choose(
        scale-color($danger, $lightness: -20%),
        scale-color($danger, $lightness: 20%)
      ),
    $hover-icon-color: $secondary
  );
}

.btn.ok {
  @include btn(
    $text-color: $secondary,
    $bg-color: $success,
    $icon-color: $secondary,
    $hover-bg-color:
      dark-light-choose(
        scale-color($success, $lightness: -20%),
        scale-color($success, $lightness: 20%)
      ),
    $hover-icon-color: $secondary
  );
}

// Social buttons
// --------------------------------------------------

.btn-social {
  .d-icon {
    color: #fff;
  }
  color: #fff;
  background: #666;
  &:hover {
    color: #fff;
  }
  &[href] {
    color: $secondary;
  }
  &:before {
    margin-right: 9px;
    font-size: $font-0;
  }
  &.google_oauth2 {
    background: $google;
    color: #333;
    border: 1px solid $primary-low;
    // non-FA SVG icon for Google in login-buttons.hbs
    .d-icon {
      opacity: 0.9;
    }
    &:hover {
      color: currentColor;
      background: darken($google, 5%);
    }
  }
  &.instagram {
    background: $instagram;
    &:hover {
      background: darken($instagram, 15%);
    }
  }
  &.facebook {
    background: $facebook;
    &:hover {
      background: darken($facebook, 15%);
    }
  }
  &.cas {
    background: $cas;
  }
  &.twitter {
    background: $twitter;
    &:hover {
      background: darken($twitter, 10%);
    }
  }
  &.github {
    background: $github;
    &:hover {
      background: lighten($github, 20%);
    }
  }
  &.discord {
    background: $discord;
    &:hover {
      background: darken($discord, 10%);
    }
  }
}

// Button Sizes
// --------------------------------------------------

// Small

.btn-small {
  padding: 6px;
  font-size: $font-down-1;
  min-height: 20px;
  .d-icon {
    max-height: 0.87em;
  }
}

// Large

.btn-large {
  padding: 9px 18px;
  font-size: $font-up-1;
  line-height: $line-height-small;
}

.btn-flat {
  background: transparent;
  border: 0;
  outline: 0;
  line-height: $line-height-small;
  transition: color 0.25s, background 0.25s;
  .d-icon {
    color: $primary-low-mid;
  }
  @include hover {
    .d-icon {
      color: $primary;
    }
  }
  &.close {
    padding: 0;
    min-height: unset;
    background: transparent;
    font-size: $font-up-3;
    .d-icon {
      color: $primary-high;
    }
    @include hover {
      background: transparent;
      .d-icon {
        color: $primary;
      }
    }
  }
}

.btn-link {
  background: transparent;
  border: 0;
  outline: 0;
  padding: 0;
  color: $tertiary;
  &:focus {
    outline: 1px currentColor dotted;
  }
}
