/**
 * @file
 * Form styling for the application.
 *
 * Defines styles for form elements, including inputs, buttons, and error states.
 */

form {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

/* Style for buttons and submit inputs. */
:where(button:not(.sub-menu-item-toggle), input[type="submit"], .form-submit, .form-reset) {
  color: var(--color-black);
  border: none;
  border-radius: var(--border-radius-base);
  background-color: var(--color-primary);
  font-size: 1rem;
  padding: var(--spacing-md) var(--spacing-lg);
}

/* Hover and focus styles for buttons and submit inputs. */
:where(button:not(.sub-menu-item-toggle), input[type="submit"], .form-submit, .form-reset):is(:hover, :focus-visible) {
  color: var(--color-black);
  background-color: var(--color-primary-dark);
  text-decoration: underline;
  text-underline-offset: var(--underline-offset);
  cursor: pointer;
}

/* Style for text inputs. */
input[type="date"],
input[type="datetime-local"],
input[type="email"],
input[type="number"],
input[type="password"],
input[type="search"],
input[type="tel"],
input[type="text"],
input[type="time"],
input[type="url"] {
  font-size: var(--font-size-md);
  border: 1px solid var(--form-input-border-color);
  background: var(--form-input-background);
  color: var(--form-input-color);
  border-radius: var(--border-radius-base);
  line-height: 1;
  display: block;
  padding: var(--spacing-md) var(--spacing-lg);
  max-width: 30em;
  width: 100%;
}

/* Style for textareas. */
textarea {
  border: 1px solid var(--form-input-border-color);
  background: var(--form-input-background);
  color: var(--form-input-color);
  border-radius: var(--border-radius-base);
  line-height: 1;
  display: block;
  padding: var(--spacing-xs) var(--spacing-md);
  width: 100%;
  font-size: var(--font-size-md);
}

/* Error state styles for inputs and textareas. */
.form-item--error input,
.form-item--error textarea {
  box-shadow: 0 0 0 1px var(--color-white), 0 0 0 4px var(--color-primary-dark);
}

/* Error state focus styles for inputs and textareas. */
.form-item--error input:focus-visible,
.form-item--error textarea:focus-visible {
  box-shadow: 0 0 0 1px var(--color-white), 0 0 0 6px var(--color-primary-dark);
}

.form-required:after {
  content: " *";
  color: var(--color-primary-dark);
  font-weight: bold;
}
