:root{--paper:#f7f0e2;--paper-light:#fffaf1;--ink:#292520;--muted:#746b60;--coral:#df6359;--coral-dark:#ae413e;--butter:#f1bf57;--blue:#5e8f99;--green:#718b70;--berry:#a15469;--night:#171923;--night-soft:#242535;--starlight:#f8e2a4;--serif:Georgia, "Times New Roman", serif;--sans:"Trebuchet MS", "Segoe UI", sans-serif;--hand:"Segoe Print", "Bradley Hand", cursive}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--paper);color:var(--ink);font-family:var(--sans);margin:0}body.keepsake-locked{overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}.birthday-experience{background:radial-gradient(circle at 15% 8%, #efb54a1f, transparent 28rem), radial-gradient(circle at 88% 30%, #e163591a, transparent 32rem), var(--paper);min-height:100vh;position:relative;overflow:hidden}.paper-noise{z-index:100;pointer-events:none;opacity:.13;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.28'/%3E%3C/svg%3E");position:fixed;inset:0}.section-kicker{color:var(--coral-dark);letter-spacing:.18em;text-transform:uppercase;margin:0;font-size:.69rem;font-weight:800;line-height:1.5}.gift-reveal{z-index:90;background:linear-gradient(135deg,#0000 48%,#3e504417 48% 52%,#0000 52%) 0 0/72px 72px,linear-gradient(45deg,#0000 48%,#e1635914 48% 52%,#0000 52%) 0 0/72px 72px,#ddd6bc;place-items:center;padding:5vw;transition:opacity .8s,visibility .8s,transform .8s cubic-bezier(.2,.75,.25,1);display:grid;position:fixed;inset:0;overflow:hidden}.gift-reveal:before,.gift-reveal:after{content:"";z-index:2;background:var(--coral);position:absolute;box-shadow:0 0 25px #8039332e}.gift-reveal:before{width:68px;top:0;bottom:0;left:calc(50% - 34px)}.gift-reveal:after{height:68px;top:calc(50% - 34px);left:0;right:0}.gift-reveal--opened{opacity:0;visibility:hidden;pointer-events:none;transform:scale(1.08)}.gift-card{z-index:5;background:var(--paper-light);text-align:center;border:1px solid #463c3024;width:min(90vw,580px);padding:clamp(2rem,6vw,4.5rem);position:relative;transform:rotate(-1deg);box-shadow:0 30px 90px #3a302340}.gift-card:before{content:"";pointer-events:none;border:1px solid #a1546930;position:absolute;inset:12px}.gift-card h1{max-width:470px;font:500 clamp(2.4rem, 7vw, 5.1rem)/.95 var(--serif);letter-spacing:-.055em;margin:1rem auto .9rem}.gift-card>p:not(.section-kicker){max-width:390px;color:var(--muted);font:italic 1.05rem/1.7 var(--serif);margin:0 auto}.gift-seal{background:var(--ink);color:#fff;cursor:pointer;letter-spacing:.09em;text-transform:uppercase;border:0;border-radius:999px;grid-template-columns:auto 1fr;align-items:center;gap:.7rem;margin-top:2rem;padding:.55rem 1rem .55rem .55rem;font-size:.7rem;font-weight:800;transition:transform .25s,background .25s;display:inline-grid}.gift-seal span{background:var(--coral);border-radius:50%;place-items:center;width:2.65rem;height:2.65rem;font-size:1rem;display:grid}.gift-seal:hover{background:var(--coral-dark);transform:translateY(-2px)rotate(.5deg)}.reveal-confetti{z-index:4;background:var(--butter);border-radius:2px;width:14px;height:42px;position:absolute;transform:rotate(24deg)}.reveal-confetti-one{top:13%;left:9%}.reveal-confetti-two{background:var(--blue);bottom:13%;right:10%;transform:rotate(-31deg)}.reveal-confetti-three{background:var(--berry);border-radius:50%;width:22px;height:22px;top:16%;right:16%}.birthday-hero{isolation:isolate;place-items:center;min-height:115vh;padding:10vh 5vw 14vh;display:grid;position:relative}.birthday-hero:before{content:"";z-index:-1;aspect-ratio:1;background:var(--butter);opacity:.14;border-radius:50%;width:min(52vw,640px);position:absolute;top:48%;left:50%;transform:translate(-50%,-50%)}.hero-copy{z-index:5;text-align:center;width:min(90vw,780px);position:relative}.hero-age{color:var(--coral);font:800 clamp(8rem, 25vw, 21rem)/.8 var(--serif);letter-spacing:-.12em;text-shadow:5px 5px 0 var(--paper-light);margin:.15em 0 -.04em}.hero-copy h2{font:500 clamp(3rem, 8vw, 7rem)/.92 var(--serif);letter-spacing:-.065em;margin:0}.hero-copy h2 em,.story-intro h2 em,.ribbon-heading h2 em,.zodiac-copy h2 em{color:var(--coral-dark);font-family:var(--hand);letter-spacing:-.08em;font-size:.72em;font-weight:400}.hero-line{max-width:460px;color:var(--muted);font:italic clamp(1rem, 2vw, 1.25rem)/1.6 var(--serif);margin:1.6rem auto 0}.scroll-note{color:var(--ink);letter-spacing:.13em;text-transform:uppercase;align-items:center;gap:.7rem;margin-top:2rem;font-size:.67rem;font-weight:800;text-decoration:none;display:inline-flex}.scroll-note span{color:var(--coral);font-size:1.1rem;animation:1.4s ease-in-out infinite noteNudge}.hero-doodles span{z-index:1;color:var(--berry);font:700 2rem var(--hand);opacity:.72;position:absolute}.hero-doodles span:first-child{top:15%;left:9%;transform:rotate(-16deg)}.hero-doodles span:nth-child(2){color:var(--coral);top:17%;right:9%;transform:rotate(12deg)}.hero-doodles span:nth-child(3){color:var(--blue);bottom:15%;left:12%}.hero-doodles span:nth-child(4){color:var(--green);bottom:13%;right:13%;transform:rotate(9deg)}.memory-photo{background:var(--paper-light);color:var(--ink);cursor:pointer;text-align:left;border:0;grid-template-rows:1fr auto;margin:0;padding:.55rem .55rem .9rem;transition:transform .28s,box-shadow .28s;display:grid;position:relative;box-shadow:0 18px 45px #342d232e}.memory-photo:hover{z-index:8;box-shadow:0 24px 58px #342d2340;transform:translateY(-7px)rotate(0)!important}.memory-photo img,.photo-placeholder{object-fit:cover;width:100%;height:100%;min-height:0}.photo-placeholder{background:#e6b6a9;min-height:160px;display:block;position:relative;overflow:hidden}.memory-photo--blue .photo-placeholder{background:#a9c8ce}.memory-photo--gold .photo-placeholder{background:#e7c273}.memory-photo--green .photo-placeholder{background:#a8b8a0}.memory-photo--berry .photo-placeholder{background:#c594a1}.placeholder-sun{aspect-ratio:1;border:3px solid #fffaf1b3;border-radius:50%;width:18%;position:absolute;top:12%;right:14%}.placeholder-hill{background:#2b352d2e;border-radius:50% 50% 0 0;position:absolute;bottom:-22%;transform:rotate(-7deg)}.placeholder-hill-one{width:90%;height:55%;left:-25%}.placeholder-hill-two{background:#fffaf138;width:95%;height:68%;right:-35%;transform:rotate(11deg)}.placeholder-label{z-index:2;color:#fff;letter-spacing:.16em;text-transform:uppercase;border:1px solid #ffffff85;padding:.3rem .5rem;font-size:.53rem;font-weight:900;position:absolute;bottom:12%;left:10%}.photo-placeholder strong{color:#fffaf19e;font:500 clamp(2.5rem, 6vw, 5rem)/1 var(--serif);position:absolute;top:8%;left:8%}.photo-caption{font:600 .72rem/1.3 var(--hand);padding:.8rem .25rem 0;display:block}.tape-strip{opacity:.78;width:34%;height:1.6rem;transform:translateX(-50%) rotate(var(--tape-turn));background:#f0c15dad;position:absolute;top:-.7rem;left:50%}.hero-photos{z-index:2;pointer-events:none;position:absolute;inset:7% 2.5% 5%}.hero-photo{pointer-events:auto;width:clamp(125px,16vw,230px);height:clamp(180px,23vw,330px);position:absolute}.hero-photo-1{top:16%;left:3%;transform:rotate(-8deg)}.hero-photo-2{top:13%;right:4%;transform:rotate(7deg)}.hero-photo-3{width:clamp(110px,14vw,190px);height:clamp(155px,20vw,270px);bottom:7%;left:10%;transform:rotate(5deg)}.hero-photo-4{width:clamp(105px,13vw,180px);height:clamp(150px,19vw,255px);bottom:4%;right:12%;transform:rotate(-5deg)}.hero-photo-5{width:clamp(90px,11vw,145px);height:clamp(128px,16vw,205px);bottom:-2%;left:46%;transform:rotate(3deg)}.trait-ticker{z-index:4;background:var(--paper-light);border-block:1px solid #29252024;grid-template-columns:auto 1fr;align-items:center;gap:2rem;padding:1.5rem max(5vw,50vw - 590px);display:grid;position:relative;transform:rotate(-1deg)scale(1.01)}.trait-ticker>p{color:var(--muted);letter-spacing:.15em;text-transform:uppercase;margin:0;font-size:.62rem;font-weight:900}.trait-ticker>div{justify-content:space-around;gap:1rem;display:flex;overflow:hidden}.trait-pill{white-space:nowrap;font:600 clamp(.95rem, 1.8vw, 1.25rem)/1 var(--hand)}.trait-pill:before{content:"✦";color:var(--coral);margin-right:.65rem}.trait-pill-2:before{color:var(--blue)}.trait-pill-3:before{color:var(--butter)}.trait-pill-4:before{color:var(--green)}.story-intro{text-align:center;width:min(88vw,850px);margin:0 auto;padding:20vh 0 12vh}.story-intro h2,.ribbon-heading h2{font:500 clamp(2.7rem, 6.7vw, 6.1rem)/.98 var(--serif);letter-spacing:-.055em;margin:1rem 0 1.6rem}.story-intro>p:last-child{max-width:600px;color:var(--muted);font:italic clamp(1rem, 2vw, 1.23rem)/1.75 var(--serif);margin:0 auto}.memory-chapters{width:min(92vw,1180px);margin:0 auto}.memory-chapter{grid-template-columns:minmax(250px,.75fr) minmax(520px,1.25fr);align-items:center;gap:clamp(2rem,7vw,7rem);min-height:100vh;padding:10vh 0;display:grid}.memory-chapter:nth-child(2n){grid-template-columns:minmax(520px,1.25fr) minmax(250px,.75fr)}.memory-chapter:nth-child(2n) .chapter-copy{order:2}.memory-chapter:nth-child(2n) .chapter-collage{order:1}.chapter-copy>span{color:#29252014;font:700 clamp(6rem, 13vw, 11rem)/.75 var(--serif);margin-bottom:-.2em;display:block}.chapter-copy h3{font:500 clamp(2rem, 4vw, 4rem)/1.02 var(--serif);letter-spacing:-.045em;margin:.8rem 0 1.3rem}.chapter-copy>p:last-child{color:var(--muted);font:1rem/1.8 var(--serif)}.chapter-collage{height:min(68vw,650px);position:relative}.chapter-photo{width:41%;height:58%;position:absolute}.chapter-photo-1{z-index:4;top:20%;left:28%;transform:rotate(-2deg)}.chapter-photo-2{z-index:2;width:34%;height:48%;top:3%;left:2%;transform:rotate(-8deg)}.chapter-photo-3{z-index:3;width:35%;height:47%;top:7%;right:2%;transform:rotate(7deg)}.chapter-photo-4{z-index:2;width:34%;height:43%;bottom:1%;right:8%;transform:rotate(-5deg)}.zodiac-section{background:radial-gradient(circle at 75% 45%, #a1546933, transparent 32rem), radial-gradient(circle at 30% 80%, #5e8f9921, transparent 28rem), var(--night);color:#fff8e9;grid-template-columns:minmax(280px,.68fr) minmax(520px,1.32fr);align-items:center;gap:clamp(2rem,6vw,6rem);min-height:130vh;margin-top:12vh;padding:18vh max(5vw,50vw - 620px);display:grid;position:relative;overflow:hidden}.zodiac-section:before,.zodiac-section:after{content:"";opacity:.4;pointer-events:none;background-image:radial-gradient(circle,#fff 0 1px,#0000 1.5px);background-size:107px 101px;position:absolute;inset:0}.zodiac-section:after{opacity:.16;background-position:41px 22px;background-size:63px 67px}.zodiac-paper-edge{z-index:3;background:var(--paper);clip-path:polygon(0 0,100% 0,100% 10%,96% 52%,92% 19%,87% 68%,82% 27%,77% 61%,72% 18%,66% 70%,60% 28%,54% 64%,48% 17%,42% 73%,36% 23%,30% 66%,24% 15%,18% 73%,12% 28%,6% 65%,0 20%);height:42px;position:absolute;top:-2px;left:0;right:0}.zodiac-copy{z-index:5;position:relative}.zodiac-copy .section-kicker{color:var(--starlight)}.zodiac-symbol{color:var(--starlight);font:400 clamp(5rem, 12vw, 9rem)/1 var(--serif);text-shadow:0 0 35px #f8e2a447;margin:1rem 0 -.15em;display:block}.zodiac-copy h2{font:500 clamp(2.6rem, 5vw, 5rem)/.98 var(--serif);letter-spacing:-.05em;margin:0}.zodiac-copy h2 em{color:var(--starlight)}.zodiac-copy>p:not(.section-kicker){color:#fff8e985;letter-spacing:.13em;text-transform:uppercase;margin:1.4rem 0 .45rem;font-size:.7rem;font-weight:800}.zodiac-copy small{color:#fff8e95c;font:italic .9rem var(--serif)}.zodiac-map{z-index:5;aspect-ratio:1.25;background:radial-gradient(circle at 52% 48%,#f8e2a414,#0000 64%);border:1px solid #f8e2a41f;border-radius:49% 45% 52% 46%;width:100%;position:relative}.zodiac-lines{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.zodiac-lines line{stroke:#f8e2a4ad;stroke-width:.25px;stroke-dasharray:120;stroke-dashoffset:120px;filter:drop-shadow(0 0 1px var(--starlight));animation:drawConstellation 1.4s var(--line-delay) ease forwards}.zodiac-star{z-index:4;left:var(--star-x);top:var(--star-y);cursor:pointer;background:0 0;border:0;border-radius:50%;width:42px;height:42px;position:absolute;transform:translate(-50%,-50%)}.zodiac-star:before{content:"";width:calc(8px * var(--star-scale));height:calc(8px * var(--star-scale));box-shadow:0 0 9px var(--starlight), 0 0 24px #f8e2a47a;animation:starPulse 2.4s var(--star-delay) ease-in-out infinite alternate;background:#fff8dc;border-radius:50%;transition:transform .25s,box-shadow .25s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.zodiac-star:hover:before,.zodiac-star.is-active:before{box-shadow:0 0 14px #fff, 0 0 42px var(--starlight);transform:translate(-50%,-50%)scale(1.7)}.zodiac-star span{color:#fff8e96e;font-size:.5rem;font-weight:800;position:absolute;top:calc(50% - 15px);left:calc(50% + 10px)}.reason-card{z-index:110;color:#fff8e9;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#1a1924f0;border:1px solid #f8e2a447;width:min(88vw,530px);padding:2rem 4rem 2rem 2rem;animation:.35s both reasonReveal;position:fixed;bottom:6vh;left:50%;transform:translate(-50%);box-shadow:0 28px 80px #0000007a}.reason-card>span{color:var(--starlight);letter-spacing:.15em;font-size:.6rem;font-weight:800}.reason-card p{font:italic clamp(1.4rem, 4vw, 2.25rem)/1.25 var(--serif);margin:.7rem 0 0}.reason-card button{color:#ffffffa6;cursor:pointer;background:0 0;border:0;width:2.4rem;height:2.4rem;font-size:1.8rem;position:absolute;top:.8rem;right:.9rem}.reason-card i{background:linear-gradient(90deg, var(--starlight), var(--coral));transform-origin:0;height:2px;animation:6.5s linear forwards reasonTimer;position:absolute;bottom:0;left:0;right:0}.ribbon-section{padding:20vh 0}.ribbon-heading{text-align:center;width:min(88vw,900px);margin:0 auto 10vh}.memory-ribbon{width:100%;overflow:hidden}.memory-ribbon-track{align-items:center;gap:1.2rem;width:max-content;padding:2rem 1rem;animation:52s linear infinite alternate ribbonTravel;display:flex}.memory-ribbon .memory-photo{flex:none;width:clamp(160px,19vw,260px);height:clamp(240px,29vw,390px);transform:rotate(-3deg)}.memory-ribbon .memory-photo:nth-child(3n){transform:rotate(4deg)translateY(24px)}.memory-ribbon .memory-photo:nth-child(4n){transform:rotate(-5deg)translateY(-18px)}.letter-section{background:linear-gradient(#5e8f9917 1px,#0000 1px) 0 0/100% 34px,#dbe3db;place-items:center;min-height:130vh;padding:16vh 5vw;display:grid;position:relative}.letter-shadow{filter:blur(18px);background:#2830272b;width:min(84vw,680px);height:min(85vh,760px);position:absolute;transform:translate(2rem,2rem)rotate(2deg)}.birthday-letter{background:var(--paper-light);width:min(88vw,680px);padding:clamp(2rem,7vw,5rem);position:relative;transform:rotate(-1.1deg);box-shadow:0 28px 80px #2b342a38}.birthday-letter:after{content:"";pointer-events:none;border:1px solid #2925201a;position:absolute;inset:1rem}.letter-stamp{z-index:2;aspect-ratio:1;border:1px dashed var(--coral-dark);width:4.6rem;color:var(--coral-dark);letter-spacing:.15em;text-align:center;place-items:center;font-size:.62rem;font-weight:900;line-height:1.1;display:grid;position:absolute;top:2rem;right:2rem;transform:rotate(6deg)}.letter-date{color:var(--muted);letter-spacing:.14em;text-transform:uppercase;font-size:.68rem;font-weight:800}.birthday-letter h2{font:500 clamp(2.5rem, 7vw, 4.7rem)/1 var(--hand);letter-spacing:-.07em;margin:2.5rem 0 2rem}.birthday-letter>p:not(.letter-date){z-index:2;color:#4b443c;font:1.05rem/1.85 var(--serif);position:relative}.birthday-letter strong{z-index:2;color:var(--coral-dark);font:500 1.9rem var(--hand);margin-top:2.2rem;display:block;position:relative}.wish-finale{background:var(--coral);color:#fffaf0;text-align:center;align-content:center;place-items:center;gap:1rem;min-height:110vh;padding:15vh 5vw 3rem;display:grid;position:relative;overflow:hidden}.wish-finale:before{content:"";aspect-ratio:1;border:1px solid #fffaf02b;border-radius:50%;width:min(72vw,730px);position:absolute;box-shadow:0 0 0 80px #fffaf00d,0 0 0 160px #fffaf00a}.wish-finale .section-kicker{z-index:2;color:#fff1c8;position:relative}.wish-finale h2{z-index:2;max-width:760px;font:500 clamp(2.7rem, 7vw, 6.3rem)/.96 var(--serif);letter-spacing:-.055em;margin:.6rem auto;position:relative}.cake{z-index:3;width:150px;height:180px;margin-bottom:1rem;position:relative}.cake span{position:absolute;left:50%;transform:translate(-50%)}.candle-flame{z-index:4;transform-origin:bottom;background:radial-gradient(circle at 50% 70%,#fffbe0 0 20%,#ffe66e 38%,#ff9f43 72%);border-radius:65% 38% 62% 42%;width:24px;height:38px;animation:.85s ease-in-out infinite flameDance;top:-1px;box-shadow:0 0 20px #ffd878,0 0 48px #ffd878ad}.candle-flame:after{content:"";background:#fffdf2;border-radius:60% 40% 55% 45%;width:8px;height:17px;position:absolute;bottom:4px;left:50%;transform:translate(-50%)}.candle-wick{z-index:1;background:linear-gradient(#211b18,#514038 75%,#2d2420);border-radius:999px 999px 0 0;width:4px;height:15px;top:27px}.candle-wick:after{content:"";background:#171312;border-radius:50%;width:6px;height:5px;position:absolute;top:-2px;left:50%;transform:translate(-50%)}.candle{z-index:2;background:repeating-linear-gradient(-35deg, #fff8eb 0 7px, var(--blue) 7px 13px);border-radius:4px 4px 0 0;width:13px;height:54px;top:34px}.cake-top{background:#fff2d1;border-radius:50%;width:118px;height:34px;top:83px}.cake-base{background:repeating-linear-gradient(90deg,#f5cb66 0 16px,#efbc4a 16px 32px);border-radius:0 0 17px 17px;width:118px;height:75px;top:99px;box-shadow:inset 0 -12px #b7413d29}.wish-finale--made .candle-flame{opacity:0;transition:all .5s;transform:translate(-50%)translateY(-20px)scale(.2)}.wish-finale--made .candle-wick:before{content:"";border:2px solid #fff5e17a;opacity:0;border-bottom-color:#0000;border-right-color:#0000;border-radius:50%;width:8px;height:22px;animation:2.2s ease-out .2s smokeCurl;position:absolute;bottom:9px;left:50%}.wish-button{z-index:4;color:#fff;cursor:pointer;letter-spacing:.13em;text-transform:uppercase;background:0 0;border:1px solid #fffaf08c;border-radius:999px;margin-top:1.2rem;padding:1rem 1.5rem;font-size:.7rem;font-weight:900;transition:background .25s,color .25s,transform .25s;position:relative}.wish-button:hover:not(:disabled){color:var(--coral-dark);background:#fffaf0;transform:translateY(-3px)}.wish-status{z-index:3;min-height:1.4rem;font:italic 1rem var(--serif);margin:0;position:relative}.wish-finale footer{z-index:3;color:#fffaf094;letter-spacing:.15em;text-transform:uppercase;font-size:.58rem;font-weight:800;position:absolute;bottom:2rem}.celebration-burst{pointer-events:none;position:absolute;inset:0}.finale-confetti{z-index:50;pointer-events:none;position:fixed;inset:0;overflow:hidden}.finale-confetti i{left:var(--left);background:hsl(var(--hue) 78% 70%);width:7px;height:13px;box-shadow:0 0 8px hsl(var(--hue) 75% 66% / 42%);animation:confettiFall var(--fall-duration) var(--fall-delay) ease-in forwards;border-radius:2px;position:absolute;top:-5%}.finale-confetti i:nth-child(3n){border-radius:50%;width:9px;height:9px}.finale-confetti i:nth-child(4n){border-radius:999px;width:12px;height:4px}.finale-balloons{z-index:1;pointer-events:none;position:absolute;inset:0;overflow:hidden}.finale-balloons i{left:var(--balloon-x);aspect-ratio:.82;background:radial-gradient(circle at 32% 26%, #fff9 0 6%, transparent 7%), var(--balloon-color);opacity:0;width:clamp(42px,6vw,72px);animation:balloonRise var(--balloon-duration) var(--balloon-delay) cubic-bezier(.2, .6, .3, 1) forwards;border-radius:50% 50% 46% 46%;position:absolute;bottom:-24%;box-shadow:inset -9px -8px #4e262117}.finale-balloons i:before{content:"";background:var(--balloon-color);clip-path:polygon(50% 0,100% 100%,0 100%);width:12px;height:10px;position:absolute;bottom:-7px;left:50%;transform:translate(-50%)}.balloon-string{transform-origin:top;background:#fffaf08c;width:1px;height:95px;animation:.95s ease-in-out infinite alternate balloonStringSway;position:absolute;top:calc(100% + 7px);left:50%;transform:translate(-50%)rotate(-2deg)}.memory-modal{z-index:120;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#1b1816e8;place-items:center;padding:6vh 5vw;animation:.3s both modalFade;display:grid;position:fixed;inset:0}.modal-close{z-index:3;color:#fff;cursor:pointer;background:#0000002e;border:1px solid #ffffff52;border-radius:50%;width:3rem;height:3rem;font-size:1.8rem;position:absolute;top:1.5rem;right:1.5rem}.modal-photo{background:var(--paper-light);width:min(88vw,700px);max-height:84vh;padding:.75rem .75rem 1.5rem;overflow:auto;transform:rotate(-1deg);box-shadow:0 30px 100px #0000008c}.modal-photo img,.modal-placeholder{object-fit:contain;width:100%;min-height:min(65vh,620px)}.modal-placeholder{color:#fffaf1d1;text-align:center;background:#e4b2a7;align-content:center;place-items:center;gap:.6rem;display:grid}.modal-photo--blue .modal-placeholder{background:#9ebfc6}.modal-photo--gold .modal-placeholder{background:#dfb863}.modal-photo--green .modal-placeholder{background:#9daf97}.modal-photo--berry .modal-placeholder{background:#b98492}.modal-placeholder span{letter-spacing:.16em;text-transform:uppercase;font-size:.65rem;font-weight:900}.modal-placeholder strong{font:500 clamp(5rem, 20vw, 11rem)/.9 var(--serif)}.modal-placeholder small{max-width:280px;font:italic .9rem/1.5 var(--serif)}.modal-photo>p{text-align:center;font:600 .95rem var(--hand);margin:1rem 0 0}@keyframes noteNudge{50%{transform:translateY(5px)}}@keyframes drawConstellation{to{stroke-dashoffset:0}}@keyframes starPulse{to{opacity:.55;transform:translate(-50%,-50%)scale(.72)}}@keyframes reasonReveal{0%{opacity:0;transform:translate(-50%,24px)}}@keyframes reasonTimer{to{transform:scaleX(0)}}@keyframes ribbonTravel{0%{transform:translate(1vw)}to{transform:translate(calc(99vw - 100%))}}@keyframes flameDance{0%,to{transform:translate(-50%)rotate(-2deg)scale(.96,1.02)}28%{transform:translate(calc(2px - 50%))rotate(5deg)scale(1.05,.9)}58%{transform:translate(calc(-50% - 2px))rotate(-5deg)scale(.91,1.08)}78%{transform:translate(calc(1px - 50%))rotate(2deg)scale(1.02,.95)}}@keyframes smokeCurl{0%{opacity:0;transform:translate(-50%)scale(.6)rotate(0)}20%{opacity:.65}to{opacity:0;transform:translate(-20%,-34px)scale(1.3)rotate(24deg)}}@keyframes balloonRise{0%{opacity:0;transform:translate(-50%)rotate(-2deg)}10%{opacity:.9}48%{opacity:.9;transform:translate3d(calc(-50% + var(--balloon-drift)), -58vh, 0) rotate(1deg)}78%{opacity:.9;transform:translate3d(calc(-50% + var(--balloon-drift)), -72vh, 0) rotate(2deg)}to{opacity:0;transform:translate3d(calc(-50% + var(--balloon-drift)), -125vh, 0) rotate(3deg)}}@keyframes balloonStringSway{0%{transform:translate(-50%)rotate(-2.4deg)}to{transform:translate(-50%)rotate(2.4deg)}}@keyframes confettiFall{0%{opacity:0;transform:translateY(-4vh)rotate(0)}8%{opacity:1}to{opacity:.12;transform:translate3d(var(--drift), 110vh, 0) rotate(var(--spin))}}@keyframes modalFade{0%{opacity:0}}@media (width<=900px){.birthday-hero{min-height:1100px;padding-top:8rem}.hero-age{font-size:clamp(9rem,30vw,15rem)}.hero-photo{width:145px;height:205px}.hero-photo-1{top:12%}.hero-photo-2{top:10%}.hero-photo-3,.hero-photo-4{bottom:8%}.hero-photo-5{bottom:1%}.trait-ticker{text-align:center;grid-template-columns:1fr;gap:1rem}.memory-chapter,.memory-chapter:nth-child(2n){grid-template-columns:1fr;gap:1rem;min-height:auto;padding:8vh 0 12vh}.memory-chapter:nth-child(2n) .chapter-copy,.memory-chapter:nth-child(2n) .chapter-collage{order:initial}.chapter-copy{width:min(88vw,620px)}.chapter-collage{height:min(90vw,680px)}.zodiac-section{text-align:center;grid-template-columns:1fr;gap:5rem;padding-block:16vh}.zodiac-copy{max-width:620px;margin:0 auto}.zodiac-map{width:min(92vw,760px);margin:0 auto}}@media (width<=640px){.gift-reveal:before{width:44px;left:calc(50% - 22px)}.gift-reveal:after{height:44px;top:calc(50% - 22px)}.gift-card{width:90vw;padding:2.5rem 1.5rem}.gift-card:before{inset:8px}.birthday-hero{place-items:start center;min-height:1320px;padding:12vh 1rem 7vh}.birthday-hero:before{width:100vw;top:27%}.hero-copy{width:95vw}.hero-age{font-size:clamp(8rem,45vw,12rem)}.hero-copy h2{font-size:clamp(2.7rem,14vw,4.7rem)}.hero-line{max-width:310px}.hero-doodles span:first-child,.hero-doodles span:nth-child(2){top:6%}.hero-photos{top:auto;bottom:2rem;height:420px;inset-inline:0}.hero-photo{width:112px;height:162px}.hero-photo-1{top:20%;left:4%}.hero-photo-2{top:10%;right:4%}.hero-photo-3{width:105px;height:150px;bottom:2%;left:20%}.hero-photo-4{width:108px;height:155px;bottom:1%;right:18%}.hero-photo-5{width:92px;height:133px;top:2%;left:39%}.photo-caption{padding-top:.55rem;font-size:.56rem}.photo-placeholder{min-height:110px}.trait-ticker{transform:none}.trait-ticker>div{scrollbar-width:none;justify-content:flex-start;padding-bottom:.5rem;overflow-x:auto}.story-intro{padding:14vh 0 9vh}.story-intro h2,.ribbon-heading h2{font-size:clamp(2.5rem,12vw,4rem)}.memory-chapters{width:90vw}.chapter-copy>span{font-size:6rem}.chapter-copy h3{font-size:2.45rem}.chapter-collage{height:125vw;margin-inline:-2vw}.chapter-photo{width:48%;height:55%}.chapter-photo-1{left:25%}.chapter-photo-2{left:0}.chapter-photo-3{right:0}.chapter-photo-4{right:7%}.zodiac-section{min-height:110vh;margin-top:3vh;padding-inline:1rem}.zodiac-symbol{font-size:5rem}.zodiac-copy h2{font-size:2.8rem}.zodiac-map{aspect-ratio:1.05;width:98vw;margin-left:-1rem}.zodiac-star{width:46px;height:46px}.zodiac-star span{font-size:.48rem}.reason-card{padding:1.5rem 3.5rem 1.5rem 1.5rem;bottom:1.2rem}.ribbon-section{padding:14vh 0}.ribbon-heading{margin-bottom:5vh}.memory-ribbon{scroll-snap-type:x mandatory;scrollbar-width:none;padding-block:1rem;overflow-x:auto}.memory-ribbon-track{animation:none}.memory-ribbon .memory-photo{scroll-snap-align:center;width:170px;height:260px}.letter-section{min-height:115vh;padding-inline:1rem}.birthday-letter{width:94vw;padding:3.2rem 1.7rem 2.5rem}.letter-stamp{width:3.6rem;top:1.2rem;right:1.2rem}.birthday-letter h2{margin-top:3.5rem}.wish-finale{min-height:100svh}.wish-finale h2{font-size:clamp(2.7rem,13vw,4.5rem)}.modal-photo{width:92vw}.modal-placeholder{min-height:60vh}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
