/* The Dartboard - styles. No external fonts, no libraries.
   Colour does a job: cyan = the fly / accent, magenta = the random control, indigo = hold,
   amber = firing and stopping, green/red = the sign of a number (always with a + or - too).
   The three series colours were checked for colour-blind separation on this dark surface. */

:root{
  --ground:#06070a;
  --plate:#0b0d12;
  --plate-2:#10141b;
  --card:#11151d;
  --line:#1b212b;
  --line-2:#2a3340;

  /* contrast on --plate-2 (the lightest surface): ink 15.2  ink-dim 8.3  ink-faint 5.9 */
  --ink:#e2eaf1;
  --ink-dim:#a3b0bc;
  --ink-faint:#8793a0;

  --accent:#7deaff;
  --amber:#f0bc5f;
  --up:#6fdca6;
  --down:#ff8a8a;

  /* series marks (not text): fly / random / hold */
  --fly:#22a3c4;
  --rand:#d55181;
  --hold:#6a62e0;

  --serif:"Iowan Old Style","Palatino Linotype",Palatino,"Book Antiqua",Georgia,serif;
  --sans:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --mono:ui-monospace,"SF Mono",SFMono-Regular,"Cascadia Mono","Cascadia Code",Consolas,"Liberation Mono",Menlo,monospace;

  --gutter:16px;
  --radius:6px;
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;color-scheme:dark;scroll-behavior:smooth;scroll-padding-top:12px}
body{
  margin:0;
  background-color:var(--ground);
  background-image:radial-gradient(circle at 1px 1px,rgba(157,171,183,.055) 1px,transparent 0);
  background-size:26px 26px;
  color:var(--ink);
  font-family:var(--sans);font-size:15px;line-height:1.62;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,p,ul,ol,dl,dd,figure{margin:0}
ul,ol{padding:0;list-style:none}
a{color:var(--accent);text-decoration:none;border-bottom:1px solid rgba(125,234,255,.32)}
a:hover{border-bottom-color:var(--accent)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}
code,.formula{font-family:var(--mono);font-size:.92em}
code{color:var(--ink);background:var(--plate-2);border:1px solid var(--line);border-radius:3px;padding:0 .3em;white-space:nowrap}
em{font-style:italic}
strong{font-weight:650}
[hidden]{display:none !important}

.sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip{position:absolute;left:-999px;top:8px;z-index:20;background:var(--accent);color:#04141a;padding:8px 12px;border:0;border-radius:4px;font:600 13px var(--mono)}
.skip:focus{left:8px}

.wrap{width:100%;max-width:1380px;margin-inline:auto;padding-inline:var(--gutter)}
@media (min-width:700px){:root{--gutter:24px}}
@media (min-width:1200px){:root{--gutter:32px}}

.dim{color:var(--ink-faint);font-weight:400}
.amber{color:var(--amber)}
.up{color:var(--up)}
.down{color:var(--down)}
.fine{font-size:12.5px;line-height:1.55;color:var(--ink-faint);margin-top:10px;max-width:96ch}
.fine strong{color:var(--ink-dim)}
.fine.mono{font-family:var(--mono);font-size:12px;color:var(--ink-dim);max-width:none;overflow-wrap:anywhere}
.sub-h{font:500 11px/1.4 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);margin-top:22px}
.prose{color:var(--ink-dim);max-width:92ch}
.prose strong,.prose em{color:var(--ink)}
.prose.tight{font-size:14px;line-height:1.58;margin-bottom:14px}
.caption{font-size:13px;color:var(--ink-dim);margin-top:10px}
.caption em{color:var(--ink);font-style:normal;font-weight:600}

/* ------------------------------------------------------------------ masthead */
.mast{padding:22px 0 6px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(11,13,18,.92),rgba(6,7,10,.0))}
.mast-row{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:14px 24px}
.brand{display:flex;align-items:center;gap:14px;min-width:0}
.mark{flex:none}
.mark-ring{stroke:var(--ink-faint)}
.mark-dart{fill:var(--accent)}
.eyebrow{font:500 11px/1.4 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint)}
h1{font-family:var(--serif);font-weight:400;font-size:clamp(34px,5.2vw,56px);line-height:1.04;letter-spacing:-.01em}
.mast-body{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;margin-top:10px}
@media (min-width:1000px){.mast-body{grid-template-columns:minmax(0,1.62fr) minmax(0,1fr);gap:32px;align-items:end}}
.mast-copy{min-width:0}
.tagline{font-family:var(--serif);font-style:italic;font-size:clamp(18px,2.2vw,22px);color:var(--ink-dim)}
.lede{margin-top:8px;max-width:88ch;color:var(--ink-dim);font-size:15px;line-height:1.58}
.lede em{color:var(--ink);font-style:normal;font-weight:600}
.mast-status{display:flex;flex-wrap:wrap;gap:8px;align-items:center}

