:root{
  --slate:#020617; --panel:#0f172a; --rule:#1e293b; --ink:#e2e8f0; --dim:#94a3b8;
  --orange:#f97316; --go:#22c55e; --hold:#eab308; --stop:#ef4444;
  font-family:"Inter","Segoe UI",Roboto,system-ui,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--slate);color:var(--ink)}
body{padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--orange);outline-offset:2px}
.screen{display:none;min-height:100%}
.screen.on{display:block}

/* setup */
#setup{max-width:560px;margin:0 auto;padding:20px 18px 40px}
#setup h1{font-size:1.5rem;font-weight:700;margin:8px 0 4px;letter-spacing:-.01em}
#setup p.lede{color:var(--dim);margin:0 0 20px;line-height:1.45}
fieldset{border:1px solid var(--rule);border-radius:10px;margin:0 0 14px;padding:12px 14px 14px}
legend{padding:0 6px;color:var(--orange);font-weight:600}
label{display:block;margin:10px 0 4px;font-size:.92rem;color:var(--dim)}
input[type=text],input[type=number],select,textarea{width:100%;padding:10px 12px;background:var(--panel);border:1px solid var(--rule);border-radius:8px}
textarea{min-height:64px;resize:vertical}
.row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.check{display:flex;gap:10px;align-items:flex-start;margin-top:12px;color:var(--ink)}
.check input{margin-top:4px;width:18px;height:18px;accent-color:var(--orange)}
.hint{font-size:.82rem;color:var(--dim);margin-top:6px;line-height:1.4}
.hidden{display:none!important}
.primary{display:block;width:100%;padding:14px;border:0;border-radius:10px;background:var(--orange);color:#111827;font-weight:700;font-size:1.05rem;margin-top:8px}
.ghost{padding:10px 14px;border:1px solid var(--rule);border-radius:8px;background:var(--panel)}
#setupErr{color:var(--stop);min-height:1.2em;margin-top:10px}

/* run */
#run{position:fixed;inset:0;background:#000}
#stage{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
#stage canvas{position:absolute;max-width:100%;max-height:100%}
#hud{position:absolute;left:0;right:0;top:0;padding:calc(env(safe-area-inset-top) + 10px) 12px 10px;background:linear-gradient(#000c,#0000)}
#target{font-size:2.4rem;font-weight:800;line-height:1}
#target small{font-size:1rem;font-weight:500;color:var(--dim);margin-left:8px}
#status{font-size:1.15rem;margin-top:6px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.chip{padding:4px 9px;border-radius:999px;font-size:.8rem;background:#1e293bcc;border:1px solid #334155}
.chip.ok{border-color:var(--go);color:#bbf7d0}
.chip.bad{border-color:var(--stop);color:#fecaca}
.chip.wait{border-color:var(--hold);color:#fef08a}
#progress{position:absolute;left:12px;right:12px;bottom:calc(env(safe-area-inset-bottom) + 70px);display:flex;gap:4px}
#progress i{flex:1;height:6px;border-radius:3px;background:#334155}
#progress i.done{background:var(--go)}
#progress i.now{background:var(--orange)}
#controls{position:absolute;left:0;right:0;bottom:0;padding:10px 12px calc(env(safe-area-inset-bottom) + 12px);display:flex;gap:8px;justify-content:center;background:linear-gradient(#0000,#000c)}
#controls button{flex:1;max-width:160px;padding:12px;border-radius:10px;border:1px solid #334155;background:#0f172acc}
#controls #btnAbort{border-color:var(--stop)}

/* review */
#review{max-width:760px;margin:0 auto;padding:20px 16px 40px}
#review h2{margin:6px 0 4px}
#reviewSummary{color:var(--dim);margin-bottom:14px;line-height:1.45}
.tablewrap{overflow-x:auto;border:1px solid var(--rule);border-radius:10px}
table{border-collapse:collapse;width:100%;font-size:.86rem}
th,td{padding:8px 10px;border-bottom:1px solid var(--rule);text-align:left;white-space:nowrap}
th{color:var(--dim);font-weight:600}
td.flag{color:var(--hold)}
.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}
.actions .primary{width:auto;flex:1;min-width:180px;margin:0}
#zipState{color:var(--dim);margin-top:10px;min-height:1.2em}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
