:root{--ivory:#f7f0e3;--paper:#fbf8f0;--ink:#1a1712;--gold:#b79354;--gold-light:#e5ca91;--line:rgba(183,147,84,.42)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--ivory);color:var(--ink);font-family:'Cormorant Garamond',Georgia,serif;overflow-x:hidden}.loader{position:fixed;inset:0;z-index:100;background:#17130e;display:grid;place-items:center;transition:opacity .8s ease,visibility .8s}.loader span{font:500 13px/1 'Cinzel',serif;letter-spacing:.3em;color:var(--gold-light);animation:pulse 1.5s infinite}.loader i{font:32px 'Great Vibes';padding:0 .25em}.loader.done{opacity:0;visibility:hidden}.grain{position:fixed;z-index:20;inset:0;pointer-events:none;opacity:.05;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'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.8'/%3E%3C/svg%3E")}.particles{position:fixed;z-index:5;inset:0;pointer-events:none;overflow:hidden}.particle{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--gold-light);box-shadow:0 0 12px 2px rgba(229,202,145,.4);animation:float var(--duration) linear infinite;opacity:0}.sound-toggle{position:fixed;top:22px;right:22px;z-index:30;width:40px;height:40px;border:1px solid rgba(183,147,84,.5);border-radius:50%;background:rgba(22,18,13,.3);color:var(--gold-light);font:18px 'Cinzel';cursor:pointer;opacity:0;transition:.4s;backdrop-filter:blur(8px)}.sound-toggle.visible{opacity:1}.sound-off{display:none}.sound-toggle.muted .sound-on{display:none}.sound-toggle.muted .sound-off{display:inline}.intro{height:100svh;min-height:600px;background:radial-gradient(ellipse at 50% 45%,#46321e 0%,#221a12 47%,#100d0a 100%);display:grid;place-items:center;position:relative;cursor:pointer;overflow:hidden;transition:opacity .8s,visibility .8s}.intro::before,.intro::after{content:'';position:absolute;border:1px solid rgba(229,202,145,.22);border-radius:50%;width:min(86vw,750px);aspect-ratio:1;animation:orb 9s ease-in-out infinite}.intro::after{width:min(64vw,550px);animation-delay:-4s}.intro.hidden{opacity:0;visibility:hidden;position:absolute;inset:0}.intro-copy{color:var(--ivory);text-align:center;z-index:1;padding:20px}.eyebrow,.section-label{font:500 clamp(10px,1.4vw,13px)/1 'Cinzel',serif;letter-spacing:.3em;text-transform:uppercase;color:var(--gold)}.intro h1{margin:27px 0 34px;display:grid;gap:5px;font:clamp(70px,13vw,175px)/.68 'Great Vibes',cursive;color:#dfbd7f;text-shadow:0 3px 22px rgba(255,211,143,.22)}.intro h1 em{font:clamp(44px,7vw,80px)/.7 'Cormorant Garamond';font-style:italic;color:var(--ivory)}.tap-copy{display:flex;align-items:center;justify-content:center;gap:12px;font:12px 'Cinzel';letter-spacing:.25em;text-transform:uppercase;color:#e8d6b4}.tap-copy span{height:1px;width:26px;background:var(--gold);animation:blink 1.8s infinite}.envelope-scene{display:none;min-height:100svh;background:radial-gradient(circle at 50% 42%,#f9f0dc,#c9b388);place-items:center;align-content:center;gap:38px;overflow:hidden}.envelope-scene.active{display:grid}.envelope-wrap{width:min(78vw,620px);height:min(52vw,410px);perspective:1300px}.envelope{width:100%;height:100%;position:relative;filter:drop-shadow(0 30px 25px rgba(52,36,17,.25))}.letter{position:absolute;z-index:1;left:7%;bottom:3%;width:86%;height:83%;background:#fffaf0;border:1px solid #e3d3b5;display:grid;place-items:center;transition:transform 1.4s cubic-bezier(.19,.85,.25,1),height 1s}.letter::before{content:'';position:absolute;inset:13px;border:1px solid rgba(183,147,84,.34)}.letter-monogram{font:clamp(54px,10vw,106px)/.5 'Great Vibes';color:var(--gold);z-index:1}.letter-monogram i{font:30px 'Cormorant Garamond';font-style:italic}.envelope-back,.envelope-front,.envelope-flap{position:absolute;inset:0}.envelope-back{background:#d8bd88}.envelope-front{z-index:3;background:linear-gradient(145deg,transparent 49.6%,#c5a56d 50%) 0 0/50% 100%,linear-gradient(215deg,transparent 49.6%,#c5a56d 50%) 100% 0/50% 100%,linear-gradient(35deg,transparent 49.6%,#e2cb9d 50%) 0 100%/50% 100%,linear-gradient(-35deg,transparent 49.6%,#e2cb9d 50%) 100% 100%/50% 100%;background-repeat:no-repeat}.envelope-flap{z-index:4;transform-origin:top;clip-path:polygon(0 0,100% 0,50% 57%);background:#e3cb9d;transition:transform 1.15s cubic-bezier(.28,.79,.37,1)}.seal{position:absolute;z-index:5;top:40%;left:50%;translate:-50% -50%;width:70px;height:70px;border-radius:50%;border:4px double #7c2b21;background:#9d3a2b;color:#f0cfad;box-shadow:0 4px 0 #67241c,0 8px 15px rgba(0,0,0,.3);font:24px 'Great Vibes';cursor:pointer;transition:opacity .35s,transform .3s}.seal span{font:16px 'Cormorant Garamond'}.seal:hover{transform:scale(1.06)}.envelope.open .envelope-flap{transform:rotateX(180deg);z-index:0}.envelope.open .seal{opacity:0;pointer-events:none}.envelope.open .letter{transform:translateY(-52%) scale(1.04);height:98%;z-index:2}.open-prompt{font:12px 'Cinzel';letter-spacing:.18em;text-transform:uppercase;color:#634b2b}.invitation{display:none}.invitation.active{display:block}.section{position:relative;padding:clamp(100px,15vw,190px) 24px;text-align:center;overflow:hidden}.hero{min-height:100svh;display:grid;align-content:center;justify-items:center;background:radial-gradient(ellipse at 50% 40%,#fffdf7,#f6efdf 68%,#ede0c9)}.request{font-size:clamp(20px,2.6vw,30px);line-height:1.15;margin:22px 0 35px}.names{margin:0;color:#9c743a;display:grid;font:clamp(95px,15vw,190px)/.58 'Great Vibes';text-shadow:0 8px 20px rgba(154,116,58,.12)}.names span{clip-path:inset(0 100% 0 0);animation:write 2s cubic-bezier(.2,.7,.2,1) forwards}.names span:last-child{animation-delay:1.6s}.names i{font:clamp(42px,6vw,70px)/1 'Cormorant Garamond';font-style:italic;margin:14px 0;color:var(--ink);opacity:0;animation:fade .7s 1.2s forwards}.ornament{display:flex;align-items:center;gap:12px;margin:38px auto 28px;color:var(--gold)}.ornament b{height:1px;width:65px;background:var(--line)}.ornament span{font-size:14px}.date-display{font:500 13px 'Cinzel';letter-spacing:.16em;text-transform:uppercase}.scroll-cue{position:absolute;bottom:30px;width:20px;height:36px;border:1px solid var(--gold);border-radius:16px}.scroll-cue span{position:absolute;width:3px;height:7px;background:var(--gold);left:7px;top:7px;border-radius:2px;animation:scroll 1.6s infinite}.flower{position:absolute;color:rgba(183,147,84,.32);font-size:clamp(115px,18vw,220px);line-height:1;animation:sway 6s ease-in-out infinite}.flower-left{left:-4vw;top:11%}.flower-right{right:-5vw;bottom:8%;animation-delay:-3s}.verse{background:#1b1711;color:var(--ivory);min-height:66vh;display:grid;place-content:center}.verse blockquote{max-width:830px;margin:27px auto 25px;font-size:clamp(27px,4.2vw,52px);line-height:1.08;font-style:italic}.verse cite{color:var(--gold-light);font:500 11px 'Cinzel';letter-spacing:.24em}.details{background:linear-gradient(135deg,#f9f5ec,#eadcc5);display:grid;grid-template-columns:repeat(2,minmax(0,390px));justify-content:center;gap:26px}.detail-card{min-height:410px;padding:55px 34px 38px;background:rgba(255,253,248,.55);border:1px solid rgba(183,147,84,.38);box-shadow:0 20px 45px rgba(92,69,37,.08);backdrop-filter:blur(13px);display:flex;flex-direction:column;align-items:center}.card-number{font:11px 'Cinzel';letter-spacing:.2em;color:var(--gold)}.detail-card h3{font:clamp(29px,3vw,40px) 'Great Vibes';color:#8d6735;margin:14px 0}.gold-rule{width:42px;height:1px;background:var(--gold);margin:5px 0 25px}.detail-card p{font-size:21px;margin:4px}.detail-card strong{font:500 17px/1.5 'Cinzel';letter-spacing:.08em}.detail-card .time{font-size:29px;margin-top:25px;color:#8d6735}.map-link{margin-top:31px;padding:12px 16px;border:1px solid var(--gold);color:#74542a;text-decoration:none;font:10px 'Cinzel';letter-spacing:.12em;transition:.3s}.map-link:hover{background:#9d793f;color:#fff}.map-link span{font-size:15px;margin-left:5px}.countdown-section{background:var(--paper)}.countdown{display:flex;justify-content:center;align-items:center;gap:clamp(12px,3vw,42px);margin-top:46px}.countdown div{display:grid;gap:8px}.countdown strong{font:400 clamp(42px,7vw,90px)/.8 'Cinzel';color:#927041}.countdown span{font:10px 'Cinzel';text-transform:uppercase;letter-spacing:.17em;color:#6c604f}.countdown>i{height:35px;width:1px;background:var(--line)}.thank-you{min-height:75vh;display:grid;place-items:center;background:radial-gradient(ellipse at 50% 55%,#3b2b1c,#17120d 68%);color:var(--ivory)}.thank-you-inner{padding:60px min(10vw,120px);border:1px solid rgba(229,202,145,.35);background:rgba(255,255,255,.025);box-shadow:inset 0 0 50px rgba(229,202,145,.04);backdrop-filter:blur(8px)}.thank-you h2{font:clamp(74px,11vw,140px)/.9 'Great Vibes';font-weight:400;color:#e0bd7e;margin:23px 0}.thank-you p:not(.section-label){font-size:clamp(20px,2.7vw,29px);line-height:1.15}.closing-names{font:58px 'Great Vibes';color:#e0bd7e}.closing-names i{font:30px 'Cormorant Garamond';font-style:italic}.reveal{opacity:0;transform:translateY(24px);transition:opacity .9s ease,transform .9s ease}.reveal.shown{opacity:1;transform:none}@keyframes write{to{clip-path:inset(0 0 0 0)}}@keyframes fade{to{opacity:1}}@keyframes pulse{50%{opacity:.35}}@keyframes blink{50%{opacity:.25;transform:scaleX(.55)}}@keyframes orb{50%{transform:scale(1.08) rotate(15deg);opacity:.5}}@keyframes float{0%{transform:translateY(110vh) translateX(0);opacity:0}10%,85%{opacity:.8}100%{transform:translateY(-10vh) translateX(var(--drift));opacity:0}}@keyframes sway{50%{transform:rotate(12deg) translateY(-12px)}}@keyframes scroll{0%{opacity:0;transform:translateY(0)}35%{opacity:1}100%{opacity:0;transform:translateY(13px)}}@media(max-width:650px){.details{grid-template-columns:1fr;padding-left:20px;padding-right:20px}.detail-card{min-height:360px}.countdown{gap:10px}.countdown>i{height:24px}.section{padding-left:20px;padding-right:20px}.thank-you-inner{padding:55px 24px}.envelope-wrap{width:92vw;height:61vw}.seal{width:60px;height:60px}.intro h1{font-size:28vw}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}
