
/* ===========================================================================
   THUNDER / driverknowledgetest.com.au - site shell v34
   LAYER 1 of 8: design tokens, reset, base typography.

   WHY TOKENS AND NOT UTILITIES. v27 was SWIFT's Tailwind build with THUNDER's
   logo dropped in. Three consequences were visible on the served page:
     - two dark-mode rules had lost their `.dark` prefix, so the breadcrumb bar
       painted #0B1220 in LIGHT mode and the desktop nav links painted #CBD5E1
       on white (unreadable). A token sheet cannot have that defect: the theme
       changes VALUES, never which rules apply.
     - 52 classes the renderers actually emit (cr-score-matrix, cr-timeline,
       cr-topic-grid, cr-verdict, cr-source-strip, goal-*, hero-facts, the
       practice cards) had no CSS at all, so they fell back to bare HTML.
     - the utility sheet shipped ~160KB for markup that no longer existed.
   This sheet defines the palette ONCE and every component reads it, which is
   also how the two engine surfaces that are NOT ours - quiz_takeover token and
   the test_list token card block - inherit THUNDER's identity instead of their
   own fallbacks. Both read named custom properties; both are fed below.
   =========================================================================== */

:root{
  /* ---- type ------------------------------------------------------------ */
  --font-display:"Archivo","Segoe UI",system-ui,-apple-system,sans-serif;
  --font-ui:"Archivo","Segoe UI",system-ui,-apple-system,sans-serif;
  --font-read:"Literata",Georgia,"Times New Roman",serif;
  --font-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;

  /* ---- brand ramp: Australian green (the owner's #00843d) --------------- */
  --brand-50:#eef6f1; --brand-100:#d8ebdf; --brand-200:#aed7bf;
  --brand-300:#79bd97; --brand-400:#2f9d66; --brand-500:#00843d;
  --brand-600:#0a7138; --brand-700:#0b5c30; --brand-800:#0a4927; --brand-900:#0a3a20;

  /* ---- ink ramp: slate-teal, so the page never reads blue-grey generic -- */
  --ink-50:#f5f8f6; --ink-100:#edf1ef; --ink-200:#dde4e0; --ink-300:#c6d0cc;
  --ink-400:#9aa6a3; --ink-500:#6d7c79; --ink-600:#51605d; --ink-700:#35444a;
  --ink-800:#1f323a; --ink-900:#14242b; --ink-950:#0b171c;

  /* ---- signal --------------------------------------------------------- */
  --good:#0a7138; --good-soft:#e7f3ec; --good-line:#b9dcc6;
  --warn:#8a5207; --warn-soft:#fdf4e5; --warn-line:#eed9ac;
  --bad:#ab2a20;  --bad-soft:#fdeeec;  --bad-line:#f0c4bf;
  --info:#1d5b85; --info-soft:#eaf2f8; --info-line:#c2d9e8;
  --prem:#6245c4;  --prem-soft:#f0ecfd;

  /* ---- THE SHARED SURFACE CONTRACT ------------------------------------- *
   * quiz-takeover.cfm reads: --bg --surface --border --border-mid --accent  *
   * --cta --h1 --muted --ink --ink-muted --ok --slate-soft --slate-deep     *
   * --wrap. Every one is defined here, so the practice takeover wears       *
   * THUNDER's palette in both themes instead of its own hard fallbacks.     */
  --bg:#f4f7f5;
  --surface:#ffffff;
  --surface-2:#fafcfb;
  --zone:#eff4f1;
  --border:#dce4e0;
  --border-mid:#c5d1cc;
  --line:#dce4e0;
  --line-soft:#e7ede9;
  --h1:#12222a;
  --ink:#1b2d34;
  --ink-muted:#4d5c59;
  --muted:#5b6a70;
  --accent:#00843d;
  --accent-ink:#ffffff;
  --accent-soft:#eef6f1;
  --accent-deep:#0b5c30;
  --accent-text:#0a5c30;
  --cta:#00843d;
  --cta-ink:#ffffff;
  --ok:#0a7138;
  --head:#14242b;
  --slate-soft:#eff4f1;
  --slate-deep:#14242b;
  --wrap:84rem;

  /* ---- test_list token fallbacks. test-list.cfm sets its own --panel/--accent *
   * from --tl-* with hard defaults; naming them here is the ONLY lever that *
   * repaints the picker cards on a public hub page. ---------------------- */
  --tl-panel:#ffffff; --tl-zone:#f6f9f7; --tl-ink:#14242b; --tl-ink-2:#35444a;
  --tl-muted:#65747a; --tl-line:#dce4e0; --tl-line-soft:#e7ede9;
  --tl-accent:#00843d; --tl-accent-ink:#ffffff; --tl-accent-soft:#eef6f1;
  --tl-accent-deep:#0b5c30; --tl-good:#0a7138; --tl-good-soft:#e7f3ec;
  --tl-warn:#8a5207; --tl-warn-soft:#fdf4e5; --tl-bad:#ab2a20; --tl-bad-soft:#fdeeec;
  --tl-prem:#6245c4;

  /* ---- geometry + depth ------------------------------------------------ */
  --r-xs:6px; --r-sm:10px; --r:14px; --r-lg:18px; --r-xl:24px; --r-pill:999px;
  --gut:clamp(1.15rem,4.2vw,2.5rem);
  --read-w:68ch;
  --head-h:72px;
  --sh-1:0 1px 2px rgba(11,23,28,.05);
  --sh-2:0 1px 2px rgba(11,23,28,.04),0 10px 24px -14px rgba(11,23,28,.18);
  --sh-3:0 1px 2px rgba(11,23,28,.04),0 24px 54px -24px rgba(11,23,28,.26);
  --sh-pop:0 24px 48px -24px rgba(11,23,28,.34);
  --ring:0 0 0 4px rgba(0,132,61,.22);

  /* ---- vertical rhythm: one scale, used by every section -------------- */
  --s1:.25rem; --s2:.5rem; --s3:.75rem; --s4:1rem; --s5:1.5rem;
  --s6:2rem; --s7:3rem; --s8:4rem; --s9:5.5rem;

  color-scheme:light;
}

html.dark,html[data-theme="dark"]{
  --brand-50:#0e241a; --brand-100:#12301f; --brand-200:#1b4a30;
  --brand-300:#2b7048; --brand-400:#38a068; --brand-500:#3fb173;
  --brand-600:#6acb95; --brand-700:#8fdcae; --brand-800:#b4e9c8; --brand-900:#d7f4e2;

  --ink-50:#0d1a1e; --ink-100:#122228; --ink-200:#1b2f35; --ink-300:#2a4047;
  --ink-400:#607471; --ink-500:#8a9a96; --ink-600:#a7b5b1; --ink-700:#c0ccc8;
  --ink-800:#dae3df; --ink-900:#eef4f1; --ink-950:#f7faf8;

  --good:#4cbd80; --good-soft:#102a1e; --good-line:#1e4b33;
  --warn:#e0ab5c; --warn-soft:#2a2113; --warn-line:#5a4521;
  --bad:#f08d84;  --bad-soft:#2c1715;  --bad-line:#5c2a25;
  --info:#7fb9dd; --info-soft:#12242e; --info-line:#28485c;
  --prem:#a894f2;  --prem-soft:#1d1736;

  --bg:#0a1417;
  --surface:#101e22;
  --surface-2:#13262a;
  --zone:#0d1b1f;
  --border:#213439;
  --border-mid:#2d4349;
  --line:#213439;
  --line-soft:#1a2b30;
  --h1:#eff5f2;
  --ink:#dde7e3;
  --ink-muted:#a4b3af;
  --muted:#92a19d;
  --accent:#3fb173;
  --accent-ink:#042312;
  --accent-soft:#122c20;
  --accent-deep:#8fdcae;
  --accent-text:#7fd6a4;
  --cta:#00843d;
  --cta-ink:#ffffff;
  --ok:#4cbd80;
  --head:#eff5f2;
  --slate-soft:#16272c;
  --slate-deep:#060f12;

  --tl-panel:#101e22; --tl-zone:#0d1b1f; --tl-ink:#eff5f2; --tl-ink-2:#c0ccc8;
  --tl-muted:#92a19d; --tl-line:#213439; --tl-line-soft:#1a2b30;
  --tl-accent:#3fb173; --tl-accent-ink:#042312; --tl-accent-soft:#122c20;
  --tl-accent-deep:#8fdcae; --tl-good:#4cbd80; --tl-good-soft:#102a1e;
  --tl-warn:#e0ab5c; --tl-warn-soft:#2a2113; --tl-bad:#f08d84; --tl-bad-soft:#2c1715;
  --tl-prem:#a894f2;

  --sh-1:0 1px 2px rgba(0,0,0,.4);
  --sh-2:0 1px 2px rgba(0,0,0,.36),0 10px 24px -14px rgba(0,0,0,.6);
  --sh-3:0 1px 2px rgba(0,0,0,.36),0 24px 54px -24px rgba(0,0,0,.72);
  --sh-pop:0 24px 48px -24px rgba(0,0,0,.8);
  --ring:0 0 0 4px rgba(63,177,115,.28);
  color-scheme:dark;
}

/* ---- reset ------------------------------------------------------------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}
body{margin:0;background:var(--bg);color:var(--ink);
  font:400 16px/1.6 var(--font-ui);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  text-underline-offset:.18em}
img,svg,video,canvas{max-width:100%}
img,video{height:auto}
[hidden]{display:none!important}
hr{height:1px;border:0;background:var(--border);margin:var(--s6) 0}
ul,ol{padding-left:1.25rem}
a{color:var(--accent-text);text-decoration-thickness:1px}
a:hover{color:var(--accent-deep)}
button{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-xs);box-shadow:var(--ring)}
::selection{background:var(--brand-200);color:var(--ink-900)}
table{border-collapse:collapse;width:100%}
code,kbd,samp{font-family:var(--font-mono);font-size:.92em}

/* ---- headings: one display face, one rhythm ---------------------------- */
h1,h2,h3,h4,h5,h6{font-family:var(--font-display);color:var(--h1);
  font-weight:700;letter-spacing:-.022em;line-height:1.14;margin:0}
h1{font-size:clamp(2.1rem,1.25rem + 3.1vw,3.6rem);font-weight:800;letter-spacing:-.034em;line-height:1.04}
h2{font-size:clamp(1.55rem,1.1rem + 1.5vw,2.25rem);letter-spacing:-.026em}
h3{font-size:clamp(1.12rem,1rem + .4vw,1.3rem);letter-spacing:-.016em;line-height:1.3}
h4{font-size:1.05rem}
p{margin:0}

/* a shared label/eyebrow, used by the hero, the shelves and the ad slot */
.eyebrow,.lab,.shelf-sub .lab{display:flex;align-items:center;gap:.6rem;margin:0;
  font:700 .72rem/1.2 var(--font-display);letter-spacing:.15em;text-transform:uppercase;color:var(--accent-text)}
.eyebrow:empty,.lede:empty,.lab:empty{display:none}
.eyebrow::before{content:"";width:1.75rem;height:3px;border-radius:3px;background:var(--accent);flex:0 0 auto}
.lede{margin:0;font:400 clamp(1.05rem,.98rem + .35vw,1.28rem)/1.62 var(--font-read);color:var(--ink-muted)}

/* skip link - the shell had none, and a sticky header plus a drawer makes
   keyboard entry into body token slow without it */
.skip{position:absolute;left:-9999px;top:0;z-index:200}
.skip:focus{left:.75rem;top:.75rem;padding:.7rem 1rem;background:var(--surface);
  border:1px solid var(--border);border-radius:var(--r-sm);box-shadow:var(--sh-3);font-weight:700}


/* ===========================================================================
   LAYER 2 of 8: the shell - page frame, header, the site_nav token rich menu,
   breadcrumb bar, buttons, closing CTA band, mega footer.
   =========================================================================== */

/* ---- the frame. `.wrap` is the layout's own container class (Mother's
   slotTemplate opens with <div class="wrap">), so the width lives here and
   nowhere else. `.shell` is this file's own outer rail. ------------------- */
.shell{display:flex;flex-direction:column;min-height:100vh;background:var(--bg)}
.wrap,.rail{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gut)}
.wrap .wrap{max-width:none;padding-inline:0}
#main .qt-takeover{width:calc(100% - 2 * var(--gut));max-width:calc(var(--wrap) - 2 * var(--gut));margin-inline:auto}
/* ---- THE HOME HERO, premium pass (Abdul 2026-10-09: "make the home page banner more premium, check the hero trend") ---- */
.content-hero--home,.content-hero--home.content-hero--compact{padding-top:clamp(3rem,6vw,5.5rem);padding-bottom:clamp(2.75rem,5vw,4.75rem);
  background:radial-gradient(42rem 24rem at 10% -12%,var(--brand-100),transparent 62%),radial-gradient(36rem 22rem at 96% 112%,var(--accent-soft),transparent 60%),linear-gradient(180deg,var(--surface) 0%,var(--bg) 100%)}
