/*
  Workstride site design system: The Line.

  A participant's time with a provider is a route with stations; the platform
  is a network of four lines. Colour is functional and always travels with a
  name, a letter and a shape. The bold device is the line itself; everything
  around it stays quiet: white and concourse grounds, ink type, product
  screens in the product's own chassis (screens.css owns everything inside
  .app-frame, and loads after this file).

  Read DESIGN-SYSTEM.md before adding to this file. Sections:
   1 Fonts          7 Line primitives     13 Drawers and toasts
   2 Tokens         8 Status and cites    14 Page furniture
   3 Base           9 Header and nav      15 Components (see index below)
   4 Utilities     10 Service notice      16 Styleguide
   5 Type          11 Breadcrumbs         17 Print
   6 Layout, bands 12 Footer              18 Reduced motion
*/

/* ================================================================== */
/* 1 Fonts                                                             */
/* ================================================================== */

@font-face {
  font-family: "Atkinson Next";
  src: url("/assets/fonts/atkinson-next-latin.woff2") format("woff2");
  font-weight: 200 800;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Atkinson Next";
  src: url("/assets/fonts/atkinson-next-latin-ext.woff2") format("woff2");
  font-weight: 200 800;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Atkinson Next";
  src: url("/assets/fonts/atkinson-next-latin-italic.woff2") format("woff2");
  font-weight: 200 800;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Atkinson Mono";
  src: url("/assets/fonts/atkinson-mono-latin.woff2") format("woff2");
  font-weight: 200 800;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Atkinson Mono";
  src: url("/assets/fonts/atkinson-mono-latin-italic.woff2") format("woff2");
  font-weight: 200 800;
  font-style: italic;
  font-display: swap;
}

/* ================================================================== */
/* 2 Tokens (contrast ratios are listed in DESIGN-SYSTEM.md)           */
/* ================================================================== */

:root {
  color-scheme: light;

  /* Ground and ink */
  --ground: #ffffff;
  --concourse: #f0f2f3;
  --concourse-deep: #e3e7ea;
  --ink: #15181c;
  --ink-2: #3d434a;
  --ink-3: #59606a;
  --rule: #d4d9dd;          /* decorative hairlines only */
  --rule-strong: #7c858d;   /* control boundaries, 3.75:1 on ground */

  /* Ink boards (signs, departure boards, the founding band) */
  --board: #15181c;
  --board-2: #22262b;
  --board-rule: #3a4047;
  --on-ink: #ffffff;
  --on-ink-2: #d6dade;
  --on-ink-3: #aeb5bc;

  /* The five lines: never use a line colour without its letter, shape and name */
  --line-day: #007a5e;          /* The day's work: gum green, circle, D */
  --line-day-wash: #e2f1ec;
  --line-people: #1f5bd6;       /* Participants and employers: harbour blue, diamond, P */
  --line-people-wash: #e5edfb;
  --line-money: #ffc72c;        /* Placements and money: wattle, square, $; always cased in ink on light grounds */
  --line-money-wash: #fff4d1;
  --line-records: #15181c;      /* Records and quality: basalt, hexagon, R; drawn with a white core */
  --line-comms: #8a3ea0;        /* Communication and insight: jacaranda, triangle, C */
  --line-comms-wash: #f4e9f7;
  --line-tools: #4b535c;        /* Tools and trust (passport and tools, not a platform line): charcoal, signpost, T */
  --line-tools-wash: #eceef0;

  /* States (always with a word and a glyph) */
  --breach: #b3261e;
  --breach-wash: #fcebea;
  --breach-on-ink: #ff9b91;
  --caution: #8a5300;
  --caution-wash: #fff4e0;
  --ok: #146c43;
  --ok-wash: #e6f4ec;

  /* Provider brand: sample defaults. lib/brand.js applyBrand() overrides these
     on the root element. Only product screens and brand previews use them. */
  --brand: #1d3557;
  --brand-ink: #ffffff;
  --brand-line: #1d3557;
  --brand-hover: #0c2343;
  --brand-hover-ink: #ffffff;

  /* Type */
  --font: "Atkinson Next", "Atkinson Hyperlegible", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --mono: "Atkinson Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  --t-hero: clamp(2.75rem, 1.05rem + 5.1vw, 5.5rem);
  --t-display: clamp(2.5rem, 1.35rem + 3.6vw, 4.375rem);
  --t-h2: clamp(2.125rem, 1.35rem + 2.4vw, 3.375rem);
  --t-h3: clamp(1.4375rem, 1.15rem + 0.9vw, 1.875rem);
  --t-h4: 1.25rem;
  --t-sign: clamp(1.875rem, 1.3rem + 1.8vw, 2.75rem);
  --t-lead: clamp(1.125rem, 1rem + 0.4vw, 1.3125rem);
  --t-prose: clamp(1.0625rem, 0.98rem + 0.3vw, 1.1875rem);
  --t-body: 1.0625rem;
  --t-small: 0.9375rem;
  --t-micro: 0.84375rem;

  /* Space (4px base) */
  --s1: 0.25rem;
  --s2: 0.5rem;
  --s3: 0.75rem;
  --s4: 1rem;
  --s5: 1.5rem;
  --s6: 2rem;
  --s7: 3rem;
  --s8: 4rem;
  --s9: 6rem;

  /* Layout */
  --wrap: 80rem;
  --measure: 40rem;
  --gutter: clamp(1rem, 4vw, 3rem);
  --band: clamp(3.5rem, 2.25rem + 3.2vw, 5.5rem);
  --header-h: 4.5rem;

  /* Radius by hierarchy, never one radius for everything */
  --r-sign: 4px;
  --r-ctl: 8px;
  --r-card: 10px;
  --r-screen: 12px;
  --r-passport: 14px;
  --r-pill: 999px;

  /* Line weights */
  --track: 0.75rem;
  --track-thin: 0.375rem;

  /* Motion */
  --ease-train: cubic-bezier(0.6, 0, 0.2, 1);
  --ease-out: cubic-bezier(0.2, 0.8, 0.2, 1);

  /* Stacking */
  --z-header: 50;
  --z-panel: 60;
  --z-toast: 90;
  --z-skip: 100;
}

@media (max-width: 37.49rem) {
  :root {
    --header-h: 4rem;
  }
}

/* ================================================================== */
/* 3 Base (element rules use :where() so any class wins)               */
/* ================================================================== */

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  scroll-padding-top: calc(var(--header-h) + 1.5rem);
  scroll-padding-bottom: 2rem;
}

@media (prefers-reduced-motion: no-preference) {
  html:focus-within {
    scroll-behavior: smooth;
  }
}

body {
  margin: 0;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  background: var(--ground);
  color: var(--ink);
  font-family: var(--font);
  font-size: var(--t-body);
  line-height: 1.55;
  font-feature-settings: "kern";
  -webkit-font-smoothing: antialiased;
  overflow-wrap: break-word;
}

main {
  flex: 1 0 auto;
  /* Lines run off the page edges; clip them without making a scroll container */
  overflow-x: clip;
}

main:focus {
  outline: none;
}

:where(h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd, ol, ul, fieldset, pre) {
  margin: 0;
}

:where(ul, ol)[class] {
  padding: 0;
  list-style: none;
}

:where(img, svg, video, canvas) {
  max-width: 100%;
}

:where(img, video) {
  display: block;
  height: auto;
}

:where(fieldset) {
  border: 0;
  padding: 0;
  min-width: 0;
}

:where(legend) {
  padding: 0;
}

:where(button, input, select, textarea) {
  font: inherit;
  color: inherit;
  letter-spacing: inherit;
}

:where(button) {
  cursor: pointer;
}

:where(a) {
  color: inherit;
  text-decoration-thickness: 0.08em;
  text-underline-offset: 0.18em;
}

:where(a:hover) {
  text-decoration-thickness: 0.15em;
}

:where(table) {
  border-collapse: collapse;
}

:where(h1, h2, h3, h4) {
  text-wrap: balance;
}

:where(p, li, dd, figcaption) {
  text-wrap: pretty;
}

:where(abbr[title]) {
  text-decoration: underline dotted;
  cursor: help;
}

[hidden] {
  display: none !important;
}

/* One focus ring everywhere: an ink ring outside a halo of the ground, so it
   shows on light grounds, on washes and on product colours. Ink boards swap to
   a wattle ring with an ink halo (.on-ink). Components with their own resting
   box-shadow keep the ring and drop the halo. */
:focus-visible {
  outline: 3px solid var(--focus, var(--ink));
  outline-offset: 3px;
  box-shadow: 0 0 0 3px var(--focus-halo, var(--ground));
}

::selection {
  background: var(--line-money);
  color: var(--ink);
}

.skip-link {
  position: absolute;
  left: var(--gutter);
  top: -5rem;
  z-index: var(--z-skip);
  padding: 0.75rem 1rem;
  border-radius: var(--r-ctl);
  background: var(--ink);
  color: var(--on-ink);
  font-weight: 700;
  text-decoration: none;
}

.skip-link:focus {
  top: 0.75rem;
  outline-color: var(--line-money);
}

/* ================================================================== */
/* 4 Utilities                                                         */
/* ================================================================== */

.wrap {
  width: 100%;
  max-width: calc(var(--wrap) + var(--gutter) * 2);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.wrap--text {
  max-width: calc(46rem + var(--gutter) * 2);
}

.visually-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

.num {
  font-variant-numeric: tabular-nums;
}

.mono {
  font-family: var(--mono);
  font-variant-numeric: tabular-nums;
}

.nowrap {
  white-space: nowrap;
}

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

.flow > * + * {
  margin-top: var(--flow, 1em);
}

.cluster {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--cluster-gap, var(--s3));
}

.placeholder-copy {
  background: var(--line-money-wash);
  box-shadow: inset 0 -2px 0 var(--line-money);
}

/* ================================================================== */
/* 5 Type                                                              */
/* ================================================================== */

.h-hero {
  font-size: var(--t-hero);
  font-weight: 800;
  line-height: 0.96;
  letter-spacing: -0.035em;
}

.h-display {
  font-size: var(--t-display);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.032em;
}

.h2 {
  font-size: var(--t-h2);
  font-weight: 800;
  line-height: 1.02;
  letter-spacing: -0.03em;
}

