/* ============================================================
   rabadon, one stylesheet for every page.

   One column. A heading, then its text directly underneath it, then
   the next heading. No side rail, no split, nothing that leaves an
   empty gutter down the left of the page.

   Anything with columns in it is rendered as a terminal block, with
   the columns padded to width at build time. In a monospace face that
   is the only way the digits actually stack, and it is what the tool
   itself looks like when you run it.
   ============================================================ */
:root{
  --bg:#191620; --bg-soft:#211d29; --ink:#eee8ec; --ink-dim:#b0a5bc;
  --pink:#c6b0e5; --purple:#c6b0e5; --green:#b9c9ac; --yellow:#d7c39d; --blue:#b9b6dc;

  --t-mono:15px;     /* terminal blocks                 */
  --t-small:16px;    /* captions, nav                   */
  --t-body:18px;     /* prose                           */
  --t-num:30px;      /* the numbers that carry the page */
  --t-h2:22px;       /* section headings                */
  --t-h1:36px;       /* the one claim                   */

  --g1:8px; --g2:14px; --g3:28px; --sec:48px;
  --wrap:1180px; --measure:76ch; --radius:2px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  font-family:'IBM Plex Mono',monospace; background:var(--bg); color:var(--ink);
  font-size:var(--t-body); line-height:1.7; overflow-x:hidden; cursor:default;
  -webkit-font-smoothing:antialiased;
}
a{color:var(--pink);text-decoration:underline dotted;transition:transform .18s}
a:hover{text-decoration:underline}
code{font:inherit;color:var(--blue)}
h1{font-size:var(--t-h1);line-height:1.35;font-weight:400;letter-spacing:-.3px;max-width:52ch}
h2{font-size:var(--t-h2);line-height:1.5;font-weight:700;margin-bottom:var(--g1)}
h3{font-size:var(--t-small);line-height:1.6;font-weight:400;color:var(--ink-dim);margin-bottom:var(--g1)}
p{line-height:1.7;max-width:var(--measure)}
p + p{margin-top:10px}
.dim{color:var(--ink-dim)}
.small{font-size:var(--t-small)}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--g3);position:relative;z-index:1}
section{padding:var(--sec) 0 0}
section > * + *{margin-top:var(--g2)}
section > h2 + p{margin-top:var(--g1)}

/* ---------- starfield and sprinkle ---------- */
#stars{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.star{position:absolute;font-size:11px;color:var(--ink-dim);opacity:.32;animation:tw 3.4s ease-in-out infinite}
@keyframes tw{0%,100%{opacity:.12}50%{opacity:.75}}
.cf{position:fixed;z-index:30;pointer-events:none;font-size:15px;animation:fall 1.1s ease-out forwards}
@keyframes fall{to{transform:translateY(64px) rotate(200deg);opacity:0}}

/* ---------- header ---------- */
header.site{display:flex;align-items:baseline;gap:var(--g3);flex-wrap:wrap;
            padding:22px 0 0;font-size:var(--t-small)}
.mark{font-size:var(--t-body);font-weight:700;letter-spacing:1px}
.mark i{font-style:normal;color:var(--pink)}
header.site nav{display:flex;gap:var(--g3);flex-wrap:wrap;margin-left:auto}
header.site nav a{color:var(--ink-dim);text-decoration:none}
header.site nav a.here{color:var(--ink)}
header.site nav a:hover{color:var(--pink);text-decoration:underline dotted}

/* ---------- the claim ---------- */
.top{padding:38px 0 0}
.top > * + *{margin-top:var(--g2)}
.tag{font-size:var(--t-small);color:var(--ink-dim);max-width:var(--measure)}
.tag b{color:var(--green);font-weight:400}
.intro{padding:38px 0 0}
.intro > * + *{margin-top:var(--g2)}

.proof{display:flex;flex-wrap:wrap;gap:var(--g2) var(--g3)}
.proof div{display:grid;row-gap:0;min-width:18ch;flex:1 1 0}
.proof .n{font-size:var(--t-num);font-weight:700;letter-spacing:-.4px;line-height:1.3;
          font-variant-numeric:tabular-nums}
.proof .n.g{color:var(--green)} .proof .n.p{color:var(--pink)}
.proof .n.b{color:var(--blue)}  .proof .n.y{color:var(--yellow)}
.proof .t{font-size:var(--t-small);color:var(--ink-dim);line-height:1.5;max-width:30ch}

.cta{font-size:var(--t-small);display:flex;gap:var(--g3);flex-wrap:wrap}

/* ---------- terminal: the one surface, and every table lives in one ---------- */
/* the box is as wide as its longest line and no wider, so a short run never
   leaves a dead field of background to the right of itself */
.term{background:var(--bg-soft);border-radius:var(--radius);padding:16px 20px;
      font-size:var(--t-mono);line-height:1.9;overflow-x:auto;white-space:pre;
      width:100%;max-width:100%;
      font-variant-ligatures:none;font-variant-numeric:tabular-nums}

/* a narrow run sits beside the sentence that introduces it rather than under it */
/* Two columns that both reach the edge of the page. The right column used to
   be `auto`, so it hugged its longest line and left a dead field of background
   between it and the margin -- the gap that made every one of these blocks read
   as unplanned. Both columns are fractions now, and a terminal inside one fills
   its column, so the left margin and the right margin are the same on every
   section of every page. */
.side{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);column-gap:var(--sec);
      align-items:start}
.side > .term,.side > * > .term{width:100%}
/* the claim carries the argument on the left and the evidence on the right */
.side.hero{grid-template-columns:minmax(0,34ch) minmax(0,1fr);column-gap:var(--sec);
           align-items:start;margin-top:var(--g3)}
