:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;color:var(--text);background:var(--background);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif}*{box-sizing:border-box}body{min-width:240px;margin:0}main{isolation:isolate;text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:100svh;padding:2rem 1.5rem;display:flex;position:relative}.star-scene{z-index:-1;pointer-events:none;position:fixed;inset:0}.star-scene canvas{width:100%;height:100%;display:block}.caption{text-shadow:0 2px 18px var(--background), 0 0 5px var(--background)}.heart-note{top:calc(77% + var(--heart-caption-offset,0px));opacity:0;width:calc(100% - 3rem);color:var(--text);text-shadow:0 2px 12px var(--background);pointer-events:none;margin:0;position:fixed;left:50%;transform:translate(-50%)}.shape-controls{gap:.5rem;display:flex;position:fixed;bottom:1.5rem;left:1.5rem}.shape-controls button{color:var(--muted);font:inherit;cursor:pointer;background:#080c16cc;border:1px solid #9ba8bf55;border-radius:.5rem;padding:.65rem 1rem;font-size:.875rem}.shape-controls button[aria-pressed=true]{color:var(--text);border-color:var(--text)}.shape-controls button:focus-visible{outline:2px solid var(--text);outline-offset:3px}@media (width<=420px){.shape-controls{bottom:4.5rem;left:.75rem}.heart-note{top:calc(72% + var(--heart-caption-offset,0px))}}.motion-control{color:var(--muted);cursor:pointer;background:#080c16cc;border-radius:.5rem;align-items:center;gap:.5rem;padding:.6rem .8rem;font-size:.875rem;display:flex;position:fixed;bottom:1.5rem;right:1.5rem}.motion-control input{accent-color:#9ba8bf}.motion-control:focus-within{outline:2px solid var(--text);outline-offset:3px}.scene-status{max-width:32rem;padding:1rem;position:relative}[hidden]{display:none!important}h1{letter-spacing:.12em;text-wrap:balance;margin:0;font-size:clamp(1.75rem,4vw,3rem);font-weight:400;line-height:1.6}p{color:var(--muted);letter-spacing:.08em;margin:1.25rem 0 0;font-size:.875rem;line-height:1.8}.camera-panel{z-index:4;text-align:left;max-width:min(25rem,100vw - 2rem);position:fixed;top:1rem;left:1rem}.camera-top{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}.camera-badge{color:var(--muted);align-items:center;gap:.45rem;font-size:.75rem;display:inline-flex}.camera-badge:before{content:"";background:currentColor;border-radius:50%;width:.4rem;height:.4rem}.camera-badge[data-on=true]{color:var(--ui-active)}.camera-status{letter-spacing:.035em;max-width:24rem;margin:.5rem 0 0;font-size:.75rem}.camera-consent{border:1px solid color-mix(in srgb, var(--ui-border) 45%, transparent);background:color-mix(in srgb, var(--ui-panel) 94%, transparent);border-radius:14px;margin-top:.7rem;padding:1rem}.camera-consent h2,.gesture-hint h2{letter-spacing:.06em;margin:0 0 .55rem;font-size:1rem;font-weight:500}.camera-consent p{margin:0 0 .8rem;font-size:.85rem;line-height:1.8}.camera-consent button{margin:.25rem .4rem .25rem 0}.camera-panel button,.gesture-hint button,.shape-controls button{border:1px solid color-mix(in srgb, var(--ui-border) 50%, transparent);color:var(--text);background:color-mix(in srgb, var(--ui-panel) 82%, transparent);cursor:pointer;font:inherit;border-radius:10px;padding:.55rem .85rem;font-size:.8rem}.camera-panel button:hover,.gesture-hint button:hover,.shape-controls button:hover{border-color:var(--text)}.camera-panel button:focus-visible,.gesture-hint button:focus-visible{outline:2px solid var(--text);outline-offset:4px}.camera-panel .quiet-button{color:var(--muted);text-underline-offset:.25em;background:0 0;border-color:#0000;margin-top:.4rem;padding:.25rem .1rem;font-size:.75rem;text-decoration:underline}.shape-controls button{align-items:center;gap:.7rem;display:inline-flex}.shape-controls kbd{color:var(--muted);border:1px solid color-mix(in srgb, var(--ui-border) 30%, transparent);border-radius:4px;padding:0 .25rem;font-family:inherit;font-size:.7rem}.shape-controls button[aria-pressed=true]{border-color:var(--text)}.galaxy-subtitle{font-size:var(--subtitle-size);font-weight:var(--subtitle-weight)}.gesture-hint{z-index:3;background:color-mix(in srgb, var(--ui-panel) var(--hint-fill,40%), transparent);border:1px solid color-mix(in srgb, var(--ui-border) 40%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);text-align:center;border-radius:18px;width:min(23rem,100vw - 2rem);padding:1.4rem 1.5rem;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.gesture-hint p{letter-spacing:.04em;margin:.6rem 0 1rem;line-height:1.9}.gesture-hint[data-phase=enter]{animation:hint-appear var(--hint-fade,.7s) ease-out both}.gesture-hint[data-phase=exit]{animation:hint-disappear var(--hint-fade-out,2s) ease-in both}@keyframes hint-disappear{0%{opacity:1}to{opacity:0}}@keyframes hint-appear{0%{opacity:0}to{opacity:1}}:root[data-reduced-motion=true] .gesture-hint{animation:none!important}@media (prefers-reduced-motion:reduce){.gesture-hint{animation:none!important}}.gesture-hint .intro-notice{white-space:pre-line}@media (width<=640px){.shape-controls{flex-wrap:wrap;max-width:calc(100vw - 1.5rem);bottom:4.5rem;left:.75rem}}.camera-panel[data-guided=true]{left:auto;right:1rem}.camera-panel[data-guided=true] .camera-status,.camera-panel[data-guided=true] .quiet-button{display:none}.discovery-choices{flex-wrap:wrap;justify-content:center;gap:.75rem;display:flex}.discovery-explore{z-index:4;color:var(--muted);cursor:pointer;background:0 0;border:0;font-size:.75rem;text-decoration:underline;position:fixed;bottom:4.5rem;right:1rem}@media (width<=640px){.discovery-explore{bottom:8rem}}.character-note{top:calc(85% - var(--character-offset,0vh))}.controls-reveal{animation:controls-appear var(--controls-reveal,2s) ease-out both}@keyframes controls-appear{0%{opacity:0}to{opacity:1}}:root[data-reduced-motion=true] .controls-reveal{animation:none}@media (prefers-reduced-motion:reduce){.controls-reveal{animation:none}}.opening-title,.opening-subtitle{animation:opening-copy var(--opening-fade) ease-out var(--opening-delay) both}@keyframes opening-copy{0%{opacity:0}to{opacity:1}}:root[data-reduced-motion=true] .opening-title,:root[data-reduced-motion=true] .opening-subtitle{animation-duration:.01ms}@media (prefers-reduced-motion:reduce){.opening-title,.opening-subtitle{animation-duration:.01ms}}
