/**
 * Copyright 2015 Google Inc. All Rights Reserved.
 *
 * 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.
 */

@import "../variables";
@import "../mixins";

// The button component. Defaults to a flat button.
.mdl-button {
  background: transparent;
  border: none;
  border-radius: $button-border-radius;
  color: $button-secondary-color;
  position: relative;
  height: $button-height;
  margin: 0;
  min-width: $button-min-width;
  padding: 0 $button-padding;
  display: inline-block;
  @include typo-button();
  overflow: hidden;
  will-change: box-shadow;
  transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,
              background-color 0.2s $animation-curve-default,
              color 0.2s $animation-curve-default;
  outline: none;
  cursor: pointer;
  text-decoration: none;
  text-align: center;
  line-height: $button-height;
  vertical-align: middle;

  &::-moz-focus-inner {
    border: 0;
  }

  &:hover {
    background-color: $button-hover-color;
  }

  &:focus:not(:active) {
    background-color: $button-focus-color;
  }

  &:active {
    background-color: $button-active-color;
  }

  &.mdl-button--colored {
    color: $button-primary-color-alt;

    &:focus:not(:active) {
      background-color: $button-focus-color-alt;
    }
  }
}

input.mdl-button[type="submit"] {
  -webkit-appearance:none;
}

  // Raised buttons
  .mdl-button--raised {
    background: $button-primary-color;
    @include shadow-2dp();

    &:active {
      @include shadow-4dp();
      background-color: $button-active-color;
    }

    &:focus:not(:active) {
      @include focus-shadow();
      background-color: $button-active-color;
    }

    &.mdl-button--colored {
      background: $button-primary-color-alt;
      color: $button-secondary-color-alt;

      &:hover {
        background-color: $button-hover-color-alt;
      }

      &:active {
        background-color: $button-active-color-alt;
      }

      &:focus:not(:active) {
        background-color: $button-active-color-alt;
      }

      & .mdl-ripple {
        background: $button-ripple-color-alt;
      }
    }
  }


  // FABs
  .mdl-button--fab {
    border-radius: 50%;
    font-size: $button-fab-font-size;
    height: $button-fab-size;
    margin: auto;
    min-width: $button-fab-size;
    width: $button-fab-size;
    padding: 0;
    overflow: hidden;
    background: $button-primary-color;
    box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);
    position: relative;
    line-height: normal;

    & .material-icons {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);
      line-height: $button-fab-font-size;
      width: $button-fab-font-size;
    }

    &.mdl-button--mini-fab {
      height: $button-fab-size-mini;
      min-width: $button-fab-size-mini;
      width: $button-fab-size-mini;
    }

    & .mdl-button__ripple-container {
      border-radius: 50%;
      // Fixes clipping bug in Safari.
      -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
    }

    &:active {
      @include shadow-4dp();
      background-color: $button-active-color;
    }

    &:focus:not(:active) {
      @include focus-shadow();
      background-color: $button-active-color;
    }

    &.mdl-button--colored {
      background: $button-fab-color-alt;
      color: $button-fab-text-color-alt;

      &:hover {
        background-color: $button-fab-hover-color-alt;
      }

      &:focus:not(:active) {
        background-color: $button-fab-active-color-alt;
      }

      &:active {
        background-color: $button-fab-active-color-alt;
      }

      & .mdl-ripple {
        background: $button-fab-ripple-color-alt;
      }
    }
  }


  // Icon buttons
  .mdl-button--icon {
    border-radius: 50%;
    font-size: $button-fab-font-size;
    height: $button-icon-size;
    margin-left: 0;
    margin-right: 0;
    min-width: $button-icon-size;
    width: $button-icon-size;
    padding: 0;
    overflow: hidden;
    color: inherit;
    line-height: normal;

    & .material-icons {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);
      line-height: $button-fab-font-size;
      width: $button-fab-font-size;
    }

    &.mdl-button--mini-icon {
      height: $button-icon-size-mini;
      min-width: $button-icon-size-mini;
      width: $button-icon-size-mini;

      & .material-icons {
        top: ($button-icon-size-mini - $button-fab-font-size) / 2;
        left: ($button-icon-size-mini - $button-fab-font-size) / 2;
      }
    }

    & .mdl-button__ripple-container {
      border-radius: 50%;
      // Fixes clipping bug in Safari.
      -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
    }
  }


  // Ripples
  .mdl-button__ripple-container {
    display: block;
    height: 100%;
    left: 0px;
    position: absolute;
    top: 0px;
    width: 100%;
    z-index: 0;
    overflow: hidden;

    .mdl-button[disabled] & .mdl-ripple,
    .mdl-button.mdl-button--disabled & .mdl-ripple {
      background-color: transparent;
    }
  }

// Colorized buttons

.mdl-button--primary.mdl-button--primary {
  color: $button-primary-color-alt;
  & .mdl-ripple {
    background: $button-secondary-color-alt;
  }
  &.mdl-button--raised, &.mdl-button--fab {
    color: $button-secondary-color-alt;
    background-color: $button-primary-color-alt;
  }
}

.mdl-button--accent.mdl-button--accent {
  color: $button-fab-color-alt;
  & .mdl-ripple {
    background: $button-fab-text-color-alt;
  }
  &.mdl-button--raised, &.mdl-button--fab {
    color: $button-fab-text-color-alt;
    background-color: $button-fab-color-alt;
  }
}

// Disabled buttons

.mdl-button {
  // Bump up specificity by using [disabled] twice.
  &[disabled][disabled],
  &.mdl-button--disabled.mdl-button--disabled {
    color: $button-secondary-color-disabled;
    cursor: default;
    background-color: transparent;
  }

  &--fab {
    // Bump up specificity by using [disabled] twice.
    &[disabled][disabled],
    &.mdl-button--disabled.mdl-button--disabled {
      background-color: $button-primary-color-disabled;
      color: $button-secondary-color-disabled;
    }
  }

  &--raised {
    // Bump up specificity by using [disabled] twice.
    &[disabled][disabled],
    &.mdl-button--disabled.mdl-button--disabled {
      background-color: $button-primary-color-disabled;
      color: $button-secondary-color-disabled;
      box-shadow: none;
    }
  }
  &--colored {
    // Bump up specificity by using [disabled] twice.
    &[disabled][disabled],
    &.mdl-button--disabled.mdl-button--disabled {
      color: $button-secondary-color-disabled;
    }
  }
}

// Align icons inside buttons with text
.mdl-button .material-icons {
  vertical-align: middle;
}