.lede p{font-size:var(--t-body);line-height:1.6;max-width:78ch}
.side.hero .col p{font-size:var(--t-small);line-height:1.65}
.side > .col > * + *{margin-top:var(--g2)}
.side h2{margin-bottom:var(--g1)}
.term .p{color:var(--pink)}
.term .c{color:var(--ink)}
.term .o{color:var(--ink-dim)}
.term .g{color:var(--green)}
.term .r{color:var(--pink)}
.term .b{color:var(--blue)}
.term .y{color:var(--yellow)}
.term .u{color:var(--purple)}
.term .hdr{color:var(--ink-dim)}
.cur{color:var(--green);animation:blink 1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}
.cap{font-size:var(--t-small);color:var(--ink-dim);line-height:1.7;max-width:var(--measure)}

/* ---------- the numbers, as one big block in the middle of the page ---------- */
/* No box. The alignment is what makes these read as one thing, not a panel
   drawn around them: the number sits in a column of its own, right-aligned so
   the digits stack, and the sentence starts at the same x on every row. This is
   the shape of `rabadon usage` output, which is the surface the tool actually
   has. Rows are tight on purpose. */
/* The number column is a PIXEL width, not `ch`. A ch is measured against the
   font-size of the element the grid is declared on, which is the body size,
   while the number inside it is nearly twice that -- so `12ch` was about eight
   of the digits it was supposed to hold and a value like 130.0us ran straight
   into its own caption. This is the misalignment that was visible on every
   stat block on the site. */
.stats{display:grid;grid-template-columns:160px minmax(0,1fr);
       column-gap:var(--g3);row-gap:10px;align-items:baseline}
.stats .n{font-size:var(--t-num);font-weight:700;text-align:right;letter-spacing:-.5px;
          font-variant-numeric:tabular-nums;line-height:1.25;
          text-decoration:none;display:block;transition:transform .16s ease-out}
/* the number IS the link to its own evidence, so it has to look reachable
   without turning into a wall of underlines */
a.n{cursor:pointer}
a.n:hover{transform:translateX(-2px) scale(1.03)}
a.n:hover + .t{color:var(--ink)}
.stats .n.g{color:var(--green)} .stats .n.p{color:var(--pink)}
.stats .n.b{color:var(--blue)}  .stats .n.y{color:var(--yellow)}
.stats .t{font-size:var(--t-small);color:var(--ink-dim);line-height:1.55;max-width:none;
          transition:color .16s ease-out}
.stats .t a{color:var(--pink)}
.stats .rule{grid-column:1 / -1;height:1px;background:var(--ink-dim);opacity:.18;margin:2px 0}

/* ---------- reveal: slide and scale, never a fade ---------- */
[data-reveal]{transform:translateY(16px) scale(.99);opacity:.001;
              transition:transform .5s cubic-bezier(.22,1,.36,1),opacity .28s linear}
[data-reveal].in{transform:none;opacity:1}
@media(prefers-reduced-motion:reduce){
  [data-reveal]{transform:none;opacity:1;transition:none}
}

/* ---------- disclosure ---------- */
details summary{cursor:pointer;font-size:var(--t-small);color:var(--pink);
  list-style:none;text-decoration:underline dotted;display:inline-block}
details summary::-webkit-details-marker{display:none}
details summary:hover{text-decoration:underline}
details[open] summary{color:var(--ink-dim)}
details .body{margin-top:var(--g2)}
details .body > * + *{margin-top:var(--g2)}

/* ---------- laws and commands ---------- */

.law{display:grid;grid-template-columns:26ch 1fr;column-gap:var(--g3);padding:7px 0;align-items:baseline}
.law .k{color:var(--purple);font-size:var(--t-small)}
.law .v{font-size:var(--t-body);line-height:1.7}
.law .v em{font-style:normal;color:var(--ink-dim)}

/* Two runs shown side by side are a comparison, and a comparison whose halves
   are different heights reads as two unrelated boxes. They stretch to the same
   height, and the run inside wraps instead of running out of its own box. */
.pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--g3);align-items:stretch}
.pair > div{display:flex;flex-direction:column}
.pair .term{width:100%;height:100%;white-space:pre-wrap;overflow-wrap:anywhere}

footer{padding:var(--sec) 0 52px;font-size:var(--t-small);color:var(--ink-dim);
       display:flex;gap:var(--g3);flex-wrap:wrap;align-items:baseline}
footer .sp{margin-left:auto}

@media(max-width:820px){
  :root{--sec:30px;--t-h1:26px;--t-mono:13px;--t-body:17px;--t-small:15px;--t-num:24px}
  .stats{grid-template-columns:minmax(0,1fr);padding:20px;row-gap:4px}
  .stats .n{text-align:left}
  header.site nav{margin-left:0;gap:var(--g2)}
  .pair,.side,.side.hero{grid-template-columns:minmax(0,1fr)}
  .side{row-gap:var(--g2)}
  .law{grid-template-columns:1fr;row-gap:0}
  footer .sp{margin-left:0}
}

/* ---------- generated pages: benchmarks table, patch notes, pull requests ---------- */
.tbl{display:grid;row-gap:0;margin-top:var(--g1)}
.tbl .head,.tbl .row{display:grid;column-gap:var(--g3);align-items:baseline;
                     font-size:var(--t-small);padding:5px 0}
.tbl .head{color:var(--ink-dim)}
.tbl .row .s{color:var(--ink)}
.tbl .row .n{color:var(--blue);text-align:right;font-variant-numeric:tabular-nums}
.tbl .row .n.g{color:var(--green)} .tbl .row .n.y{color:var(--yellow)}
.tbl .row .d,.tbl .row .w{color:var(--ink-dim)}
.tbl.gate   .head,.tbl.gate   .row{grid-template-columns:30ch 9ch 1fr 24ch}
.tbl.suites .head,.tbl.suites .row{grid-template-columns:22ch 8ch 8ch 7ch 8ch 1fr}