.h3 {
  font-size: var(--t-h3);
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.h4 {
  font-size: var(--t-h4);
  font-weight: 800;
  line-height: 1.25;
  letter-spacing: -0.01em;
}

.lead {
  font-size: var(--t-lead);
  line-height: 1.5;
  color: var(--ink-2);
}

.small {
  font-size: var(--t-small);
}

.micro {
  font-size: var(--t-micro);
  line-height: 1.4;
}

.textlink {
  display: inline-flex;
  align-items: center;
  min-height: 2.75rem;
  font-weight: 700;
  color: var(--ink);
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 0.25em;
}

.textlink:hover {
  text-decoration-thickness: 3px;
}

/* ================================================================== */
/* 6 Layout and bands                                                  */
/* ================================================================== */

.band {
  padding-block: var(--band);
}

.band--concourse {
  background: var(--concourse);
}

.band--ruled {
  border-top: 1px solid var(--rule);
}

.band--tight {
  padding-block: clamp(2.5rem, 2rem + 2vw, 3.5rem);
}

.band--flush-top {
  padding-top: 0;
}

.on-ink {
  --focus: var(--line-money);
  --focus-halo: var(--board);
  color: var(--on-ink);
}

.split {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: var(--s6) clamp(2rem, 4vw, 4.5rem);
  align-items: start;
}

.split--even {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.split--reverse {
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
}

@media (max-width: 68.74rem) {
  .split,
  .split--even,
  .split--reverse {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* Section head: a line label (only when it says which line or what kind of
   thing follows), the heading, and a lead in the right-hand column. */
.section-head {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: var(--s4) clamp(2rem, 4vw, 4.5rem);
  align-items: end;
  margin-bottom: clamp(1.75rem, 1.25rem + 1.5vw, 2.75rem);
}

.section-head__line {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 0.35rem 0.6rem;
  margin-bottom: var(--s4);
  font-size: var(--t-small);
  font-weight: 700;
  line-height: 1.3;
  color: var(--ink-2);
}

.section-head__title {
  font-size: var(--t-h2);
  font-weight: 800;
  line-height: 1.02;
  letter-spacing: -0.03em;
  max-width: 18ch;
}

.section-head__aside {
  font-size: var(--t-lead);
  line-height: 1.5;
  color: var(--ink-2);
  max-width: 36rem;
}

.section-head__aside > * + * {
  margin-top: var(--s3);
}

.section-head--stack {
  grid-template-columns: minmax(0, 1fr);
}

.section-head--stack .section-head__aside {
  max-width: 44rem;
}

@media (max-width: 68.74rem) {
  .section-head {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* Page head for hubs, legal and plain pages */
.page-head {
  padding-block: clamp(2rem, 1.5rem + 2.5vw, 4rem) clamp(1.5rem, 1.25rem + 1.5vw, 2.5rem);
}

.page-head__line {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 0.35rem 0.6rem;
  margin-bottom: var(--s4);
  font-size: var(--t-small);
  font-weight: 700;
  color: var(--ink-2);
}

.page-head__title {
  font-size: var(--t-display);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.032em;
  max-width: 20ch;
}

.page-head__lead {
  margin-top: var(--s5);
  max-width: 44rem;
  font-size: var(--t-lead);
  line-height: 1.5;
  color: var(--ink-2);
}

.page-head__meta {
  margin-top: var(--s5);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s5);
  font-size: var(--t-small);
  color: var(--ink-3);
}

/* ================================================================== */
/* Buttons                                                             */
/* ================================================================== */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.55rem;
  min-height: 3rem;
  padding: 0.65rem 1.25rem;
  border: 2px solid var(--ink);
  border-radius: var(--r-ctl);
  background: var(--ink);
  color: var(--on-ink);
  font-weight: 700;
  font-size: var(--t-body);
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease;
}

.btn:hover {
  background: #2b3036;
  border-color: #2b3036;
}

.btn--quiet {
  background: transparent;
  color: var(--ink);
  border-color: var(--ink);
}

.btn--quiet:hover {
  background: var(--concourse);
  border-color: var(--ink);
}

.btn--wattle {
  background: var(--line-money);
  border-color: var(--line-money);
  color: var(--ink);
}

.btn--wattle:hover {
  background: #ffd65f;
  border-color: #ffd65f;
}

.btn--on-ink {
  background: transparent;
  border-color: var(--on-ink);
  color: var(--on-ink);
}

.btn--on-ink:hover {
  background: var(--board-2);
  border-color: var(--on-ink);
}

.btn--sm {
  min-height: 2.5rem;
  padding: 0.4rem 0.9rem;
  font-size: var(--t-small);
}

.btn--lg {
  min-height: 3.5rem;
  padding: 0.8rem 1.6rem;
  font-size: 1.125rem;
}

.btn--block {
  width: 100%;
}

.btn[disabled],
.btn[aria-disabled="true"] {
  cursor: not-allowed;
  background: var(--concourse-deep);
  border-color: var(--concourse-deep);
  color: var(--ink-3);
}

.on-ink .btn[disabled] {
  background: var(--board-2);
  border-color: var(--board-2);
  color: var(--on-ink-3);
}

.actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s3) var(--s5);
}

/* ================================================================== */
/* 7 Line primitives                                                   */
/* ================================================================== */

/* Line bullet: letter, shape and colour together. Always aria-hidden with the
   line name in text nearby. */
.bullet {
  --b: 1.625rem;
  position: relative;
  display: inline-grid;
  place-items: center;
  flex: none;
  width: var(--b);
  height: var(--b);
  color: #ffffff;
  font-weight: 800;
  font-size: calc(var(--b) * 0.52);
  line-height: 1;
  vertical-align: middle;
  font-style: normal;
}

.bullet::before {
  content: "";
  position: absolute;
  inset: 0;
}

.bullet > span {
  position: relative;
}

.bullet--day::before {
  background: var(--line-day);
  border-radius: 50%;
}

.bullet--money {
  color: var(--ink);
}

.bullet--money::before {
  background: var(--line-money);
  border: 2px solid var(--ink);
  border-radius: 3px;
}

.bullet--people::before {
  inset: 14%;
  background: var(--line-people);
  border-radius: 2px;
  transform: rotate(45deg);
}

.bullet--records::before {
  background: var(--line-records);
  clip-path: polygon(25% 3%, 75% 3%, 100% 50%, 75% 97%, 25% 97%, 0 50%);
}

/* A downward triangle: the wide top leaves room for the letter */
.bullet--comms::before {
  inset: -2% -8% -10%;
  background: var(--line-comms);
  clip-path: polygon(0 0, 100% 0, 50% 100%);
}

.bullet--comms > span {
  top: -0.14em;
  font-size: 0.92em;
}

.bullet--tools::before {
  inset: 6% -2% 6% 0;
  background: var(--line-tools);
  clip-path: polygon(0 0, 70% 0, 100% 50%, 70% 100%, 0 100%);
}

.bullet--tools > span {
  left: -0.12em;
}

.bullet--sm {
  --b: 1.25rem;
}

.bullet--lg {
  --b: 2.25rem;
}

.bullet--xl {
  --b: 3rem;
}

/* On ink boards the bullets get a white casing so they separate from the ground */
.on-ink .bullet--day::before,
.on-ink .bullet--people::before {
  box-shadow: 0 0 0 2px #ffffff;
}

.on-ink .bullet--comms::before {
  background: #ffffff;
}

.on-ink .bullet--comms {
  color: var(--line-comms);
}

.on-ink .bullet--tools::before {
  box-shadow: none;
  background: #ffffff;
}

.on-ink .bullet--tools {
  color: var(--ink);
}

.on-ink .bullet--money::before {
  border-color: #ffffff;
}

.on-ink .bullet--records {
  color: var(--ink);
}

.on-ink .bullet--records::before {
  background: #ffffff;
}

/* Line badge: bullet plus the line name */
.line-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-weight: 700;
  line-height: 1.2;
}

.line-set {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
}

/* A plain track segment, horizontal by default */
.track {
  display: block;
  height: var(--track);
  background: var(--line, var(--line-day));
}

.track--thin {
  height: var(--track-thin);
}

[data-line="day"] {
  --line: var(--line-day);
  --line-wash: var(--line-day-wash);
}

[data-line="money"] {
  --line: var(--line-money);
  --line-wash: var(--line-money-wash);
  --line-case: var(--ink);
}

[data-line="people"] {
  --line: var(--line-people);
  --line-wash: var(--line-people-wash);
}

[data-line="records"] {
  --line: var(--line-records);
  --line-wash: var(--concourse);
}

[data-line="comms"] {
  --line: var(--line-comms);
  --line-wash: var(--line-comms-wash);
}

[data-line="tools"] {
  --line: var(--line-tools);
  --line-wash: var(--line-tools-wash);
}

/* Backward compatibility (17/09/2026): markup written for the first, four-line
   version still renders. c draws as day, m as money, e as people, p as records.
   Use the five line keys in new markup. */
:root {
  --line-c: var(--line-day);
  --line-c-wash: var(--line-day-wash);
  --line-m: var(--line-money);
  --line-m-wash: var(--line-money-wash);
  --line-e: var(--line-people);
  --line-e-wash: var(--line-people-wash);
  --line-p: var(--line-records);
}

[data-line="c"] { --line: var(--line-day); --line-wash: var(--line-day-wash); }
[data-line="m"] { --line: var(--line-money); --line-wash: var(--line-money-wash); --line-case: var(--ink); }
[data-line="e"] { --line: var(--line-people); --line-wash: var(--line-people-wash); }
[data-line="p"] { --line: var(--line-records); --line-wash: var(--concourse); }

.bullet--c::before { background: var(--line-day); border-radius: 50%; }
.bullet--m { color: var(--ink); }
.bullet--m::before { background: var(--line-money); border: 2px solid var(--ink); border-radius: 3px; }
.bullet--e::before { inset: 14%; background: var(--line-people); border-radius: 2px; transform: rotate(45deg); }
.bullet--p::before { background: var(--line-records); clip-path: polygon(25% 3%, 75% 3%, 100% 50%, 75% 97%, 25% 97%, 0 50%); }
.on-ink .bullet--c::before,
.on-ink .bullet--e::before { box-shadow: 0 0 0 2px #ffffff; }
.on-ink .bullet--m::before { border-color: #ffffff; }
.on-ink .bullet--p { color: var(--ink); }
.on-ink .bullet--p::before { background: #ffffff; }

.track[data-line="money"],
[data-line="money"] > .track {
  box-shadow: inset 0 2.5px 0 var(--ink), inset 0 -2.5px 0 var(--ink);
}

/* Station markers */
.station-dot {
  display: inline-block;
  flex: none;
  width: 1.375rem;
  height: 1.375rem;
  border: 4px solid var(--ink);
  border-radius: 50%;
  background: #ffffff;
}

.station-dot--here {
  background: var(--ink);
  box-shadow: 0 0 0 4px var(--line-money), 0 0 0 6px var(--ink);
}

.station-dot--interchange {
  width: 2.75rem;
  height: 1.5rem;
  border-radius: var(--r-pill);
}

.station-dot--terminus {
  width: 0.75rem;
  height: 2.25rem;
  border: 0;
  border-radius: 2px;
  background: var(--ink);
}

/* ================================================================== */
/* 8 Status pills and citations                                         */
/* ================================================================== */

/* Built: filled dot, solid ring. Planned: hollow dot, dashed ring.
   Waits on the Department: half-filled dot, double ring. Always with words. */
.status {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  min-height: 1.75rem;
  padding: 0.125rem 0.65rem 0.125rem 0.5rem;
  border: 1.5px solid currentColor;
  border-radius: var(--r-pill);
  font-size: var(--t-micro);
  font-weight: 700;
  line-height: 1.2;
  white-space: nowrap;
  color: var(--ink);
  background: var(--ground);
  vertical-align: middle;
}

.status::before {
  content: "";
  flex: none;
  width: 0.625rem;
  height: 0.625rem;
  border: 2px solid currentColor;
  border-radius: 50%;
  background: currentColor;
}

.status--planned {
  border-style: dashed;
}

.status--planned::before {
  background: transparent;
}

.status--waiting,
.status--gated {
  border-width: 3px;
  border-style: double;
}

.status--waiting::before,
.status--gated::before {
  background: transparent;
  box-shadow: inset 0.19rem 0 0 0 currentColor;
}

.on-ink .status {
  color: var(--on-ink);
  background: transparent;
}

.status-legend {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s3) var(--s6);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.status-legend__item {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.6rem;
}

@media (max-width: 56.24rem) {
  .status-legend {
    flex-direction: column;
    gap: var(--s3);
  }
}

/* Citation label: short form, mono. "Part B 6.6", "Deed 42.3(b)" */
.cite {
  font-family: var(--mono);
  font-size: 0.875em;
  font-weight: 700;
  font-style: normal;
  letter-spacing: -0.01em;
  white-space: nowrap;
}

/* Sample and demo labels: diamond glyph plus words */
.demo-label {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.2rem 0.6rem;
  border: 1px solid var(--rule);
  border-radius: var(--r-sign);
  background: var(--ground);
  font-size: var(--t-micro);
  font-weight: 700;
  line-height: 1.3;
  color: var(--ink-2);
  white-space: nowrap;
}

.demo-label::before {
  content: "";
  flex: none;
  width: 0.5rem;
  height: 0.5rem;
  background: var(--ink);
  transform: rotate(45deg);
}

.demo-label--interactive::before {
  background: transparent;
  box-shadow: inset 0 0 0 2px var(--ink);
}

/* ================================================================== */
/* 9 Header and navigation                                              */
/* ================================================================== */

.masthead {
  position: sticky;
  top: 0;
  z-index: var(--z-header);
  background: var(--ground);
  border-bottom: 1px solid var(--rule);
}

.masthead__bar {
  position: relative;
  display: flex;
  align-items: center;
  gap: var(--s3);
  width: 100%;
  max-width: calc(var(--wrap) + var(--gutter) * 2);
  min-height: var(--header-h);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.logo {
  --logo-knock: var(--ground);
  --logo-casing: var(--ink);
  display: inline-flex;
  align-items: center;
  flex: none;
  min-height: 2.75rem;
  color: var(--ink);
  text-decoration: none;
}

.logo__svg {
  display: block;
  width: auto;
  height: 1.625rem;
}

.logo__knock {
  fill: var(--logo-knock);
}

.logo__hub {
  fill: var(--line-money);
  stroke: var(--logo-casing);
}

.primary-nav {
  margin-inline: var(--s3) auto;
}

.nav-list {
  display: flex;
  align-items: center;
  gap: 0;
}

/* Panels hang from the whole header bar (.masthead__bar), never from their
   trigger, so no panel can run off the page at any width. */
.nav-item {
  position: static;
}

.nav-trigger,
.nav-top-link {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  min-height: 2.75rem;
  padding: 0.25rem 0.6rem;
  border: 0;
  border-radius: var(--r-ctl);
  background: transparent;
  color: var(--ink-2);
  font-size: 1rem;
  font-weight: 700;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
}

.nav-trigger::after {
  content: "";
  width: 0.4rem;
  height: 0.4rem;
  margin: -0.2rem 0 0 0.1rem;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg);
  transition: transform 150ms ease;
}

.nav-trigger[aria-expanded="true"]::after {
  margin-top: 0.2rem;
  transform: rotate(-135deg);
}

.nav-trigger:hover,
.nav-top-link:hover {
  color: var(--ink);
  background: var(--concourse);
}

.nav-trigger[aria-expanded="true"] {
  color: var(--ink);
  background: var(--concourse-deep);
}

/* The section you are in: a short track under the label */
.nav-item[aria-current] > .nav-trigger,
.nav-top-link[aria-current] {
  color: var(--ink);
  box-shadow: inset 0 -4px 0 -1px var(--ink);
}

.nav-panel {
  position: absolute;
  top: 100%;
  left: var(--gutter);
  right: var(--gutter);
  z-index: var(--z-panel);
  max-height: calc(100vh - var(--header-h) - 1.5rem);
  max-height: calc(100dvh - var(--header-h) - 1.5rem);
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: var(--s4) var(--s5) var(--s5);
  border: 2px solid var(--ink);
  border-top-width: 0;
  border-radius: 0 0 var(--r-card) var(--r-card);
  background: var(--ground);
  box-shadow: 0 1.25rem 2.5rem -1.5rem rgba(0, 0, 0, 0.35);
}

.nav-panel-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
  gap: 2px var(--s3);
}

.nav-link {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  min-height: 2.5rem;
  padding: 0.45rem 0.6rem;
  border-radius: var(--r-ctl);
  color: var(--ink);
  text-decoration: none;
}

.nav-link:hover {
  background: var(--concourse);
}

.nav-link-label {
  font-size: 0.9375rem;
  font-weight: 700;
  line-height: 1.25;
}

.nav-link:hover .nav-link-label {
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 0.2em;
}

.nav-link-blurb {
  font-size: 0.8125rem;
  line-height: 1.35;
  color: var(--ink-3);
}

.nav-link[aria-current="page"] .nav-link-label::after {
  content: "You are here";
  display: inline-block;
  margin-left: 0.5rem;
  padding: 0 0.45rem;
  border: 1.5px solid var(--ink);
  border-radius: var(--r-pill);
  background: var(--line-money);
  font-size: 0.75rem;
  font-weight: 800;
  line-height: 1.4;
  vertical-align: 0.1em;
}

/* Platform panel: the five lines, drawn as lines (built by ui/nav.js) */
.nav-panel--lines {
  padding: var(--s4) var(--s5) var(--s5);
}

.nav-lines {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: var(--s4) var(--s4);
}

.nav-lines__top {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s2) var(--s5);
  padding-bottom: var(--s3);
  border-bottom: 1px solid var(--rule);
}

.nav-lines__top .nav-link {
  flex-direction: row;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.25rem 0.75rem;
  padding-inline: 0.5rem;
}

.nav-lines__top .nav-link-label {
  font-size: 1.0625rem;
}

.nav-line__head,
.nav-group__head {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: var(--s2);
  font-size: var(--t-small);
  font-weight: 800;
}

.nav-group__head {
  padding-inline: 0.75rem;
  color: var(--ink-2);
}

/* Panels with pages under pages (Connect): one column per top-level page,
   its pages listed beneath it. A grid, so every group sits where you expect. */
.nav-panel--nested .nav-panel-list {
  grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
  gap: var(--s3) var(--s4);
  align-items: start;
}

.nav-sublist {
  display: grid;
  margin: 0 0 0 0.75rem;
  padding-left: 0.5rem;
  border-left: 3px solid var(--rule);
}

.nav-sublist .nav-link {
  min-height: 2.25rem;
  padding-block: 0.35rem;
}

.nav-sublist .nav-link-label {
  font-weight: 600;
}

.nav-sublist .nav-link-blurb {
  display: none;
}

/* Panels with a company group (Resources) */
.nav-groups {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
  gap: var(--s4);
}

.nav-groups .nav-group + .nav-group {
  padding-left: var(--s4);
  border-left: 1px solid var(--rule);
}

.nav-panel--groups .nav-group:first-child .nav-panel-list {
  grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
}

.nav-line__list {
  position: relative;
  display: grid;
}

.nav-line__list::before {
  content: "";
  position: absolute;
  left: 0.8125rem;
  top: 1.25rem;
  bottom: 1.25rem;
  width: var(--track-thin);
  margin-left: calc(var(--track-thin) / -2);
  background: var(--line, var(--line-day));
}

.nav-line[data-line="money"] .nav-line__list::before {
  box-shadow: inset 1.5px 0 0 var(--ink), inset -1.5px 0 0 var(--ink);
}

.nav-line__list .nav-link {
  position: relative;
  padding: 0.4rem 0.5rem 0.4rem 2.1rem;
  min-height: 2.5rem;
}

.nav-line__list .nav-link::before {
  content: "";
  position: absolute;
  left: 0.8125rem;
  top: 0.95rem;
  width: 0.75rem;
  height: 0.75rem;
  margin-left: -0.375rem;
  border: 3px solid var(--ink);
  border-radius: 50%;
  background: var(--ground);
}

.nav-line__list .nav-link:hover::before,
.nav-line__list .nav-link[aria-current="page"]::before {
  background: var(--ink);
}

.nav-line__list .nav-link-blurb {
  font-size: 0.8125rem;
}

/* Header actions */
.masthead__actions {
  display: flex;
  align-items: center;
  gap: var(--s2);
}

.passport-btn,
.brand-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  min-height: 2.5rem;
  padding: 0.25rem 0.7rem 0.25rem 0.45rem;
  border: 1.5px solid var(--rule-strong);
  border-radius: var(--r-pill);
  background: var(--ground);
  color: var(--ink);
  font-size: var(--t-small);
  font-weight: 700;
  line-height: 1.2;
  white-space: nowrap;
}

.passport-btn:hover,
.brand-btn:hover {
  border-color: var(--ink);
  background: var(--concourse);
}

.passport-btn__ring {
  display: block;
  width: 1.5rem;
  height: 1.5rem;
}

.passport-btn__ring svg {
  display: block;
  width: 100%;
  height: 100%;
  transform: rotate(-90deg);
}

.passport-btn__track {
  fill: none;
  stroke: var(--rule-strong);
  stroke-width: 2;
  stroke-dasharray: 2.4 2.2;
}

.passport-btn__fill {
  fill: none;
  stroke: var(--ink);
  stroke-width: 4;
  stroke-dasharray: var(--passport-progress, 0) 100;
  transition: stroke-dasharray 180ms var(--ease-out);
}

.passport-btn__count {
  min-width: 2.25rem;
  color: var(--ink-2);
}

.passport-btn__count:empty {
  display: none;
}

.brand-btn__swatch {
  display: inline-block;
  flex: none;
  width: 1.5rem;
  height: 1.125rem;
  border-radius: 5px 5px 0 0;
  background: var(--brand);
  box-shadow: inset 0 -3px 0 rgba(0, 0, 0, 0.22);
}

.masthead__cta {
  margin-left: var(--s1);
  white-space: nowrap;
}

/* On the desktop bar the passport and brand buttons are compact: the word
   labels become tooltips (the accessible names stay the full labels). */
@media (min-width: 84rem) {
  .masthead__actions .passport-btn__label,
  .masthead__actions .brand-btn__label,
  .masthead__actions .search-btn__label,
  .masthead__actions .search-link__label {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
  }

  .masthead__actions .brand-btn,
  .masthead__actions .search-btn,
  .masthead__actions .search-link {
    padding-inline: 0.55rem;
  }

  .masthead__actions [data-tip] {
    position: relative;
  }

  .masthead__actions [data-tip]::after {
    content: attr(data-tip);
    position: absolute;
    top: calc(100% + 0.55rem);
    left: 50%;
    z-index: var(--z-panel);
    padding: 0.3rem 0.6rem;
    border-radius: var(--r-sign);
    background: var(--ink);
    color: var(--on-ink);
    font-size: var(--t-micro);
    font-weight: 700;
    white-space: nowrap;
    transform: translateX(-50%);
    opacity: 0;
    pointer-events: none;
    transition: opacity 120ms ease;
  }

  .masthead__actions [data-tip]:hover::after,
  .masthead__actions [data-tip]:focus-visible::after {
    opacity: 1;
  }

  /* Escape dismisses the tooltip (ui/nav.js) */
  html[data-tips-hidden] .masthead__actions [data-tip]::after {
    opacity: 0;
  }
}

.passport-btn--mini,
.masthead__cta--bar {
  display: none;
}

.menu-toggle {
  display: none;
  align-items: center;
  gap: 0.55rem;
  min-height: 2.75rem;
  padding: 0.35rem 0.9rem;
  border: 2px solid var(--ink);
  border-radius: var(--r-ctl);
  background: var(--ground);
  color: var(--ink);
  font-weight: 700;
}

.menu-toggle__bars {
  position: relative;
  display: inline-block;
  width: 1.125rem;
  height: 0.75rem;
  border-top: 2.5px solid currentColor;
  border-bottom: 2.5px solid currentColor;
}

.menu-toggle__bars::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 2.5px;
  margin-top: -1.25px;
  background: currentColor;
}

.menu-toggle[aria-expanded="true"] .menu-toggle__bars {
  border-color: transparent;
}

.menu-toggle[aria-expanded="true"] .menu-toggle__bars::after {
  transform: rotate(45deg);
  box-shadow: none;
}

.menu-toggle[aria-expanded="true"] .menu-toggle__bars::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 2.5px;
  margin-top: -1.25px;
  background: currentColor;
  transform: rotate(-45deg);
}

/* Desktop: the menu wrapper dissolves into the bar */
@media (min-width: 84rem) {
  .site-menu {
    display: contents;
  }
}

/* Below 84rem: logo, passport count and a Menu button; everything else in a panel */
@media (max-width: 83.99rem) {
  .menu-toggle {
    display: inline-flex;
  }

  .passport-btn--mini {
    display: inline-flex;
    margin-left: auto;
    padding-right: 0.6rem;
  }

  .site-menu {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    max-height: calc(100vh - var(--header-h));
    max-height: calc(100dvh - var(--header-h));
    overflow-y: auto;
    overscroll-behavior: contain;
    padding: var(--s2) var(--gutter) var(--s6);
    border-top: 1px solid var(--rule);
    border-bottom: 3px solid var(--ink);
    background: var(--ground);
  }

  .site-menu.is-open {
    display: block;
  }

  .primary-nav {
    margin: 0;
  }

  .nav-list {
    flex-direction: column;
    align-items: stretch;
  }

  .nav-item {
    border-bottom: 1px solid var(--rule);
  }

  .nav-trigger,
  .nav-top-link {
    justify-content: space-between;
    width: 100%;
    min-height: 3.25rem;
    padding-inline: 0.25rem;
    border-radius: 0;
    color: var(--ink);
    font-size: 1.125rem;
  }

  .nav-trigger::after {
    margin-right: 0.35rem;
  }

  .nav-item[aria-current] > .nav-trigger,
  .nav-top-link[aria-current] {
    box-shadow: inset 5px 0 0 var(--ink);
    padding-left: 0.9rem;
  }

  .nav-panel,
  .nav-panel--lines {
    position: static;
    max-height: none;
    overflow: visible;
    padding: 0 0 var(--s4);
    border: 0;
    border-radius: 0;
    box-shadow: none;
  }

  .nav-panel-list,
  .nav-panel--nested .nav-panel-list {
    grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
  }

  .nav-lines {
    grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
  }

  .nav-groups {
    grid-template-columns: minmax(0, 1fr);
  }

  .nav-groups .nav-group + .nav-group {
    padding-left: 0;
    border-left: 0;
  }

  .nav-panel--groups .nav-group:first-child .nav-panel-list {
    grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
  }

  .masthead__actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--s3);
    margin-top: var(--s5);
  }

  .masthead__actions .passport-btn {
    display: none;
  }

  .masthead__actions .brand-btn,
  .masthead__actions .masthead__cta {
    min-height: 3rem;
    margin: 0;
  }
}

/* Tablet and small desktop: the walkthrough button stays in the bar */
@media (min-width: 37.5rem) and (max-width: 83.99rem) {
  .masthead__cta--bar {
    display: inline-flex;
    margin-left: 0;
  }

  .passport-btn--mini {
    margin-left: auto;
  }

  .masthead__actions .masthead__cta {
    display: none;
  }
}

@media (max-width: 37.49rem) {
  .logo__svg {
    height: 1.375rem;
  }

  .masthead__bar {
    gap: var(--s2);
  }

  .menu-toggle {
    padding-inline: 0.6rem;
  }

  .passport-btn--mini {
    padding-right: 0.5rem;
  }

  .passport-btn--mini .passport-btn__count {
    min-width: 0;
  }
}

/* Narrow phones (under 380px): the Menu button shows only its icon but keeps
   its name for assistive technology */
@media (max-width: 23.74rem) {
  .menu-toggle {
    justify-content: center;
    min-width: 2.75rem;
    padding-inline: 0;
  }

  .menu-toggle__label {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
  }

  .passport-btn--mini {
    gap: 0.3rem;
    padding-left: 0.35rem;
  }
}

/* The narrowest phones (under 340px): a smaller logo */
@media (max-width: 21.24rem) {
  .logo__svg {
    height: 1.2rem;
  }
}

/* ================================================================== */
/* 10 Service notice                                                    */
/* ================================================================== */

.notice {
  background: var(--concourse);
  border-bottom: 1px solid var(--rule);
}

.notice__inner {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.3rem 0.9rem;
  padding-block: 0.6rem;
  font-size: var(--t-small);
  line-height: 1.45;
  color: var(--ink-2);
}

.notice__tag {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  font-weight: 800;
  color: var(--ink);
  white-space: nowrap;
}

.notice__glyph {
  display: inline-grid;
  place-items: center;
  width: 1.25rem;
  height: 1.25rem;
  border-radius: 50%;
  background: var(--ink);
  color: var(--on-ink);
  font-size: 0.8125rem;
  font-weight: 800;
  line-height: 1;
}

.notice__link {
  display: inline-flex;
  align-items: center;
  min-height: 1.5rem;
  font-weight: 700;
  color: var(--ink);
  text-decoration-thickness: 2px;
}

/* ================================================================== */
/* 11 Breadcrumbs: a short line with you-are-here at the end            */
/* ================================================================== */

.crumbs-bar {
  width: 100%;
  max-width: calc(var(--wrap) + var(--gutter) * 2);
  margin-inline: auto;
  padding: var(--s4) var(--gutter) 0;
}

.crumbs-bar:empty {
  display: none;
}

.crumbs ol {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: var(--t-small);
  line-height: 1.3;
}

.crumbs li {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  min-height: 2rem;
}

/* The connector leads into each stop, so a wrapped stop keeps its line */
.crumbs li + li {
  margin-left: 0.4rem;
  padding-left: 1.85rem;
}

.crumbs li::before {
  content: "";
  flex: none;
  width: 0.7rem;
  height: 0.7rem;
  border: 2.5px solid var(--ink);
  border-radius: 50%;
  background: var(--ground);
}

.crumbs li + li::after {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  width: 1.5rem;
  height: 3px;
  margin-top: -1.5px;
  background: var(--ink);
}

.crumbs li:last-child::before {
  background: var(--ink);
  box-shadow: 0 0 0 2.5px var(--line-money), 0 0 0 4px var(--ink);
}

.crumbs a {
  display: inline-flex;
  align-items: center;
  min-height: 1.5rem;
  color: var(--ink-2);
  font-weight: 700;
  text-decoration-color: var(--rule-strong);
}

.crumbs a:hover {
  color: var(--ink);
  text-decoration-color: currentColor;
}

.crumbs [aria-current="page"] {
  font-weight: 700;
  color: var(--ink);
}

/* ================================================================== */
/* 12 Footer: the line reaches its terminus                             */
/* ================================================================== */

.site-footer {
  margin-top: auto;
  background: var(--concourse);
  border-top: 1px solid var(--rule);
  padding-bottom: var(--s6);
  overflow-x: clip;
}

.terminus {
  position: relative;
  display: block;
  height: var(--track);
  margin-top: calc(var(--track) / -2 - 0.5px);
}

.terminus__line {
  position: absolute;
  left: 0;
  top: 0;
  width: 70%;
  height: var(--track);
  background: var(--line-day);
}

.terminus__bar {
  position: absolute;
  left: 70%;
  top: 50%;
  width: 0.8rem;
  height: 2.5rem;
  margin: -1.25rem 0 0 -0.4rem;
  border-radius: 2px;
  background: var(--ink);
}

.site-footer__top {
  display: grid;
  grid-template-columns: minmax(0, 4fr) minmax(0, 8fr);
  gap: var(--s6) var(--s7);
  padding-top: var(--s7);
}

