/*
 * DO NOT EDIT THIS FILE.
 * See the following change record for more information,
 * https://www.drupal.org/node/3084859
 * @preserve
 */

/**
 * @file
 * Checkbox and radio input elements.
 */

/**
 * Form item modifiers.
 */

.form-type--boolean {
  margin-inline-start: var(--input--label-spacing);
  line-height: var(--admin-space-l);
}

.form-boolean {
  display: inline-block;
  box-sizing: border-box;
  width: 1.3125rem;
  height: 1.3125rem;
  vertical-align: text-bottom;
  border: 1px solid var(--admin-color-border-input);
  border-radius: var(--admin-radius-xs);
  background: var(--input-bg-color) no-repeat 50% 50%;
  background-size: 100% 100%;
  appearance: none;

  &:focus {
    outline-offset: -1px;
  }

  &:hover,
  &:active {
    border-color: var(--input-fg-color);
    box-shadow: inset 0 0 0 1px var(--input-fg-color);

    .gin--dark-mode & {
      border-color: var(--admin-color-text);
      box-shadow: none;
    }
  }

  /**
   * Radio and checkbox items that are the child of a form item.
   */
  .form-type--boolean & {
    position: relative;
    inset-block-start: calc(var(--admin-space-l) / 2);
    float: inline-start;
    margin-inline-start: calc(var(--input--label-spacing) * -1);
    transform: translateY(-50%);
  }

  .form-type--boolean.form-item--no-label & {
    position: static;
    float: none;
    margin-inline: 0;
    transform: none;
  }

  @media (forced-colors: active) {
    appearance: revert;
  }
}

.form-type--boolean.form-item--no-label {
  margin-inline-start: 0;
}

.form-radios,
.form-checkboxes {
  .form-type--boolean {
    margin-block: var(--admin-space-xs);
  }
}

/*
 * Radio buttons.
 */

.form-boolean--type-radio {
  &,
  &:hover,
  &:active,
  &:focus,
  &:hover:focus {
    border-color: var(--admin-color-border-input);
    border-radius: 50%;
    background-color: var(--admin-color-bg-input);
  }

  &:hover {
    box-shadow: inset 0 0 0 1px var(--admin-color-border);

    &,
    .gin--dark-mode & {
      border-color: var(--admin-color-text);
    }
  }

  &:checked:not(:disabled) {
    &,
    &:hover {
      background-color: var(--admin-color-bg-surface);
      box-shadow: inset 0 0 0 5px var(--admin-color-primary);
    }

    &:active,
    &:focus,
    &:hover:focus {
      border-color: var(--admin-color-focus-border);
      box-shadow:
        inset 0 0 0 5px var(--admin-color-primary),
        0 0 0 1px var(--admin-color-focus-border),
        0 0 0 4px var(--admin-color-focus);
    }
  }

  &:disabled {
    &,
    &:hover {
      cursor: not-allowed;
      border-color: var(--admin-color-border-disabled);
      background: var(--admin-color-bg-disabled);
    }
  }

  &:checked:disabled {
    &,
    &:hover {
      background: var(--admin-color-text-disabled);
      box-shadow: inset 0 0 0 5px var(--admin-color-bg-disabled);
    }
  }
}

/*
 * Checkboxes.
 */

.form-boolean--type-checkbox {
  &:not(:checked) {
    .gin--dark-mode & {
      background: var(--admin-color-bg-input);
    }
  }

  &:checked {
    border-color: var(--admin-color-primary);
    background-color: var(--admin-color-primary);
    background-image: url("data:image/svg+xml,%3csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M3.795 7.096l2.387 2.506 6.023-6.327 1.484 1.56-7.507 7.89L2.31 8.656z' fill='%23fff'/%3e%3c/svg%3e");

    &:not(:disabled) {
      .gin--dark-mode & {
        background-image: var(--admin-icon-checked);
      }
    }

    &:hover {
      border-color: var(--admin-color-primary-hover);
      background-color: var(--admin-color-primary-hover);
    }

    &:active {
      border-color: var(--admin-color-primary-active);
      background-color: var(--admin-color-primary-active);
    }
  }

  &[disabled] {
    &,
    &:hover {
      cursor: not-allowed;
      border-color: var(--admin-color-border-disabled);
      background-color: var(--admin-color-bg-disabled);

      &:checked {
        border-color: var(--admin-color-border-disabled);
        background-color: var(--admin-color-bg-disabled);
        box-shadow: none;
      }
    }
  }
}

/**
 * Error states.
 */

.form-boolean.error {
  border-color: var(--input--error-border-color);
  background-color: var(--input-bg-color);
  box-shadow: inset 0 0 0 1px var(--input--error-border-color);
  &:active,
  &:hover {
    box-shadow: inset 0 0 0 1px var(--input--error-border-color);
  }
  &:focus,
  &:focus:active,
  &:focus:hover {
    box-shadow:
      0 0 0 2px var(--admin-color-bg-input),
      0 0 0 5px var(--admin-color-focus),
      inset 0 0 0 1px var(--input--error-border-color);
  }
  &:checked:active,
  &:checked:hover {
    border-color: var(--input--error-border-color);
    background-color: var(--input-bg-color);
  }
}

.form-boolean--type-checkbox.error:checked,
.form-boolean--type-checkbox.error:checked:active,
.form-boolean--type-checkbox.error:checked:hover {
  background-color: var(--input--error-border-color);
}

.form-boolean--type-radio.error:checked,
.form-boolean--type-radio.error:checked:active,
.form-boolean--type-radio.error:checked:hover {
  background-image: url("data:image/svg+xml,%3csvg width='17' height='17' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle r='4.5' cx='8.5' cy='8.5' fill='%23d72222'/%3e%3c/svg%3e");
}

.form-boolean--type-radio.error:checked:focus {
  box-shadow:
    0 0 0 2px var(--admin-color-bg-input),
    0 0 0 5px var(--admin-color-focus),
    inset 0 0 0 1px var(--input--error-border-color);
}

/**
 * Disabled states.
 */

.form-boolean[disabled],
.form-boolean[disabled]:hover,
.form-boolean[disabled].error,
.form-boolean[disabled].error:hover,
.form-boolean--type-radio[disabled]:focus:active,
.form-boolean--type-radio[disabled]:active:hover,
.form-boolean--type-radio[disabled].error:active:hover {
  border-color: var(--input--disabled-border-color);
  background-color: var(--input--disabled-bg-color);
  background-image: none;
  box-shadow: none;
}

.form-boolean--type-checkbox[disabled]:checked {
  background-image: url("data:image/svg+xml,%3csvg width='16' height='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M3.795 7.096l2.387 2.506 6.023-6.327 1.484 1.56-7.507 7.89L2.31 8.656z' fill='%2382828c'/%3e%3c/svg%3e");
}

.form-boolean--type-radio[disabled]:checked,
.form-boolean--type-radio[disabled].error:checked {
  background-image: url("data:image/svg+xml,%3csvg width='17' height='17' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle r='4.5' cx='8.5' cy='8.5' fill='%2382828c'/%3e%3c/svg%3e");
}