.chip{display:inline-flex;align-items:center;gap:8px;font:500 11.5px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;
  padding:8px 11px;border:1px solid var(--line-2);border-radius:999px;background:var(--plate);color:var(--ink-dim);white-space:nowrap}
.chip .dot{width:8px;height:8px;border-radius:50%;background:var(--ink-faint);flex:none}
.chip-paper{color:var(--ink);border-color:var(--ink-faint)}
.chip-conn[data-state="live"]{color:var(--ink);border-color:rgba(111,220,166,.45)}
.chip-conn[data-state="live"] .dot{background:var(--up);animation:pulse 2.2s ease-in-out infinite}
.chip-conn[data-state="starting"] .dot,.chip-conn[data-state="connecting"] .dot,.chip-conn[data-state="reconnecting"] .dot{background:var(--ink-dim);animation:pulse 1.2s ease-in-out infinite}
.chip-conn[data-state="stalled"]{border-color:rgba(240,188,95,.5)}
.chip-conn[data-state="stalled"] .dot{background:var(--amber)}
.chip-conn[data-state="offline"]{color:var(--ink);border-color:rgba(255,138,138,.55)}
.chip-conn[data-state="offline"] .dot{background:var(--down)}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}

.paper-strip{padding:10px 14px;border:1px solid var(--line-2);border-left:3px solid var(--ink-dim);border-radius:4px;
  background:var(--plate);font-size:13.5px;color:var(--ink-dim);max-width:96ch}
