:root{
  --bg:#fafafa;--s1:#ffffff;--s2:#fafafa;--s3:#f2f2f2;--s4:#ebebeb;
  --b1:#e6e6e6;--b2:#d4d4d4;
  --t1:#171717;--t2:#666666;--t3:#999999;
  --blue:#0070f3;--blue-d:rgba(0,112,243,.08);
  --green:#0a8f3c;--green-d:rgba(10,143,60,.10);
  --amber:#b45309;--amber-d:rgba(180,83,9,.10);
  --red:#e00;--red-d:rgba(238,0,0,.08);
  --purple:#6d28d9;--cyan:#0e7490;
  --btn:#171717;--btn-t:#ffffff;
  --term-bg:#fafafa;--fig-fill:#ffffff;--fig-stroke:#8a8a8a;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --sans:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
  color-scheme:light;
}
[data-theme=dark]{
  --bg:#0a0a0a;--s1:#111111;--s2:#151515;--s3:#1a1a1a;--s4:#222222;
  --b1:#262626;--b2:#333333;
  --t1:#ededed;--t2:#a1a1a1;--t3:#6b6b6b;
  --blue:#3291ff;--blue-d:rgba(50,145,255,.12);
  --green:#2fbf5f;--green-d:rgba(47,191,95,.12);
  --amber:#f5a623;--amber-d:rgba(245,166,35,.12);
  --red:#ff4d4f;--red-d:rgba(255,77,79,.12);
  --purple:#a78bfa;--cyan:#22d3ee;
  --btn:#ededed;--btn-t:#111111;
  --term-bg:#0d0d0d;--fig-fill:#151515;--fig-stroke:#666;
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{height:100%;max-width:100%;overflow:hidden}
html{height:100%;height:100dvh}
body{margin:0;overflow:hidden;background:var(--bg);color:var(--t1);font:13px/1.45 var(--sans);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}
button,input,select,textarea{font:inherit;color:inherit}
code{font-family:var(--mono);font-size:11px;background:var(--s3);padding:1px 5px;border-radius:3px;border:1px solid var(--b1)}
.mono{font-family:var(--mono)}
.c-blue{color:var(--blue)}.c-green{color:var(--green)}.c-amber{color:var(--amber)}.c-red{color:var(--red)}.c-muted{color:var(--t3)}
.row{display:flex;align-items:center;gap:8px}
.muted{color:var(--t3)}
::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--b2);border:3px solid transparent;background-clip:padding-box;border-radius:6px}

/* layout */
.app{display:grid;grid-template-columns:208px minmax(0,1fr);height:100vh;height:100dvh;min-width:0}
.sidebar{background:var(--bg);border-right:1px solid var(--b1);display:flex;flex-direction:column;min-height:0;min-width:0;overflow:hidden}
.brand{display:flex;gap:10px;align-items:center;padding:0 16px;height:48px;flex:none}
.brand-mark{width:24px;height:24px;border:1px solid var(--b2);border-radius:5px;display:grid;place-items:center;font:600 10px var(--mono);color:var(--t1);background:var(--s1)}
.brand-name{font-weight:600;font-size:13px;line-height:1.2}
.brand-sub{font-size:11px;color:var(--t3)}
.nav{padding:6px 8px;display:flex;flex-direction:column;gap:1px;flex:1;min-height:0;overflow:auto}
.nav-item{display:flex;align-items:center;gap:9px;height:30px;padding:0 10px;border-radius:5px;color:var(--t2);text-decoration:none;transition:background .1s,color .1s}
.nav-item svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.nav-item:hover{background:var(--s3);color:var(--t1)}
.nav-item.active{background:var(--s4);color:var(--t1)}
.nav-item .kbd{display:none}
.sidebar-foot{margin-top:auto;padding:12px 16px;border-top:1px solid var(--b1);font:11px var(--mono);color:var(--t2);display:flex;flex-direction:column;gap:5px;flex:none}
.sidebar-foot .row{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.main{display:flex;flex-direction:column;min-width:0;min-height:0}
.topbar{min-height:48px;display:flex;align-items:center;padding:0 16px;padding-right:max(16px,env(safe-area-inset-right));border-bottom:1px solid var(--b1);background:var(--s1);gap:10px;flex:none}
.topbar-title{font-weight:600;font-size:13px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar-status{margin-left:auto;display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:flex-end;min-width:0}
.pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--t2)}
.pill b{color:var(--t1);font-weight:500}
.pill.mono{font-size:11.5px}
.clock{font:11.5px var(--mono);color:var(--t3)}
.content{flex:1;min-height:0;min-width:0;overflow:auto;padding:20px 24px;padding-left:max(24px,env(safe-area-inset-left));padding-right:max(24px,env(safe-area-inset-right));padding-bottom:max(20px,env(safe-area-inset-bottom))}
.page{display:none;min-width:0}
.page.active{display:block;min-height:100%}
#page-terminal.active,#page-logs.active{display:flex;flex-direction:column;height:100%;min-height:0}

