*{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#0a0710;--bg2:#0f0a14;--pink:#ff5c9a;--pink2:#ffb1cc;--pink3:#ff8fb4;
  --white:#fff8fb;--muted:#b9aab2;--line:rgba(255,150,190,.14);
  --gold:#ffcd85;--gold2:#ffe0b3;--gold-line:rgba(255,205,133,.2);
  --plum:#1a0f1c;
}
html{scroll-behavior:smooth}
body{background:var(--bg);color:var(--white);font-family:Poppins,sans-serif;overflow-x:hidden}
body:before{content:"";position:fixed;inset:0;pointer-events:none;background:radial-gradient(circle at 50% 0%,rgba(255,61,137,.13),transparent 35%),radial-gradient(circle at 90% 80%,rgba(255,61,137,.08),transparent 30%);z-index:-3}

#webglCanvas{position:fixed;inset:0;width:100%;height:100%;z-index:-1;display:block}
#webglCanvas.hidden{display:none}

/* ---------- ambient drifting background: fallback shown before WebGL loads / when reduced-motion or no WebGL ---------- */
.ambient{position:fixed;inset:0;z-index:-2;overflow:hidden;pointer-events:none;filter:hue-rotate(var(--scroll-hue,0deg));transition:filter .3s linear}
.ambient .blob{position:absolute;border-radius:50%;filter:blur(70px);opacity:.35;mix-blend-mode:screen}
.b1{width:46vw;height:46vw;left:-12vw;top:-10vw;background:radial-gradient(circle,#ff5c9a,transparent 70%);animation:driftA 26s ease-in-out infinite alternate}
.b2{width:38vw;height:38vw;right:-10vw;top:35vh;background:radial-gradient(circle,#ffcd85,transparent 70%);animation:driftB 32s ease-in-out infinite alternate}
.b3{width:34vw;height:34vw;left:20vw;bottom:-14vw;background:radial-gradient(circle,#c65cff,transparent 70%);opacity:.22;animation:driftC 22s ease-in-out infinite alternate}
@keyframes driftA{from{transform:translate(0,0) scale(1)}to{transform:translate(8vw,10vh) scale(1.15)}}
@keyframes driftB{from{transform:translate(0,0) scale(1)}to{transform:translate(-10vw,-6vh) scale(.9)}}
@keyframes driftC{from{transform:translate(0,0) scale(1)}to{transform:translate(6vw,-8vh) scale(1.1)}}
@media(prefers-reduced-motion:reduce){.b1,.b2,.b3{animation:none}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{animation-duration:.001s!important;transition-duration:.001s!important}}

/* ---------- loading overlay ---------- */
.world-loading{position:fixed;inset:0;z-index:100;background:#08050c;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;transition:opacity .8s ease}
.world-loading-heart{font-size:38px;color:var(--pink);animation:loadPulse 1.1s ease-in-out infinite}
.world-loading p{font-family:"Cormorant Garamond";font-style:italic;color:var(--muted);font-size:16px;letter-spacing:.5px}
.world-loading.done{opacity:0;pointer-events:none}
@keyframes loadPulse{0%,100%{transform:scale(1);opacity:.7}50%{transform:scale(1.25);opacity:1}}

/* ---------- tint rhythm: light, mood-setting touches (main mood now comes from the WebGL world) ---------- */
section[data-tint="plum"]{background:linear-gradient(180deg,transparent,rgba(45,20,50,.1) 40%,rgba(45,20,50,.1) 60%,transparent)}
section[data-tint="pink"]{background:radial-gradient(ellipse at 50% 50%,rgba(255,92,154,.03),transparent 70%)}
section[data-tint="gold"]{background:radial-gradient(ellipse at 50% 50%,rgba(255,205,133,.03),transparent 70%)}

/* ---------- glass panels: content floats over the moving 3D world and stays readable ---------- */
.intro,.section-heading,.pride-text,.hope-text,.little-list{
  background:rgba(9,6,14,.5);backdrop-filter:blur(22px) saturate(1.3);-webkit-backdrop-filter:blur(22px) saturate(1.3);
  border:1px solid rgba(255,255,255,.06);border-radius:24px;padding:clamp(28px,5vw,56px)
}
.hope-text,.pride-text{padding:clamp(28px,5vw,56px)}

/* ---------- progress rail ---------- */
.progress-rail{position:fixed;right:14px;top:14px;bottom:14px;width:2px;background:rgba(255,255,255,.06);z-index:40;border-radius:2px}
.progress-fill{position:absolute;top:0;left:0;width:100%;height:0%;background:linear-gradient(180deg,var(--pink),var(--gold));border-radius:2px}
.progress-heart{position:absolute;left:50%;top:0%;transform:translate(-50%,-50%);color:var(--pink);font-size:13px;text-shadow:0 0 8px rgba(255,92,154,.7)}
@media(max-width:750px){.progress-rail{right:6px;width:1.5px}}

/* ---------- hero ---------- */
.hero{min-height:100vh;position:relative;display:flex;flex-direction:column;padding:28px 6vw;background:linear-gradient(180deg,rgba(0,0,0,.05),var(--bg) 92%);overflow:hidden}
.hero-bg-svg{position:absolute;inset:0;width:100%;height:100%;z-index:0;opacity:.9}
.draw-heart{stroke-dasharray:900;stroke-dashoffset:900;animation:drawHeart 2.6s ease forwards .3s}
@keyframes drawHeart{to{stroke-dashoffset:0}}
nav{position:relative;z-index:2;display:flex;justify-content:space-between;align-items:center;max-width:1200px;width:100%;margin:auto}
.logo{font-family:"Cormorant Garamond";font-size:25px}.logo span{color:var(--pink)}
nav a{color:var(--muted);text-decoration:none;text-transform:uppercase;letter-spacing:2px;font-size:11px}
.hero-content{position:relative;z-index:2;max-width:900px;margin:auto;text-align:center;padding:60px 0 100px}
.eyebrow{text-transform:uppercase;letter-spacing:4px;color:var(--pink2);font-size:11px;font-weight:600;margin-bottom:18px}
.eyebrow.gold{color:var(--gold2)}
.center-eyebrow{text-align:center}
h1,h2{font-family:"Cormorant Garamond";font-weight:500;line-height:.95}
h1{font-size:clamp(75px,13vw,155px);letter-spacing:-6px}
h1 em,h2 em{color:var(--pink);font-style:italic}
.gold-h em{color:var(--gold)}
.hero-text{max-width:650px;margin:30px auto;color:var(--muted);line-height:1.9;font-size:15px}
.button,.love-button{display:inline-flex;gap:18px;align-items:center;border:1px solid rgba(255,154,192,.4);background:rgba(255,92,154,.08);color:white;padding:15px 25px;border-radius:100px;text-decoration:none;font-size:12px;letter-spacing:1px;transition:.3s;cursor:pointer}
.button:hover,.love-button:hover{background:var(--pink);transform:translateY(-3px);box-shadow:0 12px 35px rgba(255,70,140,.22)}
.scroll{position:relative;z-index:2;margin-top:auto;align-self:center;font-size:9px;letter-spacing:3px;color:#806f78;animation:bob 2.2s ease-in-out infinite}
.scroll span{display:block;text-align:center;margin-top:8px;color:var(--pink)}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(8px)}}

section{padding:120px 6vw;max-width:1200px;margin:auto;position:relative}
.intro{text-align:center;max-width:850px}
.intro h2,.section-heading h2{font-size:clamp(48px,7vw,82px);letter-spacing:-2px}
.intro>p:last-child,.section-heading>p:last-child{color:var(--muted);margin:25px auto;max-width:650px;line-height:1.9;font-size:14px}

/* ---------- reveal (scroll-direction aware, one-shot via IntersectionObserver) ---------- */
.reveal{opacity:0;transition:1s cubic-bezier(.2,.7,.2,1)}
.reveal[data-anim="up"],.reveal:not([data-anim]){transform:translateY(45px)}
.reveal[data-anim="left"]{transform:translateX(-70px)}
.reveal[data-anim="right"]{transform:translateX(70px)}
.reveal[data-anim="scale"],.reveal[data-anim="zoom"]{transform:scale(.82)}
.reveal[data-anim="rotate"]{transform:rotate(-6deg) translateY(30px) scale(.94)}
.reveal.visible{opacity:1;transform:none}

/* ---------- section dividers ---------- */
.divider{display:block;width:100%;height:50px;margin:0 auto -10px;max-width:1200px;opacity:.8}

/* ---------- zoom-pin intro transition ---------- */
.zoompin{position:relative}
.zoompin-sticky{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}
.zoompin-heart{font-size:60px;color:var(--pink);will-change:transform,opacity;text-shadow:0 0 60px rgba(255,92,154,.6)}
.zoompin-text{margin-top:22px;font-family:"Cormorant Garamond";font-style:italic;font-size:clamp(20px,3vw,30px);color:var(--pink2);will-change:opacity}

/* ---------- status (one step before relationship) ---------- */
.status-section{max-width:1200px}
.status-inner{display:grid;grid-template-columns:1.15fr .85fr;gap:60px;align-items:center}
.status-text p{color:#e4d9de;font-family:"Cormorant Garamond";font-size:20px;line-height:1.85;margin-bottom:18px}
.status-text h2{font-size:clamp(40px,6vw,64px);margin-bottom:28px}
.status-visual{text-align:center}
.status-svg{width:100%;max-width:320px}
.pulse-ring{animation:pulseRing 2.6s ease-in-out infinite}
@keyframes pulseRing{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.04)}}
.status-caption{margin-top:18px;color:var(--muted);font-size:12.5px;max-width:280px;margin-left:auto;margin-right:auto;line-height:1.7}
@media(max-width:850px){.status-inner{grid-template-columns:1fr;gap:35px}}

/* ---------- pin-fade scrollytelling (fixed: pure function of progress, no accumulation) ---------- */
.pinfade{position:relative}
.pinfade-sticky{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 6vw;overflow:hidden}
.pin-heading{font-size:clamp(36px,5.5vw,60px);margin-bottom:6px;opacity:.85}
.pinfade-lines{position:relative;width:100%;max-width:900px;height:140px;margin-top:20px}
.pinfade-lines span{display:block;font-family:"Cormorant Garamond";font-size:clamp(24px,4vw,40px);color:var(--pink2);opacity:0;position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);will-change:transform,opacity}
.pinfade-lines span:nth-child(even){color:#fff}
.pinfade-lines .pin-final{color:var(--pink);font-size:clamp(22px,3.2vw,32px);font-weight:600}
.pin-sub{position:absolute;bottom:30px;left:50%;transform:translateX(-50%);font-size:9px;letter-spacing:3px;color:#7d6d75;text-transform:uppercase}
.refuge-lines span{color:var(--pink3)}
.refuge-lines span:nth-child(even){color:#fff}

/* ---------- horizontal pin filmstrip ---------- */
.hpin{position:relative}
.hpin-sticky{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}
.hpin-heading{text-align:center;margin-bottom:36px}
.hpin-heading h2{font-size:clamp(38px,6vw,64px)}
.hpin-track{display:flex;gap:26px;will-change:transform;padding:0 6vw}
.hpin-card{flex:0 0 min(78vw,420px);min-height:220px;border:1px solid rgba(255,255,255,.08);background:rgba(9,6,14,.55);backdrop-filter:blur(20px) saturate(1.3);-webkit-backdrop-filter:blur(20px) saturate(1.3);display:flex;align-items:center;padding:34px;font-family:"Cormorant Garamond";font-size:22px;line-height:1.6;color:#e4d9de}
.hpin-final{background:rgba(255,92,154,.05);border-color:rgba(255,92,154,.3);color:var(--pink2);flex-direction:column;text-align:center}
.hpin-final span{color:var(--pink);font-size:38px;margin-bottom:14px}

/* ---------- three things ---------- */
.three-things{display:grid;grid-template-columns:repeat(4,1fr);gap:15px}
.thing{border:1px solid rgba(255,255,255,.08);padding:35px 28px;min-height:250px;background:rgba(9,6,14,.5);backdrop-filter:blur(18px) saturate(1.3);-webkit-backdrop-filter:blur(18px) saturate(1.3)}
.thing>span{color:var(--pink);font-size:11px;letter-spacing:2px}
.thing h3{font-family:"Cormorant Garamond";font-size:32px;margin:40px 0 15px}
.thing p{color:var(--muted);font-size:13px;line-height:1.8}
@media(max-width:1000px){.three-things{grid-template-columns:repeat(2,1fr)}}

/* ---------- refuge extra ---------- */
.refuge-extra{max-width:950px}
.refuge-card{border:1px solid rgba(255,255,255,.08);background:rgba(9,6,14,.55);backdrop-filter:blur(22px) saturate(1.3);-webkit-backdrop-filter:blur(22px) saturate(1.3);padding:clamp(30px,6vw,70px)}
.refuge-card h2{font-size:clamp(38px,5.5vw,58px);margin-bottom:30px}
.refuge-card p{font-family:"Cormorant Garamond";font-size:19px;line-height:1.8;color:#e4d9de;margin-bottom:20px}
.refuge-quote{margin-top:35px;font-family:"Cormorant Garamond";font-size:clamp(24px,3.4vw,34px);color:var(--pink2);text-align:center;padding:20px}
.refuge-quote span{color:var(--pink);font-size:44px;vertical-align:middle}

/* ---------- hope section ---------- */
.hope-section{max-width:1200px}
.hope-inner{display:grid;grid-template-columns:.75fr 1.25fr;gap:60px;align-items:center}
.hope-svg{width:100%;max-width:260px}
.hope-text p{font-family:"Cormorant Garamond";font-size:19px;line-height:1.85;color:#e4d9de;margin-bottom:18px}
.hope-text h2{font-size:clamp(38px,5.5vw,58px);margin-bottom:26px}
@media(max-width:850px){.hope-inner{grid-template-columns:1fr;gap:30px}}

/* ---------- pride / gold section ---------- */
.pride-section{max-width:1200px}
.pride-inner{display:grid;grid-template-columns:.8fr 1.2fr;gap:60px;align-items:center}
.pride-text p{font-family:"Cormorant Garamond";font-size:19px;line-height:1.85;color:#efe3da;margin-bottom:18px}
.pride-strong{color:var(--gold2)!important;font-size:22px!important}
.growth-svg{width:100%;max-width:260px;margin:0 auto;display:block}
#growthPath{stroke-dasharray:420;stroke-dashoffset:420}
#growthDot{opacity:0}
@media(max-width:850px){.pride-inner{grid-template-columns:1fr;gap:30px}}

/* ---------- little things ---------- */
.little-things{max-width:900px}
.little-list{display:flex;flex-direction:column;gap:22px;margin-top:50px}
.little-list p{font-family:"Cormorant Garamond";font-size:21px;line-height:1.7;color:#e4d9de;padding-left:26px;position:relative}
.little-list p:before{content:"♥";position:absolute;left:0;top:2px;color:var(--pink);font-size:13px}

/* ---------- letter (unchanged content, same styling) ---------- */
.letter-section{max-width:1000px}
.letter{position:relative;background:rgba(11,7,15,.62);backdrop-filter:blur(26px) saturate(1.25);-webkit-backdrop-filter:blur(26px) saturate(1.25);border:1px solid rgba(255,255,255,.08);padding:clamp(35px,7vw,90px);box-shadow:0 40px 100px rgba(0,0,0,.35)}
.letter-top{position:absolute;right:45px;top:35px;color:var(--pink);font-size:24px}
.letter h2{font-size:clamp(48px,6vw,75px);margin-bottom:45px}
.letter p{font-family:"Cormorant Garamond";font-size:21px;line-height:1.78;color:#e4d9de;margin-bottom:27px}
.letter strong{color:#fff}.letter em{color:var(--pink2)}
.letter-heading{font-family:"Cormorant Garamond";font-size:39px;color:var(--pink2);margin:65px 0 25px}
.quote{font-family:"Cormorant Garamond";font-size:clamp(30px,4vw,48px);line-height:1.15;text-align:center;color:var(--pink2);padding:45px 10px}
.quote span{color:var(--pink);font-size:70px;vertical-align:middle}
.big-message,.final-words{display:flex;flex-direction:column;align-items:center;gap:8px;margin:50px 0;padding:42px 20px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font-family:"Cormorant Garamond";font-size:clamp(28px,4vw,44px);color:var(--pink2);text-align:center}
.big-message span:last-child,.final-words span:last-child{color:#fff}
.special-box{margin:50px 0;padding:45px;text-align:center;border:1px solid rgba(255,92,154,.3);background:rgba(30,8,18,.5);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
.special-box span{color:var(--pink);font-size:45px}.special-box h3{font-family:"Cormorant Garamond";font-size:40px;margin:10px}
.special-box p{font-size:29px!important;color:var(--pink2)!important;margin:0!important}
.signature{text-align:center;margin-top:55px!important;font-size:27px!important}.signature strong{color:var(--pink)}

/* ---------- open when ---------- */
.open-when{max-width:1100px}.section-heading{text-align:center}
.when-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:15px;margin-top:55px}
.when-card{min-height:220px;text-align:left;padding:30px;background:rgba(9,6,14,.5);backdrop-filter:blur(18px) saturate(1.3);-webkit-backdrop-filter:blur(18px) saturate(1.3);border:1px solid rgba(255,255,255,.08);color:#fff;cursor:pointer;transition:.35s}
.when-card:hover{transform:translateY(-6px);border-color:rgba(255,92,154,.5);background:rgba(255,92,154,.05)}
.when-card span{display:block;color:var(--pink);font-size:10px;letter-spacing:2px}
.when-card strong{display:block;font-family:"Cormorant Garamond";font-size:31px;margin:55px 0 15px}
.when-card small{text-transform:uppercase;letter-spacing:2px;color:#7d6d75;font-size:9px}
.modal{position:fixed;inset:0;background:rgba(0,0,0,.78);backdrop-filter:blur(12px);display:none;align-items:center;justify-content:center;padding:25px;z-index:30}
.modal.show{display:flex}.modal-box{position:relative;max-width:650px;width:100%;padding:60px;background:#100a0e;border:1px solid var(--line);box-shadow:0 30px 100px rgba(0,0,0,.6)}
.modal-box h3{font-family:"Cormorant Garamond";font-size:48px;color:var(--pink2);margin-bottom:25px}
.modal-box>p:last-child{font-family:"Cormorant Garamond";font-size:23px;line-height:1.7;color:#e4d9de}
.close{position:absolute;right:20px;top:15px;border:0;background:none;color:#fff;font-size:32px;cursor:pointer}

/* ---------- reasons ---------- */
.interactive{text-align:center}.reasons{display:flex;justify-content:center;gap:15px;margin:45px 0 30px;flex-wrap:wrap}
.reasons button{width:60px;height:60px;border-radius:50%;border:1px solid var(--line);background:#120c10;color:var(--pink);font-size:24px;cursor:pointer;transition:.35s}
.reasons button:hover{transform:translateY(-7px) rotate(8deg);background:var(--pink);color:white;box-shadow:0 15px 35px rgba(255,92,154,.3)}
.reason-box{min-height:70px;display:flex;align-items:center;justify-content:center;color:var(--pink2);font-family:"Cormorant Garamond";font-size:30px;transition:.2s}

/* ---------- puzzle ---------- */
.puzzle{text-align:center;max-width:900px}
.puzzle-hearts{display:flex;justify-content:center;gap:14px;flex-wrap:wrap;margin-top:45px}
.puzzle-hearts button{width:56px;height:56px;border-radius:50%;border:1px solid var(--line);background:#120c10;color:var(--pink3);font-size:22px;cursor:pointer;transition:.3s}
.puzzle-hearts button:hover{transform:scale(1.12);background:var(--pink3);color:#100a0e}
.puzzle-hearts button.used{background:rgba(255,205,133,.12);color:var(--gold);border-color:var(--gold-line);cursor:default}
.puzzle-hearts button.used:hover{transform:none}
.puzzle-sentence{margin-top:35px;min-height:60px;font-family:"Cormorant Garamond";font-size:clamp(22px,3.5vw,32px);color:var(--gold2);line-height:1.5}

/* ---------- final ---------- */
.final{text-align:center;max-width:850px}.glow-heart{font-size:70px;color:var(--pink);text-shadow:0 0 40px rgba(255,92,154,.7);animation:pulse 2s infinite}
.final h2{font-size:clamp(55px,8vw,95px);margin:20px 0}.final>p:not(.eyebrow){color:var(--muted);max-width:600px;line-height:1.9;margin:0 auto 30px;font-size:14px}
.surprise{display:none;margin:35px auto 0;animation:pop .5s ease}.surprise.show{display:block}.surprise span{font-size:60px;color:var(--pink)}
.surprise p{font-family:"Cormorant Garamond";font-size:38px}.surprise small{color:var(--muted)}
footer{text-align:center;border-top:1px solid var(--line);padding:30px;color:#695a62;font-size:10px;letter-spacing:1px}footer span{color:var(--pink)}

/* ---------- falling hearts & cursor trail ---------- */
.heart{position:fixed;top:-30px;color:var(--pink);pointer-events:none;z-index:10;animation:fall linear forwards;text-shadow:0 0 12px rgba(255,92,154,.55)}
.cursor-heart{position:fixed;color:var(--pink2);pointer-events:none;z-index:9;font-size:12px;animation:cursorFade .9s ease forwards}
@keyframes cursorFade{0%{opacity:.9;transform:translateY(0) scale(1)}100%{opacity:0;transform:translateY(-24px) scale(.6)}}
@keyframes fall{to{transform:translateY(110vh) rotate(360deg);opacity:0}}
@keyframes pulse{50%{transform:scale(1.12)}}@keyframes pop{from{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}

@media(max-width:750px){
 nav a{display:none}.hero{padding:22px 5vw}h1{letter-spacing:-3px}
 .three-things,.when-grid{grid-template-columns:1fr}
 .letter p{font-size:19px}.letter-heading{font-size:32px}
 .special-box p{font-size:24px!important}
 .modal-box{padding:50px 30px}.modal-box h3{font-size:39px}
 .pinfade-lines span{font-size:22px!important}
 .hpin-card{flex:0 0 84vw;padding:26px;font-size:19px}
}