.paper-strip strong{color:var(--ink);font-family:var(--mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;margin-right:4px}
@media (min-width:1000px){.paper-strip strong{display:block;margin:0 0 3px}}

.mast-foot{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 28px;margin-top:14px;padding-top:9px;border-top:1px solid var(--line)}
.jump{display:flex;flex-wrap:wrap;gap:4px 16px;font:500 12px/1.5 var(--mono);letter-spacing:.04em}
.jump a{color:var(--ink-dim);border-bottom-color:transparent;padding:2px 0}
.jump a:hover{color:var(--accent);border-bottom-color:var(--accent)}

.sysline{display:flex;flex-wrap:wrap;gap:2px 18px;padding:2px 0 6px;font:400 12px/1.5 var(--mono);color:var(--ink-dim)}
/* on a phone the masthead gets out of the way: the section links become one swipeable row and the status line keeps its essentials */
@media (max-width:560px){
  .mast{padding-top:16px}
  .lede{font-size:14.5px}
  .mast-foot{display:block;margin-top:12px}
  .jump{flex-wrap:nowrap;overflow-x:auto;white-space:nowrap;scrollbar-width:none;margin-inline:calc(var(--gutter) * -1);padding-inline:var(--gutter);
    -webkit-mask-image:linear-gradient(90deg,#000 86%,transparent);mask-image:linear-gradient(90deg,#000 86%,transparent)}
  .jump::-webkit-scrollbar{display:none}
  .jump a{flex:none;padding:6px 0}
  .sysline{padding-top:4px}
  .sys-extra{display:none}
}
.sysline .k{color:var(--ink-faint);margin-right:4px}
.sysline .v{color:var(--ink);font-variant-numeric:tabular-nums}

/* ------------------------------------------------------------------ banner */
.banner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;margin-top:16px;
  padding:12px 16px;border:1px solid var(--line-2);border-left-width:3px;border-radius:4px;background:var(--plate)}
.banner[data-state="offline"]{border-left-color:var(--down)}
.banner[data-state="starting"],.banner[data-state="connecting"],.banner[data-state="reconnecting"]{border-left-color:var(--ink-dim)}
.banner[data-state="stalled"]{border-left-color:var(--amber)}
.banner-body{min-width:0;flex:1 1 320px}
.banner-title{font:600 12.5px/1.4 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink)}
.banner-text{font-size:13.5px;color:var(--ink-dim);margin-top:3px;overflow-wrap:anywhere}

.btn{font:500 12px/1 var(--mono);letter-spacing:.04em;color:var(--ink-dim);background:var(--plate-2);border:1px solid var(--line-2);
  border-radius:4px;padding:8px 11px;cursor:pointer;white-space:nowrap}
.btn:hover{color:var(--ink);border-color:var(--ink-faint)}
.btn[aria-pressed="true"]{color:#04141a;background:var(--accent);border-color:var(--accent)}
.seg{display:inline-flex;gap:0}
.seg .btn{border-radius:0}
.seg .btn:first-child{border-radius:4px 0 0 4px}
.seg .btn:last-child{border-radius:0 4px 4px 0;margin-left:-1px}
.seg .btn:focus-visible{position:relative;z-index:1}

/* ------------------------------------------------------------------ plates */
main{padding-top:18px;padding-bottom:40px;display:grid;gap:16px}
main > *{min-width:0}
.plate{background:var(--plate);border:1px solid var(--line);border-radius:var(--radius);padding:16px;min-width:0}
@media (min-width:700px){.plate{padding:20px 22px 22px}}
.plate-h{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 16px;margin-bottom:14px;
  padding-bottom:10px;border-bottom:1px solid var(--line)}
.plate-h h2{font:600 13px/1.4 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
.plate-h .idx{color:var(--ink-faint);margin-right:8px;font-weight:400}
.plate-h .vs{color:var(--ink-faint);font-weight:400;text-transform:none;letter-spacing:.04em}
.plate-note{font:400 12px/1.4 var(--mono);color:var(--ink-faint);font-variant-numeric:tabular-nums;text-align:right}
.subh{font:600 11.5px/1.4 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-dim);margin:22px 0 10px}

.stage{display:grid;gap:16px;grid-template-columns:minmax(0,1fr)}
@media (min-width:1120px){.stage{grid-template-columns:minmax(0,1.22fr) minmax(0,1fr);align-items:start}}
.pair{display:grid;gap:16px;grid-template-columns:minmax(0,1fr)}
@media (min-width:1000px){.pair{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);align-items:start}}

/* ------------------------------------------------------------------ the room */
.room-wrap{position:relative;border:1px solid var(--line-2);border-radius:4px;overflow:hidden;background:#050609}
@media (max-width:560px){.room-wrap{margin-inline:-16px;border-left:0;border-right:0;border-radius:0}}   /* on a phone the room runs edge to edge of its plate */
#room-canvas{display:block;width:100%;aspect-ratio:948 / 494}
.room-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:16px;
  background:rgba(5,6,9,.74);color:var(--ink);font:500 13px/1.5 var(--mono);letter-spacing:.03em}
.is-stale #room-canvas,.is-stale #hz-canvas{filter:grayscale(.6) brightness(.72)}
/* numbers that are no longer live say so with their weight as well as with the banner */
.is-stale .tile-eq,.is-stale .tile-ret,.is-stale .gaps dd,.is-stale .readouts dd,.is-stale .counters dd,.is-stale .kv dd,.is-stale .hz-val,.is-stale .verdict{opacity:.6}
.is-stale #chart-canvas,.is-stale .meter{opacity:.6}
.visitbar{height:2px;background:var(--line);margin-top:6px;border-radius:2px;overflow:hidden}
.visitbar span{display:block;height:100%;width:0;background:var(--ink-faint)}

.keyrow{display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:10px;font:400 12px/1.4 var(--mono);color:var(--ink-dim)}
.keyrow li{display:inline-flex;align-items:center;gap:7px}
.key{display:inline-block;flex:none}
.key-look{width:7px;height:7px;border-radius:50%;background:var(--fly)}
.key-eye{width:16px;height:11px;border:1px solid var(--accent);opacity:.8}
.key-stop{width:11px;height:11px;border-radius:50%;border:2px solid var(--amber)}
.key-commit{width:9px;height:9px;background:var(--ink);transform:rotate(45deg);outline:2px solid var(--amber);outline-offset:1px;margin:0 3px}

.look{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.verdict{font:500 13.5px/1.5 var(--mono);color:var(--ink-dim);padding:9px 12px;border:1px solid var(--line);border-left:3px solid var(--line-2);
  border-radius:4px;background:var(--plate-2);min-height:40px;transition:border-color .25s,color .25s}
.verdict[data-kind="stop"]{border-left-color:var(--amber);color:var(--ink)}
.verdict[data-kind="commit"]{border-color:var(--amber);border-left-color:var(--amber);color:var(--ink);background:rgba(240,188,95,.08)}
.verdict[data-kind="oncard"]{border-left-color:var(--fly)}

.readouts{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:0;margin-top:12px;background:var(--plate);
  border:1px solid var(--line);border-radius:4px;overflow:hidden}
/* cells draw their own hairlines and overhang the clipped container by 1px, so a part-filled grid has no grey filler and no doubled edge;
   the cells stay transparent so a neighbour never paints over the hairline */
.readouts > div,.counters > div,.kv > div{border-right:1px solid var(--line);border-bottom:1px solid var(--line);margin:0 -1px -1px 0}
.readouts > div{padding:9px 11px;min-width:0}
.readouts dt,.counters dt,.kv dt,.gaps dt{font:500 10.5px/1.35 var(--mono);letter-spacing:.11em;text-transform:uppercase;color:var(--ink-faint)}
.readouts dd{font:500 15px/1.4 var(--mono);font-variant-numeric:tabular-nums;color:var(--ink);margin-top:3px;overflow-wrap:anywhere}
.readouts dd .dim{font-size:12px}
.arith{font:400 12px/1.5 var(--mono);color:var(--ink-faint);margin-top:8px;overflow-wrap:anywhere}

.hz{margin-top:14px}
.hz-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:2px 14px;font:500 12.5px/1.5 var(--mono);color:var(--ink)}
.hz-val{font-variant-numeric:tabular-nums}
.hz-val .amber{font-size:15px}
.meter{position:relative;height:10px;margin-top:6px;border-radius:2px;background:#1a1712;border:1px solid var(--line-2);overflow:hidden}
.meter-fill{position:absolute;left:0;top:0;bottom:0;width:0;background:#6b5a36;transition:width .25s ease-out}
.meter[data-over="true"] .meter-fill{background:var(--amber)}
.meter-tick{position:absolute;top:-1px;bottom:-1px;width:2px;background:var(--ink);left:50%}
.hz-strip{display:block;width:100%;height:64px;margin-top:8px}

/* ------------------------------------------------------------------ scoreboard */
.sw{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:8px;vertical-align:baseline;flex:none}
.sw-fly{background:var(--fly)}.sw-rand{background:var(--rand)}.sw-hold{background:var(--hold)}
.tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:4px;overflow:hidden}
.tile{background:var(--plate);padding:13px 13px 12px;min-width:0;border-top:3px solid transparent}
.tile[data-series="fly"]{border-top-color:var(--fly)}
.tile[data-series="random"]{border-top-color:var(--rand)}
.tile[data-series="hold"]{border-top-color:var(--hold)}
.tile h3{font:600 12.5px/1.3 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink);display:flex;align-items:center}
.tile-sub{font-size:12px;color:var(--ink-faint);margin-top:2px;line-height:1.35}
.tile-eq{font:500 clamp(17px,1.55vw,22px)/1.2 var(--mono);color:var(--ink);margin-top:10px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.tile-ret{font:500 14px/1.3 var(--mono);margin-top:3px;font-variant-numeric:tabular-nums;color:var(--ink-dim)}
.tile-ret .lbl{color:var(--ink-faint);font-size:11.5px;font-weight:400}
.tile-meta{font:400 11.5px/1.45 var(--mono);color:var(--ink-faint);margin-top:8px;overflow-wrap:anywhere}
@media (max-width:560px){
  .tiles{grid-template-columns:minmax(0,1fr)}
  .tile{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:12px;border-top:0;border-left:3px solid transparent}
  .tile[data-series="fly"]{border-left-color:var(--fly)}
  .tile[data-series="random"]{border-left-color:var(--rand)}
  .tile[data-series="hold"]{border-left-color:var(--hold)}
  .tile h3{grid-column:1}.tile-sub{grid-column:1}
  .tile-eq{grid-column:2;grid-row:1;margin-top:0;text-align:right;font-size:17px}
  .tile-ret{grid-column:2;grid-row:2;text-align:right}
  .tile-meta{grid-column:1 / -1}
}
.gaps{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;margin-top:12px;background:var(--line);border:1px solid var(--line);border-radius:4px;overflow:hidden}
.gaps > div{background:var(--plate);padding:9px 12px;min-width:0}
.gaps dd{font:500 14px/1.4 var(--mono);font-variant-numeric:tabular-nums;margin-top:3px;overflow-wrap:anywhere}
.gaps dd .dim{font-size:12px}
@media (max-width:420px){.gaps{grid-template-columns:minmax(0,1fr)}}

.chart-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;margin-top:18px}
.legend{display:flex;flex-wrap:wrap;gap:4px 16px;font:500 12px/1.4 var(--mono);color:var(--ink-dim)}
.legend li{display:inline-flex;align-items:center;gap:7px}
.lk{display:inline-block;width:18px;height:0;border-top:2px solid var(--ink-faint);flex:none}
.lk-fly{border-top-color:var(--fly);border-top-width:3px}
.lk-rand{border-top-color:var(--rand)}
.lk-hold{border-top-color:var(--hold)}
.lk-start{border-top:1px dashed var(--ink-faint)}
.chart-wrap{position:relative;margin-top:10px;border:1px solid var(--line);border-radius:4px;background:var(--plate-2);overflow:hidden}
#chart-canvas{display:block;width:100%;height:300px;border-radius:4px;touch-action:pan-y}
@media (max-width:560px){#chart-canvas{height:250px}}
.tip{position:absolute;z-index:3;pointer-events:none;min-width:170px;max-width:230px;padding:8px 10px;border:1px solid var(--line-2);border-radius:4px;
  background:rgba(6,7,10,.95);font:400 12px/1.5 var(--mono);color:var(--ink-dim);box-shadow:0 6px 22px rgba(0,0,0,.5)}
.tip .tip-t{color:var(--ink-faint);font-size:11px;margin-bottom:4px}
.tip .tip-r{display:grid;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;column-gap:4px}
.tip .tip-r b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.tip .tip-r i{font-style:normal;color:var(--ink-faint);font-size:11px;grid-column:2 / -1;text-align:right;font-variant-numeric:tabular-nums}
.tip .lk{width:14px}

.tableview{margin-top:12px}
.tableview summary{cursor:pointer;font:500 12px/1.5 var(--mono);color:var(--ink-dim);letter-spacing:.04em;width:max-content;max-width:100%}
.tableview summary:hover{color:var(--ink)}
.tableview .scroll-x{max-height:260px;overflow:auto;margin-top:8px;border:1px solid var(--line);border-radius:4px}

/* ------------------------------------------------------------------ counters */
.counters{display:grid;grid-template-columns:repeat(auto-fill,minmax(138px,1fr));gap:0;background:var(--plate);border:1px solid var(--line);border-radius:4px;overflow:hidden}
.counters > div{padding:11px 13px;min-width:0}
.counters > div.hl{background:rgba(240,188,95,.05)}
.counters dd{font:500 19px/1.3 var(--mono);font-variant-numeric:tabular-nums;color:var(--ink);margin-top:3px;overflow-wrap:anywhere}
.counters dd.sub{font-size:12px;font-weight:400;color:var(--ink-dim);margin-top:1px}

/* ------------------------------------------------------------------ tables, book */
.scroll-x{overflow-x:auto;max-width:100%}
table.data{width:100%;border-collapse:collapse;font:400 12.5px/1.45 var(--mono);font-variant-numeric:tabular-nums}
table.data thead th{font:500 10.5px/1.35 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);text-align:left;
  padding:8px 10px;border-bottom:1px solid var(--line-2);background:var(--plate);position:sticky;top:0;vertical-align:bottom}
table.data td,table.data tbody th{padding:8px 10px;border-bottom:1px solid var(--line);color:var(--ink);vertical-align:top}
table.data tbody th{font-weight:600;text-align:left;letter-spacing:.03em;white-space:nowrap}
#curve-table tbody th{white-space:normal;font-weight:400;color:var(--ink-dim)}
table.data tbody th .sub{display:block;font-weight:400;white-space:normal;letter-spacing:0;color:var(--ink-faint);font-size:11.5px}
table.data tbody th .sub.name{font-family:var(--sans);font-size:12.5px;color:var(--ink-dim)}
@media (min-width:521px){table.data tbody th .sub.name{white-space:nowrap}}
table.data tr:last-child td,table.data tr:last-child th{border-bottom:0}
table.data .num{text-align:right}
table.data td.num{white-space:nowrap}
table.data td.num.wrap{white-space:normal}
table.data td.empty{color:var(--ink-faint);font-family:var(--sans);font-size:13px;text-align:left;white-space:normal;padding:12px 10px}
table.data td .sub{display:block;color:var(--ink-faint);font-size:11.5px;white-space:nowrap}
table.data .name{font-family:var(--sans);color:var(--ink-dim);font-size:13px}
table.data .addr{overflow-wrap:anywhere;word-break:break-all;color:var(--ink-dim);min-width:12ch}
.rules-table td{font-family:var(--sans);font-size:13.5px;color:var(--ink-dim)}
.rules-table td strong{color:var(--ink)}
.rules-table td:nth-child(2){font-family:var(--mono);white-space:nowrap}
@media (max-width:520px){
  table.data{font-size:11.5px}
  table.data thead th,table.data tbody th,table.data td{padding:7px 4px}
  table.data tr > :first-child{padding-left:2px}
  table.data tr > :last-child{padding-right:2px}
  table.data thead th{letter-spacing:.04em;font-size:10px}
}

.books{display:grid;gap:22px;grid-template-columns:minmax(0,1fr)}
@media (min-width:920px){.books{grid-template-columns:repeat(2,minmax(0,1fr));gap:28px}}
.bookcol{min-width:0}
.bookcol h3{font:600 12.5px/1.4 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink);display:flex;align-items:center;margin-bottom:10px}
.kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:0;background:var(--plate);border:1px solid var(--line);border-radius:4px;overflow:hidden;margin-bottom:12px}
.kv > div{padding:8px 11px;min-width:0}
.kv dd{font:500 14px/1.4 var(--mono);font-variant-numeric:tabular-nums;color:var(--ink);margin-top:2px;overflow-wrap:anywhere}
.kv-wide{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));margin-bottom:0}
.kv-wide dt{text-transform:none;letter-spacing:.02em;font-size:11.5px}
.kv-wide dt .dim{display:block;font-size:11px}

