/* RITUAL FOUNDRY v5 (2026-08-10): the WAVE FAMILY palette. One page. Retrieval-first.
   The blacks are the desk's abyss/deep/ink, the red is the tide, blue is the wordmark's
   sky, gold is the desk's human-hands accent. Var NAMES kept · every rule below retunes
   from this one block, exactly the desk's own one-retune-point law. Lane jewels in
   tree-data.js are NOT this palette and stay untouched (validated set). */
:root{
  --bg:#060607;--panel:#0e0e10;--card:#121215;--card2:#17171b;--blk:#040405;
  --tide-rgb:255,31,47;
  --line:rgba(var(--tide-rgb),.12);--line2:rgba(var(--tide-rgb),.22);
  --ink:#f4f4f3;--ink2:#cfcfce;--dim:#8e8e93;--faint:#525257;--faint2:#525257;
  --red:#ff1f2f;--red-hi:#ff4757;--red-dim:rgba(var(--tide-rgb),.15);
  --sky:#5e9fd8;--gold:#e6b45c;
  --ok:#4EA96A;--warn:#e6b45c;
  --font:"Inter",-apple-system,BlinkMacSystemFont,"Helvetica Neue",sans-serif;
  --disp:"Space Grotesk",var(--font);
  --mono:"IBM Plex Mono",ui-monospace,Menlo,monospace;
}
*{margin:0;padding:0;box-sizing:border-box}
html{color-scheme:dark;scroll-behavior:smooth}
body{background:var(--bg);color:var(--ink2);font-family:var(--font);font-size:13px;line-height:1.55;-webkit-font-smoothing:antialiased}
#net{position:fixed;top:0;left:0;width:100%;height:130vh;z-index:0;pointer-events:none;will-change:transform}
.app{position:relative;z-index:1}
::selection{background:var(--red);color:#FFF}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;color:inherit}
img{max-width:100%;display:block}
.app{min-height:100vh;display:flex;flex-direction:column}

/* chrome */
.topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:24px;height:50px;padding:0 20px;
  background:rgba(9,9,10,.95);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.wordmark{font-family:var(--mono);font-size:12px;letter-spacing:.24em;color:var(--ink);display:flex;align-items:center;gap:10px;white-space:nowrap}
.wordmark b{color:var(--red);font-weight:500}
.mark{width:13px;height:13px;display:inline-block;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3ClinearGradient id='wf' x1='0' y1='0' x2='0' y2='1'%3E%3Cstop offset='0' stop-color='%23ff1f2f'/%3E%3Cstop offset='.62' stop-color='%23ff1f2f'/%3E%3Cstop offset='.63' stop-color='%235e9fd8'/%3E%3Cstop offset='1' stop-color='%235e9fd8'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M16 3C20.5 9.5 25 12.5 25 19a9 9 0 1 1-18 0C7 12.5 11.5 9.5 16 3Z' fill='url(%23wf)'/%3E%3Cpath d='M16 14c2.2 3 4 4.2 4 6.8a4 4 0 1 1-8 0C12 18.2 13.8 17 16 14Z' fill='%23140E0B'/%3E%3C/svg%3E") center/contain no-repeat}
.topnav{display:flex;gap:16px}
.topnav a{font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);padding:3px 0;border-bottom:2px solid transparent}
.topnav a:hover{color:var(--ink);border-bottom-color:var(--red)}
.topsearch{margin-left:auto;display:flex;align-items:center;gap:10px}
.topsearch input{width:230px;background:rgba(236,234,232,.07);border:none;border-radius:4px;color:var(--ink);
  font:12.5px var(--font);padding:6px 10px;outline:none}
.topsearch input:focus{box-shadow:0 0 0 1.5px var(--red)}
.topsearch input::placeholder{color:var(--dim)}
.count{font-family:var(--mono);font-size:10px;color:var(--dim);letter-spacing:.06em;white-space:nowrap}
.view{flex:1;width:100%;max-width:1440px;margin:0 auto;padding:24px 22px 80px}
.foot{padding:10px 22px;border-top:1px solid var(--line);font-family:var(--mono);font-size:9.5px;color:var(--dim);text-align:right}

/* primitives */
.lbl{font-family:var(--mono);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
.chip{font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;padding:2px 7px;border-radius:3px;
  color:var(--ink2);background:rgba(236,234,232,.08)}
.chip.solid{background:var(--ink);color:var(--bg)}
.btn{background:var(--red);color:#FFF;border:1px solid var(--red);border-radius:4px;font-size:12.5px;font-weight:600;padding:8px 14px}
.btn:hover{background:var(--red-hi);border-color:var(--red-hi)}
.btn.ghost{background:rgba(236,234,232,.08);color:var(--ink2);border:none;font-weight:500}
.btn.ghost:hover{color:var(--ink);background:rgba(229,48,28,.22)}
.btn.mini{font-size:10px;padding:2.5px 8px}
.btn.big{width:100%;padding:10px 16px;font-size:13px}
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(8px);background:var(--red);color:#FFF;
  font-size:12.5px;font-weight:600;padding:9px 18px;border-radius:5px;opacity:0;pointer-events:none;transition:all .2s;z-index:99}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.sym{flex:none}
.sym .s-ink{stroke:#D4D2CF;stroke-width:1.6;fill:none;stroke-linecap:square}
.sym .s-soft{stroke:rgba(212,210,207,.42);stroke-width:1.2;fill:none;stroke-linecap:square}

/* section heads */
.sec{margin:0 0 34px}
.sechead{display:flex;align-items:center;gap:12px;margin-bottom:14px;scroll-margin-top:70px}
.sechead .bar{width:14px;height:14px;background:var(--red);transform:rotate(45deg) scale(.62)}
.sechead h2{font-family:var(--disp);font-size:20px;font-weight:700;letter-spacing:-.01em;color:var(--ink)}
.sechead .n{font-family:var(--mono);font-size:10px;color:var(--dim)}
.sechead:after{content:"";flex:1;height:1px;background:var(--line)}

/* pipelines: frameless */
.pipe{margin-bottom:34px}
.pipe .pipehead2,.pipe .graphwrap{cursor:pointer}
.pipehead2{display:flex;align-items:center;gap:12px;padding:0 2px 4px}
.pipehead2 .t{font-family:var(--disp);font-size:15px;font-weight:700;color:var(--ink)}
.pipehead2 .k{font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--red)}
.pipehead2 .right{margin-left:auto;display:flex;gap:16px;align-items:center}
.pipehead2 .n{font-family:var(--mono);font-size:9.5px;color:var(--dim)}
/* plain-text controls (no boxed buttons law): strip the UA button chrome that
   made these render as dark pills, and lift the ink from dim to legible */
.tbtn{appearance:none;-webkit-appearance:none;background:none;border:none;padding:0;
  font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink2);cursor:pointer}
.tbtn:hover{color:var(--red-hi)}
.tbtn.on{color:var(--red-hi)}
.graphwrap{position:relative}
.graphwrap svg{display:block;position:relative}
.gnode .nbg{fill:rgba(18,18,20,.82)}
.gnode{cursor:pointer}
.gnode .nbg{fill:var(--card);stroke:var(--line2);stroke-width:1}
.gnode:hover .nbg{stroke:var(--red)}
.gnode .nt{fill:var(--ink);font-family:var(--disp);font-size:12.5px;font-weight:600}
.gnode .nd{font-family:var(--mono);font-size:8px;letter-spacing:.14em;fill:var(--dim)}
.gnode .nn{font-family:var(--mono);font-size:9.5px;fill:var(--red)}
.gedge{stroke:rgba(229,48,28,.6);stroke-width:1.3;fill:none;stroke-dasharray:7 9;animation:flowDash .9s linear infinite}
@keyframes flowDash{to{stroke-dashoffset:-16}}
@media (prefers-reduced-motion: reduce){.gedge{animation:none}#net{display:none}}
.gpill{fill:#0C0C0E;stroke:rgba(236,234,232,.14)}
.gpilltext{font-family:var(--mono);font-size:8.5px;letter-spacing:.04em;fill:var(--dim)}
.pipehead2 .btn.on{border-color:var(--red);color:var(--red-hi)}
.pipehead2 a.t:hover{color:var(--red-hi)}
/* pipeline detail */
.pdhead{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.pdhead h1{font-family:var(--disp);font-size:28px;font-weight:700;letter-spacing:-.02em;color:var(--ink);line-height:1.05;margin-bottom:6px}
.pdhead .right{margin-left:auto;display:flex;gap:8px;align-items:center}
.pdintro{margin:18px 0 26px;max-width:88ch}
.pdintro p{font-size:14px;line-height:1.7;color:var(--ink2);margin-bottom:11px}
.pdstages{border-top:1px solid var(--line2)}
.pdstage{display:grid;grid-template-columns:40px minmax(0,1fr);gap:12px;padding:14px 2px;border-bottom:1px solid var(--line)}
.pdstage .pdn{font-family:var(--mono);font-size:11px;color:var(--red);padding-top:3px}
.pdtitle{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.pdtitle a{font-family:var(--disp);font-size:15.5px;font-weight:700;color:var(--ink)}
.pdtitle a:hover{color:var(--red-hi)}
.pdio{font-family:var(--mono);font-size:9.5px;letter-spacing:.04em;color:var(--dim);border-radius:3px;padding:2px 7px;background:rgba(236,234,232,.07)}
.pdrole{font-size:13px;line-height:1.62;color:var(--ink2);max-width:86ch}
/* full-screen pipeline dossier */
.ovl{position:fixed;inset:0;z-index:80;background:rgba(9,9,10,.95);backdrop-filter:blur(8px);display:flex;flex-direction:column;animation:ovl .16s ease}
@keyframes ovl{from{opacity:0}to{opacity:1}}
.ovlhead{display:flex;align-items:center;gap:14px;padding:11px 20px;border-bottom:1px solid var(--line2);background:rgba(9,9,10,.85);flex:none}
.ovltitle{font-family:var(--disp);font-size:20px;font-weight:700;color:var(--ink);line-height:1.1}
.ovlhead .right{margin-left:auto;display:flex;gap:8px;align-items:center}
.ovlbody{flex:1;overflow-y:auto;display:grid;grid-template-columns:212px minmax(0,1fr);gap:24px;padding:20px 22px 70px;max-width:1500px;margin:0 auto;width:100%}
.ovlrail{position:sticky;top:0;align-self:start;display:flex;flex-direction:column;gap:2px}
.ovlrail a{display:flex;gap:8px;font-family:var(--mono);font-size:10px;color:var(--dim);padding:3.5px 8px;border-left:2px solid var(--line);line-height:1.45;cursor:pointer}
.ovlrail a span{color:var(--red)}
.ovlrail a:hover{color:var(--ink);border-left-color:var(--red)}
.ovlmain{min-width:0}
.ostage{border-top:1px solid var(--line2);padding:15px 0 22px;scroll-margin-top:6px}
.oshead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.ostitle{font-family:var(--disp);font-size:16.5px;font-weight:700;color:var(--ink)}
.ostitle:hover{color:var(--red-hi)}
.osbtns{margin-left:auto;display:flex;gap:7px}
.ogrid{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,1fr);gap:16px;margin-top:11px;align-items:start}
.olaws{display:flex;flex-direction:column;gap:7px}
.olaw{background:rgba(20,20,22,.6);border-left:2.5px solid var(--line2);border-radius:5px;padding:8px 11px}
.olaw.MODEL{border-left-color:var(--red)} .olaw.TASTE{border-left-color:var(--warn)}
.olaw .lrow{display:flex;align-items:center;gap:8px}
.olaw .lnum{font-family:var(--mono);font-size:10px;color:var(--ink);letter-spacing:.06em}
.olaw .ltag{font-family:var(--mono);font-size:8.5px;letter-spacing:.1em;padding:1px 5px;border-radius:2px}
.olaw .ltag.MODEL{background:var(--red);color:#FFF}
.olaw .ltag.LIBRARY{border:1px solid var(--line2);color:var(--ink2)}
.olaw .ltag.TASTE{border:1px solid var(--warn);color:var(--warn)}
.olrule{font-size:12.5px;color:var(--ink);line-height:1.52;margin-top:5px}
.olkv{display:grid;grid-template-columns:50px 1fr;gap:2px 10px;margin-top:6px}
.olkv span{font-family:var(--mono);font-size:8px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);padding-top:2px}
.olkv em{font-style:normal;font-size:11px;color:var(--dim);line-height:1.45}
.otpl{position:sticky;top:0;background:rgba(5,5,6,.85);border-radius:6px;overflow:hidden}
.otplhead{padding:6px 12px;border-bottom:1px solid var(--line)}
.otpl pre{padding:12px 14px;font-family:var(--mono);font-size:10.5px;line-height:1.64;color:#DBD9D6;white-space:pre-wrap;word-break:break-word;max-height:46vh;overflow-y:auto}
@media (max-width:1100px){
  .ovlbody{grid-template-columns:1fr}
  .ovlrail{display:none}
  .ogrid{grid-template-columns:1fr}
  .otpl{position:static}
}
.briefdrawer{padding:8px 2px 4px}
.briefdrawer[hidden]{display:none}
.brow{display:grid;grid-template-columns:26px 210px 1fr;gap:12px;padding:4px 0;
  font-family:var(--mono);font-size:11px;line-height:1.55;align-items:baseline}
.brow .bn{color:var(--red)}
.brow a{color:var(--ink)}
.brow a:hover{color:var(--red-hi)}
.brow .bo{color:var(--dim)}
.brule{margin-top:9px;font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;color:var(--dim);text-transform:uppercase}
@media (max-width:900px){.brow{grid-template-columns:24px 1fr;} .brow .bo{grid-column:2}}

/* patterns grid */
.disc-sec{margin:0 0 20px}
.disc-sec .dsh{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.disc-sec .dsh .lbl{color:var(--ink2)}
.disc-sec .dsh .n{font-family:var(--mono);font-size:9.5px;color:var(--dim)}
.disc-sec .dsh:after{content:"";flex:1;height:1px;background:var(--line)}
.patgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:10px}
.pcard{display:flex;gap:13px;background:rgba(15,15,17,.72);border-radius:7px;padding:12px 14px}
.pcard:hover{background:rgba(24,24,27,.85);box-shadow:inset 2.5px 0 0 var(--red)}
.pcard .sym{margin-top:2px}
.pcard h3{font-family:var(--disp);font-size:15px;font-weight:600;color:var(--ink);letter-spacing:-.01em;line-height:1.2}
.pcard .ol{font-size:12px;color:var(--dim);line-height:1.5;margin:4px 0 7px}
.pcard .tmeta{display:flex;align-items:center;gap:11px;font-family:var(--mono);font-size:9px;letter-spacing:.06em;color:var(--dim)}
.pcard .tmeta b{color:var(--ink2);font-weight:500}
.empty{padding:40px 0;text-align:center;color:var(--dim);font-size:13px}

/* pattern detail */
.crumb{font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--dim);text-transform:uppercase;
  margin-bottom:14px;display:flex;gap:10px;align-items:center}
.crumb a:hover{color:var(--red-hi)}
.tool{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:24px;align-items:start}
.rightcol{display:flex;flex-direction:column;gap:12px;min-width:0}
.toolhero{margin-bottom:18px;max-width:840px}
.toolhero .titlerow{display:flex;align-items:center;gap:15px}
.toolhero h1{font-family:var(--disp);font-size:29px;font-weight:700;letter-spacing:-.02em;color:var(--ink);line-height:1.05}
.toolhero .ol{font-size:13.5px;color:var(--ink2);margin:8px 0 10px;max-width:62ch;line-height:1.55}
.herochips{display:flex;gap:7px;flex-wrap:wrap;align-items:center}
.runstrip{margin-top:10px;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.runstrip a{font-family:var(--mono);font-size:9.5px;letter-spacing:.06em;color:var(--ink2);
  border-radius:3px;padding:3px 8px;background:rgba(236,234,232,.08)}
.runstrip a:hover{color:var(--red-hi);background:rgba(229,48,28,.18)}
.runstrip a b{color:var(--red);font-weight:500}
.vpanel{background:rgba(15,15,17,.6);border-radius:8px;margin:0 0 14px;overflow:hidden}
.vhead{display:flex;align-items:center;gap:10px;padding:8px 14px;border-bottom:1px solid var(--line)}
.vhead .idx{font-family:var(--mono);font-size:10px;color:var(--red);letter-spacing:.1em}
.vhead .t{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink2)}
.vhead .meta{margin-left:auto;font-family:var(--mono);font-size:9.5px;color:var(--dim);letter-spacing:.06em;display:flex;gap:10px;align-items:center}
.vbody{padding:14px 16px}
.doc p{margin:0 0 10px;color:var(--ink2);max-width:76ch;font-size:13.5px;line-height:1.62}
.doc ol,.doc ul{margin:0 0 10px 20px;max-width:74ch;font-size:13.5px;line-height:1.6}
.doc li{margin-bottom:8px}
.doc li::marker{color:var(--red);font-family:var(--mono);font-size:11px}
.doc strong{color:var(--ink);font-weight:600}
.doc code,.law code,.frow code{font-family:var(--mono);font-size:11.5px;background:var(--card2);border:1px solid var(--line);
  border-radius:3px;padding:1px 4px;color:var(--red-hi)}

.laws{display:flex;flex-direction:column;gap:8px;padding:12px}
.law{padding:10px 13px;border-left:3px solid var(--line2);background:rgba(20,20,22,.55);border-radius:5px}
.law.MODEL{border-left-color:var(--red)}
.law.TASTE{border-left-color:var(--warn)}
.law .lrow{display:flex;align-items:center;gap:9px;margin-bottom:6px}
.law .lnum{font-family:var(--mono);font-size:10px;color:var(--ink);letter-spacing:.06em}
.law .ltag{font-family:var(--mono);font-size:8.5px;letter-spacing:.1em;padding:1px 5px;border-radius:2px}
.law .ltag.MODEL{background:var(--red);color:#FFF}
.law .ltag.LIBRARY{border:1px solid var(--line2);color:var(--ink2)}
.law .ltag.TASTE{border:1px solid var(--warn);color:var(--warn)}
.law .lrule{font-size:13.5px;color:var(--ink);line-height:1.55;max-width:80ch}
.law .lkv{display:grid;grid-template-columns:58px 1fr;gap:3px 12px;margin-top:8px}
.law .lkv .k{font-family:var(--mono);font-size:8.5px;letter-spacing:.16em;color:var(--dim);text-transform:uppercase;padding-top:3px}
.law .lkv .v{font-size:12px;color:var(--dim);line-height:1.5;max-width:78ch}

.steps{counter-reset:step;position:relative;list-style:none;max-width:80ch}
.steps li{counter-increment:step;position:relative;padding:0 0 13px 42px;font-size:13.5px;line-height:1.6;color:var(--ink2)}
.steps li:before{content:counter(step,decimal-leading-zero);position:absolute;left:0;top:2px;font-family:var(--mono);
  font-size:9.5px;color:var(--red-hi);background:var(--red-dim);border:1px solid rgba(229,48,28,.35);border-radius:3px;
  width:24px;height:17px;display:flex;align-items:center;justify-content:center}
.steps li:after{content:"";position:absolute;left:12px;top:23px;bottom:0;width:1px;background:var(--line)}
.steps li:last-child{padding-bottom:2px}
.steps li:last-child:after{display:none}

.tplpre{background:var(--blk)}
.tplpre pre{overflow-x:auto;padding:15px 17px;font-family:var(--mono);font-size:11.5px;line-height:1.7;color:#DBD9D6;white-space:pre-wrap;word-break:break-word}
.slot{color:var(--red-hi);background:var(--red-dim);border-radius:3px;padding:0 3px}
.promptpaper{background:var(--blk);border:1px solid var(--line);border-left:2px solid var(--red);border-radius:4px;margin:4px 0 12px}
.promptpaper pre{overflow-x:auto;padding:12px 14px;font-family:var(--mono);font-size:11.5px;line-height:1.66;color:#DBD9D6;white-space:pre-wrap;word-break:break-word}

.specimen .vbody{position:relative;padding:17px 21px}
.specimen .vbody:before,.specimen .vbody:after{content:"";position:absolute;width:12px;height:12px;border:1.5px solid var(--red)}
.specimen .vbody:before{top:8px;left:8px;border-right:0;border-bottom:0}
.specimen .vbody:after{bottom:8px;right:8px;border-left:0;border-top:0}

.ftable{width:100%}
.ftable .fhead{display:grid;grid-template-columns:1.1fr 1fr 1.2fr;gap:14px;padding:8px 16px;border-bottom:1px solid var(--line2)}
.frow{display:grid;grid-template-columns:1.1fr 1fr 1.2fr;gap:14px;padding:10px 16px;border-bottom:1px solid var(--line);font-size:12px;line-height:1.55}
.frow:last-child{border-bottom:0}
.frow .sym2{color:var(--ink);position:relative;padding-left:13px}
.frow .sym2:before{content:"";position:absolute;left:0;top:6px;width:6px;height:6px;background:var(--warn)}
.frow .cause{color:var(--dim)}
.frow .fix{color:var(--ink2);position:relative;padding-left:13px}
.frow .fix:before{content:"";position:absolute;left:0;top:6px;width:6px;height:6px;background:var(--ok)}

.paths{list-style:none}
.paths li{font-family:var(--mono);font-size:11px;line-height:1.55;color:var(--dim);word-break:break-all;
  padding:6px 0 6px 16px;border-bottom:1px solid var(--line);position:relative}
.paths li:last-child{border-bottom:0}
.paths li:before{content:"▸";position:absolute;left:1px;color:var(--red);font-size:9px;top:8px}

.gallery .vbody{padding:12px}
.ggrid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.gitem{background:var(--blk);border:1px solid var(--line);border-radius:5px;overflow:hidden}
.gitem img{width:100%;aspect-ratio:16/10;object-fit:cover;object-position:top}
.gitem .gcap{padding:8px 11px;font-size:11px;color:var(--dim);line-height:1.5;border-top:1px solid var(--line)}
.gattr{margin-top:10px;font-family:var(--mono);font-size:9.5px;color:var(--dim)}
.gattr a{color:var(--ink2);text-decoration:underline;text-underline-offset:2px}
.gattr a:hover{color:var(--red-hi)}

.metatable{background:rgba(15,15,17,.6);border-radius:8px}
.metatable .mrow{display:flex;justify-content:space-between;gap:12px;padding:6px 13px;border-bottom:1px solid var(--line);font-size:12px}
.metatable .mrow:last-child{border-bottom:0}
.metatable .mk{font-family:var(--mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.metatable .mv{color:var(--ink);text-align:right}
.compiler{position:sticky;top:74px;background:rgba(15,15,17,.75);border-radius:8px;overflow:hidden;
  display:flex;flex-direction:column;max-height:calc(100vh - 98px)}
.compiler .cbody{overflow-y:auto;padding:13px 15px;display:flex;flex-direction:column;gap:12px}
.field label{display:flex;align-items:baseline;gap:8px;margin-bottom:5px}
.field label .fl{font-family:var(--mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink2)}
.field label .fslot{font-family:var(--mono);font-size:8.5px;color:var(--dim);margin-left:auto}
.field input,.field textarea,.field select{width:100%;background:var(--blk);border:1px solid rgba(236,234,232,.1);border-radius:4px;color:var(--ink);
  font:12.5px var(--font);padding:7px 10px;outline:none}
.field textarea{min-height:70px;resize:vertical;line-height:1.5}
.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--red)}
.field input::placeholder,.field textarea::placeholder{color:var(--faint2)}
.field .filledmark{border-color:rgba(78,169,106,.55)}
.preview{background:var(--blk);border:1px solid var(--line);border-radius:4px;padding:12px 13px;font-family:var(--mono);
  font-size:10.5px;line-height:1.62;color:#C9C7C4;white-space:pre-wrap;word-break:break-word;max-height:230px;overflow-y:auto}
.cfoot{border-top:1px solid var(--line);padding:12px 15px;display:flex;flex-direction:column;gap:8px;background:var(--card)}
.cfoot .row{display:flex;gap:8px}
.cfoot .row .btn{flex:1}

@media (max-width:1100px){
  .tool{grid-template-columns:1fr}
  .compiler{position:static;max-height:none}
  .topsearch input{width:130px}
  .ggrid{grid-template-columns:1fr}
  .fhead{display:none}
  .frow{grid-template-columns:1fr;gap:5px}
}

/* ledger */
.ltiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px;margin-bottom:16px}
.ltile{background:var(--card);border:1px solid var(--line);border-radius:6px;padding:12px 14px}
.ltile .lv{font-family:var(--mono);font-size:22px;color:var(--ink);margin-bottom:2px}
.lminis{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px;align-items:start}
.lmini{background:var(--panel);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.lmhead{display:flex;align-items:center;gap:8px;padding:9px 12px;cursor:pointer;user-select:none}
.lmhead:hover{background:var(--card)}
.lmhead .lbl{margin:0}
.lmsum{font-family:var(--mono);font-size:10.5px;color:var(--ink);margin-left:auto}
.lmx{color:var(--dim);font-size:10px;width:12px;text-align:center;flex:none}
.lmini.open .lmhead{border-bottom:1px solid var(--line)}
.lmbody{padding:6px 12px 10px;max-height:320px;overflow:auto}
.lmrow{display:grid;grid-template-columns:minmax(0,1fr) 62px 56px;gap:8px;align-items:center;padding:2.5px 0;font-family:var(--mono);font-size:10.5px}
.ltabs{display:flex;gap:6px}
.lmk{color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lmn{color:var(--dim);text-align:right}
.lmc{color:var(--ink);text-align:right}
.lmtrack{height:4px;background:rgba(236,234,232,.07);border-radius:2px;overflow:hidden}
.lmtrack i{display:block;height:100%;background:var(--red);border-radius:2px}
.lfilters{display:flex;align-items:center;gap:14px;margin-bottom:10px;flex-wrap:wrap}
.lsel{display:flex;align-items:center;gap:6px}
.lsel select{background:var(--card);border:1px solid var(--line2);color:var(--ink);font:11px var(--mono);padding:4px 6px;border-radius:4px;max-width:230px}
.ltable{border:1px solid var(--line);border-radius:6px;overflow:hidden;background:rgba(15,15,17,.6)}
.lthead,.lrow2{display:grid;grid-template-columns:112px 66px 218px 82px 74px minmax(0,1fr);gap:10px;align-items:center;padding:5px 12px}
.lthead{background:var(--blk);border-bottom:1px solid var(--line);padding:7px 12px}
.lrow2{font-family:var(--mono);font-size:10.5px;border-bottom:1px solid var(--line);cursor:pointer;color:var(--ink2)}
.lrowwrap:last-child .lrow2{border-bottom:none}
.lrow2:hover{background:var(--card)}
.lrow2.on{background:var(--card2)}
.lc-model{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lc-prompt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dim);font-family:var(--font);font-size:11.5px}
.lc-cost,.lc-len{text-align:right}
.lc-status{font-size:9.5px;text-transform:uppercase;letter-spacing:.06em}
.st-succeeded{color:var(--ok)}.st-failed{color:var(--red-hi)}.st-cancelled{color:var(--dim)}.st-processing{color:var(--warn)}
.ldetail{background:var(--panel);border-bottom:1px solid var(--line);padding:14px 16px}
.ldcols{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:22px}
.ldprompt{white-space:pre-wrap;font:11.5px/1.6 var(--font);color:var(--ink2);background:var(--blk);border:1px solid var(--line);border-radius:5px;padding:10px 12px;max-height:340px;overflow:auto;margin-top:6px}
.ldkv{display:grid;grid-template-columns:56px 1fr;gap:8px;font-family:var(--mono);font-size:10.5px;padding:2px 0}
.ldkv span{color:var(--dim)}.ldkv em{color:var(--ink);font-style:normal;word-break:break-all}
.ldref{display:block;font-family:var(--mono);font-size:10.5px;color:var(--ink2);padding:2px 0;word-break:break-all}
.ldref:hover{color:var(--red-hi)}
.lderr{font-family:var(--mono);font-size:10.5px;color:var(--warn);margin-top:4px;line-height:1.5}
.ldbtns{display:flex;gap:8px;margin-top:12px}
@media(max-width:900px){
  .ltiles,.lminis{grid-template-columns:1fr 1fr}
  .ldcols{grid-template-columns:1fr}
  .lthead,.lrow2{grid-template-columns:112px 66px minmax(0,1fr) 82px}
  .lc-len,.lc-prompt{display:none}
}
.ldl{display:flex;align-items:center;gap:10px}
.ldthumbs{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.ldthumbs img{width:84px;height:47px;object-fit:cover;border-radius:3px;border:1px solid var(--line2);display:block}
.lwhead{display:flex;align-items:center;gap:14px;padding:7px 12px;background:var(--blk);border-bottom:1px solid var(--line);cursor:pointer;font-family:var(--mono);font-size:10.5px}
.lwhead:hover{background:var(--panel)}
.lwn{color:var(--red);letter-spacing:.08em}
.lwt{color:var(--ink)}
.lwp{color:var(--ink2);text-transform:uppercase;letter-spacing:.1em;font-size:9.5px}
.lwc{color:var(--dim);margin-left:auto}
.lwc b{font-weight:500}
.lwx{color:var(--dim);width:12px;text-align:center}
.lwave:last-child .lrowwrap:last-child .lrow2{border-bottom:none}

/* budget: the spend audit as a subset of the ledger (#/ledger/budget) */
.bgrid2{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px;align-items:start}
.bpanel{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:12px 14px;margin-bottom:10px}
.bgrid2 .bpanel{margin-bottom:0}
.bcol{display:flex;flex-direction:column;gap:10px}
.bctls{display:grid;grid-template-columns:1fr 1fr;gap:0 28px}
@media(max-width:900px){.bctls{grid-template-columns:1fr}}
.bph{display:flex;align-items:baseline;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.bph .n{font-family:var(--mono);font-size:10px;color:var(--dim);letter-spacing:.06em}
.brow2{display:grid;grid-template-columns:minmax(0,1.6fr) 74px minmax(0,1fr);gap:10px;align-items:center;padding:5px 0;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:11px}
.brow2:last-child{border-bottom:none}
.brow2 .bk{color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.brow2 .bk small{display:block;color:var(--dim);font-size:9.5px;white-space:normal;line-height:1.5}
.brow2 .bm{text-align:right;color:var(--ink);font-variant-numeric:tabular-nums}
.btrack{height:4px;background:rgba(236,234,232,.07);border-radius:2px;overflow:hidden}
.btrack i{display:block;height:100%;background:var(--red);border-radius:2px}
.unitcard{border:1px solid var(--line);border-radius:6px;overflow:hidden}
.unitrow{display:flex;justify-content:space-between;align-items:baseline;gap:14px;padding:9px 12px;border-bottom:1px solid var(--line);background:var(--card)}
.unitrow .uk{font-size:12.5px;color:var(--ink2)}
.unitrow .uk small{display:block;font:9.5px var(--mono);color:var(--dim);margin-top:2px;letter-spacing:.03em}
.unitrow .uv{font:500 12.5px var(--mono);color:var(--ink);white-space:nowrap;font-variant-numeric:tabular-nums}
.unitrow.total{background:var(--blk);border-bottom:none}
.unitrow.total .uk{color:var(--ink);font-weight:600}
.unitrow.total .uv{color:var(--red-hi)}
.bnote{font:10.5px var(--mono);color:var(--dim);margin-top:8px;line-height:1.7}
.bchart{overflow-x:auto}
.bchart svg{display:block;width:100%;height:auto;min-width:620px}
.bgridline{stroke:rgba(236,234,232,.08);stroke-width:1}
.baxis{font:10px var(--mono);fill:var(--dim)}
.bdlabel{font:10.5px var(--mono);fill:var(--ink2)}
.bbar{fill:var(--red);pointer-events:none}
.bdlabel{pointer-events:none}
/* day-column hover (2026-08-04): the whole column is the target, the bar lights;
   pressing a column windows the audit to that day */
.bslot{fill:transparent;cursor:pointer}
.bslot:hover{fill:rgba(255,90,65,.10)}
.bslot:hover+.bbar{fill:var(--red-hi)}
/* calendar view of daily spend: month grids, heat = spend, grows forward */
.bcal{display:flex;flex-wrap:wrap;gap:16px;margin-top:2px}
.bcal-m{flex:1 1 220px;max-width:320px}
.bcal-mh{font:10px var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink2);margin-bottom:6px}
.bcal-g{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.bcal-w{font:8.5px var(--mono);color:var(--dim);text-align:center;padding-bottom:2px}
.bcal-d{position:relative;aspect-ratio:1;border-radius:3px;background:rgba(236,234,232,.04);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;cursor:pointer;border:1px solid transparent}
.bcal-d .dn{font:9px var(--mono);color:var(--dim);line-height:1}
.bcal-d .dc{font:9.5px var(--mono);color:var(--ink);line-height:1}
.bcal-d:hover{border-color:var(--line2)}
.bcal-d.off{visibility:hidden}
.bcal-d.mut{opacity:.3;cursor:default}
.bcal-d.sel{border-color:var(--red-hi);box-shadow:0 0 0 1px var(--red-hi)}
#btip{position:fixed;pointer-events:none;background:#1C1C1F;color:var(--ink);font:11px var(--mono);border:1px solid var(--line2);
  padding:6px 9px;border-radius:4px;opacity:0;transition:opacity .1s;z-index:60;white-space:nowrap}
/* budget date window controls */
.brange{margin-bottom:12px}
.brange input[type=date]{background:var(--card);border:1px solid var(--line2);color:var(--ink);font:11px var(--mono);
  padding:3px 6px;border-radius:4px;color-scheme:dark}
.brange .ldl{display:flex;gap:10px;align-items:center}
.bctl{font-size:12px;color:var(--ink2);padding:6px 0;border-bottom:1px solid var(--line);line-height:1.65}
.bctl:last-child{border-bottom:none}
.bctl b{color:var(--ink);font-weight:600}
@media(max-width:900px){.bgrid2{grid-template-columns:1fr}}

/* slate announcement bar (Unilever Nine, 2026-07-08) */
.slatebar{display:flex;align-items:center;justify-content:center;gap:8px;height:34px;
  background:linear-gradient(90deg,var(--red-dim),rgba(229,48,28,.05));border-bottom:1px solid rgba(229,48,28,.35);
  color:var(--ink2);text-decoration:none;font:500 12px/1 "Space Grotesk",sans-serif;letter-spacing:.06em}
.slatebar b{color:var(--red-hi);font-weight:700;letter-spacing:.14em}
.slatebar span{color:var(--red-hi);transition:transform .15s}
.slatebar:hover{color:var(--ink)}
.slatebar:hover span{transform:translateX(3px)}

/* ---- the previs vault page: every client slate, brand-locked cards ---- */
.vault{max-width:680px;margin:0 auto;padding:8px 0 40px}
.vhead{display:flex;align-items:center;gap:14px;margin-bottom:8px}
.vdial{width:34px;height:34px;flex:none}
.vault h1{font-size:22px;font-weight:700;letter-spacing:.16em;color:var(--ink)}
.vault h1 b{color:var(--red)}
.vsub{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin:6px 0 32px}
.vslate{display:flex;align-items:center;gap:14px;padding:10px 20px;margin-bottom:10px;border-radius:8px;
  text-decoration:none;border:1px solid var(--line);min-height:64px;transition:transform .12s ease, box-shadow .12s ease}
.vslate:hover{transform:translateY(-2px);box-shadow:0 6px 24px rgba(0,0,0,.5)}
.vbrand{font-weight:700;font-size:15px;letter-spacing:.06em;white-space:nowrap}
.vtitle{font-size:13px;opacity:.85}
.vmeta{margin-left:auto;text-align:right;font-family:'IBM Plex Mono',monospace;font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;opacity:.75;white-space:nowrap}
.vstamp{display:block;font-size:8px;letter-spacing:.1em;opacity:.55;margin-top:2px;font-style:normal}
.varrow{font-size:16px;margin-left:10px;transition:transform .12s}
.vslate:hover .varrow{transform:translateX(4px)}
@media(max-width:560px){.vslate{flex-wrap:wrap;padding:14px 16px}.vmeta{margin-left:0;text-align:left;width:100%}}

/* ---- THE WAVE TREE (admin decision atlas). Lane colors ride --lc per node.
   Palette validated 2026-07-15 (dataviz six checks, dark surface #09090A);
   worst CVD pairs sit 6-8 which is legal ONLY because every node carries its
   lane-name text chip. Keep the chips. */
.tree{max-width:1080px;margin:0 auto}
.tverify{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);padding:60px 0;text-align:center}
.tdeny{padding:80px 20px;text-align:center}
.tdeny h1{font-family:var(--disp);font-size:24px;letter-spacing:.14em;color:var(--ink);margin-bottom:14px}
.tdeny p{font-family:var(--mono);font-size:11.5px;color:var(--dim);max-width:520px;margin:0 auto 18px;line-height:1.7}
.thead{margin:8px 0 22px}
.thead h1{font-family:var(--disp);font-size:26px;font-weight:700;letter-spacing:.14em;color:var(--ink)}
.thead h1 b{color:var(--red)}
.tsub{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin:6px 0 12px}
.tsync{font-family:var(--mono);font-size:10px;letter-spacing:.08em;color:var(--ink2);background:rgba(236,234,232,.06);border-radius:5px;padding:7px 11px;display:inline-block}
.tsync b{color:var(--ink)}
.tsync.warn{background:rgba(201,138,61,.14);color:#E2B577}
.tfleet{display:block;margin-top:3px;color:var(--dim);font-size:9px;letter-spacing:.12em;text-transform:uppercase}
.tlaw{font-family:var(--mono);font-size:9px;letter-spacing:.1em;color:var(--faint2);margin-top:10px;max-width:760px;line-height:1.7;text-transform:uppercase}
/* controls */
.tctl{position:sticky;top:50px;z-index:5;background:rgba(9,9,10,.96);backdrop-filter:blur(8px);padding:10px 0 8px;margin-bottom:18px;border-bottom:1px solid var(--line)}
.tfilters{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.lfilter{display:inline-flex;align-items:center;gap:6px;background:rgba(236,234,232,.05);border:none;border-radius:11px;
  padding:5.5px 11px;font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--ink2);cursor:pointer;text-transform:uppercase}
.lfilter i{width:8px;height:8px;border-radius:50%;background:var(--lc,#888);opacity:.5;flex:none}
.lfilter em{font-style:normal;color:var(--faint2);font-size:8px;letter-spacing:.06em;text-transform:none}
.lfilter:hover{background:rgba(236,234,232,.1)}
.lfilter.on{background:color-mix(in srgb, var(--lc,#888) 18%, transparent);color:var(--ink)}
.lfilter.on i{opacity:1;box-shadow:0 0 8px var(--lc)}
.lfilter.tdy{--lc:#FF4A38}
/* search lives on the LEFT icon rail (2026-07-19, was top-right 07-18) · styles at .tsearchbox */
.rrow{margin-top:6px}
.rchip{background:rgba(236,234,232,.04);border:none;border-radius:4px;padding:3.5px 8px;cursor:pointer;
  font-family:var(--mono);font-size:8px;letter-spacing:.12em;color:var(--dim);text-transform:uppercase}
.rchip:hover{color:var(--ink);background:rgba(229,48,28,.16)}
.tlegend{display:flex;flex-wrap:wrap;gap:5px 16px;align-items:center;margin-top:9px}
.klg{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:8.5px;letter-spacing:.08em;color:var(--dim);text-transform:uppercase}
.klg b{color:var(--ink2);font-weight:500}
.klg em{font-style:normal;color:var(--faint2);text-transform:none;letter-spacing:.04em}
.tlbl{display:block;font-family:var(--mono);font-size:8.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--faint2);margin-bottom:6px}
/* the wires · one animation per transfer kind */
.twire{display:inline-block;width:46px;height:8px;border-radius:2px;flex:none;position:relative;overflow:hidden}
.twire.k-api{background:repeating-linear-gradient(90deg,#3B96FF 0 7px,transparent 7px 13px);background-size:26px 2.5px;background-position:0 center;background-repeat:repeat-x;animation:twMarch 1.1s linear infinite}
.twire.k-state{background:linear-gradient(90deg,transparent,transparent);}
.twire.k-state::after{content:'';position:absolute;top:50%;left:0;width:7px;height:7px;margin-top:-3.5px;border-radius:50%;background:#EAF2F7;opacity:.9;animation:twTravel 2.6s ease-in-out infinite}
.twire.k-human{background:linear-gradient(90deg,rgba(245,168,28,.15),rgba(245,168,28,.8),rgba(245,168,28,.15));background-size:100% 3px;background-position:0 center;background-repeat:repeat-x;animation:twBreathe 3.4s ease-in-out infinite}
.twire.k-fire{background:linear-gradient(90deg,transparent 0%,#FF4534 35%,#FFB3A8 50%,#FF4534 65%,transparent 100%);background-size:200% 4px;background-position:200% center;background-repeat:repeat-x;animation:twSurge .9s linear infinite}
.twire.k-learn{background:repeating-linear-gradient(90deg,#A34FF0 0 7px,transparent 7px 13px);background-size:26px 2.5px;background-position:0 center;background-repeat:repeat-x;animation:twMarchR 1.6s linear infinite}
.twire.k-poll{background:repeating-linear-gradient(90deg,#9BA0A6 0 5px,transparent 5px 11px);background-size:22px 2px;background-position:0 center;background-repeat:repeat-x;animation:twBreathe 2.8s ease-in-out infinite}
.twire.k-fail{background:linear-gradient(90deg,#F5A81C,#FF4534);background-size:100% 2.5px;background-position:0 center;background-repeat:repeat-x;animation:twFlicker 1.5s steps(2,jump-none) infinite}
.twire.k-auto{background:linear-gradient(90deg,rgba(236,234,232,.35),rgba(236,234,232,.35));background-size:100% 1.5px;background-position:0 center;background-repeat:repeat-x}
@keyframes twMarch{to{background-position:26px center}}
@keyframes twMarchR{to{background-position:-26px center}}
@keyframes twTravel{0%{left:0;opacity:0}12%{opacity:.9}88%{opacity:.9}100%{left:39px;opacity:0}}
@keyframes twBreathe{0%,100%{opacity:.35}50%{opacity:1}}
@keyframes twSurge{to{background-position:0% center}}
@keyframes twFlicker{0%,100%{opacity:.25}50%{opacity:1}}
@media(prefers-reduced-motion:reduce){.twire,.twire::after{animation:none !important}}
/* ---- the map viewport · full screen, riding the site's own particle field */
.tree.map{max-width:none}
body.treefull{overflow:hidden}
body.treefull .foot{display:none}
#tview{position:fixed;top:50px;left:0;right:0;bottom:0;overflow:hidden;cursor:grab;touch-action:none;
  user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;overscroll-behavior:none;background:transparent}
#tview::before{content:'';position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 90% at 80% 0%,rgba(120,10,20,.10) 0%,transparent 50%),radial-gradient(100% 80% at 4% 100%,rgba(13,58,95,.08) 0%,transparent 55%)}
#tview.grabbing{cursor:grabbing}
#tmap{width:100%;height:100%;display:block;overflow:visible}
#tworld{transform-origin:0 0;will-change:transform}
#tworld.glide{transition:transform .52s cubic-bezier(.22,.9,.24,1)}
.tcur{fill:none;stroke:url(#curm);stroke-width:150;stroke-linecap:round;opacity:.075}
.tcur.ret{stroke:#8E3FD6;stroke-width:100;opacity:.06}
.tcomet{fill:#FFB3A8;opacity:.8;filter:drop-shadow(0 0 18px #FF4A38)}
.tcomet.v{fill:#CDB4F5;filter:drop-shadow(0 0 14px #8E3FD6)}
/* regions · blueprint plates with corner ticks and a solid title tab */
.rwash{stroke:none}
.rplate{fill:rgba(16,16,22,.1);stroke:rgba(236,234,232,.026);stroke-width:1.2}
.rtick{fill:none;stroke:rgba(236,234,232,.05);stroke-width:2;stroke-linecap:round}
.rghost{font-family:var(--disp);font-size:130px;font-weight:700;letter-spacing:.05em;fill:rgba(236,234,232,.04);text-anchor:end;pointer-events:none}
.rtab{cursor:pointer}
.rtab rect{fill:rgba(13,13,18,.92);stroke:color-mix(in srgb, var(--lc) 40%, rgba(236,234,232,.08));stroke-width:1.4}
.rtab text{font-family:var(--mono);font-size:24px;letter-spacing:.2em;fill:var(--ink2);font-weight:600}
.rtdot{fill:var(--lc)}
.rtab:hover rect{stroke:var(--lc)}
.rtab:hover text{fill:var(--ink)}
.mregion .rd{font-family:var(--mono);font-size:23px;letter-spacing:.14em;fill:rgba(236,234,232,.4);text-transform:uppercase}
.mmark rect{fill:rgba(255,69,52,.06);stroke:rgba(255,69,52,.4);stroke-width:2.5;stroke-dasharray:14 12;stroke-linecap:round}
.mmark .mt{font-family:var(--mono);font-size:34px;letter-spacing:.3em;fill:#FF8A7D;text-anchor:middle;font-weight:600}
.mmark .md{font-family:var(--mono);font-size:19px;letter-spacing:.06em;fill:rgba(236,234,232,.4);text-anchor:middle}
/* edges · glow underlay + animated core, one motion per transfer kind */
.meu{fill:none;opacity:.1;transition:opacity .18s}
.meu.k-api{stroke:#3B96FF}.meu.k-state{stroke:#EAF2F7}.meu.k-human{stroke:#F5A81C}.meu.k-fire{stroke:#FF4534}
.meu.k-learn{stroke:#A34FF0}.meu.k-poll{stroke:#9BA0A6}.meu.k-fail{stroke:#FF7847}.meu.k-auto{stroke:#9a9994;opacity:.05}
.me{fill:none;stroke-width:3.6;opacity:.68;stroke-linecap:round;transition:opacity .18s,stroke-width .18s}
.me.trunk{stroke-width:6}
.me.k-api{stroke:#3B96FF;stroke-dasharray:12 10;animation:eM22 1.1s linear infinite}
.me.k-state{stroke:#EAF2F7;stroke-dasharray:4 30;opacity:.6;animation:eM34 1.7s linear infinite}
.me.k-human{stroke:#F5A81C;animation:eBr 3.4s ease-in-out infinite}
.me.k-fire{stroke:#FF4534;stroke-dasharray:30 16;opacity:.74;animation:eM46 .8s linear infinite}
.me.k-learn{stroke:#A34FF0;stroke-dasharray:12 10;opacity:.7;animation:eM22 1.7s linear infinite}
.me.k-poll{stroke:#9BA0A6;stroke-dasharray:6 14;opacity:.52;animation:eBr 2.8s ease-in-out infinite}
.me.k-fail{stroke:#FF7847;stroke-dasharray:5 8;opacity:.6;animation:eFl 1.4s steps(2,jump-none) infinite}
.me.k-auto{stroke:rgba(236,234,232,.5);stroke-width:2.2;opacity:.46}
.me.warm{opacity:1;stroke-width:5.5}
.me.trunk.warm{stroke-width:7.5}
.meu.warm{opacity:.22}
@keyframes eM22{to{stroke-dashoffset:-22}}
@keyframes eM34{to{stroke-dashoffset:-34}}
@keyframes eM46{to{stroke-dashoffset:-46}}
@keyframes eBr{0%,100%{opacity:.3}50%{opacity:.85}}
@keyframes eFl{0%,100%{opacity:.18}50%{opacity:.74}}
@media(prefers-reduced-motion:reduce){.me,.tcomet,.norbitg,.nhandg,.k5 .nhalo,.g-pulse .nhalo,
  .nscan,.nlampg.hot .nlamp2,.mnode.sel .nhalo{animation:none !important}}
/* nodes · SOLID BODY LAW (2026-07-18, user: hollow nodes are dead): the body is a
   lit gradient SOLID · depth is baked paint (core light, top sheen, dark gradient
   tail), NEVER an ambient per-node filter (the old drop-shadow ran a live filter
   on 101 bodies · Safari jank; the old full-size dark face ate 78% of every body,
   which WAS the hollow look). Feather rides .nhalo; the one legal filter is .sel. */
.mnode{cursor:pointer;transition:opacity .18s}
.nhalo{opacity:.62;transition:opacity .2s}
.mnode:hover .nhalo{opacity:1}
.mnode.k5 .nhalo{animation:halob 5.2s ease-in-out infinite}
@keyframes halob{0%,100%{opacity:.5}50%{opacity:.95}}
.nshape{stroke:var(--lc);stroke-linejoin:round;stroke-linecap:round}
/* proportional ink · stroke scales with the mark, never constant */
.k1 .nshape{stroke-width:2.2}.k2 .nshape{stroke-width:2.7}.k3 .nshape{stroke-width:3.4}
.k4 .nshape{stroke-width:4.4}.k5 .nshape{stroke-width:5.8}
.k1:hover .nshape{stroke-width:3.2}.k2:hover .nshape{stroke-width:3.8}.k3:hover .nshape{stroke-width:4.6}
.k4:hover .nshape{stroke-width:5.8}.k5:hover .nshape{stroke-width:7.2}
/* emblem stroke width rides the glyph itself (attribute, v8.1) · no fixed tiers */
.nshape.lid{fill:color-mix(in srgb, var(--lc) 32%, #0B0C11) !important}
.nshape.base{fill:color-mix(in srgb, var(--lc) 18%, #0D0E13) !important}
.nshape.dial{fill:url(#dialg) !important}   /* dials stay dark so machinery pops · shaded now, never flat */
/* anatomy · core light + top sheen + glass window (inside-title tiers) / inset line.
   THE INK LAW v8 (user order 2026-07-18, contrast was inconsistent): machinery is
   PRINT on bodies and DISPLAY on glass · near-black ink on any lane-lit solid,
   foam (#EAF2F7) on any dark ground (windows, dials, screens). The lane never
   inks its own machinery · same-hue-on-hue was the low-contrast class. */
.ncore{opacity:.75;pointer-events:none}
.nsheen{opacity:.55;pointer-events:none}
.nwin{stroke:rgba(236,242,247,.11);stroke-width:1.6}   /* fill = per-lane glass, set as attribute · no CSS fill or it overrides */
.ninset{fill:none;stroke:rgba(255,255,255,.16);stroke-width:1.6}
.nbezel{fill:none;stroke:rgba(234,242,247,.22);stroke-width:2}
.nemb{fill:none;stroke-linecap:round;stroke-linejoin:round}
.mnode.solidb .nemb{stroke:rgba(6,8,12,.82)}
.mnode.solidb .nemb.efill{fill:rgba(6,8,12,.82);stroke:none}
.mnode.win .nemb{stroke:#EAF2F7;opacity:.9}
.mnode.win .nemb.efill{fill:#EAF2F7;stroke:none;opacity:.9}
/* the badge plate under every emblem · a machined roundel, inked per ground */
.mnode.solidb .nembp{fill:rgba(6,8,12,.2);stroke:rgba(6,8,12,.38);stroke-width:1.6}
.mnode.win .nembp{fill:rgba(234,242,247,.07);stroke:rgba(234,242,247,.2);stroke-width:1.6}
/* the status lamp: a dark WELL + neutral dot (state reads on EVERY lane color);
   hot = changed today, burns house red · state never borrows the lane's ink */
.nlampw{fill:#0B0D13;stroke:rgba(234,242,247,.28);stroke-width:1.4}
.nlamp2{fill:rgba(234,242,247,.55)}
.nlampg.hot .nlampw{stroke:rgba(255,69,52,.55)}
.nlampg.hot .nlamp2{fill:#FF4534;animation:lampp 2.1s ease-in-out infinite}
@keyframes lampp{0%,100%{opacity:.45}50%{opacity:1}}
.nspoke{stroke:rgba(6,8,12,.68);stroke-width:4;fill:none}     /* hub ports sit ON the body · ink */
.nseam{stroke:rgba(6,8,12,.5);stroke-width:2.2;fill:none}
.nscan{stroke:rgba(234,242,247,.6);stroke-width:2;fill:none;animation:scanb 12s ease-in-out infinite}  /* the desk polls on a slow cycle · its screens shimmer at that cadence */
@keyframes scanb{0%,100%{opacity:.45}50%{opacity:.8}}
.nrivet{fill:var(--lc);opacity:.75}
.narc{stroke:var(--lc);stroke-width:6;fill:none;opacity:.9;stroke-linecap:round}  /* the lane's arc stays · the instrument's one identity accent */
.ntick{stroke:#EAF2F7;stroke-width:2.5;opacity:.5}            /* hands + ticks are foam on the dark dial · instrument convention */
.ntick.hand{stroke-width:3.5;opacity:.95}
.nhandg{animation:handspin 46s linear infinite}
@keyframes handspin{to{transform:rotate(360deg)}}
.norbit{fill:none;stroke:var(--lc);stroke-width:2;opacity:.5}
.norbitg{animation:orbspin 8.5s linear infinite}
@keyframes orbspin{to{transform:rotate(360deg)}}
.nmoon{fill:var(--lc)}
.ntoday{fill:#FF4A38;opacity:.95}
.nlaws{fill:rgba(20,10,30,.85);stroke:#8E3FD6;stroke-width:2}
.nlawsn{font:600 15px var(--mono);fill:#CDB4F5;text-anchor:middle}
.nid{font:600 15px var(--mono);fill:var(--lc);opacity:.85;letter-spacing:.14em}
.nid.hotid{fill:#FF8A7D}
.nlp{fill:rgba(8,8,12,.93);stroke:color-mix(in srgb, var(--lc) 26%, transparent);stroke-width:1}
.nt{font:600 21px var(--disp);fill:#F2F1EF;text-anchor:middle;letter-spacing:.012em}
.nt.in{font-family:var(--disp);font-weight:600;fill:#F4F6F9}
.nq{font:italic 16px var(--font);fill:#A5A29E;text-anchor:middle}
/* LOD · at distance the machine reads as glowing colored silhouettes */
#tview.far .nt,#tview.far .nq,#tview.far .nlawsn,#tview.far .nlaws,#tview.far .nid,#tview.far .nlp,
#tview.far .nwin,#tview.far .ninset,#tview.far .ncore,#tview.far .nsheen,#tview.far .nbezel,
#tview.far .nembg,#tview.far .nlampg,#tview.far .nscan,#tview.far .nseam,#tview.far #selwaveg{display:none}
#tview.far .nshape{fill:color-mix(in srgb, var(--lc) 72%, #0b0b0f)}
#tview.far .k1 .nshape{stroke-width:5}#tview.far .k2 .nshape{stroke-width:6}#tview.far .k3 .nshape{stroke-width:7.5}
#tview.far .k4 .nshape{stroke-width:9.5}#tview.far .k5 .nshape{stroke-width:12}
#tview.far .nhalo{opacity:.9}
#tview.mid .nq{display:none}
#tview.mid .nshape{stroke-width:4.5}
#tview.far .me,#tview.mid .me{opacity:.74}
#tview.far .me.k-auto,#tview.mid .me.k-auto{opacity:.36}
#tview.far .rghost{fill:rgba(236,234,232,.075)}
#tview.far .rplate,#tview.mid .rplate{fill:rgba(16,16,22,.15);stroke:rgba(236,234,232,.04)}
/* focus states · select = the node lit, its wires lit, neighbors GLOW, the rest
   falls away. Edge glow = the wide colored underlay stroke (never a filter);
   the single selected body carries the map's only drop-shadow. */
#tmap.focused .me{opacity:.045}
#tmap.focused .meu{opacity:.015}
.me.hot{opacity:1 !important;stroke-width:6.5}
.me.trunk.hot{stroke-width:8.5}
.meu.hot{opacity:.5 !important;stroke-width:26 !important}
#tmap.focused .mnode:not(.sel):not(.nb){opacity:.12}
#tmap.focused .tcur,#tmap.focused .tcomet{opacity:.02}
.mnode.sel .nshape{stroke-width:7;filter:drop-shadow(0 0 26px var(--lc)) drop-shadow(0 0 7px var(--lc))}
.mnode.sel .nhalo{opacity:1;animation:halob 3.2s ease-in-out infinite}
/* the selection water · house wave lines clipped to the body; the LINES stay still,
   a foam opacity band (#sweepg, SMIL) travels across them · the wave-site law */
.swv{fill:none;stroke:rgba(234,242,247,.4);stroke-width:2.8;stroke-linecap:round;pointer-events:none}
/* THE PULSE ring breathes at the tick's cadence · those four nodes ARE the heartbeat */
.g-pulse .nhalo{animation:halob 5.2s ease-in-out infinite}
.mnode.nb .nhalo{opacity:1}                                     /* neighbor glow: halo full … */
.mnode.nb .ncore{opacity:1}                                     /* … core brightened … */
.mnode.nb .nshape{stroke:color-mix(in srgb, var(--lc) 60%, #FFFFFF)}  /* … rim warmed toward white */
.mnode.off{opacity:.05;pointer-events:none}
.me.eoff,.meu.eoff{opacity:.02 !important}
/* zoom rail · beneath the search + key + filter icons, one left column */
.tzoom{position:absolute;left:14px;top:224px;display:flex;flex-direction:column;gap:6px;z-index:6;transition:opacity .24s ease,transform .24s ease}
/* the rails YIELD to the inspector (user design order 2026-07-19 · supersedes the
   07-18 step-left rule): while node info holds the right edge, the left rail slides
   home and fades on the drawer's own clock, and returns the moment the node is
   clicked off. One motion, two doors. */
#tview:has(#tdrawer.open) .ticons,#tview:has(#tdrawer.open) .tzoom{
  opacity:0;transform:translateX(-58px);pointer-events:none}
.ticons{transition:opacity .24s ease,transform .24s ease}
.tzoom button{width:36px;height:34px;background:rgba(20,20,24,.9);border:1px solid var(--line2);border-radius:7px;
  color:var(--ink2);font:600 13px var(--mono);cursor:pointer}
.tzoom button:hover{color:var(--ink);border-color:var(--red)}
/* the inspector · docked RIGHT on desktop, bottom SHEET on phones · it never
   takes the whole screen (user law 2026-07-18) and the map stays alive beside it */
#tdrawer{position:absolute;top:0;right:0;bottom:0;width:min(430px,86vw);background:rgba(11,11,14,.96);
  backdrop-filter:blur(16px);border-left:1px solid var(--line2);padding:16px 20px 44px;overflow-y:auto;
  transform:translateX(103%);transition:transform .24s ease;z-index:7;cursor:default;overscroll-behavior:contain}
#tdrawer.open{transform:none}
.dwgrip{display:none}
.dwx{position:absolute;top:10px;right:12px;background:none;border:none;color:var(--dim);font-size:15px;cursor:pointer;padding:6px}
.dwx:hover{color:var(--red)}
.dwhead{margin-bottom:12px}
.dwhead h2{font:600 19px var(--disp);color:var(--ink);letter-spacing:.02em;margin:8px 0 3px}
.dwq{font-size:12px;color:var(--dim);font-style:italic}
.dwsec{margin:0 0 14px}
.dwwhy{background:color-mix(in srgb, var(--lc) 8%, transparent);border-radius:8px;padding:10px 12px;margin:0 0 14px}
.dwwhy p{font-size:12px;line-height:1.7;color:var(--ink2)}
.dwwhy b{color:var(--ink)}
.lchip{font-family:var(--mono);font-size:8px;letter-spacing:.16em;padding:2.5px 7px;border-radius:4px;
  color:var(--lc);background:color-mix(in srgb, var(--lc) 14%, transparent);font-weight:600}
.lchip.foamchip{color:#0B0B0C;background:color-mix(in srgb, #DCE3E8 82%, transparent)}
.dchip,.vchip{font-family:var(--mono);font-size:8px;letter-spacing:.1em;padding:2.5px 6px;border-radius:4px;color:var(--dim);background:rgba(236,234,232,.06)}
.dchip.hot{color:#FF8A7D;background:rgba(255,74,56,.14)}
.tbin{font-style:normal;color:var(--faint2);font-size:10px;display:block}
.thow{font-size:12.5px;line-height:1.75;color:var(--ink2);max-width:820px;margin-bottom:12px}
.tsec{margin-bottom:12px}
.tread{display:inline-block;font-family:var(--mono);font-size:9.5px;color:var(--ink2);background:rgba(76,134,232,.1);border-radius:4px;padding:3px 8px;margin:0 5px 5px 0}
.tbrs .tbr{display:flex;align-items:center;gap:9px;padding:5px 0;flex-wrap:wrap}
.tbk{font-family:var(--mono);font-size:8px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);width:74px;flex:none}
.tbl{font-size:12px;color:var(--ink2);min-width:180px;flex:1}
.tbp{font-family:var(--mono);font-size:9.5px;color:var(--ink);background:rgba(236,234,232,.07);padding:2px 6px;border-radius:4px}
.tbp i{font-style:normal;color:var(--faint2);margin-left:4px;font-size:8px;letter-spacing:.08em}
.tgo{font-family:var(--mono);font-size:9px;letter-spacing:.08em;color:var(--lc);background:color-mix(in srgb, var(--lc) 11%, transparent);
  border:none;border-radius:4px;padding:3px 9px;cursor:pointer}
.tgo:hover{background:color-mix(in srgb, var(--lc) 22%, transparent)}
.tend{font-family:var(--mono);font-size:8.5px;color:var(--faint2);letter-spacing:.1em;text-transform:uppercase}
/* probability */
.tprob{margin-bottom:12px;max-width:560px}
.pbar{display:flex;gap:2px;height:8px;margin-bottom:7px}
.pseg{flex:1;background:var(--lc);border-radius:2px;min-width:3px}
.plgs{display:flex;flex-wrap:wrap;gap:4px 14px;margin-bottom:5px}
.plg{font-family:var(--mono);font-size:9px;color:var(--ink2);letter-spacing:.04em}
.plg b{color:var(--ink);font-weight:600}
.plg i{font-style:normal;font-size:7.5px;letter-spacing:.1em;text-transform:uppercase;padding:1.5px 5px;border-radius:3px;margin-left:4px}
.plg .pb-observed{color:#4ED9A8;background:rgba(12,144,112,.16)}
.plg .pb-designed{color:var(--ink2);background:rgba(236,234,232,.09)}
.plg .pb-est{color:#E2B577;background:rgba(201,138,61,.13)}
.pdesc{font-size:10.5px;color:var(--dim);line-height:1.6;font-style:italic}
/* guards, learns, refs */
.tgu{list-style:none;max-width:760px}
.tgu li{font-size:11.5px;color:var(--ink2);padding:2.5px 0 2.5px 14px;position:relative;line-height:1.55}
.tgu li::before{content:'';position:absolute;left:0;top:9px;width:6px;height:2px;background:var(--lc);opacity:.7}
.tlearns .tln{display:flex;gap:10px;align-items:baseline;padding:5px 0;flex-wrap:wrap;max-width:820px}
.tld{font-family:var(--mono);font-size:8.5px;color:#B08DF0;flex:none;letter-spacing:.06em}
.tli{font-size:11.5px;color:var(--ink2);flex:1;min-width:240px;line-height:1.55}
.tlw{font-family:var(--mono);font-size:9px;color:#CDB4F5;background:rgba(142,63,214,.13);padding:3px 9px;border-radius:4px;letter-spacing:.04em;line-height:1.5}
.tref{display:inline-block;font-family:var(--mono);font-size:9px;color:var(--dim);background:rgba(236,234,232,.05);border-radius:4px;padding:3px 8px;margin:0 5px 5px 0}
/* floating chrome over the map */
.fpanel{position:absolute;z-index:6;background:rgba(10,10,14,.74);backdrop-filter:blur(14px);
  border:1px solid rgba(236,234,232,.06);border-radius:15px;padding:10px 15px;cursor:default}
.fhead{top:14px;left:16px;display:flex;align-items:center;gap:13px;flex-wrap:wrap;max-width:min(900px,calc(100vw - 220px))}
.fhead h1{font-family:var(--disp);font-size:18px;letter-spacing:.13em;color:var(--ink);font-weight:700;white-space:nowrap}
.fhead h1 b{color:var(--red)}
.fver{font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.08em;color:#FF7A6C;background:rgba(255,69,52,.13);padding:3.5px 11px;border-radius:13px;cursor:help}
.fver.warn{color:#F5C87A;background:rgba(245,168,28,.16)}
.fmeta{font-family:var(--mono);font-size:11.5px;color:var(--ink2);letter-spacing:.04em}
.fstamp{font:600 10.5px var(--mono);color:var(--faint2);letter-spacing:.12em}   /* the last update · numbers only */
/* the filter panel moved into the corner rail (user order 2026-07-18) · .fctl is dead */
/* the tool rail · search + map key as icon buttons in the top-right corner
   (user order 2026-07-18), zoom rail beneath them · panels drop from their icons */
.ticons{position:absolute;top:84px;left:14px;z-index:7;display:flex;flex-direction:column;gap:6px}
.ticons>button{width:36px;height:34px;background:rgba(20,20,24,.9);border:1px solid var(--line2);border-radius:7px;
  color:var(--ink2);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}
.ticons>button svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.ticons>button:hover,.ticons>button.on{color:var(--ink);border-color:var(--red)}
.tsearchbox{position:absolute;top:0;left:44px}
.tsearchbox input{width:min(250px,58vw);background:rgba(13,13,17,.95);backdrop-filter:blur(10px);border:1px solid var(--line2);
  border-radius:7px;color:var(--ink);font:12.5px var(--font);padding:8px 12px;outline:none}
.tsearchbox input:focus{border-color:var(--red)}
#tlegpanel,#tfpanel{position:absolute;top:124px;left:0;width:min(520px,92vw);max-height:min(64vh,660px);overflow-y:auto;
  background:rgba(10,10,15,.92);backdrop-filter:blur(16px);border:1px solid rgba(236,234,232,.07);border-radius:18px;padding:17px 19px}
#tfpanel .tfilters{margin-bottom:0}
#tfpanel .rrow{margin-top:7px}
.lsec{margin-bottom:15px}
.lsec:last-child{margin-bottom:2px}
.lrow{display:flex;align-items:center;gap:10px;padding:3.5px 0}
.lrow b{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;color:var(--ink);font-weight:600;min-width:78px;text-transform:uppercase}
.lrow em{font-style:normal;font-size:11.5px;color:var(--dim);flex:1;line-height:1.5}
.lrow u{text-decoration:none;font-family:var(--mono);font-size:9.5px;color:var(--faint2)}
.ldot{width:11px;height:11px;border-radius:50%;background:var(--lc);flex:none;box-shadow:0 0 10px color-mix(in srgb, var(--lc) 70%, transparent)}
.lrow svg{width:26px;height:20px;flex:none;stroke:var(--ink2);fill:none;stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round}
.lrow.shp b{min-width:0;letter-spacing:.06em;text-transform:none;font-family:var(--font);font-size:11.5px;font-weight:500;color:var(--ink2)}
/* the shell key · the swatch strokes the REAL dash array, so it gets real width rather
   than the 26px glyph box (a squeezed swatch would lie about the rhythm it is naming) */
.lrow.shl{flex-wrap:wrap;align-items:center;padding:6px 0;gap:0 10px}
.lrow.shl svg{width:48px;height:14px;flex:none;stroke:none;stroke-width:1}
.lrow.shl b{min-width:0;letter-spacing:.1em;font-size:9px}
/* the reason drops to its own full-width line · a 520px panel cannot hold a label
   column and a sentence side by side without going ragged at every long field name */
.lrow.shl em{flex-basis:100%;margin-top:3px;font-size:11px;line-height:1.45}
.lrow .twire{flex:none}
@media(max-width:700px){
  /* phone: the inspector becomes a half-height bottom sheet with a grip · the
     map stays visible and interactive above it (never full-screen) */
  #tdrawer{top:auto;left:0;right:0;bottom:0;width:100vw;height:48dvh;border-left:none;
    border-top:1px solid var(--line2);border-radius:18px 18px 0 0;transform:translateY(106%);
    transition:transform .26s ease,height .22s ease;padding:8px 18px 40px}
  #tdrawer.open{transform:none}
  #tdrawer.tall{height:88dvh}
  .dwgrip{display:block;width:46px;height:5px;border-radius:3px;background:rgba(236,234,232,.24);
    margin:4px auto 10px;cursor:pointer}
  .tbk{width:auto}
  .fhead{max-width:calc(100vw - 70px)}
}

/* ---- R&D FEED (#/feed) · moved from rd-feed.vercel.app 2026-07-27.
   House system: frameless, hairline rules, mono chips, red accents. */
.feed{max-width:840px;margin:0 auto;padding:30px 20px 90px}
.fdhead{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap}
.fdhead h1{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:30px;letter-spacing:-.01em;color:#f2f2f1;margin:0}
.fdhead h1 b{color:#E5301C}
.fdstamp{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#6b6b70}
.fsec{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.18em;color:#6b6b70;text-transform:uppercase;
  margin:44px 0 14px;padding-bottom:9px;border-bottom:1px solid rgba(255,255,255,.07)}
.fsec::before{content:'◆ ';color:#E5301C}
.fnow{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}
.fcell{background:rgba(255,255,255,.03);padding:13px 15px;border-radius:9px;text-decoration:none;
  display:flex;flex-direction:column;gap:7px;transition:background .15s}
.fcell:hover{background:rgba(255,255,255,.055)}
.fk{font-family:'IBM Plex Mono',monospace;font-size:9.5px;letter-spacing:.15em;color:#ff5e51}
.fv{font-family:'Inter',sans-serif;font-size:12.5px;line-height:1.5;color:#c3c3c8}
.fnote{background:rgba(229,48,28,.05);border-radius:9px;padding:15px 17px;margin-bottom:10px}
.fnote.old{background:rgba(255,255,255,.025);opacity:.62}
.fcard{padding:17px 0 15px;border-bottom:1px solid rgba(255,255,255,.06)}
.fdmeta{display:flex;gap:8px;align-items:center}
.fchip{font-family:'IBM Plex Mono',monospace;font-size:9.5px;letter-spacing:.13em;text-transform:uppercase;
  color:#9a9a9f;background:rgba(255,255,255,.05);padding:3px 8px;border-radius:5px}
.fchip.red{color:#ff5e51;background:rgba(229,48,28,.14)}
.fbody{font-family:'Inter',sans-serif;font-size:13.5px;line-height:1.64;color:#c9c9cd;margin-top:9px}
.fnote .fbody{margin-top:8px}
.fbody strong{color:#f2f2f1;font-weight:600}
.fbody a{color:#ff5e51;text-decoration:none}
.fbody a:hover{text-decoration:underline}
.fcmt{font-family:'Inter',sans-serif;font-size:12px;line-height:1.5;color:#9a9a9f;padding:7px 0 0}
.fcmt b{color:#c9c9cd;font-weight:600;margin-right:7px}
.fcmf{display:flex;gap:8px;margin-top:11px}
.fcmf input{flex:1;min-width:0;background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.07);border-radius:6px;
  color:#e6e6e6;font-family:'Inter',sans-serif;font-size:12px;padding:6px 10px;outline:none}
.fcmf input:focus{border-color:rgba(229,48,28,.45)}
.fcmf button{background:none;border:none;cursor:pointer;font-family:'IBM Plex Mono',monospace;font-size:10px;
  letter-spacing:.14em;text-transform:uppercase;color:#6b6b70;padding:0 4px}
.fcmf button:hover{color:#ff5e51}
.ffiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:10px}
.ffile{background:rgba(255,255,255,.03);border-radius:9px;padding:12px 14px;text-decoration:none;
  font-family:'IBM Plex Mono',monospace;font-size:11.5px;color:#e0e0e0;transition:background .15s}
.ffile:hover{background:rgba(255,255,255,.055)}
.ffile em{display:block;font-style:normal;font-family:'Inter',sans-serif;font-size:10.5px;color:#6b6b70;margin-top:4px}
@media (max-width:560px){
  .feed{padding:22px 14px 70px}
  .fdhead h1{font-size:24px}
}
.lstale{font-family:'IBM Plex Mono',monospace;font-size:10.5px;letter-spacing:.08em;color:#ffb02e;
  background:rgba(255,176,46,.09);border-radius:7px;padding:9px 13px;margin:12px 0 4px}

/* budget leads the merged ledger page; the fires ledger follows on scroll */
#bwrap,#lwrap{scroll-margin-top:70px}
#lwrap{margin-top:34px}

/* budget: per-client drill-down (client -> video/image -> fires) */
.bprojs .bprow{cursor:pointer;user-select:none;grid-template-columns:minmax(0,1.6fr) 74px minmax(0,1fr) 14px;border-bottom:1px solid var(--line)}
.bprojs .bprow:hover{background:var(--card)}
.bprojs .bproj.open .bprow{border-bottom:none}
.bprojs .bproj:last-child:not(.open) .bprow{border-bottom:none}
.bcaret{color:var(--dim);font-size:10px;text-align:center;flex:none}
.bmods{padding:0 0 8px 6px;border-bottom:1px solid var(--line)}
.bproj:last-child .bmods{border-bottom:none}
.bmrow{display:grid;grid-template-columns:14px 50px minmax(0,1.2fr) 74px minmax(0,1fr);gap:10px;align-items:center;padding:4.5px 0;font-family:var(--mono);font-size:10.5px;color:var(--ink2);cursor:pointer;user-select:none}
.bmrow:hover .bmk{color:var(--ink)}
.bmk{text-transform:uppercase;letter-spacing:.08em;font-size:9.5px}
.bmn{color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bmn b{font-weight:500}
.bmm{text-align:right;color:var(--ink);font-variant-numeric:tabular-nums}
.bmtrack{height:4px;background:rgba(236,234,232,.07);border-radius:2px;overflow:hidden}
.bmtrack i{display:block;height:100%;background:var(--red);border-radius:2px;opacity:.75}
.bfires{max-height:300px;overflow:auto;border:1px solid var(--line);border-radius:5px;background:rgba(15,15,17,.6);margin:2px 0 8px 24px}
.bfirehead,.bfire{display:grid;grid-template-columns:96px minmax(0,1fr) 74px 70px 56px;gap:8px;align-items:center;padding:3.5px 10px;font-family:var(--mono);font-size:10px}
.bfirehead{position:sticky;top:0;background:var(--blk);border-bottom:1px solid var(--line);color:var(--dim);letter-spacing:.06em;padding:5px 10px}
.bfire{color:var(--ink2);border-bottom:1px solid rgba(236,234,232,.05);cursor:pointer}
.bfire:last-child{border-bottom:none}
.bfire:hover{background:var(--card)}
.bf-cost{text-align:right;font-variant-numeric:tabular-nums;color:var(--ink)}
@media(max-width:900px){
  .bfirehead,.bfire{grid-template-columns:96px minmax(0,1fr) 62px 52px}
  .bf-len{display:none}
}

/* ---- V5 · THE TREE STANDS UP (2026-08-10): canvas chrome. The map itself is drawn
   by tree3d.js · these style only the floating instruments over it. ---- */
#tmap3d{position:absolute;inset:0;display:block;cursor:grab;touch-action:none}
.thint{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);font:10px var(--mono);
  letter-spacing:.14em;text-transform:uppercase;color:var(--dim);background:rgba(6,6,7,.62);
  border:1px solid var(--line);padding:4px 12px;border-radius:12px;pointer-events:none;z-index:4;white-space:nowrap}
@media(max-width:700px){.thint{display:none}}
.fhead .fver{border-bottom:2px solid transparent;border-image:linear-gradient(90deg,var(--red),var(--sky)) 1;border-image-width:0 0 2px 0}
/* the population section in the inspector (V6 · the cell) */
.dwcell .cellhead{font-size:13px;color:var(--ink);margin:2px 0 4px}
.dwcell .cellhead b{font-size:17px;color:var(--lc,var(--red));font-variant-numeric:tabular-nums;font-family:var(--mono)}
.dwcell .cellkind{display:inline-block;font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--lc,var(--mist));border:1px solid color-mix(in srgb,var(--lc,var(--mist)) 45%,transparent);border-radius:20px;padding:1px 8px;margin-left:4px;vertical-align:middle}
.dwcell .celldesc{font-size:11.5px;color:var(--ink2);line-height:1.6}
.dwwhy .dwemergent{margin-top:8px;font-size:10.5px;color:var(--dim);line-height:1.55;font-style:italic}
