:root{--bg:#0d1117;--surface:#161b22;--surface-raised:#21262d;--border:#30363d;--text:#e6edf3;--text-muted:#8b949e;--accent:#2f81f7;--success:#2ea043;--warning:#d29922;--danger:#f85149;--radius:10px;--tap-target:44px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:16px;line-height:1.4}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);overscroll-behavior:none;-webkit-text-size-adjust:100%;margin:0}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.page{height:100dvh;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);flex-direction:column;display:flex}.page--gate{justify-content:center;padding:24px}.header{border-bottom:1px solid var(--border);background:var(--surface);justify-content:space-between;align-items:center;gap:12px;padding:8px 12px;display:flex}.header__model{flex-direction:column;min-width:0;display:flex}.header__label{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-size:11px}.header__value{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.header__status{flex-wrap:wrap;justify-content:flex-end;gap:6px;margin-left:auto;margin-right:4px;display:flex}.pill{white-space:nowrap;border:1px solid;border-radius:999px;padding:3px 8px;font-size:11px;font-weight:600}.pill--offline{color:var(--warning)}.pill--pending{color:var(--accent)}.pill--parked{color:var(--danger)}.gate{flex-direction:column;gap:12px;width:100%;max-width:420px;margin:0 auto;display:flex}.gate__title{margin:0;font-size:22px}.gate__hint,.gate__label{color:var(--text-muted);margin:0;font-size:14px}.gate__input{min-height:var(--tap-target);color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;font-size:18px}.gate__input:focus{outline:2px solid var(--accent);outline-offset:1px}.gate__advanced{color:var(--text-muted);margin-top:8px;font-size:13px}.gate__advanced summary{min-height:var(--tap-target);cursor:pointer;align-items:center;display:flex}.gate__checkbox{align-items:flex-start;gap:8px;padding:8px 0;display:flex}.button{min-height:var(--tap-target);color:var(--text);background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;padding:0 16px;font-size:15px;font-weight:500}.button:active{transform:translateY(1px)}.button:disabled{opacity:.5}.button--primary{background:var(--accent);border-color:var(--accent);color:#fff}.button--block{width:100%}.button--small{min-height:36px;padding:0 12px;font-size:13px}.button--torch.is-on{background:var(--warning);border-color:var(--warning);color:#1a1a1a}.notice{justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;font-size:14px;display:flex}.notice--warning{color:#f0c674;background:#d299222e}.notice--error{color:#ffb3ae;background:#f851492e}.notice__dismiss{min-height:36px;color:inherit;border-radius:var(--radius);background:0 0;border:1px solid;flex:none;padding:0 10px;font-size:13px}.scanner{flex-direction:column;flex:auto;min-height:0;display:flex}.scanner__viewport{background:#000;flex:auto;min-height:0;position:relative;overflow:hidden}.scanner__video{object-fit:cover;width:100%;height:100%;display:block}.scanner__overlay{pointer-events:none;place-items:center;display:grid;position:absolute;inset:0}.scanner__reticle{border:2px solid #ffffffd9;border-radius:8px;box-shadow:0 0 0 100vmax #00000059}.scanner__status{text-align:center;color:var(--text-muted);font-size:14px;position:absolute;inset:auto 0 12px}.scanner__controls{background:var(--surface);border-top:1px solid var(--border);align-items:center;gap:10px;padding:10px 12px;display:flex}.scanner__camera-picker select{min-height:var(--tap-target);max-width:45vw;color:var(--text);background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius);padding:0 8px;font-size:14px}.scanner__engine{color:var(--text-muted);margin-left:auto;font-size:12px}.camera-error{flex-direction:column;flex:auto;gap:12px;padding:20px;display:flex;overflow-y:auto}.camera-error__title{margin:0;font-size:20px}.camera-error__message{color:var(--danger);margin:0}.camera-error__hint,.camera-error__steps{color:var(--text-muted);margin:0;font-size:14px}.camera-error__steps{gap:6px;padding-left:20px;display:grid}.log-section{border-top:1px solid var(--border);background:var(--surface);flex-direction:column;flex:0 38%;min-height:120px;display:flex}.log-section__title{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);justify-content:space-between;align-items:baseline;gap:8px;margin:0;padding:8px 12px;font-size:13px;font-weight:600;display:flex}.log-section__counts{text-transform:none;letter-spacing:0;font-weight:400}.log{-webkit-overflow-scrolling:touch;flex:auto;margin:0;padding:0;list-style:none;overflow-y:auto}.log__empty{color:var(--text-muted);margin:0;padding:16px 12px;font-size:14px}.log__row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;display:flex}.log__row--parked{background:#f851491a}.log__main{min-width:0}.log__barcode{overflow-wrap:anywhere;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:15px;display:block}.log__meta{color:var(--text-muted);font-size:12px}.log__side{flex:none;align-items:center;gap:8px;display:flex}.log__error{max-width:40vw;color:var(--danger);font-size:12px}.badge{white-space:nowrap;border:1px solid var(--border);color:var(--text-muted);border-radius:999px;padding:2px 8px;font-size:11px;font-weight:600}.badge--queued,.badge--sending{color:var(--text-muted)}.badge--synced{color:var(--success);border-color:var(--success)}.badge--parked{color:var(--danger);border-color:var(--danger)}.flash{z-index:10;pointer-events:none;animation:.22s ease-out forwards flash-fade;position:fixed;inset:0}.flash--success{background:var(--success)}.flash--error{background:var(--danger)}@keyframes flash-fade{0%{opacity:.75}to{opacity:0}}@media (prefers-reduced-motion:reduce){.flash{animation-duration:1ms}.button:active{transform:none}}
