:root{
  /* Inter for everything read, Manrope at 800 for the display line — the pair Scott chose for Avota,
     so his products read as one house. The mono is SYSTEM-ONLY on purpose: it is used for serials,
     checksums and enrolment codes, where monospace is doing work rather than decoration, and a third
     downloaded family for that is not worth the bytes. Any change here needs the matching change to
     the font <link> in EVERY marketing page's head — there is a test on it (test_chrome.mjs).

     Before this the site asked for system fonts only and loaded none, which is consistent but gives a
     page no voice at all: the same end result as Avota, whose CSS named three families the head never
     fetched. */
  --sans:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,Cantarell,"Helvetica Neue",Helvetica,Arial,sans-serif;
  --display:Manrope,var(--sans);
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
  --bg:oklch(0.965 0.008 248);
  --surface:oklch(1 0 0);
  --surface-2:oklch(0.945 0.011 248);
  --ink:oklch(0.290 0.045 255);
  --ink-2:oklch(0.480 0.030 255);
  --ink-3:oklch(0.615 0.022 255);
  --line:oklch(0.912 0.012 252);
  --line-2:oklch(0.845 0.016 252);
  --brand:oklch(0.520 0.185 258);
  --brand-ink:oklch(0.430 0.180 258);
  --alert:oklch(0.545 0.185 32);
  --ok:oklch(0.520 0.090 160);
  --warn:oklch(0.585 0.145 62);
  --ok-wash:oklch(0.955 0.030 160);
  --warn-wash:oklch(0.960 0.040 75);
  --alert-wash:oklch(0.955 0.030 30);
  --brand-wash:oklch(0.960 0.025 258);
  /* The code block is dark in BOTH themes on purpose — a terminal transcript reads as a terminal, and
     flipping it to a light box in light mode makes a command look like prose. */
  --code-bg:oklch(0.245 0.030 258);
  --code-ink:oklch(0.930 0.015 250);
  --code-dim:oklch(0.700 0.030 250);
  --on-brand:oklch(1 0 0);
  --shadow:0 1px 2px oklch(0.235 0.014 258 / 0.06), 0 8px 24px -16px oklch(0.235 0.014 258 / 0.22);
    --shadow-lg:0 2px 4px oklch(0.235 0.014 258 / .07), 0 24px 60px -28px oklch(0.235 0.014 258 / .42);
    --band:oklch(0.245 0.045 262);
}
html[data-theme="dark"]{
  --bg:oklch(0.165 0.016 258);
  --surface:oklch(0.228 0.015 258);
  --surface-2:oklch(0.262 0.016 258);
  --ink:oklch(0.950 0.012 255);
  --ink-2:oklch(0.775 0.020 255);
  --ink-3:oklch(0.655 0.020 255);
  --line:oklch(0.330 0.030 256);
  --line-2:oklch(0.410 0.032 256);
  --brand:oklch(0.700 0.115 250);
  --brand-ink:oklch(0.780 0.105 250);
  --alert:oklch(0.740 0.130 45);
  --ok:oklch(0.740 0.085 160);
  --warn:oklch(0.800 0.125 68);
  --ok-wash:oklch(0.280 0.045 160);
  --warn-wash:oklch(0.290 0.050 75);
  --alert-wash:oklch(0.285 0.055 30);
  --brand-wash:oklch(0.280 0.045 258);
  --code-bg:oklch(0.120 0.018 258);
  --code-ink:oklch(0.930 0.015 250);
  --code-dim:oklch(0.680 0.030 250);
  --on-brand:oklch(0.200 0.030 258);
  --shadow:0 1px 2px oklch(0 0 0 / 0.30), 0 10px 30px -18px oklch(0 0 0 / 0.60);
    --shadow-lg:0 2px 6px oklch(0 0 0 / .45), 0 28px 70px -30px oklch(0 0 0 / .85);
    --band:oklch(0.205 0.038 262);
}