@media (min-width:901px){.content-hero--home .hero-grid{grid-template-columns:minmax(0,1.02fr) minmax(0,.98fr);gap:clamp(2rem,5vw,4.5rem)}}
.content-hero--home h1,.content-hero--home.content-hero--compact h1{font-size:clamp(2.6rem,1.6rem + 3.6vw,4.5rem);line-height:1;letter-spacing:-.04em;max-width:14ch}
.content-hero--home .lede{font-size:clamp(1.12rem,1rem + .5vw,1.4rem);max-width:44ch}
.content-hero--home .eyebrow{display:inline-flex;align-items:center;gap:.55rem;padding:.42rem .9rem .42rem .65rem;border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--good-line);box-shadow:var(--sh-1);letter-spacing:.1em;font-size:.7rem}
.content-hero--home .eyebrow::before{width:.55rem;height:.55rem;border-radius:50%;background:var(--good);animation:hero-pulse 2.2s ease-in-out infinite}
@keyframes hero-pulse{0%,100%{box-shadow:0 0 0 .2rem color-mix(in srgb,var(--good) 25%,transparent)}50%{box-shadow:0 0 0 .55rem color-mix(in srgb,var(--good) 6%,transparent)}}
@media (prefers-reduced-motion:reduce){.content-hero--home .eyebrow::before{animation:none}}
.content-hero--home .hero-cta-wrap{gap:.75rem 1rem}
.content-hero--home .hero-cta-wrap .btn-primary{min-height:54px;padding:.9rem 1.5rem;font-size:1.05rem;border-radius:var(--r-sm)}
.content-hero--home .hero-cta-wrap>a:not(.btn){min-height:54px;padding:.9rem 1.2rem;border:1px solid var(--border-mid);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font-size:.95rem}
.content-hero--home .hero-cta-wrap>a:not(.btn):hover{text-decoration:none;border-color:var(--accent);color:var(--accent-text)}
.content-hero--home .hero-trust{margin-top:.6rem}
.content-hero--home .hero-media-col{position:relative}
.content-hero--home .hero-media-col::before{content:"";position:absolute;inset:-8% -6% -10% -6%;background:radial-gradient(closest-side,color-mix(in srgb,var(--accent) 24%,transparent),transparent 72%);filter:blur(14px);z-index:0}
.content-hero--home .hero-media-col .pg-hero-media{position:relative;z-index:1;border-radius:var(--r-lg);box-shadow:0 34px 64px -30px rgba(8,38,24,.5),0 14px 30px -18px rgba(8,38,24,.28);transform:rotate(-1.2deg)}
.content-hero--home .hero-float{position:absolute;z-index:2;left:-1.25rem;bottom:-1.1rem;display:flex;align-items:center;gap:.7rem;padding:.75rem .95rem .75rem .75rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);box-shadow:var(--sh-3)}
.content-hero--home .hero-float-ic{display:grid;place-items:center;width:2.25rem;height:2.25rem;border-radius:50%;background:var(--good-soft);color:var(--good);flex:0 0 auto}
.content-hero--home .hero-float-ic svg{width:1.2rem;height:1.2rem;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.content-hero--home .hero-float b{display:block;font:700 .92rem/1.2 var(--font-display);color:var(--ink)}
.content-hero--home .hero-float span{display:block;font:500 .78rem/1.3 var(--font-ui);color:var(--muted)}
@media (max-width:900px){.content-hero--home .hero-media-col .pg-hero-media{transform:none}.content-hero--home .hero-float{position:static;margin-top:.9rem}.content-hero--home .hero-media-col::before{display:none}.content-hero--home h1{max-width:none}}
/* the home hero's stat strip - four verified facts under the buttons (SWIFT's shape) */
.hero-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1rem;margin:.5rem 0 0;padding:0;list-style:none;width:100%}
.hero-stats li{display:grid;grid-template-columns:2.2rem minmax(0,1fr);grid-template-rows:auto auto;column-gap:.65rem;align-items:center}
.hero-stats .hs-ic{grid-row:1/3;display:grid;place-items:center;width:2.2rem;height:2.2rem;border-radius:var(--r-sm);background:var(--accent-soft);color:var(--accent-text)}
.hero-stats .hs-ic svg{width:1.15rem;height:1.15rem;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.hero-stats b{font:800 1.08rem/1.1 var(--font-display);color:var(--ink);letter-spacing:-.01em}
.hero-stats li>span:last-child{font:500 .78rem/1.3 var(--font-ui);color:var(--muted)}
/* on a phone the home hero reads words first, picture after (the shell's default puts the picture first) */
@media (max-width:1023px){.content-hero--home .hero-media-col{order:2;margin-top:1.25rem}}
@media (max-width:640px){.content-hero--home .hero-cta-wrap{width:100%}.content-hero--home .hero-cta-wrap>a{width:100%;justify-content:center}}

.breadcrumb-inner .wrap{max-width:none;padding-inline:0}
#main .qt-takeover .qt-opt[data-state="correct"]{border-color:var(--good);background:var(--good-soft)}
#main .qt-takeover .qt-opt[data-state="correct"] .qt-letter{background:var(--good);border-color:var(--good);color:#fff}
#main .qt-takeover .qt-opt[data-state="wrong"]{border-color:var(--bad);background:var(--bad-soft)}
#main .qt-takeover .qt-opt[data-state="wrong"] .qt-letter{background:var(--bad);border-color:var(--bad);color:#fff}
#main .qt-takeover .qt-opt[data-state="wrong"] .qt-otext{text-decoration:line-through;text-decoration-thickness:1px}
#main .qt-takeover .qt-opt[data-state="correct"] .qt-letter,#main .qt-takeover .qt-opt[data-state="wrong"] .qt-letter{font-size:0}
#main .qt-takeover .qt-opt[data-state="correct"] .qt-letter::before{content:"\2713";font-size:.95rem;font-weight:800}
#main .qt-takeover .qt-opt[data-state="wrong"] .qt-letter::before{content:"\2715";font-size:.9rem;font-weight:800}
#main .qt-takeover .qt-fb{border-left-color:var(--good);background:var(--good-soft)}
#main .qt-takeover .qt-fb .qt-fb-h{color:var(--good)}
#main .qt-takeover:has(.qt-opt[data-state="wrong"]) .qt-fb{border-left-color:var(--bad);background:var(--bad-soft)}
#main .qt-takeover:has(.qt-opt[data-state="wrong"]) .qt-fb .qt-fb-h{color:var(--bad)}
.spine{display:none}
main{display:block;flex:1 0 auto}
#main,#content,#at-a-glance,#pg-cf-form{scroll-margin-top:calc(var(--head-h) + 1.25rem)}

/* ---- buttons: ONE definition. The engine emits `.btn.btn-primary` from
   slot-mapper (hero.cta-block) and content-blocks (cr-vd-cta), so this is the
   shared contract, not a shell-only style. ------------------------------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  min-height:48px;padding:.78rem 1.3rem;border:1px solid transparent;border-radius:var(--r-sm);
  font:600 .975rem/1.2 var(--font-display);letter-spacing:-.008em;text-decoration:none;
  cursor:pointer;transition:background .18s,border-color .18s,color .18s,transform .18s,box-shadow .18s}
.btn svg{width:1.1em;height:1.1em;flex:0 0 auto;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.btn-primary{background:var(--cta);color:var(--cta-ink);border-color:var(--cta);
  box-shadow:0 8px 20px -10px rgba(0,132,61,.55)}
.btn-primary:hover{background:var(--brand-700);border-color:var(--brand-700);color:var(--cta-ink);
  transform:translateY(-1px);box-shadow:0 12px 26px -10px rgba(0,132,61,.6)}
html.dark .btn-primary:hover,html[data-theme="dark"] .btn-primary:hover{background:#0a9648;border-color:#0a9648}
.btn-ghost,.pg-cta-ghost{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  min-height:48px;padding:.78rem 1.25rem;border:1px solid var(--border-mid);border-radius:var(--r-sm);
  background:var(--surface);color:var(--h1);font:600 .975rem/1.2 var(--font-display);
  text-decoration:none;cursor:pointer;transition:border-color .18s,color .18s,background .18s}
.btn-ghost:hover,.pg-cta-ghost:hover{border-color:var(--accent);color:var(--accent-text);background:var(--accent-soft)}
.btn-lg{min-height:54px;padding:.95rem 1.6rem;font-size:1.03rem}
.btn-block{width:100%}
.arr,.arw{line-height:1;font-size:1.05em}

/* ---- header ------------------------------------------------------------ */
.hdr{position:sticky;top:0;z-index:60;background:color-mix(in srgb,var(--surface) 88%,transparent);
  border-bottom:1px solid var(--border);backdrop-filter:saturate(1.3) blur(14px)}
@supports not (background:color-mix(in srgb,red 50%,transparent)){.hdr{background:var(--surface)}}
.hdr::before{content:"";display:block;height:3px;background:
  linear-gradient(90deg,var(--brand-500) 0 42%,#f9d43a 42% 68%,#236ab7 68% 100%)}
.hdr-in{display:flex;align-items:center;gap:1rem;min-height:var(--head-h)}
.brand{display:flex;align-items:center;flex:0 0 auto;text-decoration:none;padding:.35rem 0}
.brand svg{display:block;width:clamp(168px,17vw,214px);height:auto}
/* the logo is supplied artwork: the wordmark paths carry fill="#213141" as a
   presentation attribute, which any CSS rule outranks. So dark mode and the
   dark footer recolour the WORDMARK ONLY and the shield keeps its real
   green/blue/yellow/red marks - no brightness/invert filter, which would have
   flattened all four. */
html.dark .brand svg path[fill="#213141"],html[data-theme="dark"] .brand svg path[fill="#213141"]{fill:#eff5f2}
.hdr-nav{flex:1 1 auto;min-width:0;display:flex;justify-content:flex-end}
.hdr-act{display:flex;align-items:center;gap:.4rem;flex:0 0 auto;margin-left:auto}
.hdr-link{padding:.6rem .7rem;border-radius:var(--r-xs);font:600 .9rem/1 var(--font-display);
  color:var(--ink-600);text-decoration:none}
.hdr-link:hover{color:var(--h1);background:var(--slate-soft)}
.icon-btn{display:inline-grid;place-items:center;width:42px;height:42px;padding:0;border:1px solid transparent;
  border-radius:var(--r-sm);background:none;color:var(--ink-500);cursor:pointer}
.icon-btn:hover{background:var(--slate-soft);color:var(--h1)}
.icon-btn svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.hdr .btn-primary{min-height:42px;padding:.55rem 1rem;font-size:.9rem}
.nav-toggle{display:none}
.t-sun{display:none}
html.dark .t-moon,html[data-theme="dark"] .t-moon{display:none}
html.dark .t-sun,html[data-theme="dark"] .t-sun{display:block}

/* ---- THE RICH MENU. The engine (site-nav.cfm) prints:
     <nav id=site-nav class=site-nav><ul>
       <li><a href>Top</a></li>
       <li class="has-sub [is-here]">
         <button class="nav-par" aria-expanded="false" aria-controls=nav-sub-7>Label<svg class="nav-chev"/></button>
         <ul class="nav-sub" id=nav-sub-7><li><a href [aria-current=page]>Child</a></li>…</ul>
       </li></ul></nav>
   aria-expanded is the ONLY state: the cluster shows off that attribute and
   nothing else, so hover, click and keyboard cannot disagree. ------------ */
.site-nav{min-width:0}
.site-nav ul{display:flex;align-items:center;gap:.15rem;list-style:none;margin:0;padding:0}
.site-nav li{position:relative;margin:0}
.site-nav a,.site-nav .nav-par{display:flex;align-items:center;gap:.3rem;
  padding:.56rem .72rem;border:0;border-radius:var(--r-xs);background:none;cursor:pointer;
  font:600 .9rem/1.2 var(--font-display);color:var(--ink-700);text-decoration:none;white-space:nowrap}
.site-nav a:hover,.site-nav .nav-par:hover{color:var(--h1);background:var(--slate-soft)}
.site-nav a[aria-current="page"]{color:var(--accent-text);background:var(--accent-soft)}
.site-nav li.is-here>.nav-par,.site-nav .nav-par[aria-expanded="true"]{color:var(--accent-text)}
.site-nav li.is-here>.nav-par::after{content:"";position:absolute;left:.72rem;right:.72rem;bottom:-1px;
  height:2px;border-radius:2px;background:var(--accent)}
.nav-chev{width:14px;height:14px;flex:0 0 auto;transition:transform .18s;opacity:.65}
.nav-par[aria-expanded="true"] .nav-chev{transform:rotate(180deg);opacity:1}
.site-nav .nav-sub{display:none;position:absolute;top:100%;left:-.4rem;z-index:70;
  min-width:17rem;flex-direction:column;align-items:stretch;gap:0;margin:.4rem 0 0;padding:.45rem;list-style:none;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-pop)}
.site-nav .nav-par[aria-expanded="true"]+.nav-sub{display:flex}
.site-nav .nav-sub::before{content:"";position:absolute;left:0;right:0;top:-.4rem;height:.4rem}
.site-nav .nav-sub a{display:block;padding:.58rem .7rem;border-radius:var(--r-xs);
  font-weight:500;font-size:.9rem;color:var(--ink-700);white-space:normal}
.site-nav .nav-sub a:hover{background:var(--accent-soft);color:var(--accent-text)}
.site-nav .nav-sub a[aria-current="page"]{background:var(--accent-soft);color:var(--accent-text);font-weight:600}

/* mobile: ONE site_nav token for both breakpoints, so the engine's ids stay
   unique (v27 printed site_nav token twice and duplicated #site-nav plus every
   #nav-sub-N, which made the nav-par aria-controls ambiguous). ----------- */
.hdr-navwrap{display:contents}
.drawer-act{display:none}
@media (max-width:1199px){
  .hdr-navwrap{position:absolute;left:0;right:0;top:100%;display:block;max-height:0;overflow:hidden;
    background:var(--surface);border-bottom:1px solid transparent;transition:max-height .26s ease,border-color .2s}
  .hdr.nav-open .hdr-navwrap{max-height:min(78vh,760px);overflow:auto;border-bottom-color:var(--border);box-shadow:var(--sh-3)}
  .hdr-nav{display:block;padding:.5rem var(--gut) 0}
  .site-nav ul{flex-direction:column;align-items:stretch;gap:0}
  .site-nav li{position:static}
  .site-nav a,.site-nav .nav-par{width:100%;justify-content:space-between;padding:.8rem .25rem;
    font-size:1.02rem;border-bottom:1px solid var(--line-soft);border-radius:0}
  .site-nav li.is-here>.nav-par::after{display:none}
  .site-nav a[aria-current="page"]{background:none;box-shadow:inset 3px 0 0 var(--accent);padding-left:.75rem}
  .site-nav .nav-sub{position:static;min-width:0;margin:0;padding:.1rem 0 .55rem .9rem;
    border:0;border-radius:0;box-shadow:none;background:none}
  .site-nav .nav-sub a{border-bottom:0;padding:.55rem .25rem;font-size:.97rem;color:var(--ink-600)}
  .drawer-act{display:flex;flex-wrap:wrap;gap:.6rem;padding:1rem var(--gut) 1.4rem;
    margin-top:.6rem;border-top:1px solid var(--line-soft)}
  .drawer-act .btn{flex:1 1 12rem}
  .nav-toggle{display:inline-grid;place-items:center;width:42px;height:42px;padding:0;
    border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface);color:var(--h1);cursor:pointer}
  .nav-toggle svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round}
  .hdr-act .hdr-link,.hdr-act .btn-primary{display:none}
  .hdr{position:relative}
}
/* v33 patches, carried: the header collapses below 1200px because the rich
   menu on this door needs more room than 1024px gives it, and ABOVE 1200 the
   header row runs the full width of the viewport while every other band keeps
   the wrap measure - so the brand sits at the screen edge, not 370px inside
   it on a wide monitor. */
@media (min-width:1200px){
  .hdr{position:sticky}
  .hdr .hdr-in.wrap{max-width:var(--wrap);padding-inline:clamp(1.25rem,2.6vw,2.5rem)}
}
@media (max-width:460px){.brand svg{width:154px}}

/* ---- breadcrumb bar. breadcrumb token is EMPTY on a home page, so the bar must
   disappear rather than leave a 2.4rem grey stripe under the header. ----- */
.breadcrumb-bar{background:var(--surface);border-bottom:1px solid var(--border)}
.breadcrumb-bar:not(:has(a)):not(:has(li)):not(:has(span)){display:none}
.breadcrumb-inner{width:100%;max-width:var(--wrap);margin-inline:auto;padding:.62rem var(--gut)}
.breadcrumb-inner ol,.breadcrumb-inner ul{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;
  list-style:none;margin:0;padding:0}
.breadcrumb-inner li{display:flex;align-items:center;margin:0}
.breadcrumb-inner li+li::before{content:"/";padding:0 .45rem;color:var(--ink-400)}
.breadcrumb-inner a,.breadcrumb-inner span,.pg-breadcrumb a,.pg-breadcrumb span{
  font:500 .78rem/1.4 var(--font-ui);color:var(--muted);text-decoration:none}
.breadcrumb-inner a:hover,.pg-breadcrumb a:hover{color:var(--accent-text);text-decoration:underline}
.breadcrumb-inner [aria-current="page"],.pg-breadcrumb [aria-current="page"]{color:var(--ink-700);font-weight:600}
.pg-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem}
.pg-breadcrumb-sep{padding:0 .2rem;color:var(--ink-400)}

/* ---- the closing CTA band. Sits between body token and the footer on every
   page: the owner's rule is that no page is a dead end. ----------------- */
