/* Form elements: textarea, single-line input, buttons, htmx spinner.
 *
 * The textarea is monospace by deliberate choice — coaches paste
 * pre-formatted interval blocks; proportional fonts ragged-edge them.
 */

/* ---------- Textarea ---------- */

.field__textarea {
  display: block;
  width: 100%;
  min-height: 11rem;
  padding: var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--size-2);
  line-height: var(--leading-normal);
  color: var(--ink);
  background: var(--paper);
  border: var(--border-thick);
  border-radius: 0;
}

.field__textarea::placeholder {
  color: var(--ink-muted);
}

/* ---------- Single-line input (unlock code) ---------- */

.field__input {
  flex: 1;
  min-width: 0;
  padding: var(--space-3) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--size-3);
  font-weight: var(--weight-bold);
  color: var(--ink);
  background: var(--paper);
  border: var(--border-thick);
  border-radius: 0;
}

/* ---------- Form layout ---------- */

.field__label {
  display: block;
  margin-bottom: var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--size-1);
  font-weight: var(--weight-bold);
  color: var(--ink);
  letter-spacing: 0.04em;
}

.form-row {
  display: flex;
  gap: var(--space-3);
  align-items: stretch;
  margin-top: var(--space-4);
}

/* ---------- Buttons ---------- */
/*
 * Two variants. Primary carries the accent fill, the thick ink border,
 * and the hard offset shadow. Pressing translates +2/+2 and collapses
 * the shadow — a brutalist convention that reads as "press."
 *
 * Secondary is a quiet but still confident outline used for copy /
 * download. Same border weight, no shadow, transparent fill.
 */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-3) var(--space-5);
  font-family: var(--font-body);
  font-size: var(--size-3);
  font-weight: var(--weight-bold);
  line-height: 1;
  letter-spacing: 0.02em;
  text-decoration: none;
  border: var(--border-thick);
  border-radius: 0;
  background: transparent;
  color: var(--ink);
  cursor: pointer;
  transition:
    transform 80ms ease,
    box-shadow 80ms ease,
    background-color 80ms ease,
    color 80ms ease;
}

.btn--primary {
  background: var(--accent);
  color: var(--paper);
  box-shadow: var(--shadow-hard);
}

.btn--primary:hover:not(:disabled) {
  transform: translate(2px, 2px);
  box-shadow: var(--shadow-hard-small);
}

.btn--primary:active:not(:disabled) {
  transform: translate(4px, 4px);
  box-shadow: 0 0 0 var(--ink);
}

.btn--secondary {
  background: var(--paper);
  color: var(--ink);
}

.btn--secondary:hover:not(:disabled) {
  background: var(--ink);
  color: var(--paper);
}

.btn:disabled {
  opacity: 0.6;
  cursor: progress;
  transform: none;
  box-shadow: var(--shadow-hard-small);
}

/* ---------- htmx spinner ---------- */

.htmx-indicator {
  font-family: var(--font-mono);
  font-size: var(--size-1);
  font-weight: var(--weight-bold);
  color: var(--ink);
  letter-spacing: 0.08em;
  align-self: center;
  opacity: 0;
  transition: opacity 120ms ease;
}

.htmx-request .htmx-indicator,
.htmx-request.htmx-indicator { opacity: 1; }
