:root{--ni-pine-green: #00704b;--ni-jade: #00835f;--ni-ocean-blue: #1564ec;--ni-orange: #ed9100;--ni-yellow: #dcf000;--ni-green: #00e650;--ni-blue: #00d7ff;--ni-crimson: #e60017;--ni-error: #dd3636;--ni-success: #3c7567;--ni-black: #231f20;--ni-gray-95: #1a1a1a;--ni-gray-80: #4f4c4d;--ni-gray-75: #6d6e71;--ni-gray-50: #d1d3d4;--ni-gray-40: #e0e0e0;--ni-gray-30: #eeeeee;--ni-gray-25: #f1f2f2;--ni-gray-20: #f6f6f6;--ni-gray-15: #f8f8f8;--ni-gray-10: #fafafa;--ni-white: #ffffff;--ni-xs: 4px;--ni-sm: 8px;--ni-md: 12px;--ni-lg: 16px;--ni-xl: 24px;--ni-2xl: 32px;--ni-3xl: 40px;--ni-4xl: 48px;--ni-font: "Graphik", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--ni-font-serif: "GTAlpina", "DM Serif Display", Georgia, "Times New Roman", serif;--ni-radius: 12px;--ni-radius-pill: 100px;--ni-focus-shadow: 0 0 0 3px rgb(21 100 236 / 25%)}@font-face{font-family:Graphik;font-style:normal;font-weight:400;font-display:swap;src:local("Graphik Regular"),local("Graphik-Regular")}@font-face{font-family:Graphik;font-style:normal;font-weight:600;font-display:swap;src:local("Graphik Semibold"),local("Graphik-Semibold")}@font-face{font-family:GTAlpina;font-style:normal;font-weight:400;font-display:swap;src:local("GT Alpina"),local("GTAlpina-Regular"),local("GT-Alpina-Standard-Regular")}*{box-sizing:border-box}body{margin:0;font-family:var(--ni-font);font-size:18px;background:var(--ni-white);color:var(--ni-black);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}html,body{height:100%;overflow-x:hidden}.scan-card{display:flex;flex-direction:column;align-items:center;gap:16px;width:min(340px,90vw)}.scan-photo-wrap{position:relative;width:100%;border-radius:14px;overflow:hidden;background:#000;aspect-ratio:4/3}.scan-photo{width:100%;height:100%;object-fit:cover;display:block;filter:brightness(.45) saturate(.5)}.scan-grid{position:absolute;inset:0;background-image:radial-gradient(circle,rgba(0,215,255,.12) 1px,transparent 1px);background-size:20px 20px;opacity:.6;pointer-events:none}.scan-reticle{position:absolute;border:2px solid rgba(0,215,255,.9);pointer-events:none;transform:translate(-50%,-50%)}.scan-flash{position:absolute;inset:0;background:#fff;opacity:0;pointer-events:none}.ret-corner{position:absolute;width:14px;height:14px}.ret-corner.ret-tl{top:-1px;left:-1px;border-top:2.5px solid #00d7ff;border-left:2.5px solid #00d7ff}.ret-corner.ret-tr{top:-1px;right:-1px;border-top:2.5px solid #00d7ff;border-right:2.5px solid #00d7ff}.ret-corner.ret-bl{bottom:-1px;left:-1px;border-bottom:2.5px solid #00d7ff;border-left:2.5px solid #00d7ff}.ret-corner.ret-br{bottom:-1px;right:-1px;border-bottom:2.5px solid #00d7ff;border-right:2.5px solid #00d7ff}.ret-cross-h{position:absolute;top:50%;left:-999px;right:-999px;height:1px;background:linear-gradient(to right,transparent 0%,rgba(0,215,255,.15) 20%,rgba(0,215,255,.35) 50%,rgba(0,215,255,.15) 80%,transparent 100%);transform:translateY(-50%)}.ret-cross-v{position:absolute;left:50%;top:-999px;bottom:-999px;width:1px;background:linear-gradient(to bottom,transparent 0%,rgba(0,215,255,.15) 20%,rgba(0,215,255,.35) 50%,rgba(0,215,255,.15) 80%,transparent 100%);transform:translate(-50%)}.ret-glow{position:absolute;inset:-60px;background:radial-gradient(ellipse at center,rgba(0,215,255,.28) 0%,rgba(0,215,255,.06) 45%,transparent 70%);animation:glowPulse .7s ease-in-out infinite;pointer-events:none}@keyframes glowPulse{0%,to{opacity:.45;transform:scale(.88)}50%{opacity:1;transform:scale(1.12)}}.scan-badge{position:absolute;top:10px;left:50%;transform:translate(-50%);font-size:9px;font-weight:700;letter-spacing:2.5px;color:#00d7ffd9;font-family:monospace;text-shadow:0 0 8px rgba(0,215,255,.7);animation:badgePulse 2s ease-in-out infinite;pointer-events:none;white-space:nowrap}@keyframes badgePulse{0%,to{opacity:.9}50%{opacity:.45}}.scan-status{display:flex;align-items:center;gap:10px}.scan-pulse-dots{display:flex;gap:5px}.scan-pulse-dots span{width:6px;height:6px;border-radius:50%;background:#00d7ff;animation:dotBounce 1.2s ease-in-out infinite}.scan-pulse-dots span:nth-child(2){animation-delay:.2s}.scan-pulse-dots span:nth-child(3){animation-delay:.4s}@keyframes dotBounce{0%,80%,to{transform:scale(.6);opacity:.4}40%{transform:scale(1);opacity:1}}.scan-status-text{font-size:13px;font-weight:600;color:#ffffffd9;letter-spacing:.3px}
