/**
 * Form Input Components
 * Component-level classes for form inputs, textareas, and controls
 * Builds on base element styles from 02-base.css
 */

/* Input Component Class */
.input {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-2) var(--space-3);
  font-size: var(--font-size-sm);
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
}

.input:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px var(--color-focus-ring);
}

.input:disabled {
  background-color: var(--color-bg-muted);
  color: var(--color-text-muted);
  cursor: not-allowed;
  opacity: 0.6;
}

/* Input Size Variants */
.input--sm {
  padding: var(--space-1) var(--space-2);
  font-size: var(--font-size-xs);
}

.input--lg {
  padding: var(--space-3) var(--space-4);
  font-size: var(--font-size-base);
}

/* Input Error State */
.input--error,
.input.is-error {
  border-color: var(--color-destructive);
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
}

.input--error:focus,
.input.is-error:focus {
  border-color: var(--color-destructive);
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
}

/* Textarea Component Class */
.textarea {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-2) var(--space-3);
  font-size: var(--font-size-sm);
  min-height: 80px;
  resize: vertical;
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
}

.textarea:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px var(--color-focus-ring);
}

.textarea:disabled {
  background-color: var(--color-bg-muted);
  color: var(--color-text-muted);
  cursor: not-allowed;
  opacity: 0.6;
}

/* Textarea Error State */
.textarea--error,
.textarea.is-error {
  border-color: var(--color-destructive);
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
}

.textarea--error:focus,
.textarea.is-error:focus {
  border-color: var(--color-destructive);
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
}

/* Form Group */
.form-group {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin-bottom: var(--space-4);
}

/* Form Label */
.form-label {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-foreground);
}

/* Form Error Message */
.form-error {
  font-size: var(--font-size-xs);
  color: var(--color-destructive);
}

/* Switch (Toggle) Component */
.switch {
  position: relative;
  display: inline-flex;
  align-items: center;
  cursor: pointer;
  user-select: none;
}

.switch input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.switch__slider {
  position: relative;
  display: inline-block;
  width: 32px;
  height: 18px;
  background-color: var(--color-border);
  border-radius: var(--radius-full);
  transition: background-color var(--transition-fast);
}

.switch__slider::after {
  content: "";
  position: absolute;
  top: 2px;
  left: 2px;
  width: 14px;
  height: 14px;
  background-color: white;
  border-radius: var(--radius-full);
  transition: transform var(--transition-fast);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}

.switch input[type="checkbox"]:checked ~ .switch__slider {
  background-color: var(--color-primary);
}

.switch input[type="checkbox"]:checked ~ .switch__slider::after {
  transform: translateX(14px);
}

.switch input[type="checkbox"]:focus-visible ~ .switch__slider {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

.switch input[type="checkbox"]:disabled ~ .switch__slider {
  opacity: 0.5;
  cursor: not-allowed;
}

/* Checkbox Component */
.checkbox {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  cursor: pointer;
  user-select: none;
}

.checkbox input[type="checkbox"] {
  width: 16px;
  height: 16px;
  cursor: pointer;
  accent-color: var(--color-primary);
}

.checkbox input[type="checkbox"]:disabled {
  cursor: not-allowed;
  opacity: 0.6;
}

/* Number Stepper — shadcn style */
.number-stepper {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  overflow: hidden;
  height: 36px;
}

.number-stepper input[type="number"] {
  width: 4rem;
  height: 100%;
  border: none;
  text-align: center;
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-medium);
  background: transparent;
  -moz-appearance: textfield;
  padding: 0;
}

.number-stepper input[type="number"]::-webkit-inner-spin-button,
.number-stepper input[type="number"]::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.number-stepper input[type="number"]:focus {
  outline: none;
}

.number-stepper:focus-within {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-primary) 20%, transparent);
}

.stepper-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 100%;
  border: none;
  border-left: 1px solid var(--color-border);
  background: var(--color-bg-muted, var(--color-muted));
  cursor: pointer;
  font-size: 1rem;
  color: var(--color-foreground);
  transition: background-color var(--transition-fast);
  padding: 0;
  line-height: 1;
}

.stepper-btn:hover {
  background: var(--color-border);
}

.stepper-btn:active {
  background: var(--color-primary);
  color: white;
}