.logo--footer {
  --logo-knock: var(--concourse);
}

.site-footer__about {
  margin-top: var(--s3);
  max-width: 26rem;
  font-size: var(--t-small);
  color: var(--ink-2);
}

.help-pointer {
  max-width: 34rem;
  padding: var(--s3) var(--s4);
  border: 2px solid var(--ink);
  border-radius: var(--r-sign);
  background: var(--ground);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.help-pointer__title {
  display: block;
  font-weight: 800;
  font-size: 1rem;
  color: var(--ink);
}

.help-pointer a {
  font-weight: 700;
  color: var(--ink);
}

/* Status, contact, walkthrough and the participant note: same order on every page */
.site-footer__help {
  display: grid;
  grid-template-columns: minmax(0, 5fr) auto minmax(0, 5fr);
  gap: var(--s4) var(--s6);
  align-items: center;
  margin-top: var(--s7);
  padding-top: var(--s5);
  border-top: 2px solid var(--ink);
}

.site-footer__help-links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s2) var(--s4);
  margin: 0;
  padding: 0;
  list-style: none;
}

.site-footer__help-links a {
  display: inline-flex;
  align-items: center;
  min-height: 2.5rem;
  font-weight: 800;
  color: var(--ink);
}

.site-footer__reviewed {
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.site-footer__fine {
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.site-footer__nav {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--s5) var(--s5);
}

.footer-heading {
  margin-bottom: var(--s2);
  font-size: var(--t-small);
  font-weight: 800;
}

.footer-col ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

.footer-col a {
  display: inline-flex;
  align-items: center;
  min-height: 2rem;
  padding-block: 0.15rem;
  color: var(--ink-2);
  font-size: var(--t-small);
  line-height: 1.3;
  text-decoration: none;
}

.footer-col a:hover {
  color: var(--ink);
  text-decoration: underline;
}

.site-footer__notes {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--s4) var(--s7);
  margin-top: var(--s5);
  padding-top: var(--s5);
  border-top: 1px solid var(--rule);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.site-footer__notes strong {
  color: var(--ink);
}

.site-footer__legal {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s2) var(--s5);
  margin-top: var(--s4);
  font-size: var(--t-small);
  color: var(--ink-3);
}

.site-footer__legal-links {
  display: flex;
  flex-wrap: wrap;
  gap: 0 var(--s4);
  margin: 0;
  padding: 0;
  list-style: none;
}

.site-footer__legal-links a {
  display: inline-flex;
  align-items: center;
  min-height: 2rem;
  font-weight: 700;
  color: var(--ink-2);
}

.site-footer__copy {
  margin-top: var(--s4);
  font-size: var(--t-micro);
  font-weight: 700;
  color: var(--ink-3);
}

@media (max-width: 68.74rem) {
  .site-footer__top {
    grid-template-columns: minmax(0, 1fr);
  }

  .site-footer__help {
    grid-template-columns: minmax(0, 1fr);
    align-items: start;
  }
}

@media (max-width: 47.99rem) {
  .site-footer__nav {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .site-footer__notes {
    grid-template-columns: minmax(0, 1fr);
  }

  .terminus__line {
    width: 78%;
  }

  .terminus__bar {
    left: 78%;
  }
}

/* ================================================================== */
/* 13 Drawers (native dialog) and toasts                                */
/* ================================================================== */

.drawer {
  --focus: var(--ink);
  position: fixed;
  inset: 0 0 0 auto;
  width: min(30rem, 100vw);
  max-width: 100vw;
  height: 100%;
  max-height: none;
  margin: 0;
  padding: 0;
  border: 0;
  border-left: 3px solid var(--ink);
  background: var(--ground);
  color: var(--ink);
  overflow: hidden;
}

.drawer::backdrop {
  background: rgba(21, 24, 28, 0.32);
}

.drawer[open] {
  display: flex;
}

.drawer__panel {
  display: flex;
  flex-direction: column;
  width: 100%;
  min-height: 0;
}

.drawer__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s3);
  padding: var(--s4) var(--s5);
  border-bottom: 1px solid var(--rule);
}

.drawer__title {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  font-size: 1.375rem;
  font-weight: 800;
  line-height: 1.15;
  letter-spacing: -0.015em;
}

.drawer__title > svg {
  flex: none;
  width: 1.375rem;
  height: 1.375rem;
}

.drawer__title .brand-btn__swatch {
  width: 1.75rem;
  height: 1.3rem;
}

.drawer__close {
  position: relative;
  flex: none;
  width: 2.75rem;
  height: 2.75rem;
  border: 2px solid var(--ink);
  border-radius: var(--r-ctl);
  background: var(--ground);
}

.drawer__close::before,
.drawer__close::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 1.1rem;
  height: 2.5px;
  margin: -1.25px 0 0 -0.55rem;
  background: var(--ink);
  transform: rotate(45deg);
}

.drawer__close::after {
  transform: rotate(-45deg);
}

.drawer__close:hover {
  background: var(--concourse);
}

.drawer__body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: var(--s5);
}

.drawer__intro {
  font-size: var(--t-small);
  color: var(--ink-2);
}

.drawer__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s3);
  padding: var(--s3) var(--s5);
  border-top: 1px solid var(--rule);
  background: var(--concourse);
}

@media (prefers-reduced-motion: no-preference) {
  .drawer[open] {
    animation: drawer-in 180ms var(--ease-out);
  }

  .drawer[open]::backdrop {
    animation: backdrop-in 180ms ease;
  }
}

@keyframes drawer-in {
  from {
    transform: translateX(2.5rem);
    opacity: 0;
  }
  to {
    transform: none;
    opacity: 1;
  }
}

@keyframes backdrop-in {
  from {
    opacity: 0;
  }
}

/* Toasts: polite, dismissible, bottom left */
.toasts {
  position: fixed;
  left: max(var(--gutter), env(safe-area-inset-left));
  bottom: max(1rem, env(safe-area-inset-bottom));
  z-index: var(--z-toast);
  display: grid;
  gap: var(--s2);
  width: min(24rem, calc(100vw - var(--gutter) * 2));
  pointer-events: none;
}

.toast {
  --focus: var(--line-money);
  position: relative;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  gap: 0.2rem 0.8rem;
  align-items: start;
  padding: var(--s3) var(--s3) var(--s3) var(--s4);
  border-radius: var(--r-card);
  border-top: 5px solid var(--line-money);
  background: var(--board);
  color: var(--on-ink);
  pointer-events: auto;
}

.toast__glyph {
  grid-row: span 2;
  display: grid;
  place-items: start center;
  width: 2.5rem;
  margin-top: 0.15rem;
}

.toast__glyph .bullet {
  --b: 2rem;
}

.toast__title {
  font-weight: 800;
  line-height: 1.3;
}

.toast__text {
  grid-column: 2;
  font-size: var(--t-small);
  color: var(--on-ink-2);
}

.toast__actions {
  grid-column: 2 / -1;
  display: flex;
  flex-wrap: wrap;
  gap: var(--s2) var(--s4);
  margin-top: 0.35rem;
}

.toast__action {
  min-height: 2.25rem;
  padding: 0.25rem 0;
  border: 0;
  background: transparent;
  color: var(--on-ink);
  font-size: var(--t-small);
  font-weight: 700;
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 0.2em;
}

.toast__close {
  grid-row: 1;
  grid-column: 3;
  position: relative;
  width: 2rem;
  height: 2rem;
  border: 0;
  border-radius: var(--r-ctl);
  background: transparent;
}

.toast__close::before,
.toast__close::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 0.9rem;
  height: 2px;
  margin: -1px 0 0 -0.45rem;
  background: var(--on-ink);
  transform: rotate(45deg);
}

.toast__close::after {
  transform: rotate(-45deg);
}

.toast__close:hover {
  background: var(--board-2);
}

@media (prefers-reduced-motion: no-preference) {
  .toast {
    animation: toast-in 180ms var(--ease-out);
  }
}

@keyframes toast-in {
  from {
    transform: translateY(0.75rem);
    opacity: 0;
  }
}

/* ================================================================== */
/* 14 Page furniture                                                    */
/* ================================================================== */

/* ---------------------------------------------------------------- */
/* Station sign: an ink board. Add class "on-ink" and data-line.     */
/* ---------------------------------------------------------------- */

.sign {
  --sign-line: var(--line, var(--line-money));
  position: relative;
  display: flex;
  flex-direction: column;
  padding: var(--s5);
  border-top: 10px solid var(--sign-line);
  border-radius: var(--r-sign);
  background: var(--board);
  color: var(--on-ink);
}

.sign[data-line="records"] {
  --sign-line: var(--board);
}

/* The Platform line is drawn as ink with a white core */
.sign[data-line="records"]::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -6.5px;
  height: 3px;
  background: #ffffff;
}

.sign__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s2) var(--s3);
  font-size: var(--t-small);
  color: var(--on-ink-2);
}

.sign__line {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  font-weight: 700;
  color: var(--on-ink);
}

.sign__name {
  margin-top: var(--s4);
  font-size: var(--t-sign);
  font-weight: 800;
  line-height: 1.02;
  letter-spacing: -0.02em;
}

.sign__change {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.75rem;
  margin-top: var(--s2);
  font-size: var(--t-small);
  color: var(--on-ink-2);
}

.sign__change-line {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  color: var(--on-ink);
}

.sign__text {
  margin-top: var(--s4);
  font-size: var(--t-body);
  line-height: 1.5;
  color: #eef0f2;
}

.sign__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s3);
  margin-top: auto;
  padding-top: var(--s5);
}

.sign__statuses {
  display: inline-flex;
  flex-wrap: wrap;
  gap: var(--s2);
}

.sign__cite {
  font-size: var(--t-micro);
  color: var(--on-ink-2);
}

.sign__link {
  font-weight: 700;
  color: var(--on-ink);
  text-decoration-thickness: 2px;
}

/* Key facts inside a sign */
.facts {
  display: grid;
  gap: 0;
  margin-top: var(--s4);
}

.facts > div {
  display: grid;
  grid-template-columns: minmax(6.5rem, 2fr) minmax(0, 5fr);
  gap: var(--s3);
  padding-block: 0.6rem;
  border-top: 1px solid var(--board-rule);
}

.facts dt {
  font-size: var(--t-small);
  font-weight: 700;
  color: var(--on-ink-2);
}

.facts dd {
  font-size: var(--t-body);
  line-height: 1.4;
  color: var(--on-ink);
}

/* ---------------------------------------------------------------- */
/* Home hero                                                          */
/* ---------------------------------------------------------------- */

.hero {
  overflow-x: clip;
  padding-top: clamp(2rem, 1.25rem + 2.4vw, 3.75rem);
  padding-bottom: var(--s6);
}

.hero__layout {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  grid-template-areas:
    "copy sign"
    "route route"
    "legend legend";
  column-gap: clamp(2rem, 4vw, 4.5rem);
  align-items: end;
}

.hero__copy {
  grid-area: copy;
  padding-bottom: var(--s2);
}

.hero__title {
  max-width: 20ch;
  font-size: clamp(2.375rem, 1.1rem + 3.4vw, 4rem);
}

.hero__lead {
  margin-top: var(--s5);
  max-width: 36rem;
  font-size: var(--t-lead);
  line-height: 1.45;
  color: var(--ink-2);
}

.hero__status {
  margin-top: var(--s4);
}

.hero__actions {
  margin-top: var(--s5);
}

.hero__signs {
  grid-area: sign;
  display: grid;
}

.hero__signs > .sign {
  grid-area: 1 / 1;
  min-height: 21rem;
}

.hero__route {
  grid-area: route;
}

.hero__legend {
  grid-area: legend;
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--s3) var(--s6);
  margin-top: var(--s7);
}

.hero__note {
  max-width: 24rem;
  font-size: var(--t-small);
  color: var(--ink-2);
}

@media (max-width: 56.24rem) {
  .hero__layout {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas:
      "copy"
      "route"
      "sign"
      "legend";
  }

  .hero__signs {
    margin-top: var(--s5);
  }

  .hero__signs > .sign {
    min-height: 0;
  }

  .hero__legend {
    margin-top: var(--s5);
  }
}

/* ---------------------------------------------------------------- */
/* Route strip: stops as a radio group. Horizontal from 56.25rem,     */
/* vertical below. data-seg on each stop colours the segment after it */
/* ---------------------------------------------------------------- */

.route {
  --route-y: 7.25rem;
  --dot: 1.375rem;
  position: relative;
  margin-top: clamp(2.5rem, 2rem + 2vw, 4rem);
}

.route__list {
  position: relative;
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
}

.route__stop {
  position: relative;
  min-width: 0;
}

.route__stop::after {
  content: "";
  position: absolute;
  z-index: 0;
  top: calc(var(--route-y) - var(--track) / 2);
  left: 50%;
  width: 100%;
  height: var(--track);
  background: var(--seg, var(--line-day));
}

.route__stop[data-seg="day"] { --seg: var(--line-day); }
.route__stop[data-seg="people"] { --seg: var(--line-people); }
.route__stop[data-seg="records"] { --seg: var(--line-records); }
.route__stop[data-seg="comms"] { --seg: var(--line-comms); }
.route__stop[data-seg="tools"] { --seg: var(--line-tools); }
.route__stop[data-seg="c"] { --seg: var(--line-day); }
.route__stop[data-seg="e"] { --seg: var(--line-people); }
.route__stop[data-seg="p"] { --seg: var(--line-records); }
.route__stop[data-seg="m"] { --seg: var(--line-money); }

.route__stop[data-seg="money"]::after {
  --seg: var(--line-money);
  box-shadow: inset 0 2.5px 0 var(--ink), inset 0 -2.5px 0 var(--ink);
}

/* The line runs in from the page edge and on past the last stop */
.route__stop:first-child::before {
  content: "";
  position: absolute;
  z-index: 0;
  top: calc(var(--route-y) - var(--track) / 2);
  right: 50%;
  width: 100vw;
  height: var(--track);
  background: var(--route-start, var(--seg, var(--line-day)));
}

.route__stop:last-child::after {
  width: 100vw;
}

.route__input {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: 0;
  opacity: 0;
}

.route__label {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.2rem;
  height: calc(var(--route-y) + 2.25rem);
  padding: 0 0.25rem;
  border-radius: var(--r-card);
  text-align: center;
  cursor: pointer;
}

.route__name {
  margin-top: auto;
  font-size: clamp(0.95rem, 0.8rem + 0.35vw, 1.125rem);
  font-weight: 800;
  line-height: 1.15;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

.route__sub {
  margin-bottom: 4.4rem;
  font-size: var(--t-micro);
  line-height: 1.25;
  color: var(--ink-3);
  text-wrap: balance;
}

.route__dot {
  position: absolute;
  left: 50%;
  top: var(--route-y);
  display: grid;
  place-items: center;
  width: var(--dot);
  height: var(--dot);
  transform: translate(-50%, -50%);
  border: 4px solid var(--ink);
  border-radius: 50%;
  background: #ffffff;
  font-size: 0.75rem;
  font-weight: 800;
  line-height: 1;
  transition: background-color 150ms ease, color 150ms ease;
}

.route__stop--numbered .route__dot {
  --dot: 2.375rem;
}

.route__stop--interchange .route__dot {
  width: 3.25rem;
  height: 1.75rem;
  border-radius: var(--r-pill);
}

.route__label:hover .route__name {
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 0.2em;
}

.route__input:checked + .route__label .route__dot {
  background: var(--ink);
  color: #ffffff;
}

.route__input:checked + .route__label .route__name {
  text-decoration: underline;
  text-decoration-thickness: 3px;
  text-underline-offset: 0.22em;
}

.route__input:focus-visible + .route__label {
  outline: 3px solid var(--focus, var(--ink));
  outline-offset: 2px;
  box-shadow: 0 0 0 2px var(--focus-halo, var(--ground));
}

/* The train: a wattle ring that travels to the chosen stop */
.route__train {
  position: absolute;
  z-index: 2;
  top: 0;
  left: 0;
  width: 3.25rem;
  height: 3.25rem;
  margin: -1.625rem 0 0 -1.625rem;
  border: 5px solid var(--line-money);
  border-radius: 50%;
  box-shadow: 0 0 0 2px var(--ink), inset 0 0 0 2px var(--ink);
  pointer-events: none;
  transition: transform 180ms var(--ease-out);
}

/* A second line joining at an interchange (drawn under the track) */
.route__branch {
  position: absolute;
  z-index: 0;
  left: 50%;
  top: var(--route-y);
  width: 0;
  height: 0;
  pointer-events: none;
}

/* The branch runs in level, then climbs at 45 degrees into the interchange */
.route__branch-svg {
  position: absolute;
  left: 0;
  top: 0;
  width: 1px;
  height: 1px;
  max-width: none;
  overflow: visible;
}

.route__branch-svg path {
  fill: none;
  stroke: var(--branch, var(--line-people));
  stroke-width: 12;
  stroke-linejoin: round;
}

.route__branch-label {
  position: absolute;
  right: 15rem;
  top: 54px;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-size: var(--t-small);
  font-weight: 700;
  white-space: nowrap;
  transform: translateY(-50%);
}

@media (max-width: 56.24rem) {
  .route {
    --route-x: 1.5rem;
    --dot: 1.25rem;
    margin-top: var(--s6);
  }

  .route__list {
    grid-auto-flow: row;
    grid-auto-columns: auto;
  }

  .route__stop::after {
    top: 50%;
    left: calc(var(--route-x) - var(--track) / 2);
    width: var(--track);
    height: 100%;
  }

  .route__stop[data-seg="money"]::after {
    box-shadow: inset 2.5px 0 0 var(--ink), inset -2.5px 0 0 var(--ink);
  }

  .route__stop:first-child::before {
    top: -1.5rem;
    right: auto;
    left: calc(var(--route-x) - var(--track) / 2);
    width: var(--track);
    height: calc(50% + 1.5rem);
  }

  .route__stop:last-child::after {
    width: var(--track);
    height: 2.5rem;
  }

  .route__label {
    height: auto;
    min-height: 4.25rem;
    padding: 0.5rem 0.5rem 0.5rem 3.75rem;
    align-items: flex-start;
    justify-content: center;
    gap: 0.1rem;
    text-align: left;
  }

  .route__name {
    margin-top: 0;
    font-size: 1.0625rem;
  }

  .route__sub {
    margin-bottom: 0;
  }

  .route__dot {
    left: var(--route-x);
    top: 50%;
  }

  .route__stop--numbered .route__dot {
    --dot: 2.125rem;
  }

  .route__stop--interchange .route__dot {
    width: 1.75rem;
    height: 2.75rem;
  }

  .route__train {
    width: 3rem;
    height: 3rem;
    margin: -1.5rem 0 0 -1.5rem;
  }

  .route__branch {
    display: none;
  }
}

/* ---------------------------------------------------------------- */
/* Line strip: the stations on this line, with you are here          */
/* ---------------------------------------------------------------- */

.line-strip {
  overflow-x: clip;
  padding-block: var(--s4) var(--s2);
}

.line-strip__list {
  position: relative;
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
}

.line-strip__stop {
  position: relative;
  min-width: 0;
  padding-top: 1.75rem;
}

.line-strip__stop::before {
  content: "";
  position: absolute;
  top: calc(0.625rem - var(--track-thin) / 2 + 0.1rem);
  left: 0;
  right: 0;
  height: var(--track-thin);
  background: var(--line, var(--line-day));
}

.line-strip[data-line="money"] .line-strip__stop::before {
  height: 0.5rem;
  top: 0.475rem;
  box-shadow: inset 0 2px 0 var(--ink), inset 0 -2px 0 var(--ink);
}

.line-strip__stop:first-child::before {
  left: -100vw;
}

.line-strip__stop:last-child::before {
  right: -100vw;
}

.line-strip__stop a,
.line-strip__stop > span {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  min-height: 2.75rem;
  padding: 0.35rem 0.25rem 0.25rem;
  border-radius: var(--r-ctl);
  font-size: var(--t-micro);
  font-weight: 700;
  line-height: 1.25;
  text-align: center;
  color: var(--ink-2);
  text-decoration: none;
  text-wrap: balance;
}

.line-strip__stop a::before {
  content: "";
  position: absolute;
  top: -1.625rem;
  left: 50%;
  width: 1.125rem;
  height: 1.125rem;
  margin-left: -0.5625rem;
  border: 3.5px solid var(--ink);
  border-radius: 50%;
  background: var(--ground);
}

.line-strip__stop--interchange a::before {
  width: 2rem;
  margin-left: -1rem;
  border-radius: var(--r-pill);
}

.line-strip__stop a:hover {
  color: var(--ink);
  text-decoration: underline;
  text-decoration-thickness: 2px;
}

.line-strip__stop a[aria-current="page"] {
  color: var(--ink);
  font-weight: 800;
}

.line-strip__stop a[aria-current="page"]::before {
  background: var(--ink);
  box-shadow: 0 0 0 3.5px var(--line-money), 0 0 0 5.5px var(--ink);
}

.line-strip__here {
  display: block;
  margin-top: 0.2rem;
  padding: 0 0.45rem;
  border: 1.5px solid var(--ink);
  border-radius: var(--r-pill);
  background: var(--line-money);
  font-size: 0.75rem;
  font-weight: 800;
}

@media (max-width: 56.24rem) {
  .line-strip__stop.is-far {
    display: none;
  }
}

/* ---------------------------------------------------------------- */
/* Station hero: feature pages                                        */
/* ---------------------------------------------------------------- */

.station-hero {
  padding-bottom: clamp(2.5rem, 2rem + 2.5vw, 4.5rem);
  border-bottom: 1px solid var(--rule);
}

.station-hero__layout {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: var(--s6) clamp(2rem, 4vw, 4.5rem);
  align-items: end;
  padding-top: clamp(1.5rem, 1rem + 2vw, 3rem);
}

.station-hero__line {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s4);
  margin-bottom: var(--s4);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.station-hero__line .line-badge {
  color: var(--ink);
}

.station-hero__title {
  font-size: var(--t-display);
  font-weight: 800;
  line-height: 0.98;
  letter-spacing: -0.034em;
  max-width: 14ch;
}

.station-hero__promise {
  margin-top: var(--s4);
  max-width: 36rem;
  font-size: var(--t-lead);
  line-height: 1.45;
  color: var(--ink-2);
}

.station-hero__status {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s4);
  margin-top: var(--s5);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.station-hero .actions {
  margin-top: var(--s5);
}

@media (max-width: 68.74rem) {
  .station-hero__layout {
    grid-template-columns: minmax(0, 1fr);
    align-items: start;
  }
}

/* ================================================================== */
/* 15 Components                                                        */
/*    signposts, exhibit, brand control, demo slot, storyline, steps,   */
/*    network map, route cards, tables, not claimed, gates, faq,        */
/*    callouts, tool, game, stamps, founding band, enquiry form, forms, */
/*    prose and guides, glossary, hub grid, pager, 404, brand drawer    */
/* ================================================================== */

/* ---------------------------------------------------------------- */
/* Signposts: margin citations pinned to what they govern            */
/* ---------------------------------------------------------------- */

.signposted {
  --sp-col: 15.5rem;
  --sp-gap: 4rem;
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) var(--sp-col);
  column-gap: var(--sp-gap);
  align-items: start;
}

