:root{--wine:#6f1d3b;--deep:#401124;--rose:#d58b9f;--blush:#f7e9e8;--cream:#fffaf2;--ink:#351d26;--gold:#c8a36a}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--cream);color:var(--ink);font-family:"DM Sans",sans-serif;overflow-x:hidden}.locked{overflow:hidden}.grain{position:fixed;inset:0;pointer-events:none;z-index:50;opacity:.045;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='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E")}.intro{min-height:100svh;background:radial-gradient(circle at 50% 40%,#942f55 0,var(--wine) 45%,var(--deep) 100%);display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--cream);position:relative;text-align:center;transition:opacity .7s,transform .9s;overflow:hidden}.intro:before,.intro:after{content:"♡";position:absolute;font:150px/1 "Cormorant Garamond";opacity:.08}.intro:before{left:5%;top:10%;transform:rotate(-18deg)}.intro:after{right:7%;bottom:9%;transform:rotate(20deg)}.intro-copy{position:absolute;top:8%;z-index:5}.eyebrow{text-transform:uppercase;letter-spacing:.25em;font-size:11px;font-weight:600}.intro h1{font:600 clamp(48px,10vw,92px)/.85 "Cormorant Garamond";margin:12px 0}.intro h1 em,.hero em,.section-title em,.teddy-section em,.big-promise em{font-weight:500;color:#f0b7c5}.intro-copy p{font-family:"Cormorant Garamond";font-size:18px;font-style:italic;opacity:.8}.envelope{width:min(76vw,430px);height:280px;background:transparent;border:0;position:relative;cursor:pointer;margin-top:100px;perspective:900px;filter:drop-shadow(0 30px 28px rgba(25,3,12,.35))}.envelope-back{position:absolute;inset:20px 0 0;background:#ead7cd;border-radius:7px}.letter{position:absolute;left:7%;right:7%;height:90%;bottom:20px;background:#fffaf2;color:var(--wine);display:flex;flex-direction:column;align-items:center;justify-content:center;transition:transform 1.1s .45s;z-index:2;box-shadow:0 0 0 1px #d8c4b7}.letter:before{content:"";position:absolute;inset:12px;border:1px solid #d8b7a6}.letter small{letter-spacing:.2em;text-transform:uppercase;font-size:9px}.letter strong{font:600 50px "Cormorant Garamond"}.letter i{font:30px "Cormorant Garamond"}.envelope-front{position:absolute;inset:20px 0 0;z-index:3;background:linear-gradient(150deg,transparent 49.7%,#e5cfc2 50%) left/50% 100% no-repeat,linear-gradient(210deg,transparent 49.7%,#ddc3b4 50%) right/50% 100% no-repeat,linear-gradient(25deg,#ead7cc 50%,transparent 50%);border-radius:7px}.flap{position:absolute;z-index:4;top:20px;left:0;width:100%;height:70%;background:#f1ded3;clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top;transition:transform .9s}.seal{position:absolute;z-index:5;left:50%;top:54%;translate:-50% -50%;width:54px;height:54px;border-radius:50%;background:var(--wine);border:3px double #d7aab4;display:grid;place-items:center;color:#fff3ef;font:600 25px "Cormorant Garamond";transition:.4s}.envelope.open .flap{transform:rotateX(180deg);z-index:1}.envelope.open .seal{opacity:0;transform:scale(.4)}.envelope.open .letter{transform:translateY(-145px)}.open-label{background:none;border:0;color:var(--cream);font:600 26px "Cormorant Garamond";cursor:pointer;letter-spacing:.03em}.open-label span{color:#f2adbe}.hint{font-size:10px;letter-spacing:.15em;text-transform:uppercase;opacity:.55}.intro.depart{opacity:0;transform:scale(1.08);pointer-events:none;position:fixed;inset:0;z-index:40}.story{display:none;background:var(--cream)}.story.visible{display:block}.hero{min-height:100svh;padding:12vh 8vw;display:flex;flex-direction:column;justify-content:center;background:linear-gradient(120deg,var(--deep),var(--wine));color:var(--cream);position:relative}.hero:after{content:"Sarah";position:absolute;right:-2vw;bottom:-3vw;font:italic 28vw/.7 "Cormorant Garamond";color:transparent;-webkit-text-stroke:1px rgba(255,255,255,.09)}.hero h2,.section-title h2,.teddy-section h2{font:600 clamp(55px,9vw,118px)/.82 "Cormorant Garamond";margin:28px 0;letter-spacing:-.04em}.hero p{font:italic 24px "Cormorant Garamond";max-width:460px}.scroll-cue{position:absolute;bottom:28px;left:8vw;text-transform:uppercase;letter-spacing:.2em;font-size:9px;display:flex;align-items:center;gap:12px}.scroll-cue span{height:45px;width:1px;background:#dcb1ba;display:block}.portrait-stage{min-height:110vh;padding:12vh 8vw;display:grid;grid-template-columns:1fr .6fr;align-items:center;gap:8vw;position:relative}.arch-photo{width:min(620px,100%);height:82vh;border-radius:310px 310px 12px 12px;overflow:hidden;border:1px solid #d7b9aa;padding:12px}.arch-photo img{width:100%;height:100%;object-fit:cover;border-radius:300px 300px 4px 4px}.side-note span{font:italic 90px "Cormorant Garamond";color:#d6b9b0}.side-note p{font:italic clamp(24px,3vw,38px)/1.25 "Cormorant Garamond"}.doodle-heart{position:absolute;right:5%;top:15%;font:150px "Cormorant Garamond";color:var(--rose);opacity:.25;transform:rotate(15deg)}.moments{padding:14vh 7vw;background:var(--blush)}.section-title{text-align:center;margin-bottom:10vh}.section-title h2{font-size:clamp(52px,8vw,100px);color:var(--deep)}.section-title em{color:var(--wine)}.photo-grid{max-width:1200px;margin:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:32px;align-items:start}.card{margin:0;background:#fff;padding:10px 10px 22px;box-shadow:0 20px 45px rgba(80,25,43,.13);transform:rotate(-1.5deg)}.card:nth-child(even){transform:rotate(1.5deg)}.card img{width:100%;height:420px;object-fit:cover;display:block}.card.tall img{height:560px}.card.wide{grid-column:span 2}.card.wide img{height:520px}.card figcaption{font:italic 19px "Cormorant Garamond";text-align:center;padding-top:14px}.quote-card{min-height:330px;margin:0;background:var(--wine);color:var(--cream);padding:40px;display:flex;flex-direction:column;justify-content:center}.quote-card span{font-size:55px;color:#eeb1c0}.quote-card blockquote{font:italic 29px/1.25 "Cormorant Garamond";margin:10px 0}.teddy-section{min-height:100vh;padding:12vh 9vw;background:#f1ddda;display:grid;grid-template-columns:.8fr 1.2fr;gap:10vw;align-items:center}.teddy-section h2{font-size:clamp(50px,7vw,90px)}.teddy-section p{max-width:560px;line-height:1.8}.teddy{width:270px;height:390px;margin:auto;position:relative}.teddy-head{width:210px;height:190px;border-radius:48% 48% 44% 44%;background:#b77c58;position:absolute;top:42px;left:30px;z-index:2;box-shadow:inset -18px -14px rgba(83,45,31,.12)}.ears i{position:absolute;width:86px;height:86px;background:#9f6748;border:18px solid #b77c58;border-radius:50%;top:7px}.ears i:first-child{left:15px}.ears i:last-child{right:15px}.eye{position:absolute;width:12px;height:16px;background:#35241f;border-radius:50%;top:78px}.eye.left{left:58px}.eye.right{right:58px}.teddy-head b{position:absolute;width:42px;height:30px;background:#563b31;border-radius:50%;left:84px;top:104px}.teddy-head span{position:absolute;width:52px;height:26px;border-bottom:3px solid #563b31;border-radius:50%;left:79px;top:122px}.teddy-body{position:absolute;width:225px;height:210px;border-radius:50% 50% 42% 42%;background:#b77c58;left:22px;top:185px;box-shadow:inset -22px -12px rgba(83,45,31,.12)}.teddy-body .arm{position:absolute;width:80px;height:160px;border-radius:50%;background:#a76e4e;top:15px}.teddy-body .arm.left{left:-45px;transform:rotate(24deg)}.teddy-body .arm.right{right:-45px;transform:rotate(-24deg)}.teddy-body strong{position:absolute;z-index:3;left:50%;top:45%;translate:-50% -50%;font:100px "Cormorant Garamond";color:#6f1d3b}.promise{padding:15vh 6vw;background:var(--deep);display:grid;place-items:center}.promise-card{position:relative;background:#fffaf2;max-width:900px;padding:clamp(40px,8vw,100px);box-shadow:0 30px 80px rgba(0,0,0,.3);text-align:center}.promise-card:before{content:"";position:absolute;inset:14px;border:1px solid #d9bcae;pointer-events:none}.wax{position:absolute;top:-42px;left:50%;translate:-50%;width:84px;height:84px;background:var(--wine);border-radius:50%;display:grid;place-items:center;color:#f5c1cb;font:47px "Cormorant Garamond";box-shadow:0 8px 20px rgba(0,0,0,.25)}.promise-card h2{font:600 82px "Cormorant Garamond";margin:20px 0;color:var(--wine)}.promise-card p{font:19px/1.9 "Cormorant Garamond";max-width:650px;margin:20px auto}.promise-card .big-promise{font-size:clamp(27px,4vw,43px);line-height:1.25;margin:50px auto}.big-promise em{color:var(--wine)}.signature{border-top:1px solid #dbc8bb;margin:45px auto 30px;padding-top:25px;display:flex;flex-direction:column;font-family:"Cormorant Garamond"}.signature span{font-style:italic}.signature strong{font-size:24px;color:var(--wine)}.heart-button{border:0;background:var(--wine);color:#fff8f0;padding:16px 26px;border-radius:50px;font:600 13px "DM Sans";letter-spacing:.06em;cursor:pointer;box-shadow:0 8px 25px rgba(111,29,59,.25);transition:.3s}.heart-button:hover{transform:translateY(-3px);background:#8b284c}.heart-button span{font-size:20px}.answer{font:italic 0 "Cormorant Garamond";color:var(--wine);opacity:0;transition:.6s;margin-top:0}.answer.show{font-size:30px;opacity:1;margin-top:24px}footer{background:var(--wine);color:var(--cream);padding:70px 8vw;text-align:center;display:flex;flex-direction:column;gap:7px}footer span{font-size:10px;text-transform:uppercase;letter-spacing:.25em}footer b{font:italic 38px "Cormorant Garamond"}footer i{font:30px "Cormorant Garamond"}.reveal{opacity:0;transform:translateY(55px);transition:opacity 1s,transform 1s}.reveal.in{opacity:1;transform:none}.heart-pop{position:fixed;z-index:100;pointer-events:none;color:#e593aa;font:28px "Cormorant Garamond";animation:fly 2.4s ease-out forwards}@keyframes fly{to{transform:translateY(-180px) rotate(25deg) scale(1.7);opacity:0}}@media(max-width:760px){.intro-copy{top:6%}.intro-copy p{max-width:300px}.envelope{height:220px}.envelope.open .letter{transform:translateY(-110px)}.portrait-stage{grid-template-columns:1fr;padding-top:10vh}.arch-photo{height:68vh}.side-note{text-align:center}.photo-grid{grid-template-columns:1fr;gap:45px}.card.wide{grid-column:auto}.card img,.card.tall img,.card.wide img{height:70vh}.teddy-section{grid-template-columns:1fr;text-align:center}.teddy-section p{margin:auto}.promise{padding-inline:18px}.promise-card{padding:70px 30px 45px}.hero{padding-inline:7vw}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
