/*
Theme Name: Laser TeamWork
Template: ekg-base
Theme URI: https://laserteamwork.com/
Author: EKG Marketing
Author URI: https://ekgmarketing.com/
Description: Laser TeamWork child theme (parent: EKG Base). A machine-agnostic laser-education resource for U.S. educators — grades 6-12, CTE, and higher education. Workshop Blueprint look (2026-09-30): warm paper, graphite ink, blueprint blue for links and actions, a sparing beam-orange accent, self-hosted Hanken Grotesk / Newsreader / JetBrains Mono, and a full dark mode. Green is learning and safe process, amber is caution, and red stays reserved for stop conditions. The content core is vendor-neutral so the thin sponsor layer stays swappable. Tone is clear, capable, evidence-aware, and honest about limits.
Version: 0.9.7
Requires at least: 6.5
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: ltw
*/

/* ==========================================================================
   Everything below is the LTW design system, authored and adversarially
   reviewed against five standalone mockups before it graduated into the theme.
   Token groups are commented in place. Do not add per-page CSS elsewhere —
   a genuinely new pattern gets added HERE, not scattered inline.
   ========================================================================== */

@charset "UTF-8";
/* ==========================================================================
   LASER TEAMWORK — SHARED DESIGN SYSTEM
   Single source of truth for every LaserTeamWork mockup. Import it; do not
   fork it, and do not add page-local CSS. If a page needs something this file
   does not provide, that is a gap in the system — report it, don't patch it.

   Property : laserteamwork.com (machine-agnostic laser education for U.S. educators)
   Stage    : Gate 1 — standalone HTML mockups only. Nothing here is deployed.
   Graduates to: the `ltw` child theme (ekg-base parent) at Gate 2.

   Direction (blueprint §14 "Visual direction" — note: the task brief called this
   §13; §13 is "Interactive tools". Design direction is §14, cross-checked
   against Structure-Spec §5):
     - Academic, practical, calm. Not industrial sales collateral.
     - SUPERSEDED 2026-09-30 by the Workshop Blueprint palette (§02, §23):
       paper + graphite + blueprint blue + beam orange. Kept below for history.
     - Deep blue/teal = technical trust. Green = learning + safe process.
       Warm amber = caution. Restrained red = STOP CONDITIONS ONLY.
     - EXPLICITLY NOT Boss red/black. No brand red anywhere except .ltw-stop.
     - Highly legible sans for body, nav, and tables.

   Rules this file obeys:
     - No external font, CDN, @import, or any network reference. System stacks only.
     - Every text/background pair meets WCAG 2.1 AA (4.5:1 body, 3:1 large text
       and UI boundaries). Measured ratios are stated in comments beside each token.
     - Relative units throughout; tables scroll in their own container.
     - Fluid type follows EKG-Typography-Standard.md: headings fluid, body FIXED.

   CONTENTS
     01  Reset + base
     02  Color tokens (raw ramps)
     03  Semantic color aliases
     04  Typography tokens
     05  Space / measure / radius / shadow / motion tokens
     06  Elements (headings, prose, links, tables, code)
     07  Layout (page shell, sections, containers)
     08  Components
           .ltw-breadcrumb          .ltw-badge          .ltw-chip
           .ltw-meta-bar            .ltw-actions        .ltw-pagination
           .ltw-reviewed            .ltw-reviewed--inline  .ltw-answer
           .ltw-warn                .ltw-stop           .ltw-note
           .ltw-manual-notice       .ltw-sources        .ltw-download
           .ltw-download__body      .ltw-steps          .ltw-table
           .ltw-decision            .ltw-card           .ltw-related
           .ltw-lead-form           .ltw-btn            .ltw-sponsor
           .ltw-figure-scroll
     09  Utilities
     10  Dark mode (prefers-color-scheme)
     11  Print
   ========================================================================== */


/* ==========================================================================
   01  RESET + BASE
   ========================================================================== */

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

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  scroll-behavior: smooth;
  /* Offset for any in-page anchor so headings don't hide under sticky chrome. */
  scroll-padding-top: var(--ltw-space-8);
}

body {
  margin: 0;
  background: var(--ltw-surface);
  color: var(--ltw-ink);
  font-family: var(--ltw-font-sans);
  font-size: var(--ltw-fs-body);
  line-height: var(--ltw-lh-body);
  font-synthesis-weight: none;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

img, svg, video, canvas { max-width: 100%; height: auto; display: block; }
figure { margin: 0; }

button, input, select, textarea { font: inherit; color: inherit; }

/* Visible, high-contrast focus on every interactive thing. Accessibility is a
   stated developer requirement (blueprint §15) — never remove this. */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 3px solid var(--ltw-focus);
  outline-offset: 2px;
  border-radius: var(--ltw-radius-xs);
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* Skip link — first focusable element on every page. */
.ltw-skip {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 100;
  padding: var(--ltw-space-3) var(--ltw-space-5);
  background: var(--ltw-accent);
  color: var(--ltw-on-accent);
  font-weight: 600;
  border-radius: 0 0 var(--ltw-radius-md) 0;
}
.ltw-skip:focus { left: 0; }


/* ==========================================================================
   02  COLOR TOKENS — raw ramps
   Ramps are the vocabulary; §03 assigns meaning. Prefer the semantic alias in
   component CSS so dark mode only has to remap one layer.

   Deliberately absent: any Boss-adjacent pure red (#E00, #C00) or pure black.
   Neutrals are warm paper/graphite (Workshop Blueprint, 2026-09-30).
   ========================================================================== */

:root {
  /* WORKSHOP BLUEPRINT palette — adopted 2026-09-30 from the "Workshop Blueprint
     design system" mockup, tuned and re-measured here. Paper, graphite, one
     blueprint blue, and a sparing beam of orange. Ratios are measured, not guessed.

     --- Neutral ramp (warm paper to graphite) -------------------------------
     On paper (#FAF8F4): n500 5.55 · n600 8.29 · n800 13.71 · n900 17.07      */
  --ltw-n-0:   #FFFFFF;   /* card                                             */
  --ltw-n-25:  #FAF8F4;   /* PAGE PAPER                                        */
  --ltw-n-50:  #F3F0E9;   /* sunken paper band, zebra row                      */
  --ltw-n-100: #EAE6DC;   /* table head, inset                                 */
  --ltw-n-200: #DAD5C9;   /* borders, grid-paper lines (decorative)            */
  --ltw-n-300: #BFB9AC;   /* strong border / disabled                          */
  --ltw-n-400: #9C968A;   /* icon-only, never body text on light               */
  --ltw-n-500: #696459;   /* MUTED TEXT — 5.55 paper, 5.89 white, 4.72 n-100   */
  --ltw-n-600: #4E4A44;   /* secondary text — 8.29 on paper                    */
  --ltw-n-700: #3B3834;   /* strong secondary — 9.36 on n-100                  */
  --ltw-n-800: #2A2926;   /* BODY INK — 13.71 on paper                         */
  --ltw-n-900: #161615;   /* graphite: headings, inverse field                 */
  --ltw-n-950: #0D0D0C;   /* dark-mode deepest                                 */

  /* --- Blueprint ramp — PRIMARY: links, primary buttons, brand surfaces -----
     b-600 7.91 on paper · white on b-600 8.39 · b-700 10.20 on paper          */
  --ltw-blue-50:  #EEF3FA;
  --ltw-blue-100: #DBE5F4;
  --ltw-blue-200: #B4C8E8;  /* dark-mode hover/link — 10.77 on dark page      */
  --ltw-blue-300: #8FAEE0;  /* dark-mode accent — 8.10 on dark page           */
  --ltw-blue-400: #5381C7;  /* UI / large text only                           */
  --ltw-blue-500: #2F5FAC;  /* focus ring — 5.90 on paper                     */
  --ltw-blue-600: #234C8F;  /* PRIMARY                                        */
  --ltw-blue-700: #1B3C73;
  --ltw-blue-800: #152D56;
  --ltw-blue-900: #0E1D38;

  /* --- Beam ramp — THE ACCENT. Section numbers, kicker rules, active nav, the
     short-answer mark. One beam moment per view region; never body text on
     light except beam-600 (5.62 on paper).                                     */
  --ltw-beam-50:  #FDF1E9;
  --ltw-beam-100: #FADFCC;
  --ltw-beam-200: #F4BC98;
  --ltw-beam-300: #F0A06E;  /* dark-mode accent text — 8.67 on dark page      */
  --ltw-beam-400: #E7773A;  /* dark-mode rules                                */
  --ltw-beam-500: #D65B1D;  /* RULES / DOTS only — 3.68 on paper              */
  --ltw-beam-600: #A9440F;  /* accent text — 5.62 paper, 5.38 on beam-50      */
  --ltw-beam-700: #8A3810;

  /* --- Birch — material tone: figure grounds, resource bands, higher-ed ---- */
  --ltw-birch-100: #F2EADB;
  --ltw-birch-200: #E5D6BB;
  --ltw-birch-400: #C4A77A;
  --ltw-birch-600: #8E7048;
  --ltw-birch-800: #5E4A2E;  /* 7.04 on birch-100                             */

  /* --- Green ramp — LEARNING + SAFE PROCESS (unchanged, re-measured) -------
     g-600 6.27 on paper                                                        */
  --ltw-green-50:  #EAF6EF;
  --ltw-green-100: #CFE9DA;
  --ltw-green-200: #A3D5BA;
  --ltw-green-300: #6CC194;
  --ltw-green-400: #3D9A6B;
  --ltw-green-500: #2A7F53;
  --ltw-green-600: #1F6942;
  --ltw-green-700: #17512F;

  /* --- Amber ramp — CAUTION (unchanged). a-600 5.58 on paper -------------- */
  --ltw-amber-50:  #FDF4E3;
  --ltw-amber-100: #FAE6BF;
  --ltw-amber-200: #F2CE86;
  --ltw-amber-400: #D9950F;
  --ltw-amber-500: #A97008;
  --ltw-amber-600: #8A5A06;
  --ltw-amber-700: #6B4505;

  /* --- Red ramp — STOP CONDITIONS ONLY (unchanged). r-600 7.13 on paper ----
     Still the one hard rule: red means "do not proceed" and appears only on
     stop boxes, prohibited-material chips and stop rows. The beam accent is
     orange and never carries a stop meaning.                                   */
  --ltw-red-50:  #FCEDEC;
  --ltw-red-100: #F7D6D3;
  --ltw-red-200: #EFB2AC;
  --ltw-red-300: #E08076;
  --ltw-red-400: #CF4A3C;
  --ltw-red-600: #A32017;
  --ltw-red-700: #801710;
}


/* ==========================================================================
   03  SEMANTIC COLOR ALIASES
   Component CSS uses ONLY these. Dark mode (§10) remaps this block and nothing
   else, which is what keeps light/dark from drifting apart.
   ========================================================================== */

:root {
  /* Surfaces — warm paper page, white cards, graphite inverse */
  --ltw-surface:          var(--ltw-n-25);   /* page paper                     */
  --ltw-surface-card:     var(--ltw-n-0);    /* cards, panels, downloads       */
  --ltw-surface-tint:     var(--ltw-n-50);   /* alternating band, zebra row    */
  --ltw-surface-raised:   var(--ltw-n-0);    /* card, panel                    */
  --ltw-surface-sunken:   var(--ltw-n-100);  /* table head, inset              */
  --ltw-surface-inverse:  var(--ltw-n-900);  /* footer, lead form, dark band   */
  --ltw-surface-material: var(--ltw-birch-100); /* resource bands, figure mats */
  --ltw-band:             var(--ltw-n-50);   /* page-opening paper band        */
  --ltw-grid-line:        var(--ltw-n-200);  /* grid paper behind openings     */

  /* Ink */
  --ltw-ink:              var(--ltw-n-800);  /* body      13.71 on paper       */
  --ltw-ink-strong:       var(--ltw-n-900);  /* headings  17.07 on paper       */
  --ltw-ink-secondary:    var(--ltw-n-600);  /* secondary  8.29 on paper       */
  --ltw-muted:            var(--ltw-n-500);  /* meta       5.55 on paper       */
  --ltw-ink-inverse:      var(--ltw-n-25);   /* on inverse 16.4                */
  --ltw-ink-inverse-muted:#BDB8AD;           /* on inverse  8.82               */

  /* Lines */
  --ltw-border:           var(--ltw-n-200);
  --ltw-border-strong:    var(--ltw-n-300);
  --ltw-border-subtle:    var(--ltw-n-100);
  --ltw-border-ink:       var(--ltw-n-900);  /* card hover, short-answer rule  */

  /* Accent (primary interactive) */
  --ltw-accent:           var(--ltw-blue-600);  /* 7.91 on paper              */
  --ltw-accent-hover:     var(--ltw-blue-700);
  --ltw-accent-press:     var(--ltw-blue-800);
  --ltw-accent-soft:      var(--ltw-blue-50);
  --ltw-accent-soft-line: var(--ltw-blue-200);
  --ltw-on-accent:        var(--ltw-n-0);       /* 8.39 on accent             */
  /* Accent 2 is now the BEAM: kicker numbers, labels, the short-answer mark.
     Text-safe step only; rules and dots use --ltw-beam. */
  --ltw-accent-2:         var(--ltw-beam-600);  /* 5.62 on paper              */
  --ltw-accent-2-soft:    var(--ltw-beam-50);
  --ltw-beam:             var(--ltw-beam-500);  /* rules, dots, active nav    */
  --ltw-info-ink:         var(--ltw-blue-700);  /* 9.71 on accent-soft        */

  /* Learning / safe process */
  --ltw-safe:             var(--ltw-green-600); /* 6.27 on paper              */
  --ltw-safe-ink:         var(--ltw-green-700);
  --ltw-safe-soft:        var(--ltw-green-50);
  --ltw-safe-line:        var(--ltw-green-400);

  /* Caution */
  --ltw-caution:          var(--ltw-amber-600); /* 5.58 on paper              */
  --ltw-caution-ink:      var(--ltw-amber-700);
  --ltw-caution-soft:     var(--ltw-amber-50);
  --ltw-caution-line:     var(--ltw-amber-400);

  /* Stop — restricted to stop conditions */
  --ltw-stop:             var(--ltw-red-600);   /* 7.13 on paper              */
  --ltw-stop-ink:         var(--ltw-red-700);
  --ltw-stop-soft:        var(--ltw-red-50);
  --ltw-stop-line:        var(--ltw-red-400);
  --ltw-on-stop:          var(--ltw-n-0);

  /* Body text sitting on any tinted callout surface */
  --ltw-ink-on-tint:      var(--ltw-n-800);
  --ltw-muted-on-tint:    var(--ltw-n-500);

  /* Focus ring — blueprint, never an error colour. 5.90 on paper. */
  --ltw-focus:            var(--ltw-blue-500);

  /* Link */
  --ltw-link:             var(--ltw-blue-600);
  --ltw-link-hover:       var(--ltw-blue-800);
  --ltw-link-visited:     var(--ltw-blue-700);  /* 10.2 on paper              */
}


/* ==========================================================================
   04  TYPOGRAPHY TOKENS
   Follows EKG-Typography-Standard.md: 7 named steps; HEADINGS FLUID, BODY FIXED.
   Fluid window is 768px → 1600px, matching WordPress fluid typography, so these
   mockups and the eventual theme presets render identically.

   Body being fixed is intentional, not an omission — fluid body text is an
   accessibility anti-pattern and this site is read on classroom projectors,
   Chromebooks, and printouts.

   No webfont. System sans only: no network reference, and the stack is already
   the most legible option on every device a school actually owns.
   ========================================================================== */

:root {
  /* Workshop Blueprint type (2026-09-30). Three open-licence (SIL OFL) faces,
     SELF-HOSTED from assets/fonts (licences alongside) — no network reference
     to Google or any CDN, so this file's no-third-party rule still holds.
     System stacks remain as fallbacks, so a failed font load still reads well.
     Second in each stack is a local font sized to the web font (§23.1), so the
     page doesn't move when the font arrives; theme.json's presets match.
       Hanken Grotesk  — headings (700–800, tight tracking) and body
       Newsreader      — the short answer, ledes, quotes only
       JetBrains Mono  — kickers, metadata, breadcrumbs, captions           */
  --ltw-font-sans: "Hanken Grotesk", "LTW Sans Fallback", system-ui, -apple-system, "Segoe UI", Roboto,
                   "Helvetica Neue", Arial, "Noto Sans", sans-serif;
  --ltw-font-serif: "Newsreader", "LTW Serif Fallback", Georgia, Cambria, "Times New Roman", Times, serif;
  --ltw-font-mono: "JetBrains Mono", "LTW Mono Fallback", ui-monospace, SFMono-Regular, "SF Mono", Menlo,
                   Consolas, "Liberation Mono", monospace;

  /* --- The 7 steps (EKG-Typography-Standard: headings fluid, body fixed) --- */
  --ltw-fs-xs:    0.75rem;   /* 12px  kicker / badge                fixed      */
  --ltw-fs-sm:    0.875rem;  /* 14px  meta / caption                fixed      */
  --ltw-fs-body:  1.0625rem; /* 17px  body; Hanken's x-height wants it         */
  --ltw-fs-lead:  1.1875rem; /* 19px  intro / lead paragraph        fixed      */
  --ltw-fs-h3:    clamp(1.375rem, 1.19rem + 0.39vw, 1.625rem);  /* 22 to 26     */
  --ltw-fs-h2:    clamp(1.75rem,  1.17rem + 1.2vw,  2.375rem);  /* 28 to 38     */
  --ltw-fs-h1:    clamp(2.25rem,  1.33rem + 1.92vw, 3.25rem);   /* 36 to 52     */
  --ltw-fs-h4:    1.1875rem;  /* 19px */
  --ltw-fs-h5:    1.0625rem;  /* 17px */

  /* Line heights */
  --ltw-lh-tight:  1.12;
  --ltw-lh-snug:   1.3;
  --ltw-lh-body:   1.65;
  --ltw-lh-loose:  1.72;

  /* Weights */
  --ltw-fw-normal: 400;
  --ltw-fw-medium: 500;
  --ltw-fw-semi:   600;
  --ltw-fw-bold:   700;
  --ltw-fw-heavy:  800;

  /* Tracking */
  --ltw-ls-eyebrow: 0.09em;   /* mono kickers                                */
  --ltw-ls-wide:    0.09em;
  --ltw-ls-tight:  -0.018em;  /* headings                                    */
  --ltw-ls-display:-0.03em;   /* h1                                          */
}


/* ==========================================================================
   05  SPACE / MEASURE / RADIUS / SHADOW / MOTION
   Space scale is a 4px base with a soft geometric climb. Use tokens, not
   arbitrary values — this is what makes five separately-authored pages look
   like one site.
   ========================================================================== */

:root {
  --ltw-space-0:  0;
  --ltw-space-1:  0.25rem;   /*  4px */
  --ltw-space-2:  0.5rem;    /*  8px */
  --ltw-space-3:  0.75rem;   /* 12px */
  --ltw-space-4:  1rem;      /* 16px */
  --ltw-space-5:  1.5rem;    /* 24px */
  --ltw-space-6:  2rem;      /* 32px */
  --ltw-space-7:  2.5rem;    /* 40px */
  --ltw-space-8:  3rem;      /* 48px */
  --ltw-space-9:  4rem;      /* 64px */
  --ltw-space-10: 5rem;      /* 80px */
  --ltw-space-11: 6.5rem;    /* 104px */

  /* Measure — reading line length. Body copy never exceeds --ltw-measure. */
  --ltw-measure:        68ch;
  --ltw-measure-narrow: 56ch;
  --ltw-measure-wide:   80ch;

  /* Containers */
  --ltw-container:      75rem;   /* 1200px — the blueprint container          */
  --ltw-container-wide: 84rem;
  --ltw-container-text: 46rem;
  --ltw-gutter:         clamp(1.25rem, 4vw, 2.5rem);

  /* Radius — 4px controls, 6px callouts, 10px cards and image frames. */
  --ltw-radius-xs:   2px;
  --ltw-radius-sm:   4px;
  --ltw-radius-md:   6px;
  --ltw-radius-lg:   10px;
  --ltw-radius-pill: 999px;

  /* Shadow — warm graphite. Borders do the work; shadow is for lift. */
  --ltw-shadow-xs: 0 1px 0 rgba(22, 22, 21, 0.04);
  --ltw-shadow-sm: 0 1px 0 rgba(22, 22, 21, 0.04), 0 1px 3px rgba(22, 22, 21, 0.06);
  --ltw-shadow-md: 0 1px 2px rgba(22, 22, 21, 0.05), 0 10px 28px -12px rgba(22, 22, 21, 0.18);
  --ltw-shadow-lg: 0 2px 4px rgba(22, 22, 21, 0.06), 0 24px 48px -16px rgba(22, 22, 21, 0.24);

  /* Motion — 120–200ms ease-out; no bounce, no scroll-jacking. */
  --ltw-ease: cubic-bezier(0.2, 0.7, 0.2, 1);
  --ltw-dur:  160ms;

  /* Structural */
  --ltw-rule: 1px solid var(--ltw-border);
  /* Callouts are fully bordered tinted boxes, never a coloured left stripe.
     The decision table keeps its own state bar (--ltw-state-bar). */
  --ltw-callout-bar: 1px;
  --ltw-state-bar:   4px;
  --ltw-rule-path:   1.5px dashed var(--ltw-border-strong);  /* planned / placeholder */
}


/* ==========================================================================
   06  ELEMENTS
   ========================================================================== */

h1, h2, h3, h4, h5, h6 {
  margin: 0 0 var(--ltw-space-4);
  color: var(--ltw-ink-strong);
  font-weight: var(--ltw-fw-bold);
  line-height: var(--ltw-lh-snug);
  letter-spacing: var(--ltw-ls-tight);
  text-wrap: balance;
}
/* Heading caps are in em, not ch (0.9.6): 1ch is the "0" of whatever font is
   showing, so before the font arrived the box itself was 5.6% narrower and
   headings wrapped an extra line. Hanken's "0" is 0.56em at every weight, so
   20ch = 11.2em, 19ch = 10.64em, 13ch = 7.28em: the same width once it loads. */
h1 { font-size: var(--ltw-fs-h1); line-height: var(--ltw-lh-tight); max-width: 11.2em; }
h2 { font-size: var(--ltw-fs-h2); line-height: var(--ltw-lh-tight); margin-top: var(--ltw-space-8); }
h3 { font-size: var(--ltw-fs-h3); margin-top: var(--ltw-space-7); }
h4 { font-size: var(--ltw-fs-h4); margin-top: var(--ltw-space-6); font-weight: var(--ltw-fw-semi); }
h5 { font-size: var(--ltw-fs-h5); margin-top: var(--ltw-space-5); font-weight: var(--ltw-fw-semi); }
h6 {
  font-size: var(--ltw-fs-sm); margin-top: var(--ltw-space-5);
  font-weight: var(--ltw-fw-semi); text-transform: uppercase;
  letter-spacing: var(--ltw-ls-eyebrow); color: var(--ltw-ink-secondary);
}
/* First heading in a container should not push the container open. */
:where(section, article, aside, div, td, th) > :where(h1,h2,h3,h4,h5,h6):first-child { margin-top: 0; }

p, ul, ol, dl, figure, blockquote, pre { margin: 0 0 var(--ltw-space-5); }
p:last-child, ul:last-child, ol:last-child { margin-bottom: 0; }

strong, b { font-weight: var(--ltw-fw-semi); color: var(--ltw-ink-strong); }
small { font-size: var(--ltw-fs-sm); }

a {
  color: var(--ltw-link);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.16em;
  transition: color var(--ltw-dur) var(--ltw-ease);
}
a:hover { color: var(--ltw-link-hover); text-decoration-thickness: 2px; }
a:visited { color: var(--ltw-link-visited); }

hr {
  border: 0;
  border-top: var(--ltw-rule);
  margin: var(--ltw-space-8) 0;
}

code, kbd, samp {
  font-family: var(--ltw-font-mono);
  font-size: 0.9em;
  background: var(--ltw-surface-sunken);
  border: 1px solid var(--ltw-border-subtle);
  border-radius: var(--ltw-radius-xs);
  padding: 0.1em 0.35em;
}
pre {
  font-family: var(--ltw-font-mono);
  font-size: var(--ltw-fs-sm);
  background: var(--ltw-surface-sunken);
  border: var(--ltw-rule);
  border-radius: var(--ltw-radius-md);
  padding: var(--ltw-space-4);
  overflow-x: auto;
}
pre code { background: none; border: 0; padding: 0; }

blockquote {
  margin-inline: 0;
  padding-left: var(--ltw-space-5);
  border-left: var(--ltw-callout-bar) solid var(--ltw-accent-soft-line);
  color: var(--ltw-ink-secondary);
}

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


/* ==========================================================================
   07  LAYOUT
   ========================================================================== */

.ltw-container      { width: 100%; max-width: var(--ltw-container);      margin-inline: auto; padding-inline: var(--ltw-gutter); }
.ltw-container--wide{ max-width: var(--ltw-container-wide); }
.ltw-container--text{ max-width: var(--ltw-container-text); }

/* Article body column: keeps prose at a readable measure while letting tables,
   callouts, and figures break out to the full container width. */
.ltw-prose { max-width: var(--ltw-measure); }
.ltw-prose > p,
.ltw-prose > ul,
.ltw-prose > ol { max-width: var(--ltw-measure); }
.ltw-prose > :where(.ltw-table-wrap, figure, .ltw-card-grid, .ltw-download-grid, .ltw-steps) { max-width: none; }
.ltw-lead { font-size: var(--ltw-fs-lead); line-height: var(--ltw-lh-loose); color: var(--ltw-ink-secondary); max-width: var(--ltw-measure-narrow); }

/* Vertical rhythm between page sections. */
.ltw-section       { padding-block: var(--ltw-space-9); }
.ltw-section--tight{ padding-block: var(--ltw-space-7); }
.ltw-section--tint { background: var(--ltw-surface-tint); }
.ltw-section--sunken { background: var(--ltw-surface-raised); }

/* Hero band — a light section head with the photograph shown, not hidden.

   This was first built as a dark scrim over a full-bleed background image.
   That was the wrong instinct for a reading site: it put one marketing-shaped
   band at the top of what is otherwise a continuous light reading surface, and
   a cold blue scrim over a warm photograph composited to olive in the midtones.
   It also hid the picture it was built around, at 62-94% opacity.

   The photograph is now a real <img> beside the type — visible, alt-texted,
   responsive via srcset — and the type sits on the ordinary page surface where
   no contrast gymnastics are needed.

   Markup:
     <div class="ltw-section ltw-section--hero">
       <div class="ltw-container ltw-container--wide ltw-hero-grid">
         <div class="ltw-hero-body"> eyebrow, h1, lead, prose, buttons </div>
         <figure class="ltw-hero-figure"><img …></figure>
       </div></div>                                                           */

.ltw-section--hero {
  padding-block: var(--ltw-space-9);
  background: var(--ltw-surface-tint);
}

.ltw-hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(1.75rem, 4vw, 3.25rem);
  align-items: center;
}