.closing{margin-top:var(--s8);background:var(--slate-deep);color:#e4ece9;position:relative;overflow:hidden}
.closing::before{content:"";position:absolute;inset:0;
  background:radial-gradient(60rem 28rem at 82% -10%,rgba(0,132,61,.34),transparent 62%)}
.closing-in{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:1.5rem var(--s6);
  padding:var(--s7) var(--gut)}
.closing-txt{flex:1 1 24rem;min-width:0}
.closing h2{color:#fff;font-size:clamp(1.5rem,1.2rem + 1vw,2.05rem);margin:0 0 .45rem}
.closing p{margin:0;color:#aebfba;font-size:1rem;max-width:52ch}
.closing-act{display:flex;flex-wrap:wrap;gap:.7rem;flex:0 0 auto}
.closing .btn-ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.34)}
.closing .btn-ghost:hover{background:rgba(255,255,255,.1);border-color:#fff;color:#fff}
.closing-fine{flex:1 1 100%;margin:0;padding-top:1rem;border-top:1px solid rgba(255,255,255,.12);
  color:#8fa39e;font-size:.78rem}

/* ---- mega footer ------------------------------------------------------- */
.site-footer{background:var(--ink-950);color:#b4c4bf}
html.dark .site-footer,html[data-theme="dark"] .site-footer{background:#050e11}
.footer-in{padding:var(--s8) var(--gut) var(--s5)}
.footer-grid{display:grid;grid-template-columns:1.6fr repeat(5,minmax(0,1fr));gap:var(--s6) var(--s5);
  padding-bottom:var(--s7);border-bottom:1px solid rgba(255,255,255,.1)}
.footer-brand .brand svg{width:208px}
.site-footer .brand svg path[fill="#213141"]{fill:#ffffff}
.footer-brand p{margin:1rem 0 0;max-width:34ch;font:400 .86rem/1.65 var(--font-read);color:#8fa39e}
.footer-badges{display:flex;flex-wrap:wrap;gap:.4rem;margin:1.1rem 0 0;padding:0;list-style:none}
.footer-badges li{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .6rem;
  border:1px solid rgba(255,255,255,.16);border-radius:var(--r-pill);
  font:600 .7rem/1.3 var(--font-display);letter-spacing:.04em;text-transform:uppercase;color:#c6d5d0}
.footer-badges svg{width:12px;height:12px;fill:none;stroke:var(--brand-300);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.footer-col h2{margin:0 0 .85rem;font:700 .72rem/1.3 var(--font-display);
  letter-spacing:.13em;text-transform:uppercase;color:#fff}
.footer-col ul{margin:0;padding:0;list-style:none}
.footer-col li{margin:0 0 .5rem}
.footer-col a{font:400 .86rem/1.5 var(--font-ui);color:#a7b9b4;text-decoration:none}
.footer-col a:hover{color:#fff;text-decoration:underline}
.footer-bottom{display:flex;flex-wrap:wrap;gap:.6rem 1.5rem;justify-content:space-between;
  padding-top:1.3rem;font-size:.76rem;color:#879a95}
.footer-bottom p{margin:0;color:#879a95;max-width:70ch}
.footer-bottom a{color:#a7b9b4}
@media (max-width:1100px){.footer-grid{grid-template-columns:1.4fr repeat(3,minmax(0,1fr))}}
@media (max-width:760px){.footer-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .footer-brand{grid-column:1 / -1}
  .footer-in{padding:var(--s7) var(--gut) var(--s4)}}
@media (max-width:420px){.footer-grid{grid-template-columns:1fr}}


/* ===========================================================================
   LAYER 3 of 8: the page - hero (every modifier slot-mapper can emit),
   the licence picker, content sections, prose, FAQ, contact form, ad slot.

   The markup here is NOT ours: Mother's slotTemplate and lib/slot-mapper.ts
   decide it. `hero.modifiers` can arrive as "", " content-hero--rule",
   " content-hero--compact", " content-hero--split" or a pair, so each
   modifier has to be independently harmless.
   =========================================================================== */

/* ---- THE BANNER. The three migrated doors each do one half of this well:
   SWIFT has the pill + split headline + stat row, HAWKEYE the clean stat
   hero, the owner's saved template the dark ruled band. This is all three:
   a soft brand wash, an eyebrow, a big display h1, a reading-face lede, two
   actions, trust ticks, then the licence picker as cards. ---------------- */
.content-hero{position:relative;margin-inline:0;border-radius:var(--r-lg);overflow:hidden;padding:clamp(2.5rem,5vw,4.5rem) clamp(1.5rem,3.5vw,3rem) clamp(2rem,4vw,3.25rem);
  background:
    radial-gradient(44rem 22rem at 88% -14%,var(--brand-100),transparent 66%),
    linear-gradient(180deg,var(--brand-50) 0%,var(--surface) 62%,var(--bg) 100%);
  border-bottom:1px solid var(--border);overflow:hidden}
html.dark .content-hero,html[data-theme="dark"] .content-hero{
  background:radial-gradient(44rem 22rem at 88% -14%,rgba(0,132,61,.22),transparent 64%),
    linear-gradient(180deg,#0e2024 0%,var(--bg) 78%)}
.content-hero::after{content:"";position:absolute;right:-12rem;top:-16rem;width:34rem;height:34rem;
  border:1px solid var(--brand-100);border-color:color-mix(in srgb,var(--accent) 16%,transparent);border-radius:50%;
  box-shadow:0 0 0 3rem rgba(0,132,61,.05);box-shadow:0 0 0 3rem color-mix(in srgb,var(--accent) 5%,transparent);pointer-events:none}
.hero-grid{position:relative;display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr);
  gap:clamp(1.75rem,4vw,3.5rem);align-items:center;max-width:var(--wrap);margin-inline:auto}
.hero-copy{display:flex;flex-direction:column;align-items:flex-start;gap:1.1rem;min-width:0}
.content-hero h1{max-width:22ch}
.content-hero .lede{max-width:46ch;color:var(--ink-muted)}
.hero-media-col{min-width:0}
/* no hero image on this page -> the copy takes the full width instead of
   leaving a 40% hole (the shape v27 left on every page without an asset) */
.hero-grid:has(.hero-media-col:empty){grid-template-columns:minmax(0,1fr)}
.hero-grid:has(.hero-media-col:empty) .content-hero h1{max-width:26ch}
.hero-grid:has(.hero-media-col:empty) .content-hero .lede{max-width:60ch}
.hero-grid:has(.hero-media-col:empty) .hero-media-col{display:none}

/* the framed hero asset. Father emits a bare <img class="pg-hero-media"> with
   width/height, so the frame is CSS only and the reserved box never jumps. */
.pg-hero-media,.hero-art{display:block;width:100%;height:auto;border-radius:var(--r-lg)}
.hero-media-col .pg-hero-media{box-shadow:var(--sh-3);border:1px solid var(--border);
  background:var(--surface-2);aspect-ratio:16/9;object-fit:cover}
.hero-figure{position:relative;margin:0;padding:0}
.hero-figure .hero-art{border:1px solid var(--border);box-shadow:var(--sh-3)}
.hero-figure figcaption{margin-top:.6rem;font:400 .8rem/1.5 var(--font-ui);color:var(--muted)}
.content-hero--split .hero-grid{grid-template-columns:minmax(0,1.02fr) minmax(0,.98fr)}
.content-hero--rule{border-top:3px solid var(--accent)}
.content-hero--compact{padding-top:clamp(1.9rem,3.4vw,3rem);padding-bottom:clamp(1.5rem,3vw,2.4rem)}
.content-hero--compact h1{font-size:clamp(1.95rem,1.3rem + 2.2vw,2.9rem)}
.content-hero--plain{background:none;border-bottom:0}

/* the hero's action row (slot-mapper: hero.cta-block) + scroll_to_content token */
.hero-cta-wrap,.pg-hero-cta-row{display:flex;flex-wrap:wrap;align-items:center;gap:.85rem 1.1rem;margin:.35rem 0 0}
.hero-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin:.35rem 0 0}

/* hero trust row. slot-mapper emits <div class="hero-trust"><span class="pill"><i></i>text</span>…,
   the DEFAULT package emits .pg-chip/.pg-chip-tick - both are tick pills. */
.hero-trust,.pg-hero-stats{display:flex;flex-wrap:wrap;gap:.5rem .9rem;margin:.3rem 0 0;padding:0;list-style:none}
.hero-trust .pill,.pg-chip{display:inline-flex;align-items:center;gap:.45rem;
  padding:.36rem .72rem .36rem .5rem;border:1px solid var(--good-line);border-radius:var(--r-pill);
  background:var(--good-soft);font:600 .8rem/1.3 var(--font-display);color:var(--good)}
.hero-trust .pill i,.pg-chip-tick{position:relative;width:1rem;height:1rem;flex:0 0 auto;
  border-radius:50%;background:var(--good);display:inline-block}
.hero-trust .pill i::after,.pg-chip-tick::after{content:"";position:absolute;left:.26rem;top:.3rem;
  width:.3rem;height:.16rem;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg)}
.pg-chip-tick::after{border-color:#fff}

/* hero facts / stat tiles - the figure band HAWKEYE gets right. slot-mapper:
   .hero-facts > .hero-fact > b + span ; DEFAULT package: .pg-hero-stat */
.hero-facts,.pg-hero-stats.is-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(8.5rem,1fr));
  gap:0;width:100%;margin:1.1rem 0 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.hero-fact,.pg-hero-stat{padding:1rem 1.1rem 1rem 0;border-right:1px solid var(--border)}
.hero-fact:last-child,.pg-hero-stat:last-child{border-right:0}
.hero-fact b,.pg-hero-stat b,.pg-hero-stat strong{display:block;font:800 clamp(1.3rem,1.1rem + .6vw,1.65rem)/1.1 var(--font-display);
  letter-spacing:-.03em;color:var(--h1)}
.hero-fact span,.pg-hero-stat span{display:block;margin-top:.2rem;font-size:.82rem;color:var(--muted)}
.pg-hero-eyebrow{display:flex;align-items:center;gap:.6rem;margin:0;
  font:700 .72rem/1.2 var(--font-display);letter-spacing:.15em;text-transform:uppercase;color:var(--accent-text)}
.pg-hero-h1{font-family:var(--font-display);font-weight:800;letter-spacing:-.034em;line-height:1.04;
  font-size:clamp(2.1rem,1.25rem + 3.1vw,3.6rem);color:var(--h1);margin:0}
.pg-hero-desc{margin:0;font:400 clamp(1.05rem,.98rem + .35vw,1.28rem)/1.62 var(--font-read);color:var(--ink-muted);max-width:56ch}
.pg-hero-italic{margin:.3rem 0 0;font:italic 400 1rem/1.6 var(--font-read);color:var(--muted);max-width:56ch}
.pg-verify{display:inline-flex;align-items:center;gap:.5rem;padding:.4rem .8rem;border-radius:var(--r-pill);
  background:var(--info-soft);border:1px solid var(--info-line);color:var(--info);font-size:.8rem;font-weight:600}
.pg-verify-label{font:700 .68rem/1.2 var(--font-display);letter-spacing:.12em;text-transform:uppercase}

/* ---- THE LICENCE PICKER (Mother's hero `stream-row` nav). Four doors into
   the product, as cards with real line icons - no emoji, nothing stocky. -- */
.stream-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(13.5rem,1fr));gap:.75rem;
  width:100%;margin:1.5rem 0 0}
.stream-card{display:flex;align-items:flex-start;gap:.8rem;padding:1rem 1.05rem;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r);
  box-shadow:var(--sh-1);text-decoration:none;color:inherit;
  transition:border-color .18s,box-shadow .18s,transform .18s}
.stream-card:hover{border-color:var(--accent);box-shadow:var(--sh-2);transform:translateY(-2px);color:inherit}
.stream-ic{display:grid;place-items:center;flex:0 0 auto;width:2.5rem;height:2.5rem;border-radius:var(--r-sm);
  background:var(--accent-soft);color:var(--accent-deep)}
.stream-ic svg{width:1.35rem;height:1.35rem;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.stream-tx{min-width:0}
.stream-t{display:block;font:700 .97rem/1.3 var(--font-display);color:var(--h1);letter-spacing:-.014em}
.stream-s{display:block;margin-top:.15rem;font-size:.8rem;line-height:1.45;color:var(--muted)}
.stream-card--moto .stream-ic{background:#eaf0f7;color:#1e3a5f}
.stream-card--truck .stream-ic{background:#f6efe7;color:#8a4b1f}
.stream-card--hpt .stream-ic{background:#f1ecfb;color:var(--prem)}
html.dark .stream-card--moto .stream-ic,html[data-theme="dark"] .stream-card--moto .stream-ic{background:#13242f;color:#8fbbe2}
html.dark .stream-card--truck .stream-ic,html[data-theme="dark"] .stream-card--truck .stream-ic{background:#2a1f14;color:#e0ab72}
html.dark .stream-card--hpt .stream-ic,html[data-theme="dark"] .stream-card--hpt .stream-ic{background:#1c1735;color:#a894f2}
/* fallback: if a plain <a> list ever reaches this nav, it still reads as a row */
.stream-row>a:not(.stream-card){display:inline-flex;align-items:center;gap:.4rem;padding:.7rem .95rem;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r-pill);
  font:600 .9rem/1.2 var(--font-display);color:var(--h1);text-decoration:none}

/* ---- the content region + section cards ------------------------------- */
.content-region{padding:clamp(1.75rem,3.5vw,2.75rem) 0 clamp(2.5rem,5vw,4rem)}
.content-region>.inner{display:flex;flex-direction:column;gap:clamp(1rem,2vw,1.5rem)}
.faq-region{padding-bottom:clamp(2rem,4vw,3rem)}
.block:empty{display:none}

.pg-section{position:relative}
.pg-section--content,.pg-section--faq,.pg-section--contact{
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);
  box-shadow:var(--sh-1);padding:clamp(1.4rem,3vw,2.5rem) clamp(1.25rem,3vw,2.75rem)}
.pg-section--content>*+*,.pg-section--faq>*+*,.pg-section--contact>*+*{margin-top:1rem}
.pg-section>h2{padding-top:.1rem;max-width:34ch}
.pg-section>h2::before{content:none}
.content-region .pg-section--content>h2::before{content:counter(sec,decimal-leading-zero);display:block;font:800 .72rem/1 var(--font-display);letter-spacing:.16em;color:var(--accent-text);margin-bottom:.6rem}
.pg-section h3{margin-top:1.5rem}
.pg-section h3+*{margin-top:.45rem}

/* prose: the reading face, a real measure, and links that look like links */
.pg-section--content>p,.pg-section--content ul:not([class])>li,.pg-section--content ol:not([class])>li,.pg-section--faq dd,.pg-section blockquote{
  font-family:var(--font-read);font-size:1.0325rem;line-height:1.74;color:var(--ink)}
.pg-section--content>p,.pg-section--content>ul:not([class]),.pg-section--content>ol:not([class]),.pg-section--content>blockquote{max-width:var(--read-w)}
.pg-section--content>p+p{margin-top:.9rem}
.pg-section--content ul:not([class]),.pg-section--content ol:not([class]){margin:1rem 0 0;padding-left:1.35rem}
.pg-section--content ul:not([class])>li+li,.pg-section--content ol:not([class])>li+li{margin-top:.4rem}
.pg-section--content ul:not([class])>li::marker,.pg-section--content ol:not([class])>li::marker{color:var(--accent)}
/* PROSE links only. v27 underlined every <a> in a section, which is how the
   verdict block's own `.btn.btn-primary` lost its white label and the topic
   cards grew underlines: a .pg-section--content a rule outranks .btn-primary.
   So the prose contexts are named, and no component link is touched. */
.pg-section--content>p a,.pg-section--content>ul:not([class]) a,
.pg-section--content>ol:not([class]) a,.pg-section--content>blockquote a,
.pg-section--content>table a,.pg-faq dd a,.cr-lead a,.cr-step-t p a,
.cr-method p a,.cr-card>p a,.cr-callout p a,.cr-def-body a,.cr-tl-card>p a{
  color:var(--accent-text);font-weight:500;text-decoration:underline;
  text-decoration-color:var(--accent);text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent)}
.pg-section--content>p a:hover,.pg-faq dd a:hover,.cr-lead a:hover,
.cr-callout p a:hover,.cr-def-body a:hover{text-decoration-color:var(--accent)}
.pg-section--content blockquote{margin:1.25rem 0 0;padding:.25rem 0 .25rem 1.1rem;
  border-left:3px solid var(--accent);font-style:italic;color:var(--ink-muted)}
.pg-section--content strong,.pg-section--content b{font-weight:600;color:var(--h1)}
.pg-section--content table{margin:1.25rem 0 0;font-size:.95rem;display:block;overflow-x:auto}
.pg-section--content th,.pg-section--content td{padding:.65rem .8rem;border-bottom:1px solid var(--line-soft);text-align:left;vertical-align:top}
.pg-section--content th{font:700 .8rem/1.3 var(--font-display);letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-600);background:var(--zone);border-bottom-color:var(--border)}
.pg-section--content img{border-radius:var(--r);border:1px solid var(--border)}

/* ---- FAQ. The engine prints <dl class="pg-faq"><dt>/<dd>; the shared JS
   below promotes it to an accordion (role=button + aria-expanded + hidden),
   so the closed state must style the dt as a control. ------------------- */
.pg-faq{margin:0}
.pg-faq dt{padding:1.05rem 0 .5rem;font:600 1.04rem/1.45 var(--font-display);color:var(--h1);
  border-top:1px solid var(--line-soft)}
.pg-faq dt:first-child{border-top:0}
.pg-faq dd{margin:0 0 1rem;max-width:var(--read-w);color:var(--ink-muted)}
.pg-faq--acc dt{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;
  padding:1.05rem 0;cursor:pointer;list-style:none}
.pg-faq--acc dt::after{content:"";flex:0 0 auto;width:.6rem;height:.6rem;margin-top:.45rem;
  border-right:2px solid var(--accent);border-bottom:2px solid var(--accent);
  transform:rotate(45deg);transition:transform .2s}
.pg-faq--acc dt[aria-expanded="true"]{color:var(--accent-text)}
.pg-faq--acc dt[aria-expanded="true"]::after{transform:rotate(-135deg)}
.pg-faq--acc dt:hover{color:var(--accent-text)}
.pg-faq--acc dd{padding-bottom:.4rem}

/* ---- the shared contact form (renderContactForm, one per estate). Styled
   by element, not by class, so a change in that shared block cannot leave
   THUNDER with unstyled inputs. ----------------------------------------- */
.pg-section--contact form{display:grid;gap:1rem;max-width:40rem}
.pg-section--contact label{display:block;font:600 .85rem/1.4 var(--font-display);color:var(--ink-700);margin-bottom:.35rem}
.pg-section--contact input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="submit"]),
.pg-section--contact textarea,.pg-section--contact select{
  width:100%;padding:.72rem .85rem;background:var(--surface-2);color:var(--ink);
  border:1px solid var(--border-mid);border-radius:var(--r-sm);font:400 1rem/1.5 var(--font-ui)}
.pg-section--contact textarea{min-height:9rem;resize:vertical}
.pg-section--contact input:focus,.pg-section--contact textarea:focus,.pg-section--contact select:focus{
  border-color:var(--accent);outline:0;box-shadow:var(--ring)}
.pg-section--contact button,.pg-section--contact input[type="submit"]{
  justify-self:start;display:inline-flex;align-items:center;gap:.5rem;min-height:48px;padding:.78rem 1.4rem;
  background:var(--cta);color:var(--cta-ink);border:1px solid var(--cta);border-radius:var(--r-sm);
  font:600 .975rem/1.2 var(--font-display);cursor:pointer}
.pg-section--contact button:hover,.pg-section--contact input[type="submit"]:hover{background:var(--brand-700);border-color:var(--brand-700)}
.pg-section--contact small,.pg-section--contact .fine{color:var(--muted);font-size:.8rem}

/* ---- the reserved ad slot (AD_REVENUE_POLICY: labelled, height reserved) */
.ad-unit{min-height:112px;margin:var(--s5) 0;padding:.55rem;display:flex;flex-direction:column;gap:.4rem;
  background:var(--zone);border:1px solid var(--line-soft);border-radius:var(--r)}
.ad-unit .lab{justify-content:center;color:var(--muted);font-size:.62rem;letter-spacing:.2em}
.ad-unit .lab::before{display:none}
.ad-unit ins{flex:1 1 auto;min-height:90px}


/* ===========================================================================
   LAYER 4 of 8: the BLOCK COMPONENTS. Every class lib/content-blocks.ts can
   emit, in the order that file emits them. The DOM shapes below are quoted
   from that file - this layer is written against the renderer, not against a
   mock-up, which is why v27 had 52 of these unstyled: nobody had read it.
   Icons are the renderer's own inline stroke SVGs (zero emoji, by design).
   =========================================================================== */

/* shared: every chip icon and every .i / .arr the renderer emits */
.pg-section svg,.cr-card-chip svg,.cr-ss-ic svg,.cr-sm-badge svg,.cr-vd-chip svg,.cr-vd-badge svg,.cr-tl-time svg{
  fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.cr-lead{margin:0 0 1.25rem;max-width:var(--read-w);
  font:400 1.08rem/1.7 var(--font-read);color:var(--ink-muted)}

/* ---- stat-band: <div class="cr-stats"><div class="cr-stat"><span .cr-stat-v/-l/-n> */
.cr-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));gap:.75rem;margin:1.25rem 0 0}
.cr-stat{padding:1.25rem 1.3rem;background:var(--zone);border:1px solid var(--line-soft);
  border-radius:var(--r);border-top:3px solid var(--accent)}
.cr-stat-v{display:block;font:800 clamp(1.4rem,1.2rem + .7vw,1.85rem)/1.05 var(--font-display);
  letter-spacing:-.035em;color:var(--h1);font-variant-numeric:tabular-nums}
.cr-stat-l{display:block;margin-top:.3rem;font:600 .92rem/1.4 var(--font-display);color:var(--ink-700)}
.cr-stat-n{display:block;margin-top:.3rem;font-size:.8rem;line-height:1.5;color:var(--muted)}

/* ---- steps, numbered: <ol class="cr-steps"><li class="cr-step"><span class="cr-step-n">n</span><div class="cr-step-t"> */
.cr-steps{display:grid;gap:.7rem;margin:1.25rem 0 0;padding:0;list-style:none;counter-reset:none}
.cr-step{display:grid;grid-template-columns:2.5rem minmax(0,1fr);gap:1rem;align-items:start;
  padding:1.15rem 1.25rem;background:var(--surface-2);border:1px solid var(--line-soft);border-radius:var(--r)}
.cr-step-n{display:grid;place-items:center;width:2.35rem;height:2.35rem;border-radius:var(--r-sm);
  background:var(--accent-soft);color:var(--accent-deep);
  font:800 1rem/1 var(--font-display);font-variant-numeric:tabular-nums}
.cr-step-t{min-width:0}
.cr-step-t h3{margin:.15rem 0 .3rem;font-size:1.06rem}
.cr-step-t p{margin:0;font-family:var(--font-read);font-size:1rem;line-height:1.68;color:var(--ink-muted)}

/* ---- steps WITH icons -> the method list: <ul class="cr-method"><li><span class="cr-m-ic">chip</span><div> */
.cr-method{display:grid;gap:.7rem;margin:1.25rem 0 0;padding:0;list-style:none}
.cr-method>li{display:grid;grid-template-columns:2.9rem minmax(0,1fr);gap:1rem;align-items:start;
  padding:1.15rem 1.25rem;background:var(--surface-2);border:1px solid var(--line-soft);border-radius:var(--r)}
.cr-m-ic{display:block}
.cr-method h3{margin:.1rem 0 .3rem;font-size:1.06rem}
.cr-method p{margin:0;font-family:var(--font-read);font-size:1rem;line-height:1.68;color:var(--ink-muted)}

/* ---- the shared card chip (cardChip(), used by cards, method, topic-grid,
   pass-marks topics). Always a real SVG, never empty, never emoji. ------- */
.cr-card-chip{display:grid;place-items:center;width:2.6rem;height:2.6rem;border-radius:var(--r-sm);
  background:var(--accent-soft);color:var(--accent-deep);flex:0 0 auto}
.cr-card-chip svg{width:1.35rem;height:1.35rem;stroke-width:1.8}

/* ---- cards: <div class="cr-cards cr-cards--nN"><div class="cr-card">chip h3 p */
.cr-cards{display:grid;gap:.8rem;margin:1.25rem 0 0}
.cr-cards--n1{grid-template-columns:minmax(0,1fr)}
.cr-cards--n2,.cr-cards--n4{grid-template-columns:repeat(2,minmax(0,1fr))}
.cr-cards--n3,.cr-cards--n5,.cr-cards--n6,.cr-cards--n7,.cr-cards--n8,.cr-cards--n9,
.cr-cards--n10,.cr-cards--n11,.cr-cards--n12{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr))}
.cr-card{padding:1.3rem 1.35rem;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r);box-shadow:var(--sh-1);transition:border-color .18s,box-shadow .18s,transform .18s}
.cr-card>.cr-card-chip{margin-bottom:.9rem}
.cr-card h3{margin:0 0 .4rem;font-size:1.05rem}
.cr-card p{margin:0;font-family:var(--font-read);font-size:.985rem;line-height:1.66;color:var(--ink-muted)}
a.cr-card,.cr-cat--link{text-decoration:none;color:inherit;display:block}
a.cr-card:hover,.cr-cat--link:hover{border-color:var(--accent);box-shadow:var(--sh-2);transform:translateY(-2px);color:inherit}

/* ---- category cards (road-signs library). The renderer sets some inline
   styles on this family; everything else is ours. ----------------------- */
.cr-cards--cat{grid-template-columns:repeat(auto-fit,minmax(16rem,1fr))}
.cr-cat{position:relative}
.cr-cat-head{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}
.cr-cat-head h3{margin:0}
.cr-cat-right{display:flex;flex-direction:column;align-items:flex-end;gap:.3rem;flex:0 1 auto;min-width:0;max-width:100%}
.cr-cat-meta{white-space:normal;text-align:right}
.cr-cat-meta{font:700 .66rem/1.2 var(--font-display);letter-spacing:.11em;text-transform:uppercase;color:var(--muted)}
.cr-cat-badge{display:inline-flex;align-items:center;padding:.18rem .5rem;border-radius:var(--r-pill);
  border:1px solid var(--line-soft);background:var(--zone);
  font:700 .66rem/1.35 var(--font-display);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-600)}
.cr-cat-badge--info{background:var(--info-soft);border-color:var(--info-line);color:var(--info)}
.cr-cat-badge--success,.cr-cat-badge--good,.cr-cat-badge--pass{background:var(--good-soft);border-color:var(--good-line);color:var(--good)}
.cr-cat-badge--warn,.cr-cat-badge--warning{background:var(--warn-soft);border-color:var(--warn-line);color:var(--warn)}
.cr-cat-badge--danger,.cr-cat-badge--bad,.cr-cat-badge--fail{background:var(--bad-soft);border-color:var(--bad-line);color:var(--bad)}
.cr-cat-badge--neutral,.cr-cat-badge--muted{background:var(--zone);border-color:var(--line-soft);color:var(--muted)}
.cr-cat-badge--brand,.cr-cat-badge--new,.cr-cat-badge--premium{background:var(--accent-soft);border-color:var(--good-line);color:var(--accent-deep)}
.cr-cat-thumb{display:grid;place-items:center;width:4.25rem;height:4.25rem;border-radius:var(--r-sm);
  background:var(--zone);border:1px solid var(--line-soft);overflow:hidden}
.cr-cat-thumb img,.cr-cat-thumb svg{width:100%;height:100%;object-fit:contain;padding:.3rem}
.cr-cat p{margin-top:.3rem}
@media (max-width:640px){.cr-cat-head{flex-wrap:wrap}.cr-cat-right{align-items:flex-start;flex-basis:100%}.cr-cat-meta{text-align:left}.cr-cat-meta,.cr-cat-badge{font-size:.74rem;letter-spacing:.08em}}

/* ---- callout: <aside class="cr-callout cr-callout--VARIANT"><h3><p> ---- */
.cr-callout{margin:1.35rem 0 0;padding:1.15rem 1.3rem;border-radius:var(--r);
  border:1px solid var(--info-line);border-left-width:4px;background:var(--info-soft)}
.cr-callout h3{margin:0 0 .3rem;font-size:1.02rem;color:var(--h1)}
.cr-callout p{margin:0;font-family:var(--font-read);font-size:1rem;line-height:1.68;color:var(--ink-muted)}
.cr-callout--info{border-color:var(--info-line);background:var(--info-soft)}
.cr-callout--note,.cr-callout--tip{border-color:var(--line-soft);background:var(--zone)}
.cr-callout--warn,.cr-callout--warning,.cr-callout--caution{border-color:var(--warn-line);background:var(--warn-soft)}
.cr-callout--warn h3,.cr-callout--warning h3{color:var(--warn)}
.cr-callout--success,.cr-callout--good,.cr-callout--reassure{border-color:var(--good-line);background:var(--good-soft)}
.cr-callout--success h3,.cr-callout--good h3,.cr-callout--reassure h3{color:var(--good)}
.cr-callout--danger,.cr-callout--error{border-color:var(--bad-line);background:var(--bad-soft)}
.cr-callout--danger h3,.cr-callout--error h3{color:var(--bad)}

/* ---- definition: <div class="cr-definition"><span .cr-def-term><p .cr-def-body><p .cr-def-note> */
.cr-definition{margin:1.35rem 0 0;padding:1.1rem 1.3rem;background:var(--zone);
  border-left:4px solid var(--accent);border-radius:0 var(--r) var(--r) 0}
.cr-def-term{display:block;margin-bottom:.3rem;font:700 1rem/1.4 var(--font-display);
  letter-spacing:-.012em;color:var(--h1)}
.cr-def-body{margin:0;font-family:var(--font-read);font-size:1rem;line-height:1.7;color:var(--ink)}
.cr-def-note{margin:.5rem 0 0;font-size:.85rem;line-height:1.6;color:var(--muted)}

/* ---- score-matrix: rows of label + badge + track(fill,tick) + 0..max scale */
.cr-score-matrix{display:grid;gap:.8rem;margin:1.25rem 0 0}
.cr-sm-row{padding:1rem 1.15rem;background:var(--surface-2);border:1px solid var(--line-soft);border-radius:var(--r)}
.cr-sm-row--pass{border-color:var(--good-line);background:var(--good-soft)}
.cr-sm-row--fail{border-color:var(--bad-line);background:var(--bad-soft)}
.cr-sm-top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem .9rem;margin-bottom:.7rem}
.cr-sm-label{font:600 .98rem/1.35 var(--font-display);color:var(--h1)}
.cr-sm-badge{display:inline-flex;align-items:center;gap:.4rem;padding:.26rem .65rem;border-radius:var(--r-pill);
  background:var(--surface);border:1px solid var(--border);
  font:600 .8rem/1.3 var(--font-display);color:var(--ink-700);font-variant-numeric:tabular-nums}
.cr-sm-badge svg{width:.95rem;height:.95rem;stroke-width:2.4}
.cr-sm-badge--pass{border-color:var(--good-line);color:var(--good)}
.cr-sm-badge--fail{border-color:var(--bad-line);color:var(--bad)}
.cr-sm-track{position:relative;height:.65rem;border-radius:var(--r-pill);overflow:hidden;
  background:#cfd8d5;background:color-mix(in srgb,var(--ink-400) 26%,transparent)}
.cr-sm-fill{display:block;height:100%;border-radius:var(--r-pill);background:var(--accent)}
.cr-sm-row--fail .cr-sm-fill{background:var(--bad)}
.cr-sm-row--pass .cr-sm-fill{background:var(--good)}
.cr-sm-tick{position:absolute;top:-.22rem;bottom:-.22rem;width:2px;border-radius:2px;
  background:var(--ink-900);transform:translateX(-1px)}
html.dark .cr-sm-tick,html[data-theme="dark"] .cr-sm-tick{background:var(--ink-900)}
.cr-sm-scale{display:flex;justify-content:space-between;margin-top:.3rem;
  font:600 .7rem/1.2 var(--font-display);color:var(--muted);font-variant-numeric:tabular-nums}
.cr-sm-total{margin:.3rem 0 0;font:600 .95rem/1.5 var(--font-display);color:var(--h1)}
.cr-sm-note{margin:.3rem 0 0;font-size:.85rem;line-height:1.6;color:var(--muted)}

/* ---- source-strip: <aside class="cr-source-strip"><div class="cr-ss-row"><span class="cr-ss-ic"> */
.cr-source-strip{display:grid;gap:.55rem;margin:1.5rem 0 0;padding:1.1rem 1.25rem;
  background:var(--zone);border:1px solid var(--line-soft);border-radius:var(--r);border-top:2px solid var(--border-mid)}
.cr-ss-row{display:grid;grid-template-columns:1.35rem minmax(0,1fr);gap:.65rem;align-items:start;
  font-size:.88rem;line-height:1.6;color:var(--ink-muted)}
.cr-ss-ic{display:grid;place-items:start center;color:var(--accent-deep);padding-top:.1rem}
.cr-ss-ic svg{width:1.1rem;height:1.1rem;stroke-width:1.9}
.cr-ss-row strong{color:var(--h1);font-weight:600}
.cr-ss-row a{color:var(--accent-text);font-weight:500}

/* ---- timeline: <ol class="cr-timeline"><li class="cr-tl-node">
       <div class="cr-tl-rail"><span class="cr-tl-day"></div>
       <div class="cr-tl-card"><div class="cr-tl-head"><h3>+<span class="cr-tl-time">
       <p> <a class="cr-tl-cta"> ------------------------------------------- */
.cr-timeline{display:grid;gap:0;margin:1.25rem 0 0;padding:0;list-style:none}
.cr-tl-node{display:grid;grid-template-columns:4.75rem minmax(0,1fr);gap:1rem;position:relative;padding-bottom:.85rem}
.cr-tl-node::before{content:"";position:absolute;left:2.35rem;top:2.3rem;bottom:-.1rem;width:2px;background:var(--border)}
.cr-tl-node:last-child{padding-bottom:0}
.cr-tl-node:last-child::before{display:none}
.cr-tl-rail{display:flex;justify-content:center;padding-top:.15rem}
.cr-tl-day{display:grid;place-items:center;width:3.6rem;min-height:2rem;padding:.3rem .4rem;border-radius:var(--r-pill);
  background:var(--accent-soft);border:1px solid var(--good-line);color:var(--accent-deep);
  font:700 .78rem/1.2 var(--font-display);text-align:center}
.cr-tl-card{min-width:0;padding:1.05rem 1.2rem;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r);box-shadow:var(--sh-1)}
.cr-tl-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.35rem .9rem}
.cr-tl-head h3{margin:0;font-size:1.03rem}
.cr-tl-time{display:inline-flex;align-items:center;gap:.35rem;flex:0 0 auto;
  font:600 .78rem/1.3 var(--font-display);color:var(--muted)}
.cr-tl-time svg{width:.9rem;height:.9rem}
.cr-tl-card p{margin:.4rem 0 0;font-family:var(--font-read);font-size:.985rem;line-height:1.66;color:var(--ink-muted)}
.cr-tl-cta{display:inline-flex;align-items:center;gap:.4rem;margin-top:.7rem;
  font:600 .88rem/1.2 var(--font-display);color:var(--accent-text);text-decoration:none}
.cr-tl-cta:hover{text-decoration:underline}

/* ---- figure: <figure class="cr-figure [cr-illus-band]"><img><figcaption> - */
.cr-figure{margin:1.5rem 0 0}
.cr-figure img{display:block;width:100%;border-radius:var(--r);border:1px solid var(--border);background:var(--zone)}
.cr-figure figcaption{margin-top:.6rem;font:400 .83rem/1.55 var(--font-ui);color:var(--muted);max-width:60ch}
.cr-illus-band{margin-inline:calc(var(--gut) * -1);padding:1.5rem var(--gut);background:var(--zone);
  border-top:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft);border-radius:0}
.cr-illus-band img{border-radius:var(--r-lg);box-shadow:var(--sh-2)}

/* ---- topic-grid: <ul class="cr-topic-grid"><li class="cr-topic-cell">
       <a class="cr-topic cr-topic--link"> chip + .cr-topic-tt + .cr-topic-bd + .cr-topic-tag */
.cr-topic-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));gap:.7rem;
  margin:1.25rem 0 0;padding:0;list-style:none}
