:root{color-scheme:dark;--bg: #0f1420;--panel: #1a2233;--panel-2: #222c42;--line: #2a3550;--text: #edf1f7;--muted: #8fa0bc;--accent: #3b82f6;--ok: #22c55e;--warn: #f59e0b;--danger: #ef4444}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font:18px/1.35 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;overscroll-behavior:none;-webkit-user-select:none;user-select:none}button{font:inherit;color:inherit}input{font:inherit;color:var(--text);background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;width:100%;min-height:56px}input:focus{outline:2px solid var(--accent);border-color:var(--accent)}.screen{display:flex;flex-direction:column;height:100%}.screen-header{display:flex;align-items:center;gap:12px;padding:10px 12px;border-bottom:1px solid var(--line);background:var(--panel);min-height:60px}.screen-title{font-size:20px;font-weight:700;flex:1}.screen-body{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:12px}.btn{min-height:56px;padding:12px 18px;border-radius:14px;border:1px solid var(--line);background:var(--panel-2);font-size:19px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:10px}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.45}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn-ghost{background:transparent}.btn-back{min-width:56px;font-size:24px}.btn-block{width:100%}.tiles{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.tile{position:relative;min-height:108px;border-radius:16px;background:var(--panel);border:1px solid var(--line);display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;padding:14px;cursor:pointer;text-align:left}.tile:active{transform:scale(.98)}.tile-emoji{font-size:30px}.tile-label{font-size:18px;font-weight:700}.tile-badge{position:absolute;top:10px;right:10px;background:var(--accent);color:#fff;border-radius:999px;min-width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:700;padding:0 8px}.banner-offline{background:var(--danger);color:#fff;text-align:center;padding:10px 14px;font-weight:700}.scan-toast{position:fixed;left:12px;right:12px;bottom:18px;z-index:60;background:var(--danger);color:#fff;border-radius:14px;padding:14px 16px;font-weight:700;text-align:center}.numpad{display:flex;flex-direction:column;gap:10px}.numpad-value{background:var(--panel);border:1px solid var(--line);border-radius:14px;font-size:34px;font-weight:800;text-align:center;padding:12px;min-height:68px;letter-spacing:2px}.numpad-quick{display:grid;grid-template-columns:1fr 1fr 1.4fr;gap:10px}.numpad-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.numpad-grid .btn{font-size:24px}.scan-row{display:flex;align-items:center;gap:10px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px}.scan-chip{font-size:14px;font-weight:700;border-radius:999px;padding:4px 10px}.scan-chip.location{background:#14532d;color:#86efac}.scan-chip.pallet{background:#1e3a8a;color:#93c5fd}.scan-chip.barcode{background:#4a3305;color:#fcd34d}.scan-code{font-size:19px;font-weight:700;flex:1;word-break:break-all}.scan-time{color:var(--muted);font-size:15px}.camera-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;background:#000;display:flex;flex-direction:column}.camera-video{flex:1;object-fit:cover;width:100%}.camera-close{position:absolute;left:16px;right:16px;bottom:20px}.camera-error{position:absolute;top:40%;left:16px;right:16px;text-align:center;color:#fff;font-weight:700}.login-wrap{max-width:420px;margin:0 auto;width:100%;padding-top:8vh}.login-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px}.user-list{display:flex;flex-direction:column;gap:10px}.muted{color:var(--muted)}.error-text{color:var(--danger);font-weight:700}.row{display:flex;gap:10px;align-items:center}.spacer{flex:1}
