@mixin form---alter() {
}

@mixin form() {
  width: 100%;
  margin-left: auto;
  margin-right: auto;
  @include form---alter;
}

@mixin form__footer---alter() {
}

@mixin form__footer() {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  margin-top: -$form-grid-gutter;
  & > * {
    margin-top: $form-grid-gutter;
    & + * {
      margin-left: $form-grid-gutter;
    }
  }
  @include form__footer---alter;
}

@mixin form--sm---alter() {
}

@mixin form--sm() {
  max-width: $form-sm;
  @include form--sm---alter;
}

@mixin form--md---alter() {
}

@mixin form--md() {
  max-width: $form-md;
  @include form--md---alter;
}

@mixin form--lg---alter() {
}

@mixin form--lg() {
  max-width: $form-lg;
  @include form--lg---alter;
}

@mixin form--bordered---alter() {
}

@mixin form--bordered() {
  border: $form-border-width solid $form-border-color;
  border-radius: $form-border-radius;
  padding: $form-padding;
  @include form--bordered---alter;
}

@mixin form__footer--bordered---alter() {
}

@mixin form__footer--bordered() {
  border-top: $form-border-width solid $form-border-color;
  padding: ($form-padding - $form-grid-gutter) $form-padding $form-padding;
  margin: 0 -#{$form-padding} -#{$form-padding};
  @include form__footer--bordered---alter;
}

@mixin fieldset---alter() {
}

@mixin fieldset() {
  margin-bottom: $fieldset-margin-bottom;
  @include fieldset---alter;
}

@mixin fieldset__legend---alter() {
}

@mixin fieldset__legend() {
  font-family: $fieldset-legend-font-family;
  font-size: $fieldset-legend-font-size;
  font-weight: $fieldset-legend-font-weight;
  text-transform: $fieldset-legend-text-transform;
  color: $fieldset-legend-color;
  line-height: $fieldset-legend-line-height;
  margin-bottom: $fieldset-legend-margin-bottom;
  @include fieldset__legend---alter;
}

@mixin form-group---alter() {
}

@mixin form-group() {
  margin: 0 0 $form-group-margin-bottom;
  @include form-group---alter;
}

@mixin form-label---alter() {
}

@mixin form-label() {
  display: block;
  font-family: $form-label-font-family;
  font-weight: $form-label-font-weight;
  font-size: $form-label-font-size;
  text-transform: $form-label-text-transform;
  color: $form-label-color;
  margin: 0 0 $form-label-margin-bottom;
  @include form-label---alter;
}

@mixin form-label--required---alter() {
}

@mixin form-label--required() {
  &::after {
    content: "*";
    font-size: 0.9em;
    color: theme-color(danger);
    margin-left: 5px;
  }
  @include form-label--required---alter;
}

@mixin placeholder {
  &::-webkit-input-placeholder {
    @content;
  }
  &::-moz-placeholder {
    @content;
  }
  &:-ms-input-placeholder {
    @content;
  }
}

@mixin form-control--active---alter($name) {
}

@mixin form-control--active($name: null) {
  outline: none;
  background-color: $form-control-active-bg;
  color: form-control-active-color($name);
  border-color: form-control-active-border-color($name);
  @include form-control--active---alter($name);
}

@mixin form-control--disabled---alter() {
}

@mixin form-control--disabled() {
  background-color: $form-control-disabled-bg;
  opacity: $form-control-disabled-opacity;
  cursor: not-allowed;
  @include form-control--disabled---alter;
}

@mixin form-control--read-only---alter() {
}

@mixin form-control--read-only() {
  background-color: $form-control-disabled-bg;
  opacity: $form-control-disabled-opacity;
  @include form-control--read-only---alter;
}

@mixin form-control---alter() {
}

@mixin form-control() {
  display: block;
  font-family: $form-control-font-family;
  font-size: $form-control-font-size;
  font-weight: $form-control-font-weight;
  letter-spacing: $form-control-letter-spacing;
  background-color: $form-control-bg;
  color: $form-control-color;
  height: $form-control-height;
  line-height: $form-control-line-height;
  padding: form-control-padding-y() form-control-padding-x();
  border-width: $form-control-border-width;
  border-style: solid;
  border-color: $form-control-border-color;
  border-radius: $form-control-border-radius;
  width: 100%;
  box-shadow: none;
  transition: all 0.4s;
  @include placeholder {
    opacity: $placeholder-opacity;
    font-style: $placeholder-font-style;
    text-transform: $placeholder-text-transform;
    color: inherit;
  }
  &:disabled {
    @include form-control--disabled;
  }
  &:read-only:not(select):not(div):not(span) {
    @include form-control--read-only;
  }
  &:focus:not(:disabled):not(:read-only) {
    @include form-control--active();
  }
  @include form-control---alter;
}

