:root{color-scheme:light;--bg:#f5f6f7;--panel:#fff;--border:#e6e8eb;--border2:#d3d7dc;--text:#12181f;--muted:#4f5a66;--faint:#66717d;
--teal:#0b766b;--teal-h:#095f56;--teal-soft:#e3f3f0;--teal-light:#9fd6cd;--on-teal:#fff;
--red:#b42318;--red-soft:#fdeceb;--red-border:#f3c4c0;--red-solid:#b42318;--on-red:#fff;
--amber:#8a5200;--amber-soft:#fff3d6;--amber-bar:#c47f00;--ok:#0b766b;
--ctl:#7d8794;--env-bg:#eceff1;--knob:#fff;--scrim:rgba(14,20,26,.45);--code-bg:#12181f;--code-fg:#d7e0e8;
--shadow:0 1px 2px rgba(16,24,40,.05);--shadow-pop:0 20px 60px rgba(0,0,0,.3);--shadow-bar:0 -6px 20px rgba(16,24,40,.08);
--mono:"JetBrains Mono","SF Mono",ui-monospace,Menlo,monospace}
:root[data-theme="dark"]{color-scheme:dark;--bg:#0d1218;--panel:#151c24;--border:#263241;--border2:#3a4a5e;--text:#e7edf3;--muted:#aab7c5;--faint:#8c9aaa;
--teal:#3cc4b2;--teal-h:#5ad3c3;--teal-soft:#123532;--teal-light:#2d8a7d;--on-teal:#04211d;
--red:#ff8a80;--red-soft:#3a1b1d;--red-border:#6e2f31;--red-solid:#d6382c;--on-red:#fff;
--amber:#f2b552;--amber-soft:#33270d;--amber-bar:#e0a030;--ok:#3cc4b2;
--ctl:#7b8ba0;--env-bg:#1d2733;--knob:#f4f7fa;--scrim:rgba(3,6,10,.7);--code-bg:#0a0e13;--code-fg:#d7e0e8;
--shadow:none;--shadow-pop:0 20px 60px rgba(0,0,0,.6);--shadow-bar:none}
*{box-sizing:border-box}html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--text);font:13.5px/1.45 Inter,"Geist",system-ui,-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--teal);outline-offset:2px;border-radius:6px}
body.prod :focus-visible{outline-color:var(--red)}
#app{display:grid;grid-template-columns:168px 1fr;height:100vh}
aside{background:var(--panel);border-right:1px solid var(--border);padding:16px 10px;display:flex;flex-direction:column;gap:4px}
.brand{display:flex;gap:9px;align-items:center;padding:0 6px 18px}.brand b{display:block;font-size:13.5px}.brand small{font-size:12px;color:var(--muted)}
.logo{width:28px;height:28px;border-radius:8px;background:var(--teal);display:grid;place-items:center}
.nav{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px;color:var(--muted);text-decoration:none;font-weight:500}
.nav:hover{background:var(--bg);color:var(--text)}.nav[aria-current=page]{background:var(--teal-soft);color:var(--teal);font-weight:600}.nav svg{width:16px;height:16px}
.who{margin-top:auto;background:var(--bg);border-radius:10px;padding:9px 11px;font-size:12px;color:var(--muted)}.who b{display:block;color:var(--text);font-size:12.5px}
main{overflow:auto;padding:26px 30px 90px}.wrap{max-width:1060px;margin:0 auto}
h1{font-size:22px;margin:0;letter-spacing:-.02em}h2{font-size:14px;margin:0}
.head{display:flex;gap:16px;align-items:flex-start;margin-bottom:18px;flex-wrap:wrap}.head p{margin:3px 0 0;color:var(--muted)}.right{margin-left:auto}.row{display:flex;gap:8px;align-items:center}.wrapf{flex-wrap:wrap}
.card{background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow)}.pad{padding:18px 20px}
.grid{display:grid;gap:14px}.g4{grid-template-columns:repeat(4,1fr)}.g2{grid-template-columns:1.55fr 1fr}.g2e{grid-template-columns:1fr 1fr}
.btn{border:1px solid var(--border2);background:var(--panel);border-radius:9px;padding:7px 14px;font-weight:600;cursor:pointer;display:inline-flex;gap:6px;align-items:center}
.btn:hover{background:var(--bg)}.btn.primary{background:var(--teal);border-color:var(--teal);color:var(--on-teal)}.btn.primary:hover{background:var(--teal-h)}
body.prod .btn.primary.env{background:var(--red-solid);border-color:var(--red-solid);color:var(--on-red)}.btn.danger{background:var(--red-solid);border-color:var(--red-solid);color:var(--on-red)}.btn:disabled{opacity:.45;cursor:not-allowed}
.pill{display:inline-flex;gap:6px;align-items:center;border-radius:99px;padding:3px 11px;font-size:12px;font-weight:600;border:1px solid var(--border2);background:var(--panel)}
.pill.red{color:var(--red);background:var(--red-soft);border-color:var(--red-border)}.pill.teal{color:var(--teal);background:var(--teal-soft);border-color:transparent}.pill.amber{color:var(--amber);background:var(--amber-soft);border-color:transparent}
.status{display:flex;gap:14px;align-items:center;margin-bottom:14px}.sico{width:38px;height:38px;border-radius:10px;background:var(--teal-soft);color:var(--teal);display:grid;place-items:center}.status.off .sico{background:var(--red-soft);color:var(--red)}
.status b{font-size:15px;display:block}.muted{color:var(--muted)}.faint{color:var(--faint)}.sm{font-size:12px}
.tile .l{font-size:12px;color:var(--muted)}.tile .v{font:500 26px/1.3 var(--mono);letter-spacing:-.03em;margin:4px 0}.tile .s{font-size:12px;color:var(--faint)}
.legend{display:flex;gap:12px;font-size:12px;color:var(--muted)}.legend i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px}
svg text{font-size:12px;fill:var(--faint)}
.kv{display:flex;justify-content:space-between;padding:8px 0;border-top:1px solid var(--border)}.kv:first-of-type{border:0}.kv span:last-child{font:600 12.5px var(--mono)}
.link{color:var(--teal);font-weight:600;text-decoration:none;background:none;border:0;padding:0;cursor:pointer}
.bar{height:6px;border-radius:9px;background:var(--border);overflow:hidden;margin-top:5px}.bar i{display:block;height:100%;background:var(--teal)}
.vrow{margin:12px 0}.vrow .t{display:flex;justify-content:space-between;font:600 12.5px var(--mono)}
.chg{display:flex;gap:12px;padding:10px 0;border-top:1px solid var(--border)}.chg:first-of-type{border:0}.vchip{font:12px var(--mono);background:var(--bg);border-radius:6px;padding:1px 7px;height:fit-content}
.envsw{display:inline-flex;background:var(--env-bg);border-radius:10px;padding:3px}.envsw button{border:0;background:none;padding:6px 14px;border-radius:8px;font-weight:600;color:var(--muted);cursor:pointer}
.envsw button[aria-pressed=true]{background:var(--panel);color:var(--text);box-shadow:var(--shadow)}.envsw button[aria-pressed=true].prod{background:var(--red-solid);color:var(--on-red)}
.banner{display:flex;gap:10px;align-items:center;padding:10px 14px;border-radius:10px;margin-bottom:12px;background:var(--red-soft);color:var(--red);border:1px solid var(--red-border)}
.strip{display:flex;gap:18px;align-items:baseline;padding:13px 18px;margin-bottom:16px;flex-wrap:wrap}.strip b{font:600 17px var(--mono);margin:0 4px 0 2px}.strip .sm{color:var(--muted)}
.tabs{display:flex;gap:4px;margin-bottom:12px;border-bottom:1px solid var(--border)}.tabs button{border:0;background:none;padding:9px 12px;font-weight:600;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs button[aria-selected=true]{color:var(--teal);border-color:var(--teal)}
.set{display:grid;grid-template-columns:1fr auto;gap:4px 24px;padding:14px 20px;border-top:1px solid var(--border);align-items:center}.set:first-child{border:0}
.set.dirty{box-shadow:inset 3px 0 var(--amber)}.set b{font-weight:600}.set .d{color:var(--muted);font-size:12.5px}.set .m{font-size:12px;color:var(--faint);margin-top:2px}
.set .err{grid-column:1/-1;color:var(--red);font-size:12.5px}.set .warn{grid-column:1/-1;color:var(--amber);font-size:12.5px}
.ctl{display:flex;gap:8px;align-items:center;justify-content:flex-end}.ctl .val{font:600 13px var(--mono);min-width:52px;text-align:right}
input[type=number],input[type=text],input[type=search],select,textarea{border:1px solid var(--ctl);background:var(--panel);border-radius:9px;padding:7px 10px;min-width:0}
input[type=number]{width:84px;text-align:right;font-family:var(--mono)}input[type=text]{width:240px}textarea{width:100%}input[aria-invalid=true]{border-color:var(--red);background:var(--red-soft)}
input[type=range]{width:180px;accent-color:var(--teal)}
.sw{width:40px;height:22px;border-radius:99px;border:0;background:var(--ctl);position:relative;cursor:pointer;padding:0}.sw:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--knob);transition:transform .15s}
.sw[aria-checked=true]{background:var(--teal)}.sw[aria-checked=true]:after{transform:translateX(18px)}
.seg{display:inline-flex;border:1px solid var(--ctl);border-radius:9px;overflow:hidden}.seg button{border:0;background:var(--panel);padding:6px 11px;font-weight:600;color:var(--muted);cursor:pointer;border-right:1px solid var(--border)}.seg button:last-child{border:0}.seg button[aria-pressed=true]{background:var(--teal-soft);color:var(--teal)}
.sec{padding:14px 20px 6px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--faint);border-top:1px solid var(--border)}.sec:first-child{border:0}
.coll{margin-bottom:12px}.coll .top{display:flex;gap:12px;align-items:center;padding:14px 20px}.coll .top p{margin:0;color:var(--muted);font-size:12.5px}
table{width:100%;border-collapse:collapse}th{text-align:left;font-size:12px;color:var(--faint);font-weight:600;padding:9px 20px;border-bottom:1px solid var(--border)}td{padding:10px 20px;border-bottom:1px solid var(--border)}tr:last-child td{border:0}td.n,th.n{text-align:right;font-family:var(--mono)}
.bottom{position:fixed;left:168px;right:0;bottom:0;background:var(--panel);border-top:1px solid var(--border);padding:12px 30px;display:flex;gap:12px;align-items:center;box-shadow:var(--shadow-bar)}
.scrim{position:fixed;inset:0;background:var(--scrim);display:flex;justify-content:center;align-items:flex-start;padding-top:9vh;z-index:50}
.modal{background:var(--panel);border-radius:16px;width:min(580px,94vw);max-height:82vh;display:flex;flex-direction:column;box-shadow:var(--shadow-pop)}.modal .mh,.modal .mb,.modal .mf{padding:16px 22px}.modal .mb{overflow:auto;padding-top:0}.modal .mf{border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end}
.diff{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:10px;padding:8px 0;border-top:1px solid var(--border);align-items:center}.old{color:var(--muted);text-decoration:line-through}.nw{color:var(--teal);font-weight:700}
.toast{position:fixed;bottom:80px;left:50%;transform:translateX(-50%);background:var(--text);color:var(--bg);padding:9px 16px;border-radius:10px;z-index:90;display:flex;gap:10px;align-items:center}.toast .btn{padding:2px 10px;background:transparent;color:var(--bg);border-color:var(--bg)}
.empty{text-align:center;padding:30px;color:var(--muted)}
@media (max-width:900px){#app{grid-template-columns:58px 1fr}.nav span,.brand div,.who{display:none}.bottom{left:58px}.g4{grid-template-columns:1fr 1fr}.g2,.g2e{grid-template-columns:1fr}main{padding:18px 14px 90px}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
.code{font:600 12px var(--mono);background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:1px 7px}
.fdet{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;padding:6px 0}
tr.sel td{background:var(--teal-soft)}.link:hover{text-decoration:underline}
.trace{font:12px/1.6 var(--mono);background:var(--code-bg);color:var(--code-fg);border-radius:10px;padding:12px 14px;margin:8px 0 0;overflow:auto;white-space:pre}
thead th{position:sticky;top:0;background:var(--panel)}
button.chg{width:100%;background:none;border:0;border-top:1px solid var(--border);text-align:left;cursor:pointer;color:inherit;font:inherit;padding:10px 0}button.chg:hover{background:var(--bg)}
.scrim.right{justify-content:flex-end;padding:0;align-items:stretch;z-index:40}.drawer{background:var(--panel);width:min(520px,96vw);height:100%;overflow:auto;border-left:1px solid var(--border);box-shadow:var(--shadow-pop)}
.scrim[data-scrim=modal]{z-index:60}.ver{padding:14px 20px;border-top:1px solid var(--border)}.chd{margin-left:6px;font-size:12px;padding:1px 8px}
#tip{position:fixed;z-index:100;background:var(--text);color:var(--bg);padding:6px 10px;border-radius:8px;font-size:12px;line-height:1.45;white-space:pre;pointer-events:none;box-shadow:var(--shadow-pop)}#tip[hidden]{display:none}
g.bar:focus-visible{outline:none}g.bar:focus-visible rect:first-child,g.bar:hover rect:first-child{stroke:var(--text);stroke-width:1}circle[tabindex]:focus-visible{outline:none;stroke:var(--text);fill:var(--teal)}
input:disabled{opacity:.45;cursor:not-allowed;background:var(--bg)}
.set .m{color:var(--faint)}.set .allowed{display:none}.set:hover .allowed,.set:focus-within .allowed,.set.invalid .allowed{display:inline}
.chips{border:0;padding:0;margin:0;display:flex;gap:6px;flex-wrap:wrap}.chipcb{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--ctl);border-radius:99px;padding:4px 12px;cursor:pointer;font-weight:600;color:var(--muted);background:var(--panel)}
.chipcb.on{background:var(--teal-soft);color:var(--teal);border-color:var(--teal)}.chipcb input{accent-color:var(--teal);margin:0}.chipcb:focus-within{outline:2px solid var(--teal);outline-offset:2px}
.logo{color:var(--on-teal)}
.foot{margin-top:auto;display:flex;flex-direction:column;gap:8px}.foot .who{margin-top:0}
.themesw{display:flex;gap:2px;background:var(--env-bg);border-radius:9px;padding:2px}.themesw button{flex:1;border:0;background:none;border-radius:7px;padding:5px 0;color:var(--muted);cursor:pointer;display:grid;place-items:center}
.themesw button[aria-pressed=true]{background:var(--panel);color:var(--text);box-shadow:var(--shadow);outline:1px solid var(--border)}.themesw svg{width:15px;height:15px}
@media (max-width:900px){.foot .who{display:none}.themesw{flex-direction:column}}
.pemctl{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.kvctl{display:flex;flex-direction:column;gap:6px;align-items:flex-end}.kvrow{gap:6px;flex-wrap:wrap;justify-content:flex-end}.kvrow input[type=text]{width:150px}.kvrow .code{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pemctl .code{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.steps{margin:0;padding-left:18px;color:var(--muted)}.steps li{margin:4px 0}.steps b{color:var(--text);margin-right:6px}
.tagp{font-size:12px;padding:0 7px;margin-left:4px}.msg.bad{color:var(--red)}.msg.good{color:var(--teal)}.banner.plan{background:var(--panel);color:var(--muted);border:1px dashed var(--ctl)}
.mono{font-family:var(--mono);font-size:12px}
.warnbox{background:var(--amber-soft);color:var(--amber);border-radius:10px;padding:10px 14px;font-size:12.5px}.pemctl input{width:260px}
/* ---- connected panel ---- */
.loginwrap{min-height:100vh;display:grid;place-items:center;padding:20px;grid-column:1/-1}.login{width:min(380px,100%);padding:26px 26px 22px}.login .lbl{display:block;font-weight:600;margin:12px 0 4px}.login input{width:100%}
.login .brand{padding-bottom:14px}
.sk{display:grid;gap:10px;padding:6px 0}.sk i{display:block;height:14px;border-radius:7px;background:linear-gradient(90deg,var(--border),var(--bg),var(--border));background-size:200% 100%;animation:sk 1.4s linear infinite}.sk i:nth-child(2){width:80%}.sk i:nth-child(3){width:55%}
@keyframes sk{to{background-position:-200% 0}}
.empty b{display:block;color:var(--text);margin-bottom:2px}.empty .btn{margin-top:4px}
.signout{justify-content:center;padding:6px 8px;font-size:12.5px;color:var(--muted)}.signout svg{width:15px;height:15px}
input[type=email],input[type=password]{border:1px solid var(--ctl);background:var(--panel);border-radius:9px;padding:8px 10px;min-width:0}
.modal.wide{width:min(760px,96vw)}.drawer.wide{width:min(720px,98vw)}
.savestate{font-size:12.5px;color:var(--muted)}.savestate.bad{color:var(--red)}
.pill.gray{color:var(--muted)}.pill.green{color:var(--teal);background:var(--teal-soft);border-color:transparent}
.tiny{font-size:11.5px}.tbl-wrap{overflow:auto}
.stack{display:grid;gap:14px}.row.gap{gap:14px}.wrapf{flex-wrap:wrap}
.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.filters label{display:flex;gap:6px;align-items:center;font-size:12.5px}
button.rowbtn{background:none;border:0;padding:0;text-align:left;color:inherit;font:inherit;cursor:pointer}button.rowbtn:hover .code{border-color:var(--teal)}
tr.click{cursor:pointer}tr.click:hover td{background:var(--bg)}
.hd{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--faint);margin:16px 0 6px}
.list-sm{margin:0;padding:0;list-style:none}.list-sm li{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-top:1px solid var(--border)}.list-sm li:first-child{border:0}
.keyshow{font:600 13px var(--mono);word-break:break-all;background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:12px}
.fresh{font-size:12.5px;color:var(--muted);margin:-6px 0 14px}
.kvgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px 18px}.kvgrid .k{font-size:12px;color:var(--faint)}.kvgrid .v{font:600 12.5px var(--mono);word-break:break-all}
@media (max-width:900px){.signout span{display:none}}
.sectionhead{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap;margin:6px 0 10px}
.trace{max-height:320px}
.hd{margin-top:18px}
a.btn{text-decoration:none;color:inherit}a.btn[aria-disabled=true]{opacity:.45;pointer-events:none}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.keyshow{font:600 13px var(--mono);word-break:break-all;background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:12px;margin:8px 0}
table.compact th,table.compact td{padding:9px 10px}table.compact th:first-child,table.compact td:first-child{padding-left:18px}table.compact th:last-child,table.compact td:last-child{padding-right:18px}
.smsvg text{font-size:9px}
table.compact tr.click{cursor:pointer}.chipbtn[aria-pressed=true]{background:var(--teal-soft);color:var(--teal);border-color:var(--teal)}
g.bar.partial rect{opacity:.45}g.bar.partial rect:first-child{stroke:var(--faint);stroke-dasharray:3 2;fill-opacity:.6}

.topbar{display:flex;justify-content:flex-end;position:sticky;top:-26px;z-index:6;margin:-26px -30px 12px;padding:12px 30px 0;pointer-events:none}.topbar .envsw{pointer-events:auto;box-shadow:var(--shadow)}
