:root{
  --bg:#0b0f14;--card:#161e2b;--line:#28344a;--txt:#eef3fa;--muted:#8a99ad;
  --accent:#3b82f6;--ok:#22c55e;--warn:#f59e0b;--err:#ef4444;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%}
body{font:16px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:var(--bg);color:var(--txt);overscroll-behavior:none}
.hidden{display:none!important}
.screen{min-height:100%;display:flex;flex-direction:column}
header{background:#0a0d12;border-bottom:1px solid var(--line);padding:12px 16px;display:flex;align-items:center;gap:10px;position:sticky;top:0;z-index:20}
header .brand{font-weight:700}
header .sp{flex:1}
header .net{font-size:12px;padding:2px 9px;border-radius:999px;background:#1d2a1f;color:#9ae6b4}
header .net.off{background:#3a2222;color:#fca5a5}
main{flex:1;padding:16px;max-width:560px;margin:0 auto;width:100%}
h1{font-size:20px;margin:4px 0 14px}
label{display:block;font-size:13px;color:var(--muted);margin:14px 0 5px}
input,select,textarea,button{font:inherit}
input[type=text],input[type=password],input[type=email],input[type=number],select,textarea{
  width:100%;background:#0a0d12;border:1px solid var(--line);border-radius:10px;color:var(--txt);padding:13px 14px;font-size:16px}
button,.btn{background:var(--accent);color:#fff;border:0;border-radius:10px;padding:14px 18px;font-size:16px;font-weight:600;cursor:pointer;width:100%;display:block;text-align:center}
button.ghost,.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--txt)}
button.sm{width:auto;padding:9px 14px;font-size:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:14px}
.muted{color:var(--muted)}
.tag{font-family:ui-monospace,Menlo,monospace;background:#0a0d12;border:1px solid var(--line);padding:2px 7px;border-radius:6px;font-size:14px}
.job{padding:16px;border:1px solid var(--line);border-radius:12px;margin-bottom:10px;cursor:pointer;background:var(--card)}
.job:active{border-color:var(--accent)}
.job .t{font-weight:600}.job .s{font-size:13px;color:var(--muted);margin-top:3px}

/* scanner */
#video{width:100%;border-radius:14px;background:#000;aspect-ratio:3/4;object-fit:cover}
.scanwrap{position:relative}
.reticle{position:absolute;inset:14% 10%;border:3px solid rgba(59,130,246,.9);border-radius:14px;box-shadow:0 0 0 9999px rgba(0,0,0,.25)}
.counter{position:absolute;top:10px;left:10px;background:rgba(0,0,0,.6);padding:5px 11px;border-radius:999px;font-size:13px}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:#0a0d12;border:1px solid var(--line);padding:11px 18px;border-radius:10px;z-index:50;font-size:14px;box-shadow:0 6px 24px rgba(0,0,0,.5)}
.toast.ok{border-color:var(--ok)}.toast.err{border-color:var(--err)}
.match{background:#10261a;border:1px solid #1f6b3a;border-radius:10px;padding:10px 12px;margin:10px 0;font-size:14px}
.match.none{background:#2a2418;border-color:#7c5e1e;color:#fde68a}
.recent{font-size:13px}
.recent .r{display:flex;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)}
.recent .r .x{color:var(--muted)}
.bar{display:flex;gap:10px;margin-top:10px}
.bar>*{flex:1}
.pendwrap{font-size:13px;color:var(--warn)}
