*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body{width:100%;height:100%;overflow:hidden;background:#000}#ar-container{position:relative;width:100vw;height:100dvh}#camera-feed{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}#overlay-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;background:transparent!important}#loading{position:absolute;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:24px clamp(24px,12vw,220px);text-align:center;background:radial-gradient(ellipse at 50% 44%,#0000004d,#000000bd);color:#fff;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:.8rem;font-weight:500;letter-spacing:.18em;text-transform:uppercase;pointer-events:none;-webkit-user-select:none;user-select:none}#loading:before{content:"";width:34px;height:34px;border:1.5px solid rgba(255,255,255,.18);border-top-color:#ffffffeb;border-radius:50%;animation:loading-spinner .9s linear infinite}#loading.is-error{gap:16px;font-size:1rem;font-weight:500;letter-spacing:.01em;text-transform:none;line-height:1.45;color:#ffffffeb;pointer-events:auto}#loading.is-error:before{display:none}.retry-btn{padding:.7rem 1.6rem;border:1px solid rgba(255,255,255,.3);border-radius:999px;background:#ffffff0f;color:#fff;font:inherit;font-size:.76rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;cursor:pointer;pointer-events:auto;transition:background .2s ease,border-color .2s ease}.retry-btn:hover{background:#ffffff24;border-color:#ffffff80}.retry-btn:focus-visible{outline:2px solid rgba(255,255,255,.7);outline-offset:3px}@keyframes loading-spinner{to{transform:rotate(360deg)}}:root{--scan-accent: #6ea8fe}.scan-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:55;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:26px;padding-bottom:6vh;pointer-events:none;background:radial-gradient(ellipse at 50% 42%,#0000 30%,#0000006b);animation:scan-fade-in .4s ease both}.scan-overlay[hidden]{display:none}.scan-stage{position:relative;width:264px;height:264px;display:flex;align-items:center;justify-content:center}.scan-progress{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;transform:rotate(-90deg);overflow:visible}.scan-progress-track{fill:none;stroke:#ffffff24;stroke-width:3}.scan-progress-bar{fill:none;stroke:var(--scan-accent);stroke-width:4;stroke-linecap:round;stroke-dasharray:502.65;stroke-dashoffset:502.65;filter:drop-shadow(0 0 6px rgba(110,168,254,.7));transition:stroke-dashoffset .25s ease,stroke .3s ease}.scan-frame{position:relative;width:176px;height:226px;border-radius:48% 48% 44% 44%;border:1.5px solid rgba(110,168,254,.45);box-shadow:inset 0 0 26px #6ea8fe2e;overflow:hidden}.scan-corner{position:absolute;width:22px;height:22px;border:2.5px solid var(--scan-accent);animation:scan-corner-pulse 1.4s ease-in-out infinite alternate}.scan-corner.tl{top:6px;left:6px;border-right:0;border-bottom:0;border-radius:8px 0 0}.scan-corner.tr{top:6px;right:6px;border-left:0;border-bottom:0;border-radius:0 8px 0 0}.scan-corner.bl{bottom:6px;left:6px;border-right:0;border-top:0;border-radius:0 0 0 8px}.scan-corner.br{bottom:6px;right:6px;border-left:0;border-top:0;border-radius:0 0 8px}.scan-line{position:absolute;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,var(--scan-accent),transparent);box-shadow:0 0 12px 2px #6ea8fea6;animation:scan-sweep 2.1s ease-in-out infinite alternate}.scan-mesh{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(110,168,254,.16) 1px,transparent 1px),linear-gradient(90deg,rgba(110,168,254,.16) 1px,transparent 1px);background-size:20px 20px;opacity:.5;animation:scan-mesh-pulse 2.1s ease-in-out infinite alternate}.scan-arrow{position:absolute;top:50%;transform:translateY(-50%);font-size:2.4rem;color:var(--scan-accent);opacity:0;text-shadow:0 0 14px rgba(110,168,254,.8);transition:opacity .25s ease}.scan-arrow-left{left:-2px}.scan-arrow-right{right:-2px}.scan-overlay[data-stage=yawLeft] .scan-arrow-left{opacity:1;animation:scan-nudge-left .8s ease-in-out infinite}.scan-overlay[data-stage=yawRight] .scan-arrow-right{opacity:1;animation:scan-nudge-right .8s ease-in-out infinite}.scan-check{position:absolute;display:flex;align-items:center;justify-content:center;width:64px;height:64px;border-radius:50%;background:#40c882eb;color:#fff;font-size:2rem;font-weight:700;opacity:0;transform:scale(.4)}.scan-overlay[data-stage=done] .scan-frame,.scan-overlay[data-stage=done] .scan-arrow{opacity:0}.scan-overlay[data-stage=done] .scan-progress-bar{stroke:#40c882}.scan-overlay[data-stage=done] .scan-check{animation:scan-check-pop .5s cubic-bezier(.34,1.56,.64,1) both}.scan-caption{padding:.6rem 1.3rem;border-radius:999px;background:#0c0c0ebd;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12);color:#fff;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:.98rem;font-weight:600;letter-spacing:.01em;text-align:center;max-width:80vw}@keyframes scan-fade-in{0%{opacity:0}to{opacity:1}}@keyframes scan-sweep{0%{top:8%}to{top:92%}}@keyframes scan-mesh-pulse{0%{opacity:.28}to{opacity:.6}}@keyframes scan-corner-pulse{0%{opacity:.35;box-shadow:0 0 #6ea8fe00}to{opacity:1;box-shadow:0 0 10px #6ea8fe99}}@keyframes scan-nudge-left{0%,to{transform:translateY(-50%) translate(0)}50%{transform:translateY(-50%) translate(-7px)}}@keyframes scan-nudge-right{0%,to{transform:translateY(-50%) translate(0)}50%{transform:translateY(-50%) translate(7px)}}@keyframes scan-check-pop{0%{opacity:0;transform:scale(.4)}to{opacity:1;transform:scale(1)}}@media(prefers-reduced-motion:reduce){.scan-line,.scan-mesh,.scan-corner,.scan-arrow{animation:none!important}#loading:before{animation-duration:1.6s}}
