/* FitNote v5 "Correspondence" (binding spec: docs/DESIGN.md).
   Every page is set like a doctor's letter: a white sheet on warm paper. Plain CSS, no build step.
   Teal is a fill or stroke only, never text on a light background (use --teal-ink).
   All motion lives inside @media (prefers-reduced-motion: no-preference). */

@layer reset, tokens, base, layout, components, utilities;

/* Self-hosted fonts (SIL OFL 1.1, Latin subset; see /assets/fonts/LICENSE.txt) */
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 500; font-display: swap; src: url("/assets/fonts/newsreader-500-opsz72-latin.woff2") format("woff2"); 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: "IBM Plex Sans"; font-style: normal; font-weight: 400 600; font-display: swap; src: url("/assets/fonts/ibm-plex-sans-latin.woff2") format("woff2"); 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; }
/* Metric-matched fallbacks so the font swap doesn't shift layout. Newsreader values re-tuned for the
   opsz72/500 file: 2.9% wider than the old 600 file; ascent .735em, descent .265em. */
@font-face { font-family: "Newsreader Fallback"; src: local("Georgia"); size-adjust: 109.7%; ascent-override: 67%; descent-override: 24.2%; line-gap-override: 0%; }
@font-face { font-family: "Plex Fallback"; src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("Helvetica"); size-adjust: 101.8%; ascent-override: 101.2%; descent-override: 27.5%; line-gap-override: 0%; }

/* ======================================================================= reset */
@layer reset {
  *, *::before, *::after { box-sizing: border-box; }
  html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
  body, h1, h2, h3, h4, p, figure, blockquote, dl, dd, ol, ul, table { margin: 0; }
  ul[class], ol[class] { list-style: none; padding: 0; }
  img, svg { display: block; max-width: 100%; }
  button, input, select, textarea { font: inherit; color: inherit; }
  summary { cursor: pointer; }
  [hidden] { display: none !important; }
}

/* ====================================================================== tokens */
@layer tokens { :root {
  color-scheme: light;
  --paper:#FAF7F2; --sheet:#FFFFFF; --sand:#F2ECE2; --navy:#0B2545; --navy-deep:#071A33;
  --ink:#1A2433; --muted:#4A5868; --on-navy:#C9D6E5; --on-navy-dim:#9FB3C8;
  --rule:#E4DDD1; --rule-strong:#CFC6B8; --rule-navy:#2A4670; --redact:#EFE8DC;
  /* teal is a FILL or STROKE only, never text on a light background */
  --teal:#13A89E; --teal-hover:#19C2B6; --teal-ink:#0E7C74; --teal-light:#7FE3DA;
  --teal-band:#119C93; /* closing band: white H2 3.39:1 (AA large), navy text 4.54:1 */
  --arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M2.5 8h10.5M8.75 3.5 13.25 8l-4.5 4.5' fill='none' stroke='%23000' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --serif:"Newsreader","Newsreader Fallback",Georgia,"Times New Roman",serif;
  --sans:"IBM Plex Sans","Plex Fallback",system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;
  --fs-h1:      clamp(2.625rem, 1.65rem + 4.32vw, 5rem);    /* 42→80px hero sheets */
  --fs-h1-page: clamp(2.5rem, 1.89rem + 2.73vw, 4rem);      /* 40→64px info heads */
  --fs-h2:      clamp(2rem, 1.49rem + 2.27vw, 3.25rem);     /* 32→52px */
  --fs-title:   clamp(1.5rem, 1.3rem + .91vw, 2rem);        /* 24→32px serif titles: diptych, track, ledger */
  --fs-h3:      clamp(1.125rem, 1.07rem + .23vw, 1.25rem);  /* 18→20px, Plex 600 */
  --fs-lead:    clamp(1.125rem, 1.07rem + .23vw, 1.25rem);  /* 18→20px */
  --fs-body:    clamp(1rem, .97rem + .11vw, 1.0625rem);     /* 16→17px */
  --fs-price:   clamp(1.5rem, 1.4rem + .45vw, 1.75rem);     /* 24→28px */
  --fs-small:.9375rem; --fs-micro:.875rem; --fs-cell:.8125rem;  /* 15/14/13px; 13px only in /start/ cells */
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:24px; --s-6:32px; --s-7:48px; --s-8:64px; --s-9:88px; --s-10:112px;
  --pad-statement: clamp(4rem, 2.77rem + 5.45vw, 7rem);    /* 64→112px */
  --pad-dense:     clamp(3.5rem, 2.68rem + 3.64vw, 5.5rem); /* 56→88px */
  --pad-strip:     clamp(1.125rem, .97rem + .68vw, 1.5rem); /* 18→24px */
  --gap-head:      clamp(2rem, 1.59rem + 1.82vw, 3rem);     /* heading→content 32→48px */
  --container:1240px; --gutter:20px; --measure:680px; --header-h:60px;
  --w-hero:1040px; --w-hero-inner:760px; --w-tariff:760px; --w-form:720px;
  --r-sheet:6px; --r-btn:10px;
  --shadow: 0 1px 0 rgba(11,37,69,.04), 0 30px 60px -30px rgba(11,37,69,.25); /* the ONLY shadow */
  --ease:cubic-bezier(.2,.8,.2,1); --ease-in-out:cubic-bezier(.65,0,.35,1);
  --t-micro:160ms; --t-state:320ms; --t-slide:240ms; --t-draw:900ms;
}
@media (min-width:600px)  { :root { --gutter:32px; } }
@media (min-width:900px)  { :root { --header-h:72px; } }
@media (min-width:1200px) { :root { --gutter:48px; } } }

/* ======================================================================== base */
@layer base {
  html { scroll-padding-top: calc(var(--header-h) + 16px); }
  body {
    font-family: var(--sans); font-size: var(--fs-body); line-height: 1.6; color: var(--ink);
    background: var(--paper); overflow-x: clip; font-synthesis-weight: none;
    -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  }
  h1, h2, .title {
    font-family: var(--serif); font-weight: 500; color: var(--navy);
    font-variant-numeric: lining-nums; text-wrap: balance;
  }
  h1 { font-size: var(--fs-h1-page); line-height: 1.06; letter-spacing: -.02em; max-width: 16ch; }
  h2 { font-size: var(--fs-h2); line-height: 1.08; letter-spacing: -.018em; max-width: 20ch; }
  h3 { font-family: var(--sans); font-weight: 600; font-size: var(--fs-h3); line-height: 1.3; color: var(--navy); }
  .title { font-size: var(--fs-title); line-height: 1.15; letter-spacing: -.01em; max-width: none; }
  p, li, dd { text-wrap: pretty; }
  strong, b { font-weight: 600; }
  small { font-size: var(--fs-small); }
  /* Surfaces set --link / --link-hover / --focus: sand → navy links, navy → teal-light links. */
  a { color: var(--link, var(--teal-ink)); text-decoration-thickness: 1px; text-underline-offset: 3px; }
  a:hover { color: var(--link-hover, var(--navy)); text-decoration-thickness: 2px; }
  :focus-visible { outline: 3px solid var(--focus, var(--navy)); outline-offset: 3px; }
  ::selection { background: var(--teal-light); color: var(--navy); }
}

