@font-face{font-family:Space;src:local('Bahnschrift');font-display:swap}
:root{color-scheme:dark;--bg:#070711;--ink:#f1efff;--muted:#a4a3bd;--cyan:#89f8e0;--purple:#b49aff;--line:#ffffff1d;--mono:'Cascadia Code','Consolas',monospace;--sans:Space,'Microsoft YaHei','PingFang SC',sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);min-height:720px;height:100svh;overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:wait}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible{outline:2px solid var(--cyan);outline-offset:5px}button{touch-action:manipulation}button svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}[hidden]{display:none!important}
#scene{position:absolute;inset:0;z-index:0;touch-action:none}#scene canvas{display:block;width:100%;height:100%}.vignette{position:absolute;inset:0;background:radial-gradient(ellipse at 64% 46%,transparent 25%,#05050c65 80%),linear-gradient(90deg,#070711cc 0%,transparent 38%);pointer-events:none}.scanlines{position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,transparent,transparent 3px,#0000000a 3px,#0000000a 4px);opacity:.4;z-index:2}
header{height:116px;position:relative;display:flex;align-items:center;justify-content:space-between;margin:0 4.2%;border-bottom:1px solid var(--line);z-index:5}.brand{display:flex;gap:13px;align-items:center}.brand>svg{width:38px;height:38px;fill:var(--cyan)}.brand>span{font-size:19px;letter-spacing:4px;font-weight:600}.brand small{display:block;font-family:var(--mono);font-size:9px;font-weight:400;letter-spacing:2px;margin-top:5px;color:var(--muted)}.dedication{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:#bab7cf;display:flex;gap:12px;align-items:center}.dedication i,.footer-note>i{width:5px;height:5px;background:var(--cyan);border-radius:50%;box-shadow:0 0 10px #89f8e060}.dedication span{opacity:.35}nav{display:flex;gap:8px}.icon-button{border:1px solid transparent;background:transparent;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;color:#bcbacf;transition:background .2s,color .2s,border-color .2s}.icon-button:hover{color:var(--cyan);background:#89f8e00b;border-color:#89f8e040}.sound-wave{display:none}#sound[aria-pressed=true] .sound-wave{display:block}#sound[aria-pressed=true] .sound-off{display:none}
main{position:absolute;inset:116px 0 123px;pointer-events:none;z-index:3}main button,main aside{pointer-events:auto}.intro,.session{position:absolute;left:8%;top:50%;transform:translateY(-52%);width:325px}.eyebrow{font-family:var(--mono);font-size:10px;letter-spacing:2.1px;color:var(--cyan);line-height:1.7}.intro .eyebrow{display:flex;gap:60px;align-items:center}.eyebrow b{font-size:20px;font-weight:400}h1{font-size:clamp(40px,4.25vw,65px);font-weight:600;line-height:1.27;letter-spacing:3px;margin:25px 0 24px}h1 span{color:var(--cyan)}.lead{color:var(--muted);font-size:15px;line-height:1.95;letter-spacing:1px}.actions{margin-top:36px;width:270px}.primary{display:flex;align-items:center;justify-content:center;gap:12px;min-height:52px;width:100%;padding:13px 20px;border:1px solid var(--cyan);background:var(--cyan);color:#071c1b;font-weight:600;font-size:14px;letter-spacing:.6px;box-shadow:0 0 28px #89f8e014;clip-path:polygon(0 0,calc(100% - 12px) 0,100% 12px,100% 100%,12px 100%,0 calc(100% - 12px));transition:filter .2s,box-shadow .2s;user-select:none;-webkit-user-select:none}.primary:hover{filter:brightness(1.12);box-shadow:0 0 35px #89f8e033}.primary .arrow{margin-left:auto;font-size:20px;font-weight:400}.text-button{border:0;background:none;color:#b9b7cf;font-size:12px;letter-spacing:.5px;min-height:44px;padding:11px 0;text-align:left;transition:color .2s}.text-button:hover{color:var(--cyan)}.actions .text-button{width:100%;display:flex;justify-content:center;gap:20px;margin-top:3px}.privacy{display:flex;align-items:center;gap:6px;color:#85859e;font-size:10px;margin-top:20px}.privacy svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1}
.scene-label{position:absolute;left:46%;bottom:10%;display:flex;gap:14px;align-items:center;color:#7b769a;font-family:var(--mono);font-size:9px;letter-spacing:1.4px;line-height:1.9}.scene-label .cross{font-size:24px;font-weight:200;color:var(--purple)}.scene-label strong{font-size:8px;color:#8883a5;font-weight:400}.tracker{position:absolute;right:4.2%;bottom:2%;width:185px;color:#a6a3bc;border-top:1px solid #ffffff30;border-bottom:1px solid #ffffff1d;background:#0b0a1833}.tracker-head,.tracker-foot{display:flex;justify-content:space-between;align-items:center;font-family:var(--mono);font-size:8px;letter-spacing:.8px;padding:12px 0}.tracker-head>span:first-child{display:flex;align-items:center;gap:6px}.tracker-head i{display:inline-block;background:#706e89;width:4px;height:4px;border-radius:50%}#status-dot.connected{background:var(--cyan);box-shadow:0 0 7px var(--cyan)}.tracker-head>span:last-child{font-size:7px;color:#827d9b}.tracker-screen{position:relative;height:125px;background:linear-gradient(140deg,#9e7dff0a,transparent);overflow:hidden}.tracker-screen video,.tracker-screen canvas{width:100%;height:100%;position:absolute;inset:0;object-fit:cover;transform:scaleX(-1)}.tracker-screen video{opacity:.4}.tracker-screen canvas{z-index:2}.tracker-foot{padding:10px 0}.tracker-foot>span:first-child{color:#b8b3ce;font-family:var(--sans);font-size:10px}.tracker-foot>span:last-child{font-size:7px;color:#79748e}#hand-placeholder{position:absolute;inset:0;display:flex;flex-direction:column;gap:9px;align-items:center;justify-content:center}#hand-placeholder svg{height:65px;width:65px;fill:none;stroke:#8d81bd;stroke-width:1;opacity:.6}#hand-placeholder span{font-size:9px;color:#8c86a4}.bracket{position:absolute;width:10px;height:10px;border-color:#9b89c86b;border-style:solid}.top-left{left:0;top:0;border-width:1px 0 0 1px}.top-right{right:0;top:0;border-width:1px 1px 0 0}.bottom-left{left:0;bottom:0;border-width:0 0 1px 1px}.bottom-right{right:0;bottom:0;border-width:0 1px 1px 0}
footer{height:123px;position:absolute;bottom:0;left:4.2%;right:4.2%;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;z-index:3;pointer-events:none}.footer-note{display:flex;align-items:center;gap:12px}.footer-note>span{font:8px/1.9 var(--mono);letter-spacing:1.4px;color:#77758e}.footer-note b{font-weight:400;color:#aaa7bd}.chapters{display:flex;list-style:none;margin:0;padding:0;gap:clamp(28px,5vw,85px)}.chapters li{display:flex;gap:15px;align-items:center;opacity:.38;transition:opacity .6s}.chapters li.active,.chapters li.done{opacity:1}.chapters li>span{font:12px var(--mono);width:34px;height:34px;display:grid;place-items:center;border:1px solid #ffffff28;border-radius:50%;color:#a6a0be}.chapters .active>span{border-color:#89f8e055;color:var(--cyan);box-shadow:0 0 20px #89f8e00b}.chapters .done>span{color:var(--cyan)}.chapters li>div{font-size:12px;letter-spacing:1px}.chapters small{display:block;margin-top:6px;font:7px var(--mono);letter-spacing:1px;color:#aaa4bd}.edition{text-align:right;color:#b2a9ce;font:18px var(--mono);letter-spacing:3px}.edition b{display:block;font:7px var(--mono);letter-spacing:1px;margin-top:8px;color:#747086}
.session h2{font-size:36px;letter-spacing:2px;margin:24px 0 18px;font-weight:500}.session>p{color:var(--muted);font-size:13px;line-height:2;letter-spacing:.4px}.gather-meter{margin-top:34px;width:270px}.meter-label{display:flex;justify-content:space-between;align-items:center;font-size:11px;letter-spacing:1px;color:#b0abc3}.meter-label strong{font:28px var(--mono);color:var(--cyan)}.meter-label strong span{font-size:12px;margin-left:3px}.progress{margin-top:12px;height:3px;background:#ffffff12;overflow:hidden}.progress i{display:block;width:100%;height:100%;transform:scaleX(var(--progress,0));transform-origin:left;background:var(--cyan);box-shadow:0 0 12px var(--cyan)}.meter-caption{display:flex;justify-content:space-between;margin-top:11px;color:#85829c;font-size:10px}.meter-caption>span:last-child{font-family:var(--mono);font-size:9px}.rotation-hint{color:#aba7bf;font-size:10px;line-height:2.5;margin-top:22px}.rotation-hint span{font-size:15px;color:var(--purple);margin-right:6px}.rotation-hint span:nth-child(2){margin-left:15px}.rotation-hint small{color:#79768e;font-size:10px;letter-spacing:.5px}.hold-button{width:270px;margin-top:23px;touch-action:none}.hold-button:active,.hold-button.holding{background:#b6fff0;box-shadow:0 0 40px #89f8e044}.mode-switch{margin-top:10px;font-size:10px;color:#8e89a4}.session .manual-hint{font-size:10px;line-height:1.9;color:#85829a;margin:12px 0 0}
.center-message{position:absolute;left:61%;top:25%;text-align:center;transform:translate(-50%,-50%);width:380px;animation:reveal 1.2s ease both;pointer-events:none;text-shadow:0 2px 20px #070711}.wish-star{color:var(--cyan);font-size:20px;margin-bottom:12px}.center-message .eyebrow{font-size:9px;letter-spacing:4px;color:#beb3eb}.center-message h2{font-size:32px;line-height:1.6;letter-spacing:6px;font-weight:400;margin:10px 0}.center-message h2 span{color:var(--cyan)}.center-message>p:not(.eyebrow){font-size:11px;color:#b6adcd;letter-spacing:1px}.wish-timer{display:flex;gap:12px;align-items:center;justify-content:center;margin-top:17px}.wish-timer span{font:10px var(--mono);color:#c3b5df}.wish-timer i{width:60px;height:1px;transform-origin:left;background:var(--purple);transform:scaleX(var(--remaining,1))}.final-copy{position:absolute;left:50%;top:69%;width:90%;text-align:center;transform:translateX(-50%);animation:reveal 1.8s ease}.final-copy>span{font-size:17px;letter-spacing:6px;color:#d4c3f1}.final-copy p{font:8px var(--mono);letter-spacing:2.1px;color:#8f83aa;margin-top:14px}.final-copy .text-button{color:var(--cyan);font-size:11px;margin-top:20px}.notice{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);padding:13px 20px;max-width:560px;background:#161325ed;border:1px solid #b49aff45;color:#d8cfee;font-size:12px;line-height:1.8;z-index:15;pointer-events:auto}.loading{position:absolute;left:50%;top:45%;transform:translate(-50%,-50%);display:flex;align-items:center;gap:15px;background:#0a0919ed;border:1px solid #89f8e030;padding:20px 25px;white-space:nowrap;color:var(--cyan);font-size:12px;z-index:10}.loading i{border:1px solid #89f8e040;border-top-color:var(--cyan);border-radius:50%;width:18px;height:18px;animation:spin 1s linear infinite}
dialog{width:min(560px,calc(100% - 32px));max-height:85svh;overflow:auto;background:#0e0d1b;color:var(--ink);border:1px solid #b49aff55;padding:40px;box-shadow:0 25px 140px #000;line-height:1.9}dialog::backdrop{background:#03030bcc;backdrop-filter:blur(8px)}dialog .close{position:absolute;right:10px;top:10px;font-size:28px}dialog h2{font-size:25px;font-weight:500;letter-spacing:1px;margin:20px 0 25px}dialog ol{list-style:none;padding:0}dialog li{margin:22px 0}dialog b{color:var(--cyan);font-size:13px;font-weight:500;letter-spacing:1px}dialog p{font-size:12px;color:#b6afc9;line-height:1.95;margin:8px 0}.help-alt{padding-top:20px;border-top:1px solid var(--line)}dialog .help-privacy{font-size:10px;color:#8d859f;margin-top:25px}body[data-stage=wish] .scene-label,body[data-stage=message] .scene-label,body[data-stage=fireworks] .scene-label{display:none}body[data-stage=message] .session,body[data-stage=fireworks] .tracker,body[data-stage=message] .tracker{opacity:0;pointer-events:none}body[data-stage=message] .session button{pointer-events:none}.session,.tracker{transition:opacity .8s}body[data-stage=fireworks] .session h2{color:var(--cyan)}
@keyframes spin{to{transform:rotate(360deg)}}@keyframes reveal{from{opacity:0;filter:blur(5px)}to{opacity:1;filter:blur(0)}}
@media(min-width:1600px){.intro,.session{left:11%}header{height:130px}main{top:130px}.tracker{right:5.5%}}
@media(max-width:1100px){.intro,.session{left:5%;width:265px}h1{font-size:48px}.tracker{width:150px}.tracker-screen{height:105px}.dedication{font-size:8px;letter-spacing:1px}.scene-label{left:43%;bottom:3%}.chapters{gap:30px}.footer-note{display:none}.edition{font-size:16px}.session h2{font-size:29px}.gather-meter,.hold-button{width:245px}}
@media(max-width:720px){body{min-height:680px;overflow:auto}header{height:82px;margin:0 6%}.brand>svg{width:30px;height:30px}.brand>span{font-size:16px;letter-spacing:3px}.brand small{font-size:7px;letter-spacing:1px}.dedication{display:none}nav{gap:0}.icon-button{width:40px;height:44px}main{inset:82px 0 100px;min-height:498px}.intro{left:7%;top:24px;transform:none;width:86%}.intro .eyebrow{font-size:8px;gap:25px}.intro .eyebrow b{font-size:14px}h1{font-size:34px;line-height:1.3;letter-spacing:2px;margin:12px 0}h1 br{display:none}.lead{font-size:12px;line-height:1.9;margin:0}.lead br{display:none}.actions{position:absolute;top:calc(100svh - 323px);width:100%;max-width:330px;left:50%;transform:translateX(-50%);margin:0}.primary{min-height:48px}.actions .text-button{font-size:10px}.privacy{position:absolute;top:calc(100svh - 229px);left:50%;transform:translateX(-50%);white-space:nowrap;font-size:8px;margin:0}.tracker{right:6%;bottom:135px;width:112px}.tracker-head{font-size:6px;padding:7px 0;letter-spacing:0}.tracker-head>span:last-child{font-size:6px}.tracker-screen{height:75px}.tracker-foot{padding:6px 0}.tracker-foot>span:first-child{font-size:8px}.tracker-foot>span:last-child{font-size:5px}#hand-placeholder svg{height:39px;width:39px}#hand-placeholder{gap:3px}#hand-placeholder span{font-size:6px}.scene-label{left:7%;bottom:151px;font-size:7px;max-width:160px}.scene-label strong{font-size:6px}.scene-label .cross{font-size:18px}.session{left:7%;top:22px;transform:none;width:86%}.session .eyebrow{font-size:8px}.session h2{font-size:29px;margin:10px 0 7px}.session>p{font-size:11px;line-height:1.8;margin:0}.session>p br{display:none}.gather-meter{position:absolute;top:calc(100svh - 335px);width:100%;margin:0}.meter-label{font-size:9px}.meter-label strong{font-size:23px}.meter-caption{font-size:8px}.rotation-hint{position:absolute;top:130px;font-size:8px;line-height:2}.rotation-hint small{font-size:7px}.hold-button{position:absolute;top:calc(100svh - 248px);width:100%;margin:0}.session .manual-hint{position:absolute;top:calc(100svh - 187px);font-size:8px;margin:0;line-height:1.5}.mode-switch{position:absolute;right:0;top:calc(100svh - 188px);margin:0;font-size:8px}.session .manual-hint br{display:block}.center-message{left:50%;top:25%;width:90%}.center-message h2{font-size:26px;letter-spacing:5px}.center-message h2 br{display:none}.center-message .wish-star{margin-bottom:6px}.center-message>p:not(.eyebrow){font-size:10px}.center-message .eyebrow{font-size:8px}.final-copy{top:66%;width:90%}.final-copy>span{font-size:14px;letter-spacing:3px}.final-copy p{font-size:6px;letter-spacing:1px}.final-copy .text-button{margin-top:10px}footer{height:100px;left:6%;right:6%;min-width:0}.chapters{justify-content:space-between;gap:15px;width:100%}.chapters li{gap:9px}.chapters li>span{height:26px;width:26px;font-size:9px}.chapters li>div{font-size:10px;letter-spacing:.3px}.chapters small{font-size:5px;letter-spacing:.2px;margin-top:5px}.edition{display:none}.notice{bottom:0;width:88%;font-size:10px}.loading{font-size:10px;padding:16px 20px}dialog{padding:30px 24px}body[data-stage=wish] .session h2{font-size:22px}body[data-stage=wish] .session>p{max-width:65%}body[data-stage=wish] .rotation-hint{display:none}body[data-stage=ready] .rotation-hint{display:none}body[data-stage=fireworks] .session{top:28px}.vignette{background:radial-gradient(ellipse at 50% 50%,transparent 25%,#05050c66 90%)}}
@media(max-height:740px) and (min-width:721px){header{height:85px}main{top:85px;bottom:95px}footer{height:95px}.intro,.session{transform:translateY(-48%)}h1{font-size:45px;margin:18px 0}.actions{margin-top:24px}.privacy{margin-top:12px}.tracker{width:145px}.tracker-screen{height:90px}.gather-meter{margin-top:22px}.session h2{margin:16px 0}.hold-button{margin-top:14px}.rotation-hint{margin-top:15px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.scanlines{display:none}}
/* Give the fireworks their full radiance; the reading vignette belongs to earlier chapters. */
body[data-stage=fireworks] .vignette{opacity:.18}body[data-stage=message] .vignette{opacity:.25}
.center-message{top:12%;width:500px}.center-message .wish-star{display:none}.center-message h2{font-size:28px;margin:8px 0}.center-message h2 br{display:none}.center-message .wish-timer{margin-top:10px}
@media(max-width:720px){.center-message{top:25%;width:92%}.center-message h2{font-size:25px}}

/* The experience is the whole screen: minimal prompts, no side panel. */
body{min-height:520px}header{position:absolute;inset:12px 26px auto;margin:0;height:48px;border:0;pointer-events:none}header a,header button{pointer-events:auto}.brand{gap:10px}.brand>svg{height:23px;width:23px}.brand>span{display:none}.brand::after{content:'FOR CZP';font:9px var(--mono);letter-spacing:2.5px;color:#b9b0ce}.dedication{display:none}nav{gap:3px}.icon-button{height:40px;width:40px;background:#08081255}main{inset:0;min-height:0}footer,.scene-label{display:none}.vignette{background:radial-gradient(ellipse at 50% 46%,transparent 35%,#05050c45 100%)}
.intro{left:50%;top:auto;bottom:5%;transform:translateX(-50%);width:auto;text-align:center}.intro h1,.intro .eyebrow,.intro .lead,.intro .privacy{display:none}.actions{position:static;top:auto;left:auto;transform:none;width:auto;max-width:none;margin:0;display:flex;align-items:center;gap:22px}.actions .primary{width:210px;min-height:46px;font-size:12px;white-space:nowrap}.actions .text-button{width:auto;gap:9px;font-size:10px;white-space:nowrap;margin:0}
.session{left:50%;top:auto;bottom:4%;transform:translateX(-50%);width:min(90%,560px);text-align:center}.session .eyebrow,.session h2,.rotation-hint,.session .manual-hint{display:none!important}.session>p{font-size:12px;line-height:1.8;color:#c4bdd5;letter-spacing:.8px;margin:0;text-shadow:0 1px 9px #000}.session>p br{display:none}.gather-meter{position:static;width:230px;margin:14px auto 0}.meter-label{font-size:9px}.meter-label>span{display:none}.meter-label strong{font-size:15px;display:block;width:100%;text-align:center}.meter-label strong span{font-size:9px}.progress{margin-top:8px;height:2px}.meter-caption{font-size:8px;margin-top:8px}.meter-caption>span:first-child{visibility:hidden}.hold-button{position:static;width:230px;min-height:44px;margin:14px auto 0;font-size:12px}.mode-switch{position:static;margin:4px auto 0;padding:9px 0;min-height:34px;display:block;text-align:center;font-size:9px;color:#aaa0bd}.tracker{right:25px;bottom:25px;width:140px;border-top:0;background:#07071166;opacity:.85}.tracker-head{padding:6px 0}.tracker-screen{height:100px}.tracker-foot{padding:6px 0}.tracker-foot>span:first-child{font-size:8px}.tracker-foot>span:last-child{font-size:6px}.center-message{left:50%;top:17%;width:90%}.center-message h2{font-size:26px;letter-spacing:4px}.center-message>p:not(.eyebrow){display:none}.center-message .eyebrow{font-size:8px}.center-message .wish-timer{margin-top:13px}.final-copy{top:65%;width:90%}.final-copy>span{font-size:13px;letter-spacing:3px}.final-copy p{display:none}.final-copy .text-button{font-size:10px;margin-top:14px}.notice{bottom:18%;font-size:11px}body[data-stage=wish] .session>p{max-width:none;font-size:10px;color:#9a8fae}body[data-stage=fireworks] .session{top:auto;bottom:5%}body[data-stage=fireworks] .session>p{font-size:10px;color:#a69ab9}
@media(max-width:720px){header{inset:10px 14px auto}.intro{bottom:5%;width:90%}.actions{flex-direction:column;gap:0}.actions .primary{width:210px}.actions .text-button{font-size:10px;min-height:40px}.session{bottom:4%;width:88%}.session>p{font-size:10px;letter-spacing:.2px}.gather-meter{width:210px;margin-top:10px}.hold-button{width:210px;margin-top:12px}.tracker{right:14px;bottom:27%;width:100px}.tracker-screen{height:73px}.tracker-head{font-size:6px}.tracker-head>span:last-child{font-size:6px}.tracker-foot>span:first-child{font-size:7px}.tracker-foot>span:last-child{display:none}.center-message{top:25%}.center-message h2{font-size:22px;letter-spacing:2px}.final-copy{top:63%}.final-copy>span{font-size:11px;letter-spacing:2px}.notice{bottom:22%;font-size:10px}}
.grip-control{width:230px;margin:10px auto 0;display:flex;align-items:center;gap:12px;color:#aaa0bd;font-size:9px}.grip-control input{width:100%;accent-color:var(--cyan);height:24px;cursor:pointer}.grip-control span{white-space:nowrap}
#blow-button{display:block;margin:8px auto 0;color:var(--cyan);font-size:11px;text-align:center}body[data-stage=blow] #hand-placeholder svg{display:none}