.day{display:grid;grid-template-columns:13ch 1fr;column-gap:var(--g3);
     padding:var(--g2) 0 2px;align-items:baseline}
.day .d{color:var(--purple);font-size:var(--t-small)}
.day .c{color:var(--ink-dim);font-size:var(--t-mono)}
.rows{display:grid}
.r{display:grid;grid-template-columns:9ch 7ch 1fr;column-gap:var(--g2);
   font-size:var(--t-small);line-height:1.8;align-items:baseline}
.r .h a{color:var(--blue);text-decoration:none}
.r .h a:hover{text-decoration:underline dotted}
.r .t{color:var(--ink-dim);font-variant-numeric:tabular-nums}
.r .s{color:var(--ink)}

.pr{display:grid;grid-template-columns:7ch 1fr 20ch;column-gap:var(--g3);
    font-size:var(--t-small);padding:4px 0;align-items:baseline}
.pr .h a{color:var(--blue);text-decoration:none}
.pr .st{color:var(--ink-dim);text-align:right}
.pr .merged{color:var(--green)} .pr .open{color:var(--yellow)} .pr .closed{color:var(--ink-dim)}

@media(max-width:820px){
  .tbl .head{display:none}
  .tbl.gate .row,.tbl.suites .row{grid-template-columns:1fr 9ch;row-gap:0}
  .tbl .row .d,.tbl .row .w,.tbl .row .n:nth-of-type(n+3){display:none}
  .day{grid-template-columns:1fr;row-gap:2px}
  .r{grid-template-columns:9ch 1fr}
  .r .t{display:none}
  .pr{grid-template-columns:7ch 1fr}
  .pr .st{grid-column:1 / -1;text-align:left}
}

/* ============================================================
   tables, as tables

   These used to be preformatted text with the columns padded to
   width in python. The browser aligns them now: numeric columns
   are right-aligned and use tabular figures so the digits stack,
   the prose column wraps inside its own cell instead of running
   out of the panel, and every panel is the width of the column
   it sits in rather than the width of its own longest line. That
   last one is what made the margins unequal from block to block.
   ============================================================ */
.tt{width:100%;border-collapse:collapse;background:var(--bg-soft);
    border-radius:var(--radius);font-size:var(--t-mono);line-height:1.55;
    font-variant-numeric:tabular-nums;font-variant-ligatures:none;
    table-layout:auto}
.tt th,.tt td{padding:7px 14px;vertical-align:baseline;text-align:left}
.tt thead th{color:var(--ink-dim);font-weight:400;padding-top:14px;
             border-bottom:1px solid rgba(157,146,181,.16)}
.tt tbody tr:first-child td{padding-top:12px}
.tt tbody tr:last-child td{padding-bottom:14px}
.tt .n{text-align:right;white-space:nowrap;color:var(--blue)}
.tt th.n{text-align:right}
.tt .s{color:var(--ink);white-space:nowrap}
.tt .d{color:var(--ink-dim)}
.tt .g{color:var(--green)} .tt .r{color:var(--pink)}
.tt .b{color:var(--blue)} .tt .y{color:var(--yellow)}
.tt .p{color:var(--pink)} .tt .u{color:var(--purple)}
.tt a{color:var(--ink);text-decoration:underline dotted}
.tt a:hover{color:var(--pink)}
.tt .tot{border-top:1px solid rgba(157,146,181,.16);color:var(--ink);padding-top:12px}
/* a key/value panel has no headings to show */
.tt.bare thead{display:none}
.tt.bare tbody tr:first-child td{padding-top:14px}
/* the command that produced the panel underneath it */
.cmd{background:var(--bg-soft);border-radius:var(--radius) var(--radius) 0 0;
     padding:14px 14px 0;font-size:var(--t-mono);line-height:1.6}
.cmd + .tt{border-radius:0 0 var(--radius) var(--radius)}
.cmd .p{color:var(--pink)} .cmd .c{color:var(--ink)}

@media(max-width:820px){
  /* a table that cannot fit stacks instead of scrolling sideways */
  .tt,.tt tbody,.tt tr,.tt td{display:block;width:100%}
  .tt thead{display:none}
  .tt tr{padding:10px 14px;border-bottom:1px solid rgba(157,146,181,.12)}
  .tt td{padding:1px 0}
  .tt .n{text-align:left}
  .stats{grid-template-columns:minmax(0,1fr)}
  .stats .n{text-align:left}
}


