:root{--bg:#0f1115;--panel:#181b21;--card:#1d2128;--line:#2c313a;--text:#e6e8ec;--muted:#8d95a3;--accent:#ff8a1f;--ok:#2fbf71}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
a{color:#7cb7ff;text-decoration:none}a:hover{text-decoration:underline}
.top{height:46px;display:flex;align-items:center;padding:0 18px;background:#0b0d10;border-bottom:1px solid var(--line)}
.brand{color:var(--text);font-weight:700;font-size:17px}.brand small{color:var(--muted);font-weight:400;margin-left:10px;font-size:12px}
.muted{color:var(--muted)}.small{font-size:12px}
main{padding:0}.card{background:var(--card);border:1px solid var(--line);border-radius:8px;margin:18px;padding:18px}.narrow{max-width:520px}
.stack{display:flex;flex-direction:column;gap:12px}
label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}
input,select{background:#10131a;color:var(--text);border:1px solid var(--line);border-radius:5px;padding:6px 8px;font:inherit;width:100%}
input[type=range]{padding:0;margin-top:4px}input[type=file]{padding:5px}
.btn{background:#2a303b;color:var(--text);border:1px solid #3a4150;border-radius:6px;padding:7px 14px;cursor:pointer;font:inherit}.btn:hover{background:#343b48}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#1a1000;font-weight:600}.btn.primary:disabled{opacity:.5;cursor:wait}
.btn.small{padding:4px 9px;font-size:12px}.btn.danger{color:#ff8b8b}.btn.active{background:var(--accent);color:#1a1000}.btn.wide{width:100%}
table.data{border-collapse:collapse;width:100%;font-size:13px}table.data th,table.data td{border-bottom:1px solid var(--line);padding:5px 8px;text-align:left;white-space:nowrap}
table.data thead th{color:var(--muted);font-weight:600;position:sticky;top:0;background:var(--card)}
.pill{display:inline-block;padding:1px 8px;border-radius:99px;background:#333a46;font-size:11px;font-weight:600;margin-left:6px}.pill.fitted{background:#1f4d70}.pill.analysed{background:#1f6b45}
.workspace{display:grid;grid-template-columns:330px 1fr;grid-template-rows:minmax(420px,1fr) auto;height:calc(100vh - 46px);min-height:620px}
.panel{grid-row:1/3;overflow:auto;background:var(--panel);border-right:1px solid var(--line);padding:12px}
.panel-head h2{margin:4px 0 0;font-size:16px}
fieldset{border:1px solid var(--line);border-radius:8px;margin:12px 0;padding:10px;display:flex;flex-direction:column;gap:9px}
legend{padding:0 6px;font-weight:600;font-size:13px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}.row{display:flex;gap:8px}
dl.kv{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;margin:0;font-size:12px}dl.kv dt{color:var(--muted)}dl.kv dd{margin:0;font-variant-numeric:tabular-nums;word-break:break-all}
.viewer{position:relative;background:#000;min-height:0}#three{position:absolute;inset:0}#three canvas{width:100%;height:100%;display:block}
.overlay{position:absolute;background:rgba(10,12,16,.78);border:1px solid var(--line);border-radius:6px;padding:6px 10px}
.overlay[hidden]{display:none}.tl{top:10px;left:10px}.br{bottom:8px;right:10px;background:none;border:0}
.legend{top:10px;right:10px;display:grid;grid-template-columns:auto 1fr;grid-template-areas:"t t" "b k" "s s" "e e";gap:4px 8px;font-size:11px;min-width:170px}
.legend .lt{grid-area:t;font-weight:600}.legend canvas{grid-area:b;width:22px;height:180px;border:1px solid #444}.legend .ticks{grid-area:k;position:relative;height:180px}
.legend .ticks div{position:absolute;transform:translateY(-50%);white-space:nowrap}.legend label{grid-area:s}.legend .sw{grid-column:1/3;display:flex;align-items:center;gap:6px}.legend .sw i{width:14px;height:10px;display:inline-block;border:1px solid #444}
.results[hidden]{display:none}.results{max-height:46vh;background:var(--panel);border-top:1px solid var(--line);overflow:auto;padding:0 12px 12px}
.tabs{display:flex;gap:2px;position:sticky;top:0;background:var(--panel);padding-top:8px;z-index:2}
.tab{background:none;color:var(--muted);border:0;border-bottom:2px solid transparent;padding:8px 14px;cursor:pointer;font:inherit}.tab.active{color:var(--text);border-color:var(--accent)}
.tabpane{display:none;padding-top:10px}.tabpane.active{display:block}
.tools{display:flex;gap:12px;align-items:center;margin-bottom:8px}.scroll{overflow:auto;max-height:42vh}
table.grid td{text-align:center;min-width:54px;font-variant-numeric:tabular-nums;border:1px solid #14171c}table.grid th{font-size:11px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:10px 12px;display:flex;flex-direction:column}.stat span{color:var(--muted);font-size:12px}.stat b{font-size:20px}.stat em{font-style:normal;color:var(--muted);font-size:12px}
#unrolled{border:1px solid var(--line);max-width:none}
@media(max-width:900px){.workspace{grid-template-columns:1fr;height:auto}.panel{grid-row:auto}.viewer{height:60vh}}

.banner{background:#3a2f12;color:#ffd666;font-size:12px;padding:4px 12px;text-align:center;border-bottom:1px solid #5c4a1a}

/* single-page flow */
.steps{margin:10px 0 0;padding-left:18px;color:var(--muted)}.steps li{margin:3px 0}.steps b{color:var(--text)}
.opt{color:#6d7480;font-size:11px}
.go{width:100%;font-size:20px;padding:14px;letter-spacing:.5px;margin-top:4px}
details{border:0}summary{cursor:pointer;color:#9db8d8;font-size:12px;margin:2px 0 8px}
details.adv{margin-top:14px;border-top:1px solid var(--line);padding-top:10px;display:flex;flex-direction:column;gap:9px}
details.adv>summary{margin-bottom:0}details.adv[open]>summary{margin-bottom:6px}
.panel fieldset details .grid2{margin-bottom:8px}.panel fieldset details .row{margin-top:2px}
.engine{margin-top:12px}.bl{bottom:8px;left:10px}.tr2{top:10px;left:10px;flex-direction:row;align-items:center;gap:6px;color:var(--text)}.tr2 input{width:auto}
.overlay.tl{top:44px}
