:root{--ink:#f6f4f4;--muted:#a8a0a2;--stage:#030304;--glass:#0c080ab8;--glass-strong:#0e090be6;--line:#ffffff24;--scarlet:#ff2a44;--scarlet-deep:#d91a32;--scarlet-soft:#ff2a4459;--green:#4eff40;--mono:"Cascadia Mono", "SF Mono", Consolas, ui-monospace, monospace;--sans:"Segoe UI Variable", "Segoe UI", system-ui, -apple-system, sans-serif;--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px);--ease:cubic-bezier(.2, .8, .2, 1)}*,:before,:after{box-sizing:border-box}html,body{background:var(--stage);height:100%;color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;margin:0;overflow:hidden}a{color:inherit}button{font:inherit;color:inherit}a,button,[role=button]{touch-action:manipulation}#app{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;position:fixed;inset:0}#scene-canvas{touch-action:manipulation;width:100%;height:100%;display:block}#vignette{pointer-events:none;z-index:2;background:radial-gradient(85% 75% at 50% 45%,#0000 50%,#00000080 82%,#000000e6 100%),radial-gradient(100% 90% at 50% 40%,#0000 62%,#ff2a4429 100%);position:absolute;inset:0}.ico{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:18px;height:18px}.caret{color:var(--green)}.blink{color:var(--green);animation:1.1s step-end infinite blink}@keyframes blink{50%{opacity:0}}.topbar{z-index:20;padding:calc(16px + var(--safe-t)) 20px 16px;pointer-events:none;justify-content:space-between;align-items:center;display:flex;position:absolute;top:0;left:0;right:0}.brand,.menu-btn{pointer-events:auto}.brand{font-family:var(--mono);letter-spacing:.02em;color:var(--ink);opacity:.9;font-size:13px;text-decoration:none}.menu-btn{border:1px solid var(--line);-webkit-backdrop-filter:blur(10px);cursor:pointer;background:#00000059;border-radius:999px;padding:7px 14px;font-size:13px}.menu-btn:hover{border-color:#ffffff59}.exit-btn{z-index:30;-webkit-backdrop-filter:blur(10px);cursor:pointer;animation:exitIn .35s var(--ease);background:#0a0608b8;border:1px solid #ffffff47;border-radius:999px;align-items:center;gap:8px;padding:9px 16px 9px 12px;font-size:14px;display:inline-flex;position:fixed;top:14px;left:50%;transform:translate(-50%)}.exit-btn--bottom{top:auto;bottom:calc(20px + var(--safe-b));animation-name:exitInBottom}.exit-btn[hidden]{display:none}.exit-btn:hover,.exit-btn:focus-visible{border-color:var(--scarlet);background:#ff2a4440}@keyframes exitIn{0%{opacity:0;transform:translate(-50%,-8px)}}@keyframes exitInBottom{0%{opacity:0;transform:translate(-50%,8px)}}@keyframes exitInFlow{0%{opacity:0;transform:translateY(8px)}}.bubble{z-index:12;background:var(--glass);-webkit-backdrop-filter:blur(14px)saturate(1.2);opacity:0;visibility:hidden;transform-origin:100% 40%;width:min(380px,100vw - 32px);transition:opacity .35s var(--ease), visibility .35s;cursor:pointer;border:1px solid #ff5a6e59;border-radius:18px;outline:none;padding:14px 18px 16px;position:fixed;top:72px;left:24px;box-shadow:inset 0 0 0 1px #ffffff0a,0 10px 40px #00000073,0 0 36px #ff2a4424}.bubble:after{content:"";background:inherit;-webkit-backdrop-filter:none;backdrop-filter:none;border-top:1px solid #ff5a6e59;border-right:1px solid #ff5a6e59;width:14px;height:14px;position:absolute;top:40%;right:-8px;transform:rotate(45deg)}.bubble:focus-visible{box-shadow:0 0 0 2px var(--scarlet)}.bubble.is-on{opacity:1;visibility:visible}.bubble.is-on.is-pop{animation:bubblePop .42s var(--ease)}@keyframes bubblePop{0%{transform:scale(.88);box-shadow:0 0 #ff2a4499}55%{transform:scale(1.03);box-shadow:0 0 46px 6px #ff2a4459}to{transform:scale(1)}}.bubble-who{letter-spacing:.14em;text-transform:uppercase;color:var(--scarlet);margin-bottom:6px;font-size:11px;font-weight:600;display:block}.bubble-text{min-height:1.45em;margin:0;font-size:18px;line-height:1.45}.bubble.is-typing .bubble-text:after{content:"";vertical-align:-2px;background:var(--scarlet);width:7px;height:1em;margin-left:2px;animation:.8s step-end infinite blink;display:inline-block}.bubble-next{color:var(--muted);opacity:0;font-size:12px;transition:opacity .2s;position:absolute;bottom:8px;right:14px}.bubble.can-skip .bubble-next{opacity:1;animation:1s ease-in-out infinite nudge}@keyframes nudge{50%{transform:translate(3px)}}.dock{z-index:12;pointer-events:none;position:absolute;bottom:0;left:0;right:0}.dock>*{pointer-events:auto}.choices{opacity:0;visibility:hidden;width:290px;transition:opacity .3s var(--ease), visibility .3s;flex-direction:column;gap:8px;display:flex;position:fixed;top:40%;left:60%}.choices.is-on{opacity:1;visibility:visible}.choice{-webkit-backdrop-filter:blur(10px);text-align:left;cursor:pointer;opacity:0;width:100%;min-height:44px;animation:choiceIn .35s var(--ease) forwards;animation-delay:calc(var(--i) * 60ms + 60ms);background:#0e090bb8;border:1px solid #ffffff24;border-radius:999px;align-items:center;gap:10px;padding:9px 14px 9px 8px;font-size:15px;text-decoration:none;transition:background .15s,border-color .15s,transform .15s;display:flex}@media (width>=760px) and (height>=501px) and (orientation:landscape){.choices:not(.is-docked) .choice{margin-left:var(--arc,0px);width:calc(100% - var(--arc,0px))}}.choice-ico{background:#ffffff1a;border:1px solid #ffffff80;border-radius:50%;flex:none;place-items:center;width:28px;height:28px;display:grid}.choice-ico .ico{width:15px;height:15px}.choice-label{flex:1}.choice kbd{font-family:var(--mono);color:var(--muted);border:1px solid var(--line);border-radius:5px;padding:1px 5px;font-size:10px}.choice:hover,.choice:focus-visible{background:#ff2a4438;border-color:#ff5a6eb3;outline:none;transform:translate(4px)}.choice:focus-visible{box-shadow:0 0 0 2px var(--scarlet)}@keyframes choiceIn{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:none}}.card{background:var(--glass);border:1px solid var(--line);-webkit-backdrop-filter:blur(14px);opacity:0;visibility:hidden;width:300px;transition:opacity .4s var(--ease), visibility .4s;border-radius:16px;padding:18px 20px;position:fixed;top:30%;left:calc(100% - 324px)}.card.is-open{opacity:1;visibility:visible;animation:cardIn .45s var(--ease)}@keyframes cardIn{0%{opacity:0;translate:14px}}.card-toggle{display:none}.card h2{letter-spacing:-.01em;margin:0 0 8px;font-size:20px;font-weight:600}.card-kicker{font-family:var(--mono);color:var(--green);margin:0 0 4px;font-size:11px}.card-lead{color:var(--muted);margin:0 0 10px;font-size:14px}.card ul{gap:7px;margin:0 0 12px;padding:0;font-size:13.5px;line-height:1.4;list-style:none;display:grid}.card li{padding-left:14px;position:relative}.card li:before{content:"";background:var(--scarlet);border-radius:50%;width:5px;height:5px;position:absolute;top:.55em;left:0}.card-head{align-items:center;gap:12px;margin-bottom:8px;display:flex}.card-head h2{margin:0}.card-icon{border-radius:11px}.work-list li{padding:0}.work-list li:before{display:none}.work-list a{border:1px solid #ffffff14;border-radius:10px;gap:2px;padding:8px 10px;text-decoration:none;display:grid}.work-list a:hover{border-color:var(--scarlet-soft)}.work-list span{color:var(--muted);font-size:12px}.stats{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.stats strong{font-size:20px;display:block}.stats span{color:var(--muted);font-size:11px}.card-actions{flex-wrap:wrap;gap:8px;display:flex}.btn{border:1px solid var(--line);word-break:break-all;border-radius:999px;align-items:center;min-height:38px;padding:8px 14px;font-size:13px;text-decoration:none;display:inline-flex}.btn:hover,.btn:focus-visible{border-color:#ffffff80}.btn-primary{background:var(--scarlet-deep);border-color:var(--scarlet-deep);color:#fff}.btn-primary:hover{background:#e8213a}.card-fine{color:var(--muted);margin:10px 0 0;font-size:11px}.prop-labels{z-index:5;pointer-events:none;position:absolute;inset:0}.prop-label{white-space:nowrap;opacity:0;background:#00000080;border:1px solid #ffffff1f;border-radius:999px;align-items:center;gap:6px;padding:4px 10px 4px 8px;font-size:12px;transition:opacity .3s;display:flex;position:absolute;top:0;left:0}.prop-label.is-on{opacity:.75}.prop-label.is-on.is-hover{opacity:1;border-color:#fff6}.prop-label .txt-short{display:none}.prop-label .dot{background:#fff9;border-radius:50%;width:6px;height:6px}.prop-label.is-new .dot{background:var(--scarlet);box-shadow:0 0 0 0 var(--scarlet);animation:1.8s ease-out infinite ping}@keyframes ping{70%{box-shadow:0 0 0 7px #ff2a4400}to{box-shadow:0 0 #ff2a4400}}#lens-flash{z-index:30;pointer-events:none;opacity:0;background:radial-gradient(#ffffffe6,#4eff404d 45%,#000000f2 100%);position:absolute;inset:0}#lens-flash.is-on{animation:flash .9s var(--ease)}@keyframes flash{0%{opacity:0}25%{opacity:1}to{opacity:0}}#app[data-ar=hud] #vignette,#app[data-ar=lens] #vignette{background:radial-gradient(80% 70% at 50% 45%,#0000 60%,#000000bf 100%),radial-gradient(120% 100% at 50% 45%,#0000 55%,#4eff4012 100%)}.hud{z-index:60;pointer-events:none;width:min(520px,100vw - 32px);animation:hudIn .8s var(--ease);position:absolute;top:64px;left:50%;transform:translate(-50%)}@keyframes hudIn{0%{opacity:0;filter:blur(6px)}}.hud-panel{font-family:var(--mono);color:var(--green);text-shadow:0 0 8px #4eff40a6;mix-blend-mode:screen;background:#0014002e;border:1px solid #4eff4040;border-radius:6px;padding:10px 16px;font-size:15px;line-height:1.55}.hud-row{justify-content:space-between;gap:12px;display:flex}.hud-next{justify-content:flex-start}.hud-dim{opacity:.55}.hud-caption{min-height:1.6em;margin-top:4px}#app[data-ar=lens] .hud{display:none}#app[data-ar=hud] .bubble.is-on{opacity:0;visibility:hidden}.lens-ui{z-index:60;pointer-events:none;width:100%;height:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.lens-shutter{display:none}.lens-dots{gap:8px;display:flex;position:absolute;top:160px;left:50%;transform:translate(-50%)}.lens-dots i{border:2px solid #fff9;border-radius:50%;width:22px;height:22px}.lens-dots i.on{background:radial-gradient(circle,#fff3a8,#ff2a44);border-color:#fff}.scarlet-tag{z-index:6;color:var(--green);font-family:var(--mono);white-space:nowrap;opacity:0;pointer-events:none;background:#0000008c;border:1px solid #4eff4080;border-radius:999px;padding:5px 12px;font-size:12px;transition:opacity .4s;position:absolute;top:0;left:0}.scarlet-tag span{opacity:.6}.scarlet-tag.is-on{opacity:1}.menu{z-index:40;-webkit-backdrop-filter:blur(6px);background:#0000008c;justify-content:flex-end;display:flex;position:absolute;inset:0}.menu[hidden]{display:none}.menu-panel{overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#ff2a4473 transparent;width:min(320px,100%);height:100%;padding:calc(72px + var(--safe-t)) 24px calc(24px + var(--safe-b));background:var(--glass-strong);border-left:1px solid var(--line);animation:menuIn .35s var(--ease);overflow-y:auto}.menu-panel::-webkit-scrollbar{width:6px}.menu-panel::-webkit-scrollbar-track{background:0 0}.menu-panel::-webkit-scrollbar-thumb{background:#ff2a4473;border-radius:999px}@keyframes menuIn{0%{opacity:0;transform:translate(30px)}}.menu-kicker{font-family:var(--mono);color:var(--green);margin:0 0 12px;font-size:12px}.menu ul{margin:0 0 24px;padding:0;list-style:none}.menu li button{text-align:left;cursor:pointer;background:0 0;border:0;border-bottom:1px solid #ffffff14;width:100%;padding:14px 0;font-size:20px}.menu li button:hover,.menu li button:focus-visible{color:var(--scarlet)}.menu-close{border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:999px;padding:8px 16px}.loadbar{z-index:25;pointer-events:none;height:2px;transition:opacity .8s var(--ease) .3s;background:#ffffff0f;position:absolute;top:0;left:0;right:0}.loadbar-fill{background:linear-gradient(90deg, var(--scarlet), #fff);transform-origin:0;height:100%;transition:transform .35s var(--ease);box-shadow:0 0 12px var(--scarlet);transform:scaleX(0)}.loadbar-meta{text-align:center;font-family:var(--mono);color:var(--muted);letter-spacing:.04em;margin:0;font-size:11px;position:absolute;top:52px;left:0;right:0}.loadbar.is-done{opacity:0}.error-panel{z-index:50;background:var(--glass-strong);border:1px solid var(--line);border-radius:14px;width:min(420px,100vw - 32px);padding:18px 20px;font-size:14px;line-height:1.6;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.error-panel[hidden]{display:none}.fallback{z-index:60;background:var(--stage);padding:48px 24px;position:absolute;inset:0}.skip-link{z-index:100;background:var(--scarlet-deep);color:#fff;border-radius:999px;padding:10px 16px;text-decoration:none;transition:top .2s;position:fixed;top:-60px;left:16px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link:focus{top:12px}.text-version{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.text-version:target,.text-version.is-open,.no-webgl~.text-version{z-index:90;clip:auto;white-space:normal;background:var(--stage);outline:none;width:auto;height:auto;padding:72px 24px 48px;line-height:1.6;position:fixed;inset:0;overflow:auto}.text-version section{max-width:640px;margin:0 auto 28px}.text-version h1{margin:0 0 8px;font-size:28px}.text-version h2{margin:0 0 8px;font-size:22px}.text-version .tv-bar{max-width:640px;margin:0 auto 28px}.text-version .tv-back{color:var(--ink);font:inherit;cursor:pointer;background:0 0;font-size:14px}.text-version:not(:target):not(.is-open) .tv-back,.no-webgl~.text-version .tv-back{display:none}.text-version a{color:var(--scarlet)}:focus-visible{outline:2px solid var(--scarlet);outline-offset:2px}#scene-canvas{touch-action:none;cursor:grab}#scene-canvas.is-dragging{cursor:grabbing}.menu-row{flex-wrap:wrap;gap:8px;display:flex}.menu-pill{border:1px solid var(--line);color:var(--ink);cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:6px;padding:8px 14px;font-size:13px;text-decoration:none;display:inline-flex}.menu-pill[aria-pressed=true]{border-color:var(--green);color:var(--green)}.menu-pill .ico{width:16px;height:16px}@media (height<=560px){.menu-panel{padding-top:calc(56px + var(--safe-t));padding-bottom:calc(14px + var(--safe-b))}.menu-kicker{margin-bottom:6px}.menu ul{margin-bottom:14px}.menu li button{padding:9px 0;font-size:16px}.menu-pill{padding:6px 12px}}@media (height<=420px){.menu-panel{padding-top:calc(50px + var(--safe-t))}.menu li button{padding:6px 0;font-size:15px}.menu ul{margin-bottom:10px}}.prop-label-speaker.is-on{opacity:1;background:#ff2a4440;border-color:#ffffff59}.prop-label-speaker.is-sound-on{background:#00000080;border-color:#4eff4080}.prop-label-speaker.is-sound-on .dot{background:var(--green);box-shadow:none;animation:none}@media (width<=759px),(height<=500px),(orientation:portrait){.topbar{padding:calc(12px + var(--safe-t)) 16px 12px}.bubble{top:calc(56px + var(--safe-t));transform-origin:50% 0;width:auto;padding:12px 14px 14px;left:16px;right:16px}.bubble:after,.exit-btn:not(.exit-btn--bottom){display:none}.exit-btn--bottom{align-self:center;padding:10px 18px 10px 14px;font-size:14px;animation-name:exitInFlow;position:static;transform:none}.bubble-text{font-size:16px}.dock{left:16px;right:16px;bottom:calc(12px + var(--safe-b));flex-direction:column;gap:8px;display:flex}.choices{gap:6px;width:auto;position:static}.choice{min-height:46px;font-size:15px}.choice kbd{display:none}.card{border-radius:12px;width:auto;padding:10px 14px;display:none;position:relative;top:auto;left:auto}.card.is-open{display:block}.menu-btn,.card-toggle{position:relative}.menu-btn:before,.card-toggle:before{content:"";position:absolute;inset:-8px -6px}.card-toggle:before{inset:-13px -8px}.card-toggle{border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:999px;padding:3px 10px;font-size:11px;display:block;position:absolute;top:8px;right:10px}.card:not(.is-expanded) .card-body>:not(h2):not(.card-head):not(.card-kicker){display:none}.card:not(.is-expanded) .card-body h2,.card:not(.is-expanded) .card-head{margin:0;font-size:16px}.card:not(.is-expanded) .card-icon{border-radius:7px;width:28px;height:28px}.card.is-expanded .card-toggle:after{content:" ✕"}.hud{top:calc(56px + var(--safe-t))}.hud-panel{font-size:12px}.lens-dots{top:40%}.prop-label{padding:3px 8px 3px 6px;font-size:11px}.prop-label .txt{display:none}.prop-label .txt-short{display:inline}}@media (orientation:portrait) and (width>=600px){.bubble,.dock{left:max(16px,50vw - 300px);right:max(16px,50vw - 300px)}.bubble-text{font-size:18px}}@media (pointer:coarse) and (width>=760px) and (height>=501px) and (orientation:landscape){.menu-btn{position:relative}.menu-btn:before,.exit-btn:before{content:"";position:absolute;inset:-8px -6px}}@media (height<=500px) and (orientation:landscape){:root{--col:min(44vw, 400px);--safe-l:max(12px, env(safe-area-inset-left,0px));--safe-r:max(12px, env(safe-area-inset-right,0px))}.topbar{padding:10px var(--safe-r) 10px var(--safe-l)}.bubble{top:50px;left:var(--safe-l);width:var(--col);padding:10px 12px 12px;right:auto}.bubble-text{font-size:14px}.dock{left:var(--safe-l);width:var(--col);right:auto;bottom:calc(8px + var(--safe-b));gap:6px}.choice{min-height:40px;font-size:14px}.card{top:50px;right:var(--safe-r);width:min(32vw,300px);position:fixed}.card.is-expanded{max-height:calc(100dvh - 110px);overflow:auto}.exit-btn--bottom{left:auto;right:var(--safe-r);bottom:calc(10px + var(--safe-b));animation-name:exitInFlow;position:fixed;transform:none}.hud{top:124px;bottom:auto;left:calc(var(--col) + 24px);right:var(--safe-r);width:auto;animation:none;transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