/* Two columns only where there is room for a readable measure AND a photograph
   still worth looking at. Below that they stack, type first. */
@media (min-width: 62rem) {
  .ltw-hero-grid { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); }
}

.ltw-hero-body > :first-child { margin-top: 0; }
.ltw-hero-body > :last-child  { margin-bottom: 0; }
.ltw-hero-body :where(p, ul, ol) { max-width: var(--ltw-measure-narrow); }

.ltw-hero-figure { margin: 0; }

.ltw-hero-figure img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: cover;
  object-position: center 58%;   /* favours the hands and the workpiece */
  border: var(--ltw-rule);
  border-radius: var(--ltw-radius-md);
}

@media (max-width: 61.999rem) {
  .ltw-hero-figure img { aspect-ratio: 16 / 9; }
}

@media print {
  .ltw-section--hero { background: transparent; }
  .ltw-hero-figure { display: none; }
}

/* Header / footer field — the one place the deep-blue inverse surface is used. */
.ltw-band-inverse {
  background: var(--ltw-surface-inverse);
  color: var(--ltw-ink-inverse);
}
.ltw-band-inverse :where(h1,h2,h3,h4,h5,h6) { color: var(--ltw-ink-inverse); }
.ltw-band-inverse a { color: var(--ltw-blue-200); }
.ltw-band-inverse a:hover { color: var(--ltw-n-0); }

.ltw-eyebrow {
  display: block;
  font-size: var(--ltw-fs-sm);
  font-weight: var(--ltw-fw-semi);
  letter-spacing: var(--ltw-ls-eyebrow);
  text-transform: uppercase;
  /* Was --ltw-accent-2 (teal #0A626E). Retired from section heads 2026-07-27:
     it was the only non-blue colour in the reading column, it appears above
     every section of every page, and it read as "green" against the warm
     photography. An eyebrow is a quiet section label, not an accent — the
     neutral does that job and leaves the palette one blue family + neutrals.
     Teal still lives on badges, chips and the logo, where it is doing a
     different and much smaller job. */
  color: var(--ltw-ink-secondary);      /* 7.15:1 on surface */
  margin-bottom: var(--ltw-space-2);
}

/* Stack utility — the workhorse for vertical spacing inside components. */
.ltw-stack       > * + * { margin-top: var(--ltw-space-5); }
.ltw-stack-sm    > * + * { margin-top: var(--ltw-space-3); }
.ltw-stack-lg    > * + * { margin-top: var(--ltw-space-7); }


/* ==========================================================================
   08  COMPONENTS
   These recur on every page type. Build pages FROM these; do not restyle them.
   ========================================================================== */

/* --- 8.1 Breadcrumb -------------------------------------------------------
   Markup: <nav class="ltw-breadcrumb" aria-label="Breadcrumb">
             <ol><li><a href="/">Home</a></li><li><a…>Safety</a></li>
                 <li><span aria-current="page">…</span></li></ol></nav>       */

.ltw-breadcrumb { font-size: var(--ltw-fs-sm); color: var(--ltw-muted); }
.ltw-breadcrumb ol {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--ltw-space-1) var(--ltw-space-2);
}
.ltw-breadcrumb li { display: flex; align-items: center; gap: var(--ltw-space-2); }
.ltw-breadcrumb li + li::before {
  content: "/";
  color: var(--ltw-border-strong);
  font-weight: var(--ltw-fw-normal);
}
.ltw-breadcrumb a { color: var(--ltw-ink-secondary); text-decoration: none; }
.ltw-breadcrumb a:hover { color: var(--ltw-link-hover); text-decoration: underline; }
.ltw-breadcrumb [aria-current="page"] { color: var(--ltw-ink); font-weight: var(--ltw-fw-medium); }


/* --- 8.2 Audience badge ---------------------------------------------------
   Who a page is for. One of three, per Structure-Spec §2.1 `audience` taxonomy.
   Markup: <span class="ltw-badge ltw-badge--6-12">Grades 6–12</span>
   Modifiers: --6-12 (blue) · --higher-ed (birch) · --admin (neutral)
   All three carry a text label — colour is never the only signal.             */

.ltw-badge {
  display: inline-flex; align-items: center; gap: var(--ltw-space-2);
  padding: var(--ltw-space-1) var(--ltw-space-3);
  font-size: var(--ltw-fs-xs);
  font-weight: var(--ltw-fw-semi);
  line-height: var(--ltw-lh-snug);
  letter-spacing: 0.02em;
  border-radius: var(--ltw-radius-pill);
  border: 1px solid transparent;
  white-space: nowrap;
}
.ltw-badge::before {
  content: "";
  width: 0.5em; height: 0.5em; border-radius: 50%;
  background: currentColor; flex: none;
}
.ltw-badge--6-12 {
  background: var(--ltw-accent-soft);
  color: var(--ltw-blue-700);        /* 8.74:1 on blue-100/-50 */
  border-color: var(--ltw-accent-soft-line);
}
.ltw-badge--higher-ed {
  background: var(--ltw-surface-material);
  color: var(--ltw-birch-800);       /* 7.04:1 on birch-100 */
  border-color: var(--ltw-birch-200);
}
.ltw-badge--admin {
  background: var(--ltw-surface-sunken);
  color: var(--ltw-n-700);           /* 8.15:1 on n-100 */
  border-color: var(--ltw-border);
}


/* --- 8.3 Chips ------------------------------------------------------------
   Compact factual metadata. Distinct from badges: badges say WHO, chips say
   WHAT/HOW MUCH. Chips carry an explicit label so they read out of context.

   Markup: <span class="ltw-chip ltw-chip--minutes">
             <span class="ltw-chip__label">Actual laser minutes</span>
             <span class="ltw-chip__value">12 min</span></span>

   Variants:
     .ltw-chip--grade     grade / level        (neutral)
     .ltw-chip--minutes   actual laser minutes (birch — the blueprint's signature
                          metric: machine time, NOT class time)
     .ltw-chip--periods   class periods        (neutral)
     .ltw-chip--material  material status; REQUIRES a state class:
         .is-approved   green  — cleared for classroom use
         .is-caution    amber  — conditional: ventilation, supervision, testing
         .is-prohibited red    — never cut/engrave. STOP-class information, and
                                 the one chip permitted to use red.
   Material status also sets a text prefix so the state survives greyscale
   printing and colour-blind reading.                                          */

.ltw-chip {
  display: inline-flex; align-items: baseline; gap: var(--ltw-space-2);
  padding: var(--ltw-space-1) var(--ltw-space-3);
  font-size: var(--ltw-fs-xs);
  line-height: var(--ltw-lh-snug);
  background: var(--ltw-surface-raised);
  border: 1px solid var(--ltw-border);
  border-radius: var(--ltw-radius-sm);
  color: var(--ltw-ink);
}
.ltw-chip__label {
  color: var(--ltw-muted);
  font-weight: var(--ltw-fw-normal);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 0.92em;
}
.ltw-chip__label::after { content: ":"; }
.ltw-chip__value { font-weight: var(--ltw-fw-semi); font-variant-numeric: tabular-nums; }

/* Grade/level and class-periods chips use the neutral base deliberately —
   they are context, not status. Declared explicitly so the intent is legible. */
.ltw-chip--grade,
.ltw-chip--periods { background: var(--ltw-surface-raised); border-color: var(--ltw-border); }

.ltw-chip--minutes {
  background: var(--ltw-surface-material);
  border-color: var(--ltw-birch-200);
  color: var(--ltw-birch-800);
}
.ltw-chip--minutes .ltw-chip__label { color: var(--ltw-birch-800); opacity: 0.85; }

.ltw-chip--material .ltw-chip__value::before { font-weight: var(--ltw-fw-bold); margin-right: 0.35em; }
.ltw-chip--material.is-approved {
  background: var(--ltw-safe-soft); border-color: var(--ltw-green-200); color: var(--ltw-safe-ink);
}
.ltw-chip--material.is-approved .ltw-chip__value::before  { content: "✓"; }
.ltw-chip--material.is-approved .ltw-chip__label { color: var(--ltw-safe-ink); opacity: 0.85; }
.ltw-chip--material.is-caution {
  background: var(--ltw-caution-soft); border-color: var(--ltw-amber-200); color: var(--ltw-caution-ink);
}
.ltw-chip--material.is-caution .ltw-chip__value::before { content: "!"; }
.ltw-chip--material.is-caution .ltw-chip__label { color: var(--ltw-caution-ink); opacity: 0.85; }
.ltw-chip--material.is-prohibited {
  background: var(--ltw-stop-soft); border-color: var(--ltw-red-200); color: var(--ltw-stop-ink);
}
.ltw-chip--material.is-prohibited .ltw-chip__value::before { content: "✕"; }
.ltw-chip--material.is-prohibited .ltw-chip__label { color: var(--ltw-stop-ink); opacity: 0.85; }

/* Row wrapper for METADATA ONLY — audience badges and factual chips under a
   page title, or in the foot of a card. It is NOT a button row and NOT a
   pager: those are .ltw-actions and .ltw-pagination (§8.3b). Keeping meta-bar
   to one job is what stopped it drifting into four. */
.ltw-meta-bar {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--ltw-space-2) var(--ltw-space-3);
  margin-block: var(--ltw-space-4);
}


/* --- 8.3b Action row + pagination -----------------------------------------
   The two jobs .ltw-meta-bar used to be overloaded with, each now its own
   component so a title's metadata row and a page's buttons never share a class.

   .ltw-actions     a row of buttons — hero CTAs, form submit/reset, tool
                    controls. Honors the one-primary-per-section rule (§8.14):
                    at most one .ltw-btn--primary in the row.
   .ltw-pagination  an archive pager — previous / numbered pages / next. Use a
                    <button disabled> for an unavailable step, never a bare
                    <span>, so keyboard and AT users get a real disabled control.

   Markup:
     <div class="ltw-actions">
       <a class="ltw-btn ltw-btn--primary" href="…">Primary</a>
       <a class="ltw-btn ltw-btn--ghost"   href="…">Secondary</a></div>
     <nav class="ltw-pagination" aria-label="… pagination">
       <button class="ltw-btn ltw-btn--ghost ltw-btn--sm" type="button" disabled>Previous</button>
       <a class="ltw-btn ltw-btn--primary ltw-btn--sm" href="…" aria-current="page">1</a>
       <a class="ltw-btn ltw-btn--ghost ltw-btn--sm" href="…">2</a>
       <span class="ltw-pagination__ellipsis" aria-hidden="true">…</span>
       <a class="ltw-btn ltw-btn--ghost ltw-btn--sm" href="…">Next</a></nav>          */

.ltw-actions {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--ltw-space-3);
  margin-block: var(--ltw-space-5);
}
.ltw-actions--tight { margin-block: var(--ltw-space-4); }

.ltw-pagination {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--ltw-space-2);
  margin-block: var(--ltw-space-6);
}
.ltw-pagination__ellipsis { color: var(--ltw-muted); padding-inline: var(--ltw-space-1); }


/* --- 8.4 Reviewed date + reviewer status ----------------------------------
   Editorial provenance. This is an EEAT-load-bearing component — it is how the
   site is honest about what has and has not been externally reviewed.

   DATE LABEL — sitewide, pick ONE verb and ONE format:
     verb   = "Updated"  — NOT "Reviewed". "Reviewed" reads as an external-review
              (EEAT) claim, and nothing on this site has been externally reviewed
              yet; the __status span below carries the actual review state. The
              date is only "when we last touched the editorial copy", so it says
              "Updated".
     format = "D Month YYYY" spelled in full — e.g. "Updated 24 July 2026". Never
              an abbreviated month ("22 Jul"), never a numeric or non-US order.

   Markup: <p class="ltw-reviewed">
             <span class="ltw-reviewed__date">Updated 24 July 2026</span>
             <span class="ltw-reviewed__status is-unreviewed">
               Not externally reviewed</span></p>

   States (be accurate — do not upgrade a status to make a page look better):
     .is-reviewed     green  — reviewed by a named qualified party
     .is-pending      amber  — in review / awaiting qualified review
     .is-unreviewed   neutral— no external technical review has occurred

   .ltw-reviewed--inline is the COMPACT variant for cards: no top/bottom rule,
   no block padding, xs type, so a card can show its review status at the foot
   of the card without the full page-bar treatment.                            */

.ltw-reviewed {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--ltw-space-2) var(--ltw-space-4);
  font-size: var(--ltw-fs-sm);
  color: var(--ltw-muted);
  padding-block: var(--ltw-space-3);
  border-top: var(--ltw-rule);
  border-bottom: var(--ltw-rule);
}
.ltw-reviewed__date { font-variant-numeric: tabular-nums; }
.ltw-reviewed__by   { color: var(--ltw-ink-secondary); }
.ltw-reviewed__status {
  display: inline-flex; align-items: center; gap: var(--ltw-space-2);
  font-weight: var(--ltw-fw-semi);
}
.ltw-reviewed__status::before {
  content: ""; width: 0.55em; height: 0.55em; border-radius: 50%;
  background: currentColor; flex: none;
}
.ltw-reviewed__status.is-reviewed   { color: var(--ltw-safe); }
.ltw-reviewed__status.is-pending    { color: var(--ltw-caution); }
.ltw-reviewed__status.is-unreviewed { color: var(--ltw-ink-secondary); }
.ltw-reviewed__status.is-unreviewed::before { background: none; border: 2px solid currentColor; }

/* Compact card variant — drops the page-bar rules and padding so review status
   can ride at the foot of a .ltw-card. */
.ltw-reviewed--inline {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--ltw-space-1) var(--ltw-space-3);
  margin: 0;
  padding: 0;
  border: 0;
  font-size: var(--ltw-fs-xs);
  line-height: var(--ltw-lh-snug);
}
.ltw-card > .ltw-reviewed--inline { margin-top: var(--ltw-space-3); }


/* --- 8.5 Direct answer ----------------------------------------------------
   The blueprint's page hierarchy opens with "Title + direct answer". This is
   that block: the one-paragraph answer, before any explanation.               */

.ltw-answer {
  background: var(--ltw-accent-soft);
  border: 1px solid var(--ltw-accent-soft-line);
  border-left: var(--ltw-callout-bar) solid var(--ltw-accent);
  border-radius: 0 var(--ltw-radius-md) var(--ltw-radius-md) 0;
  padding: var(--ltw-space-5) var(--ltw-space-5) var(--ltw-space-5) var(--ltw-space-6);
  margin-block: var(--ltw-space-6);
  color: var(--ltw-ink-on-tint);
  font-size: var(--ltw-fs-lead);
  line-height: var(--ltw-lh-loose);
  max-width: var(--ltw-measure);
}
.ltw-answer__label {
  display: block;
  font-size: var(--ltw-fs-xs); font-weight: var(--ltw-fw-bold);
  text-transform: uppercase; letter-spacing: var(--ltw-ls-eyebrow);
  color: var(--ltw-info-ink);
  margin-bottom: var(--ltw-space-2);
}


/* --- 8.6 Callout boxes: WARNING and STOP ----------------------------------
   These two must be unmistakably different at a glance, in greyscale, and in
   print. They differ in colour, icon, border weight, and label — four signals.

   WARNING (amber) = proceed with specific precautions.
   STOP    (red)   = do not proceed. Conditions that can injure someone or
                     start a fire. THE ONLY RED ON THE SITE.

   Markup:
     <aside class="ltw-warn" role="note">
       <p class="ltw-warn__title">Ventilation required</p>
       <p>…</p></aside>
     <aside class="ltw-stop" role="alert">
       <p class="ltw-stop__title">Never cut PVC or vinyl</p>
       <p>…</p></aside>

   Do NOT use .ltw-stop for emphasis, deadlines, form errors, or "important".
   If it is not a stop condition, it is a .ltw-warn or a .ltw-note.            */