.signposted--left {
  grid-template-columns: var(--sp-col) minmax(0, 1fr);
}

.signposted--left .signposted__body {
  grid-column: 2;
  grid-row: 1;
}

.signposted--left .signposts {
  grid-column: 1;
  grid-row: 1;
}

.signposted__body {
  min-width: 0;
}

.signposts {
  position: relative;
  display: grid;
  gap: var(--s4);
  align-content: start;
}

.signpost {
  position: relative;
  display: grid;
  grid-template-columns: 1.75rem minmax(0, 1fr);
  gap: 0 0.65rem;
  align-items: start;
}

.signpost__key {
  display: grid;
  place-items: center;
  width: 1.75rem;
  height: 1.75rem;
  border: 3px solid var(--ink);
  border-radius: 50%;
  background: var(--ground);
  font-family: var(--mono);
  font-size: 0.8125rem;
  font-weight: 800;
  line-height: 1;
  transition: background-color 150ms ease;
}

.signpost__head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0 0.5rem;
  min-height: 1.75rem;
}

.signpost__cite {
  display: inline-flex;
  align-items: center;
  min-height: 1.75rem;
  margin-left: -0.3rem;
  padding: 0 0.3rem;
  border: 0;
  border-radius: 3px;
  background: transparent;
  font-family: var(--mono);
  font-size: 0.9375rem;
  font-weight: 700;
  color: var(--ink);
  text-decoration: underline;
  text-decoration-style: dotted;
  text-decoration-thickness: 1.5px;
  text-underline-offset: 0.25em;
  white-space: nowrap;
}

.signpost__cite::after {
  content: "";
  width: 0.45rem;
  height: 0.45rem;
  margin-left: 0.5rem;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg) translateY(-0.15rem);
}

.signpost__cite[aria-expanded="true"] {
  text-decoration-style: solid;
}

.signpost__cite[aria-expanded="true"]::after {
  transform: rotate(-135deg) translate(-0.1rem, -0.05rem);
}

.signpost__cite:hover {
  background: var(--line-money-wash);
}

.signpost__label {
  font-family: var(--mono);
  font-size: 0.9375rem;
  font-weight: 700;
}

.signpost__gloss {
  grid-column: 2;
  font-size: var(--t-small);
  line-height: 1.45;
  color: var(--ink-2);
}

.signpost__clause {
  grid-column: 2;
  margin-top: var(--s2);
  padding: var(--s2) 0 var(--s1) var(--s3);
  border-left: 3px solid var(--ink);
  font-size: var(--t-small);
  line-height: 1.5;
}

.signpost__clause p {
  font-style: italic;
}

.signpost__clause footer {
  margin-top: 0.35rem;
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.signpost.is-active .signpost__key {
  background: var(--line-money);
}

/* Leaders are drawn by ui/signposts.js into one overlay per container */
.signposts__leaders {
  position: absolute;
  inset: 0;
  z-index: 3;
  width: 100%;
  height: 100%;
  overflow: visible;
  pointer-events: none;
}

.signposts__leaders path {
  fill: none;
  stroke: var(--ink);
  stroke-width: 1.5;
}

.signposts__leaders circle {
  fill: var(--ink);
}

.signposts__leaders .is-active path {
  stroke-width: 3;
}

.signposts__leaders .is-active circle {
  fill: var(--line-money);
  stroke: var(--ink);
  stroke-width: 2;
}

.signposted.is-placed .signpost {
  position: absolute;
  left: 0;
  right: 0;
}

/* Keep text clear of the leader pins at the body's edge */
.signposted.is-placed > .signposted__body {
  padding-right: var(--s4);
}

/* The element a signpost governs, while its signpost is hovered or focused */
.is-signposted {
  outline: 3px solid var(--line-money) !important;
  outline-offset: 2px;
  box-shadow: 0 0 0 5px var(--ink) !important;
  border-radius: 4px;
}

/* Key marks: the signpost's number, pinned to its target when the margin
   is not beside the content (phones, narrow columns) */
[data-sp-key] {
  position: relative;
}

.signposted [data-sp-key]::after {
  content: attr(data-sp-key);
  position: absolute;
  z-index: 4;
  top: -0.6rem;
  right: -0.35rem;
  display: grid;
  place-items: center;
  width: 1.5rem;
  height: 1.5rem;
  border: 2.5px solid var(--ink);
  border-radius: 50%;
  background: var(--line-money);
  color: var(--ink);
  font-family: var(--mono);
  font-size: 0.75rem;
  font-weight: 800;
  line-height: 1;
}

/* Text targets keep clear of their mark */
.signposted :where(p, li, dd, h2, h3, h4)[data-sp-key] {
  padding-right: 1.6rem;
}

/* Beside the content, leader lines do the linking instead (print keeps the marks) */
@media screen {
  .signposted.is-placed [data-sp-key]::after {
    content: none;
  }

  .signposted.is-placed :where(p, li, dd, h2, h3, h4)[data-sp-key] {
    padding-right: 0;
  }
}

@media (max-width: 68.74rem) {
  .signposted,
  .signposted--left {
    grid-template-columns: minmax(0, 1fr);
    row-gap: var(--s5);
  }

  .signposted--left .signposted__body,
  .signposted--left .signposts {
    grid-column: 1;
    grid-row: auto;
  }

  .signposted--left .signposts {
    grid-row: 2;
  }

  .signposts {
    grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
    gap: var(--s4) var(--s5);
    padding-top: var(--s4);
    border-top: 2px solid var(--ink);
  }
}

/* ---------------------------------------------------------------- */
/* Exhibit frame: a product screen or an interactive demo             */
/* ---------------------------------------------------------------- */

.exhibit {
  min-width: 0;
}

.exhibit__bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s3);
  margin-bottom: var(--s3);
}

.exhibit__title {
  font-weight: 800;
  font-size: var(--t-body);
  line-height: 1.3;
}

.exhibit__bar .brand-control {
  margin-left: auto;
}

.exhibit__stage {
  position: relative;
  min-width: 0;
}

.exhibit__note {
  margin-top: var(--s3);
  font-size: var(--t-micro);
  color: var(--ink-3);
}

/* Planned and gated exhibits are sketches: dashed, with the reason named */
.exhibit--sketch .exhibit__stage {
  padding: var(--s4);
  border: 2px dashed var(--ink-3);
  border-radius: var(--r-screen);
  background: var(--ground);
}

.exhibit__sketch-note {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s3);
  margin-bottom: var(--s3);
  font-size: var(--t-small);
  font-weight: 700;
}

.exhibit__placeholder {
  display: grid;
  place-items: center;
  min-height: var(--placeholder-h, 18rem);
  padding: var(--s6);
  border: 2px dashed var(--rule-strong);
  border-radius: var(--r-screen);
  background: var(--concourse);
  color: var(--ink-2);
  text-align: center;
}

/* Compact brand control in an exhibit bar (rendered by ui/brand.js) */
.brand-control {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem;
}

.brand-control:empty {
  display: none;
}

.brand-control__label {
  margin-right: 0.35rem;
  font-size: var(--t-micro);
  font-weight: 700;
  color: var(--ink-2);
}

.brand-control__swatch {
  position: relative;
  display: grid;
  place-items: end center;
  width: 2rem;
  height: 2rem;
  padding: 0 0 0.25rem;
  border: 0;
  border-radius: var(--r-ctl);
  background: transparent;
}

.brand-control__swatch::before {
  content: "";
  width: 1.5rem;
  height: 1.125rem;
  border-radius: 5px 5px 0 0;
  background: var(--sw);
  box-shadow: inset 0 -3px 0 rgba(0, 0, 0, 0.22);
}

.brand-control__swatch:hover {
  background: var(--concourse);
}

.brand-control__swatch[aria-pressed="true"]::after {
  content: "";
  position: absolute;
  left: 0.25rem;
  right: 0.25rem;
  bottom: 0;
  height: 3px;
  border-radius: 2px;
  background: var(--ink);
}

.brand-control__more {
  display: inline-flex;
  align-items: center;
  min-height: 2rem;
  margin-left: 0.25rem;
  padding: 0.15rem 0.6rem;
  border: 1.5px solid var(--rule-strong);
  border-radius: var(--r-pill);
  background: var(--ground);
  font-size: var(--t-micro);
  font-weight: 700;
  white-space: nowrap;
}

.brand-control__more:hover {
  border-color: var(--ink);
}

/* ---------------------------------------------------------------- */
/* Demo slot: data-demo="name" loads /assets/js/demos/name.js         */
/* ---------------------------------------------------------------- */

/* Height is reserved only while a demo loads (it starts loading 320px before
   it scrolls into view), so a slot whose module is missing never leaves a gap */
.demo-slot {
  position: relative;
}

.demo-slot[data-demo-state="loading"] {
  min-height: var(--demo-min, 20rem);
}

.demo-slot__status {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s3);
  padding: var(--s4) var(--s5);
  border: 2px dashed var(--rule-strong);
  border-radius: var(--r-card);
  background: var(--ground);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.demo-slot__status strong {
  color: var(--ink);
}

.demo-slot__loader {
  position: relative;
  flex: none;
  width: 3.5rem;
  height: 0.75rem;
  border-radius: var(--r-pill);
  background: var(--concourse-deep);
  overflow: hidden;
}

.demo-slot__loader::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 0.75rem;
  height: 0.75rem;
  border-radius: 50%;
  background: var(--ink);
}


.demo-slot__fallback {
  margin-top: var(--s3);
}

.demo-slot__fallback.callout {
  max-width: none;
}

/* The description gives way once the demo has mounted */
.demo-slot[data-demo-state="ready"] > .demo-slot__fallback {
  display: none;
}

/* ---------------------------------------------------------------- */
/* Day storyline: timestamped scenes                                  */
/* ---------------------------------------------------------------- */

.storyline {
  position: relative;
  display: grid;
  gap: clamp(2.5rem, 2rem + 2vw, 4rem);
}

.storyline::before {
  content: "";
  position: absolute;
  top: 1.25rem;
  bottom: 1.25rem;
  left: 3.1rem;
  width: var(--track-thin);
  margin-left: calc(var(--track-thin) / -2);
  background: var(--line, var(--line-day));
}

.storyline[data-line="money"]::before {
  box-shadow: inset 1.5px 0 0 var(--ink), inset -1.5px 0 0 var(--ink);
}

.scene {
  position: relative;
  display: grid;
  grid-template-columns: 6.2rem minmax(0, 1fr);
  gap: var(--s4) clamp(1.5rem, 3vw, 3rem);
  align-items: start;
}

.scene__time {
  position: relative;
  z-index: 1;
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 0.2rem;
  justify-self: start;
  padding: 0.35rem 0.55rem 0.4rem;
  border-radius: var(--r-sign);
  background: var(--board);
  color: var(--line-money);
  font-family: var(--mono);
  font-size: 1.25rem;
  font-weight: 800;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  box-shadow: 0 0 0 4px var(--scene-ground, var(--ground));
}

.band--concourse .storyline {
  --scene-ground: var(--concourse);
}

.scene__day {
  font-family: var(--font);
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--on-ink-2);
}

.scene__body {
  max-width: 46rem;
  padding-top: 0.15rem;
}

.scene__title {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.6rem;
  font-size: var(--t-h3);
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.scene__text {
  margin-top: var(--s3);
  color: var(--ink-2);
}

.scene__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2);
  margin-top: var(--s3);
}

.scene__exhibit {
  grid-column: 2;
  min-width: 0;
}

@media (max-width: 68.74rem) {
  .storyline::before {
    left: 2.4rem;
  }

  .scene {
    grid-template-columns: 4.8rem minmax(0, 1fr);
  }

  .scene__time {
    font-size: 1.0625rem;
  }
}

@media (max-width: 37.49rem) {
  .storyline::before {
    left: 1.9rem;
  }

  .scene {
    grid-template-columns: 3.8rem minmax(0, 1fr);
    column-gap: var(--s3);
  }

  /* Full width on phones: the line passes behind the exhibit, not through its caption */
  .scene__exhibit {
    grid-column: 1 / -1;
    position: relative;
    z-index: 1;
    padding-block: var(--s2);
    background: var(--scene-ground, var(--ground));
  }

  .scene__time {
    padding-inline: 0.35rem;
    font-size: 0.9375rem;
  }
}

/* ---------------------------------------------------------------- */
/* Step flow along a mini line (real sequences only)                  */
/* ---------------------------------------------------------------- */

.stepline {
  position: relative;
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  gap: var(--s5);
  counter-reset: step;
}

.stepline__step {
  position: relative;
  padding-top: 3.25rem;
  counter-increment: step;
}

.stepline__step::before {
  content: "";
  position: absolute;
  top: calc(1.25rem - var(--track-thin) / 2);
  left: 0;
  right: calc(var(--s5) * -1);
  height: var(--track-thin);
  background: var(--line, var(--ink));
}

.stepline[data-line="money"] .stepline__step::before {
  height: 0.5rem;
  top: 1rem;
  box-shadow: inset 0 2px 0 var(--ink), inset 0 -2px 0 var(--ink);
}

.stepline__step:last-child::before {
  right: 50%;
}

.stepline__marker {
  position: absolute;
  top: 0;
  left: 0;
  display: grid;
  place-items: center;
  width: 2.5rem;
  height: 2.5rem;
  border: 4px solid var(--ink);
  border-radius: 50%;
  background: var(--ground);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}

.stepline__step.is-here .stepline__marker {
  background: var(--ink);
  color: var(--on-ink);
  box-shadow: 0 0 0 4px var(--line-money), 0 0 0 6px var(--ink);
}

.stepline__title {
  font-size: 1.1875rem;
  font-weight: 800;
  line-height: 1.25;
  letter-spacing: -0.01em;
}

