:root{--bg:#fff8f1;--bg-alt:#fff;--ink:#3b2a33;--ink-soft:#7a6376;--pink:#ff6f91;--pink-deep:#e14e73;--yellow:#ffc857;--mint:#2fbf8f;--lilac:#a87fd1;--paper:#fffdf9;--dashed:#3b2a3347;--card-shadow:0 16px 34px -16px #3b2a3347;--string:#3b2a3352}:root[data-theme=dark]{--bg:#24151f;--bg-alt:#32202c;--ink:#fbeef3;--ink-soft:#d6b8cb;--pink:#ff86a6;--pink-deep:#ff6690;--yellow:#ffd166;--mint:#43d8a3;--lilac:#c79fee;--paper:#2c1b27;--dashed:#fbeef352;--card-shadow:0 16px 34px -16px #0009;--string:#fbeef352}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:Nunito,system-ui,sans-serif;line-height:1.55;overflow:hidden}h1,h2,h3{text-wrap:balance;margin:0;font-family:"Baloo 2",Nunito,system-ui,sans-serif}.eyebrow{letter-spacing:.14em;text-transform:uppercase;color:var(--pink-deep);font-size:.8rem;font-weight:800}.placeholder{border:2px dashed var(--dashed);background:color-mix(in srgb, var(--bg-alt) 92%, var(--pink) 8%);color:var(--ink-soft);border-radius:14px;font-style:italic;position:relative}.placeholder .tag{background:var(--yellow);color:#3b2a33;letter-spacing:.06em;text-transform:uppercase;box-shadow:var(--card-shadow);border-radius:999px;padding:3px 10px;font-size:.7rem;font-style:normal;font-weight:800;position:absolute;top:-12px;left:14px}.app-shell{justify-content:center;align-items:center;width:100%;height:100dvh;padding:1rem;display:flex;position:relative}.balloon-bg{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.balloon{background:currentColor;border-radius:50%/62% 62% 38% 38%;width:44px;height:56px;animation:16s ease-in-out infinite float;position:absolute;bottom:-90px}.balloon:before{content:"";border-top:7px solid;border-left:5px solid #0000;border-right:5px solid #0000;width:0;height:0;position:absolute;bottom:-7px;left:50%;transform:translate(-50%)}.balloon:after{content:"";background:var(--string);width:1px;height:50px;position:absolute;top:100%;left:50%}.balloon.b1{color:var(--pink);animation-duration:15s;animation-delay:-2s;left:6%}.balloon.b2{color:var(--yellow);width:38px;height:48px;animation-duration:18s;animation-delay:-9s;left:20%}.balloon.b3{color:var(--mint);animation-duration:14s;animation-delay:-5s;left:36%}.balloon.b4{color:var(--lilac);width:40px;height:52px;animation-duration:19s;animation-delay:-12s;left:58%}.balloon.b5{color:var(--pink);width:36px;height:46px;animation-duration:16s;animation-delay:-7s;left:74%}.balloon.b6{color:var(--yellow);animation-duration:20s;animation-delay:-1s;left:88%}@keyframes float{0%{opacity:.95;transform:translateY(0)translate(0)rotate(-5deg)}50%{opacity:1;transform:translateY(-260px)translate(18px)rotate(5deg)}to{opacity:0;transform:translateY(-520px)translate(-14px)rotate(-5deg)}}.draft-banner{z-index:5;background:var(--bg-alt);border:2px dashed var(--dashed);color:var(--ink-soft);text-align:center;border-radius:999px;max-width:90vw;padding:8px 16px;font-size:.78rem;font-weight:700;position:fixed;top:12px;left:50%;transform:translate(-50%)}.card{z-index:1;text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:1rem;width:min(560px,92vw);max-height:min(88dvh,720px);padding:clamp(1.6rem,4vw,2.6rem);display:flex;position:relative;overflow-y:auto}.stage{flex-direction:column;align-items:center;gap:.9rem;width:100%;animation:.5s both stageIn;display:flex}@keyframes stageIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.hero-eyebrow{font-size:1.05rem}.card h1{font-size:clamp(2rem,7vw,3.2rem);font-weight:800;line-height:1.05}.card h1 span{color:var(--pink-deep)}.hero-sub{max-width:42ch;padding:.8rem 1.1rem;font-size:1rem}.section-head{max-width:60ch}.section-head h2{margin-top:.3rem;font-size:clamp(1.4rem,4vw,2rem)}.gallery-grid{grid-template-columns:repeat(2,1fr);gap:12px;width:min(380px,100%);margin:0 auto;display:grid}.gallery-tile{aspect-ratio:1;background:var(--surface,#fff);cursor:pointer;text-align:center;color:var(--ink,#2b2b2b);border:none;border-radius:14px;justify-content:center;align-items:center;padding:14px;font-family:"Baloo 2",sans-serif;font-weight:700;transition:transform .2s;display:flex;box-shadow:0 6px 16px #0000001f}.gallery-tile:hover,.gallery-tile:focus-visible{transform:translateY(-3px)}.gallery-tile p{margin:0;font-size:.95rem;line-height:1.35}.gallery-lightbox{z-index:50;background:#0009;justify-content:center;align-items:center;padding:24px;animation:.25s fadeIn;display:flex;position:fixed;inset:0}.gallery-lightbox-photo{background:var(--paper);border-radius:16px;flex-direction:column;align-items:center;max-width:92vw;max-height:82vh;padding:12px;animation:.4s flipIn;display:flex;box-shadow:0 20px 50px #00000059}.gallery-lightbox-photo img{object-fit:contain;border-radius:10px;max-width:100%;max-height:65vh;display:block}.gallery-lightbox-placeholder{background:var(--surface,#f2f2f2);border-radius:10px;justify-content:center;align-items:center;width:220px;height:220px;font-size:3rem;display:flex}.gallery-lightbox-caption{text-align:center;color:var(--ink,#2b2b2b);margin:10px 0 0;font-family:"Baloo 2",sans-serif;font-weight:700}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes flipIn{0%{opacity:0;transform:perspective(800px)rotateY(90deg)scale(.9)}to{opacity:1;transform:perspective(800px)rotateY(0)scale(1)}}.gallery-hint{color:var(--ink-soft);font-size:.78rem}.reasons{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.7rem;width:100%;display:grid}.reason{background:var(--bg);box-shadow:var(--card-shadow);text-align:left;border-radius:14px;padding:.9rem 1rem 1rem}.reason .num{color:var(--pink-deep);font-family:"Baloo 2",sans-serif;font-size:1.3rem;font-weight:800}.reason p{color:var(--ink-soft);margin:.3rem 0 0;font-size:.86rem;font-style:italic}.closing{white-space:pre-line}.signature{color:var(--pink-deep);font-family:"Baloo 2",sans-serif;font-size:1.25rem;font-weight:700}.continue-btn{color:#fff;background:var(--pink-deep);cursor:pointer;box-shadow:var(--card-shadow);border:none;border-radius:999px;margin-top:.2rem;padding:.68rem 1.4rem;font-family:"Baloo 2",sans-serif;font-size:.92rem;font-weight:700}.continue-btn:active{transform:translateY(1px)}.confetti-btn{color:#3b2a33;background:linear-gradient(135deg, var(--yellow), var(--pink));cursor:pointer;box-shadow:var(--card-shadow);border:none;border-radius:999px;padding:.78rem 1.6rem;font-family:"Baloo 2",sans-serif;font-size:.98rem;font-weight:700}.confetti-btn:active{transform:translateY(1px)}.restart-link{color:var(--ink-soft);cursor:pointer;background:0 0;border:none;margin-top:.2rem;font-family:Nunito,sans-serif;font-size:.8rem;text-decoration:underline}.confetti-btn:focus-visible,.continue-btn:focus-visible,.restart-link:focus-visible,.cake-wrap:focus-visible,button:focus-visible,a:focus-visible{outline:3px solid var(--mint);outline-offset:2px}.candle-scene{gap:1.1rem}.cake-wrap{cursor:pointer;background:0 0;border:none;padding:54px 0 0}.cake-base{width:160px;height:62px;box-shadow:var(--card-shadow);border-radius:14px;transition:background .3s;position:relative}.cake-frosting{background:var(--paper);border-radius:14px 14px 28px 28px/14px 14px 36px 36px;width:100%;height:24px;position:absolute;top:-11px;left:0}.candle{background:repeating-linear-gradient(45deg, var(--pink) 0 6px, var(--yellow) 6px 12px);border-radius:3px;width:9px;height:30px;position:absolute;top:-42px;left:50%;transform:translate(-50%)}.wick{background:var(--ink);width:2px;height:5px;position:absolute;top:-6px;left:50%;transform:translate(-50%)}.flame{background:radial-gradient(circle at 50% 70%, #fff5cc, var(--yellow) 55%, var(--pink-deep) 100%);opacity:0;filter:drop-shadow(0 0 6px #ffb43cb3);border-radius:50%/65% 65% 35% 35%;width:13px;height:18px;transition:transform .3s,opacity .3s;position:absolute;top:-24px;left:50%;transform:translate(-50%)scale(0)}.flame.lit{opacity:1;animation:1.4s ease-in-out infinite flicker;transform:translate(-50%)scale(1)}@keyframes flicker{0%,to{transform:translate(-50%)scale(1)rotate(-2deg)}50%{transform:translate(-50%)scale(1.08)rotate(3deg)}}.candle-prompt{color:var(--ink-soft);font-size:.92rem;font-weight:700}.candle-prompt.lit-text{color:var(--pink-deep)}.shape-square{border-radius:4px}.sprinkles{pointer-events:none;width:100%;height:14px;position:absolute;top:-6px;left:0}.sprinkles span{border-radius:2px;width:6px;height:2px;position:absolute}.sprinkles span:first-child{background:var(--pink-deep);top:2px;left:10%;transform:rotate(15deg)}.sprinkles span:nth-child(2){background:var(--yellow);top:6px;left:25%;transform:rotate(-20deg)}.sprinkles span:nth-child(3){background:var(--mint);top:1px;left:42%;transform:rotate(30deg)}.sprinkles span:nth-child(4){background:var(--lilac);top:7px;left:58%;transform:rotate(-10deg)}.sprinkles span:nth-child(5){background:var(--pink);top:3px;left:74%;transform:rotate(20deg)}.sprinkles span:nth-child(6){background:var(--yellow);top:6px;left:88%;transform:rotate(-25deg)}.cherry{background:radial-gradient(circle at 35% 30%,#ff8a9c,#c22a4e 70%);border-radius:50%;width:12px;height:12px;position:absolute;top:-16px;left:50%;transform:translate(-50%);box-shadow:0 2px 3px #0003}.cherry:after{content:"";background:#6b3f2a;border-radius:2px;width:2px;height:7px;position:absolute;top:-6px;left:60%;transform:rotate(20deg)}.drizzle{opacity:.85;mix-blend-mode:multiply;background-image:repeating-linear-gradient(115deg,#0000 0 10px,#6b3f2a 10px 13px,#0000 13px 24px);border-radius:40% 40% 30% 30%/60% 60% 20% 20%;width:88%;height:16px;position:absolute;top:-8px;left:6%}.giftbox-scene{gap:1.1rem}.gift{cursor:pointer;background:0 0;border:none;width:170px;height:150px;padding:0;position:relative}.gift-box{background:var(--pink);width:130px;height:88px;box-shadow:var(--card-shadow);border-radius:10px;transition:opacity .4s,transform .4s;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.gift-box:before{content:"";background:var(--yellow);width:16px;height:100%;position:absolute;top:0;left:50%;transform:translate(-50%)}.gift-lid{background:var(--pink-deep);width:150px;height:26px;box-shadow:var(--card-shadow);border-radius:8px;transition:opacity .45s,transform .5s;position:absolute;bottom:76px;left:50%;transform:translate(-50%)}.gift-ribbon-bow{width:36px;height:20px;transition:opacity .4s,transform .4s;position:absolute;bottom:92px;left:50%;transform:translate(-50%)}.gift-ribbon-bow:before,.gift-ribbon-bow:after{content:"";background:var(--yellow);border-radius:50% 50% 50% 0;width:17px;height:17px;position:absolute;top:0}.gift-ribbon-bow:before{left:0;transform:rotate(45deg)}.gift-ribbon-bow:after{right:0;transform:rotate(-45deg)scaleX(-1)}.cake-reveal{opacity:0;transition:opacity .5s .2s,transform .5s cubic-bezier(.34,1.56,.64,1) .2s;position:absolute;bottom:4px;left:50%;transform:translate(-50%)scale(.5)}.gift.opened .gift-box{opacity:0;transform:translate(-50%,16px)scale(.9)}.gift.opened .gift-lid{opacity:0;transform:translate(-70%,-50px)rotate(-30deg)}.gift.opened .gift-ribbon-bow{opacity:0;transform:translate(-50%,-30px)scale(.8)}.gift.opened .cake-reveal{opacity:1;transform:translate(-50%)scale(1)}.giftbox-prompt{color:var(--ink-soft);font-size:.95rem;font-weight:700}.letter-stage{gap:1rem}.envelope{width:min(360px,100%);height:min(340px,42vh);margin-top:.4rem;position:relative}.envelope-graphic{height:58%;position:absolute;bottom:0;left:0;right:0}.envelope-back{background:var(--paper);border:2px solid var(--dashed);box-shadow:var(--card-shadow);z-index:1;border-radius:10px;transition:opacity .5s .2s;position:absolute;inset:0}.envelope.opened .envelope-back{opacity:0}.envelope-flap{background:color-mix(in srgb, var(--paper) 80%, var(--pink) 20%);clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top;z-index:2;border-radius:10px 10px 0 0;width:100%;height:60%;transition:opacity .5s,transform .55s;position:absolute;top:0;left:0}.envelope.opened .envelope-flap{opacity:0;transform:translateY(-30px)rotate(-8deg)}.envelope-seal{background:var(--pink-deep);color:#fff;cursor:pointer;width:3.2rem;height:3.2rem;box-shadow:var(--card-shadow);z-index:3;border:none;border-radius:50%;justify-content:center;align-items:center;font-size:1.4rem;transition:opacity .3s,transform .3s;display:flex;position:absolute;top:30%;left:50%;transform:translate(-50%,-50%)}.envelope-seal:active{transform:translate(-50%,-50%)scale(.94)}.envelope.opened .envelope-seal{opacity:0;pointer-events:none;transform:translate(-50%,-50%)scale(.7)}.note-card{background:var(--paper);cursor:pointer;opacity:0;border-radius:14px;width:min(360px,100%);margin:0 auto;padding:26px 22px 20px;transition:opacity .6s .15s,transform .6s .15s;position:relative;transform:translateY(40px);box-shadow:0 10px 24px #00000024,inset 0 2px #fff6}.envelope.opened .note-card{opacity:1;transform:translateY(-4px)}.washi-tape{background:repeating-linear-gradient(45deg, var(--pink) 0 6px, var(--yellow) 6px 12px);opacity:.85;border-radius:2px;width:70px;height:22px;position:absolute;top:-10px;left:28px;transform:rotate(-6deg);box-shadow:0 2px 4px #00000026}.typewriter-text{color:var(--ink,#2b2b2b);white-space:pre-wrap;min-height:3em;margin:0;font-family:Caveat,cursive;font-size:1.3rem;line-height:1.55}.typewriter-cursor{vertical-align:text-bottom;background:currentColor;width:2px;height:1.1em;margin-left:2px;animation:.8s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.note-signoff{color:var(--ink,#2b2b2b);margin:14px 0 0;font-family:Caveat,cursive;font-size:1.3rem;font-weight:700;animation:.5s both stageIn}.letter-paper p+p{margin-top:.7rem}.letter-paper .signoff{margin-top:1rem;font-style:normal;font-weight:700}.envelope.opened .letter-paper{opacity:1;pointer-events:auto;transform:translate(-50%,-210px)scale(1)}.envelope-hint{color:var(--ink-soft);font-size:.85rem;font-weight:700}@media (prefers-reduced-motion:reduce){.balloon{opacity:.9;animation:none}.confetti-piece{opacity:.5;animation:none}.flame.lit,.stage{animation:none}.gift-box,.gift-lid,.gift-ribbon-bow,.cake-reveal,.envelope-flap,.letter-paper,.envelope-seal,.envelope-back,.flip-card-inner{transition:none}}@media (width<=380px){.gallery-tile p{font-size:.82rem}.typewriter-text{font-size:1.1rem}}.wish-form{flex-direction:column;gap:.8rem;width:100%;max-width:420px;display:flex}.wish-textarea{border:2px solid var(--dashed);width:100%;color:var(--ink);background:var(--bg-alt);resize:vertical;border-radius:14px;min-height:110px;padding:.9rem 1rem;font-family:Nunito,sans-serif;font-size:.95rem}.wish-textarea:focus-visible{outline:3px solid var(--mint);outline-offset:2px}.wish-error{color:var(--pink-deep);font-size:.85rem;font-weight:700}.wish-sent-text{color:var(--ink-soft);max-width:40ch;font-size:1rem}.envelope.opened .envelope-graphic{pointer-events:none}.note-card,.continue-btn{z-index:2;position:relative}.confetti-piece{opacity:0;animation-name:confettiFall;animation-timing-function:linear;animation-iteration-count:infinite;position:absolute;top:-20px}@keyframes confettiFall{0%{opacity:0;transform:translateY(-10vh)translate(0)rotate(0)}8%{opacity:.85}92%{opacity:.85}to{opacity:0;transform:translateY(110vh)translate(24px)rotate(360deg)}}