/* ------------------------------------------------------------------ tape */
.tape-cols{display:none}
.tape{border:1px solid var(--line);border-radius:4px;overflow:hidden;max-height:min(560px,62vh);overflow-y:auto}   /* never taller than the screen: a nested scroller must leave page to grab */
.tape li{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;padding:11px 12px;border-bottom:1px solid var(--line);font:400 12.5px/1.5 var(--mono);color:var(--ink-dim);min-width:0}
.tape li:last-child{border-bottom:0}
.tape li.empty,.lessons li.empty{font-family:var(--sans);font-size:13.5px;color:var(--ink-faint);display:block}
.tape li.fresh{animation:fresh 2.4s ease-out 1}
@keyframes fresh{0%{background:rgba(240,188,95,.16)}100%{background:transparent}}
.tp-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px}
.tp-time{color:var(--ink-faint);font-variant-numeric:tabular-nums}
.tp-sym{color:var(--ink);font-weight:600;letter-spacing:.04em}
.tp-age{color:var(--ink-faint)}
.tp-age.stale{color:var(--amber)}
.tp-side{min-width:0;overflow-wrap:anywhere}
.tp-side .who{display:inline-flex;align-items:center;color:var(--ink-faint);font-size:11px;letter-spacing:.1em;text-transform:uppercase;margin-right:8px}
.tp-side .who .sw{width:8px;height:8px;margin-right:6px}
.tp-drive{font-variant-numeric:tabular-nums;color:var(--ink)}
.tp-arrow{color:var(--ink-faint);margin:0 6px}
.tag{display:inline-block;font:600 10.5px/1 var(--mono);letter-spacing:.12em;padding:4px 6px;border-radius:3px;border:1px solid var(--line-2);color:var(--ink);margin-right:7px;vertical-align:1px}
.tag-buy{border-color:rgba(111,220,166,.55);color:var(--up)}
.tag-sell{border-color:rgba(255,138,138,.55);color:var(--down)}
.tag-pass{border-color:var(--line-2);color:var(--ink-dim)}
.tp-detail{color:var(--ink);font-variant-numeric:tabular-nums}
.tp-reason{color:var(--ink-dim);font-family:var(--sans);font-size:13px}
@media (min-width:980px){
  .tape-cols{display:grid;grid-template-columns:92px 60px minmax(0,1fr) minmax(0,1fr) 138px;gap:14px;padding:0 12px 8px;
    font:500 10.5px/1.35 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}
  .tape li{grid-template-columns:92px 60px minmax(0,1fr) minmax(0,1fr) 138px;gap:14px;align-items:start}
  .tape li.empty{display:block}
  .tp-head{display:contents}
  .tp-side .who{display:none}
  .tp-age{text-align:right}
}