.stepline__text {
  margin-top: var(--s2);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.stepline--vertical,
.on-ink .stepline {
  grid-auto-flow: row;
  grid-auto-columns: auto;
  gap: var(--s5);
}

.stepline--vertical .stepline__step,
.on-ink .stepline__step {
  padding: 0 0 0 3.75rem;
  min-height: 2.5rem;
}

.stepline--vertical .stepline__step::before,
.on-ink .stepline__step::before {
  top: 1.25rem;
  bottom: calc(var(--s5) * -1 - 1.25rem);
  left: calc(1.25rem - var(--track-thin) / 2);
  right: auto;
  width: var(--track-thin);
  height: auto;
}

.stepline--vertical .stepline__step:last-child::before,
.on-ink .stepline__step:last-child::before {
  display: none;
}

.on-ink .stepline {
  --line: var(--line-money);
}

.on-ink .stepline__marker {
  border-color: var(--line-money);
  color: var(--ink);
}

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

@media (max-width: 56.24rem) {
  .stepline {
    grid-auto-flow: row;
    grid-auto-columns: auto;
  }

  .stepline__step {
    padding: 0 0 0 3.75rem;
    min-height: 2.5rem;
  }

  .stepline__step::before {
    top: 1.25rem;
    bottom: calc(var(--s5) * -1 - 1.25rem);
    left: calc(1.25rem - var(--track-thin) / 2);
    right: auto;
    width: var(--track-thin);
    height: auto;
  }

  .stepline[data-line="money"] .stepline__step::before {
    width: 0.5rem;
    left: 1rem;
    top: 1.25rem;
    box-shadow: inset 2px 0 0 var(--ink), inset -2px 0 0 var(--ink);
  }

  .stepline__step:last-child::before {
    display: none;
  }
}

/* ---------------------------------------------------------------- */
/* Network map: line plates, the SVG map, and the station display     */
/* ---------------------------------------------------------------- */

.netmap {
  display: grid;
  grid-template-columns: minmax(19rem, 4fr) minmax(0, 8fr);
  grid-template-areas:
    "plates plates"
    "map map"
    "hint hint"
    "rail stage";
  gap: var(--s4) var(--s5);
  align-items: start;
}

.netmap > .line-plates { grid-area: plates; }
.netmap > .netmap__map { grid-area: map; }
.netmap > .netmap__hint { grid-area: hint; margin-top: calc(var(--s2) * -1); }
.netmap > .netmap__rail { grid-area: rail; }
.netmap > .netmap__stage { grid-area: stage; }

.netmap__signs {
  display: grid;
}

.line-plates {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: var(--s3);
}

.line-plates__input {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
}

.line-plate {
  position: relative;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  min-height: 3.75rem;
  padding: 0.55rem 0.9rem 0.8rem;
  border: 2px solid var(--rule);
  border-radius: var(--r-sign);
  background: var(--ground);
  cursor: pointer;
}

/* The plate's foot is a length of the line itself */
.line-plate::after {
  content: "";
  position: absolute;
  left: -2px;
  right: -2px;
  bottom: -2px;
  height: 7px;
  border-radius: 0 0 var(--r-sign) var(--r-sign);
  background: var(--line, var(--line-day));
}

.line-plate[data-line="money"]::after {
  box-shadow: inset 0 -2px 0 var(--ink), inset 0 2px 0 var(--ink);
}

.line-plate:hover {
  border-color: var(--ink-3);
}

.line-plate__text {
  display: flex;
  flex-direction: column;
  line-height: 1.2;
}

.line-plate__name {
  font-weight: 800;
  font-size: 1.0625rem;
}

.line-plate__count {
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.line-plates__input:checked + .line-plate {
  border-color: var(--ink);
  box-shadow: 0 0 0 1px var(--ink);
}

.line-plates__input:checked + .line-plate .line-plate__name::after {
  content: "Selected";
  display: inline-block;
  margin-left: 0.5rem;
  padding: 0 0.4rem;
  border-radius: var(--r-pill);
  background: var(--ink);
  color: var(--on-ink);
  font-size: 0.6875rem;
  font-weight: 700;
  line-height: 1.45;
  vertical-align: 0.15em;
}

.line-plates__input:focus-visible + .line-plate {
  outline: 3px solid var(--focus, var(--ink));
  outline-offset: 3px;
  box-shadow: 0 0 0 3px var(--focus-halo, var(--ground));
}

.netmap__map {
  border: 1px solid var(--rule);
  border-radius: var(--r-sign);
  background: var(--ground);
}

.netmap__scroll {
  overflow-x: auto;
  border-radius: var(--r-sign);
}

.netmap__scroll:focus-visible {
  outline-offset: -3px;
  box-shadow: inset 0 0 0 6px var(--ground);
}

.netmap__svg {
  display: block;
  width: 100%;
  min-width: 56rem;
  height: auto;
  font-family: var(--font);
}

.map-track {
  fill: none;
  stroke-linecap: butt;
  stroke-linejoin: round;
  transition: stroke-width 150ms ease;
}

.map-track--day { stroke: var(--line-day); stroke-width: 10; }
.map-track--people { stroke: var(--line-people); stroke-width: 10; }
.map-track--comms { stroke: var(--line-comms); stroke-width: 10; }
.map-track--money-case { stroke: var(--ink); stroke-width: 13; }
.map-track--money { stroke: var(--line-money); stroke-width: 7; }
.map-track--records { stroke: var(--line-records); stroke-width: 13; }
.map-track--records-core { stroke: #ffffff; stroke-width: 3.5; }

.netmap[data-active="day"] .map-track--day,
.netmap[data-active="people"] .map-track--people,
.netmap[data-active="comms"] .map-track--comms {
  stroke-width: 15;
}

.netmap[data-active="money"] .map-track--money-case { stroke-width: 18; }
.netmap[data-active="money"] .map-track--money { stroke-width: 11; }
.netmap[data-active="records"] .map-track--records { stroke-width: 18; }
.netmap[data-active="records"] .map-track--records-core { stroke-width: 5; }

.map-mark {
  fill: #ffffff;
  stroke: var(--ink);
  stroke-width: 4.5;
}

.map-mark--stop {
  stroke-width: 3.5;
}

.map-hit {
  fill: transparent;
}

.map-stop {
  cursor: pointer;
  outline: none;
}

.map-label {
  font-size: 14px;
  font-weight: 700;
  fill: var(--ink);
  paint-order: stroke;
  stroke: #ffffff;
  stroke-width: 5px;
  stroke-linejoin: round;
}

.map-bullet__t {
  font-size: 14px;
  font-weight: 800;
}

.map-stop:hover .map-label {
  text-decoration: underline;
}

.map-stop[aria-pressed="true"] .map-label {
  font-weight: 800;
  text-decoration: underline;
}

.map-stop[aria-pressed="true"] .map-mark {
  fill: var(--ink);
}

.map-focus {
  fill: none;
  stroke: var(--ink);
  stroke-width: 3;
  stroke-dasharray: 5 3;
  opacity: 0;
}

.map-stop:focus-visible .map-focus {
  opacity: 1;
}

.netmap[data-active="day"] .map-stop:not([data-lines~="day"]) .map-label,
.netmap[data-active="money"] .map-stop:not([data-lines~="money"]) .map-label,
.netmap[data-active="people"] .map-stop:not([data-lines~="people"]) .map-label,
.netmap[data-active="records"] .map-stop:not([data-lines~="records"]) .map-label,
.netmap[data-active="comms"] .map-stop:not([data-lines~="comms"]) .map-label {
  fill: #4f565e;
  font-weight: 500;
}

.map-here {
  pointer-events: none;
  transition: transform 180ms var(--ease-out);
}

.map-here__halo {
  fill: none;
  stroke: var(--line-money);
  stroke-width: 7;
}

.map-here__ring {
  fill: none;
  stroke: var(--ink);
  stroke-width: 2;
}

.netmap__hint {
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.netmap__rail {
  display: grid;
  gap: var(--s3);
  min-width: 0;
}

.netmap__stage {
  min-width: 0;
}

/* Station list: the text path through the map */
.stops {
  padding: var(--s3) var(--s4);
  border: 1px solid var(--rule);
  border-radius: var(--r-sign);
  background: var(--ground);
}

.stops__title {
  display: flex;
  align-items: center;
  gap: 0.55rem;
  margin-bottom: var(--s2);
  padding-bottom: var(--s2);
  border-bottom: 1px solid var(--rule);
  font-size: 1rem;
  font-weight: 800;
}

.stops__list {
  position: relative;
}

.stops__item {
  position: relative;
}

.stops__item::before {
  content: "";
  position: absolute;
  left: 0.8125rem;
  top: 0;
  bottom: 0;
  width: 6px;
  margin-left: -3px;
  background: var(--line, var(--line-day));
}

.stops[data-line="money"] .stops__item::before {
  box-shadow: inset 1.5px 0 0 var(--ink), inset -1.5px 0 0 var(--ink);
}

.stops__item:first-child::before {
  top: 50%;
}

.stops__item:last-child::before {
  bottom: 50%;
}

.stops__button {
  position: relative;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  width: 100%;
  min-height: 2.25rem;
  padding: 0.25rem 0.5rem 0.25rem 2.25rem;
  border: 0;
  border-radius: var(--r-ctl);
  background: transparent;
  font-size: var(--t-small);
  font-weight: 700;
  line-height: 1.25;
  text-align: left;
}

.stops__button::before {
  content: "";
  position: absolute;
  left: 0.8125rem;
  top: 50%;
  width: 0.9rem;
  height: 0.9rem;
  transform: translate(-50%, -50%);
  border: 3px solid var(--ink);
  border-radius: 50%;
  background: #ffffff;
}

.stops__button.is-interchange::before {
  width: 1.2rem;
  height: 1.2rem;
  border-width: 4px;
}

.stops__button:hover,
.stops__button[aria-pressed="true"] {
  background: var(--concourse);
}

.stops__button[aria-pressed="true"]::before {
  background: var(--ink);
  box-shadow: 0 0 0 3px var(--line-money), 0 0 0 5px var(--ink);
}

.stops__change {
  display: inline-flex;
  gap: 0.2rem;
  margin-left: auto;
}

@media (max-width: 68.74rem) {
  .line-plates {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  /* Under the rail a full product screen would run for pages: show its top */
  .netmap__stage .exhibit__stage {
    max-height: 38rem;
    overflow: hidden;
    border-bottom: 3px dashed var(--rule-strong);
  }

  .netmap {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas:
      "plates"
      "map"
      "hint"
      "rail"
      "stage";
  }
}

@media (max-width: 44.99rem) {
  .line-plates {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--s2);
  }

  .line-plate {
    min-height: 3.25rem;
    padding: 0.45rem 0.6rem 0.7rem;
    gap: 0.5rem;
  }

  .line-plate__name {
    font-size: 0.9375rem;
  }

  .line-plates__input:checked + .line-plate .line-plate__name::after {
    display: none;
  }

  .netmap__svg {
    min-width: 58rem;
  }
}

@media (max-width: 26rem) {
  .line-plates {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---------------------------------------------------------------- */
/* Directory board: find your line (who or what, and where to go)     */
/* ---------------------------------------------------------------- */

.directory {
  overflow: hidden;
  border: 2px solid var(--ink);
  border-radius: var(--r-sign);
  background: var(--ground);
}

.directory__title {
  padding: 0.7rem 1rem;
  background: var(--board);
  color: var(--on-ink);
  font-size: 1.125rem;
  font-weight: 800;
  letter-spacing: -0.01em;
}

.directory__list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.directory__row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.2rem var(--s4);
  min-height: 2.75rem;
  padding: 0.45rem 1rem;
  border-top: 1px solid var(--rule);
  color: var(--ink);
  font-size: var(--t-small);
  text-decoration: none;
}

.directory__list li:first-child .directory__row {
  border-top: 0;
}

a.directory__row:hover {
  background: var(--line-money-wash);
}

a.directory__row:hover .directory__dest {
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 0.2em;
}

a.directory__row:focus-visible {
  outline-offset: -4px;
  box-shadow: none;
}

.directory__who {
  font-weight: 700;
}

.directory__dest {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  color: var(--ink-2);
}

/* ---------------------------------------------------------------- */
/* Route cards: links to stations and interchanges                    */
/* ---------------------------------------------------------------- */

.route-grid {
  --grid-gap: var(--s5);
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr));
  gap: var(--s6) var(--grid-gap);
  overflow-x: clip;
}

.route-grid--wide {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 22rem), 1fr));
}

.route-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: var(--s2);
  min-width: 0;
  padding-top: 2.25rem;
}

/* The card hangs from a length of its line, which runs on into the gap */
.route-card::before {
  content: "";
  position: absolute;
  top: calc(0.75rem - var(--track-thin) / 2);
  left: calc(var(--grid-gap, var(--s5)) / -2);
  right: calc(var(--grid-gap, var(--s5)) / -2);
  height: var(--track-thin);
  background: var(--line, var(--line-day));
}

.route-card[data-line="money"]::before {
  top: 0.5rem;
  height: 0.5rem;
  box-shadow: inset 0 2px 0 var(--ink), inset 0 -2px 0 var(--ink);
}

.route-card::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 1.5rem;
  height: 1.5rem;
  border: 4px solid var(--ink);
  border-radius: 50%;
  background: var(--ground);
}

.band--concourse .route-card::after {
  background: var(--concourse);
}

.route-card--interchange::after {
  width: 3rem;
  border-radius: var(--r-pill);
}

.route-card__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.6rem;
  font-size: var(--t-micro);
  font-weight: 700;
  color: var(--ink-2);
}

.route-card__title {
  font-size: 1.3125rem;
  font-weight: 800;
  line-height: 1.2;
  letter-spacing: -0.015em;
}

.route-card__link {
  color: var(--ink);
  text-decoration: none;
}

.route-card__link::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  border-radius: var(--r-sign);
}

.route-card__link:focus-visible {
  outline: none;
}

.route-card__link:focus-visible::after {
  outline: 3px solid var(--focus, var(--ink));
  outline-offset: 4px;
  box-shadow: 0 0 0 4px var(--focus-halo, var(--ground));
}

.route-card:hover .route-card__link {
  text-decoration: underline;
  text-decoration-thickness: 3px;
  text-underline-offset: 0.18em;
}

.route-card:hover::after {
  background: var(--ink);
}

.route-card__text {
  color: var(--ink-2);
  font-size: var(--t-small);
  line-height: 1.5;
}

.route-card__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s3);
  margin-top: auto;
  padding-top: var(--s2);
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.route-card__foot .cite {
  font-size: 0.8125rem;
  color: var(--ink-2);
}

/* Tool and guide cards use the same shape with a type label */
.route-card__type {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.05rem 0.5rem;
  border: 1.5px solid var(--ink);
  border-radius: var(--r-sign);
  font-size: 0.75rem;
  font-weight: 800;
  color: var(--ink);
}

.route-card__stamp {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-weight: 700;
  color: var(--ink-2);
}

.route-card__stamp::before {
  content: "";
  width: 0.9rem;
  height: 0.9rem;
  border: 2px dashed var(--ink-3);
  border-radius: 50%;
}

.route-card__stamp.is-stamped::before {
  border: 2px solid var(--ink);
  background: var(--line-money);
}

/* ---------------------------------------------------------------- */
/* Tables: comparison and specification                               */
/* ---------------------------------------------------------------- */

.table-wrap {
  position: relative;
  max-width: 100%;
  overflow-x: auto;
  border-top: 2px solid var(--ink);
}

.table-wrap:focus-visible {
  outline-offset: 2px;
  box-shadow: 0 0 0 2px var(--focus-halo, var(--ground));
}

.table {
  width: 100%;
  min-width: 36rem;
  border-collapse: collapse;
  font-size: var(--t-small);
  line-height: 1.45;
}

.table caption {
  padding: var(--s3) 0;
  text-align: left;
  font-weight: 800;
  font-size: var(--t-body);
}

.table th,
.table td {
  padding: 0.7rem 0.9rem 0.7rem 0;
  border-bottom: 1px solid var(--rule);
  text-align: left;
  vertical-align: top;
}

.table thead th {
  padding-top: 0.6rem;
  border-bottom: 2px solid var(--ink);
  font-size: var(--t-micro);
  font-weight: 800;
  color: var(--ink);
  white-space: nowrap;
}

.table tbody th {
  font-weight: 700;
  color: var(--ink);
}

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

.table .num,
.table [data-align="end"] {
  text-align: right;
}

.table tr.is-highlight > * {
  background: var(--line-money-wash);
}

.table__yes,
.table__no,
.table__part {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-weight: 700;
  color: var(--ink);
}

.table__yes::before,
.table__no::before,
.table__part::before {
  content: "";
  flex: none;
  width: 0.95rem;
  height: 0.95rem;
  border-radius: 50%;
}

.table__yes::before {
  background: var(--ink);
  box-shadow: inset 0 0 0 3px var(--ink), inset 0 0 0 5px #ffffff;
}

.table__no::before {
  border: 2px solid var(--ink-3);
  background: transparent;
}

.table__part::before {
  border: 2px solid var(--ink);
  box-shadow: inset 0.24rem 0 0 0 var(--ink);
}

/* Specification table: key and value rows */
.spec {
  width: 100%;
  border-collapse: collapse;
  border-top: 2px solid var(--ink);
  font-size: var(--t-small);
}

.spec th,
.spec td {
  padding: 0.7rem 0;
  border-bottom: 1px solid var(--rule);
  text-align: left;
  vertical-align: top;
}

.spec th {
  width: 34%;
  padding-right: var(--s4);
  font-weight: 700;
}

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

/* Stacked variant: rows become cards on phones. Cells need data-label. */
@media (max-width: 44.99rem) {
  .table--stack {
    min-width: 0;
  }

  .table--stack thead {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
  }

  .table--stack,
  .table--stack tbody,
  .table--stack tr,
  .table--stack th,
  .table--stack td {
    display: block;
    width: auto;
  }

  .table--stack tr {
    padding: var(--s3) 0;
    border-bottom: 1px solid var(--rule);
  }

  .table--stack th,
  .table--stack td {
    display: grid;
    grid-template-columns: minmax(7rem, 2fr) minmax(0, 3fr);
    gap: var(--s3);
    padding: 0.2rem 0;
    border: 0;
    text-align: left;
  }

  .table--stack tbody th {
    display: block;
    padding-bottom: var(--s2);
    font-size: var(--t-body);
  }

  .table--stack td::before {
    content: attr(data-label);
    font-weight: 700;
    color: var(--ink);
  }

  .table--stack .num {
    text-align: left;
  }

  .spec th {
    width: 42%;
  }
}

/* ---------------------------------------------------------------- */
/* What Workstride does not claim                                     */
/* ---------------------------------------------------------------- */

.not-claimed {
  padding: var(--s4) var(--s5) var(--s5);
  border: 2px solid var(--ink);
  border-radius: var(--r-sign);
  background: var(--ground);
}

.not-claimed__title {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  padding-bottom: var(--s3);
  border-bottom: 2px solid var(--ink);
  font-size: 1.25rem;
  font-weight: 800;
  line-height: 1.25;
  letter-spacing: -0.01em;
}

/* A no-entry disc: a circle with a bar */
.not-claimed__title::before {
  content: "";
  flex: none;
  width: 1.5rem;
  height: 1.5rem;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='12' fill='%2315181c'/%3E%3Crect x='5' y='9.75' width='14' height='4.5' rx='1' fill='%23fff'/%3E%3C/svg%3E") center / contain no-repeat;
}

.not-claimed__list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.not-claimed__list li {
  position: relative;
  padding: 0.7rem 0 0.7rem 1.9rem;
  border-bottom: 1px solid var(--rule);
  color: var(--ink-2);
}

.not-claimed__list li:last-child {
  padding-bottom: 0;
  border-bottom: 0;
}

.not-claimed__list li::before,
.not-claimed__list li::after {
  content: "";
  position: absolute;
  left: 0.2rem;
  top: 1.15rem;
  width: 1rem;
  height: 3px;
  background: var(--ink);
  transform: rotate(45deg);
}

.not-claimed__list li::after {
  transform: rotate(-45deg);
}

.not-claimed__list strong {
  color: var(--ink);
}

.not-claimed__foot {
  margin-top: var(--s4);
  font-size: var(--t-small);
  color: var(--ink-3);
}

/* ---------------------------------------------------------------- */
/* Commitments and capability lists: a name, its status, a sentence   */
/* ---------------------------------------------------------------- */

.commitments {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr));
  gap: var(--s6) var(--s5);
}

.commitment {
  padding-top: var(--s3);
  border-top: 4px solid var(--ink);
}

.commitment__name {
  font-size: 1.1875rem;
  font-weight: 800;
  line-height: 1.25;
  letter-spacing: -0.01em;
}

.commitment__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.6rem;
  margin-top: 0.5rem;
}

.commitment__note {
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.commitment__note.cite {
  font-size: 0.8125rem;
  color: var(--ink-2);
}

.commitment__text {
  margin-top: 0.5rem;
  font-size: var(--t-small);
  color: var(--ink-2);
}

/* ---------------------------------------------------------------- */
/* Gates register: what stands between Workstride and participants    */
/* States only, no order and no dates DEWR controls                   */
/* ---------------------------------------------------------------- */

.gates {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--t-small);
}

.gates caption {
  padding-bottom: var(--s3);
  text-align: left;
  font-size: 1.0625rem;
  font-weight: 800;
}

.gates th,
.gates td {
  padding: 0.75rem 0.9rem 0.75rem 0;
  border-bottom: 1px solid var(--rule);
  text-align: left;
  vertical-align: top;
}

.gates thead th {
  padding-top: 0;
  border-bottom: 2px solid var(--ink);
  font-size: var(--t-micro);
  font-weight: 700;
  color: var(--ink-2);
}

.gates tbody th {
  font-weight: 700;
  color: var(--ink);
}

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

.gates__when {
  font-family: var(--mono);
  font-size: var(--t-micro);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* A gate's state: a word with its own glyph */
.gate-state {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  font-weight: 700;
  color: var(--ink);
  white-space: nowrap;
}

.gate-state::before {
  content: "";
  flex: none;
  width: 0.75rem;
  height: 0.75rem;
  border: 2.5px solid currentColor;
  border-radius: 50%;
}

.gate-state--progress::before {
  box-shadow: inset 0.19rem 0 0 0 currentColor;
}

.gate-state--done::before {
  background: currentColor;
}

.gate-state--dewr::before {
  border-radius: 1px;
  transform: rotate(45deg) scale(0.85);
}

.gates__foot {
  margin-top: var(--s3);
  font-size: var(--t-micro);
  color: var(--ink-3);
}

@media (max-width: 44.99rem) {
  .gates thead {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
  }

  .gates,
  .gates tbody,
  .gates tr,
  .gates th,
  .gates td {
    display: block;
  }

  .gates tr {
    padding: var(--s3) 0;
    border-bottom: 1px solid var(--rule);
  }

  .gates th,
  .gates td {
    padding: 0.15rem 0;
    border: 0;
  }

  .gates td::before {
    content: attr(data-label) ": ";
    font-weight: 700;
    color: var(--ink);
  }
}

/* ---------------------------------------------------------------- */
/* FAQ: native details and summary                                    */
/* ---------------------------------------------------------------- */

.faq {
  border-top: 2px solid var(--ink);
}

.faq__item {
  border-bottom: 1px solid var(--rule);
}

.faq__q {
  position: relative;
  display: block;
  padding: var(--s4) 3.5rem var(--s4) 0;
  font-size: 1.125rem;
  font-weight: 800;
  line-height: 1.35;
  cursor: pointer;
  list-style: none;
}

.faq__q::-webkit-details-marker {
  display: none;
}

.faq__q::before,
.faq__q::after {
  content: "";
  position: absolute;
  top: 50%;
  right: 0.9rem;
  width: 1rem;
  height: 3px;
  margin-top: -1.5px;
  background: var(--ink);
  transition: transform 180ms ease;
}

.faq__q::after {
  transform: rotate(90deg);
}

.faq__item[open] > .faq__q::after {
  transform: rotate(0deg);
}

.faq__q:hover {
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 0.2em;
}

.faq__q:focus-visible {
  outline-offset: 2px;
  box-shadow: 0 0 0 2px var(--focus-halo, var(--ground));
}

.faq__a {
  max-width: var(--measure);
  padding-bottom: var(--s5);
  color: var(--ink-2);
}

.faq__a > * + * {
  margin-top: var(--s3);
}

/* ---------------------------------------------------------------- */
/* Callouts: source, caution, note                                    */
/* ---------------------------------------------------------------- */

.callout {
  max-width: var(--measure);
  padding: var(--s4) var(--s5);
  border-radius: var(--r-sign);
  font-size: var(--t-small);
  line-height: 1.55;
}

.callout > * + * {
  margin-top: var(--s2);
}

.callout__label {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: var(--t-small);
  font-weight: 800;
  color: var(--ink);
}

.callout--note {
  background: var(--concourse);
  color: var(--ink-2);
}

.band--concourse .callout--note {
  background: var(--ground);
}

.callout--note .callout__label::before {
  content: "i";
  display: inline-grid;
  place-items: center;
  width: 1.25rem;
  height: 1.25rem;
  border-radius: 50%;
  background: var(--ink);
  color: var(--on-ink);
  font-size: 0.8125rem;
  line-height: 1;
}

.callout--caution {
  border: 2px solid var(--caution);
  background: var(--caution-wash);
  color: var(--ink);
}

.callout--caution .callout__label {
  color: var(--caution);
}

.callout--caution .callout__label::before {
  content: "";
  flex: none;
  width: 1.375rem;
  height: 1.375rem;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3.5' y='3.5' width='17' height='17' rx='2' transform='rotate(45 12 12)' fill='%238a5300'/%3E%3Crect x='10.75' y='6.5' width='2.5' height='7.5' rx='1' fill='%23fff'/%3E%3Ccircle cx='12' cy='16.9' r='1.4' fill='%23fff'/%3E%3C/svg%3E") center / contain no-repeat;
}

.callout--source {
  padding: var(--s1) 0 var(--s1) var(--s4);
  border-left: 3px solid var(--ink);
  border-radius: 0;
  font-size: var(--t-body);
}

.callout--source blockquote p {
  font-style: italic;
}

.callout--source figcaption {
  margin-top: var(--s2);
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.callout--source figcaption .cite {
  margin-right: 0.35rem;
  color: var(--ink);
}

/* ---------------------------------------------------------------- */
/* Form controls (tools, the brand drawer, the enquiry form)          */
/* ---------------------------------------------------------------- */

.field {
  display: grid;
  gap: 0.3rem;
  min-width: 0;
  align-content: start;
}

.field__label {
  font-size: 1rem;
  font-weight: 800;
  line-height: 1.3;
}

.field__optional {
  font-weight: 400;
  color: var(--ink-3);
}

.field__help {
  font-size: var(--t-micro);
  line-height: 1.4;
  color: var(--ink-3);
}

.field__error {
  display: flex;
  align-items: baseline;
  gap: 0.45rem;
  font-size: var(--t-small);
  font-weight: 700;
  line-height: 1.35;
  color: var(--breach);
}

.field__error::before {
  content: "";
  flex: none;
  width: 0.6rem;
  height: 0.6rem;
  background: var(--breach);
  transform: rotate(45deg) translateY(-0.05rem);
}

.field__row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--s3);
}

