:root{--ink:#192653;--cream:#fff9ed;--yellow:#ffd45c;--pink:#ff79a8;--blue:#62c8f3;--green:#84d8a2;--red:#ff5e55;--purple:#9d82e8;--orange:#ffae62}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;color:var(--ink);background:var(--cream);font-family:"Microsoft YaHei","PingFang SC",sans-serif;overflow-x:hidden}
.launch-banner{position:relative;z-index:100;padding:11px 18px;background:linear-gradient(90deg,var(--pink),var(--yellow),var(--green),var(--blue));border-bottom:3px solid var(--ink);font-weight:950;letter-spacing:.08em;text-align:center;color:var(--ink)}
img{display:block;width:100%;height:100%;object-fit:cover}
button,a{font:inherit}
.grain{position:fixed;inset:0;pointer-events:none;z-index:20;opacity:.12;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='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.22'/%3E%3C/svg%3E")}
.hero{min-height:100vh;position:relative;padding:28px clamp(22px,5vw,78px) 120px;overflow:hidden;background-color:#bdeafa;background-image:radial-gradient(circle at 9% 19%,#ffd45c 0 10%,transparent 10.3%),radial-gradient(circle at 54% 8%,#ff9fbd 0 13%,transparent 13.3%),radial-gradient(circle at 89% 77%,#87ddb0 0 20%,transparent 20.3%),radial-gradient(circle at 31% 88%,#c9b9f5 0 19%,transparent 19.3%),linear-gradient(135deg,#bdeafa 0%,#fff5d8 48%,#ffc7d9 100%)}
.hero:before,.hero:after{content:"";position:absolute;pointer-events:none;z-index:0}.hero:before{width:170px;height:170px;left:44%;top:37%;background:var(--orange);border:3px solid var(--ink);border-radius:45% 55% 58% 42%/52% 42% 58% 48%;transform:rotate(17deg);opacity:.92}.hero:after{width:84px;height:84px;left:3%;bottom:16%;background:var(--green);border:3px solid var(--ink);border-radius:50%;box-shadow:118px 62px 0 -15px var(--purple),120px 64px 0 -13px var(--ink)}
.nav{display:flex;align-items:center;justify-content:space-between;position:relative;z-index:5}
.brand{color:var(--ink);text-decoration:none;font-weight:900;font-size:22px;letter-spacing:-1px}.brand span{display:inline-grid;place-items:center;background:var(--purple);color:white;border:2px solid var(--ink);width:43px;height:43px;border-radius:50%;margin-right:7px;box-shadow:3px 3px 0 var(--ink)}
.music-button{border:2px solid var(--ink);background:var(--cream);padding:11px 18px;border-radius:999px;font-weight:800;cursor:pointer;box-shadow:4px 4px 0 var(--ink);transition:.2s}.music-button:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--ink)}.music-button.playing{background:var(--pink);color:#fff}.music-icon{display:inline-block;margin-right:6px}.playing .music-icon{animation:bounce .6s infinite alternate}
.hero-copy{position:relative;z-index:3;width:min(670px,60vw);padding-top:12vh}.eyebrow,.kicker{font-size:13px;letter-spacing:.16em;font-weight:900}.hero h1{font-size:clamp(76px,12vw,174px);line-height:.78;letter-spacing:-.08em;margin:24px 0 35px;font-weight:900;color:var(--purple);text-shadow:5px 5px 0 var(--cream);-webkit-text-stroke:2px var(--ink)}.hero h1 em{font-style:normal;color:var(--red);text-shadow:5px 5px 0 var(--yellow);-webkit-text-stroke:2px var(--ink)}
.hero-intro{font-size:clamp(17px,1.7vw,24px);line-height:1.8;font-weight:600}.scroll-link{display:inline-block;margin-top:22px;color:var(--ink);font-weight:900;text-decoration:none;border-bottom:2px solid var(--ink);padding-bottom:5px}.scroll-link span{display:inline-block;margin-left:15px;animation:bob 1s infinite alternate}
.hero-photos{position:absolute;right:4vw;top:17%;width:41vw;height:70%;z-index:2}.photo-card{position:absolute;margin:0;border:10px solid #fff;box-shadow:10px 14px 0 rgba(25,38,83,.95);overflow:hidden}.card-a{width:54%;height:48%;right:0;top:0;transform:rotate(6deg);border-color:#ffe47c}.card-b{width:48%;height:43%;left:0;top:29%;transform:rotate(-7deg);border-color:#ffa8c4}.card-c{width:52%;height:42%;right:2%;bottom:0;transform:rotate(3deg);border-color:#9ae0b3}.doodle{position:absolute;font-weight:900;color:var(--pink);z-index:4}.doodle-star{font-size:80px;left:3%;top:3%;transform:rotate(-12deg);color:var(--yellow);filter:drop-shadow(3px 3px 0 var(--ink))}.doodle-smile{font-size:64px;right:-2%;bottom:7%;color:var(--blue);transform:rotate(10deg)}
.ticker{position:absolute;left:-2%;bottom:20px;width:104%;background:var(--purple);color:white;padding:14px 0;transform:rotate(-1deg);overflow:hidden;white-space:nowrap;font-weight:800;border-top:3px solid var(--ink);border-bottom:3px solid var(--ink)}.ticker div{display:inline-block;animation:ticker 24s linear infinite}
.section{padding:110px clamp(22px,7vw,110px)}.section-heading{display:flex;align-items:flex-start;gap:24px;margin-bottom:55px}.section-number{display:grid;place-items:center;width:54px;height:54px;border-radius:50%;border:2px solid var(--ink);font-weight:900;flex:0 0 auto}.section-heading h2{margin:4px 0 0;font-size:clamp(38px,6vw,80px);letter-spacing:-.06em;line-height:1}.section-heading .kicker{margin:0;color:#66718a}
.friends{background-color:var(--cream);background-image:radial-gradient(#d8ccf7 1.8px,transparent 1.8px);background-size:25px 25px}.name-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.name-card{min-height:280px;border:2px solid var(--ink);padding:26px;display:flex;flex-direction:column;justify-content:space-between;box-shadow:7px 7px 0 var(--ink);transition:.25s;border-radius:18px 38px 18px 38px}.name-card:nth-child(even){border-radius:38px 18px 38px 18px}.name-card:hover{transform:translateY(-8px) rotate(-1deg)}.name-card h3{font-size:clamp(29px,3vw,46px);margin:auto 0 14px;letter-spacing:-.05em}.name-card p{font-weight:600;line-height:1.7;margin:0}.mini-icon{font-size:42px}.yellow{background:var(--yellow)}.blue{background:var(--blue)}.pink{background:var(--pink)}.green{background:var(--green)}
.together-note{text-align:center;font-size:clamp(18px,2vw,27px);line-height:2;margin:75px auto 0}.together-note strong{background:linear-gradient(transparent 58%,var(--yellow) 58%)}
.memory{background:linear-gradient(145deg,var(--ink),#3f3478);color:var(--cream)}.memory .section-number{border-color:var(--cream)}.memory .section-heading .kicker{color:var(--yellow)}.gallery{columns:4 240px;column-gap:20px}.gallery figure{break-inside:avoid;margin:0 0 20px;position:relative;border:8px solid var(--cream);background:var(--cream);box-shadow:6px 7px 0 var(--yellow);overflow:hidden}.gallery figure:nth-child(3n){transform:rotate(1.5deg);box-shadow:6px 7px 0 var(--pink)}.gallery figure:nth-child(4n){transform:rotate(-1.5deg);box-shadow:6px 7px 0 var(--green)}.gallery img{height:auto;aspect-ratio:auto}.gallery figcaption{color:var(--ink);font-size:13px;font-weight:800;padding:10px 7px 3px}.gallery-caption{text-align:center;font-size:20px;line-height:1.8;margin:70px 0 0;color:#dbe1ee}
.wish{text-align:center;background-color:#ff9fbd;background-image:linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.25) 75%),linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.25) 75%);background-size:44px 44px;background-position:0 0,22px 22px}.wish-card{max-width:960px;margin:auto;background:linear-gradient(155deg,#fff9ed 0 72%,#d9f3ff 72%);border:3px solid var(--ink);box-shadow:14px 14px 0 var(--ink);padding:80px clamp(22px,7vw,90px);position:relative;border-radius:34px}.wish-card h2{font-size:clamp(42px,7vw,86px);line-height:1.15;letter-spacing:-.07em;margin:20px 0 35px}.wish-copy{font-size:clamp(16px,2vw,21px);line-height:2}.wish-button{border:2px solid var(--ink);background:var(--yellow);font-weight:900;padding:16px 28px;border-radius:999px;margin-top:28px;cursor:pointer;box-shadow:5px 5px 0 var(--ink)}.wish-button:hover{transform:scale(1.04)}.wish-button:disabled{opacity:.7;cursor:default}.wish-result{min-height:32px;font-weight:900;color:var(--red)}
.cake{width:150px;margin:-135px auto 35px}.cake-top{height:45px;background:#fff;border:3px solid var(--ink);border-radius:50% 50% 15% 15%;position:relative;z-index:2}.cake-bottom{height:65px;background:var(--yellow);border:3px solid var(--ink);border-top:0;border-radius:0 0 20px 20px}.candles{display:flex;justify-content:space-around;padding:0 17px}.candles i{display:block;width:7px;height:32px;background:repeating-linear-gradient(45deg,var(--blue) 0 4px,#fff 4px 8px);border:1px solid var(--ink);position:relative}.candles i:before{content:"";position:absolute;width:10px;height:14px;background:var(--red);border-radius:50% 50% 45% 45%;left:-3px;top:-16px;box-shadow:0 0 14px var(--yellow)}.candles.blown i:before{animation:blow .5s forwards}
.finale{height:min(85vh,820px);position:relative;color:white;display:grid;place-items:center;text-align:center}.finale-overlay{position:absolute;inset:0;background:linear-gradient(rgba(10,17,35,.35),rgba(10,17,35,.76))}.finale-copy{position:relative;z-index:2;padding:20px}.finale-copy p{letter-spacing:.2em;font-weight:800}.finale-copy h2{font-size:clamp(34px,6vw,76px);line-height:1.25;margin:25px 0}.finale-copy strong{display:block;font-size:clamp(72px,13vw,170px);color:var(--yellow);letter-spacing:-.09em;text-shadow:5px 5px 0 var(--ink);line-height:1}.finale-copy a{display:inline-block;color:#fff;margin-top:50px;text-underline-offset:6px;font-weight:800}
footer{display:flex;justify-content:space-between;gap:20px;padding:28px clamp(22px,5vw,70px);background:var(--ink);color:#fff;font-size:13px;letter-spacing:.08em}
.music-credit{margin:0;padding:0 1rem 1rem;background:var(--ink);color:rgba(255,255,255,.65);font-size:.72rem;text-align:center}.music-credit a{color:inherit}
.hero{box-shadow:inset 0 0 0 8px rgba(255,255,255,.42)}
.nav{padding:9px 12px;background:rgba(255,255,255,.62);border:2px solid rgba(25,38,83,.9);border-radius:999px;box-shadow:5px 6px 0 rgba(25,38,83,.88);backdrop-filter:blur(12px)}
.music-button{padding:8px 12px;font-size:13px;box-shadow:3px 3px 0 var(--ink)}
.hero-photos:before{content:"BEST DAY EVER!";position:absolute;z-index:6;left:22%;top:12%;padding:8px 13px;background:var(--yellow);border:2px solid var(--ink);border-radius:8px;box-shadow:3px 4px 0 var(--ink);font-size:12px;font-weight:950;letter-spacing:.08em;transform:rotate(-8deg)}
.photo-card{transition:transform .35s ease,filter .35s ease}.photo-card:hover{filter:saturate(1.12) brightness(1.04);z-index:7}.card-a:hover{transform:rotate(3deg) translateY(-8px)}.card-b:hover{transform:rotate(-3deg) translateY(-8px)}.card-c:hover{transform:rotate(1deg) translateY(-8px)}
.finale-copy p{color:#8fe8ff;text-shadow:2px 2px 0 var(--ink)}.finale-copy h2{color:#ffb2d0;text-shadow:3px 3px 0 var(--ink)}.finale-copy a{color:#9ff0b7}
.math-card{width:min(480px,100%);margin-top:28px;padding:18px 20px 16px;background:rgba(255,255,255,.88);border:3px solid var(--ink);border-radius:22px;box-shadow:7px 8px 0 var(--ink);backdrop-filter:blur(10px);transform:rotate(-.4deg)}.math-card-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.math-card-head>div{display:flex;align-items:center;gap:9px}.math-card-head span{padding:5px 9px;background:var(--green);border:2px solid var(--ink);border-radius:999px;font-size:12px;font-weight:900}.math-card-head strong{font-size:18px}.math-card-head button,.math-options button,.math-fill button{border:2px solid var(--ink);font-weight:900;cursor:pointer;box-shadow:3px 3px 0 var(--ink)}.math-card-head button{padding:7px 10px;background:var(--blue);border-radius:999px;font-size:12px}.math-question{margin:14px 0 12px;font-size:34px;font-weight:950;letter-spacing:.04em}.math-options{display:flex;gap:10px}.math-options button{min-width:64px;padding:9px 14px;background:var(--yellow);border-radius:12px;font-size:20px}.math-options button:nth-child(2){background:var(--pink)}.math-options button:nth-child(3){background:var(--green)}.math-fill{display:flex;gap:10px}.math-fill input{width:120px;padding:9px 12px;border:2px solid var(--ink);border-radius:12px;background:#fff;font:900 20px inherit;outline:none}.math-fill input:focus{box-shadow:0 0 0 4px rgba(98,200,243,.38)}.math-fill button{padding:9px 18px;background:var(--yellow);border-radius:12px}.math-result{min-height:22px;margin:11px 0 0;font-weight:900}.math-result.correct{color:#138348}.math-result.try-again{color:#db3f58}
.math-fill input{font-size:20px;font-weight:900;font-family:inherit}
@media(max-width:560px){.launch-banner{font-size:12px;letter-spacing:.03em}.math-card{padding:15px;margin-top:24px;box-shadow:5px 6px 0 var(--ink)}.math-card-head strong{font-size:15px}.math-question{font-size:29px}.math-options button{min-width:54px}}
.reveal{opacity:0;transform:translateY(30px);transition:opacity .8s ease,transform .8s ease}.reveal.visible{opacity:1;transform:none}
.hero .reveal{opacity:1;transform:none}
.confetti-piece{position:fixed;top:-20px;width:10px;height:18px;z-index:50;pointer-events:none;animation:fall var(--duration) linear forwards;transform:rotate(var(--rotation))}
@keyframes ticker{to{transform:translateX(-50%)}}@keyframes bob{to{transform:translateY(7px)}}@keyframes bounce{to{transform:translateY(-4px) rotate(10deg)}}@keyframes blow{to{opacity:0;transform:translate(12px,-14px) scale(.2)}}@keyframes fall{to{transform:translate(var(--drift),110vh) rotate(800deg);opacity:.8}}
@media(max-width:900px){.hero{padding-bottom:95px}.hero-copy{width:100%;padding-top:8vh}.hero h1{font-size:clamp(72px,21vw,130px)}.hero-photos{position:relative;right:auto;top:auto;width:100%;height:460px;margin-top:55px}.name-grid{grid-template-columns:repeat(2,1fr)}.name-card{min-height:240px}.gallery{columns:2}.finale{height:75vh}}
@media(max-width:560px){.hero{padding-left:18px;padding-right:18px}.music-label{display:none}.music-button{width:48px;height:48px;padding:0}.hero-photos{height:390px}.photo-card{border-width:6px;box-shadow:6px 7px 0 var(--ink)}.section{padding:80px 18px}.section-heading{gap:12px}.section-number{width:42px;height:42px;font-size:12px}.name-grid{gap:12px}.name-card{min-height:210px;padding:18px;box-shadow:4px 4px 0 var(--ink)}.name-card h3{font-size:28px}.name-card p{font-size:14px}.gallery{column-gap:12px}.gallery figure{border-width:5px;margin-bottom:12px;box-shadow:4px 4px 0 var(--yellow)}.wish-card{padding:70px 18px 45px;box-shadow:7px 7px 0 var(--ink)}footer{flex-direction:column}.finale-copy strong{font-size:72px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}.ticker div,.music-icon,.scroll-link span{animation:none!important}.reveal{opacity:1;transform:none;transition:none}}
