:root{--bg: #F6F5F1;--surface: #FFFFFF;--surface-2: #FCFBF8;--ink: #17211C;--text: #232B26;--muted: #6E7A72;--faint: #97A19A;--line: #E9E7E0;--line-strong: #DCDAD1;--emerald: #0E6B52;--emerald-strong: #0A5942;--emerald-tint: #E9F3EE;--gold: #A9863F;--danger: #B23A2E;--danger-tint: #F7E9E6;--warn: #9C6F26;--warn-tint: #F6EFDD;--seat-free: #FFFFFF;--seat-sel: #0E6B52;--seat-taken: #F1EBE6;--radius: 11px;--radius-card: 14px;--shadow-sm: 0 1px 2px rgba(18,33,27,.05);--shadow: 0 6px 22px rgba(18,33,27,.07);--sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--serif: "Fraunces", Georgia, serif;font-family:var(--sans);color:var(--text);-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{margin:0;background:var(--bg)}.pos{max-width:520px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column;background:var(--bg)}.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line);background:var(--surface);position:sticky;top:0;z-index:5}.topbar .brand{font-family:var(--serif);font-weight:600;font-size:20px;color:var(--ink)}.topbar .brand span{color:var(--emerald)}.topbar .who{font-size:12px;color:var(--muted);text-align:right;line-height:1.5}.content{padding:22px 20px 32px;flex:1}h2.step{font-size:12.5px;margin:0 0 16px;color:var(--faint);text-transform:uppercase;letter-spacing:.1em;font-weight:600}.btn{background:var(--surface);color:var(--text);border:1px solid var(--line-strong);padding:14px 16px;border-radius:var(--radius);font-weight:600;cursor:pointer;font-size:15px;font-family:var(--sans);transition:border-color .12s,background .12s}.btn:hover{border-color:var(--emerald)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--emerald);color:#fff;border-color:var(--emerald)}.btn.primary:hover{background:var(--emerald-strong);border-color:var(--emerald-strong)}.btn.ghost{background:var(--surface)}.btn-block{width:100%}.row{display:flex;gap:10px}.shiftbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius-card);padding:12px 16px;margin-bottom:16px;box-shadow:var(--shadow-sm)}.shiftbar>div:first-child{flex:1;min-width:140px}.shiftbar.open{border-color:var(--emerald);background:var(--emerald-tint)}.shift-title{font-weight:600;font-size:14px;color:var(--ink);display:flex;align-items:center;gap:7px}.shift-title .dot{width:8px;height:8px;border-radius:50%;background:var(--emerald);display:inline-block}.shift-sub{font-size:12px;color:var(--muted);margin-top:2px}.shift-float{width:120px;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);padding:9px 11px;font-size:14px;font-family:var(--sans);color:var(--text)}.shift-float:focus{outline:none;border-color:var(--emerald)}.shift-variance{font-family:var(--serif);font-weight:600;font-size:17px}.shiftbar.closed-result.short{border-color:var(--danger);background:var(--danger-tint)}.shiftbar.closed-result.short .shift-variance{color:var(--danger)}.shiftbar.closed-result.ok{border-color:var(--emerald);background:var(--emerald-tint)}.shiftbar.closed-result.ok .shift-variance{color:var(--emerald-strong)}.shift-err{flex-basis:100%;color:var(--danger);font-size:13px}.btn.tiny{padding:8px 13px;font-size:13px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-card);padding:16px 18px;margin-bottom:14px;box-shadow:var(--shadow-sm)}.list-item{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-card);padding:16px 18px;margin-bottom:12px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;box-shadow:var(--shadow-sm);transition:border-color .12s,box-shadow .12s}.list-item:hover{border-color:var(--emerald);box-shadow:var(--shadow)}.list-item .route{font-weight:600;font-size:16px;color:var(--ink)}.list-item .sub{font-size:13px;color:var(--muted);margin-top:2px}.field{display:flex;flex-direction:column;gap:7px;margin-bottom:14px}.field label{font-size:12.5px;color:var(--muted);font-weight:500;letter-spacing:.02em}.field input,.field select{background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);padding:13px;color:var(--text);font-size:15px;font-family:var(--sans);transition:border-color .12s,box-shadow .12s}.field input:focus,.field select:focus{outline:none;border-color:var(--emerald);box-shadow:0 0 0 3px var(--emerald-tint)}.seatmap{margin:6px 0 8px}.deck-tabs{display:flex;gap:8px;margin-bottom:12px}.deck-tab{flex:1;padding:9px;border:1px solid var(--line-strong);background:var(--surface);border-radius:var(--radius);font-family:var(--sans);font-weight:600;font-size:13px;color:var(--muted);cursor:pointer}.deck-tab.on{border-color:var(--emerald);background:var(--emerald-tint);color:var(--emerald-strong)}.bus-frame{border:2px solid var(--line-strong);border-radius:22px;padding:10px;background:var(--surface-2);position:relative}.bus-front,.bus-rear{text-align:center;font-size:10px;letter-spacing:.18em;color:var(--faint);font-weight:700;padding:4px 0}.bus-grid{display:grid;gap:7px;padding:6px 4px}.cell{aspect-ratio:1;border-radius:9px;display:grid;place-items:center;font-size:13px;font-weight:600}.cell.blank,.cell.aisle{background:transparent}.seat{border:1px solid var(--line-strong);background:var(--surface);color:var(--text);cursor:pointer;font-family:var(--sans);transition:all .1s}.seat:hover:not(:disabled){border-color:var(--emerald)}.seat.selected{background:var(--emerald);color:#fff;border-color:var(--emerald);box-shadow:0 4px 12px #0e6b524d}.cell.fixture{flex-direction:column;border:1px dashed var(--line-strong);background:var(--bg);color:var(--faint);gap:2px}.cell.fixture.toilet{border-color:var(--gold);color:var(--gold)}.cell.fixture .fx-ic{font-size:15px;line-height:1}.cell.fixture .fx-l{font-size:8px;text-transform:uppercase;letter-spacing:.04em}.seat-legend{display:flex;flex-wrap:wrap;gap:14px;font-size:12px;color:var(--muted);margin-top:12px}.seat-legend .lg{display:inline-block;width:13px;height:13px;border-radius:4px;vertical-align:-2px;margin-right:6px}.seat-legend .lg.free{background:var(--surface);border:1px solid var(--line-strong)}.seat-legend .lg.sel{background:var(--emerald)}.seat-legend .lg.taken{background:var(--seat-taken)}.seat-legend .lg.fix{background:var(--bg);border:1px dashed var(--line-strong)}.seatgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:10px 0 4px}.seat{aspect-ratio:1;border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--seat-free);color:var(--text);font-weight:600;font-size:15px;display:grid;place-items:center;cursor:pointer;transition:all .1s}.seat:hover{border-color:var(--emerald)}.seat.taken{background:var(--seat-taken);color:var(--faint);cursor:not-allowed;border-color:var(--line)}.seat.blocked{background:transparent;border-style:dashed;color:var(--faint);cursor:not-allowed}.seat.selected{background:var(--seat-sel);color:#fff;border-color:var(--seat-sel);box-shadow:0 4px 12px #0e6b5247}.legend{display:flex;gap:16px;font-size:12px;color:var(--muted);margin:10px 0 16px}.legend b{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:-1px;margin-right:6px}.pay-opts{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}.pay-opt{padding:15px;border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--surface);text-align:center;font-weight:600;cursor:pointer;transition:all .12s}.pay-opt:hover{border-color:var(--emerald)}.pay-opt.active{border-color:var(--emerald);background:var(--emerald-tint);color:var(--emerald-strong);box-shadow:inset 0 0 0 1px var(--emerald)}.summary{display:flex;justify-content:space-between;font-size:15px;padding:8px 0;color:var(--text)}.summary.total{font-family:var(--serif);font-size:22px;font-weight:500;color:var(--ink);border-top:1px solid var(--line);padding-top:14px;margin-top:6px;font-variant-numeric:tabular-nums}.receipt{text-align:center;padding:10px 6px}.receipt .code{font-family:var(--serif);font-size:32px;font-weight:600;letter-spacing:3px;color:var(--ink);margin:14px 0}.receipt img{background:#fff;padding:12px;border-radius:var(--radius);border:1px solid var(--line)}.receipt .status{display:inline-block;padding:5px 14px;border-radius:999px;font-weight:600;font-size:13px}.status.issued{background:var(--emerald-tint);color:var(--emerald-strong)}.status.reserved{background:var(--warn-tint);color:var(--warn)}.error{color:var(--danger);font-size:14px;margin:12px 0;background:var(--danger-tint);padding:11px 14px;border-radius:var(--radius)}.muted{color:var(--muted)}.center{display:grid;place-items:center;min-height:60vh;color:var(--muted)}.login-wrap{display:grid;place-items:center;min-height:100vh;padding:20px}.login-card{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:38px 32px;width:100%;max-width:360px;box-shadow:0 14px 40px #12211b1a}.login-card h1{font-family:var(--serif);font-weight:600;font-size:28px;color:var(--ink);margin:0 0 2px}.login-card h1 span{color:var(--emerald)}.login-card p{color:var(--muted);margin:0 0 24px;font-size:14px}.login-card .btn.primary{margin-top:6px}.crew-tabs{display:flex;gap:6px;padding:10px 16px 0;background:var(--surface);border-bottom:1px solid var(--line)}.crew-tab{flex:1;padding:11px 8px;background:none;border:none;border-bottom:2px solid transparent;font-family:var(--sans);font-size:14px;font-weight:600;color:var(--muted);cursor:pointer}.crew-tab.on{color:var(--emerald-strong);border-bottom-color:var(--emerald)}.speedo{background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius-card);padding:22px 16px;text-align:center;margin-bottom:16px;box-shadow:var(--shadow-sm)}.speedo.over{border-color:var(--danger);background:var(--danger-tint)}.sp-val{font-family:var(--serif);font-size:54px;font-weight:600;line-height:1;color:var(--ink)}.speedo.over .sp-val{color:var(--danger)}.sp-unit{font-size:13px;color:var(--muted);margin-top:4px}.sp-warn{margin-top:10px;font-weight:700;letter-spacing:.12em;color:var(--danger);font-size:14px}.sp-sub{font-size:11px;color:var(--faint);margin-top:10px}.btn.danger-block{width:100%;background:var(--danger-tint);color:var(--danger);border:1px solid var(--danger)}.btn.danger-block:hover{filter:brightness(.98)}.stop-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}.stop-row:last-child{border-bottom:none}.stop-meta{white-space:nowrap;font-size:13px;color:var(--muted)}.ev-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line);font-size:13.5px}.ev-row:last-child{border-bottom:none}.pill{padding:2px 10px;border-radius:999px;font-size:11.5px;font-weight:600}.pill.valid{background:var(--emerald-tint);color:var(--emerald-strong)}.pill.stop{background:var(--danger-tint);color:var(--danger)}.pill.warn{background:var(--warn-tint);color:var(--warn)}.hc-label{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--faint);font-weight:600;margin-bottom:10px}.hc-msg{padding:11px 14px;border-radius:var(--radius);font-size:14px;font-weight:500}.hc-msg.ok{background:var(--emerald-tint);color:var(--emerald-strong)}.hc-msg.stop{background:var(--danger-tint);color:var(--danger)}.counts{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:20px}.counts.two{grid-template-columns:repeat(2,1fr)}.count{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-card);padding:14px 12px;text-align:center}.count .n{font-family:var(--serif);font-size:28px;font-weight:500;color:var(--ink)}.count .l{font-size:10.5px;color:var(--faint);text-transform:uppercase;letter-spacing:.1em;font-weight:600}.scanbox{display:flex;gap:10px;margin-bottom:18px}.scanbox input{flex:1;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);padding:16px;color:var(--ink);font-size:20px;letter-spacing:2px;text-transform:uppercase;font-family:var(--sans);font-weight:500}.result{border-radius:var(--radius-card);padding:30px 18px;text-align:center;margin-bottom:20px}.result .big{font-family:var(--serif);font-size:32px;font-weight:600}.result .sub{font-size:15px;margin-top:8px}.result.valid{background:var(--emerald-tint);border:1px solid var(--emerald)}.result.valid .big,.result.valid .sub{color:var(--emerald-strong)}.result.stop{background:var(--danger-tint);border:1px solid var(--danger)}.result.stop .big,.result.stop .sub{color:var(--danger)}.result.warn{background:var(--warn-tint);border:1px solid var(--warn)}.result.warn .big,.result.warn .sub{color:var(--warn)}.headcount{margin:4px 0 18px;padding-top:14px;border-top:1px solid var(--line)}.recent{margin-top:10px}.recent h3{font-size:11px;color:var(--faint);text-transform:uppercase;letter-spacing:.1em;font-weight:600}.recent-row{display:flex;justify-content:space-between;align-items:center;padding:11px 2px;border-bottom:1px solid var(--line);font-size:14px}.parcel-row{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.parcel-row .route{font-weight:600;font-size:16px;color:var(--ink);font-family:var(--serif);letter-spacing:.5px}.parcel-pill{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:3px 9px;border-radius:20px;background:var(--surface-2);color:var(--muted);border:1px solid var(--line);white-space:nowrap}.parcel-pill.arrived{background:var(--emerald-tint);color:var(--emerald-strong);border-color:transparent}.parcel-pill.in_transit{background:var(--warn-tint);color:var(--warn);border-color:transparent}.parcel-pill.collected{background:var(--surface-2);color:var(--muted)}.parcel-pill.cancelled,.parcel-pill.returned{background:var(--danger-tint);color:var(--danger);border-color:transparent}.inset{margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}.code-in{letter-spacing:8px;text-align:center;font-size:22px;font-family:var(--serif)}.hc-stop{width:100%;margin-bottom:8px;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);padding:11px 13px;font-size:14px;font-family:var(--sans);color:var(--text)}.hc-stop:focus{outline:none;border-color:var(--emerald)}.crew-back{background:none;border:none;color:var(--muted);font-weight:600;font-size:14px;cursor:pointer;padding:2px 0 8px;font-family:var(--sans)}.crew-back:hover{color:var(--emerald)}.login-wrap{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);place-items:stretch;min-height:100vh;width:100%;padding:0}.login-brand{background:var(--sidebar, #12211B);color:#c9d2cc;padding:44px 56px;display:flex;flex-direction:column;justify-content:space-between;gap:36px}.login-mark{display:flex;align-items:center;gap:12px;font-family:var(--serif);font-weight:600;font-size:22px;color:#fff}.login-mark img{width:38px;height:38px;border-radius:10px;display:block}.login-mark small{font-family:var(--sans);font-size:11.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:#8a968e;margin-left:2px}.login-brand h2{font-family:var(--serif);font-weight:600;color:#fff;font-size:38px;line-height:1.14;margin:0 0 14px;max-width:460px}.login-lead{font-size:16px;line-height:1.6;color:#a9b5ae;max-width:430px;margin:0 0 30px}.login-points{list-style:none;padding:0;margin:0;display:grid;gap:16px;max-width:430px}.login-points li{display:flex;gap:13px;font-size:14.5px;line-height:1.5}.login-points li:before{content:"";flex:0 0 auto;width:7px;height:7px;border-radius:50%;background:#5fbf9b;margin-top:8px}.login-points b{display:block;color:#fff;font-weight:600}.login-brand-foot{font-size:12.5px;color:#8a968e}.login-side{display:grid;place-items:center;padding:32px 24px}.login-col{width:100%;max-width:380px}.login-col .login-card{width:100%;max-width:none}.login-links{margin-top:18px;font-size:13px;line-height:1.7;color:var(--muted);text-align:center}.login-links a{color:var(--emerald-strong);font-weight:600;text-decoration:none}.login-links a:hover{text-decoration:underline}.login-legal{margin-top:10px;font-size:12px;color:var(--faint)}.login-legal a{color:var(--muted);font-weight:500}@media (max-width: 860px){.login-wrap{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr}.login-brand{padding:22px 24px 24px;gap:16px}.login-brand h2{font-size:24px;margin-bottom:0}.login-lead,.login-points,.login-brand-foot{display:none}.login-side{place-items:start center;padding:24px 16px 32px}}
