.phase-three{position:fixed;inset:0;z-index:12;overflow:hidden;opacity:0;visibility:hidden;pointer-events:none;background:radial-gradient(ellipse at 50% 45%,rgba(25,33,85,.88),rgba(3,6,23,.97) 62%,#01020b);transition:opacity 1.4s ease,visibility 0s linear 1.4s}
.gift-scene figure img{object-position:center 42%}
.wish-seed.settled span{opacity:.42;transition:opacity .8s ease}.wish-seed.settled i{transform:scale(1.55);transition:transform .8s ease}
.finale-symbol-burst{position:absolute;z-index:9;inset:0;pointer-events:none}.finale-symbol-burst i{position:absolute;left:50%;top:50%;color:#fff;font-style:normal;opacity:0;text-shadow:0 0 8px #fff,0 0 18px #c295ff}.finale-symbol-burst.visible i{animation:finale-symbol-flight 2.4s cubic-bezier(.12,.66,.22,1) var(--burst-delay) forwards}.finale-symbol-burst .petal{width:8px;height:15px;border-radius:80% 20% 70% 30%;background:linear-gradient(#ffd7ee,#d7c7ff);box-shadow:0 0 12px rgba(255,184,228,.7)}.finale-symbol-burst .butterfly{color:#e9ceff;font-size:18px}.finale-symbol-burst .star{color:#fff0b9;font-size:13px}
@keyframes finale-symbol-flight{0%{opacity:0;transform:translate(-50%,-50%) rotate(var(--burst-angle)) translateX(0) scale(.3)}18%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) rotate(var(--burst-angle)) translateX(var(--burst-distance)) rotate(260deg) scale(1.15)}}
.phase-three.active{opacity:1;visibility:visible;pointer-events:auto;transition:opacity 1.4s ease}
.phase-three.transitioning{background:radial-gradient(ellipse at 50% 50%,rgba(30,35,91,.42),rgba(3,6,22,.76) 68%,rgba(1,2,9,.9))}
.phase-three::before,.phase-three::after{content:"";position:absolute;inset:-12%;pointer-events:none;mix-blend-mode:screen}
.phase-three::before{background:radial-gradient(ellipse at 18% 55%,rgba(101,98,210,.17),transparent 38%),radial-gradient(ellipse at 80% 30%,rgba(75,150,255,.15),transparent 36%),radial-gradient(ellipse at 66% 78%,rgba(237,151,220,.1),transparent 32%);filter:blur(28px);animation:phase3-nebula 16s ease-in-out infinite alternate}
.phase-three::after{opacity:.3;background-image:radial-gradient(circle,rgba(255,255,255,.8) 0 1px,transparent 1.7px);background-size:139px 127px}
.phase-three-canvas,.phase-three-memories,.phase-three-stage{position:absolute;inset:0}
.phase-three-canvas{z-index:1;width:100%;height:100%}
.phase-three-memories{z-index:2;opacity:0;transition:opacity 1.4s ease;perspective:900px;pointer-events:none}
.phase-three-memories.visible{opacity:1}
.phase-three-memories figure{position:absolute;width:clamp(88px,11vw,168px);aspect-ratio:4/5;margin:0;border:1px solid rgba(214,222,255,.18);border-radius:18px;overflow:hidden;opacity:.19;filter:blur(2.5px) saturate(.7);box-shadow:0 0 34px rgba(132,144,255,.15);animation:memory-drift 12s linear infinite;animation-delay:calc(var(--memory-index)*-2s)}
.phase-three-memories figure:nth-child(odd){left:clamp(18px,8vw,150px)}.phase-three-memories figure:nth-child(even){right:clamp(18px,8vw,150px)}
.phase-three-memories figure:nth-child(3n+1){top:8%}.phase-three-memories figure:nth-child(3n+2){top:41%}.phase-three-memories figure:nth-child(3n){top:70%}
.phase-three-memories img{width:100%;height:100%;object-fit:cover}
.phase-three-stage{z-index:4;display:flex;align-items:center;justify-content:center;padding:clamp(18px,4vw,54px);text-align:center}
.phase-three-stage button{position:relative;border:1px solid rgba(213,220,255,.42);color:#f7f5ff;background:linear-gradient(135deg,rgba(73,91,176,.68),rgba(154,93,169,.5));box-shadow:0 0 22px rgba(146,150,255,.22);transition:transform .24s ease,filter .24s ease,box-shadow .24s ease,border-color .24s ease}
.phase-three-stage button:hover,.phase-three-stage button.gesture-hover{transform:translateY(-2px) scale(1.04);filter:brightness(1.25);border-color:rgba(255,255,255,.9);box-shadow:0 0 12px rgba(255,255,255,.38),0 0 38px rgba(188,135,255,.48)}
.phase-three-stage button.gesture-dwell::after{content:"";position:absolute;inset:-7px;border-radius:inherit;background:conic-gradient(rgba(242,208,255,.95) var(--phase3-dwell,0deg),transparent 0);padding:2px;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude;pointer-events:none}
.phase-three-cursor{position:absolute;z-index:30;left:0;top:0;width:21px;height:21px;border:1px solid rgba(255,244,255,.95);border-radius:50%;opacity:0;pointer-events:none;transform:translate(-50%,-50%);box-shadow:0 0 8px #fff,0 0 25px #b59aff;transition:opacity .15s ease}
.phase-three-cursor::after{content:"";position:absolute;inset:6px;border-radius:50%;background:#fff;box-shadow:0 0 8px #fff}.phase-three-cursor.visible{opacity:1}
.phase3-transition-copy{width:min(760px,90vw)}
.transition-line{margin:0;color:#e7ebff;font-size:clamp(17px,2.3vw,27px);font-weight:300;letter-spacing:.14em;opacity:0;transform:translateY(12px);transition:opacity 1.2s ease,transform 1.2s ease;text-shadow:0 0 24px rgba(164,180,255,.52)}
.transition-line+.transition-line{margin-top:22px}.transition-line.visible{opacity:1;transform:none}
.secret-star{margin-top:clamp(42px,8vh,82px);opacity:0;transform:scale(.8);transition:opacity 1.2s ease,transform 1.2s cubic-bezier(.18,.78,.22,1)}
.secret-star.visible{opacity:1;transform:none}.secret-star>i{display:block;color:#fff2bd;font-size:38px;font-style:normal;text-shadow:0 0 8px #fff,0 0 28px #c2a3ff;animation:secret-star-pulse 2.4s ease-in-out infinite}
.secret-star h2{margin:18px 0 26px;font-size:clamp(19px,2.6vw,30px);font-weight:350;letter-spacing:.09em}.secret-star button{min-width:142px;padding:11px 28px;border-radius:999px}
.corridor-copy{opacity:0;transform:translateY(18px);transition:opacity 1.8s ease,transform 1.8s ease}.corridor-copy.visible{opacity:1;transform:none}.corridor-copy p,.phase3-kicker{margin:0 0 12px;color:#9eb7ee;font:500 10px/1.2 ui-monospace,monospace;letter-spacing:.3em}.corridor-copy h2{margin:0;color:#f5f2ff;font-size:clamp(24px,4vw,48px);font-weight:300;letter-spacing:.14em;text-shadow:0 0 26px rgba(188,176,255,.42)}.corridor-copy small{display:block;margin-top:24px;color:#aab6dc;font-size:12px;letter-spacing:.08em}
.origin-scene{width:min(780px,92vw);opacity:0;transition:opacity 1.3s ease}.origin-scene.visible{opacity:1}.particle-number-space{height:clamp(220px,44vh,430px)}.origin-scene p{margin:12px 0;color:#e9eaff;font-size:clamp(16px,2vw,23px);font-weight:300;letter-spacing:.08em;opacity:0;transform:translateY(10px);transition:opacity 1.1s ease,transform 1.1s ease}.origin-scene p.visible{opacity:1;transform:none}
.phase3-timeline{width:min(820px,94vw);opacity:0;transition:opacity 1s ease}.phase3-timeline.visible{opacity:1}.age-path{display:flex;align-items:center;justify-content:center;gap:clamp(16px,4vw,54px)}.age-path i{width:clamp(45px,10vw,130px);height:1px;background:linear-gradient(90deg,transparent,#aebcff,transparent);box-shadow:0 0 10px #8e9dff;opacity:.5}.age{color:#b7c8ef;font:300 clamp(34px,6vw,72px)/1 Georgia,serif;opacity:0;filter:blur(7px);transform:scale(.8);transition:opacity .8s ease,filter .8s ease,transform .8s ease}.age.visible{opacity:.62;filter:none;transform:none}.age-19.visible{color:#fff0c9;opacity:1;text-shadow:0 0 10px #fff,0 0 34px #d8aaff;transform:scale(1.16)}.phase3-timeline blockquote,.phase3-timeline>p{opacity:0;transform:translateY(10px);transition:opacity 1s ease,transform 1s ease}.phase3-timeline blockquote.visible,.phase3-timeline>p.visible{opacity:1;transform:none}.phase3-timeline blockquote{margin:52px 0 16px;color:#f5e8ff;font:400 clamp(20px,3vw,34px)/1.5 "STKaiti","KaiTi",serif;letter-spacing:.16em;text-shadow:0 0 18px rgba(220,177,255,.45)}.phase3-timeline>p{color:#aeb9dc;font-size:14px;letter-spacing:.1em}
.wish-scene{width:min(980px,95vw);opacity:0;transform:translateY(14px);transition:opacity 1.1s ease,transform 1.1s ease}.wish-scene.visible{opacity:1;transform:none}.wish-scene h2{margin:0 0 clamp(24px,4vh,42px);font-size:clamp(20px,2.8vw,31px);font-weight:350;letter-spacing:.1em}.wish-seeds{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(12px,2vw,22px)}.wish-seed{min-height:clamp(112px,17vh,155px);padding:18px 15px;border-radius:26px!important;background:radial-gradient(circle at 50% 48%,rgba(139,148,239,.2),rgba(26,31,78,.5))!important}.wish-seed i{display:block;margin-bottom:9px;color:#dcd8ff;font-style:normal;font-size:21px;text-shadow:0 0 14px #a596ff}.wish-seed span{display:block;color:#bbc7e6;font-size:clamp(12px,1.3vw,15px);line-height:1.8}.wish-seed.lit{border-color:rgba(255,236,191,.76)!important;background:radial-gradient(circle at 50% 45%,rgba(255,222,178,.28),rgba(119,105,213,.28))!important;box-shadow:0 0 18px rgba(255,255,255,.28),0 0 42px rgba(210,159,255,.28)!important}.wish-seed.lit i{color:#fff1b5;transform:scale(1.3)}.wish-seed.lit span{color:#f4f1ff}.wish-progress{margin:24px 0 0;color:#9baad3;font:400 12px/1 ui-monospace,monospace;letter-spacing:.18em}.wish-progress strong{color:#fff;font-size:17px}.wish-scene.complete .wish-seed{animation:wish-orbit-pulse 1.8s ease-in-out infinite}
.gift-scene{position:relative;width:min(760px,94vw);min-height:min(590px,78vh)}.gift-question{display:block;margin-top:4vh;color:#f4ebff;font:300 70px/1 Georgia,serif;opacity:0;transform:scale(.5);transition:opacity .8s ease,transform .8s ease}.gift-scene figure{position:absolute;left:50%;top:24%;width:clamp(150px,22vw,240px);aspect-ratio:1;margin:0;border-radius:48% 52% 47% 53%;overflow:hidden;opacity:0;transform:translate(-50%,20px) scale(.86);transition:opacity 1s ease,transform 1s ease;box-shadow:0 0 42px rgba(180,147,255,.28)}.gift-scene figure img{width:100%;height:100%;object-fit:cover}.gift-copy{position:absolute;top:64%;width:100%;color:#e9eaff;font-size:clamp(16px,2.2vw,23px);letter-spacing:.08em}.gift-copy p{margin:8px;opacity:0;transform:translateY(8px);transition:opacity .7s ease,transform .7s ease}.starlight-gift{position:absolute!important;left:50%;bottom:0;min-width:230px;padding:14px 24px;border-radius:18px!important;opacity:0;transform:translate(-50%,15px)!important}.starlight-gift i{margin-right:8px;color:#fff1b8;font-style:normal}.question-visible .gift-question,.cat-visible figure,.copy-visible .gift-copy p,.gift-visible .starlight-gift{opacity:1}.question-visible .gift-question{transform:none}.cat-visible figure{transform:translate(-50%,0) scale(1)}.copy-visible .gift-copy p{transform:none}.copy-visible .gift-copy p+ p{transition-delay:.35s}.gift-visible .starlight-gift{transform:translate(-50%,0)!important}.gift-visible .starlight-gift:hover,.gift-visible .starlight-gift.gesture-hover{transform:translate(-50%,-3px) scale(1.04)!important}
.final-letter-scene{width:min(760px,95vw);height:min(86vh,780px);opacity:0;transform:translateY(20px);transition:opacity 1.2s ease,transform 1.2s ease}.final-letter-scene.visible{opacity:1;transform:none}.final-letter-paper{position:relative;width:100%;height:100%;overflow:auto;padding:clamp(34px,5vw,62px) clamp(25px,6vw,74px) 92px;border:1px solid rgba(228,215,255,.45);border-radius:22px;background:linear-gradient(105deg,rgba(252,244,248,.96),rgba(235,237,255,.94)),repeating-linear-gradient(transparent 0 31px,rgba(111,133,189,.15) 32px 33px);background-blend-mode:multiply;color:#3e4265;box-shadow:0 30px 90px rgba(0,0,20,.52),0 0 50px rgba(194,164,255,.18);text-align:left;scrollbar-width:thin}.final-letter-paper::before{content:"✦　　　✧";position:absolute;right:28px;top:24px;color:rgba(144,112,183,.35);letter-spacing:.25em}.final-letter-paper h2{margin:0 0 34px;color:#55517a;font:500 clamp(23px,3.5vw,35px)/1.4 "STKaiti","KaiTi",serif;letter-spacing:.12em}.letter-lines p{display:none;margin:0 0 24px;white-space:normal;color:#484b68;font:400 clamp(14px,1.45vw,17px)/2 "STKaiti","KaiTi","Microsoft YaHei",serif;letter-spacing:.04em;opacity:0;transform:translateY(8px)}.letter-lines p.revealed{display:block;animation:letter-reveal .9s ease forwards}.final-letter-paper footer{display:none;margin:30px 0 8px;text-align:right;font-family:"STKaiti","KaiTi",serif;line-height:1.8}.final-letter-paper.fully-read footer{display:block}.final-letter-paper footer strong,.final-letter-paper footer time{display:block}.letter-continue{position:sticky!important;left:50%;bottom:4px;transform:translateX(-50%);padding:10px 20px;border-radius:999px!important;font-size:12px}.letter-continue:hover,.letter-continue.gesture-hover{transform:translateX(-50%) translateY(-2px) scale(1.03)!important}.final-letter-scene.folding{animation:letter-fold 1.45s cubic-bezier(.35,.02,.2,1) forwards}
.lighting-scene{width:min(760px,92vw);opacity:0;transition:opacity 1.2s ease}.lighting-scene.visible{opacity:1}.nineteen-lights{position:relative;width:min(66vw,560px);height:min(55vh,470px);margin:auto}.nineteen-lights i{position:absolute;left:50%;top:50%;width:8px;height:8px;border-radius:50%;background:#b9c9ff;transform:rotate(calc(var(--light-index)*18.947deg)) translateY(clamp(-230px,-25vh,-140px));box-shadow:0 0 10px #fff,0 0 24px #938cff;animation:final-light-breathe 2.8s ease-in-out infinite;animation-delay:calc(var(--light-index)*-.12s)}.lighting-scene p{margin:-5vh 0 16px;color:#ccd6f3;font-size:17px;letter-spacing:.16em}.lighting-button{padding:14px 28px;border-radius:999px!important;font-size:clamp(20px,3vw,30px);letter-spacing:.12em}.lighting-scene small{display:block;margin-top:18px;color:#91a1ce}.lighting-scene.lit .nineteen-lights i{background:#fff1bc;box-shadow:0 0 11px #fff,0 0 34px #e0a8ff;animation:light-burst 1.6s ease-out forwards}.lighting-scene.lit .lighting-button{filter:brightness(1.8);box-shadow:0 0 24px #fff,0 0 70px #c28cff}
.birthday-ending{width:min(830px,94vw);opacity:0;transition:opacity 1.2s ease}.birthday-ending.visible{opacity:1}.birthday-english{margin:0;color:#fff1c9;font:400 clamp(25px,4vw,48px)/1.2 Georgia,serif;letter-spacing:.08em;text-shadow:0 0 10px #fff,0 0 40px #c393ff}.birthday-ending h2{margin:18px 0 28px;color:#f9f5ff;font:500 clamp(33px,6vw,66px)/1.15 "STKaiti","KaiTi",serif;letter-spacing:.22em;opacity:0;transform:scale(.92);transition:opacity 1.2s ease,transform 1.2s ease;text-shadow:0 0 24px rgba(244,194,255,.6)}.birthday-ending.name-visible h2{opacity:1;transform:none}.ending-wish{margin:20px auto;color:#dfe2f4;font-size:clamp(15px,2vw,21px);line-height:1.9;letter-spacing:.08em;opacity:0;transform:translateY(10px);transition:opacity 1.1s ease,transform 1.1s ease}.first-visible .ending-wish.first,.second-visible .ending-wish.second{opacity:1;transform:none}.ending-wish.second{color:#f3e7ff}.ending-cat{display:flex;align-items:center;justify-content:center;gap:14px;margin:26px auto 0;opacity:0;transition:opacity 1s ease}.birthday-ending.cat-visible .ending-cat{opacity:1}.ending-cat img{width:54px;height:54px;object-fit:cover;border-radius:50%;border:1px solid rgba(255,255,255,.5);box-shadow:0 0 20px rgba(211,168,255,.35)}.ending-cat span{color:#bdc7e7;font-size:12px;line-height:1.7;text-align:left}.birthday-ending nav{display:flex;justify-content:center;gap:25px;margin-top:26px;opacity:0;transition:opacity 1s ease}.birthday-ending.controls-visible nav{opacity:1}.birthday-ending nav button{padding:4px 1px;border:0;border-bottom:1px solid transparent;border-radius:0;background:transparent;box-shadow:none;color:#9eacd2;font-size:12px;letter-spacing:.08em}.birthday-ending nav button:hover,.birthday-ending nav button.gesture-hover{transform:none;color:#fff;border-bottom-color:#d4c8ff;box-shadow:none;text-shadow:0 0 12px #998cff}
@keyframes phase3-nebula{to{transform:translate3d(3%,2%,0) scale(1.06)}}@keyframes secret-star-pulse{50%{transform:scale(1.15);filter:brightness(1.25)}}@keyframes memory-drift{0%{transform:translate3d(0,12vh,-120px) rotateY(8deg)}50%{opacity:.3}100%{transform:translate3d(0,-25vh,70px) rotateY(-8deg);opacity:.06}}@keyframes wish-orbit-pulse{50%{filter:brightness(1.28);transform:scale(.97)}}@keyframes letter-reveal{to{opacity:1;transform:none}}@keyframes letter-fold{0%{transform:scale(1);opacity:1}55%{transform:scale(.42,.08) rotate(3deg);opacity:.85}100%{transform:translateY(-35vh) scale(.04) rotate(22deg);opacity:0;filter:brightness(3)}}@keyframes final-light-breathe{50%{transform:rotate(calc(var(--light-index)*18.947deg)) translateY(clamp(-230px,-25vh,-140px)) scale(1.4)}}@keyframes light-burst{to{transform:rotate(calc(var(--light-index)*18.947deg)) translateY(clamp(-340px,-38vh,-210px)) scale(2);opacity:0}}
@media(max-width:700px){.phase-three-stage{padding:15px}.phase-three-memories figure{width:82px}.corridor-copy h2{font-size:25px}.corridor-copy small{padding:0 28px;line-height:1.7}.wish-seeds{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.wish-seed{min-height:105px;padding:10px 8px;border-radius:18px!important}.wish-seed span{font-size:11px;line-height:1.55}.wish-scene h2{font-size:18px;margin-bottom:18px}.final-letter-scene{height:88vh}.final-letter-paper{padding:34px 22px 84px}.birthday-ending nav{gap:16px;flex-wrap:wrap}.nineteen-lights{width:82vw}.gift-scene{min-height:70vh}.gift-copy{top:60%}}
@media(max-height:720px) and (min-width:701px){.wish-seed{min-height:100px}.wish-seed span{font-size:12px;line-height:1.55}.wish-scene h2{margin-bottom:18px}.gift-scene{min-height:560px}.final-letter-scene{height:90vh}}
@media(prefers-reduced-motion:reduce){.phase-three *{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.2s!important}}