/* The same tokens, keyed off the operating system.
   These were unreachable until now: the dark palette only applied when a script stamped
   data-theme on <html>, that script lived on the home page alone, and the button that set it was
   wired to a function the four sub-pages never defined. So the guides have always been light-only
   whatever the visitor's machine was set to, and nobody could tell because the CSS looked complete.
   Keeping the [data-theme] block above as well means an explicit choice still wins if one is ever
   reintroduced. */
@media (prefers-color-scheme: dark) {
  html:not([data-theme="light"]) {
  --bg:oklch(0.165 0.016 258);
  --surface:oklch(0.228 0.015 258);
  --surface-2:oklch(0.262 0.016 258);
  --ink:oklch(0.950 0.012 255);
  --ink-2:oklch(0.775 0.020 255);
  --ink-3:oklch(0.655 0.020 255);
  --line:oklch(0.330 0.030 256);
  --line-2:oklch(0.410 0.032 256);
  --brand:oklch(0.700 0.115 250);
  --brand-ink:oklch(0.780 0.105 250);
  --alert:oklch(0.740 0.130 45);
  --ok:oklch(0.740 0.085 160);
  --warn:oklch(0.800 0.125 68);
  --ok-wash:oklch(0.280 0.045 160);
  --warn-wash:oklch(0.290 0.050 75);
  --alert-wash:oklch(0.285 0.055 30);
  --brand-wash:oklch(0.280 0.045 258);
  --code-bg:oklch(0.120 0.018 258);
  --code-ink:oklch(0.930 0.015 250);
  --code-dim:oklch(0.680 0.030 250);
  --on-brand:oklch(0.200 0.030 258);
  --shadow:0 1px 2px oklch(0 0 0 / 0.30), 0 10px 30px -18px oklch(0 0 0 / 0.60);
    --shadow-lg:0 2px 6px oklch(0 0 0 / .45), 0 28px 70px -30px oklch(0 0 0 / .85);
    --band:oklch(0.205 0.038 262);
  }
}
html{background:var(--bg);}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;}
*{box-sizing:border-box;}
a{color:var(--brand-ink);text-underline-offset:2px;}

/* THE MASTHEAD, FOR EVERY PAGE.
   This lived in each page's own <style>, which meant it lived in SOME pages' own <style>: four of them
   had the markup and no rule, so "ASSET TRACKING" fell back to body size and the logo changed shape
   depending on where you were. Shared chrome in per-page copies is the same mistake as the two .band
   rules and the releases page drifting to an old nav — it belongs in one file that every page links.

   On a phone the mark gets BIGGER, not smaller: there it is the only branding on screen. The secondary
   links step aside to make room and they are all in the footer too, so nothing is lost. */
/* THE FULL-BLEED BAND OVERHANGS BY HALF A SCROLLBAR, AND THAT IS WHERE THE SIDEWAYS SCROLLBAR CAME
   FROM. `.band` breaks out of its column with `margin:0 calc(50% - 50vw)`, and 100vw is the viewport
   INCLUDING the vertical scrollbar — so on any page long enough to scroll, each band sticks out about
   7px on both sides and the browser offers to scroll sideways to show you nothing. It only ever showed
   up on the two pages that have bands, which is exactly where it was reported.

   `clip` rather than `hidden` on purpose: `hidden` makes this element a scroll container, which would
   break the sticky masthead and the sticky certificate panel. `clip` does not, so both keep working.
   Fixing the band's own maths instead would need the scrollbar width, which CSS cannot ask for. */
html{overflow-x:clip}

.mark{flex:0 0 auto}
.wm{font-size:20px}
.wmsub{font-size:9px}
@media(max-width:720px){
  .navlink{display:none}
}
@media(max-width:560px){
  .mark{width:28px;height:28px}
  .wm{font-size:21px}
  .wmsub{font-size:9.5px}
  .masthead{height:60px}
  .nav-signin{display:none}
}

