:root{
  --ink:#15181d; --muted:#5d6470; --line:#d7dbe2; --bg:#f2f4f7; --card:#fff;
  --blue:#1f5fbf; --blue-d:#17488f; --blue-bg:#e8f0fc;
  --green:#0f7a3d; --green-bg:#e6f4ea; --amber:#8a4f00; --amber-bg:#fdf1dd; --amber-line:#e0a53a;
  --red:#b3261e; --red-bg:#fdecea; --top:#1b2430;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
html{background:#f2f4f7;min-height:100%}
body{font:17px/1.4 "Segoe UI",Roboto,system-ui,-apple-system,Arial,sans-serif;color:var(--ink);background:var(--bg);-webkit-text-size-adjust:100%}
button{font:inherit;cursor:pointer}
.hidden{display:none!important}
.top{position:sticky;top:0;z-index:5;background:var(--top);color:#fff;display:flex;align-items:center;gap:10px;padding:10px 12px;min-height:52px}
.top .ttl{font-weight:700;font-size:19px;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top .who{font-size:13px;color:#b9c2cf;text-align:right}
.top .back{background:none;border:1px solid #4a5666;color:#fff;border-radius:8px;width:44px;height:38px;font-size:22px;line-height:1}
main{max-width:720px;margin:0 auto;padding:12px}
h2{font-size:20px;margin:4px 0 10px}
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px;margin-bottom:12px}
.hint{color:var(--muted);font-size:14px}
.btn{display:block;width:100%;background:var(--blue);color:#fff;border:1px solid var(--blue-d);border-radius:10px;padding:14px 16px;font-size:18px;font-weight:600;text-align:center}
.btn:active{background:var(--blue-d)}
.btn.gray{background:#fff;color:var(--ink);border-color:var(--line)}
.btn.red{background:var(--red);border-color:#8c1d17}
.btn.sm{display:inline-block;width:auto;padding:8px 12px;font-size:15px}
.row-btns{display:flex;gap:8px;flex-wrap:wrap}
.tiles{display:grid;gap:10px}
.tile{display:flex;align-items:center;gap:14px;background:#fff;border:2px solid var(--line);border-radius:12px;padding:18px 16px;font-size:20px;font-weight:700;text-align:left;width:100%;color:var(--ink)}
.tile:active{border-color:var(--blue);background:var(--blue-bg)}
.tile .ic{font-size:26px;width:30px;text-align:center}
.tile small{display:block;font-size:13px;font-weight:400;color:var(--muted)}
.status{font-size:14px;color:var(--muted);text-align:center;margin:14px 0 4px}
.status .dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:0}
.dot.ok{background:var(--green)} .dot.bad{background:var(--red)} .dot.wait{background:#c9ced6}
label{display:block;font-weight:600;margin:8px 0 6px}
input[type=text],input[type=password],select{font:inherit;font-size:18px;padding:12px;border:2px solid var(--line);border-radius:8px;width:100%;background:#fff;color:var(--ink)}
input:focus,select:focus{outline:none;border-color:var(--blue)}
.chk{display:flex;align-items:center;gap:10px;font-weight:600;margin:10px 0}
.chk input{width:22px;height:22px}
/* PIN keypad */
.pinbox{display:flex;justify-content:center;gap:10px;margin:10px 0 14px}
.pinbox i{width:22px;height:22px;border-radius:50%;border:2px solid var(--muted);display:block}
.pinbox i.on{background:var(--ink);border-color:var(--ink)}
.keys{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;max-width:340px;margin:0 auto}
.keys button{background:#fff;border:1px solid var(--line);border-radius:12px;font-size:28px;font-weight:600;padding:14px 0;color:var(--ink)}
.keys button:active{background:var(--blue-bg)}
.keys .fn{font-size:16px;color:var(--muted)}
/* scan box */
.scan{position:relative}
.scan input{font-family:Consolas,"Roboto Mono",monospace;font-size:24px;font-weight:700;padding:16px;letter-spacing:.5px;border-width:3px}
.scan .typebtn{position:absolute;right:8px;top:50%;transform:translateY(-50%)}
.msg{border-radius:8px;padding:10px 12px;font-weight:600;margin:10px 0}
.msg.ok{background:var(--green-bg);color:var(--green)}
.msg.warn{background:var(--amber-bg);color:var(--amber)}
.msg.err{background:var(--red-bg);color:var(--red)}
.msg.info{background:var(--blue-bg);color:var(--blue-d)}
/* slab card */
.slab .ser{font-family:Consolas,"Roboto Mono",monospace;font-size:26px;font-weight:800}
.slab .var{font-size:17px;margin:2px 0 10px}
.slab .loc{font-size:15px;color:var(--muted)}
.slab .loc b{display:block;font-size:30px;color:var(--ink);line-height:1.1}
.kv{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:15px;margin-top:10px}
.kv dt{color:var(--muted)} .kv dd{margin:0;font-weight:600}
.tag{display:inline-block;border-radius:99px;padding:2px 10px;font-size:13px;font-weight:700;margin-left:6px;vertical-align:4px}
.tag.rem{background:var(--amber-bg);color:var(--amber)} .tag.full{background:var(--blue-bg);color:var(--blue-d)}
.tag.gone{background:var(--red-bg);color:var(--red)}
.list{border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}
.list .it{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #eef1f5;width:100%;background:none;border-left:0;border-right:0;border-top:0;text-align:left;color:var(--ink)}
.list .it:last-child{border-bottom:none}
.list .it .s{font-family:Consolas,"Roboto Mono",monospace;font-weight:700}
.list .it .p{flex:1;color:var(--muted);font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list .it .l{font-weight:700}
.box-amber{border-left:6px solid var(--amber-line);border-radius:0}
.box-red{border-left:6px solid var(--red);border-radius:0}
.pinshow{font-family:Consolas,"Roboto Mono",monospace;font-size:40px;font-weight:800;letter-spacing:6px;text-align:center;margin:8px 0}
.dev{display:flex;flex-direction:column;gap:6px}
.dev .nm{font-weight:700;font-size:18px}
.dev .meta{font-size:13px;color:var(--muted)}
.foot{text-align:center;margin:18px 0 8px}
.foot button{background:none;border:none;color:var(--muted);text-decoration:underline;font-size:15px}
@media (min-width:800px){ body{font-size:16px} .tiles{grid-template-columns:1fr 1fr} }
.pinlbl{text-align:center;margin-top:16px}
.mt8{margin-top:8px}.mt10{margin-top:10px}.mt12{margin-top:12px}
/* i2: count */
.status-line{display:flex;gap:18px;flex-wrap:wrap;font-size:15px;color:var(--muted)}
.status-line b{color:var(--ink)}
.bar{height:8px;background:#e8ebf0;border-radius:99px;margin-top:8px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--green);border-radius:99px}
.rowtile .grow{flex:1}
.grow{flex:1;min-width:0}
.secgrid{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(108px,1fr))}
.sec{background:#fff;border:2px solid var(--line);border-radius:10px;padding:12px 6px;text-align:center;color:var(--ink)}
.sec .name{font-size:22px;font-weight:700}
.sec .mw{font-size:12px;color:var(--muted);margin-top:4px}
.sec.done{border-color:var(--green);background:var(--green-bg)}
.sec.part{border-color:var(--amber-line);background:var(--amber-bg)}
.sec.hid{opacity:.55;border-style:dashed}
.sec.edit{border-color:var(--red)}
.flag{display:inline-block;margin-top:6px;font-size:12px;font-weight:700;border-radius:99px;padding:3px 8px}
.f-none{background:#eef1f5;color:var(--muted)} .f-part{background:#fff;color:var(--amber)} .f-done{background:#fff;color:var(--green)}
.counter{font-size:40px;font-weight:800;text-align:center;margin:0 0 10px;line-height:1.1}
.counter.ok{color:var(--green)} .counter.over{color:var(--red)}
.counter small{display:block;font-size:14px;font-weight:600;color:var(--muted);margin-top:4px}
.btn.green{background:var(--green);border-color:#0b5c2e}
.row-btns .btn{width:auto;flex:1}
.list .it.scanrow{align-items:flex-start}
.list .it.scanrow .s{display:block}
.list .it.scanrow .p{display:block;white-space:normal}
.list .it.warn{background:var(--amber-bg)} .list .it.err{background:var(--red-bg)}
.list .it .n{color:var(--muted);font-size:13px;width:26px;padding-top:2px}
.x{background:none;border:none;color:var(--red);font-size:24px;font-weight:700;padding:0 8px;line-height:1}
@media (min-width:800px){ .tiles.rows{grid-template-columns:1fr 1fr 1fr} }
/* i3: staging */
.jobhead{display:flex;align-items:flex-start;gap:10px}
.jn{font-weight:700;font-size:18px}
.pill{border-radius:99px;padding:4px 10px;font-size:14px;font-weight:700;background:#eef1f5;color:var(--muted);white-space:nowrap}
.pill.ok{background:var(--green-bg);color:var(--green)} .pill.bad{background:var(--red-bg);color:var(--red)}
.flagline{color:var(--red);font-weight:700;margin:6px 0}
.card.job .list{margin-top:10px}
.slab-row{align-items:flex-start}
.slab-row .s{display:block;font-size:18px}
.slab-row .p{display:block;white-space:normal}
.slab-row .l{font-size:20px;font-weight:800;white-space:nowrap}
.slab-row .chk-ic{width:28px;height:28px;border:2px solid var(--line);border-radius:6px;display:inline-flex;align-items:center;justify-content:center;font-weight:800;color:var(--green);flex:none}
.slab-row.staged .chk-ic{border-color:var(--green);background:var(--green-bg)}
.slab-row.staged{opacity:.85}
.slab-row.missed{background:var(--red-bg)}
.slab-row.missed .chk-ic{border-color:var(--red)}
.note{font-size:13px;color:var(--green);font-weight:600;margin-top:2px}
.note.bad{color:var(--red)}
.box-ok{border-left:6px solid var(--green);border-radius:0}
.ser-line{margin-top:6px}
.ser-line .s{font-family:Consolas,"Roboto Mono",monospace;font-weight:800;font-size:18px}
.asof{align-self:center}
/* i4: transfer */
.tobox{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.tobox .lbl{font-size:14px;color:var(--muted);width:100%}
.tobox .toname{font-size:40px;font-weight:800;line-height:1.1;flex:1;color:var(--blue-d)}
.tobox .toname.none{color:var(--red);font-size:28px}
.picker{margin-top:12px;border-top:1px solid var(--line);padding-top:12px}
.picker .row-btns input{flex:3}
.pg{font-weight:700;color:var(--muted);margin:12px 0 6px;font-size:14px}
.secgrid.small{grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px}
.secgrid.small .sec{padding:10px 4px}
.secgrid.small .sec .name{font-size:18px}
.it.undone .s,.it.undone .mv{text-decoration:line-through;color:var(--muted)}
.s.mv,.mv{font-weight:700}
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.filters select,.filters input{width:auto;flex:1;min-width:150px;font-size:16px;padding:8px}
.mb8{margin-bottom:8px}
.movelog .it{flex-wrap:wrap;gap:6px 12px}
.movelog .when{font-size:13px;color:var(--muted);width:150px}
.movelog .grow{min-width:180px}
.movelog .s{display:block}
.movelog .p{display:block;white-space:normal}
.movelog .mv{min-width:150px}
.movelog .dev{font-size:13px;color:var(--muted);min-width:90px}
.src{font-size:12px;font-weight:700;border-radius:99px;padding:2px 8px;background:#eef1f5;color:var(--muted)}
.src.transfer{background:var(--blue-bg);color:var(--blue-d)} .src.staging{background:var(--green-bg);color:var(--green)} .src.undo{background:var(--amber-bg);color:var(--amber)}
.list .it.sessrow .s{display:block;font-size:18px}
.list .it.sessrow .p{display:block;white-space:normal;overflow:visible}
.sessrow .btn{flex:none}