.ltw-warn,
.ltw-stop,
.ltw-note {
  --_bar: var(--ltw-border-strong);
  --_bg:  var(--ltw-surface-raised);
  --_ink: var(--ltw-ink-on-tint);
  --_accent: var(--ltw-ink-secondary);
  position: relative;
  background: var(--_bg);
  color: var(--_ink);
  border: 1px solid var(--_bar);
  border-left-width: var(--ltw-callout-bar);
  border-radius: 0 var(--ltw-radius-md) var(--ltw-radius-md) 0;
  padding: var(--ltw-space-5) var(--ltw-space-5) var(--ltw-space-5) var(--ltw-space-6);
  margin-block: var(--ltw-space-6);
  max-width: var(--ltw-measure-wide);
}
.ltw-warn__title,
.ltw-stop__title,
.ltw-note__title {
  display: flex; align-items: baseline; gap: var(--ltw-space-2);
  margin: 0 0 var(--ltw-space-2);
  font-size: var(--ltw-fs-body);
  font-weight: var(--ltw-fw-bold);
  color: var(--_accent);
}
.ltw-warn__title::before,
.ltw-stop__title::before,
.ltw-note__title::before {
  flex: none;
  font-weight: var(--ltw-fw-bold);
  font-size: 1.05em;
}
/* Text prefixes double as the greyscale/screen-reader-adjacent signal. */
.ltw-warn__title::before { content: "\26A0"; }  /* ⚠ */
.ltw-stop__title::before { content: "\26D4"; }  /* ⛔ */
.ltw-note__title::before { content: "\2139"; }  /* ℹ */

.ltw-warn {
  --_bg:  var(--ltw-caution-soft);
  --_bar: var(--ltw-caution-line);
  --_accent: var(--ltw-caution-ink);   /* 7.76:1 on amber-50 */
}
.ltw-stop {
  --_bg:  var(--ltw-stop-soft);
  --_bar: var(--ltw-stop-line);
  --_accent: var(--ltw-stop-ink);      /* 9.02:1 on red-50 */
  border-left-width: 6px;              /* heavier bar — outranks a warning */
  box-shadow: var(--ltw-shadow-sm);
}
.ltw-note {
  --_bg:  var(--ltw-accent-soft);
  --_bar: var(--ltw-accent-soft-line);
  /* Was a fixed --ltw-blue-700: the surface went dark in dark mode and the
     title did not, 1.33:1. The token remaps with the surface. */
  --_accent: var(--ltw-info-ink);
}
/* Safe/green variant — "this is the correct practice" affirmations. */
.ltw-note--safe {
  --_bg:  var(--ltw-safe-soft);
  --_bar: var(--ltw-safe-line);
  --_accent: var(--ltw-safe-ink);
}
.ltw-note--safe .ltw-note__title::before { content: "\2713"; }  /* ✓ */

.ltw-warn > :last-child,
.ltw-stop > :last-child,
.ltw-note > :last-child { margin-bottom: 0; }
/* Emphasis inside a title keeps the title's semantic colour rather than the
   generic strong/heading ink. Links keep their own treatment. */
:is(.ltw-note__title, .ltw-warn__title, .ltw-stop__title, .ltw-answer__label) :is(strong, b, em) { color: inherit; }


/* --- 8.7 "Check your manual and local policy" notice ----------------------
   The standing jurisdictional boundary. Per the property's house rules this
   appears on every safety, materials, and procedure page. It is deliberately
   quieter than a warning box — it is a permanent scope statement, not an alert,
   and letting it shout would desensitise readers to the boxes that matter.

   Markup: <p class="ltw-manual-notice">Settings, materials, and procedures
     vary by machine, exhaust, and material batch. Always follow your
     manufacturer's manual, your district or campus policy, and local law.</p> */

/* Block + absolutely-positioned icon, NOT flex.
   Under flex (or grid) each child ELEMENT becomes its own item and contiguous text runs become
   anonymous items — so the common `text <strong>Scope.</strong> more text` markup rendered as three
   fragments in a row instead of one paragraph. Four of five mockups hit this. Block layout keeps the
   notice a normal paragraph whether or not the author wraps the content in a <span>, so the component
   can no longer be built wrong. Fixed 2026-07-24. */
.ltw-manual-notice {
  display: block;
  position: relative;
  padding: var(--ltw-space-4);
  padding-inline-start: calc(var(--ltw-space-4) + 1.1em + var(--ltw-space-3));
  background: var(--ltw-surface-raised);
  border: 1px dashed var(--ltw-border-strong);
  border-radius: var(--ltw-radius-md);
  font-size: var(--ltw-fs-sm);
  line-height: var(--ltw-lh-body);
  color: var(--ltw-ink-secondary);
  margin-block: var(--ltw-space-6);
  max-width: var(--ltw-measure-wide);
}
.ltw-manual-notice::before {
  content: "\1F4D8";              /* 📘 */
  position: absolute;
  inset-inline-start: var(--ltw-space-4);
  inset-block-start: var(--ltw-space-4);
  font-size: 1.1em;
  line-height: 1.3;
}
.ltw-manual-notice strong { color: var(--ltw-ink); }


/* --- 8.8 Source panel -----------------------------------------------------
   Numbered citations. "Cite, don't invent" is the house rule; this is where it
   becomes visible. Superscript refs in body copy link down to these entries.

   Markup:
     <section class="ltw-sources" aria-labelledby="sources-h">
       <h2 class="ltw-sources__title" id="sources-h">Sources</h2>
       <ol class="ltw-sources__list">
         <li id="src-1"><span class="ltw-sources__pub">OSHA</span>
             <a href="…">Title of the document</a>
             <span class="ltw-sources__date">Accessed 22 July 2026</span></li>
       </ol>
       <p class="ltw-sources__scope">Scope and escalation: …</p>
     </section>
   Inline reference: <a class="ltw-ref" href="#src-1">1</a>

   HEADING LEVEL (governs .ltw-sources__title, .ltw-related__title, and
   .ltw-download__title): the DEFAULT is h2 — use it when the component is its
   OWN page-level section. When the component sits INSIDE a section that already
   has a heading, step the level DOWN so the page outline stays correct: a
   Sources panel nested under a section's h2 uses h3. Match the outline, not a
   fixed tag — the same class is h2 on one page and h3 on another, and both are
   right.                                                                       */

.ltw-sources {
  background: var(--ltw-surface-raised);
  border: var(--ltw-rule);
  border-radius: var(--ltw-radius-lg);
  padding: var(--ltw-space-6);
  margin-block: var(--ltw-space-8);
}
.ltw-sources__title {
  font-size: var(--ltw-fs-h4);
  margin: 0 0 var(--ltw-space-4);
  color: var(--ltw-ink-strong);
}
.ltw-sources__list {
  list-style: none;
  counter-reset: ltw-src;
  margin: 0; padding: 0;
  display: grid; gap: var(--ltw-space-4);
  font-size: var(--ltw-fs-sm);
  line-height: var(--ltw-lh-body);
}
.ltw-sources__list > li {
  counter-increment: ltw-src;
  position: relative;
  display: block;
  padding-inline-start: calc(2rem + var(--ltw-space-3));
  min-height: 1.75rem;
  color: var(--ltw-ink-secondary);
}
.ltw-sources__list > li::before {
  content: counter(ltw-src);
  position: absolute; inset-inline-start: 0; top: 0;
  display: grid; place-items: center;
  width: 1.75rem; height: 1.75rem;
  background: var(--ltw-accent);
  color: var(--ltw-on-accent);
  border-radius: var(--ltw-radius-sm);
  font-size: var(--ltw-fs-xs);
  font-weight: var(--ltw-fw-bold);
  font-variant-numeric: tabular-nums;
}
.ltw-sources__pub  { display: block; font-weight: var(--ltw-fw-semi); color: var(--ltw-ink); }
.ltw-sources__date { display: block; color: var(--ltw-muted); font-variant-numeric: tabular-nums; }
.ltw-sources__scope {
  margin: var(--ltw-space-5) 0 0;
  padding-top: var(--ltw-space-4);
  border-top: var(--ltw-rule);
  font-size: var(--ltw-fs-sm);
  color: var(--ltw-muted);
}
/* Inline superscript citation marker. */
.ltw-ref {
  font-size: 0.72em;
  font-weight: var(--ltw-fw-bold);
  vertical-align: super;
  line-height: 0;
  padding: 0 0.15em;
  text-decoration: none;
  color: var(--ltw-accent);
}
.ltw-ref:hover { text-decoration: underline; }
.ltw-ref::before { content: "["; }
.ltw-ref::after  { content: "]"; }


/* --- 8.9 Download / template block ----------------------------------------
   The blueprint asks for "a reusable artifact rather than a generic CTA".
   Versioned, with a visible revision date — a §15 developer requirement.

   Markup:
     <div class="ltw-download">
       <div class="ltw-download__icon" aria-hidden="true">PDF</div>
       <div class="ltw-download__body">
         <h3 class="ltw-download__title">Pre-cut safety checklist</h3>
         <p class="ltw-download__desc">One page, printable, no branding.</p>
         <p class="ltw-download__meta">
           <span>PDF · 148 KB</span><span>v1.2</span><span>Revised 22 July 2026</span></p>
       </div>
       <a class="ltw-btn ltw-btn--primary ltw-download__action" href="…"
          download>Download</a>
     </div>
   Group several with .ltw-download-grid.

   .ltw-download__body is the second grid cell: title, description, and meta
   stack inside it. Defined below.
   HEADING LEVEL — .ltw-download__title defaults to h3 (a download lives inside a
   section whose heading is h2). Step it to match the actual outline. See the
   heading-level note in §8.8.                                                  */

.ltw-download {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: var(--ltw-space-4) var(--ltw-space-5);
  align-items: start;
  padding: var(--ltw-space-5);
  background: var(--ltw-surface);
  border: var(--ltw-rule);
  border-radius: var(--ltw-radius-lg);
  box-shadow: var(--ltw-shadow-xs);
  margin-block: var(--ltw-space-6);
}
.ltw-download__icon {
  display: grid; place-items: center;
  width: 3rem; height: 3rem;
  background: var(--ltw-accent-soft);
  border: 1px solid var(--ltw-accent-soft-line);
  border-radius: var(--ltw-radius-md);
  color: var(--ltw-blue-700);
  font-size: var(--ltw-fs-xs);
  font-weight: var(--ltw-fw-bold);
  letter-spacing: 0.02em;
}
/* Second grid cell — title, description, and meta stack here. min-width:0 lets
   long file names and meta wrap instead of forcing the grid track wider. */
.ltw-download__body { min-width: 0; }
.ltw-download__title { font-size: var(--ltw-fs-h5); margin: 0 0 var(--ltw-space-1); }
.ltw-download__desc  { margin: 0 0 var(--ltw-space-3); color: var(--ltw-ink-secondary); font-size: var(--ltw-fs-sm); }
.ltw-download__meta {
  display: flex; flex-wrap: wrap; gap: var(--ltw-space-2) var(--ltw-space-4);
  margin: 0;
  font-size: var(--ltw-fs-xs);
  color: var(--ltw-muted);
  font-variant-numeric: tabular-nums;
}
.ltw-download__action { grid-column: 2; justify-self: start; margin-top: var(--ltw-space-2); }
/* WordPress download groups can also hold title/description/meta directly.
   Span those flat children; the standard icon + body markup stays two-column. */
.ltw-download > :where(.ltw-download__title, .ltw-download__desc, .ltw-download__meta) {
  grid-column: 1 / -1;
  min-width: 0;
}

.ltw-download-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(20rem, 100%), 1fr));
  gap: var(--ltw-space-5);
}
.ltw-download-grid .ltw-download { margin-block: 0; height: 100%; }


/* --- 8.10 Procedure list (numbered steps) ---------------------------------
   For safe, visible, step-by-step tasks. Generous spacing because these get
   followed at a machine with a printout in hand.

   Markup:
     <ol class="ltw-steps">
       <li><h4 class="ltw-steps__title">Confirm the exhaust is running</h4>
           <p>…</p></li>
     </ol>
   A step may contain a .ltw-warn or .ltw-stop; both stay intact in print.      */

.ltw-steps {
  list-style: none;
  counter-reset: ltw-step;
  margin: var(--ltw-space-6) 0;
  padding: 0;
  display: grid;
  gap: var(--ltw-space-5);
  max-width: var(--ltw-measure-wide);
}
.ltw-steps > li {
  counter-increment: ltw-step;
  position: relative;
  display: block;
  padding-inline-start: calc(2.25rem + var(--ltw-space-4));
  min-height: 2.25rem;
  padding-bottom: var(--ltw-space-5);
  border-bottom: 1px solid var(--ltw-border-subtle);
}
.ltw-steps > li:last-child { border-bottom: 0; padding-bottom: 0; }
.ltw-steps > li::before {
  content: counter(ltw-step);
  position: absolute; inset-inline-start: 0; top: 0;
  display: grid; place-items: center;
  width: 2.25rem; height: 2.25rem;
  background: var(--ltw-accent);
  color: var(--ltw-on-accent);
  border-radius: 50%;
  font-size: var(--ltw-fs-sm);
  font-weight: var(--ltw-fw-bold);
  font-variant-numeric: tabular-nums;
}
.ltw-steps__title { font-size: var(--ltw-fs-h5); margin: 0.15rem 0 var(--ltw-space-2); }
.ltw-steps > li > :last-child { margin-bottom: 0; }
/* Sub-steps inside a step. */
.ltw-steps ol, .ltw-steps ul { margin-top: var(--ltw-space-3); padding-left: var(--ltw-space-5); }

/* Checklist variant — printable classroom checklists get real checkboxes. */
.ltw-checklist { list-style: none; margin: var(--ltw-space-6) 0; padding: 0; display: grid; gap: var(--ltw-space-3); }
.ltw-checklist > li {
  position: relative;
  display: block;
  padding-inline-start: calc(1.5rem + var(--ltw-space-3));
  min-height: 1.5rem;
}
.ltw-checklist > li::before {
  content: "";
  position: absolute; inset-inline-start: 0; top: 0;
  width: 1.15rem; height: 1.15rem; margin-top: 0.2rem;
  border: 2px solid var(--ltw-border-strong);
  border-radius: var(--ltw-radius-xs);
  background: var(--ltw-surface);
}


/* --- 8.11 Tables ----------------------------------------------------------
   ALWAYS wrap a table: <div class="ltw-table-wrap" role="region"
     tabindex="0" aria-label="…"><table class="ltw-table">…</table></div>
   The wrapper is what scrolls. A table must never widen the page.

   .ltw-table            spec / data table (default)
   .ltw-table--decision  decision table — first column is the condition,
                         rows may carry .is-safe / .is-caution / .is-stop
   .ltw-table--compact   dense reference data
   .ltw-table--fit       short two-column table that wraps on a phone instead
                         of scrolling (0.9.7)                                    */

.ltw-table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  max-width: 100%;
  margin-block: var(--ltw-space-6);
  border: var(--ltw-rule);
  border-radius: var(--ltw-radius-md);
  background: var(--ltw-surface);
  /* Subtle shadow hint that there is more table to the right. */
  background-image:
    linear-gradient(to right, var(--ltw-surface), transparent 2rem),
    linear-gradient(to left,  var(--ltw-surface), transparent 2rem);
  background-attachment: local, local;
}
.ltw-table-wrap:focus-visible { outline: 3px solid var(--ltw-focus); outline-offset: 2px; }

.ltw-table {
  width: 100%;
  min-width: 34rem;              /* below this, scroll rather than crush cells */
  border-collapse: collapse;
  font-size: var(--ltw-fs-sm);
  line-height: var(--ltw-lh-body);
  background: var(--ltw-surface);
}
.ltw-table caption {
  caption-side: top;
  text-align: left;
  padding: var(--ltw-space-4) var(--ltw-space-4) var(--ltw-space-3);
  font-size: var(--ltw-fs-sm);
  font-weight: var(--ltw-fw-semi);
  color: var(--ltw-ink-secondary);
}
.ltw-table th,
.ltw-table td {
  padding: var(--ltw-space-3) var(--ltw-space-4);
  text-align: left;
  vertical-align: top;
  border-bottom: 1px solid var(--ltw-border-subtle);
}
.ltw-table thead th {
  background: var(--ltw-surface-sunken);
  color: var(--ltw-n-700);            /* 8.15:1 on n-100 */
  font-weight: var(--ltw-fw-semi);
  font-size: var(--ltw-fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  border-bottom: 2px solid var(--ltw-border);
  white-space: nowrap;
}
.ltw-table tbody tr:last-child td { border-bottom: 0; }
.ltw-table tbody tr:nth-child(even) { background: var(--ltw-surface-tint); }
.ltw-table th[scope="row"] { font-weight: var(--ltw-fw-semi); color: var(--ltw-ink-strong); }
.ltw-table td[data-numeric], .ltw-table .is-numeric { font-variant-numeric: tabular-nums; text-align: right; }
.ltw-table--compact th, .ltw-table--compact td { padding: var(--ltw-space-2) var(--ltw-space-3); }

/* Decision table — the state colour lives on a left bar plus a text prefix in
   the first cell, so a printed or colour-blind reading still resolves. */
.ltw-table--decision tbody th[scope="row"],
.ltw-table--decision tbody td:first-child { border-left: var(--ltw-state-bar) solid transparent; }
.ltw-table--decision tbody tr.is-safe    :is(th[scope="row"], td:first-child) { border-left-color: var(--ltw-safe-line); }
.ltw-table--decision tbody tr.is-caution :is(th[scope="row"], td:first-child) { border-left-color: var(--ltw-caution-line); }
.ltw-table--decision tbody tr.is-stop    :is(th[scope="row"], td:first-child) { border-left-color: var(--ltw-stop-line); }
.ltw-table--decision tbody tr.is-safe    { background: var(--ltw-safe-soft) !important; }
.ltw-table--decision tbody tr.is-caution { background: var(--ltw-caution-soft) !important; }
.ltw-table--decision tbody tr.is-stop    { background: var(--ltw-stop-soft) !important; }

/* Fit (0.9.7, 2026-10-21). The 34rem floor above makes a table scroll sideways
   rather than crush its cells. That is the wrong trade for a short two-column
   table whose second column is the action, such as the Troubleshooting page's
   first-move table: on a phone the action sat off screen. --fit drops the floor
   so the cells wrap. Use it only where every cell is a short phrase. */
.ltw-table.ltw-table--fit { min-width: 0; }
.ltw-table--fit th[scope="row"] { width: 50%; }

/* Tier header row inside a decision table.
   WHY THIS EXISTS: when six of eight rows carry an identical red badge, red stops
   meaning "act now" and starts meaning "someone was being cautious" — a maintenance
   ticket ends up styled exactly like an active fire. The tier row splits urgency
   from severity: both groups are stop conditions, but only one is measured in
   seconds. Added 2026-09-11 from the 2026-07-28 stop-table review.
   Print: see the @media print block — this sheet is designed to be taped to a wall,
   so the distinction has to survive in monochrome on weight and rule alone. */
.ltw-table--decision tbody tr.ltw-tier th {
  background: var(--ltw-surface-sunken);
  border-left: var(--ltw-state-bar) solid var(--ltw-border-strong);
  border-top: 2px solid var(--ltw-border-strong);
  padding-block: var(--ltw-space-3);
  font-size: var(--ltw-fs-sm);
  font-weight: var(--ltw-fw-bold);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ltw-ink);
}
.ltw-table--decision tbody tr.ltw-tier th span {
  display: block;
  margin-top: 2px;
  font-weight: var(--ltw-fw-normal);
  letter-spacing: 0;
  text-transform: none;
  color: var(--ltw-ink-secondary);
}

/* Outcome token for use inside a decision cell. */
.ltw-outcome { display: inline-flex; align-items: baseline; gap: var(--ltw-space-2); font-weight: var(--ltw-fw-semi); }
.ltw-outcome--go   { color: var(--ltw-safe-ink); }
.ltw-outcome--go::before   { content: "\2713"; }   /* ✓ */
.ltw-outcome--check{ color: var(--ltw-caution-ink); }
.ltw-outcome--check::before{ content: "\26A0"; }   /* ⚠ */
.ltw-outcome--stop { color: var(--ltw-stop-ink); }
.ltw-outcome--stop::before { content: "\26D4"; }   /* ⛔ */


/* --- 8.12 Section card / card grid ----------------------------------------
   Markup: <article class="ltw-card">
             <p class="ltw-card__eyebrow">Safety</p>
             <h3 class="ltw-card__title"><a href="…">…</a></h3>
             <p class="ltw-card__desc">…</p>
             <div class="ltw-meta-bar">…badges/chips…</div></article>          */

.ltw-card {
  display: flex; flex-direction: column;
  padding: var(--ltw-space-5);
  background: var(--ltw-surface);
  border: var(--ltw-rule);
  border-radius: var(--ltw-radius-lg);
  box-shadow: var(--ltw-shadow-xs);
  transition: box-shadow var(--ltw-dur) var(--ltw-ease),
              border-color var(--ltw-dur) var(--ltw-ease);
}
.ltw-card:hover { box-shadow: var(--ltw-shadow-md); border-color: var(--ltw-border-strong); }
.ltw-card__eyebrow {
  margin: 0 0 var(--ltw-space-2);
  font-size: var(--ltw-fs-xs); font-weight: var(--ltw-fw-semi);
  text-transform: uppercase; letter-spacing: var(--ltw-ls-eyebrow);
  color: var(--ltw-ink-secondary);      /* was --ltw-accent-2; see .ltw-eyebrow */
}
.ltw-card__title { font-size: var(--ltw-fs-h5); margin: 0 0 var(--ltw-space-2); }
.ltw-card__title a { color: var(--ltw-ink-strong); text-decoration: none; }
.ltw-card__title a:hover { color: var(--ltw-link-hover); text-decoration: underline; }
.ltw-card__desc { margin: 0 0 var(--ltw-space-4); color: var(--ltw-ink-secondary); font-size: var(--ltw-fs-sm); }
.ltw-card__desc:last-child { margin-bottom: 0; }
.ltw-card > .ltw-meta-bar:last-child { margin-top: auto; margin-bottom: 0; padding-top: var(--ltw-space-4); }
/* When a card closes with a review line under its meta bar (e.g. FAQ cards),
   push the meta-bar + review pair to the bottom so a card grid stays aligned. */