/* ------------------------------------------------------------------ lessons, prices */
.lessons{border:1px solid var(--line);border-radius:4px;overflow:hidden;max-height:min(330px,50vh);overflow-y:auto}
.lessons li{display:flex;flex-wrap:wrap;align-items:baseline;gap:3px 12px;padding:9px 12px;border-bottom:1px solid var(--line);font:400 12.5px/1.5 var(--mono);color:var(--ink-dim)}
.lessons li:last-child{border-bottom:0}
.lessons li.fresh{animation:fresh 2.4s ease-out 1}
.ls-kind{font-weight:600;letter-spacing:.1em;text-transform:uppercase;font-size:11px;padding:3px 6px;border-radius:3px;border:1px solid}
.ls-kind.sugar{color:var(--up);border-color:rgba(111,220,166,.55)}
.ls-kind.shock{color:var(--down);border-color:rgba(255,138,138,.55)}
.ls-sym{color:var(--ink);font-weight:600}
.ls-time{color:var(--ink-faint)}
.lessons b{color:var(--ink);font-weight:500;font-variant-numeric:tabular-nums}

.market{font:500 13px/1.5 var(--mono);padding:9px 12px;border:1px solid var(--line);border-left:3px solid var(--line-2);border-radius:4px;background:var(--plate-2);color:var(--ink-dim);margin-bottom:12px}
.market[data-state="open"]{border-left-color:var(--up);color:var(--ink)}
.market[data-state="closed"]{border-left-color:var(--amber);color:var(--ink)}
.market[data-state="mixed"]{border-left-color:var(--amber)}
.px-stale{color:var(--amber)}

