*{margin:0;padding:0;box-sizing:border-box}:root{--bg-pink:#c99bb0;--fg-black:#000;--rose:#c4879a;--blush:#e8c4cf;--petal:#f2e0e6;--plum:#5c2535;--gold:#d4a8b0}html{scroll-behavior:smooth}body{background:var(--bg-pink);color:var(--fg-black);font-family:Jost,sans-serif;font-weight:300;overflow-x:hidden;cursor:none}html:not(.is-ready) *{animation:none!important;transition:none!important}#cursor{width:8px;height:8px;background:var(--rose);border-radius:50%;z-index:9999;transform:translate(-50%,-50%);transition:transform .1s ease,width .3s ease,height .3s ease,opacity .3s ease;mix-blend-mode:screen}#cursor,#cursor-trail{position:fixed;pointer-events:none}#cursor-trail{z-index:9998;top:0;left:0;width:100%;height:100%}#bg-canvas{position:fixed;inset:0;pointer-events:none;z-index:0}.scene{position:relative;z-index:1}#hero,.scene{min-height:100vh}#hero{display:grid;place-items:center;position:relative;overflow:hidden;background:var(--bg-pink)}.hero-inner{text-align:center;position:relative;z-index:2}.hero-eyebrow{font-size:.6rem;letter-spacing:.55em;color:var(--fg-black);text-transform:uppercase;opacity:0;display:block;margin-bottom:1.5rem}.hero-title{font-family:Ephesis,cursive;font-weight:400;font-size:clamp(5.5rem,18vw,16rem);line-height:.85;color:#000;letter-spacing:.02em;opacity:0;display:block;position:relative}.hero-title span{display:inline-block}.hero-xx{font-family:Cormorant Garamond,serif;font-size:clamp(.9rem,2vw,1.1rem);letter-spacing:.6em;color:var(--fg-black);font-weight:300;opacity:0;display:block;margin-top:1.5rem}.hero-scroll-hint{position:absolute;bottom:3rem;left:50%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:.8rem;opacity:0}.hero-scroll-hint span{font-size:.55rem;letter-spacing:.4em;color:var(--fg-black);text-transform:uppercase}.scroll-bar{width:1px;height:60px;background:linear-gradient(to bottom,var(--rose),transparent);animation:scrollBar 2s ease-in-out infinite}@keyframes scrollBar{0%,to{opacity:1;transform:scaleY(1)}50%{opacity:.3;transform:scaleY(.5)}}#letter-scene{padding:12vh 6vw;max-width:1100px;margin:0 auto}.scene-label{font-size:.58rem;letter-spacing:.55em;color:var(--fg-black);text-transform:uppercase;display:block;margin-bottom:4rem;opacity:0;transform:translateY(15px);transition:all .8s ease}.scene-label.vis{opacity:1;transform:translateY(0)}.letter-para{font-family:Cormorant Garamond,serif;font-weight:300;font-size:clamp(1.7rem,3.5vw,2.8rem);line-height:1.65;color:var(--fg-black);opacity:0;transform:translateY(35px);transition:opacity 1s ease,transform 1s cubic-bezier(.16,1,.3,1);margin-bottom:2.5rem}.letter-para.vis{opacity:1;transform:translateY(0)}.letter-em{color:var(--fg-black);font-style:italic}.timeline-section{padding:6rem 2rem;max-width:900px;margin:0 auto}.timeline-section .section-label{font-size:.75rem;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:#6a2435;margin-bottom:4rem;text-align:center}.timeline{position:relative;padding-left:0}.timeline:before{content:"";position:absolute;left:50%;top:0;bottom:0;width:2px;background:linear-gradient(180deg,transparent,#6a2435 5%,#6a2435 95%,transparent);transform:translateX(-50%)}.timeline-item{display:grid;grid-template-columns:1fr 60px 1fr;grid-gap:0;gap:0;margin-bottom:4rem;position:relative}.timeline-dot{grid-column:2;display:flex;align-items:flex-start;justify-content:center;padding-top:1rem;z-index:2}.dot-inner{width:16px;height:16px;border-radius:50%;background:#6a2435;border:3px solid var(--bg-pink);box-shadow:0 0 12px rgba(106,36,53,.5),0 0 24px rgba(106,36,53,.2);flex-shrink:0}.timeline-item:nth-child(odd) .timeline-card{grid-column:1;padding-right:2rem}.timeline-item:nth-child(2n) .timeline-card{grid-column:3;padding-left:2rem;grid-row:1}.timeline-item:nth-child(2n) .timeline-dot,.timeline-item:nth-child(odd) .timeline-dot{grid-column:2;grid-row:1}.timeline-card{background:rgba(0,0,0,.06);border:1px solid rgba(106,36,53,.15);border-radius:16px;padding:1.5rem;transition:border-color .3s,box-shadow .3s}.timeline-card:hover{border-color:rgba(106,36,53,.35);box-shadow:0 8px 32px rgba(106,36,53,.1)}.card-date{font-size:.72rem;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:#6a2435;margin-bottom:.4rem}.card-title{font-family:Cormorant Garamond,serif;font-size:clamp(1.1rem,2.5vw,1.5rem);font-weight:700;color:#000;margin-bottom:.5rem;line-height:1.2}.card-text{font-size:.95rem;color:rgba(0,0,0,.6);line-height:1.6}.timeline-photos{margin-top:1.1rem}.timeline-photos-toggle{font-family:Jost,sans-serif;font-size:.62rem;font-weight:400;letter-spacing:.35em;text-transform:uppercase;color:#6a2435;cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:.45rem;-webkit-user-select:none;-moz-user-select:none;user-select:none;background:none;border:none;padding:0}.timeline-photos-toggle:after{content:"↓";font-size:.75rem;letter-spacing:0;transition:transform .35s cubic-bezier(.16,1,.3,1)}.timeline-photos.is-open .timeline-photos-toggle:after{transform:rotate(180deg)}.timeline-photo-panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .55s cubic-bezier(.16,1,.3,1)}.timeline-photos.is-open .timeline-photo-panel{grid-template-rows:1fr}.timeline-photo-panel-inner{min-height:0;overflow:hidden}.timeline-photo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:.75rem;gap:.75rem;padding-top:1rem;opacity:0;transform:translateY(-10px);transition:opacity .35s ease,transform .45s cubic-bezier(.16,1,.3,1)}.timeline-photos.is-open .timeline-photo-grid{opacity:1;transform:translateY(0);transition:opacity .45s ease .08s,transform .5s cubic-bezier(.16,1,.3,1) .08s}.timeline-photo-grid img{width:100%;border-radius:10px;object-fit:cover;aspect-ratio:3/4;border:1px solid rgba(106,36,53,.12)}@media (max-width:600px){.timeline-photo-grid{grid-template-columns:1fr}}@supports (animation-timeline:scroll()){.timeline-item:nth-child(odd) .timeline-card{opacity:0;-webkit-clip-path:inset(0 0 0 100%);clip-path:inset(0 0 0 100%);animation:revealLeft linear both;animation-timeline:view();animation-range:entry 0 entry 70%}.timeline-item:nth-child(2n) .timeline-card{opacity:0;-webkit-clip-path:inset(0 100% 0 0);clip-path:inset(0 100% 0 0);animation:revealRight linear both;animation-timeline:view();animation-range:entry 0 entry 70%}.timeline-dot{opacity:0;animation:revealDot linear both;animation-timeline:view();animation-range:entry 0 entry 50%}@keyframes revealLeft{to{opacity:1;-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}}@keyframes revealRight{to{opacity:1;-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}}@keyframes revealDot{to{opacity:1}}}.timeline-card{opacity:1;-webkit-clip-path:none;clip-path:none}.timeline-dot{opacity:1}@media (max-width:600px){.timeline:before{left:20px}.timeline-item{grid-template-columns:40px 1fr}.timeline-dot{grid-column:1}.timeline-item:nth-child(2n) .timeline-card,.timeline-item:nth-child(odd) .timeline-card{grid-column:2;grid-row:1;padding-right:0;padding-left:1rem}}#counter-scene{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:70vh;position:relative;overflow:hidden;padding:8vh 4vw}.counter-number{font-family:Cormorant Garamond,serif;font-weight:300;font-style:italic;font-size:clamp(8rem,30vw,22rem);-webkit-text-stroke:0 transparent;line-height:1;transition:opacity .6s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none}.counter-label,.counter-number{color:var(--fg-black);opacity:0;position:relative;z-index:2}.counter-label{font-size:.65rem;letter-spacing:.6em;text-transform:uppercase;margin-top:1rem;transition:opacity .6s ease .3s}.counter-label.vis,.counter-number.vis{opacity:1}#things-scene{padding:12vh 6vw;max-width:900px;margin:0 auto;min-height:auto}.things-header{font-family:Cormorant Garamond,serif;font-style:italic;font-weight:300;font-size:clamp(2.5rem,7vw,5rem);color:var(--fg-black);line-height:1.1;margin-bottom:5rem;opacity:0;transform:translateY(35px);transition:opacity 1s ease,transform 1s cubic-bezier(.16,1,.3,1)}.things-header.vis{opacity:1;transform:translateY(0)}.things-header span{color:var(--rose);font-style:normal}.things-list{display:flex;flex-direction:column}.t-item{display:flex;align-items:baseline;gap:2rem;padding:1.2rem 0;border-bottom:1px solid #c4879a1f;opacity:0;transform:translateX(-20px);transition:opacity .5s ease,transform .5s ease}.t-item.vis{opacity:1;transform:translateX(0)}.t-num{font-style:italic;font-size:.85rem;min-width:3rem;letter-spacing:.05em}.t-num,.t-text{font-family:Cormorant Garamond,serif;color:var(--fg-black)}.t-text{font-size:clamp(1rem,2.2vw,1.25rem);font-weight:300;line-height:1.5}#closing-scene{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;text-align:center;padding:8vh 4vw 14vh;position:relative;overflow:hidden}#confetti-canvas{position:absolute;inset:0;pointer-events:none;z-index:0}.closing-eyebrow{font-size:.6rem;letter-spacing:.55em;color:var(--fg-black);text-transform:uppercase;margin-bottom:2rem;opacity:0;transition:opacity .8s ease;position:relative;z-index:2}.closing-eyebrow.vis{opacity:1}.envelope-hint{display:block;text-align:center;margin-bottom:2.5rem;opacity:1;transition:opacity .35s ease}.closing-big{font-family:Cormorant Garamond,serif;font-weight:300;font-style:italic;font-size:clamp(4rem,14vw,11rem);line-height:.85;color:var(--fg-black);opacity:0;transform:translateY(50px);transition:opacity 1s ease .2s,transform 1.2s cubic-bezier(.16,1,.3,1) .2s;position:relative;z-index:2}.closing-big.vis{opacity:1;transform:translateY(0)}.closing-rose{color:#6a2435}.closing-msg{font-size:clamp(.85rem,2vw,1rem);color:rgba(0,0,0,.85);margin-top:3rem;letter-spacing:.08em;font-weight:200;opacity:0;transition:opacity .8s ease .6s;position:relative;z-index:2}.closing-msg.vis{opacity:1}.closing-glyph{font-family:Cormorant Garamond,serif;font-size:2.5rem;color:var(--fg-black);margin-top:3rem;display:block;opacity:0;transition:opacity .8s ease 1s;animation:throb 3s ease infinite;position:relative;z-index:2}.closing-glyph.vis{opacity:1}@keyframes throb{0%,to{transform:scale(1)}50%{transform:scale(1.15)}}.silk-divider{width:100%;max-width:900px;margin:0 auto;height:80px;display:flex;align-items:center;padding:0 6vw;gap:1.5rem;opacity:.3}.silk-divider:after,.silk-divider:before{content:"";flex:1 1;height:1px;background:linear-gradient(to right,transparent,var(--rose))}.silk-divider:after{background:linear-gradient(to left,transparent,var(--rose))}.silk-divider span{color:var(--rose);font-size:.7rem}@keyframes fadeSlideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.envelope-wrap{position:relative;width:min(500px,92vw);cursor:pointer;perspective:1400px;margin:0 auto}.env-body{position:relative;width:100%;padding-top:63%;background:linear-gradient(145deg,#200b12,#2d1018 55%,#1a0809);border-radius:3px;border:1px solid rgba(196,135,154,.22);overflow:hidden;transition:transform .35s ease,box-shadow .35s ease;box-shadow:0 10px 40px rgba(0,0,0,.5)}.envelope-wrap:hover .env-body{transform:translateY(-5px);box-shadow:0 20px 60px rgba(92,37,53,.5)}.env-v-left,.env-v-right{position:absolute;bottom:0;width:0;height:0}.env-v-left{left:0;border-color:transparent transparent rgba(6,1,3,.55);border-style:solid;border-width:0 0 155px 250px}.env-v-right{right:0;border-color:transparent rgba(6,1,3,.55) transparent transparent;border-style:solid;border-width:0 250px 155px 0}.wax-seal{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:72px;height:72px;background:radial-gradient(circle at 36% 36%,#d4a0b0,#7a2d42,#3d0f1c);border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:Cormorant Garamond,serif;font-style:italic;font-size:1.75rem;color:rgba(250,243,245,.95);box-shadow:0 3px 18px rgba(0,0,0,.65),inset 0 1px 0 hsla(0,0%,100%,.12),0 0 0 5px rgba(92,37,53,.3);transition:transform .55s cubic-bezier(.16,1,.3,1),opacity .4s ease;z-index:10}.env-flap{position:absolute;top:0;left:0;right:0;height:52%;transform-origin:top center;transform-style:preserve-3d;z-index:8;transition:transform .85s cubic-bezier(.4,0,.2,1)}.env-flap-back,.env-flap-face{position:absolute;inset:0;-webkit-clip-path:polygon(0 0,100% 0,50% 93%);clip-path:polygon(0 0,100% 0,50% 93%);border-top:1px solid rgba(196,135,154,.2)}.env-flap-face{background:linear-gradient(170deg,#2d1018,#1e0a10)}.env-flap-back{background:linear-gradient(170deg,#150609,#1e0a10);-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:rotateX(180deg)}.letter-peek{position:absolute;bottom:0;left:6%;right:6%;height:73%;background:linear-gradient(180deg,#fdf8f9,#f5e8ed);border-radius:2px 2px 0 0;transform:translateY(108%);transition:transform .75s cubic-bezier(.16,1,.3,1) .3s;z-index:3;box-shadow:0 -8px 28px rgba(0,0,0,.45);align-items:center;padding-top:1.4rem;gap:.9rem;cursor:pointer}.letter-lines,.letter-peek{display:flex;flex-direction:column}.letter-lines{width:52%;gap:7px}.letter-lines span{display:block;height:1px;background:rgba(139,74,92,.2);border-radius:1px}.peek-cta{font-size:.52rem;letter-spacing:.35em;text-transform:uppercase;transition:color .5s ease 1s;white-space:nowrap}.peek-arrow,.peek-cta{color:rgba(139,74,92,0);pointer-events:none}.peek-arrow{font-size:.8rem;transition:color .5s ease 1.2s;animation:bounce 1.5s ease-in-out infinite}.envelope-wrap.open .env-flap{transform:rotateX(-178deg)}.envelope-wrap.open .wax-seal{transform:translate(-50%,-50%) scale(0) rotate(45deg);opacity:0}.envelope-wrap.open .letter-peek{transform:translateY(28%)}.envelope-wrap.open .peek-cta{color:rgba(139,74,92,.55)}.envelope-wrap.open .peek-arrow{color:rgba(139,74,92,.5)}#overlay{position:fixed;inset:0;z-index:500;display:flex;align-items:center;justify-content:center;padding:2rem;background:rgba(13,6,8,.92);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);opacity:0;pointer-events:none;transition:opacity .45s ease}#overlay.active{opacity:1;pointer-events:all}.letter-paper{position:relative;width:min(600px,94vw);max-height:85vh;overflow-y:auto;background:linear-gradient(158deg,#fdf8f9,#f5e8ed 45%,#fdf8f9);border-radius:2px;padding:clamp(2.5rem,6vw,4.5rem) clamp(2.5rem,6vw,5rem);box-shadow:0 50px 130px rgba(0,0,0,.85);transform:translateY(60px) scale(.93) rotate(-1.5deg);transition:transform .75s cubic-bezier(.16,1,.3,1) .1s;scrollbar-width:thin;scrollbar-color:rgba(139,74,92,.25) transparent}#overlay.active .letter-paper{transform:translateY(0) scale(1) rotate(0deg)}.letter-paper:before{content:"";position:absolute;left:clamp(2.5rem,6vw,4.5rem);top:0;bottom:0;width:1px;background:rgba(196,135,154,.15)}.lp-date{font-family:Cormorant Garamond,serif;font-style:italic;font-size:.8rem;color:rgba(92,37,53,.4);letter-spacing:.07em;margin-bottom:2rem;display:block}.lp-greeting{font-size:clamp(1.7rem,4vw,2.4rem);color:#1a0809;margin-bottom:1.8rem;line-height:1.2}.lp-body,.lp-greeting{font-family:Cormorant Garamond,serif;font-weight:300}.lp-body{font-size:clamp(1.05rem,2.2vw,1.2rem);line-height:1.9;color:#2a0f18;margin-bottom:1.3rem}.lp-body em{color:#6a2435;font-style:italic}.lp-sign{font-family:Cormorant Garamond,serif;font-style:italic;font-size:clamp(1.3rem,3vw,1.7rem);margin-top:2.2rem}.lp-close-btn,.lp-sign{color:#5c2535;display:block}.lp-close-btn{margin:2.5rem auto 0;background:none;border:1px solid rgba(92,37,53,.25);font-family:Jost,sans-serif;font-weight:300;font-size:.6rem;letter-spacing:.35em;text-transform:uppercase;padding:.65rem 2rem;cursor:pointer;border-radius:2px;transition:background .25s ease,border-color .25s ease}.lp-close-btn:hover{background:rgba(92,37,53,.07);border-color:rgba(92,37,53,.5)}.question-scene{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:18rem 2rem 12rem;position:relative;gap:2.5rem}.q-section-header{font-family:Jost,sans-serif;font-size:clamp(.85rem,2.5vw,1rem);font-weight:400;letter-spacing:.35em;text-transform:uppercase;color:var(--fg-black)}.q-card,.q-section-header{text-align:center;position:relative;z-index:1}.q-card{background:rgba(0,0,0,.07);border:1px solid rgba(106,36,53,.18);border-radius:24px;padding:3rem 2.5rem;max-width:480px}.q-card,.qa-content{width:100%;display:flex;flex-direction:column;align-items:center;gap:2.5rem}.qa-hidden{display:none}.q-question{font-family:Cormorant Garamond,serif;font-size:clamp(1.3rem,4vw,1.9rem);font-weight:700;line-height:1.3;color:#000}.q-question span{color:#6a2435;font-style:italic}.q-buttons{display:flex;gap:1rem;align-items:center;justify-content:center;width:100%}.q-btn-yes{background:#6a2435;color:#fff;border:none;border-radius:9999px;padding:.75rem 2.2rem;font-family:Jost,sans-serif;font-size:1rem;font-weight:700;cursor:pointer;box-shadow:0 4px 20px rgba(106,36,53,.4);transition:transform .18s,box-shadow .18s,background .18s}.q-btn-yes:hover{background:#a04060;transform:translateY(-2px);box-shadow:0 8px 32px rgba(106,36,53,.55)}.q-btn-no{background:#6a2435;color:#fff;border:1.5px solid #6a2435;border-radius:9999px;padding:.75rem 2.2rem;font-family:Jost,sans-serif;font-size:1rem;font-weight:700;cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;box-shadow:0 0 14px rgba(106,36,53,.4),0 0 32px rgba(106,36,53,.2)}.q-btn-no.q-floating{position:fixed}.q-success{display:none;flex-direction:column;align-items:center;gap:1rem}.q-success-visible{display:flex}.q-success-icon{font-size:3rem}.q-success-text{font-family:Cormorant Garamond,serif;font-size:clamp(1.2rem,3vw,1.6rem);font-weight:700;color:#6a2435;font-style:italic}.q-success-sub{font-size:.95rem;color:rgba(0,0,0,.5)}.cake-scene{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;gap:.8rem;max-width:480px;width:100%;margin:calc(-4.5rem - 150px) auto 0;padding:1.25rem 2rem .5rem}.cake-wrapper{position:relative;width:340px;height:300px;z-index:1}.cake-wrapper svg{width:100%;height:100%;overflow:visible;position:relative;z-index:2}.cake-wrapper:before{content:"";position:absolute;left:50%;top:66%;transform:translate(-50%,-50%);width:260px;height:120px;border-radius:50%;background:radial-gradient(closest-side,rgba(10,6,8,.18) 0,rgba(10,6,8,.06) 40%,rgba(10,6,8,0) 70%);filter:blur(18px);z-index:0;pointer-events:none}.flame-group{cursor:pointer}.flame-flicker{animation:flicker .75s ease-in-out infinite alternate}.flame-flicker-b{animation:flickerB 1.05s ease-in-out infinite alternate}.flame-flicker-c{animation:flickerC .55s ease-in-out infinite alternate}@keyframes flicker{0%{opacity:.95;transform:scaleX(1) scaleY(1) rotate(-1.5deg)}to{opacity:.8;transform:scaleX(.88) scaleY(1.08) rotate(1.5deg)}}@keyframes flickerB{0%{opacity:.9;transform:scaleX(1) scaleY(1) rotate(1deg)}to{opacity:.75;transform:scaleX(.85) scaleY(1.1) rotate(-2deg)}}@keyframes flickerC{0%{opacity:1;transform:scaleX(1.05) scaleY(.95) rotate(-1deg)}to{opacity:.82;transform:scaleX(.82) scaleY(1.12) rotate(2.5deg)}}.flame-group.out .flame-visible{display:none}.flame-group.out .smoke-path{display:block}.smoke-path{display:none}.smoke-path.animating{animation:smokeUp 1.4s ease-out forwards}@keyframes smokeUp{0%{opacity:.6;stroke-dashoffset:40}60%{opacity:.4}to{opacity:0;stroke-dashoffset:0}}.cake-scene .hint{font-size:.6rem;letter-spacing:.55em;color:var(--fg-black);text-transform:uppercase;text-align:center;transition:opacity .4s ease}.cake-scene .hint.hidden{opacity:0;pointer-events:none}.btn-restart{background:transparent;color:#6a2435;border:1.5px solid hsla(0,0%,100%,.07);padding:0;border-radius:9999px;cursor:pointer;display:flex;align-items:center;justify-content:center;width:44px;height:44px;transition:border-color .18s,color .18s,transform .3s}.btn-restart:hover{border-color:rgba(106,36,53,.35);color:#6a2435;transform:rotate(60deg)}.btn-restart:active{transform:rotate(180deg)}.btn-restart svg{width:20px;height:20px}@media (prefers-reduced-motion:reduce){.flame-flicker,.flame-flicker-b,.flame-flicker-c{animation:none}}