@mixin button ($style: simple, $base-color: #4294f0) {

@if type-of($style) == color {
  $base-color: $style;
  $style: simple;
}

// Grayscale button
@if $base-color == grayscale($base-color) {
  @if $style == simple {
    @include simple($base-color, $grayscale: true);
  }

  @else if $style == shiny {
    @include shiny($base-color, $grayscale: true);
  }

  @else if $style == pill {
    @include pill($base-color, $grayscale: true);
  }
}

// Colored button
@else {
  @if $style == simple {
    @include simple($base-color);
  }

  @else if $style == shiny {
    @include shiny($base-color);
  }

  @else if $style == pill {
    @include pill($base-color);
  }
}

&:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

}

// Simple Button //************************************************************************// @mixin simple($base-color, $grayscale: false) {

$color:         hsl(0, 0, 100%);
$border:        adjust-color($base-color, $saturation:  9%,  $lightness: -14%);
$inset-shadow:  adjust-color($base-color, $saturation: -8%,  $lightness:  15%);
$stop-gradient: adjust-color($base-color, $saturation:  9%,  $lightness: -11%);
$text-shadow:   adjust-color($base-color, $saturation:  15%, $lightness: -18%);

@if lightness($base-color) > 70% {
  $color:       hsl(0, 0, 20%);
  $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
}

@if $grayscale == true {
  $border:        grayscale($border);
  $inset-shadow:  grayscale($inset-shadow);
  $stop-gradient: grayscale($stop-gradient);
  $text-shadow:   grayscale($text-shadow);
}

border: 1px solid $border;
border-radius: 3px;
box-shadow: inset 0 1px 0 0 $inset-shadow;
color: $color;
display: inline-block;
font-size: 11px;
font-weight: bold;
@include linear-gradient ($base-color, $stop-gradient);
padding: 7px 18px;
text-decoration: none;
text-shadow: 0 1px 0 $text-shadow;
background-clip: padding-box;

&:hover:not(:disabled) {
  $base-color-hover:    adjust-color($base-color, $saturation: -4%, $lightness: -5%);
  $inset-shadow-hover:  adjust-color($base-color, $saturation: -7%, $lightness:  5%);
  $stop-gradient-hover: adjust-color($base-color, $saturation:  8%, $lightness: -14%);

  @if $grayscale == true {
    $base-color-hover:    grayscale($base-color-hover);
    $inset-shadow-hover:  grayscale($inset-shadow-hover);
    $stop-gradient-hover: grayscale($stop-gradient-hover);
  }

  box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
  cursor: pointer;
  @include linear-gradient ($base-color-hover, $stop-gradient-hover);
}

&:active:not(:disabled) {
  $border-active:       adjust-color($base-color, $saturation: 9%, $lightness: -14%);
  $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%);

  @if $grayscale == true {
    $border-active:       grayscale($border-active);
    $inset-shadow-active: grayscale($inset-shadow-active);
  }

  border: 1px solid $border-active;
  box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active, 0 1px 1px 0 #eee;
}

}

// Shiny Button //************************************************************************// @mixin shiny($base-color, $grayscale: false) {

$color:         hsl(0, 0, 100%);
$border:        adjust-color($base-color, $red: -117, $green: -111, $blue: -81);
$border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122);
$fourth-stop:   adjust-color($base-color, $red: -79,  $green: -70,  $blue: -46);
$inset-shadow:  adjust-color($base-color, $red:  37,  $green:  29,  $blue:  12);
$second-stop:   adjust-color($base-color, $red: -56,  $green: -50,  $blue: -33);
$text-shadow:   adjust-color($base-color, $red: -140, $green: -141, $blue: -114);
$third-stop:    adjust-color($base-color, $red: -86,  $green: -75,  $blue: -48);

@if lightness($base-color) > 70% {
  $color:       hsl(0, 0, 20%);
  $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
}

@if $grayscale == true {
  $border:        grayscale($border);
  $border-bottom: grayscale($border-bottom);
  $fourth-stop:   grayscale($fourth-stop);
  $inset-shadow:  grayscale($inset-shadow);
  $second-stop:   grayscale($second-stop);
  $text-shadow:   grayscale($text-shadow);
  $third-stop:    grayscale($third-stop);
}

border: 1px solid $border;
border-bottom: 1px solid $border-bottom;
border-radius: 5px;
box-shadow: inset 0 1px 0 0 $inset-shadow;
color: $color;
display: inline-block;
font-size: 14px;
font-weight: bold;
@include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%);
padding: 8px 20px;
text-align: center;
text-decoration: none;
text-shadow: 0 -1px 1px $text-shadow;

&:hover:not(:disabled) {
  $first-stop-hover:  adjust-color($base-color, $red: -13, $green: -15, $blue: -18);
  $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51);
  $third-stop-hover:  adjust-color($base-color, $red: -93, $green: -85, $blue: -66);
  $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63);

  @if $grayscale == true {
    $first-stop-hover:  grayscale($first-stop-hover);
    $second-stop-hover: grayscale($second-stop-hover);
    $third-stop-hover:  grayscale($third-stop-hover);
    $fourth-stop-hover: grayscale($fourth-stop-hover);
  }

  cursor: pointer;
  @include linear-gradient(top, $first-stop-hover  0%,
                                $second-stop-hover 50%,
                                $third-stop-hover  50%,
                                $fourth-stop-hover 100%);
}