/* dots / status */
.dot{width:6px;height:6px;border-radius:50%;background:var(--t3);display:inline-block;flex:none}
.dot.ok{background:var(--green)}.dot.warn{background:var(--amber)}.dot.err{background:var(--red)}.dot.blue{background:var(--blue)}
.dot.pulse{animation:pulse 1.2s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.25}}
.badge{display:inline-block;font:500 11px var(--mono);color:var(--t2);white-space:nowrap}
.badge.ok{color:var(--green)}.badge.running{color:var(--blue)}.badge.pending{color:var(--t3)}
.badge.error,.badge.aborted{color:var(--red)}.badge.warn,.badge.beta{color:var(--amber)}
.badge.grok{color:var(--purple)}.badge.mcp{color:var(--blue)}.badge.robot{color:var(--green)}.badge.camera{color:var(--cyan)}

/* panels */
.card{background:var(--s1);border:1px solid var(--b1);border-radius:6px;min-width:0}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:38px;padding:8px 14px;border-bottom:1px solid var(--b1);font-size:12.5px;font-weight:600;color:var(--t1);flex-wrap:wrap}
.card-h .sub{font-weight:400;color:var(--t3);font-family:var(--mono);font-size:11px}
.card-b{padding:14px}
.empty{color:var(--t3);padding:28px;text-align:center;font-size:12px}

/* buttons */
.btn{background:var(--s1);border:1px solid var(--b2);border-radius:5px;height:30px;padding:0 12px;cursor:pointer;color:var(--t1);transition:background .1s,border-color .1s;white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;gap:6px;font-size:12.5px}
.btn:hover{background:var(--s3);border-color:var(--t3)}
.btn:disabled{opacity:.4;cursor:not-allowed}
.btn.primary{background:var(--btn);border-color:var(--btn);color:var(--btn-t)}
.btn.primary:hover{opacity:.85}
.btn.danger{color:var(--red);border-color:var(--red)}
.btn.danger:hover{background:var(--red-d)}
.btn.sm{height:26px;padding:0 9px;font-size:11.5px}
.chip{background:var(--s1);border:1px solid var(--b1);border-radius:4px;height:26px;padding:0 9px;font-size:11.5px;color:var(--t2);cursor:pointer;transition:all .1s}
.chip:hover{color:var(--t1);border-color:var(--b2);background:var(--s3)}
.chip.active{color:var(--t1);background:var(--s4);border-color:var(--b2)}

/* overview */
.hero{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:16px;gap:12px;flex-wrap:wrap}
.hero h1{margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em}
.hero p{margin:2px 0 0;color:var(--t2);font-size:12.5px}
.hero-meta{display:flex;gap:14px;font-size:11px;color:var(--t3);flex-wrap:wrap}
.hero-meta b{color:var(--t2);font-weight:500}
.tiles{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--b1);border:1px solid var(--b1);border-radius:6px;margin-bottom:16px;overflow:hidden}
.tile{padding:12px 16px;min-width:0;background:var(--s1)}
.tile:last-child{grid-column:auto/-1}
.tile-k{font-size:11px;color:var(--t3);font-weight:500}
.tile-v{font-size:14px;font-weight:600;margin:4px 0 2px;display:flex;align-items:center;gap:7px}
.tile-s{font-size:11px;color:var(--t3)}
.bar{height:3px;background:var(--s4);border-radius:2px;overflow:hidden;margin:6px 0 6px}
.bar i{display:block;height:100%;background:var(--green);transition:width .6s}
.spark{height:18px;display:flex;align-items:flex-end;gap:2px;margin:4px 0 6px}
.spark i{flex:1;background:var(--b2);border-radius:1px;transition:height .3s}
.spark i:last-child{background:var(--blue)}
.grid-2{display:grid;grid-template-columns:1.4fr 1fr;gap:16px}

.flow{display:flex;align-items:stretch;overflow-x:auto;-webkit-overflow-scrolling:touch}
.flow-node{flex:1;background:var(--s1);border:1px solid var(--b1);border-radius:6px;padding:11px 13px;cursor:pointer;transition:border-color .12s;min-width:140px}
.flow-node:hover{border-color:var(--t3)}
.flow-node .n{font-weight:600;font-size:12.5px;display:flex;align-items:center;gap:7px}
.flow-node .d{font-size:11.5px;color:var(--t2);margin-top:3px;line-height:1.4}
.flow-node .p{font:10.5px var(--mono);color:var(--t3);margin-top:6px}
.flow-link{width:46px;flex:none;position:relative;display:flex;flex-direction:column;justify-content:center;gap:8px;padding:0 6px}
.flow-link i{display:block;height:1px;background:var(--b2);position:relative}
.flow-link i::before{content:"";position:absolute;right:-1px;top:-2.5px;border:3px solid transparent;border-left:4px solid var(--b2);border-right:0}
.flow-link i.up::before{right:auto;left:-1px;border-left:0;border-right:4px solid var(--b2)}
.flow-link i::after{content:"";position:absolute;top:-1.5px;width:4px;height:4px;border-radius:50%;background:var(--blue);animation:dotR 1.4s linear infinite}
.flow-link i.up::after{background:var(--green);animation:dotL 2s linear infinite}
.flow-link.hot i::after{animation-duration:.45s}
@keyframes dotR{from{left:0}to{left:100%}}
@keyframes dotL{from{left:100%}to{left:0}}

