@property --c1{syntax: "<color>"; inherits: true; initial-value: #2a1050;}@property --c2{syntax: "<color>"; inherits: true; initial-value: #150a2b;}@property --c3{syntax: "<color>"; inherits: true; initial-value: #07040f;}:root{--font: "Be Vietnam Pro", "Segoe UI", Roboto, "Noto Sans", system-ui, sans-serif;--script: "Dancing Script", "Be Vietnam Pro", "Segoe UI", cursive, sans-serif;--pink: #ff5fa8;--pink-soft: #ffb4d6;--violet: #a35cff;--ink: #fff2fa;--glass: rgba(255, 255, 255, .09);--glass-line: rgba(255, 190, 225, .28);--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;min-height:100%;background:#07040f;color:var(--ink);font-family:var(--font)}body{overflow-x:hidden;-webkit-text-size-adjust:100%}button,input,textarea{font:inherit;color:inherit}button{cursor:pointer}img{max-width:100%}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.experience{position:fixed;inset:0;overflow:hidden;touch-action:manipulation;user-select:none;-webkit-user-select:none;--c1: #2a1050;--c2: #150a2b;--c3: #07040f;transition:--c1 1.6s ease,--c2 1.6s ease,--c3 1.6s ease}.bg-layer{position:absolute;inset:0;background:radial-gradient(120% 90% at 50% 38%,var(--c1) 0%,var(--c2) 48%,var(--c3) 100%)}.stage-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}.fallback-heart{position:absolute;left:50%;top:38%;transform:translate(-50%,-50%);font-size:min(60vw,320px);color:var(--pink);text-shadow:0 0 40px #ff3d9a,0 0 90px #c04fe8;animation:beat 1.2s ease-in-out infinite}@keyframes beat{0%,to{transform:translate(-50%,-50%) scale(1)}50%{transform:translate(-50%,-50%) scale(1.08)}}.scene-host{position:absolute;inset:0;pointer-events:none}.scene-host>*{pointer-events:none}.scene-host button,.scene-host input,.scene-host .overlay,.scene-host .letter-card,.scene-host .envelope{pointer-events:auto}.scene-host.leaving{animation:sceneOut .65s ease forwards}@keyframes sceneIn{0%{opacity:0;transform:scale(1.03)}to{opacity:1;transform:none}}@keyframes sceneOut{to{opacity:0;transform:scale(.98);filter:blur(6px)}}.scene{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;padding:calc(var(--safe-top) + 64px) 20px calc(var(--safe-bottom) + 22px)}.btn{appearance:none;border:0;border-radius:999px;padding:15px 28px;min-height:52px;min-width:52px;font-weight:700;font-size:17px;letter-spacing:.01em;display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;transition:transform .15s ease,opacity .5s ease,box-shadow .3s ease;touch-action:manipulation}.btn:active:not(:disabled){transform:scale(.96)}.btn:disabled{opacity:.5;cursor:default}.btn-primary{background:linear-gradient(135deg,#ff5fa8,#b24bf3);color:#fff;box-shadow:0 8px 30px #ff46a073,inset 0 1px #ffffff59}.btn-soft{background:var(--glass);color:var(--ink);border:1px solid var(--glass-line);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.btn-ghost{background:transparent;color:var(--pink-soft);opacity:0;pointer-events:none;font-weight:600}.btn-ghost.show{opacity:.95;pointer-events:auto}.btn-hero{background:linear-gradient(135deg,#ff4f9f,#a93bf0);color:#fff;font-size:clamp(18px,5vw,22px);padding:18px 34px;opacity:0;pointer-events:none;box-shadow:0 0 #ff64b499,0 12px 40px #ff3ca080,inset 0 1px #fff6}.btn-hero.show{opacity:1;pointer-events:auto;animation:pulseRing 2.2s ease-out infinite}.btn-hero:disabled{opacity:.55}.btn-heart{display:inline-block;animation:beat2 1.2s ease-in-out infinite}@keyframes beat2{0%,to{transform:scale(1)}50%{transform:scale(1.25)}}@keyframes pulseRing{0%{box-shadow:0 0 #ff64b48c,0 12px 40px #ff3ca080}70%,to{box-shadow:0 0 0 22px #ff64b400,0 12px 40px #ff3ca080}}.btn-hero.dissolve{animation:dissolve 1.1s ease-in forwards;pointer-events:none}@keyframes dissolve{0%{transform:scale(1);filter:blur(0);opacity:1}40%{transform:scale(1.12);opacity:.9}to{transform:scale(1.7);filter:blur(14px);opacity:0;letter-spacing:.2em}}.icon-btn{appearance:none;border:1px solid var(--glass-line);background:#14082873;color:var(--ink);width:44px;height:44px;border-radius:50%;font-size:20px;line-height:1;display:inline-flex;align-items:center;justify-content:center;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);transition:background .2s,transform .15s;touch-action:manipulation}.icon-btn:active:not(:disabled){transform:scale(.92)}.icon-btn:disabled{opacity:.35}.icon-btn.on{background:#ff5fa859}.music-btn.off{position:relative;opacity:.8}.music-btn.off:after{content:"";position:absolute;width:26px;height:2px;background:var(--pink-soft);transform:rotate(-45deg);border-radius:2px}.topbar{position:absolute;z-index:20;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:calc(var(--safe-top) + 10px) 12px 0;gap:6px;pointer-events:none}.topbar>*{pointer-events:auto}.topbar-group{display:flex;gap:8px;min-width:96px}.topbar-group:last-child{justify-content:flex-end}.dots{display:flex;gap:7px;align-items:center}.dot{width:8px;height:8px;border-radius:50%;background:#ffffff40;transition:all .4s}.dot.past{background:#ffa0d299}.dot.cur{width:22px;border-radius:6px;background:linear-gradient(90deg,#ff5fa8,#b24bf3);box-shadow:0 0 12px #ff5fa8cc}.panel{position:absolute;z-index:25;top:calc(var(--safe-top) + 62px);right:12px;width:min(300px,calc(100vw - 24px));background:#18082ceb;border:1px solid var(--glass-line);border-radius:20px;padding:14px;display:flex;flex-direction:column;gap:12px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 20px 60px #00000080;animation:sceneIn .25s ease both}.panel-row{display:flex;align-items:center;justify-content:space-between;gap:14px;font-size:15px;min-height:40px}.panel-row input[type=range]{flex:1;accent-color:#ff5fa8;min-width:110px;height:32px}.panel-check input{width:26px;height:26px;accent-color:#ff5fa8}.panel-btn{width:100%;font-size:15px;padding:11px 16px;min-height:46px}.panel-note{margin:0;font-size:13px;opacity:.75;line-height:1.45}.fp-scene{--pad: clamp(112px, min(33vw, 17vh), 140px);--px: 0;--py: 0;--prog: 0;justify-content:flex-start;overflow:hidden;pointer-events:auto;padding:calc(var(--safe-top) + 66px) 18px calc(var(--safe-bottom) + 10px)}.fp-sky{position:absolute;inset:-6%;pointer-events:none}.fp-aurora{position:absolute;inset:0;transform:translate3d(calc(var(--px) * -12px),calc(var(--py) * -9px),0);background:radial-gradient(60% 38% at 22% 18%,rgba(120,90,255,.36),transparent 70%),radial-gradient(55% 36% at 82% 34%,rgba(255,90,170,.28),transparent 70%),radial-gradient(75% 40% at 50% 100%,rgba(60,140,255,.24),transparent 70%)}.fp-aurora:after{content:"";position:absolute;inset:0;background:radial-gradient(50% 34% at 60% 22%,rgba(255,220,140,.18),transparent 70%);animation:auroraBreath 7s ease-in-out infinite alternate}@keyframes auroraBreath{0%{opacity:.2}to{opacity:1}}.fp-stars{position:absolute;inset:0;background-repeat:no-repeat;animation:twinkle 4.6s ease-in-out infinite alternate}.fp-stars-a{transform:translate3d(calc(var(--px) * -18px),calc(var(--py) * -14px),0);background-image:radial-gradient(1.6px 1.6px at 8% 14%,#fff,transparent),radial-gradient(1.2px 1.2px at 22% 38%,#ffd6f0,transparent),radial-gradient(1.8px 1.8px at 38% 9%,#fff,transparent),radial-gradient(1.2px 1.2px at 55% 26%,#e8d6ff,transparent),radial-gradient(1.6px 1.6px at 71% 12%,#fff,transparent),radial-gradient(1.2px 1.2px at 88% 30%,#ffd6f0,transparent),radial-gradient(1.4px 1.4px at 14% 62%,#fff,transparent),radial-gradient(1.6px 1.6px at 92% 66%,#fff,transparent),radial-gradient(1.2px 1.2px at 47% 84%,#e8d6ff,transparent),radial-gradient(1.4px 1.4px at 78% 90%,#fff,transparent)}.fp-stars-b{transform:translate3d(calc(var(--px) * -32px),calc(var(--py) * -24px),0);animation-delay:-2.3s;background-image:radial-gradient(2.4px 2.4px at 30% 22%,rgba(255,230,160,.95),transparent),radial-gradient(2.2px 2.2px at 64% 44%,rgba(255,190,235,.95),transparent),radial-gradient(2.6px 2.6px at 12% 78%,rgba(255,255,255,.9),transparent),radial-gradient(2.2px 2.2px at 84% 52%,rgba(200,170,255,.95),transparent),radial-gradient(2.4px 2.4px at 52% 70%,rgba(255,230,160,.9),transparent)}@keyframes twinkle{0%{opacity:.45}to{opacity:1}}.fp-beams{position:absolute;inset:0;opacity:.5;transform:translate3d(calc(var(--px) * -8px),0,0);background:repeating-linear-gradient(104deg,transparent 0 46px,rgba(255,205,240,.06) 70px,transparent 104px);-webkit-mask-image:radial-gradient(70% 55% at 50% 36%,#000,transparent 75%);mask-image:radial-gradient(70% 55% at 50% 36%,#000,transparent 75%)}.fp-mist{position:absolute;left:-10%;right:-10%;bottom:0;height:46%;opacity:.55;animation:mistDrift 16s ease-in-out infinite alternate;background:radial-gradient(60% 70% at 30% 90%,rgba(255,170,220,.22),transparent 70%),radial-gradient(60% 70% at 75% 100%,rgba(150,130,255,.22),transparent 70%)}@keyframes mistDrift{0%{transform:translate(-3%)}to{transform:translate(3%)}}@keyframes introIn{0%{opacity:0;transform:translateY(14px);filter:blur(8px)}to{opacity:1;transform:none;filter:blur(0)}}.fp-head{position:relative;z-index:3;text-align:center;transition:opacity .6s ease,transform .8s ease;flex:none}.fp-kicker{margin:0;font-size:12.5px;letter-spacing:.26em;text-transform:uppercase;color:#ffc8e6;opacity:0;animation:introIn 1.4s ease .3s forwards}.fp-name{margin:0;font-family:var(--script);font-size:clamp(54px,17vw,88px);font-weight:700;line-height:1.15;opacity:0;background:linear-gradient(180deg,#fff 8%,#ffb8de 58%,#d89bff);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 18px rgba(255,90,170,.75));animation:introIn 1.6s ease .7s forwards}.fp-teaser{margin:0 auto;max-width:19em;font-size:clamp(13.5px,3.8vw,16px);line-height:1.5;opacity:0;animation:introIn 1.6s ease 1.5s forwards;text-shadow:0 0 16px rgba(0,0,0,.55)}.fp-gate{position:relative;z-index:1;flex:1;min-height:0;width:100%;display:flex;justify-content:center;align-items:stretch;margin:10px 0 4px}.fp-arch{position:relative;height:100%;max-height:360px;aspect-ratio:.82;max-width:min(78vw,300px);overflow:hidden;align-self:center;transform:translate3d(calc(var(--px) * 7px),calc(var(--py) * 5px),0);border-radius:999px 999px 24px 24px;border:1.5px solid rgba(255,205,240,.36);background:linear-gradient(180deg,#7846dc4d,#220a4070 58%,#ff6ebe33);box-shadow:0 0 52px #aa5aff5c,inset 0 0 50px #ff78c83d;transition:transform 1.2s cubic-bezier(.2,.7,.2,1),filter 1.2s}.fp-arch-swirl{position:absolute;inset:-40%;opacity:.7;animation:spin 24s linear infinite;background:conic-gradient(from 0deg,transparent 0,rgba(255,140,210,.3) 12%,transparent 28%,rgba(150,120,255,.32) 50%,transparent 64%,rgba(255,226,140,.22) 82%,transparent 100%);-webkit-mask-image:radial-gradient(circle,#000 14%,transparent 60%);mask-image:radial-gradient(circle,#000 14%,transparent 60%)}@keyframes spin{to{transform:rotate(360deg)}}.fp-gate-heart{position:absolute;left:7%;top:8%;width:86%;height:78%;overflow:visible}.fp-gate-fill{fill:url(#fpGateG);opacity:calc(.12 + var(--prog) * .55);transition:opacity .2s}.fp-gate-line{fill:none;stroke:url(#fpGateG);stroke-width:1.3;stroke-linejoin:round;stroke-dasharray:100;stroke-dashoffset:calc(100 - var(--prog) * 100);filter:drop-shadow(0 0 3px #ff7ac0);opacity:.95}.fp-scene:not(.fp-holding):not(.fp-done) .fp-gate-line{animation:gateBreath 3.4s ease-in-out infinite}@keyframes gateBreath{0%,to{stroke-dashoffset:100;opacity:.25}50%{stroke-dashoffset:60;opacity:.9}}.fp-arch-date{position:absolute;left:0;right:0;bottom:7%;text-align:center;font-family:var(--script);font-size:clamp(30px,9vw,42px);font-weight:700;line-height:1;color:#fff0f8;text-shadow:0 0 14px #ff8cc8,0 0 34px #c04fe8;letter-spacing:.05em}.fp-done .fp-arch{transform:scale(1.08);filter:brightness(1.5) saturate(1.2)}.fp-done .fp-gate-fill{opacity:.95}.fp-done .fp-gate-line{stroke-dashoffset:0;animation:none}.fp-dock{position:relative;z-index:3;flex:none;display:flex;flex-direction:column;align-items:center;gap:6px;padding-bottom:clamp(10px,4vh,36px)}.fp-pad{--p: 0;position:relative;z-index:2;width:var(--pad);height:var(--pad);padding:0;border:0;border-radius:50%;flex:none;background:radial-gradient(circle at 50% 40%,#261242eb,#06020ef7 78%);box-shadow:0 0 0 1px #ffffff38,0 14px 38px #00000080,0 0 calc(22px + 56px * var(--p)) rgba(255,100,190,calc(.32 + .45 * var(--p)));cursor:pointer;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;outline:none;transition:transform .25s ease}.fp-pad:focus-visible{outline:3px solid #ffd27a;outline-offset:10px}.fp-pad:before,.fp-pad:after{content:"";position:absolute;inset:0;border-radius:50%;border:2px solid rgba(255,195,238,.6);opacity:0;pointer-events:none}.fp-nocanvas.fp-holding .fp-pad:before{animation:cssRing 1.6s ease-out infinite}.fp-nocanvas.fp-holding .fp-pad:after{animation:cssRing 1.6s ease-out .8s infinite}@keyframes cssRing{0%{transform:scale(1);opacity:.75}to{transform:scale(2.5);opacity:0}}.fp-pad-aura{position:absolute;inset:-18%;border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgba(255,120,200,.36),transparent 66%);animation:auraBreath 3.2s ease-in-out infinite}@keyframes auraBreath{0%,to{opacity:.35;transform:scale(.94)}50%{opacity:.85;transform:scale(1.06)}}.fp-holding .fp-pad{transform:scale(.97)}.fp-ring{position:absolute;left:-8px;top:-8px;width:calc(100% + 16px);height:calc(100% + 16px);pointer-events:none;overflow:visible}.fp-ring-track{fill:none;stroke:#ffd2f033;stroke-width:3.5}.fp-ring-prog{fill:none;stroke:url(#fpRingG);stroke-width:5;stroke-linecap:round;filter:drop-shadow(0 0 6px rgba(255,130,210,.9))}.fp-done .fp-ring-prog{stroke:#ffe58f;filter:drop-shadow(0 0 12px rgba(255,220,120,1))}.fp-print{position:absolute;left:50%;top:50%;width:70%;height:auto;transform:translate(-50%,-50%) rotate(-14deg);pointer-events:none;overflow:visible;filter:drop-shadow(0 0 calc(10px * var(--p)) rgba(255,140,210,.95))}.fp-holding .fp-print{animation:padShake .14s linear infinite}@keyframes padShake{0%,to{transform:translate(-50%,-50%) rotate(-14deg)}25%{transform:translate(calc(-50% + .6px),calc(-50% - .4px)) rotate(-14deg)}75%{transform:translate(calc(-50% - .6px),calc(-50% + .4px)) rotate(-14deg)}}.fp-ridges{stroke-width:2.1;stroke-linejoin:round}.fp-base{stroke:#ffffffe6;animation:ridgeBreath 3.2s ease-in-out infinite}@keyframes ridgeBreath{50%{opacity:.72}}.fp-lit{stroke:url(#fpLit);stroke-width:2.6}.fp-flow{stroke:#ffd0ec;stroke-width:2.6;opacity:0;transition:opacity .3s}.fp-flow path{stroke-dasharray:7 93;animation:ridgeRun 1.3s linear infinite}@keyframes ridgeRun{to{stroke-dashoffset:-100}}.fp-holding .fp-flow,.fp-done .fp-flow{opacity:.95}.fp-scanline{opacity:.3;animation:scan 2.8s ease-in-out infinite alternate}.fp-holding .fp-scanline{opacity:.95;animation-duration:1.1s}.fp-done .fp-scanline{opacity:0}@keyframes scan{0%{transform:translateY(0)}to{transform:translateY(152px)}}.fp-done .fp-base{stroke:#ffe9a8;animation:none}.fp-readout{position:absolute;left:0;right:0;bottom:9%;display:flex;flex-direction:column;align-items:center;gap:0;pointer-events:none;opacity:0;transition:opacity .3s;text-shadow:0 0 10px rgba(0,0,0,.7)}.fp-holding .fp-readout,.fp-early .fp-readout{opacity:1}.fp-pct{font-size:14px;font-weight:800;letter-spacing:.04em;font-variant-numeric:tabular-nums}.fp-sec{font-size:10.5px;opacity:.8;min-height:1.2em;font-variant-numeric:tabular-nums}.fp-instruction{position:relative;z-index:2;margin:6px 0 0;max-width:17.5em;text-align:center;font-weight:700;font-size:clamp(15px,4.2vw,18px);line-height:1.45;text-shadow:0 0 18px rgba(255,110,190,.7),0 2px 10px rgba(0,0,0,.6);transition:opacity .4s,color .3s;min-height:2.9em}.fp-instruction.warn{color:#ffd9a0}.fp-keyhint{position:relative;z-index:2;display:none;margin:0;font-size:12.5px;opacity:.6}@media(hover:hover)and (pointer:fine){.fp-keyhint{display:block}}.fp-recover{appearance:none;margin-top:4px;min-height:46px;padding:10px 20px;border-radius:999px;background:#ffffff1a;border:1px dashed var(--glass-line);color:var(--pink-soft);font-weight:600;font-size:14px}.fp-bottom{position:relative;z-index:3;display:flex;flex-direction:column;align-items:center;gap:2px;transition:opacity .5s;flex:none}.fp-note{margin:0;font-size:12.5px;opacity:.7;text-align:center}.fp-note-dim{opacity:.5;font-size:11.5px}.fp-ripples{position:absolute;inset:0;width:100%;height:100%;z-index:6;pointer-events:none;display:block}.fp-bloom{position:absolute;z-index:8;left:var(--bx, 50%);top:var(--by, 70%);width:60px;height:60px;margin:-30px 0 0 -30px;border-radius:50%;pointer-events:none;opacity:0;transform:scale(0);background:radial-gradient(circle,#fffffff5 0,#ffcdf0cc 32%,#be82ff73 56%,#be82ff00 72%);will-change:transform,opacity}.fp-bloom.on{animation:bloom 2.2s cubic-bezier(.22,.7,.2,1) .5s forwards}@keyframes bloom{0%{transform:scale(0);opacity:0}15%{opacity:1}60%{opacity:.95}to{transform:scale(64);opacity:0}}.fp-done .fp-head,.fp-done .fp-bottom{opacity:0}.fp-done .fp-head{transform:translateY(-10px)}.fp-done .fp-pad{transform:scale(1.06)}@media(max-height:700px){.fp-scene{padding-top:calc(var(--safe-top) + 64px)}.fp-teaser,.fp-note-dim{display:none}.fp-name{font-size:clamp(44px,14vw,70px)}.fp-instruction{min-height:2.4em}.fp-arch{max-height:240px}}@media(max-height:560px){.fp-kicker,.fp-arch,.fp-note{display:none}.fp-scene{--pad: clamp(96px, 30vh, 130px)}}@media(prefers-reduced-motion:reduce){.fp-stars,.fp-arch-swirl,.fp-mist,.fp-aurora:after,.fp-pad-aura,.fp-base,.fp-scanline,.fp-flow path,.fp-holding .fp-print,.fp-gate-line{animation:none!important}.fp-flow path{stroke-dasharray:none}.fp-bloom.on{animation:bloomSoft 1.6s ease .4s forwards;width:200vmax;height:200vmax;margin:-100vmax 0 0 -100vmax;transform:scale(1)}@keyframes bloomSoft{0%{opacity:0}40%{opacity:.85}to{opacity:0}}}.scene-heart{justify-content:flex-end}.tap-hint{position:absolute;top:calc(var(--safe-top) + 74px);margin:0;font-size:14px;opacity:0;transition:opacity 1.2s;text-align:center}.tap-hint.show{opacity:.75;animation:hintFloat 2.4s ease-in-out infinite}@keyframes hintFloat{50%{transform:translateY(-4px)}}.heart-bottom{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;max-width:560px;padding-bottom:2vh}.heart-name{font-family:var(--script);font-size:clamp(54px,17vw,92px);font-weight:700;line-height:1.25;min-height:1.25em;opacity:0;background:linear-gradient(180deg,#fff,#ffb4dc 60%,#e08bff);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 18px rgba(255,90,170,.8));transform:scale(.85);transition:opacity 1.6s ease,transform 1.6s ease}.heart-name.show{opacity:1;transform:none}.heart-lines{min-height:5.4em;text-align:center}.heart-line{margin:0 0 4px;font-size:clamp(16px,4.4vw,20px);line-height:1.5;opacity:0;transform:translateY(8px);transition:opacity 1.4s ease,transform 1.4s ease;text-shadow:0 0 14px rgba(0,0,0,.5)}.heart-line.show{opacity:.95;transform:none}.heart-line:last-child{font-weight:700;color:#ffd0e8}.floating-photos{position:absolute;inset:0;pointer-events:none;perspective:900px}.float-photo{position:absolute;left:0;top:0;width:clamp(62px,18vw,100px);aspect-ratio:5 / 6;padding:0;border:2px solid rgba(255,255,255,.85);border-radius:14px;overflow:hidden;background:#2a1050;box-shadow:0 0 22px #ff64b48c,0 8px 24px #0006;pointer-events:auto;will-change:transform,opacity;opacity:0}.ph-tag{position:absolute;left:0;right:0;bottom:0;background:#000000a6;color:#ffe27a;font-size:9px;font-weight:800;text-align:center;padding:2px 0;letter-spacing:.06em}.ph-tag.big{position:static;font-size:12px;padding:4px 10px;border-radius:6px;display:inline-block;margin-top:8px}.fx{text-align:center;margin:0 auto}.fx-glow{font-size:clamp(30px,9vw,66px);font-weight:800;letter-spacing:.04em;line-height:1.3;text-wrap:balance;max-width:94vw;color:#fff;text-shadow:0 0 10px #ff8cc8,0 0 28px #ff3d9a,0 0 60px #c04fe8;animation:glowIn 1.4s ease both,glowPulse 2.4s ease-in-out 1.4s infinite}@keyframes glowIn{0%{opacity:0;transform:scale(.88);filter:blur(10px)}to{opacity:1;transform:none;filter:blur(0)}}@keyframes glowPulse{50%{text-shadow:0 0 14px #ffa6d6,0 0 38px #ff3d9a,0 0 80px #c04fe8}}.fx-type{font-family:var(--script);font-size:clamp(34px,10.5vw,68px);font-weight:700;line-height:1.3;max-width:94vw;color:#ffe3f2;text-shadow:0 0 18px rgba(255,100,180,.8);text-wrap:balance}.caret{display:inline-block;width:3px;height:.9em;margin-left:4px;background:#ffb4dc;vertical-align:-.1em;animation:blink 1s steps(2) infinite;box-shadow:0 0 10px #ff8cc8}.caret-done{animation:blink 1s steps(2) 3,fadeAway .4s 3s forwards}@keyframes blink{50%{opacity:0}}@keyframes fadeAway{to{opacity:0}}.fx-cine{font-size:clamp(30px,8.6vw,60px);font-weight:800;line-height:1.35;max-width:94vw;color:#fff;text-shadow:0 0 24px rgba(255,110,190,.85);text-wrap:balance}.fx-cine span{display:inline-block;opacity:0;filter:blur(12px);transform:translateY(18px) scale(1.5);animation:cineIn 1s cubic-bezier(.2,.7,.2,1) forwards;animation-delay:calc(var(--i) * 70ms + .2s)}@keyframes cineIn{to{opacity:1;filter:blur(0);transform:none}}.fx-ptext{position:relative;width:min(94vw,760px);height:clamp(130px,26vh,230px)}.ptext-date{height:clamp(170px,36vh,320px)}.ptext-canvas{position:absolute;inset:0;width:100%;height:100%}.ptext-solid{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:800;line-height:1.18;color:#fff;text-shadow:0 0 12px #ff8cc8,0 0 34px #ff3d9a;opacity:0;pointer-events:none}.ptext-solid.on{animation:solidIn 1s ease forwards,solidOut .9s ease var(--hold) forwards}@keyframes solidIn{0%{opacity:0}to{opacity:.92}}@keyframes solidOut{0%{opacity:.92}to{opacity:0}}.scene-greeting{justify-content:space-between}.greet-stage{flex:1;width:100%;display:flex;align-items:center;justify-content:center;margin-top:8vh}.greet-item{animation:fxIn .8s ease both,fxOut .7s ease-in var(--out-delay, 99s) forwards}.greet-final{animation:fxIn .8s ease both}@keyframes fxIn{0%{opacity:0}to{opacity:1}}@keyframes fxOut{to{opacity:0;transform:translateY(-14px) scale(1.04);filter:blur(6px)}}.greet-bottom{min-height:56px}.scene-memories{justify-content:flex-start}.mem-head{text-align:center}.mem-title{margin:0;font-family:var(--script);font-size:clamp(30px,8.6vw,50px);white-space:nowrap;font-weight:700;color:#ffd4ea;text-shadow:0 0 22px rgba(255,100,180,.75)}.mem-hint{margin:4px 0 0;font-size:14px;opacity:.75}.polaroid-board{position:relative;flex:1;width:min(100%,560px);margin:4px 0;perspective:1000px}.polaroid{position:absolute;width:clamp(78px,min(31vw,13.4vh),160px);padding:0;border:0;background:transparent;transform:translate(-50%,-50%) rotate(var(--rot));opacity:0;animation:polIn .9s cubic-bezier(.2,.8,.2,1) var(--d) forwards;touch-action:manipulation}.polaroid-inner{display:block;background:#fff8fb;padding:7px 7px 6px;border-radius:5px;box-shadow:0 10px 28px #00000080,0 0 24px #ff6ebe59;transform-style:preserve-3d;animation:polSway 7s ease-in-out infinite;animation-delay:var(--d);transition:transform .25s}.polaroid:active .polaroid-inner{transform:scale(.96)}.polaroid-img{display:block;position:relative;aspect-ratio:5 / 6;overflow:hidden;background:#2a1050}.polaroid-cap{display:block;min-height:1.6em;padding-top:5px;font-family:var(--script);font-size:clamp(12px,3.6vw,16px);font-weight:600;color:#6b2150;text-align:center;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes polIn{0%{opacity:0;transform:translate(-50%,-30%) rotate(calc(var(--rot) * 2)) scale(.6)}to{opacity:1;transform:translate(-50%,-50%) rotate(var(--rot))}}@keyframes polSway{0%,to{transform:rotateY(calc(var(--sway) * -1)) rotateX(2deg)}50%{transform:rotateY(var(--sway)) rotateX(-2deg)}}.mem-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;max-width:18em;gap:12px;font-size:19px;line-height:1.55}.mem-empty-heart{font-size:64px;color:var(--pink);text-shadow:0 0 30px #ff3d9a;animation:beat2 1.4s ease-in-out infinite}.fun-line{margin:4px 0 8px;font-size:clamp(16px,4.4vw,19px);text-align:center;min-height:1.6em;animation:introIn 1s ease both;text-shadow:0 0 14px rgba(0,0,0,.6)}.mem-bottom{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}.scene-letter{justify-content:center}.envelope{position:relative;width:min(82vw,340px);aspect-ratio:1.5;border:0;background:none;padding:0;perspective:900px;animation:floatY 3.6s ease-in-out infinite}@keyframes floatY{50%{transform:translateY(-10px)}}.envelope span{position:absolute;display:block}.env-back{inset:0;background:linear-gradient(135deg,#ffb8da,#ff7fbd);border-radius:12px;box-shadow:0 20px 50px #ff46a073,0 0 40px #ff6ebe59}.env-paper{inset:8% 8% 10%;background:#fff6fb;border-radius:6px;transition:transform .9s ease .25s}.env-front{inset:0;background:linear-gradient(135deg,#ff9fcb,#e86fb2);clip-path:polygon(0 0,50% 55%,100% 0,100% 100%,0 100%);border-radius:12px}.env-flap{left:0;right:0;top:0;height:58%;background:linear-gradient(180deg,#ff8cc4,#f06aaf);clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top;transition:transform .8s ease;border-radius:12px 12px 0 0}.env-seal{left:50%;top:52%;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#ff6f9f,#c2185b);color:#fff;font-size:28px;line-height:56px;text-align:center;box-shadow:0 4px 14px #00000059;animation:beat2 1.2s ease-in-out infinite;transition:opacity .4s}.env-hint{left:0;right:0;bottom:-44px;text-align:center;font-size:16px;opacity:.85}.envelope.opening .env-flap{transform:rotateX(180deg)}.envelope.opening .env-paper{transform:translateY(-34%)}.envelope.opening .env-seal,.envelope.opening .env-hint{opacity:0}.letter-card{width:min(94vw,560px);max-height:calc(100dvh - var(--safe-top) - var(--safe-bottom) - 100px);display:flex;flex-direction:column;border-radius:22px;overflow:hidden;background:linear-gradient(160deg,#fff9fc,#ffe9f4);color:#4a1636;box-shadow:0 24px 70px #0000008c,0 0 60px #ff6ebe59;animation:letterRise .9s cubic-bezier(.2,.8,.2,1) both}@keyframes letterRise{0%{opacity:0;transform:translateY(40px) scale(.9) rotateX(20deg)}to{opacity:1;transform:none}}.letter-body{flex:1;overflow-y:auto;padding:24px 22px 12px;-webkit-overflow-scrolling:touch;user-select:text;-webkit-user-select:text}.letter-to{margin:0 0 12px;font-family:var(--script);font-size:clamp(26px,7vw,32px);font-weight:700;color:#c2185b}.letter-p{margin:0 0 14px;font-family:var(--script);font-size:clamp(19px,5.1vw,24px);font-weight:600;line-height:1.5;color:#4a1636}.letter-sign{margin:6px 0 8px;font-family:var(--script);font-size:clamp(28px,8vw,36px);font-weight:700;color:#c2185b;text-align:right;animation:introIn 1.2s ease both}.letter-actions{padding:10px 16px 16px;display:flex;justify-content:center;gap:10px;background:linear-gradient(180deg,#ffe9f400,#ffe9f4 40%)}.letter-card .caret{background:#c2185b;box-shadow:none}.letter-card .btn-soft{color:#8a1a58;background:#c2185b17;border-color:#c2185b40}.scene-gift{justify-content:center}.gift-center{display:flex;flex-direction:column;align-items:center;gap:18px;text-align:center;margin-top:4vh}.giftbox{width:min(56vw,240px);height:auto;overflow:visible;filter:drop-shadow(0 0 30px rgba(255,90,170,.6));animation:floatY 3s ease-in-out infinite}@keyframes boxShake{0%,to{transform:none}15%{transform:translate(-8px) rotate(-4deg)}30%{transform:translate(8px) rotate(4deg)}45%{transform:translate(-7px) rotate(-3deg)}60%{transform:translate(7px) rotate(3deg)}80%{transform:scale(1.08)}}@keyframes lidPop{to{transform:translateY(-70px) rotate(-18deg);opacity:0}}.gift-teaser{margin:0;font-size:clamp(18px,5vw,23px);line-height:1.5;max-width:16em;text-shadow:0 0 20px rgba(255,110,190,.7)}.gift-after{width:100%;flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;animation:fxIn .9s ease both}.gift-confession{min-height:7.5em;text-align:center;margin-bottom:14px}.confess-line{margin:0 0 8px;opacity:0;transform:translateY(10px);transition:opacity 1.4s ease,transform 1.4s ease;text-shadow:0 0 16px rgba(0,0,0,.6)}.confess-line.show{opacity:1;transform:none}.confess-line.c0{font-size:clamp(17px,4.6vw,21px);line-height:1.5;max-width:18em;margin-left:auto;margin-right:auto}.confess-line.c1{font-family:var(--script);font-size:clamp(38px,11vw,60px);font-weight:700;color:#ffd0ea;text-shadow:0 0 22px #ff3d9a}.gift-actions{display:flex;flex-direction:column;align-items:center;gap:12px;opacity:0;transition:opacity 1.2s;text-align:center;padding-bottom:2vh}.gift-actions.show{opacity:1}.gift-afteropen{margin:0;font-size:16px;opacity:.85}.overlay{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;animation:fxIn .3s ease both}.overlay-bg{position:absolute;inset:0;background:#080312c7;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.album-panel{position:relative;width:min(96vw,620px);max-height:calc(100dvh - 40px);display:flex;flex-direction:column;background:#1e0a36eb;border:1px solid var(--glass-line);border-radius:24px;overflow:hidden}.album-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 8px 20px}.album-head h2{margin:0;font-family:var(--script);font-size:32px;color:#ffd4ea}.album-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px;padding:8px 14px 18px;overflow-y:auto;-webkit-overflow-scrolling:touch}.album-thumb{position:relative;aspect-ratio:5 / 6;border:0;padding:0;border-radius:12px;overflow:hidden;background:#2a1050}.viewer{flex-direction:column;touch-action:pan-y}.viewer-fig{position:relative;margin:0;max-width:94vw;max-height:calc(100dvh - 150px);display:flex;flex-direction:column;align-items:center;animation:fxIn .35s ease both}.viewer-fig figcaption{margin-top:12px;font-family:var(--script);font-size:26px;font-weight:600;color:#ffd4ea;text-align:center}.viewer-bar{position:absolute;bottom:calc(var(--safe-bottom) + 22px);display:flex;align-items:center;gap:18px}.viewer-count{font-size:15px;opacity:.8;min-width:56px;text-align:center}.viewer-close{position:absolute;top:calc(var(--safe-top) + 14px);right:14px}.gate-card,.giftcard{position:relative;width:min(92vw,400px);padding:26px 22px 22px;text-align:center;border-radius:26px;display:flex;flex-direction:column;align-items:center;gap:12px;background:linear-gradient(160deg,#3c125af5,#220a3cf7);border:1px solid var(--glass-line);box-shadow:0 30px 80px #0009,0 0 60px #ff5aaa4d;animation:letterRise .6s cubic-bezier(.2,.8,.2,1) both}.gate-card[data-shake="1"]{animation:gateShake .45s ease both}@keyframes gateShake{20%{transform:translate(-10px)}40%{transform:translate(10px)}60%{transform:translate(-6px)}80%{transform:translate(6px)}}.gate-close{position:absolute;top:10px;right:10px;width:40px;height:40px;font-size:16px}.gate-lock{font-size:40px}.gate-title{margin:0;font-size:clamp(21px,5.6vw,25px);font-weight:800;line-height:1.3}.gate-sub{margin:0;opacity:.8;font-size:15px}.gate-big{margin:0;font-family:var(--script);font-size:clamp(30px,8vw,38px);font-weight:700;color:#ffd0ea;line-height:1.3}.gate-notready{display:flex;flex-direction:column;align-items:center;gap:12px;margin-top:4px}.gate-form{width:100%;display:flex;flex-direction:column;gap:10px}.gate-input-row{display:flex;gap:8px;align-items:center}.gate-input{flex:1;min-width:0;height:54px;border-radius:16px;border:1.5px solid var(--glass-line);background:#ffffff14;padding:0 16px;font-size:18px;color:#fff;outline:none;user-select:text;-webkit-user-select:text}.gate-input:focus{border-color:#ff8cc8;box-shadow:0 0 0 3px #ff6ebe4d}.gate-input[aria-invalid=true]{border-color:#ff6b8b}.gate-eye{width:54px;height:54px;border-radius:16px;flex:none}.gate-hint{margin:0;font-size:14px;opacity:.75}.gate-error{margin:0;min-height:1.4em;font-size:15px;color:#ffa3b9;opacity:0;transition:opacity .3s}.gate-error.show{opacity:1}.giftcard{gap:8px;overflow:hidden}.giftcard-glow{position:absolute;inset:-40% -20% auto;height:70%;background:radial-gradient(closest-side,rgba(255,90,170,.45),transparent);pointer-events:none}.giftcard-kicker{margin:0;font-family:var(--script);font-size:30px;font-weight:700;color:#ffd0ea;position:relative}.giftcard-label{margin:0 0 6px;font-size:20px;font-weight:800;position:relative}.giftcard-field{margin:8px 0 0;font-size:13px;letter-spacing:.08em;text-transform:uppercase;opacity:.7}.giftcard-code,.giftcard-serial{width:100%;padding:14px 12px;border-radius:14px;background:#00000059;border:1px dashed rgba(255,190,225,.5);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:700;letter-spacing:.08em;word-break:break-all;user-select:all;-webkit-user-select:all;position:relative}.giftcard-code{font-size:clamp(19px,5.6vw,24px);color:#fff6b0}.giftcard-serial{font-size:16px}.giftcard-note{margin:4px 0;font-size:15px;opacity:.9;line-height:1.5}.toast{margin:0;min-height:1.5em;font-size:15px;font-weight:700;color:#9cf5c1;opacity:0;transition:opacity .3s}.toast.show{opacity:1}.toast.bad{color:#ffd27a}.giftcard-closing{margin:6px 0 0;font-family:var(--script);font-size:30px;font-weight:700;color:#ffd0ea}.preview-tag{position:absolute;left:10px;bottom:calc(var(--safe-bottom) + 6px);z-index:30;padding:4px 8px;border-radius:6px;background:#ffe27aeb;color:#3a2a00;font-size:10px;font-weight:800;letter-spacing:.04em;pointer-events:none}.tools{min-height:100dvh;background:radial-gradient(120% 80% at 50% 0%,#2a1050,#0b0614 70%);padding-bottom:60px}.tools-nav{position:sticky;top:0;z-index:5;display:flex;gap:6px;padding:10px 12px;background:#0b0614d9;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);overflow-x:auto}.tools-nav a{color:var(--pink-soft);text-decoration:none;padding:9px 14px;border-radius:999px;font-weight:600;font-size:15px;white-space:nowrap}.tools-nav a.cur{background:#ff5fa840;color:#fff}.tool-section{max-width:640px;margin:0 auto;padding:22px 18px;display:flex;flex-direction:column;gap:14px}.tool-section h1{margin:0;font-family:var(--script);font-size:42px;color:#ffd4ea}.tool-section h2{margin:0 0 6px;font-size:18px}.tool-lead{margin:0;line-height:1.6;opacity:.88}.tool-links{display:flex;flex-direction:column;gap:10px}.tool-link{display:flex;flex-direction:column;gap:4px;padding:16px;border-radius:16px;background:var(--glass);border:1px solid var(--glass-line);color:inherit;text-decoration:none}.tool-link span{opacity:.75;font-size:14px}.tool-back{color:var(--pink-soft)}.tool-form{display:flex;flex-direction:column;gap:14px}.field{display:flex;flex-direction:column;gap:6px;font-size:14px}.field>span{opacity:.8;font-weight:600}.field input,.field textarea{background:#ffffff14;border:1.5px solid var(--glass-line);border-radius:14px;padding:13px 14px;font-size:16px;color:#fff;outline:none;width:100%}.field input:focus,.field textarea:focus{border-color:#ff8cc8}.swatches{display:flex;gap:12px}.swatch{width:48px;height:48px;border-radius:50%;border:3px solid transparent;box-shadow:0 0 0 1px var(--glass-line);padding:0}.swatch.cur{border-color:#fff;box-shadow:0 0 0 2px #ff5fa8}.tool-error{margin:0;padding:12px 14px;border-radius:12px;background:#ff5a7829;border:1px solid rgba(255,120,150,.45);color:#ffc2d0;line-height:1.5}.tool-note{margin:0;font-size:14px;opacity:.8;line-height:1.6}.qr-preview{display:flex;justify-content:center}.qr-canvas,.card-canvas{width:min(100%,420px);height:auto;border-radius:18px;box-shadow:0 20px 60px #00000080;background:#fff7fb}.card-canvas{width:min(100%,300px)}.card-preview{display:flex;justify-content:center}.verify{padding:14px;border-radius:16px;background:var(--glass);border:1px solid var(--glass-line)}.verify ul{margin:0 0 8px;padding-left:20px;line-height:1.8}.verify .good{color:#9cf5c1}.verify .bad{color:#ff9db3}.verify .warn{color:#ffd27a}.tool-actions{display:flex;gap:10px;flex-wrap:wrap}.file-btn{align-self:flex-start;cursor:pointer}.photo-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.photo-row{display:flex;gap:12px;padding:10px;border-radius:16px;background:var(--glass);border:1px solid var(--glass-line);align-items:center}.photo-row img{width:76px;height:76px;object-fit:cover;border-radius:10px;flex:none}.photo-fields{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}.photo-fields input{width:100%;background:#ffffff14;border:1.5px solid var(--glass-line);border-radius:10px;padding:9px 10px;font-size:15px;color:#fff}.photo-btns{display:flex;gap:8px}.photo-btns .icon-btn{width:40px;height:40px;font-size:17px}.bg-layer:after{content:"";position:absolute;inset:0;pointer-events:none;animation:twinkle 6s ease-in-out infinite alternate;background-image:radial-gradient(1.4px 1.4px at 12% 18%,rgba(255,255,255,.8),transparent),radial-gradient(1.2px 1.2px at 78% 12%,rgba(255,214,240,.8),transparent),radial-gradient(1.6px 1.6px at 90% 58%,rgba(255,255,255,.7),transparent),radial-gradient(1.2px 1.2px at 6% 72%,rgba(232,214,255,.8),transparent),radial-gradient(1.4px 1.4px at 44% 92%,rgba(255,255,255,.7),transparent),radial-gradient(1.2px 1.2px at 62% 6%,rgba(255,230,160,.8),transparent)}.bg-layer:before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(50% 30% at 85% 8%,rgba(255,150,215,.13),transparent 70%),radial-gradient(60% 34% at 8% 100%,rgba(110,120,255,.14),transparent 70%)}button:focus-visible,input:focus-visible,a:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:3px solid #ffd27a;outline-offset:3px}@media(hover:hover){.btn-primary:hover:not(:disabled),.btn-hero.show:hover:not(:disabled){filter:brightness(1.1) saturate(1.08);transform:translateY(-1px)}.btn-soft:hover:not(:disabled){background:#ffffff2b}.icon-btn:hover:not(:disabled){background:#ff5fa852}.polaroid:hover .polaroid-inner{transform:scale(1.05)}.album-thumb:hover{box-shadow:0 0 0 2px #ff8cc8,0 0 18px #ff6ebe99}.fp-pad:hover{box-shadow:0 0 0 1px #ffcdf080,0 18px 46px #00000080,0 0 70px #ff64be99}}.sf-img{width:100%;height:100%;object-fit:cover;object-position:50% 30%;display:block;transition:opacity .6s ease}.sf-loading{opacity:0}.sf-ok{opacity:1}.sf-err{display:none}.sf-fallback{position:absolute;inset:0;display:grid;place-items:center;font-size:30px;color:var(--pink);background:radial-gradient(circle,#43206e,#2a1050);text-shadow:0 0 18px #ff3d9a}.viewer-img{position:relative;display:flex;max-width:94vw;max-height:calc(100dvh - 210px);border-radius:12px;overflow:hidden;background:#2a1050;box-shadow:0 0 50px #ff5aaa73;min-width:160px;min-height:160px}.viewer-img .sf-img{width:auto;height:auto;max-width:94vw;max-height:calc(100dvh - 210px);object-fit:contain;object-position:center}@media(prefers-reduced-motion:reduce){.btn-hero.show,.envelope,.giftbox,.env-seal,.btn-heart,.tap-hint.show,.mem-empty-heart{animation:none}.polaroid-inner,.fx-glow{animation-iteration-count:1}}@media(min-aspect-ratio:1/1)and (max-height:520px){.scene{padding-top:calc(var(--safe-top) + 56px)}.greet-stage{margin-top:6vh}.heart-name{font-size:clamp(40px,9vh,64px)}}.experience:after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:radial-gradient(120% 90% at 50% 45%,transparent 58%,rgba(5,2,12,.42) 100%),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .5 0'/></filter><rect width='100%' height='100%' filter='url(%23n)' opacity='.5'/></svg>");background-size:auto,160px 160px;opacity:.55}.topbar,.panel,.scene-host,.overlay{z-index:2}.overlay{z-index:40}.topbar{z-index:12}.panel{z-index:13}.btn-primary{background:linear-gradient(135deg,#ff72b4,#c25ff0);box-shadow:0 10px 28px #ff50aa61,inset 0 1px #fff6,inset 0 -3px 8px #78147840}.btn-soft{background:#ffffff1a;border:1px solid var(--glass-line);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:inset 0 1px #ffffff1f}.btn.dim{opacity:.62}p,h1,h2,h3{text-wrap:pretty}.scene-host.entering{animation:sceneIn .9s ease both}.scene-host.sc-heart.entering{animation:enterRise 1.3s cubic-bezier(.2,.7,.2,1) both}.scene-host.sc-greeting.entering{animation:enterZoom 1.1s cubic-bezier(.2,.7,.2,1) both}.scene-host.sc-memories.entering{animation:enterSlide 1.1s cubic-bezier(.2,.7,.2,1) both}.scene-host.sc-journey.entering{animation:enterIris 1.5s cubic-bezier(.3,.6,.2,1) both}.scene-host.sc-letter.entering{animation:enterRise 1.2s cubic-bezier(.2,.7,.2,1) both}.scene-host.sc-gift.entering{animation:enterZoom 1.2s cubic-bezier(.2,.7,.2,1) both}.scene-host.sc-finale.entering{animation:enterIris 1.8s cubic-bezier(.3,.6,.2,1) both}@keyframes enterRise{0%{opacity:0;transform:translateY(6vh) scale(1.02);filter:blur(10px)}to{opacity:1;transform:none;filter:blur(0)}}@keyframes enterZoom{0%{opacity:0;transform:scale(.9);filter:blur(12px)}to{opacity:1;transform:none;filter:blur(0)}}@keyframes enterSlide{0%{opacity:0;transform:translate(10vw) rotate(1.2deg);filter:blur(8px)}to{opacity:1;transform:none;filter:blur(0)}}@keyframes enterIris{0%{opacity:0;clip-path:circle(0% at 50% 58%)}25%{opacity:1}to{opacity:1;clip-path:circle(150% at 50% 58%)}}.scene-journey{justify-content:flex-start;gap:6px}.jr-head{text-align:center;padding-top:4px}.jr-title{margin:0;font-family:var(--script);font-size:clamp(40px,12vw,58px);font-weight:700;line-height:1.15;background:linear-gradient(180deg,#fff,#ffc4e4 60%,#b7a2ff);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 16px rgba(160,140,255,.55))}.jr-hint{margin:2px auto 0;max-width:20em;font-size:15px;line-height:1.5;opacity:.85;min-height:3em;transition:color .6s}.is-done .jr-hint{color:#ffe3a6;opacity:1}.jr-field{position:relative;flex:none;width:min(88vw,44vh,420px);aspect-ratio:1;margin:2px auto 0}.jr-heart{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}.jr-track{fill:#ff82c80d;stroke:#ffcdee38;stroke-width:.55;stroke-dasharray:1.4 2.2;stroke-linejoin:round}.jr-line{fill:none;stroke:url(#jrG);stroke-width:1.15;stroke-linecap:round;stroke-linejoin:round;transition:stroke-dashoffset 1.1s cubic-bezier(.3,.6,.2,1);filter:drop-shadow(0 0 2.4px rgba(255,140,210,.95))}.is-done .jr-line{animation:lineGlow 2.6s ease-in-out infinite}@keyframes lineGlow{50%{stroke-width:1.6;filter:drop-shadow(0 0 4px rgba(255,220,140,1))}}.jr-star{position:absolute;width:58px;height:58px;margin:-29px 0 0 -29px;padding:0;border:0;border-radius:50%;background:radial-gradient(circle,rgba(255,220,245,.22),transparent 68%);display:grid;place-items:center;outline:none}.jr-star:focus-visible{outline:3px solid #ffd27a;outline-offset:2px}.jr-star-core{font-size:30px;line-height:1;color:#fff;text-shadow:0 0 10px #ff9fd0,0 0 24px #b07bff;animation:starPulse 2.4s ease-in-out var(--d, 0s) infinite}.jr-star.lit .jr-star-core{color:#ffe9a6;text-shadow:0 0 10px #ffd978,0 0 26px #ff9fd0,0 0 50px #ff6fb1;animation:starSteady 3.2s ease-in-out infinite;font-size:34px}.jr-star.cur{background:radial-gradient(circle,rgba(255,233,166,.38),transparent 70%)}@keyframes starPulse{0%,to{transform:scale(.85);opacity:.65}50%{transform:scale(1.2);opacity:1}}@keyframes starSteady{50%{transform:scale(1.1) rotate(8deg)}}.jr-card{position:relative;flex:1;min-height:0;width:min(100%,460px);margin:8px auto 0;display:flex;align-items:center;justify-content:center;padding:14px 20px;text-align:center;border-radius:22px;background:#ffffff12;border:1px solid var(--glass-line);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 14px 40px #0000004d,inset 0 1px #ffffff24}.jr-card-text{margin:0;font-size:clamp(16px,4.5vw,20px);line-height:1.6;animation:cardText .8s cubic-bezier(.2,.7,.2,1) both;text-shadow:0 0 14px rgba(0,0,0,.35)}.jr-card-empty{margin:0;letter-spacing:.5em;opacity:.5}@keyframes cardText{0%{opacity:0;transform:translateY(10px);filter:blur(6px)}to{opacity:1;transform:none;filter:blur(0)}}.jr-bottom{flex:none;padding-top:10px}.scene-finale{justify-content:flex-start;gap:10px;padding-top:calc(var(--safe-top) + 70px);overflow:hidden}.finale-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;display:block}.finale-stars{position:absolute;inset:0;pointer-events:none;z-index:0;animation:twinkle 5s ease-in-out infinite alternate;background-image:radial-gradient(1.6px 1.6px at 12% 12%,#fff,transparent),radial-gradient(2px 2px at 28% 30%,#ffe9a6,transparent),radial-gradient(1.4px 1.4px at 46% 8%,#fff,transparent),radial-gradient(2px 2px at 66% 20%,#ffd0ea,transparent),radial-gradient(1.6px 1.6px at 84% 10%,#fff,transparent),radial-gradient(1.4px 1.4px at 92% 34%,#d9c8ff,transparent),radial-gradient(1.8px 1.8px at 6% 40%,#ffe9a6,transparent)}.finale-head,.finale-card,.finale-tap,.finale-actions{position:relative;z-index:2}.finale-title{margin:0;text-align:center;font-family:var(--script);font-size:clamp(44px,13.5vw,72px);font-weight:700;line-height:1.15;background:linear-gradient(180deg,#fff 6%,#ffe3a1 45%,#ff9fd0);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 20px rgba(255,190,120,.55));animation:introIn 1.8s ease .2s both}.finale-card{width:min(100%,460px);margin-top:auto;padding:20px 22px 16px;border-radius:24px;background:#14082880;border:1px solid var(--glass-line);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 16px 50px #0006,inset 0 1px #ffffff24}.finale-line{margin:0 0 10px;font-size:clamp(16px,4.5vw,19px);line-height:1.65;opacity:0;transform:translateY(10px);filter:blur(5px);transition:opacity 1.2s ease,transform 1.2s ease,filter 1.2s ease}.finale-line.show{opacity:1;transform:none;filter:blur(0)}.finale-sign{margin:4px 0 0;text-align:right;font-family:var(--script);font-size:34px;font-weight:700;color:#ffd0e8;text-shadow:0 0 16px rgba(255,110,190,.7);opacity:0;transition:opacity 1.4s ease}.finale-sign.show{opacity:1}.finale-tap{margin:0;text-align:center;font-size:13px;opacity:0;transition:opacity 1.4s ease}.finale-tap.show{opacity:.65}.finale-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;padding-bottom:6px;opacity:0;transition:opacity 1.4s ease}.finale-actions.show{opacity:1}.finale-actions .btn{font-size:15px;padding:12px 18px;min-height:48px}.finale-actions:not(.show) .btn{pointer-events:none}.giftbox-btn{appearance:none;background:none;border:0;padding:0;display:block}.gift-preparing{margin:0;font-size:14.5px;opacity:.78;max-width:20em;line-height:1.5}.letter-actions{flex-wrap:wrap}.letter-actions .btn{font-size:15px;padding:12px 18px;min-height:48px}.album-head-actions{display:flex;align-items:center;gap:8px}.album-play{font-size:14px;padding:9px 14px;min-height:42px}.slide-progress{position:absolute;left:0;top:0;height:3px;width:100%;transform-origin:left;background:linear-gradient(90deg,#ff7ac0,#ffe08a);animation:slideBar linear forwards;z-index:3}@keyframes slideBar{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.viewer-fig.calm{animation:none}.viewer-bar{gap:12px}.seg{display:inline-flex;border:1px solid var(--glass-line);border-radius:999px;overflow:hidden}.seg button{appearance:none;border:0;background:transparent;padding:8px 16px;font-weight:700;font-size:14px;min-height:40px}.seg button.on{background:#ff5fa866;color:#fff}.draft-tag{position:fixed;left:10px;bottom:calc(var(--safe-bottom) + 10px);z-index:60;padding:8px 14px;border-radius:999px;background:#ffd25aeb;color:#3a2600;font-size:12.5px;font-weight:800;text-decoration:none}.editor{gap:12px;padding-bottom:150px}.ed-note{margin:0;font-size:13.5px;line-height:1.55;opacity:.8}.editor code{background:#ffffff1f;padding:1px 6px;border-radius:6px;font-size:.92em}.ed-group{border:1px solid var(--glass-line);border-radius:18px;background:#ffffff0d;padding:0 14px 6px}.ed-group>summary{cursor:pointer;padding:16px 2px;font-weight:800;font-size:17px;min-height:52px;list-style-position:inside}.ed-field{display:flex;flex-direction:column;gap:6px;margin:4px 0 14px;padding:0 0 0 10px;border:0;border-left:3px solid transparent;min-width:0}.ed-field.changed{border-left-color:#ffd27a}.ed-field.bad{border-left-color:#ff6a6a}.ed-label{font-size:14px;font-weight:700;color:#ffd4ea;display:flex;align-items:center;gap:8px;padding:0}.editor input[type=text],.editor textarea{width:100%;min-height:48px;padding:12px 14px;border-radius:14px;border:1px solid var(--glass-line);background:#0a041699;color:var(--ink);font-size:16px;line-height:1.5;resize:vertical;user-select:text;-webkit-user-select:text}.editor input:focus,.editor textarea:focus{outline:2px solid #ffd27a;outline-offset:1px}.ed-item{display:flex;gap:8px;align-items:flex-start;margin-bottom:8px}.ed-del{flex:none;width:44px;height:44px}.ed-add{align-self:flex-start;font-size:14px;padding:8px 16px;min-height:42px}.ed-err{color:#ff9a9a;font-size:13.5px;font-weight:600}.ed-thumb{width:34px;height:40px;object-fit:cover;border-radius:6px}.ed-tools{display:flex;flex-wrap:wrap;gap:8px}.ed-tools .btn{font-size:14.5px;padding:10px 16px;min-height:46px}.ed-import{display:flex;flex-direction:column;gap:8px;padding:12px;border-radius:16px;background:#ffffff0f;border:1px dashed var(--glass-line)}.ed-bar{position:fixed;left:0;right:0;bottom:0;z-index:20;padding:10px 14px calc(var(--safe-bottom) + 10px);background:#0b0614f0;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--glass-line);display:flex;flex-direction:column;gap:8px;align-items:center}.ed-status{margin:0;font-size:13.5px;text-align:center;max-width:640px;line-height:1.45;opacity:.9}.ed-status.ok{color:#aef0c2}.ed-status.bad{color:#ff9a9a}.ed-actions{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}.ed-actions .btn{font-size:15px;padding:11px 22px;min-height:48px}@media(max-height:700px){.jr-hint{min-height:2.4em}.jr-field{width:min(80vw,40vh)}}@media(min-width:900px)and (min-aspect-ratio:1/1){.scene{max-width:760px;margin:0 auto}.jr-field{width:min(60vh,440px)}}@media(prefers-reduced-motion:reduce){.scene-host.entering,.scene-host[class*=sc-].entering{animation:sceneInSoft .6s ease both}@keyframes sceneInSoft{0%{opacity:0}to{opacity:1}}.jr-star-core,.jr-line,.is-done .jr-line,.finale-stars,.jr-card-text,.slide-progress{animation:none!important}.finale-line,.finale-sign,.finale-tap,.finale-actions{transition:none}}.rise-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;display:block}.scene-gift>.gift-center,.scene-gift>.gift-after{position:relative;z-index:2}.giftbox-btn{position:relative}.giftbox-btn:before{content:"";position:absolute;left:50%;top:56%;width:190%;aspect-ratio:1;transform:translate(-50%,-50%) scale(.7);border-radius:50%;pointer-events:none;opacity:0;background:radial-gradient(circle,rgba(255,190,228,.55) 0%,rgba(214,120,255,.22) 38%,transparent 68%);animation:awaken 5.5s ease-out .3s forwards,awakenBreath 3.6s ease-in-out 5.8s infinite}@keyframes awaken{to{opacity:.85;transform:translate(-50%,-50%) scale(1)}}@keyframes awakenBreath{0%,to{opacity:.65;transform:translate(-50%,-50%) scale(.96)}50%{opacity:.95;transform:translate(-50%,-50%) scale(1.06)}}.giftbox{position:relative;z-index:1}.giftbox .gb-beam{opacity:0;transform-origin:100px 94px}.giftbox .gb-inner{opacity:0}.giftbox.shake{animation:boxShake .9s ease both}.giftbox.shake .gb-lid{animation:lidRattle .9s ease both}@keyframes lidRattle{0%,to{transform:none}30%{transform:translateY(-3px) rotate(-1.5deg)}55%{transform:translateY(-5px) rotate(1.5deg)}80%{transform:translateY(-8px)}}.giftbox.open{animation:none;filter:drop-shadow(0 0 46px rgba(255,130,210,.95))}.giftbox.open .gb-lid{animation:lidFly .9s cubic-bezier(.2,.8,.2,1) forwards}.giftbox.open .gb-beam{animation:beamUp 3.2s ease-out forwards}.giftbox.open .gb-inner{animation:innerFlash 3s ease-out forwards}@keyframes lidFly{0%{transform:none;opacity:1}to{transform:translate(34px,-170px) rotate(26deg);opacity:0}}@keyframes beamUp{0%{opacity:0;transform:scaleY(.2)}18%{opacity:1;transform:scaleY(1)}to{opacity:.35;transform:scaleY(1.05)}}@keyframes innerFlash{0%{opacity:0}15%{opacity:1}to{opacity:.6}}.gift-center.bursting .gift-teaser,.gift-center.bursting .btn-hero{opacity:0;transition:opacity .5s;pointer-events:none}.gift-center .gift-teaser,.gift-center .btn-hero{transition:opacity .5s}.gift-after{position:relative}.gift-after:before{content:"";position:absolute;inset:4% -8% -2%;z-index:-1;pointer-events:none;background:radial-gradient(70% 60% at 50% 42%,#1205248c,#12052400 78%)}.confess-line{text-shadow:0 0 18px rgba(0,0,0,.65),0 2px 14px rgba(0,0,0,.5)}.gift-afteropen,.gift-preparing{text-shadow:0 1px 12px rgba(0,0,0,.7)}@media(prefers-reduced-motion:reduce){.giftbox-btn:before{animation:none;opacity:.6;transform:translate(-50%,-50%) scale(1)}.giftbox.open .gb-lid{animation:none;opacity:0}}.gift-actions .btn-hero{font-size:16px;padding:14px 22px;min-height:52px;max-width:min(100%,340px);white-space:normal;line-height:1.3}.intro-music{position:absolute;z-index:12;top:calc(var(--safe-top) + 12px);right:12px}.music-btn{position:relative;width:48px;height:48px}.music-btn.on{background:#ff5fa859}.music-btn.off{opacity:.8}.music-btn.wait{animation:musicWait 1.6s ease-in-out infinite;width:auto;padding:0 14px 0 12px;gap:6px;border-radius:999px;background:#ffd25a47;border-color:#ffd778b3}.music-hint{font-size:13px;font-weight:800;color:#ffe9a6;white-space:nowrap}@keyframes musicWait{50%{box-shadow:0 0 0 8px #ffc85a2e}}.music-eq{position:absolute;right:7px;bottom:7px;display:flex;gap:1.5px;align-items:flex-end;height:9px}.music-eq i{width:2px;background:#ffe9a6;border-radius:1px;animation:eq .9s ease-in-out infinite}.music-eq i:nth-child(2){animation-delay:-.3s}.music-eq i:nth-child(3){animation-delay:-.6s}@keyframes eq{0%,to{height:3px}50%{height:9px}}@media(prefers-reduced-motion:reduce){.music-btn.wait,.music-eq i{animation:none}.music-eq i{height:6px}}.album-modes{align-self:center;margin:0 0 8px}.film{display:flex;gap:14px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;padding:10px calc(50% - 36vw) 18px;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;scrollbar-width:none;touch-action:pan-x}.film::-webkit-scrollbar{display:none}.film-card{position:relative;flex:none;width:min(72vw,300px);aspect-ratio:5 / 7;scroll-snap-align:center;border:2px solid rgba(255,255,255,.85);border-radius:18px;overflow:hidden;padding:0;background:#2a1050;box-shadow:0 0 30px #ff64b473,0 16px 36px #00000073;will-change:transform,opacity}.film-cap{position:absolute;left:0;right:0;bottom:0;padding:22px 12px 10px;font-family:var(--script);font-size:22px;text-align:center;background:linear-gradient(180deg,transparent,rgba(0,0,0,.7))}@media(min-width:700px){.film{padding:10px calc(50% - 150px) 18px}}.finale-recap{position:relative;z-index:2;list-style:none;margin:0;padding:0;display:flex;justify-content:center;gap:8px;flex-wrap:wrap;opacity:0;transition:opacity 1.4s ease}.finale-recap.show{opacity:1}.finale-recap li{display:flex;align-items:center;gap:6px;padding:6px 12px;font-size:12.5px;border-radius:999px;background:#ffffff14;border:1px solid var(--glass-line);animation:cardIn .6s ease both;animation-delay:calc(var(--i) * .12s)}.finale-recap li span{color:#ffd98a;text-shadow:0 0 8px #ff9fd0;font-size:15px}.qr-modal{padding:16px}.qr-card{position:relative;width:min(92vw,380px);padding:22px 20px;border-radius:24px;text-align:center;background:linear-gradient(165deg,#fff3f8,#ffd9ea);color:#5c1c3b;display:flex;flex-direction:column;align-items:center;gap:10px;box-shadow:0 30px 80px #0000008c;animation:paperIn .6s cubic-bezier(.2,.7,.2,1) both}.qr-title{margin:0;font-family:var(--script);font-size:34px}.qr-box{width:min(72vw,280px);min-height:40px}.qr-box .qr-canvas{width:100%;height:auto;border-radius:12px;display:block}.qr-note{margin:0;font-size:14px;line-height:1.5}.qr-note small{word-break:break-all;opacity:.7}.qr-card .btn-soft{color:#8a1a58;background:#c2185b17;border-color:#c2185b40}.scene-loading{position:absolute;inset:0;display:grid;place-items:center;font-size:15px;opacity:.75;pointer-events:none}.album-head h2{font-size:28px;white-space:nowrap}.album-play{white-space:nowrap}.intro-music{display:flex;gap:8px;align-items:center}.fs-btn{position:relative;width:48px;height:48px}.fs-btn.on{background:#ff5fa859}.fs-btn.wait{background:#ffd25a47;border-color:#ffd778b3;animation:musicWait 1.6s ease-in-out infinite}.fs-bubble{position:absolute;top:50%;right:calc(100% + 10px);transform:translateY(-50%);z-index:14;padding:8px 12px;border-radius:12px;background:#ffe296f5;color:#3a2600;font-size:12.5px;font-weight:800;white-space:nowrap;box-shadow:0 8px 24px #0006;pointer-events:none}.fs-bubble:after{content:"";position:absolute;top:50%;right:-6px;transform:translateY(-50%);border:6px solid transparent;border-right:0;border-left-color:#ffe296f5}@media(max-width:440px){.music-btn.wait .music-hint{display:none}.music-btn.wait{width:48px;padding:0}}@media(prefers-reduced-motion:reduce){.fs-btn.wait{animation:none}}@media(max-height:520px)and (min-aspect-ratio:1/1){.scene-journey{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto 1fr auto;column-gap:16px;align-items:center}.scene-journey .jr-head{grid-column:1 / -1}.scene-journey .jr-hint{min-height:0}.scene-journey .jr-field{grid-column:1;grid-row:2 / 4;width:min(40vh,100%);justify-self:center}.scene-journey .jr-card{grid-column:2;grid-row:2;margin:0;height:100%}.scene-journey .jr-bottom{grid-column:2;grid-row:3;padding-top:6px}.jr-title{font-size:32px}}@media(max-height:520px)and (min-aspect-ratio:1/1){.gift-center{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:6px 28px;margin-top:0;text-align:left}.gift-center .giftbox-btn{grid-row:1 / 3}.gift-center .giftbox{width:min(36vh,150px)}.gift-center .btn-hero{justify-self:start}.gift-after{max-height:100%;overflow-y:auto}}.polaroid-board.dense .polaroid{width:clamp(68px,min(28.5vw,11.4vh),148px)}.scene-letter>.env-wrap,.scene-letter>.letter-card{position:relative;z-index:2}.env-wrap{position:relative;display:grid;place-items:center;width:min(92vw,420px)}.env-aura{position:absolute;inset:-40% -20%;border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgba(255,170,220,.5),rgba(190,110,255,.18) 45%,transparent 68%);animation:awakenBreath 3.6s ease-in-out infinite}.env-rays{position:absolute;width:150%;aspect-ratio:1;pointer-events:none;opacity:.5;animation:spin 40s linear infinite;background:repeating-conic-gradient(from 0deg,rgba(255,220,240,.16) 0 4deg,transparent 4deg 22deg);-webkit-mask-image:radial-gradient(circle,#000 5%,transparent 55%);mask-image:radial-gradient(circle,#000 5%,transparent 55%)}.stage-opening .env-rays,.stage-cracking .env-rays{opacity:1;animation-duration:12s}.envelope{position:relative;z-index:1}.envelope:disabled{opacity:1}.env-seal{transition:transform .35s,opacity .35s}.envelope.cracking .env-seal{animation:sealCrack .75s ease forwards}@keyframes sealCrack{0%{transform:translate(-50%,-50%) scale(1)}30%{transform:translate(-50%,-50%) scale(1.25) rotate(-8deg);filter:brightness(1.6)}to{transform:translate(-50%,-50%) scale(1.8) rotate(14deg);opacity:0;filter:brightness(2) blur(4px)}}.env-burst{left:50%;top:50%;width:30px;height:30px;margin:-15px 0 0 -15px;border-radius:50%;pointer-events:none;opacity:0;border:3px solid rgba(255,235,250,.9);box-shadow:0 0 30px 8px #ffaadccc}.envelope.cracking .env-burst{animation:sealRing 1.2s ease-out forwards}@keyframes sealRing{0%{opacity:1;transform:scale(.4)}to{opacity:0;transform:scale(14)}}.env-orbit{left:50%;top:50%;width:7px;height:7px;margin:-3.5px;border-radius:50%;pointer-events:none;background:#fff;box-shadow:0 0 10px 3px #ffb7de,0 0 22px 6px #be78ffb3;animation:orbit 7s linear infinite}.env-o2{animation-duration:9.5s;animation-delay:-3s;background:#ffe9a6}.env-o3{animation-duration:12s;animation-delay:-6s}@keyframes orbit{0%{transform:rotate(0) translate(clamp(120px,40vw,190px)) scaleY(.55) rotate(0)}to{transform:rotate(360deg) translate(clamp(120px,40vw,190px)) scaleY(.55) rotate(-360deg)}}.letter-card{position:relative;max-height:calc(100dvh - var(--safe-top) - var(--safe-bottom) - 92px)}.letter-body{overscroll-behavior:contain;scroll-behavior:auto;padding-bottom:20px;outline:none}.letter-body:focus-visible{outline:2px solid rgba(194,24,91,.5);outline-offset:-4px}.letter-p{animation:cardText .9s ease both;text-wrap:pretty}.letter-follow{position:absolute;left:50%;transform:translate(-50%);bottom:78px;z-index:3;padding:8px 16px;border-radius:999px;border:0;background:#c2185beb;color:#fff;font-weight:700;font-size:14px;box-shadow:0 8px 22px #00000059}.letter-card .caret{width:3px;box-shadow:0 0 10px 2px #ff5aaab3}@media(prefers-reduced-motion:reduce){.env-aura,.env-rays,.env-orbit,.envelope.cracking .env-burst{animation:none}.env-orbit{display:none}}.scene-wish{justify-content:space-between;pointer-events:auto;padding-top:calc(var(--safe-top) + 76px);touch-action:manipulation;overflow:hidden}.wish-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;display:block}.wish-head,.wish-bottom{position:relative;z-index:2}.wish-head{text-align:center;pointer-events:none}.wish-title{margin:0;font-family:var(--script);font-size:clamp(40px,12vw,58px);font-weight:700;line-height:1.15;background:linear-gradient(180deg,#fff,#b9f5e6 45%,#ffb3dc);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 16px rgba(120,240,210,.45))}.wish-hint{margin:2px auto 0;max-width:20em;font-size:15px;line-height:1.5;opacity:.88;text-shadow:0 0 14px rgba(0,0,0,.55)}.is-done .wish-hint{color:#ffe3a6;opacity:1}.wish-bubble{position:absolute;z-index:3;margin:0;width:max-content;max-width:min(78vw,300px);transform:translate(-50%);padding:12px 18px;text-align:center;font-size:17px;line-height:1.5;font-weight:600;border-radius:18px;pointer-events:none;background:#14082c9e;border:1px solid rgba(255,220,240,.4);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 10px 34px #0006,0 0 28px #ff96d259;animation:wishIn 3.6s ease both}@keyframes wishIn{0%{opacity:0;transform:translate(-50%,14px) scale(.92);filter:blur(6px)}12%{opacity:1;transform:translate(-50%) scale(1);filter:blur(0)}82%{opacity:1}to{opacity:0;transform:translate(-50%,-10px)}}.wish-bottom{display:flex;flex-direction:column;align-items:center;gap:8px;padding-bottom:6px}.wish-count{margin:0;font-size:14px;letter-spacing:.06em;opacity:.85;font-variant-numeric:tabular-nums}.wish-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}.wish-actions .btn{font-size:15px;padding:12px 20px;min-height:48px}.scene-host.sc-wishes.entering{animation:enterIris 1.4s cubic-bezier(.3,.6,.2,1) both}@media(max-height:520px)and (min-aspect-ratio:1/1){.scene-wish{padding-top:calc(var(--safe-top) + 58px)}.wish-title{font-size:32px}.wish-hint{display:none}}@media(prefers-reduced-motion:reduce){.wish-bubble{animation-duration:4.2s}}.fp-holding .fp-arch,.fp-holding .fp-gate-heart{animation:portalBeat var(--beat, 1.2s) ease-in-out infinite}.fp-holding .fp-arch-swirl{animation-duration:9s}@keyframes portalBeat{0%,to{scale:1}14%{scale:1.03}28%{scale:1}42%{scale:1.048}70%{scale:1}}@media(prefers-reduced-motion:reduce){.fp-holding .fp-arch,.fp-holding .fp-gate-heart{animation:none}}.jr-card-row{display:flex;align-items:center;gap:14px;width:100%}.jr-photo{position:relative;flex:none;width:84px;height:108px;padding:0;border:2px solid rgba(255,255,255,.85);border-radius:14px;overflow:hidden;background:#2a1050;box-shadow:0 0 26px #ff82c88c;animation:photoReveal 1.5s cubic-bezier(.2,.7,.2,1) both}.jr-photo img{width:100%;height:100%;object-fit:cover;object-position:50% 30%;display:block;animation:photoFocus 1.5s ease-out both}.jr-photo-sheen{position:absolute;inset:0;background:linear-gradient(105deg,transparent 30%,rgba(255,255,255,.75) 50%,transparent 70%);transform:translate(-120%);animation:sheen 1.4s ease .2s forwards;pointer-events:none}@keyframes photoReveal{0%{clip-path:circle(0% at 50% 50%);opacity:0}to{clip-path:circle(80% at 50% 50%);opacity:1}}@keyframes photoFocus{0%{filter:blur(14px) brightness(2.2) saturate(.4);transform:scale(1.25)}to{filter:none;transform:none}}@keyframes sheen{to{transform:translate(120%)}}.jr-card-row .jr-card-text{text-align:left;font-size:clamp(15px,4.1vw,18px)}@media(prefers-reduced-motion:reduce){.jr-photo,.jr-photo img,.jr-photo-sheen{animation:none}.jr-photo-sheen{display:none}}.scene-error{text-align:center;gap:10px}.err-title{margin:0;font-family:var(--script);font-size:38px;font-weight:700}.err-sub{margin:0;opacity:.85}.err-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:8px}.topbar-group{min-width:0}.dots{position:absolute;left:50%;transform:translate(-50%);top:calc(var(--safe-top) + 64px);gap:5px;pointer-events:none}.dot{width:6px;height:6px}.dot.cur{width:18px;border-radius:4px}.fp-quality{appearance:none;background:none;border:0;color:var(--pink-soft);font-size:13px;padding:8px 14px;min-height:40px;border-radius:999px;opacity:.85}.fp-quality strong{color:#ffe9a6}.fp-quality:hover{opacity:1}.battery-hint{position:absolute;z-index:25;left:12px;right:12px;bottom:calc(var(--safe-bottom) + 12px);display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;padding:12px 14px;border-radius:18px;background:#14082ceb;border:1px solid var(--glass-line);font-size:14px;line-height:1.4;box-shadow:0 12px 34px #00000080}.battery-hint .btn{font-size:14px;padding:8px 14px;min-height:40px}.env-back{background:linear-gradient(135deg,#ffc2de,#f58fc4 60%,#e66aaa);border:1px solid rgba(255,240,210,.55);box-shadow:0 22px 54px #ff46a073,0 0 44px #ff78c859,inset 0 0 30px #780a4640}.env-paper{background:repeating-linear-gradient(180deg,#fff8fc 0 24px,#f4d4e6 24px 25px);box-shadow:inset 0 0 18px #c2185b1f}.env-front{background:linear-gradient(135deg,#ffa8d0,#ea74b6 60%,#d95aa2);box-shadow:inset 0 1px #ffffff80}.env-flap{background:linear-gradient(180deg,#ff93c9,#f070b2);box-shadow:0 6px 12px #780a4638}.env-seal{background:radial-gradient(circle at 34% 28%,#ff8aa8 0,#d62d62 38%,#8d0f3a);box-shadow:0 6px 16px #3c001480,inset 0 2px 3px #ffbed28c,inset 0 -4px 7px #3c001473,0 0 0 4px #96143c59;text-shadow:0 1px 2px rgba(60,0,20,.6)}.env-hint{font-weight:700;text-shadow:0 0 14px rgba(255,110,190,.7),0 2px 8px rgba(0,0,0,.5)}.letter-card{min-height:min(62dvh,520px)}:root{--ease-out: cubic-bezier(.2, .7, .2, 1);--ease-io: cubic-bezier(.4, 0, .2, 1);--dur-1: .25s;--dur-2: .6s;--dur-3: 1.2s;--radius-card: 22px;--blur-glass: 12px;--shadow-lift: 0 14px 40px rgba(0, 0, 0, .35);--t1: #fff;--t2: #ffc4e4;--t3: #b7a2ff;--glow: rgba(255, 110, 190, .55)}.sc-heart{--t1: #fff;--t2: #ffc4e4;--t3: #c59bff;--glow: rgba(255, 110, 190, .6)}.sc-greeting{--t1: #fff7dc;--t2: #ffd98a;--t3: #ff9fd0;--glow: rgba(255, 200, 120, .55)}.sc-memories{--t1: #fff;--t2: #ffd9ec;--t3: #f3a6d0;--glow: rgba(255, 150, 210, .5)}.sc-journey{--t1: #fff;--t2: #cdd6ff;--t3: #ffd98a;--glow: rgba(150, 160, 255, .55)}.sc-wishes{--t1: #fff;--t2: #b9f5e6;--t3: #ffb3dc;--glow: rgba(120, 240, 210, .45)}.sc-letter{--t1: #fff6e6;--t2: #ffd0b8;--t3: #f08ab0;--glow: rgba(255, 170, 120, .5)}.sc-gift{--t1: #fff;--t2: #ffc4e4;--t3: #ffd98a;--glow: rgba(255, 130, 200, .6)}.sc-finale{--t1: #fff6d8;--t2: #ffd98a;--t3: #ff9fd0;--glow: rgba(255, 200, 120, .55)}.jr-title,.wish-title,.finale-title,.mem-title{background:linear-gradient(180deg,var(--t1),var(--t2) 55%,var(--t3));-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 16px var(--glow))}.scene-greeting{justify-content:flex-start}.scene-greeting>.greet-stage,.scene-greeting>.greet-bottom,.scene-greeting>.greet-badge{position:relative;z-index:2}.greet-halo{position:absolute;left:50%;top:50%;width:min(130vw,620px);aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;z-index:0;opacity:.8;animation:spin 36s linear infinite;background:conic-gradient(from 0deg,transparent 0,rgba(255,217,138,.22) 10%,transparent 26%,rgba(255,159,208,.2) 48%,transparent 62%,rgba(255,217,138,.18) 80%,transparent 100%);-webkit-mask-image:radial-gradient(circle,transparent 18%,#000 36%,transparent 66%);mask-image:radial-gradient(circle,transparent 18%,#000 36%,transparent 66%)}.greet-badge{align-self:center;margin-top:6px;padding:7px 20px;border-radius:999px;font-family:var(--script);font-size:26px;font-weight:700;letter-spacing:.08em;color:#fff3cf;border:1px solid rgba(255,217,138,.6);background:linear-gradient(180deg,#ffd98a2e,#ffd98a0a);box-shadow:0 0 24px #ffc87859,inset 0 0 14px #ffd98a2e;opacity:0;transform:translateY(-8px);transition:opacity 1.2s ease,transform 1.2s ease}.greet-badge.show{opacity:1;transform:none}.greet-stage{flex-direction:column;gap:14px;margin-top:0}.greet-orn{display:flex;align-items:center;gap:12px;width:min(76vw,300px);color:#ffd98a;opacity:.85}.greet-orn i{flex:1;height:1px;background:linear-gradient(90deg,transparent,rgba(255,217,138,.85),transparent)}.greet-orn b{font-size:16px;text-shadow:0 0 12px #ffb36b;animation:beat2 2.6s ease-in-out infinite}.greet-steps{list-style:none;margin:0 0 10px;padding:0;display:flex;gap:10px;justify-content:center}.greet-steps li{width:8px;height:8px;border-radius:2px;transform:rotate(45deg);background:#fff3;transition:all .6s}.greet-steps li.past{background:#ffd98a;box-shadow:0 0 10px #ffb36b}.greet-steps li.cur{background:#fff;box-shadow:0 0 14px #ffd98a,0 0 28px #ff9fd0;transform:rotate(45deg) scale(1.4)}@media(max-height:640px){.greet-orn{display:none}.greet-badge{font-size:22px}}@media(prefers-reduced-motion:reduce){.greet-halo,.greet-orn b{animation:none}}
