@font-face{font-family:'Archivo';src:url('fonts/Archivo-Variable.ttf') format('truetype');font-weight:100 900;font-stretch:62.5% 125%;font-display:swap}
@font-face{font-family:'IBM Plex Mono';src:url('fonts/IBMPlexMono-Regular.ttf') format('truetype');font-weight:400;font-display:swap}
:root{--void:#050607;--bg:#0a0c0d;--panel:#0e1112;--panel2:#131718;--line:#1f2528;--line2:#2c3538;--white:#e8ecea;--mut:#9aa39f;--dim:#7d8985;--red:#e63226;--redtext:#f16e64;--green:#89cba6;--phos:#9ef0c0;--amber:#dfb974;--mono:'IBM Plex Mono',ui-monospace,'SF Mono',Menlo,Consolas,monospace;--sans:'Archivo',system-ui,sans-serif;--sat:env(safe-area-inset-top,0px);--sab:env(safe-area-inset-bottom,0px)}
*{box-sizing:border-box}html{height:100%}body{margin:0;min-height:100%;background:var(--void);color:var(--white);font:400 12px/1.45 var(--mono);-webkit-font-smoothing:antialiased;padding-top:var(--sat);padding-bottom:var(--sab)}
button,input,select{font:inherit;color:inherit}button,a,select,input{touch-action:manipulation}
.skip{position:absolute;left:-999px;top:0;background:var(--red);color:#fff;padding:6px 10px;z-index:99}.skip:focus{left:8px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.noscript{padding:20px;font-family:var(--mono)}

/* ---------- status bar ---------- */
.statusbar{position:sticky;top:var(--sat);z-index:20;display:flex;justify-content:space-between;align-items:center;gap:12px;height:34px;padding:0 12px;background:#070809;border-bottom:1px solid var(--line2);font-size:10px;letter-spacing:.08em;text-transform:uppercase}
.sb-left,.sb-right{display:flex;align-items:center;gap:14px;min-width:0}
.sb-brand{display:inline-flex;align-items:center;gap:7px;font-weight:600;color:var(--white);letter-spacing:.14em}.sb-brand svg{width:13px;height:13px;color:var(--red)}
.sb-sys{color:var(--red);font-weight:600;letter-spacing:.14em}
.sb-sep{width:1px;height:14px;background:var(--line2)}
.sb-kv{display:inline-flex;gap:6px;white-space:nowrap}.sb-kv b{color:var(--dim);font-weight:500}.sb-kv span{color:var(--mut)}.sb-kv .warn{color:var(--amber)}
.sb-state span{color:var(--green)}.sb-state span.running{color:var(--phos);animation:blink 1.1s steps(2,start) infinite}.sb-state span.done{color:var(--amber)}
.sb-btn{background:transparent;border:1px solid var(--line2);color:var(--mut);padding:3px 9px;letter-spacing:.1em;font-size:10px;cursor:pointer}.sb-btn:hover,.sb-btn[aria-expanded="true"]{border-color:var(--red);color:var(--white)}
@keyframes blink{50%{opacity:.35}}

/* ---------- grid ---------- */
.grid{display:grid;gap:4px;padding:4px;grid-template-columns:minmax(0,7fr) minmax(300px,3fr) minmax(200px,2fr);grid-template-rows:auto minmax(420px,3fr) minmax(140px,1.4fr) minmax(160px,1.6fr);height:calc(100vh - 35px - var(--sat) - var(--sab));min-height:820px;grid-template-areas:
 "ctl      ctl      ctl"
 "mesh     case     registry"
 "trace    receipts recovery"
 "log      log      checks"}
.cell{background:var(--panel);border:1px solid var(--line);display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}
.cell-ctl{grid-area:ctl}.cell-mesh{grid-area:mesh}.cell-case{grid-area:case}.cell-registry{grid-area:registry}.cell-trace{grid-area:trace}.cell-receipts{grid-area:receipts}.cell-recovery{grid-area:recovery}.cell-checks{grid-area:checks}.cell-log{grid-area:log}
.cell-hd{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:6px 10px;border-bottom:1px solid var(--line);background:var(--panel2);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--mut);min-height:28px}
.hd-t{display:inline-flex;align-items:center;gap:7px;color:var(--white);font-weight:600;margin-right:auto}
.hd-kv{display:inline-flex;gap:6px;white-space:nowrap}.hd-kv b{color:var(--dim);font-weight:500}.hd-kv span{color:var(--white)}
.cell-ft{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:5px 10px;border-top:1px solid var(--line);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
.led{width:6px;height:6px;border-radius:50%;background:var(--dim);box-shadow:0 0 4px transparent}.led.green{background:var(--phos);box-shadow:0 0 6px var(--phos);animation:ledpulse 2.4s ease-in-out infinite}
@keyframes ledpulse{50%{opacity:.55}}
.lbl{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim)}

/* ---------- controls ---------- */
.mission{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:5px 10px;border-bottom:1px solid var(--line);background:var(--panel2);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--white)}.mission-obj{margin-left:auto;color:var(--dim);text-transform:none;letter-spacing:.02em;font-size:10px}
.ctl-row{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;padding:8px 10px}
.fld{display:flex;flex-direction:column;gap:3px;min-width:0}.fld-grow{flex:1 1 280px}.fld-seed{width:110px}.fld-rate{width:80px}
select,input[type=number]{background:#070809;border:1px solid var(--line2);color:var(--white);padding:6px 8px;font-size:11px;letter-spacing:.02em;height:30px;border-radius:0;-webkit-appearance:none;appearance:none}
select{background-image:linear-gradient(45deg,transparent 50%,var(--dim) 50%),linear-gradient(135deg,var(--dim) 50%,transparent 50%);background-position:calc(100% - 14px) 12px,calc(100% - 9px) 12px;background-size:5px 5px;background-repeat:no-repeat;padding-right:26px}
select:focus,input:focus,button:focus-visible{outline:1px solid var(--phos);outline-offset:1px}
.btns{display:flex;gap:6px;flex-wrap:wrap}.btns.stack{flex-direction:column}.btns.stack .btn{width:100%}.btns.inline{margin-left:auto}.btns.wrap .btn.wide{flex:1 1 100%;white-space:normal;line-height:1.3;padding:6px 12px;min-width:0}.btns.wrap .btn{min-width:0}
.btn{background:#101415;border:1px solid var(--line2);color:var(--mut);padding:0 12px;min-height:30px;font-size:10px;letter-spacing:.1em;text-transform:uppercase;cursor:pointer;border-radius:0;white-space:nowrap;transition:border-color .15s,color .15s,background .15s}
.btn:hover:not(:disabled){border-color:var(--white);color:var(--white)}.btn:disabled{opacity:.35;cursor:not-allowed}
.btn.primary{background:var(--red);border-color:var(--red);color:#fff;font-weight:600;min-width:96px}.btn.primary:hover{background:#ff3b2e}
.btn.danger{border-color:#6a2a25;color:var(--redtext)}.btn.danger:hover:not(:disabled){border-color:var(--red);background:#2a1310}
.btn.sm{height:24px;padding:0 9px;font-size:9px}
.btn.approved{border-color:var(--green);color:var(--green);background:#0f1a15}.btn.approved::before{content:"\2713 ";font-weight:600}
.brief{margin:0;padding:5px 10px 7px;color:var(--mut);font-size:10.5px;line-height:1.4;border-top:1px dashed var(--line)}
.run-state{font-weight:600}

/* ---------- mesh ---------- */
.mesh-wrap{position:relative;flex:1;min-height:0;background:#070809}
.mesh-wrap::after{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.018) 0 1px,transparent 1px 3px);mix-blend-mode:overlay}
#mesh-scene{display:block;width:100%;height:100%}
.legend span{display:inline-flex;align-items:center;gap:5px}.ld{width:8px;height:8px;border-radius:50%;background:var(--green);display:inline-block}.ld.sus{background:var(--red)}.ld.box{border-radius:0;background:transparent;border:1px solid var(--green)}
.ll{width:14px;height:2px;display:inline-block}.ll.route{background:var(--green)}.ll.denied{background:var(--amber)}.ll.contained{background:var(--red)}
.ft-hint{margin-left:auto;color:var(--dim)}
.cell-hd .legend{display:flex;gap:10px;font-size:9px}

/* ---------- case ---------- */
.case-body{display:flex;flex-direction:column;gap:9px;padding:10px;overflow:auto;min-height:0}
.case-state{display:flex;align-items:center;gap:9px;padding:6px 0 2px}.case-state h3{margin:0;font-size:20px;font-weight:600;letter-spacing:.06em;color:var(--white);text-transform:uppercase}
.status-mark{width:8px;height:22px;background:var(--green);flex:none;transition:background .3s}/* colour is set inline by ui.js from authority tier: T0 red, T1 amber, T2 green */
.reason{margin:0;color:var(--mut);font-size:11px;line-height:1.5;min-height:2.6em}
.kv{margin:0;display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border:1px solid var(--line)}.kv>div{background:var(--panel);padding:5px 8px;display:flex;flex-direction:column;gap:1px;min-width:0}.kv dt{font-size:10px;letter-spacing:.1em;color:var(--dim)}.kv dd{margin:0;font-size:11px;color:var(--white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.phase-strip{display:grid;grid-template-columns:repeat(6,1fr);gap:2px}.phase-strip>div{background:var(--panel2);border:1px solid var(--line);padding:5px 2px;text-align:center;transition:background .3s,border-color .3s,color .3s}.phase-strip span{display:block;font-size:10px;color:var(--dim)}.phase-strip strong{display:block;font-size:10px;letter-spacing:.06em;color:var(--dim);font-weight:600}
.phase-strip>div.done strong{color:var(--green)}.phase-strip>div.current{border-color:var(--phos);background:#0f1a15}.phase-strip>div.current strong{color:var(--phos)}
.sub-hd{display:flex;justify-content:space-between;align-items:center;padding-top:4px;border-top:1px dashed var(--line)}
.witnesses{display:grid;grid-template-columns:repeat(5,1fr);gap:3px}.witness{background:var(--panel2);border:1px solid var(--line);padding:5px 3px;text-align:center;display:flex;flex-direction:column;gap:2px;transition:border-color .3s}.witness.valid{border-color:var(--green)}.w-name{font-size:10px;color:var(--mut)}.w-vote{font-size:10px;letter-spacing:.06em;color:var(--dim)}.witness.valid .w-vote{color:var(--green)}
.fine{margin:0;color:var(--dim);font-size:10px;line-height:1.45}

/* ---------- registry ---------- */
.agent-registry{display:flex;flex-direction:column;gap:2px;padding:6px;overflow:auto;min-height:0;flex:1}
.registry-agent{width:100%;margin:0;display:grid;grid-template-columns:26px 1fr auto;align-items:center;gap:8px;background:var(--panel2);border:1px solid var(--line);padding:5px 7px;text-align:left;cursor:pointer;transition:border-color .25s,background .25s;border-radius:0}
.registry-agent:hover{border-color:var(--line2)}.registry-agent[aria-pressed="true"]{border-color:var(--white);background:#161b1d}
.registry-agent.restricted{border-color:#5a2420}.registry-agent.restricted .registry-icon{color:var(--redtext);border-color:var(--red)}.registry-agent.captured .registry-icon{color:var(--dim);border-color:var(--dim)}
.registry-icon{width:26px;height:26px;border:1px solid var(--green);color:var(--green);display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:600}
.registry-agent strong{display:block;font-size:10px;color:var(--white);letter-spacing:.04em}.registry-agent small{display:block;font-size:10px;color:var(--dim);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.registry-tier{font-size:10px;font-weight:600;color:var(--mut)}.registry-agent.restricted .registry-tier{color:var(--redtext)}

/* ---------- trace ---------- */
#trace{display:block;width:100%;height:100%;flex:1;min-height:110px}

/* ---------- receipts / recovery / checks ---------- */
.receipt-list{display:flex;flex-direction:column;gap:2px;padding:8px 10px 4px;overflow:auto;min-height:0;flex:1}
.receipt{display:grid;grid-template-columns:18px 1fr auto;align-items:center;gap:8px;background:var(--panel2);border:1px solid var(--line);padding:5px 8px;font-size:10px;transition:border-color .3s}
.receipt-icon{width:14px;height:14px;border:1px solid var(--dim);display:flex;align-items:center;justify-content:center;font-size:10px;color:var(--dim)}
.receipt:has(.receipt-status.fresh){border-color:var(--green)}.receipt:has(.receipt-status.fresh) .receipt-icon{border-color:var(--green);color:var(--green)}.receipt:has(.receipt-status.failed){border-color:var(--red)}.receipt:has(.receipt-status.failed) .receipt-icon{border-color:var(--red);color:var(--redtext)}
.receipt>div strong{display:block;font-size:10px;color:var(--white);font-weight:500}.receipt>div small{display:block;font-size:10px;color:var(--dim);letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.receipt-status{font-size:10px;letter-spacing:.08em;color:var(--dim);text-align:right;white-space:nowrap}.receipt-status small{display:block;font-size:10px;color:var(--dim);letter-spacing:.02em}.receipt-status.fresh{color:var(--green)}.receipt-status.failed{color:var(--redtext)}
.cell-receipts>.fine,.cell-recovery .rec-body>.fine{flex:none;padding:5px 10px 7px;border-top:1px solid var(--line);background:var(--panel)}.cell-checks .fine{padding:0 10px 8px}
.rec-body{display:flex;flex-direction:column;gap:8px;padding:9px 10px;overflow:auto;min-height:0}
.sandbox{background:var(--panel2);border:1px solid var(--line);padding:7px 9px;display:flex;flex-direction:column;gap:2px}.sandbox strong{font-size:12px;color:var(--white);letter-spacing:.04em}.sandbox p{margin:0;font-size:10px;color:var(--dim);line-height:1.4}
.meter{display:flex;flex-direction:column;gap:4px}.meter-hd{display:flex;justify-content:space-between;align-items:baseline}.meter-hd strong{font-size:13px;color:var(--white)}.meter-hd small{font-size:10px;color:var(--dim);font-weight:400}
.meter-track{height:6px;background:#070809;border:1px solid var(--line2);position:relative;overflow:hidden}.meter-track span{position:absolute;inset:0;width:0;background:var(--green);transition:width .3s linear}
.coverage{padding:8px 10px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:2px}.coverage strong{font-size:11px;color:var(--green);letter-spacing:.06em}.coverage strong.gap{color:var(--redtext)}.coverage p{margin:0;font-size:10px;color:var(--dim)}
.check-list{display:flex;flex-direction:column;gap:2px;padding:6px 10px 8px;overflow:auto;min-height:0;flex:1}
.check{display:grid;grid-template-columns:16px 1fr;gap:7px;align-items:start;padding:4px 6px;border:1px solid transparent;transition:background .4s,border-color .4s}.check-icon{color:var(--green);font-size:10px;font-weight:600;padding-top:1px}.check strong{display:block;font-size:10px;color:var(--white);font-weight:500}.check small{display:block;font-size:10px;color:var(--dim);line-height:1.35}
.check.fail{border-color:#5a2420;background:#1a0f0e;animation:checkfail .6s ease-out}.check.fail .check-icon{color:var(--redtext)}
@keyframes checkfail{0%{background:#e6322640}100%{background:#1a0f0e}}

/* ---------- log ---------- */
.table-scroll{overflow:auto;flex:1;min-height:120px}
table{width:100%;border-collapse:collapse;font-size:10px}th{position:sticky;top:0;background:var(--panel2);text-align:left;padding:5px 8px;font-size:10px;letter-spacing:.1em;color:var(--dim);font-weight:500;border-bottom:1px solid var(--line)}
td{padding:4px 8px;border-bottom:1px solid var(--line);vertical-align:top;color:var(--mut)}td:first-child{color:var(--dim);white-space:nowrap;width:52px}td:nth-child(2){color:var(--white);white-space:nowrap}
.event-target{display:block;font-size:10px;color:var(--dim);letter-spacing:.04em}
tr.event-critical td:nth-child(2){color:var(--redtext)}tr.event-recovery td:nth-child(2){color:var(--green)}
.ledger code{margin-left:auto;font-size:10px;color:var(--mut);letter-spacing:.02em;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- drawer ---------- */
.drawer{position:fixed;inset:calc(34px + var(--sat)) 0 0 0;z-index:30;background:rgba(5,6,7,.97);overflow:auto;padding:0 0 30px}.drawer[hidden]{display:none}
.drawer-hd{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:var(--panel2);border-bottom:1px solid var(--line2)}
.drawer-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:24px;padding:20px 16px;max-width:1400px}
.drawer h4{margin:14px 0 4px;font-size:10px;letter-spacing:.14em;color:var(--red);font-weight:600}.drawer h4:first-child{margin-top:0}.drawer p{margin:0 0 8px;font-size:11px;line-height:1.55;color:var(--mut)}
.map{margin:0}.map div{display:grid;grid-template-columns:110px 1fr;gap:8px;padding:4px 0;border-bottom:1px dashed var(--line)}.map dt{font-size:10px;color:var(--white);letter-spacing:.06em}.map dd{margin:0;font-size:10px;color:var(--mut)}

/* ---------- toast ---------- */
.toast{position:fixed;left:50%;bottom:calc(16px + var(--sab));transform:translate(-50%,10px);background:#101415;border:1px solid var(--line2);border-left:3px solid var(--phos);color:var(--white);padding:9px 14px;font-size:10.5px;max-width:min(560px,92vw);opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;z-index:40}.toast.visible{opacity:1;transform:translate(-50%,0)}

/* ---------- responsive ---------- */
@media (max-width:1000px){.statusbar{height:auto;padding:5px 10px;flex-wrap:wrap;gap:4px 10px}.sb-left,.sb-right{flex-wrap:wrap;gap:8px}}
@media (max-width:1180px){.grid{height:auto;min-height:0;grid-template-rows:auto;grid-template-columns:minmax(0,3fr) minmax(280px,2fr);grid-template-areas:"ctl ctl" "mesh case" "registry registry" "trace trace" "receipts recovery" "checks checks" "log log"}.cell-registry .agent-registry{flex-direction:row;flex-wrap:wrap}.registry-agent{flex:1 1 200px}}
.brief.warn{color:var(--amber)}
.sb-scope{display:none;gap:6px;color:var(--amber);letter-spacing:.08em;font-size:9.5px}
@media (max-width:760px){.grid{grid-template-columns:1fr;grid-template-rows:auto;grid-template-areas:"ctl" "mesh" "case" "registry" "trace" "receipts" "recovery" "checks" "log"}.sb-left .sb-kv:not(:first-of-type),.sb-left .sb-sep:not(:first-of-type){display:none}.sb-scope{display:inline-flex}.cell-mesh{min-height:360px}.mesh-wrap{min-height:320px}.statusbar{height:auto;padding:5px 10px;flex-wrap:wrap;gap:4px 10px}.sb-left,.sb-right{flex-wrap:wrap;gap:8px}.fld-grow{flex-basis:100%}.registry-agent{flex-basis:100%}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
