/* Contact and application forms. Tokens only, no local colour. */

.gx-form { max-width: 62ch; }

.gx-field { margin-block-end: var(--gx-s-5); }
.gx-field label {
  display: block; margin-block-end: var(--gx-s-2);
  font: var(--gx-label); color: var(--gx-ink);
}
.gx-req { color: var(--gx-stop); }

.gx-field input[type="text"],
.gx-field input[type="email"],
.gx-field input[type="tel"],
.gx-field select,
.gx-field textarea {
  inline-size: 100%;
  min-block-size: 44px;
  padding: var(--gx-s-4);
  font: var(--gx-body);
  color: var(--gx-ink);
  background: var(--gx-paper);
  border: 1px solid var(--gx-rule);
  border-radius: var(--gx-r-control);
}
.gx-field textarea { min-block-size: 140px; resize: vertical; }

.gx-field input[aria-invalid="true"],
.gx-field textarea[aria-invalid="true"],
.gx-field select[aria-invalid="true"] {
  border-color: var(--gx-stop);
  border-width: 2px;
}

.gx-hint { display: block; margin-block-start: var(--gx-s-2);
           font: var(--gx-dense); color: var(--gx-ink-3); }
.gx-err  { display: block; margin-block-start: var(--gx-s-2);
           font: var(--gx-dense); color: var(--gx-stop); }

.gx-form__errors {
  padding: var(--gx-s-5); margin-block-end: var(--gx-s-6);
  background: var(--gx-stop-tint);
  border-inline-start: 3px solid var(--gx-stop);
  border-radius: var(--gx-r-inline);
}
.gx-form__errors h2 { margin: 0 0 var(--gx-s-3); font: var(--gx-sub); }
.gx-form__errors ul { margin: 0; padding-inline-start: var(--gx-s-5); }
.gx-form__errors a  { color: var(--gx-ink); }

.gx-form__done {
  padding: var(--gx-s-6);
  background: var(--gx-act-tint);
  border-inline-start: 3px solid var(--gx-act);
  border-radius: var(--gx-r-inline);
}
.gx-form__done h2 { margin-block-start: 0; font: var(--gx-head);
                    letter-spacing: var(--gx-head-track); }

.gx-btn {
  min-block-size: 44px;
  padding: var(--gx-s-4) var(--gx-s-6);
  font: var(--gx-price-inline);
  color: var(--gx-paper);
  background: var(--gx-act);
  border: 0; border-radius: var(--gx-r-control);
  cursor: pointer;
}
.gx-btn:hover  { background: var(--gx-act-h); }
.gx-btn:active { background: var(--gx-act-p); }

.gx-fulfil {
  margin: var(--gx-s-4) 0 0;
  font: var(--gx-dense); color: var(--gx-ink-2);
}

/* ---- application forms ----------------------------------- */
.gx-form--wide { max-inline-size: 78ch; }
.gx-form__intro {
  max-inline-size: var(--gx-measure-lede);
  margin-block-end: var(--gx-s-7);
  font: var(--gx-lede); color: var(--gx-ink-2);
}
.gx-form__intro p { margin: 0 0 var(--gx-s-4); }

.gx-fieldset {
  border: 0; border-block-start: 1px solid var(--gx-rule);
  margin: 0 0 var(--gx-s-7); padding: var(--gx-s-6) 0 0;
}
.gx-fieldset legend {
  padding: 0; font: var(--gx-head);
  letter-spacing: var(--gx-head-track); color: var(--gx-ink);
}
.gx-fieldset__blurb {
  margin: var(--gx-s-3) 0 var(--gx-s-6);
  max-inline-size: var(--gx-measure-lede);
  font: var(--gx-dense); color: var(--gx-ink-3);
}

/* Two columns on wide screens for the short fields, one on narrow.
   Grid rather than float so the label/field/hint/error stack stays intact. */
@media (min-width: 720px) {
  .gx-fieldset { display: grid; grid-template-columns: 1fr 1fr; gap: 0 var(--gx-s-6); }
  .gx-fieldset legend,
  .gx-fieldset__blurb { grid-column: 1 / -1; }
  .gx-fieldset .gx-field:has(textarea),
  .gx-fieldset .gx-field:has(input[type="checkbox"]) { grid-column: 1 / -1; }
}

/* Checkbox rows read as a sentence, so the label sits beside the control. */
.gx-field:has(input[type="checkbox"]) {
  display: flex; align-items: flex-start; gap: var(--gx-s-4);
  flex-direction: row-reverse; justify-content: flex-end;
}
.gx-field:has(input[type="checkbox"]) label { margin: 0; font: var(--gx-body); }
.gx-check input {
  inline-size: 24px; block-size: 24px;  /* SC 2.5.8 minimum, not decorative */
  margin: 0; accent-color: var(--gx-act);
}

.gx-field input[type="file"] {
  inline-size: 100%; padding: var(--gx-s-3);
  font: var(--gx-dense); color: var(--gx-ink-2);
  background: var(--gx-band);
  border: 1px dashed var(--gx-rule); border-radius: var(--gx-r-control);
}
.gx-field input[type="number"],
.gx-field input[type="password"] {
  inline-size: 100%; min-block-size: 44px;
  padding: var(--gx-s-4); font: var(--gx-body);
  color: var(--gx-ink); background: var(--gx-paper);
  border: 1px solid var(--gx-rule); border-radius: var(--gx-r-control);
}