.field__output {
  font-size: 1.125rem;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}

.input,
.select,
.textarea {
  width: 100%;
  min-height: 3rem;
  padding: 0.55rem 0.75rem;
  border: 2px solid var(--rule-strong);
  border-radius: var(--r-ctl);
  background: #ffffff;
  color: var(--ink);
  font-size: 1.0625rem;
  line-height: 1.35;
}

.input:hover,
.select:hover,
.textarea:hover {
  border-color: var(--ink-3);
}

.input:focus-visible,
.select:focus-visible,
.textarea:focus-visible {
  border-color: var(--ink);
  outline: 3px solid var(--focus, var(--ink));
  outline-offset: 2px;
  box-shadow: 0 0 0 2px var(--focus-halo, var(--ground));
}

.input[aria-invalid="true"],
.select[aria-invalid="true"],
.textarea[aria-invalid="true"] {
  border-color: var(--breach);
  background: var(--breach-wash);
}

.input--mono {
  font-family: var(--mono);
  font-variant-numeric: tabular-nums;
}

.textarea {
  min-height: 8rem;
  resize: vertical;
  line-height: 1.5;
}

.select {
  appearance: none;
  padding-right: 2.75rem;
  background: #ffffff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M5 7.5l5 5 5-5' fill='none' stroke='%2315181c' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") right 0.75rem center / 1.25rem no-repeat;
}

.check {
  flex: none;
  width: 1.5rem;
  height: 1.5rem;
  margin: 0;
  accent-color: var(--ink);
  cursor: pointer;
}

.on-ink .check {
  accent-color: var(--line-money);
}

.choice {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  min-height: 2.75rem;
  padding-block: 0.1rem;
  cursor: pointer;
}

.choice__text {
  display: grid;
  gap: 0.1rem;
  padding-top: 0.05rem;
  line-height: 1.35;
}

.choice__label {
  font-weight: 700;
}

/* Toggle chips: a real checkbox or radio inside a labelled chip */
.chips {
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem;
}

.chip {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  min-height: 2.75rem;
  padding: 0.3rem 0.8rem 0.3rem 0.55rem;
  border: 2px solid var(--rule-strong);
  border-radius: var(--r-ctl);
  background: #ffffff;
  font-size: var(--t-small);
  font-weight: 700;
  line-height: 1.25;
  cursor: pointer;
}

.chip input {
  flex: none;
  width: 1.25rem;
  height: 1.25rem;
  margin: 0;
  accent-color: var(--ink);
}

.chip:hover {
  border-color: var(--ink-3);
}

.chip:has(input:checked) {
  border-color: var(--ink);
  background: var(--line-money-wash);
}

.chip:has(input:focus-visible) {
  outline: 3px solid var(--focus, var(--ink));
  outline-offset: 2px;
  box-shadow: 0 0 0 2px var(--focus-halo, var(--ground));
}

.chip input:focus-visible {
  outline: none;
  box-shadow: none;
}

/* Segmented choice of a few values */
.segmented {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  overflow: hidden;
  border: 2px solid var(--ink);
  border-radius: var(--r-ctl);
  background: #ffffff;
}

.segmented input {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
}

.segmented label {
  display: grid;
  place-items: center;
  min-height: 2.75rem;
  padding: 0.25rem 0.4rem;
  border-left: 1px solid var(--rule-strong);
  font-size: 1.0625rem;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  text-align: center;
  cursor: pointer;
}

.segmented label:first-of-type {
  border-left: 0;
}

.segmented label:hover {
  background: var(--concourse);
}

.segmented input:checked + label {
  background: var(--ink);
  color: var(--on-ink);
}

.segmented input:focus-visible {
  box-shadow: none;
}

.segmented input:focus-visible + label {
  outline: 3px solid var(--line-money);
  outline-offset: -5px;
  box-shadow: inset 0 0 0 7px var(--ink);
}

.range {
  width: 100%;
  height: 2rem;
  margin: var(--s2) 0 0;
  accent-color: var(--ink);
  cursor: pointer;
}

.range__scale {
  display: flex;
  justify-content: space-between;
  padding-inline: 0.2rem;
  font-size: var(--t-micro);
  color: var(--ink-3);
  font-variant-numeric: tabular-nums;
}

.datefield {
  display: flex;
  align-items: stretch;
  gap: 0.4rem;
}

.datefield .input {
  font-family: var(--mono);
  font-weight: 700;
  text-align: center;
}

.stepper {
  flex: none;
  display: grid;
  place-items: center;
  width: 3rem;
  border: 2px solid var(--rule-strong);
  border-radius: var(--r-ctl);
  background: #ffffff;
  font-weight: 800;
}

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

.stepper svg {
  width: 1.25rem;
  height: 1.25rem;
}

/* ---------------------------------------------------------------- */
/* Tool layout: inputs, results, sources, caveat, send it to us       */
/* ---------------------------------------------------------------- */

.tool__board {
  display: grid;
  grid-template-columns: minmax(17rem, 4fr) minmax(0, 8fr);
  overflow: hidden;
  border: 2px solid var(--ink);
  border-radius: var(--r-sign);
  background: var(--ground);
}

.tool__inputs {
  display: flex;
  flex-direction: column;
  gap: var(--s5);
  padding: var(--s5);
  border-right: 2px solid var(--ink);
  background: var(--concourse);
}

.tool__inputs-title,
.tool__results-title {
  font-size: var(--t-small);
  font-weight: 800;
  color: var(--ink-2);
}

.tool__results {
  display: grid;
  gap: var(--s5);
  align-content: start;
  min-width: 0;
  padding: var(--s5);
}

.tool__answer {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--s2) var(--s5);
  padding: var(--s4) var(--s5);
  border-radius: var(--r-sign);
  background: var(--board);
  color: var(--on-ink);
}

.tool__answer-label {
  font-size: 1.125rem;
}

.tool__answer-value {
  font-size: clamp(1.625rem, 1.3rem + 1vw, 2.25rem);
  font-weight: 800;
  letter-spacing: -0.015em;
  font-variant-numeric: tabular-nums;
}

.tool__answer-note {
  flex-basis: 100%;
  font-size: var(--t-small);
  color: var(--on-ink-2);
}

.tool__foot {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: var(--s5) clamp(2rem, 4vw, 4.5rem);
  margin-top: var(--s5);
  align-items: start;
}

.tool__sources {
  font-size: var(--t-small);
}

.tool__sources-title {
  font-size: var(--t-small);
  font-weight: 800;
}

.tool__sources ul {
  margin-top: var(--s2);
  padding: 0;
  list-style: none;
  color: var(--ink-2);
}

.tool__sources li {
  padding: 0.3rem 0;
  border-bottom: 1px solid var(--rule);
}

.tool__checked {
  margin-top: var(--s2);
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.tool__caveat {
  margin-top: var(--s4);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.tool__send {
  padding: var(--s4) var(--s5);
  border: 2px solid var(--ink);
  border-radius: var(--r-sign);
  background: var(--ground);
}

.tool__send-title {
  font-weight: 800;
}

.tool__send p {
  margin-top: 0.2rem;
  font-size: var(--t-small);
  color: var(--ink-2);
}

.tool__send .btn {
  margin-top: var(--s3);
}

@media (max-width: 68.74rem) {
  .tool__board {
    grid-template-columns: minmax(0, 1fr);
  }

  .tool__inputs {
    border-right: 0;
    border-bottom: 2px solid var(--ink);
  }

  .tool__foot {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 44.99rem) {
  .tool__inputs,
  .tool__results {
    padding: var(--s4);
  }
}

/* Type line for tools and games: "Calculator on the Claims and money line" */
.kind-line {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 0.35rem 0.6rem;
  font-size: var(--t-small);
  font-weight: 700;
  color: var(--ink-2);
}

/* ---------------------------------------------------------------- */
/* Game frame: the departure board                                    */
/* ---------------------------------------------------------------- */

.game__board {
  --focus: var(--line-money);
  overflow: hidden;
  border-radius: var(--r-sign);
  background: var(--board);
  color: var(--on-ink);
}

.game__head {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  align-items: end;
  gap: var(--s3) var(--s6);
  padding: var(--s4) var(--s5);
  border-bottom: 1px solid var(--board-rule);
}

.game__when {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0 var(--s3);
}

.game__day {
  font-size: clamp(1.5rem, 1.2rem + 1vw, 2.125rem);
  font-weight: 800;
  letter-spacing: -0.02em;
}

.game__date {
  font-family: var(--mono);
  font-size: 1.0625rem;
  color: var(--on-ink-2);
}

.game__slot {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}

.game__slot--end {
  align-items: flex-end;
}

.game__slot-label {
  font-size: var(--t-micro);
  color: var(--on-ink-2);
}

.game__timer,
.game__score {
  font-family: var(--mono);
  font-size: clamp(1.75rem, 1.3rem + 1.2vw, 2.5rem);
  font-weight: 800;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  color: var(--line-money);
}

.game__timer--off {
  font-family: var(--font);
  font-size: 1.125rem;
  color: var(--on-ink-2);
}

.game__timer.is-low {
  color: var(--breach-on-ink);
}

.game__score {
  color: var(--on-ink);
}

.game__of {
  margin-left: 0.2rem;
  font-family: var(--font);
  font-size: 1.125rem;
  font-weight: 700;
  color: var(--on-ink-2);
}

.game__bar {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 4px;
  background: var(--board-2);
}

.game__bar > span {
  display: block;
  width: 100%;
  height: 100%;
  background: var(--line-money);
  transform-origin: left center;
  transition: transform 180ms linear;
}

.game__panel {
  padding: var(--s5);
}

.game__intro {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 4fr);
  gap: var(--s5) var(--s7);
  align-items: end;
}

.game__how {
  color: #eef0f2;
}

.game__start {
  display: grid;
  gap: var(--s4);
  justify-items: start;
}

.game__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s3);
  margin-top: var(--s5);
}

.game__actions .game__primary {
  margin-left: auto;
}

.game__result-title {
  font-size: var(--t-h3);
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.game__result-title:focus {
  outline: none;
}

.game__result-title:focus-visible {
  outline: 3px solid var(--line-money);
  outline-offset: 3px;
  box-shadow: 0 0 0 3px var(--board);
}

.game__summary {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: var(--s2) var(--s5);
  align-items: end;
  margin-top: var(--s2);
}

.game__big {
  grid-row: span 2;
  font-family: var(--mono);
  font-size: clamp(2.25rem, 1.8rem + 1.5vw, 3.25rem);
  font-weight: 800;
  line-height: 1;
  color: var(--line-money);
  text-align: right;
}

.game__big small {
  display: block;
  margin-top: 0.35rem;
  font-family: var(--font);
  font-size: var(--t-small);
  font-weight: 700;
  color: var(--on-ink-2);
}

.game__recap {
  margin-top: var(--s4);
  padding: var(--s4);
  border-radius: var(--r-ctl);
  background: var(--board-2);
  color: #eef0f2;
  font-size: var(--t-small);
}

.game__recap > * + * {
  margin-top: var(--s2);
}

.game__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s4);
  margin-top: var(--s5);
  padding-top: var(--s4);
  border-top: 1px solid var(--board-rule);
  font-size: var(--t-small);
  color: var(--on-ink-2);
}

/* Departures table */
.departures__title {
  margin-bottom: var(--s2);
  font-size: var(--t-micro);
  font-weight: 700;
  color: var(--on-ink-2);
}

.departures {
  width: 100%;
  border-collapse: collapse;
  font-size: 1rem;
}

.departures thead th {
  padding: 0 0.75rem 0.4rem 0;
  border-bottom: 2px solid var(--line-money);
  font-size: var(--t-micro);
  font-weight: 700;
  text-align: left;
  color: var(--on-ink-3);
}

.departures td {
  padding: 0.5rem 0.75rem 0.5rem 0;
  border-bottom: 1px solid #343a41;
  color: var(--on-ink);
  font-weight: 700;
  vertical-align: baseline;
}

.departures__due {
  width: 8.5rem;
  font-family: var(--mono);
  white-space: nowrap;
  color: var(--line-money) !important;
}

.departures__due--late {
  color: var(--breach-on-ink) !important;
}

.departures__flag {
  display: inline-block;
  margin-left: 0.3rem;
  padding: 0 0.35rem;
  border: 1.5px solid currentColor;
  border-radius: 3px;
  font-family: var(--font);
  font-size: 0.75rem;
  font-weight: 800;
  line-height: 1.3;
  vertical-align: 0.1em;
}

.departures__money,
.departures thead th:last-child {
  padding-right: 0;
  text-align: right;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.departures__money {
  color: #dfe3e6 !important;
}

/* Ticket: a task on the board, a toggle button with a stub */
.tickets {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--s3);
}

.ticket {
  position: relative;
  display: grid;
  grid-template-columns: 3.25rem minmax(0, 1fr);
  width: 100%;
  height: 100%;
  min-height: 9rem;
  padding: 0;
  overflow: hidden;
  border: 0;
  border-radius: var(--r-card);
  background: #ffffff;
  color: var(--ink);
  text-align: left;
}

.ticket:hover {
  box-shadow: 0 0 0 3px var(--line-money);
}

.ticket:focus-visible {
  outline: 4px solid var(--line-money);
  outline-offset: 3px;
  box-shadow: 0 0 0 3px var(--board);
}

.ticket__stub {
  display: grid;
  place-items: center;
  border-right: 2px dashed var(--rule-strong);
  background: var(--concourse);
  font-family: var(--mono);
  font-size: 1.5rem;
  font-weight: 800;
  color: var(--ink-3);
}

.ticket[aria-pressed="true"] .ticket__stub {
  background: var(--line-money);
  color: var(--ink);
  font-size: 1.9rem;
}

.ticket__body {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  min-width: 0;
  padding: 0.75rem 0.85rem 0.8rem;
}

.ticket__title {
  font-size: 1.0625rem;
  font-weight: 800;
  line-height: 1.2;
}

.ticket__meta {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 0.2rem 0.6rem;
  margin-top: auto;
  padding-top: 0.35rem;
  border-top: 1px solid var(--rule);
  font-size: var(--t-micro);
  font-weight: 700;
}

@media (max-width: 68.74rem) {
  .game__intro {
    grid-template-columns: minmax(0, 1fr);
  }

  .tickets {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 44.99rem) {
  .game__head {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    padding: var(--s4);
  }

  .game__when {
    grid-column: 1 / -1;
  }

  .game__panel {
    padding: var(--s4);
  }

  .game__actions .game__primary {
    width: 100%;
    margin-left: 0;
  }

  .game__summary {
    grid-template-columns: minmax(0, 1fr);
  }

  .game__big {
    grid-row: auto;
    text-align: left;
  }

  .tickets {
    grid-template-columns: minmax(0, 1fr);
  }

  .ticket {
    min-height: 0;
  }

  .departures thead {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
  }

  .departures,
  .departures tbody,
  .departures tr,
  .departures td {
    display: block;
    width: auto;
  }

  .departures tr {
    display: grid;
    grid-template-columns: auto 1fr;
    column-gap: 0.75rem;
    padding: 0.5rem 0;
    border-bottom: 1px solid #343a41;
  }

  .departures td {
    padding: 0;
    border: 0;
  }

  .departures td:nth-child(2) {
    grid-column: 1 / -1;
    order: 3;
  }
}

/* ---------------------------------------------------------------- */
/* Brand stage: the default screen for Platform stations              */
/* ---------------------------------------------------------------- */

.brand-stage {
  display: grid;
  gap: var(--s4);
  align-content: start;
  padding: var(--s5);
  border: 2px solid var(--ink);
  border-radius: var(--r-screen);
  background: var(--ground);
}

.brand-stage .brand-preview__tab {
  min-height: 3rem;
  padding-inline: 1.25rem;
  font-size: 1.125rem;
}

.brand-stage__text {
  max-width: 36rem;
  color: var(--ink-2);
}

/* Passport strip: the passport in a page section */
.passport-strip {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: var(--s5) var(--s7);
  align-items: center;
  margin-top: var(--s6);
  padding: var(--s5);
  border: 2px solid var(--ink);
  border-radius: var(--r-passport);
  background: var(--ground);
}

.passport-strip__title {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  font-size: 1.375rem;
  font-weight: 800;
  letter-spacing: -0.01em;
}

.passport-strip__lead {
  margin-top: var(--s2);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.passport-strip .actions {
  margin-top: var(--s3);
}

.passport-strip .passport-progress {
  margin-top: 0;
}

@media (max-width: 56.24rem) {
  .passport-strip {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---------------------------------------------------------------- */
/* Passport: progress line and stamp grid                             */
/* ---------------------------------------------------------------- */

.passport-progress {
  margin-top: var(--s4);
}

.passport-progress__count {
  font-size: 1.125rem;
  font-weight: 800;
}

.passport-progress__line {
  display: flex;
  align-items: center;
  margin-top: var(--s3);
  padding-inline: 0.2rem;
}

.passport-progress__stop {
  position: relative;
  flex: 1 1 0;
  height: 1.25rem;
}

.passport-progress__stop::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 4px;
  margin-top: -2px;
  background: var(--rule-strong);
}

.passport-progress__stop:first-child::before {
  left: 50%;
}

.passport-progress__stop:last-child::before {
  right: 50%;
}

.passport-progress__stop::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 0.85rem;
  height: 0.85rem;
  transform: translate(-50%, -50%);
  border: 2.5px solid var(--ink-3);
  border-radius: 50%;
  background: var(--ground);
}

.passport-progress__stop.is-stamped::before {
  background: var(--ink);
}

.passport-progress__stop.is-stamped::after {
  border-color: var(--ink);
  background: var(--ink);
}

.stamps {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 14rem), 1fr));
  gap: var(--s3);
  margin-top: var(--s5);
}

.stamps--drawer {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 12rem), 1fr));
}

/* A stamp is typographic: the line's bullet, the name, and a mono date line */
.stamp {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-content: start;
  gap: 0.15rem 0.7rem;
  min-width: 0;
  padding: 0.7rem 0.8rem 0.75rem;
  border: 2px dashed var(--rule-strong);
  border-radius: var(--r-card);
  background: var(--ground);
}

.stamp > :not(.stamp__mark) {
  grid-column: 2;
}

.stamp__mark {
  grid-row: 1 / span 3;
  padding-top: 0.1rem;
}

.stamp__mark .bullet {
  --b: 2rem;
  opacity: 0.45;
}

.stamp.is-stamped {
  border-style: solid;
  border-color: var(--ink);
  background: var(--line-wash, var(--concourse));
}

.stamp.is-stamped .stamp__mark .bullet {
  opacity: 1;
}

.stamp__name {
  font-size: var(--t-small);
  font-weight: 800;
  line-height: 1.25;
}

.stamp__hint {
  font-size: var(--t-micro);
  line-height: 1.35;
  color: var(--ink-3);
}

.stamp__when {
  font-family: var(--mono);
  font-size: var(--t-micro);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--ink);
}

.stamp__link {
  display: inline-flex;
  align-items: center;
  justify-self: start;
  min-height: 1.75rem;
  font-size: var(--t-micro);
  font-weight: 700;
}

@media (prefers-reduced-motion: no-preference) {
  .stamp.is-new {
    animation: stamp-in 160ms var(--ease-out) both;
  }
}

@keyframes stamp-in {
  from {
    opacity: 0;
  }
}

