:root{--cream:#fff7ef;--paper:#fffdf8;--blush:#fde4e1;--pink:#f7c3c9;--rose:#e3879a;--deep:#b04760;--sun:#ffcd5e;--sun-soft:#fff0c4;--lav:#ece2fb;--ink:#4a2e35;--muted:#8d6c72;--shadow:0 10px 30px #b047601f, 0 2px 6px #b0476014;--radius:22px;--f-head:"Fraunces", Georgia, serif;--f-body:"Nunito", system-ui, sans-serif;--f-hand:"Caveat", cursive}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--cream);color:var(--ink);font-family:var(--f-body);background-image:radial-gradient(circle at 10% 0,#ffe9e6 0,#0000 40%),radial-gradient(circle at 90% 30%,#fff2cf 0,#0000 35%),radial-gradient(circle at 20% 85%,#f1e6fd 0,#0000 40%);background-attachment:fixed;margin:0;font-size:17px;line-height:1.65;overflow-x:hidden}body.locked{overflow:hidden}img{max-width:100%;display:block}button{font:inherit;cursor:pointer;color:inherit}.hand{font-family:var(--f-hand);color:var(--deep);font-size:1.5em;line-height:1.2}.muted{color:var(--muted)}.btn{background:var(--rose);color:#fff;border:0;border-radius:999px;padding:14px 24px;font-weight:800;transition:transform .15s,background .2s;box-shadow:0 6px 16px #e3879a66}.btn:hover{background:var(--deep);transform:translateY(-1px)}.btn:disabled{opacity:.6;cursor:default;transform:none}.btn.ghost{color:var(--deep);box-shadow:none;border:2px solid var(--pink);background:0 0;text-decoration:none;display:inline-block}.btn.ghost:hover{background:var(--blush)}.hearts{pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.hearts span{color:var(--pink);animation:linear infinite floatUp;position:absolute;bottom:-40px}@keyframes floatUp{0%{transform:translate(0)rotate(0)}50%{transform:translate(20px,-55vh)rotate(10deg)}to{opacity:0;transform:translate(-10px,-115vh)rotate(-10deg)}}.gate{z-index:50;background:linear-gradient(160deg,#fde4e1,#fff3d6 60%,#efe3fc);place-items:center;padding:16px;transition:opacity .8s,transform .8s;display:grid;position:fixed;inset:0}.gate.gone{opacity:0;pointer-events:none;transform:scale(1.04)}.gate-card{background:var(--paper);text-align:center;width:100%;max-width:400px;box-shadow:var(--shadow);border-radius:28px;padding:40px 28px}.gate-card .sun{font-size:56px;animation:18s linear infinite spin;display:inline-block}.gate-card .hand{margin:8px 0 0}.gate-card h1{font-family:var(--f-head);margin:.1em 0;font-size:2.1rem;font-style:italic;font-weight:500}.gate-card form{flex-direction:column;gap:12px;margin-top:20px;display:flex}.gate-card input{border:2px solid var(--pink);font:inherit;text-align:center;color:var(--ink);background:#fff;border-radius:999px;outline:none;padding:14px 20px;transition:border-color .2s}.gate-card input:focus{border-color:var(--rose)}.gate-msg{min-height:1.6em;font-family:var(--f-hand);color:var(--deep);margin:14px 0 0;font-size:1.4rem}.shake{animation:.4s shake}@keyframes shake{20%,60%{transform:translate(-8px)}40%,80%{transform:translate(8px)}}@keyframes spin{to{transform:rotate(360deg)}}main{z-index:1;position:relative}section{max-width:1080px;margin:0 auto;padding:96px 20px}.reveal{opacity:0;transition:opacity .9s,transform .9s;transform:translateY(24px)}.reveal.in{opacity:1;transform:none}.hero{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:100svh;padding:40px 20px;display:flex}.hero>*{opacity:0;animation:1s forwards rise}.hero>:nth-child(2){animation-delay:.35s}.hero>:nth-child(3){animation-delay:.6s}.hero>:nth-child(4){animation-delay:.95s}.hero>:nth-child(5){animation-delay:1.25s}.hero>:nth-child(6){animation-delay:1.9s}.hero-photo{width:min(230px,52vw);margin-bottom:22px}.hero-photo figcaption{font-size:1.25rem}@keyframes rise{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}.hero .kicker{margin:0;font-size:1.9rem}.hero-title{font-family:var(--f-head);margin:.1em 0;font-size:clamp(2.1rem,6vw,4rem);font-weight:400;line-height:1.05}.hero-title .script{font-family:var(--f-hand);color:var(--deep);margin-bottom:.15em;font-size:clamp(5rem,20vw,10rem);font-weight:700;line-height:.95;display:block}.hero-title .script small{vertical-align:.35em;font-size:.45em}.hero-sub{max-width:520px;color:var(--muted);margin:.6em 0 0;font-size:1.15rem}.hero .sign{margin:.4em 0 0;font-size:1.8rem}.scroll-hint{color:var(--muted);letter-spacing:.1em;margin-top:36px;font-size:.85rem}.scroll-hint span{font-size:1.3rem;animation:1.6s ease-in-out infinite bob;display:block}@keyframes bob{50%{transform:translateY(6px)}}.stats{grid-template-columns:repeat(3,1fr);gap:16px;max-width:820px;padding-top:0;display:grid}.stat{background:var(--paper);border-radius:var(--radius);text-align:center;box-shadow:var(--shadow);padding:24px 14px}.stat-num{font-family:var(--f-head);color:var(--deep);font-size:2.4rem;font-weight:600;line-height:1}.stat-label{color:var(--muted);margin-top:8px;font-size:.9rem;line-height:1.3}@media (width<=700px){.stats{gap:10px}.stat{padding:18px 8px}.stat-num{font-size:1.9rem}.stat-label{font-size:.8rem}}.chapter-head{text-align:center;max-width:620px;margin:0 auto 56px}.chapter-num{font-family:var(--f-hand);color:var(--rose);font-size:1.6rem}.chapter-head h2{font-family:var(--f-head);margin:.05em 0 .25em;font-size:clamp(2rem,5vw,3rem);font-style:italic;font-weight:400;line-height:1.1}.chapter-head p{color:var(--muted);margin:0}.polaroid{box-shadow:var(--shadow);transform:translate(var(--x,0), var(--y,0)) rotate(var(--r,0deg));background:#fff;border-radius:6px;margin:0;padding:12px 12px 14px;transition:box-shadow .2s}.ph{aspect-ratio:4/5;background:var(--blush);border-radius:2px;position:relative;overflow:hidden}.ph.land{aspect-ratio:4/3}.ph img,.ph video{object-fit:cover;-webkit-user-drag:none;width:100%;height:100%;display:block}.ph.missing{text-align:center;color:var(--muted);word-break:break-all;background:repeating-linear-gradient(45deg, var(--blush) 0 10px, #fdeceb 10px 20px);place-items:center;padding:10px;font-size:.78rem;display:grid}.polaroid figcaption{font-family:var(--f-hand);text-align:center;margin-top:8px;font-size:1.35rem;line-height:1.15}.moments{flex-direction:column;gap:88px;display:flex}.moment{grid-template-columns:1fr 1fr;align-items:center;gap:56px;display:grid}.moment:nth-child(2n) .moment-media{order:2}.moment-media{justify-content:center;gap:18px;display:flex}.moment-media .polaroid{width:min(340px,100%)}.moment-media.row{gap:14px}.moment-media.row .polaroid{width:calc(50% - 7px)}.moment-media.row .polaroid figcaption{font-size:1.1rem}.moment-media.pair{flex-direction:column;align-items:center;gap:0}.moment-media.pair .polaroid{width:min(400px,92%)}.moment-media.pair .polaroid:first-child{margin-right:12%}.moment-media.pair .polaroid+.polaroid{width:min(300px,70%);margin:-48px 0 0 12%}.moment-label{font-family:var(--f-hand);color:var(--rose);font-size:1.5rem}.moment-text h3{font-family:var(--f-head);margin:0 0 .3em;font-size:2rem;font-style:italic;font-weight:400;line-height:1.15}.moment-text p{margin:0;font-size:1.1rem}.msg-shot{max-width:440px;margin:0;transform:rotate(-2deg)}.msg-shot img{border-radius:22px;width:100%;box-shadow:0 24px 50px #4a2e3540}.msg-shot figcaption{text-align:center;margin-top:14px}@media (width<=760px){.moments{gap:64px}.moment{grid-template-columns:1fr;gap:24px}.moment:nth-child(2n) .moment-media{order:0}}.walk-wrap{padding:10px 0 0;position:relative}.walk-svg{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.walk-svg .bg{stroke:var(--pink);stroke-width:3px;fill:none;stroke-dasharray:2 10;stroke-linecap:round}.walk-svg .fg{stroke:var(--rose);stroke-width:4px;fill:none;stroke-linecap:round}.walker{pointer-events:none;z-index:2;font-size:28px;position:absolute;transform:translate(-50%,-70%)}.stop{width:50%;margin-bottom:64px;padding-right:56px;position:relative}.stop:nth-child(2n){margin-left:50%;padding:0 0 0 56px}.stop:before{content:"";background:var(--sun);width:18px;height:18px;box-shadow:0 0 0 5px var(--sun-soft);border-radius:50%;position:absolute;top:40%;right:-9px}.stop:nth-child(2n):before{left:-9px;right:auto}.stop .polaroid{max-width:320px}.stop:nth-child(odd) .polaroid{margin-left:auto}.stop p{margin:16px 0 0}.stop:nth-child(odd) p{text-align:right}.walk-outro{text-align:center;margin:0;font-size:2rem;position:relative}@media (width<=700px){.stop,.stop:nth-child(2n){width:100%;margin-left:0;padding:0 0 0 52px}.stop:before,.stop:nth-child(2n):before{left:9px;right:auto}.stop:nth-child(odd) .polaroid{margin-left:0}.stop:nth-child(odd) p{text-align:left}.stop .polaroid{max-width:260px}}.ach-grid{columns:3 280px;column-gap:16px}.ach{break-inside:avoid;box-shadow:var(--shadow);background:linear-gradient(135deg,#fff,#fdf1f3);border-radius:28px;margin-bottom:16px;padding:14px 22px 14px 14px}.ach.has-photo{border-radius:24px;padding:12px}.ach-photo{border-radius:16px;margin-bottom:4px}.ach.has-photo .ach-body{padding:10px 8px 4px}.ach-body{align-items:center;gap:16px;display:flex}.ach-icon{background:var(--sun-soft);width:58px;height:58px;box-shadow:inset 0 0 0 3px var(--sun);border-radius:50%;flex:none;place-items:center;font-size:28px;display:grid}.ach-label{letter-spacing:.12em;text-transform:uppercase;color:var(--rose);font-size:.7rem;font-weight:800}.ach-title{font-weight:800;line-height:1.25}.ach-desc{color:var(--muted);margin-top:2px;font-size:.9rem;line-height:1.35}.wall{flex-wrap:wrap;justify-content:center;gap:28px 20px;display:flex}.wall .polaroid{-webkit-user-select:none;user-select:none;width:210px;position:relative}.wall .polaroid:before{content:"";background:#ffdc8c99;width:80px;height:24px;margin-left:-40px;position:absolute;top:-12px;left:50%;transform:rotate(-3deg)}@media (pointer:fine){.wall .polaroid{cursor:grab;touch-action:none}.wall .polaroid.dragging{cursor:grabbing;box-shadow:0 24px 50px #4a2e3540}}@media (width<=600px){.wall{gap:24px 14px}.wall .polaroid{width:calc(50% - 8px)}}.drag-hint{text-align:center;color:var(--muted);margin:32px 0 0;font-size:.9rem}@media (pointer:coarse){.drag-hint{display:none}}.songs{grid-template-columns:1fr 1fr;gap:24px;display:grid}.song{background:var(--paper);box-shadow:var(--shadow);text-align:center;border-radius:28px;flex-direction:column;align-items:center;padding:32px 24px;display:flex}.vinyl{background:repeating-radial-gradient(circle,#2b1d21 0 2px,#3a282d 2px 4px);border-radius:50%;place-items:center;width:160px;height:160px;margin-bottom:20px;animation:8s linear infinite spin;display:grid;box-shadow:0 10px 30px #0003}.vinyl .lbl{background:var(--pink);border-radius:50%;place-items:center;width:60px;height:60px;font-size:26px;display:grid}.song-for{font-family:var(--f-hand);color:var(--rose);font-size:1.6rem}.song h3{font-family:var(--f-head);margin:.1em 0;font-size:1.7rem;font-style:italic;font-weight:400;line-height:1.2}.artist{color:var(--muted);margin:0 0 12px;font-size:.95rem}.why{margin:0 0 16px;font-size:1.4rem}.yt-facade{text-align:left;background:var(--blush);border:0;border-radius:20px;align-items:center;gap:14px;width:100%;padding:10px 14px 10px 10px;transition:transform .15s,background .2s;display:flex;box-shadow:0 6px 16px #e3879a2e}.yt-facade:hover{background:#fbd6d3;transform:translateY(-1px)}.yt-thumb{background:#000;border-radius:14px;flex:none;width:64px;height:64px;overflow:hidden}.yt-thumb img{object-fit:cover;width:100%;height:100%;transform:scale(1.34)}.yt-meta{flex-direction:column;flex:1;min-width:0;line-height:1.25;display:flex}.yt-meta strong{white-space:nowrap;text-overflow:ellipsis;font-size:.95rem;overflow:hidden}.yt-meta small{color:var(--muted);font-size:.8rem}.yt-facade.active{background:#fbd6d3}.yt-facade.active .yt-meta small{color:var(--deep);font-weight:800}.yt-play{background:var(--rose);color:#fff;border-radius:50%;flex:none;place-items:center;width:42px;height:42px;display:grid;box-shadow:0 6px 14px #e3879a73}.memory-btn{margin-top:18px;padding:10px 20px;font-size:.95rem}.corner-pop{z-index:30;background:var(--paper);border-radius:18px;width:min(220px,100vw - 32px);padding:5px;animation:.3s cubic-bezier(.2,.8,.2,1) pop;position:fixed;bottom:16px;right:16px;box-shadow:0 14px 36px #4a2e3547}.corner-pop img{border-radius:13px;width:100%;display:block}.corner-close{background:var(--deep);color:#fff;border:0;border-radius:50%;place-items:center;width:28px;height:28px;font-size:1.1rem;line-height:1;display:grid;position:absolute;top:-10px;right:-10px;box-shadow:0 4px 10px #00000040}.why-by{color:var(--muted);margin:-6px 0 16px;font-size:.9rem}@media (width<=760px){.songs{grid-template-columns:1fr}}.deck{cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:0;width:min(380px,100%);height:420px;margin:0 auto;padding:0;display:block;position:relative}.card{background:var(--paper);box-shadow:var(--shadow);text-align:center;border-radius:28px;flex-direction:column;justify-content:center;align-items:center;padding:32px;transition:transform .45s cubic-bezier(.2,.8,.2,1),opacity .45s;display:flex;position:absolute;inset:0}.card.back1{background:#fdeef0;transform:rotate(-4deg)translateY(8px)}.card.back2{background:#fff4d9;transform:rotate(5deg)translateY(14px)}.card-photo{object-fit:cover;border-radius:16px;width:100%;height:190px;margin-bottom:14px}.card .num{font-family:var(--f-hand);color:var(--rose);font-size:1.6rem}.card .txt{font-family:var(--f-head);font-size:1.35rem;line-height:1.4}.card.fly-r{opacity:0;transform:translate(120%)rotate(18deg)}.card.fly-l{opacity:0;transform:translate(-120%)rotate(-18deg)}.card.enter{opacity:0;transition:none;transform:scale(.92)}.deck-hint{text-align:center;color:var(--muted);margin-top:44px;font-size:.9rem}.envelopes{flex-wrap:wrap;justify-content:center;gap:28px;display:flex}.envelopes>*{flex:0 260px}.env{aspect-ratio:3/2;box-shadow:var(--shadow);background:#f9d9dc;border:0;border-radius:8px;padding:0;transition:transform .25s;position:relative;overflow:hidden}.env:hover{transform:translateY(-4px)rotate(-1deg)}.env:before{content:"";clip-path:polygon(0 0,100% 0,50% 100%);z-index:2;background:#f4bfc6;height:58%;position:absolute;inset:0 0 auto}.env:after{content:"";z-index:1;background:linear-gradient(to top right,#f7cdd3 50%,#0000 50.5%) 0/50% 100% no-repeat,linear-gradient(to top left,#f7cdd3 50%,#0000 50.5%) 100%/50% 100% no-repeat;position:absolute;inset:0}.env .seal{z-index:3;background:var(--deep);color:#fff;border-radius:50%;place-items:center;width:44px;height:44px;font-size:18px;transition:opacity .3s;display:grid;position:absolute;top:56%;left:50%;transform:translate(-50%,-50%);box-shadow:0 3px 8px #0003}.env.opened .seal{opacity:.45}.env .env-label{z-index:3;font-family:var(--f-hand);padding:0 10px;font-size:1.35rem;line-height:1.1;position:absolute;bottom:8px;left:0;right:0}.env .env-label small{color:var(--muted);font-size:.85em}.modal{z-index:40;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#4a2e3559;place-items:center;padding:16px;animation:.3s fade;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}}.paper{box-shadow:var(--shadow);background-color:#fffdf7;background-image:linear-gradient(90deg,#0000 18px,#f6d4da 18px 20px,#0000 20px);border-radius:12px;padding:44px 32px 32px;position:relative}.paper p{font-family:var(--f-hand);margin:0 0 1em;font-size:1.5rem;line-height:1.4}.modal .paper{width:100%;max-width:520px;max-height:85vh;animation:.35s cubic-bezier(.2,.8,.2,1) pop;overflow:auto}@keyframes pop{0%{opacity:0;transform:translateY(20px)scale(.96)}}.modal h3{font-family:var(--f-hand);color:var(--deep);margin:0 0 16px;font-size:2rem;line-height:1.1}.close{color:var(--muted);background:0 0;border:0;font-size:1.9rem;position:absolute;top:8px;right:14px}.cake-stage{text-align:center;flex-direction:column;align-items:center;display:flex}.cake{isolation:isolate;width:300px;max-width:100%;margin:10px auto 24px;padding-top:72px;position:relative}.candles{z-index:2;grid-template-columns:repeat(13,1fr);justify-items:center;width:216px;display:grid;position:absolute;top:20px;left:50%;transform:translate(-50%)}.candle{background:repeating-linear-gradient(-45deg, #fff 0 5px, var(--pink) 5px 10px);border:0;border-radius:3px 3px 1px 1px;width:9px;height:40px;padding:0;position:relative}.candle:nth-child(-n+13){z-index:1}.candle:nth-child(n+14){margin-top:-24px;transform:translate(8px)}.candle:before{content:"";position:absolute;inset:-14px -3px 0}.flame{background:radial-gradient(ellipse at 50% 70%, #fffbe0 0 25%, var(--sun) 45%, #ff9a4d 75%, transparent 76%);transform-origin:50% 100%;border-radius:50%/60% 60% 40% 40%;width:10px;height:17px;margin-left:-5px;transition:opacity .3s,transform .3s;animation:.12s infinite alternate flicker;position:absolute;bottom:100%;left:50%}@keyframes flicker{to{transform:scaleY(1.1)skew(3deg)}}.candle.out .flame{opacity:0;animation:none;transform:scale(.2)translateY(-8px)}.candle.out:after{content:"";background:#968c8c80;border-radius:50%;width:6px;height:6px;animation:1.2s forwards smoke;position:absolute;bottom:100%;left:50%}@keyframes smoke{0%{opacity:.7;transform:translate(-50%)scale(1)}to{opacity:0;transform:translate(-50%,-40px)scale(3)}}.tier{border-radius:14px 14px 10px 10px;margin:0 auto;position:relative}.tier:before{content:"";border-radius:50%;height:28px;position:absolute;top:-14px;left:0;right:0}.tier.top{background:linear-gradient(#fbd0d6,#f3aab6);width:240px;height:80px}.tier.top:before{background:#fff3f5}.tier.bottom{z-index:-1;background:linear-gradient(#fff1c9,#f8dc94);width:300px;max-width:100%;height:100px;margin-top:-4px}.tier.bottom:before{background:#fff8e3}.tier .dots{color:var(--deep);opacity:.7;justify-content:space-around;font-size:14px;display:flex;position:absolute;inset:30px 16px auto}.plate{width:340px;max-width:110%;height:18px;box-shadow:var(--shadow);z-index:-2;background:#fff;border-radius:50%;margin:-8px auto 0;position:relative}.cake-actions{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.cake-note{min-height:1.5em;margin:18px 0 0;font-size:1.6rem}.letter{max-width:680px}.letter .paper{padding:48px 36px 40px}.letter-photo{z-index:2;width:min(280px,70%);margin:0 auto -36px;position:relative}.letter-photo+.paper{padding-top:64px}.letter h2{font-family:var(--f-hand);color:var(--deep);margin:0 0 24px;font-size:2.6rem;font-weight:700;line-height:1.1}.letter .signoff{text-align:right;color:var(--deep);margin:0;font-size:1.9rem}footer{text-align:center;color:var(--muted);z-index:1;padding:40px 20px 60px;font-size:.9rem;position:relative}@media (width<=600px){section{padding:72px 16px}.paper{padding:40px 20px 24px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.hearts{display:none}}.audio-engine{pointer-events:none;border:0;width:200px;height:200px;position:fixed;bottom:0;left:-400px}