.console-card{display:flex;flex-direction:column;min-height:440px}
.console{flex:1;overflow:auto;padding:14px;display:flex;flex-direction:column;gap:10px;max-height:420px;min-height:280px}
.msg{display:grid;grid-template-columns:40px 1fr;gap:10px}
.msg .role{font:500 10.5px var(--mono);color:var(--t3);padding-top:3px;text-transform:uppercase}
.msg.user .body{color:var(--t1)}
.msg.grok .role{color:var(--purple)}
.msg.grok .body{color:var(--t2)}
.msg.tool .role{color:var(--blue)}
.msg.tool .body{font-family:var(--mono);font-size:11.5px;background:var(--s2);border:1px solid var(--b1);border-left:2px solid var(--blue);border-radius:4px;padding:7px 10px}
.msg.tool .call{color:var(--t1)}
.msg.tool .res{color:var(--t2);margin-top:5px;padding-top:5px;border-top:1px dashed var(--b1);white-space:pre-wrap;font-size:11px}
.msg.tool .st{float:right;margin-left:10px}
.chips{display:flex;gap:6px;flex-wrap:wrap;padding:0 14px 10px}
.console-in{display:flex;gap:8px;align-items:center;padding:10px 14px;border-top:1px solid var(--b1)}
.console-in input{flex:1;background:var(--s1);border:1px solid var(--b2);border-radius:5px;height:30px;padding:0 10px;outline:none}
.console-in input:focus{border-color:var(--t1)}

