*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:1rem;line-height:1.5;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased}
h1,h2,h3,p,ol,ul,dl,dd,figure,pre{margin:0;padding:0}
ol,ul{list-style:none}
a{color:inherit}
button{font:inherit;color:inherit}
.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.wrap{max-width:var(--max);margin-inline:auto;padding-inline:var(--gutter)}

:focus-visible{outline:3px solid var(--ink);outline-offset:3px}
.plate :focus-visible,.json :focus-visible{outline-color:var(--paper)}
.skip{position:absolute;left:var(--gutter);top:-60px;background:var(--ink);color:var(--paper);padding:10px 14px;z-index:20}
.skip:focus{top:8px}

/* top bar */
.bar{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:16px;max-width:var(--max);margin-inline:auto;padding:14px var(--gutter);border-bottom:var(--line) solid var(--ink)}
.back{display:inline-flex;align-items:center;min-height:44px;font-weight:700;font-size:.9rem;text-decoration:none;border:2px solid var(--ink);padding:8px 14px;white-space:nowrap;transition:background var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
.back:active{transform:scale(.97)}
.bar-id{font-size:.75rem;color:var(--mute);letter-spacing:.04em}
.bar-nav{display:flex;gap:4px}
.bar-nav a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:44px;font-size:.85rem;font-weight:600;text-decoration:none;padding:0 10px;border-bottom:2px solid transparent;transition:border-color var(--t-fast) var(--ease-out)}

/* buttons: square, one shape rule */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 22px;border:2px solid var(--ink);background:transparent;font-weight:700;font-size:.95rem;text-decoration:none;cursor:pointer;white-space:nowrap;transition:transform var(--t-press) var(--ease-out),background var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out),border-color var(--t-fast) var(--ease-out),opacity var(--t-fast) var(--ease-out)}
.btn:active:not(:disabled){transform:scale(.97)}
.btn:disabled{opacity:.4;cursor:default}
.btn-solid{background:var(--ink);color:var(--paper)}
.btn-alarm{background:var(--alarm);border-color:var(--alarm);color:#fff}
.btn-mini{min-height:44px;padding:0 12px;font-size:.78rem;border-color:var(--on-ink-mute);color:var(--on-ink);margin-left:auto}
.btn-mini[aria-pressed="true"]{background:var(--paper);color:var(--ink)}
@media (hover:hover) and (pointer:fine){
  .back:hover{background:var(--ink);color:var(--paper)}
  .bar-nav a:hover{border-color:var(--alarm)}
  .btn-solid:hover:not(:disabled){background:var(--alarm);border-color:var(--alarm)}
  .btn-ghost:hover{background:var(--ink);color:var(--paper)}
  .btn-alarm:hover{background:var(--paper);color:var(--alarm)}
  .btn-mini:hover{background:var(--paper);color:var(--ink)}
  .pick-row button:hover{background:#26261f}
  .pick-row button[aria-checked="true"]:hover{background:var(--paper)}
}

/* stamps */
.stamp{display:inline-block;font-family:var(--font-mono);font-weight:600;font-size:.8rem;letter-spacing:.14em;text-transform:uppercase;color:var(--alarm);border:2px solid var(--alarm);padding:3px 8px;transform:rotate(-2deg)}
.stamp-sm{font-size:.75rem;padding:2px 6px}
.stamp-on-ink{color:var(--alarm-on-ink);border-color:var(--alarm-on-ink)}
.redact{background:var(--ink);color:var(--ink);user-select:none;padding:0 6px;margin-right:6px}

/* hero */
.hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,340px);gap:var(--gutter);align-items:end;padding-top:clamp(28px,5vw,56px);padding-bottom:clamp(24px,3vw,40px)}
.tag{display:inline-block;font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;font-weight:600;color:var(--alarm);margin-bottom:12px}
h1{font-family:var(--font-display);font-weight:900;font-stretch:112%;font-variation-settings:"wdth" 112;font-size:clamp(3.2rem,9.2vw,8.4rem);line-height:.88;letter-spacing:-.045em}
.h1-red{color:var(--alarm)}
h1 .ln{display:block;white-space:nowrap}
.lede{font-size:clamp(1.02rem,1.6vw,1.2rem);max-width:46ch;margin-top:20px;color:var(--ink-2)}
.hero-cta{margin-top:22px}
.file{border-top:var(--rule) solid var(--ink);font-size:.88rem}
.file>div{display:grid;grid-template-columns:96px 1fr;gap:12px;padding:9px 0;border-bottom:var(--line) solid var(--hair)}
.file dt{font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--mute);padding-top:3px}
.file dd{font-weight:500}