.ltw-card > .ltw-meta-bar:nth-last-child(2) { margin-top: auto; padding-top: var(--ltw-space-4); }
.ltw-card > .ltw-meta-bar:nth-last-child(2) + .ltw-reviewed--inline { margin-top: var(--ltw-space-2); }
/* Accent variants for section landing pages. */
.ltw-card--accent { border-top: 3px solid var(--ltw-accent); }
.ltw-card--safe   { border-top: 3px solid var(--ltw-safe-line); }
.ltw-card--flat   { box-shadow: none; background: var(--ltw-surface-raised); }

.ltw-card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(17rem, 100%), 1fr));
  gap: var(--ltw-space-5);
  margin-block: var(--ltw-space-6);
}
.ltw-card-grid--2 { grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr)); }

/* FAQ library + topic archives (2026-09-30). The query puts one <ul> inside .ltw-card-grid,
   so the grid gap never reached the cards and they sat edge to edge. Space the list itself.
   ltw-content adds the icon tile and topic eyebrow (.ltw-card--faq). */
.ltw-card-grid > .wp-block-post-template {
  display: grid; gap: var(--ltw-space-4);
  grid-column: 1 / -1;
}
.ltw-card--faq {
  display: grid;
  grid-template-columns: 3rem 1fr;
  column-gap: var(--ltw-space-4);
  align-items: start;
}
.ltw-card--faq > * { grid-column: 2; }
.ltw-card--faq > .ltw-card__icon {
  grid-column: 1; grid-row: 1 / span 3;
  display: grid; place-items: center;
  width: 3rem; height: 3rem;
  border: 1px solid var(--ltw-accent-soft-line);
  border-radius: var(--ltw-radius-md);
  background: var(--ltw-accent-soft);
  color: var(--ltw-accent);
}
.ltw-card--faq > .ltw-card__icon .ltw-topic-mark { width: 1.625rem !important; height: 1.625rem !important; margin: 0 !important; }
.ltw-card--faq .ltw-card__title { margin-bottom: var(--ltw-space-1); }
.ltw-card--faq .wp-block-post-excerpt,
.ltw-card--faq .wp-block-post-excerpt__excerpt { margin: 0; color: var(--ltw-ink-secondary); font-size: var(--ltw-fs-sm); }
@media (max-width: 480px) {
  .ltw-card--faq { grid-template-columns: 2.5rem 1fr; column-gap: var(--ltw-space-3); }
  .ltw-card--faq > .ltw-card__icon { width: 2.5rem; height: 2.5rem; }
}


/* --- 8.13 Related-links cluster -------------------------------------------
   Markup: <nav class="ltw-related" aria-labelledby="rel-h">
             <h2 class="ltw-related__title" id="rel-h">Related guidance</h2>
             <ul class="ltw-related__list">
               <li><a href="…">Title</a><span>Why it's next</span></li></ul></nav>
   HEADING LEVEL for .ltw-related__title: see the heading-level note in §8.8.    */

.ltw-related {
  margin-block: var(--ltw-space-8);
  padding: var(--ltw-space-6);
  background: var(--ltw-surface-tint);
  border: var(--ltw-rule);
  border-radius: var(--ltw-radius-lg);
}
.ltw-related__title {
  font-size: var(--ltw-fs-h5);
  margin: 0 0 var(--ltw-space-4);
  padding-bottom: var(--ltw-space-3);
  border-bottom: var(--ltw-rule);
  color: var(--ltw-ink-strong);
}
.ltw-related__list {
  list-style: none; margin: 0; padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
  gap: var(--ltw-space-3) var(--ltw-space-6);
}
.ltw-related__list > li {
  padding-left: var(--ltw-space-4);
  border-left: 2px solid var(--ltw-accent-soft-line);
  font-size: var(--ltw-fs-sm);
}
.ltw-related__list a { font-weight: var(--ltw-fw-semi); text-decoration: none; }
.ltw-related__list a:hover { text-decoration: underline; }
.ltw-related__list span { display: block; color: var(--ltw-muted); margin-top: var(--ltw-space-1); }


/* --- 8.14 Buttons ---------------------------------------------------------
   .ltw-btn--primary  blue — ONE PRIMARY PER SECTION (not per page). A page has
                      several sections and each may carry its own single primary;
                      what is not allowed is two competing --primary in one
                      section. When a section offers equal parallel choices (e.g.
                      two audience doors), keep one primary and demote the rest to
                      --ghost rather than showing two equal-weight primaries.
   .ltw-btn--ghost    outlined secondary
   .ltw-btn--quiet    text-only tertiary
   There is deliberately NO red button. Red is stop conditions only.           */

.ltw-btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: var(--ltw-space-2);
  padding: var(--ltw-space-3) var(--ltw-space-5);
  font-size: var(--ltw-fs-body);
  font-weight: var(--ltw-fw-semi);
  line-height: 1.2;
  border-radius: var(--ltw-radius-md);
  border: 1px solid transparent;
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--ltw-dur) var(--ltw-ease),
              border-color var(--ltw-dur) var(--ltw-ease),
              color var(--ltw-dur) var(--ltw-ease);
}
.ltw-btn--primary {
  background: var(--ltw-accent);
  color: var(--ltw-on-accent);          /* 8.74:1 */
}
.ltw-btn--primary:hover, .ltw-btn--primary:visited { background: var(--ltw-accent-hover); color: var(--ltw-on-accent); }
.ltw-btn--ghost {
  background: transparent;
  color: var(--ltw-accent);
  border-color: var(--ltw-accent);
}
.ltw-btn--ghost:hover { background: var(--ltw-accent-soft); color: var(--ltw-accent-hover); }
.ltw-btn--quiet {
  background: transparent;
  color: var(--ltw-accent);
  padding-inline: var(--ltw-space-2);
  text-decoration: underline;
}
.ltw-btn--sm { padding: var(--ltw-space-2) var(--ltw-space-4); font-size: var(--ltw-fs-sm); }
.ltw-btn[aria-disabled="true"], .ltw-btn:disabled {
  background: var(--ltw-surface-sunken); color: var(--ltw-muted);
  border-color: var(--ltw-border); cursor: not-allowed;
}

/* --- 8.14b Gutenberg core/button bridge -----------------------------------
   The rules above assume the ltw-btn classes sit on the <a> itself. In the
   block editor they land on the core/button WRAPPER instead:

       <div class="wp-block-button ltw-btn ltw-btn--ghost">
         <a class="wp-block-button__link wp-element-button">…</a>

   Left alone that renders a button inside a button. Two visible defects,
   both found on the live home page 2026-07-27:

   1. INVISIBLE LABELS. The wrapper sets color:var(--ltw-accent) for the ghost
      outline; the inner <a> INHERITS that colour while the parent theme fills
      its background with the same accent. Foreground and background land on
      the identical value — measured contrast 1.00 — so every secondary CTA on
      the site rendered as a solid pill with an unreadable label.
   2. A BOX AROUND EVERY BUTTON. The wrapper also applied .ltw-btn's own
      padding and 1px border, drawing a second bordered rectangle around
      core's <a> (72px tall wrapper around a 46px anchor).

   Fix: when .ltw-btn lands on a wrapper, the wrapper becomes an inert box and
   hands the entire treatment to the <a> that is actually the button.        */

.wp-block-button.ltw-btn {
  display: inline-block;
  padding: 0;
  border: 0;
  background: none;
  border-radius: 0;
}

.wp-block-button.ltw-btn > .wp-block-button__link {
  display: inline-flex; align-items: center; justify-content: center;
  gap: var(--ltw-space-2);
  padding: var(--ltw-space-3) var(--ltw-space-5);
  font-size: var(--ltw-fs-body);
  font-weight: var(--ltw-fw-semi);
  line-height: 1.2;
  border-radius: var(--ltw-radius-md);
  border: 1px solid transparent;
  text-decoration: none;
  transition: background-color var(--ltw-dur) var(--ltw-ease),
              border-color var(--ltw-dur) var(--ltw-ease),
              color var(--ltw-dur) var(--ltw-ease);
}

.wp-block-button.ltw-btn--primary > .wp-block-button__link {
  background: var(--ltw-accent);
  color: var(--ltw-on-accent);          /* 8.74:1 */
}
.wp-block-button.ltw-btn--primary > .wp-block-button__link:hover,
.wp-block-button.ltw-btn--primary > .wp-block-button__link:focus-visible {
  background: var(--ltw-accent-hover);
  color: var(--ltw-on-accent);
}

.wp-block-button.ltw-btn--ghost > .wp-block-button__link {
  background: transparent;
  color: var(--ltw-accent);             /* 8.74:1 on surface */
  border-color: var(--ltw-accent);
}
.wp-block-button.ltw-btn--ghost > .wp-block-button__link:hover,
.wp-block-button.ltw-btn--ghost > .wp-block-button__link:focus-visible {
  background: var(--ltw-accent-soft);
  color: var(--ltw-accent-hover);
}

.wp-block-button.ltw-btn--quiet > .wp-block-button__link {
  background: transparent;
  color: var(--ltw-accent);
  border-color: transparent;
  padding-inline: var(--ltw-space-2);
  text-decoration: underline;
}


/* --- 8.15 Lead-form block (the sponsor-layer CTA) -------------------------
   The one commercial surface on the property, and the ONLY place a sponsor is
   named in the body of a page. Keep it visually distinct from editorial
   content so a reader can tell where guidance ends and a sponsored offer
   begins — that separation is the whole reason the content core stays neutral
   and the sponsor layer stays swappable.

   Markup:
     <aside class="ltw-lead-form" aria-labelledby="lead-h">
       <p class="ltw-lead-form__eyebrow">Sponsored</p>
       <h2 class="ltw-lead-form__title" id="lead-h">…</h2>
       <p class="ltw-lead-form__intro">…</p>
       <form class="ltw-form"> … </form>
       <p class="ltw-lead-form__disclosure">…</p></aside>                       */

.ltw-lead-form {
  margin-block: var(--ltw-space-9);
  padding: var(--ltw-space-7);
  background: var(--ltw-surface-inverse);
  color: var(--ltw-ink-inverse);
  border-radius: var(--ltw-radius-lg);
}
.ltw-lead-form__eyebrow {
  margin: 0 0 var(--ltw-space-2);
  font-size: var(--ltw-fs-xs);
  font-weight: var(--ltw-fw-bold);
  text-transform: uppercase;
  letter-spacing: var(--ltw-ls-eyebrow);
  color: var(--ltw-beam-300);           /* 8.27:1 on graphite inverse */
}
.ltw-lead-form__title { color: var(--ltw-ink-inverse); font-size: var(--ltw-fs-h3); margin: 0 0 var(--ltw-space-3); }
.ltw-lead-form__intro { color: var(--ltw-blue-100); max-width: var(--ltw-measure-narrow); }
.ltw-lead-form__disclosure {
  margin: var(--ltw-space-5) 0 0;
  padding-top: var(--ltw-space-4);
  border-top: 1px solid rgba(255,255,255,0.18);
  font-size: var(--ltw-fs-xs);
  color: var(--ltw-blue-200);           /* 10.23:1 on blue-800 */
}

/* Form primitives — usable inside or outside the lead-form block. */
.ltw-form { display: grid; gap: var(--ltw-space-4); margin-top: var(--ltw-space-5); }
.ltw-form__row { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(15rem, 100%), 1fr)); gap: var(--ltw-space-4); }
.ltw-field { display: grid; gap: var(--ltw-space-2); }
.ltw-field label { font-size: var(--ltw-fs-sm); font-weight: var(--ltw-fw-semi); }
.ltw-field .ltw-field__hint { font-size: var(--ltw-fs-xs); color: var(--ltw-muted); }
.ltw-field :is(input, select, textarea) {
  width: 100%;
  padding: var(--ltw-space-3) var(--ltw-space-4);
  background: var(--ltw-surface);
  color: var(--ltw-ink);
  border: 1px solid var(--ltw-border-strong);
  border-radius: var(--ltw-radius-sm);
}
.ltw-field :is(input, select, textarea)::placeholder { color: var(--ltw-muted); }
/* Inside the inverse lead-form panel the hint text needs the light treatment. */
.ltw-lead-form .ltw-field label { color: var(--ltw-ink-inverse); }
.ltw-lead-form .ltw-field__hint { color: var(--ltw-blue-200); }
.ltw-lead-form .ltw-btn--primary {
  background: var(--ltw-n-0);
  color: var(--ltw-blue-800);           /* 13.81:1 */
}
.ltw-lead-form .ltw-btn--primary:hover { background: var(--ltw-blue-100); color: var(--ltw-blue-800); }
.ltw-required { color: var(--ltw-caution); font-weight: var(--ltw-fw-bold); }
.ltw-lead-form .ltw-required { color: var(--ltw-amber-200); }


/* --- 8.16 Sponsor attribution (footer) ------------------------------------
   The quiet footer line. Deliberately low-contrast-but-still-AA and outside
   the content column.                                                         */

.ltw-sponsor {
  font-size: var(--ltw-fs-sm);
  color: var(--ltw-muted);
  padding-block: var(--ltw-space-4);
  border-top: var(--ltw-rule);
}
/* Light ink on any dark surface. Previously this keyed ONLY off .ltw-band-inverse, so a footer built
   without that class rendered --ltw-muted (#5A6C76) on --ltw-surface-inverse (#0B3044) ≈ 2.5:1 — a
   WCAG AA failure. Four of five mockups hit it. Keying off .ltw-site-footer as well means the footer
   cannot be built wrong regardless of which wrapper class the author remembers. Fixed 2026-07-24. */
.ltw-band-inverse .ltw-sponsor,
.ltw-site-footer .ltw-sponsor { color: var(--ltw-blue-200); border-top-color: rgba(255,255,255,0.18); }


/* --- 8.17 Site chrome (header / nav / footer) -----------------------------
   Not in the brief's component list, but the five mockups each need a header
   and footer and cannot add CSS of their own — so it lives here.

   NOTE for the theme graduation: per EKG-Chrome-Layout-Standard.md, chrome is
   THEME-LAYER (template parts in git), not page content. These classes exist so
   the mockups look like a real site; at Gate 2 they become `ltw` template parts,
   and page bodies stay body-only.

   Markup:
     <header class="ltw-site-header">
       <div class="ltw-container ltw-site-header__inner">
         <a class="ltw-logo" href="/">Laser<span>TeamWork</span></a>
         <nav class="ltw-site-nav" aria-label="Main">
           <ul><li><a href="/safety/" aria-current="page">Safety</a></li>…</ul>
         </nav></div></header>                                                  */

.ltw-site-header {
  background: var(--ltw-surface);
  border-bottom: var(--ltw-rule);
  position: sticky; top: 0; z-index: 50;
}
.ltw-site-header__inner {
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between;
  gap: var(--ltw-space-4);
  padding-block: var(--ltw-space-4);
}
/* Lockup = convergence mark + wordmark. The mark is the generated brand asset
   (Logo Explorations/2026-07-24, built through the fleet brand-family generator);
   it is inlined as SVG so it inherits color and needs no network request.
   Mark is decorative here — the wordmark text carries the accessible name. */
.ltw-logo {
  display: inline-flex;
  align-items: center;
  gap: var(--ltw-space-2);
  font-size: var(--ltw-fs-h5);
  font-weight: var(--ltw-fw-bold);
  letter-spacing: var(--ltw-ls-tight);
  color: var(--ltw-ink-strong);
  text-decoration: none;
  white-space: nowrap;
}
.ltw-logo span { color: var(--ltw-accent-2); }
.ltw-logo__mark {
  flex: none;
  width: 1.6em; height: 1.6em;
  display: block;
}

.ltw-site-nav ul {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap;
  gap: var(--ltw-space-2) var(--ltw-space-5);
  font-size: var(--ltw-fs-sm);
  font-weight: var(--ltw-fw-medium);
}
.ltw-site-nav a {
  color: var(--ltw-ink-secondary);
  text-decoration: none;
  padding-block: var(--ltw-space-1);
  border-bottom: 2px solid transparent;
}
.ltw-site-nav a:hover { color: var(--ltw-link-hover); border-bottom-color: var(--ltw-accent-soft-line); }
.ltw-site-nav a[aria-current="page"] { color: var(--ltw-accent); border-bottom-color: var(--ltw-accent); }

.ltw-site-footer {
  background: var(--ltw-surface-inverse);
  color: var(--ltw-ink-inverse);
  margin-top: var(--ltw-space-10);
  padding-block: var(--ltw-space-8) var(--ltw-space-6);
}
.ltw-site-footer :where(h2, h3) { color: var(--ltw-ink-inverse); font-size: var(--ltw-fs-h5); }
.ltw-site-footer a { color: var(--ltw-blue-200); }        /* 10.23:1 on blue-800 */
.ltw-site-footer a:hover { color: var(--ltw-n-0); }
.ltw-site-footer__cols {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
  gap: var(--ltw-space-6);
}
.ltw-site-footer ul { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--ltw-space-2); font-size: var(--ltw-fs-sm); }

@media (prefers-color-scheme: dark) {
  .ltw-site-footer { border-top: 1px solid var(--ltw-border); }
  .ltw-site-footer a { color: var(--ltw-blue-300); }
}


/* --- 8.18 On-canvas SVG diagrams ------------------------------------------
   On-canvas SVG labels are SUPPLEMENTARY: every diagram carries a full
   <title>/<desc> text equivalent, and the load-bearing content is also present
   as an adjacent HTML table or list. Even so, on-canvas text must not shrink to
   an unreadable size on a phone.

   MINIMUM ON-CANVAS TYPE: a diagram must stay legible down to ~8px effective.
   Because an SVG with max-width:100% scales its whole coordinate system, tiny
   font-size values (11–15 user units in a 720–880-wide viewBox) fall to ~5–6px
   on a 360px screen. Two rules keep them legible:
     1. On-canvas label font-size >= 14 user units, and keep the viewBox width
        modest so 14 units never renders below ~8px at mobile widths.
     2. Wrap a wide or label-dense diagram's <figure> in .ltw-figure-scroll.
        The SVG is given a min-width, so on a narrow screen the figure scrolls
        horizontally instead of scaling the labels down to nothing — the same
        move .ltw-table-wrap makes for tables. The <figcaption> is a normal
        block and stays at reading width; only the SVG scrolls.               */
.ltw-figure-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  margin-block: var(--ltw-space-6);
}
.ltw-figure-scroll > svg { min-width: 34rem; }
.ltw-figure-scroll > figcaption { margin-top: var(--ltw-space-3); }


/* ==========================================================================
   09  UTILITIES
   ========================================================================== */

.ltw-visually-hidden {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%);
  white-space: nowrap; border: 0;
}
.ltw-center      { margin-inline: auto; }
.ltw-text-center { text-align: center; }
.ltw-muted       { color: var(--ltw-muted); }
.ltw-small       { font-size: var(--ltw-fs-sm); }
.ltw-nowrap      { white-space: nowrap; }
.ltw-mono        { font-family: var(--ltw-font-mono); font-variant-numeric: tabular-nums; }
.ltw-serif       { font-family: var(--ltw-font-serif); }   /* editorial features only */
.ltw-flow > * + *{ margin-top: var(--ltw-space-4); }
.ltw-mt-0 { margin-top: 0 !important; }
.ltw-mb-0 { margin-bottom: 0 !important; }

/* [VERIFY] flag — an unverified claim still in the draft. Highly visible on
   purpose: nothing carrying one may publish. */
.ltw-verify {
  display: inline-flex; align-items: center; gap: var(--ltw-space-1);
  padding: 0 var(--ltw-space-2);
  background: var(--ltw-caution-soft);
  color: var(--ltw-caution-ink);        /* 7.76:1 */
  border: 1px dashed var(--ltw-caution-line);
  border-radius: var(--ltw-radius-xs);
  font-size: var(--ltw-fs-xs);
  font-weight: var(--ltw-fw-bold);
  letter-spacing: 0.03em;
}

/* Placeholder media slot — presentable, per the Placeholder Standard. */
.ltw-placeholder {
  display: grid; place-items: center;
  min-height: 12rem;
  padding: var(--ltw-space-5);
  background:
    repeating-linear-gradient(45deg,
      var(--ltw-surface-raised) 0 12px,
      var(--ltw-surface-sunken) 12px 24px);
  border: 1px dashed var(--ltw-border-strong);
  border-radius: var(--ltw-radius-md);
  color: var(--ltw-ink-secondary);
  font-size: var(--ltw-fs-sm);
  text-align: center;
}
.ltw-placeholder__spec { display: block; color: var(--ltw-muted); font-size: var(--ltw-fs-xs); margin-top: var(--ltw-space-2); }


/* ==========================================================================
   10  DARK MODE
   Remaps §03 semantic aliases only. Every pair re-measured against the dark
   surfaces; ratios noted. Amber and green are lightened (200/300 steps) because
   the dark-on-light values are unreadable on a dark field.
   ========================================================================== */

