:root{--bg: #ffffff;--bg-soft: #f5f6fa;--ink: #14161f;--ink-soft: #3c4152;--muted: #6b7186;--line: #e7e9f2;--line-strong: #d3d7e5;--accent: #2fcbb0;--accent-ink: #0ea08d;--accent-wash: #e5faf5;--on-accent: #ffffff;--danger: #e23d5c;--shadow-sm: 0 1px 2px rgba(20, 22, 31, .06), 0 2px 8px rgba(20, 22, 31, .05);--shadow-md: 0 6px 24px rgba(20, 22, 31, .12);--radius: 14px;color-scheme:light;--aurora: linear-gradient(110deg, #2fcbb0, #4d86ff 28%, #b25bff 55%, #ff5fb0 78%, #ffbf3d);--aurora-btn: linear-gradient(110deg, #2fcbb0, #4d86ff 35%, #b25bff 70%, #ff5fb0);--aurora-conic: conic-gradient(from 210deg at 50% 50%, #34d9bd, #4d86ff, #b25bff, #ff5fb0, #ffbf3d, #34d9bd);--spark: #ffbf3d;--glow-aurora: 0 8px 26px rgba(77, 134, 255, .32), 0 2px 10px rgba(255, 95, 176, .22)}*{box-sizing:border-box}html,body{margin:0;padding:0}[hidden]{display:none!important}body.viewer-body{overflow:hidden;height:100dvh;background:var(--bg-soft);color:var(--ink);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.55;-webkit-font-smoothing:antialiased;touch-action:manipulation;-webkit-user-select:none;user-select:none}.error-diag,#error-message{-webkit-user-select:text;user-select:text}h1,h2{line-height:1.1;margin:0;letter-spacing:-.02em;font-weight:800}#ar-container{position:fixed;inset:0;background:#000}#camera-feed{position:absolute}.overlay{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;background:radial-gradient(560px 380px at 18% 8%,rgba(77,134,255,.12),transparent 60%),radial-gradient(640px 420px at 85% 92%,rgba(255,95,176,.1),transparent 60%),radial-gradient(480px 320px at 78% 18%,rgba(52,217,189,.1),transparent 60%),var(--bg-soft);z-index:10}.overlay:after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.1;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E")}.overlay.transparent{background:none;pointer-events:none}.overlay.transparent:after{content:none}.start-screen{display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;max-width:340px}.art-frame{position:relative;display:block;border-radius:12px;background:#fff;padding:8px;box-shadow:var(--shadow-md)}.art-frame:not(.loaded){aspect-ratio:3 / 4}.art-frame:not(.loaded):before{content:"";position:absolute;inset:8px;border-radius:7px;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.8) 50%,transparent 70%) #e8eaf1;background-size:220% 100%;animation:art-shimmer 1.5s ease-in-out infinite}.art-frame.failed:before{animation:none}.art-frame img{display:block;width:100%;object-fit:contain;border-radius:6px;opacity:0;transition:opacity .4s ease}.art-frame.loaded:before{display:none}.art-frame.loaded img{opacity:1}@keyframes art-shimmer{0%{background-position:210% 0}to{background-position:-110% 0}}#thumb-frame{width:min(56vw,220px);rotate:-2deg;margin-bottom:6px}#thumb-frame img{max-height:38vh}.start-screen h1{font-size:1.5rem;overflow-wrap:anywhere}.start-screen .sub{margin:0;color:var(--muted);font-size:.95rem;text-wrap:balance}.start-btn{margin-top:14px;width:112px;height:112px;border-radius:50%;border:none;background:var(--aurora-conic);filter:saturate(1.08);color:var(--on-accent);font:inherit;font-size:1.15rem;font-weight:800;text-shadow:0 1px 6px rgba(20,22,31,.35);cursor:pointer;box-shadow:0 0 0 8px #4d86ff1a,0 14px 44px #4d86ff61;transition:transform .14s ease,opacity .14s ease;animation:start-ring 2.4s ease-out infinite}.start-btn:hover{transform:scale(1.04)}.start-btn:active{transform:scale(.98)}.start-btn:disabled{opacity:.55;cursor:progress;animation:none;transform:none}@keyframes start-ring{0%{box-shadow:0 0 0 8px #4d86ff1a,0 14px 44px #4d86ff61,0 0 #b25bff4d}70%{box-shadow:0 0 0 8px #4d86ff1a,0 14px 44px #4d86ff61,0 0 0 24px #b25bff00}to{box-shadow:0 0 0 8px #4d86ff1a,0 14px 44px #4d86ff61,0 0 #b25bff00}}.handoff{display:flex;align-items:center;gap:30px;margin:10px 0 4px}#handoff-frame{width:min(34vw,300px);flex:none}#handoff-frame img{max-height:52vh}.handoff-qr{display:flex;flex-direction:column;align-items:center;gap:12px}.handoff-qr .qr-card{background:#fff;padding:10px;border-radius:14px;border:1px solid var(--line);box-shadow:var(--shadow-sm);display:grid;place-items:center}.handoff-qr canvas{display:block}.handoff-qr p{margin:0;color:var(--muted);font-size:.88rem;line-height:1.5;text-align:center}.start-screen:has(.handoff:not([hidden])){max-width:640px}.start-status{min-height:1.2em;margin:2px 0 0;color:var(--muted);font-size:.9rem}.error-diag{margin:14px 0 0;max-width:340px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.7rem;line-height:1.5;color:var(--muted);word-break:break-word;opacity:.8}.powered-by{position:absolute;bottom:calc(22px + env(safe-area-inset-bottom));color:var(--muted);font-size:.85rem;text-decoration:none}.powered-by strong{color:var(--ink);font-weight:750}.powered-by .tint{background:var(--aurora);-webkit-background-clip:text;background-clip:text;color:transparent}.powered-by .pb-mark{display:inline-block;vertical-align:-3px;margin-right:2px}.aurora-badge{position:relative;display:inline-block;padding:.04em .16em;margin-right:.14em;line-height:1.08;border-radius:.34em}.aurora-badge:before{content:"";position:absolute;inset:0;border-radius:inherit;padding:.08em;background:var(--aurora);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask-composite:exclude;pointer-events:none}.perm-steps{list-style:none;margin:10px 0 4px;padding:0;display:flex;flex-direction:column;gap:12px;text-align:left}.perm-steps li{display:flex;align-items:center;gap:12px;font-size:.95rem;color:var(--ink-soft)}.perm-steps li span{flex:none;width:26px;height:26px;border-radius:50%;background:var(--ink);color:#fff;font-size:.8rem;font-weight:700;display:grid;place-items:center}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;border-radius:10px;border:1px solid var(--line-strong);background:var(--bg);color:var(--ink);font:inherit;font-size:.95rem;font-weight:650;cursor:pointer;text-decoration:none;transition:transform .12s ease,background .12s ease,box-shadow .12s ease;white-space:nowrap}.btn:hover{transform:translateY(-1px);box-shadow:var(--shadow-sm)}.btn.primary{background:var(--aurora-btn);background-origin:border-box;color:var(--on-accent);border-color:transparent;box-shadow:var(--glow-aurora)}.btn.primary:hover{filter:saturate(1.18) brightness(1.05)}.btn.big{padding:14px 28px;font-size:1.05rem}.hud-btn{position:fixed;top:calc(14px + env(safe-area-inset-top));width:46px;height:46px;border-radius:50%;border:none;background:#ffffffeb;color:var(--ink);font-size:1.15rem;display:flex;align-items:center;justify-content:center;text-decoration:none;cursor:pointer;pointer-events:auto;box-shadow:var(--shadow-md);backdrop-filter:blur(4px)}.hud-btn.back{left:14px}.hud-btn.sound{right:14px}.hud-btn.tune{right:14px;top:calc(72px + env(safe-area-inset-top))}.stats-pill{position:fixed;top:calc(14px + env(safe-area-inset-top));left:50%;transform:translate(-50%);margin:0;background:#ffffffe6;color:var(--ink-soft);border-radius:999px;padding:6px 14px;font-size:.75rem;font-variant-numeric:tabular-nums;white-space:nowrap;box-shadow:var(--shadow-sm);backdrop-filter:blur(4px)}@media (max-width: 560px){.stats-pill{top:calc(72px + env(safe-area-inset-top));max-width:calc(100vw - 24px);overflow:hidden;text-overflow:ellipsis}}.pulse-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--accent);box-shadow:0 0 #0bcabb99;animation:pulse 1.6s ease-out infinite}@keyframes pulse{0%{box-shadow:0 0 #0bcabb8c}70%{box-shadow:0 0 0 10px #0bcabb00}to{box-shadow:0 0 #0bcabb00}}.drawer{position:fixed;left:50%;bottom:0;transform:translate(-50%);width:min(100%,480px);background:var(--bg);border-radius:18px 18px 0 0;box-shadow:0 -8px 30px #14161d2e;pointer-events:auto;transition:transform .26s ease;z-index:12}.drawer.collapsed{transform:translate(-50%) translateY(calc(100% - 32px))}.drawer-handle{display:grid;place-items:center;width:100%;height:32px;border:none;background:none;cursor:pointer;padding:0}.drawer-handle span{width:44px;height:5px;border-radius:999px;background:var(--line-strong)}.drawer-body{display:flex;align-items:center;gap:14px;padding:0 18px calc(16px + env(safe-area-inset-bottom))}#drawer-thumb{width:62px;max-height:84px;object-fit:contain;border-radius:8px;border:1px solid var(--line);background:#fff;cursor:zoom-in}.card-zoom{position:fixed;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:24px;background:#0a0c14d1;backdrop-filter:blur(6px);cursor:zoom-out;animation:card-zoom-in .16s ease}.card-zoom img{max-width:92vw;max-height:82vh;border-radius:12px;background:#fff;padding:8px;box-shadow:0 24px 64px #0000008c}.card-zoom-hint{position:absolute;left:0;right:0;bottom:calc(22px + env(safe-area-inset-bottom));text-align:center;color:#ffffffd1;font-size:.85rem;pointer-events:none}@keyframes card-zoom-in{0%{opacity:0}to{opacity:1}}.drawer-text{min-width:0}.drawer-text strong{display:flex;align-items:center;gap:8px;font-size:.95rem}.drawer-text span#drawer-name{display:block;color:var(--muted);font-size:.85rem;margin-top:2px;overflow-wrap:anywhere}.scan-reticle{position:fixed;top:45%;left:50%;transform:translate(-50%,-50%);width:min(70vw,320px);aspect-ratio:5 / 7;pointer-events:none;overflow:hidden;border-radius:16px;transition:opacity .24s ease}.scan-reticle span{position:absolute;width:34px;height:34px;border:3px solid rgba(255,255,255,.92)}.scan-reticle span:nth-child(1){top:0;left:0;border-right:0;border-bottom:0;border-top-left-radius:14px}.scan-reticle span:nth-child(2){top:0;right:0;border-left:0;border-bottom:0;border-top-right-radius:14px}.scan-reticle span:nth-child(3){bottom:0;right:0;border-left:0;border-top:0;border-bottom-right-radius:14px}.scan-reticle span:nth-child(4){bottom:0;left:0;border-right:0;border-top:0;border-bottom-left-radius:14px}.scan-line{position:absolute;left:6%;right:6%;height:2px;background:linear-gradient(90deg,transparent,#34d9bd 25%,#4d86ff 50%,#ff5fb0 75%,transparent);filter:drop-shadow(0 0 6px rgba(77,134,255,.8));animation:scan-sweep 2.4s cubic-bezier(.5,0,.5,1) infinite}@keyframes scan-sweep{0%{top:8%;opacity:0}15%{opacity:1}85%{opacity:1}to{top:92%;opacity:0}}.found-toast{position:fixed;top:45%;left:50%;transform:translate(-50%,-50%) scale(.9);display:flex;align-items:center;gap:8px;padding:10px 20px;border-radius:999px;background:#14161dd1;color:#fff;font-weight:700;font-size:1rem;box-shadow:var(--shadow-md);backdrop-filter:blur(6px);opacity:0;pointer-events:none;z-index:14;transition:opacity .24s ease,transform .26s cubic-bezier(.2,.9,.3,1.25)}.found-toast.show{opacity:1;transform:translate(-50%,-50%) scale(1)}.found-toast .pb-mark{color:var(--spark);text-shadow:0 0 10px rgba(255,191,61,.55)}.tune-panel{position:fixed;top:calc(130px + env(safe-area-inset-top));right:14px;width:min(320px,calc(100vw - 28px));max-height:calc(100dvh - 200px);overflow-y:auto;background:#fffffff5;border:1px solid var(--line);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;gap:14px;pointer-events:auto;box-shadow:var(--shadow-md);backdrop-filter:blur(8px);z-index:13}.tune-panel h2{font-size:1rem}.tune-presets{display:flex;gap:8px}.tune-presets .btn{flex:1;padding:6px 0;font-size:.85rem}.tune-panel label{display:flex;flex-direction:column;gap:4px;font-size:.85rem;color:var(--muted)}.tune-panel label em{font-style:normal;color:var(--ink);float:right}.tune-panel input[type=range]{width:100%;accent-color:var(--accent)}.tune-panel select{width:100%;padding:7px 10px;border-radius:8px;border:1px solid var(--line-strong);background:var(--bg);color:var(--ink);font:inherit;font-size:.85rem}.tune-panel .tune-check{flex-direction:row;align-items:center;gap:8px}.tune-panel .tune-check input{accent-color:var(--accent)}.spinner{display:inline-block;width:18px;height:18px;vertical-align:-3px;margin-right:6px;border:3px solid rgba(4,35,31,.25);border-top-color:var(--on-accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.scan-line,.pulse-dot,.spinner,.start-btn{animation:none}.drawer,.found-toast{transition:none}}