/* Rabadon: an open terminal canvas. One left edge, no side rails. */
:root{color-scheme:dark;--bg:#13121c;--bg-soft:#1d1a2a;--ink:#f1eaf4;--ink-dim:#b8acc6;--pink:#ffa6cf;--purple:#c0a1ff;--green:#94d9ad;--yellow:#f3d58c;--blue:#99caed;--wrap:1600px;--measure:85ch;--t-body:15px;--t-small:13px;--t-mono:13px;--t-h2:24px;--sec:56px}
body{font:400 15px/1.8 'IBM Plex Mono',ui-monospace,monospace}
.wrap{max-width:none;padding:0 44px;margin:0}
::selection{background:var(--purple);color:var(--bg)}
a{color:var(--pink);text-underline-offset:5px}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--yellow);outline-offset:5px}
button{font:inherit;cursor:pointer}h1,h2,h3{font-family:inherit;letter-spacing:-.035em}h2{font-size:25px;font-weight:500;line-height:1.4;color:var(--ink)}h3{font-size:16px;color:var(--green)}
header.site{padding:28px 0 12px;align-items:center;gap:32px;flex-wrap:wrap;border:0}
.mark{display:inline-flex;gap:9px;align-items:center;font-size:19px;font-weight:500;letter-spacing:-.6px;color:var(--ink);text-decoration:none}.mark:hover{text-decoration:none;color:var(--purple)}
header.site nav{gap:22px;font-size:12px;margin-left:auto}header.site nav a{color:var(--pink)}
.wand{position:relative;display:inline-block;width:36px;height:40px;flex:none}.wand-stick{position:absolute;left:7px;top:4px;font-size:27px;color:var(--purple);transform:rotate(12deg)}
.wand-spark{position:absolute;line-height:1;animation:spark 3.2s ease-in-out infinite}.s1{left:22px;top:0;color:var(--pink);font-size:15px}.s2{left:12px;top:-3px;color:var(--yellow);font-size:13px;animation-delay:-1s}.s3{left:33px;top:14px;color:var(--green);font-size:23px;animation-delay:-2s}
@keyframes spark{0%,100%{opacity:.5;transform:scale(.85)}50%{opacity:1;transform:scale(1.12);text-shadow:0 0 9px currentColor}}
.top{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(370px,1fr);gap:5vw;padding:58px 0 35px;align-items:center}
.top>*{margin:0;min-width:0}.hero-copy{max-width:780px}.tag{font-size:12px;color:var(--pink)}
.product-home h1{font-size:clamp(65px,7.5vw,108px);font-weight:500;line-height:1.1;letter-spacing:-7px;margin:15px 0 24px;color:var(--purple);max-width:none}
.title-star{display:inline-block;font-size:.55em;vertical-align:top;line-height:1.5;color:var(--yellow);margin-left:8px}
.hero-statement{font-size:clamp(20px,2.1vw,30px);line-height:1.5;letter-spacing:-.9px;color:var(--ink)}.hero-statement span{color:var(--green)}
.hero-description{font-size:14px;line-height:1.9;max-width:67ch;color:var(--ink-dim);margin-top:22px}
.hero-actions{display:flex;gap:30px;align-items:center;flex-wrap:wrap;margin-top:28px;font-size:14px}.hero-actions a:first-child{color:var(--pink);font-weight:500}.hero-actions a:last-child{color:var(--ink)}
.hero-note{font-size:10px;color:var(--ink-dim);margin-top:22px}.status-dot{color:var(--green);font-size:15px}
.hero-evidence{display:flex;gap:32px;flex-wrap:wrap;margin-top:35px}.hero-evidence a{display:flex;flex-direction:column;gap:6px;color:var(--ink-dim);text-decoration:none;font-size:10px;max-width:180px}.hero-evidence b{font-size:22px;font-weight:400;color:var(--yellow)}.hero-evidence a:hover span{text-decoration:underline}
.pine-scene{justify-self:center;width:max-content;max-width:100%;align-self:center}.pine{font:400 clamp(10px,1.08vw,16px)/1.18 'IBM Plex Mono',monospace;white-space:pre;color:#80bc91;overflow:visible;user-select:none;margin:0;padding:0;text-align:left}
.pine .bauble{display:inline;color:var(--pink);animation:light 4s ease-in-out infinite;animation-delay:var(--delay)}.pine .b1{color:var(--yellow)}.pine .b2{color:var(--blue)}.pine .b3{color:var(--purple)}.tree-star{color:var(--yellow);text-shadow:0 0 14px #f3d58c66}.trunk{color:#c0a1ff}.ground{color:#6f607e}
@keyframes light{0%,100%{filter:brightness(.85);text-shadow:none}50%{filter:brightness(1.15);text-shadow:0 0 7px currentColor}}
.pine-scene figcaption{display:flex;justify-content:space-between;gap:15px;color:var(--ink-dim);font-size:10px;margin-top:20px}.lights-toggle{background:none;border:0;padding:0;color:var(--yellow);font-size:10px;text-decoration:underline dotted;text-underline-offset:4px}.lights-off .bauble{animation:none;color:#6f907d;filter:none}.lights-off .tree-star{text-shadow:none;color:var(--ink-dim)}
.contents{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:30px;padding:28px 0 36px;margin-top:18px}.contents a{display:flex;flex-direction:column;gap:8px;font-size:13px;text-decoration:none;color:var(--ink)}.contents a span{color:var(--pink);font-size:11px}.contents a:hover{color:var(--pink)}
section{padding:60px 0 0;scroll-margin-top:28px}section+section{margin-top:12px}section>p{max-width:90ch}.eyebrow{color:var(--pink);font-size:11px;margin-bottom:12px}
#current-capabilities{max-width:1100px}.section-intro{font-size:14px;color:var(--ink-dim);margin-top:16px}
.mode-picker{display:flex;gap:30px;flex-wrap:wrap;margin:25px 0 24px}.mode-picker[hidden]{display:none}.mode-picker button{background:none;border:0;border-bottom:1px solid transparent;padding:5px 0;color:var(--ink-dim);font-size:13px}.mode-picker button[aria-pressed=true]{color:var(--green);border-color:var(--green)}
.modes{grid-template-columns:1fr 1fr;gap:40px}.modes.has-picker{display:block}.mode-panel{max-width:83ch;min-height:112px}.mode-panel[hidden]{display:none}.mode-panel p{font-size:14px;color:var(--ink-dim)}
#current-capabilities>p:not(.section-intro){font-size:12px;color:var(--ink-dim);margin-top:22px}.process{padding-top:30px}.process h2{font-size:12px;color:var(--purple);letter-spacing:0;font-weight:400}
.session-path{list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:40px;margin-top:18px}.step-label{display:none}.session-path strong{font-size:13px;font-weight:400;color:var(--ink)}.session-path p{font-size:12px;color:var(--ink-dim);margin-top:8px}
#run{max-width:1250px}#run>p{font-size:14px;max-width:90ch}#run h3{margin-top:28px}.term{font-size:13px;line-height:1.9;padding:20px 22px;border-radius:0;border:0;background:var(--bg-soft)}.term.fold{white-space:pre-wrap;overflow-wrap:anywhere}.term.fold .ln{display:block;padding:0;text-indent:0}.copy-command{display:block;margin:12px 0 0 auto;padding:3px 0;background:none;border:0;color:var(--pink);font-size:11px}
.cap{font-size:12px}code{font:inherit;overflow-wrap:anywhere}.tt{font-size:13px;border-radius:0}.tt.sums td{white-space:normal;overflow-wrap:anywhere}
#measurements .stats{margin-top:28px;max-width:1100px;row-gap:18px}.stats .n{text-align:left;font-size:24px}.stats .t{font-size:13px}
.facts{list-style:none;max-width:100ch;display:grid;gap:18px;margin-top:24px}.facts li{font-size:13px;color:var(--ink-dim)}.facts b{font-weight:500;color:var(--ink)}
.verdict{margin-top:24px;max-width:100ch;border:0;padding:0}.verdict h3{color:var(--yellow)}.verdict p{font-size:13px;color:var(--ink-dim)}
.explore-grid{display:grid;grid-template-columns:1fr 1fr;column-gap:60px;row-gap:22px;margin-top:26px}.explore-grid>a{display:flex;align-items:baseline;gap:16px;text-decoration:none}.explore-grid h3{color:var(--pink);font-size:16px}.explore-grid p{font-size:12px;color:var(--ink-dim)}.explore-grid>a>span:last-child{margin-left:auto}.explore-grid>a:hover h3{text-decoration:underline}
section:has(>.evidence-body),section:has(>details){padding-top:24px}section>details>summary{font-size:16px;color:var(--purple)}section>details>summary::before{content:'+ ';color:var(--green)}section>details[open]>summary::before{content:'− '}.evidence-body{margin-top:24px}.evidence-body>*+*{margin-top:18px}
footer{margin-top:70px;padding-bottom:35px;font-size:11px;gap:20px}footer>span:first-child:has([href="/rules"]){flex-basis:100%}footer .sp{margin-left:auto}
.skip-link{position:absolute;left:20px;top:-80px;background:var(--ink);color:var(--bg);padding:12px;z-index:10}.skip-link:focus{top:10px}
[data-reveal]{opacity:1;transform:none}#stars,.cf{display:none}
.bench{max-width:100%;overflow-x:auto;font-size:13px}.bench .head,.bench .row{display:grid;grid-template-columns:minmax(190px,2fr) repeat(4,minmax(60px,.7fr)) minmax(90px,1fr);gap:16px;min-width:650px;padding:8px 0;align-items:baseline}.bench .head,.bench .d{color:var(--ink-dim)}.bench:not(.wide) .head,.bench:not(.wide) .row{grid-template-columns:minmax(180px,1.2fr) minmax(80px,.5fr) minmax(220px,2fr) minmax(180px,1fr);min-width:760px}.bench .n{text-align:right;color:var(--purple)}
@media(min-width:1700px){.wrap{padding:0 64px}.top{grid-template-columns:minmax(0,1fr) minmax(450px,.8fr)}.pine{font-size:17px}}
@media(max-width:1000px){.wrap{padding:0 28px}.top{grid-template-columns:minmax(0,1fr) 330px;gap:24px}.pine{font-size:11px}.product-home h1{font-size:72px;letter-spacing:-5px}.hero-evidence{gap:20px}.hero-evidence a{max-width:140px}header.site nav{margin-left:0}.contents{gap:18px}.session-path{gap:24px}}
@media(max-width:760px){.top{grid-template-columns:1fr;padding-top:32px;gap:38px}.hero-copy{max-width:none}.pine{font-size:clamp(9px,2.55vw,14px)}.pine-scene{justify-self:center}.hero-description{max-width:70ch}.hero-evidence{gap:22px}.hero-evidence a{max-width:120px}.contents{grid-template-columns:1fr 1fr;gap:24px}.session-path{grid-template-columns:1fr 1fr}.modes{grid-template-columns:1fr}.explore-grid{grid-template-columns:1fr}.tt .s,.tt .n{white-space:normal;overflow-wrap:anywhere}.mode-panel{min-height:160px}section{padding-top:44px}}
@media(max-width:420px){.wrap{padding:0 18px}header.site{gap:18px;padding-top:22px}header.site nav{font-size:10px;gap:12px}.product-home h1{font-size:60px;letter-spacing:-4px}.hero-statement{font-size:22px}.hero-description{font-size:13px}.hero-evidence{gap:15px}.hero-evidence a{max-width:90px;font-size:9px}.hero-evidence b{font-size:20px}.hero-actions{gap:22px;font-size:12px}.hero-note{font-size:9px}.contents a{font-size:11px}.pine-scene figcaption{font-size:9px}.lights-toggle{font-size:9px}h2{font-size:21px}.term{padding:14px;font-size:11px}.mode-picker{gap:20px}.mode-picker button{font-size:11px}.session-path{gap:20px}.session-path p{font-size:11px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}

.copy-status{display:block;text-align:right;font-size:11px;color:var(--green);min-height:1.8em}

/* Editorial hierarchy: sans for reading, mono for code and instrumentation. */
:root{--text-font:"IBM Plex Mono",ui-monospace,monospace;--code-font:"IBM Plex Mono",ui-monospace,monospace}
body{font-family:var(--text-font);font-size:16px;line-height:1.65}
h1,h2,h3{font-family:var(--text-font)}
.wrap{padding:0 48px}header.site{padding-top:24px;padding-bottom:18px}
header.site nav{font-family:var(--text-font);font-size:13px;gap:28px}header.site nav a{color:var(--ink-dim)}header.site nav a:hover{color:var(--pink)}
.mark{font-family:var(--text-font);font-size:22px;letter-spacing:-.8px;font-weight:600}.wand{margin-right:3px}
.top{grid-template-columns:minmax(0,1.15fr) minmax(380px,1fr);gap:5vw;padding-top:48px;padding-bottom:50px;align-items:center;min-height:690px}
.hero-copy{max-width:740px}.tag,.eyebrow{font-family:var(--code-font);font-size:11px;color:var(--pink);letter-spacing:.025em}
.product-home h1{font-family:var(--text-font);font-size:clamp(44px,4.8vw,72px);line-height:1.09;letter-spacing:-3.4px;font-weight:500;margin:24px 0 28px;color:var(--ink)}
.product-home h1 span{color:var(--purple)}.hero-description{font-size:18px;line-height:1.7;max-width:46ch;margin:0;color:var(--ink-dim)}
.hero-actions{margin-top:30px;gap:26px;font-size:14px}.hero-actions a:first-child{background:var(--pink);color:#231824;padding:12px 19px;text-decoration:none;border-radius:3px;font-weight:600;display:inline-flex;gap:24px;align-items:center}.hero-actions a:first-child:hover{background:#ffbedb}.hero-actions a:last-child{color:var(--ink-dim);text-decoration:none}.hero-actions a:last-child:hover{color:var(--ink)}
.hero-note{font-family:var(--text-font);font-size:12px;max-width:55ch;margin-top:18px}.hero-footnote{display:flex;gap:20px;flex-wrap:wrap;margin-top:56px;font-size:12px;color:var(--ink-dim)}.hero-footnote a{color:var(--ink-dim);text-decoration:none}.hero-footnote a:hover{color:var(--pink)}
.pine-scene figcaption,.lights-toggle{font-family:var(--code-font)}
section{padding-top:72px}section+section{margin-top:0}h2{font-size:34px;font-weight:500;line-height:1.17;letter-spacing:-1.1px}h3{font-size:19px;font-weight:500;letter-spacing:-.3px}
#current-capabilities{max-width:none}.section-heading{display:flex;justify-content:space-between;align-items:end;gap:40px;margin-bottom:36px}.section-heading h2{margin-top:12px}.section-heading>p{font-size:14px;color:var(--ink-dim);max-width:45ch;line-height:1.7}
.walk-layout{display:grid;grid-template-columns:minmax(250px,.7fr) minmax(0,1.3fr);gap:64px;max-width:1350px}
.case-list button{width:100%;display:flex;gap:18px;text-align:left;align-items:baseline;padding:21px 0;background:none;border:0;color:var(--ink-dim)}.case-list button+button{border-top:1px solid #292432}.case-list button[aria-pressed=true]{color:var(--ink)}.case-list button[aria-pressed=true] .case-number{color:var(--pink)}.case-list button>span:last-child{margin-left:auto;color:var(--pink);opacity:0}.case-list button[aria-pressed=true]>span:last-child{opacity:1}.case-list strong{font-size:17px;font-weight:500;display:block}.case-list small{font-size:13px;font-weight:400;display:block;margin-top:7px;color:var(--ink-dim)}.case-number{font:11px var(--code-font)}.case-note{font-size:12px;color:var(--ink-dim);margin-top:28px;line-height:1.8}
.replay{background:#1c1926;border-radius:4px;min-width:0;align-self:start;overflow:hidden}.replay-top{font:10px var(--code-font);color:var(--ink-dim);display:flex;justify-content:space-between;gap:16px;padding:19px 24px;border-bottom:1px solid #322b3e}.replay-top>span:first-child{color:var(--green)}
.replay-steps{display:flex;gap:24px;padding:22px 26px 0}.replay-steps button{font:11px var(--code-font);color:var(--ink-dim);background:none;border:0;padding:0 0 7px;border-bottom:1px solid transparent}.replay-steps button[aria-pressed=true]{color:var(--purple);border-color:var(--purple)}.replay-steps button span{margin-left:6px}
.replay-output{padding:28px 26px 20px;min-height:208px}.replay-label{font:10px var(--code-font);color:var(--pink);margin-bottom:12px}#replay-code{white-space:pre-wrap;overflow-wrap:anywhere;font:14px/1.8 var(--code-font);color:var(--ink);margin:0;max-width:100%}#replay-explanation{font-size:14px;line-height:1.7;color:var(--ink-dim);margin-top:18px;max-width:65ch}.replay-output[data-verdict=true] #replay-code{color:var(--green)}
.replay-bottom{display:flex;justify-content:space-between;gap:20px;align-items:center;padding:18px 26px;border-top:1px solid #322b3e;font-size:12px}.replay-bottom a{color:var(--ink-dim);text-decoration:none}.replay-bottom button{background:none;border:0;color:var(--pink);padding:3px 0;font-size:12px}
.scope-notes{margin-top:24px!important}.scope-notes>summary{font-size:13px;color:var(--ink-dim)}.scope-body{margin-top:25px;max-width:1000px}.scope-body .section-intro{display:none}.scope-body .side{margin-bottom:22px}.scope-body p{font-size:14px}.scope-body>p{color:var(--ink-dim);margin-top:16px}.mode-panel{min-height:0}.mode-panel p{font-size:14px}
#run{max-width:1350px}#run>p{font-size:16px;max-width:72ch}#run>.eyebrow{font:11px var(--code-font)}#run>.install-platform{font:11px/1.8 var(--code-font);color:var(--green);margin-top:24px;margin-bottom:24px;max-width:none}
.install-step{margin:0!important;border-top:1px solid #322b3e}.install-step>summary{display:flex;align-items:baseline;gap:26px;padding:23px 0;color:var(--ink);font-size:16px;text-decoration:none;width:100%}.install-step>summary>span{font:11px var(--code-font);color:var(--purple)}.install-step strong{font-weight:500;font-size:18px}.install-step small{margin-left:auto;font-size:12px;color:var(--ink-dim)}.install-step i{font:18px var(--code-font);color:var(--pink);font-style:normal}.install-step[open] i{transform:rotate(45deg)}.install-step>summary::before{content:none}.install-body{padding:0 0 30px;max-width:1100px}.install-body>*+*{margin-top:18px}.install-body p{font-size:14px}.install-body h3{margin-top:25px}.stable-install{margin-top:20px!important}.stable-install>summary{font-size:13px;color:var(--pink)}.stable-install[open]>*+*{margin-top:18px}
.term,.tt,.cmd,code{font-family:var(--code-font)}.term{font-size:12px}.tt{font-size:12px}.copy-command,.copy-status{font-family:var(--code-font)}
#measurements{max-width:1350px}#measurements>.cap{font-size:14px;color:var(--ink-dim);max-width:80ch}.measurement-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:60px;margin-top:35px;margin-bottom:28px}.measurement-strip>a{display:flex;flex-direction:column;text-decoration:none;gap:10px;color:var(--ink)}.measurement-strip strong{font:400 32px var(--code-font);color:var(--yellow)}.measurement-strip span{font-size:15px;margin-top:5px}.measurement-strip small{font-size:12px;line-height:1.7;color:var(--ink-dim);max-width:37ch}.measurement-strip a:hover span{color:var(--pink)}.measurement-details>summary{font-size:13px}.measurement-details .stats{margin-top:25px}
#changed{padding-top:32px}.release-notes>summary{font-size:15px;color:var(--ink)}.release-notes[open]>.facts{margin-top:26px}.facts{max-width:105ch}.facts li,.verdict p{font-size:14px;line-height:1.8}.verdict h3{font-size:18px}
.explore-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:30px 48px}.explore-grid h3{font-family:var(--text-font);font-size:18px}.explore-grid p{font-size:13px;line-height:1.7}.evidence-body p{font-size:14px}section>details>summary{font-size:16px}section:has(>details):not(#run):not(#measurements):not(#current-capabilities){padding-top:30px}
footer{font-size:12px;color:var(--ink-dim);margin-top:65px}.intro h1{font-family:var(--text-font);font-size:44px;letter-spacing:-1.5px}.intro p{font-family:var(--text-font)}
@media(max-width:1100px){.wrap{padding:0 32px}.top{grid-template-columns:minmax(0,1fr) minmax(320px,.85fr);gap:28px;min-height:600px}.product-home h1{font-size:51px;letter-spacing:-2.6px}.hero-description{font-size:16px}.walk-layout{gap:35px;grid-template-columns:minmax(230px,.7fr) minmax(0,1.3fr)}.replay-top{font-size:9px}.hero-footnote{gap:14px}}
@media(max-width:760px){.top{grid-template-columns:1fr;gap:42px;min-height:0;padding-top:36px;padding-bottom:15px}.hero-copy{max-width:620px}.product-home h1{font-size:clamp(38px,7vw,52px);letter-spacing:-1.8px;line-height:1.13}.hero-description{max-width:50ch}.hero-footnote{margin-top:28px}.pine-scene{margin-top:10px}.section-heading{display:block;margin-bottom:24px}.section-heading>p{margin-top:20px}.section-heading h2 br{display:none}.walk-layout{grid-template-columns:1fr;gap:24px}.case-list{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px}.case-list button{display:block;padding:0 0 10px;border:0!important}.case-list strong{font-size:13px;line-height:1.5;margin-top:10px}.case-list small,.case-list button>span:last-child,.case-note{display:none}.case-list button[aria-pressed=true]{border-bottom:1px solid var(--pink)!important}.replay-output{min-height:220px}.measurement-strip{gap:22px}.measurement-strip strong{font-size:25px}.measurement-strip span{font-size:13px}.measurement-strip small{font-size:11px}.explore-grid{grid-template-columns:1fr 1fr;gap:25px}.install-step small{display:none}.install-step i{margin-left:auto}.install-step>summary{gap:18px}.install-step strong{font-size:16px}.scope-body .side{grid-template-columns:1fr;gap:24px}.scope-body .mode-panel{min-height:0}h2{font-size:29px;letter-spacing:-.8px}section{padding-top:58px}}
@media(max-width:420px){.wrap{padding:0 20px}.product-home h1{font-size:38px;letter-spacing:-1.7px}.hero-description{font-size:16px}.hero-note{font-size:11px}.hero-actions{font-size:13px;gap:20px}.hero-actions a:first-child{padding:11px 15px;gap:18px}header.site nav{font-size:11px;gap:18px}.hero-footnote{font-size:11px;gap:15px}.replay-top{padding:16px;flex-wrap:wrap;gap:6px}.replay-steps{padding:18px 18px 0;gap:20px}.replay-output{padding:24px 18px 18px;min-height:250px}#replay-code{font-size:12px}#replay-explanation{font-size:13px}.replay-bottom{padding:16px 18px;gap:12px;font-size:11px}.replay-bottom button{font-size:11px}.measurement-strip{grid-template-columns:1fr;gap:26px}.measurement-strip>a{display:grid;grid-template-columns:88px 1fr;gap:4px 16px}.measurement-strip strong{grid-row:span 2;font-size:25px}.measurement-strip span{margin:0}.measurement-strip small{max-width:none}.explore-grid{grid-template-columns:1fr}.pine-scene figcaption{font-size:8px}.install-platform{font-size:10px!important}}

/* Plain product title; the character illustration carries the visual emphasis. */
.product-home .top h1{font-family:var(--text-font);font-size:34px;line-height:1.25;letter-spacing:-.8px;font-weight:400;color:var(--ink);margin:20px 0 24px;max-width:22ch}
.product-home .top .tag{color:var(--ink-dim);font-size:11px}
.product-home .hero-description{font-size:16px;line-height:1.8;max-width:48ch}
.product-home .hero-copy{padding-bottom:20px}
@media(max-width:760px){.product-home .top h1{font-size:30px;letter-spacing:-.6px;max-width:24ch}.product-home .hero-copy{padding-bottom:0}}
@media(max-width:420px){.product-home .top h1{font-size:28px}.product-home .hero-description{font-size:15px}}

/* The complete type palette: 14 / 16 / 22 / 30. The ASCII drawing is artwork. */
:root{--text-font:'IBM Plex Mono',ui-monospace,monospace;--code-font:var(--text-font);--t-mono:14px;--t-small:14px;--t-body:16px;--t-num:22px;--t-h2:22px;--t-h1:30px}
body{font-family:var(--text-font);font-size:16px;line-height:1.75;font-weight:400}
body :is(h1,h2,h3,p,a,button,summary,strong,small,label,figcaption,pre,code){font-family:var(--text-font);letter-spacing:0}
body :is(h1,h2,h3,strong,b){font-weight:500}
.product-home .top h1,.intro h1{font-family:var(--text-font);font-size:30px;line-height:1.4;letter-spacing:0;font-weight:400;max-width:none;margin:20px 0 24px}
body h2,.product-home h2{font-size:22px;line-height:1.5;letter-spacing:0;font-weight:500}
body h3,.product-home h3{font-size:16px;line-height:1.6;letter-spacing:0;font-weight:500}
body p,.product-home .hero-description,#run>p,.install-body p,.scope-body p,.mode-panel p,.evidence-body p,.facts li,.verdict p{font-size:16px;line-height:1.8}
.product-home .hero-description{max-width:58ch}
header.site .mark{font-family:var(--text-font);font-size:22px;letter-spacing:0;font-weight:500}
header.site nav,.product-home .top .tag,.eyebrow,#run>.eyebrow,.hero-note,.hero-footnote,.hero-actions,.hero-actions a,.section-heading>p,.case-list small,.case-number,.case-note,.scope-notes>summary,.stable-install>summary,.measurement-details>summary,.release-notes>summary,.explore-grid p,.cap,#measurements>.cap,.scope-body>p,footer,.copy-command,.copy-status,.install-step small{font-size:14px;line-height:1.75;letter-spacing:0}
.pine-scene figcaption,.lights-toggle{font-family:var(--text-font);font-size:14px;line-height:1.7;letter-spacing:0}
.replay-top,.replay-steps button,.replay-label,#replay-code,#replay-explanation,.replay-bottom,.replay-bottom button,.replay-bottom a{font-family:var(--text-font);font-size:14px;line-height:1.75;letter-spacing:0}
.case-list strong,.install-step strong,.explore-grid h3,section>details>summary,.install-step>summary{font-size:16px;line-height:1.65;font-weight:400;letter-spacing:0}
#run>.install-platform,.install-step>summary>span,.measurement-strip small,.measurement-strip span{font-family:var(--text-font);font-size:14px!important;line-height:1.75}
.measurement-strip strong,.stats .n,#measurements .stats .n{font-family:var(--text-font);font-size:22px;line-height:1.4;font-weight:400;letter-spacing:0}
.stats .t,.tt,.term,.cmd,.bench,.law .k,.day .d,.day .c,.r,.pr{font-family:var(--text-font);font-size:14px;line-height:1.8}
code{font-family:var(--text-font);font-size:1em}
.replay-output{min-height:265px}.replay-top{flex-wrap:wrap;row-gap:6px}.replay-bottom{flex-wrap:wrap}
.hero-footnote{gap:20px;line-height:1.8}.pine-scene figcaption{flex-wrap:wrap;gap:8px 20px}.pine-scene figcaption>span{max-width:28ch}.lights-toggle{margin-left:auto;align-self:end}
.hero-actions{gap:24px}.hero-actions a:first-child{font-weight:500}
@media(max-width:760px){header.site nav{font-size:14px;gap:12px 20px}.product-home .top h1{font-size:30px;max-width:none}.product-home .hero-description{font-size:16px}.case-list{gap:14px}.case-list strong{font-size:14px}.replay-output{min-height:285px}.section-heading>p{font-size:14px}.measurement-strip{grid-template-columns:1fr;gap:28px}.measurement-strip>a{display:grid;grid-template-columns:100px 1fr;gap:6px 20px}.measurement-strip strong{grid-row:span 2}.measurement-strip small{max-width:none}.measurement-strip span{margin-top:0}.install-step>summary{gap:14px}.pine-scene figcaption{max-width:100%}.replay-steps{gap:18px}.replay-steps button{font-size:14px}}
.status-dot,.install-step i{font-size:16px}
@media(max-width:760px){.product-home .top{grid-template-columns:minmax(0,1fr)}.product-home .top>*{min-width:0;max-width:100%}.hero-actions{flex-wrap:wrap}.pine-scene figcaption{width:100%;min-width:0}.pine-scene figcaption>span{max-width:100%;overflow-wrap:anywhere}}

/* Weight palette: medium reading text, bold headings. Keep the artwork light. */
body,body :is(p,a,button,summary,label,input,small,code,pre){font-weight:500}
body :is(h1,h2,h3,strong,b),header.site .mark{font-weight:700}
.pine,.pine *,.wand,.wand *{font-weight:400}