.cr-topic-cell{margin:0;display:flex}
.cr-topic{position:relative;display:flex;flex-direction:column;gap:.5rem;width:100%;
  padding:1.1rem 1.15rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);
  box-shadow:var(--sh-1);text-decoration:none;color:inherit;transition:border-color .18s,box-shadow .18s,transform .18s}
.cr-topic--link:hover{border-color:var(--accent);box-shadow:var(--sh-2);transform:translateY(-2px);color:inherit}
.cr-topic .cr-card-chip{width:2.3rem;height:2.3rem}
.cr-topic-tt{font:700 .98rem/1.32 var(--font-display);letter-spacing:-.014em;color:var(--h1)}
.cr-topic-bd{font-family:var(--font-read);font-size:.9rem;line-height:1.6;color:var(--ink-muted)}
.cr-topic-tag{align-self:flex-start;margin-top:auto;padding:.2rem .55rem;border-radius:var(--r-pill);
  background:var(--accent-soft);color:var(--accent-deep);
  font:700 .66rem/1.4 var(--font-display);letter-spacing:.09em;text-transform:uppercase}
.cr-topic--link::after{content:"";position:absolute;right:1rem;top:1.2rem;width:.45rem;height:.45rem;
  border-top:2px solid var(--ink-400);border-right:2px solid var(--ink-400);transform:rotate(45deg);transition:border-color .18s,transform .18s}
.cr-topic--link:hover::after{border-color:var(--accent);transform:rotate(45deg) translate(2px,-2px)}

/* ---- verdict: <div class="cr-verdict cr-verdict--pass|fail">
       .cr-vd-head(.cr-vd-badge + .cr-vd-headings(.cr-vd-state + .cr-vd-body))
       .cr-vd-chips(.cr-vd-chip--pass|fail) .cr-vd-missed .cr-vd-cta ------ */
.cr-verdict{margin:1.35rem 0 0;padding:1.35rem 1.45rem;border-radius:var(--r-lg);
  border:1px solid var(--border);background:var(--surface);box-shadow:var(--sh-1)}
.cr-verdict--pass{border-color:var(--good-line);background:var(--good-soft)}
.cr-verdict--fail{border-color:var(--warn-line);background:var(--warn-soft)}
.cr-vd-head{display:grid;grid-template-columns:3rem minmax(0,1fr);gap:1rem;align-items:start}
.cr-vd-badge{display:grid;place-items:center;width:3rem;height:3rem;border-radius:50%;
  background:var(--surface);border:1px solid currentColor;color:var(--good)}
.cr-verdict--fail .cr-vd-badge{color:var(--warn)}
.cr-vd-badge svg{width:1.5rem;height:1.5rem;stroke-width:2.2}
.cr-vd-headings{min-width:0}
.cr-vd-state{display:block;font:800 clamp(1.2rem,1.05rem + .5vw,1.5rem)/1.2 var(--font-display);
  letter-spacing:-.025em;color:var(--h1)}
.cr-vd-body{margin:.4rem 0 0;font-family:var(--font-read);font-size:1rem;line-height:1.66;color:var(--ink-muted)}
.cr-vd-chips{display:flex;flex-wrap:wrap;gap:.45rem;margin:1rem 0 0}
.cr-vd-chip{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .7rem;border-radius:var(--r-pill);
  background:var(--surface);border:1px solid var(--border);font:600 .82rem/1.3 var(--font-display)}
.cr-vd-chip svg{width:.95rem;height:.95rem;stroke-width:2.4}
.cr-vd-chip--pass{border-color:var(--good-line);color:var(--good)}
.cr-vd-chip--fail{border-color:var(--bad-line);color:var(--bad)}
.cr-vd-missed{margin:1rem 0 0;padding:.9rem 1.05rem;background:var(--surface);
  border:1px solid var(--border);border-radius:var(--r)}
.cr-vd-missed-l{display:block;margin-bottom:.4rem;font:700 .68rem/1.2 var(--font-display);
  letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.cr-vd-missed ul{display:flex;flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none}
.cr-vd-missed li{margin:0}
.cr-vd-missed a{display:inline-block;padding:.26rem .65rem;border-radius:var(--r-pill);
  background:var(--accent-soft);color:var(--accent-deep);font:600 .82rem/1.35 var(--font-display);text-decoration:none}
.cr-vd-missed a:hover{background:var(--brand-200);color:var(--brand-800)}
.cr-vd-cta{margin-top:1rem}


/* ===========================================================================
   LAYER 5 of 8: the PRODUCT surfaces.
   (a) the pass-mark scorecard (content-blocks `pass-marks` -> goal-*)
   (b) the practice-set cards (handlers/shared/test-cards.cfm -> .grid/.card)
   These two are what a visitor buys. Nothing else on the page matters as much.
   =========================================================================== */

/* ---- (a) the pass-mark scorecard. The renderer prints one <article
   class="goal-gate"> per gate with `questions` cells: the first `passMark`
   are solid (must be right), the rest are .goal-cell--spare (the margin),
   and the first spare carries .goal-cell--edge (the pass line). That IS the
   illustration - no image, no claim we cannot stand behind. ------------- */
.goal-gates{display:grid;gap:.8rem;margin:1.25rem 0 0}
.goal-gates--n2{grid-template-columns:repeat(2,minmax(0,1fr))}
.goal-gates--n3{grid-template-columns:repeat(auto-fit,minmax(16rem,1fr))}
.goal-gate{padding:1.3rem 1.4rem;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r-lg);box-shadow:var(--sh-1)}
.goal-gate-k{margin:0;font:700 .68rem/1.2 var(--font-display);letter-spacing:.13em;
  text-transform:uppercase;color:var(--accent-text)}