@media (prefers-color-scheme: dark) {
  :root {
    /* Workshop Blueprint, dark: graphite paper, warm light ink. Every pair
       re-measured 2026-09-30; ratios beside each token. */
    --ltw-surface:          #151513;
    --ltw-surface-card:     #1D1C1A;
    --ltw-surface-tint:     #1B1A18;
    --ltw-surface-raised:   #1D1C1A;
    --ltw-surface-sunken:   #232220;
    --ltw-surface-inverse:  var(--ltw-n-950);
    --ltw-surface-material: #2A241B;
    --ltw-band:             #1B1A18;
    --ltw-grid-line:        #262522;

    /* Ink */
    --ltw-ink:              #E6E2DA;            /* 14.15 on surface */
    --ltw-ink-strong:       var(--ltw-n-25);    /* 17.24 */
    --ltw-ink-secondary:    #C8C2B6;            /* 10.32 */
    --ltw-muted:            #A39D91;            /*  6.78 surface, 5.90 sunken */
    --ltw-ink-inverse:      var(--ltw-n-25);
    --ltw-ink-inverse-muted:#BDB8AD;

    /* Lines */
    --ltw-border:           #34322E;
    --ltw-border-strong:    #4A4741;
    --ltw-border-subtle:    #262522;
    --ltw-border-ink:       #C8C2B6;

    /* Accent */
    --ltw-accent:           var(--ltw-blue-300);   /* 8.10 on surface */
    --ltw-accent-hover:     var(--ltw-blue-200);   /* 10.77 */
    --ltw-accent-press:     var(--ltw-blue-100);
    --ltw-accent-soft:      #17243A;
    --ltw-accent-soft-line: #2C4468;
    --ltw-on-accent:        var(--ltw-blue-900);   /* 7.43 on accent */
    --ltw-accent-2:         var(--ltw-beam-300);   /* 8.67 on surface */
    --ltw-accent-2-soft:    #2A1A10;
    --ltw-beam:             var(--ltw-beam-400);
    --ltw-info-ink:         var(--ltw-blue-200);   /* 9.16 on accent-soft */

    /* Safe */
    --ltw-safe:             var(--ltw-green-300);  /* 8.44 */
    --ltw-safe-ink:         var(--ltw-green-300);
    --ltw-safe-soft:        #12301F;
    --ltw-safe-line:        var(--ltw-green-500);

    /* Caution */
    --ltw-caution:          var(--ltw-amber-200);  /* 12.14 */
    --ltw-caution-ink:      var(--ltw-amber-200);
    --ltw-caution-soft:     #33280E;
    --ltw-caution-line:     var(--ltw-amber-500);

    /* Stop */
    --ltw-stop:             var(--ltw-red-300);    /* 6.55 */
    --ltw-stop-ink:         var(--ltw-red-200);
    --ltw-stop-soft:        #3A1714;
    --ltw-stop-line:        var(--ltw-red-400);
    --ltw-on-stop:          var(--ltw-n-950);

    --ltw-ink-on-tint:      #E6E2DA;
    --ltw-muted-on-tint:    #A39D91;

    --ltw-focus:            var(--ltw-blue-300);   /* 8.10 */
    --ltw-link:             var(--ltw-blue-300);
    --ltw-link-hover:       var(--ltw-blue-200);
    --ltw-link-visited:     #A9BEE3;               /* 9.72 */

    --ltw-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.4);
    --ltw-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.45);
    --ltw-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.5);
    --ltw-shadow-lg: 0 12px 30px rgba(0, 0, 0, 0.55);
  }

  .ltw-band-inverse { border-block: 1px solid var(--ltw-border); }
  .ltw-band-inverse a { color: var(--ltw-blue-300); }
  .ltw-lead-form { border: 1px solid var(--ltw-border-strong); }
  .ltw-lead-form__eyebrow { color: var(--ltw-beam-300); }
  .ltw-lead-form__intro,
  .ltw-lead-form__disclosure,
  .ltw-lead-form .ltw-field__hint { color: var(--ltw-ink-secondary); }
  .ltw-lead-form .ltw-btn--primary { background: var(--ltw-blue-300); color: var(--ltw-blue-900); }
  .ltw-lead-form .ltw-btn--primary:hover { background: var(--ltw-blue-200); color: var(--ltw-blue-900); }
  .ltw-lead-form .ltw-required { color: var(--ltw-amber-200); }

  /* Badges: soft dark fields with light ink. */
  .ltw-badge--6-12      { color: var(--ltw-blue-200); border-color: var(--ltw-accent-soft-line); }
  .ltw-badge--higher-ed { background: var(--ltw-surface-material); color: var(--ltw-birch-200); border-color: #4A3F2E; }
  .ltw-badge--admin     { color: #D5D0C5; border-color: var(--ltw-border-strong); }
  .ltw-chip--minutes    { background: var(--ltw-surface-material); color: var(--ltw-birch-200); border-color: #4A3F2E; }
  .ltw-chip--minutes .ltw-chip__label { color: var(--ltw-birch-200); }
  .ltw-chip--material.is-approved   { color: var(--ltw-green-200); border-color: #245039; }
  .ltw-chip--material.is-caution    { color: var(--ltw-amber-200); border-color: #574116; }
  .ltw-chip--material.is-prohibited { color: var(--ltw-red-200);   border-color: #5C241E; }

  .ltw-download__icon { color: var(--ltw-blue-200); }
  .ltw-table thead th { color: var(--ltw-ink); }
  .ltw-sources__list > li::before { color: var(--ltw-blue-900); }
  .ltw-steps > li::before { color: var(--ltw-blue-900); }
  .ltw-checklist > li::before { background: var(--ltw-surface-raised); }
  .ltw-verify { color: var(--ltw-amber-200); }
  .ltw-placeholder {
    background: repeating-linear-gradient(45deg,
      var(--ltw-surface-raised) 0 12px, var(--ltw-surface-sunken) 12px 24px);
  }
  .ltw-table-wrap {
    background-image:
      linear-gradient(to right, var(--ltw-surface), transparent 2rem),
      linear-gradient(to left,  var(--ltw-surface), transparent 2rem);
  }
}


/* ==========================================================================
   11  PRINT
   Several of these pages exist to be printed and taken to a machine: safety
   checklists, pre-cut procedures, material tables, lesson plans. Print output
   must be INK-LIGHT and complete.

   Rules:
     - White ground, black text. No filled panels, no shadows, no tints.
     - Warning and stop boxes survive as bordered blocks with their text label,
       so the distinction holds in monochrome.
     - Link URLs print after the link text — a printout has to stand alone.
     - Navigation, related links, and the sponsor lead form do NOT print.
       A classroom checklist should not carry a commercial CTA.
     - Nothing that must be read as a unit is allowed to break across pages.
   ========================================================================== */

@media print {
  :root {
    --ltw-surface: #FFF; --ltw-surface-tint: #FFF;
    --ltw-surface-raised: #FFF; --ltw-surface-sunken: #FFF;
    --ltw-surface-inverse: #FFF;
    --ltw-ink: #000; --ltw-ink-strong: #000;
    --ltw-ink-secondary: #222; --ltw-muted: #444; --ltw-ink-inverse: #000;
    --ltw-ink-on-tint: #000; --ltw-muted-on-tint: #444;
    --ltw-border: #999; --ltw-border-strong: #666; --ltw-border-subtle: #BBB;
    --ltw-accent: #000; --ltw-accent-hover: #000; --ltw-on-accent: #FFF;
    --ltw-accent-soft: #FFF; --ltw-accent-soft-line: #999; --ltw-info-ink: #000;
    --ltw-safe: #000; --ltw-safe-ink: #000; --ltw-safe-soft: #FFF; --ltw-safe-line: #666;
    --ltw-caution: #000; --ltw-caution-ink: #000; --ltw-caution-soft: #FFF; --ltw-caution-line: #444;
    --ltw-stop: #000; --ltw-stop-ink: #000; --ltw-stop-soft: #FFF; --ltw-stop-line: #000;
    --ltw-shadow-xs: none; --ltw-shadow-sm: none; --ltw-shadow-md: none; --ltw-shadow-lg: none;
  }

  @page { margin: 18mm 16mm; }

  html, body {
    background: #FFF !important;
    color: #000 !important;
    font-size: 11pt;
    line-height: 1.45;
  }

  /* Strip every filled ground and shadow. */
  *, *::before, *::after {
    background-image: none !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }
  .ltw-band-inverse,
  .ltw-section--tint,
  .ltw-section--sunken,
  .ltw-card, .ltw-card--flat,
  .ltw-related, .ltw-sources, .ltw-download, .ltw-placeholder,
  .ltw-answer, .ltw-note, .ltw-warn, .ltw-stop, .ltw-manual-notice,
  .ltw-table, .ltw-table thead th, .ltw-table tbody tr,
  .ltw-table--decision tbody tr.is-safe,
  .ltw-table--decision tbody tr.is-caution,
  .ltw-table--decision tbody tr.is-stop,
  .ltw-table--decision tbody tr.ltw-tier th,
  .ltw-badge, .ltw-chip, .ltw-verify {
    background: #FFF !important;
    color: #000 !important;
  }

  /* The tier header has to survive monochrome — it is the thing that stops a
     maintenance row reading as urgently as an active fire on the printed sheet.
     Colour is gone here, so the distinction rides on a heavy rule and weight. */
  .ltw-table--decision tbody tr.ltw-tier th {
    border-top: 3px solid #000 !important;
    border-left: 4px solid #000 !important;
  }
  .ltw-table--decision tbody tr.ltw-tier th span { color: #000 !important; }

  /* Do not print: site chrome, cross-sell, and the commercial layer. */
  .ltw-skip,
  .ltw-site-header, .ltw-site-nav, .ltw-site-footer,
  .ltw-breadcrumb,
  .ltw-related,
  .ltw-lead-form,
  .ltw-sponsor,
  .ltw-no-print { display: none !important; }

  .ltw-print-only { display: revert !important; }

  /* Keep the callout distinction in monochrome: weight + explicit word. */
  .ltw-warn, .ltw-stop, .ltw-note, .ltw-answer, .ltw-manual-notice {
    border: 1px solid #000 !important;
    border-left-width: 4px !important;
    padding: 8pt 10pt !important;
    margin-block: 10pt !important;
  }
  .ltw-stop { border-width: 2px !important; border-left-width: 6px !important; }
  .ltw-warn .ltw-warn__title::after { content: " — WARNING"; }
  .ltw-stop .ltw-stop__title::after { content: " — STOP"; }
  .ltw-warn__title, .ltw-stop__title, .ltw-note__title { color: #000 !important; }

  /* Numbered markers become outlined, not filled — saves toner, stays legible. */
  .ltw-steps > li::before,
  .ltw-sources__list > li::before {
    background: #FFF !important;
    color: #000 !important;
    border: 1.5px solid #000;
  }
  .ltw-badge, .ltw-chip, .ltw-verify { border: 1px solid #666 !important; }

  /* Tables print whole — no scroll container, all borders visible. */
  .ltw-table-wrap { overflow: visible !important; border: 0 !important; }
  .ltw-table { min-width: 0 !important; font-size: 9.5pt; width: 100% !important; }
  .ltw-table th, .ltw-table td { border: 0.5pt solid #666 !important; padding: 4pt 6pt !important; }
  .ltw-table thead { display: table-header-group; }   /* repeat header per page */
  .ltw-table tr, .ltw-table thead { break-inside: avoid; }

  /* Print the destination of real links; skip in-page anchors and refs. */
  a[href^="http"]::after {
    content: " (" attr(href) ")";
    font-size: 8.5pt;
    color: #444;
    word-break: break-all;
  }
  a[href^="#"]::after { content: none; }
  .ltw-ref::after { content: "]"; }
  a { color: #000 !important; text-decoration: underline; }

  /* Page-break control. */
  h1, h2, h3, h4 { break-after: avoid-page; page-break-after: avoid; }
  p, li, blockquote, figure { orphans: 3; widows: 3; }
  .ltw-warn, .ltw-stop, .ltw-note, .ltw-answer, .ltw-manual-notice,
  .ltw-download, .ltw-card, .ltw-sources__list > li,
  .ltw-steps > li, .ltw-checklist > li, figure { break-inside: avoid; page-break-inside: avoid; }

  /* Checklist boxes need a real border to be tickable on paper. */
  .ltw-checklist > li::before { border: 1.5pt solid #000 !important; }

  /* Sources always print — provenance is the point of the page. */
  .ltw-sources { border: 1px solid #999 !important; padding: 10pt !important; }
}

/* .ltw-print-only is hidden on screen; revealed by the print block above. */
.ltw-print-only { display: none; }

/* ==========================================================================
   END — ltw-design-system.css
   ========================================================================== */

/* ==========================================================================
   19 · CLASSIC-MENU BRIDGE
   Navigation on every fleet site is a CLASSIC WP menu (Appearance → Menus),
   not a block Navigation block — settled fleet rule, 2026-07-01. The parent
   theme's `ekg-base/nav-header` pattern renders it and ships STRUCTURAL css
   only, so the child restyles .ekg-nav / .ekg-menu to match its own chrome.
   These rules make the classic menu look exactly like the mockups' .ltw-site-nav.
   ========================================================================== */
.ltw-site-header .ekg-nav { flex: 1 1 auto; justify-content: flex-end; }

.ltw-site-header .ekg-menu { gap: var(--ltw-space-5); }

.ltw-site-header .ekg-menu a {
  font-size: var(--ltw-fs-sm);
  font-weight: var(--ltw-fw-medium);
  color: var(--ltw-ink-secondary);
  padding-block: var(--ltw-space-2);
  border-bottom: 2px solid transparent;
  transition: color .15s ease, border-color .15s ease;
}
.ltw-site-header .ekg-menu a:hover,
.ltw-site-header .ekg-menu a:focus-visible {
  color: var(--ltw-accent);
  border-bottom-color: var(--ltw-accent);
}
/* WordPress marks the current item; mirror the mockups' aria-current styling. */
.ltw-site-header .ekg-menu .current-menu-item > a,
.ltw-site-header .ekg-menu .current-menu-ancestor > a {
  color: var(--ltw-ink-strong);
  border-bottom-color: var(--ltw-accent);
}
.ltw-site-header .ekg-nav .sub-menu {
  background: var(--ltw-surface);
  border: 1px solid var(--ltw-border);
  border-radius: var(--ltw-radius-md);
  box-shadow: var(--ltw-shadow-md);
}
.ltw-site-header .ekg-nav-toggle { color: var(--ltw-ink-strong); }
@media (max-width: 820px) {
  /* The parent supplies the full-screen menu geometry; the child supplies its surface. */
  .ltw-site-header .ekg-nav.is-open ul.ekg-menu { background: var(--ltw-surface); }
}

/* Footer link columns (rendered as raw chrome, not a classic menu). */
.ltw-site-footer__cols {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
  gap: var(--ltw-space-7) var(--ltw-space-6);
  margin-block-end: var(--ltw-space-7);
}
.ltw-site-footer__cols h2 {
  font-size: var(--ltw-fs-xs);
  font-weight: var(--ltw-fw-bold);
  letter-spacing: var(--ltw-ls-wide);
  text-transform: uppercase;
  color: var(--ltw-blue-200);
  margin: 0 0 var(--ltw-space-3);
}
.ltw-site-footer__cols ul { list-style: none; margin: 0; padding: 0; }
.ltw-site-footer__cols li + li { margin-block-start: var(--ltw-space-2); }
.ltw-site-footer__cols a {
  font-size: var(--ltw-fs-sm);
  color: var(--ltw-n-100);
  text-decoration: none;
}
.ltw-site-footer__cols a:hover,
.ltw-site-footer__cols a:focus-visible { text-decoration: underline; }


/* ==========================================================================
   20 · ILLUSTRATED FIELD-GUIDE REFRESH — approved 2026-09-17
   Graduated from the Home, Safety, and Downloads HTML previews. The body class
   is assigned only to those three pages: no changes to other guides or forms.
   Chrome remains theme-owned; the existing sticky classic menu is retained.
   Reading columns are 720px, while figures, tables, and galleries can be wider.
   ========================================================================== */
body.ltw-visual-refresh {
  --refresh-paper: var(--ltw-band);
  --refresh-grid: var(--ltw-grid-line);
  --refresh-measure: 45rem;
  --refresh-wide: 70rem;
  font-size: 1.0625rem;
  line-height: 1.72;
}

/* Shared rhythm and the existing theme chrome. No preview-only navigation. */
.ltw-visual-refresh .ltw-site-header__inner { max-width: 78rem; padding-block: 1.3rem; }
.ltw-visual-refresh .ltw-logo { font-size: 1.25rem; }
.ltw-visual-refresh .ltw-site-header .ekg-menu { gap: 1.1rem; }
.ltw-visual-refresh .ltw-site-header .ekg-menu a { font-size: .8125rem; }
.ltw-visual-refresh .ltw-container,
.ltw-visual-refresh .ltw-container--wide { max-width: 78rem; }
.ltw-visual-refresh .ltw-section { padding-block: 4.5rem; }
.ltw-visual-refresh .ltw-section--tint { background: var(--refresh-paper); }
.ltw-visual-refresh .ltw-site-footer { margin-top: 0; }
.ltw-visual-refresh .wp-site-blocks > main { margin-block-start: 0; }
.ltw-visual-refresh .ltw-note,
.ltw-visual-refresh .ltw-answer { border-radius: 3px; }

/* Native Group flow rules zero element margins. Restore the approved prose
   rhythm without changing compact labels, card titles, or theme chrome. */
.ltw-visual-refresh .wp-block-post-content :where(p:not([class]), p[class="wp-block-paragraph"], p.ltw-lead) {
  margin-block: 0 var(--ltw-space-5);
}
.ltw-visual-refresh .wp-block-post-content :where(p:not([class]), p[class="wp-block-paragraph"], p.ltw-lead):last-child { margin-bottom: 0; }
.ltw-visual-refresh .wp-block-post-content :where(h2:not(.ltw-card__title)) { margin-block: var(--ltw-space-8) var(--ltw-space-4); }
.ltw-visual-refresh .wp-block-post-content :where(h3:not(.ltw-card__title)) { margin-block: var(--ltw-space-7) var(--ltw-space-4); }
.ltw-visual-refresh .wp-block-post-content :where(h4) { margin-block: var(--ltw-space-6) var(--ltw-space-4); }
.ltw-visual-refresh .wp-block-post-content :where(h5,h6) { margin-block: var(--ltw-space-5) var(--ltw-space-4); }
.ltw-visual-refresh .wp-block-post-content :where(h2,h3,h4,h5,h6):first-child { margin-top: 0; }
.ltw-visual-refresh .wp-block-post-content figcaption { text-align: left; }

/* Home: existing content, stronger hierarchy, and purposeful visual breaks. */
.ltw-visual-refresh .ltw-section--hero {
  padding-block: 3.5rem 4.5rem;
  background: var(--refresh-paper);
  border-bottom: 1px solid var(--ltw-border);
}
.ltw-visual-refresh .ltw-hero-grid { gap: 3rem; grid-template-columns: minmax(0,1fr) minmax(0,1fr); }
.ltw-visual-refresh .ltw-hero-body h1 {
  font-size: clamp(2.2rem,3.8vw,3.5rem);
  line-height: 1.12;
  letter-spacing: -.045em;
  max-width: 7.28em;
  margin-bottom: 1.5rem;
}
.ltw-visual-refresh .ltw-hero-body .ltw-lead { font-size: 1.125rem; }
.ltw-visual-refresh .ltw-hero-body > p:not(.ltw-eyebrow) { color: var(--ltw-ink-secondary); }
.ltw-visual-refresh .ltw-hero-figure {
  position: relative;
  padding: 0 0 1rem 1rem;
  border-left: 1px solid var(--ltw-accent-2);
}
.ltw-visual-refresh .ltw-hero-figure img {
  border-radius: 3px;
  aspect-ratio: 3/2;
  object-position: center;
  box-shadow: 12px 12px 0 var(--ltw-surface);
  border: 0;
}
.ltw-visual-refresh .ltw-hero-figure figcaption {
  font-size: .75rem;
  letter-spacing: .08em;
  text-transform: uppercase;
  margin-top: 1.75rem;
  color: var(--ltw-muted);
}
.ltw-visual-refresh .ltw-hero-body .ltw-actions { gap: .65rem; }
.ltw-visual-refresh .ltw-hero-body .ltw-btn { font-size: .8125rem; }
.ltw-visual-refresh .ltw-section:not(.ltw-section--hero) > .ltw-container > :is(h2,h3,p,ul,ol,.ltw-answer,.ltw-note,.ltw-manual-notice,.ltw-actions) {
  max-width: var(--refresh-measure);
  margin-inline: auto;
}
.ltw-visual-refresh .ltw-section:not(.ltw-section--hero) > .ltw-container > h2 {
  font-size: clamp(1.8rem,3vw,2.5rem);
  line-height: 1.2;
  letter-spacing: -.035em;
}
.ltw-visual-refresh .ltw-section > .ltw-container > .chapter-label + h2 { margin-top: .65rem; }
.ltw-visual-refresh .ltw-section > .ltw-container > .ltw-lead { font-size: 1.125rem; color: var(--ltw-ink-secondary); }
.ltw-visual-refresh .chapter-label {
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--ltw-accent-2);
  display: flex;
  align-items: center;
  gap: .8rem;
  margin-bottom: 1rem;
}
.ltw-visual-refresh .chapter-label::after {
  content: "";
  height: 1px;
  background: var(--ltw-border-strong);
  width: 4rem;
  flex-shrink: 0;
}
.ltw-visual-refresh .ltw-card-grid { gap: 1.5rem; margin-top: 2rem; }
.ltw-visual-refresh .ltw-card {
  border-radius: 3px;
  box-shadow: none;
  padding: 1.8rem;
  border: 1px solid var(--ltw-border);
  border-top: 3px solid var(--ltw-accent-2);
}
.ltw-visual-refresh .ltw-card__title { font-size: 1.35rem; line-height: 1.3; }
.ltw-visual-refresh .ltw-card__desc { font-size: 1rem; line-height: 1.65; }
.ltw-visual-refresh .ltw-card__eyebrow { font-size: .75rem; letter-spacing: .12em; }
.ltw-visual-refresh .card-mark { color: var(--ltw-accent-2); width: 2.6rem; height: 2.6rem; margin-bottom: 1.5rem; }
.ltw-visual-refresh .ltw-card:hover { box-shadow: none; transform: none; border-color: var(--ltw-accent-2); }
.ltw-visual-refresh .home-basics .ltw-container {
  display: grid;
  grid-template-columns: minmax(0,1fr) minmax(0,1fr);
  gap: 1.5rem 4rem;
  align-items: start;
}
.ltw-visual-refresh .home-basics .basics-copy > * { max-width: 37rem; }
.ltw-visual-refresh .home-basics .basics-links { margin: 0; padding: 0; list-style: none; align-self: center; }
.ltw-visual-refresh .basics-links li { margin: 0; border-bottom: 1px solid var(--ltw-border-strong); }
.ltw-visual-refresh .basics-links a {
  padding: 1rem 2rem 1rem 0;
  display: block;
  text-decoration: none;
  position: relative;
  font-size: 1rem;
  font-weight: 600;
}
.ltw-visual-refresh .basics-links a::after { content: "↗"; position: absolute; right: .1rem; color: var(--ltw-accent-2); }
.ltw-visual-refresh .project-section { background: var(--ltw-surface); border-bottom: 1px solid var(--ltw-border); }
.ltw-visual-refresh .project-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 1.5rem; margin-top: 2.5rem; }
.ltw-visual-refresh .project-grid figure { min-width: 0; margin: 0; }
.ltw-visual-refresh .project-grid img { width: 100%; border: 1px solid var(--ltw-border); border-radius: 3px; }
.ltw-visual-refresh .project-grid figcaption { font-size: 1rem; color: var(--ltw-ink-secondary); margin-top: 1.1rem; line-height: 1.65; }
.ltw-visual-refresh .project-grid figcaption strong { display: block; color: var(--ltw-ink-strong); font-size: 1.1rem; margin-bottom: .2rem; }
.ltw-visual-refresh .project-caption { font-size: .8rem; color: var(--ltw-muted); margin-top: 1.5rem !important; }
.ltw-visual-refresh .home-safety .safety-feature {
  display: grid;
  grid-template-columns: minmax(0,1fr) minmax(0,1fr);
  gap: 3.5rem;
  max-width: var(--refresh-wide);
  margin: 2rem auto;
  align-items: center;
}
.ltw-visual-refresh .safety-feature figure { margin: 0; }
/* With no image beside it (cork photo removed 2026-09-30), the copy takes one
   readable column instead of half a grid. Reverts by itself when a figure returns. */
.ltw-visual-refresh .home-safety .safety-feature:not(:has(figure)) {
  grid-template-columns: minmax(0, 46rem);
  justify-content: center;
}
.ltw-visual-refresh .safety-feature img { width: 100%; aspect-ratio: 3/2; object-fit: cover; border-radius: 3px; }
.ltw-visual-refresh .safety-feature figcaption { font-size: .8125rem; line-height: 1.6; margin-top: .8rem; color: var(--ltw-muted); }
.ltw-visual-refresh .home-safety .ltw-note { margin-top: 1.75rem; }
.ltw-visual-refresh .home-answers .ltw-answer { margin-top: 2rem; margin-bottom: 2.5rem; padding: 2rem; }
.ltw-visual-refresh .home-answers .ltw-answer p { font-size: 1.0625rem; }
.ltw-visual-refresh .home-answers > .ltw-container > ul { list-style: none; padding: 0; }
.ltw-visual-refresh .home-answers > .ltw-container > ul li { padding: .7rem 0; border-bottom: 1px solid var(--ltw-border); margin: 0; }
.ltw-visual-refresh .home-answers > .ltw-container > ul a { text-decoration: none; }
.ltw-visual-refresh .resource-teaser {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 3rem;
  align-items: center;
  max-width: var(--refresh-wide);
  margin-inline: auto;
}
.ltw-visual-refresh .resource-teaser h2 { font-size: 2.3rem; line-height: 1.15; letter-spacing: -.035em; }
.ltw-visual-refresh .paper-fan {
  min-height: 23rem;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 2rem;
  background: repeating-linear-gradient(0deg,transparent,transparent 23px,var(--refresh-grid) 24px), repeating-linear-gradient(90deg,transparent,transparent 23px,var(--refresh-grid) 24px);
  border: 1px solid var(--ltw-border);
  border-radius: 3px;
}
.ltw-visual-refresh .paper-fan img { width: 42%; max-height: 22rem; object-fit: contain; filter: drop-shadow(0 8px 10px rgba(22, 22, 21, 0.16)); transform: rotate(-6deg); }
.ltw-visual-refresh .paper-fan img + img { transform: rotate(6deg); margin-left: -.5rem; margin-top: 2rem; }
/* Native image blocks own their width and rotation; linked images stay full-size. */
.ltw-visual-refresh .paper-fan > .wp-block-image { width: 42%; margin: 0; transform: rotate(-6deg); }
.ltw-visual-refresh .paper-fan > .wp-block-image + .wp-block-image { transform: rotate(6deg); margin-left: -.5rem; margin-top: 2rem; }
.ltw-visual-refresh .paper-fan > .wp-block-image img { width: 100%; transform: none; border-radius: 0; }

/* Shared guide shell: title and reading column share the same center line. */
.ltw-visual-refresh .guide-header { padding: 3.5rem 1.5rem 2rem; background: var(--refresh-paper); border-bottom: 1px solid var(--ltw-border); }
.ltw-visual-refresh .guide-header-inner { max-width: var(--refresh-measure); margin: auto; }
.ltw-visual-refresh .guide-header h1 { font-size: clamp(2rem,4vw,3.25rem); line-height: 1.15; letter-spacing: -.04em; margin: 0 0 1rem; }
.ltw-visual-refresh .guide-header .ltw-lead { font-size: 1.125rem; margin: 1.5rem 0 0; }
.ltw-visual-refresh .ltw-breadcrumb { margin: 0 0 1.5rem; font-size: .8125rem; }
.ltw-visual-refresh.refresh-safety .guide-header { padding-bottom: 1.5rem; }
.ltw-visual-refresh.refresh-safety .guide-header h1 { margin-bottom: 0; }
.ltw-visual-refresh .safety-content > :first-child { margin-top: 0; }
.ltw-visual-refresh .safety-content { max-width: 78rem; padding: 2rem 2rem 0; margin: auto; counter-reset: chapter; }
.ltw-visual-refresh .safety-content > * { max-width: var(--refresh-measure); margin-left: auto; margin-right: auto; }
.ltw-visual-refresh .safety-content > h2 {
  counter-increment: chapter;
  position: relative;
  padding-top: 2.5rem;
  margin-top: 3.5rem;
  border-top: 1px solid var(--ltw-border-strong);
  font-size: clamp(1.7rem,3vw,2.2rem);
  line-height: 1.25;
  letter-spacing: -.025em;
}
.ltw-visual-refresh .safety-content > h2::before {
  content: counter(chapter,decimal-leading-zero);
  display: block;
  color: var(--ltw-accent-2);
  font-size: .8rem;
  letter-spacing: .14em;
  margin-bottom: 1rem;
  font-weight: 700;
}
.ltw-visual-refresh .safety-content > h3 { margin-top: 2.25rem; }
.ltw-visual-refresh .safety-content > .ltw-figure-scroll,
.ltw-visual-refresh .safety-content > .ltw-table-wrap,
.ltw-visual-refresh .safety-content > .ltw-card-grid,
.ltw-visual-refresh .safety-content > .ltw-related { max-width: 65rem; margin-top: 2.5rem; margin-bottom: 2.5rem; }
.ltw-visual-refresh .safety-content > .ltw-figure-scroll {
  background: var(--ltw-surface-tint);
  border: 1px solid var(--ltw-border);
  border-radius: 3px;
  padding: 1.5rem;
  overflow: visible;
}
.ltw-visual-refresh .diagram-scroll { overflow-x: auto; max-width: 100%; overscroll-behavior-x: contain; }
.ltw-visual-refresh .diagram-scroll > svg { min-width: 40rem; width: 100%; }
.ltw-visual-refresh .safety-content > .ltw-figure-scroll figcaption { font-size: .9rem; line-height: 1.65; margin: 1rem auto 0; max-width: var(--refresh-measure); }
.ltw-visual-refresh .diagram-hint { font-size: .75rem; color: var(--ltw-muted); display: none; margin-top: .8rem; }
.ltw-visual-refresh .safety-content > .ltw-answer { margin-top: 2rem; padding: 1.75rem 2rem; }
.ltw-visual-refresh .safety-content > .ltw-reviewed { font-size: .8125rem; }
.ltw-visual-refresh .safety-content .ltw-stop { border-radius: 3px; margin-block: 2rem; padding: 1.6rem 1.75rem; }
.ltw-visual-refresh .safety-content .ltw-flow { border-left: 2px solid var(--ltw-accent-soft-line); padding-left: 2rem; }
.ltw-visual-refresh .safety-content .ltw-flow li { padding-left: .5rem; margin-bottom: 1.25rem; }
.ltw-visual-refresh .safety-content .ltw-steps,
.ltw-visual-refresh .safety-content .ltw-checklist { font-size: 1.0625rem; }
.ltw-visual-refresh .safety-content .ltw-sources { max-width: var(--refresh-measure); }
.ltw-visual-refresh .guide-toc {
  padding: 1.2rem 1.5rem;
  border: 1px solid var(--ltw-border);
  border-left: 3px solid var(--ltw-accent-2);
  background: var(--ltw-surface);
  border-radius: 3px;
  margin-block: 2rem;
}
.ltw-visual-refresh .guide-toc strong { display: block; font-size: .8rem; letter-spacing: .1em; text-transform: uppercase; margin-bottom: .7rem; color: var(--ltw-accent-2); }
.ltw-visual-refresh .guide-toc ul { margin: 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; gap: .5rem 1.1rem; font-size: .9rem; }
.ltw-visual-refresh .back-top { display: block; max-width: var(--refresh-measure); margin: 3rem auto; font-size: .875rem; text-align: right; }

/* Download previews are real PDF links without JavaScript; JS adds zoom. */
.ltw-visual-refresh .files-content { max-width: var(--refresh-wide); margin: auto; padding: 3rem 1.5rem; }
.ltw-visual-refresh .files-content > :is(p,h2,.ltw-note) { max-width: var(--refresh-measure); margin-inline: auto; }
.ltw-visual-refresh .files-content > h2 { margin-top: 3rem; }
.ltw-visual-refresh .files-content > .ltw-note { margin-block: 1rem 3rem; }
/* Keep the editable opening paragraph visually joined to the template hero. */
.ltw-visual-refresh.refresh-downloads .guide-header { border-bottom: 0; padding-bottom: 0; }
.ltw-visual-refresh.refresh-downloads .guide-header h1 { margin-bottom: 0; }
.ltw-visual-refresh.refresh-downloads .files-content { padding-top: 0; margin-block-start: 0; }
.ltw-visual-refresh .files-content > .ltw-lead:first-child {
  padding-block: 1.5rem 2rem;
  margin-block: 0 3rem;
  font-size: 1.125rem;
  background: var(--refresh-paper);
  box-shadow: 0 0 0 100vmax var(--refresh-paper);
  clip-path: inset(0 -100vmax);
}
.ltw-visual-refresh .resource-row {
  display: grid;
  grid-template-columns: minmax(0,.95fr) minmax(0,1.05fr);
  gap: 3rem;
  align-items: center;
  padding: 3rem 0;
  border-top: 1px solid var(--ltw-border-strong);
}
.ltw-visual-refresh .resource-row:first-of-type { border-top: 0; padding-top: 0; }
.ltw-visual-refresh .resource-row h2 { font-size: clamp(1.7rem,3vw,2.2rem); line-height: 1.22; letter-spacing: -.03em; margin-top: .5rem; }
.ltw-visual-refresh .resource-row p { font-size: 1rem; }
.ltw-visual-refresh .resource-row .ltw-download__meta { font-size: .8125rem; color: var(--ltw-muted); margin-top: 1rem; }
.ltw-visual-refresh .resource-row .chapter-label { font-size: .75rem; }
.ltw-visual-refresh .document-stage {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  padding: 2rem 1.5rem;
  background: var(--refresh-paper);
  border: 1px solid var(--ltw-border);
  min-height: 24rem;
}
.ltw-visual-refresh .document-stage a[data-preview] { display: block; max-width: 16rem; padding: 0; border: 0; background: transparent; cursor: zoom-in; }
.ltw-visual-refresh .document-stage img { width: 100%; height: auto; box-shadow: var(--ltw-shadow-md); border: 1px solid var(--ltw-border); }
.ltw-visual-refresh .document-stage.landscape { min-height: 20rem; }
.ltw-visual-refresh .document-stage.landscape a[data-preview] { max-width: 100%; }
.ltw-visual-refresh .document-stage.paired { gap: .75rem; }
.ltw-visual-refresh .document-stage.paired a[data-preview] { max-width: 48%; }
.ltw-visual-refresh .document-preview figcaption { font-size: .75rem; color: var(--ltw-muted); margin-top: .7rem; line-height: 1.5; }
.ltw-visual-refresh .download-buttons { display: flex; gap: .6rem; flex-wrap: wrap; margin-top: 1.5rem; }
.ltw-visual-refresh .download-buttons a { font-size: .875rem; font-weight: 600; text-decoration: none; padding: .65rem 1rem; border: 1px solid var(--ltw-accent); border-radius: 3px; color: var(--ltw-accent); }
.ltw-visual-refresh .download-buttons > a:first-child,
.ltw-visual-refresh .download-buttons > .wp-block-button:first-child > a { background: var(--ltw-accent); color: var(--ltw-on-accent); }
.ltw-visual-refresh .download-buttons > .wp-block-button:not(:first-child) > a { background: transparent; }
.ltw-visual-refresh .preview-dialog {
  max-width: min(95vw,65rem);
  max-height: 95vh;
  padding: 1rem;
  border: 1px solid var(--ltw-border);
  border-radius: 6px;
  background: var(--ltw-surface);
  color: var(--ltw-ink);
}
.ltw-visual-refresh .preview-dialog::backdrop { background: rgba(22, 22, 21, 0.72); }
.ltw-visual-refresh .preview-dialog img { max-width: 100%; max-height: 78vh; margin: auto; object-fit: contain; }
.ltw-visual-refresh .dialog-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-bottom: 1rem; font-size: .875rem; }
.ltw-visual-refresh .dialog-head button { border: 1px solid var(--ltw-border-strong); padding: .4rem .7rem; border-radius: 3px; background: var(--ltw-surface); color: var(--ltw-ink); cursor: pointer; }
.ltw-visual-refresh .preview-dialog p { font-size: .8rem; margin: .8rem 0 0; }

@media (prefers-color-scheme: dark) {
  /* Paper band and grid now come from the dark tokens (§10). Illustrations keep a
     light mat: they were drawn on paper. */
  .ltw-visual-refresh .document-stage { background: var(--ltw-surface-sunken); }
  .ltw-visual-refresh .project-grid img { background: var(--ltw-n-25); }
  .ltw-visual-refresh .paper-fan { background-color: var(--ltw-surface-sunken); }
}
@media (min-width: 76rem) {
  .ltw-visual-refresh .safety-content > h2::before { position: absolute; left: -4rem; top: 2.7rem; }
}
@media (max-width: 62rem) {
  .ltw-visual-refresh .ltw-hero-grid { grid-template-columns: 1fr; }
  .ltw-visual-refresh .ltw-hero-body h1 { max-width: 11.2em; }
  .ltw-visual-refresh .ltw-hero-figure { max-width: 42rem; }
  .ltw-visual-refresh .ltw-hero-figure img { aspect-ratio: 3/2; }
  .ltw-visual-refresh .ltw-site-header__inner { gap: 1rem; }
  .ltw-visual-refresh .home-basics .ltw-container { gap: 2rem; }
  .ltw-visual-refresh .resource-row { gap: 2rem; }
  .ltw-visual-refresh .ltw-section { padding-block: 3.5rem; }
  .ltw-visual-refresh .ltw-hero-body .ltw-actions { max-width: 35rem; }
  .ltw-visual-refresh .project-grid { grid-template-columns: 1fr; max-width: 34rem; margin-inline: auto; }
}
@media (max-width: 44rem) {
  .ltw-visual-refresh .ltw-site-header__inner { padding-inline: 1.25rem; }
  .ltw-visual-refresh .ltw-container { padding-inline: 1.25rem; }
  .ltw-visual-refresh .ltw-section { padding-block: 2.75rem; }
  .ltw-visual-refresh .ltw-section--hero { padding-top: 2.5rem; }
  .ltw-visual-refresh .ltw-hero-grid { gap: 2rem; }
  .ltw-visual-refresh .ltw-hero-body h1 { font-size: 2.35rem; }
  .ltw-visual-refresh .ltw-hero-body .ltw-btn { width: 100%; }
  .ltw-visual-refresh .ltw-hero-body .ltw-btn a { width: 100%; text-align: center; }
  .ltw-visual-refresh .ltw-card { padding: 1.5rem; }
  .ltw-visual-refresh .home-basics .ltw-container,
  .ltw-visual-refresh .home-safety .safety-feature,
  .ltw-visual-refresh .resource-teaser,
  .ltw-visual-refresh .resource-row,
  .ltw-visual-refresh .project-grid { grid-template-columns: 1fr; }
  .ltw-visual-refresh .home-basics .ltw-container { gap: 1rem; }
  .ltw-visual-refresh .project-grid { gap: 2rem; }
  .ltw-visual-refresh .project-grid img { max-height: none; object-fit: contain; background: var(--ltw-n-25); }
  .ltw-visual-refresh .home-safety .safety-feature { gap: 1.5rem; }
  .ltw-visual-refresh .paper-fan { min-height: 19rem; }
  .ltw-visual-refresh .resource-teaser { gap: 2rem; }
  .ltw-visual-refresh .resource-teaser h2 { font-size: 2rem; }
  .ltw-visual-refresh .safety-content { padding: 1.5rem 1.25rem 0; }
  .ltw-visual-refresh .guide-header { padding: 2.5rem 1.25rem 1.5rem; }
  .ltw-visual-refresh .safety-content > h2 { margin-top: 2.5rem; padding-top: 1.8rem; }
  .ltw-visual-refresh .safety-content > .ltw-figure-scroll { padding: 1rem; }
  .ltw-visual-refresh .diagram-hint { display: block; }
  .ltw-visual-refresh .safety-content .ltw-stop,
  .ltw-visual-refresh .safety-content > .ltw-answer { padding: 1.25rem; }
  .ltw-visual-refresh .resource-row { gap: 1.5rem; padding: 2.5rem 0; }
  .ltw-visual-refresh .document-preview { max-width: 100%; }
  .ltw-visual-refresh .document-stage { min-height: 0; padding: 1.5rem; }
  .ltw-visual-refresh .document-stage a[data-preview] { max-width: 13rem; }
  .ltw-visual-refresh .files-content { padding: 2rem 1.25rem; }
  .ltw-visual-refresh .resource-row .document-preview { order: 1; }
  .ltw-visual-refresh .resource-row .resource-description { order: 0; }
  .ltw-visual-refresh .ltw-site-footer { padding-top: 2.5rem; }
  .ltw-visual-refresh .ltw-answer { padding: 1.25rem !important; }
}

/* Honor the existing reduced-motion contract and ink-light print treatment. */
@media (prefers-reduced-motion: reduce) {
  .ltw-visual-refresh .ltw-card,
  .ltw-visual-refresh .document-stage a[data-preview],
  .ltw-visual-refresh .preview-dialog { animation: none !important; transition: none !important; }
}
@media print {
  body.ltw-visual-refresh { --refresh-paper: #fff; --refresh-grid: #fff; font-size: 11pt; line-height: 1.45; }
  .ltw-visual-refresh .guide-toc,
  .ltw-visual-refresh .back-top,
  .ltw-visual-refresh .diagram-hint,
  .ltw-visual-refresh .preview-dialog { display: none !important; }
  .ltw-visual-refresh .guide-header,
  .ltw-visual-refresh .document-stage,
  .ltw-visual-refresh .paper-fan,
  .ltw-visual-refresh .safety-content > .ltw-figure-scroll { background: #fff !important; color: #000 !important; }
  .ltw-visual-refresh .safety-content,
  .ltw-visual-refresh .files-content { max-width: none; padding: 0; }
  .ltw-visual-refresh .safety-content > * { max-width: none; }
  .ltw-visual-refresh .safety-content > h2 { margin-top: 1.5rem; padding-top: 1rem; }
  .ltw-visual-refresh .safety-content > h2::before { position: static; color: #000; }
  .ltw-visual-refresh .resource-row { break-inside: avoid; }
  .ltw-visual-refresh .diagram-scroll { overflow: visible; }
  .ltw-visual-refresh .diagram-scroll > svg { min-width: 0; }
  .ltw-visual-refresh .paper-fan img { filter: none; }
  .ltw-visual-refresh .download-buttons a { background: #fff; color: #000; border-color: #000; }
}

/* ==========================================================================
   21 · PAGE OPENINGS — approved 2026-09-18
   Graduated from the Privacy, Start here, and Higher education previews
   (mockups/page-openings-2026-09-17). The old templates padded the title and
   the body as two separate sections, which left a 104px gap between H1 and
   intro and parked the intro at the left edge of a wide container.

   Two families, both template-owned; titles stay the post title, and intros,
   labels and images stay editable page content:

   EDITORIAL (page.html, single-reference.html) — a centred 720px reading
   column. The title band and a first-paragraph .ltw-lead join into one paper
   band, the same technique the Downloads page already uses.

   SECTION (section-landing.html) — the title and the first content blocks
   share one grid, so the intro can sit beside an image:
     <p class="ltw-eyebrow">       optional short label, first block
     <p class="ltw-lead">          the intro
     <figure class="wp-block-image ltw-opening__figure">   optional image
   With an image the opening splits into text | image on wide screens and
   stacks on narrow ones. Without one it is a centred compact opening. The
   rest of the page flows below the band: prose centred at 720px, card grids
   at full width. Post content is display:contents so its blocks can join the
   title's grid; grid items do not collapse margins, so rhythm below is
   margin-top only.
   ========================================================================== */
:root {
  --ltw-opening-paper: var(--ltw-band);
  --ltw-opening-measure: 45rem;
}

/* Shared opening type. */
.ltw-opening h1 {
  font-size: clamp(2.25rem, 3.5vw, 3.4rem);
  line-height: 1.13;
  letter-spacing: -.035em;
  max-width: 10.64em;
  margin: 0;
}
.ltw-opening .ltw-eyebrow {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin: 0 0 1.25rem;
  color: var(--ltw-accent-2);               /* 7.03:1 on surface */
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
}
.ltw-opening .ltw-eyebrow::after { content: ""; flex: none; width: 4rem; height: 1px; background: var(--ltw-border-strong); }
.ltw-opening .ltw-eyebrow a { color: inherit; text-decoration: none; }
.ltw-opening .ltw-eyebrow a:hover { text-decoration: underline; }

/* --- 21.1 Editorial ------------------------------------------------------ */
.ltw-opening--editorial {
  padding: 3rem max(var(--ltw-gutter), calc((100% - var(--ltw-opening-measure)) / 2)) 2.5rem;
  background: var(--ltw-opening-paper);
  border-bottom: 1px solid var(--ltw-border);
}
.ltw-editorial-body {
  padding-inline: max(var(--ltw-gutter), calc((100% - var(--ltw-opening-measure)) / 2));
  padding-top: 2.5rem;
}
/* An opening .ltw-lead joins the title band. */
.ltw-opening--editorial:has(+ .ltw-editorial-body > .ltw-lead:first-child) { padding-bottom: 1.5rem; border-bottom: 0; }
.ltw-opening--editorial:has(+ .ltw-editorial-body > .ltw-lead:first-child) + .ltw-editorial-body { padding-top: 0; }
/* Full-bleed paper and a 1px rule, drawn with border-image outsets: pixel-snapped
   like a border, and outsets never add sideways scrolling. */
.ltw-opening--editorial:has(+ .ltw-editorial-body > .ltw-lead:first-child) + .ltw-editorial-body > .ltw-lead:first-child {
  position: relative;
  max-width: none;
  margin: 0 0 2.5rem;
  padding-bottom: 2.5rem;
  border-image: conic-gradient(var(--ltw-opening-paper) 0 0) fill 0 / 0 / 0 100vmax;
}
.ltw-opening--editorial:has(+ .ltw-editorial-body > .ltw-lead:first-child) + .ltw-editorial-body > .ltw-lead:first-child::after {
  content: "";
  position: absolute;
  inset: auto 0 -1px;
  height: 1px;
  border-image: conic-gradient(var(--ltw-border) 0 0) fill 0 / 0 / 0 100vmax;
}
main > .ltw-editorial-body > .ltw-lead:first-child { max-width: none; font-size: 1.125rem; line-height: 1.7; }
main > .ltw-editorial-body > :first-child { margin-top: 0; }
/* Callouts fill the 720px column rather than their own narrower default cap. */
main > .ltw-editorial-body > :is(.ltw-note, .ltw-warn, .ltw-stop, .ltw-answer, .ltw-manual-notice) { max-width: none; }
main > .ltw-editorial-body > :where(p:not([class]), p[class="wp-block-paragraph"]) { margin-block: 0 1.5rem; }
main > .ltw-editorial-body > :where(p:not([class]), p[class="wp-block-paragraph"]):last-child { margin-bottom: 0; }
main > .ltw-editorial-body :where(h2, h3):not(.ltw-card__title) { margin-bottom: 1rem; }
main > .ltw-editorial-body > h2 { margin-top: 3rem; padding-top: 1.5rem; border-top: 1px solid var(--ltw-border); }
main > .ltw-editorial-body > :is(h2:first-child, .ltw-lead:first-child + h2) { margin-top: 0; padding-top: 0; border-top: 0; }
main > .ltw-editorial-body > h3 { margin-top: 2rem; }
main > .ltw-editorial-body > figure.wp-block-table { margin-block: 1.5rem; }

/* --- 21.2 Section --------------------------------------------------------- */
.ltw-opening--section {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  width: 100%;
  max-width: calc(72rem + 2 * var(--ltw-gutter));
  margin-inline: auto;
  padding: 3.5rem var(--ltw-gutter) 0;
  isolation: isolate;
}
/* The paper band sits behind the opening rows and bleeds to both edges. */
.ltw-opening--section::before {
  content: "";
  grid-column: 1 / -1;
  grid-row: 1 / 4;
  z-index: -1;
  margin-top: -3.5rem;
  border-image: conic-gradient(var(--ltw-opening-paper) 0 0) fill 0 / 0 / 0 100vmax;
}
/* The band's 1px rule: same rows, pinned 1px below the band's bottom edge. */
.ltw-opening--section::after {
  content: "";
  grid-column: 1 / -1;
  grid-row: 1 / 4;
  align-self: end;
  height: 1px;
  margin-bottom: -1px;
  z-index: -1;
  border-image: conic-gradient(var(--ltw-border) 0 0) fill 0 / 0 / 0 100vmax;
}
.ltw-opening--section > .wp-block-post-content { display: contents; }
.ltw-opening--section > h1,
.ltw-opening--section > .wp-block-post-content > * { grid-column: 1 / -1; min-width: 0; }

/* Opening rows: label, title, intro — a centred 720px column by default. */
.ltw-opening--section > h1,
.ltw-opening--section > .wp-block-post-content > :is(p, ul, ol, h2, h3, h4, .ltw-note, .ltw-warn, .ltw-stop, .ltw-answer, .ltw-manual-notice, .ltw-actions) {
  justify-self: center;
  width: 100%;
  max-width: var(--ltw-opening-measure);
}
.ltw-opening--section > .wp-block-post-content > .ltw-eyebrow:first-child { grid-row: 1; margin: 0 0 1.25rem; }
.ltw-opening--section > h1 { grid-row: 2; margin: 0 0 1.5rem; }
.ltw-opening--section > .wp-block-post-content > :is(.ltw-lead:first-child, .ltw-eyebrow:first-child + .ltw-lead) {
  grid-row: 3;
  margin: 0 0 3.5rem;
  font-size: 1.125rem;
  line-height: 1.7;
}

/* Below the band. */
.ltw-opening--section > .wp-block-post-content > * { margin-block: 1.5rem 0; }
.ltw-opening--section > .wp-block-post-content > h2 { margin-top: 3rem; padding-top: 1.5rem; border-top: 1px solid var(--ltw-border); }
.ltw-opening--section > .wp-block-post-content > h3 { margin-top: 2rem; }
.ltw-opening--section > .wp-block-post-content > :is(h2, h3) + :is(p, ul, ol) { margin-top: 1rem; }
.ltw-opening--section > .wp-block-post-content > :is(.ltw-card-grid, .ltw-note, .ltw-warn, .ltw-stop, .ltw-answer, .ltw-table-wrap, figure:not(.ltw-opening__figure)) { margin-top: 2rem; }
.ltw-opening--section > .wp-block-post-content > :is(.ltw-lead:first-child, .ltw-eyebrow:first-child + .ltw-lead, .ltw-opening__figure) + :not(.ltw-opening__figure) { margin-top: 2.5rem; }
.ltw-opening--section > .wp-block-post-content > :is(.ltw-lead:first-child, .ltw-eyebrow:first-child + .ltw-lead, .ltw-opening__figure) + :is(h2, h3) { padding-top: 0; border-top: 0; }

/* The opening image: stacked inside the band on narrow screens. */
.ltw-opening__figure { margin: 0; padding-left: 1rem; border-left: 2px solid var(--ltw-accent-2); }
.ltw-opening__figure > a { display: block; }
.ltw-opening__figure img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: cover;
  border-radius: 3px;
  box-shadow: 10px 10px 0 var(--ltw-surface);
}
.ltw-opening__figure figcaption { margin: 1.5rem 0 0; font-size: .75rem; line-height: 1.5; color: var(--ltw-muted); text-align: left; }
/* Authored 4:3 diagrams are shown whole, on their own paper. */
.ltw-opening__figure--diagram img { aspect-ratio: 4 / 3; object-fit: contain; background: var(--ltw-n-25); outline: 1px solid var(--ltw-border); outline-offset: -1px; }
/* Real document previews are shown whole, never cropped. */
.ltw-opening__figure--document img { object-fit: contain; padding: 1.5rem; background: var(--ltw-surface-tint); }

.ltw-opening--section:has(> .wp-block-post-content > .ltw-opening__figure)::before,
.ltw-opening--section:has(> .wp-block-post-content > .ltw-opening__figure)::after { grid-row: 1 / 5; }
.ltw-opening--section > .wp-block-post-content > .ltw-opening__figure {
  grid-row: 4;
  justify-self: center;
  width: 100%;
  max-width: var(--ltw-opening-measure);
  margin: 0 0 3.5rem;
}
.ltw-opening--section:has(> .wp-block-post-content > .ltw-opening__figure) > .wp-block-post-content > :is(.ltw-lead:first-child, .ltw-eyebrow:first-child + .ltw-lead) { margin-bottom: 2rem; }

/* Wide screens: text | image, with the text centred against the image. */
@media screen and (min-width: 53.1875rem) {
  .ltw-opening--section:has(> .wp-block-post-content > .ltw-opening__figure) {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    grid-template-rows: 1fr auto auto auto 1fr;
    column-gap: 3.5rem;
  }
  .ltw-opening--section:has(> .wp-block-post-content > .ltw-opening__figure)::before,
  .ltw-opening--section:has(> .wp-block-post-content > .ltw-opening__figure)::after { grid-row: 1 / 6; }
  .ltw-opening--section:has(> .wp-block-post-content > .ltw-opening__figure) > h1 { grid-row: 3; grid-column: 1; justify-self: start; max-width: 10.64em; }
  .ltw-opening--section:has(> .wp-block-post-content > .ltw-opening__figure) > .wp-block-post-content > .ltw-eyebrow:first-child { grid-row: 2; grid-column: 1; justify-self: stretch; max-width: none; }
  .ltw-opening--section:has(> .wp-block-post-content > .ltw-opening__figure) > .wp-block-post-content > :is(.ltw-lead:first-child, .ltw-eyebrow:first-child + .ltw-lead) {
    grid-row: 4;
    grid-column: 1;
    justify-self: stretch;
    max-width: none;
    margin-bottom: 3.5rem;
  }
  .ltw-opening--section > .wp-block-post-content > .ltw-opening__figure {
    grid-row: 1 / 6;
    grid-column: 2;
    align-self: center;
    max-width: none;
  }
}

@media (max-width: 60rem) {
  .ltw-opening--section > .wp-block-post-content > :is(.ltw-card-grid, .ltw-table-wrap, figure:not(.ltw-opening__figure)) {
    justify-self: center;
    width: 100%;
    max-width: var(--ltw-opening-measure);
  }
}

/* Cards and tables inside both families. */
:is(.ltw-opening--section, .ltw-editorial-body) .ltw-card-grid { gap: 1.5rem; }
:is(.ltw-opening--section, .ltw-editorial-body) .ltw-card {
  padding: 1.5rem;
  border-top: 3px solid var(--ltw-accent-2);
  border-radius: 3px;
  box-shadow: none;
}
:is(.ltw-opening--section, .ltw-editorial-body) .ltw-card__title { line-height: 1.35; }

/* A table block carrying .ltw-table puts the class on the <figure>, so the
   table's 34rem minimum widened the whole page on phones. The figure scrolls;
   the table keeps its minimum. */
figure.wp-block-table.ltw-table { min-width: 0; max-width: 100%; overflow-x: auto; overscroll-behavior-inline: contain; }
figure.wp-block-table.ltw-table > table { min-width: 34rem; }
figure.wp-block-table.ltw-table:focus-visible { outline: 3px solid var(--ltw-focus); outline-offset: 3px; }

@media (prefers-color-scheme: dark) {
  /* --ltw-band remaps in §10; nothing to override here. */
}
@media (max-width: 35rem) {
  .ltw-opening--editorial { padding-top: 2rem; }
  .ltw-opening--section { padding-top: 2rem; }
  .ltw-opening--section::before { margin-top: -2rem; }
  .ltw-opening h1 { font-size: 2.25rem; }
  main > .ltw-editorial-body > .ltw-lead:first-child,
  .ltw-opening--section > .wp-block-post-content > :is(.ltw-lead:first-child, .ltw-eyebrow:first-child + .ltw-lead) { font-size: 1.0625rem; }
  .ltw-opening__figure { padding-left: .75rem; }
}
@media print {
  :root { --ltw-opening-paper: #FFF; }
  .ltw-opening--section::before,
  .ltw-opening--section::after,
  .ltw-opening--editorial:has(+ .ltw-editorial-body > .ltw-lead:first-child) + .ltw-editorial-body > .ltw-lead:first-child,
  .ltw-opening--editorial:has(+ .ltw-editorial-body > .ltw-lead:first-child) + .ltw-editorial-body > .ltw-lead:first-child::after { border-image: none; }
  .ltw-opening__figure { display: none; }
}

/* ==========================================================================
   22 · FORMS IN DARK MODE — approved 2026-09-23
   ekg-base styles Fluent Forms through --ekg-form-* tokens that point at
   theme.json presets. Presets are fixed light-mode values, so in dark mode
   the labels stayed #222E35 on #131C21 (1.24:1), and the required asterisk
   and validation messages fell back to #B62935 (2.76:1). Remap only the two
   tokens that sit on the page surface; inputs keep their white field and
   dark text, and light mode is unchanged. `:root .fluentform` outranks
   ekg-base's `.fluentform` whatever order the stylesheets load in.
   ========================================================================== */
@media (prefers-color-scheme: dark) {
  :root .fluentform {
    --ekg-form-label: var(--ltw-ink);
    --ekg-form-error: var(--ltw-stop-ink);
  }
}


/* ==========================================================================
   23 · WORKSHOP BLUEPRINT — adopted 2026-09-30
   The look of the "Workshop Blueprint design system" mockup
   (mockups/Workshop Blueprint design system/), carried onto the EXISTING
   classes so no page content changes. Tokens live in §02–§05 and §10; this
   section is the component layer: type, kickers, the short answer, callouts,
   cards, buttons, header + dropdowns, grid paper, footer.

   What it deliberately does NOT take from the mockup:
     - Google-hosted fonts (self-hosted instead — §04).
     - A light-only palette (§10 is a full dark mode, every pair measured).
     - The placeholder wordmark (our convergence mark stays).
   Rules: one beam (orange) moment per view region; red stays stop-only;
   motion 120–200ms ease-out and none under prefers-reduced-motion.
   ========================================================================== */

/* --- 23.1 Fonts (SIL OFL; licences in assets/fonts) ---------------------- */
@font-face { font-family: "Hanken Grotesk"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("assets/fonts/hanken-grotesk.woff2") format("woff2"); }
@font-face { font-family: "Hanken Grotesk"; font-style: italic; font-weight: 100 900; font-display: swap;
  src: url("assets/fonts/hanken-grotesk-italic.woff2") format("woff2"); }
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 200 800; font-display: swap;
  src: url("assets/fonts/newsreader.woff2") format("woff2"); }
@font-face { font-family: "Newsreader"; font-style: italic; font-weight: 200 800; font-display: swap;
  src: url("assets/fonts/newsreader-italic.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 100 800; font-display: swap;
  src: url("assets/fonts/jetbrains-mono.woff2") format("woff2"); }

/* Sized fallbacks (0.9.6, 2026-10-13). Until the fonts above arrive, the page
   sets in a local font scaled to the web font's widths, so lines break in the
   same places before and after and nothing moves (EKG-Typography-Standard §4).
   With the fonts 2.5s late, 62 of 150 pages moved on a phone, worst 0.207: the
   system mono is 8% narrower than JetBrains Mono, so the labels above an FAQ
   heading rewrapped, and Segoe UI at heading weight is 8% wider than Hanken.
   size-adjust = web width / local width over the text LTW actually sets;
   ascent/descent are the web font's own metrics divided by it. One factor
   can't match every heading's breaks: 750–900 is tuned on all 150 H1s (95.2%
   left 4 of 150 turning on a phone, 6 on desktop). Arimo, Cousine (ChromeOS,
   so school Chromebooks) and Liberation (Linux) are the same widths as Arial
   and Courier New, so the same numbers hold for them. Georgia has no clone. */
@font-face { font-family: "LTW Sans Fallback"; font-style: normal; font-weight: 100 500;
  src: local("Arial"), local("ArialMT"), local("Arimo"), local("Liberation Sans"), local("LiberationSans");
  size-adjust: 100.7%; ascent-override: 99.3%; descent-override: 30.1%; line-gap-override: 0%; }
@font-face { font-family: "LTW Sans Fallback"; font-style: normal; font-weight: 600 749;
  src: local("Arial Bold"), local("Arial-BoldMT"), local("Arimo Bold"), local("Arimo-Bold"), local("Liberation Sans Bold"), local("LiberationSans-Bold");
  size-adjust: 94.8%; ascent-override: 105.5%; descent-override: 32%; line-gap-override: 0%; }
@font-face { font-family: "LTW Sans Fallback"; font-style: normal; font-weight: 750 900;
  src: local("Arial Bold"), local("Arial-BoldMT"), local("Arimo Bold"), local("Arimo-Bold"), local("Liberation Sans Bold"), local("LiberationSans-Bold");
  size-adjust: 95.2%; ascent-override: 105%; descent-override: 31.8%; line-gap-override: 0%; }
@font-face { font-family: "LTW Sans Fallback"; font-style: italic; font-weight: 100 500;
  src: local("Arial Italic"), local("Arial-ItalicMT"), local("Arimo Italic"), local("Arimo-Italic"), local("Liberation Sans Italic"), local("LiberationSans-Italic");
  size-adjust: 102%; ascent-override: 98%; descent-override: 29.7%; line-gap-override: 0%; }
@font-face { font-family: "LTW Sans Fallback"; font-style: italic; font-weight: 600 900;
  src: local("Arial Bold Italic"), local("Arial-BoldItalicMT"), local("Arimo Bold Italic"), local("Arimo-BoldItalic"), local("Liberation Sans Bold Italic"), local("LiberationSans-BoldItalic");
  size-adjust: 96.1%; ascent-override: 104.1%; descent-override: 31.5%; line-gap-override: 0%; }
@font-face { font-family: "LTW Serif Fallback"; font-style: normal; font-weight: 100 500;
  src: local("Georgia");
  size-adjust: 91%; ascent-override: 80.8%; descent-override: 29.1%; line-gap-override: 0%; }
@font-face { font-family: "LTW Serif Fallback"; font-style: normal; font-weight: 600 900;
  src: local("Georgia Bold"), local("Georgia-Bold");
  size-adjust: 86.5%; ascent-override: 85%; descent-override: 30.6%; line-gap-override: 0%; }
@font-face { font-family: "LTW Serif Fallback"; font-style: italic; font-weight: 100 500;
  src: local("Georgia Italic"), local("Georgia-Italic");
  size-adjust: 83%; ascent-override: 88.6%; descent-override: 31.9%; line-gap-override: 0%; }
@font-face { font-family: "LTW Serif Fallback"; font-style: italic; font-weight: 600 900;
  src: local("Georgia Bold Italic"), local("Georgia-BoldItalic");
  size-adjust: 83.8%; ascent-override: 87.7%; descent-override: 31.6%; line-gap-override: 0%; }
@font-face { font-family: "LTW Mono Fallback"; font-style: normal; font-weight: 100 500;
  src: local("Courier New"), local("CourierNewPSMT"), local("Cousine"), local("Liberation Mono"), local("LiberationMono");
  size-adjust: 99.98%; ascent-override: 102%; descent-override: 30%; line-gap-override: 0%; }
@font-face { font-family: "LTW Mono Fallback"; font-style: normal; font-weight: 600 900;
  src: local("Courier New Bold"), local("CourierNewPS-BoldMT"), local("Cousine Bold"), local("Cousine-Bold"), local("Liberation Mono Bold"), local("LiberationMono-Bold");
  size-adjust: 99.98%; ascent-override: 102%; descent-override: 30%; line-gap-override: 0%; }

/* --- 23.2 Base type ------------------------------------------------------- */
body { font-family: var(--ltw-font-sans); background: var(--ltw-surface); color: var(--ltw-ink); }
p { text-wrap: pretty; }
h1, h2, h3 { font-weight: var(--ltw-fw-bold); letter-spacing: var(--ltw-ls-tight); }
h1, .ltw-opening h1, .ltw-visual-refresh .ltw-hero-body h1, .ltw-visual-refresh .guide-header h1 {
  font-weight: var(--ltw-fw-heavy);
  letter-spacing: var(--ltw-ls-display);
}
::selection { background: var(--ltw-beam-100); color: var(--ltw-n-900); }

/* --- 23.3 Mono labels: kickers, metadata, breadcrumbs, table heads ------- */
.ltw-eyebrow,
.ltw-card__eyebrow,
.ltw-answer__label,
.ltw-lead-form__eyebrow,
.ltw-visual-refresh .chapter-label,
.ltw-visual-refresh .guide-toc strong,
.ltw-breadcrumb,
.ltw-reviewed,
.ltw-chip__label,
.ltw-download__meta,
.ltw-table thead th,
.ltw-site-footer__cols h2,
.ltw-hero-figure figcaption,
.ltw-opening__figure figcaption {
  font-family: var(--ltw-font-mono);
  letter-spacing: var(--ltw-ls-eyebrow);
}
.ltw-eyebrow,
.ltw-card__eyebrow,
.ltw-opening .ltw-eyebrow,
.ltw-visual-refresh .chapter-label {
  font-size: var(--ltw-fs-xs);
  font-weight: var(--ltw-fw-medium);
  text-transform: uppercase;
  color: var(--ltw-muted);
}
.ltw-breadcrumb, .ltw-reviewed { font-size: 0.75rem; letter-spacing: 0.04em; }
.ltw-breadcrumb [aria-current="page"] { color: var(--ltw-ink); }
.ltw-chip__label { letter-spacing: 0.04em; }

/* --- 23.4 Numbered section openers: "01 —— KICKER" -----------------------
   Home's chapter labels already carry their number as typed text ("01 / Find
   your starting point"), so they get only the beam rule in front — a CSS
   counter there printed the number twice. Section-landing h2s and the Safety
   guide have no typed numbers, so those use counters (below). */
.ltw-visual-refresh .chapter-label { gap: 0.75rem; }
.ltw-visual-refresh .chapter-label::before {
  content: "";
  flex: none;
  width: 24px;
  height: 2px;
  background: var(--ltw-beam);
}
.ltw-visual-refresh .chapter-label::after { display: none; }
/* The opening label keeps the beam rule, without a number. */
.ltw-opening .ltw-eyebrow::after { width: 24px; height: 2px; background: var(--ltw-beam); order: -1; }
.ltw-opening .ltw-eyebrow { gap: 0.75rem; }

/* Section-landing pages: every h2 below the opening gets its number. */
.ltw-opening--section { counter-reset: ltw-sec; }
.ltw-opening--section > .wp-block-post-content > h2 { counter-increment: ltw-sec; }
.ltw-opening--section > .wp-block-post-content > h2::before,
.ltw-visual-refresh .safety-content > h2::before {
  display: block;
  margin-bottom: 0.75rem;
  padding-left: calc(24px + 0.75rem);
  font-family: var(--ltw-font-mono);
  font-size: var(--ltw-fs-xs);
  font-weight: var(--ltw-fw-semi);
  letter-spacing: var(--ltw-ls-eyebrow);
  color: var(--ltw-accent-2);
  background: linear-gradient(var(--ltw-beam), var(--ltw-beam)) no-repeat left center / 24px 2px;
}
.ltw-opening--section > .wp-block-post-content > h2::before { content: counter(ltw-sec, decimal-leading-zero); }
/* The Safety guide's margin numbers (§20) move above the heading: the mono
   label reads better stacked than hung in the margin. */
.ltw-visual-refresh .safety-content > h2::before { position: static; }

/* --- 23.5 Short answer: a rule, a mark, and the serif --------------------
   Not a box. A 2px graphite rule, the beam dot + mono label, then the answer
   in Newsreader. Answer-first stays the most visible thing on an FAQ. */
.ltw-answer,
.ltw-visual-refresh .ltw-answer,
.ltw-visual-refresh .home-answers .ltw-answer,
.ltw-visual-refresh .safety-content > .ltw-answer {
  background: transparent;
  border: 0;
  border-top: 2px solid var(--ltw-border-ink);
  border-bottom: 1px solid var(--ltw-border);
  border-radius: 0;
  padding: 1.5rem 0 1.75rem !important;
  color: var(--ltw-ink-strong);
}
.ltw-answer__label {
  display: flex; align-items: center; gap: 0.625rem;
  font-size: var(--ltw-fs-xs);
  font-weight: var(--ltw-fw-semi);
  color: var(--ltw-accent-2);
  margin-bottom: 0.75rem;
}
.ltw-answer__label::before {
  content: ""; width: 8px; height: 8px; border-radius: 50%;
  background: var(--ltw-beam); flex: none;
}
/* The label is itself a <p> on block-built pages (Home, Safety) — keep it mono. */
.ltw-answer p:not(.ltw-answer__label),
.ltw-visual-refresh .home-answers .ltw-answer p:not(.ltw-answer__label) {
  font-family: var(--ltw-font-serif);
  font-size: clamp(1.25rem, 1.05rem + 0.6vw, 1.5rem);
  line-height: 1.45;
  color: var(--ltw-ink-strong);
}
.ltw-lead, .ltw-opening .ltw-lead { text-wrap: pretty; }

/* --- 23.6 Callouts: fully bordered tinted boxes --------------------------- */
.ltw-warn, .ltw-stop, .ltw-note { border-radius: var(--ltw-radius-md); padding: 1.25rem 1.5rem; }
.ltw-visual-refresh .ltw-note, .ltw-visual-refresh .safety-content .ltw-stop { border-radius: var(--ltw-radius-md); }
/* Stop outranks warning on weight, not a stripe: 2px all round. */
.ltw-stop { border-width: 2px; border-left-width: 2px; }
.ltw-manual-notice { border: var(--ltw-rule-path); background: transparent; }
blockquote {
  border-left: 0;
  padding-left: 0;
  font-family: var(--ltw-font-serif);
  font-size: 1.25rem;
  line-height: 1.5;
  color: var(--ltw-ink-strong);
}

/* --- 23.7 Cards: white, bordered, lift on hover --------------------------- */
.ltw-card,
.ltw-visual-refresh .ltw-card,
:is(.ltw-opening--section, .ltw-editorial-body) .ltw-card {
  background: var(--ltw-surface-card);
  border: 1px solid var(--ltw-border);
  border-radius: var(--ltw-radius-lg);
  box-shadow: none;
  transition: border-color var(--ltw-dur) var(--ltw-ease),
              box-shadow var(--ltw-dur) var(--ltw-ease),
              transform var(--ltw-dur) var(--ltw-ease);
}
.ltw-card:hover,
.ltw-visual-refresh .ltw-card:hover,
:is(.ltw-opening--section, .ltw-editorial-body) .ltw-card:hover {
  border-color: var(--ltw-border-ink);
  box-shadow: var(--ltw-shadow-md);
  transform: translateY(-2px);
}
.ltw-card--accent, .ltw-card--safe { border-top-width: 1px; }
.ltw-card__title { font-size: 1.25rem; letter-spacing: var(--ltw-ls-tight); }
.ltw-visual-refresh .card-mark { color: var(--ltw-ink-strong); }
.ltw-download, .ltw-sources, .ltw-related, .ltw-table-wrap { background-color: var(--ltw-surface-card); }
.ltw-related { background: var(--ltw-surface-card); }
.ltw-related__list > li { border-left: 0; padding-left: 0; padding-block: 0.625rem; border-bottom: 1px solid var(--ltw-border); }
.ltw-related__list a::after { content: "\2192"; display: inline-block; margin-left: 0.35em; transition: transform var(--ltw-dur) var(--ltw-ease); }
.ltw-related__list a:hover::after { transform: translateX(4px); }
.ltw-visual-refresh .basics-links a::after { content: "\2192"; color: var(--ltw-muted); transition: transform var(--ltw-dur) var(--ltw-ease), color var(--ltw-dur) var(--ltw-ease); }
.ltw-visual-refresh .basics-links a:hover::after { color: var(--ltw-accent-2); transform: translateX(4px); }

/* --- 23.8 Image frames: matted, 10px, no stripe --------------------------- */
.ltw-visual-refresh .ltw-hero-figure,
.ltw-opening__figure { border-left: 0; padding-left: 0; padding-bottom: 0; }
.ltw-visual-refresh .ltw-hero-figure img,
.ltw-opening__figure img {
  border-radius: var(--ltw-radius-lg);
  box-shadow: var(--ltw-shadow-lg);
}
.ltw-visual-refresh .ltw-hero-figure figcaption,
.ltw-opening__figure figcaption { margin-top: 1rem; font-size: 0.6875rem; }
.ltw-visual-refresh .project-grid img,
.ltw-visual-refresh .safety-feature img { border-radius: var(--ltw-radius-lg); }
.ltw-visual-refresh .document-stage,
.ltw-visual-refresh .paper-fan { border-radius: var(--ltw-radius-lg); }

/* --- 23.9 Grid paper behind the big openings ------------------------------ */
.ltw-section--hero,
.ltw-visual-refresh .ltw-section--hero,
.ltw-visual-refresh.refresh-safety .guide-header {
  background-color: var(--ltw-band);
  background-image:
    linear-gradient(var(--ltw-grid-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--ltw-grid-line) 1px, transparent 1px);
  background-size: 32px 32px;
  background-position: -1px -1px;
}
/* Birch resource band on Home (the section holding the download teaser). */
.ltw-visual-refresh .ltw-section:has(> .ltw-container > .resource-teaser),
.ltw-visual-refresh .ltw-section:has(.resource-teaser) { background: var(--ltw-surface-material); }

/* --- 23.10 Buttons -------------------------------------------------------- */
.ltw-btn,
.wp-block-button.ltw-btn > .wp-block-button__link,
.ltw-visual-refresh .download-buttons a { border-radius: var(--ltw-radius-sm); }
.ltw-btn--primary:active,
.wp-block-button.ltw-btn--primary > .wp-block-button__link:active { background: var(--ltw-accent-press); }
/* Secondary: graphite outline that inverts to a graphite fill. */
.ltw-btn--ghost,
.wp-block-button.ltw-btn--ghost > .wp-block-button__link {
  color: var(--ltw-ink-strong);
  border-color: var(--ltw-ink-strong);
}
.ltw-btn--ghost:hover,
.wp-block-button.ltw-btn--ghost > .wp-block-button__link:hover,
.wp-block-button.ltw-btn--ghost > .wp-block-button__link:focus-visible {
  background: var(--ltw-ink-strong);
  color: var(--ltw-surface);
}
/* Arrows on navigating links slide on hover. */
.wp-block-button__link, .ltw-btn { transition: background-color var(--ltw-dur) var(--ltw-ease), color var(--ltw-dur) var(--ltw-ease), border-color var(--ltw-dur) var(--ltw-ease); }

/* --- 23.11 Header: translucent paper, beam on the current item ------------ */
/* The blur sits on a ::before layer, NOT on the header itself: backdrop-filter
   makes an element the containing block for position:fixed descendants, which
   trapped ekg-base's full-screen mobile menu inside the 116px header
   (found in the 2026-09-30 phone check). */
.ltw-site-header {
  background: transparent;
  border-bottom: 1px solid var(--ltw-border);
}
.ltw-site-header::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: color-mix(in srgb, var(--ltw-surface) 92%, transparent);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}
.ltw-logo { font-weight: var(--ltw-fw-heavy); letter-spacing: -0.02em; }
.ltw-logo span { color: inherit; }
@media (min-width: 821px) {
  .ltw-site-header .ekg-menu { gap: 0.25rem 1.5rem; align-items: stretch; }
  .ltw-site-header .ekg-menu > li { display: flex; align-items: center; }
}
.ltw-site-header .ekg-menu a { font-size: 0.9375rem; color: var(--ltw-ink); }
.ltw-site-header .ekg-menu > li > a { padding-block: 0.5rem; }
.ltw-site-header .ekg-menu a:hover,
.ltw-site-header .ekg-menu a:focus-visible { color: var(--ltw-ink-strong); border-bottom-color: var(--ltw-border-strong); }
.ltw-site-header .ekg-menu .current-menu-item > a,
.ltw-site-header .ekg-menu .current-menu-ancestor > a,
.ltw-site-header .ekg-menu .current-menu-parent > a { color: var(--ltw-ink-strong); border-bottom-color: var(--ltw-beam); }

/* The one header button: a menu item carrying the CSS class "ltw-nav-cta"
   (Appearance > Menus > CSS Classes), so the label stays editable. */
.ltw-site-header .ekg-menu > li.ltw-nav-cta > a {
  padding: 0.5rem 0.875rem;
  border: 0;
  border-radius: var(--ltw-radius-sm);
  background: var(--ltw-ink-strong);
  color: var(--ltw-surface);
  font-weight: var(--ltw-fw-semi);
}
.ltw-site-header .ekg-menu > li.ltw-nav-cta > a:hover,
.ltw-site-header .ekg-menu > li.ltw-nav-cta > a:focus-visible { background: var(--ltw-accent); color: var(--ltw-on-accent); }

/* --- 23.12 Dropdowns that open when you reach for them --------------------
   LTW's vendored ekg-base (0.1.5) still toggles display:none with a 6px dead
   gap, the defect fixed on the other sites 2026-09-11. That fix (visibility +
   opacity, a 6px bridge, a ~0.4s leave grace) cured "closes while you reach
   for it" but left two ways a menu can seem not to open, which Eric reported
   on 2026-09-30 ("sometimes they don't pop open… they eventually work"):
     1. The grace period keeps the LAST panel alive and hoverable for 0.4s.
        Slide to the next item and the old panel still sits on top of the new
        one — and still catches the pointer — until the grace runs out.
     2. :focus-within pins a panel open after a mouse click (focus stays in
        the item), so a second panel opens underneath it.
   Fix, in the child so no parent is lifted between sites:
     - a sibling closes INSTANTLY once another top-level item is hovered
       (the grace survives only for drifting off the edge of the menu);
     - the hovered item's panel is always on top;
     - keyboard focus opens a panel via :focus-visible, so a click does not
       pin it. Touch: the parent is a real page; its children are on it.     */
@media (min-width: 821px) {
  .ltw-site-header .ekg-nav .sub-menu {
    display: block;
    top: calc(100% + 6px);
    margin: 0;
    min-width: 15rem;
    padding: 0.5rem 0;
    background: var(--ltw-surface-card);
    border: 1px solid var(--ltw-border);
    border-radius: var(--ltw-radius-md);
    box-shadow: var(--ltw-shadow-md);
    visibility: hidden;
    opacity: 0;
    transform: translateY(-2px);
    transition: opacity 0.12s ease 0.28s, transform 0.12s ease 0.28s, visibility 0s linear 0.4s;
  }
  .ltw-site-header .ekg-nav .sub-menu::before {
    content: ""; position: absolute; left: 0; right: 0; top: -7px; height: 7px;
  }
  /* Hover and keyboard are SEPARATE rules: in one selector list, a browser
     without :has() drops the whole rule — hover included — and no dropdown
     would open at all (caught by the fleet dropdown session, 2026-09-30). */
  .ltw-site-header .ekg-nav .menu-item-has-children:hover > .sub-menu {
    visibility: visible;
    opacity: 1;
    transform: none;
    z-index: 60;
    transition: opacity 0.1s ease, transform 0.1s ease, visibility 0s;
  }
  .ltw-site-header .ekg-nav .menu-item-has-children:has(:focus-visible) > .sub-menu {
    visibility: visible;
    opacity: 1;
    transform: none;
    z-index: 60;
    transition: opacity 0.1s ease, transform 0.1s ease, visibility 0s;
  }
  /* Fallback for browsers without :has() — focus-within, as before. */
  @supports not selector(:has(*)) {
    .ltw-site-header .ekg-nav .menu-item-has-children:focus-within > .sub-menu {
      visibility: visible; opacity: 1; transform: none;
    }
  }
  /* 1. Another ITEM is hovered: every other panel closes now, no grace.
     Keyed on :has(> li:hover), not .ekg-menu:hover, so crossing the flex gap
     between items on a diagonal keeps the grace (fleet dropdown session). */
  .ltw-site-header .ekg-menu:has(> li:hover) > .menu-item-has-children:not(:hover) > .sub-menu {
    visibility: hidden;
    opacity: 0;
    transition: none;
  }
  .ltw-site-header .ekg-nav .sub-menu a {
    padding: 0.5rem 1rem;
    border-bottom: 0;
    font-size: 0.9375rem;
    white-space: nowrap;
  }
  .ltw-site-header .ekg-nav .sub-menu a:hover,
  .ltw-site-header .ekg-nav .sub-menu a:focus-visible { background: var(--ltw-surface-tint); }
  .ltw-site-header .ekg-nav .sub-menu .current-menu-item > a { box-shadow: inset 2px 0 0 var(--ltw-beam); }
  .ltw-site-header .ekg-nav .menu-item-has-children > a::after { content: "\25BE"; margin-left: 0.3em; font-size: 0.7em; color: var(--ltw-muted); }
}
@media (max-width: 820px) {
  .ltw-site-header .ekg-nav.is-open ul.ekg-menu { background: var(--ltw-surface); }
  .ltw-site-header .ekg-nav .sub-menu a { font-size: 1rem; color: var(--ltw-ink-secondary); }
  .ltw-site-header .ekg-nav .menu-item-has-children > a::after { content: none; }
  .ltw-site-header .ekg-nav.is-open .ekg-menu > li:not(.ltw-nav-cta) > a { font-size: 1.125rem; font-weight: var(--ltw-fw-semi); color: var(--ltw-ink-strong); }
  .ltw-site-header .ekg-menu > li.ltw-nav-cta { margin-top: 0.5rem; }
}

/* --- 23.13 Footer --------------------------------------------------------- */
.ltw-site-footer { background: var(--ltw-surface-inverse); }
.ltw-site-footer__cols h2 { font-weight: var(--ltw-fw-medium); color: var(--ltw-ink-inverse-muted); }
.ltw-site-footer__cols a { color: var(--ltw-ink-inverse); }
.ltw-site-footer .ltw-sponsor,
.ltw-band-inverse .ltw-sponsor { color: var(--ltw-ink-inverse-muted); border-top-color: rgba(250, 248, 244, 0.14); }

/* --- 23.14 Reduced motion ------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .ltw-card:hover,
  .ltw-visual-refresh .ltw-card:hover,
  :is(.ltw-opening--section, .ltw-editorial-body) .ltw-card:hover { transform: none; }
  .ltw-site-header .ekg-nav .sub-menu { transform: none; }
  .ltw-related__list a:hover::after,
  .ltw-visual-refresh .basics-links a:hover::after { transform: none; }
}

/* --- 23.15 Print: the blueprint dresses the screen, not the page ---------- */
@media print {
  .ltw-section--hero,
  .ltw-visual-refresh .ltw-section--hero,
  .ltw-visual-refresh.refresh-safety .guide-header { background: #fff !important; }
  .ltw-site-header { backdrop-filter: none; }
  .ltw-answer p { font-size: 13pt; }
}

/* --- 23.16 On-this-page box: bordered like every other panel, no stripe --- */
.ltw-visual-refresh .guide-toc {
  border: 1px solid var(--ltw-border);
  border-radius: var(--ltw-radius-md);
  background: var(--ltw-surface-card);
}
.ltw-visual-refresh .guide-toc strong { color: var(--ltw-accent-2); font-size: var(--ltw-fs-xs); font-weight: var(--ltw-fw-semi); }


/* ==========================================================================
   24 · GUIDE WIDGET TOKENS (ekg-bot) — 2026-10-02
   The "Find an answer" guide is the fleet ekg-bot plugin. It draws every
   colour, font and radius from --ekgbot-* custom properties; this maps them to
   the house tokens, so the guide is in the house look and follows dark mode
   with no CSS of its own here. Its safety stops reuse .ltw-stop (8.6/23.6),
   passed in by ltw-content's guide settings.
   ========================================================================== */
.ekgbot {
  --ekgbot-font: var(--ltw-font-sans);
  --ekgbot-font-serif: var(--ltw-font-serif);
  --ekgbot-font-mono: var(--ltw-font-mono);
  --ekgbot-surface: var(--ltw-surface);
  --ekgbot-card: var(--ltw-surface-card);
  --ekgbot-tint: var(--ltw-surface-tint);
  --ekgbot-ink: var(--ltw-ink);
  --ekgbot-ink-strong: var(--ltw-ink-strong);
  --ekgbot-ink-2: var(--ltw-ink-secondary);
  --ekgbot-muted: var(--ltw-muted);
  --ekgbot-border: var(--ltw-border);
  --ekgbot-border-strong: var(--ltw-border-strong);
  --ekgbot-border-ink: var(--ltw-border-ink);
  --ekgbot-accent: var(--ltw-accent);
  --ekgbot-accent-hover: var(--ltw-accent-hover);
  --ekgbot-accent-press: var(--ltw-accent-press);
  --ekgbot-on-accent: var(--ltw-on-accent);
  --ekgbot-accent-soft: var(--ltw-accent-soft);
  --ekgbot-accent-soft-line: var(--ltw-accent-soft-line);
  --ekgbot-info-ink: var(--ltw-info-ink);
  --ekgbot-accent-2: var(--ltw-accent-2);
  --ekgbot-beam: var(--ltw-beam);
  --ekgbot-focus: var(--ltw-focus);
  --ekgbot-focus-halo: var(--ltw-accent-soft);
  --ekgbot-link: var(--ltw-link);
  --ekgbot-link-hover: var(--ltw-link-hover);
  --ekgbot-safe-ink: var(--ltw-safe-ink);
  --ekgbot-caution-soft: var(--ltw-caution-soft);
  --ekgbot-caution-line: var(--ltw-caution-line);
  --ekgbot-caution-ink: var(--ltw-caution-ink);
  --ekgbot-stop-soft: var(--ltw-stop-soft);
  --ekgbot-stop-line: var(--ltw-stop-line);
  --ekgbot-stop-ink: var(--ltw-stop-ink);
  --ekgbot-radius-sm: var(--ltw-radius-sm);
  --ekgbot-radius-md: var(--ltw-radius-md);
  --ekgbot-radius-lg: var(--ltw-radius-lg);
  --ekgbot-shadow-md: var(--ltw-shadow-md);
  --ekgbot-shadow-lg: var(--ltw-shadow-lg);
  --ekgbot-ease: var(--ltw-ease);
}
