/* ─────────────────────────────────────────────────────────────────────────
   /for-lawyers.html — the technical brief.

   TOKENS ARE DUPLICATED HERE ON PURPOSE, as they are in index.css, chat.css,
   coverage.css, legal.css and verify.css. One shared tokens file would couple
   pages that are otherwise edited independently; the known cost is that a
   token added to one file and used in another computes to nothing and the
   whole declaration is dropped, silently. So: every var() name used below is
   defined in the bare :root block, including --bad, which this page adds and
   index.css does not have.

   THE PRINT BLOCK AT THE FOOT IS NOT AN AFTERTHOUGHT. The PDF a lawyer gets
   by email is rendered from this page by headless Chrome, so print is a real
   output rather than a courtesy:

     "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
       --headless=new --disable-gpu --no-pdf-header-footer \
       --virtual-time-budget=25000 \
       --print-to-pdf="wwwroot/for-lawyers.pdf" \
       "http://localhost:5177/for-lawyers.html"

   IT MUST BE SERVED, NEVER file://. This page links /fonts/fonts.css and
   /css/for-lawyers.css root-relative, and under file:// those resolve against
   the filesystem ROOT, so neither loads: Chrome falls back to Times and Arial,
   none of this print block applies, and the PDF comes out 12 unstyled pages
   instead of 9. It fails silently and looks like a finished document — check
   the embedded fonts if the page count ever moves.

   Regenerate it whenever this page's words change, or the PDF and the page
   start saying different things.
   ───────────────────────────────────────────────────────────────────────── */

:root {
  --bg: #11141a;
  --surface: #171b22;
  --surface-2: #1c212a;
  --border: #262b35;
  --text: #e9e8e4;
  --text-muted: #8b92a0;
  --text-dim: #767e90;
  --brass: #b08d57;
  --brass-dim: #8a6f45;
  --brass-wash: #1e1a13;
  --signal: #6b93b5;
  /* What has to be dealt with. legal.css's --bad, same values, because the two
     surfaces should not disagree about the colour of a problem. */
  --bad: #e5696b;
  --serif: 'Spectral', Georgia, serif;
  --sans: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, sans-serif;
  --mono: 'IBM Plex Mono', ui-monospace, 'SF Mono', Menlo, monospace;
}

html[data-theme="light"] {
  --bg: #f6f4ef;
  --surface: #ffffff;
  --surface-2: #eeebe3;
  --border: #ddd7c9;
  --text: #201d19;
  --text-muted: #5b5548;
  --text-dim: #726d5d;
  --brass: #9c7a3f;
  --brass-dim: #b08d57;
  --brass-wash: #f3ecdd;
  --signal: #3d6a8f;
  --bad: #b3261e;
}

/* FONTS DECLARED HERE OVERRIDE /fonts/fonts.css, which is loaded first, and
   both halves of that are deliberate.

   IBM PLEX SANS, STATIC RATHER THAN VARIABLE. Google now ships Plex Sans only
   as a variable font, and that is what fetch-fonts.py pulled — fine on screen,
   and HEADLESS CHROME CANNOT RENDER IT AT ALL. Since the PDF at
   /for-lawyers.pdf is printed from this page, every heading and table in it
   silently fell back to a system face. These three are the same typeface
   instanced at one weight each with fontTools, the way scripts/make-og-images.py
   already does it for the social card. A browser fetches only the winning
   declaration, so this costs no extra download.

   IBM PLEX MONO is not in fonts.css at all: this page is the first to want a
   monospace face, for the section numerals and the citations in the worked
   example, where a fixed advance is the point. If a second page ever wants
   either of these, teach fetch-fonts.py rather than copying this block. */
