:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;color:#f8f2ed;font-synthesis:none;--paper:#f8f2ed;--muted:#b9afbd;--gold:#f2d4a5;--rose:#e8b4c5;--line:#f2d4a52e;--glass:#171322c2;--serif:"Songti SC", "STSong", "Noto Serif CJK SC", Georgia, serif;background:#090811;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;background:#090811;min-width:320px}body{min-height:100dvh;margin:0;overflow-x:hidden}button,video{-webkit-tap-highlight-color:transparent}button{font:inherit}button,a{touch-action:manipulation}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--gold);outline-offset:4px}button:disabled{opacity:.3;cursor:default}[hidden]{display:none!important}p,h1,h2,h3,figure{margin:0}p{overflow-wrap:anywhere}.skip-link{z-index:100;color:#090811;background:var(--paper);padding:12px;position:fixed;top:-100px;left:16px}.skip-link:focus{top:16px}#sky,.ambient-glow{pointer-events:none;position:fixed;inset:0}#sky{z-index:0;background:radial-gradient(at 50% 15%,#21172f 0%,#0d0b18 45%,#080810 100%);overflow:hidden}.starfield-canvas,.sky-fallback{width:100%;height:100%;position:absolute;inset:0}.sky-fallback{opacity:.55;background-image:radial-gradient(circle,#f8e9d0 0 1px,#0000 1.4px),radial-gradient(circle,#d9c7f2 0 .7px,#0000 1.2px),radial-gradient(circle,#fff 0 .8px,#0000 1.3px);background-position:12px 22px,58px 71px,103px 31px;background-size:127px 151px,173px 197px,211px 181px}.static-sky .sky-fallback{opacity:.8}.ambient-glow{z-index:0;background:radial-gradient(circle at 15% 60%,#854b8614,#0000 35%),radial-gradient(circle at 90% 30%,#dca6850f,#0000 30%)}#app{z-index:1;width:min(100% - 40px,680px);margin:0 auto;position:relative}.screen{min-height:100dvh;padding:calc(36px + env(safe-area-inset-top)) 0 calc(36px + env(safe-area-inset-bottom))}.eyebrow{color:var(--gold);letter-spacing:.28em;text-transform:uppercase;font-size:.68rem;font-weight:500;line-height:1.7}.tiny-note{color:#928797;letter-spacing:.06em;text-align:center;font-size:.72rem;line-height:1.8}.gate-screen{text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}.orbit-mark{border:1px solid var(--line);width:122px;height:122px;color:var(--gold);border-radius:50%;place-items:center;margin-bottom:38px;display:grid;position:relative}.orbit-mark:before,.orbit-mark:after{content:"";border:1px solid #e8b4c51a;border-radius:50%;position:absolute;inset:-15px;transform:rotate(35deg)scaleY(.45)}.orbit-mark:after{inset:-32px;transform:rotate(-25deg)scaleY(.7)}.orbit-mark span{font-family:var(--serif);font-size:3rem}.orbit-mark i{background:var(--gold);border-radius:50%;width:7px;height:7px;position:absolute;top:4px;right:14px;box-shadow:0 0 16px 4px #f2d4a566}.gate-screen h1{font-family:var(--serif);letter-spacing:.04em;margin:18px 0;font-size:clamp(2rem,8vw,3.5rem);font-weight:400;line-height:1.45}.gate-date{color:var(--rose);letter-spacing:.12em;font-size:.88rem}.gate-copy{max-width:300px;color:var(--muted);margin-top:24px;font-size:.88rem;line-height:1.9}.countdown{gap:10px;margin:32px 0;display:flex}.countdown div{background:#ffffff06;border:1px solid #ffffff14;border-radius:14px;flex-direction:column;align-items:center;min-width:60px;padding:14px 10px;display:flex}.countdown strong{font-family:var(--serif);font-variant-numeric:tabular-nums;font-size:1.65rem;font-weight:400}.countdown span{color:var(--muted);margin-top:4px;font-size:.65rem}.prologue-screen{text-align:center}.prologue-screen>.eyebrow{margin-top:14px}.prologue-screen h1{font-family:var(--serif);margin:14px 0 32px;font-size:clamp(2.2rem,9vw,4rem);font-weight:400;line-height:1.35}.prologue-screen h1 em{color:var(--gold);font-size:.8em;font-style:normal}.prologue-photo{color:#3c3034;background:#f3ece4;width:min(84%,340px);margin:0 auto 36px;padding:12px 12px 18px;position:relative;transform:rotate(-2deg);box-shadow:0 24px 70px #00000059}.prologue-photo:after{content:"";pointer-events:none;position:absolute;inset:0;box-shadow:inset 0 0 0 1px #47303014}.prologue-photo img{object-fit:cover;object-position:center 35%;width:100%;max-height:52dvh;display:block}.prologue-photo figcaption{font-family:var(--serif);justify-content:space-between;padding:16px 5px 0;font-size:.9rem;display:flex}.photo-tape{z-index:2;background:#dbc7ada6;width:88px;height:28px;position:absolute;top:-13px;left:50%;transform:translate(-50%)rotate(2deg)}.prologue-lines{color:#d4c9d1;font-family:var(--serif);gap:18px;margin-bottom:30px;font-size:1rem;line-height:2;display:grid}.prologue-lines strong{color:var(--paper);font-weight:400}.prologue-screen .tiny-note{margin-top:20px}.primary-button,.secondary-button,.text-button,.icon-button,.gallery-button{cursor:pointer;border:0;min-width:44px;min-height:44px}.primary-button{color:#211823;letter-spacing:.08em;background:linear-gradient(110deg,#eed2ae,#f4e3cb);border:1px solid #f2d4a55c;border-radius:999px;justify-content:center;align-items:center;gap:30px;min-height:52px;padding:14px 26px;font-size:.86rem;display:inline-flex;box-shadow:0 8px 30px #dfb9911f}.primary-button:active{transform:scale(.98)}.secondary-button{border:1px solid var(--line);color:var(--gold);background:#f2d4a50d;border-radius:999px;padding:11px 22px}.text-button{color:var(--muted);text-underline-offset:5px;background:0 0;padding:10px 18px;-webkit-text-decoration:underline #fff3;text-decoration:underline #fff3}.icon-button{width:44px;height:44px;color:var(--paper);background:#ffffff08;border:1px solid #ffffff1a;border-radius:50%;place-items:center;padding:0;font-size:1.15rem;display:grid}.chapter-screen{padding-top:calc(24px + env(safe-area-inset-top))}.chapter-header{padding:0 4px 36px}.chapter-nav{justify-content:space-between;align-items:center;gap:16px;margin-bottom:48px;display:flex}.progress-wrap{color:var(--muted);letter-spacing:.1em;flex-direction:column;flex:1;align-items:center;gap:8px;font-size:.68rem;display:flex}progress{background:#ffffff1a;border:0;width:min(150px,100%);height:2px}progress::-webkit-progress-bar{background:#ffffff1a}progress::-webkit-progress-value{background:var(--gold)}progress::-moz-progress-bar{background:var(--gold)}.mini-star{width:44px;height:44px;color:var(--gold);place-items:center;display:grid}.chapter-header h2{max-width:570px;font-family:var(--serif);letter-spacing:.02em;margin:14px 0 18px;font-size:clamp(1.85rem,7.5vw,3rem);font-weight:400;line-height:1.45}.chapter-intro{color:var(--muted);white-space:pre-line;font-size:.9rem;line-height:2}.chapter-stars{gap:28px;display:grid}.memory-card{background:linear-gradient(150deg,#221b2be0,#110e1bd1);border:1px solid #ffffff14;border-radius:24px;padding:22px 16px 20px;position:relative;overflow:hidden;box-shadow:0 16px 50px #00000026}.memory-card:before{content:"";pointer-events:none;background:radial-gradient(circle,#e8b4c512,#0000 70%);border-radius:50%;width:160px;height:160px;position:absolute;top:-60px;right:-60px}.memory-heading{align-items:center;gap:13px;margin:0 4px 14px;display:flex}.memory-number{border:1px solid var(--line);width:42px;height:42px;color:var(--gold);font-family:var(--serif);border-radius:50%;flex:none;place-items:center;font-size:.85rem;display:grid;box-shadow:inset 0 0 18px #f2d4a50a}.memory-heading h3{font-family:var(--serif);font-size:1.2rem;font-weight:400;line-height:1.5}.memory-text{color:#c6bbc8;white-space:pre-line;margin:0 4px 20px;font-size:.86rem;line-height:1.95}.photo-frame,.video-frame{background:#0e0c15;border-radius:15px;position:relative;overflow:hidden}.photo-button{cursor:zoom-in;background:#0e0c15;border:0;justify-content:center;align-items:center;width:100%;min-height:120px;max-height:65dvh;padding:0;display:flex}.photo-button img{object-fit:contain;width:auto;max-width:100%;height:auto;max-height:65dvh;display:block}.video-frame video{background:#0e0c15;width:100%;max-height:65dvh;display:block}.video-error{color:var(--muted);text-align:center;padding:16px;font-size:.82rem}.video-error button{margin:12px auto 0;display:block}.gallery-stage{min-width:0}.gallery-controls{justify-content:center;align-items:center;gap:24px;padding-top:14px;display:flex}.gallery-button{width:44px;height:44px;color:var(--paper);background:#ffffff06;border:1px solid #ffffff1a;border-radius:50%;padding:0 0 4px;font-family:Georgia,serif;font-size:1.8rem}.gallery-status{min-width:62px;color:var(--muted);font-family:var(--serif);font-variant-numeric:tabular-nums;letter-spacing:.12em;text-align:center;font-size:.75rem}.media-error{width:100%;min-height:180px;color:var(--muted);background:radial-gradient(circle at 50% 30%,#f2d4a517,#0000 55%);border:0;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.error-star{color:var(--gold);font-size:2rem}.media-error small{color:var(--gold)}.chapter-extra{border:1px dashed var(--line);border-radius:24px;margin-top:28px;padding:24px 16px}.chapter-extra h3{color:var(--gold);font-family:var(--serif);margin-bottom:10px;font-weight:400}.chapter-extra p{color:var(--muted);white-space:pre-line;margin-bottom:18px;font-size:.85rem;line-height:1.9}.chapter-footer{justify-items:center;gap:20px;padding:42px 0 10px;display:grid}#fireworks-layer{z-index:2;pointer-events:none;position:fixed;inset:0;overflow:hidden}.fireworks-canvas{pointer-events:none;width:100%;height:100%;display:block;position:absolute;inset:0}.fireworks-fallback .finale-screen{background:radial-gradient(circle at 20% 24%,#f2d4a517,#0000 18%),radial-gradient(circle at 80% 30%,#e8b4c514,#0000 20%)}.finale-screen{text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}.finale-screen h2{font-family:var(--serif);margin:14px 0 18px;font-size:clamp(2.1rem,9vw,3.8rem);font-weight:400;line-height:1.4}.finale-intro{color:var(--muted);font-size:.9rem;line-height:2}.wish-orbit{place-items:center;width:230px;height:230px;margin:24px 0 0;display:grid}.wish-star{--wish-progress:0;width:150px;height:150px;color:var(--gold);cursor:pointer;touch-action:none;-webkit-user-select:none;user-select:none;background:radial-gradient(circle,#f2d4a529,#e8b4c50a 45%,#0000 70%);border:0;border-radius:50%;place-items:center;padding:0;display:grid;position:relative}.wish-star:before,.wish-star:after{content:"";border-radius:50%;position:absolute;inset:10px}.wish-star:before{background:conic-gradient(var(--gold) calc(var(--wish-progress) * 1turn), #f2d4a521 0);-webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - 3px),#000 calc(100% - 2px));mask:radial-gradient(farthest-side,#0000 calc(100% - 3px),#000 calc(100% - 2px))}.wish-star:after{opacity:.4;border:1px dashed #f2d4a533;inset:-17px}.wish-star-core{font-family:var(--serif);text-shadow:0 0 30px #f2d4a559;font-size:3.4rem}.wish-star i{background:var(--gold);width:5px;height:5px;box-shadow:0 0 12px var(--gold);border-radius:50%;position:absolute}.wish-star i:first-of-type{top:17px;left:32px}.wish-star i:nth-of-type(2){width:3px;height:3px;bottom:53px;right:5px}.wish-star i:nth-of-type(3){width:2px;height:2px;bottom:2px;left:51px}.wish-star.is-lit{background:radial-gradient(circle,#ffecbe73,#e8b4c521 42%,#0000 70%)}.wish-star.is-lit .wish-star-core{color:#fff3d9;text-shadow:0 0 18px #f5d8a6,0 0 60px #e8b4c5}.wish-hint{color:#968b9c;margin-bottom:16px;font-size:.72rem;line-height:1.7}.birthday-letter{border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:#d9cdd6;width:100%;font-family:var(--serif);margin-top:32px;padding:34px 24px;line-height:2;position:relative}.birthday-letter h3{color:var(--gold);margin:12px 0 24px;font-size:1.45rem;font-weight:400}.birthday-letter p{margin:16px 0;font-size:.95rem}.birthday-letter strong{color:var(--paper);font-weight:400}.letter-spark{color:var(--gold);font-size:1.5rem}.letter-sign{color:#a99ba9;margin-top:26px;font-size:.8rem;display:block}.finale-actions{justify-items:center;gap:14px;margin-top:30px;display:grid}.souvenir-fallback{border-radius:16px;width:min(100%,360px);margin-top:24px}.music-toggle{z-index:12;right:max(16px, env(safe-area-inset-right));bottom:calc(16px + env(safe-area-inset-bottom));min-width:88px;min-height:44px;color:var(--gold);-webkit-backdrop-filter:blur(14px);cursor:pointer;letter-spacing:.04em;background:#130f1dd1;border:1px solid #f2d4a538;border-radius:999px;justify-content:center;align-items:center;gap:7px;padding:10px 14px;font-size:.72rem;display:inline-flex;position:fixed;box-shadow:0 8px 28px #0000003d}.music-icon{place-items:center;width:20px;height:20px;font-family:Georgia,serif;font-size:1.15rem;display:grid}.music-toggle[data-playing=true] .music-icon{color:#fff0c9;text-shadow:0 0 12px #f2d4a5a6;animation:2.4s ease-in-out infinite musicBreathe}@keyframes musicBreathe{50%{opacity:.72;transform:scale(1.18)rotate(-8deg)}}.media-viewer{width:100%;max-width:none;height:100%;max-height:none;padding:calc(60px + env(safe-area-inset-top)) 20px calc(24px + env(safe-area-inset-bottom));color:var(--paper);background:#07060cf7;border:0;margin:0}.media-viewer[open]{flex-direction:column;justify-content:center;align-items:center;display:flex}.media-viewer::backdrop{background:#07060c}.media-viewer img{object-fit:contain;max-width:100%;max-height:calc(100dvh - 150px)}.media-viewer .icon-button{z-index:1;top:calc(12px + env(safe-area-inset-top));position:absolute;right:20px}.media-viewer p{max-width:500px;color:var(--muted);text-align:center;padding-top:18px;font-size:.8rem;line-height:1.7}.toast{z-index:20;left:50%;bottom:calc(24px + env(safe-area-inset-bottom));border:1px solid var(--line);width:max-content;max-width:calc(100% - 40px);color:var(--paper);text-align:center;opacity:0;pointer-events:none;background:#1a1422f2;border-radius:999px;padding:12px 20px;font-size:.78rem;transition:opacity .25s,transform .25s;position:fixed;transform:translate(-50%,12px);box-shadow:0 10px 40px #0000004d}.toast.visible{opacity:1;transform:translate(-50%)}.noscript{z-index:50;color:var(--paper);text-align:center;background:#211a2b;padding:24px;position:fixed;inset:30% 20px auto}.prologue-gift{color:var(--rose);font-family:var(--serif);letter-spacing:.12em;margin-bottom:16px;font-size:.78rem;animation:1.6s both giftReveal}.prologue-star-dust{color:var(--gold);opacity:.65;pointer-events:none;animation:3s ease-in-out infinite dustPulse;position:absolute;top:9%;right:8%}.prologue-screen>.eyebrow,.prologue-screen>h1{animation:1.8s .25s both giftReveal}.prologue-photo,.prologue-lines{animation:1.8s .55s both giftReveal}.prologue-screen.is-transforming .prologue-lines,.prologue-screen.is-transforming>.eyebrow,.prologue-screen.is-transforming>h1,.prologue-screen.is-transforming>.tiny-note{opacity:0;transition:opacity .5s}.prologue-flying-star{z-index:30;color:#ffe4ae;text-shadow:0 0 20px #ffd6a0,0 0 80px #efb4d5;pointer-events:none;font-size:42px;position:fixed;top:50%;left:50%}@keyframes giftReveal{0%{opacity:0;translate:0 12px}to{opacity:1;translate:0}}@keyframes dustPulse{50%{opacity:1;transform:scale(1.3)rotate(20deg)}}#chapter-scene{pointer-events:none;min-height:62px;margin:-22px 0 18px;position:relative}.chapter-constellation{justify-content:center;align-items:center;gap:52px;height:50px;display:flex;position:relative}.chapter-constellation:before{content:"";background:linear-gradient(90deg, transparent, var(--gold), transparent);opacity:.45;transform-origin:50%;height:1px;animation:1.2s both constellationDraw;position:absolute;top:50%;left:18%;right:18%}.chapter-constellation i{background:var(--gold);border-radius:50%;width:7px;height:7px;animation:.8s both starArrive;position:relative;box-shadow:0 0 15px 3px #f2d4a559}.chapter-constellation i:nth-child(2){animation-delay:.2s}.chapter-constellation i:nth-child(3){animation-delay:.4s}.constellation-cities{justify-content:space-between;padding:0 14%}.constellation-cities:before{left:15%;right:15%}.constellation-celebration i{background:var(--rose);box-shadow:0 0 16px 4px #e8b4c559}.constellation-heart i:nth-child(2n){translate:0 12px}.calling-scene{color:var(--muted);letter-spacing:.1em;justify-content:center;align-items:center;gap:18px;font-size:.75rem;transition:opacity .35s;display:flex;position:absolute;inset:0}.calling-scene.is-connected{opacity:0}.calling-pulse{color:var(--gold);animation:.8s ease-in-out infinite dustPulse}@keyframes constellationDraw{0%{opacity:0;transform:scaleX(0)}to{opacity:.45;transform:scaleX(1)}}@keyframes starArrive{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}#story[data-scene=warm] .chapter-header{text-shadow:0 0 28px #e7a96914}#story[data-scene=warm] .chapter-constellation{background:radial-gradient(#df9b5912,#0000 65%)}#story[data-scene=celebration] .memory-card.scene-visible{box-shadow:0 16px 50px #d595b614}#story:not([data-scene=""]) .memory-card{opacity:0;transition:opacity .65s,translate .65s,box-shadow .3s;translate:0 16px}#story .memory-card.scene-visible{opacity:1;translate:0}.gallery-stage.glint{animation:.45s galleryGlint}@keyframes galleryGlint{50%{filter:brightness(1.18)}}.heart-memory-scene{border-top:1px solid var(--line);text-align:center;grid-column:1/-1;margin-top:16px;padding:32px 8px 24px}.heart-memory-scene h3{font-family:var(--serif);margin-top:10px;font-size:1.35rem;font-weight:400}.heart-collage{width:min(100%,340px);height:355px;margin:12px auto 0;position:relative}.heart-outline{color:#e8b4c51a;text-shadow:0 0 45px #e8b4c51f;place-items:center;font-family:Georgia,serif;font-size:270px;line-height:1;display:grid;position:absolute;inset:0}.heart-photo{z-index:1;cursor:zoom-in;background:#eee4df;border:1px solid #f2d4a540;border-radius:8px;width:82px;height:108px;padding:4px;position:absolute;box-shadow:0 10px 28px #0000004d}.heart-photo img{object-fit:cover;width:100%;height:100%}.heart-photo-1{top:24px;left:34px;transform:rotate(-10deg)}.heart-photo-2{top:24px;right:34px;transform:rotate(10deg)}.heart-photo-3{top:142px;left:75px;transform:rotate(-4deg)}.heart-photo-4{top:142px;right:75px;transform:rotate(4deg)}.heart-caption{color:var(--muted);font-family:var(--serif);font-size:.82rem;line-height:1.8}@media (width>=700px){.chapter-stars{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}.memory-card{height:100%}.chapter-extra{width:calc(50% - 14px)}.chapter-header,.chapter-footer{text-align:center}.chapter-header h2{margin-left:auto;margin-right:auto}.chapter-intro{max-width:560px;margin:0 auto}}@media (width<=360px){#app{width:min(100% - 28px,680px)}.countdown{gap:6px}.countdown div{min-width:55px}.memory-card{padding-left:12px;padding-right:12px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
