:root{--bg:#0A1521;--surface:#101E2E;--surface2:#162032;--surface3:#1B2A3E;--line:#1E3050;--line-soft:#17273C;--brand:#00549F;--brand-lift:#1B77D1;--amber:#F59E0B;--pass:#22C55E;--pass-dim:#123B22;--fail:#EF4444;--fail-dim:#3D1616;--pending:#64748B;--text:#F1F5F9;--dim:#93A6BD;--faint:#5B7392;--mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;--ui:"Archivo",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px)}*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}html,body{height:100%;overscroll-behavior-y:none}body{background:#060e17;color:var(--text);font-family:var(--ui);font-size:15px;line-height:1.45;-webkit-font-smoothing:antialiased;display:flex;justify-content:center}button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}input,textarea{font:inherit;color:inherit;-webkit-appearance:none}:focus-visible{outline:2px solid var(--brand-lift);outline-offset:2px;border-radius:6px}.app{width:100%;max-width:460px;height:100dvh;background:var(--bg);display:flex;flex-direction:column;position:relative;overflow:hidden}@media (min-width:520px){.app{border-left:1px solid var(--line);border-right:1px solid var(--line)}}.hdr{flex:0 0 auto;padding:calc(var(--safe-t) + 10px) 14px 10px;background:var(--surface);border-bottom:1px solid var(--line)}.hdr-top{display:flex;align-items:center;gap:11px}.logo{display:block;flex:0 0 auto;color:var(--text)}.hdr-logo{width:62px;height:auto}.hdr-txt{flex:1;min-width:0}.hdr-file{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:5px}.hdr-file .caret{color:var(--faint);font-size:9px}.hdr-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--faint);margin-top:1px}.dot{width:6px;height:6px;border-radius:50%;background:var(--pass);flex:0 0 auto}.hdr-sub.busy .dot{background:var(--amber);animation:pulse 1s infinite}.hdr-sub.off .dot{background:var(--fail)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.25}}.avatar{width:32px;height:32px;border-radius:50%;background:var(--brand);display:grid;place-items:center;font-size:12px;font-weight:700;flex:0 0 auto}.modes{display:flex;gap:3px;background:var(--bg);padding:3px;border-radius:10px;margin-top:11px;border:1px solid var(--line-soft)}.mode{flex:1;padding:9px 4px;border-radius:7px;font-size:13px;font-weight:700;color:var(--dim);transition:background .14s,color .14s}.mode[aria-selected=true]{background:var(--brand);color:#fff}.screen{flex:1;min-height:0;display:none;flex-direction:column}.screen.on{display:flex}.cam{position:relative;flex:1;min-height:0;background:#04090f;overflow:hidden;display:flex;align-items:center;justify-content:center}.cam video{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover}.reticle{position:relative;z-index:2;width:78%;max-width:300px;aspect-ratio:1.7/1;pointer-events:none}.reticle span{position:absolute;width:30px;height:30px;border:3px solid var(--brand-lift);border-radius:3px}.reticle span:nth-child(1){top:0;left:0;border-right:none;border-bottom:none}.reticle span:nth-child(2){top:0;right:0;border-left:none;border-bottom:none}.reticle span:nth-child(3){bottom:0;left:0;border-right:none;border-top:none}.reticle span:nth-child(4){bottom:0;right:0;border-left:none;border-top:none}.laser{position:absolute;left:6px;right:6px;top:50%;height:2px;background:var(--fail);box-shadow:0 0 12px var(--fail);opacity:.85;animation:sweep 2.4s ease-in-out infinite}@keyframes sweep{0%,to{transform:translateY(-42px)}50%{transform:translateY(42px)}}.cam-hint{position:absolute;z-index:2;bottom:16px;left:16px;right:16px;text-align:center;font-size:13px;color:var(--dim);text-shadow:0 1px 6px #000}.cam-fallback{position:relative;z-index:2;padding:26px 24px;text-align:center;max-width:340px}.cam-fallback .ico{font-size:34px;margin-bottom:12px}.cam-fallback h3{font-size:16px;font-weight:700;margin-bottom:7px}.cam-fallback p{color:var(--dim);font-size:13.5px;line-height:1.6}.torch{position:absolute;z-index:3;top:14px;right:14px;width:42px;height:42px;border-radius:50%;background:#0a1521b8;border:1px solid var(--line);display:grid;place-items:center;font-size:17px}.torch.on{background:var(--amber);color:#0a1521}.scan-count{position:absolute;z-index:3;top:14px;left:14px;padding:6px 12px;border-radius:20px;background:#0a1521b8;border:1px solid var(--line);font-size:11.5px;color:var(--dim);font-family:var(--mono)}.scan-foot{flex:0 0 auto;padding:12px 16px calc(var(--safe-b) + 14px);border-top:1px solid var(--line);background:var(--surface)}.sim-row{display:flex;gap:8px;margin-bottom:9px}.sim{flex:1;padding:11px 8px;border-radius:10px;border:1px dashed var(--line);background:var(--surface2);font-size:12.5px;font-weight:600;color:var(--dim)}.sim:active{background:var(--surface3)}.manual{position:relative}.manual input{width:100%;padding:12px 13px 12px 38px;background:var(--surface2);border:1px solid var(--line);border-radius:11px;font-size:15px;font-family:var(--mono)}.manual input::placeholder{color:var(--faint);font-family:var(--ui)}.manual input:focus{outline:none;border-color:var(--brand-lift)}.manual .ico{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--faint);font-size:14px}.q-progress{flex:0 0 auto;padding:12px 16px 0}.q-bar{height:4px;border-radius:4px;background:var(--surface3);overflow:hidden}.q-bar i{display:block;height:100%;background:var(--brand-lift);transition:width .3s ease}.q-meta{display:flex;justify-content:space-between;align-items:baseline;margin-top:8px;font-size:11.5px;color:var(--faint)}.q-meta b{font-family:var(--mono);color:var(--dim);font-weight:700}.q-scroll{flex:1;min-height:0;overflow-y:auto;padding:14px 16px 8px;-webkit-overflow-scrolling:touch}.q-lotnum{font-family:var(--mono);font-size:30px;font-weight:700;letter-spacing:-.035em;line-height:1.1;word-break:break-all}.q-eyebrow{font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin-bottom:7px}.q-tags{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}.tag{display:inline-flex;align-items:baseline;gap:6px;padding:6px 11px;border-radius:8px;background:var(--surface2);border:1px solid var(--line);font-size:13px;font-weight:600}.tag s{text-decoration:none;font-size:10px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--faint)}.tag.big{font-family:var(--mono);font-size:15px}.facts{margin-top:16px;border:1px solid var(--line);border-radius:11px;overflow:hidden;background:var(--surface2)}.fact{display:flex;justify-content:space-between;gap:14px;align-items:baseline;padding:10px 13px;border-bottom:1px solid var(--line-soft)}.fact:last-child{border-bottom:none}.fact dt{font-size:13px;color:var(--faint);flex:0 0 auto}.fact dd{font-size:13.5px;font-weight:500;text-align:right;word-break:break-word}.fact dd.mono{font-family:var(--mono);font-size:13px}.fact.auto dd{color:var(--amber)}.fact.hit dd{color:var(--brand-lift);font-weight:700}.autotag{font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);display:block;margin-top:1px}.field-label{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin:18px 0 8px}textarea{width:100%;min-height:78px;resize:none;padding:12px 13px;border-radius:11px;background:var(--surface2);border:1px solid var(--line);font-size:15px;line-height:1.5}textarea::placeholder{color:var(--faint)}textarea:focus{outline:none;border-color:var(--brand-lift);background:var(--surface3)}.decide{flex:0 0 auto;padding:12px 16px calc(var(--safe-b) + 14px);border-top:1px solid var(--line);background:var(--surface);display:flex;gap:11px}.big{flex:1;min-height:66px;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-weight:800;font-size:19px;letter-spacing:.1em;color:#fff;transition:transform .09s,filter .12s}.big:active{transform:scale(.96);filter:brightness(1.14)}.big .sub{font-size:10px;font-weight:600;letter-spacing:.05em;opacity:.8}.big.pass{background:var(--pass)}.big.fail{background:var(--fail)}.skip{flex:0 0 62px;min-height:66px;border-radius:14px;border:1px solid var(--line);background:var(--surface2);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:10.5px;font-weight:700;color:var(--faint)}.skip:active{background:var(--surface3)}.skip i{font-style:normal;font-size:17px}.q-done{flex:1;display:grid;place-items:center;padding:40px 30px;text-align:center}.q-done .ico{font-size:38px;margin-bottom:14px}.q-done h3{font-size:20px;font-weight:700;margin-bottom:7px}.q-done p{color:var(--dim);font-size:14px;line-height:1.6}.q-done button{margin-top:18px;padding:11px 20px;border-radius:10px;background:var(--brand);font-weight:700;font-size:14px}.l-tools{flex:0 0 auto;padding:12px 14px 8px}.search{position:relative;margin-bottom:10px}.search input{width:100%;padding:11px 13px 11px 36px;background:var(--surface2);border:1px solid var(--line);border-radius:11px;font-size:15px}.search input::placeholder{color:var(--faint)}.search input:focus{outline:none;border-color:var(--brand-lift)}.search .ico{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--faint);font-size:14px}.chips{display:flex;gap:7px;overflow-x:auto;scrollbar-width:none}.chips::-webkit-scrollbar{display:none}.chip{flex:0 0 auto;display:flex;align-items:center;gap:6px;padding:7px 13px;border-radius:20px;font-size:13px;font-weight:600;background:var(--surface2);border:1px solid var(--line);color:var(--dim)}.chip .ct{font-family:var(--mono);font-size:11px;font-weight:700;color:var(--faint)}.chip[aria-selected=true]{background:var(--brand);border-color:var(--brand);color:#fff}.chip[aria-selected=true] .ct{color:#fffc}.l-scroll{flex:1;min-height:0;overflow-y:auto;padding:4px 14px calc(var(--safe-b) + 20px);-webkit-overflow-scrolling:touch}.card{background:var(--surface2);border:1px solid var(--line);border-left-width:4px;border-radius:12px;padding:13px 14px;margin-bottom:10px}.card.pass{border-left-color:var(--pass)}.card.fail{border-left-color:var(--fail)}.card.pending{border-left-color:var(--line)}.card-top{display:flex;align-items:center;justify-content:space-between;gap:10px}.card-lot{font-family:var(--mono);font-size:16px;font-weight:700;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.pill{display:inline-flex;align-items:center;gap:5px;padding:3px 9px 3px 7px;border-radius:20px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;flex:0 0 auto}.pill .b{width:6px;height:6px;border-radius:50%}.pill.pass{background:var(--pass-dim);color:#6ee7a0}.pill.pass .b{background:var(--pass)}.pill.fail{background:var(--fail-dim);color:#fca5a5}.pill.fail .b{background:var(--fail)}.pill.pending{background:var(--surface3);color:var(--dim)}.pill.pending .b{background:var(--pending)}.pill.dup{background:#f59e0b24;color:var(--amber);border:1px solid rgba(245,158,11,.4)}.card-meta{display:flex;gap:16px;margin-top:9px}.mi{display:flex;flex-direction:column;gap:1px}.mi s{text-decoration:none;font-size:9.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--faint)}.mi b{font-size:13.5px;font-weight:600;font-family:var(--mono)}.mi b.name{font-family:var(--ui);font-weight:500;color:var(--dim)}.card-note{margin-top:9px;font-size:12.5px;color:var(--amber);font-style:italic}.card-acts{display:flex;gap:8px;margin-top:12px}.act{flex:1;min-height:42px;border-radius:10px;font-weight:700;font-size:14px;border:1px solid var(--line);background:var(--surface3);color:var(--dim)}.act.p:active{background:var(--pass);border-color:var(--pass);color:#fff}.act.f:active{background:var(--fail);border-color:var(--fail);color:#fff}.act.open{flex:0 0 46px;font-size:16px}.wrow{display:flex;align-items:center;gap:7px;margin-top:11px;font-family:var(--mono);font-size:11.5px;min-height:42px}.wrow.saving{color:var(--amber)}.wrow.saved{color:var(--pass)}.wrow.queued{color:var(--dim)}.wrow.err{color:var(--fail)}.wrow .retry{margin-left:auto;padding:7px 13px;border-radius:9px;background:var(--fail);color:#fff;font-family:var(--ui);font-weight:700;font-size:12.5px}.spin{width:10px;height:10px;border-radius:50%;border:1.6px solid currentColor;border-top-color:transparent;animation:sp .7s linear infinite}@keyframes sp{to{transform:rotate(360deg)}}.empty{padding:60px 24px;text-align:center}.empty h3{font-size:17px;font-weight:700;margin-bottom:6px}.empty p{color:var(--dim);font-size:14px}.scrim{position:absolute;top:0;right:0;bottom:0;left:0;background:#03080eb8;opacity:0;pointer-events:none;transition:opacity .22s;z-index:40}.scrim.on{opacity:1;pointer-events:auto}.sheet{position:absolute;left:0;right:0;bottom:0;z-index:50;max-height:94%;display:flex;flex-direction:column;background:var(--surface);border-top:1px solid var(--line);border-radius:20px 20px 0 0;transform:translateY(101%);transition:transform .26s cubic-bezier(.32,.72,0,1)}.sheet.on{transform:translateY(0)}.grab{width:38px;height:4px;border-radius:4px;background:var(--surface3);margin:9px auto 4px;flex:0 0 auto}.sheet-hd{padding:8px 18px 13px;border-bottom:1px solid var(--line);flex:0 0 auto}.sheet-body{flex:1;min-height:0;overflow-y:auto;padding:16px 18px 4px;-webkit-overflow-scrolling:touch}.scan-banner{display:flex;align-items:center;gap:9px;padding:9px 12px;border-radius:10px;background:var(--pass-dim);border:1px solid var(--pass);font-size:12.5px;color:#6ee7a0;margin-bottom:14px}.scan-banner.warn{background:var(--fail-dim);border-color:var(--fail);color:#fca5a5}.scan-banner code{font-family:var(--mono);font-weight:700}.offline{flex:0 0 auto;display:none;align-items:center;gap:9px;padding:9px 14px;background:var(--fail-dim);border-bottom:1px solid var(--fail);font-size:12.5px;color:#fca5a5}.offline.on{display:flex}.toast{position:absolute;left:14px;right:14px;bottom:calc(var(--safe-b) + 96px);z-index:60;display:flex;align-items:center;gap:12px;padding:12px 12px 12px 15px;border-radius:13px;background:var(--surface3);border:1px solid var(--line);box-shadow:0 14px 36px #0009;opacity:0;transform:translateY(12px);pointer-events:none;transition:opacity .18s,transform .18s}.toast.on{opacity:1;transform:translateY(0);pointer-events:auto}.toast .m{flex:1;font-size:13.5px;min-width:0}.toast .m b{font-family:var(--mono);font-weight:700}.toast .u{padding:8px 14px;border-radius:9px;background:var(--brand);font-size:13px;font-weight:700;flex:0 0 auto}@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}.login{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:40px 28px;text-align:center}.login-logo{width:168px;height:auto;margin-bottom:4px}.login h1{font-size:21px;font-weight:700;letter-spacing:-.01em}.login p{color:var(--dim);font-size:14.5px;max-width:30ch;line-height:1.6}.login button{width:100%;max-width:300px;min-height:52px;border-radius:12px;background:var(--brand);font-size:15.5px;font-weight:700}.login button:active{background:var(--brand-lift)}.boot{flex:1;display:grid;place-items:center;padding:40px 28px;text-align:center}.boot p{color:var(--dim);font-size:14px;margin-top:12px}.bigspin{width:26px;height:26px;border-radius:50%;border:2.5px solid var(--surface3);border-top-color:var(--brand-lift);animation:sp .8s linear infinite;margin:0 auto}.fail-box{flex:1;display:flex;flex-direction:column;justify-content:center;gap:14px;padding:34px 24px;text-align:left}.fail-box h2{font-size:17px;font-weight:700}.fail-box p{color:var(--dim);font-size:14px;line-height:1.6}.fail-box code{font-family:var(--mono);font-size:12px;background:var(--surface2);border:1px solid var(--line);padding:9px 11px;border-radius:8px;display:block;word-break:break-word;color:var(--amber)}.fail-box button{min-height:46px;border-radius:10px;background:var(--brand);font-weight:700;font-size:14.5px}.rolls{display:flex;gap:8px;margin-top:10px}.roll{flex:1;min-height:44px;border-radius:10px;border:1px solid var(--line);background:var(--surface2);display:flex;align-items:center;justify-content:center;gap:8px;font-size:13.5px;font-weight:600;color:var(--dim)}.roll[aria-pressed=true]{border-color:var(--pass);color:#6ee7a0;background:var(--pass-dim)}.big:disabled{opacity:.4;filter:grayscale(.5)}.big:disabled:active{transform:none}
