:root{--navy:#122e5c;--gold:#f5b800;--bg:#f3f5f9;--ok:#157347;--bad:#b42318;--warn:#b26a00;--line:#dde2ea;--muted:#5a626e}
*{box-sizing:border-box}
body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;background:var(--bg);color:#1b1f27;font-size:16px;line-height:1.45}
.top{background:var(--navy);color:#fff;padding:12px 16px;display:flex;justify-content:space-between;align-items:center;border-bottom:4px solid var(--gold);gap:10px;flex-wrap:wrap}
.brand{font-weight:700;font-size:1.15rem}.sub{color:var(--gold);font-weight:600}
.wrap{max-width:1000px;margin:0 auto;padding:14px}
.card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px;margin:12px 0}
.narrow{max-width:460px;margin:18px auto}
h1{font-size:1.45rem;margin:.2em 0 .5em}h2{font-size:1.15rem;margin:.2em 0 .6em}
.muted{color:var(--muted)}.small{font-size:.86rem}.center{text-align:center}.hidden{display:none!important}
label{display:block;font-weight:600;margin:10px 0}
label.check{font-weight:500}
input,select,textarea{display:block;width:100%;padding:11px 12px;margin-top:5px;font:inherit;border:1px solid #b9c1cd;border-radius:8px;background:#fff}
input[type=checkbox]{display:inline;width:auto;margin-right:6px}
input[type=file]{border:0;padding:6px 0;display:inline;width:auto}
.search{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:10px 0}
.search input,.search select{width:auto;margin:0;min-width:150px}
.btn{display:inline-block;padding:11px 16px;border-radius:8px;border:1px solid #9aa5b5;background:#fff;color:#1b1f27;font:inherit;font-weight:600;text-decoration:none;cursor:pointer}
.btn.primary{background:var(--navy);border-color:var(--navy);color:#fff}
.btn.danger{background:#fff;color:var(--bad);border-color:var(--bad)}
.btn.small{padding:5px 10px;font-size:.85rem}.btn.block{display:block;width:100%;text-align:center;margin-top:12px}
button.link{background:none;border:0;color:var(--navy);text-decoration:underline;cursor:pointer;font:inherit}
button.link.light{color:#fff}form.inline{display:inline}
.alert{padding:10px 14px;border-radius:8px;margin:10px 0;border:1px solid}
.alert.ok{background:#e8f6ee;border-color:#9fd5b5;color:#0d4f2d}.alert.bad{background:#fdecea;border-color:#f1aaa4;color:#7a1810}
.alert.warn{background:#fff6e0;border-color:#f0cf85;color:#6b4200}
.kv{width:100%;border-collapse:collapse}.kv th{text-align:left;color:var(--muted);font-weight:500;width:38%;padding:7px 4px;vertical-align:top}.kv td{padding:7px 4px}
.qr{text-align:center;margin:14px 0}.qr img{border:6px solid #fff;outline:1px solid var(--line);max-width:100%;height:auto}
.actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}
.badge{display:inline-block;padding:2px 9px;border-radius:99px;background:#e8ecf3;font-size:.82rem;font-weight:600}
.badge.ok{background:#e8f6ee;color:var(--ok)}.badge.bad{background:#fdecea;color:var(--bad)}.badge.warn{background:#fff6e0;color:var(--warn)}
.req{padding:8px 0;border-bottom:1px solid var(--line)}
/* admin */
.nav{background:#fff;border-bottom:1px solid var(--line);display:flex;gap:4px;flex-wrap:wrap;padding:6px 10px}
.nav a{padding:8px 10px;border-radius:6px;text-decoration:none;color:var(--navy);font-weight:600;font-size:.92rem}.nav a:hover{background:#eef1f7}
.pill{background:var(--bad);color:#fff;border-radius:99px;padding:1px 7px;font-size:.78rem}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:10px 0}
.tile{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px;color:var(--muted);font-size:.9rem}
.tile b{display:block;font-size:1.9rem;color:var(--navy)}.tile.hot{border-color:var(--bad)}.tile.hot b{color:var(--bad)}
.scroll{overflow-x:auto}.grid{border-collapse:collapse;width:100%;background:#fff;font-size:.93rem}
.grid th,.grid td{border:1px solid var(--line);padding:7px 9px;text-align:left;vertical-align:top}.grid th{background:#eef1f7}
.grid input,.grid select{margin:0;min-width:120px}.acts form{display:inline-block;margin:2px}
.tabs a{display:inline-block;padding:7px 14px;border:1px solid var(--line);border-radius:99px;margin-right:6px;text-decoration:none;color:var(--navy);background:#fff}.tabs a.on{background:var(--navy);color:#fff}
.decide{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;align-items:end;margin-top:8px}
.pager a{margin-left:10px}.danger-zone{border-color:var(--bad)}.copy{font-family:monospace}
/* gate scanner */
.statsbar{background:#fff;border:1px solid var(--line);border-radius:8px;padding:8px 12px;text-align:center}
.camwrap{position:relative;background:#000;border-radius:12px;overflow:hidden;margin:10px 0;aspect-ratio:4/3;max-height:55vh}
.camwrap video{width:100%;height:100%;object-fit:cover;margin:0;padding:0;border:0;border-radius:0}
.reticle{position:absolute;inset:18% 18%;border:3px solid rgba(255,255,255,.85);border-radius:14px;box-shadow:0 0 0 999px rgba(0,0,0,.25);pointer-events:none}
.result{border-radius:12px;padding:16px;margin:10px 0;border:3px solid}
.result.ok{background:#e8f6ee;border-color:var(--ok)}.result.bad{background:#fdecea;border-color:var(--bad)}.result.warn{background:#fff6e0;border-color:var(--warn)}
.result .msg{font-weight:700;font-size:1.05rem;margin-bottom:8px}.result .nm{font-size:1.4rem;font-weight:800}
.counter{display:flex;align-items:center;gap:10px;margin:12px 0}.counter input{width:90px;text-align:center;font-size:1.6rem;margin:0}
.counter button{width:56px;height:56px;font-size:1.8rem;border-radius:10px;border:1px solid #888;background:#fff}
@media print{.top,.nav,.noprint,.alert{display:none!important}body{background:#fff}.card{border:0}.wrap{max-width:none}}