/* calls */
.calls{overflow:auto;max-height:520px}
.call{display:grid;grid-template-columns:30px 1fr auto;gap:10px;padding:8px 14px;border-bottom:1px solid var(--b1);align-items:center}
.call:last-child{border-bottom:0}
.call .id{font:11px var(--mono);color:var(--t3)}
.call .name{font:11.5px var(--mono);color:var(--t1);word-break:break-all}
.call .meta{font:10.5px var(--mono);color:var(--t3);margin-top:2px}
.call .right{text-align:right;display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.call .dur{font:10.5px var(--mono);color:var(--t3)}

/* live control */
.grid-ctl{display:grid;grid-template-columns:250px minmax(0,1fr) 330px;gap:16px;align-items:start;min-width:0}
.ctl-col{display:flex;flex-direction:column;gap:16px;min-width:0}
.ctl-col .estop{margin-top:0}
.ctl{display:flex;flex-direction:column;gap:14px}
.ctl-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.ctl-btn{height:34px}
.ctl-btn.span2{grid-column:span 2}
.ctl-btn.active{border-color:var(--blue);color:var(--blue);background:var(--blue-d)}
.field-row{display:flex;flex-direction:column;gap:8px}
.field-row label{font-size:11.5px;color:var(--t2)}
.field-row input[type=range]{width:100%;accent-color:var(--t1);margin-top:2px}
.ctl-extra{display:flex;gap:6px;flex-wrap:wrap}
.estop{margin-top:auto;height:64px;border-radius:4px;border:1px solid #b00;background:var(--red);color:#fff;font:700 15px var(--sans);letter-spacing:.12em;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;transition:filter .1s}
.estop span{font:500 9.5px var(--mono);letter-spacing:.25em;opacity:.85}
.estop:hover{filter:brightness(.92)}
.estop:active{filter:brightness(.85)}
.estop.engaged{animation:pulse 1s infinite}
.estop-bar{display:none;align-items:center;gap:8px;background:var(--red-d);border:1px solid var(--red);color:var(--red);padding:7px 12px;border-radius:5px;margin-bottom:14px;font:500 12px var(--mono);flex-wrap:wrap}
.estop-bar.on{display:flex}
.viz{display:grid;grid-template-columns:220px minmax(0,1fr);gap:12px;padding:12px;min-width:0}
.viz-fig{position:relative;background:var(--s2);border:1px solid var(--b1);border-radius:6px;display:grid;place-items:center;min-height:300px;background-image:linear-gradient(var(--b1) 1px,transparent 1px),linear-gradient(90deg,var(--b1) 1px,transparent 1px);background-size:24px 24px;background-position:center}
.viz-fig svg{height:280px;max-width:100%;overflow:visible}
.viz-badge{position:absolute;top:8px;left:8px;font-size:10.5px;color:var(--t2);border:1px solid var(--b1);background:var(--s1);padding:2px 7px;border-radius:3px}
#robot .part{fill:var(--fig-fill);stroke:var(--fig-stroke);stroke-width:1.5}
#robot .inner{fill:none;stroke:var(--t3);stroke-width:1}
#robot .visor{fill:var(--blue)}
#robot .joint{fill:var(--s1);stroke:var(--t2);stroke-width:1.2}
#robot .ground{stroke:var(--b2);stroke-width:1;stroke-dasharray:3 5}
#robot #upper,#robot #legs,#robot .arm,#robot .fore,#robot .leg,#robot .shin{transition:transform .9s cubic-bezier(.4,0,.2,1);transform-box:fill-box}
#robot .arm{transform-origin:50% 8%}
#robot .fore{transform-origin:50% 5%}
#robot .leg{transform-origin:50% 4%}
#robot .shin{transform-origin:50% 3%}
#robot #upper{transform-origin:50% 100%}
#robot #legs{transform-origin:50% 0}
#robot.pose-sitting #upper{transform:translateY(58px)}
#robot.pose-sitting #legs{transform:translateY(58px) scaleY(.55)}
#robot.pose-sitting .arm{transform:rotate(-12deg)}
#robot.pose-sitting #armL{transform:rotate(12deg)}
#robot.act-walking .leg,#robot.act-walking .arm{transition:none}
#robot.act-walking #legL{animation:stepA .7s ease-in-out infinite}
#robot.act-walking #legR{animation:stepA .7s ease-in-out infinite reverse}
#robot.act-walking #armL{animation:swing .7s ease-in-out infinite reverse}
#robot.act-walking #armR{animation:swing .7s ease-in-out infinite}
#robot.act-walking #upper{animation:bob .35s ease-in-out infinite}
@keyframes stepA{0%,100%{transform:scaleY(.86) rotate(6deg)}50%{transform:scaleY(1) rotate(-6deg)}}
@keyframes swing{0%,100%{transform:rotate(14deg)}50%{transform:rotate(-14deg)}}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
#robot.act-turning{animation:turnY 1.2s ease-in-out infinite}
@keyframes turnY{0%,100%{transform:scaleX(1)}50%{transform:scaleX(.72)}}
#robot.act-wave #armR{transform:rotate(-165deg)}
#robot.act-wave #armR .fore{animation:wave .5s ease-in-out infinite}
@keyframes wave{0%,100%{transform:rotate(-25deg)}50%{transform:rotate(25deg)}}
#robot.act-standing_up #upper,#robot.act-sitting_down #upper,#robot.act-standing_up #legs,#robot.act-sitting_down #legs{transition-duration:1.6s}
#robot.halted .visor{fill:var(--red)}
.viz-side{display:flex;flex-direction:column;gap:12px}
.minimap-wrap{position:relative;border:1px solid var(--b1);border-radius:6px;overflow:hidden;background:var(--s2);min-width:0}
.minimap-wrap canvas{display:block;width:100%;height:100%;min-height:300px;max-width:100%}
.viz .minimap-wrap{height:300px}
.minimap-l{position:absolute;bottom:6px;left:8px;font-size:10px;color:var(--t3)}
.kv{display:flex;flex-direction:column;font-size:11.5px}
.kv div{display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px solid var(--b1)}
.kv div:last-child{border:0}
.kv span{color:var(--t3)}
.kv b{font-weight:500;color:var(--t1)}

/* camera */
.grid-cam{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,320px);gap:16px}
.cam-wrap{position:relative;background:#000;border-radius:0 0 6px 6px;overflow:hidden;min-width:0}
.cam-wrap canvas{display:block;width:100%;height:auto;max-width:100%}
.cam-hud{position:absolute;font:11px var(--mono);color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.8);background:rgba(0,0,0,.45);padding:3px 7px;border-radius:3px}
.cam-hud b{color:#fff;font-weight:500}
.cam-hud.tl{top:10px;left:10px}.cam-hud.tr{top:10px;right:10px}.cam-hud.bl{bottom:10px;left:10px;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cam-hud.br{bottom:10px;right:10px}
.live{display:inline-flex;align-items:center;gap:6px;font:600 11px var(--mono);letter-spacing:.08em;color:#fff}
.live i{width:7px;height:7px;border-radius:50%;background:#f33;animation:pulse 1.2s infinite}
.sec-k{font-size:11px;color:var(--t3);font-weight:500;margin:14px 0 6px}
.sec-k:first-child{margin-top:0}
.dets{display:flex;flex-direction:column;gap:5px}
.det{display:grid;grid-template-columns:1fr 60px 38px;gap:8px;align-items:center;font-size:12px}
.det .l{display:flex;align-items:center;gap:8px}
.det .l i{width:7px;height:7px;border:1.5px solid var(--green);border-radius:1px}
.det .b{height:3px;background:var(--s4);border-radius:2px;overflow:hidden}
.det .b i{display:block;height:100%;background:var(--green);transition:width .4s}
.det .c{font:11px var(--mono);color:var(--t2);text-align:right}
.quote{background:var(--s2);border:1px solid var(--b1);border-radius:4px;padding:8px 10px;font-size:12px;color:var(--t1)}
.quote.small{font-size:11.5px;color:var(--t2)}

/* terminal */
.term-card{display:flex;flex-direction:column;flex:1;min-height:0;height:100%}
.term{flex:1;overflow:auto;padding:14px;font:12px/1.65 var(--mono);color:var(--t2);background:var(--term-bg)}
.term .l{white-space:pre-wrap;word-break:break-word}
.term .l.cmd{color:var(--t1);margin-top:6px}
.term .l.ok{color:var(--green)}.term .l.err{color:var(--red)}.term .l.dim{color:var(--t3)}.term .l.info{color:var(--t2)}
.term .t{color:var(--t3);margin-right:8px}
.tp{color:var(--green);margin-right:8px;font-family:var(--mono);font-size:12px}
.term-in{display:flex;align-items:center;padding:10px 14px;border-top:1px solid var(--b1);background:var(--term-bg);border-radius:0 0 6px 6px}
.term-in input{flex:1;background:transparent;border:0;outline:none;font:12px var(--mono);color:var(--t1)}

/* tables */
.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.tbl{width:100%;border-collapse:collapse;font-size:12.5px;min-width:720px}
.tbl th{text-align:left;font:500 11px var(--sans);color:var(--t3);padding:8px 14px;border-bottom:1px solid var(--b1);background:var(--s2)}
.tbl td{padding:10px 14px;border-bottom:1px solid var(--b1);vertical-align:top}
.tbl tr:last-child td{border-bottom:0}
.tbl tr:hover td{background:var(--s2)}
.tbl .tn{font:11.5px var(--mono);color:var(--t1)}
.tbl .params{font:11px var(--mono);color:var(--t2);display:flex;flex-direction:column;gap:2px}
.tbl .params b{color:var(--t1);font-weight:500}
.tbl .num{font-family:var(--mono);color:var(--t2)}

/* architecture */
.arch-wrap{position:relative;display:grid;grid-template-columns:1fr;gap:16px}
.arch-wrap.open{grid-template-columns:1fr 380px}
.arch{display:flex;flex-direction:column;align-items:center;max-width:540px;margin:0 auto}
.arch-legend{display:flex;gap:18px;justify-content:center;font-size:11px;color:var(--t3);margin-bottom:14px}
.lane-dot{display:inline-block;width:14px;height:1px;vertical-align:middle;margin-right:6px}
.lane-dot.down{background:var(--blue)}.lane-dot.up{background:var(--green)}
.arch-node{width:100%;background:var(--s1);border:1px solid var(--b1);border-radius:6px;padding:11px 14px;display:grid;grid-template-columns:1fr auto;gap:3px 12px;cursor:pointer;transition:border-color .12s}
.arch-node:hover{border-color:var(--t3)}
.arch-node.sel{border-color:var(--t1)}
.arch-node .n{font-weight:600;font-size:12.5px;display:flex;align-items:center;gap:8px}
.arch-node .p{font:10.5px var(--mono);color:var(--t3);grid-column:1/-1}
.arch-node .tag{font:10.5px var(--mono);color:var(--t3);align-self:center}
.arch-link{height:40px;width:100%;display:flex;justify-content:center;gap:120px}
.arch-link i{width:1px;height:100%;background:var(--b2);position:relative}
.arch-link i::after{content:"";position:absolute;left:-1.5px;width:4px;height:4px;border-radius:50%;background:var(--blue);animation:dotD 1.4s linear infinite}
.arch-link i.up::after{background:var(--green);animation:dotU 2s linear infinite}
.arch-link.hot i::after{animation-duration:.45s}
@keyframes dotD{from{top:0}to{top:100%}}
@keyframes dotU{from{top:100%}to{top:0}}
.arch-panel{display:none;background:var(--s1);border:1px solid var(--b1);border-radius:6px;position:sticky;top:0;align-self:start;max-height:calc(100vh - 88px);overflow:auto}
.arch-wrap.open .arch-panel{display:block}
.arch-panel-h{display:flex;justify-content:space-between;align-items:flex-start;padding:14px;border-bottom:1px solid var(--b1)}
.arch-panel-title{font-weight:600;font-size:13px}
.arch-panel-b{padding:14px}
.arch-panel-b p{margin:0 0 6px;color:var(--t2);font-size:12.5px}
.arch-panel-b pre{margin:0;background:var(--s2);border:1px solid var(--b1);border-radius:4px;padding:10px;font:11px/1.55 var(--mono);color:var(--t2);white-space:pre-wrap;word-break:break-word}
.arch-panel-b .tl{display:flex;flex-wrap:wrap;gap:5px}
.arch-panel-b .kv{margin-top:-4px}

/* logs */
.logs-card{display:flex;flex-direction:column;flex:1;min-height:0;height:100%}
.filters{display:flex;gap:4px;flex-wrap:wrap}
.logs{flex:1;overflow:auto;font:11.5px/1.6 var(--mono)}
.log{display:grid;grid-template-columns:96px 64px 1fr;gap:12px;padding:4px 14px;border-bottom:1px solid var(--b1);align-items:center}
.log .t{color:var(--t3)}
.log .m{color:var(--t2)}
.log.error .m{color:var(--red)}.log.warn .m{color:var(--amber)}
.log.error{background:var(--red-d)}

/* settings */
.settings{display:grid;grid-template-columns:1fr 1fr;gap:16px;max-width:1100px}
.form{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px}
.form label{display:flex;flex-direction:column;gap:5px;font-size:11.5px;color:var(--t2)}
.form label.wide{grid-column:1/-1}
.form input,.form select,.form textarea{background:var(--s1);border:1px solid var(--b2);border-radius:5px;padding:6px 9px;outline:none;color:var(--t1);font-family:var(--mono);font-size:12px;width:100%;min-width:0;max-width:100%}
.form input:focus,.form select:focus,.form textarea:focus{border-color:var(--t1)}
.form input[readonly]{color:var(--t3);background:var(--s2)}
.form textarea{font-family:var(--sans);resize:vertical}
.form .sw{flex-direction:row;align-items:center;gap:9px;cursor:pointer;color:var(--t1);position:relative}
.form .sw input{position:absolute;opacity:0;width:0;height:0}
.form .sw span{width:28px;height:16px;border-radius:99px;background:var(--b2);position:relative;transition:background .15s;flex:none}
.form .sw span::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:transform .15s}
.form .sw input:checked+span{background:var(--t1)}
.form .sw input:checked+span::after{transform:translateX(12px)}
.settings-foot{grid-column:1/-1;display:flex;justify-content:flex-end;gap:8px}

.toast{position:fixed;bottom:max(20px,env(safe-area-inset-bottom));right:max(20px,env(safe-area-inset-right));background:var(--t1);color:var(--s1);padding:8px 14px;border-radius:5px;font-size:12px;opacity:0;transform:translateY(6px);transition:all .2s;pointer-events:none;z-index:9;max-width:min(360px,calc(100vw - 24px))}
.toast.on{opacity:1;transform:none}

/* tabs */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--b1);margin-bottom:16px;overflow-x:auto;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}
.tab{background:none;border:0;border-bottom:2px solid transparent;padding:8px 12px;color:var(--t2);cursor:pointer;font-size:12.5px;margin-bottom:-1px;flex:none;white-space:nowrap}
.tab:hover{color:var(--t1)}
.tab.active{color:var(--t1);border-bottom-color:var(--t1)}
.tabpane{display:none}.tabpane.active{display:grid}
.card.tabpane.active{display:block}
.diagram{overflow:auto;min-height:320px}
.diagram svg{max-width:100%;height:auto}
.diagram .err{color:var(--t3);font-size:12px}

/* docs */
.docs{display:grid;grid-template-columns:200px minmax(0,860px);gap:28px}
.docs-toc{position:sticky;top:0;align-self:start;display:flex;flex-direction:column;gap:1px;font-size:12px}
.docs-toc a{color:var(--t2);text-decoration:none;padding:5px 10px;border-radius:4px;border-left:2px solid transparent}
.docs-toc a:hover{color:var(--t1);background:var(--s3)}
.docs-toc a.sub{padding-left:22px;font-size:11.5px}
.docs-body{background:var(--s1);border:1px solid var(--b1);border-radius:6px;padding:28px 32px;font-size:13px;line-height:1.6}
.docs-body h1{font-size:20px;margin:0 0 6px;letter-spacing:-.01em}
.docs-body h2{font-size:15px;margin:36px 0 10px;padding-top:24px;border-top:1px solid var(--b1)}
.docs-body h2:first-of-type{border-top:0;padding-top:0;margin-top:20px}
.docs-body h3{font-size:13px;margin:22px 0 6px}
.docs-body p{margin:0 0 10px;color:var(--t2)}
.docs-body p.lead{color:var(--t2);font-size:13.5px}
.docs-body ul{margin:0 0 10px;padding-left:18px;color:var(--t2)}
.docs-body li{margin:2px 0}
.docs-body pre{background:var(--s2);border:1px solid var(--b1);border-radius:5px;padding:10px 12px;font:11.5px/1.55 var(--mono);color:var(--t1);overflow:auto;margin:8px 0 14px}
.docs-body table{width:100%;border-collapse:collapse;font-size:12.5px;margin:8px 0 14px}
.docs-body th{text-align:left;font-weight:500;color:var(--t3);font-size:11px;padding:6px 10px;border-bottom:1px solid var(--b1);background:var(--s2)}
.docs-body td{padding:7px 10px;border-bottom:1px solid var(--b1);vertical-align:top;color:var(--t2)}
.docs-body td:first-child{font-family:var(--mono);font-size:11.5px;color:var(--t1);white-space:nowrap}
.docs-body td.schema{white-space:pre-wrap;font-size:11px;font-family:var(--mono);color:var(--t1)}
.docs-body{overflow-x:auto}
.docs-body .note{border-left:2px solid var(--amber);background:var(--amber-d);padding:8px 12px;border-radius:0 4px 4px 0;margin:10px 0 14px;color:var(--t1);font-size:12.5px}
.docs-body .tool-h{display:flex;align-items:center;gap:10px;margin-top:22px}
.docs-body .tool-h code{font-size:12px}

/* live control v2 */
.dpad{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-bottom:14px;min-width:0}
.dp{height:44px;font-size:18px;padding:0;min-width:0;width:100%}
.dp.txt{font-size:12.5px}
.dp.stop{color:var(--red);border-color:var(--red)}
.dp.stop:hover{background:var(--red-d)}
.dp.active,.ctl-btn.active{border-color:var(--blue);color:var(--blue);background:var(--blue-d)}
.field-row label{display:grid;grid-template-columns:1fr auto;align-items:center;gap:2px 8px}
.field-row label input{grid-column:1/-1}
.field-row label b{font-weight:500;color:var(--t1);font-size:11.5px}
.ctl-extra.card-b{padding:10px 14px}
.kv-strip{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--b1);font-size:11px}
.kv-strip div:nth-child(n+5){border-top:1px solid var(--b1)}
.kv-strip div:nth-child(4n){border-right:0}
.kv-strip div{padding:8px 12px;border-right:1px solid var(--b1);display:flex;flex-direction:column;gap:2px;min-width:0}
.kv-strip div:last-child{border-right:0}
.kv-strip span{color:var(--t3);font-size:10.5px}
.kv-strip b{font-weight:500;color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.charts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.chart canvas{display:block;width:100%;height:80px;max-width:100%}
.chart .card-h{height:32px;font-size:12px}
.queue{max-height:240px;overflow:auto}
.q{display:grid;grid-template-columns:1fr auto;gap:8px;padding:8px 14px;border-bottom:1px solid var(--b1);align-items:center}
.q:last-child{border-bottom:0}
.q .name{font:11.5px var(--mono);color:var(--t1)}
.q .meta{font:10.5px var(--mono);color:var(--t3);margin-top:2px}
.q .prog{height:2px;background:var(--s4);margin-top:6px;border-radius:1px;overflow:hidden}
.q .prog i{display:block;height:100%;background:var(--blue);transition:width .2s linear}

/* svg diagrams */
.arch-wrap{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;align-items:start}
.arch-wrap.open{grid-template-columns:minmax(0,1fr) 360px}
.tabpane{display:none}.tabpane.active{display:block}
.diagram{padding:20px;overflow:auto}
.diagram svg{display:block;width:100%;height:auto;font-family:var(--sans)}
.dg-group{fill:var(--s2);stroke:var(--b1);stroke-width:1;rx:8}
.dg-glabel{font:500 10.5px var(--mono);fill:var(--t3);letter-spacing:.04em;text-transform:uppercase}
.dg-node rect.box{fill:var(--s1);stroke:var(--b2);stroke-width:1;rx:6;transition:stroke .12s}
.dg-node.click{cursor:pointer}
.dg-node.click:hover rect.box{stroke:var(--t2)}
.dg-node.sel rect.box{stroke:var(--t1);stroke-width:1.5}
.dg-node .title{font:600 12.5px var(--sans);fill:var(--t1)}
.dg-node .sub{font:10.5px var(--mono);fill:var(--t3)}
.dg-node .tag{font:10.5px var(--mono);fill:var(--green)}
.dg-node .row{font:10.5px var(--mono);fill:var(--t2)}
.dg-node .hdr{fill:var(--s3)}
.dg-node .sep{stroke:var(--b1)}
.dg-edge{fill:none;stroke:var(--t3);stroke-width:1.2}
.dg-edge.data{stroke:var(--blue);stroke-dasharray:4 3}
.dg-elabel{font:10.5px var(--mono);fill:var(--t2);paint-order:stroke;stroke:var(--s1);stroke-width:4px;stroke-linejoin:round}
.dg-dot{fill:var(--t2)}.dg-dot.data{fill:var(--blue)}
.sq-life{stroke:var(--b2);stroke-dasharray:3 4}
.sq-msg{fill:none;stroke:var(--t2);stroke-width:1.2}
.sq-msg.ret{stroke:var(--blue);stroke-dasharray:4 3}
.sq-text{font:11px var(--mono);fill:var(--t1)}
.sq-num{font:10px var(--mono);fill:var(--t3)}
.sq-frame{fill:none;stroke:var(--b2);stroke-dasharray:4 3;rx:4}
.sq-flabel{font:500 10.5px var(--mono);fill:var(--t2)}
.sq-act{fill:var(--s3);stroke:var(--b2)}

/* nav overlay */
.menu-btn{display:none;width:36px;height:36px;padding:0;border:1px solid var(--b2);border-radius:5px;background:var(--s1);cursor:pointer;flex:none;align-items:center;justify-content:center;flex-direction:column;gap:4px;color:var(--t1)}
.menu-btn span{display:block;width:14px;height:1.5px;background:currentColor;border-radius:1px;transition:transform .18s,opacity .18s}
body.nav-open .menu-btn span:nth-child(1){transform:translateY(5.5px) rotate(45deg)}
body.nav-open .menu-btn span:nth-child(2){opacity:0}
body.nav-open .menu-btn span:nth-child(3){transform:translateY(-5.5px) rotate(-45deg)}
.nav-scrim{display:none}

@media (pointer:coarse){
  .nav-item{height:40px}
  .btn{min-height:36px}
  .btn.sm{min-height:32px}
  .chip{min-height:32px}
  .dp{height:48px}
  .tab{min-height:40px}
}

@media (max-width:1440px){
  .grid-ctl{grid-template-columns:230px minmax(0,1fr) 280px;gap:12px}
  .content{padding:16px 18px;padding-bottom:max(16px,env(safe-area-inset-bottom))}
  .arch-wrap.open{grid-template-columns:minmax(0,1fr) 300px}
}

@media (max-width:1280px){
  .tiles{grid-template-columns:repeat(3,1fr)}
  .grid-2,.grid-cam,.settings{grid-template-columns:1fr}
  .grid-ctl{grid-template-columns:240px minmax(0,1fr)}
  .grid-ctl>.ctl-col:last-child{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:16px}
  .arch-wrap.open{grid-template-columns:1fr}
  .arch-panel{position:static;max-height:none}
}

@media (max-width:1100px){
  .hide-lt-1100{display:none !important}
  .docs{grid-template-columns:180px minmax(0,1fr);gap:18px}
  .docs-body{padding:22px 20px}
  .flow{flex-direction:column}
  .flow-node{min-width:0}
  .flow-link{width:100%;height:28px;flex-direction:row;justify-content:center;gap:24px;padding:0}
  .flow-link i{width:1px;height:100%}
  .flow-link i::before{right:auto;left:-2.5px;top:auto;bottom:-1px;border:3px solid transparent;border-top:4px solid var(--b2);border-left-width:3px;border-right-width:3px}
  .flow-link i.up::before{top:-1px;bottom:auto;left:-2.5px;border:3px solid transparent;border-bottom:4px solid var(--b2);border-top:0}
  .flow-link i::after{left:-1.5px;animation:dotD 1.4s linear infinite}
  .flow-link i.up::after{animation:dotU 2s linear infinite}
}

@media (max-width:960px){
  .app{grid-template-columns:minmax(0,1fr)}
  .menu-btn{display:inline-flex}
  .sidebar{
    position:fixed;inset:0 auto 0 0;width:min(280px,86vw);z-index:50;
    transform:translateX(-110%);transition:transform .2s ease;
    padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);
    background:var(--s1);box-shadow:none;
  }
  body.nav-open .sidebar{transform:none;box-shadow:8px 0 32px rgba(0,0,0,.18)}
  .nav-scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:40;opacity:0;pointer-events:none;transition:opacity .2s}
  .nav-scrim:not([hidden]){opacity:1;pointer-events:auto}
  .topbar{padding-left:max(12px,env(safe-area-inset-left))}
  .content{padding:14px 14px max(14px,env(safe-area-inset-bottom))}
  .grid-ctl{grid-template-columns:1fr}
  .grid-ctl>.ctl-col:last-child{grid-template-columns:1fr}
  .viz{grid-template-columns:1fr 1fr}
  .console-card{min-height:320px}
  .form{grid-template-columns:1fr}
  .docs{grid-template-columns:1fr;gap:12px}
  .docs-toc{position:static;flex-direction:row;overflow-x:auto;gap:4px;padding-bottom:4px;-webkit-overflow-scrolling:touch}
  .docs-toc a{white-space:nowrap;border-left:0;border-bottom:2px solid transparent;padding:8px 10px}
  .docs-toc a.sub{padding-left:10px}
  .kv-strip{grid-template-columns:repeat(2,1fr)}
  .kv-strip div{border-right:1px solid var(--b1)}
  .kv-strip div:nth-child(2n){border-right:0}
  .kv-strip div:nth-child(n+3){border-top:1px solid var(--b1)}
  .kv-strip div:nth-child(4n){border-right:0}
  .diagram svg{min-width:720px;max-width:none;width:auto;height:auto}
  input,select,textarea{font-size:16px;max-width:100%}
  .flow-link{height:36px}
}

