:root{font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,system-ui,Segoe UI,Roboto,sans-serif;color:#f5f8fc;background:#e9eff5;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;--ink: #07111f;--muted: #8d9aaa;--line: rgba(255, 255, 255, .12);--blue: #1688ff;--blue-deep: #0667d9;--surface: #101c2c;--success: #23b26d;--danger: #ff6174}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}button,select,input{font:inherit}button{border:0;cursor:pointer}button:disabled{cursor:default;opacity:.45}.app-shell{min-height:100dvh;display:grid;place-items:center;background:radial-gradient(circle at 20% 10%,rgba(40,132,255,.12),transparent 30rem),#e9eff5}.scanner-app{position:relative;width:min(100%,480px);height:100dvh;min-height:640px;overflow:hidden;display:flex;flex-direction:column;background:var(--ink);box-shadow:0 28px 80px #0d1b2d3d}.session-count small{color:var(--muted);font-size:11px}.session-count{min-height:42px;padding:0 11px;display:flex;align-items:baseline;gap:5px;border-radius:12px;color:#fff;background:#07111fc2;border:1px solid rgba(255,255,255,.18);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.session-count span{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}.toolbar{position:absolute;z-index:6;top:max(16px,env(safe-area-inset-top));left:16px;right:16px;display:flex;justify-content:space-between;align-items:center;pointer-events:none}.toolbar-meta{display:flex;align-items:center;gap:7px;pointer-events:auto}.game-select{height:42px;min-width:154px;padding:0 12px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;border:1px solid rgba(255,255,255,.18);border-radius:12px;color:#fff;background:#07111fc2;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);pointer-events:auto}.game-select>span{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em}.game-select select{min-width:0;appearance:none;border:0;outline:0;color:#fff;background:transparent;font-size:13px;font-weight:650}.demo-badge{padding:7px 10px;border-radius:999px;color:#a9d7ff;background:#1688ff2b;border:1px solid rgba(22,136,255,.35);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.camera-stage{position:relative;min-height:0;flex:1;overflow:hidden;background:radial-gradient(circle at 50% 44%,#172638,#091321 62%)}.camera-video,.camera-preview{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.detection-overlay{position:absolute;z-index:3;inset:0;width:100%;height:100%;pointer-events:none}.camera-preview{z-index:1}.camera-shade{position:absolute;z-index:2;inset:0;pointer-events:none;background:linear-gradient(to bottom,rgba(2,8,16,.5),transparent 24%,transparent 73%,rgba(2,8,16,.54))}.card-guide{position:absolute;z-index:3;top:50%;left:50%;width:min(69%,292px);aspect-ratio:63 / 88;transform:translate(-50%,-47%);border:1px solid rgba(255,255,255,.32);border-radius:18px;box-shadow:0 0 0 999px #02081040;pointer-events:none;transition:opacity .16s ease}.card-guide-muted{opacity:.16}.corner{position:absolute;width:30px;height:30px;border-color:#fff;border-style:solid}.corner-tl{top:-2px;left:-2px;border-width:3px 0 0 3px;border-radius:18px 0 0}.corner-tr{top:-2px;right:-2px;border-width:3px 3px 0 0;border-radius:0 18px 0 0}.corner-bl{bottom:-2px;left:-2px;border-width:0 0 3px 3px;border-radius:0 0 0 18px}.corner-br{bottom:-2px;right:-2px;border-width:0 3px 3px 0;border-radius:0 0 18px}.camera-empty,.camera-status,.scan-overlay{position:absolute;z-index:4;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.camera-empty{padding:96px 44px 48px;background:radial-gradient(circle at 50% 43%,rgba(19,55,91,.4),transparent 18rem)}.camera-icon{width:54px;height:54px;display:grid;place-items:center;border-radius:16px;color:#7cc5ff;background:#1688ff26;border:1px solid rgba(22,136,255,.3)}.camera-empty h1{margin:18px 0 6px;font-size:23px;line-height:1.15}.camera-empty p{max-width:300px;margin:0 0 22px;color:#aeb9c6;font-size:14px;line-height:1.5}.primary-button,.confirm-button{min-height:48px;padding:0 18px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:12px;color:#fff;background:linear-gradient(180deg,var(--blue),var(--blue-deep));box-shadow:0 8px 26px #0768d94d;font-weight:700}.camera-status{gap:12px;color:#d7e0ea;font-size:14px}.camera-status-error{color:#ffb7c0}.scan-overlay{z-index:8;gap:7px;background:#050d18c7;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.scan-overlay strong{margin-top:9px;font-size:17px}.scan-overlay span{color:#aeb9c6;font-size:13px}.scan-pulse{width:62px;height:62px;display:grid;place-items:center;border-radius:20px;color:#9dd7ff;background:#1688ff2e;animation:pulse 1.4s ease-in-out infinite}.switch-camera{position:absolute;z-index:4;right:18px;bottom:18px;width:46px;height:46px;display:grid;place-items:center;border-radius:14px;color:#fff;background:#07111fb3;border:1px solid rgba(255,255,255,.16);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.detection-pill{position:absolute;z-index:5;left:50%;bottom:21px;transform:translate(-50%);max-width:calc(100% - 150px);padding:9px 13px;border-radius:999px;color:#e9f1f9;background:#07111fc2;border:1px solid rgba(255,255,255,.15);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);font-size:12px;font-weight:650;line-height:1;white-space:nowrap}.detection-pill.locked{color:#fff;background:#1c995be0;border-color:#6beba966}.detection-pill.warning{color:#171108;background:#f5b13ded;border-color:#ffde9780}.success-toast{position:absolute;z-index:7;left:50%;bottom:18px;transform:translate(-50%);max-width:calc(100% - 120px);padding:10px 13px;display:flex;align-items:center;gap:7px;border-radius:999px;color:#fff;background:#169757e6;font-size:12px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.error-banner{z-index:7;margin:-1px 12px 0;padding:11px 12px;display:grid;grid-template-columns:auto 1fr auto;align-items:start;gap:9px;border-radius:12px;color:#ffd9dd;background:#3c1721;border:1px solid rgba(255,97,116,.3);font-size:12px;line-height:1.4}.error-banner button{padding:0;color:inherit;background:none}.capture-bar{min-height:104px;padding:14px 32px max(16px,env(safe-area-inset-bottom));display:grid;grid-template-columns:64px 1fr 64px;align-items:center;justify-items:center;gap:22px;background:#07111f;border-top:1px solid var(--line)}.utility-button{min-width:56px;min-height:54px;display:grid;place-items:center;gap:3px;color:#c6d0dc;background:transparent}.utility-button span{font-size:11px}.shutter{width:70px;height:70px;padding:5px;display:grid;place-items:center;border-radius:50%;background:transparent;border:3px solid white}.shutter span{width:54px;height:54px;border-radius:50%;background:#fff;transition:transform .12s ease,background .12s ease}.shutter:active span{transform:scale(.9);background:#b9dcff}.result-sheet{position:absolute;z-index:10;left:0;right:0;bottom:0;max-height:min(72dvh,660px);overflow-y:auto;padding:10px 18px max(18px,env(safe-area-inset-bottom));color:var(--ink);background:#f8fafc;border-radius:24px 24px 0 0;box-shadow:0 -24px 70px #00000057;animation:sheet-in .22s ease-out}.sheet-handle{width:42px;height:4px;margin:0 auto 14px;border-radius:999px;background:#ccd4dd}.result-heading{display:flex;align-items:flex-start;justify-content:space-between}.eyebrow,.section-label{color:#758191;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.result-heading h2{margin:3px 0 0;font-size:22px}.score{padding:8px 10px;border-radius:10px;color:#0767c8;background:#e3f1ff;font-size:14px;font-weight:750;font-variant-numeric:tabular-nums}.selected-card{margin-top:15px;padding:12px;display:grid;grid-template-columns:76px 1fr;gap:13px;border-radius:16px;background:#fff;border:1px solid #e1e7ee;box-shadow:0 1px 2px #07111f12}.card-image-wrap{width:76px;aspect-ratio:63 / 88;overflow:hidden;border-radius:9px;background:#eaf0f5}.card-image-wrap img{width:100%;height:100%;object-fit:cover}.image-fallback{width:100%;height:100%;display:grid;place-items:center;color:#8291a1;background:linear-gradient(150deg,#f3f6f9,#e5ebf1)}.card-copy{min-width:0;align-self:center}.card-copy h3{margin:0;font-size:18px;line-height:1.2}.card-copy p{margin:6px 0;color:#4f5d6d;font-size:13px}.card-copy>span{display:block;color:#7a8795;font-size:12px;line-height:1.35}.candidate-section{margin-top:16px}.candidate-list{margin-top:8px;display:grid;gap:7px}.candidate{width:100%;min-height:52px;padding:8px 10px;display:grid;grid-template-columns:1fr auto;gap:1px 10px;text-align:left;color:var(--ink);background:#fff;border:1px solid #e1e7ee;border-radius:11px}.candidate.active{border-color:#399af3;box-shadow:0 0 0 2px #1688ff1f}.candidate-name{font-size:13px;font-weight:700}.candidate>span:not(.candidate-name){color:#758191;font-size:11px}.candidate strong{grid-column:2;grid-row:1 / 3;align-self:center;color:#526170;font-size:12px;font-variant-numeric:tabular-nums}.result-actions{margin-top:17px;display:grid;grid-template-columns:.8fr 1.2fr;gap:9px}.secondary-button,.confirm-button{min-height:50px;border-radius:12px;font-size:13px}.secondary-button{color:#344354;background:#e9eef3;font-weight:700}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,to{transform:scale(.96);opacity:.82}50%{transform:scale(1.04);opacity:1}}@keyframes sheet-in{0%{transform:translateY(30px);opacity:0}to{transform:translateY(0);opacity:1}}@media(min-width:700px){.scanner-app{height:min(880px,calc(100dvh - 48px));border-radius:28px}.result-sheet{border-radius:24px 24px 28px 28px}}@media(max-height:700px){.toolbar{top:max(10px,env(safe-area-inset-top))}.camera-empty{padding-top:74px}.camera-empty p{margin-bottom:14px}.capture-bar{min-height:88px;padding-top:8px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.shutter{width:62px;height:62px}.shutter span{width:48px;height:48px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