/* ------------------------------------------------------------------ rules, honesty */
.rules{counter-reset:rule;display:block}
/* two newspaper columns on a wide screen: the steps read down the left, then down the right */
@media (min-width:1000px){.rules{columns:2;column-gap:40px}}
.rules > li{counter-increment:rule;position:relative;padding:14px 0 14px 44px;border-top:1px solid var(--line);min-width:0;break-inside:avoid}
.rules > li::before{content:counter(rule,decimal-leading-zero);position:absolute;left:0;top:15px;font:500 12px/1.5 var(--mono);color:var(--ink-faint);letter-spacing:.08em}
.rules h3{font:600 15px/1.4 var(--sans);color:var(--ink);margin-bottom:4px}
.rules p{color:var(--ink-dim);font-size:14.5px;max-width:74ch}
.rules p + p{margin-top:6px}
.rules p strong{color:var(--ink)}
.formula{display:block;color:var(--ink);background:var(--plate-2);border:1px solid var(--line);border-left:3px solid var(--fly);border-radius:4px;
  padding:9px 12px;margin:6px 0;font-size:13px;line-height:1.55;overflow-wrap:anywhere}
.rules .scroll-x{margin-top:8px;border:1px solid var(--line);border-radius:4px}

.plate-warn{border-color:var(--line-2)}
.honest{display:block}
@media (min-width:1100px){.honest{columns:2;column-gap:40px}}
.honest li{position:relative;padding:12px 0 12px 22px;border-top:1px solid var(--line);color:var(--ink-dim);font-size:14.5px;max-width:110ch;break-inside:avoid}
.honest li::before{content:"";position:absolute;left:2px;top:22px;width:8px;height:2px;background:var(--ink-faint)}
.honest strong{color:var(--ink)}
.live-inline{font-family:var(--mono);font-size:12.5px;color:var(--ink)}
.live-inline span{color:var(--amber)}

