:root{--bg1:#0f0c29;--bg2:#302b63;--text:#fdf6ff;--muted:#c9b8e8;--accent:#ff7eb3;--gold:#ffd36e;--card:rgba(255,255,255,0.08);--card-border:rgba(255,255,255,0.18)}*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}body,html{height:100%}body{font-family:var(--font-sans),sans-serif;color:var(--text);background:radial-gradient(ellipse at top,var(--bg2),var(--bg1) 60%,#07051a);background-attachment:fixed;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none}.script{font-family:var(--font-script),cursive}.hidden{display:none!important}.stars{position:fixed;inset:0;pointer-events:none;z-index:0}.star{position:absolute;background:#fff;border-radius:50%;animation:twinkle 3s ease-in-out infinite}@keyframes twinkle{0%,to{opacity:.2}50%{opacity:1}}.firefly{position:absolute;width:5px;height:5px;margin:-2.5px 0 0 -2.5px;border-radius:50%;pointer-events:none;background:#f6ffcc;box-shadow:0 0 8px 3px rgba(214,255,120,.9),0 0 24px 10px rgba(190,255,90,.32);animation-name:firefly-drift,firefly-glow;animation-timing-function:ease-in-out,ease-in-out;animation-iteration-count:infinite,infinite;animation-direction:normal,alternate}@keyframes firefly-drift{0%,to{transform:translate(0)}25%{transform:translate(var(--x1),var(--y1))}50%{transform:translate(var(--x2),var(--y2))}75%{transform:translate(var(--x3),var(--y3))}}@keyframes firefly-glow{0%,20%{opacity:.08}to{opacity:1}}.shooting-star{position:absolute;height:2px;border-radius:999px;transform-origin:0 50%;opacity:0;pointer-events:none;background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,236,248,.35) 60%,#fff);animation:shoot ease-out forwards}.shooting-star:after{content:"";position:absolute;right:-2px;top:50%;width:5px;height:5px;margin-top:-2.5px;border-radius:50%;background:#fff;box-shadow:0 0 8px 3px rgba(255,220,240,.8),0 0 18px 6px rgba(255,126,179,.35)}@keyframes shoot{0%{opacity:0;transform:rotate(var(--angle)) translateX(0) scaleX(.3)}12%{opacity:1}70%{opacity:1}to{opacity:0;transform:rotate(var(--angle)) translateX(var(--dist)) scaleX(1)}}.confetti-canvas{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:50}.scene{position:fixed;inset:0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:24px 16px;opacity:0;visibility:hidden;transform:scale(.97);transition:opacity .8s ease,transform .8s ease,visibility .8s}.scene.active{opacity:1;visibility:visible;transform:none}h1{font-size:clamp(2.4rem,9vw,4rem);line-height:1.1;color:var(--gold);text-shadow:0 0 24px rgba(255,211,110,.35)}h1,h2{font-family:var(--font-script),cursive}h2{font-size:clamp(2rem,7vw,3rem);color:var(--accent);margin-bottom:8px;text-wrap:balance}.sub{color:var(--muted);font-weight:300;margin-top:10px;font-size:1rem;max-width:420px}.btn{margin-top:28px;padding:14px 32px;border:none;border-radius:999px;cursor:pointer;font:600 1rem var(--font-sans),sans-serif;color:#2a0d2e;background:linear-gradient(135deg,var(--gold),var(--accent));box-shadow:0 8px 30px rgba(255,126,179,.35);transition:transform .2s}.btn:active{transform:scale(.95)}.btn.ghost{background:transparent;color:var(--text);border:1px solid var(--card-border);box-shadow:none}.btn-row{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:26px}.btn-row .btn{margin-top:0}.hello{display:flex;flex-direction:column;align-items:center;margin-bottom:10px;animation:fade-up .8s ease-out .2s both}.hello-hey{font-size:.78rem;font-weight:500;letter-spacing:.45em;text-transform:uppercase;color:var(--muted);margin-right:-.45em}.hello-name{font-family:var(--font-script),cursive;font-weight:700;font-size:clamp(2.2rem,9vw,3rem);line-height:1.3;padding:.12em .25em .05em;background:linear-gradient(100deg,var(--gold) 0,var(--gold) 40%,#fff6d6 50%,var(--gold) 60%,var(--gold) 100%) 0 0 /250% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 14px rgba(255,211,110,.35));animation:name-shimmer 4.5s ease-in-out 1s infinite}.hello-line{display:flex;align-items:center}.hello-line .wave{display:inline-block;font-size:clamp(1.6rem,6.5vw,2.1rem);margin-left:2px;transform-origin:70% 80%;animation:wave 3.2s ease-in-out 1.2s infinite}@keyframes name-shimmer{0%{background-position:100% 0}45%,to{background-position:0 0}}@keyframes wave{0%,60%,to{transform:rotate(0)}10%,30%{transform:rotate(16deg)}20%,40%{transform:rotate(-8deg)}50%{transform:rotate(10deg)}}.tap-hint{position:absolute;bottom:28px;left:0;right:0;color:var(--muted);font-size:.85rem;animation:pulse 2s infinite}@keyframes pulse{0%,to{opacity:.4}50%{opacity:1}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.music-btn{position:fixed;top:14px;right:14px;z-index:60;width:44px;height:44px;border-radius:50%;border:1px solid var(--card-border);background:var(--card);color:var(--text);font-size:1.2rem;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.music-btn.nudge{animation:nudge 1.6s ease-in-out infinite}@keyframes nudge{0%,to{transform:scale(1);box-shadow:0 0 0 0 rgba(255,126,179,.5)}50%{transform:scale(1.08);box-shadow:0 0 0 10px rgba(255,126,179,0)}}.countdown{display:flex;gap:12px;margin-top:24px}.countdown div{background:var(--card);border:1px solid var(--card-border);border-radius:16px;padding:14px 10px;min-width:76px}.countdown b{display:block;font-size:2rem;font-weight:600}.countdown span{font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:1px}.lock-icon{font-size:3.5rem;margin-bottom:12px;animation:float 3s ease-in-out infinite}.day-card{margin-top:16px;width:min(320px,86vw);cursor:pointer;outline:none;text-align:center}.day-inner{display:grid;min-height:96px}.day-back,.day-front{grid-area:1/1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:14px 18px;border-radius:16px;border:1px solid var(--card-border);background:var(--card)}.day-front{font-weight:600;animation:note-glow 2.4s ease-in-out infinite alternate}.day-front small{color:var(--muted);font-weight:300;font-size:.8rem}.day-back{transform:scaleX(0);visibility:hidden;background:linear-gradient(135deg,rgba(255,126,179,.2),rgba(255,211,110,.16))}.day-back b{font-family:var(--font-script),cursive;font-size:1.35rem;color:var(--gold)}.day-back span{font-size:.92rem;line-height:1.35}.day-card.open .day-front{animation:note-shut .3s ease-in forwards}.day-card.open .day-back{visibility:visible;animation:note-open .35s cubic-bezier(.3,1.4,.5,1) .3s forwards}@keyframes note-shut{to{transform:scaleX(0);visibility:hidden}}@keyframes note-open{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes note-glow{0%{box-shadow:0 0 0 rgba(255,126,179,0)}to{box-shadow:0 0 22px rgba(255,126,179,.35)}}.game-buttons{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:16px}.game-buttons .btn{margin-top:0;padding:10px 18px;font-size:.9rem}.game{position:fixed;inset:0;z-index:40;background:radial-gradient(ellipse at top,var(--bg2),var(--bg1) 60%,#07051a)}.game-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none}.game-hud{position:absolute;top:22px;left:66px;right:74px;display:flex;justify-content:space-between;gap:10px;font-weight:600;font-size:.95rem;pointer-events:none;text-shadow:0 1px 6px rgba(0,0,0,.6)}.game-close{position:absolute;top:14px;left:14px;z-index:2;width:42px;height:42px;border-radius:50%;border:1px solid var(--card-border);background:var(--card);color:var(--text);font-size:1rem;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.game-panel{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:24px;background:rgba(10,8,30,.55)}.game-icon{font-size:3.4rem;margin-bottom:8px;animation:float 3s ease-in-out infinite}.game-toast{position:absolute;top:64px;left:16px;right:16px;text-align:center;pointer-events:none;font-family:var(--font-script),cursive;font-size:1.5rem;color:var(--gold);text-shadow:0 0 18px rgba(255,211,110,.5);animation:game-toast 2.8s ease forwards}@keyframes game-toast{0%{opacity:0;transform:translateY(10px)}12%,75%{opacity:1;transform:none}to{opacity:0;transform:translateY(-10px)}}.opener{position:relative;margin-top:18px}.opener-btn{display:block;padding:0;background:none;border:none;cursor:pointer;-webkit-tap-highlight-color:transparent;transform-origin:50% 100%}.opener:not(.opening) .opener-btn{animation:wiggle 2.2s infinite}.envelope-svg,.gift-svg{display:block;height:auto;overflow:visible;filter:drop-shadow(0 10px 30px color-mix(in srgb,var(--accent) 45%,transparent))}.gift-svg{width:min(180px,48vw)}.envelope-svg{width:min(210px,56vw)}.envelope-svg *,.gift-svg *{transform-box:fill-box}.ev-shake,.gb-beam,.gb-shake{transform-origin:50% 100%}.gb-beam{transform:scaleY(0)}.gb-beam,.gb-glow{opacity:0}.gb-bow{transform-origin:50% 100%}.opening .ev-shake,.opening .gb-shake{animation:op-shake .5s ease-in-out both}.opening .gb-bow{animation:op-bow .3s ease-out .28s both}.opening .gb-lid{animation:op-lid .8s cubic-bezier(.3,.6,.4,1) .5s both}.opening .gb-beam{animation:op-beam .6s ease-out .58s both}.opening .gb-glow{animation:op-fade-in .4s ease-out .55s both}.ev-flap{transform-origin:50% 0}.ev-flap-open{transform-origin:50% 100%;transform:scaleY(0)}.opening .ev-flap{animation:ev-close .2s ease-in .36s both}.opening .ev-flap-open{animation:ev-open .2s ease-out .55s both}.opening .ev-card{animation:ev-rise .38s cubic-bezier(.3,.8,.4,1) .62s both}@keyframes op-shake{0%,to{transform:none}15%{transform:rotate(-7deg) scale(1.04)}35%{transform:rotate(7deg) scale(1.06)}55%{transform:rotate(-5deg) scale(1.06)}75%{transform:rotate(3deg) scale(1.03)}}@keyframes op-bow{50%{transform:scale(1.22)}to{transform:scale(1.05)}}@keyframes op-lid{0%{transform:none}25%{transform:translateY(-30px) rotate(-6deg)}to{transform:translate(70px,-230px) rotate(38deg);opacity:0}}@keyframes op-beam{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes op-fade-in{0%{opacity:0}to{opacity:1}}@keyframes ev-close{to{transform:scaleY(0)}}@keyframes ev-open{0%{transform:scaleY(0)}to{transform:scaleY(1)}}@keyframes ev-rise{to{transform:translateY(-86px)}}.opener-sparks{position:absolute;left:50%;top:42%;width:0;height:0;pointer-events:none}.opener-sparks i{position:absolute;width:9px;height:9px;margin:-4.5px;border-radius:50%;opacity:0;background:radial-gradient(#fff,var(--gold) 55%,transparent 72%);animation:op-spark .9s ease-out calc(.58s + var(--d)) both}.opener.op-envelope .opener-sparks i{animation-delay:calc(.9s + var(--d))}@keyframes op-spark{0%{opacity:0;transform:translate(0) scale(.3)}15%{opacity:1}to{opacity:0;transform:translate(var(--dx),var(--dy)) scale(var(--s))}}.open-light{position:fixed;inset:0;z-index:5}@property --lr{syntax:"<length>";inherits:false;initial-value:0}.open-light.op-gift{pointer-events:none;background:radial-gradient(circle at var(--ox,50%) var(--oy,50%),#fffbea 0,#ffecc8 calc(var(--lr) * .45),color-mix(in srgb,var(--accent) 40%,#ffe9f0) var(--lr),transparent calc(var(--lr) * 1.25 + 40px));animation:op-light .85s cubic-bezier(.45,0,.7,.3) .9s forwards}@keyframes op-light{to{--lr:160vmax}}.open-light.op-envelope{inset:var(--ct,50%) var(--cr,50%) var(--cb,50%) var(--cl,50%);border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 45%,#fffaf3,#fff1e6 55%,color-mix(in srgb,var(--accent) 30%,#fff1e6));animation:op-card .75s cubic-bezier(.6,0,.3,1) 1.05s forwards}.open-light.op-envelope svg{width:100%;height:100%;max-width:560px}@keyframes op-card{to{inset:0;border-radius:0}}@media (prefers-reduced-motion:reduce){.opener-btn,.opening *{animation:none!important}.open-light{display:none}}@keyframes wiggle{0%,80%,to{transform:rotate(0)}85%{transform:rotate(-10deg)}90%{transform:rotate(10deg)}95%{transform:rotate(-6deg)}}.tree-scene{cursor:pointer;outline:none}.tree-canvas,.tree-scene{position:absolute;inset:0}.tree-canvas{width:100%;height:100%;display:block}.tree-wish{position:absolute;top:max(5vh,28px);left:16px;right:16px;display:flex;flex-direction:column;align-items:center;pointer-events:none;visibility:hidden}.tree-wish.in{visibility:visible}.tree-eyebrow,.tree-rule,.tree-sub{opacity:0;transform:translateY(12px);filter:blur(5px);transition:opacity .8s ease,transform .9s cubic-bezier(.2,.7,.2,1),filter .8s ease}.tree-eyebrow{color:var(--muted);font-style:italic;letter-spacing:.05em;font-size:clamp(.85rem,3.2vw,1.1rem)}.tree-hero{margin:2px 0 6px;-webkit-clip-path:inset(-20% 100% -30% -10%);clip-path:inset(-20% 100% -30% -10%)}.tree-rule{display:block;width:clamp(46px,13vw,110px);height:2px;background:linear-gradient(90deg,transparent,var(--gold),transparent);transform:translateY(12px) scaleX(.3)}.tree-sub{color:var(--text);font-weight:300;font-style:italic;font-size:clamp(.9rem,3.2vw,1.15rem);margin-top:8px}.tree-wish.in .tree-eyebrow,.tree-wish.in .tree-rule,.tree-wish.in .tree-sub{opacity:1;transform:none;filter:none}.tree-wish.in .tree-rule{transition-delay:1.35s}.tree-wish.in .tree-sub{transition-delay:1.55s}.tree-wish.in .tree-hero{animation:tree-write 1.2s cubic-bezier(.62,.04,.24,1) .35s forwards,tree-breath 4s ease-in-out 1.9s infinite}@keyframes tree-write{0%{-webkit-clip-path:inset(-20% 100% -30% -10%);clip-path:inset(-20% 100% -30% -10%)}to{-webkit-clip-path:inset(-20% -10% -30% -10%);clip-path:inset(-20% -10% -30% -10%)}}@keyframes tree-breath{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}.bouquet-scene{position:absolute;inset:0;cursor:pointer;outline:none;overflow:hidden}.bouquet{position:absolute;left:50%;bottom:44px;height:min(64vh,131vw,680px);aspect-ratio:400/525;transform:translateX(-50%);overflow:visible}.bouquet .sheet,.bouquet .wrap-l,.bouquet .wrap-r{transform-origin:200px 590px}.bouquet .band,.bouquet .knot,.bouquet .loop{transform-origin:200px 470px}.bouquet .tail{transform-origin:200px 476px}.bouquet .sway{transform-origin:200px 598px}.scene.active .bouquet .fly{animation:bq-fly .9s cubic-bezier(.2,.8,.25,1) var(--d) both}.scene.active .bouquet .spin{animation:bq-spin .9s cubic-bezier(.2,.8,.25,1) var(--d) both}.scene.active .bouquet .ring{animation:bq-bloom .75s cubic-bezier(.3,1.35,.5,1) both;animation-delay:calc(var(--d) + .35s + var(--k) * .09s)}.scene.active .bouquet .sprig{animation:bq-grow .8s ease-out var(--d) both}.scene.active .bouquet .pop{animation:bq-pop .6s cubic-bezier(.3,1.5,.5,1) var(--d) both}.scene.active .bouquet .s1{animation:bq-unfurl .7s cubic-bezier(.2,.9,.3,1) 2.6s both}.scene.active .bouquet .s2{animation:bq-unfurl .7s cubic-bezier(.2,.9,.3,1) 2.75s both}.scene.active .bouquet .s3{animation:bq-unfurl .7s cubic-bezier(.2,.9,.3,1) 2.9s both}.scene.active .bouquet .bed{animation:bq-fade 1.2s ease-out .9s both}@keyframes bq-fade{0%{opacity:0}to{opacity:1}}.scene.active .bouquet .wrap-l{animation:bq-wrap-l .75s cubic-bezier(.3,1.1,.4,1) 3.1s both}.scene.active .bouquet .wrap-r{animation:bq-wrap-r .75s cubic-bezier(.3,1.1,.4,1) 3.3s both}.scene.active .bouquet .band{animation:bq-band .4s ease-out 3.9s both}.scene.active .bouquet .knot{animation:bq-pop-abs .4s cubic-bezier(.3,1.6,.5,1) 4.05s both}.scene.active .bouquet .loop{animation:bq-pop-abs .55s cubic-bezier(.3,1.6,.5,1) 4.15s both}.scene.active .bouquet .tail{animation:bq-tail .5s ease-out 4.3s both}.scene.active .bouquet .sway{animation:bq-sway 5s ease-in-out 5s infinite}.scene.active .bouquet .glint{animation:bq-glint 2.8s ease-in-out infinite both}.bouquet.done :is(.fly,.spin,.ring,.sprig,.pop,.bed,.sheet,.wrap-l,.wrap-r,.band,.knot,.loop,.tail){animation:none!important}.scene.active .bouquet.done .sway{animation-delay:0s}@keyframes bq-fly{0%{transform:translate(var(--dx),var(--dy));opacity:0}35%{opacity:1}to{transform:none;opacity:1}}@keyframes bq-spin{0%{transform:rotate(var(--rot)) scale(.55)}to{transform:none}}@keyframes bq-bloom{0%{transform:scale(.25) rotate(-40deg)}to{transform:none}}@keyframes bq-grow{0%{transform:scale(0);opacity:0}to{transform:none;opacity:1}}@keyframes bq-pop{0%{transform:scale(0);opacity:0}to{transform:none;opacity:1}}@keyframes bq-pop-abs{0%{transform:scale(0)}to{transform:none}}@keyframes bq-unfurl{0%{transform:scale(.3,0);opacity:0}to{transform:none;opacity:1}}@keyframes bq-wrap-l{0%{transform:rotate(-42deg);opacity:0}40%{opacity:1}to{transform:none;opacity:1}}@keyframes bq-wrap-r{0%{transform:rotate(42deg);opacity:0}40%{opacity:1}to{transform:none;opacity:1}}@keyframes bq-band{0%{transform:scaleX(0)}to{transform:none}}@keyframes bq-tail{0%{transform:scaleY(0)}to{transform:none}}@keyframes bq-sway{0%,to{transform:rotate(-1.2deg)}50%{transform:rotate(1.2deg)}}@keyframes bq-glint{0%,to{opacity:0;transform:scale(.3) rotate(0deg)}50%{opacity:1;transform:scale(1) rotate(45deg)}}.bq-petal{position:absolute;top:-4%;width:11px;height:9px;border-radius:150% 0 150% 0;opacity:0;pointer-events:none}.scene.active .bq-petal{animation-name:bq-fall;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes bq-fall{0%{opacity:0;transform:translate(0) rotate(0deg)}8%{opacity:.9}50%{transform:translate(40px,55vh) rotate(260deg)}90%{opacity:.8}to{opacity:0;transform:translate(-10px,108vh) rotate(520deg)}}.lights:after{content:"";position:absolute;left:0;right:0;top:-20px;height:200px;pointer-events:none;background:radial-gradient(ellipse 48% 50% at 50% 38%,rgba(255,210,140,.16),transparent 100%)}.mem-dots{display:flex;gap:8px;justify-content:center;margin-top:-10px}.mem-dots button{width:8px;height:8px;padding:0;border:none;border-radius:50%;background:rgba(255,255,255,.3);cursor:pointer;transition:width .3s,background .3s}.mem-dots button.on{width:22px;border-radius:4px;background:var(--gold)}.swipe-hint{color:var(--muted);font-size:.8rem;letter-spacing:.1em;margin-top:8px;animation:swipe-nudge 1.6s ease-in-out infinite}@keyframes swipe-nudge{0%,to{transform:translateX(0);opacity:.5}50%{transform:translateX(10px);opacity:1}}.mem-hearts{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:-1}.mem-hearts span{position:absolute;bottom:-30px;color:rgba(255,126,179,.4);animation:heart-rise linear infinite}@keyframes heart-rise{0%{transform:translateY(0) rotate(-10deg);opacity:0}15%{opacity:1}to{transform:translateY(-105vh) rotate(15deg);opacity:0}}.mem-zoom{position:fixed;inset:0;z-index:70;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(8,6,24,.88);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:zoom-bg .3s ease}.mem-zoom figure{margin:0;max-width:min(960px,100%);background:#fffdf8;padding:10px 10px 14px;border-radius:6px;box-shadow:0 20px 60px rgba(0,0,0,.6);animation:zoom-in .35s cubic-bezier(.3,1.3,.5,1)}.mem-zoom img{display:block;width:100%;max-height:72vh;object-fit:contain}.mem-zoom figcaption{color:#3b3350;font-family:var(--font-script),cursive;font-size:1.6rem;text-align:center;margin-top:8px}.mem-zoom-close{position:absolute;top:14px;right:14px;width:42px;height:42px;border-radius:50%;border:1px solid var(--card-border);background:var(--card);color:var(--text);font-size:1rem;cursor:pointer}@keyframes zoom-bg{0%{opacity:0}}@keyframes zoom-in{0%{transform:scale(.85);opacity:0}}.rain-scene{cursor:pointer;outline:none;overflow:hidden}.rain-scene,.rain-sky{position:absolute;inset:0}.rain-sky{transition:opacity 1.4s ease}.rain-sky.storm{background:linear-gradient(#121726,#20283b 55%,#2a3248)}.rain-sky.dawn{background:linear-gradient(#1f2550,#4b4386 32%,#b0709a 58%,#f4a07a 76%,#ffd39a 88%);opacity:0}.rain-canvas{inset:0;width:100%;height:100%}.rain-canvas,.rain-storm,.scene-call{position:absolute;pointer-events:none}.rain-storm,.scene-call{top:max(5vh,28px);left:16px;right:16px;font-family:var(--font-script),cursive;font-size:clamp(1.7rem,7vw,2.4rem);color:var(--text);text-wrap:balance;text-shadow:0 2px 14px rgba(0,0,0,.5);animation:fade-up .9s ease-out .3s both}.rain-storm.out,.scene-call.out{animation:storm-out .7s ease forwards}@keyframes storm-out{0%{opacity:1}to{opacity:0;translate:0 -8px}}.is-preview .rain-storm,.is-preview .scene-call{top:calc(max(5vh, 28px) + 54px)}.rain-cloud{position:absolute;width:calc(clamp(130px, 38vw, 250px) * var(--s));pointer-events:none;filter:drop-shadow(0 8px 14px rgba(0,0,0,.35));animation:cloud-drift 7s ease-in-out calc(var(--i) * -1.3s) infinite alternate}.rain-cloud svg{display:block;width:100%;height:auto}.rain-cloud.nudge{animation:cloud-drift 7s ease-in-out calc(var(--i) * -1.3s) infinite alternate,cloud-nudge .6s ease-in-out calc(var(--i) * .12s) 2}.rain-cloud.poof{animation:cloud-poof .7s ease-out forwards}@keyframes cloud-drift{0%{transform:translateX(-10px)}to{transform:translateX(12px)}}@keyframes cloud-nudge{0%,to{translate:0 0}30%{translate:0 -6px}60%{translate:0 3px}}@keyframes cloud-poof{to{transform:translateY(-24px) scale(1.3);opacity:0;filter:blur(8px)}}.rain-sun{left:50%;bottom:12%;width:120px;height:120px;margin-left:-60px;opacity:0;background:radial-gradient(circle,#fffbe0 0,#ffe08a 45%,#ffb14e 100%);box-shadow:0 0 60px 20px rgba(255,200,110,.55),0 0 140px 60px rgba(255,170,110,.3);transform:translateY(140%)}.rain-sun,.rain-sun:before{position:absolute;border-radius:50%}.rain-sun:before{content:"";inset:-70px;background:repeating-conic-gradient(rgba(255,226,150,.22) 0 8deg,transparent 8deg 24deg);-webkit-mask:radial-gradient(circle,#000 30%,transparent 70%);mask:radial-gradient(circle,#000 30%,transparent 70%);animation:sun-rays 40s linear infinite}.clear .rain-sun{animation:sun-rise 1.6s cubic-bezier(.2,.8,.3,1) .2s forwards}@keyframes sun-rise{0%{opacity:0;transform:translateY(140%)}to{opacity:1;transform:none}}@keyframes sun-rays{to{transform:rotate(1turn)}}.rain-bow{position:absolute;left:50%;bottom:11%;width:min(120vw,760px);transform:translateX(-50%);overflow:visible}.rain-bow path{fill:none;stroke-width:9;opacity:.55;stroke-dasharray:1;stroke-dashoffset:1}.clear .rain-bow path{animation:bow-draw 1.6s ease-out forwards}@keyframes bow-draw{to{stroke-dashoffset:0}}.rain-hill{position:absolute;left:0;bottom:0;width:100%;height:16%}.rain-hill path{fill:#172019;transition:fill 1.6s ease}.clear .rain-hill path{fill:#2d5a39}.rain-flowers{position:absolute;left:0;right:0;bottom:5%;height:70px;pointer-events:none}.rain-flowers svg{position:absolute;bottom:0;overflow:visible}.rain-flowers svg *{transform-box:fill-box}.rf-stem{transform-origin:50% 100%;transform:scaleY(0)}.rf-head{transform-origin:50% 50%;transform:scale(0)}.clear .rf-stem{animation:rf-grow .7s ease-out forwards}.clear .rf-head{animation:rf-bloom .5s cubic-bezier(.3,1.6,.5,1) forwards}@keyframes rf-grow{to{transform:scaleY(1)}}@keyframes rf-bloom{to{transform:scale(1)}}@media (prefers-reduced-motion:reduce){.rain-cloud,.rain-cloud.nudge{animation:none}.rain-cloud.poof{animation:none;opacity:0}.clear .rain-bow path,.clear .rain-sun,.clear .rf-head,.clear .rf-stem{animation-duration:.01s;animation-delay:0s}}.diya-scene{cursor:pointer;outline:none;overflow:hidden}.diya-scene,.diya-warmth{position:absolute;inset:0}.diya-warmth{pointer-events:none;transition:opacity .8s ease;background:radial-gradient(ellipse at 50% 62%,rgba(255,160,60,.36),rgba(255,110,40,.12) 45%,transparent 75%)}.toran{position:absolute;top:0;left:0;width:100%;height:clamp(40px,10vw,70px);filter:drop-shadow(0 4px 6px rgba(0,0,0,.4))}.diya-ring{--R:min(36vw,21vh,180px);position:absolute;left:50%;top:62%;width:0;height:0}.rangoli{position:absolute;width:calc(var(--R) * 1.84);height:calc(var(--R) * 1.84);left:calc(var(--R) * -.92);top:calc(var(--R) * -.92);overflow:visible}.rg-layer{transform-box:fill-box;transform-origin:center;transform:scale(0) rotate(-40deg);opacity:0}.all-lit .rg-layer{animation:rg-bloom .7s cubic-bezier(.3,1.3,.5,1) forwards}@keyframes rg-bloom{to{transform:none;opacity:1}}.diya{position:absolute;width:clamp(50px,13vw,66px);left:calc(var(--x) * var(--R));top:calc(var(--y) * var(--R));transform:translate(-50%,-62%);pointer-events:none}.diya svg{position:relative;display:block;width:100%;height:auto;overflow:visible;filter:drop-shadow(0 5px 6px rgba(0,0,0,.45))}.diya svg *{transform-box:fill-box}.diya .flame{transform-origin:50% 100%;transform:scale(0);opacity:0}.diya.lit .flame{animation:flame-on .35s ease-out forwards,flicker .2s ease-in-out calc(.35s + var(--d)) infinite alternate}@keyframes flame-on{to{transform:scale(1);opacity:1}}.diya-glow{position:absolute;left:50%;top:16%;width:130%;aspect-ratio:1;border-radius:50%;opacity:0;pointer-events:none;background:radial-gradient(circle,rgba(255,210,110,.75),rgba(255,140,40,.25) 42%,transparent 70%);transform:translate(-50%,-50%) scale(.3);transition:opacity .5s ease,transform .5s ease}.diya.lit .diya-glow{opacity:1;transform:translate(-50%,-50%) scale(1.6);animation:diya-breathe 2.2s ease-in-out var(--d) infinite alternate}@keyframes diya-breathe{0%{transform:translate(-50%,-50%) scale(1.5)}to{transform:translate(-50%,-50%) scale(1.75)}}.diya.nudge:not(.lit) svg{animation:diya-nudge .5s ease-in-out var(--d) 2}@keyframes diya-nudge{50%{transform:translateY(-5px)}}@media (prefers-reduced-motion:reduce){.diya.lit .flame{animation:none;transform:none;opacity:1}.diya.lit .diya-glow,.diya.nudge svg{animation:none}.all-lit .rg-layer{animation-duration:.01s}}.ring-eyebrow{color:var(--muted);font-style:italic;letter-spacing:.04em;animation:fade-up .8s ease-out .2s both}.ring-hero{margin:4px 0 2px;animation:fade-up .9s ease-out .5s both}.ring-box{position:relative;width:min(250px,64vw);margin-top:6px;padding:0;background:none;border:none;cursor:pointer;-webkit-tap-highlight-color:transparent;animation:float 3.5s ease-in-out infinite}.ring-box svg{position:relative;display:block;width:100%;height:auto;overflow:visible;filter:drop-shadow(0 14px 26px rgba(0,0,0,.45))}.ring-box svg *{transform-box:fill-box}.rb-lid,.rb-lid-open{transform-origin:50% 100%}.rb-lid-open{transform:scaleY(0)}.rb-ring{transform-origin:50% 100%;transform:translateY(12px);opacity:0}.rb-glint{transform-origin:center;opacity:0}.ring-box.open .rb-lid{animation:rb-fold .26s ease-in forwards}.ring-box.open .rb-lid-open{animation:rb-raise .42s cubic-bezier(.3,1.3,.5,1) .22s forwards}.ring-box.open .rb-ring{animation:rb-rise .8s cubic-bezier(.3,1.2,.5,1) .45s forwards}.ring-box.open .rb-glint{animation:rb-glint 2.2s ease-in-out infinite}@keyframes rb-fold{to{transform:scaleY(0)}}@keyframes rb-raise{to{transform:scaleY(1)}}@keyframes rb-rise{to{transform:translateY(-6px);opacity:1}}@keyframes rb-glint{0%,to{opacity:0;transform:scale(.3)}50%{opacity:1;transform:scale(1) rotate(45deg)}}.ring-rays{position:absolute;left:50%;top:34%;width:340px;height:340px;margin:-170px 0 0 -170px;border-radius:50%;opacity:0;pointer-events:none;background:repeating-conic-gradient(rgba(255,226,160,.26) 0 7deg,transparent 7deg 22deg);-webkit-mask:radial-gradient(circle,#000 25%,transparent 68%);mask:radial-gradient(circle,#000 25%,transparent 68%)}.ring-box.open .ring-rays{animation:op-fade-in 1s ease-out .5s forwards,sun-rays 40s linear infinite}@media (prefers-reduced-motion:reduce){.ring-box,.ring-box.open .rb-glint{animation:none}.ring-box.open .rb-lid,.ring-box.open .rb-lid-open,.ring-box.open .rb-ring{animation-duration:.01s;animation-delay:0s}}.pb{left:50%;bottom:46px;width:min(94vw,600px);max-height:60vh;aspect-ratio:1;transform:translateX(-50%);pointer-events:none}.pb,.pb-glow{position:absolute}.pb-glow{inset:-6% -10% 4%;background:radial-gradient(closest-side,rgba(255,214,170,.34),rgba(255,150,170,.12) 55%,transparent 100%);opacity:0}.pb-sway{position:absolute;inset:0;transform-origin:50% 96%}.pb-img{width:100%;height:100%;object-fit:contain;object-position:50% 100%;display:block;opacity:0;filter:drop-shadow(0 18px 26px rgba(0,0,0,.5))}.pb-shine{position:absolute;inset:0;pointer-events:none;mask-size:contain;-webkit-mask-size:contain;mask-position:50% 100%;-webkit-mask-position:50% 100%;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;background:linear-gradient(105deg,transparent 38%,rgba(255,250,235,.42) 50%,transparent 62%) no-repeat;background-size:260% 100%;background-position:160% 0}.pb-sparkle{position:absolute;width:16px;height:16px;margin:-8px 0 0 -8px;opacity:0}.scene.active .pb-glow{animation:pb-glow 1.6s ease-out .2s forwards,pb-breathe 5s ease-in-out 1.8s infinite alternate}.scene.active .pb-img{animation:pb-rise 1.4s cubic-bezier(.2,.8,.25,1) .15s forwards}.scene.active .pb-shine{animation:pb-shine 1.6s ease-in-out 1.3s,pb-shine 1.6s ease-in-out 7s infinite}.scene.active .pb-sway{animation:pb-sway 6s ease-in-out 1.6s infinite}.scene.active .pb-sparkle{animation:bq-glint 2.8s ease-in-out infinite both}.pb.done .pb-glow,.pb.done .pb-img{animation-delay:0s;animation-duration:.01s}@keyframes pb-rise{0%{opacity:0;transform:translateY(60px) scale(.92)}to{opacity:1;transform:none}}@keyframes pb-glow{to{opacity:1}}@keyframes pb-breathe{0%{transform:scale(1)}to{transform:scale(1.05)}}@keyframes pb-shine{0%{background-position:160% 0}to{background-position:-60% 0}}@keyframes pb-sway{0%,to{transform:rotate(-1deg)}50%{transform:rotate(1deg)}}.rp{position:absolute;top:-40px;z-index:2;opacity:0;pointer-events:none}.rp img{display:block;width:100%;height:auto;filter:drop-shadow(0 3px 4px rgba(0,0,0,.35))}.scene.active .rp{animation:rp-fall var(--dur) linear var(--delay) infinite}.scene.active .rp img{animation:rp-flutter var(--flutter) ease-in-out var(--delay) infinite alternate}@keyframes rp-fall{0%{opacity:0;transform:translate(0) rotate(0)}6%{opacity:.95}50%{transform:translate(var(--drift),55vh) rotate(calc(var(--spin) * .5))}88%{opacity:.9}to{opacity:0;transform:translate(calc(var(--drift) * -.4),112vh) rotate(var(--spin))}}@keyframes rp-flutter{0%{transform:rotateX(0) rotateY(-25deg)}to{transform:rotateX(65deg) rotateY(25deg)}}.cake-wrap{position:relative;margin:36px 0 10px}.cake-wrap>.cake{z-index:1}.cake{width:280px;flex-direction:column;align-items:center}.cake,.candles{position:relative;display:flex}.candles{gap:16px;height:70px;align-items:flex-end;z-index:2;margin-bottom:-58px}.candle:after{content:"";position:absolute;left:-3px;right:-3px;bottom:-3px;height:6px;border-radius:50%;background:radial-gradient(closest-side,rgba(40,0,10,.45),transparent)}.candle{position:relative;width:12px;height:46px;border-radius:3px;background:linear-gradient(90deg,rgba(0,0,0,.18),transparent 35%,rgba(255,255,255,.4) 50%,transparent 65%,rgba(0,0,0,.2)),repeating-linear-gradient(45deg,#fff 0 6px,var(--accent) 6px 12px)}.candle:before{content:"";width:2px;height:6px;margin-left:-1px;border-radius:1px;background:#3a2a20}.candle:before,.flame{position:absolute;left:50%;bottom:100%}.flame{width:14px;height:24px;margin-left:-7px;margin-bottom:3px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;background:radial-gradient(ellipse at 50% 70%,#fff 0 20%,#ffe066 35%,#ff9a1f 70%,transparent 72%);box-shadow:0 0 20px 6px rgba(255,190,60,.55);transform-origin:50% 100%;animation:flicker .15s infinite alternate,flame-glow 1.5s ease-in-out infinite alternate;transition:opacity .4s}@keyframes flicker{0%{transform:scale(1) rotate(-2deg)}to{transform:scale(1.08,.94) rotate(2deg)}}.blown .flame{opacity:0;animation:none}.smoke{position:absolute;left:50%;bottom:100%;width:8px;height:8px;margin-left:-4px;border-radius:50%;background:rgba(220,220,220,.6);opacity:0}.blown .smoke{animation:smoke 1.8s ease-out forwards}@keyframes smoke{0%{opacity:.8;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-60px) scale(4)}}.cake-art{width:280px;height:auto;display:block;overflow:visible}.cake-art :is(.ck-stand,.ck-tier,.ck-drip,.ck-pipe,.ck-pearl,.ck-fruit,.ck-shine){transform-box:fill-box}.ck-stand,.ck-tier{transform-origin:50% 100%}.ck-drip{transform-origin:50% 0}.ck-pearl,.ck-pipe{transform-origin:50% 50%}.ck-text{font-family:var(--font-script),cursive;font-weight:700;font-size:25px;paint-order:stroke;stroke:rgba(255,255,255,.55);stroke-width:1.2px}.scene.active .ck-stand{animation:ck-rise .6s ease-out both}.scene.active .ck-tier-bottom{animation:tier-drop 1s cubic-bezier(.5,0,.5,1) .3s both}.scene.active .ck-tier-top{animation:tier-drop 1s cubic-bezier(.5,0,.5,1) 1.1s both}.scene.active .ck-tier-bottom .ck-drip{animation:ck-pour .7s ease-out 1.25s both}.scene.active .ck-tier-top .ck-drip{animation:ck-pour .7s ease-out 2s both}.scene.active .ck-pearl{animation:ck-pop .3s ease-out both;animation-delay:calc(1.9s + var(--i) * .02s)}.scene.active .ck-pipe{animation:ck-pop .35s cubic-bezier(.34,1.6,.6,1) both;animation-delay:calc(2.3s + var(--i) * .05s)}.scene.active .ck-text{animation:fade-up .6s ease-out 2.2s both}.scene.active .ck-fruit{animation:ck-drop .6s cubic-bezier(.34,1.4,.6,1) 3.1s both}.scene.active .ck-shine{animation:ck-shine 6s ease-in-out 4.4s infinite}@keyframes ck-rise{0%{opacity:0;transform:translateY(24px) scale(.9)}to{opacity:1;transform:none}}@keyframes ck-pour{0%{transform:scaleY(0)}to{transform:none}}@keyframes ck-pop{0%{transform:scale(0)}to{transform:none}}@keyframes ck-drop{0%{opacity:0;transform:translateY(-40px)}to{opacity:1;transform:none}}@keyframes ck-shine{0%{transform:translateX(0)}25%,to{transform:translateX(440px)}}@keyframes tier-drop{0%{opacity:0;transform:translateY(-340px)}10%{opacity:1}55%{transform:translateY(0) scale(1)}68%{transform:scale(1.05,.9)}82%{transform:scale(.99,1.03)}to{opacity:1;transform:none}}@keyframes fade-up{0%{opacity:0;translate:0 8px}to{opacity:1;translate:0 0}}.cake-glow{position:absolute;left:50%;top:-30px;width:340px;height:280px;margin-left:-170px;pointer-events:none;transition:opacity 1.4s ease}.cake-glow:before{content:"";position:absolute;inset:0;opacity:0;background:radial-gradient(closest-side at 50% 42%,rgba(255,205,120,.42),rgba(255,140,90,.14) 55%,transparent 100%)}.cake-wrap.blown .cake-glow{opacity:0}.glimmers{position:absolute;inset:-10px -40px 0;pointer-events:none;z-index:2}.glimmers i{position:absolute;bottom:18%;width:calc(5px * var(--s));height:calc(5px * var(--s));border-radius:50%;opacity:0;background:#fff6d6;box-shadow:0 0 6px 2px rgba(255,220,140,.7)}.burst{left:50%;top:22px;width:0;height:0;z-index:3;pointer-events:none}.burst,.burst i{position:absolute}.burst i{left:-1.5px;bottom:0;width:3px;height:36px;border-radius:2px;opacity:0;transform-origin:50% 100%;background:linear-gradient(0deg,transparent,#ffe08a);transform:rotate(var(--r)) translateY(-16px) scaleY(.2)}.cake.blown .burst i{animation:ray 1.1s ease-out forwards}@keyframes ray{0%{opacity:0;transform:rotate(var(--r)) translateY(-16px) scaleY(.2)}25%{opacity:1}to{opacity:0;transform:rotate(var(--r)) translateY(-56px) scaleY(1.3)}}.scene.active .cake-glow:before{animation:glow-in 1s ease-out 3.8s forwards,glow-flicker 2.4s ease-in-out 4.8s infinite alternate}.scene.active .glimmers i{animation:glimmer-rise var(--dur) ease-in var(--d) infinite}@keyframes glow-in{0%{opacity:0}to{opacity:1}}@keyframes glow-flicker{0%{opacity:1;transform:scale(1)}to{opacity:.8;transform:scale(1.04)}}@keyframes glimmer-rise{0%{opacity:0;transform:translateY(0)}20%{opacity:.95}to{opacity:0;transform:translateY(-170px)}}.scene.active .candle{animation:candle-drop .8s cubic-bezier(.34,1.3,.5,1) both;animation-delay:calc(3s + var(--i) * .15s)}@keyframes candle-drop{0%{opacity:0;translate:0 -320px}15%{opacity:1}70%{translate:0 8px}85%{translate:0 -4px}to{opacity:1;translate:0 0}}@keyframes flame-glow{0%{box-shadow:0 0 14px 4px rgba(255,190,60,.4)}to{box-shadow:0 0 26px 9px rgba(255,190,60,.65)}}.cake.windy .flame{animation:gust .09s infinite alternate}@keyframes gust{0%{transform:rotate(-20deg) scale(.9,.78)}to{transform:rotate(-9deg) scale(1.04,.9)}}.candle.out .flame{opacity:0;animation:none}.candle.out .smoke{animation:smoke 1.8s ease-out forwards}.mic-btn{margin-top:12px;padding:10px 22px;font-size:.9rem}.mic-btn:disabled{opacity:.65;cursor:default}.mic-meter{margin-top:16px;display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--muted);font-size:.9rem}.mic-meter .track{width:180px;height:6px;border-radius:3px;background:var(--card);overflow:hidden}.mic-meter .track i{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--accent));transform-origin:left;transition:transform .08s linear}.hold-btn{position:relative;overflow:hidden;touch-action:none}.hold-btn .fill{position:absolute;inset:0;background:rgba(255,255,255,.45);transform-origin:left}.hold-btn span{position:relative}.balloon-field{width:min(100%,520px);display:flex;flex-wrap:wrap;justify-content:center;gap:18px 22px;margin-top:26px}.balloon{position:relative;width:72px;height:90px;border:none;cursor:pointer;margin-bottom:40px;border-radius:50% 50% 48% 52%/55% 55% 45% 45%;background:radial-gradient(circle at 30% 28%,rgba(255,255,255,.65) 0 8%,transparent 22%),var(--c);box-shadow:inset -8px -10px 16px rgba(0,0,0,.18);animation:bob 3s ease-in-out infinite;animation-delay:var(--d);transition:transform .25s,opacity .25s}.balloon:before{bottom:-7px;margin-left:-6px;border:6px solid transparent;border-bottom:8px solid var(--c);transform:rotate(180deg)}.balloon:after,.balloon:before{content:"";position:absolute;left:50%}.balloon:after{top:100%;width:1px;height:44px;margin-top:6px;background:rgba(255,255,255,.4)}.balloon-slot{position:relative}.balloon.popped{pointer-events:none;animation:balloon-burst .16s ease-in forwards}.balloon.popped:after{opacity:0}@keyframes balloon-burst{0%{transform:scale(1)}55%{transform:scale(1.18,1.1);opacity:1}to{transform:scale(1.35);opacity:0}}.burst-fx{position:absolute;left:36px;top:45px;width:0;height:0;pointer-events:none;z-index:3}.burst-fx>*{position:absolute;left:0;top:0}.burst-flash{width:70px;height:70px;margin:-35px 0 0 -35px;border-radius:50%;background:radial-gradient(circle,#fff 0,rgba(255,255,255,.6) 35%,transparent 70%);animation:burst-flash .3s ease-out forwards}.burst-ring{width:40px;height:40px;margin:-20px 0 0 -20px;border-radius:50%;border:3px solid var(--c);animation:burst-ring .5s ease-out forwards}.shred{height:7px;margin:-3.5px 0 0 -5px;background:var(--c);border-radius:2px 60% 3px 50%;box-shadow:inset -2px -2px 3px rgba(0,0,0,.2);animation:shred-fly .9s cubic-bezier(.15,.7,.4,1) forwards}.burst-spark{width:5px;height:5px;margin:-2.5px 0 0 -2.5px;border-radius:50%;background:var(--c);box-shadow:0 0 6px var(--c);animation:spark-fly .6s ease-out forwards}.burst-heart{font-size:26px;line-height:1;margin:-13px 0 0 -13px;animation:burst-heart 1.1s ease-out forwards}.burst-string{width:1px;height:44px;margin:51px 0 0;background:rgba(255,255,255,.45);transform-origin:50% 0;animation:string-drop .9s ease-in forwards}@keyframes burst-flash{0%{transform:scale(.4);opacity:1}to{transform:scale(1.4);opacity:0}}@keyframes burst-ring{0%{transform:scale(.6);opacity:.9}to{transform:scale(3);opacity:0;border-width:1px}}@keyframes shred-fly{0%{transform:translate(0) rotate(0) scale(1);opacity:1}60%{transform:translate(var(--x),var(--y)) rotate(calc(var(--r) * .6)) scale(.9);opacity:1}to{transform:translate(calc(var(--x) * 1.15),calc(var(--y) + 60px)) rotate(var(--r)) scale(.7);opacity:0}}@keyframes spark-fly{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--x),var(--y)) scale(.3);opacity:0}}@keyframes burst-heart{0%{transform:scale(.2);opacity:0}25%{transform:scale(1.2);opacity:1}to{transform:translateY(-70px) scale(.9);opacity:0}}@keyframes string-drop{0%{transform:translateY(0) rotate(0);opacity:1}30%{transform:translateY(10px) rotate(14deg)}60%{transform:translateY(40px) rotate(-10deg)}to{transform:translateY(110px) rotate(6deg);opacity:0}}@keyframes bob{0%,to{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-14px) rotate(3deg)}}.popped-count{color:var(--muted);margin-top:6px;font-size:.9rem}.note-modal{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(8,5,25,.6);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);opacity:0;visibility:hidden;transition:.3s}.note-modal.show{opacity:1;visibility:visible}.note-card{background:#fff8f0;color:#3a2340;border-radius:18px;padding:30px 24px;max-width:360px;width:100%;box-shadow:0 20px 60px rgba(0,0,0,.4);transform:scale(.8);transition:transform .35s cubic-bezier(.2,1.6,.4,1)}.note-modal.show .note-card{transform:scale(1)}.note-card .emoji{font-size:2.2rem}.note-card p{font-family:var(--font-script),cursive;font-size:1.7rem;line-height:1.3;margin:10px 0 18px}.note-card .btn{margin-top:0}.lights{position:relative;width:100%;max-width:900px;height:40px;margin-top:14px}.lights svg{width:100%;height:100%}.bulbs,.lights svg{position:absolute;inset:0}.bulbs{display:flex;justify-content:space-around;padding:0 3%}.bulb{width:10px;height:16px;border-radius:50% 50% 50% 50%/40% 40% 60% 60%;background:var(--c);box-shadow:0 0 12px 3px var(--c);animation:twinkle 1.6s infinite;animation-delay:var(--d)}.gallery{--pw:min(300px,80vw);width:100%;max-width:900px;display:flex;gap:22px;overflow-x:auto;scroll-snap-type:x mandatory;padding:16px calc(50% - var(--pw) / 2) 30px;scrollbar-width:none}.gallery::-webkit-scrollbar{display:none}.polaroid{flex:0 0 var(--pw);scroll-snap-align:center;position:relative;cursor:pointer;outline:none;transform:scale(.88);opacity:.6;transition:transform .45s ease,opacity .45s ease}.polaroid.current{transform:none;opacity:1}.pol-inner{position:relative;background:#fffdf8;padding:10px 10px 42px;border-radius:4px;box-shadow:0 12px 24px rgba(0,0,0,.45),0 0 16px rgba(255,214,140,.1);transform:rotate(var(--r));transform-origin:50% -20px;animation:sway 4s ease-in-out infinite;animation-delay:var(--d)}.polaroid.current .pol-inner{box-shadow:0 12px 24px rgba(0,0,0,.5),0 0 18px rgba(255,214,140,.26)}@keyframes sway{0%,to{transform:rotate(var(--r))}50%{transform:rotate(calc(var(--r) * -1))}}.peg{top:-18px;width:12px;height:32px;margin-left:-6px;z-index:1;border-radius:3px 3px 2px 2px;background:linear-gradient(90deg,#a87848,#d9a86c 35%,#c8935a 50%,#d9a86c 65%,#a87848);box-shadow:0 2px 3px rgba(0,0,0,.35)}.peg,.peg:before{position:absolute;left:50%}.peg:before{content:"";top:2px;bottom:2px;width:1px;margin-left:-.5px;background:rgba(90,55,25,.55)}.peg:after{content:"";position:absolute;left:-2px;right:-2px;top:11px;height:4px;border-radius:2px;background:linear-gradient(#e4e4ea,#9a9aa6)}.polaroid img{width:100%;height:auto;max-height:320px;object-fit:cover;display:block;background:#eee;pointer-events:none;filter:brightness(1.7) contrast(.45) saturate(0) sepia(.25);transition:filter 2.6s ease-out .2s}.polaroid.developed img{filter:none}.polaroid .cap{position:absolute;bottom:8px;left:8px;right:8px;color:#3b3350;font-family:var(--font-script),cursive;font-size:1.3rem;line-height:1.15;text-align:center;opacity:0;transition:opacity 1s ease 1.8s}.polaroid.developed .cap{opacity:1}.envelope{position:relative;width:280px;height:180px;cursor:pointer;margin-top:104px;perspective:600px;background:none;border:none}.envelope .back{background:#e98aa8}.envelope .back,.envelope .front{position:absolute;inset:0;border-radius:8px}.envelope .front{z-index:3;background:linear-gradient(to top right,#f4a7bf 50%,transparent 50.5%) 0 /50% 100% no-repeat,linear-gradient(to top left,#f4a7bf 50%,transparent 50.5%) 100% /50% 100% no-repeat}.envelope .flap{position:absolute;left:0;right:0;top:0;height:100px;background:#d9728f;-webkit-clip-path:polygon(0 0,100% 0,50% 100%);clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top;transition:transform .6s;z-index:4}.envelope.open .flap{transform:rotateX(180deg);z-index:1}.envelope .seal{position:absolute;left:50%;top:78px;margin-left:-23px;width:46px;height:46px;z-index:5;display:flex;align-items:center;justify-content:center;border-radius:52% 48% 55% 45%/47% 55% 45% 53%;background:radial-gradient(circle at 35% 30%,#e0485f 0,#b3163a 45%,#7d0c26 100%);box-shadow:0 3px 6px rgba(60,0,15,.45),inset 0 -3px 5px rgba(0,0,0,.35),inset 0 2px 3px rgba(255,150,160,.45);color:#f3b8c0;font:700 1.35rem/1 var(--font-script),cursive;text-shadow:0 1px 0 rgba(255,200,205,.35),0 -1px 1px rgba(60,0,15,.7);transition:opacity .35s,transform .35s}.envelope .seal:before{content:"";position:absolute;inset:6px;border-radius:50%;border:1.5px solid rgba(60,0,15,.35);box-shadow:inset 0 1px 1px rgba(255,170,180,.35),0 1px 0 rgba(255,170,180,.25)}.envelope.open .seal{opacity:0;transform:scale(.7) rotate(-20deg)}.envelope .letter-peek{position:absolute;left:16px;right:16px;top:12px;height:150px;z-index:2;border-radius:6px;background:repeating-linear-gradient(#fffaf2 0 15px,#efd9e3 15px 16px);box-shadow:0 -2px 10px rgba(0,0,0,.18);opacity:0;transition:opacity .2s .25s,transform .8s cubic-bezier(.3,.8,.3,1)}.envelope.open .letter-peek{opacity:1}.envelope.rising .letter-peek{transform:translateY(-82px)}.envelope.leaving{animation:env-leave .6s ease-in forwards;pointer-events:none}.envelope.leaving .letter-peek{visibility:hidden}@keyframes env-leave{to{transform:translateY(90px) scale(.92);opacity:0}}.paper{width:min(100%,460px);max-height:62vh;overflow-y:auto;text-align:left;margin-top:20px;color:#3a2340;border-radius:12px;padding:28px 24px;background:repeating-linear-gradient(#fffaf2 0 31px,#efd9e3 31px 32px);box-shadow:0 20px 60px rgba(0,0,0,.45);-webkit-user-select:text;-moz-user-select:text;user-select:text;position:relative}.paper:after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity 1.4s ease .3s;background:linear-gradient(transparent calc(33.3% - 2px),rgba(120,70,100,.2) 33.3%,rgba(255,255,255,.5) calc(33.3% + 1px),transparent calc(33.3% + 3px)),linear-gradient(transparent calc(66.6% - 2px),rgba(120,70,100,.2) 66.6%,rgba(255,255,255,.5) calc(66.6% + 1px),transparent calc(66.6% + 3px))}.paper.unfolding:after{opacity:1;transition:none}.paper .dear{font-family:var(--font-script),cursive;font-size:1.8rem;margin-bottom:38px;opacity:0;transition:opacity .6s ease .1s}.paper.writing .dear{opacity:1}.paper .body{font-size:1.4rem;line-height:32px;white-space:pre-wrap;min-height:64px}.paper .body,.paper .sign{font-family:var(--font-script),cursive}.paper .sign{font-size:1.5rem;text-align:right;margin-top:16px;opacity:0;transition:opacity 1s}.paper .sign.show{opacity:1}.paper .ink{animation:ink-in .45s ease-out both}@keyframes ink-in{0%{opacity:0;text-shadow:0 0 5px rgba(58,35,64,.6)}to{opacity:1;text-shadow:none}}.paper .quill{display:inline-block;position:relative;width:0;height:1em}.paper .quill i{position:absolute;left:-3px;bottom:-4px;font-style:normal;font-size:1.7rem;line-height:1;pointer-events:none;transform-origin:0 100%;animation:scribble .28s ease-in-out infinite alternate;filter:drop-shadow(2px 3px 2px rgba(0,0,0,.25))}@keyframes scribble{0%{transform:rotate(-4deg)}to{transform:rotate(5deg) translate(1px,-2px)}}.scratch-card{position:relative;width:min(330px,86vw);aspect-ratio:8/5;margin-top:26px;border-radius:18px;overflow:hidden;background:linear-gradient(135deg,#fff6e0,#ffd6e4 55%,#ffe9c7);box-shadow:0 14px 40px rgba(0,0,0,.45),inset 0 0 0 1px rgba(255,255,255,.4)}.prize{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:18px;text-align:center;color:#3a1631;background:radial-gradient(circle at 20% 15%,rgba(255,255,255,.7),transparent 45%),repeating-linear-gradient(45deg,rgba(255,255,255,.14) 0 10px,transparent 10px 20px)}.prize-label{font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:#b0457a;font-weight:600}.prize strong{font-family:var(--font-script),cursive;font-size:clamp(1.6rem,7vw,2.1rem);line-height:1.15;color:#c2185b}.prize-note{font-size:.8rem;color:#7a4a60}.foil{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:-webkit-grab;cursor:grab;transition:opacity .7s ease}.scratch-card.revealed .foil{opacity:0;pointer-events:none}.scratch-card.revealed .prize strong{animation:prize-pop .6s cubic-bezier(.3,1.6,.5,1)}.scratch-card.revealed:after{content:"";position:absolute;inset:0;pointer-events:none;transform:translateX(-100%);background:linear-gradient(115deg,transparent 30%,rgba(255,255,255,.75) 50%,transparent 70%);animation:card-shine 1.2s ease .3s forwards}@keyframes prize-pop{0%{transform:scale(.6);opacity:0}to{transform:none;opacity:1}}@keyframes card-shine{to{transform:translateX(100%)}}.link-btn{margin-top:16px;background:none;border:none;color:var(--muted);text-decoration:underline;font:inherit;font-size:.85rem;cursor:pointer}.fireworks{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1}.face-const{width:min(74vw,330px);height:auto;overflow:visible;margin-bottom:4px;opacity:.9}.face-const line{stroke:#ddd0f7;stroke-opacity:.55;stroke-width:.32;stroke-linecap:round;stroke-dasharray:.01 1.05}.face-const .fc-star{fill:#fff;fill-opacity:.85}.scene.active .face-const line{animation:fc-in .6s ease-out both}.scene.active .face-const .fc-star{animation:fc-in .4s ease-out var(--lit) both,fc-twinkle var(--tw) ease-in-out calc(var(--lit) + .4s) infinite alternate}@keyframes fc-in{0%{opacity:0}to{opacity:1}}@keyframes fc-twinkle{0%{opacity:.9}to{opacity:.35}}.final-cake{font-size:3.4rem;line-height:1;margin:22px 0 6px;animation:float 3s ease-in-out infinite}.signoff{font-family:var(--font-script),cursive;font-size:1.6rem;margin-top:18px;color:var(--accent)}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important}.bouquet *,.bq-petal,.cake *,.cake :after,.cake :before,.face-const *,.pb *{animation-delay:0s!important}}.app-page{position:fixed;inset:0;z-index:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:32px 16px 60px;-webkit-user-select:text;-moz-user-select:text;user-select:text}.app-page.center{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;text-align:center;gap:10px}.app-page.center>:first-child{margin-top:auto}.app-page.center>:last-child{margin-bottom:auto}.app-page.center>.lock-icon:first-child{padding-top:8px}.app-page .btn{display:inline-block;text-decoration:none}.btn.small{margin-top:0;padding:9px 18px;font-size:.88rem}.btn:disabled{opacity:.6;cursor:default}.hero{max-width:560px;margin:4vh auto 0;text-align:center;display:flex;flex-direction:column;align-items:center}.hero-gift{font-size:4.2rem;animation:float 3s ease-in-out infinite;filter:drop-shadow(0 0 24px rgba(255,126,179,.45))}.hero h1{color:var(--accent);margin:8px 0 6px;text-wrap:balance}.hero-note{color:var(--muted);font-size:.85rem;margin-top:10px}.features{max-width:720px;margin:40px auto 0;display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));grid-gap:12px;gap:12px}.feature{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:16px;background:var(--card);border:1px solid var(--card-border)}.feature-icon{font-size:1.6rem;line-height:1}.feature b{display:block;margin-bottom:2px}.feature p{color:var(--muted);font-size:.88rem;font-weight:300;line-height:1.4}.how{max-width:560px;margin:40px auto 0;text-align:center}.how ol{text-align:left;display:grid;grid-gap:10px;gap:10px;margin:12px 0 0;padding-left:22px;color:var(--muted)}.how ol b{color:var(--text)}.form-wrap{max-width:620px;margin:0 auto}.form-title{font-size:clamp(2rem,7vw,2.6rem);text-align:center;margin-bottom:14px}.steps{list-style:none;display:flex;justify-content:center;gap:6px;flex-wrap:wrap;margin:0 0 16px;padding:0}.steps li{display:flex;flex-direction:column;align-items:center;gap:4px;width:74px;font-size:.7rem;color:var(--muted);text-align:center;line-height:1.2}.steps button{width:32px;height:32px;border-radius:50%;border:1px solid var(--card-border);background:var(--card);color:var(--text);font:600 .85rem var(--font-sans),sans-serif;cursor:pointer}.steps li.on button{background:linear-gradient(135deg,var(--gold),var(--accent));color:#2a0d2e;border-color:transparent}.steps li.on{color:var(--text)}.steps li.done button{border-color:var(--gold);color:var(--gold)}.panel{background:rgba(255,255,255,.06);border:1px solid var(--card-border);border-radius:20px;padding:20px 18px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.panel h2{font-size:clamp(1.7rem,6vw,2.1rem);margin-bottom:10px}.field{display:flex;flex-direction:column;gap:6px;margin:14px 0;font-weight:500;font-size:.95rem}.count,.field small,.hint{color:var(--muted);font-weight:300;font-size:.8rem;line-height:1.4}.hint{margin:0 0 10px}.req{color:var(--accent)}.panel input:not([type=checkbox]):not([type=file]),.panel textarea{width:100%;padding:12px 14px;border-radius:12px;border:1px solid var(--card-border);background:rgba(10,8,30,.55);color:var(--text);font:400 1rem var(--font-sans),sans-serif;outline:none;transition:border-color .2s}.panel input:focus,.panel textarea:focus{border-color:var(--accent)}.panel input[type=date]{color-scheme:dark}.letter-input{resize:vertical;line-height:1.5;min-height:220px}.row{display:flex;gap:8px;align-items:center}.icon-btn{flex:none;width:36px;height:36px;border-radius:50%;border:1px solid var(--card-border);background:var(--card);color:var(--text);cursor:pointer;font-size:.85rem}.icon-btn:disabled{opacity:.35;cursor:default}.chips{display:flex;gap:8px;flex-wrap:wrap}.chip{padding:9px 14px;border-radius:999px;border:1px solid var(--card-border);background:var(--card);color:var(--text);font:500 .9rem var(--font-sans),sans-serif;cursor:pointer}.chip.on{border-color:var(--gold);background:rgba(255,211,110,.16)}.toggle{display:flex;gap:10px;align-items:center;margin:6px 0 4px;cursor:pointer}.toggle input{width:20px;height:20px;accent-color:var(--accent)}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-gap:12px;gap:12px}.photo-item{display:flex;flex-direction:column;gap:6px;padding:8px;border-radius:14px;background:rgba(255,255,255,.06);border:1px solid var(--card-border)}.photo-item img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:8px}.photo-item input{padding:8px 10px!important;font-size:.85rem!important}.photo-item.uploading{align-items:center;justify-content:center;min-height:150px;color:var(--muted)}.photo-actions{gap:6px}.photo-actions,.photo-add{display:flex;justify-content:center}.photo-add{flex-direction:column;align-items:center;gap:4px;min-height:150px;border-radius:14px;border:2px dashed var(--card-border);color:var(--muted);cursor:pointer}.photo-add span{font-size:2rem;color:var(--accent)}.photo-add input{display:none}.form-error{margin-top:12px;padding:10px 12px;border-radius:10px;background:rgba(255,90,120,.15);border:1px solid rgba(255,90,120,.4);color:#ffd0da;font-size:.9rem}.form-nav{display:flex;justify-content:space-between;gap:10px;margin-top:18px}.form-nav .btn{margin-top:0}.form-nav .btn:only-child{margin-left:auto}.preview-mark{position:fixed;left:50%;top:50%;z-index:30;transform:translate(-50%,-50%) rotate(-24deg);pointer-events:none;font:600 clamp(3rem,18vw,7rem) var(--font-sans),sans-serif;letter-spacing:.2em;color:rgba(255,255,255,.07);white-space:nowrap}.preview-bar{position:fixed;top:14px;left:14px;right:72px;z-index:65;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.preview-bar .btn{margin-top:0;text-decoration:none}.preview-error{color:#ffd0da;font-size:.8rem}.links{width:min(520px,100%);gap:14px;margin:12px 0 6px;text-align:left}.link-box,.links{display:flex;flex-direction:column}.link-box{padding:14px;border-radius:16px;background:var(--card);border:1px solid var(--card-border);gap:8px}.link-box small{color:var(--muted);font-weight:300;font-size:.8rem}.link-row{display:flex;gap:8px}.link-row input{flex:1 1;min-width:0;padding:10px 12px;border-radius:10px;border:1px solid var(--card-border);background:rgba(10,8,30,.55);color:var(--text);font:400 .9rem var(--font-sans),sans-serif}.share-buttons{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.share-buttons .btn{margin-top:0}.ideas{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0;align-items:center}.ideas>small{color:var(--muted);font-weight:300;font-size:.8rem;margin-right:2px}.idea{padding:6px 11px;border-radius:999px;border:1px dashed rgba(255,211,110,.45);background:rgba(255,211,110,.07);color:var(--text);font:400 .8rem var(--font-sans),sans-serif;cursor:pointer;text-align:left;transition:background .2s,border-color .2s}.idea:hover{background:rgba(255,211,110,.16)}.idea.on{border-style:solid;border-color:var(--gold);background:rgba(255,211,110,.2)}.ideas.small .idea{padding:4px 8px;font-size:.72rem}.balloon-slot{transition:width .45s ease,opacity .3s ease;width:72px}.balloon-slot.gone{width:0;height:0;opacity:0;margin:0 -11px;overflow:hidden;pointer-events:none}.reason-list{width:min(420px,100%);margin-top:6px;text-align:left;animation:fade-up .5s ease-out both}.reason-list>b{display:block;text-align:center;font-family:var(--font-script),cursive;font-size:1.35rem;color:var(--gold);margin-bottom:6px}.reason-list ol{list-style:none;margin:0;padding:2px 4px;display:flex;flex-direction:column;gap:8px;max-height:min(34vh,260px);overflow-y:auto;scrollbar-width:thin}.reason-list li{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:14px;background:var(--card);border:1px solid var(--card-border);border-left:4px solid var(--c);font-size:.92rem;line-height:1.35;animation:reason-in .5s cubic-bezier(.3,1.3,.5,1) both}.reason-emoji{font-size:1.3rem;flex:none}@keyframes reason-in{0%{opacity:0;transform:translateY(14px) scale(.92)}to{opacity:1;transform:none}}.occasion-bg{position:fixed;inset:0;z-index:0;pointer-events:none;background:radial-gradient(ellipse at top,var(--bg2),var(--bg1) 60%,var(--bg0,#07051a))}.theme-birthday{--bg1:#0f0c29;--bg2:#302b63;--bg0:#07051a}.theme-valentine{--bg1:#1c0614;--bg2:#5c1238;--bg0:#0c0209;--accent:#ff6b9a;--gold:#ffc2d4;--muted:#e9b8cc;--card:rgba(255,220,235,0.08);--card-border:rgba(255,190,215,0.22)}.theme-sorry{--bg1:#0f1424;--bg2:#2a3656;--bg0:#070a14;--accent:#9ab8ff;--gold:#ffd59e;--muted:#bccbe8;--card:rgba(220,230,255,0.08);--card-border:rgba(170,195,255,0.22)}.theme-proposal{--bg1:#1a0a1c;--bg2:#4a1838;--bg0:#0a040b;--accent:#f4a6b8;--gold:#f2d39b;--muted:#e3c3cf;--card:rgba(255,225,235,0.08);--card-border:rgba(242,211,155,0.25)}.theme-diwali{--bg1:#160a26;--bg2:#4a1a3a;--bg0:#08040f;--accent:#ff9a3c;--gold:#ffd34d;--muted:#f0c9a8;--card:rgba(255,200,120,0.08);--card-border:rgba(255,190,90,0.25)}.theme-anniversary{--bg1:#140f22;--bg2:#3b2c4f;--bg0:#08060f;--accent:#f0a6b8;--gold:#f3d27a;--muted:#d9c6e0;--card:rgba(255,240,220,0.07);--card-border:rgba(243,210,122,0.25)}.brand{font-weight:600;letter-spacing:.08em;color:var(--gold);margin-bottom:6px}.occasions-wrap{max-width:900px;margin:34px auto 0;text-align:center}.occasions-wrap>h2{margin-bottom:14px}.occasion-cards{display:grid;grid-template-columns:1fr;grid-gap:14px;gap:14px;text-align:left}@media (min-width:560px){.occasion-cards{grid-template-columns:repeat(2,1fr);max-width:780px;margin:0 auto}}.occasion-card{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:6px;padding:18px 18px 16px;border-radius:20px;text-decoration:none;color:var(--text);background:radial-gradient(ellipse at top right,var(--bg2),var(--bg1) 75%);border:1px solid var(--card-border);box-shadow:0 12px 30px rgba(0,0,0,.35);transition:transform .25s ease,box-shadow .25s ease}.occasion-card:hover{transform:translateY(-4px);box-shadow:0 18px 40px rgba(0,0,0,.45)}.oc-emoji{font-size:2.4rem;line-height:1}.occasion-card b{font-family:var(--font-script),cursive;font-size:1.8rem;color:var(--accent)}.oc-tagline{font-weight:600;font-size:.95rem}.oc-blurb{color:var(--muted);font-weight:300;font-size:.85rem;line-height:1.4}.oc-free{position:absolute;top:14px;left:-34px;width:130px;padding:4px 0;transform:rotate(-38deg);z-index:2;text-align:center;font-size:.72rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#2a0d2e;background:linear-gradient(90deg,#ffe58a,#ffb347);box-shadow:0 3px 10px rgba(255,170,60,.45)}.occasion-card:has(.oc-free) b{padding-left:34px}.free-banner{display:flex;align-items:center;gap:12px;margin:16px auto 4px;max-width:640px;padding:12px 16px;border-radius:18px;text-align:left;text-decoration:none;color:var(--text);font-size:.92rem;line-height:1.4;background:linear-gradient(120deg,rgba(255,154,60,.22),rgba(255,211,77,.12) 60%,rgba(255,120,60,.18));border:1px solid rgba(255,190,90,.45);box-shadow:0 0 30px rgba(255,160,60,.18);animation:fade-up .8s ease-out .3s both}.free-banner b{color:var(--gold)}.fb-icon{font-size:2rem;filter:drop-shadow(0 0 10px rgba(255,180,60,.8));animation:float 3s ease-in-out infinite}.fb-go{margin-left:auto;flex-shrink:0;padding:7px 14px;border-radius:999px;font-weight:600;font-size:.82rem;color:#2a0d2e;background:linear-gradient(135deg,var(--gold),var(--accent))}@media (max-width:480px){.fb-go{display:none}}.form-free{text-align:center;color:var(--gold);font-size:.88rem;margin:2px 0 6px}.finale-invite{display:block;margin-top:22px;color:var(--muted);font-size:.92rem;text-decoration:none}.finale-invite b{color:var(--gold);text-decoration:underline;text-underline-offset:3px}.oc-go{margin-top:6px;align-self:flex-start;padding:7px 16px;border-radius:999px;font-weight:600;font-size:.85rem;color:#2a0d2e;background:linear-gradient(135deg,var(--gold),var(--accent))}.form-occasion{text-align:center;color:var(--gold);font-weight:600;letter-spacing:.05em;margin-bottom:2px}.fill-heart{position:relative;width:min(64vw,270px);margin:22px 0 10px;cursor:pointer;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;outline:none;animation:heart-beat var(--beat,.9s) ease-in-out infinite}.fill-heart svg{display:block;width:100%;height:auto;overflow:visible;filter:drop-shadow(0 0 22px rgba(255,90,140,.45))}.fill-heart.full{animation:heart-burst .6s cubic-bezier(.3,1.6,.5,1)}.fill-heart.full svg{filter:drop-shadow(0 0 36px rgba(255,90,140,.85))}.fh-wave{animation:fh-wave 2.4s linear infinite}.fh-pct{left:0;right:0;top:40%;text-align:center;font-weight:600;font-size:1.1rem;text-shadow:0 1px 6px rgba(0,0,0,.5)}.fh-burst,.fh-pct{position:absolute;pointer-events:none}.fh-burst{left:50%;top:45%;font-size:calc(22px * var(--s));animation:fh-burst 1.4s cubic-bezier(.2,.8,.3,1) forwards}@keyframes heart-beat{0%,to{transform:scale(1)}15%{transform:scale(1.06)}30%{transform:scale(.98)}45%{transform:scale(1.04)}}@keyframes heart-burst{0%{transform:scale(1)}40%{transform:scale(1.18)}to{transform:scale(1)}}@keyframes fh-wave{0%{transform:translateX(0)}to{transform:translateX(50px)}}@keyframes fh-burst{0%{transform:translate(-50%,-50%) scale(.3);opacity:1}to{transform:translate(calc(-50% + var(--x)),calc(-50% + var(--y))) scale(1);opacity:0}}.question-rose{font-size:3.4rem;animation:float 3s ease-in-out infinite}.question-text{font-size:clamp(2.1rem,8vw,3rem);text-wrap:balance}.proposal-area{position:relative;width:min(100%,420px);height:220px;margin-top:16px;display:flex;align-items:center;justify-content:center;gap:14px}.yes-btn{margin-top:0;transition:transform .35s cubic-bezier(.3,1.5,.5,1);z-index:2}.no-btn{margin-top:0;transition:left .25s ease,top .25s ease;white-space:nowrap}.no-btn.roaming{position:absolute}.yes-heart{font-size:4.2rem;animation:heart-beat .9s ease-in-out infinite;filter:drop-shadow(0 0 24px rgba(255,90,140,.7))}.balloon.heart{background:none;box-shadow:none;border-radius:0}.balloon.heart .balloon-body{position:absolute;left:0;top:4px;width:72px;height:72px;-webkit-clip-path:path("M36.0 72.0C14.1 54.4 0.0 40.6 0.0 22.5 0.0 9.0 9.6 0.0 20.7 0.0c7.8 0.0 12.9 4.5 15.3 10.9C38.4 4.5 43.5 0.0 51.3 0.0 62.4 0.0 72.0 9.0 72.0 22.5 72.0 40.6 57.9 54.4 36.0 72.0Z");clip-path:path("M36.0 72.0C14.1 54.4 0.0 40.6 0.0 22.5 0.0 9.0 9.6 0.0 20.7 0.0c7.8 0.0 12.9 4.5 15.3 10.9C38.4 4.5 43.5 0.0 51.3 0.0 62.4 0.0 72.0 9.0 72.0 22.5 72.0 40.6 57.9 54.4 36.0 72.0Z");background:radial-gradient(circle at 28% 26%,rgba(255,255,255,.65) 0 9%,transparent 24%),linear-gradient(160deg,var(--c),color-mix(in srgb,var(--c) 70%,#000))}.balloon.heart:before{bottom:6px}.balloon.lantern{background:none;box-shadow:none;border-radius:0;animation:lantern-float 4.2s ease-in-out var(--d) infinite}.balloon.lantern:after,.balloon.lantern:before{display:none}.balloon.lantern .balloon-body{position:absolute;left:7px;top:4px;width:58px;height:76px;border-radius:46% 46% 32% 32%/40% 40% 24% 24%;background:repeating-linear-gradient(90deg,transparent 0 13px,rgba(120,40,10,.18) 13px 14px),radial-gradient(ellipse at 50% 74%,#fff6d0 0 9%,#ffcf5e 26%,color-mix(in srgb,var(--c) 40%,#ff8a1f) 60%,color-mix(in srgb,var(--c) 30%,#9a2a0c) 100%);box-shadow:0 0 24px rgba(255,170,60,.6),inset 0 -6px 10px rgba(120,30,0,.35)}.balloon.lantern .balloon-body:after{content:"";position:absolute;left:30%;right:30%;bottom:-3px;height:7px;border-radius:50%;background:#5a1d08;box-shadow:0 2px 10px rgba(255,190,80,.8)}@keyframes lantern-float{0%,to{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-10px) rotate(2deg)}}.rings{width:min(60vw,240px);height:auto;overflow:visible;filter:drop-shadow(0 0 16px rgba(243,210,122,.5))}.ring{fill:none;stroke:url(#ring-gold);stroke-width:6;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1}.scene.active .ring.r1{animation:ring-draw 1.1s ease-out .2s forwards}.scene.active .ring.r2{animation:ring-draw 1.1s ease-out .55s forwards}.ring-gem{fill:#e9f6ff;stroke:#9fd3ff;stroke-width:1;opacity:0;filter:drop-shadow(0 0 6px #bfe6ff)}.scene.active .ring-gem{animation:gem-in .5s ease-out 1.4s forwards,gem-sparkle 2s ease-in-out 2s infinite}@keyframes ring-draw{to{stroke-dashoffset:0}}@keyframes gem-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}@keyframes gem-sparkle{0%,to{filter:drop-shadow(0 0 4px #bfe6ff)}50%{filter:drop-shadow(0 0 12px #ffffff)}}.together-eyebrow{color:var(--muted);letter-spacing:.3em;text-transform:uppercase;font-size:.8rem;margin-top:10px}.together-count{display:flex;gap:14px;margin:10px 0 4px}.together-count div{min-width:104px;padding:14px 14px 10px;border-radius:18px;background:var(--card);border:1px solid var(--card-border)}.together-count b{display:block;font-size:clamp(2.2rem,10vw,3rem);font-weight:600;color:var(--gold);line-height:1.1;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.together-count span{font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.12em}.is-preview .tree-wish{top:calc(max(5vh, 28px) + 54px)}.proposal-area{overflow:hidden;height:min(260px,36vh);min-height:170px}.occasions-wrap.first{margin-top:2vh}.landing-title{font-size:clamp(2.2rem,8.5vw,3.2rem);color:var(--accent);text-wrap:balance;margin-bottom:4px}.landing-sub{margin:0 auto 18px}.site-footer{max-width:560px;margin:48px auto 0;padding-top:22px;border-top:1px solid var(--card-border);text-align:center}.logo{display:inline-flex;align-items:center;gap:.32em;line-height:1;text-decoration:none}.logo-mark{flex-shrink:0;overflow:visible;filter:drop-shadow(0 0 8px rgba(255,170,140,.35))}.logo-word{font-family:var(--font-brand),Georgia,serif;font-weight:700;font-size:1.55em;letter-spacing:.01em;padding:.06em .04em .1em;background:linear-gradient(100deg,#fff1cf,#f5cf8a 35%,#f0a98a 70%,#ff9cc2);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 1px 10px rgba(255,190,140,.25))}.logo-word i{font-style:italic;font-weight:600;margin-right:.02em}.site-top{display:flex;justify-content:center;margin:4px 0 6px;font-size:1rem;animation:fade-up .8s ease-out both}.site-footer .brand .logo{font-size:1.15rem;letter-spacing:0}.site-footer .brand{font-size:1.1rem;margin-bottom:2px}.footer-tagline{font-family:var(--font-script),cursive;font-size:1.5rem;color:var(--accent)}.footer-desc{font-weight:300;line-height:1.5;margin-top:6px}.footer-contact,.footer-desc{color:var(--muted);font-size:.85rem}.footer-contact{margin-top:10px}.footer-contact a{color:var(--gold);text-decoration:none}.aurora{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none}.aurora i{position:absolute;width:70vmax;height:70vmax;border-radius:50%;filter:blur(70px);opacity:.32;mix-blend-mode:screen}.aurora i:first-child{background:radial-gradient(circle,#ff5c9a,transparent 65%);left:-25vmax;top:-20vmax;animation:aurora-a 22s ease-in-out infinite alternate}.aurora i:nth-child(2){background:radial-gradient(circle,#7b5cff,transparent 65%);right:-30vmax;top:10vh;animation:aurora-b 26s ease-in-out infinite alternate}.aurora i:nth-child(3){background:radial-gradient(circle,#ffb84d,transparent 65%);left:10vw;bottom:-40vmax;opacity:.2;animation:aurora-c 30s ease-in-out infinite alternate}@keyframes aurora-a{to{transform:translate(18vmax,14vmax) scale(1.15)}}@keyframes aurora-b{to{transform:translate(-16vmax,18vmax) scale(.9)}}@keyframes aurora-c{to{transform:translate(-12vmax,-16vmax) scale(1.2)}}.floaters{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none}.floaters span{position:absolute;bottom:-40px;opacity:0;animation:floater-rise linear infinite;filter:drop-shadow(0 0 6px rgba(255,180,220,.4))}@keyframes floater-rise{0%{transform:translateY(0) rotate(-8deg);opacity:0}10%{opacity:.55}85%{opacity:.4}to{transform:translateY(-110vh) rotate(12deg);opacity:0}}.landing .landing-title{color:var(--text);text-shadow:0 0 30px rgba(255,126,179,.35)}.shimmer-word{background:linear-gradient(100deg,var(--accent) 0,var(--gold) 35%,#fff6d6 50%,var(--gold) 65%,var(--accent) 100%) 0 0 /250% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:name-shimmer 5s ease-in-out infinite;padding:0 .1em}.badges{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:0 0 20px}.badges span{padding:6px 12px;border-radius:999px;font-size:.78rem;font-weight:500;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}@property --spin{syntax:"<angle>";inherits:false;initial-value:0deg}.occasion-card{isolation:isolate;min-height:210px;animation:card-in .7s cubic-bezier(.2,.8,.3,1) backwards;animation-delay:calc(var(--i, 0) * .12s)}.occasion-card:before{z-index:-1;padding:1.5px;background:conic-gradient(from var(--spin),transparent 0 55%,var(--accent) 70%,var(--gold) 80%,transparent 92%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:border-spin 5s linear infinite;animation-delay:calc(var(--i, 0) * -1.6s)}.occasion-card:after,.occasion-card:before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none}.occasion-card:after{z-index:1;background:linear-gradient(110deg,transparent 35%,rgba(255,255,255,.13) 50%,transparent 65%) no-repeat;background-size:250% 100%;background-position:160% 0;animation:card-sweep 7s ease-in-out infinite;animation-delay:calc(1.2s + var(--i, 0) * .8s)}.occasion-card:hover{transform:perspective(900px) rotateX(3deg) translateY(-5px) scale(1.01);box-shadow:0 22px 46px rgba(0,0,0,.5),0 0 40px color-mix(in srgb,var(--accent) 25%,transparent)}.occasion-card b{padding-right:84px;white-space:nowrap;font-size:clamp(1.45rem,6.4vw,1.8rem)}.oc-tagline{padding-right:104px}@media (max-width:380px){.oc-art{transform:scale(.82);transform-origin:top right}.occasion-card b{padding-right:70px}.oc-tagline{padding-right:76px}}.oc-new{position:absolute;top:14px;left:14px;padding:3px 9px;border-radius:999px;font-size:.68rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#2a0d2e;background:var(--gold);box-shadow:0 0 14px color-mix(in srgb,var(--gold) 60%,transparent)}.occasion-card:has(.oc-new) b{margin-top:22px}.oc-go{box-shadow:0 6px 20px color-mix(in srgb,var(--accent) 40%,transparent)}@keyframes border-spin{to{--spin:360deg}}@keyframes card-sweep{0%{background-position:160% 0}25%,to{background-position:-60% 0}}@keyframes card-in{0%{opacity:0;transform:translateY(24px) scale(.97)}to{opacity:1;transform:none}}.oc-art{position:absolute;top:10px;right:10px;width:100px;height:92px;pointer-events:none}.oc-art span{position:absolute;line-height:1}.art-main{left:26px;top:20px;font-size:3rem;filter:drop-shadow(0 6px 14px rgba(0,0,0,.4)) drop-shadow(0 0 18px color-mix(in srgb,var(--accent) 45%,transparent))}.art-bit{font-size:1.15rem}.bob{animation:art-bob 3s ease-in-out infinite}.beat{animation:heart-beat 1.1s ease-in-out infinite}.sway{animation:art-sway 3.4s ease-in-out infinite;transform-origin:50% 80%}.b1{left:2px;top:4px;animation:art-bob 3.6s ease-in-out infinite}.b2{right:0;top:0;animation:art-bob 4.2s ease-in-out .6s infinite}.t1{right:6px;bottom:6px}.t2{left:4px;top:10px}.tw{animation:art-twinkle 2.2s ease-in-out infinite}.t2.tw{animation-delay:1.1s}.rise{bottom:10px;opacity:0;animation:art-rise 2.6s ease-out infinite}.r1{left:8px}.r2{right:6px;animation-delay:.9s}.r3{left:44px;animation-delay:1.7s;font-size:.9rem}@keyframes art-bob{0%,to{transform:translateY(0) rotate(-4deg)}50%{transform:translateY(-8px) rotate(4deg)}}@keyframes art-sway{0%,to{transform:rotate(-10deg)}50%{transform:rotate(10deg)}}@keyframes art-twinkle{0%,to{opacity:.2;transform:scale(.7)}50%{opacity:1;transform:scale(1.15)}}@keyframes art-rise{0%{opacity:0;transform:translateY(0) scale(.6)}25%{opacity:1}to{opacity:0;transform:translateY(-70px) scale(1)}}.landing .feature{position:relative;overflow:hidden;animation:card-in .7s ease both;animation-delay:calc(.3s + var(--i, 0) * .1s)}.landing .feature-icon{flex:none;display:grid;place-items:center;width:46px;height:46px;border-radius:14px;font-size:1.4rem;background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 35%,transparent),color-mix(in srgb,var(--gold) 25%,transparent));box-shadow:0 0 18px color-mix(in srgb,var(--accent) 30%,transparent);animation:float 4s ease-in-out infinite;animation-delay:calc(var(--i, 0) * -1s)}.how .steps-line{list-style:none;padding:0;margin:16px 0 0;position:relative;display:grid;grid-gap:18px;gap:18px;text-align:left}.steps-line:before{content:"";position:absolute;left:21px;top:22px;bottom:22px;width:2px;background:linear-gradient(var(--accent),var(--gold));opacity:.6;border-radius:2px}.steps-line li{position:relative;display:flex;gap:14px;align-items:flex-start}.step-num{flex:none;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;font-weight:600;color:#2a0d2e;background:linear-gradient(135deg,var(--gold),var(--accent));box-shadow:0 0 20px color-mix(in srgb,var(--accent) 45%,transparent);z-index:1}.steps-line b{display:block;color:var(--text);font-size:1.05rem}.steps-line p{color:var(--muted);font-weight:300;font-size:.9rem;line-height:1.45}.sticky-cta{position:fixed;left:50%;bottom:18px;z-index:30;margin:0;transform:translate(-50%,140%);opacity:0;transition:transform .4s cubic-bezier(.3,1.3,.5,1),opacity .3s;box-shadow:0 10px 34px rgba(255,126,179,.5);white-space:nowrap}.sticky-cta.show{transform:translate(-50%);opacity:1}.landing{padding-bottom:96px}.occasion-cards{container-type:inline-size}@container (max-width: 520px){.occasion-card b{font-size:clamp(2rem,11cqw,2.7rem);padding-right:0;line-height:1.15}.occasion-card .oc-art{top:clamp(46px,12cqw,54px);transform:scale(.8);transform-origin:top right}.occasion-card .oc-tagline{padding-right:96px;min-height:3.2em}}@container (max-width: 340px){.occasion-card .oc-art{transform:scale(.72)}.occasion-card .oc-tagline{padding-right:76px}}