/* ====================================================================== layout */
@layer layout {
  .container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--gutter); }

  /* Vertical rhythm by data-layout (docs/DESIGN.md §4). :where() keeps it overridable. */
  :where(main > [data-layout]) { padding-block: var(--pad-dense); }
  :where(main > [data-layout="diptych"], main > [data-layout="story"], main > [data-layout="track"], main > [data-layout="closing"]) { padding-block: var(--pad-statement); }
  :where(main > [data-layout="strip"]) { padding-block: var(--pad-strip); }
  /* Same-background neighbours: a prose column under a split or page head needs no full top pad. */
  :where(main > [data-layout="split"] + [data-layout="prose"], main > [data-layout="head"] + [data-layout="prose"]) { padding-top: var(--s-6); }

  /* Backgrounds: no more than 2 neighbours share one. */
  .strip, .ledger-sec { background: var(--sand); --link: var(--navy); --link-hover: var(--navy); }
  .story { background: var(--sheet); }
  .tariff-band--navy { background: var(--navy); color: var(--on-navy); --link: var(--teal-light); --link-hover: #FFFFFF; --focus: var(--teal-light); }
  .closing { background: var(--teal-band); color: var(--navy); --link: var(--navy); --link-hover: var(--navy-deep); --focus: var(--navy); }
  .closing.closing--sand { background: var(--sand); color: var(--ink); --link: var(--navy); --link-hover: var(--navy); --focus: var(--navy); }

  /* Section heads */
  .head { margin-bottom: var(--gap-head); }
  .head > p { margin-top: 16px; color: var(--muted); }
  .head--center { text-align: center; }
  .head--center > * { margin-inline: auto; }

  /* split: centred head, then the content in a centred 760px column (FAQ excerpt, employer intro). */
  .split { display: grid; gap: var(--gap-head); max-width: calc(var(--w-tariff) + 2 * var(--gutter)); }
  .split__aside { text-align: center; }
  .split__aside > * { margin-inline: auto; }
  .split__aside > * + * { margin-top: 16px; }
  .split__aside p { color: var(--muted); max-width: 44ch; }

  /* prose: the 680px letter column */
  .letter-col { max-width: var(--measure); margin-inline: auto; }
  .letter-col:not(:has(ol.legal, table)) { text-align: center; }
  .letter-col:not(:has(ol.legal, table)) > * { margin-inline: auto; }
  .letter-col:not(:has(ol.legal, table)) > p { max-width: 58ch; }
  .letter-col > * + * { margin-top: 16px; }
  .letter-col > * + h2 { margin-top: 48px; }
  .letter-col > h2 + * { margin-top: 12px; }
  .letter-col h2 { font-size: var(--fs-title); line-height: 1.15; letter-spacing: -.01em; max-width: none; }
  .letter-col p { max-width: 62ch; }
  .letter-col > ul:not([class]), .letter-col > ol:not([class]) { padding-left: 1.25em; }
  .letter-col > * + :is(table, ol.legal, .ruled), .letter-col > :is(table, .ruled) + * { margin-top: 32px; }
}

