:root{--ink: #51233a;--berry: #8f1f4b;--pink: #ee3f78;--pink-dark: #b52257;--pink-soft: #ffdbe8;--paper: #fff8fb;font-family:ui-rounded,Arial Rounded MT Bold,Trebuchet MS,system-ui,sans-serif;color:var(--ink);background:#fff0f6;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}html{scroll-behavior:smooth;overflow-x:hidden}body{min-width:320px;margin:0;overflow-x:hidden;background:#fff0f6}button,a{font:inherit}button{color:inherit}img{display:block;max-width:100%}figure,p,h1,h2{margin:0}a{color:inherit}:focus-visible{outline:4px solid #f5bd45;outline-offset:4px}.birthday-app{min-height:100dvh;overflow:hidden;background:radial-gradient(circle at 102% 2%,#ff9fc1 0 160px,transparent 162px),radial-gradient(circle at -8% 18%,#ffc6dc 0 120px,transparent 122px),linear-gradient(180deg,#ffdce9 0,#ffdce9 760px,#fff7fb 1100px)}.primary-button{min-height:48px;display:inline-flex;align-items:center;justify-content:center;padding:12px 22px;border:0;border-radius:999px;background:var(--pink);box-shadow:0 5px 0 var(--pink-dark);color:#fff;font-weight:900;text-decoration:none;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}.primary-button:active{transform:translateY(3px);box-shadow:0 2px 0 var(--pink-dark)}.hero{width:min(100%,760px);min-height:100dvh;margin:auto;padding:max(28px,env(safe-area-inset-top)) 20px max(28px,env(safe-area-inset-bottom));display:grid;grid-template-rows:auto minmax(370px,1fr) auto;align-items:center;gap:12px;position:relative}.hero:before{content:"♡  ♥  ♡";position:absolute;top:max(18px,env(safe-area-inset-top));right:18px;color:#c8265b47;font-size:1.3rem;letter-spacing:7px;transform:rotate(8deg)}.hero__copy{max-width:560px;margin:auto;text-align:center;position:relative;z-index:3}.hero__eyebrow{margin-bottom:10px;color:#c51f59;font-size:.92rem;font-weight:900}.hero h1{max-width:620px;color:var(--berry);font-size:clamp(2.3rem,11vw,4.8rem);line-height:.96;letter-spacing:-.035em;text-shadow:0 3px 0 #fff6fa}.hero__message{max-width:520px;margin:16px auto 0;color:#71384f;font-size:clamp(1rem,4.2vw,1.15rem);line-height:1.55}.hero__photos{width:min(100%,390px);height:clamp(370px,54dvh,520px);margin:auto;position:relative}.hero-photo{position:absolute;overflow:hidden;padding:6px 6px 24px;border:2px solid #ff8eb2;border-radius:18px;background:#fff;box-shadow:0 18px 42px #97234e3d}.hero-photo img{width:100%;height:auto;border-radius:12px}.hero-photo--companion{width:clamp(124px,39vw,174px);top:13%;left:6%;transform:rotate(-7deg)}.hero-photo--primary{width:clamp(154px,49vw,220px);top:1%;right:8%;transform:rotate(3deg)}.hero__heart{width:50px;height:72px;padding:0;position:absolute;top:4%;left:6%;z-index:5;border:0;background:transparent;cursor:pointer;transition:transform .28s ease}.hero__heart img{width:50px;height:72px;image-rendering:pixelated;filter:drop-shadow(0 5px 0 #532b3a29);transform:rotate(-8deg)}.hero__heart:disabled{opacity:1;cursor:default}.hero__heart.is-found{transform:rotate(10deg) scale(1.16)}.hero__heart-note{width:118px;position:absolute;top:calc(4% + 78px);left:0;z-index:5;padding:7px 9px;border:2px solid #f283aa;border-radius:12px 12px 12px 3px;background:#fff;box-shadow:0 5px #b82d5b29;color:#a52252;font-size:.72rem;font-weight:900;line-height:1.3;text-align:center}.hero__doodle{position:absolute;z-index:4;color:var(--pink);font-size:2rem;line-height:1;text-shadow:0 2px white}.hero__doodle--one{right:2%;bottom:18%;transform:rotate(12deg)}.hero__doodle--two{right:10%;bottom:5%;color:#d5215c;font-size:1.55rem;transform:rotate(-12deg)}.hero__cta{justify-self:center;position:relative;z-index:4}.section-heading{width:min(100%,680px);margin:auto;padding:70px 22px 38px;text-align:center}.section-heading h2,.letter h2,.finale h2{color:var(--berry);font-size:clamp(2rem,8.4vw,3.8rem);line-height:1;letter-spacing:-.035em}.section-heading p{max-width:540px;margin:14px auto 0;color:#775065;font-size:1.02rem;line-height:1.55}.section-stickers{min-height:58px;margin-bottom:10px;display:flex;align-items:center;justify-content:center;gap:13px;color:var(--pink);font-size:2rem}.section-stickers img{image-rendering:pixelated}.section-stickers img:first-child{width:38px;height:auto;transform:rotate(-7deg)}.section-stickers img:last-child{width:48px;height:48px}.moments{background:#fff6fb}.memory{padding:12px 20px 64px}.memory--shift{padding-top:62px;background:#ffdbe8}.memory--note{padding-top:62px;background:#ffeaf2}.memory__button{width:min(100%,680px);display:block;margin:auto;padding:0;border:0;background:transparent;text-align:left;cursor:pointer}.memory__stage{aspect-ratio:20 / 9;display:block;position:relative}.memory__photo{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;padding:7px;border:2px solid #ff9aba;border-radius:22px;background:#fff;box-shadow:0 15px 35px #4b2a3626;transition:opacity .35s ease,transform .35s ease}.memory__photo img{width:100%;height:100%;border-radius:16px;object-fit:contain;background:#fff1f6}.memory--reveal .memory__photo--1,.memory--note .memory__photo--1{z-index:1}.memory--reveal .memory__photo--2,.memory--note .memory__photo--2{z-index:2;opacity:0;transform:translateY(10px) scale(.97)}.memory--reveal.is-active .memory__photo--1,.memory--note.is-active .memory__photo--1{opacity:0;transform:scale(.98)}.memory--reveal.is-active .memory__photo--2,.memory--note.is-active .memory__photo--2{opacity:1;transform:none}.memory--shift .memory__photo--1{z-index:2;transform:translate(-5px,4px) rotate(-1.5deg)}.memory--shift .memory__photo--2{z-index:1;transform:translate(10px,-10px) rotate(2.5deg)}.memory--shift.is-active .memory__photo--1{z-index:1;transform:translate(-10px,10px) rotate(-2.5deg)}.memory--shift.is-active .memory__photo--2{z-index:2;transform:translate(5px,-4px) rotate(1.5deg)}.memory__copy{display:grid;gap:14px;padding:22px 4px 0}.memory__caption{color:#69334a;font-size:clamp(1.05rem,4.6vw,1.25rem);font-weight:900;line-height:1.4}.memory__hint{width:fit-content;padding:7px 12px;border-radius:999px;background:var(--pink);color:#fff;font-size:.84rem;font-weight:900}.memory__note{max-width:calc(100% - 28px);position:absolute;right:14px;bottom:14px;z-index:4;padding:10px 13px;border:2px solid #ff9aba;border-radius:12px;background:#fff5faf5;box-shadow:0 5px 18px #4831242e;color:#6f304a;font-size:clamp(.78rem,3.4vw,1rem);font-weight:900;line-height:1.35;opacity:0;transform:translateY(8px);transition:opacity .28s ease .12s,transform .28s ease .12s}.memory--note.is-active .memory__note{opacity:1;transform:none}.memory__hearts{position:absolute;top:-18px;right:-18px;bottom:-18px;left:-18px;z-index:6;pointer-events:none}.memory__hearts span{position:absolute;color:var(--pink);font-size:1.55rem;opacity:0;text-shadow:0 2px white}.memory__hearts span:nth-child(1){top:2%;left:4%}.memory__hearts span:nth-child(2){top:-2%;right:18%}.memory__hearts span:nth-child(3){right:1%;bottom:22%}.memory__hearts span:nth-child(4){bottom:0;left:16%}.memory__hearts span:nth-child(5){top:30%;left:-1%}.memory.is-active .memory__hearts span{animation:memory-heart .7s ease both}.memory.is-active .memory__hearts span:nth-child(2){animation-delay:70ms}.memory.is-active .memory__hearts span:nth-child(3){animation-delay:.14s}.memory.is-active .memory__hearts span:nth-child(4){animation-delay:.21s}.memory.is-active .memory__hearts span:nth-child(5){animation-delay:.28s}.surprises{padding:0 16px 78px;position:relative;overflow:hidden;background:radial-gradient(circle at 8% 82%,#ff9cbd 0 72px,transparent 74px),radial-gradient(circle at 92% 12%,#ff8eb5 0 84px,transparent 86px),#e93875;color:#fff}.surprises:before{content:"♥";position:absolute;left:8%;top:30%;color:#ffffff2e;font-size:4rem;transform:rotate(-12deg)}.surprises__sprite{width:50px;height:72px;position:absolute;top:22px;right:18px;image-rendering:pixelated;transform:rotate(8deg)}.surprises .section-heading h2,.surprises .section-heading p{color:#fff;text-shadow:0 2px 0 #a9184b}.surprises__hearts{width:min(100%,560px);margin:auto;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}.surprise-heart{min-width:0;min-height:132px;padding:12px 7px;display:grid;place-content:center;gap:6px;border:3px solid white;border-radius:15px;background:#ffb2cb;box-shadow:0 6px #aa194c;color:#7e1740;font-size:.76rem;font-weight:900;line-height:1.25;text-align:center;cursor:pointer;transition:transform .24s cubic-bezier(.25,1,.5,1),background .24s ease}.surprise-heart:active:not(:disabled){transform:translateY(4px);box-shadow:0 2px #aa194c}.surprise-heart:disabled{opacity:1;cursor:default}.surprise-heart.is-open{background:#ffe58b;color:#76203f;transform:rotate(-2deg)}.surprise-heart:nth-child(2).is-open{transform:rotate(2deg)}.surprise-heart__icon{color:#ed2d6b;font-size:2.8rem;line-height:.9;text-shadow:0 2px 0 white}.kiss-meter{width:min(100%,440px);margin:42px auto 0;padding:24px 18px;position:relative;display:grid;justify-items:center;gap:14px;border:3px solid #ff9bbc;border-radius:16px;background:#fff2f8;color:#7e1740;text-align:center}.kiss-meter__button{min-height:48px;padding:11px 18px;border:0;border-radius:999px;background:#9d174d;color:#fff;font-weight:900;cursor:pointer}.kiss-meter__button:active:not(:disabled){transform:scale(.96)}.kiss-meter__button:disabled{opacity:1;background:#d42f6b;cursor:default}.kiss-meter__hearts{display:flex;gap:9px;color:#e5b6c7;font-size:1.6rem}.kiss-meter__hearts .is-filled{color:#ee2f6d;transform:scale(1.12)}.kiss-meter p{min-height:22px;font-size:.9rem;font-weight:900}.kiss-burst{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.kiss-burst span{position:absolute;left:50%;top:18%;color:#ed2f6d;font-size:1.4rem;animation:kiss-fly .7s ease-out both}.kiss-burst span:nth-child(2){--kiss-x: -74px;animation-delay:50ms}.kiss-burst span:nth-child(3){--kiss-x: -35px;animation-delay:.1s}.kiss-burst span:nth-child(4){--kiss-x: 38px;animation-delay:.15s}.kiss-burst span:nth-child(5){--kiss-x: 76px;animation-delay:.2s}.garden{padding:0 20px max(84px,env(safe-area-inset-bottom));position:relative;overflow:hidden;border-radius:38px 38px 0 0;background:radial-gradient(circle at 18% 8%,#ff8db3 0 8px,transparent 9px),radial-gradient(circle at 82% 14%,#f54f84 0 6px,transparent 7px),linear-gradient(180deg,#f7cadd 0,#f7cadd 18%,#dcebd6 42%)}.garden__heart{width:50px;height:72px;position:absolute;top:24px;right:15px;image-rendering:pixelated;transform:rotate(9deg)}.garden .section-heading p{color:#53674f}.garden__progress{width:fit-content;margin:0 auto 30px;padding:9px 14px;border-radius:999px;background:#fffafccc;color:#42613d;font-size:.9rem;font-weight:900}.garden__progress strong{margin-left:6px;color:#bd3e60}.garden__plots{width:min(100%,520px);margin:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.plot{display:grid;justify-items:center;gap:9px}.plot__button{width:78px;min-width:78px;height:78px;padding:5px;position:relative;display:grid;place-items:center;border:3px solid #f57fa5;border-radius:22px;background:#fff0f6;box-shadow:0 6px #ce4e79;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease}.plot__button:after{width:54px;height:14px;content:"";position:absolute;left:10px;bottom:8px;border-radius:50%;background:#a97856}.plot__button img{width:64px;height:64px;position:relative;z-index:1;image-rendering:pixelated}.plot__button:active:not(:disabled){transform:translateY(4px);box-shadow:0 2px #ce4e79}.plot__button:disabled{opacity:1;cursor:default}.plot__stage{color:#536d4d;font-size:.78rem;font-weight:900;text-transform:capitalize}.garden__notes{width:min(100%,600px);margin:30px auto 0;display:grid;gap:10px}.garden__notes:empty{display:none}.garden__notes p{padding:13px 15px;border:2px solid #ef9cb8;border-radius:15px;background:#fff4f9e6;color:#42503f;font-size:.96rem;font-weight:800;line-height:1.45;animation:note-pop .36s ease both}.chest{width:min(100%,500px);margin:42px auto 0;display:grid;justify-items:center;gap:12px;text-align:center}.chest img{width:96px;height:96px;image-rendering:pixelated}.chest p{color:#4c6248;font-weight:900}.chest.is-unlocked:not(.is-ready) img{animation:chest-bounce .56s ease}.letter{padding:80px 20px;background:#f4b7cc}.letter__paper{width:min(100%,650px);margin:auto;padding:52px 26px 34px;position:relative;border:3px solid #f486aa;border-radius:8px;background:var(--paper);box-shadow:0 18px 46px #592f3729}.letter__tape{width:86px;height:28px;position:absolute;top:-12px;left:calc(50% - 43px);background:#ffe06fdb;transform:rotate(-2deg)}.letter__stickers{margin:-22px 0 18px;display:flex;align-items:end;justify-content:flex-end;gap:10px;color:var(--pink);font-size:1.7rem}.letter__stickers img{image-rendering:pixelated}.letter__stickers img:first-child{width:38px;height:auto;transform:rotate(6deg)}.letter__stickers img:nth-child(2){width:48px;height:48px}.letter h2{margin-bottom:28px}.letter p{margin-top:18px;color:#513c44;font-family:Georgia,Times New Roman,serif;font-size:clamp(1.06rem,4.4vw,1.18rem);line-height:1.75}.letter__signoff{margin-bottom:28px;font-style:italic}.finale{min-height:100dvh;padding:max(72px,env(safe-area-inset-top)) 20px max(54px,env(safe-area-inset-bottom));display:grid;align-content:center;justify-items:center;gap:28px;position:relative;overflow:hidden;background:radial-gradient(circle at 18% 12%,#ff8db3 0 90px,transparent 92px),radial-gradient(circle at 88% 76%,#f8568a 0 120px,transparent 122px),linear-gradient(155deg,#a91f54,#611b43);color:#fff8f1;text-align:center}.finale__sprite{width:50px;height:72px;margin-bottom:-14px;image-rendering:pixelated;transform:rotate(-7deg)}.finale h2{color:#fff}.final-card{width:min(72vw,320px);aspect-ratio:9 / 16;padding:0;border:0;background:transparent;perspective:1000px;cursor:pointer}.final-card:disabled{opacity:1;cursor:default}.final-card__inner{width:100%;height:100%;display:block;position:relative;transform-style:preserve-3d;transition:transform .65s cubic-bezier(.2,.75,.25,1)}.final-card__face{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;padding:7px 7px 28px;border:3px solid #ff8eb2;border-radius:15px;background:#fff;box-shadow:0 22px 55px #160a1059;backface-visibility:hidden}.final-card__face img{width:100%;height:100%;border-radius:10px;object-fit:contain;background:#fff1f6}.final-card__back,.finale.is-flipped .final-card__inner{transform:rotateY(180deg)}.finale__hint{min-height:30px;max-width:580px;color:#ffd7df;font-size:clamp(1.05rem,4.8vw,1.35rem);font-weight:900;line-height:1.4}.heart-confetti{min-height:30px;display:flex;justify-content:center;gap:9px;color:#ff91aa}.heart-confetti span{display:inline-block;font-size:1.25rem;animation:heart-pop .8s ease both}.credits{padding:28px 20px max(28px,env(safe-area-inset-bottom));background:#39212e;color:#dbc8d0;font-size:.78rem;line-height:1.6;text-align:center}.credits p+p{margin-top:5px}.credits a{color:#f8d7df}@keyframes note-pop{0%{opacity:0;transform:translateY(8px) scale(.98)}}@keyframes chest-bounce{40%{transform:translateY(-12px) rotate(-3deg)}70%{transform:translateY(0) rotate(3deg)}}@keyframes heart-pop{0%{opacity:0;transform:translateY(10px) scale(.3)}55%{opacity:1;transform:translateY(-9px) scale(1.2)}to{opacity:0;transform:translateY(-18px) scale(.8)}}@keyframes memory-heart{0%{opacity:0;transform:translateY(8px) scale(.25) rotate(-12deg)}55%{opacity:1;transform:translateY(-10px) scale(1.2) rotate(8deg)}to{opacity:0;transform:translateY(-22px) scale(.82)}}@keyframes kiss-fly{0%{opacity:0;transform:translateY(12px) scale(.3)}45%{opacity:1}to{opacity:0;transform:translate(var(--kiss-x, 0),-70px) scale(1.1) rotate(12deg)}}@media(min-width:760px){.hero{width:min(100% - 48px,1040px);grid-template:"copy photos" 1fr "cta photos" auto / minmax(300px,1fr) minmax(360px,.9fr);column-gap:42px;padding-inline:12px}.hero__copy{grid-area:copy;margin:0;text-align:left}.hero__message{margin-left:0}.hero__photos{grid-area:photos;width:100%;height:min(76dvh,680px)}.hero-photo--companion{width:220px;left:0}.hero-photo--primary{width:275px;right:2%}.hero__heart{left:0}.hero__heart-note{left:-12px}.hero__cta{grid-area:cta;justify-self:start;align-self:start}.section-heading{padding-top:96px}.memory{padding-bottom:96px}.memory--shift,.memory--note{padding-top:96px}.surprise-heart{min-height:158px;font-size:.88rem}.garden{padding-bottom:110px}.plot__button{width:90px;height:90px}.plot__button:after{left:16px}.letter__paper{padding:64px 58px 44px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{scroll-behavior:auto!important;animation:none!important;transition:none!important}.finale.is-flipped .final-card__inner{transform:none}.final-card__back{transform:none;opacity:0}.finale.is-flipped .final-card__front{opacity:0}.finale.is-flipped .final-card__back{opacity:1}.heart-confetti,.kiss-burst{display:none}}