a:hover{color:var(--ink);}
::selection{background:var(--brand);color:var(--surface);}
@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth;}}

  /* Hero: panel sits BESIDE the headline. The old layout left the top-right empty and
     dropped the product below the fold, which buried the one thing that sells it. */
  .herogrid{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.34fr);gap:clamp(28px,3.6vw,56px);align-items:center}
  @media(max-width:1000px){.herogrid{grid-template-columns:1fr;gap:32px}}

  /* One full-bleed dark band, once. Eight identically-padded hairline sections is what
     made the page feel templated; this is the interruption. */
  .band{background:var(--band);color:oklch(0.965 0.010 255);margin:0 calc(50% - 50vw);padding:clamp(52px,6vw,88px) calc(50vw - 50% + 0px);
--ink:oklch(0.985 0.006 255);
  --ink-2:oklch(0.855 0.020 255);
  --ink-3:oklch(0.700 0.026 255);
  --surface:oklch(0.290 0.030 262);
  --surface-2:oklch(0.330 0.032 262);
  --line:oklch(0.375 0.030 262);
  --line-2:oklch(0.450 0.032 262);
  --brand:oklch(0.780 0.115 250);
  --brand-ink:oklch(0.830 0.100 252);
  --bg:oklch(0.245 0.045 262);
  --ok:oklch(0.800 0.120 155);
  --chip:oklch(0.330 0.032 262);}
  /* A DARK SECTION HAS TO ANSWER THE INLINE COLOURS INSIDE IT.
   These sections were written for a pale ground, so their children set colours inline —
   `style="color:var(--ink-2)"` and so on — and an inline style beats any class selector. Rather than
   fight that with !important on a dozen rules, the BAND REDEFINES THE TOKENS. Custom properties
   inherit, so every inline `var(--ink-2)` below this point resolves to the dark-ground value on its
   own and any element added later inherits it too, without knowing a band exists. */

.band h2{color:oklch(0.985 0.006 255) !important}
  .band p{color:oklch(0.845 0.020 255) !important}
  .band .num{font-family:var(--mono);font-size:clamp(40px,6.5vw,84px);line-height:.92;letter-spacing:-.045em;font-weight:500;color:oklch(0.985 0.006 255);font-variant-numeric:tabular-nums}
  .band .cap{font-family:var(--mono);font-size:12px;letter-spacing:.13em;text-transform:uppercase;color:oklch(0.720 0.030 255);margin-top:10px;display:block}
  /* The numeral that replaced the icons. Same family as the big stat numbers further down the page —
   mono, tight, tabular — at a size that works above a heading rather than instead of one. Three thin
   line icons read as stock; a numbered sequence reads as an argument, and this IS a sequence. */
.wnum{font-family:var(--mono);font-size:clamp(30px,3.4vw,42px);line-height:1;letter-spacing:-.04em;
  font-weight:500;color:var(--brand);font-variant-numeric:tabular-nums;display:block;margin:0 0 14px}

.bandin{max-width:1120px;margin:0 auto}
.bandgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));gap:clamp(24px,3vw,48px);margin-top:36px}

  /* contact */
  .cform{display:grid;grid-template-columns:1fr 1fr;gap:12px;max-width:38rem;margin-top:22px}
  .cform .full{grid-column:1/-1}
  .cform label{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.11em;text-transform:uppercase;color:var(--ink-3);margin-bottom:5px}
  .cform input,.cform textarea,.cform select{width:100%;font:inherit;font-size:15px;padding:10px 12px;border:1px solid var(--line-2);border-radius:2px;background:var(--surface);color:var(--ink)}
  .cform textarea{min-height:104px;resize:vertical}
  .cform input:focus,.cform textarea:focus,.cform select:focus{outline:2px solid var(--brand);outline-offset:1px;border-color:var(--brand)}
  .hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* ── install section ─────────────────────────────────────────────── */