@mixin form-control--color---alter($name) {
}

@mixin form-control--color($name) {
  $color: color($name);
  color: $color;
  border-color: $color;
  @include placeholder {
    color: $color;
  }
  &:focus:not(:disabled) {
    @include form-control--active($name);
  }
  @include form-control--color---alter($name);
}

@mixin form-control--size-extra---alter($height, $line-height, $font-size, $border-radius) {
}

@mixin form-control--size-extra($height, $line-height, $font-size, $border-radius) {
  $padding: calc-padding($height, $line-height, $form-control-border-width, $form-control-border-width, $button-padding-ratio);
  height: $height;
  line-height: $line-height;
  padding: map-get($padding, y) map-get($padding, x);
  font-size: $font-size;
  border-radius: $border-radius;
  @include form-control--size-extra---alter($height, $line-height, $font-size, $border-radius);
}

@mixin form-control--size---alter($size) {
}

@mixin form-control--size($size) {
  $height: map-get-deep($form-control-sizes, $size, height);
  $line-height: map-get-deep($form-control-sizes, $size, line-height);
  $font-size: map-get-deep($form-control-sizes, $size, font-size);
  $border-radius: map-get-deep($form-control-sizes, $size, border-radius);
  height: $height;
  line-height: $line-height;
  padding: form-control-padding-y($size) form-control-padding-x($size);
  font-size: $font-size;
  border-radius: $border-radius;
  @include form-control--size---alter($size);
}

@mixin form-control--size-alter-height---alter($height, $size: null) {
}

@mixin form-control--size-alter-height($height, $size: null) {
  @if $size == null {
    @include form-control--size-extra($height, $form-control-line-height, $form-control-font-size, $form-control-border-radius);
  } @else {
    $line-height: map-get-deep($form-control-sizes, $size, line-height);
    $font-size: map-get-deep($form-control-sizes, $size, font-size);
    $border-radius: map-get-deep($form-control-sizes, $size, border-radius);
    @include form-control--size-extra($height, $line-height, $font-size, $border-radius);
    @include form-control--size-alter-height---alter($height, $size);
  }
}

@mixin form-control-plaintext---alter() {
}

@mixin form-control-plaintext() {
  display: block;
  font-family: $form-control-font-family;
  font-size: $form-control-font-size;
  font-weight: $form-control-font-weight;
  background-color: $form-control-bg;
  color: $form-control-color;
  height: $form-control-height;
  line-height: $form-control-line-height;
  padding: form-control-padding-y() 0;
  width: 100%;
  @include form-control-plaintext---alter;
}

@mixin form-control-plaintext--color---alter($name) {
}

@mixin form-control-plaintext--color($name) {
  color: color($name);
  @include form-control-plaintext--color---alter($name);
}

@mixin form-control-plaintext--size---alter($size) {
}

@mixin form-control-plaintext--size($size) {
  $height: map-get-deep($form-control-sizes, $size, height);
  $line-height: map-get-deep($form-control-sizes, $size, line-height);
  $font-size: map-get-deep($form-control-sizes, $size, font-size);
  height: $height;
  line-height: $line-height;
  padding: form-control-padding-y($size) 0;
  font-size: $font-size;
  @include form-control-plaintext--size---alter($size);
}

@mixin form-control-file---alter() {
}

@mixin form-control-file() {
  display: block;
  @include form-control-file---alter;
}

@mixin form-check---alter() {
}

@mixin form-check() {
  display: flex;
  align-items: center;
  margin: $form-check-margin;
  &:last-child {
    margin-bottom: 0;
  }
  input {
    margin: 0 0.8rem 0 0;
    &:focus {
      outline: none;
    }
    &:disabled {
      cursor: not-allowed;
    }
  }
  label {
    font-family: $form-control-font-family;
    font-weight: $form-control-font-weight;
    font-size: $form-control-font-size;
    letter-spacing: $form-control-letter-spacing;
    margin: 0;
  }
  @include form-check---alter;
}

@mixin form-check--inline---alter() {
}

@mixin form-check--inline() {
  display: inline-flex;
  margin-bottom: 0;
  margin-right: $form-grid-gutter;
  &:last-child {
    margin-right: 0;
  }
  @include form-check--inline---alter;
}

@mixin form-check--color---alter($name) {
}

@mixin form-check--color($name) {
  color: color($name);
  @include form-check--color---alter($name);
}

@mixin form-description---alter() {
}

@mixin form-description() {
  font-size: $form-description-font-size;
  margin: $form-description-margin;
  @include form-description---alter;
}