.goal-gate-n{margin:.45rem 0 0;font-size:1.18rem}
.goal-gate-s{margin:.3rem 0 0;font-size:.88rem;line-height:1.55;color:var(--muted)}
.goal-mark{display:flex;flex-wrap:wrap;align-items:baseline;gap:.45rem;margin:1rem 0 .7rem}
.goal-mark-k{font:700 .68rem/1.2 var(--font-display);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.goal-mark-v{font:800 2rem/1 var(--font-display);letter-spacing:-.04em;color:var(--h1);font-variant-numeric:tabular-nums}
.goal-mark-u{font-size:.85rem;color:var(--muted)}
.goal-track{display:flex;flex-wrap:wrap;gap:3px;padding:.7rem .75rem;background:var(--zone);
  border:1px solid var(--line-soft);border-radius:var(--r-sm)}
.goal-cell{width:.62rem;height:.62rem;border-radius:2px;background:var(--accent);flex:0 0 auto}
.goal-cell--spare{background:transparent;box-shadow:inset 0 0 0 1.5px var(--border-mid)}
.goal-cell--edge{position:relative;margin-left:.42rem}
.goal-cell--edge::before{content:"";position:absolute;left:-.3rem;top:-.22rem;bottom:-.22rem;
  width:2px;border-radius:2px;background:var(--bad)}
.goal-legend{display:flex;flex-wrap:wrap;gap:.3rem 1rem;margin:.65rem 0 0;font-size:.8rem;color:var(--muted)}
.goal-key-item{display:inline-flex;align-items:center;gap:.4rem}
.goal-key{width:.62rem;height:.62rem;border-radius:2px;background:var(--accent);flex:0 0 auto}
.goal-key--spare{background:transparent;box-shadow:inset 0 0 0 1.5px var(--border-mid)}
.goal-topics{display:flex;flex-wrap:wrap;gap:.4rem;margin:.9rem 0 0;padding:0;list-style:none}
.goal-topics li{display:inline-flex;align-items:center;gap:.4rem;margin:0;padding:.28rem .6rem .28rem .32rem;
  border:1px solid var(--line-soft);border-radius:var(--r-pill);background:var(--surface-2);
  font:600 .8rem/1.35 var(--font-display);color:var(--ink-700)}
.goal-topics .cr-card-chip{width:1.5rem;height:1.5rem;border-radius:50%}
.goal-topics .cr-card-chip svg{width:.9rem;height:.9rem}
.goal-both{margin:.8rem 0 0;padding:1.1rem 1.25rem;background:var(--accent-soft);
  border:1px solid var(--good-line);border-radius:var(--r)}
.goal-both-h{margin:0 0 .3rem;font-size:1.02rem;color:var(--accent-deep)}
.goal-both-p{margin:0;font-family:var(--font-read);font-size:.985rem;line-height:1.66;color:var(--ink-muted)}
@media (max-width:640px){.goal-gates--n2{grid-template-columns:minmax(0,1fr)}}

/* ---- (b) THE PRACTICE-SET CARDS.
   test-cards.cfm is included by two surfaces. On a content page it arrives
   inside <section class="tl">, which sets its OWN --panel/--line/--accent
   from --tl-* (fed in layer 1) and brings test-cards-css.cfm with it. So the
   palette is handled by tokens, and the rules below (i) lift the shared
   radius/shadow tokens that block reads, and (ii) style the same markup for
   any surface that prints it WITHOUT the .tl wrapper. ------------------- */
html .tl{--r:16px;--shadow:0 1px 2px rgba(11,23,28,.04),0 14px 30px -18px rgba(11,23,28,.26)}
html .tl{margin:1.75rem 0}

.shelf-head{margin:1.75rem 0 .9rem}
.shelf-head h2{margin:0;font-size:clamp(1.3rem,1.1rem + .7vw,1.6rem)}
.content-region>.inner{counter-reset:sec}
.content-region .pg-section--content{counter-increment:sec}
.cr-cat-head{align-items:flex-start}
.cr-cat-head h3{flex:1 1 auto;min-width:0}
.cr-cat-head .cr-card-chip{flex:0 0 auto;display:grid;place-items:center;width:2.4rem;height:2.4rem;border-radius:var(--r-sm);background:var(--accent-soft);color:var(--accent-text);margin:0}
.cr-cat-head .cr-card-chip svg{width:1.3rem;height:1.3rem}
.cr-cards.cr-cards--cat>.cr-card.cr-cat{display:block}
.cr-cat-head{flex-wrap:nowrap}
.cr-cat-head .cr-cat-right{flex:0 1 auto;align-items:flex-end;text-align:right}
@media (max-width:640px){.cr-cat-head{flex-wrap:wrap}.cr-cat-head .cr-cat-right{flex-basis:100%;align-items:flex-start;text-align:left}}
.shelf-sub{margin:.4rem 0 0;max-width:62ch;font-family:var(--font-read);font-size:.97rem;line-height:1.65;color:var(--ink-muted)}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(16.5rem,1fr));gap:.85rem;margin:1.1rem 0 0}
.card{position:relative;display:flex;flex-direction:column;gap:.7rem;padding:1.05rem;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);
  box-shadow:var(--sh-1);color:inherit;text-decoration:none;overflow:hidden;
  transition:border-color .2s,box-shadow .2s,transform .2s}
a.card:hover{border-color:var(--accent);box-shadow:var(--sh-2);transform:translateY(-2px);color:inherit}
.card.passed{border-color:var(--good-line)}
.card.passed::after{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:var(--good)}
.card.locked{background:var(--surface-2)}
.card h3{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem;margin:0;font-size:1.03rem}
.card svg.i,.tl svg.i,svg.i{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.card .i{width:1.05em;height:1.05em}
.num{font-variant-numeric:tabular-nums}

.stage{position:relative;display:grid;place-items:center;aspect-ratio:16/9;border-radius:var(--r);
  background:var(--zone);border:1px solid var(--line-soft);overflow:hidden}
.stage .ill{width:100%;height:100%;object-fit:cover;display:block}
.stage>svg{width:2.1rem;height:2.1rem;fill:none;stroke:var(--accent-deep);stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round;position:absolute;opacity:0}
.stage.noill .ill{display:none}
.stage.noill>svg{opacity:1;position:static}
.artstage{background:linear-gradient(145deg,var(--accent-soft),var(--zone))}
.allstage{aspect-ratio:auto;height:3.4rem;width:3.4rem;place-self:start}
.alli{width:1.6rem;height:1.6rem;fill:none;stroke:var(--accent-deep);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.allstage>svg{opacity:1;position:static}

.tickmini{display:grid;place-items:center;width:1.25rem;height:1.25rem;border-radius:50%;
  background:var(--good);color:#fff;flex:0 0 auto}
.tickmini .i{width:.8rem;height:.8rem;stroke-width:2.6}
.lockchip{display:inline-flex;align-items:center;gap:.3rem;padding:.14rem .5rem;border-radius:var(--r-pill);
  background:var(--prem-soft);color:var(--prem);border:1px solid var(--prem-soft);border-color:color-mix(in srgb,var(--prem) 28%,transparent);
  font:700 .66rem/1.5 var(--font-display);letter-spacing:.07em;text-transform:uppercase}
.lockchip .i{width:.78rem;height:.78rem}
.sub{font-size:.9rem;line-height:1.6;color:var(--muted)}

.facts{display:grid;gap:.35rem;margin:0;padding:0;list-style:none}
.facts li{display:flex;align-items:center;gap:.5rem;margin:0;font-size:.87rem;color:var(--ink-muted)}
.facts .i{width:1rem;height:1rem;flex:0 0 auto;color:var(--accent-deep)}
.cardnote{margin:0;padding:.65rem .75rem;background:var(--warn-soft);border:1px solid var(--warn-line);
  border-radius:var(--r-sm);font-size:.84rem;line-height:1.55;color:var(--warn)}
.cardnote b{display:block;color:var(--warn);font-weight:700}

.foot{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem .7rem;margin-top:auto;
  padding-top:.7rem;border-top:1px solid var(--line-soft);font-size:.85rem;color:var(--muted)}
.verdict{display:inline-flex;align-items:center;gap:.3rem;padding:.16rem .55rem;border-radius:var(--r-pill);
  font:700 .68rem/1.5 var(--font-display);letter-spacing:.08em;text-transform:uppercase}
.verdict .i{width:.8rem;height:.8rem;stroke-width:2.6}
.verdict.pass{background:var(--good-soft);color:var(--good);border:1px solid var(--good-line)}
.verdict.fail{background:var(--zone);color:var(--ink-600);border:1px solid var(--border)}
.go,.tgo{display:inline-flex;align-items:center;gap:.35rem;margin-left:auto;
  font:700 .85rem/1.2 var(--font-display);color:var(--accent-text)}
.tgo{margin:auto 0 0;padding-top:.7rem;border-top:1px solid var(--line-soft);width:100%}
.go .i,.tgo .i{width:1rem;height:1rem;transition:transform .18s}
a.card:hover .go .i,a.card:hover .tgo .i{transform:translateX(3px)}

.tprog{display:grid;gap:.4rem}
.tprow{display:flex;align-items:baseline;justify-content:space-between;gap:.6rem;font-size:.85rem}
.tcorr{color:var(--ink-muted)}
.tcorr b{color:var(--h1);font-weight:700}
.tpct{font:700 .9rem/1 var(--font-display);color:var(--ink-600)}
.tpct.done{color:var(--good)}
.bar{height:.45rem;border-radius:var(--r-pill);background:#cfd8d5;background:color-mix(in srgb,var(--ink-400) 26%,transparent);overflow:hidden}
.bar>i{display:block;height:100%;border-radius:var(--r-pill);background:var(--accent);transition:width .5s ease}
.card.passed .bar>i{background:var(--good)}
.tsub{font-size:.8rem;line-height:1.5;color:var(--muted)}

.unlock{display:block;margin-top:auto;padding-top:.7rem;border-top:1px solid var(--line-soft)}
.unlock a{display:inline-flex;align-items:center;gap:.35rem;font:700 .85rem/1.2 var(--font-display);color:var(--prem)}
.unlock .i{width:1rem;height:1rem}
.rise{animation:rise .4s both}
@media (prefers-reduced-motion:reduce){.rise{animation:none}}
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}


/* ===========================================================================
   LAYER 6 of 8: the ENGINE UTILITY SHIM, the small shared widgets, and the
   responsive end-stops.

   WHY A SHIM AND NOT TAILWIND. v27 shipped SWIFT's whole utility build
   (~160KB) because SWIFT's markup used it. The markup in v34 is ours and uses
   none of it - EXCEPT where the ENGINE hands us utility classes we do not
   control. There are exactly two such places, both read out of the source:
     1. lib/content-blocks.ts, searchable category-cards: the filter chips are
        emitted as `rounded-full border border-ink-200 px-3.5 py-2 text-sm
        font-semibold` (+ `bg-ink-900 text-white` on, `text-ink-600
        hover:bg-ink-50` off).
     2. Father's scroll_to_content token block, which slot-mapper appends inside
        every .hero-cta-wrap: `inline-flex items-center gap-2 text-sm
        font-semibold text-brand-700 dark:text-brand-400` with an `h-5 w-5` svg.
   Those classes are therefore part of the contract and are defined below -
   nothing else is. If a future engine change emits a utility not in this
   list, it renders unstyled: that is deliberate and visible, not silent.
   =========================================================================== */
.inline-flex{display:inline-flex}
.flex{display:flex}
.hidden{display:none}
.items-center{align-items:center}
.flex-wrap{flex-wrap:wrap}
.gap-2{gap:.5rem}
.gap-x-6{column-gap:1.5rem}
.text-sm{font-size:.875rem;line-height:1.4}
.font-semibold{font-weight:600}
.font-medium{font-weight:500}
.rounded-full{border-radius:var(--r-pill)}
.rounded-xl{border-radius:var(--r)}
.border{border-width:1px;border-style:solid}
.border-ink-200{border-color:var(--border)}
.px-3\.5{padding-left:.875rem;padding-right:.875rem}
.py-2{padding-top:.5rem;padding-bottom:.5rem}
.bg-ink-900{background:var(--ink-900)}
.text-white{color:#fff}
html.dark .bg-ink-900,html[data-theme="dark"] .bg-ink-900{background:var(--ink-900)}
html.dark .bg-ink-900.text-white,html[data-theme="dark"] .bg-ink-900.text-white{color:var(--bg)}
.text-ink-600{color:var(--ink-600)}
.hover\:bg-ink-50:hover{background:var(--zone)}
.text-brand-700{color:var(--accent-text)}
html.dark .dark\:text-brand-400,html[data-theme="dark"] .dark\:text-brand-400{color:var(--accent-text)}
.h-4{height:1rem}.w-4{width:1rem}.h-5{height:1.25rem}.w-5{width:1.25rem}
/* every engine utility button/link is still a real control */
[data-filter-chip]{cursor:pointer;font-family:var(--font-display);transition:background .16s,color .16s,border-color .16s}
[data-filter-chip][aria-pressed="true"]{border-color:var(--ink-900)}
[data-filter-input]{font-family:var(--font-ui)!important;background:var(--surface-2)!important;
  color:var(--ink)!important;border-color:var(--border-mid)!important;border-radius:var(--r-sm)!important}
[data-filter-input]:focus{outline:0;border-color:var(--accent)!important;box-shadow:var(--ring)}
[data-filter-root]{margin-top:1.25rem}
[data-filter-count]{font-weight:700;color:var(--h1)}
/* the scroll_to_content token link reads as the hero's quiet second door */
.hero-cta-wrap>a:not(.btn){display:inline-flex;align-items:center;gap:.45rem;
  font:600 .9rem/1.2 var(--font-display);color:var(--accent-text);text-decoration:none}
.hero-cta-wrap>a:not(.btn):hover{text-decoration:underline}
.hero-cta-wrap>a:not(.btn) svg{width:1.15rem;height:1.15rem;fill:none;stroke:currentColor;
  stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}

/* ---- in-page table of contents (data-toc-root + .edt-toc, built by the
   script below on any page whose content region has 2+ h2s) ------------- */
.edt-toc{margin:0 0 1.25rem;padding:1rem 1.15rem;background:var(--zone);
  border:1px solid var(--line-soft);border-radius:var(--r);border-left:3px solid var(--accent)}
.edt-toc>p{margin:0 0 .5rem;font:700 .68rem/1.2 var(--font-display);letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted)}
.edt-toc ul{display:grid;gap:.3rem;margin:0;padding:0;list-style:none}
.edt-toc a{font:500 .9rem/1.45 var(--font-ui);color:var(--ink-700);text-decoration:none}
.edt-toc a:hover{color:var(--accent-text);text-decoration:underline}

/* ---- progress ring (.edt-ring[data-progress]) -------------------------- */
.edt-ring{width:3.5rem;height:3.5rem;transform:rotate(-90deg)}
.edt-ring circle{fill:none;stroke-width:3.5}
.edt-ring .track{stroke:var(--border)}
.edt-ring .value{stroke:var(--accent);stroke-linecap:round;transition:stroke-dashoffset .7s ease}

/* ---- the practice takeover (quiz_takeover token) ships its own CSS and reads
   the tokens in layer 1. The only thing it needs from the shell is room and
   a scroll anchor. ------------------------------------------------------- */
.qt-wrap,[data-qt-root]{scroll-margin-top:calc(var(--head-h) + 1.25rem)}

/* ---- responsive end-stops --------------------------------------------- */
@media (max-width:1023px){
  .hero-grid,.content-hero--split .hero-grid{grid-template-columns:minmax(0,1fr)}
  .hero-media-col{order:-1}
  .hero-media-col .pg-hero-media{max-width:36rem}
  .content-hero h1,.hero-grid:has(.hero-media-col:empty) .content-hero h1{max-width:28ch}
  .cr-cards--n2,.cr-cards--n4{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr))}
}
@media (max-width:760px){
  .cr-cards,.cr-cards--n2,.cr-cards--n3,.cr-cards--n4,.cr-cards--cat,
  .cr-topic-grid,.goal-gates--n3,.cr-stats{grid-template-columns:minmax(0,1fr)}
  .grid{grid-template-columns:minmax(0,1fr)}
  .hero-facts,.pg-hero-stats.is-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hero-fact,.pg-hero-stat{padding-left:0;padding-right:.75rem}
  .hero-fact:nth-child(2n),.pg-hero-stat:nth-child(2n){border-right:0}
  .cr-tl-node{grid-template-columns:3.4rem minmax(0,1fr);gap:.75rem}
  .cr-tl-node::before{left:1.7rem}
  .cr-tl-day{width:3rem}
  .cr-step,.cr-method>li{grid-template-columns:2rem minmax(0,1fr);gap:.75rem;padding:1rem}
  .cr-step-n{width:2rem;height:2rem;font-size:.9rem}
  .cr-card-chip{width:2.3rem;height:2.3rem}
  .closing-in{padding:var(--s6) var(--gut)}
  .closing-act{flex:1 1 100%;min-width:0}
  .pg-section--content,.pg-section--faq,.pg-section--contact{border-radius:var(--r)}
}
@media (max-width:460px){
  .hero-facts,.pg-hero-stats.is-tiles{grid-template-columns:minmax(0,1fr)}
  .hero-fact,.pg-hero-stat{border-right:0;border-bottom:1px solid var(--border)}
  .hero-fact:last-child,.pg-hero-stat:last-child{border-bottom:0}
  .closing-act{flex-direction:column;align-items:stretch}
  .closing-act .btn{width:100%}
  .content-hero{margin-inline:calc(var(--gut) * -1)}
}
/* nothing on this site may scroll the page sideways */
html,body{overflow-x:clip}
.pg-section--content pre,.pg-section--content table,.cr-illus-band{max-width:100%}

@media print{
  .hdr,.closing,.site-footer,.breadcrumb-bar,.ad-unit,.edt-toc{display:none!important}
  .pg-section--content,.pg-section--faq{border:0;box-shadow:none;padding:0}
  body{background:#fff}
}


/* ===========================================================================
   LAYER 7 of 8: THE PAGE RAIL and the two-column reading layout.

   The page-rail token is printed ONCE by this shell (just below the main
   element). The engine replaces the token with nothing and INSERTS
   <aside class="page-rail"> next to the single element whose class contains
   `content-region`, building the list from the page's own section/h2 pairs.
   Measured on the live BLITZ door: the aside lands as the FIRST CHILD of the
   container that holds the sections. Our layouts put the sections in
   `.content-region > .inner`, so that is the case styled first - but the
   grid is declared for every container that can legally hold the aside
   (.inner, .content-region itself, and a .wrap inside it, the BLITZ shape),
   because an engine that changes its insertion point by one level must not
   silently lose the rail. Below 1024px there is no rail column at all: the
   cards stack above the prose, which is what a phone wants.

   WHAT THE OWNER ASKED FOR (the tenth reference): a content page where the
   reader can scroll to the text he is looking for. That is this rail - a jump
   list of every h2, the sibling pages, and one dark CTA card - not a new
   component, the engine already builds it; BLITZ is the only door that has
   ever printed it. THUNDER is the second.
   =========================================================================== */

:root{ --rail-w:17.5rem; --rail-gap:clamp(1.6rem,3.2vw,3rem) }

/* ---- the three cards. They are styled OUTSIDE the grid query too, so a
   rail that lands somewhere unexpected still reads as a finished object
   rather than as bare HTML (layer 1's law: fail visible, never silent). -- */
.page-rail{display:grid;gap:.85rem;min-width:0;margin:0}
.rail-card{padding:1.05rem 1.15rem;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r-lg);box-shadow:var(--sh-1)}
.rail-head{margin:0 0 .6rem;font:700 .68rem/1.2 var(--font-display);letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted)}
.page-rail ul{display:grid;gap:0;margin:0;padding:0;list-style:none}
.page-rail li{margin:0}
.page-rail nav a{display:block;padding:.44rem .55rem;border-radius:var(--r-xs);
  font:600 .885rem/1.42 var(--font-ui);color:var(--ink-700);text-decoration:none;
  border-left:2px solid transparent}
