@mixin buttonStates($color-scheme: primary, $filled: false) {
  $main-color: $color-primary;
  $active-color: $color-primary-dark;
  $hover-color: $color-primary-light;

  @if $color-scheme == danger {
    $main-color: $color-danger;
    $active-color: $color-danger-dark;
    $hover-color: $color-danger-light;
  }

  color: $main-color;
  border-color: $main-color;
  background-color: transparent;
  transition: background-color $duration-short;

  &:focus {
    outline: $border-size-base dashed $main-color;
  }

  &:enabled {
    &:hover {
      color: $color-neutral-100;
      border-color: $main-color;
      background-color: $main-color;
    }

    &:active {
      color: $color-neutral-100;
      border-color: $active-color;
      background-color: $active-color;
    }
  }

  &:disabled {
    color: $color-neutral-60;
    border-color: $color-neutral-60;
    cursor: default;
  }

  @if $filled {
    color: $color-neutral-100;
    border-color: $main-color;
    background-color: $main-color;

    &:enabled {
      &:hover {
        border-color: $hover-color;
        background-color: $hover-color;
      }

      &:active {
        color: $color-neutral-100;
        border-color: $active-color;
        background-color: $active-color;
      }
    }

    &:disabled {
      color: $color-neutral-100;
      background-color: $color-neutral-60;
      border-color: $color-neutral-60;
    }
  }
}