.ways{display:grid;grid-template-columns:repeat(auto-fit,minmax(17rem,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:3px;overflow:hidden;margin:26px 0 0}
.way{background:var(--surface);padding:18px 18px 20px;display:flex;flex-direction:column}
.way .os{font-family:var(--mono);font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--brand-ink);margin-bottom:8px}
.way h4{font-size:15.5px;font-weight:640;margin:0 0 4px;color:var(--ink);letter-spacing:-.01em}
.way p{font-size:13.8px;line-height:1.55;color:var(--ink-2);margin:0 0 12px}
/* THE GAP THAT LOOKED LIKE A BUG, BECAUSE IT WAS ONE.
   `.grow` pushed each command block to the bottom of its card so the four would line up. But grid
   rows stretch every cell to the tallest, and one of these commands is two lines — so the other three
   got that difference as dead space in the MIDDLE, between the description and the code. Slack at the
   bottom of a card reads as padding; slack in the middle reads as broken. The alignment was worth
   less than the damage. */
.way .grow{display:none}
.way .cmd{margin-top:14px}
pre.cmd{margin:0;background:oklch(0.235 0.020 258);color:oklch(0.930 0.012 255);border-radius:3px;padding:11px 12px;overflow-x:auto;font-family:var(--mono);font-size:12.2px;line-height:1.55;white-space:pre}
pre.cmd .c{color:oklch(0.660 0.030 255)}
pre.cmd .v{color:oklch(0.820 0.110 90)}
.way small{display:block;font-size:12.5px;color:var(--ink-3);margin-top:9px;line-height:1.5}
.freegrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:14px 28px;margin-top:18px;max-width:52rem}
.freegrid div{display:flex;gap:9px;align-items:flex-start;font-size:14.5px;line-height:1.55;color:var(--ink-2)}
.freegrid .tick{color:var(--ok);flex:none;font-weight:700}

/* ── guide page ──────────────────────────────────────────────────── */
.step{display:grid;grid-template-columns:2.1rem 1fr;gap:0 1.1rem;padding:20px 0;border-top:1px solid var(--line)}
.step .sn{font-family:var(--mono);font-size:12px;color:var(--brand-ink);padding-top:4px;font-variant-numeric:tabular-nums}
.step h3{font-size:18px;font-weight:650;margin:0 0 6px;letter-spacing:-.012em;color:var(--ink)}
.step p{font-size:15.5px;line-height:1.62;color:var(--ink-2);margin:0 0 10px;max-width:34rem}
.q{border:1px solid var(--line-2);border-radius:3px;background:var(--surface);padding:14px 16px;margin:12px 0;max-width:36rem}
.q b{display:block;font-size:14.5px;margin-bottom:6px;color:var(--ink)}
.q p{margin:0 0 6px;font-size:14.5px}
.q .ans{font-size:14.5px;color:var(--ink-2);padding-left:14px;border-left:2px solid var(--brand);margin:8px 0 0}
/* A small window, for the beat after the install instructions: this is the thing you are looking at
   four minutes later. The two strongest visuals on the page were both above the fold; interest fell
   off a cliff after the certificate. */
/* THE LOAD HISTORY.
   "Replace the right machines" is a sentence anyone can write; a chart is what makes it believable —
   and this one carries the whole argument in one glance: fine for eleven days, then something landed
   on it, and it has been above the line ever since. The lines use var(--brand) and var(--alert), so
   inside a band they invert with everything else and this can move without being restyled. */
.loadcard{background:var(--surface);border:1px solid var(--line-2);border-radius:3px;overflow:hidden;
  box-shadow:var(--shadow-lg);margin:30px 0 0;max-width:44rem}
.lcbar{display:flex;align-items:center;gap:10px;padding:11px 16px;background:var(--surface-2);
  border-bottom:1px solid var(--line)}
.lctitle{font-family:var(--mono);font-size:12.5px;color:var(--ink)}
.lcband{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--warn);border:1px solid var(--line-2);border-radius:2px;padding:2px 7px}
.lcwhen{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--ink-3)}
.lcplot{padding:14px 16px 4px}
.loadsvg{display:block;width:100%;height:auto}
.lclegend{display:flex;gap:18px;flex-wrap:wrap;padding:4px 16px 14px;font-size:12px;color:var(--ink-3)}
.lclegend span{display:inline-flex;align-items:center;gap:7px}
.lclegend .k{width:16px;height:0;border-top:2px solid var(--brand);display:inline-block}
.lclegend .k.cpu{border-top:1.4px dashed var(--ink-3)}
.lclegend .k.hi{border-top:1px dashed var(--alert)}
.lcfoot{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));border-top:1px solid var(--line)}
.lcfoot div{padding:13px 16px;border-right:1px solid var(--line)}
.lcfoot div:last-child{border-right:0}
.lcfoot b{display:block;font-family:var(--mono);font-size:17px;letter-spacing:-.02em;color:var(--ink);
  font-variant-numeric:tabular-nums}