.page-rail nav a:hover{color:var(--accent-text);background:var(--accent-soft);border-left-color:var(--accent)}
.page-rail nav a[aria-current="page"]{color:var(--accent-text);background:var(--accent-soft);
  border-left-color:var(--accent);font-weight:700}
/* the kin card names the group it belongs to - `rail-kin-of` is the engine's
   own span for the parent menu label, so it reads as a place, not a list */
.rail-kin-of{color:var(--accent-text);font-weight:700}
.rail-toc{max-height:clamp(9rem,calc(100vh - var(--head-h) - 30rem),34rem);overflow:auto;overscroll-behavior:contain}
.rail-toc::-webkit-scrollbar{width:6px}
.rail-toc::-webkit-scrollbar-thumb{background:var(--border-mid);border-radius:3px}
.rail-cta{background:var(--slate-deep);border-color:transparent;
  background-image:radial-gradient(18rem 10rem at 110% -20%,rgba(0,132,61,.4),transparent 70%)}
.rail-cta-head{margin:0 0 .3rem;font:800 1.02rem/1.25 var(--font-display);letter-spacing:-.018em;color:#fff}
.rail-cta-body{margin:0 0 .9rem;font:400 .86rem/1.55 var(--font-ui);color:#aebfba}
.rail-cta .btn{width:100%;justify-content:center;text-align:center}
html.dark .rail-cta,html[data-theme="dark"] .rail-cta{background:var(--accent-soft);
  border-color:var(--good-line);background-image:none}
html.dark .rail-cta-head,html[data-theme="dark"] .rail-cta-head{color:var(--h1)}
html.dark .rail-cta-body,html[data-theme="dark"] .rail-cta-body{color:var(--ink-muted)}

/* ---- the two-column reading layout. One declaration list, three possible
   hosts, so the rail cannot be orphaned by an insertion-point change. ---- */
@media (min-width:1024px){
  /* ROW-GAP MUST BE ZERO. The rail spans the whole column with `grid-row:
     1 / span 200`, and a row-gap is charged for EVERY one of those implicit
     rows: measured here first time round, 500 rows x 24px added 12,000px of
     empty page under a 5-section article. The sections carry their own
     spacing as a margin instead, and the one directly after the rail does
     not (it is the first row, beside the rail's own top edge). */
  .content-region>.inner:has(>.page-rail),
  .content-region:has(>.page-rail),
  .content-region .wrap:has(>.page-rail){
    display:grid;grid-template-columns:minmax(0,1fr) var(--rail-w);
    column-gap:var(--rail-gap);row-gap:0;align-items:start}
  .content-region>.inner:has(>.page-rail)>*,
  .content-region:has(>.page-rail)>*,
  .content-region .wrap:has(>.page-rail)>*{grid-column:1;min-width:0}
  .content-region>.inner:has(>.page-rail)>*+*,
  .content-region:has(>.page-rail)>*+*,
  .content-region .wrap:has(>.page-rail)>*+*{margin-top:clamp(1rem,2vw,1.5rem)}
  .content-region>.inner:has(>.page-rail)>.page-rail,
  .content-region>.inner:has(>.page-rail)>.page-rail+*,
  .content-region:has(>.page-rail)>.page-rail,
  .content-region:has(>.page-rail)>.page-rail+*,
  .content-region .wrap:has(>.page-rail)>.page-rail,
  .content-region .wrap:has(>.page-rail)>.page-rail+*{margin-top:0}
  .content-region>.inner>.page-rail,
  .content-region>.page-rail,
  .content-region .wrap>.page-rail{
    grid-column:2;grid-row:1 / span 200;align-self:start;
    position:sticky;top:calc(var(--head-h) + 1.25rem);max-height:calc(100vh - var(--head-h) - 2.5rem);overflow-y:auto;overscroll-behavior:contain}
  /* the reading measure is the point of the rail: the prose keeps its 68ch
     and the rail takes the room the wider page was already holding. */
  .content-region>.inner:has(>.page-rail) .pg-section--content>p,
  .content-region>.inner:has(>.page-rail) .pg-section--content>ul:not([class]),
  .content-region>.inner:has(>.page-rail) .pg-section--content>ol:not([class]){max-width:66ch}
  /* A FULL-BLEED BAND CANNOT CROSS THE RAIL. `.cr-illus-band` bleeds with a
     negative inline margin, which beside a rail paints straight over it -
     the defect BLITZ measured as a 216px overlap on 2026-09-23. On a rail
     page the band bleeds to the CARD instead: same rhythm, nothing on top
     of anything. */
  .content-region:has(.page-rail) .cr-illus-band{margin-inline:0;
    padding-inline:clamp(1rem,2vw,1.75rem);border-radius:var(--r-lg)}
  /* the quick-facts strip stays THREE across beside a rail: auto-fit's 15rem
     floor drops it to 2+1 the moment the reading column narrows, and a fact
     row that breaks its own rhythm reads as a mistake, not as a wrap. */
  .content-region:has(.page-rail) .cr-cards--n3{grid-template-columns:repeat(3,minmax(0,1fr))}
}
/* below the rail breakpoint the cards stack above the prose; the sibling and
   CTA cards stay, because on a phone they are the only navigation out of a
   long page */
@media (max-width:1023px){
  .page-rail{margin:0 0 1.25rem;gap:.7rem}
  .rail-toc{max-height:none}
  .page-rail nav a{padding:.5rem .55rem}
}

/* ---- the practice-tool region (Mother's practice-tool slot: the authored
   interactive block, absent on most pages). Empty -> no hole. ----------- */
.practice-tool-region{min-width:0}
.practice-tool-region:empty{display:none}
.practice-tool-region:not(:empty){margin:clamp(1.5rem,3vw,2.25rem) 0 0}

/* ---- refinement, driven by the tenth reference ("Quick facts - at a
   glance"): a three-card row is a FACT ROW, so the icon tile sits beside the
   label and the value runs full width beneath it, instead of the tile
   stacking above and leaving a third of the card empty. Markup unchanged -
   this is the renderer's own `cards` block with three items. ------------- */
.cr-cards--n3>.cr-card{display:grid;grid-template-columns:2.6rem minmax(0,1fr);
  grid-template-rows:auto auto;column-gap:.85rem;row-gap:.5rem;align-items:center}
.cr-cards--n3>.cr-card>.cr-card-chip{grid-column:1;grid-row:1;margin-bottom:0}
.cr-cards--n3>.cr-card>h3{grid-column:2;grid-row:1;margin:0;font-size:.96rem}
.cr-cards--n3>.cr-card>p{grid-column:1 / -1;grid-row:2}
.cr-cards--n3>a.cr-card{color:inherit}
@media (max-width:760px){
  .cr-cards--n3>.cr-card{grid-template-columns:2.4rem minmax(0,1fr)}
}


/* ===========================================================================
   LAYER 8 of 8: THE HOME BODY SECTIONS.

   The owner's instruction, with ten references: "check the SWIFT, BLITZ and
   HAWKEYE body sections and make a better version of THUNDER's body sections
   - still a lot of gap." THUNDER's home had a banner, a licence picker and
   then prose: four marketing bands that every sibling has were simply not
   there, which is the gap. Five bands are added, all of them MARKUP IN
   MOTHER'S LAYOUT (layouts-v3.json) and CSS here:

     a. home-tests   - five cards, one per test the door serves (ref 6)
     b. home-how     - the road with the L plate, three marks and the P plate (ref 7)
     c. home-why     - five reasons beside a static card that looks like the
                       real player: a question, four options, the answer (ref 8)
     d. home-price    - free on the left, the one paid product on the right (ref 9)
     e. home-reviews - the reviews token under one centred headline (ref 2)

   NO LITERAL PRICE, COUNT OR QUOTE lives in any of them: the price is the
   course-price token, the quotes are the reviews token, the numbers are the
   hero's own stat tiles, which are rows. That is code law 2, and it is also
   the only way five doors can share one layout.
   =========================================================================== */

/* ---- the shared band frame. Every home band is a `.block` section, so the
   rhythm is declared ONCE here and never per band. --------------------- */
/* ONE top padding per band and no bottom padding, so two bands in a row sit
   at one rhythm instead of stacking two paddings into the 8rem hole the owner
   called "a lot of gap". A zone band pays for its own bottom padding because
   it has a background to close. */
.home-band{padding:clamp(2.4rem,5vw,3.75rem) 0 0}
.home-band--zone{margin-inline:0;border-radius:var(--r-lg);padding-inline:clamp(1.5rem,3.5vw,3rem);
  padding-bottom:clamp(2.4rem,5vw,3.75rem);background:var(--zone);
  border-top:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft)}
.home-head{max-width:46rem;margin:0 auto;text-align:center}
.home-head .eyebrow{justify-content:center}
.home-head>.eyebrow{margin-inline:auto}
.home-head h2{margin:.7rem 0 0;font-size:clamp(1.65rem,1.1rem + 1.9vw,2.4rem);text-wrap:balance}
.home-head .lede{margin:.75rem auto 0;max-width:42rem;text-wrap:pretty}
.home-head--left{margin-inline:0;text-align:left}
.home-head--left .eyebrow{justify-content:flex-start}
.home-head--left .lede{margin-inline:0}

/* =========================================================================
   (a) FIVE TEST CARDS. One card per test this door actually serves. The
   first carries the start pill, because a visitor who does not know which
   test he needs must still have one obvious door.
   ========================================================================= */
.tcard-row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.8rem;
  margin:clamp(1.75rem,3.5vw,2.75rem) 0 0}
.tcard{position:relative;display:flex;flex-direction:column;gap:.5rem;padding:1.4rem 1.3rem 1.25rem;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);
  box-shadow:var(--sh-1);text-decoration:none;color:inherit;
  transition:border-color .2s,box-shadow .2s,transform .2s}
.tcard:hover{border-color:var(--fam,var(--accent));box-shadow:var(--sh-2);transform:translateY(-3px);color:inherit}
.tcard-tile{display:grid;place-items:center;width:3.1rem;height:3.1rem;margin-bottom:.35rem;
  border-radius:var(--r);background:var(--fam,var(--accent));color:#fff;
  box-shadow:0 8px 16px -8px var(--fam,var(--accent));transition:transform .2s}
