textarea {
  resize: vertical;
}

input {
  border-radius: $border-radius-base;
  color: $gl-text-color;
  background-color: $input-bg;
}

input[type='text'].danger {
  background: $input-danger-bg !important;
  border-color: $red-400;
  text-shadow: 0 1px 1px $white;
}

/**
 * When form input type is number, Firefox & Safari show the up/down arrows
 * on the right side of the input persistently, while Chrome shows it only
 * on hover or focus, this fix allows us to hide the arrows in all browsers.
 * You can conditionally add/remove `hide-spinners` class to have consistent
 * behaviour across browsers.
 */

/* stylelint-disable property-no-vendor-prefix */
input[type='number'].hide-spinners {
  -moz-appearance: textfield;
  appearance: textfield;

  &::-webkit-inner-spin-button,
  &::-webkit-outer-spin-button {
    -webkit-appearance: none;
    appearance: none;
    margin: 0;
  }
}
/* stylelint-enable property-no-vendor-prefix */

/**
 * When form input type is search, browsers add a clear input button inside
 * the input field. This overlaps with the input field we have already added.
 */

/* stylelint-disable property-no-vendor-prefix */
input[type='search'] {
  -webkit-appearance: textfield;
  -moz-appearance: textfield;
  appearance: textfield;

  &::-webkit-search-cancel-button,
  &::-webkit-search-results-button {
    @include gl-display-none;
  }
}
/* stylelint-enable property-no-vendor-prefix */

.datetime-controls {
  select {
    width: 100px;
  }
}

.form-actions {
  margin-top: 0;
  margin-bottom: -$gl-padding;
  padding: $gl-padding;
  background-color: $gray-light;
  border-top: 1px solid $border-color;
}

label {
  font-weight: $gl-font-weight-bold;

  &.inline-label {
    margin: 0;
  }

  &.form-check-label,
  &.custom-control-label {
    font-weight: $gl-font-weight-normal;
  }

  &.label-bold {
    font-weight: $gl-font-weight-bold;
  }
}

.label-wrapper {
  display: block;
  margin: 0;
}

.inline-input-group {
  width: 250px;
}

.custom-form-control {
  width: 150px;
}

@include media-breakpoint-up(sm) {
  .custom-form-control {
    width: 150px;
  }
}

/* Medium devices (desktops, 992px and up) */
@include media-breakpoint-up(md) {
  .custom-form-control {
    width: 170px;
  }
}

/* Large devices (large desktops, 1200px and up) */
@include media-breakpoint-up(lg) {
  .custom-form-control {
    width: 200px;
  }
}

.help-form .form-group {
  margin-left: 0;
  margin-right: 0;

  .form-control {
    background: $white;
    font-family: $monospace-font;
  }

  @include media-breakpoint-down(xs) {
    padding: 0 $gl-padding;
  }
}

.fieldset-form fieldset {
  margin-bottom: 20px;
}

.form-control {
  @include box-shadow(none);
  border-radius: $border-radius-default;
  padding: $gl-vert-padding $gl-input-padding;

  &.input-short {
    width: $input-short-width;

    @include media-breakpoint-up(md) {
      width: $input-short-md-width;
    }
  }
}

.form-control,
[contenteditable=true] {
  &:focus {
    border-color: $gray-400;
    @include gl-focus;
  }
}

.select-control {
  line-height: 1.3;
  padding-left: 10px;
  padding-right: 10px;
  appearance: none;
  /* stylelint-disable property-no-vendor-prefix */
  -webkit-appearance: none;
  -moz-appearance: none;
  /* stylelint-enable property-no-vendor-prefix */

  &::-ms-expand {
    display: none;
  }
}

.form-control-inline {
  display: inline;
}

.form-control::placeholder {
  color: $gl-text-color-tertiary;
}

.input-group {
  .input-group-prepend,
  .input-group-append {
    background-color: $input-group-addon-bg;
  }

  .input-group-prepend:not(:first-child):not(:last-child),
  .input-group-append:not(:first-child):not(:last-child) {
    border-left: 0;
    border-right: 0;
  }
}

.form-text.text-muted {
  margin-bottom: 0;
  margin-top: #{$grid-size / 2};
  font-size: $gl-font-size;

  .invisible {
    visibility: hidden;
  }
}

.gl-field-error,
.invalid-feedback {
  color: $red-500;
  font-size: $gl-font-size;
}

.gl-show-field-errors {
  .form-control:not(textarea) {
    height: $input-height;
  }

  .gl-field-success-outline {
    border: 1px solid $green-600;

    &:focus {
      box-shadow: 0 0 0 1px $green-600 inset, 0 1px 1px $gl-field-focus-shadow inset,
        0 0 4px 0 $green-600;
      border: 0 none;
    }
  }

  .gl-field-error-outline {
    border: 1px solid $red-500;

    &:focus {
      box-shadow: 0 0 0 1px $red-500 inset, 0 1px 1px $gl-field-focus-shadow inset,
        0 0 4px 0 $gl-field-focus-shadow-error;
      border: 0 none;
    }
  }

  .gl-field-success-message {
    color: $green-600;
  }

  .gl-field-error-message {
    color: $red-500;
  }

  .gl-field-hint {
    color: $gl-text-color;
  }
}

.show-password-complexity-errors {
  .form-control:not(textarea) {
    height: $input-height;
  }

  .password-complexity-error-outline {
    border: 1px solid $red-500;

    &:focus {
      box-shadow: 0 0 0 1px $red-500 inset, 0 1px 1px $gl-field-focus-shadow inset,
        0 0 4px 0 $gl-field-focus-shadow-error;
      border: 0 none;
    }
  }
}

.input-icon-wrapper,
.select-wrapper {
  position: relative;
}

.input-icon-wrapper > .input-icon-right {
  position: absolute;
  right: 0.8em;
  top: 50%;
  transform: translateY(-50%);
  color: $gray-400;
}

.input-md {
  max-width: $input-md-width;
  width: 100%;
}

.input-lg {
  max-width: $input-lg-width;
  width: 100%;
}

.input-group-text {
  max-height: $input-height;
}

.add-issuable-form-input-wrapper {
  &.focus {
    border-color: var(--gray-700, $gray-700);

    input {
      @include gl-shadow-none;
    }
  }

  .gl-show-field-errors &.form-control:not(textarea) {
    height: auto;
  }
}

.add-issuable-form-input-wrapper.focus,
.issue-token-remove-button:focus {
  @include gl-focus;
}