.lcfoot span{display:block;font-size:12px;color:var(--ink-3);margin-top:4px;line-height:1.4}
@media(max-width:560px){ .lcfoot div:nth-child(2){border-right:0} }

.mini{background:var(--surface);border:1px solid var(--line-2);border-radius:3px;overflow:hidden;
  box-shadow:var(--shadow);max-width:34rem;margin:26px 0 0}
.mini .bar{display:flex;align-items:center;gap:8px;padding:9px 14px;background:var(--surface-2);
  border-bottom:1px solid var(--line)}
.mini .bar b{font-size:12.5px;font-weight:600}
.mini .bar .dot{width:8px;height:8px;border-radius:50%;background:var(--line-2);flex:0 0 8px}
.mini .bar .when{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--ink-3)}
.mini .stats{display:grid;grid-template-columns:repeat(4,1fr);border-bottom:1px solid var(--line)}
.mini .stats div{padding:13px 14px;border-right:1px solid var(--line)}
.mini .stats div:last-child{border-right:0}
.mini .stats .n{font-family:var(--mono);font-size:21px;line-height:1;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums}
.mini .stats .n.hot{color:var(--brand)}
.mini .stats .l{font-size:11px;color:var(--ink-3);margin-top:5px;line-height:1.35}
.mini .rows{font-size:13px}
.mini .r{display:flex;gap:10px;align-items:baseline;padding:9px 14px;border-bottom:1px solid var(--line)}
.mini .r:last-child{border-bottom:0}
.mini .r .h{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mini .r .t{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-3);flex:0 0 auto}
.mini .r .t.bad{color:var(--bad)}
.mini .r .t.warn{color:var(--warn)}
@media(max-width:520px){ .mini .stats{grid-template-columns:repeat(2,1fr)}
  .mini .stats div:nth-child(2){border-right:0} }

.osrow{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:3px;overflow:hidden;margin:14px 0}
.osrow>div{background:var(--surface);padding:14px 15px}
.osrow h4{font-family:var(--mono);font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--brand-ink);margin:0 0 8px}
.osrow p{font-size:14px;line-height:1.55;color:var(--ink-2);margin:0 0 8px}
.osrow ol{margin:0;padding-left:1.1rem;font-size:14px;line-height:1.6;color:var(--ink-2)}
.osrow li{margin-bottom:5px}
.danger{border-left:3px solid var(--alert);padding:2px 0 2px 14px;margin:18px 0;max-width:36rem}
.danger b{display:block;color:var(--ink);font-size:15.5px;margin-bottom:3px}
.danger span{font-size:14.5px;color:var(--ink-2);line-height:1.6}

