body.form-page {
  min-height: 100dvh;
  background: var(--color-paper-2);
}

.form-shell {
  display: grid;
  justify-items: center;
  gap: var(--space-lg);
  width: min(100%, 30rem);
  margin-inline: auto;
  padding: var(--space-xl) var(--space-sm);
}

.card {
  width: 100%;
  border-radius: var(--radius-lg);
  background: var(--color-paper);
  box-shadow: var(--shadow-soft);
}

.form {
  display: grid;
  gap: var(--space-sm);
}

.card.form {
  padding: var(--space-lg);
  animation: form-in var(--dur-long) var(--ease-out);
}

@keyframes form-in {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
}

.form__title {
  font-size: var(--text-2xl);
}

.form__title--sm {
  font-size: var(--text-xl);
}

.form__lede {
  color: var(--color-ink-2);
}

.form__alt {
  text-align: center;
  font-size: var(--text-sm);
  color: var(--color-muted);
}

.field {
  display: grid;
  gap: var(--space-3xs);
}

.field > span {
  font-size: var(--text-sm);
  font-weight: 600;
}

.field small {
  color: var(--color-muted);
  font-size: var(--text-xs);
}

.input {
  width: 100%;
  min-height: 48px;
  padding: var(--space-xs) var(--space-sm);
  border: 1.5px solid var(--color-rule);
  border-radius: var(--radius-sm);
  background: var(--color-paper);
  transition: border-color var(--dur-micro) var(--ease-out);
}

.input:hover {
  border-color: var(--color-muted);
}

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

.input:disabled {
  opacity: 0.6;
}

.input[aria-invalid='true'] {
  border-color: var(--color-danger);
}

textarea.input {
  resize: vertical;
}

.form-ok {
  color: var(--color-ready-deep);
  font-weight: 600;
}
