:root{--bg:#04070c;--bg-soft:#070c13;--ink:#eaf2f8;--ink-soft:#b9c9d7;--muted:#7f92a6;--line:#9fd6f421;--line-strong:#9fd6f44d;--baby:#c9e9ff;--sky:#8ccdf0;--sky-deep:#4c9bc4;--glow:#7cc4ec59;--font-display:ui-serif, "New York", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;--font-sans:ui-sans-serif, -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Helvetica, Arial, sans-serif}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--bg);min-height:100vh;color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-weight:300;line-height:1.6;overflow-x:hidden}::selection{color:#fff;background:#8ccdf03d}main{z-index:2;position:relative}a{color:inherit}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ambient{z-index:0;pointer-events:none;opacity:.75;background-image:radial-gradient(1200px 720px at 50% -8%,#7cc4ec1c,#0000 65%),radial-gradient(900px 620px at 92% 28%,#7cc4ec0d,#0000 62%),radial-gradient(700px 640px at 6% 82%,#7cc4ec0b,#0000 60%),radial-gradient(1.2px 1.2px at 8% 16%,#c9e9ff80,#0000),radial-gradient(1px 1px at 18% 62%,#c9e9ff52,#0000),radial-gradient(1.4px 1.4px at 27% 32%,#c9e9ff66,#0000),radial-gradient(1px 1px at 38% 81%,#c9e9ff42,#0000),radial-gradient(1.2px 1.2px at 46% 12%,#c9e9ff5c,#0000),radial-gradient(1px 1px at 58% 48%,#c9e9ff4d,#0000),radial-gradient(1.3px 1.3px at 67% 22%,#c9e9ff6b,#0000),radial-gradient(1px 1px at 74% 73%,#c9e9ff3d,#0000),radial-gradient(1.2px 1.2px at 84% 40%,#c9e9ff57,#0000),radial-gradient(1px 1px at 91% 86%,#c9e9ff47,#0000),radial-gradient(1.1px 1.1px at 96% 14%,#c9e9ff4d,#0000);background-repeat:no-repeat;position:fixed;inset:0}.grain{z-index:6;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.55'/%3E%3C/svg%3E");position:fixed;inset:0}.hero{text-align:center;place-items:center;min-height:100svh;padding:6.5rem 1.5rem 5.5rem;display:grid;position:relative;overflow:hidden}.hero:before{content:"";filter:blur(20px);pointer-events:none;background:radial-gradient(closest-side,#7cc4ec1a,#0000 72%);width:min(900px,110vw);height:min(640px,80vh);position:absolute;top:42%;left:50%;transform:translate(-50%,-50%)}.hero__top{letter-spacing:.34em;text-transform:uppercase;color:var(--muted);justify-content:space-between;align-items:center;padding:1.6rem clamp(1.25rem,4vw,3rem);font-size:.58rem;display:flex;position:absolute;top:0;left:0;right:0}.hero__inner{max-width:960px;animation:1.4s cubic-bezier(.2,.7,.2,1) both rise;position:relative}.eyebrow{letter-spacing:.38em;text-transform:uppercase;color:var(--muted);justify-content:center;align-items:center;gap:clamp(.8rem,2vw,1.4rem);margin:0 0 clamp(1.7rem,4vh,2.6rem);font-size:.58rem;display:flex}.eyebrow__line{background:linear-gradient(90deg, transparent, var(--line-strong));width:clamp(26px,6vw,58px);height:1px}.eyebrow__line--flip{transform:scaleX(-1)}.hero__name{font-family:var(--font-display);letter-spacing:-.018em;background:linear-gradient(#fff 6%,#e2f0fa 52%,#9fd6f4 100%);color:#0000;filter:drop-shadow(0 10px 60px #7cc4ec29);-webkit-background-clip:text;background-clip:text;margin:0;font-size:clamp(4rem,13vw,9rem);font-style:italic;font-weight:400;line-height:.94}.hero__sub{font-family:var(--font-display);letter-spacing:.02em;color:var(--ink-soft);margin:clamp(1.3rem,3vh,1.9rem) 0 0;font-size:clamp(1.1rem,2.4vw,1.5rem);font-style:italic;line-height:1.5}.hero__divider{color:var(--sky);justify-content:center;align-items:center;gap:.9rem;margin:clamp(1.6rem,4vh,2.4rem) 0 clamp(1.4rem,3.5vh,2rem);display:flex}.hero__divider:before,.hero__divider:after{content:"";background:linear-gradient(90deg, transparent, var(--line-strong));width:clamp(28px,7vw,52px);height:1px}.hero__divider:after{transform:scaleX(-1)}.hero__divider span{opacity:.8;font-size:.6rem}.countdown{flex-direction:column;align-items:center;gap:1.1rem;display:flex}.countdown__label{letter-spacing:.38em;text-transform:uppercase;color:var(--muted);margin:0;font-size:.55rem}.countdown__row{align-items:flex-start;gap:clamp(.7rem,2.6vw,1.7rem);display:flex}.unit{flex-direction:column;gap:.5rem;min-width:clamp(2.9rem,8vw,4.4rem);display:flex}.unit__value{font-family:var(--font-display);letter-spacing:.03em;font-variant-numeric:tabular-nums;color:var(--baby);font-size:clamp(1.7rem,4.5vw,2.7rem);line-height:1}.unit__label{letter-spacing:.3em;text-transform:uppercase;color:var(--muted);font-size:.5rem}.countdown__sep{background:linear-gradient(180deg, transparent, var(--line-strong), transparent);width:1px;height:clamp(1.6rem,4.5vw,2.6rem);margin-top:.15rem}.birthday{flex-direction:column;justify-content:center;gap:.7rem;min-height:5.4rem;display:flex}.birthday__line{font-family:var(--font-display);color:var(--baby);margin:0;font-size:clamp(1.55rem,4vw,2.3rem);font-style:italic;line-height:1.3}.birthday__sub{letter-spacing:.34em;text-transform:uppercase;color:var(--muted);margin:0;font-size:.55rem}.scroll-cue{color:var(--muted);letter-spacing:.34em;text-transform:uppercase;flex-direction:column;align-items:center;gap:1rem;font-size:.55rem;text-decoration:none;transition:color .4s;display:flex;position:absolute;bottom:clamp(1.4rem,4vh,2.6rem);left:50%;transform:translate(-50%)}.scroll-cue i{background:linear-gradient(180deg, var(--line-strong), transparent);width:1px;height:46px;display:block;position:relative;overflow:hidden}.scroll-cue i:after{content:"";background:var(--baby);width:100%;height:40%;animation:2.8s ease-in-out infinite scrollLine;position:absolute;top:-40%;left:0}.scroll-cue:hover,.scroll-cue:focus-visible{color:var(--baby)}.scroll-cue:focus-visible,.text-btn:focus-visible{outline:1px solid var(--line-strong);outline-offset:6px}.stars-section{padding:clamp(5rem,14vh,10rem) clamp(1.25rem,5vw,3rem) clamp(4rem,10vh,7rem);position:relative;overflow:hidden}.stars-section:before{content:"";pointer-events:none;background:radial-gradient(closest-side,#7cc4ec11,#0000 70%);width:min(1100px,120vw);height:min(760px,90vh);position:absolute;top:22%;left:50%;transform:translate(-50%,-50%)}.section-head{text-align:center;max-width:700px;margin:0 auto;position:relative}.kicker{letter-spacing:.4em;text-transform:uppercase;color:var(--sky);opacity:.85;margin:0 0 1.3rem;font-size:.58rem}.section-head h2{font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-size:clamp(2.3rem,6vw,3.9rem);font-style:italic;font-weight:400;line-height:1.02}.lede{max-width:46ch;color:var(--muted);letter-spacing:.01em;margin:1.4rem auto 0;font-size:clamp(.88rem,1.5vw,1rem);line-height:1.8}.starmap{max-width:880px;margin:clamp(2.4rem,6vh,3.8rem) auto 0;position:relative}.starmap__meta{letter-spacing:.2em;text-transform:uppercase;color:var(--muted);font-variant-numeric:tabular-nums;align-items:center;gap:1.2rem;margin-bottom:.9rem;font-size:.54rem;display:flex}.starmap__meta>span:first-child,.starmap__meta>span:last-child{flex:none}.progress{background:var(--line);flex:1;height:1px;position:relative;overflow:hidden}.progress i{background:linear-gradient(90deg, #7cc4ec40, var(--baby));height:100%;box-shadow:0 0 10px var(--glow);transition:width .8s cubic-bezier(.2,.7,.2,1);display:block}.starmap__svg{width:100%;height:auto;display:block;overflow:visible}.edge{stroke:#a0d2f029;stroke-width:.7px;stroke-dasharray:3 6;stroke-linecap:round;transition:stroke 1s,opacity 1s}.edge.is-lit{stroke:#acdefa94}.star{cursor:pointer;outline:none}.star__hit{fill:#0000}.star__halo{fill:url(#star-halo);opacity:0;pointer-events:none;transition:opacity .9s}.star.is-lit .star__halo{opacity:.9;animation:5s ease-in-out infinite haloPulse}.star__core{fill:#c9e9ff42;stroke:#c9e9ff7a;stroke-width:.7px;transition:fill .5s,stroke .5s}.star:hover .star__core,.star:focus-visible .star__core{fill:#ecf9ff;stroke:#c9e9ff}.star:focus-visible .star__halo{opacity:.7}.star.is-lit .star__core{fill:#f3fbff;stroke:#dff3ff;animation:4.5s ease-in-out infinite twinkle}.starmap__actions{flex-direction:column;align-items:center;gap:1.15rem;margin-top:clamp(1.6rem,4vh,2.4rem);display:flex}.hint{text-align:center;letter-spacing:.04em;max-width:52ch;min-height:1.2em;color:var(--muted);margin:0;font-size:.74rem;line-height:1.8}.text-btn{appearance:none;border:0;border-bottom:1px solid var(--line-strong);color:var(--ink-soft);letter-spacing:.3em;text-transform:uppercase;cursor:pointer;background:0 0;padding:.3rem .1rem .45rem;font-family:inherit;font-size:.58rem;font-weight:400;transition:color .35s,border-color .35s}.text-btn:hover{color:var(--baby);border-color:var(--baby)}.completion{text-align:center;min-height:1.3em;font-family:var(--font-display);color:var(--baby);opacity:0;margin:clamp(2.2rem,5vh,3.2rem) auto 0;font-size:clamp(1.55rem,4vw,2.4rem);font-style:italic;line-height:1.3;transition:opacity 1.4s,transform 1.4s;transform:translateY(10px)}.completion.is-visible{opacity:1;transform:none}.finale{text-align:center;max-width:720px;margin:clamp(1.3rem,3vh,2rem) auto 0;animation:1.6s both fadeIn}.finale__line{letter-spacing:.03em;color:var(--muted);margin:0;font-size:.8rem;line-height:1.8}.finale .ps{max-width:46ch;font-family:var(--font-display);color:var(--ink-soft);margin:1.7rem auto 0;font-size:clamp(.98rem,1.9vw,1.14rem);font-style:italic;line-height:1.6}.finale .signature{letter-spacing:.3em;text-transform:uppercase;color:var(--muted);margin:1.5rem 0 0;font-size:.56rem}.portrait{width:min(340px,74vw);margin:clamp(2rem,5vh,2.8rem) auto 0;animation:1.5s cubic-bezier(.16,1,.3,1) both portraitReveal;position:relative}.portrait__mat{background:linear-gradient(155deg,#c9e9ff1a,#050a10b3 58%);border:1px solid #c9e9ff3d;padding:.65rem;position:relative;box-shadow:0 32px 90px #00000094,0 0 70px #7cc4ec1f,inset 0 1px #ffffff14}.portrait__image{background:var(--bg-soft);filter:saturate(.94)contrast(1.02)brightness(.98);border:1px solid #ffffff1f;width:100%;height:auto;display:block}.portrait__caption{letter-spacing:.28em;text-transform:uppercase;color:var(--muted);justify-content:center;align-items:center;gap:.65rem;margin-top:1.1rem;font-size:.52rem;display:flex}.portrait__caption span{color:var(--sky);opacity:.8;font-size:.62rem}.all-wishes{border-top:1px solid var(--line);max-width:980px;margin:clamp(3.5rem,9vh,6.5rem) auto 0;padding-top:clamp(2.6rem,6vh,4rem);animation:1.2s both fadeIn}.all-wishes__head{text-align:center;max-width:620px;margin:0 auto clamp(2rem,5vh,3rem)}.all-wishes__kicker{letter-spacing:.38em;text-transform:uppercase;color:var(--sky);opacity:.8;margin:0 0 1rem;font-size:.54rem}.all-wishes__title{font-family:var(--font-display);margin:0;font-size:clamp(1.9rem,4.5vw,2.9rem);font-style:italic;font-weight:400;line-height:1.1}.all-wishes__sub{color:var(--muted);margin:.9rem 0 0;font-size:.8rem;line-height:1.8}.all-wishes__grid{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:clamp(1.8rem,4vw,3.2rem);margin:0;padding:0;list-style:none;display:grid}.all-wish{border-bottom:1px solid var(--line);grid-template-columns:1.6rem minmax(0,1fr);gap:.55rem;padding:1.05rem 0 1.1rem;animation:.7s cubic-bezier(.2,.7,.2,1) both wishRowIn;display:grid}.all-wish__num{font-family:var(--font-display);letter-spacing:.08em;font-variant-numeric:tabular-nums;color:var(--sky);opacity:.65;padding-top:.28rem;font-size:.66rem}.all-wish__text{font-family:var(--font-display);color:var(--ink-soft);margin:0;font-size:clamp(1rem,1.5vw,1.12rem);line-height:1.5}.all-wish__theme{letter-spacing:.22em;text-transform:uppercase;color:var(--sky);opacity:.5;margin-top:.4rem;font-size:.44rem;display:block}.all-wish--personal{border-top:1px solid var(--line-strong);grid-column:1/-1;margin-top:.2rem;padding-top:1.7rem}.all-wish--personal .all-wish__text{color:#dcedfa;font-size:clamp(1.05rem,1.9vw,1.22rem);line-height:1.7}.wish-overlay{z-index:100;-webkit-backdrop-filter:blur(12px);background:#02050ab8;place-items:center;padding:clamp(1.1rem,5vw,2.5rem);animation:.5s both overlayIn;display:grid;position:fixed;inset:0}.wish-dialog{text-align:center;overscroll-behavior:contain;background:radial-gradient(120% 90% at 50% 0,#7cc4ec1f,#0000 62%),linear-gradient(#0a111afa,#04080dfc);border:1px solid #9fd6f43d;width:min(620px,100%);max-height:min(82svh,720px);padding:clamp(2rem,5vw,3.2rem);animation:.7s cubic-bezier(.16,1,.3,1) both wishPop;position:relative;overflow-y:auto;box-shadow:0 30px 120px #000000a6,0 0 80px #5aa0c81f,inset 0 1px #ffffff0d}.wish-dialog:before{content:"";pointer-events:none;background:radial-gradient(60% 40% at 50% 0,#c9e9ff12,#0000 70%);position:absolute;inset:0}.wish-dialog--personal{width:min(720px,100%)}.wish-dialog__glyph{color:var(--sky);text-shadow:0 0 18px #8ccdf0cc;margin-bottom:1.5rem;font-size:.85rem;animation:4s ease-in-out infinite glyphPulse;display:block}.wish-dialog__meta{letter-spacing:.18em;text-transform:uppercase;color:var(--sky);justify-content:center;align-items:center;gap:.7rem;margin:0 0 1.5rem;font-size:.62rem;display:flex}.wish-dialog__dot{opacity:.5}.wish-dialog__text{font-family:var(--font-display);color:var(--ink);text-wrap:balance;margin:0;font-size:clamp(1.55rem,3vw,1.95rem);line-height:1.55}.wish-dialog--personal .wish-dialog__text{color:#dcedfa;text-align:left;font-size:clamp(1.15rem,2.2vw,1.45rem);line-height:1.7}.wish-dialog__hint{letter-spacing:.1em;color:var(--muted);margin:2rem 0 0;font-size:.62rem}.wish-close{z-index:2;width:2.4rem;height:2.4rem;color:var(--muted);font-family:var(--font-sans);cursor:pointer;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#060b128c;border:1px solid #0000;border-radius:50%;place-items:center;margin:-.75rem -.75rem .6rem auto;font-size:1.4rem;line-height:1;transition:color .3s,border-color .3s,background .3s;display:grid;position:sticky;top:0}.wish-close:hover,.wish-close:focus-visible{color:var(--baby);border-color:var(--line-strong);background:#7cc4ec14;outline:none}.drift{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden}.drift i{background:var(--baby);opacity:0;border-radius:50%;animation-name:drift;animation-timing-function:linear;animation-iteration-count:infinite;position:absolute;bottom:-10px;box-shadow:0 0 7px #c9e9ffb3}.footer{text-align:center;border-top:1px solid #9fd6f412;padding:3.2rem 1.5rem 4rem;position:relative}.footer__star{color:var(--sky);opacity:.7;margin-bottom:.9rem;font-size:.72rem;display:block}.footer p{letter-spacing:.1em;color:var(--muted);margin:0;font-size:.62rem}@keyframes rise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}@keyframes scrollLine{0%{transform:translateY(-100%)}60%,to{transform:translateY(280%)}}@keyframes twinkle{0%,to{opacity:.95}50%{opacity:.55}}@keyframes haloPulse{0%,to{opacity:.65}50%{opacity:.95}}@keyframes overlayIn{0%{opacity:0}to{opacity:1}}@keyframes wishPop{0%{opacity:0;filter:blur(10px);transform:translateY(22px)scale(.9)}55%{opacity:1}to{opacity:1;filter:blur();transform:none}}@keyframes glyphPulse{0%,to{opacity:.65}50%{opacity:1}}@keyframes wishRowIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes portraitReveal{0%{opacity:0;filter:blur(8px);transform:translateY(20px)scale(.96)}to{opacity:1;filter:blur();transform:none}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes drift{0%{opacity:0;transform:translateY(0)scale(.6)}12%{opacity:.75}80%{opacity:.4}to{opacity:0;transform:translateY(-80vh)scale(1)}}@media (max-width:640px){.hero{padding-top:5.8rem;padding-bottom:5rem}.hero__top{letter-spacing:.24em;font-size:.5rem}.eyebrow{letter-spacing:.28em;font-size:.5rem}.hero__divider{margin:1.4rem 0 1.2rem}.countdown__row{gap:.55rem}.unit{min-width:2.9rem}.unit__label{letter-spacing:.22em;font-size:.46rem}.starmap__meta{letter-spacing:.18em;gap:.8rem;font-size:.46rem}.hint{font-size:.68rem}.wish-dialog{max-height:86svh;padding:1.7rem 1.25rem 1.8rem}.wish-dialog__glyph{margin-bottom:1.1rem}.wish-dialog__text{font-size:1.3rem;line-height:1.55}.wish-dialog--personal .wish-dialog__text{font-size:1.02rem;line-height:1.7}.wish-dialog__hint{margin-top:1.5rem}.wish-close{margin:-.5rem -.4rem .4rem auto}.finale .signature{font-size:.58rem}}@media (max-width:760px){.all-wishes__grid{grid-template-columns:1fr}.all-wish--personal{grid-column:auto}}@media (max-height:680px){.scroll-cue{display:none}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.drift{display:none}}