/* ------------------------------------------------------------------ footer */
.foot{border-top:1px solid var(--line);padding:24px 0 48px;color:var(--ink-dim);font-size:13.5px}
.foot p{max-width:100ch}
.foot strong{color:var(--ink)}
.foot code{white-space:normal;overflow-wrap:anywhere}
.noscript{margin:0;padding:14px var(--gutter);background:var(--plate-2);border-top:1px solid var(--line-2);color:var(--ink);font-size:14px}

/* ------------------------------------------------------------------ motion */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important}
}
@media (forced-colors:active){
  .sw,.key,.lk{forced-color-adjust:none}
}


/* ---- site bar (this page is a room on flybrain.online) ---------------------------------- */
.topbar{position:sticky;top:0;z-index:40;border-bottom:1px solid var(--line);
  background:rgba(6,7,10,.93);backdrop-filter:blur(6px)}
.topbar .tbin{display:flex;align-items:center;gap:18px;padding:10px 0}
.topbar a{text-decoration:none;border-bottom:0}
.topbar .home{font-family:var(--mono);font-size:13px;letter-spacing:.22em;color:var(--ink)}
.topbar .home:hover{color:var(--accent)}
.topbar .dim{color:var(--ink-faint)}
.topbar .here{font-family:var(--mono);font-size:11.5px;letter-spacing:.15em;
  text-transform:uppercase;color:var(--ink-dim)}
.topnav{display:flex;gap:22px;margin-left:auto;overflow-x:auto;scrollbar-width:none}
.topnav::-webkit-scrollbar{display:none}
.topnav a{font-family:var(--mono);font-size:11.5px;letter-spacing:.15em;text-transform:uppercase;
  color:var(--ink-faint);white-space:nowrap}
.topnav a:hover,.topnav a[aria-current="page"]{color:var(--accent)}
@media (max-width:640px){.topbar .tbin{gap:14px}.topnav{gap:16px}}