/* ================================================================== components */
@layer components {

  /* ---------- Buttons and links ---------- */
  .btn {
    --chip: var(--navy); --chip-ink: #FFFFFF;
    display: inline-flex; align-items: center; justify-content: center; gap: 12px;
    min-height: 52px; padding: 0 26px; border: 1px solid transparent; border-radius: 999px;
    background: var(--teal); color: var(--navy);
    font-family: var(--sans); font-weight: 600; font-size: 1.0625rem; line-height: 1.2; letter-spacing: -.005em;
    text-align: center; text-decoration: none; cursor: pointer;
    box-shadow: inset 0 -2px 0 rgba(11, 37, 69, .14); /* a pressed-paper edge, not a drop shadow */
  }
  .btn:hover { background: var(--teal-hover); color: var(--navy); }
  .btn--primary { background: var(--teal); color: var(--navy); }
  .btn--primary:hover { background: var(--teal-hover); color: var(--navy); }
  .btn--sm { min-height: 44px; padding: 0 18px; font-size: 1rem; }
  .btn--lg { min-height: 58px; padding: 0 30px; font-size: 1.125rem; }
  .btn--quiet { background: transparent; color: var(--navy); border: 1.5px solid var(--navy); box-shadow: none; }
  .btn--quiet:hover { background: var(--sand); color: var(--navy); }
  /* A trailing <span class="btn__arrow">→</span> becomes a round chip; the glyph is hidden and the arrow is a mask. */
  .btn:has(.btn__arrow) { padding-right: 7px; }
  .btn__arrow {
    display: inline-flex; align-items: center; justify-content: center; flex: none; width: 38px; height: 38px; border-radius: 50%;
    background: var(--chip); font-size: 0; line-height: 0; color: transparent;
    position: relative; top: -1px; /* optical centre: the 2px bottom edge makes the face 2px shorter */
  }
  .closing .btn__arrow { top: 0; } /* the navy closing button has no bottom edge */
  .btn--lg .btn__arrow { width: 44px; height: 44px; }
  .btn__arrow::before {
    content: ""; width: 16px; height: 16px; background: var(--chip-ink);
    -webkit-mask: var(--arrow) center / contain no-repeat; mask: var(--arrow) center / contain no-repeat;
  }

  .link { color: var(--link, var(--teal-ink)); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; }
  .link:hover { color: var(--link-hover, var(--navy)); text-decoration-thickness: 2px; }
  /* Text CTAs ("Sick leave letter →", "Information for employers →"): 600 weight, a crisp mask arrow,
     and an underline that draws in on hover. On sand the underline is always shown. */
  .link--arrow {
    display: inline-flex; align-items: center; gap: 8px; padding-bottom: 3px; font-weight: 600; text-decoration: none;
    background: linear-gradient(currentColor, currentColor) 0 100% / 0 1.5px no-repeat;
  }
  .link--arrow:hover, a:hover .link--arrow { background-size: 100% 1.5px; text-decoration: none; }
  .link--arrow > span[aria-hidden] {
    display: inline-block; width: 15px; height: 15px; font-size: 0; background: currentColor;
    -webkit-mask: var(--arrow) center / contain no-repeat; mask: var(--arrow) center / contain no-repeat;
  }
  :is(.strip, .ledger-sec, .closing--sand, .band--sand, .notfor-box) .link--arrow { background-size: 100% 1.5px; } /* sand: navy + underline */
  /* The second action beside a button ("See prices", "Go to the homepage"): navy, with a teal underline. */
  .actions > .link { font-weight: 600; color: var(--navy); text-decoration-color: var(--teal); text-decoration-thickness: 2px; text-underline-offset: 6px; }
  .actions > .link:hover { text-decoration-color: var(--navy); }

  /* External links (drsick.co.uk, wa.me): a small ↗ drawn by mask, silent to screen readers. */
  .ext::after {
    content: ""; display: inline-block; width: .7em; height: .7em; margin-left: .25em; vertical-align: -.02em;
    background-color: currentColor;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3.5 2.5h6v6M9.5 2.5l-7 7' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
            mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3.5 2.5h6v6M9.5 2.5l-7 7' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
  }

  /* ---------- Wordmark ---------- */
  .wordmark {
    display: inline-flex; align-items: center; min-height: 44px;
    font-family: var(--serif); font-weight: 500; font-size: 1.5rem; line-height: 1; letter-spacing: -.01em;
    color: var(--navy); text-decoration: none;
  }
  .wordmark:hover { color: var(--navy); }
  .wordmark span { color: var(--teal-ink); }

  /* ---------- Headers ---------- */
  .site-header { position: sticky; top: 0; z-index: 50; background: var(--paper); }
  .site-header::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: var(--rule); pointer-events: none; }
  .site-header__inner { display: flex; align-items: center; gap: 16px; min-height: var(--header-h); }
  .nav { display: none; }
  .nav a {
    display: inline-flex; align-items: center; min-height: 44px; padding: 0 12px;
    font-weight: 600; font-size: 1rem; color: var(--navy); text-decoration: none;
  }
  .nav a:hover { text-decoration: underline; text-decoration-thickness: 2px; }
  .nav a[aria-current="page"] { text-decoration: underline; text-decoration-color: var(--teal); text-decoration-thickness: 2px; text-underline-offset: 8px; }
  .site-header__cta { display: none; margin-left: auto; position: relative; isolation: isolate; background: transparent; border-color: var(--navy); }
  .site-header__cta:hover { background: transparent; }
  /* The fill is a layer so quiet ↔ filled can cross-fade with opacity only. */
  .site-header__cta::before { content: ""; position: absolute; inset: -1px; z-index: -1; border-radius: inherit; background: var(--teal); }
  .site-header__cta:hover::before { background: var(--teal-hover); }
  [data-header][data-hero-visible] .site-header__cta::before { opacity: 0; }
  [data-header][data-hero-visible] .site-header__cta:hover { background: var(--sand); }
  :is(body[data-conversion="lead"], body.no-cta) .site-header__cta { display: none !important; }
  .site-header__help { margin-left: auto; display: inline-flex; align-items: center; min-height: 44px; font-weight: 600; font-size: var(--fs-small); color: var(--teal-ink); }
  .menu { margin-left: auto; }
  .menu summary {
    list-style: none; display: grid; place-items: center; width: 44px; height: 44px; margin-right: -10px;
    border-radius: var(--r-btn); color: var(--navy);
  }
  .menu summary::-webkit-details-marker { display: none; }
  .menu summary::marker { content: ""; }
  .menu[open] summary { background: var(--sand); }
  .menu__panel {
    position: absolute; left: 0; right: 0; top: 100%;
    display: grid; padding: 4px var(--gutter) 16px; max-height: calc(100dvh - var(--header-h)); overflow-y: auto;
    background: var(--paper); border-bottom: 1px solid var(--rule); box-shadow: var(--shadow);
  }
  .menu__panel a {
    display: flex; align-items: center; min-height: 56px; border-bottom: 1px solid var(--rule);
    font-family: var(--serif); font-weight: 500; font-size: 1.5rem; line-height: 1.1; color: var(--navy); text-decoration: none;
  }
  .menu__panel a:last-child { border-bottom: 0; }
  .menu__panel a:hover { text-decoration: underline; text-decoration-thickness: 1px; }
  .menu__panel a[aria-current="page"] { color: var(--teal-ink); }
  @media (min-width:600px) {
    .site-header__cta { display: inline-flex; }
    .site-header__cta + .menu { margin-left: 8px; }
    :is(body[data-conversion="lead"], body.no-cta) .menu { margin-left: auto; }
  }
  @media (min-width:900px) {
    .nav { display: flex; margin-left: auto; }
    .nav ~ .site-header__cta { margin-left: 12px; }
    .menu { display: none; }
  }

  /* ---------- Sheets ---------- */
  .sheet {
    background: var(--sheet); color: var(--ink); border: 1px solid var(--rule); border-radius: var(--r-sheet); box-shadow: var(--shadow);
    --link: var(--teal-ink); --link-hover: var(--navy); --focus: var(--navy);
  }

  /* ---------- Hero sheet (/, campaign pages, /submission, /404) ---------- */
  .hero { padding-block: 24px clamp(24px, 1rem + 2vw, 48px); isolation: isolate; }
  .sheet--hero { max-width: var(--w-hero); margin-inline: auto; }
  .sheet__body { padding: 40px var(--gutter) 32px; text-align: center; }
  /* Email / SMS tabs tucked under the top sheet's right edge, above the paper stack (decorative; the
     delivery facts are in the copy). The stack sits at z-index -2 so it never covers a label. */
  .sheet__tabs { display: none; }
  @media (min-width:1200px) {
    .sheet__tabs { display: grid; gap: 10px; position: absolute; z-index: -1; right: 0; top: 34%; transform: translateX(calc(100% - 18px)); }
    .sheet__tabs span {
      display: block; padding: 8px 14px 8px 24px; border: 1px solid var(--rule-strong); border-radius: 0 var(--r-sheet) var(--r-sheet) 0;
      background: var(--sheet); font-weight: 600; font-size: var(--fs-micro); line-height: 1.2; color: var(--navy); text-align: right;
    }
  }
  .sheet__body > * { max-width: var(--w-hero-inner); margin-inline: auto; }
  .sheet__body > * + * { margin-top: 24px; }
  .sheet__body > .actions { margin-top: 32px; }
  .sheet__body > .microline { margin-top: 16px; }
  .sheet--hero h1 { font-size: var(--fs-h1); line-height: 1.04; letter-spacing: -.025em; max-width: 14ch; }
  .sheet__body .lead, .sheet__body .standfirst { max-width: 34em; }
  .hero .actions { justify-content: center; }
  .microline { font-size: var(--fs-small); color: var(--muted); }
  .sheet__foot {
    display: flex; flex-direction: column-reverse; align-items: center; gap: 12px;
    padding: 24px var(--gutter); border-top: 1px solid var(--rule); text-align: center;
  }
  .signature { width: 160px; height: auto; flex: none; }
  .signature__ink { stroke: var(--teal); }
  .signature__rule { stroke: var(--navy); stroke-opacity: .4; }
  .signature__name { fill: var(--redact); }
  @media (max-width:599.98px) {
    .sheet--hero { border-inline: 0; border-radius: 0; }
    .hero .actions { flex-direction: column; gap: 16px; }
    .hero .actions .btn { width: 100%; }
  }
  @media (min-width:600px) {
    .sheet--hero { width: calc(100% - 2 * var(--gutter)); position: relative; }
    .sheet--hero::before, .sheet--hero::after {
      content: ""; position: absolute; z-index: -2; inset: 0; border: 1px solid var(--rule); border-radius: var(--r-sheet);
    }
    .sheet--hero::before { background: var(--sand); transform: rotate(-1.4deg) translate(-10px, 12px); }
    .sheet--hero::after { background: var(--sheet); transform: rotate(.9deg) translate(12px, 8px); }
    .sheet__body { padding: 48px 40px 40px; }
    .sheet__foot { padding-inline: 40px; }
    .signature { width: 200px; }
  }
  @media (min-width:900px) {
    .sheet__body { padding: 96px 48px 72px; }
    .sheet__foot { flex-direction: row; justify-content: flex-end; align-items: flex-end; gap: 32px; text-align: left; }
  }

  /* Thank-you tick: <svg class="tick" viewBox="0 0 64 64" width="64" height="64" aria-hidden="true" focusable="false">
     <circle class="tick__circle" cx="32" cy="32" r="31"/><path class="tick__mark" pathLength="1" d="M20 33l8 8 16-17"/></svg> */
  .tick { width: 64px; height: 64px; overflow: visible; fill: none; }
  .tick circle, .tick__circle { fill: none; stroke: var(--navy); stroke-width: 1.5; }
  .tick path, .tick__mark { fill: none; stroke: var(--teal); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }

  /* ---------- Common text ---------- */
  .lead, .standfirst { font-size: var(--fs-lead); line-height: 1.55; color: var(--muted); max-width: 34em; }
  .actions { display: flex; flex-wrap: wrap; align-items: center; gap: 24px; }
  .actions > .link { display: inline-flex; align-items: center; min-height: 44px; }
  .aside-line { margin-top: 32px; text-align: center; font-size: var(--fs-small); color: var(--muted); }
  .ruled { list-style: none; padding: 0; }
  .ruled > li { padding-block: 12px; border-top: 1px solid var(--rule); }
  .ruled > li:last-child { border-bottom: 1px solid var(--rule); }
  .panel--navy {
    background: var(--navy); color: var(--on-navy); border-radius: var(--r-sheet); padding: 24px;
    --link: var(--teal-light); --link-hover: #FFFFFF; --focus: var(--teal-light);
  }
  .panel--navy { text-align: center; }
  .panel--navy > * { margin-inline: auto; }
  .panel--navy > * + * { margin-top: 16px; }
  .panel--navy > .btn, .panel--navy > .actions { margin-top: 24px; }
  .panel--navy h2, .panel--navy h3 { color: #FFFFFF; }
  .panel--navy h2 { font-size: min(var(--fs-h2), 2.5rem); }
  @media (min-width:600px) { .panel--navy { padding: 40px; } }

  /* ---------- Not-for: strip (most pages) and box (/start/) ---------- */
  .notfor__title {
    font-family: var(--sans); font-weight: 600; font-size: var(--fs-small); line-height: 1.5;
    letter-spacing: 0; color: var(--navy); max-width: none; text-wrap: wrap;
  }
  .notfor__list { list-style: none; padding: 0; }
  .strip :is(.notfor, .forwho) { text-align: center; }
  .strip .notfor__list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 20px; margin-top: 8px; font-size: var(--fs-small); line-height: 1.4; }
  @media (max-width:374.98px) { .strip .notfor__list { grid-template-columns: 1fr; } }
  @media (min-width:900px) {
    .strip :is(.notfor, .forwho) { display: flex; flex-wrap: wrap; justify-content: center; align-items: baseline; row-gap: 4px; text-align: center; }
    .strip .notfor__list { display: flex; flex-wrap: wrap; justify-content: center; row-gap: 4px; margin-top: 0; }
    .strip .notfor__title, .strip .notfor__list li { padding-inline: 16px; }
    .strip .notfor__list li { border-left: 1px solid var(--rule-strong); }
    .strip .forwho .notfor__title { flex-basis: 100%; margin-bottom: 4px; }
    .strip .forwho .notfor__list li:first-child { border-left: 0; }
  }
  /* "Who this is for" (strip under the hero): each item carries a teal tick. */
  .forwho li::before {
    content: ""; display: inline-block; width: 12px; height: 12px; margin-right: 8px; vertical-align: -1px;
    background: var(--teal-ink); -webkit-mask: var(--tick-mask) center / contain no-repeat; mask: var(--tick-mask) center / contain no-repeat;
  }
  .forwho { --tick-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2 6.5l2.6 2.6L10 3.4' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
  .notfor-box { background: var(--sand); border-radius: var(--r-sheet); padding: 16px; font-size: var(--fs-micro); line-height: 1.5; --link: var(--navy); }
  /* Lower on the page (beside the prices, under the "before you start" ledger, after the FAQs). */
  .notfor-box:is(.notfor-box--band, .notfor-box--sheet, .notfor-box--faq) {
    max-width: var(--w-tariff); margin: 24px auto 0; padding: 16px 24px; text-align: center; font-size: var(--fs-small); color: var(--ink);
  }
  .notfor-box--sheet { background: var(--sheet); border: 1px solid var(--rule); }
  .notfor-box--faq { margin-top: 56px; }
  .notfor-box .notfor__title { display: inline; font-size: inherit; color: var(--navy); }
  .notfor-box .notfor__title::after { content: ":"; }
  .notfor-box .notfor__list, .notfor-box .notfor__list li { display: inline; }
  .notfor-box .notfor__list li + li::before { content: " · "; content: " · " / ""; }

  /* ---------- Diptych (home letters, campaign covers) ---------- */
  .diptych { display: grid; border-block: 1px solid var(--rule-strong); }
  .diptych__half {
    container-type: inline-size; position: relative; isolation: isolate;
    display: flex; flex-direction: column; align-items: center; gap: 16px; padding: 32px 24px; text-align: center;
    color: var(--ink); text-decoration: none;
  }
  .diptych__half + .diptych__half { border-top: 1px solid var(--rule-strong); }
  a.diptych__half::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--sheet); opacity: 0; }
  a.diptych__half:hover, a.diptych__half:focus-visible { color: var(--ink); }
  a.diptych__half:hover::before, a.diptych__half:focus-visible::before { opacity: 1; }
  a.diptych__half:focus-visible { outline-offset: -3px; }
  a.diptych__half:hover { translate: 0 -4px; }
  .diptych__half .title { margin-top: 8px; }
  .diptych__half p { color: var(--muted); max-width: 44ch; margin-inline: auto; }
  .diptych__half > .link { margin-top: auto; }
  .diptych--covers h2 { font-size: clamp(1.75rem, 1.45rem + 1.36vw, 2.5rem); line-height: 1.1; margin-top: 8px; }
  .diptych--covers .ruled { align-self: stretch; }
  .diptych--covers .diptych__half > p { color: var(--ink); }
  @container (min-width:460px) { .diptych__half > p { font-size: var(--fs-lead); line-height: 1.55; } }
  @media (min-width:900px) {
    .diptych { grid-template-columns: 1fr 1fr; }
    .diptych__half { padding: 40px; }
    .diptych__half + .diptych__half { border-top: 0; border-left: 1px solid var(--rule-strong); }
    .diptych--covers .diptych__half:not(:has(.mark)) { padding-top: calc(40px + 64px + 16px); }
  }

  /* Concept marks: hairline art, 1.5px navy, no text. Filled parts carry .mark__fill.
     range: <svg class="mark mark--range" viewBox="0 0 160 64" aria-hidden="true" focusable="false">
       14 cells <rect x="1+24i" y="13|37" width="14" height="14"/>, middle five of row 1 inside <g class="mark__fill">.
     steps: <svg class="mark mark--steps" …> <rect x="16" y="32" width="32" height="31"/>
       <rect x="64" y="16.5" width="32" height="46.5"/> <rect class="mark__fill" x="112" y="1" width="32" height="62"/> */
  .mark { width: 160px; height: auto; aspect-ratio: 160 / 64; overflow: visible; fill: none; stroke: var(--navy); stroke-width: 1.5; }
  .mark .mark__fill { fill: var(--teal-ink); stroke: var(--teal-ink); }

  /* ---------- Story (how.html) ----------
     Centred head, then the letter figure beside (≥900) or above (600–899) three compact steps.
     Phones: no figure; steps stack centred with the numeral above each title. */
  .story__title { margin: 0 auto var(--gap-head); text-align: center; }
  .story__figure { display: none; }
  .steps { list-style: none; padding: 0; counter-reset: step; max-width: var(--measure); margin-inline: auto; text-align: center; }
  .step { counter-increment: step; position: relative; }
  .step + .step { margin-top: 64px; }
  .step + .step::before { content: ""; position: absolute; left: 50%; top: -48px; width: 1px; height: 32px; background: var(--rule-strong); }
  .step h3::before {
    content: counter(step); display: block; margin-bottom: 10px;
    font-family: var(--serif); font-weight: 500; font-size: 3.5rem; line-height: 1; letter-spacing: -.02em;
    color: var(--teal-ink); font-variant-numeric: lining-nums;
  }
  .step p { margin: 8px auto 0; max-width: 40ch; color: var(--muted); }
  .letter-fig { display: block; width: 100%; max-width: 400px; height: auto; margin-inline: auto; overflow: visible; }
  .letter-fig .fig-sheet { fill: var(--sheet); stroke: var(--rule); }
  .letter-fig .fig-headrule { stroke: var(--rule); }
  .letter-fig .fig-head, .letter-fig .fig-lines, .letter-fig .fig-foot { fill: var(--redact); }
  .letter-fig .fig-ticks { stroke: var(--teal-ink); }
  .letter-fig .fig-sign__ink { stroke: var(--teal); }
  .letter-fig .fig-tab rect { fill: var(--sheet); stroke: var(--rule-strong); }
  .letter-fig text { font-family: var(--sans); font-weight: 600; font-size: 14px; fill: var(--navy); }
  /* Paper stack behind the figure: two sheets fanned out, drawn in CSS. */
  .story__figure { position: relative; isolation: isolate; }
  .story__figure::before, .story__figure::after {
    content: ""; position: absolute; z-index: -1; inset: 2% 12% 2% 5%; border: 1px solid var(--rule); border-radius: var(--r-sheet); background: var(--paper);
  }
  .story__figure::before { transform: rotate(-4deg) translate(-10px, 6px); }
  .story__figure::after { transform: rotate(2.5deg) translate(14px, 10px); background: var(--sand); }
  @media (min-width:600px) {
    .story__figure { display: block; width: min(300px, 70%); margin: 0 auto 56px; }
  }
  @media (min-width:900px) {
    .story__grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 24px; align-items: center; }
    .story__figure { grid-column: 2 / 6; width: auto; margin: 0; }
    .steps { grid-column: 7 / 13; margin: 0; max-width: 34rem; text-align: left; }
    .step { display: grid; grid-template-columns: 72px minmax(0, 1fr); column-gap: 20px; padding-block: 24px; border-top: 1px solid var(--rule); }
    .step:last-child { border-bottom: 1px solid var(--rule); }
    .step + .step { margin-top: 0; }
    .step + .step::before { content: none; }
    .step h3 { grid-column: 2; }
    .step h3::before { position: absolute; left: 0; top: 18px; width: 72px; margin: 0; font-size: 4rem; }
    .step p { grid-column: 2; margin: 6px 0 0; }
  }
  /* Sequence (site.js, motion allowed): the steps light up 1 → 2 → 3 while the figure fills in. */
  .story.is-playing .step:not(.is-active):not(.is-past) :is(h3, p) { color: var(--muted); }
  .story.is-playing .step:not(.is-active):not(.is-past) h3::before { color: var(--muted); }

  /* ---------- Track (home; .track--vertical inside the /submission sheet) ----------
     Below 900px (and .track--vertical everywhere): stops stack centred, each with its dot above the
     title and a short connector down to the next dot. From 900px the home track is one full-bleed
     horizontal rail through the dots (.track__rail::before). */
  .track__rail { position: relative; }
  .track__stops { position: relative; display: grid; gap: var(--track-gap, 56px); list-style: none; padding: 0; }
  .track__stop { position: relative; padding-top: 32px; text-align: center; }
  .track__stop::before {
    content: ""; position: absolute; z-index: 1; left: calc(50% - 6px); top: 6px;
    width: 12px; height: 12px; border-radius: 50%; background: var(--navy);
  }
  .track__stop--key::before { left: calc(50% - 12px); top: 0; width: 24px; height: 24px; background: var(--teal); border: 4px solid var(--navy); }
  .track__stop:not(:last-child)::after {
    content: ""; position: absolute; z-index: 0; left: calc(50% - .5px); top: calc(100% + 10px);
    width: 1px; height: calc(var(--track-gap, 56px) - 14px); background: var(--navy);
  }
  .track__stop p { margin: 8px auto 0; max-width: 34ch; }
  .track__more { margin-top: 48px; text-align: center; }
  @media (min-width:900px) {
    .track:not(.track--vertical) .track__rail::before { content: ""; position: absolute; left: 0; right: 0; top: 12px; height: 1px; background: var(--navy); }
    .track:not(.track--vertical) .track__stops { grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 24px; }
    .track:not(.track--vertical) .track__stop { padding: 48px 0 0; text-align: center; }
    .track:not(.track--vertical) .track__stop::before { left: calc(50% - 6px); top: 6px; }
    .track:not(.track--vertical) .track__stop--key::before { left: calc(50% - 12px); top: 0; }
    .track:not(.track--vertical) .track__stop::after { content: none; }
    .track:not(.track--vertical) .track__stop p { max-width: 28ch; margin-inline: auto; }
  }
  /* Vertical variant: <div class="track track--vertical"><ol class="track__stops"><li class="track__stop">… */
  .track--vertical { --track-gap: 40px; max-width: 480px; margin-inline: auto; }

  /* ---------- Tariff (tariff.html): the only price source ---------- */
  .tariff { container-type: inline-size; }
  .tariff__row {
    display: grid; grid-template-columns: auto 1fr auto; align-items: baseline; align-content: center; column-gap: 12px;
    min-height: 56px; padding-block: 10px;
  }
  .tariff__row + .tariff__row { border-top: 1px solid var(--rule); }
  .tariff__row::before, .tariff__row::after { content: ""; grid-area: 1 / 2; align-self: baseline; border-bottom: 1px dotted var(--rule-strong); }
  .tariff__row::after { border-bottom-color: var(--teal); opacity: 0; }
  .tariff__row dt { grid-area: 1 / 1; font-weight: 500; color: var(--ink); }
  .tariff__price {
    font-family: var(--serif); font-weight: 500; font-size: var(--fs-price); line-height: 1.1; color: var(--navy);
    font-variant-numeric: lining-nums tabular-nums; text-align: right; white-space: nowrap;
  }
  .tariff__row .tariff__price { grid-area: 1 / 3; }
  .tariff__note { grid-area: 2 / 1 / 3 / -1; margin-top: 2px; font-size: var(--fs-small); line-height: 1.4; color: var(--muted); }
  .tariff__foot { margin-top: 16px; font-size: var(--fs-small); color: var(--muted); }
  .tariff__sub { margin-top: 24px; padding-top: 20px; border-top: 3px double var(--rule-strong); }
  .tariff__sub-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 4px 12px; font-weight: 600; color: var(--navy); }
  .tariff__sub-head + p { margin-top: 8px; font-size: var(--fs-small); color: var(--muted); }
  .tariff__price small { margin-left: 2px; font-family: var(--sans); font-weight: 400; font-size: var(--fs-small); color: var(--muted); }
  .tariff__refund { margin-top: 24px; padding-top: 20px; border-top: 1px solid var(--rule); font-weight: 600; color: var(--navy); }
  @container (max-width:300px) { .tariff__row { column-gap: 8px; } .tariff__sub-head { font-size: var(--fs-small); } }
  @media (hover:hover) { .tariff__row:hover::after { opacity: 1; } }

  .tariff-band--navy h2 { color: #FFFFFF; }
  .sheet--tariff { max-width: var(--w-tariff); margin-inline: auto; padding: 28px 20px; }
  @media (min-width:600px) { .sheet--tariff { padding: 56px clamp(32px, 6vw, 64px); } }
  .tariff-band__cta { margin-top: 40px; text-align: center; }


  /* ---------- FAQ accordion ---------- */
  .accordion { border-top: 1px solid var(--rule-strong); }
  .qa { border-bottom: 1px solid var(--rule-strong); }
  .qa summary {
    position: relative; list-style: none; display: flex; align-items: center; min-height: 64px; padding: 16px 44px 16px 0;
    font-weight: 600; font-size: 1.0625rem; line-height: 1.4; color: var(--navy);
  }
  .qa summary::-webkit-details-marker { display: none; }
  .qa summary::marker { content: ""; }
  .qa summary::before, .qa summary::after {
    content: ""; position: absolute; right: 6px; top: 50%; width: 16px; height: 2px; margin-top: -1px; border-radius: 1px; background: var(--navy);
  }
  .qa summary::after { transform: rotate(90deg); }
  .qa[open] summary::after { transform: rotate(180deg); }
  .qa summary:hover { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; }
  .qa__a { max-width: 62ch; padding-bottom: 24px; }
  .qa__a > * + * { margin-top: 12px; }

  /* /faq/ column. From 1200px a sticky left-margin index:
     <div class="container qa-col__grid"><nav class="qa-col__index" aria-label="Topics">…links…</nav>
       <div class="qa-col__main"><div class="qa-group" id="…"><h2>…</h2><div class="accordion">…</div></div>…</div></div> */
  .qa-col .container:not(.qa-col__grid), .qa-col__main { max-width: calc(var(--w-tariff) + 2 * var(--gutter)); margin-inline: auto; }
  .qa-col__main { max-width: var(--w-tariff); }
  .qa-col__index { display: none; }
  .qa-col h2 { font-size: var(--fs-title); line-height: 1.15; letter-spacing: -.01em; margin: 0 auto 20px; text-align: center; }
  .qa-group + .qa-group { margin-top: 56px; }
  @media (min-width:1200px) {
    .qa-col__grid { display: grid; grid-template-columns: minmax(10rem, 1fr) minmax(0, var(--w-tariff)) minmax(0, 1fr); column-gap: 32px; align-items: start; }
    .qa-col__index { display: grid; gap: 0; grid-column: 1; justify-self: end; position: sticky; top: calc(var(--header-h) + 32px); }
    .qa-col__index a { display: flex; align-items: center; min-height: 44px; white-space: nowrap; font-size: var(--fs-small); color: var(--muted); text-decoration: none; }
    .qa-col__index a:hover { color: var(--navy); text-decoration: underline; }
    .qa-col__main { grid-column: 2; margin: 0; max-width: none; }
  }

  /* ---------- Ledger ---------- */
  .ledger { width: 100%; max-width: var(--w-tariff); margin-inline: auto; container-type: inline-size; } /* width: a grid item with inline-size containment would otherwise shrink to 0 */
  .ledger__row { display: grid; gap: 4px; padding-block: 20px; border-top: 1px solid var(--rule-strong); }
  .ledger__row:last-child { border-bottom: 1px solid var(--rule-strong); }
  .ledger dt { color: var(--navy); }
  .ledger dt.title { font-size: clamp(1.375rem, 1.3rem + .4vw, 1.625rem); }
  .ledger dd { max-width: 46ch; }
  @container (max-width:539.98px) { .ledger__row { text-align: center; } .ledger dd { margin-inline: auto; } }
  @container (min-width:540px) { .ledger__row { grid-template-columns: 36% minmax(0, 1fr); column-gap: 24px; align-items: baseline; } }
  .ledger--sheet {
    background: var(--sheet); color: var(--ink); border: 1px solid var(--rule); border-radius: var(--r-sheet); box-shadow: var(--shadow);
    padding: 4px clamp(20px, 4vw, 40px); --link: var(--teal-ink); --link-hover: var(--navy); --focus: var(--navy);
  }
  .ledger--sheet .ledger__row { border-color: var(--rule); }
  .ledger--sheet .ledger__row:first-child { border-top: 0; }
  .ledger--sheet .ledger__row:last-child { border-bottom: 0; }
  .ledger-table { width: 100%; border-collapse: collapse; font-size: var(--fs-small); line-height: 1.5; }
  .ledger-table caption { text-align: left; font-weight: 600; color: var(--navy); padding-bottom: 8px; }
  .ledger-table th, .ledger-table td { text-align: left; vertical-align: top; padding: 12px 16px 12px 0; border-bottom: 1px solid var(--rule-strong); }
  .ledger-table th:last-child, .ledger-table td:last-child { padding-right: 0; }
  .ledger-table thead th { color: var(--navy); font-weight: 600; border-bottom-color: var(--navy); }
  .ledger-table tbody th { color: var(--navy); font-weight: 600; }

  /* ---------- Page head ---------- */
  .page-head { text-align: center; padding-block: clamp(56px, 2.5rem + 4vw, 96px) clamp(40px, 2rem + 1.5vw, 56px); }
  .page-head h1 { margin-inline: auto; }
  .page-head .standfirst { margin: 20px auto 0; }
  .page-head .container::after { content: ""; display: block; width: 56px; height: 1px; margin: 32px auto 0; background: var(--rule-strong); }

  /* ---------- Legal lists (prose) ---------- */
  ol.legal { list-style: none; padding: 0; counter-reset: legal; }
  ol.legal > li { counter-increment: legal; position: relative; }
  ol.legal > li + li { margin-top: 40px; }
  ol.legal > li > * + * { margin-top: 12px; }
  ol.legal > li > h2 { font-size: var(--fs-title); line-height: 1.15; letter-spacing: -.01em; max-width: none; }
  ol.legal > li > h2::before { content: counter(legal) ". "; color: var(--teal-ink); font-variant-numeric: lining-nums; }
  @media (min-width:1200px) {
    ol.legal > li > h2::before { content: counter(legal); position: absolute; right: calc(100% + 24px); width: 3ch; text-align: right; }
  }

  /* ---------- Closing ---------- */
  .closing__inner { display: flex; flex-direction: column; align-items: center; gap: 32px; text-align: center; }
  .closing h2 { color: #FFFFFF; margin-inline: auto; }
  .closing a:not(.btn) { text-decoration: underline; }
  .closing .actions { justify-content: center; }
  .closing .btn--primary { background: var(--navy); color: #FFFFFF; --chip: var(--teal); --chip-ink: var(--navy); box-shadow: none; }
  .closing .btn--primary:hover { background: var(--navy-deep); color: #FFFFFF; }
  .closing .closing__help { margin-top: -12px; font-size: var(--fs-small); }
  /* A large signature stroke behind the teal closing: the flourish from the hero, signed in full. */
  .closing:not(.closing--sand) { position: relative; isolation: isolate; overflow: hidden; }
  .closing:not(.closing--sand)::before {
    content: ""; position: absolute; z-index: -1; inset: 0;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 70'%3E%3Cpath d='M8 50C22 20 34 18 30 44S46 60 58 34 74 18 70 46 92 56 104 30C110 20 118 26 112 44S140 52 150 32 172 30 190 40' fill='none' stroke='%230B2545' stroke-opacity='.18' stroke-width='1.1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat 50% 62% / min(1400px, 150%) auto;
  }
  .closing--sand h2 { color: var(--navy); }
  .closing--sand a:not(.btn) { color: var(--navy); text-decoration: underline; }
  .closing__inner > p { font-size: var(--fs-lead); }

  /* ---------- Footer ---------- */
  .site-footer {
    background: var(--navy-deep); color: var(--on-navy-dim); font-size: var(--fs-micro); line-height: 1.55;
    padding-block: 56px 32px; --link: var(--teal-light); --link-hover: #FFFFFF; --focus: var(--teal-light);
  }
  .site-footer { text-align: center; }
  .footer__top { display: grid; gap: 40px; justify-items: center; }
  .site-footer .wordmark { color: #FFFFFF; }
  .site-footer .wordmark span { color: var(--teal-light); }
  .footer__brand p { margin: 8px auto 0; max-width: 34ch; color: var(--on-navy); }
  .footer__cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; width: 100%; max-width: 640px; }
  .footer__h { font-family: var(--sans); font-weight: 600; font-size: var(--fs-micro); line-height: 1.4; letter-spacing: 0; color: #FFFFFF; max-width: none; margin-bottom: 4px; }
  .footer__cols ul { list-style: none; padding: 0; }
  .footer__cols a { display: inline-flex; align-items: center; min-height: 44px; text-decoration: none; }
  .footer__cols a:hover { text-decoration: underline; }
  .colophon { display: grid; gap: 16px 24px; margin-top: 40px; padding-top: 24px; border-top: 1px solid var(--rule-navy); }
  .colophon dt { font-weight: 600; color: var(--on-navy); }
  .colophon dd { color: var(--on-navy-dim); }
  .footer__base { display: flex; flex-direction: column; align-items: center; gap: 8px; margin-top: 32px; padding-top: 24px; border-top: 1px solid var(--rule-navy); }
  .footer__base p { max-width: 82ch; }
  @media (min-width:600px) {
    .footer__cols { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .colophon { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  }
  @media (min-width:900px) { .colophon { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
  @media (max-width:599.98px) {
    .footer__cols > :last-child { grid-column: 1 / -1; }
    .footer__cols > :last-child ul { display: flex; flex-wrap: wrap; justify-content: center; column-gap: 24px; }
  }

  @media (min-width:900px) and (pointer:fine) { .footer__cols a { min-height: 36px; } }

  /* ---------- Sticky mobile CTA (mcta.html) ---------- */
  .mcta {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
    display: flex; align-items: center; justify-content: space-between; gap: 16px;
    min-height: calc(64px + env(safe-area-inset-bottom)); padding: 8px var(--gutter) calc(8px + env(safe-area-inset-bottom));
    background: var(--sheet); border-top: 1px solid var(--rule);
    transform: translateY(100%); visibility: hidden;
  }
  .mcta.is-visible { transform: none; visibility: visible; }
  .mcta__price { font-weight: 600; color: var(--navy); }
  .mcta .btn { min-height: 48px; padding-inline: 20px; }
  .mcta .btn:has(.btn__arrow) { padding-right: 6px; }
  .mcta .btn__arrow { width: 36px; height: 36px; }
  .mcta__price, .mcta .btn { white-space: nowrap; }
  @media (max-width:359.98px) { .mcta { gap: 12px; } .mcta .btn, .mcta .btn:has(.btn__arrow) { padding-inline: 16px; } .mcta .btn__arrow { display: none; } }
  body:has(#cookie-banner:not([hidden])) .mcta { display: none; }
  @media (max-width:767.98px) {
    body:has(.mcta) .site-footer { padding-bottom: calc(32px + 80px + env(safe-area-inset-bottom)); }
    html:has(.mcta) { scroll-padding-bottom: calc(80px + env(safe-area-inset-bottom)); } /* focus never lands behind the bar */
  }
  @media (min-width:768px) { .mcta { display: none; } }

  /* ---------- Cookie banner ---------- */
  .cookie-banner {
    position: fixed; z-index: 60; left: 0; right: 0; bottom: 0;
    padding: 20px var(--gutter) calc(20px + env(safe-area-inset-bottom));
    background: var(--sheet); color: var(--ink); border-top: 1px solid var(--rule); box-shadow: var(--shadow);
    --link: var(--teal-ink); --link-hover: var(--navy); --focus: var(--navy);
  }
  .cookie-banner__title { font-family: var(--sans); font-weight: 600; font-size: 1.0625rem; line-height: 1.3; letter-spacing: 0; color: var(--navy); max-width: none; }
  .cookie-banner p { margin-top: 6px; font-size: var(--fs-small); line-height: 1.5; }
  .cookie-banner__actions { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 16px; }
  .cookie-banner__actions .btn { width: 100%; min-height: 44px; }
  @media (min-width:600px) {
    .cookie-banner { left: auto; right: 24px; bottom: 24px; max-width: 420px; padding: 24px; border: 1px solid var(--rule); border-radius: var(--r-sheet); }
  }

  /* ---------- /start/: the only Jotform page (title, one line, the form; user, 14 Oct 2026) ---------- */
  .start { padding-block: 24px 24px; }
  .start__head { max-width: var(--w-form); margin-inline: auto; text-align: center; }
  .start h1 { font-size: clamp(2rem, 1.5rem + 2vw, 3rem); max-width: 18ch; margin-inline: auto; }
  .start .lead { max-width: 34em; margin: 12px auto 0; line-height: 1.45; }
  .sheet--form { width: 100%; max-width: var(--w-form); margin: 20px auto 0; padding: 8px; }
  /* Space reserved for the Jotform before it loads (its measured first-page height: about 1200-1450px on
     phones, 1040px from 600px). Jotform then sets the iframe height. */
  .form-embed { min-height: 1200px; }
  @media (min-width:600px) { .form-embed { min-height: 1040px; } }
  .form-embed iframe { display: block; max-width: 100%; border: 0; }
  @media (max-width:599.98px) {
    .sheet--form { width: auto; max-width: none; margin-inline: calc(-1 * var(--gutter)); border-inline: 0; border-radius: 0; }
  }
  @media (min-width:600px) { .start { padding-block: 40px 64px; } .sheet--form { margin-top: 32px; } }
}

/* =================================================================== utilities */
@layer utilities {
  .visually-hidden {
    position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;
    clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
  }
  .skip-link {
    position: absolute; left: 8px; top: -80px; z-index: 100; padding: 10px 16px; border-radius: var(--r-btn);
    background: var(--navy); color: #FFFFFF; font-weight: 600; text-decoration: none;
  }
  .skip-link:focus { top: 8px; color: #FFFFFF; }
  .linklike {
    display: inline-flex; align-items: center; min-height: 44px; padding: 0; border: 0; background: none; cursor: pointer;
    color: var(--link, var(--teal-ink)); font: inherit; text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px;
  }
  .linklike:hover { color: var(--link-hover, var(--navy)); text-decoration-thickness: 2px; }
  /* Background overrides for the "no more than 2 neighbours share a background" rule. */
  .band--paper { background: var(--paper); color: var(--ink); --link: var(--teal-ink); --link-hover: var(--navy); --focus: var(--navy); }
  .band--sand { background: var(--sand); color: var(--ink); --link: var(--navy); --link-hover: var(--navy); --focus: var(--navy); }
  .band--white { background: var(--sheet); color: var(--ink); --link: var(--teal-ink); --link-hover: var(--navy); --focus: var(--navy); }
}

/* ====================================================================== motion
   Text never moves. Nothing loops or runs longer than 900ms. Only transform, opacity and
   stroke-dashoffset animate. Scroll-driven effects fall back to their final state. */
@keyframes rule-in { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes ink-in { from { stroke-dashoffset: 1.01; } to { stroke-dashoffset: 0; } }
@keyframes grow-x { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes grow-y { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes dot-in { from { transform: scale(.6); } to { transform: scale(1); } }
@keyframes fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes drop-in { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
@keyframes fan-in { from { transform: none; } }  /* to: the element's own resting rotation */
@keyframes wipe-in { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes settle { from { transform: translateY(12px); } }
@keyframes rise-in { from { opacity: 0; transform: translateY(var(--rise, 24px)); } }
@keyframes pop-in { from { opacity: 0; transform: scale(.3); } }
@keyframes tab-out { from { transform: translateX(-100%); } }  /* starts tucked fully under the sheet */
@keyframes drift-a { to { rotate: -1.4deg; translate: -10px 14px; } }
@keyframes drift-b { to { rotate: 1.2deg; translate: 14px 10px; } }

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

    /* 1. Hero signature: rule, then ink, once on load. 13. Thank-you tick. */
    .signature__rule { transform-box: fill-box; transform-origin: left center; animation: rule-in var(--t-slide) var(--ease) both; }
    .signature__ink { stroke-dasharray: 1 2; animation: ink-in var(--t-draw) var(--ease-in-out) 300ms both; }
    .tick path, .tick__mark { stroke-dasharray: 1 2; animation: ink-in 600ms var(--ease-in-out) 200ms both; }
    .sheet--hero::before, .sheet--hero::after, .story__figure::before, .story__figure::after { animation: fan-in 700ms var(--ease) 150ms both; }

    /* 1b. Hero entrance, once on load. The H1 paints at once (it is the LCP); the section settles 12px
       (on .hero, not the sheet, so the paper stack stays behind it), then lead → buttons → microline rise in,
       and the Email / SMS tabs slide out from behind the sheet after the signature. */
    .hero { animation: settle 700ms var(--ease) both; }
    .hero .sheet__body > :is(.lead, .standfirst, .actions, .microline) { animation: rise-in 600ms var(--ease) both; }
    .hero .sheet__body > :is(.lead, .standfirst) { animation-delay: 120ms; }
    .hero .sheet__body > .actions { animation-delay: 220ms; }
    .hero .sheet__body > .microline { animation-delay: 320ms; }
    .sheet__tabs span { animation: tab-out 520ms var(--ease) both; animation-delay: 1250ms; }
    .sheet__tabs span + span { animation-delay: 1370ms; }
    /* "Who this is for": the ticks pop in one after another. */
    .forwho li::before { animation: pop-in 360ms var(--ease) both; animation-delay: 500ms; }
    .forwho li:nth-child(2)::before { animation-delay: 600ms; }
    .forwho li:nth-child(3)::before { animation-delay: 700ms; }
    .forwho li:nth-child(4)::before { animation-delay: 800ms; }

    /* 2. Header CTA quiet ↔ filled */
    .site-header__cta::before { transition: opacity var(--t-micro) var(--ease); }

    /* 4. Diptych hover; 9. buttons; link arrows */
    a.diptych__half::before { transition: opacity 200ms var(--ease); }
    a.diptych__half { transition: translate 260ms var(--ease); }
    a.diptych__half .link--arrow > span[aria-hidden] { transition: transform 200ms var(--ease); }
    a.diptych__half:hover .link--arrow > span[aria-hidden], a.diptych__half:focus-visible .link--arrow > span[aria-hidden] { transform: translateX(3px); }
    .btn:active { transform: scale(.98); }
    .btn__arrow::before, a.link--arrow > span[aria-hidden] { transition: transform 160ms var(--ease); }
    .btn:hover .btn__arrow::before, a.link--arrow:hover > span[aria-hidden] { transform: translateX(3px); }
    .btn { transition: transform 120ms var(--ease), background-color 160ms var(--ease); }
    .link--arrow { transition: background-size 220ms var(--ease); }

    /* 5. Story figure: data-step="0|1|2|3" hides the later groups; no attribute = final state. */
    .story__figure .fig-lines rect { transform-box: fill-box; transform-origin: left center; transition: transform var(--t-state) var(--ease); }
    .story__figure .fig-lines rect:nth-child(2) { transition-delay: 80ms; }
    .story__figure .fig-lines rect:nth-child(3) { transition-delay: 160ms; }
    .story__figure .fig-lines rect:nth-child(4) { transition-delay: 240ms; }
    .story__figure .fig-lines rect:nth-child(5) { transition-delay: 320ms; }
    .story__figure .fig-lines rect:nth-child(6) { transition-delay: 400ms; }
    .story__figure[data-step="0"] .fig-lines rect { transform: scaleX(0); transition-delay: 0s; }
    .story__figure .fig-ticks > * { transition: opacity var(--t-state) var(--ease); }
    .story__figure .fig-ticks > :nth-child(2) { transition-delay: 120ms; }
    .story__figure .fig-ticks > :nth-child(3) { transition-delay: 240ms; }
    .story__figure .fig-ticks > :nth-child(4) { transition-delay: 360ms; }
    .story__figure:is([data-step="0"], [data-step="1"]) .fig-ticks > * { opacity: 0; transition-delay: 0s; }
    .story__figure .fig-sign__rule { transform-box: fill-box; transform-origin: left center; transition: transform var(--t-slide) var(--ease); }
    .story__figure .fig-sign__ink { stroke-dasharray: 1 2; stroke-dashoffset: 0; transition: stroke-dashoffset 480ms var(--ease-in-out) 120ms; }
    .story__figure .fig-sign > rect { transition: opacity var(--t-slide) var(--ease); }
    .story__figure:is([data-step="0"], [data-step="1"], [data-step="2"]) .fig-sign > rect { opacity: 0; }
    .story__figure:is([data-step="0"], [data-step="1"], [data-step="2"]) .fig-sign__rule { transform: scaleX(0); }
    .story__figure:is([data-step="0"], [data-step="1"], [data-step="2"]) .fig-sign__ink { stroke-dashoffset: 1.01; transition-delay: 0s; }
    .story__figure .fig-tab { transition: transform var(--t-state) var(--ease) 600ms, opacity var(--t-state) var(--ease) 600ms; }
    .story__figure .fig-tab + .fig-tab { transition-delay: 680ms; }
    .story__figure:is([data-step="0"], [data-step="1"], [data-step="2"]) .fig-tab { transform: translateX(-24px); opacity: 0; transition-delay: 0s; }
    .step :is(h3, p), .step h3::before { transition: color var(--t-state) var(--ease); }

    /* 7. Tariff row hover: the leader turns teal (text never moves) */
    .tariff__row::after { transition: opacity var(--t-micro) var(--ease); }

    /* 8. Accordion: opens instantly where ::details-content is unsupported. */
    :root { interpolate-size: allow-keywords; }
    .qa summary::after { transition: transform var(--t-slide) var(--ease); }
    @supports selector(::details-content) {
      .qa::details-content { block-size: 0; overflow-y: clip; transition: block-size var(--t-slide) var(--ease), content-visibility var(--t-slide) allow-discrete; }
      .qa[open]::details-content { block-size: auto; }
    }

    /* 10. Mobile CTA */
    .mcta { transition: transform var(--t-slide) var(--ease), visibility 0s linear var(--t-slide); }
    .mcta.is-visible { transition: transform var(--t-slide) var(--ease), visibility 0s; }

    /* 11. Menu panel */
    .menu[open] > .menu__panel { animation: drop-in 200ms var(--ease); }

    /* 2, 3, 6. Scroll-driven: header hairline, diptych marks, track rail. Fallback: final state. */
    @supports (animation-timeline: scroll()) {
      .site-header::after { animation: fade-in linear both; animation-timeline: scroll(root); animation-range: 0 8px; }
    }
    @supports (animation-timeline: view()) {
      .mark { view-timeline: --mark block; }
      .mark--range .mark__fill { transform-box: fill-box; transform-origin: left center; animation: grow-x linear both; animation-timeline: --mark; animation-range: entry 20% cover 40%; }
      .mark--steps rect { transform-box: fill-box; transform-origin: center bottom; animation: grow-y linear both; animation-timeline: --mark; animation-range: entry 20% cover 40%; }
      .track__rail { view-timeline: --rail block; }
      .track__rail::before { transform-origin: left center; animation: grow-x linear both; animation-timeline: --rail; animation-range: entry 10% cover 40%; }
      .track__rail .track__stop--key::before { animation: dot-in linear both; animation-timeline: --rail; animation-range: entry 30% cover 45%; }
      .closing:not(.closing--sand) { view-timeline: --closing block; }
      .closing:not(.closing--sand)::before { animation: wipe-in linear both; animation-timeline: --closing; animation-range: entry 15% cover 55%; }

      /* 14. Scroll reveals: headings and rows rise in as they enter. Never in the first section (the LCP),
         never the not-for box, the refund line or anything on /start/. */
      main > :not(:first-child) :is(.head h2, .story__title, .faq .split__aside, .qa-col h2, .closing h2, .diptych__half, .track__stop, .step, .ledger__row, .qa),
      .tariff-band .tariff__row, .tariff-band .tariff__sub {
        animation: rise-in linear both; animation-timeline: view(); animation-range: entry 5% cover 30%;
      }
      .tariff-band .tariff__row, .tariff-band .tariff__sub, .ledger__row, .qa { --rise: 14px; }
    }
    @supports (animation-timeline: scroll()) {
      /* 15. Depth: the hero's back sheets drift a little wider as the page scrolls (individual
         rotate/translate properties, so they compose with the fan-in transform). */
      .sheet--hero::before { animation: fan-in 700ms var(--ease) 150ms both, drift-a linear both; animation-timeline: auto, scroll(root); animation-range: normal, 0 600px; }
      .sheet--hero::after { animation: fan-in 700ms var(--ease) 150ms both, drift-b linear both; animation-timeline: auto, scroll(root); animation-range: normal, 0 600px; }
    }
  }

  /* 12. Page transitions */
  @view-transition { navigation: auto; }
  ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation-duration: 200ms; }
  .site-header { view-transition-name: site-header; }
}

@media print {
  .site-header, .menu, .mcta, .cookie-banner, .form-embed, .closing, .skip-link { display: none !important; }
  body { background: #FFFFFF; }
  .sheet { box-shadow: none; }
}