@font-face {
  font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 400;
  font-display: swap; src: url('/fonts/ibmplexsans-400.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 500;
  font-display: swap; src: url('/fonts/ibmplexsans-500.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 600;
  font-display: swap; src: url('/fonts/ibmplexsans-600.woff2') format('woff2');
}
/* SPECTRAL ITALIC, which fonts.css does not carry at all — it declares only
   normal 400/500/600, so every <em> on this site is a mechanically slanted
   roman. That is tolerable elsewhere and not here: this document italicises
   case names, and a faux-oblique serif looks exactly as wrong as it is. */
@font-face {
  font-family: 'Spectral'; font-style: italic; font-weight: 400;
  font-display: swap; src: url('/fonts/spectral-400i.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono'; font-style: normal; font-weight: 400;
  font-display: swap; src: url('/fonts/ibmplexmono-400.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono'; font-style: normal; font-weight: 500;
  font-display: swap; src: url('/fonts/ibmplexmono-500.woff2') format('woff2');
}

* { box-sizing: border-box; margin: 0; padding: 0; }

body {
  background: var(--bg);
  color: var(--text);
  font-family: var(--serif);
  font-size: 16.5px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

.wrap { max-width: 1080px; margin: 0 auto; padding: 0 28px; }

/* ── Chrome, shared in appearance with the other pages ──────────────────── */
header { border-bottom: 1px solid var(--border); padding: 18px 0; }
header .wrap { display: flex; align-items: center; justify-content: space-between; gap: 20px; }
.mark { font-family: var(--serif); font-size: 20px; letter-spacing: -0.01em; text-decoration: none; }
.mark-img {
  display: block; width: 160px; height: 46px;
  background: var(--text);
  -webkit-mask: url('/img/zerowitness-mark.png') no-repeat center / contain;
  mask: url('/img/zerowitness-mark.png') no-repeat center / contain;
}
.mark-print { display: none; }
/* SCOPED TO THE HEADER. Unscoped, `nav { display: flex }` also caught the
   <nav class="contents"> below and laid its heading, list and note out side by
   side in three columns — the contents list rendered 163px wide. A rule written
   for one component must not be able to reach another. */
header nav { display: flex; align-items: center; gap: 22px; }
header nav a { color: var(--text-muted); text-decoration: none; font-size: 13.5px; font-family: var(--sans); }
header nav a:hover { color: var(--text); }

.theme-switch {
  display: inline-flex; align-items: center; gap: 6px;
  background: none; border: none; cursor: pointer; color: var(--text-dim); padding: 0;
}
.theme-switch-track {
  width: 30px; height: 16px; border-radius: 8px;
  background: var(--surface-2); border: 1px solid var(--border);
  position: relative; display: inline-block;
}
.theme-switch-thumb {
  position: absolute; top: 1px; left: 1px; width: 12px; height: 12px;
  border-radius: 50%; background: var(--brass); transition: transform .16s ease;
}
html[data-theme="light"] .theme-switch-thumb { transform: translateX(14px); }
.theme-icon { flex-shrink: 0; }

.skip-link { position: absolute; left: -9999px; top: 0; z-index: 200; }
.skip-link:focus {
  left: 10px; top: 10px; padding: 10px 14px;
  background: var(--surface); color: var(--text);
  border: 1px solid var(--brass); border-radius: 8px;
  font: 500 14px/1.2 var(--sans); text-decoration: none;
}
a:focus-visible, button:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; border-radius: 2px; }

footer { border-top: 1px solid var(--border); padding: 30px 0 44px; margin-top: 60px; }
footer .wrap { display: flex; align-items: center; justify-content: space-between; gap: 20px; }
.footer-mark { display: inline-block; opacity: 0.75; }
.footer-right { display: flex; align-items: center; gap: 24px; font-family: var(--sans); font-size: 13px; color: var(--text-muted); }
.footer-link { color: var(--text-muted); text-decoration: none; }
.footer-link:hover { color: var(--text); }

/* ── Intro ──────────────────────────────────────────────────────────────── */
.intro { padding: 56px 0 30px; }
h1 {
  font-family: var(--sans); font-weight: 600;
  font-size: clamp(30px, 5vw, 44px); line-height: 1.06;
  letter-spacing: -.02em; margin-bottom: 16px; text-wrap: balance;
}
.h1-kicker {
  display: block; font: 600 11px/1.4 var(--sans);
  letter-spacing: .1em; text-transform: uppercase;
  color: var(--brass); margin-bottom: 12px;
}
.lede {
  max-width: 54ch; color: var(--text-muted);
  font-size: clamp(17px, 2.1vw, 20px); line-height: 1.45;
  text-wrap: pretty;
}
.lede b { color: var(--text); font-weight: 600; }
.doc-meta {
  font-family: var(--sans); font-size: 12.5px; color: var(--text-dim);
  display: flex; flex-wrap: wrap; gap: 4px 20px; margin-top: 22px;
}
.doc-meta b { font-weight: 500; color: var(--text-muted); }
.doc-meta a { color: var(--brass); }

/* ── At a glance ────────────────────────────────────────────────────────── */
.glance {
  padding: 26px 0 30px;
  border-top: 1px solid var(--border);
  display: grid; gap: 22px 36px;
  grid-template-columns: repeat(auto-fit, minmax(215px, 1fr));
}
.glance > div { display: flex; flex-direction: column; gap: 6px; }
.glance dt {
  font: 600 11px/1.4 var(--sans); letter-spacing: .1em;
  text-transform: uppercase; color: var(--text-dim);
}
.glance dd { font-size: 15.5px; line-height: 1.45; color: var(--text-muted); }
.glance dd b { font-weight: 600; color: var(--text); }

/* ── Contents ───────────────────────────────────────────────────────────── */
.contents { display: block; padding: 24px 0 26px; border-top: 1px solid var(--border); }
.contents-h {
  font: 600 11px/1.4 var(--sans); letter-spacing: .1em;
  text-transform: uppercase; color: var(--text-dim); margin-bottom: 14px;
}
.contents ol { list-style: none; display: grid; grid-template-columns: 1fr; gap: 10px 34px; }
@media (min-width: 700px)  { .contents ol { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1000px) { .contents ol { grid-template-columns: 1fr 1fr 1fr; } }
/* Exactly two children: the numeral and one wrapper. A third would wrap into
   the numeral column and be squeezed to a word per line. */
.contents li { display: grid; grid-template-columns: 2.2rem minmax(0,1fr); gap: 0 8px; align-items: baseline; }
.contents .n { font-family: var(--mono); font-size: 12px; color: var(--brass); }
.contents a { font-family: var(--sans); font-size: 14px; line-height: 1.35; color: var(--text); text-decoration: none; }
.contents a:hover { text-decoration: underline; }
.contents .tag {
  display: block; margin-top: 2px;
  font: 600 10px/1.4 var(--sans); letter-spacing: .08em;
  text-transform: uppercase; color: var(--brass);
}
.contents-note {
  font-family: var(--sans); font-size: 13px; line-height: 1.5;
  color: var(--text-dim); margin-top: 16px; max-width: 72ch;
}

/* ── Sections: numeral rail + full-width content ─────────────────────────
   Prose is capped so it stays readable; every structured block runs the full
   column, which is where the vertical space is saved. */
section.doc {
  display: grid; grid-template-columns: 1fr; gap: 0 32px;
  padding: 40px 0 6px; border-top: 1px solid var(--border);
}
@media (min-width: 900px) {
  section.doc { grid-template-columns: 4rem minmax(0, 1fr); }
  section.doc > * { grid-column: 2; }
  section.doc > .num { grid-column: 1; grid-row: 1; text-align: right; margin-bottom: 0; padding-top: 6px; }
}
section.doc > p, section.doc > h3, section.doc > ul.plain, section.doc > .aside { max-width: 88ch; }
.num { font-family: var(--mono); font-size: 13px; font-weight: 500; color: var(--brass); margin-bottom: 9px; }

h2 {
  font-family: var(--sans); font-weight: 600;
  font-size: clamp(21px, 2.8vw, 27px); line-height: 1.18;
  letter-spacing: -.016em; margin-bottom: 16px; text-wrap: balance;
}
h3 { font-family: var(--sans); font-weight: 600; font-size: 15.5px; margin: 28px 0 9px; }
h4 {
  font: 600 11px/1.4 var(--sans); letter-spacing: .1em;
  text-transform: uppercase; color: var(--text-dim); margin-bottom: 11px;
}
section.doc p { margin-bottom: 15px; }
section.doc p:last-child { margin-bottom: 0; }
p.lead { font-size: 18.5px; line-height: 1.5; }
section.doc a { color: var(--brass); text-underline-offset: 3px; text-decoration-thickness: 1px; }
strong { font-weight: 600; color: var(--text); }
code, .mono {
  font-family: var(--mono); font-size: .87em;
  background: var(--surface-2); padding: 1px 5px;
  border-radius: 3px; border: 1px solid var(--border);
}
ul.plain { margin-bottom: 15px; padding-left: 1.1em; list-style: disc; }
ul.plain li { margin-bottom: 7px; }
ul.plain li::marker { color: var(--text-dim); }

.aside {
  font-family: var(--sans); font-size: 14.5px; line-height: 1.52;
  color: var(--text-muted);
  border-left: 2px solid var(--brass);
  padding: 2px 0 2px 15px; margin-bottom: 20px;
}
.aside b { color: var(--text); font-weight: 600; }

/* ── Two-up lists ───────────────────────────────────────────────────────── */
.twoup { display: grid; grid-template-columns: 1fr; gap: 0 40px; align-items: start; }
@media (min-width: 900px) { .twoup { grid-template-columns: 1fr 1fr; } }

.terms { margin-bottom: 6px; }
.terms > div { padding: 15px 0; border-bottom: 1px solid var(--border); }
.terms dt { font-family: var(--sans); font-weight: 600; font-size: 14.5px; color: var(--text); margin-bottom: 3px; }
.terms dd { font-size: 15.5px; line-height: 1.5; color: var(--text-muted); }
.terms dd b { color: var(--text); font-weight: 600; }

.rules { margin-bottom: 6px; }
.rule-row { padding: 16px 0; border-bottom: 1px solid var(--border); }
.rule-cite { font-family: var(--sans); font-size: 13.5px; font-weight: 600; color: var(--text); line-height: 1.35; margin-bottom: 6px; }
.rule-cite span { display: block; font-weight: 400; font-size: 12.5px; color: var(--text-dim); margin-top: 2px; }
.rule-body { font-size: 15.5px; line-height: 1.5; color: var(--text-muted); }
.rule-body b { color: var(--text); font-weight: 600; }

.limits { margin-bottom: 6px; }
.limit { padding: 14px 0 14px 15px; border-left: 2px solid var(--bad); border-bottom: 1px solid var(--border); }
.limit .t { font-family: var(--sans); font-weight: 600; font-size: 14.5px; color: var(--text); margin-bottom: 4px; }
.limit p { font-size: 15.5px; line-height: 1.5; color: var(--text-muted); margin: 0; }

/* The numeral is absolutely positioned, never a grid cell: as a cell it
   competes with the item's other children for columns and the paragraph ends
   up in the numeral's track, one word per line. */
ol.steps { list-style: none; display: grid; grid-template-columns: 1fr; gap: 18px 40px; align-items: start; margin-bottom: 18px; counter-reset: s; }
@media (min-width: 900px) { ol.steps { grid-template-columns: 1fr 1fr; } }
ol.steps li { counter-increment: s; position: relative; padding-left: 2.1rem; }
ol.steps li::before {
  content: counter(s);
  position: absolute; left: 0; top: .26em; width: 1.5rem;
  font-family: var(--mono); font-size: 12.5px;
  font-variant-numeric: tabular-nums; color: var(--brass);
}
ol.steps .t { font-family: var(--sans); font-weight: 600; font-size: 14.5px; display: block; line-height: 1.35; color: var(--text); }
ol.steps p { margin: 4px 0 0; font-size: 15.5px; color: var(--text-muted); line-height: 1.5; }

/* ── Boundary exhibits ──────────────────────────────────────────────────── */
.pair { display: grid; grid-template-columns: 1fr; gap: 20px; margin-bottom: 22px; align-items: start; }
@media (min-width: 1000px) { .pair { grid-template-columns: 1fr 1fr; } }
.exhibit { background: var(--surface); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; }
.exhibit-head {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 10px;
  padding: 12px 16px; border-bottom: 1px solid var(--border); background: var(--surface-2);
}
.exhibit-head .t { font-family: var(--sans); font-weight: 600; font-size: 14px; }
.badge {
  font: 600 10.5px/1.4 var(--sans); letter-spacing: .09em; text-transform: uppercase;
  padding: 3px 9px; border-radius: 999px;
  border: 1px solid var(--brass); color: var(--brass); background: var(--brass-wash);
  white-space: nowrap;
}
.badge.dim { border-color: var(--border); color: var(--text-dim); background: transparent; }
.half { padding: 14px 16px 16px; }
.half + .half { border-top: 1px solid var(--border); }
.half ul { list-style: none; display: flex; flex-direction: column; gap: 9px; }
.half li {
  font-family: var(--sans); font-size: 13.5px; line-height: 1.42;
  color: var(--text-muted); padding-left: 16px; position: relative;
}
.half li::before {
  content: ""; position: absolute; left: 0; top: .52em;
  width: 8px; height: 1px; background: var(--text-dim);
}
.half li b { color: var(--text); font-weight: 600; }
.foot {
  padding: 11px 16px; border-top: 1px solid var(--border);
  font-family: var(--sans); font-size: 12.5px; line-height: 1.45;
  color: var(--text-dim); background: var(--surface-2);
}

/* ── Worked example ─────────────────────────────────────────────────────── */
.worked {
  background: var(--surface); border: 1px solid var(--border);
  border-left: 3px solid var(--bad); border-radius: 6px;
  padding: 16px 18px; margin-bottom: 20px;
  display: grid; grid-template-columns: 1fr; gap: 12px 32px; align-items: start;
}
@media (min-width: 900px) { .worked { grid-template-columns: 22rem minmax(0,1fr); } }
.worked h4 { margin-bottom: 0; color: var(--bad); grid-column: 1 / -1; }
.worked .facts { display: flex; flex-direction: column; gap: 10px; }
.worked .lbl {
  display: block; margin-bottom: 2px;
  font: 600 10.5px/1.4 var(--sans); letter-spacing: .08em;
  text-transform: uppercase; color: var(--text-dim);
}
.worked .val { font-family: var(--mono); font-size: 13px; line-height: 1.45; color: var(--text); word-break: break-word; }
.worked .says { display: flex; flex-direction: column; gap: 10px; }
.worked .says p { font-family: var(--sans); font-size: 14px; line-height: 1.5; color: var(--text-muted); margin: 0; }
.worked .says b { color: var(--text); font-weight: 600; }

/* ── Tables ─────────────────────────────────────────────────────────────── */
.scroller { overflow-x: auto; margin-bottom: 20px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); }
table { border-collapse: collapse; width: 100%; min-width: 680px; font-family: var(--sans); font-size: 13px; }
th, td { text-align: left; padding: 9px 13px; border-bottom: 1px solid var(--border); vertical-align: top; line-height: 1.38; }
thead th {
  font: 600 10.5px/1.4 var(--sans); letter-spacing: .08em; text-transform: uppercase;
  color: var(--text-dim); background: var(--surface-2); border-bottom: 1px solid var(--border);
}
tbody th {
  font-weight: 500; color: var(--text); width: 24%;
  background: var(--surface); position: sticky; left: 0;
  border-right: 1px solid var(--border);
}
td { color: var(--text-muted); }
tbody tr:last-child th, tbody tr:last-child td { border-bottom: 0; }
td.good { color: var(--text); }
table.figures { min-width: 460px; }
table.figures td:nth-child(2) { font-family: var(--mono); font-size: 12px; color: var(--text); font-variant-numeric: tabular-nums; }
table.figures td:nth-child(3) { font-size: 12px; color: var(--text-dim); }

@media (max-width: 720px) {
  .mark-img { width: 104px; height: 30px; }
  .wrap { padding: 0 18px; }
  .intro { padding: 38px 0 22px; }
  nav { gap: 12px; }
  nav a { font-size: 12.5px; }
  .theme-icon { display: none; }
  footer .wrap { flex-direction: column; align-items: flex-start; gap: 12px; }
  .footer-right { flex-direction: column; align-items: flex-start; gap: 8px; }
}

@media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important; } }

/* ─────────────────────────────────────────────────────────────────────────
   PRINT — the PDF is rendered from this page, so this block is an output.
   ───────────────────────────────────────────────────────────────────────── */
@media print {
  /* FORCE THE LIGHT PALETTE at the token level. This page is dark by default
     and a reader printing it would otherwise get dark text on white paper.
     Redefining tokens means every component follows; patching components one
     at a time is how one gets missed. */
  /* SPECIFICITY IS LOAD-BEARING HERE AND `html` IS NOT ENOUGH. A media query
     adds none, so a bare `html` (0,0,1) LOSES to the `:root` (0,1,0) block at
     the top of this file and every token keeps its dark value — while the
     `body` rule below still turns the paper white, so the PDF printed white
     pages with the dark palette's text on them and every bold phrase came out
     near-invisible. `html:root` is (0,1,1) and wins outright rather than on
     source order, which is the tie this repo keeps losing. */
  html:root, html:root[data-theme="dark"], html:root[data-theme="light"] {
    --bg: #ffffff; --surface: #ffffff; --surface-2: #f2f0ea;
    --border: #c9c4b8; --text: #000000; --text-muted: #333333; --text-dim: #555555;
    --brass: #7a5e2e; --brass-dim: #7a5e2e; --brass-wash: #f5efe2;
    --signal: #3d6a8f; --bad: #8a3a2e;
  }
  /* Backgrounds and the masked mark are content here, not decoration: without
     this Chrome drops them and the logo prints as nothing at all. */
  * { print-color-adjust: exact; -webkit-print-color-adjust: exact; }

  /* Side margins set so the measure below fills the text block: at 10pt a
     92-character line is about 6.4in, and a narrow margin left it running to
     107 characters, well past comfortable. */
  @page { margin: 14mm 24mm; }
  body { background: #fff; color: #000; font-size: 10pt; line-height: 1.45; }
  .wrap { max-width: none; padding: 0; }

  /* Chrome's print path drops CSS masks but keeps the painted background, so
     the masked mark prints as a solid black rectangle. Swap in a real image. */
  .mark-img { display: none; }
  .mark-print { display: block; width: 176px; height: auto; margin-bottom: 18px; }
  header { border-bottom: 2px solid #000; padding: 0 0 14px; }
  header .wrap { display: block; }
  nav, .skip-link, .no-print { display: none; }
  footer { margin-top: 26px; padding: 18px 0 0; border-top: 2px solid #000; }
  footer .wrap { display: block; }
  .footer-mark { display: none; }
  .footer-right { display: block; }

  .intro { padding: 16px 0 14px; }
  section.doc { padding: 18px 0 3px; }

  /* The scroll container clips in print — the comparison table is wider than
     the paper, so it must be allowed to shrink rather than be cut off. */
  .scroller { overflow: visible; border-radius: 0; }
  table { min-width: 0; font-size: 7.6pt; }
  th, td { padding: 5px 7px; }
  tbody th { position: static; width: 22%; }

  /* TWO-UP ON PAPER IS MULTICOLUMN, NOT GRID — a bug fix, not a preference.
     Chrome fragments a two-column GRID wrongly across a page break: it splits
     an item and then draws the following row on top of the previous one. The
     layers list had item 1's title on one page, its paragraph on the next and
     item 3 overprinting both. Multicolumn fragments correctly, and it reads
     better for a numbered list besides: column-major, so the numbers run down
     the left and continue down the right rather than zig-zagging. */
  .twoup, ol.steps, .pair, .glance, .contents ol {
    display: block; columns: 2; column-gap: 26px;
  }
  /* Row spacing came from the grid gap, which multicolumn does not have. */
  ol.steps li { margin-bottom: 14px; }
  .glance > div { margin-bottom: 16px; }
  .pair > * { margin-bottom: 14px; }
  .contents li { margin-bottom: 8px; }
  .contents, .glance { padding: 16px 0 18px; }

  /* A Letter page is about 710px of CSS pixels, so the section rail — which is
     behind min-width: 900px — would not apply either. */
  section.doc { grid-template-columns: 3rem minmax(0, 1fr); gap: 0 14px; }
  section.doc > * { grid-column: 2; }
  section.doc > .num { grid-column: 1; grid-row: 1; text-align: right; margin-bottom: 0; padding-top: 5px; }
  section.doc > p, section.doc > h3, section.doc > ul.plain, section.doc > .aside { max-width: 92ch; }

  .exhibit, .worked, .limit, .rule-row, .terms > div, ol.steps li,
  .pair > *, .glance > div, .contents li, footer {
    break-inside: avoid; -webkit-column-break-inside: avoid;
  }
  h1, h2, h3, h4 { break-after: avoid; }
  p.lead { font-size: 11pt; }
  a { color: #000; text-decoration: underline; }
}