.tcard:hover .tcard-tile{transform:scale(1.06) rotate(-3deg)}
.tcard-tile svg{width:1.6rem;height:1.6rem;fill:none;stroke:currentColor;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.tcard h3{margin:0;font-size:1.02rem;letter-spacing:-.018em}
.tcard p{margin:0;font-family:var(--font-read);font-size:.9rem;line-height:1.6;color:var(--ink-muted)}
.tcard-go{display:inline-flex;align-items:center;gap:.35rem;margin-top:auto;padding-top:.75rem;
  font:700 .85rem/1.2 var(--font-display);color:var(--fam,var(--accent-text))}
.tcard-go svg{width:1rem;height:1rem;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;transition:transform .18s}
.tcard:hover .tcard-go svg{transform:translateX(3px)}
.tcard-pill{position:absolute;top:.85rem;right:.85rem;padding:.2rem .55rem;border-radius:var(--r-pill);
  background:var(--accent-soft);border:1px solid var(--good-line);color:var(--accent-deep);
  font:800 .62rem/1.5 var(--font-display);letter-spacing:.07em;text-transform:uppercase}
/* the family colour is the ONLY thing that differs per card, and it is one
   custom property, so a sixth test is one more modifier and no new rules */
.tcard--car{--fam:#0a7138}
.tcard--hpt{--fam:#8a5207}
.tcard--moto{--fam:#1e3a5f}
.tcard--truck{--fam:#1d5b85}
.tcard--signs{--fam:#9c2b22}
html.dark .tcard--car,html[data-theme="dark"] .tcard--car{--fam:#3fb173}
html.dark .tcard--hpt,html[data-theme="dark"] .tcard--hpt{--fam:#c9922f}
html.dark .tcard--moto,html[data-theme="dark"] .tcard--moto{--fam:#6d9fd0}
html.dark .tcard--truck,html[data-theme="dark"] .tcard--truck{--fam:#5a9bc4}
html.dark .tcard--signs,html[data-theme="dark"] .tcard--signs{--fam:#d4766c}
html.dark .tcard-tile,html[data-theme="dark"] .tcard-tile{color:#07140d}
@media (max-width:1180px){.tcard-row{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:760px){.tcard-row{grid-template-columns:repeat(2,minmax(0,1fr))}
  .tcard{padding:1.15rem 1.05rem 1.05rem}
  .tcard-tile{width:2.7rem;height:2.7rem}}
@media (max-width:430px){.tcard-row{grid-template-columns:minmax(0,1fr)}}

/* =========================================================================
   (b) THE ROAD. Three steps on a real road: the L plate at the start, the P
   plate at the end, and the learner's own journey between them. It is a
   drawn object, not a photograph - nothing here is a stock image and nothing
   here is a claim.
   ========================================================================= */
.road-wrap{margin:clamp(2rem,4vw,3rem) 0 0}
.road{position:relative;height:3rem;border-radius:var(--r-pill);
  background:linear-gradient(180deg,#273442,#18222f);
  box-shadow:inset 0 2px 6px rgba(0,0,0,.45),inset 0 -1px 0 rgba(255,255,255,.07),var(--sh-2)}
html.dark .road,html[data-theme="dark"] .road{box-shadow:inset 0 2px 6px rgba(0,0,0,.6),
  0 0 0 1px rgba(255,255,255,.07),var(--sh-2)}
.road-lane{position:absolute;left:3rem;right:3rem;top:50%;height:4px;transform:translateY(-50%);
  border-radius:2px;opacity:.9;
  background:repeating-linear-gradient(90deg,#f2f4f7 0 1.6rem,transparent 1.6rem 3.2rem)}
.road-plate{position:absolute;top:50%;display:grid;place-items:center;width:2.3rem;height:2.3rem;
  border-radius:8px;font:800 1.18rem/1 var(--font-display);z-index:3;box-shadow:var(--sh-2)}
.road-plate--l{left:-.4rem;transform:translateY(-50%) rotate(-5deg);background:#f9d43a;color:#14242b;
  box-shadow:var(--sh-2),inset 0 0 0 2px rgba(20,36,43,.22)}
.road-plate--p{right:-.4rem;transform:translateY(-50%) rotate(5deg);background:#fff;color:#00843d;
  box-shadow:var(--sh-2),inset 0 0 0 2.5px #00843d}
.road-mark{position:absolute;top:50%;transform:translate(-50%,-50%);display:grid;place-items:center;
  width:3.3rem;height:3.3rem;border-radius:50%;z-index:4;
  background:linear-gradient(135deg,#0f9550,#00662f);color:#fff;
  font:800 1.12rem/1 var(--font-display);
  box-shadow:0 0 0 4px var(--bg),0 0 0 5.5px rgba(0,132,61,.28),0 10px 20px -8px rgba(0,132,61,.6)}
.road-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(1.25rem,3vw,2rem);
  margin:clamp(1.9rem,4vw,2.6rem) 0 0;padding:0;list-style:none}
.road-step{margin:0;text-align:center;padding:0 .5rem}
.road-tile{display:inline-grid;place-items:center;width:3rem;height:3rem;border-radius:var(--r);
  background:var(--accent-soft);color:var(--accent-deep);border:1px solid var(--good-line)}
.road-tile svg{width:1.5rem;height:1.5rem;fill:none;stroke:currentColor;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.road-step h3{margin:.85rem 0 .35rem;font-size:1.08rem}
.road-step p{margin:0 auto;max-width:28ch;font-family:var(--font-read);font-size:.96rem;
  line-height:1.65;color:var(--ink-muted)}
/* the road turns upright on a phone: the plates become the top and the
   bottom of the journey and the marks disappear (they would collide) */
@media (max-width:760px){
  .road-wrap{position:relative;padding-left:3.6rem}
  .road{position:absolute;left:.4rem;top:.6rem;bottom:.6rem;width:2.5rem;height:auto}
  .road-lane{left:50%;right:auto;top:3rem;bottom:3rem;width:4px;height:auto;transform:translateX(-50%);
    background:repeating-linear-gradient(180deg,#f2f4f7 0 1.4rem,transparent 1.4rem 2.8rem)}
  .road-plate--l{left:50%;top:-.4rem;transform:translate(-50%,0) rotate(-5deg)}
  .road-plate--p{left:50%;right:auto;top:auto;bottom:-.4rem;transform:translate(-50%,0) rotate(5deg)}
  .road-mark{display:none}
  .road-steps{grid-template-columns:minmax(0,1fr);gap:1.6rem;margin-top:0}
  .road-step{text-align:left;padding:0}
  .road-step p{margin:0;max-width:none}
  .road-step h3{margin-top:.6rem}
}

/* =========================================================================
   (c) FIVE REASONS, BESIDE THE PRODUCT. The card on the right is the only
   honest way to show what the practice looks like without a screenshot that
   will be out of date next release: it IS the player's shape, in HTML, with
   no script - a question, four options, the right one marked, the rule
   explained underneath. The words are a road rule, not an authority's claim.
   ========================================================================= */
.why-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);
  gap:clamp(2rem,4vw,3.5rem);align-items:center;margin:clamp(1.9rem,4vw,2.75rem) 0 0}
.why-list{display:grid;gap:1.4rem;margin:0;padding:0;list-style:none}
.why-item{display:grid;grid-template-columns:2.6rem minmax(0,1fr);gap:1rem;margin:0;align-items:start}
.why-ic{display:grid;place-items:center;width:2.6rem;height:2.6rem;border-radius:var(--r-sm);
  background:var(--tone-soft,var(--accent-soft));color:var(--tone,var(--accent-deep));
  border:1px solid var(--tone-line,var(--good-line))}
.why-ic svg{width:1.3rem;height:1.3rem;fill:none;stroke:currentColor;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.why-item h3{margin:.15rem 0 .25rem;font-size:1.02rem}
.why-item p{margin:0;font-family:var(--font-read);font-size:.96rem;line-height:1.65;color:var(--ink-muted)}
.why-item--a{--tone:var(--accent-deep);--tone-soft:var(--accent-soft);--tone-line:var(--good-line)}
.why-item--b{--tone:var(--info);--tone-soft:var(--info-soft);--tone-line:var(--info-line)}
.why-item--c{--tone:var(--warn);--tone-soft:var(--warn-soft);--tone-line:var(--warn-line)}
.why-item--d{--tone:var(--prem);--tone-soft:var(--prem-soft);--tone-line:var(--prem-soft)}
.why-item--e{--tone:var(--bad);--tone-soft:var(--bad-soft);--tone-line:var(--bad-line)}

/* the static player card */
.qdemo{padding:1.1rem;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r-xl);box-shadow:var(--sh-3)}
.qdemo-top{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:1.1rem;align-items:start}
.qdemo-fig{margin:0;border:1px solid var(--line-soft);border-radius:var(--r);overflow:hidden;
  background:var(--zone)}
.qdemo-fig svg{display:block;width:100%;height:auto}
.qdemo-q{margin:0 0 .7rem;font:700 .97rem/1.45 var(--font-display);color:var(--h1)}
.qdemo-opts{display:grid;gap:.45rem;margin:0;padding:0;list-style:none}
.qd-opt{display:grid;grid-template-columns:1.5rem minmax(0,1fr);gap:.55rem;align-items:center;margin:0;
  padding:.5rem .65rem;border:1px solid var(--border);border-radius:var(--r-sm);
  font:500 .855rem/1.4 var(--font-ui);color:var(--ink-700)}
.qd-key{display:grid;place-items:center;width:1.5rem;height:1.5rem;border-radius:6px;
  border:1px solid var(--border);font:700 .7rem/1 var(--font-display);color:var(--ink-600)}
.qd-opt--right{border-color:var(--good);background:var(--good-soft);color:var(--good);font-weight:700}
.qd-opt--right .qd-key{border-color:var(--good);color:var(--good)}
.qdemo-ans{display:grid;grid-template-columns:1.25rem minmax(0,1fr);gap:.6rem;align-items:start;
  margin:1rem 0 0;padding:.9rem 1rem;background:var(--good-soft);border:1px solid var(--good-line);
  border-radius:var(--r)}
.qdemo-ans svg{width:1.25rem;height:1.25rem;fill:none;stroke:var(--good);stroke-width:2.2;
  stroke-linecap:round;stroke-linejoin:round;margin-top:.1rem}
.qdemo-ans p{margin:0;font:400 .885rem/1.6 var(--font-ui);color:var(--ink)}
.qdemo-ans strong{color:var(--good);font-weight:700}
.qdemo-ans a{display:inline-flex;align-items:center;gap:.35rem;margin-top:.5rem;
  font:700 .82rem/1.2 var(--font-display);color:var(--accent-text);text-decoration:none}
.qdemo-ans a:hover{text-decoration:underline}
.qdemo-ans a svg{width:.95rem;height:.95rem;stroke:currentColor;margin:0}
/* the drawn intersection. Every colour is a token or a road colour, so the
   diagram is readable in both themes without a second copy. */
.qd-road{fill:#c6d0cc}
html.dark .qd-road,html[data-theme="dark"] .qd-road{fill:#2a4047}
.qd-edge{stroke:#9aa6a3;stroke-width:2;fill:none;stroke-dasharray:7 7}
html.dark .qd-edge,html[data-theme="dark"] .qd-edge{stroke:#607471}
.qd-you{fill:#00843d}
.qd-them{fill:#ab2a20}
.qd-arrow{stroke:#14242b;stroke-width:2.4;fill:none;stroke-linecap:round}
html.dark .qd-arrow,html[data-theme="dark"] .qd-arrow{stroke:#eff5f2}
.qd-lab{fill:#35444a;font:700 15px var(--font-display)}
html.dark .qd-lab,html[data-theme="dark"] .qd-lab{fill:#dde7e3}
@media (max-width:1023px){
  .why-grid{grid-template-columns:minmax(0,1fr);gap:2rem}
  .qdemo{max-width:36rem}
}
@media (max-width:560px){
  .qdemo-top{grid-template-columns:minmax(0,1fr)}
}

/* =========================================================================
   (d) THE PRICE SPLIT. Free on the left and the one paid product on the
   right, in one panel, so the choice is a comparison and not a wall. The
   only price on this page is the course-price token: a literal here would be
   one literal per domain the moment a sibling shares this layout.
   ========================================================================= */
.price-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(1.25rem,2.5vw,2rem);
  padding:clamp(1.4rem,3vw,2.6rem);background:var(--zone);border:1px solid var(--border);
  border-radius:var(--r-xl);align-items:start}
.price-pill{display:inline-flex;align-items:center;gap:.4rem;padding:.26rem .7rem;border-radius:var(--r-pill);
  background:var(--accent-soft);border:1px solid var(--good-line);color:var(--accent-deep);
  font:800 .67rem/1.5 var(--font-display);letter-spacing:.09em;text-transform:uppercase}
.price-free h2{margin:1.1rem 0 0;font-size:clamp(1.5rem,1.1rem + 1.5vw,2.2rem);text-wrap:balance}
.price-free .lede{margin:.7rem 0 0;max-width:34ch}
.price-list{display:grid;gap:.6rem;margin:1.3rem 0 0;padding:0;list-style:none}
.price-list li{display:grid;grid-template-columns:1.15rem minmax(0,1fr);gap:.6rem;align-items:start;
  margin:0;font:400 .935rem/1.55 var(--font-ui);color:var(--ink)}
.price-list svg{width:1.15rem;height:1.15rem;margin-top:.15rem;fill:none;stroke:var(--good);
  stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.price-acts{display:flex;flex-wrap:wrap;align-items:center;gap:.8rem 1.1rem;margin:1.5rem 0 0}
.price-more{display:inline-flex;align-items:center;gap:.35rem;font:700 .88rem/1.2 var(--font-display);
  color:var(--accent-text);text-decoration:none}
.price-more:hover{text-decoration:underline}
.price-more svg{width:1rem;height:1rem;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}
.price-card{position:relative;overflow:hidden;display:flex;flex-direction:column;
  padding:clamp(1.4rem,2.4vw,1.9rem);border-radius:var(--r-lg);color:#fff;
  background:linear-gradient(145deg,#00843d,#076c3c 55%,#0a4927);
  box-shadow:0 26px 52px -26px rgba(0,132,61,.6)}
.price-card::after{content:"";position:absolute;right:-6rem;top:-7rem;width:16rem;height:16rem;
  border-radius:50%;border:1px solid rgba(255,255,255,.16);pointer-events:none}
.price-chip{align-self:flex-start;padding:.24rem .65rem;border-radius:var(--r-pill);
  background:rgba(255,255,255,.16);color:#fff;
  font:800 .66rem/1.6 var(--font-display);letter-spacing:.09em;text-transform:uppercase}
.price-card h3{margin:.95rem 0 0;color:#fff;font-size:clamp(1.3rem,1.1rem + .7vw,1.7rem)}
.price-sub{margin:.5rem 0 0;font:400 .95rem/1.6 var(--font-read);color:rgba(255,255,255,.82);max-width:34ch}
.price-card .price-list li{color:#fff}
.price-card .price-list svg{stroke:#9fe7bd}
.price-buy{margin:1.5rem 0 0;padding-top:1.2rem;border-top:1px solid rgba(255,255,255,.18)}
.price-amt{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem}
.price-amt b{font:800 clamp(1.9rem,1.5rem + 1.2vw,2.5rem)/1 var(--font-display);letter-spacing:-.04em;color:#fff}
.price-amt span{font:700 .68rem/1.5 var(--font-display);letter-spacing:.09em;text-transform:uppercase;
  color:rgba(255,255,255,.76)}
/* THE TWO SURFACES THAT DO NOT FOLLOW THE THEME. The price card is deep
   green and the P plate is white in BOTH themes, so anything printed on
   them must be a fixed colour: `var(--brand-700)` inverts in dark and put
   pale green text on a white button (measured 1.6:1). A token is right when
   the surface moves with the theme and wrong when it does not. */
.price-card .btn{margin-top:1.1rem;width:100%;background:#fff;color:#0b5c30;border-color:#fff;
  box-shadow:0 10px 22px -12px rgba(0,0,0,.45)}
.price-card .btn:hover{background:#eef6f1;border-color:#eef6f1;color:#0a3a20}
html.dark .price-card .btn,html[data-theme="dark"] .price-card .btn{color:#0b5c30}
.price-foot{margin:.9rem 0 0;font:500 .8rem/1.5 var(--font-ui);color:rgba(255,255,255,.76)}
.price-foot a{color:#fff;text-decoration:underline;text-decoration-color:rgba(255,255,255,.5)}
.price-foot a:hover{color:#fff;text-decoration-color:#fff}
/* the one-time price is a token, so it may arrive as any length of string:
   the row wraps instead of pushing the card wider. */
.price-amt{min-width:0}
html.dark .price-card,html[data-theme="dark"] .price-card{
  background:linear-gradient(145deg,#0b5c30,#0a4927 55%,#08301c);box-shadow:var(--sh-3)}
@media (max-width:860px){
  .price-split{grid-template-columns:minmax(0,1fr)}
  .price-free .lede{max-width:none}
}

/* =========================================================================
   (e) REVIEWS. The reviews token brings its own markup and its own words
   (vocabulary rows), so this band styles only the FRAME and the generic
   elements a review block can print. If the token ever emits named classes
   they will need a pass of their own - flagged for the seat in the notes.
   ========================================================================= */
.home-reviews .home-head h2{max-width:34ch;margin-inline:auto}
.reviews-slot{margin:clamp(1.75rem,3.5vw,2.5rem) 0 0}
.reviews-slot:empty{display:none}
.reviews-slot blockquote{margin:0;padding:1.5rem 1.6rem;background:var(--surface);
  border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-1);
  font:400 1.05rem/1.7 var(--font-read);color:var(--ink)}
.reviews-slot figure{margin:0}
.reviews-slot cite,.reviews-slot figcaption{display:block;margin-top:.8rem;font-style:normal;
  font:600 .88rem/1.4 var(--font-display);color:var(--muted)}
.reviews-slot ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(17rem,1fr));gap:.85rem;
  margin:0;padding:0;list-style:none}


/* -- STEP 1 (2026-09-25): the split hero, figures, method list and the pass-mark scorecard.
   Moved from BLITZ template 8 into the SHARED layout so every door renders the same blocks
   Mother emits. Colours are the theme variables, not a palette. -- */
.hero-trust{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .9rem;margin:1.15rem 0 0;font-size:.92rem;color:var(--ink-muted)}
.hero-trust .pill{display:inline-flex;align-items:center;gap:.45rem;padding:.28rem .7rem;border-radius:999px;background:rgba(51,70,92,.08);font-weight:700;font-size:.82rem;color:var(--ink)}
.hero-trust .pill i{width:.5rem;height:.5rem;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px rgba(190,18,60,.25)}
/* 1. DARK - the front-door face, for the pages that carry the niche's head terms */
.content-hero--dark{background:var(--slate-deep);border-bottom-color:rgba(255,255,255,.08)}
.content-hero--dark::before{background:radial-gradient(42rem 20rem at 100% 0%,rgba(190,18,60,.22),transparent 62%),repeating-linear-gradient(115deg,rgba(255,255,255,.035) 0 2px,transparent 2px 30px)}
.content-hero--dark h1{color:var(--surface)}
.content-hero--dark .lead{color:rgba(255,255,255,.78)}
.hero--dark .hero-trust,.content-hero--dark .hero-trust{color:rgba(255,255,255,.6)}
.hero--dark .hero-trust .pill,.content-hero--dark .hero-trust .pill{background:rgba(255,255,255,.1);color:var(--surface)}
/* the landing hero is dark by design, so its badges take the dark treatment without a modifier */
.hero .hero-trust{color:rgba(255,255,255,.62);margin-bottom:1.35rem}
.hero .hero-trust .pill{background:rgba(255,255,255,.1);color:var(--surface)}
.content-hero--dark .hero-cta-wrap a:not(.btn-primary){color:var(--surface)}
.content-hero--dark .btn-ghost,.content-hero--dark .btn-outline{color:var(--surface);border-color:rgba(255,255,255,.42)}
.content-hero--dark .btn-ghost:hover,.content-hero--dark .btn-outline:hover{color:var(--surface);border-color:var(--surface);background:rgba(255,255,255,.07)}
/* the copy column is ONE grid child however much the hero carries inside it */
.content-hero--split .hero-copy{min-width:0}
.content-hero--split .hero-figure svg.hero-art{display:block;width:100%;height:auto}
.content-hero--split .hero-figure{margin:2rem 0 0;border-radius:1rem;border:1px solid var(--border);background:var(--surface);overflow:hidden;box-shadow:0 20px 45px -25px rgba(16,24,40,.45)}
.content-hero--split .hero-figure img{display:block;width:100%;height:auto}
.content-hero--split .hero-figure figcaption{padding:.9rem 1.1rem;font-size:.92rem;line-height:1.5;color:var(--ink-muted);border-top:1px solid var(--border);margin:0}
.content-hero--split .hero-figure figcaption b{color:var(--ink)}
/* 3. RULE - the headline plus the numbers the page exists to explain */
.content-hero--rule .hero-facts{display:grid;gap:.7rem;margin:1.5rem 0 0;grid-template-columns:1fr}
.content-hero--rule .hero-fact{padding:.8rem 1rem;border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:0 .6rem .6rem 0;background:rgba(255,255,255,.72)}
.content-hero--rule .hero-fact b{display:block;font-size:1.35rem;font-weight:800;letter-spacing:-.02em;color:var(--ink);line-height:1.1}
.content-hero--rule .hero-fact span{display:block;font-size:.85rem;color:var(--ink-muted);margin-top:.15rem}
/* 4. COMPACT - a utility page carries less air than a landing page */
.content-hero--compact{padding:2.4rem 0 2rem}
.content-hero--compact h1{font-size:clamp(1.8rem,3.4vw,2.5rem)}
.content-hero--compact .lead{font-size:1.08rem}
.content-region .cr-figure{margin:1.75rem auto .25rem;max-width:30rem}
.content-region .cr-figure svg{display:block;width:100%;height:auto}
.content-region .cr-figure--wide{max-width:46rem}
.content-region .cr-figure--tight{max-width:18rem}
.content-region .cr-figure figcaption{margin:.7rem 0 0;font-size:.85rem;color:var(--ink-muted);text-align:center;line-height:1.5}
.content-region .cr-illus-band{margin:1.75rem 0 .5rem;padding:1.6rem 1.5rem 1.25rem;background:var(--slate-soft);border:1px solid var(--border);border-radius:var(--radius-lg)}
.content-region .cr-illus-band svg{display:block;width:100%;height:auto;max-width:40rem;margin:0 auto}
.content-region .cr-illus-band figcaption{margin:1rem auto 0;max-width:40rem;font-size:.86rem;color:var(--ink-muted);text-align:center;line-height:1.55}
/* two-section split */
.content-region .cr-split{display:grid;gap:1px;margin:1.75rem 0 .5rem;background:var(--border-mid);border:1px solid var(--border-mid);border-radius:var(--radius-lg);overflow:hidden}
.content-region .cr-split-col{background:var(--surface);padding:1.4rem 1.5rem}
.content-region .cr-split-top{display:flex;align-items:center;gap:.9rem;margin:0 0 1.15rem}
.content-region .cr-split-n{font-size:2.9rem;font-weight:800;line-height:.9;letter-spacing:-.05em;color:var(--head);font-variant-numeric:tabular-nums}
.content-region .cr-split-col--rs .cr-split-n{color:var(--accent)}
.content-region .cr-split-l{font-weight:800;color:var(--head);font-size:1.05rem;letter-spacing:-.01em;line-height:1.2}
.content-region .cr-split-l small{display:block;font-weight:600;font-size:.8rem;color:var(--ink-muted);letter-spacing:0;margin-top:.2rem}
.content-region .cr-split-topics{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:.7rem .9rem}
.content-region .cr-split-topics li{display:flex;align-items:center;gap:.5rem;font-size:.86rem;font-weight:600;color:var(--head);margin:0}
.content-region .cr-split-topics svg{flex:none;width:1.5rem;height:1.5rem}
/* method row */
.content-region .cr-method{list-style:none;margin:1.6rem 0 .5rem;padding:0;display:grid;gap:1.1rem}
.content-region .cr-method li{display:flex;gap:.9rem;align-items:flex-start;margin:0}
.content-region .cr-method .cr-m-ic{flex:none;width:2.9rem;height:2.9rem;border-radius:.7rem;background:var(--accent-soft);display:grid;place-items:center}
.content-region .cr-method .cr-m-ic svg{width:1.55rem;height:1.55rem}
.content-region .cr-method h3{margin:.15rem 0 .3rem;font-size:1.02rem}
.content-region .cr-method p{margin:0;font-size:.95rem;color:var(--ink-muted);line-height:1.55}
/* --- in-content launch CTA row --- */
.cr-cta{display:flex;flex-wrap:wrap;gap:.7rem;align-items:center;margin:1.4rem 0 .4rem}
/* ==================================================================
   THE FIGURE SYSTEM  (2026-09-23)
   Append near the END of the site stylesheet, after the
   "FIGURES ALIGN TO THE COLUMN" block it supersedes.

   THE RULE: a figure BLOCK is the reading column. Always. The art
   inside it may be any size; the block never is.

   Why this replaces the left-anchor fix. That fix was right about the
   fault (four figures centred at four different left edges = nothing
   lines up) and it fixed alignment by anchoring each figure left at its
   own natural width. Alignment came back and DEAD SPACE arrived with
   it: in a 912px column a 480px figure leaves 432px of nothing, a
   352px figure leaves 560px, a 240px figure leaves 672px. Both faults
   have ONE cause - the ART was deciding the BLOCK width. So the block
   stops asking. It takes the column, every time, and the left edge is
   the text's left edge because it is the same edge.

   Three treatments, one job each:
     1 PLATE  (default .cr-figure) - framed art at full column width.
       For art drawn 16:9 to 2:1. Zero dead space by construction.
     2 BAND   (.cr-illus-band) - the plate on a soft ground, for art
       that wants air around it. Also full column.
     3 STAGE  (.cr-figure--stage, and legacy --tight) - the deliberate
       treatment for art that is GENUINELY small: a full-column soft
       panel with the art held left at a cap and the caption set
       beside it. A small drawing then reads as presented, not
       stranded, and the block still starts at the text's left edge.

   No page needs CSS of its own for any of this. Page-authored
   style="max-width:..." on a figure is the bug, not the fix - strip
   it; these rules cannot out-rank an inline style and must not try
   (no !important anywhere in this file).
   ================================================================== */

/* ---- 1. THE PLATE: the default ----------------------------------- */
.content-region .cr-figure{
  margin:2rem 0 .5rem;
  max-width:none;
  width:auto;
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
  background:var(--surface);
  overflow:hidden;
}
/* the legacy width modifier stops setting a width - the column sets it */
.content-region .cr-figure--wide{max-width:none}
.content-region .cr-figure>svg,
.content-region .cr-figure>img{
  display:block;
  width:100%;
  height:auto;
  border-radius:0;          /* the plate does the clipping */
}
.content-region .cr-figure>figcaption{
  margin:0;
  padding:.8rem 1.15rem .85rem;
  border-top:1px solid var(--border);
  background:var(--surface);
  color:var(--ink-muted);
  font-size:.85rem;
  line-height:1.55;
  text-align:left;
}
.content-region .cr-figure>figcaption strong,
.content-region .cr-figure>figcaption b{color:var(--head)}
/* ---- 2. THE BAND: the plate on a soft ground ---------------------- */
/* Already full-column and already working. Kept, and made explicit so
   it can never fall back to a 40rem art cap inside a 57rem column. */
.content-region .cr-illus-band{
  margin:2rem 0 .5rem;
  max-width:none;
  padding:1.75rem 1.75rem 1.35rem;
  background:var(--slate-soft);
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
}
.content-region .cr-illus-band>svg,
.content-region .cr-illus-band>img{
  display:block;
  width:100%;
  height:auto;
  max-width:none;
  margin:0;
}
.content-region .cr-illus-band>figcaption{
  margin:1rem 0 0;
  max-width:44rem;
  padding:0;
  border-top:0;
  background:none;
  color:var(--ink-muted);
  font-size:.86rem;
  line-height:1.55;
  text-align:left;
}
/* ---- 3. THE STAGE: for art that is genuinely small ---------------- */
/* Art left at a cap, caption beside it. The panel is the column, so the
   small drawing sits ON something instead of floating in white space. */
.content-region .cr-figure--stage,
.content-region .cr-figure--tight{
  display:grid;
  grid-template-columns:minmax(0,1fr);
  align-items:center;
  gap:1.25rem;
  margin:2rem 0 .5rem;
  max-width:none;
  padding:1.6rem 1.75rem;
  background:var(--slate-soft);
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
  overflow:visible;
}
.content-region .cr-figure--stage>svg,
.content-region .cr-figure--stage>img,
.content-region .cr-figure--tight>svg,
.content-region .cr-figure--tight>img{
  display:block;
  width:100%;
  max-width:20rem;
  height:auto;
  margin:0;
  border-radius:0;
}
.content-region .cr-figure--stage>figcaption,
.content-region .cr-figure--tight>figcaption{
  margin:0;
  padding:0;
  border-top:0;
  background:none;
  color:var(--ink-muted);
  font-size:.95rem;
  line-height:1.6;
  text-align:left;
}
/* ---- 4. RHYTHM: a figure that opens a section sits closer to it --- */
.content-region .pg-section>h2+.cr-figure,
.content-region .pg-section>h2+.cr-illus-band{margin-top:1.25rem}
/* ---- 5. SMALL SCREENS: tighter frames, smaller staged art ---------- */
@media(max-width:40rem){
.content-region .cr-figure,
  .content-region .cr-illus-band,
  .content-region .cr-figure--stage,
  .content-region .cr-figure--tight{margin:1.5rem 0 .35rem}
.content-region .cr-figure>figcaption{padding:.7rem .9rem .75rem}
.content-region .cr-illus-band{padding:1.1rem 1.1rem .95rem}
.content-region .cr-figure--stage,
  .content-region .cr-figure--tight{padding:1.15rem 1.15rem 1.25rem}
.content-region .cr-figure--stage>svg,
  .content-region .cr-figure--stage>img,
  .content-region .cr-figure--tight>svg,
  .content-region .cr-figure--tight>img{max-width:14rem}
.content-region .cr-figure--stage>figcaption,
  .content-region .cr-figure--tight>figcaption{font-size:.88rem}
}


/* ==================================================================
   THE GOAL BAND - "what passing takes, and how to get there"
   A page's second section: the threshold a test is marked against,
   drawn to scale, and the route to it.

   Names no page and no niche. Any door with a two-gate exam mark
   reskins this for free: every colour comes from the design's own
   custom properties (hex fallbacks only, so a door that has not set
   a var still renders). Nothing is force-overridden. No fixed pixel widths.

   Motif follows the house: the THRESHOLD (crimson rule, crimson
   numerals) and hairlines, not boxes inside boxes.
   Palette in use: --head var(--h1), --muted var(--muted), --accent var(--accent),
   --slate-soft var(--soft), --border var(--border), --border-mid var(--border), white.
   ================================================================== */

.goal-band{
	background:var(--surface,var(--surface));
	border-bottom:1px solid var(--border,var(--border));
	padding:4.25rem 0 3.5rem;
}
.goal-band .goal-head{max-width:48rem;margin:0 0 2.25rem}
/* ---------- THE GOAL: two gates, side by side ---------- */
.goal-gates{display:grid;grid-template-columns:1fr;gap:1rem}
.goal-gate{
	display:flex;
	flex-direction:column;
	margin:0;
	padding:1.5rem 1.5rem 1.4rem;
	background:var(--slate-soft,var(--soft));
	border:1px solid var(--border,var(--border));
	border-radius:var(--radius-lg,1rem);
}
.goal-gate-k{
	margin:0;
	font-size:.7rem;
	font-weight:800;
	letter-spacing:.14em;
	text-transform:uppercase;
	color:var(--muted,var(--muted));
}
.goal-gate-n{
	margin:.4rem 0 0;
	font-size:1.25rem;
	font-weight:800;
	line-height:1.2;
	letter-spacing:-.015em;
	color:var(--head,var(--h1));
}
/* the pass mark itself: the number is the point of the card */
.goal-mark{display:flex;flex-wrap:wrap;align-items:baseline;gap:.1rem .65rem;margin:1.05rem 0 1.3rem}
.goal-mark-k{
	flex:0 0 100%;
	margin-bottom:.3rem;
	font-size:.7rem;
	font-weight:800;
	letter-spacing:.14em;
	text-transform:uppercase;
	color:var(--accent,var(--accent));
}
.goal-mark-v{
	font-size:clamp(2.75rem,5.5vw,3.75rem);
	font-weight:800;
	line-height:.88;
	letter-spacing:-.045em;
	color:var(--head,var(--h1));
	font-variant-numeric:tabular-nums;
}
/* --gk carries the default treatment and needs no rule; both modifiers exist so a
   door can re-colour either gate without touching the markup. */
.goal-gate--rs .goal-mark-v{color:var(--accent,var(--accent))}
.goal-mark-u{font-size:1rem;font-weight:700;color:var(--muted,var(--muted))}
/* the scorecard. ONE question = ONE cell, always 15 to a row, so the
   two gates read at the same scale and road safety honestly takes two
   rows to the general-knowledge one. Filled = must be right; hollow =
   the margin you have. Never colour alone: the shapes differ, the
   legend counts them, and the track carries its own aria-label. */
.goal-track{
	--goal-gap:4px;
	display:grid;
	grid-template-columns:repeat(15,1fr);
	column-gap:var(--goal-gap);
	row-gap:.9rem;
	margin:0;
}
.goal-cell{
	aspect-ratio:1;
	border-radius:3px;
	background:var(--head,var(--h1));
}
.goal-cell--spare{
	background:var(--surface,var(--surface));
	box-shadow:inset 0 0 0 2px var(--muted,var(--muted));
}
/* the pass mark, drawn where it falls: a crimson rule in the gap
   before the first question you are allowed to get wrong. */
.goal-cell--edge{position:relative}
.goal-cell--edge::before{
	content:"";
	position:absolute;
	top:-.35rem;
	bottom:-.35rem;
	left:calc((var(--goal-gap) / -2) - 1.5px);
	width:3px;
	border-radius:2px;
	background:var(--accent,var(--accent));
}
.goal-legend{
	display:flex;
	flex-wrap:wrap;
	gap:.4rem 1.35rem;
	margin:auto 0 0;          /* pins to the foot of the card, so both cards agree */
	padding-top:1.15rem;
	font-size:.85rem;
	font-weight:700;
	line-height:1.4;
	color:var(--head,var(--h1));
}
.goal-key-item{display:inline-flex;align-items:center;gap:.5rem}
.goal-key{
	flex:none;
	width:.7rem;
	height:.7rem;
	border-radius:2px;
	background:var(--head,var(--h1));
}
.goal-key--spare{
	background:var(--surface,var(--surface));
	box-shadow:inset 0 0 0 1.5px var(--muted,var(--muted));
}
/* ---------- the consequence of two separate marks ---------- */
.goal-both{
	max-width:54rem;
	margin:1.6rem 0 0;
	padding:.1rem 0 .1rem 1.25rem;
	border-left:3px solid var(--accent,var(--accent));
}
.goal-both-h{
	margin:0 0 .4rem;
	font-size:1.2rem;
	font-weight:800;
	line-height:1.3;
	letter-spacing:-.015em;
	color:var(--head,var(--h1));
}
.goal-both-p{margin:0;font-size:1.02rem;line-height:1.68;color:var(--ink,var(--ink))}
.goal-both-p b{color:var(--head,var(--h1));font-weight:800}
/* ---------- THE ROUTE ---------- */
.goal-path{margin:3.25rem 0 0}
.goal-path-h{
	margin:0 0 .4rem;
	font-size:clamp(1.35rem,2.4vw,1.75rem);
	font-weight:800;
	line-height:1.15;
	letter-spacing:-.025em;
	color:var(--head,var(--h1));
}
.goal-path-l{margin:0;max-width:44rem;font-size:1.05rem;line-height:1.6;color:var(--muted,var(--muted))}
.goal-steps{
	list-style:none;
	margin:1.5rem 0 0;
	padding:0;
	display:grid;
	grid-template-columns:1fr;
	gap:0;
	border-top:1px solid var(--border-mid,var(--border));
}
.goal-step{
	display:flex;
	gap:1.1rem;
	align-items:flex-start;
	margin:0;
	padding:1.45rem 0;
	border-bottom:1px solid var(--border-mid,var(--border));
}
.goal-step-n{
	flex:none;
	min-width:1.8rem;
	font-size:2rem;
	font-weight:800;
	line-height:.95;
	letter-spacing:-.045em;
	color:var(--accent,var(--accent));
	font-variant-numeric:tabular-nums;
}
.goal-step-b{min-width:0}
.goal-step-t{
	margin:.12rem 0 .4rem;
	font-size:1.08rem;
	font-weight:800;
	line-height:1.3;
	letter-spacing:-.015em;
	color:var(--head,var(--h1));
}
.goal-step-b p{margin:0;font-size:.98rem;line-height:1.62;color:var(--muted,var(--muted))}
/* ---------- the action ---------- */
.goal-cta{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin:2.4rem 0 0}
.goal-note{margin:1rem 0 0;font-size:.9rem;line-height:1.55;color:var(--muted,var(--muted))}
/* gates: side by side once there is room for two */
@media(min-width:48rem){
	.goal-gates{grid-template-columns:1fr 1fr;gap:1.25rem}
}
/* steps: two columns, hairline between them (the house pattern) */
@media(min-width:40rem) and (max-width:71.99rem){
	.goal-steps{grid-template-columns:1fr 1fr}
	.goal-step:nth-child(odd){padding-right:2rem;border-right:1px solid var(--border-mid,var(--border))}
	.goal-step:nth-child(even){padding-left:2rem}
}
/* steps: four across, the number stacked over its line */
@media(min-width:72rem){
	.goal-steps{grid-template-columns:repeat(4,minmax(0,1fr))}
	.goal-step{flex-direction:column;gap:.55rem;padding:1.7rem 1.6rem 1.7rem 0}
	.goal-step+.goal-step{padding-left:1.6rem;border-left:1px solid var(--border-mid,var(--border))}
	.goal-step:last-child{padding-right:0}
	.goal-step-n{font-size:2.4rem}
	.goal-gate{padding:1.75rem 1.75rem 1.5rem}
}
@media(max-width:39.99rem){
	.goal-band{padding:3rem 0 2.75rem}
	.goal-band .goal-head{margin-bottom:1.75rem}
	.goal-gate{padding:1.25rem 1.15rem 1.2rem}
	.goal-track{--goal-gap:3px}
	.goal-cell{border-radius:2px}
	.goal-cell--spare{box-shadow:inset 0 0 0 1.5px var(--muted,var(--muted))}
	.goal-cell--edge::before{top:-.25rem;bottom:-.25rem;width:2px;left:calc((var(--goal-gap) / -2) - 1px)}
	.goal-both{padding-left:1rem}
	.goal-path{margin-top:2.5rem}
	.goal-cta{margin-top:2rem;gap:.6rem}
	.goal-cta .btn{width:100%;justify-content:center}
}
/* the hover lift on the primary is the site's; nothing here animates */
@media(prefers-reduced-motion:reduce){
	.goal-band *{transition:none}
}


/* ---- what used to be inline on the page ---------------------------- */
.cr-cta--center{justify-content:center;margin-top:1.6rem}
@media(min-width:60rem){
.content-hero--split .wrap{max-width:var(--wrap);display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:3rem;align-items:center}
.content-hero--split .hero-figure{margin:0}
}
@media(min-width:40rem){
.content-hero--rule .hero-facts{grid-template-columns:repeat(3,minmax(0,1fr));max-width:44rem}
.content-region .cr-split{grid-template-columns:1fr 1fr}
}
@media(min-width:48rem){
.content-region .cr-method{grid-template-columns:repeat(3,1fr)}
.content-region .cr-method li{flex-direction:column}
.content-region .cr-figure--stage,
  .content-region .cr-figure--tight{
    /* a FIXED first track, not minmax(0,20rem): a content-sized track would
       shrink to the art's intrinsic width and the stage would wander again */
    grid-template-columns:20rem minmax(0,1fr);
    gap:2rem;
  }
}

/* classes the Mother renderer emits that the BLITZ template never needed: gate counts other than
   two, a gate sub-line, and the per-gate topic list */
.goal-gates--n1{grid-template-columns:1fr}
.goal-gates--n3{grid-template-columns:repeat(3,1fr)}
.goal-gates--n4{grid-template-columns:repeat(2,1fr)}
.goal-gate-s{margin:.1rem 0 .6rem;color:var(--muted);font-size:.95rem}
.goal-topics{list-style:none;margin:.9rem 0 0;padding:.8rem 0 0;border-top:1px solid var(--border);display:grid;gap:.45rem}
.goal-topics li{display:flex;align-items:center;gap:.55rem;font-size:.95rem;color:var(--ink)}
.goal-topics .cr-card-chip{width:1.5rem;height:1.5rem;flex:0 0 1.5rem}
@media(max-width:40rem){.goal-gates--n3,.goal-gates--n4{grid-template-columns:1fr}}