/* hero entrance: page-load, once. CSS animation so it stays smooth while fonts and scripts load. Gated on .js so no-JS shows everything */
.w{display:inline-block}
@keyframes hero-in{from{opacity:0;transform:translateY(.3em)}to{opacity:1;transform:none}}
@keyframes hero-up{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.js .tag,.js .lede,.js .hero-cta,.js .file>div{animation:hero-up var(--t-reveal) var(--ease-out) backwards}
.js .tag{animation-delay:0ms}
.js h1 .w{animation:hero-in 600ms var(--ease-out) backwards;animation-delay:calc(80ms + var(--w) * var(--stagger))}
.js .lede{animation-delay:340ms}
.js .hero-cta{animation-delay:400ms}
.js .file>div{animation-delay:calc(260ms + var(--r,0) * 50ms)}
.js .file>div:nth-child(1){--r:0}.js .file>div:nth-child(2){--r:1}.js .file>div:nth-child(3){--r:2}.js .file>div:nth-child(4){--r:3}.js .file>div:nth-child(5){--r:4}

/* replay plate */
.plate-wrap{padding-bottom:clamp(48px,7vw,96px)}
.plate{background:var(--ink);color:var(--on-ink);border:var(--rule) solid var(--ink)}
.plate-head{display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:center;padding:10px 16px;border-bottom:1px solid #34342f;font-size:.75rem;letter-spacing:.08em;color:var(--on-ink-mute)}
.plate-head-mid{text-transform:none;letter-spacing:.02em}
.controls{display:flex;flex-wrap:wrap;gap:16px 28px;align-items:flex-end;padding:18px 16px 8px}
.pick{border:0;padding:0;margin:0;min-width:0}
.pick legend{font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;color:var(--on-ink-mute);padding:0;margin-bottom:8px}
.pick-row{display:flex;flex-wrap:wrap;gap:0}
.pick-row button{background:transparent;border:1px solid #6b6b64;margin-left:-1px;min-height:44px;padding:0 16px;font-size:.88rem;font-weight:600;cursor:pointer;color:var(--on-ink);transition:background var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out),border-color var(--t-fast) var(--ease-out),transform var(--t-press) var(--ease-out)}
.pick-row button:first-child{margin-left:0}
.pick-row button:active{transform:scale(.97)}
.pick-row button[aria-checked="true"]{background:var(--paper);color:var(--ink);border-color:var(--paper);position:relative;z-index:1}
.controls .btn-alarm{margin-left:auto}
.payload-line{padding:6px 16px 18px;font-size:.84rem;color:var(--on-ink-mute);display:flex;flex-wrap:wrap;gap:6px 12px;align-items:baseline}
.lbl{font-size:.75rem;text-transform:uppercase;letter-spacing:.1em}
.payload-line code{font-family:var(--font-mono);color:var(--on-ink);background:#26261f;padding:2px 8px;overflow-wrap:anywhere}

/* kill chain */
.chain{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:34px;padding:12px 16px 24px}
.node{position:relative;display:flex;flex-direction:column;gap:3px;border:2px solid #4a4a43;padding:12px 12px 14px;min-height:112px;color:#9a9a92;transition:border-color var(--t-ui) var(--ease-out),color var(--t-ui) var(--ease-out),background var(--t-ui) var(--ease-out)}
.node b{font-size:1.02rem;line-height:1.15;overflow-wrap:anywhere}
.node-k{font-size:.75rem;text-transform:uppercase;letter-spacing:.12em}
.node-s{font-size:.75rem;margin-top:auto;padding-top:8px;overflow-wrap:anywhere}
.node:not(:last-child)::after{content:"";position:absolute;left:100%;top:50%;width:34px;height:2px;background:#4a4a43}
.node:not(:last-child)::before{content:"";position:absolute;left:100%;top:50%;width:34px;height:2px;background:var(--paper);transform:scaleX(0);transform-origin:left;transition:transform var(--t-ui) var(--ease-out);z-index:1}
.node.is-edge::before{transform:scaleX(1)}
.node.is-on{border-color:var(--paper);color:var(--on-ink)}
.node.is-active{background:#26261f}
.node.is-deny{border-color:var(--paper);background:var(--paper);color:var(--ink)}
.node.is-deny::after{background:var(--alarm-on-ink)}
.node.is-deny .node-s::before{content:"DENIED  ";font-weight:600;color:var(--alarm)}
.node.is-hit{border-color:var(--alarm-on-ink);background:var(--alarm);color:#fff}
.node.is-hit .node-s::before{content:"CANARY READ  ";font-weight:600}
.node.is-flag{border-color:var(--alarm-on-ink)}
.node.is-flag::before{background:var(--alarm-on-ink)}

.lower{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);border-top:1px solid #34342f}
.log{padding:16px;min-height:290px;border-right:1px solid #34342f;position:relative}
.log-head{font-size:.75rem;letter-spacing:.1em;color:var(--on-ink-mute);margin-bottom:10px}
.log ol{display:flex;flex-direction:column;gap:2px}
.log li{display:grid;grid-template-columns:52px 62px 1fr;gap:10px;font-family:var(--font-mono);font-size:.8rem;line-height:1.45;padding:3px 0;animation:rise var(--t-ui) var(--ease-out) both}
.log li .t{color:var(--on-ink-mute)}
.log li .k{font-weight:600;letter-spacing:.04em}
.log li .m{overflow-wrap:anywhere;color:var(--on-ink)}
.log li.k-deny .k,.log li.k-hit .k,.log li.k-hit .m{color:var(--alarm-on-ink)}
.log li.k-deny .m{color:var(--on-ink)}
.log-empty{position:absolute;left:16px;top:52px;font-size:.8rem;color:var(--on-ink-mute)}
.log.has .log-empty{display:none}
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

.verdict{padding:16px;display:flex;flex-direction:column;gap:12px}
.stamp-slot{min-height:104px;display:flex;align-items:center;justify-content:flex-start;overflow:hidden;padding:14px 12px 14px 6px}
.verdict-stamp{display:inline-block;font-family:var(--font-display);font-weight:900;font-stretch:112%;font-variation-settings:"wdth" 112;font-size:clamp(1.9rem,3.2vw,2.8rem);letter-spacing:.02em;border:4px solid currentColor;padding:4px 14px;transform:rotate(-9deg) scale(1.15);opacity:0}
/* slam: transition lives on .show so a re-run resets instantly instead of fading out an empty box */
.verdict-stamp.show{transform:rotate(-4deg) scale(1);opacity:1;transition:transform 220ms var(--ease-out),opacity 100ms var(--ease-out)}
.verdict[data-state="exploited"] .verdict-stamp{color:var(--alarm-on-ink)}
.verdict[data-state="blocked"] .verdict-stamp{color:var(--paper)}
.verdict-text{font-size:.95rem;min-height:3em}
.mini{display:grid;gap:4px;font-size:.78rem;color:var(--on-ink-mute);margin-top:auto}
.mini div{display:flex;justify-content:space-between;gap:12px;border-top:1px solid #34342f;padding-top:6px}
.mini dd{color:var(--on-ink);font-weight:600}

/* sections */
.sec{padding-top:clamp(48px,7vw,96px);padding-bottom:clamp(8px,2vw,24px);border-top:var(--rule) solid var(--ink)}
.sec h2{font-family:var(--font-display);font-weight:900;font-stretch:108%;font-variation-settings:"wdth" 108;font-size:clamp(2.2rem,5.4vw,4.6rem);line-height:.95;letter-spacing:-.04em;max-width:18ch}
.sec-lede{max-width:62ch;margin-top:18px;font-size:1.08rem;color:var(--ink-2)}
.note{margin-top:16px;font-size:.88rem;color:var(--mute);display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.foot-note{margin-top:18px;max-width:62ch;color:var(--ink-2);font-size:.95rem}
.js .rv{opacity:0;transform:translateY(14px);transition:opacity var(--t-reveal) var(--ease-out),transform var(--t-reveal) var(--ease-out)}
.js .rv.in{opacity:1;transform:none}

/* ACE */
.ace-grid{display:grid;grid-template-columns:1fr auto 1fr;gap:var(--gutter);align-items:center;margin-top:clamp(28px,4vw,48px)}
.gauge svg{width:100%;max-width:420px;display:block}
.gauge{max-width:420px}
.g-track{fill:none;stroke:var(--hair);stroke-width:3}
.g-fill{fill:none;stroke:var(--ink);stroke-width:14;stroke-dasharray:100;stroke-dashoffset:calc(100 - var(--v,100))}
/* arc fill has no transform equivalent: stroke-dashoffset on one small SVG path, once, on first view */
.js .g-fill{stroke-dashoffset:100;transition:stroke-dashoffset 900ms var(--ease-out)}
.gauge-b .g-fill{stroke:var(--alarm)}
.js .gauge.in .g-fill{stroke-dashoffset:calc(100 - var(--v))}
.gauge figcaption{display:flex;flex-direction:column;margin-top:-62px;align-items:center;text-align:center;position:relative}
.g-num{font-size:clamp(3.2rem,6vw,5rem);font-weight:600;line-height:1;letter-spacing:-.04em}
.gauge-b .g-num{color:var(--alarm)}
.g-name{font-weight:800;margin-top:12px}
.g-sub{max-width:34ch;text-wrap:balance;font-size:.75rem;color:var(--mute);margin-top:2px}
.delta{display:flex;flex-direction:column;align-items:center;font-family:var(--font-display)}
.delta .mono:first-child{font-size:2.6rem;font-weight:600;letter-spacing:-.04em;color:var(--alarm)}
.delta-s{font-size:.75rem;color:var(--mute)}
.table-wrap{overflow-x:auto;margin-top:clamp(28px,4vw,48px)}
.cmp{width:100%;border-collapse:collapse;min-width:640px}
.cmp th{font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;text-align:left;padding:10px 12px 10px 0;border-bottom:var(--rule) solid var(--ink);color:var(--mute);font-weight:500}
.cmp td{padding:14px 12px 14px 0;vertical-align:middle;border-bottom:var(--line) solid var(--hair)}
.cmp tr:last-child td{border-bottom:0}
.cmp td:first-child{font-weight:700}
.cmp .num{text-align:right;padding-right:0;font-family:var(--font-mono)}
.cmp td.num{font-weight:500}
.chip{display:inline-block;font-family:var(--font-mono);font-weight:600;font-size:.75rem;letter-spacing:.1em;padding:3px 8px;border:2px solid var(--ink)}
.chip-x{background:var(--alarm);border-color:var(--alarm);color:#fff}

/* infra */
.infra-scroll{margin-top:clamp(28px,4vw,48px);overflow-x:auto;border-top:var(--line) solid var(--ink);border-bottom:var(--line) solid var(--ink);background:var(--paper-2)}
.infra{display:block;min-width:980px;width:100%;height:auto}
.infra .net{fill:none;stroke:var(--ink);stroke-width:2;stroke-dasharray:8 6}
.infra .net-l{font:500 12px var(--font-mono);fill:var(--ink-2)}
.infra .box rect{fill:var(--paper);stroke:var(--ink);stroke-width:2}
.infra .box-alarm rect{fill:var(--ink)}
.infra .box-dash rect{stroke-dasharray:5 4;stroke:var(--alarm);fill:var(--paper)}
.infra text{text-anchor:middle}
.infra .net-l{text-anchor:start}
.infra .t-b{font:800 15px var(--font-body);fill:var(--ink)}
.infra .t-s{font:400 12px var(--font-mono);fill:var(--ink-2)}
.infra .t-on{fill:var(--paper)}
.infra .box-alarm .t-s{fill:var(--on-ink-mute)}
.infra .wire path{fill:none;stroke:var(--ink);stroke-width:2}
.infra .wire-alarm path{fill:none;stroke:var(--alarm);stroke-width:2;stroke-dasharray:6 5}
.infra .lab{fill:var(--mute)}
.infra .lab-alarm{fill:var(--alarm);text-anchor:start}
.inventory{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0;margin-top:18px}
.inventory li{padding:12px 16px 12px 0;display:flex;flex-direction:column;gap:2px}
.inventory b{font-family:var(--font-mono);font-size:.95rem}
.inventory span{font-size:.78rem;color:var(--mute)}

.hint{display:none;font-size:.75rem;color:var(--mute);margin-top:8px}
@media (max-width:1010px){.hint-infra{display:block}}
@media (max-width:720px){.hint-table{display:block}}

/* memory */
.mem-ctl{display:flex;flex-wrap:wrap;gap:12px 14px;align-items:center;margin-top:clamp(24px,3vw,36px)}
.check{display:inline-flex;gap:10px;align-items:center;min-height:44px;font-weight:600;cursor:pointer;margin-left:6px}
.check input{width:22px;height:22px;accent-color:var(--ink);margin:0}
.mem-count{font-size:.8rem;color:var(--mute);margin-left:auto}
.mem{display:grid;grid-template-columns:minmax(0,1fr) minmax(170px,.55fr) minmax(0,1fr);gap:0;margin-top:22px;border-top:var(--rule) solid var(--ink)}
.lane{padding:18px 20px 22px 0}
.lane-2{padding:18px 0 22px 20px}
.lane-h{font-weight:900;font-size:1.5rem;letter-spacing:-.03em;display:flex;flex-direction:column;margin-bottom:14px}
.lane-h span{font-size:.75rem;font-weight:500;color:var(--mute);letter-spacing:0}
.lane ol{display:flex;flex-direction:column;gap:12px}
.lane li{border-left:3px solid var(--hair);padding:2px 0 2px 14px;color:var(--mute);transition:color var(--t-ui) var(--ease-out),border-color var(--t-ui) var(--ease-out)}
.lane li.on{color:var(--ink);border-color:var(--ink)}
.lane li.now{border-color:var(--alarm)}
.flag{display:none;color:var(--alarm);font-weight:700}
.taint .flag{display:inline}
.spine{background:var(--ink);color:var(--on-ink);padding:16px;display:flex;flex-direction:column;gap:16px;margin:0}
.spine-h{font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--on-ink-mute)}
.spine-body{color:var(--on-ink-mute);transition:color var(--t-ui) var(--ease-out);border-left:0}
.spine-body.on{color:var(--on-ink)}
.spine-line{font-weight:700;font-size:1.05rem}
.spine-rec{font-size:.75rem;margin-top:10px;overflow-wrap:anywhere}
.spine-body.on .spine-rec{color:var(--alarm-on-ink)}
.verdict-line{display:none;margin-top:8px;transform-origin:left center}
.verdict-line.show{display:block;width:fit-content;font-family:var(--font-mono);font-weight:600;font-size:.82rem;letter-spacing:.1em;padding:3px 8px;border:2px solid var(--ink)}
.verdict-line.x{background:var(--alarm);border-color:var(--alarm);color:#fff}
.mem .end.on{border-color:var(--alarm)}

/* CI */
.ci-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:clamp(24px,4vw,56px);margin-top:clamp(28px,4vw,48px);align-items:start}
.drift-h{font-weight:800;display:flex;gap:12px;align-items:center;flex-wrap:wrap;padding-bottom:10px;border-bottom:var(--rule) solid var(--ink)}
.ledger li{display:grid;grid-template-columns:minmax(0,1fr) auto 78px;gap:12px;align-items:baseline;padding:12px 0;border-bottom:var(--line) solid var(--hair)}
.ledger li:last-child{border-bottom:0}
.js .ledger li{opacity:0;transform:translateY(8px);transition:opacity var(--t-ui) var(--ease-out),transform var(--t-ui) var(--ease-out)}
.js .ledger.in li{opacity:1;transform:none;transition-delay:calc(var(--i,0) * var(--stagger))}
.ledger .what{font-weight:500}
.ledger .what small{display:block;font-family:var(--font-mono);font-size:.75rem;color:var(--mute);margin-top:2px;overflow-wrap:anywhere}
.ledger .idx{font-family:var(--font-mono);font-weight:600;font-size:1.2rem}
.ledger .d{font-family:var(--font-mono);font-size:.82rem;font-weight:600;text-align:right}
.ledger .fail{color:var(--alarm)}
.ledger .fail .d::after{content:" GATE FAIL";display:block;font-size:.75rem;letter-spacing:.1em}
.cmd{margin-top:18px;padding:12px 14px;background:var(--ink);color:var(--on-ink);font-size:.82rem;overflow-x:auto;white-space:nowrap}
.cmd span{color:var(--alarm-on-ink);margin-right:8px}
.json{background:var(--ink);color:var(--on-ink)}
.json-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 14px;border-bottom:1px solid #34342f;font-size:.75rem;color:var(--on-ink-mute)}
.code{margin:0;padding:16px 14px;overflow-x:auto;font-family:var(--font-mono);font-size:.78rem;line-height:1.6}
.code .rd{position:relative;color:var(--alarm-on-ink)}
/* the bar is the redaction: it wipes off to the right on reveal */
.code .rd::after{content:"";position:absolute;inset:0 -1px;background:var(--on-ink);transform-origin:right;transition:transform var(--t-ui) var(--ease-out)}
.code .rd + .rd::after,.code .rd:nth-of-type(2)::after{transition-delay:var(--stagger)}
.json.show .code .rd::after{transform:scaleX(0)}
.code .k-ok{color:var(--on-ink)}

/* stack */
.stack{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 clamp(24px,5vw,72px);margin-top:clamp(24px,3vw,40px)}
.stack div{padding:18px 0;border-top:var(--line) solid var(--ink)}
.stack h3{font-size:1.2rem;font-weight:900;letter-spacing:-.02em}
.stack p{color:var(--ink-2);margin-top:4px;max-width:46ch}

/* end */
.end{display:flex;flex-wrap:wrap;gap:20px 32px;align-items:center;justify-content:space-between;margin-top:clamp(48px,7vw,96px);padding-top:28px;padding-bottom:56px;border-top:var(--rule) solid var(--ink)}
.end-big{font-size:clamp(1.2rem,2.2vw,1.7rem);font-weight:800;letter-spacing:-.02em;line-height:1.2;max-width:34ch}

@media (max-width:1000px){
  .hero{grid-template-columns:1fr;align-items:start}
  .chain{grid-template-columns:1fr;gap:26px}
  .node{min-height:0}
  .node:not(:last-child)::after,.node:not(:last-child)::before{left:28px;top:100%;width:2px;height:26px}
  .node:not(:last-child)::before{transform:scaleY(0);transform-origin:top}
  .node.is-edge::before{transform:scaleY(1)}
  .lower{grid-template-columns:1fr}
  .log{border-right:0;border-bottom:1px solid #34342f;min-height:240px}
  .ace-grid{grid-template-columns:1fr;justify-items:center}
  .mem{grid-template-columns:1fr}
  .lane,.lane-2{padding:18px 0}
  .spine{margin:0}
  .ci-grid{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:640px){
  .bar{grid-template-columns:1fr;gap:10px}
  .bar-id{display:none}
  .bar-nav{overflow-x:auto;margin-inline:-8px}
  .plate-head{grid-template-columns:auto 1fr}
  .plate-head-end{display:none}
  .controls .btn-alarm{margin-left:0;width:100%}
  .pick-row button{padding:0 12px;flex:1 1 auto}
  .log li{grid-template-columns:48px 1fr}
  .log li .k{display:none}
  .stack{grid-template-columns:1fr}
  .file>div{grid-template-columns:84px 1fr}
  .mem-count{margin-left:0;width:100%}
}
/* keyboard-driven toggles stay instant */
html[data-input="key"] .lane li,html[data-input="key"] .spine-body,html[data-input="key"] .code .rd::after,html[data-input="key"] .btn{transition:none}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
  .js .rv,.js .ledger li{opacity:1;transform:none}
  .js .g-fill{stroke-dashoffset:calc(100 - var(--v,100))}
}
