:root{--bg:#0d1218;--panel:#141b25;--panel2:#1a2330;--line:#27323f;--text:#e7edf5;--soft:#9fb0c3;--muted:#6f8095;--acc:#f0b429;--ok:#3ddc97;--bad:#ff6b6b;--blue:#5ab0ff;color-scheme:dark}
*{box-sizing:border-box;margin:0;padding:0}
html,body{width:100%;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font:13px/1.4 Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
#app{display:grid;grid-template-columns:minmax(0,1fr) 372px;width:100%;height:100vh;height:100dvh}
#stage{position:relative;min-width:0;min-height:0;overflow:hidden;background:#0f141c}
#gl{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none;outline:none}
#panel{background:var(--panel);border-left:1px solid var(--line);overflow-y:auto;overflow-x:hidden;padding:10px 12px 24px;-webkit-overflow-scrolling:touch}
#top{position:absolute;left:8px;top:8px;display:flex;flex-wrap:wrap;gap:6px;z-index:5;max-width:calc(100% - 16px)}
#top button,.btns button,.tabs button{font:inherit;font-weight:600;color:var(--text);background:rgba(26,35,48,.88);border:1px solid var(--line);border-radius:8px;padding:7px 11px;cursor:pointer;min-height:34px;backdrop-filter:blur(6px)}
#top button:hover,.btns button:hover,.tabs button:hover{border-color:var(--acc)}
#top button.on,.tabs button.on{background:var(--acc);color:#1a1405;border-color:var(--acc)}
#top button:focus-visible,.btns button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:2px solid var(--blue);outline-offset:1px}
#hud{position:absolute;left:8px;bottom:8px;z-index:4;background:rgba(14,20,28,.78);border:1px solid var(--line);border-radius:10px;padding:7px 11px;font-variant-numeric:tabular-nums;pointer-events:none;max-width:calc(100% - 16px)}
#hud b{color:var(--acc);font-weight:700}
#hud .state{font-weight:700}
#hud .ok{color:var(--ok)}#hud .bad{color:var(--bad)}
#hint{position:absolute;right:8px;bottom:8px;z-index:4;color:var(--muted);font-size:11px;text-align:right;pointer-events:none;max-width:42%}
#loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#0f141c;z-index:20;color:var(--soft);transition:opacity .4s}
#loading.hide{opacity:0;pointer-events:none}
#toast{position:absolute;left:50%;top:14%;transform:translateX(-50%);z-index:6;background:rgba(10,14,20,.9);border:1px solid var(--acc);color:var(--text);border-radius:10px;padding:8px 14px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .3s;text-align:center;max-width:86%}
#toast.show{opacity:1}
h1{font-size:15px;line-height:1.25;margin:2px 0 8px;display:flex;gap:6px;align-items:center}
h1 small{font-weight:500;color:var(--muted);font-size:11px}
details.sec{border:1px solid var(--line);border-radius:10px;margin-bottom:8px;background:var(--panel2)}
details.sec>summary{cursor:pointer;padding:9px 11px;font-weight:700;list-style:none;display:flex;justify-content:space-between;align-items:center;min-height:38px}
details.sec>summary::after{content:'+';color:var(--soft);font-size:16px}
details.sec[open]>summary::after{content:'\2212'}
details.sec>summary::-webkit-details-marker{display:none}
.secbody{padding:2px 11px 11px}
.row{display:grid;grid-template-columns:104px minmax(0,1fr) 62px;gap:8px;align-items:center;margin:7px 0}
.row .lab{color:var(--soft);font-size:12px}
.row output{text-align:right;font-variant-numeric:tabular-nums;font-size:12px;color:var(--text)}
.row select{grid-column:2/4;width:100%;min-height:34px;background:#101722;color:var(--text);border:1px solid var(--line);border-radius:8px;padding:5px 8px;font:inherit}
.row.tog{display:flex;gap:8px;align-items:center}
input[type=range]{width:100%;accent-color:var(--acc);height:28px;margin:0}
input[type=checkbox]{width:18px;height:18px;accent-color:var(--acc)}
.btns{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.btns button{flex:1 1 auto}
.btns button.go{background:var(--acc);color:#1a1405;border-color:var(--acc)}
.tabs{display:flex;gap:6px;margin:0 0 8px}.tabs button{flex:1;padding:5px 6px;font-size:12px}
.ro{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.cell{background:#101722;border:1px solid var(--line);border-radius:8px;padding:5px 8px;min-width:0}
.cell.wide{grid-column:1/3}
.cell span{display:block;color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.03em}
.cell b{font-size:15px;font-variant-numeric:tabular-nums}.cell i{font-style:normal;color:var(--soft);font-size:11px;margin-left:3px}
.cell.ok b{color:var(--ok)}.cell.bad b{color:var(--bad)}.cell.warn b{color:var(--acc)}
canvas.chart{width:100%;height:170px;display:block;background:#0f151d;border:1px solid var(--line);border-radius:8px}
.legend{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:5px;color:var(--soft);font-size:11px}.legend i{display:inline-block;width:10px;height:3px;border-radius:2px;margin-right:5px;vertical-align:middle}
.note{color:var(--soft);font-size:12px;margin:6px 0}
.note b{color:var(--text)}
.science{color:var(--soft);font-size:12px}
.science h3{font-size:12px;color:var(--text);margin:8px 0 3px}
.science code{background:#0f151d;border:1px solid var(--line);border-radius:5px;padding:1px 5px;color:var(--acc);font-family:'JetBrains Mono',ui-monospace,Consolas,monospace;font-size:11.5px}
.science p,.science li{margin:3px 0}.science ul{padding-left:18px}
table.res{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;font-size:12px;margin-top:6px}
table.res th,table.res td{border-bottom:1px solid var(--line);padding:3px 4px;text-align:right}table.res th:first-child,table.res td:first-child{text-align:left}
table.res th{color:var(--muted);font-weight:600}
progress{width:100%;height:8px;accent-color:var(--acc)}
.verdict{margin-top:6px;padding:7px 9px;border-radius:8px;background:#0f1d18;border:1px solid #1e4a38;color:#baf3d8;font-size:12px}
@media (max-width:820px){
  html,body{overflow:auto}
  #app{display:flex;flex-direction:column;height:auto;min-height:100dvh}
  #stage{height:60dvh;min-height:300px;flex:none}
  #panel{border-left:0;border-top:1px solid var(--line);overflow:visible}
  #hint{display:none}
  .row{grid-template-columns:96px minmax(0,1fr) 58px}
}
body.embed-mode #app{height:100dvh}
@media (max-width:820px){body.embed-mode{overflow:auto}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