/* ---------------------------------------------------------------- */
/* Founding providers band                                            */
/* ---------------------------------------------------------------- */

.founding__board {
  --focus: var(--line-money);
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: var(--s6) clamp(2rem, 5vw, 5rem);
  align-items: start;
  padding: clamp(1.5rem, 1rem + 2.4vw, 3rem);
  border-top: 10px solid var(--line-money);
  border-radius: var(--r-sign);
  background: var(--board);
  color: var(--on-ink);
}

.founding__tag {
  font-weight: 800;
  color: var(--line-money);
}

.founding__title {
  margin-top: var(--s3);
  font-size: var(--t-h2);
  font-weight: 800;
  line-height: 1.02;
  letter-spacing: -0.03em;
  max-width: 19ch;
}

.founding__lead {
  margin-top: var(--s4);
  max-width: 38rem;
  font-size: var(--t-lead);
  line-height: 1.5;
  color: #eef0f2;
}

.founding__fine {
  margin-top: var(--s4);
  max-width: 38rem;
  font-size: var(--t-small);
  color: var(--on-ink-2);
}

.founding__board .actions {
  margin-top: var(--s5);
}

.founding__steps-title {
  margin-bottom: var(--s3);
  font-size: 1.125rem;
  font-weight: 800;
}

@media (max-width: 68.74rem) {
  .founding__board {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---------------------------------------------------------------- */
/* Enquiry form: the founding provider "execution" block              */
/* ---------------------------------------------------------------- */

.enquiry-block {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: var(--s6) clamp(2rem, 5vw, 5rem);
  align-items: start;
}

.enquiry-block__terms {
  margin-top: var(--s5);
  border-top: 1px solid var(--rule);
  counter-reset: term;
}

.enquiry-block__terms li {
  display: grid;
  grid-template-columns: 2.25rem minmax(0, 1fr);
  padding: 0.6rem 0;
  border-bottom: 1px solid var(--rule);
  counter-increment: term;
  font-size: var(--t-small);
}

.enquiry-block__terms li::before {
  content: "(" counter(term, lower-alpha) ")";
  font-weight: 700;
  color: var(--ink-3);
}

.enquiry {
  padding: var(--s5);
  border: 2px solid var(--ink);
  border-radius: var(--r-sign);
  background: var(--ground);
  box-shadow: 6px 6px 0 var(--concourse-deep);
}

.band--concourse .enquiry {
  box-shadow: 6px 6px 0 #d5dbdf;
}

.enquiry__title {
  padding-bottom: var(--s3);
  border-bottom: 2px solid var(--ink);
  font-size: 1.375rem;
  font-weight: 800;
  line-height: 1.2;
  letter-spacing: -0.01em;
}

.enquiry__route {
  margin-top: var(--s3);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.enquiry__route a {
  font-weight: 700;
  color: var(--ink);
}

.enquiry__form {
  display: grid;
  gap: var(--s5);
  margin-top: var(--s5);
}

.enquiry__grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--s5) var(--s5);
}

.enquiry__full {
  grid-column: 1 / -1;
}

/* Signature lines: filled field, heavy ink rule underneath */
.enquiry .input,
.enquiry .textarea,
.enquiry .select {
  border-width: 0 0 2px;
  border-color: var(--ink);
  border-radius: var(--r-ctl) var(--r-ctl) 0 0;
  background-color: var(--concourse);
}

.enquiry .input:hover,
.enquiry .textarea:hover,
.enquiry .select:hover {
  background-color: var(--concourse-deep);
}

.enquiry .input[aria-invalid="true"],
.enquiry .textarea[aria-invalid="true"] {
  border-bottom-width: 3px;
  border-color: var(--breach);
  background-color: var(--breach-wash);
}

.enquiry__honeypot {
  position: absolute !important;
  left: -100vw !important;
  width: 1px !important;
  height: 1px !important;
  overflow: hidden !important;
}

.enquiry__context {
  display: grid;
  gap: var(--s2);
  padding: var(--s3) var(--s4);
  border-radius: var(--r-ctl);
  background: var(--line-money-wash);
}

.enquiry__context-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s2);
}

.enquiry__context .textarea {
  min-height: 6rem;
  background-color: #ffffff;
  font-size: var(--t-small);
}

.enquiry__errors {
  padding: var(--s3) var(--s4);
  border: 2px solid var(--breach);
  border-radius: var(--r-ctl);
  background: var(--breach-wash);
}

.enquiry__errors:focus {
  outline: 3px solid var(--ink);
  outline-offset: 2px;
}

.enquiry__errors-title {
  font-weight: 800;
  color: var(--breach);
}

.enquiry__errors ul {
  margin-top: var(--s1);
  padding-left: 1.2rem;
  font-size: var(--t-small);
}

.enquiry__errors a {
  font-weight: 700;
  color: var(--breach);
}

.enquiry__sign {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s3) var(--s5);
  padding-top: var(--s2);
}

.enquiry__small {
  flex: 1 1 16rem;
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.enquiry__status {
  display: flex;
  align-items: center;
  gap: var(--s3);
  padding: var(--s3) var(--s4);
  border-radius: var(--r-ctl);
  background: var(--concourse);
  font-size: var(--t-small);
  font-weight: 700;
}

.enquiry__status:empty {
  display: none;
}

.enquiry__status.is-error {
  border: 2px solid var(--breach);
  background: var(--breach-wash);
  color: var(--ink);
}

.enquiry__success {
  display: grid;
  gap: var(--s3);
  margin-top: var(--s5);
}

.enquiry__success-title {
  display: flex;
  align-items: center;
  gap: var(--s3);
  font-size: var(--t-h3);
  font-weight: 800;
  line-height: 1.15;
}

.enquiry__success-title:focus {
  outline: none;
}

.enquiry__success-title::before {
  content: "";
  flex: none;
  width: 2rem;
  height: 2rem;
  border-radius: 50%;
  background: var(--ink);
  box-shadow: 0 0 0 4px var(--line-money), 0 0 0 6px var(--ink);
}

@media (max-width: 68.74rem) {
  .enquiry-block {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 44.99rem) {
  .enquiry {
    padding: var(--s4);
    box-shadow: none;
  }

  .enquiry__grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---------------------------------------------------------------- */
/* Guides: long-form reading, table of contents, footnotes            */
/* ---------------------------------------------------------------- */

.guide {
  display: grid;
  grid-template-columns: 14rem minmax(0, 1fr);
  gap: var(--s6) clamp(2rem, 4vw, 4rem);
  align-items: start;
}

.guide {
  padding-bottom: var(--band);
}

.guide__toc {
  position: sticky;
  top: calc(var(--header-h) + 1.5rem);
  max-height: calc(100vh - var(--header-h) - 3rem);
  overflow-y: auto;
  padding-bottom: var(--s4);
}

.guide__main {
  min-width: 0;
}

.guide__main > .signposted {
  --sp-col: 14.5rem;
  --sp-gap: 3.5rem;
}

.article-head {
  max-width: 48rem;
  padding-block: clamp(1.5rem, 1rem + 2vw, 3rem) var(--s6);
}

.article-head__title {
  font-size: clamp(2.25rem, 1.4rem + 2.8vw, 3.75rem);
  font-weight: 800;
  line-height: 1.02;
  letter-spacing: -0.03em;
}

.article-head__lead {
  margin-top: var(--s4);
  font-size: var(--t-lead);
  line-height: 1.5;
  color: var(--ink-2);
}

.reading-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s5);
  margin-top: var(--s5);
  padding-top: var(--s3);
  border-top: 1px solid var(--rule);
  font-size: var(--t-small);
  color: var(--ink-3);
}

.reading-meta strong {
  color: var(--ink);
}

.prose {
  max-width: var(--measure);
  font-size: var(--t-prose);
  line-height: 1.65;
}

.prose > * + * {
  margin-top: 1.1em;
}

.prose > :first-child {
  margin-top: 0;
}

.prose h2 {
  margin-top: 2.25em;
  font-size: clamp(1.5rem, 1.2rem + 1vw, 2rem);
  font-weight: 800;
  line-height: 1.15;
  letter-spacing: -0.02em;
}

.prose h3 {
  margin-top: 1.8em;
  font-size: clamp(1.1875rem, 1.05rem + 0.5vw, 1.375rem);
  font-weight: 800;
  line-height: 1.25;
}

.prose h4 {
  margin-top: 1.5em;
  font-size: 1.0625rem;
  font-weight: 800;
}

.prose h2 + *,
.prose h3 + *,
.prose h4 + * {
  margin-top: 0.55em;
}

.prose :where(ul, ol):not([class]) {
  padding-left: 1.35em;
}

.prose :where(li):not([class]) + li {
  margin-top: 0.4em;
}

.prose li::marker {
  color: var(--ink);
  font-weight: 700;
}

.prose a:not([class]) {
  font-weight: 700;
  text-decoration-thickness: 0.08em;
}

.prose strong {
  font-weight: 700;
}

.prose hr {
  margin-block: 2.5em;
  border: 0;
  border-top: 2px solid var(--ink);
}

.prose code {
  padding: 0.05em 0.3em;
  border-radius: 3px;
  background: var(--concourse);
  font-family: var(--mono);
  font-size: 0.875em;
}

.prose > blockquote:not([class]) {
  padding-left: var(--s4);
  border-left: 3px solid var(--ink);
  font-style: italic;
}

.prose .callout,
.prose .table-wrap,
.prose .exhibit {
  margin-top: 1.6em;
  margin-bottom: 1.6em;
}

.prose figure figcaption {
  margin-top: var(--s2);
  font-size: var(--t-small);
  color: var(--ink-3);
}

.fn-ref {
  font-size: 0.72em;
  line-height: 0;
  vertical-align: super;
}

.fn-ref a {
  display: inline-grid;
  place-items: center;
  min-width: 1.5rem;
  min-height: 1.5rem;
  margin-left: 0.1rem;
  padding: 0 0.3rem;
  border: 1.5px solid var(--ink);
  border-radius: var(--r-pill);
  font-family: var(--mono);
  font-weight: 700;
  line-height: 1;
  text-decoration: none;
  vertical-align: 0.1em;
}

.fn-ref a:hover {
  background: var(--line-money);
}

.footnotes {
  max-width: var(--measure);
  margin-top: var(--s7);
  padding-top: var(--s4);
  border-top: 2px solid var(--ink);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.footnotes__title {
  font-size: 1rem;
  font-weight: 800;
  color: var(--ink);
}

.footnotes ol {
  margin-top: var(--s3);
  padding-left: 1.5rem;
}

.footnotes li + li {
  margin-top: var(--s2);
}

.footnotes li:target {
  background: var(--line-money-wash);
}

.footnotes__back {
  margin-left: 0.35rem;
  font-weight: 700;
}

.sources-box {
  max-width: var(--measure);
  margin-top: var(--s6);
  padding: var(--s4) var(--s5);
  border-radius: var(--r-sign);
  background: var(--concourse);
  font-size: var(--t-small);
}

.sources-box__title {
  font-size: 1rem;
  font-weight: 800;
}

.sources-box ul {
  margin-top: var(--s2);
  padding-left: 1.2rem;
  color: var(--ink-2);
}

.sources-box__checked {
  margin-top: var(--s2);
  font-size: var(--t-micro);
  color: var(--ink-3);
}

/* Table of contents: a vertical line with a station per section */
.toc {
  font-size: var(--t-small);
}

.toc__summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 2.75rem;
  font-weight: 800;
  cursor: pointer;
  list-style: none;
}

.toc__summary::-webkit-details-marker {
  display: none;
}

.toc__list {
  position: relative;
  margin-top: var(--s2);
}

.toc__list::before {
  content: "";
  position: absolute;
  top: 0.9rem;
  bottom: 0.9rem;
  left: 0.5rem;
  width: 3px;
  margin-left: -1.5px;
  background: var(--ink);
}

.toc__link {
  position: relative;
  display: block;
  padding: 0.4rem 0.25rem 0.4rem 1.6rem;
  color: var(--ink-2);
  line-height: 1.35;
  text-decoration: none;
}

.toc__link::before {
  content: "";
  position: absolute;
  left: 0.5rem;
  top: 0.95rem;
  width: 0.75rem;
  height: 0.75rem;
  transform: translate(-50%, -50%);
  border: 2.5px solid var(--ink);
  border-radius: 50%;
  background: var(--ground);
}

.toc__link:hover {
  color: var(--ink);
  text-decoration: underline;
}

.toc__link[aria-current="true"] {
  color: var(--ink);
  font-weight: 800;
}

.toc__link[aria-current="true"]::before {
  background: var(--ink);
  box-shadow: 0 0 0 2.5px var(--line-money), 0 0 0 4px var(--ink);
}

@media (min-width: 68.75rem) {
  .toc__summary {
    pointer-events: none;
  }

  .toc__summary::after {
    display: none;
  }
}

@media (max-width: 68.74rem) {
  .guide {
    grid-template-columns: minmax(0, 1fr);
  }

  .guide__toc {
    position: static;
    max-height: none;
    padding: var(--s2) var(--s4);
    border: 2px solid var(--ink);
    border-radius: var(--r-sign);
  }

  .toc__summary::after {
    content: "";
    width: 0.5rem;
    height: 0.5rem;
    margin-right: 0.3rem;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(45deg);
  }

  .toc[open] .toc__summary::after {
    transform: rotate(-135deg);
  }
}

/* ---------------------------------------------------------------- */
/* Glossary: A to Z jump links and a definition list with anchors     */
/* ---------------------------------------------------------------- */

.az {
  position: sticky;
  top: var(--header-h);
  z-index: 5;
  padding-block: var(--s2);
  border-bottom: 1px solid var(--rule);
  background: var(--ground);
}

.az__list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
}

.az__list a,
.az__list span {
  display: grid;
  place-items: center;
  min-width: 2.25rem;
  height: 2.25rem;
  border-radius: var(--r-ctl);
  font-weight: 800;
  text-decoration: none;
}

.az__list a {
  border: 2px solid var(--ink);
  color: var(--ink);
}

.az__list a:hover,
.az__list a[aria-current="true"] {
  background: var(--ink);
  color: var(--on-ink);
}

.az__list span {
  border: 2px dashed var(--rule-strong);
  color: var(--ink-3);
  font-weight: 700;
}

.glossary-group {
  padding-top: var(--s6);
}

.glossary-letter {
  display: flex;
  align-items: center;
  gap: var(--s3);
  margin-bottom: var(--s3);
  font-size: var(--t-h3);
  font-weight: 800;
}

.glossary-letter::after {
  content: "";
  flex: 1 1 auto;
  height: var(--track-thin);
  background: var(--ink);
}

.glossary {
  border-top: 2px solid var(--ink);
}

.glossary__entry {
  display: grid;
  grid-template-columns: minmax(0, 4fr) minmax(0, 8fr);
  gap: var(--s2) var(--s6);
  padding-block: var(--s4);
  border-bottom: 1px solid var(--rule);
}

.glossary__entry:target {
  background: var(--line-money-wash);
  box-shadow: -0.75rem 0 0 var(--line-money-wash), 0.75rem 0 0 var(--line-money-wash);
}

.glossary__term {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.2rem 0.5rem;
  font-size: 1.1875rem;
  font-weight: 800;
  line-height: 1.3;
}

.glossary__term dfn {
  font-style: normal;
}

.glossary__anchor {
  display: inline-grid;
  place-items: center;
  min-width: 1.5rem;
  min-height: 1.5rem;
  border-radius: var(--r-ctl);
  font-family: var(--mono);
  font-size: var(--t-small);
  font-weight: 700;
  color: var(--ink-3);
  text-decoration: none;
}

.glossary__anchor:hover {
  background: var(--concourse);
  color: var(--ink);
}

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

.glossary__def > * + * {
  margin-top: var(--s2);
}

.glossary__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 1rem;
  font-size: var(--t-small);
}

.glossary__meta > span {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
}

@media (max-width: 44.99rem) {
  .glossary__entry {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---------------------------------------------------------------- */
/* Hub sections, pager and pagination                                 */
/* ---------------------------------------------------------------- */

.hub-section + .hub-section {
  margin-top: clamp(3rem, 2.5rem + 2vw, 4.5rem);
}

.hub-section__head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--s2) var(--s5);
  margin-bottom: var(--s5);
  padding-bottom: var(--s3);
  border-bottom: 2px solid var(--ink);
}

.hub-section__title {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  font-size: var(--t-h3);
  font-weight: 800;
  line-height: 1.15;
  letter-spacing: -0.02em;
}

.hub-section__note {
  font-size: var(--t-small);
  color: var(--ink-3);
}

.pager {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--s4);
  padding-top: var(--s4);
  border-top: 2px solid var(--ink);
}

.pager__link {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  min-height: 3.5rem;
  padding: var(--s3) var(--s4);
  border-radius: var(--r-sign);
  color: var(--ink);
  text-decoration: none;
}

.pager__link:hover {
  background: var(--concourse);
}

.pager__dir {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: var(--t-micro);
  font-weight: 700;
  color: var(--ink-3);
}

.pager__dir::before {
  content: "";
  flex: none;
  width: 0.75rem;
  height: 0.75rem;
  border: 2.5px solid var(--ink);
  border-radius: 50%;
}

.pager__link:hover .pager__dir::before {
  background: var(--ink);
}

.pager__link--next .pager__dir {
  flex-direction: row-reverse;
}

.pager__title {
  font-size: 1.125rem;
  font-weight: 800;
  line-height: 1.25;
}

.pager__link:hover .pager__title {
  text-decoration: underline;
  text-decoration-thickness: 2px;
}

.pager__link--next {
  grid-column: 2;
  align-items: flex-end;
  text-align: right;
}

.pagination__list {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem;
}

.pagination__list a,
.pagination__list span {
  display: grid;
  place-items: center;
  min-width: 2.75rem;
  height: 2.75rem;
  padding-inline: 0.6rem;
  border: 2px solid var(--rule-strong);
  border-radius: var(--r-ctl);
  font-weight: 700;
  text-decoration: none;
}

.pagination__list a:hover {
  border-color: var(--ink);
}

.pagination__list [aria-current="page"] {
  border-color: var(--ink);
  background: var(--ink);
  color: var(--on-ink);
}

@media (max-width: 37.49rem) {
  .pager {
    grid-template-columns: minmax(0, 1fr);
  }

  .pager__link--next {
    grid-column: 1;
  }
}

/* ---------------------------------------------------------------- */
/* 404: the line stops here                                           */
/* ---------------------------------------------------------------- */

.lost {
  overflow-x: clip;
  padding-block: clamp(2.5rem, 2rem + 3vw, 5rem);
}

.lost__line {
  position: relative;
  height: 3rem;
  margin-bottom: var(--s6);
}

.lost__line::before {
  content: "";
  position: absolute;
  top: 50%;
  left: -100vw;
  width: calc(100vw + 55%);
  height: var(--track);
  margin-top: calc(var(--track) / -2);
  background: var(--line-day);
}

.lost__line::after {
  content: "";
  position: absolute;
  top: 0;
  left: 55%;
  width: 0.8rem;
  height: 3rem;
  border-radius: 2px;
  background: var(--ink);
}

.lost__gap {
  position: absolute;
  top: 50%;
  left: calc(55% + 2rem);
  right: 0;
  height: 0;
  border-top: 4px dashed var(--rule-strong);
}

/* ---------------------------------------------------------------- */
/* Brand drawer internals: swatches, contrast check, preview          */
/* ---------------------------------------------------------------- */

.brand-form {
  display: grid;
  gap: var(--s5);
  margin-top: var(--s5);
}

.swatches {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--s3) var(--s2);
  margin-top: var(--s2);
}

.swatch {
  position: relative;
  display: grid;
  gap: 0.3rem;
  min-width: 0;
  cursor: pointer;
}

.swatch__input {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: 0;
  opacity: 0;
}

.swatch__chip {
  display: grid;
  place-items: center;
  height: 2.5rem;
  border-radius: 8px 8px 0 0;
  background: var(--sw);
  color: var(--swi, #ffffff);
  box-shadow: inset 0 -4px 0 rgba(0, 0, 0, 0.2);
}

.swatch__chip svg {
  width: 1.25rem;
  height: 1.25rem;
  opacity: 0;
  transform: scale(0.6);
  transition: opacity 150ms ease, transform 150ms ease;
}

.swatch__name {
  font-size: var(--t-micro);
  font-weight: 700;
  text-align: center;
}

.swatch:hover .swatch__chip {
  box-shadow: inset 0 -4px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px #ffffff, 0 0 0 4px var(--rule-strong);
}

.swatch__input:checked + .swatch__chip {
  box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px var(--ink);
}

.swatch__input:checked + .swatch__chip svg {
  opacity: 1;
  transform: none;
}

.swatch__input:focus-visible + .swatch__chip {
  outline: 3px solid var(--focus, var(--ink));
  outline-offset: 5px;
}

.colour-pick {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s3);
  margin-top: var(--s4);
}