&:active:not(:disabled) {
  $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122);

  @if $grayscale == true {
    $inset-shadow-active: grayscale($inset-shadow-active);
  }

  box-shadow: inset 0 0 20px 0 $inset-shadow-active, 0 1px 0 #fff;
}

}

// Pill Button //************************************************************************// @mixin pill($base-color, $grayscale: false) {

$color:         hsl(0, 0, 100%);
$border-bottom: adjust-color($base-color, $hue:  8, $saturation: -11%, $lightness: -26%);
$border-sides:  adjust-color($base-color, $hue:  4, $saturation: -21%, $lightness: -21%);
$border-top:    adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%);
$inset-shadow:  adjust-color($base-color, $hue: -1, $saturation: -1%,  $lightness:  7%);
$stop-gradient: adjust-color($base-color, $hue:  8, $saturation:  14%, $lightness: -10%);
$text-shadow:   adjust-color($base-color, $hue:  5, $saturation: -19%, $lightness: -15%);

@if lightness($base-color) > 70% {
  $color:       hsl(0, 0, 20%);
  $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
}

@if $grayscale == true {
  $border-bottom: grayscale($border-bottom);
  $border-sides:  grayscale($border-sides);
  $border-top:    grayscale($border-top);
  $inset-shadow:  grayscale($inset-shadow);
  $stop-gradient: grayscale($stop-gradient);
  $text-shadow:   grayscale($text-shadow);
}

border: 1px solid $border-top;
border-color: $border-top $border-sides $border-bottom;
border-radius: 16px;
box-shadow: inset 0 1px 0 0 $inset-shadow, 0 1px 2px 0 #b3b3b3;
color: $color;
display: inline-block;
font-size: 11px;
font-weight: normal;
line-height: 1;
@include linear-gradient ($base-color, $stop-gradient);
padding: 5px 16px;
text-align: center;
text-decoration: none;
text-shadow: 0 -1px 1px $text-shadow;
background-clip: padding-box;

&:hover:not(:disabled) {
  $base-color-hover:    adjust-color($base-color,                                $lightness: -4.5%);
  $border-bottom:       adjust-color($base-color, $hue:  8, $saturation:  13.5%, $lightness: -32%);
  $border-sides:        adjust-color($base-color, $hue:  4, $saturation: -2%,    $lightness: -27%);
  $border-top:          adjust-color($base-color, $hue: -1, $saturation: -17%,   $lightness: -21%);
  $inset-shadow-hover:  adjust-color($base-color,           $saturation: -1%,    $lightness:  3%);
  $stop-gradient-hover: adjust-color($base-color, $hue:  8, $saturation: -4%,    $lightness: -15.5%);
  $text-shadow-hover:   adjust-color($base-color, $hue:  5, $saturation: -5%,    $lightness: -22%);

  @if $grayscale == true {
    $base-color-hover:    grayscale($base-color-hover);
    $border-bottom:       grayscale($border-bottom);
    $border-sides:        grayscale($border-sides);
    $border-top:          grayscale($border-top);
    $inset-shadow-hover:  grayscale($inset-shadow-hover);
    $stop-gradient-hover: grayscale($stop-gradient-hover);
    $text-shadow-hover:   grayscale($text-shadow-hover);
  }

  border: 1px solid $border-top;
  border-color: $border-top $border-sides $border-bottom;
  box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
  cursor: pointer;
  @include linear-gradient ($base-color-hover, $stop-gradient-hover);
  text-shadow: 0 -1px 1px $text-shadow-hover;
  background-clip: padding-box;
}

&:active:not(:disabled) {
  $active-color:         adjust-color($base-color, $hue: 4,  $saturation: -12%,  $lightness: -10%);
  $border-active:        adjust-color($base-color, $hue: 6,  $saturation: -2.5%, $lightness: -30%);
  $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation:  6%,   $lightness: -31%);
  $inset-shadow-active:  adjust-color($base-color, $hue: 9,  $saturation:  2%,   $lightness: -21.5%);
  $text-shadow-active:   adjust-color($base-color, $hue: 5,  $saturation: -12%,  $lightness: -21.5%);

  @if $grayscale == true {
    $active-color:         grayscale($active-color);
    $border-active:        grayscale($border-active);
    $border-bottom-active: grayscale($border-bottom-active);
    $inset-shadow-active:  grayscale($inset-shadow-active);
    $text-shadow-active:   grayscale($text-shadow-active);
  }

  background: $active-color;
  border: 1px solid $border-active;
  border-bottom: 1px solid $border-bottom-active;
  box-shadow: inset 0 0 6px 3px $inset-shadow-active, 0 1px 0 0 #fff;
  text-shadow: 0 -1px 1px $text-shadow-active;
}

}