@media (max-width:720px){
  .hide-lt-720{display:none !important}
  .tiles{grid-template-columns:repeat(2,1fr)}
  .viz{grid-template-columns:1fr}
  .charts{grid-template-columns:1fr}
  .hero{align-items:flex-start}
  .log{grid-template-columns:72px 52px 1fr;gap:8px;padding:6px 10px}
  .settings-foot{justify-content:stretch}
  .settings-foot .btn{flex:1}
  .call{grid-template-columns:24px minmax(0,1fr) auto;gap:8px;padding:8px 10px}
  .msg{grid-template-columns:36px minmax(0,1fr);gap:8px}
}

@media (max-width:640px){
  .tiles{grid-template-columns:1fr}
  .log{grid-template-columns:auto 1fr;gap:4px 8px}
  .log .m{grid-column:1/-1}
  .cam-hud{font-size:10px}
  .cam-hud.bl,.cam-hud.br{max-width:70%;white-space:normal}
  .toast{left:12px;right:12px;bottom:max(12px,env(safe-area-inset-bottom));text-align:center;max-width:none}
  .console{max-height:none;min-height:220px}
  .docs-body{padding:16px 14px}
  .docs-body h1{font-size:18px}
  .estop{height:56px;letter-spacing:.08em}
  .term-in{padding:10px 12px}
}

@media (max-width:420px){
  .topbar-status{gap:6px}
  .pill.mono{font-size:11px}
  .dpad{gap:8px}
  .content{padding:12px 10px max(12px,env(safe-area-inset-bottom))}
}
