:root{--bg:#000;--card:#1c1c1e;--card2:#2c2c2e;--line:#38383a;--text:#fff;--dim:#8e8e93;--green:#30d158;--red:#ff453a;
--amber:#ff9f0a;--cyan:#64d2ff;--orange:#ff9500;--blue:#0a84ff;--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px)}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;background:var(--bg);color:var(--text);font:15px/1.35 -apple-system,BlinkMacSystemFont,"SF Pro Text","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased}
header{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:8px;padding:calc(var(--safe-t) + 10px) 16px 8px;background:rgba(0,0,0,.85);backdrop-filter:blur(20px)}
#title{font-size:28px;font-weight:700;letter-spacing:-.5px;flex:1}
.back{color:var(--blue);font-size:17px;background:none;border:0;padding:0;margin-right:4px;cursor:pointer}
.badge{font-size:11px;font-weight:700;letter-spacing:.8px;padding:3px 8px;border-radius:6px;background:var(--amber);color:#000}
.badge.live{background:var(--red);color:#fff}
.hidden{display:none!important}
.dot{width:8px;height:8px;border-radius:50%;background:var(--dim)}.dot.on{background:var(--green);box-shadow:0 0 6px var(--green)}
main{padding:0 16px calc(84px + var(--safe-b))}
nav{position:fixed;bottom:0;left:0;right:0;display:flex;background:rgba(22,22,24,.92);backdrop-filter:blur(20px);border-top:.5px solid var(--line);padding-bottom:var(--safe-b);z-index:6}
nav button{flex:1;background:none;border:0;color:var(--dim);font-size:10px;padding:7px 0 6px;display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer}
nav svg{width:25px;height:25px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
nav button.on{color:var(--text)}
.card{background:var(--card);border-radius:14px;padding:14px;margin:10px 0}
.card h3{margin:0 0 6px;font-size:13px;font-weight:600;color:var(--dim);text-transform:uppercase;letter-spacing:.4px;display:flex;justify-content:space-between;align-items:center}
.big{font-size:44px;font-weight:700;letter-spacing:-1px;font-variant-numeric:tabular-nums}
.sub{color:var(--dim);font-size:13px}
.pos{color:var(--green)}.neg{color:var(--red)}.amb{color:var(--amber)}
.row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:.5px solid var(--line)}
.row:last-child{border-bottom:0}.row .grow{flex:1;min-width:0}.row .t{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .r{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.row.kill .t{color:var(--dim);text-decoration:line-through;text-decoration-color:var(--red)}
.ranges{display:flex;gap:4px;margin-top:8px}.ranges button{flex:1;background:none;border:0;color:var(--dim);font-weight:600;font-size:13px;padding:6px 0;border-radius:8px}
.ranges button.on{background:var(--card2);color:var(--text)}
canvas{width:100%;display:block}
.odo{display:inline-flex;overflow:hidden;height:1.1em;line-height:1.1em}
.odo .d{display:inline-block;position:relative;width:.62em;text-align:center}
.odo .d span{display:block;transition:transform .8s cubic-bezier(.2,.8,.2,1)}
.odo .s{display:inline-block}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.agent{background:var(--card);border-radius:14px;padding:12px;cursor:pointer;position:relative;min-height:112px}
.agent .n{font-weight:700;font-size:16px}.agent .k{font-size:22px;font-weight:700;margin-top:6px;font-variant-numeric:tabular-nums}
.agent .paused{position:absolute;top:10px;right:10px;font-size:10px;color:var(--amber)}
.agent.wide{grid-column:span 2}
.strips{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-top:8px}
.strip{height:6px;border-radius:3px;background:var(--card2)}
.strip.pass{background:var(--green)}.strip.fail{background:var(--red)}.strip.unknown{background:var(--amber)}.strip.run{background:var(--cyan);animation:pulse 1s infinite}
@keyframes pulse{50%{opacity:.35}}
.pill{display:inline-block;font-size:12px;font-weight:600;padding:3px 8px;border-radius:999px;margin:6px 4px 0 0}
.pill.red{background:rgba(255,69,58,.18);color:var(--red)}.pill.green{background:rgba(48,209,88,.18);color:var(--green)}.pill.amber{background:rgba(255,159,10,.18);color:var(--amber)}
.bar{height:6px;background:var(--card2);border-radius:3px;overflow:hidden;margin-top:8px}.bar i{display:block;height:100%;background:var(--green);transition:width 1.2s linear}
.ring{width:64px;height:64px}
.btn{display:block;width:100%;text-align:center;background:var(--green);color:#000;font-weight:700;font-size:17px;border:0;border-radius:12px;padding:14px;margin:10px 0;text-decoration:none;cursor:pointer}
.btn.sec{background:var(--card2);color:var(--text)}.btn.red{background:var(--red);color:#fff}
.state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--dim);text-align:center;padding:60px 20px}
.state.error{color:var(--red)}
.spinner{width:28px;height:28px;border:3px solid var(--card2);border-top-color:var(--text);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.disc{position:relative;width:260px;height:260px;margin:10px auto}
.disc svg{width:100%;height:100%}
.disc .center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.disc .center b{font-size:30px}
.layer{display:flex;gap:10px;align-items:center;padding:9px 0;border-bottom:.5px solid var(--line)}
.layer .ic{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;color:#000;flex:none}
.ic.pass{background:var(--green)}.ic.fail{background:var(--red)}.ic.unknown{background:var(--amber)}.ic.not_checked{background:var(--card2);color:var(--dim)}
.layer .v{margin-left:auto;text-align:right;font-variant-numeric:tabular-nums}
.layer.not_checked{color:var(--dim)}
.set{padding:10px 0;border-bottom:.5px solid var(--line)}
.set label{display:flex;justify-content:space-between;font-size:14px}
.set .ctl{display:flex;gap:10px;align-items:center;margin-top:6px}
.set input[type=range]{flex:1;accent-color:var(--green)}
.set input[type=number],.set input[type=text],.set select{width:110px;background:var(--card2);color:var(--text);border:0;border-radius:8px;padding:7px 8px;font-size:15px}
.set .err{color:var(--red);font-size:12px;margin-top:4px}
.seg{display:flex;background:var(--card2);border-radius:9px;padding:2px}.seg button{flex:1;background:none;border:0;color:var(--text);padding:7px;border-radius:7px;font-weight:600}
.seg button.on{background:#636366}
a{color:var(--blue)}
.toast{position:fixed;left:16px;right:16px;bottom:calc(92px + var(--safe-b));background:var(--card2);padding:12px 14px;border-radius:12px;z-index:9;box-shadow:0 8px 30px rgba(0,0,0,.6)}
.flag{display:inline-block;font-size:11px;font-weight:700;color:#000;background:var(--amber);border-radius:5px;padding:1px 6px;margin-left:6px;vertical-align:middle}

#paircode{width:100%;max-width:260px;background:var(--card2);color:var(--text);border:0;border-radius:12px;padding:14px 8px;font-size:28px;letter-spacing:.45em;text-align:center;font-variant-numeric:tabular-nums;font-weight:700}
#pairform{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;max-width:280px}
#pairerr{color:var(--red);min-height:1em}