.colour-pick__label {
  margin-right: auto;
  font-size: var(--t-small);
  font-weight: 700;
}

.colour-pick__picker {
  width: 3rem;
  height: 3rem;
  padding: 0.2rem;
  border: 2px solid var(--rule-strong);
  border-radius: var(--r-ctl);
  background: #ffffff;
  cursor: pointer;
}

.colour-pick__picker::-webkit-color-swatch-wrapper {
  padding: 0;
}

.colour-pick__picker::-webkit-color-swatch {
  border: 0;
  border-radius: 4px;
}

.colour-pick__picker::-moz-color-swatch {
  border: 0;
  border-radius: 4px;
}

.colour-pick__hex {
  width: 8.5rem;
  text-transform: lowercase;
}

.colour-pick__error {
  flex-basis: 100%;
}

.contrast-check {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: var(--s2) var(--s4);
  align-items: center;
  padding: var(--s3) var(--s4);
  border-radius: var(--r-ctl);
  background: var(--concourse);
}

.contrast-check:empty {
  display: none;
}

.contrast-check__sample {
  grid-row: span 2;
  display: grid;
  place-items: center;
  width: 3.5rem;
  height: 3rem;
  border-radius: 8px 8px 0 0;
  background: var(--brand);
  color: var(--brand-ink);
  font-size: 1.25rem;
  font-weight: 800;
  box-shadow: inset 0 -4px 0 rgba(0, 0, 0, 0.2);
}

.contrast-check__text {
  font-size: var(--t-small);
  line-height: 1.45;
  color: var(--ink-2);
}

.contrast-check__verdict {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.75rem;
}

.contrast-check__ratio {
  font-size: 1.25rem;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}

.verdict {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  min-height: 1.75rem;
  padding: 0.1rem 0.6rem 0.1rem 0.45rem;
  border-radius: var(--r-pill);
  font-size: var(--t-micro);
  font-weight: 800;
}

.verdict svg {
  width: 1rem;
  height: 1rem;
}

.verdict--pass {
  background: var(--ok-wash);
  color: var(--ok);
}

.verdict--fail {
  background: var(--breach-wash);
  color: var(--breach);
}

.contrast-check__note {
  grid-column: 1 / -1;
  font-size: var(--t-micro);
  line-height: 1.45;
  color: var(--ink-3);
}

.contrast-check__suggest {
  grid-column: 1 / -1;
  display: grid;
  gap: var(--s2);
  padding-top: var(--s3);
  border-top: 1px solid var(--rule);
  font-size: var(--t-small);
}

.contrast-check__pair {
  display: grid;
  gap: 0.3rem;
  font-size: var(--t-micro);
}

.contrast-check__chip {
  display: inline-block;
  width: 1.125rem;
  height: 1rem;
  margin-right: 0.4rem;
  border-radius: 4px 4px 0 0;
  background: var(--c);
  vertical-align: -0.15em;
}

.brand-preview__caption {
  margin-bottom: var(--s2);
  font-size: var(--t-small);
  font-weight: 800;
}

.brand-preview__card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}

.brand-preview__tab {
  display: inline-flex;
  align-items: center;
  min-height: 2.5rem;
  max-width: 100%;
  padding: 0.4rem 1rem;
  border-radius: var(--r-card) var(--r-card) 0 0;
  background: var(--brand);
  color: var(--brand-ink);
  font-size: var(--t-small);
  font-weight: 700;
  overflow-wrap: anywhere;
}

.brand-preview__list {
  width: 100%;
  padding: var(--s2) var(--s4);
  border: 1px solid var(--rule);
  border-top: 3px solid var(--brand-line);
  border-radius: 0 var(--r-card) var(--r-card) var(--r-card);
  background: #ffffff;
}

.brand-preview__list > div {
  display: grid;
  gap: 0.1rem;
  padding-block: 0.5rem;
  border-bottom: 1px solid var(--rule);
}

.brand-preview__list > div:last-child {
  border-bottom: 0;
}

.brand-preview__list dt {
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.brand-preview__list dd {
  font-size: var(--t-small);
  font-weight: 700;
  overflow-wrap: anywhere;
}

@media (max-width: 26rem) {
  .swatches {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* ---------------------------------------------------------------- */
/* Status line: the one sentence that sits beside the first claim      */
/* ---------------------------------------------------------------- */

.status-line {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
  max-width: 44rem;
  font-size: var(--t-small);
  line-height: 1.45;
  font-weight: 700;
  color: var(--ink);
}

/* An open ring with a dot: not yet, and saying so */
.status-line::before {
  content: "";
  flex: none;
  width: 1rem;
  height: 1rem;
  margin-top: 0.1rem;
  border: 2.5px solid currentColor;
  border-radius: 50%;
  box-shadow: inset 0 0 0 3px var(--status-line-ground, var(--ground)), inset 0 0 0 10px currentColor;
}

.band--concourse .status-line {
  --status-line-ground: var(--concourse);
}

.on-ink .status-line {
  --status-line-ground: var(--board);
  color: var(--on-ink);
}

/* ---------------------------------------------------------------- */
/* In short: the answer first (the build indexes .in-short for search) */
/* ---------------------------------------------------------------- */

.in-short {
  max-width: 46rem;
  padding: var(--s3) var(--s4) var(--s4);
  border-left: 6px solid var(--ink);
  background: var(--concourse);
  font-size: var(--t-lead);
  line-height: 1.5;
}

.in-short__label {
  display: block;
  margin-bottom: 0.2rem;
  font-size: var(--t-small);
  font-weight: 800;
}

.band--concourse .in-short {
  background: var(--ground);
}

.article-head .in-short,
.page-head .in-short:not(.in-short--plain) {
  margin-top: var(--s4);
}

/* The same search hook without the box, for a hero promise */
.in-short--plain,
.band--concourse .in-short--plain {
  padding: 0;
  border: 0;
  background: none;
}

/* ---------------------------------------------------------------- */
/* Aside boxes: limits, who it is not for, what the rules do not say,  */
/* and how Workstride handles a rule                                   */
/* ---------------------------------------------------------------- */

.aside-box {
  max-width: 46rem;
  padding: var(--s4) var(--s5) var(--s5);
  border: 2px solid var(--ink);
  border-radius: var(--r-card);
  background: var(--ground);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.aside-box__title {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin-bottom: var(--s3);
  font-size: 1.125rem;
  font-weight: 800;
  line-height: 1.25;
  color: var(--ink);
}

.aside-box__title::before {
  content: "";
  flex: none;
  width: 1.25rem;
  height: 1.25rem;
  background: center / contain no-repeat;
}

.aside-box > * + * {
  margin-top: var(--s2);
}

.aside-box ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

.aside-box li {
  position: relative;
  padding: 0.45rem 0 0.45rem 1.4rem;
  border-top: 1px solid var(--rule);
}

.aside-box li:first-child {
  border-top: 0;
}

.aside-box li::before {
  content: "";
  position: absolute;
  left: 0.15rem;
  top: 0.95rem;
  width: 0.6rem;
  height: 0.6rem;
  border: 2px solid var(--ink);
  border-radius: 50%;
}

.aside-box li .status {
  margin-left: 0.35rem;
}

/* Limits: what it does not do yet. Dashed, like a planned sketch */
.aside-box--limits {
  border-style: dashed;
  border-color: var(--rule-strong);
}

.aside-box--limits .aside-box__title::before {
  border: 2.5px dashed var(--ink);
  border-radius: 50%;
}

/* Not for: who Workstride is not for yet */
.aside-box--not-for .aside-box__title::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='12' fill='%2315181c'/%3E%3Crect x='5' y='9.75' width='14' height='4.5' rx='1' fill='%23fff'/%3E%3C/svg%3E");
}

/* Rules: what the rules do not say, and the readings used */
.aside-box--rules {
  border-color: transparent;
  background: var(--concourse);
}

.band--concourse .aside-box--rules {
  background: var(--ground);
}

.aside-box--rules .aside-box__title::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10.5' fill='none' stroke='%2315181c' stroke-width='3'/%3E%3Cpath d='M9.2 9.3a2.9 2.9 0 1 1 3.9 2.7c-.8.3-1.1.8-1.1 1.6v.6' fill='none' stroke='%2315181c' stroke-width='2.4' stroke-linecap='round'/%3E%3Ccircle cx='12' cy='17.4' r='1.5' fill='%2315181c'/%3E%3C/svg%3E");
}

/* Handles: how Workstride handles this rule, with statuses */
.aside-box--handles .aside-box__title::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='1.5' y='1.5' width='21' height='21' rx='3' fill='%2315181c'/%3E%3Cpath d='M5.5 8l3.2 9 3.3-6.5 3.3 6.5 3.2-9' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

.aside-box .status-line {
  margin-top: var(--s3);
  padding-top: var(--s3);
  border-top: 1px solid var(--rule);
}

/* General information disclaimer for tools and guides */
.disclaimer {
  max-width: 46rem;
  font-size: var(--t-small);
  font-weight: 700;
  color: var(--ink-2);
}

/* ---------------------------------------------------------------- */
/* Clause cards: a rule, and what Workstride does about it             */
/* ---------------------------------------------------------------- */

.clause-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
  gap: var(--s4);
  margin: 0;
  padding: 0;
  list-style: none;
}

.clause-card {
  display: flex;
  flex-direction: column;
  gap: var(--s3);
  padding: var(--s4) var(--s5) var(--s5);
  border: 2px solid var(--ink);
  border-radius: var(--r-card);
  background: var(--ground);
}

.clause-card__cite {
  align-self: flex-start;
  padding: 0.15rem 0.55rem;
  border-radius: var(--r-sign);
  background: var(--board);
  color: var(--on-ink);
  font-family: var(--mono);
  font-size: var(--t-small);
  font-weight: 700;
}

.clause-card__rule {
  font-size: 1.0625rem;
  font-weight: 700;
  line-height: 1.4;
  color: var(--ink);
}

.clause-card__does {
  padding-top: var(--s3);
  border-top: 1px solid var(--rule);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.clause-card__does strong {
  color: var(--ink);
}

.clause-card__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2);
  margin-top: auto;
}

/* ---------------------------------------------------------------- */
/* Walkthrough call to action: what happens next                       */
/* ---------------------------------------------------------------- */

.walkthrough-cta {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: var(--s6) clamp(2rem, 5vw, 5rem);
  align-items: start;
  padding: clamp(1.5rem, 1rem + 2.4vw, 3rem);
  border-radius: var(--r-sign);
  background: var(--board);
  color: var(--on-ink);
}

.walkthrough-cta__title {
  font-size: var(--t-h2);
  font-weight: 800;
  line-height: 1.02;
  letter-spacing: -0.03em;
  max-width: 18ch;
}

.walkthrough-cta__lead {
  margin-top: var(--s4);
  max-width: 38rem;
  font-size: var(--t-lead);
  line-height: 1.5;
  color: #eef0f2;
}

.walkthrough-cta__fine {
  margin-top: var(--s4);
  max-width: 38rem;
  font-size: var(--t-small);
  color: var(--on-ink-2);
}

.walkthrough-cta .actions {
  margin-top: var(--s5);
}

.walkthrough-cta__fine a {
  font-weight: 700;
  color: var(--on-ink);
}

.walkthrough-cta__next-title {
  margin-bottom: var(--s3);
  font-size: 1.125rem;
  font-weight: 800;
}

@media (max-width: 68.74rem) {
  .walkthrough-cta {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---------------------------------------------------------------- */
/* Demo controls: website controls outside the product frame           */
/* ---------------------------------------------------------------- */

.demo-controls {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  gap: var(--s3) var(--s5);
  margin-bottom: var(--s4);
  padding: var(--s3) var(--s4);
  border: 2px solid var(--ink);
  border-radius: var(--r-card);
  background: var(--ground);
}

.demo-controls__caption {
  flex: 1 1 100%;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s3);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.demo-controls__time {
  display: grid;
  gap: 0.2rem;
  flex: 1 1 18rem;
  min-width: 0;
}

.demo-controls__time output {
  font-family: var(--mono);
  font-size: var(--t-small);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

.demo-controls__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s2);
}

/* ---------------------------------------------------------------- */
/* Site search: header control and dialog (ui/search.js)               */
/* ---------------------------------------------------------------- */

.search-btn,
.search-link {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  min-height: 2.5rem;
  padding: 0.25rem 0.8rem 0.25rem 0.6rem;
  border: 1.5px solid var(--rule-strong);
  border-radius: var(--r-pill);
  background: var(--ground);
  color: var(--ink);
  font-size: var(--t-small);
  font-weight: 700;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
}

.search-btn:hover,
.search-link:hover {
  border-color: var(--ink);
  background: var(--concourse);
}

.search-btn svg,
.search-link svg {
  flex: none;
  width: 1.125rem;
  height: 1.125rem;
}

.drawer--search {
  inset: 0;
  width: min(44rem, calc(100vw - 2rem));
  height: auto;
  max-height: min(40rem, calc(100vh - 4rem));
  margin: clamp(1rem, 8vh, 5rem) auto auto;
  border: 3px solid var(--ink);
  border-radius: var(--r-card);
}

.search__form {
  display: grid;
  gap: 0.35rem;
}

.search__form .input {
  font-size: 1.125rem;
}

.search__status {
  margin-top: var(--s3);
  font-size: var(--t-small);
  color: var(--ink-2);
}

.search__results {
  display: grid;
  gap: 2px;
  margin: var(--s3) 0 0;
  padding: 0;
  list-style: none;
}

.search__link {
  display: grid;
  gap: 0.15rem;
  padding: 0.6rem 0.75rem;
  border-radius: var(--r-ctl);
  color: var(--ink);
  text-decoration: none;
}

.search__link:hover {
  background: var(--concourse);
}

.search__result-title {
  font-weight: 800;
  line-height: 1.3;
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 0.2em;
}

.search__result-section {
  font-size: var(--t-micro);
  font-weight: 700;
  color: var(--ink-3);
}

.search__result-text {
  font-size: var(--t-small);
  color: var(--ink-2);
}

.search__link mark {
  background: var(--line-money-wash);
  color: var(--ink);
  box-shadow: inset 0 -2px 0 var(--line-money);
}

.search__foot {
  margin-top: var(--s4);
  padding-top: var(--s3);
  border-top: 1px solid var(--rule);
  font-size: var(--t-small);
}

.search__foot a {
  font-weight: 700;
  color: var(--ink);
}

@media (prefers-reduced-motion: no-preference) {
  .drawer--search[open] {
    animation: search-in 150ms var(--ease-out);
  }
}

@keyframes search-in {
  from {
    opacity: 0;
  }
}

/* ---------------------------------------------------------------- */
/* Space and measure utilities. They sit after the components so they */
/* win at equal specificity. Use them instead of inline styles.        */
/* ---------------------------------------------------------------- */

.mt-0 { margin-top: 0; }
.mt-2 { margin-top: var(--s2); }
.mt-3 { margin-top: var(--s3); }
.mt-4 { margin-top: var(--s4); }
.mt-5 { margin-top: var(--s5); }
.mt-6 { margin-top: var(--s6); }
.mt-7 { margin-top: clamp(2.25rem, 1.75rem + 1.5vw, 3rem); }
.mt-8 { margin-top: clamp(2.75rem, 2rem + 2.5vw, 4rem); }
.mb-6 { margin-bottom: var(--s6); }
.mb-7 { margin-bottom: clamp(2rem, 1.5rem + 2vw, 3rem); }
.measure { max-width: var(--measure); }
.measure-wide { max-width: 52rem; }

/* ================================================================== */
/* 16 Styleguide pages                                                  */
/* ================================================================== */

.sg {
  display: grid;
  grid-template-columns: 13rem minmax(0, 1fr);
  gap: var(--s6) clamp(2rem, 4vw, 4rem);
  align-items: start;
}

.sg__index {
  position: sticky;
  top: calc(var(--header-h) + 1.5rem);
  max-height: calc(100vh - var(--header-h) - 3rem);
  overflow-y: auto;
  font-size: var(--t-small);
}

.sg__index-title {
  margin-bottom: var(--s2);
  font-weight: 800;
}

.sg__index a {
  display: block;
  padding: 0.25rem 0;
  color: var(--ink-2);
  text-decoration: none;
}

.sg__index a:hover {
  color: var(--ink);
  text-decoration: underline;
}

.sg__main {
  min-width: 0;
}

.sg__section {
  padding-block: var(--s7);
  border-top: 2px solid var(--ink);
}

.sg__section:first-child {
  border-top: 0;
  padding-top: 0;
}

.sg__head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--s2) var(--s5);
  margin-bottom: var(--s3);
}

.sg__title {
  font-size: var(--t-h3);
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.sg__ref {
  font-family: var(--mono);
  font-size: var(--t-micro);
  color: var(--ink-3);
}

.sg__note {
  max-width: 48rem;
  margin-bottom: var(--s5);
  color: var(--ink-2);
}

.sg__example {
  padding: var(--s5);
  border: 1px dashed var(--rule-strong);
  border-radius: var(--r-sign);
  background: var(--ground);
}

.sg__example + .sg__example {
  margin-top: var(--s4);
}

.sg__example--concourse {
  background: var(--concourse);
}

.sg__example--flush {
  padding: 0;
  overflow-x: clip;
}

.sg__caption {
  margin-bottom: var(--s3);
  font-size: var(--t-micro);
  font-weight: 700;
  color: var(--ink-3);
}

.sg__tokens {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
  gap: var(--s3);
}

.sg__token {
  display: grid;
  grid-template-rows: 3.5rem auto;
  overflow: hidden;
  border: 1px solid var(--rule);
  border-radius: var(--r-sign);
  font-size: var(--t-micro);
}

.sg__token-chip {
  background: var(--sw);
}

.sg__token-text {
  display: grid;
  gap: 0.1rem;
  padding: var(--s2) var(--s3);
}

.sg__token-name {
  font-family: var(--mono);
  font-weight: 700;
  color: var(--ink);
}

.sg__type > * + * {
  margin-top: var(--s4);
}

.sg__type-row {
  display: grid;
  grid-template-columns: 9rem minmax(0, 1fr);
  gap: var(--s4);
  align-items: baseline;
  padding-block: var(--s2);
  border-bottom: 1px solid var(--rule);
}

.sg__type-row > :first-child {
  font-family: var(--mono);
  font-size: var(--t-micro);
  color: var(--ink-3);
}

@media (max-width: 68.74rem) {
  .sg {
    grid-template-columns: minmax(0, 1fr);
  }

  .sg__index {
    position: static;
    max-height: none;
    padding: var(--s3) var(--s4);
    border: 2px solid var(--ink);
    border-radius: var(--r-sign);
  }

  .sg__index ul {
    columns: 2;
  }
}

@media (max-width: 44.99rem) {
  .sg__example {
    padding: var(--s3);
  }

  .sg__type-row {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--s1);
  }
}

/* ================================================================== */
/* 17 Print: tools and guides print as clean documents                  */
/* ================================================================== */

@media print {
  @page {
    margin: 16mm 14mm;
  }

  .masthead,
  .notice,
  .crumbs-bar,
  .site-footer,
  .drawer,
  .toasts,
  .skip-link,
  .brand-control,
  .tool__send,
  .demo-slot__status,
  .route__train,
  .guide__toc,
  .sg__index,
  .az,
  .pager,
  .actions,
  .founding,
  .map-here {
    display: none !important;
  }

  html,
  body {
    background: #ffffff !important;
    color: #000000 !important;
    font-size: 10.5pt;
  }

  .wrap {
    max-width: none;
    padding-inline: 0;
  }

  .band {
    padding-block: 10pt;
    background: none !important;
  }

  .sign,
  .game__board,
  .founding__board,
  .tool__answer,
  .scene__time {
    border: 1pt solid #000000 !important;
    background: #ffffff !important;
    color: #000000 !important;
  }

  .sign *,
  .game__board *,
  .tool__answer * {
    color: #000000 !important;
  }

  .tool__board {
    border: 1pt solid #000000;
  }

  .tool__inputs,
  .tool__results {
    break-inside: avoid;
  }

  .tool__inputs {
    background: none;
    border-color: #000000;
  }

  .guide {
    display: block;
  }

  .prose {
    max-width: none;
    font-size: 11pt;
  }

  .prose a[href^="http"]::after,
  .prose a[href^="/"]::after {
    content: " (" attr(href) ")";
    font-size: 0.85em;
    font-weight: 400;
  }

  h1,
  h2,
  h3 {
    break-after: avoid;
  }

  .exhibit,
  .callout,
  .table-wrap,
  .faq__item,
  .glossary__entry {
    break-inside: avoid;
  }

  .table-wrap {
    overflow: visible;
  }

  .signposted.is-placed .signpost {
    position: static;
  }

  .signposts__leaders {
    display: none;
  }
}

/* ================================================================== */
/* 18 Reduced motion: markers jump, nothing slides                      */
/* ================================================================== */

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 1ms !important;
    scroll-behavior: auto !important;
  }
}
