:root{--bg:#05080f;--card:#0d1626;--line:#22304d;--ink:#eaf0fb;--dim:#8ea3c6;--ok:#22c55e;--warn:#eab308;--bad:#ef4444;--accent:#3b82f6}*{box-sizing:border-box}[hidden]{display:none!important}html{background:var(--bg)}body{background:var(--bg);color:var(--ink);font-variant-numeric:tabular-nums;-webkit-tap-highlight-color:transparent;margin:0;font:16px/1.4 system-ui,sans-serif}#app{max-width:480px;padding:12px 12px calc(16px + env(safe-area-inset-bottom));margin:0 auto}h1{margin:0;font-size:18px}h2{color:var(--dim);text-transform:uppercase;letter-spacing:.05em;margin:16px 0 8px;font-size:12px}.brand{letter-spacing:.12em;color:var(--warn);margin:8px 0 12px;font-size:22px;font-weight:800}a{color:inherit;text-decoration:none}p{margin:8px 0}.top{border-bottom:1px solid var(--line);align-items:center;gap:10px;margin-bottom:12px;padding:8px 0;display:flex}.top .back{justify-content:center;align-items:center;min-width:48px;min-height:48px;font-size:26px;display:inline-flex}.top .spacer{margin-left:auto}button,.button{border:1px solid var(--line);background:var(--card);min-height:48px;color:var(--ink);cursor:pointer;border-radius:10px;justify-content:center;align-items:center;padding:10px 16px;font:600 16px system-ui;display:inline-flex}button:disabled{opacity:.4}.primary{background:var(--accent);border-color:var(--accent)}.danger{color:var(--bad)}.link{color:var(--dim);background:0 0;border:0;text-decoration:underline}.wide{width:100%;margin:12px 0}.row{flex-wrap:wrap;align-items:center;gap:10px;margin:8px 0;display:flex}.between{justify-content:space-between}.card{background:var(--card);border:1px solid var(--line);border-radius:12px;margin:8px 0;padding:12px 14px;display:block}.card b,.card .dim{display:block}.card .dim{font-size:14px}.banner{border:1px solid var(--line);background:var(--card);border-radius:10px;margin:8px 0;padding:10px 14px;display:block}.banner.warn{border-color:var(--warn);color:var(--warn)}.banner.accent{border-color:var(--accent)}.dim{color:var(--dim)}.center{text-align:center}.error{color:var(--bad)}.k{color:var(--dim);text-transform:uppercase;letter-spacing:.04em;font-size:11px}.v{font-size:26px;font-weight:700}.power{text-align:center;margin:4px 0;font-size:88px;font-weight:800;line-height:1}.gl{color:var(--dim);justify-content:space-between;align-items:baseline;font-size:14px;display:flex}.gl b{color:var(--ink);font-size:22px}.cue{text-align:center;background:var(--card);border-radius:10px;margin:8px 0;padding:12px;font-size:20px;font-weight:700}.cue.ok{color:var(--ok)}.cue.warn{color:var(--warn)}.cue.bad{color:var(--bad)}.cue.dim{color:var(--dim)}.tiles{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.tiles>div{background:var(--card);border:1px solid var(--line);text-align:center;border-radius:10px;padding:8px 6px}.tabs{border-bottom:1px solid var(--line);margin-bottom:12px;display:flex}.tabs button{color:var(--dim);background:0 0;border:0;border-radius:0;flex:1;min-height:44px}.tabs button.on{color:var(--ink);box-shadow:inset 0 -2px 0 var(--accent)}canvas{width:100%;display:block}.next{background:var(--card);border:1px solid var(--line);border-radius:10px;margin:8px 0;padding:10px 12px;font-size:15px}.next.warn{color:var(--warn);border-color:var(--warn);font-weight:700}.next.bad{color:var(--bad);border-color:var(--bad);font-weight:700}.blink{animation:1s steps(2,start) infinite blink}@keyframes blink{to{visibility:hidden}}.bar{background:var(--card);border-radius:3px;height:6px;overflow:hidden}.bar>div{background:var(--accent);width:0;height:100%}.report{min-height:20px;color:var(--ok);text-align:center;margin-top:8px;font-size:14px}.ftp{align-items:center;gap:8px;margin:12px 0;display:flex}.ftp input{background:var(--bg);width:84px;color:var(--ink);border:1px solid var(--line);text-align:right;border-radius:8px;padding:8px;font:600 18px system-ui}.ftp em{color:var(--dim);font-size:13px;font-style:normal}table{border-collapse:collapse;width:100%;margin:12px 0}th,td{text-align:left;border-bottom:1px solid var(--line);padding:6px 4px;font-weight:400}th{color:var(--dim);font-size:13px}td.n,th.n{text-align:right}