/* ── wipe configurator ───────────────────────────────────────────── */
.cfg{border:1px solid var(--line-2);border-radius:4px;background:var(--surface);box-shadow:var(--shadow);margin:22px 0;overflow:hidden;max-width:56rem}
.cfg-h{padding:13px 17px;border-bottom:1px solid var(--line);background:var(--surface-2);display:flex;flex-wrap:wrap;gap:10px;align-items:baseline}
.cfg-h b{font-size:15px;color:var(--ink)}
.cfg-h span{font-size:13px;color:var(--ink-3)}
.cfg-q{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:14px;padding:17px}
.cfg-q label{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin-bottom:5px}
.cfg-q select{width:100%;font:inherit;font-size:14.5px;padding:9px 10px;border:1px solid var(--line-2);border-radius:2px;background:var(--bg);color:var(--ink)}
.cfg-q select:focus{outline:2px solid var(--brand);outline-offset:1px}
.cfg-out{border-top:1px solid var(--line);padding:17px;background:var(--bg)}
.cfg-verdict{font-size:17px;font-weight:650;color:var(--ink);margin:0 0 4px;letter-spacing:-.012em}
.cfg-cat{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;padding:.16rem .45rem;border:1px solid currentColor;border-radius:2px;vertical-align:2px;margin-left:8px}
.cfg-cat.purge{color:var(--ok)} .cfg-cat.clear{color:var(--warn)} .cfg-cat.destroy{color:var(--alert)} .cfg-cat.none{color:var(--ink-3)}
.cfg-why{font-size:14.5px;line-height:1.6;color:var(--ink-2);margin:6px 0 14px;max-width:46rem}
.cfg-steps{margin:0 0 6px;padding-left:1.2rem;font-size:14.5px;line-height:1.65;color:var(--ink-2)}
.cfg-steps li{margin-bottom:6px}
.cfg-warn{border-left:3px solid var(--alert);padding:3px 0 3px 12px;margin:12px 0 0;font-size:14px;line-height:1.55;color:var(--ink-2);max-width:46rem}
.cfg-cmd{position:relative;margin:10px 0 0}
.cfg-cmd pre{margin:0;background:oklch(0.235 0.020 258);color:oklch(0.930 0.012 255);border-radius:3px;padding:11px 12px;padding-right:74px;overflow-x:auto;font-family:var(--mono);font-size:12.4px;line-height:1.6;white-space:pre}
.cfg-cmd button{position:absolute;top:7px;right:7px;font:inherit;font-size:11.5px;font-family:var(--mono);letter-spacing:.06em;background:oklch(0.330 0.022 258);color:oklch(0.900 0.012 255);border:1px solid oklch(0.410 0.026 258);border-radius:2px;padding:3px 8px;cursor:pointer}
.cfg-cmd button:hover{background:oklch(0.390 0.026 258)}

/* ─────────────────────────────────────────────────────────────────────────
   Headings, figures and disclosures.  Added 2026-08-28.

   HEADINGS WERE INLINE ON EVERY PAGE. Each h1/h2 carried its own
   `style="font-size:clamp(...)"`, which is the same class of problem as the masthead rules that bit
   this site three times — shared chrome living in pages. Nine pages meant nine chances for one heading
   to be a different size, and an inline style beats any class selector, so a fix in site.css could not
   reach them. These rules mean a page can now just write <h1>.
   ───────────────────────────────────────────────────────────────────────── */
h1,h2,h3{font-family:var(--display);letter-spacing:-.022em;text-wrap:balance;margin:0}
h1{font-size:clamp(34px,5.4vw,56px);line-height:1.03;font-weight:800}
h2{font-size:clamp(25px,3.1vw,35px);line-height:1.15;font-weight:800;margin:0 0 14px}
h3{font-size:19px;line-height:1.3;font-weight:800;margin:0 0 6px}
.lede{font-size:clamp(17px,1.5vw,20px);line-height:1.55;color:var(--ink-2)}

/* Figures.
   The whole marketing site had ONE svg on the home page and it was the logo. Nothing for the eye to
   land on across nine pages, so 1,751 words of careful argument arrived as one wall — the same
   diagnosis as Avota's site, reached the same way (count the graphics before blaming the words).

   Inline SVG, never an image file: these have to recolour with the theme through the oklch tokens,
   which an <img> cannot see, and they add no request. Colours go in style="fill:var(--x)" and NOT in a
   fill="var(--x)" presentation attribute — Safari has never reliably substituted var() there, and a
   figure that loses its paint is invisible while still holding its space. */
.fig{display:block;width:100%;height:auto;max-width:680px;margin:0}
.fig-wide{max-width:100%}
figure.f{margin:26px 0}
figure.f>figcaption{font-size:14.5px;line-height:1.55;color:var(--ink-3);margin-top:10px;max-width:66ch}
/* Body copy inside a drawing is drawn as rounded rects, so any real <text> is a label or a number and
   wants the same treatment everywhere. */
.fig text{font-family:var(--sans)}
.fig .lbl{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.09em}
/* The verdict in a diagram's gutter. Deliberately the SANS, not the mono: at this size a proportional
   face reads faster, and these four words are the ones the drawing exists to deliver. It has to be its
   own class because `.fig text` (0,1,1) beats a `.lbl` inherited from a parent <g> (which contributes
   nothing to the child's specificity) — so putting class="lbl" on a group looks like it works, silently
   does not, and leaves you wondering why one label is a different face. Put the class on the text. */
.fig .find{font-family:var(--sans);font-size:12.5px;font-weight:700;letter-spacing:.005em}

/* Hero: drawing beside the words on a desktop, under them on a phone. Text first in the source either
   way — the headline is what a crawler and a screen reader should meet first. */
.hero-split{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:46px;align-items:center}
@media (max-width:900px){
  .hero-split{grid-template-columns:1fr;gap:28px}
  .hero-split .fig{max-width:460px}
}

/* Disclosures, for the objections that stop somebody buying.
   A <details> is the only zero-JS option with real keyboard and screen-reader semantics and per-block
   state, and browsers auto-open it on find-in-page so nothing becomes unfindable. Opens under print,
   because these pages get forwarded to a finance director. */
details.q{border:1px solid var(--line);border-radius:10px;background:var(--surface);margin:0 0 10px}
details.q>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:10px;
  padding:13px 16px;font:600 16px/1.35 var(--sans);color:var(--ink)}
details.q>summary::-webkit-details-marker{display:none}
details.q>summary::before{content:"?";flex:none;width:21px;height:21px;border-radius:50%;
  border:1.5px solid var(--line-2);font:700 12px/18px var(--sans);text-align:center;color:var(--ink-3)}
details.q>summary:hover::before{border-color:var(--brand);color:var(--brand)}
details.q[open]>summary{border-bottom:1px solid var(--line)}
details.q[open]>summary::before{border-color:var(--brand);color:var(--brand)}
details.q .b{padding:14px 16px 16px;color:var(--ink-2);font-size:15.5px;line-height:1.6}
details.q .b>p{margin:0 0 10px}
details.q .b>p:last-child{margin:0}
@media print{details.q>.b{display:block !important}}

/* The container and the buttons.
   Every page inlines its own `max-width:1120px;margin:0 auto` wrapper and hand-rolls each link into a
   button with eight inline declarations. That is the same shared-chrome-in-a-page problem the masthead
   had three times, just less visible because it happens to be identical today. These are the shared
   versions; a page can now write class="wrap" and class="btn". Existing inline styles still win, so
   nothing already written changes — pages convert one at a time. */
.wrap{max-width:1120px;margin:0 auto;padding:0 24px}
.btn{display:inline-block;text-decoration:none;font:600 15px/1 var(--sans);color:#fff;
  background:var(--brand);border:1px solid var(--brand);border-radius:3px;padding:12px 20px}
.btn:hover{background:var(--brand-ink);border-color:var(--brand-ink)}
.btn-ghost{display:inline-block;text-decoration:none;font:600 15px/1 var(--sans);color:var(--ink);
  background:transparent;border:1px solid var(--line-2);border-radius:3px;padding:12px 20px}
.btn-ghost:hover{border-color:var(--ink-3)}
.band .btn{background:#fff;border-color:#fff;color:var(--band)}
.band .btn:hover{background:oklch(0.92 0.01 255);border-color:oklch(0.92 0.01 255)}
/* A tick list, which the site already draws by hand as `.tick` spans in three places. */
ul.ticks{list-style:none;margin:0;padding:0}
ul.ticks li{position:relative;padding:0 0 10px 26px;font-size:15.5px;line-height:1.55;color:var(--ink-2)}
ul.ticks li:last-child{padding-bottom:0}
ul.ticks li::before{content:"";position:absolute;left:3px;top:5px;width:7px;height:11px;
  border-right:2px solid var(--ok);border-bottom:2px solid var(--ok);transform:rotate(40deg)}
.band ul.ticks li{color:oklch(0.86 0.02 255)}

/* A call to action and its qualifier.
   On a phone "Free under 25 machines. No card." wrapped so the last word landed under the button, which
   reads as a broken layout rather than a reassurance. Below 560px the note takes its own line. */
.cta-row{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin:24px 0 0}
.cta-row .note{font-size:14.5px;color:var(--ink-3)}
@media (max-width:560px){
  .cta-row{gap:10px}
  .cta-row .note{flex:1 0 100%}
}
