:root {
  --ink:#493134; --wine:#793f4b; --wine-dark:#542732; --rose:#b87882; --blush:#e8c9c8;
  --paper:#fffaf3; --cream:#f6ede4; --gold:#b79563; --sage:#79806d;
  --serif:"Cormorant Garamond",Georgia,serif; --script:"Great Vibes",cursive; --sans:"Manrope",sans-serif;
}
*{box-sizing:border-box} html{scroll-behavior:smooth} body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);overflow-x:hidden} body.locked{overflow:hidden}
button,input,textarea{font:inherit} button,a{-webkit-tap-highlight-color:transparent} a{color:inherit;text-decoration:none} fieldset{border:0;margin:0;padding:0}
.noise{position:fixed;inset:0;z-index:100;pointer-events:none;opacity:.16;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 160 160' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.92' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.12'/%3E%3C/svg%3E")}
.cursor-glow{position:fixed;z-index:1;width:380px;height:380px;border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgba(255,255,255,.34),transparent 68%);transform:translate3d(-50%,-50%,0);opacity:0;transition:opacity .4s}
.kicker{margin:0 0 14px;color:var(--rose);font-size:10px;font-weight:600;letter-spacing:.3em;text-transform:uppercase}

/* Cinematic opening */
.opening{position:fixed;inset:0;z-index:50;display:grid;place-items:center;align-content:center;gap:28px;overflow:hidden;background:radial-gradient(ellipse at 50% 38%,#fffefa 0,#f8f0e7 54%,#eadbd4 100%);perspective:1600px;isolation:isolate;transition:visibility 0s linear 2.2s}
.opening.is-gone{visibility:hidden}.opening-light{position:absolute;left:50%;top:40%;width:min(90vw,780px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.88),rgba(255,255,255,.12) 52%,transparent 72%);transform:translate(-50%,-50%);animation:lightBreathe 4s ease-in-out infinite}
.opening-flower{position:absolute;width:min(62vw,760px);aspect-ratio:.75;background:url("assets/wedding-watercolor.png") center/cover;opacity:.32;filter:saturate(.82);will-change:transform;-webkit-mask-image:radial-gradient(ellipse,#000 34%,transparent 72%);mask-image:radial-gradient(ellipse,#000 34%,transparent 72%)}
.flower-top{right:-20%;top:-38%;transform:rotate(180deg)}.flower-bottom{left:-22%;bottom:-40%}.opening-kicker{position:relative;z-index:3;margin-bottom:2px;color:var(--wine);font:400 clamp(25px,2.65vw,38px)/1.15 var(--script);letter-spacing:.025em;text-transform:none;text-align:center;text-shadow:0 1px 0 rgba(255,255,255,.9);transition:opacity .45s,transform .45s}.opening-kicker span{display:inline-block;margin:0 .12em;color:var(--gold);font-family:var(--serif);font-size:.72em;font-style:italic;transform:translateY(-.06em)}
.envelope-scene{position:relative;z-index:4;width:min(78vw,480px);aspect-ratio:1.48;transform-style:preserve-3d;will-change:transform}
.envelope{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;background:transparent;cursor:pointer;transform-style:preserve-3d;filter:drop-shadow(0 34px 28px rgba(83,45,48,.16));will-change:transform;transition:filter .8s}
.envelope:focus-visible{outline:2px solid var(--wine);outline-offset:14px}.envelope-shadow{position:absolute;left:10%;right:10%;bottom:-12%;height:18%;border-radius:50%;background:rgba(72,41,42,.13);filter:blur(18px);transform:translateZ(-30px);transition:opacity 1s}
.envelope-body{position:absolute;inset:0;border-radius:5px;background:linear-gradient(145deg,#eeddd0,#e6d0c1);box-shadow:inset 0 0 45px rgba(92,52,51,.08)}
.invitation-letter{position:absolute;z-index:2;left:7%;right:7%;bottom:5%;height:90%;display:flex;flex-direction:column;align-items:center;padding-top:12%;overflow:hidden;background:#fffdf8 url("assets/wedding-watercolor.png") 48% 44%/cover;box-shadow:0 5px 24px rgba(65,36,38,.13);transform:translate3d(0,3%,1px);transition:transform 1.35s cubic-bezier(.2,.86,.25,1) .58s,box-shadow 1s;will-change:transform}
.letter-border{position:absolute;inset:9px;border:1px solid rgba(183,149,99,.28)}.letter-star{color:var(--gold);font-size:12px}.letter-script{margin-top:9px;font:27px var(--script)}.letter-monogram{margin-top:3px;font:600 22px var(--serif);letter-spacing:.13em}.letter-monogram i{color:var(--rose);font:23px var(--script)}.letter-caption{margin-top:8px;font-size:7px;letter-spacing:.2em;text-transform:uppercase}
.flap{position:absolute;left:0;top:0;width:100%;height:58%;clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top center;backface-visibility:hidden;will-change:transform}.inside-flap{z-index:1;background:#d8c0b2;transform:rotateX(180deg)}.top-flap{z-index:7;background:linear-gradient(165deg,#f9eee6,#e4cdbf);transition:transform 1.05s cubic-bezier(.4,0,.2,1),z-index 0s linear .52s}
.envelope-side,.envelope-pocket{position:absolute;inset:0;z-index:4}.side-left{background:linear-gradient(31deg,#eddbce,#f9eee5);clip-path:polygon(0 0,53% 55%,0 100%)}.side-right{background:linear-gradient(-31deg,#e8d3c5,#f8ece2);clip-path:polygon(100% 0,47% 55%,100% 100%)}.envelope-pocket{background:linear-gradient(180deg,#f3e4d9,#ead4c6);clip-path:polygon(0 100%,50% 48%,100% 100%)}
.wax-seal{position:absolute;z-index:9;left:50%;top:51%;width:76px;height:76px;display:grid;place-items:center;border-radius:50%;color:#f2d3d4;background:radial-gradient(circle at 35% 27%,#c27a86,#934456 59%,#672b3a);box-shadow:0 7px 14px rgba(75,27,41,.25),inset 3px 3px 5px rgba(255,255,255,.28),inset -4px -5px 9px rgba(66,22,34,.35);transform:translate3d(-50%,-50%,12px);transition:opacity .35s .3s,transform .55s cubic-bezier(.3,.9,.2,1);will-change:transform,opacity;animation:sealPulse 2.8s ease-in-out infinite}.seal-ring{position:absolute;inset:8px;border:1px solid rgba(246,218,219,.52);border-radius:50%}.wax-seal b{font:500 19px var(--serif);letter-spacing:-.04em}
.open-instruction{position:relative;z-index:4;display:flex;flex-direction:column;align-items:center;gap:11px;color:#7d6261;font:italic 17px var(--serif);animation:promptBreath 2.2s ease-in-out infinite;transition:opacity .35s,transform .35s}.open-instruction i{width:1px;height:28px;background:var(--rose)}
.envelope.opening-now{filter:drop-shadow(0 45px 40px rgba(83,45,48,.1))}.envelope.opening-now .top-flap{z-index:0;transform:rotateX(180deg)}.envelope.opening-now .wax-seal{opacity:0;transform:translate3d(-50%,-50%,20px) scale(.35) rotate(22deg);animation:none}.envelope.opening-now .invitation-letter{transform:translate3d(0,-69%,25px);box-shadow:0 20px 38px rgba(65,36,38,.16)}.envelope.opening-now .envelope-shadow{opacity:.4}
.opening.releasing .envelope-scene{animation:none;transform:translate3d(0,26vh,0) scale(.74);opacity:0;transition:transform 1.1s cubic-bezier(.55,0,.9,.55),opacity .8s .25s}.opening.releasing .opening-kicker,.opening.releasing .open-instruction{opacity:0;transform:translateY(-10px)}
.heart-burst{position:absolute;inset:0;z-index:8;pointer-events:none}.burst-particle{position:absolute;left:50%;top:48%;color:var(--rose);font-family:var(--serif);opacity:0;will-change:transform,opacity;animation:burst var(--duration) cubic-bezier(.17,.75,.25,1) forwards}
.curtain{display:none}

/* Main journey */
.experience{position:relative;opacity:0;visibility:hidden;transition:opacity 1.1s ease .85s}.experience.visible{opacity:1;visibility:visible}.navigation{position:fixed;z-index:30;left:0;right:0;top:0;height:72px;display:flex;align-items:center;justify-content:space-between;padding:0 clamp(20px,5vw,74px);background:rgba(255,250,243,.77);border-bottom:1px solid rgba(121,63,75,.09);backdrop-filter:blur(16px);transform:translateY(-100%);transition:transform .75s ease 1.5s}.visible .navigation{transform:none}.nav-mark{font:600 23px var(--serif);letter-spacing:.1em}.nav-mark span{margin:0 5px;color:var(--rose);font-size:12px}.nav-center{display:flex;gap:clamp(24px,4vw,54px);font-size:9px;font-weight:600;letter-spacing:.2em;text-transform:uppercase}.nav-center a{position:relative}.nav-center a:after{content:"";position:absolute;left:0;right:100%;bottom:-7px;height:1px;background:var(--rose);transition:right .3s}.nav-center a:hover:after{right:0}.nav-actions{display:flex;align-items:center;gap:18px}.journey-progress{width:48px;height:1px;background:#ded0c8}.journey-progress i{display:block;width:0;height:100%;background:var(--wine)}.sound-button{width:34px;height:34px;border:1px solid rgba(121,63,75,.2);border-radius:50%;color:var(--wine);background:transparent;cursor:pointer}.sound-button svg{width:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round}
.welcome{position:relative;min-height:100svh;display:grid;place-items:center;padding:115px 24px 60px;overflow:hidden;text-align:center;background:#faf5ee url("assets/wedding-watercolor.png") center/cover no-repeat;isolation:isolate}.welcome:before{content:"";position:absolute;inset:0;z-index:-1;background:radial-gradient(circle at center,rgba(255,253,248,.15),rgba(250,245,238,.04))}.welcome-content{position:relative;z-index:3;width:min(960px,100%)}h1{margin:17px 0 20px;color:var(--wine);font:500 clamp(68px,10vw,138px)/.72 var(--script);text-shadow:0 2px rgba(255,255,255,.42)}h1 span{display:block}h1 b{display:block;margin:8px 0;color:var(--gold);font:400 clamp(34px,4vw,56px)/1 var(--serif)}.welcome-copy{margin:33px auto;color:#6f5957;font:italic clamp(18px,2vw,22px) var(--serif)}.date-emblem{display:flex;align-items:center;justify-content:center;gap:18px}.date-emblem>span{width:clamp(45px,7vw,92px);height:1px;background:var(--gold)}.date-emblem p{margin:0;font:500 15px var(--serif);letter-spacing:.17em}.date-emblem small{display:block;margin-bottom:5px;color:var(--rose);font:600 8px var(--sans);letter-spacing:.35em}.story-entry{display:inline-flex;flex-direction:column;align-items:center;gap:12px;margin-top:48px;font-size:8px;font-weight:600;letter-spacing:.27em;text-transform:uppercase}.story-entry i{position:relative;width:34px;height:34px;border:1px solid rgba(121,63,75,.35);border-radius:50%}.story-entry i b{position:absolute;left:50%;top:8px;width:1px;height:10px;background:var(--rose);animation:enterArrow 1.7s ease-in-out infinite}.parallax-layer{position:absolute;pointer-events:none;will-change:transform}.art-back,.art-front{display:none}.petal-field{position:absolute;inset:0;overflow:hidden;pointer-events:none}.petal{position:absolute;top:-30px;border-radius:80% 12% 80% 12%;background:rgba(184,120,130,.34);will-change:transform;animation:petalFall var(--fall) linear var(--delay) infinite}
.enter-reveal{opacity:0;transform:translateY(28px) scale(.98);transition:opacity 1.1s ease 1.45s,transform 1.3s cubic-bezier(.2,.75,.2,1) 1.45s}.visible .enter-reveal{opacity:1;transform:none}

/* Portal / threshold */
.threshold{height:260vh;background:linear-gradient(#fffaf3 0,#ead9d4 52%,#542732 100%)}.threshold-sticky{position:sticky;top:0;height:100svh;display:grid;place-items:center;overflow:hidden;perspective:1200px}.portal-halo{position:absolute;width:min(75vw,760px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.98),rgba(235,203,200,.32) 45%,transparent 69%);transform:scale(var(--portal-scale,.45));opacity:var(--portal-opacity,.35);will-change:transform,opacity}.portal-frame{position:absolute;width:min(56vw,520px);aspect-ratio:.72;transform-style:preserve-3d;transform:translate3d(0,var(--portal-y,26vh),0) rotateX(var(--portal-tilt,16deg)) scale(var(--portal-scale,.45));will-change:transform}.portal-card{position:absolute;inset:0;border:1px solid rgba(183,149,99,.35);background:#fffaf3 url("assets/wedding-watercolor.png") center/cover;box-shadow:0 28px 70px rgba(65,30,37,.16)}.card-one{transform:translate3d(-12%,5%,-90px) rotate(-7deg);opacity:.55}.card-two{transform:translate3d(11%,1%,-42px) rotate(6deg);opacity:.75}.card-three{display:grid;place-items:center;text-align:center}.card-three span{color:var(--wine);font:clamp(42px,6vw,75px)/.88 var(--script)}.threshold-copy{position:relative;z-index:3;text-align:center;opacity:var(--copy-opacity,0);transform:translateY(var(--copy-y,40px));will-change:transform,opacity}.threshold-copy h2{color:var(--wine)}.threshold-copy>p:last-child{margin-top:30px;color:#856c69;font:italic 15px var(--serif)}

/* Story chapters */
.story{position:relative;padding:clamp(100px,13vw,180px) clamp(24px,8vw,130px);overflow:hidden;background:#fffaf3}.story-heading{max-width:810px;margin:0 auto 140px;text-align:center}.story-heading h2{font-size:clamp(50px,7vw,92px)}h2{margin:0;font:500 clamp(46px,6vw,82px)/.94 var(--serif)}h2 em{color:var(--rose);font:400 1.05em var(--script)}.story-path{position:absolute;left:50%;top:400px;bottom:210px;width:1px;background:#e8d5cc}.story-path i{position:sticky;top:72px;display:block;width:1px;height:24vh;background:linear-gradient(var(--rose),transparent)}.story-chapter{position:relative;z-index:2;max-width:1120px;min-height:620px;margin:0 auto 150px;display:grid;grid-template-columns:1fr 1fr;gap:clamp(55px,9vw,130px);align-items:center}.chapter-right .chapter-visual{order:2}.chapter-visual{position:relative;aspect-ratio:1;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle,#fff 0,#f7e9e5 55%,rgba(247,233,229,0) 71%);will-change:transform}.chapter-number{position:absolute;left:4%;top:3%;color:#dfc1c0;font:italic 92px/1 var(--serif)}.chapter-symbol{position:relative;z-index:2;color:var(--gold);font:75px var(--serif)}.orbit{position:absolute;border:1px solid rgba(183,149,99,.25);border-radius:50%}.orbit-one{inset:17%;animation:orbitSpin 13s linear infinite}.orbit-one:before{content:"";position:absolute;left:6%;top:11%;width:9px;height:9px;border-radius:50%;background:var(--rose)}.orbit-two{inset:27%;border-style:dashed;animation:orbitSpin 18s linear infinite reverse}.intertwined{color:var(--wine);font:64px var(--script)}.intertwined span{margin:0 7px;color:var(--gold);font-family:var(--serif)}.ring-scene{position:relative;width:150px;height:150px;border:1px solid rgba(183,149,99,.36);border-radius:50%;transform:rotate(-14deg)}.ring-scene i{position:absolute;inset:16px;border:2px solid var(--gold);border-radius:50%;box-shadow:0 0 0 8px rgba(183,149,99,.05)}.ring-scene b{position:absolute;left:50%;top:-24px;color:var(--rose);font:48px var(--serif);transform:translateX(-50%) rotate(14deg)}.chapter-copy h3{margin:0 0 24px;font:500 clamp(38px,4.5vw,61px)/.98 var(--serif)}.chapter-copy>p:last-of-type{max-width:500px;color:#75605e;font:18px/1.8 var(--serif)}.story-signature{margin-top:28px;color:var(--wine);font:40px var(--script)}
.observe{opacity:0;transform:translateY(46px);transition:opacity 1s ease,transform 1s cubic-bezier(.2,.75,.25,1)}.observe.in-view{opacity:1;transform:none}.story-chapter.observe .chapter-visual{transform:scale(.86) rotate(-3deg);transition:transform 1.2s cubic-bezier(.2,.8,.2,1)}.story-chapter.observe.in-view .chapter-visual{transform:none}
.verse{padding:100px 24px;text-align:center;color:#fff8f1;background:var(--wine)}.verse-star{display:block;margin-bottom:25px;color:var(--blush)}.verse .arabic{margin:0 auto 16px;max-width:980px;font:clamp(24px,3vw,36px)/1.8 "Times New Roman",serif;direction:rtl}.verse p:last-child{margin:0;opacity:.7;font:italic 17px var(--serif)}

/* Day and venue */
.section{padding:clamp(100px,13vw,180px) clamp(24px,8vw,130px)}.celebration{text-align:center;background:linear-gradient(rgba(248,241,233,.94),rgba(248,241,233,.94)),url("assets/wedding-watercolor.png") center/cover}.section-heading{margin:0 auto 70px}.countdown{max-width:840px;margin:0 auto 90px;display:flex;align-items:center;justify-content:center;gap:clamp(14px,3vw,40px)}.countdown div{min-width:90px}.countdown strong{display:block;color:var(--wine);font:500 clamp(40px,5vw,70px)/1 var(--serif);font-variant-numeric:tabular-nums}.countdown span{font-size:8px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:#947879}.countdown i{width:4px;height:4px;border-radius:50%;background:var(--gold)}.day-cards{max-width:1120px;margin:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.day-card{min-height:340px;padding:48px 28px;display:flex;flex-direction:column;align-items:center;justify-content:center;border:1px solid rgba(183,149,99,.25);background:rgba(255,253,248,.84);box-shadow:0 18px 60px rgba(81,54,50,.05)}.center-card{color:#fffaf3;background:var(--wine);transform:translateY(-18px)}.center-card .kicker{color:var(--blush)}.line-icon{margin-bottom:28px;color:var(--gold);font:31px var(--serif)}.day-card h3{margin:2px 0 14px;font:500 29px/1.1 var(--serif)}.day-card>p:last-child{margin:0;max-width:230px;opacity:.7;font:16px/1.6 var(--serif)}.calendar-button{margin-top:54px;padding:16px 26px;border:1px solid var(--wine);color:var(--wine);background:transparent;font-size:9px;font-weight:600;letter-spacing:.19em;text-transform:uppercase;cursor:pointer;transition:color .25s,background .25s,transform .25s}.calendar-button:hover{color:#fff;background:var(--wine);transform:translateY(-3px)}.calendar-button span{margin-left:10px}
.venue{min-height:760px;display:grid;grid-template-columns:.8fr 1.2fr;background:#fffaf3}.venue-info{padding:clamp(80px,10vw,150px) clamp(32px,8vw,120px);display:flex;flex-direction:column;justify-content:center}.venue-info h2{margin-bottom:18px}.venue-address{color:var(--rose);font:italic 24px var(--serif)}.venue-note{max-width:460px;color:#75605e;font:17px/1.75 var(--serif)}.directions-button{align-self:flex-start;margin-top:20px;padding:15px 23px;color:#fff;background:var(--wine);font-size:9px;font-weight:600;letter-spacing:.17em;text-transform:uppercase}.directions-button span{margin-left:10px}.directions-button.disabled{pointer-events:none;opacity:.48}.map-wrap{position:relative;min-height:650px;overflow:hidden;background:#eadbd4}.map-wrap iframe{width:100%;height:100%;min-height:650px;border:0;filter:sepia(.18) saturate(.72) contrast(.92)}.map-placeholder{position:absolute;inset:0;display:grid;place-items:center;align-content:center;text-align:center;background:#e9ddd4;overflow:hidden}.map-grid{position:absolute;inset:-10%;opacity:.5;background-image:linear-gradient(28deg,transparent 48%,rgba(121,63,75,.14) 49%,rgba(121,63,75,.14) 51%,transparent 52%),linear-gradient(112deg,transparent 48%,rgba(255,255,255,.65) 49%,rgba(255,255,255,.65) 51%,transparent 52%);background-size:95px 120px,140px 95px;transform:rotate(7deg)}.map-pin{position:relative;z-index:2;width:64px;height:64px;display:grid;place-items:center;border-radius:50%;color:#fff;background:var(--wine);font:30px var(--serif);box-shadow:0 14px 35px rgba(84,39,50,.22)}.map-placeholder p{position:relative;z-index:2;color:var(--wine);font:31px/1 var(--script)}.map-stamp{position:absolute;right:25px;bottom:25px;width:88px;height:88px;display:grid;place-items:center;border-radius:50%;color:#f4d7d7;background:var(--wine);font:500 24px var(--serif);box-shadow:0 10px 30px rgba(70,34,40,.2)}.map-stamp span{font-family:var(--script)}

/* RSVP */
.rsvp{display:grid;grid-template-columns:.72fr 1.28fr;gap:clamp(55px,9vw,130px);align-items:start;background:#fffdf8}.rsvp-intro{position:sticky;top:135px}.rsvp-intro>p:last-child{max-width:410px;color:#796360;font:18px/1.7 var(--serif)}.rsvp-form{padding:clamp(35px,5vw,65px);border:1px solid rgba(183,149,99,.3);background:#fbf5ed;box-shadow:0 30px 90px rgba(81,54,50,.07)}.attendance-options legend{margin-bottom:15px;color:var(--rose);font-size:8px;font-weight:600;letter-spacing:.24em;text-transform:uppercase}.attendance-options{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:38px}.attendance-options input{position:absolute;opacity:0;pointer-events:none}.attendance-options span{min-height:92px;padding:15px 8px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;border:1px solid #ddcec5;color:#745e5c;background:rgba(255,255,255,.45);font:15px var(--serif);cursor:pointer;transition:border-color .2s,color .2s,background .2s,transform .2s}.attendance-options b{font:22px var(--serif)}.attendance-options input:checked+span{border-color:var(--wine);color:#fff;background:var(--wine);transform:translateY(-3px)}.attendance-options input:focus-visible+span{outline:2px solid var(--gold);outline-offset:2px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:26px 24px}.field.full{grid-column:1/-1}.field>span{display:block;margin-bottom:7px;color:var(--rose);font-size:8px;font-weight:600;letter-spacing:.22em;text-transform:uppercase}.field input,.field textarea{width:100%;padding:13px 1px;border:0;border-bottom:1px solid #d6c6bd;outline:0;color:var(--ink);background:transparent;resize:vertical;font:18px var(--serif);transition:border-color .2s}.field input:focus,.field textarea:focus{border-color:var(--wine)}.submit-button{width:100%;margin-top:34px;padding:17px 25px;display:flex;align-items:center;justify-content:center;gap:12px;border:0;color:#fff;background:var(--wine);cursor:pointer;font-size:9px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;transition:transform .25s,background .25s}.submit-button:hover{transform:translateY(-3px);background:var(--wine-dark)}.submit-button:disabled{cursor:wait;opacity:.65}.submit-button i{color:var(--blush);font:18px var(--serif)}.form-note{margin:15px 0 0;text-align:center;color:#9a8381;font:italic 13px var(--serif)}.form-success{display:none;margin-top:25px;padding:25px;text-align:center;color:var(--wine);background:#f1e3df;font:25px var(--script)}.form-success.show{display:block}.rsvp-form.submitted .form-grid,.rsvp-form.submitted .attendance-options,.rsvp-form.submitted .submit-button,.rsvp-form.submitted .form-note{display:none}
footer{position:relative;min-height:510px;padding:120px 24px;display:grid;place-items:center;align-content:center;overflow:hidden;text-align:center;color:#fffaf3;background:var(--wine)}.footer-floral{position:absolute;inset:-35%;opacity:.13;background:url("assets/wedding-watercolor.png") center/cover;mix-blend-mode:screen;transform:rotate(180deg)}footer .kicker{position:relative;color:var(--blush)}footer h2{position:relative;margin:13px 0;font:clamp(50px,7vw,88px) var(--script)}footer h2 span{margin:0 10px;color:var(--blush);font-family:var(--serif)}.footer-date{position:relative;font:14px var(--serif);letter-spacing:.26em}.made-with{position:absolute;bottom:35px;margin:0;opacity:.55;font:italic 14px var(--serif)}.made-with span{color:var(--blush)}

@keyframes lightBreathe{50%{transform:translate(-50%,-50%) scale(1.06);opacity:.72}}@keyframes sealPulse{50%{box-shadow:0 9px 19px rgba(75,27,41,.31),0 0 0 7px rgba(184,120,130,.07),inset 3px 3px 5px rgba(255,255,255,.28),inset -4px -5px 9px rgba(66,22,34,.35)}}@keyframes promptBreath{50%{opacity:.54;transform:translateY(4px)}}@keyframes burst{0%{opacity:0;transform:translate3d(-50%,-50%,0) scale(.2) rotate(0)}15%{opacity:1}100%{opacity:0;transform:translate3d(calc(-50% + var(--x)),calc(-50% + var(--y)),0) scale(var(--scale)) rotate(var(--rotate))}}@keyframes enterArrow{0%{opacity:0;transform:translate(-50%,-4px)}35%{opacity:1}100%{opacity:0;transform:translate(-50%,13px)}}@keyframes petalFall{to{transform:translate3d(var(--drift),110vh,0) rotate(540deg)}}@keyframes orbitSpin{to{transform:rotate(360deg)}}

.card-three span{opacity:var(--card-copy-opacity,1);transition:opacity .12s linear}

@media(max-width:760px){
  .cursor-glow{display:none}.opening-flower{width:105vw}.flower-top{right:-42%;top:-29%}.flower-bottom{left:-45%;bottom:-33%}.opening-kicker{width:min(92vw,520px);font-size:clamp(22px,7vw,30px);line-height:1.18}.envelope-scene{width:min(86vw,420px)}.wax-seal{width:66px;height:66px}.letter-script{font-size:23px}
  .navigation{height:64px}.nav-center{display:none}.journey-progress{width:34px}.welcome{background-position:53% center;padding-top:96px}h1{font-size:clamp(61px,19vw,91px)}.welcome-copy{max-width:310px}.story-entry{margin-top:40px}
  .threshold{height:220vh}.portal-frame{width:76vw}.threshold-copy h2{font-size:45px}.story{padding-top:100px}.story-heading{margin-bottom:95px}.story-path{left:28px;top:340px;bottom:140px}.story-chapter{min-height:0;margin-bottom:115px;grid-template-columns:1fr;gap:20px;padding-left:22px}.chapter-right .chapter-visual{order:0}.chapter-visual{width:min(80vw,340px);justify-self:center}.chapter-number{font-size:68px}.chapter-copy{padding:0 8px}.chapter-copy h3{font-size:42px}.chapter-copy>p:last-of-type{font-size:17px}
  .verse{padding:80px 24px}.countdown{gap:8px;margin-bottom:65px}.countdown div{min-width:58px}.countdown strong{font-size:39px}.countdown i{width:3px;height:3px}.day-cards{grid-template-columns:1fr}.center-card{transform:none}.day-card{min-height:285px}.venue{grid-template-columns:1fr}.venue-info{padding:100px 25px}.map-wrap,.map-wrap iframe{min-height:520px}.rsvp{grid-template-columns:1fr}.rsvp-intro{position:relative;top:auto}.rsvp-form{padding:35px 20px}.attendance-options{grid-template-columns:1fr}.attendance-options span{min-height:70px;flex-direction:row}.form-grid{grid-template-columns:1fr}.field.full{grid-column:auto}footer{min-height:460px}
}
@media(max-width:390px){.date-emblem{gap:10px}.date-emblem>span{width:34px}.countdown span{font-size:7px}.countdown div{min-width:52px}.section{padding-left:18px;padding-right:18px}.rsvp-form{padding-left:15px;padding-right:15px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.threshold{height:100vh}.threshold-copy{opacity:1!important;transform:none!important}.portal-frame{transform:scale(.8)!important}.observe{opacity:1;transform:none}.story-chapter.observe .chapter-visual{transform:none}}

/* Royal envelope edition */
.envelope-body{
  background:
    linear-gradient(rgba(255,253,247,.08),rgba(232,206,184,.11)),
    url("assets/royal-envelope-ornament.webp") center/100% 100% no-repeat;
  box-shadow:inset 0 0 0 1px rgba(183,149,99,.48),inset 0 0 38px rgba(92,52,51,.08),0 2px 0 rgba(255,255,255,.72)
}
.gilded-rim{position:absolute;z-index:1;inset:-4px;border:1px solid rgba(185,142,74,.8);border-radius:7px;box-shadow:inset 0 0 0 2px rgba(255,250,226,.7),0 0 0 1px rgba(114,76,37,.14);overflow:hidden;pointer-events:none}
.gilded-rim:after{content:"";position:absolute;inset:-80% auto -80% -28%;width:13%;background:linear-gradient(90deg,transparent,rgba(255,245,195,.78),transparent);transform:translate3d(-220%,0,0) rotate(18deg);animation:gildedSweep 4.8s ease-in-out infinite 1.1s;will-change:transform}
.invitation-letter{padding-top:11%;background:
  linear-gradient(rgba(255,253,248,.88),rgba(255,253,248,.88)),
  url("assets/wedding-watercolor.png") 48% 44%/cover;
  box-shadow:0 6px 28px rgba(65,36,38,.15),inset 0 0 35px rgba(183,149,99,.06)
}
.letter-border{inset:8px;border:1px solid rgba(183,149,99,.62);box-shadow:inset 0 0 0 3px rgba(255,253,248,.85),inset 0 0 0 4px rgba(183,149,99,.18)}
.letter-crown{position:relative;z-index:2;color:var(--gold);font:19px var(--serif);text-shadow:0 1px #fff}.letter-corner{position:absolute;z-index:2;top:13px;color:rgba(183,149,99,.67);font:17px var(--serif)}.corner-tl{left:16px}.corner-tr{right:16px;transform:scaleX(-1)}
.letter-script{margin-top:4px;font-size:29px}.letter-caption{color:#8c716b}
.inside-flap{background-color:#6c3040;background-image:radial-gradient(circle at center,rgba(214,178,112,.22) 0 1px,transparent 1.5px),linear-gradient(45deg,transparent 47%,rgba(222,190,131,.08) 48% 52%,transparent 53%);background-size:18px 18px,30px 30px;box-shadow:inset 0 -10px 22px rgba(42,14,25,.18)}
.top-flap{background:
  linear-gradient(rgba(255,253,248,.02),rgba(221,190,164,.08)),
  url("assets/royal-envelope-ornament.webp") center/100% 172% no-repeat;
  filter:drop-shadow(0 1px 0 rgba(183,149,99,.58));box-shadow:inset 0 2px rgba(255,255,255,.56)
}
.side-left,.side-right,.envelope-pocket{background-image:linear-gradient(rgba(255,253,248,.05),rgba(225,195,172,.1)),url("assets/royal-envelope-ornament.webp");background-position:center;background-size:100% 100%;background-repeat:no-repeat}
.side-left{filter:drop-shadow(1px 0 rgba(183,149,99,.28))}.side-right{filter:drop-shadow(-1px 0 rgba(183,149,99,.25))}.envelope-pocket{filter:drop-shadow(0 -1px rgba(183,149,99,.38));box-shadow:inset 0 -12px 26px rgba(103,56,52,.04)}
.envelope-flourish{position:absolute;z-index:6;bottom:8%;color:rgba(153,112,57,.52);font:30px var(--serif);pointer-events:none;transition:opacity .35s,transform .8s}.flourish-left{left:12%;transform:rotate(-18deg)}.flourish-right{right:12%;transform:scaleX(-1) rotate(-18deg)}
.seal-aura{position:absolute;z-index:8;left:50%;top:51%;width:106px;height:106px;border-radius:50%;background:radial-gradient(circle,rgba(255,230,172,.32),rgba(183,149,99,.07) 53%,transparent 70%);box-shadow:0 0 0 1px rgba(183,149,99,.18);transform:translate3d(-50%,-50%,9px) scale(.95);animation:royalAura 2.9s ease-in-out infinite;transition:opacity .32s,transform .55s cubic-bezier(.3,.9,.2,1);will-change:transform,opacity}
.wax-seal{width:142px;height:142px;padding:0;border-radius:50%;background:none;box-shadow:none;animation:none;filter:drop-shadow(0 10px 9px rgba(61,19,30,.3));transform:translate3d(-50%,-50%,14px);overflow:visible}
.wax-seal img{display:block;width:100%;height:100%;object-fit:contain;pointer-events:none;user-select:none}
.envelope.opening-now .seal-aura{opacity:0;transform:translate3d(-50%,-50%,20px) scale(.35)}.envelope.opening-now .envelope-flourish{opacity:0;transform:translateY(12px) scale(.8)}
.envelope.opening-now .wax-seal{filter:drop-shadow(0 5px 5px rgba(61,19,30,.12))}
@keyframes royalAura{50%{opacity:.64;transform:translate3d(-50%,-50%,9px) scale(1.14)}}
@keyframes gildedSweep{0%,62%{transform:translate3d(-220%,0,0) rotate(18deg)}82%,100%{transform:translate3d(980%,0,0) rotate(18deg)}}
@media(max-width:760px){.wax-seal{width:124px;height:124px}.seal-aura{width:92px;height:92px}.letter-crown{font-size:16px}.letter-script{font-size:25px}.envelope-flourish{font-size:24px}}

/* User-controlled invitation reveal */
.envelope-monogram{position:absolute;z-index:6;left:50%;bottom:-13%;width:152px;height:152px;opacity:.3;transform:translate3d(-50%,0,7px);filter:sepia(.2) drop-shadow(0 1px rgba(255,255,255,.5));mix-blend-mode:multiply;pointer-events:none;transition:opacity .45s,transform .8s cubic-bezier(.2,.8,.2,1)}
.envelope-monogram img{display:block;width:100%;height:100%;object-fit:contain}
.wax-seal{animation:royalSealIdle 3.6s ease-in-out infinite;transform-origin:center;will-change:transform,filter}
.envelope:not(.opening-now):hover .wax-seal{animation:royalSealHover .95s ease-in-out infinite alternate;filter:drop-shadow(0 14px 12px rgba(61,19,30,.34)) brightness(1.04)}
.envelope:not(.opening-now):hover .seal-aura{animation-duration:1.35s}
.envelope.opening-now .envelope-monogram{opacity:.12;transform:translate3d(-50%,12px,7px) scale(.92)}
.opening.awaiting-scroll .open-instruction{animation:scrollInvitation 1.8s ease-in-out infinite;color:var(--wine)}
.opening.awaiting-scroll .open-instruction i{height:38px;background:linear-gradient(var(--gold),transparent)}
.opening.releasing{opacity:0;transition:opacity 1.15s ease .15s}
@keyframes royalSealIdle{0%,100%{transform:translate3d(-50%,-50%,14px) scale(1) rotate(-.7deg)}50%{transform:translate3d(-50%,-51.5%,14px) scale(1.035) rotate(.7deg)}}
@keyframes royalSealHover{0%{transform:translate3d(-50%,-50.5%,18px) scale(1.06) rotate(-1.4deg)}100%{transform:translate3d(-50%,-52%,18px) scale(1.1) rotate(1.4deg)}}
@keyframes scrollInvitation{50%{opacity:.58;transform:translateY(6px)}}
@media(max-width:760px){.envelope-monogram{width:130px;height:130px;bottom:-12%}}

/* Animated couture invitation card */
.invitation-letter{
  padding-top:18%;
  isolation:isolate;
  background:#fffaf2;
  border-radius:2px;
  box-shadow:0 8px 30px rgba(65,36,38,.17),0 0 0 1px rgba(183,149,99,.24)
}
.invitation-letter:before{
  content:"";position:absolute;z-index:-2;inset:-1.5%;
  background:url("assets/royal-invitation-card-v2.webp") center/100% 100% no-repeat;
  transform:scale(1.015);animation:cardArtworkBreathe 5.8s ease-in-out infinite;
  will-change:transform,filter
}
.invitation-letter:after{
  content:"";position:absolute;z-index:-1;top:-25%;bottom:-25%;left:-42%;width:23%;opacity:0;
  background:linear-gradient(90deg,transparent,rgba(255,249,218,.58),rgba(255,255,255,.74),transparent);
  filter:blur(4px);transform:rotate(15deg);animation:cardFoilShimmer 5.6s ease-in-out 2.1s infinite;pointer-events:none
}
.invitation-letter>span{position:relative;z-index:2}.invitation-letter .letter-border,.letter-corner,.letter-crown{display:none}
.letter-script{margin-top:0;color:#53363a;font-size:clamp(25px,3.1vw,34px);text-shadow:0 1px rgba(255,255,255,.95)}
.letter-monogram{margin-top:2px;color:#5b3d40;font-size:clamp(21px,2.5vw,28px)}.letter-monogram i{color:#b46f7c}
.letter-caption{margin-top:5px;color:#90716e;font-size:clamp(6px,.72vw,8px)}
.letter-date{margin-top:13px;color:#8a6543;font:600 clamp(8px,.95vw,11px) var(--serif);letter-spacing:.19em}
.letter-time{margin-top:3px;color:#a4747b;font:italic clamp(9px,1.1vw,12px) var(--serif);letter-spacing:.08em}
.envelope.opening-now .invitation-letter{animation:invitationCardFloat 4.2s ease-in-out 1.9s infinite}
.envelope.opening-now:hover .invitation-letter{animation-duration:3.1s}
@keyframes cardArtworkBreathe{0%,100%{transform:scale(1.015);filter:saturate(.96) brightness(1)}50%{transform:scale(1.035);filter:saturate(1.04) brightness(1.025)}}
@keyframes cardFoilShimmer{0%,48%{left:-42%;opacity:0}55%{opacity:.42}72%{left:122%;opacity:.16}73%,100%{left:122%;opacity:0}}
@keyframes invitationCardFloat{0%,100%{transform:translate3d(0,-69%,25px) rotateX(0deg)}50%{transform:translate3d(0,-72%,31px) rotateX(.8deg)}}
@media(max-width:760px){.invitation-letter{padding-top:17%}.letter-date{margin-top:9px}.letter-script{font-size:25px}.letter-monogram{font-size:21px}.letter-caption{font-size:6px}}

/* Royal paper construction lines — keeps the ornamental surface readable as an envelope */
.envelope-seams{position:absolute;z-index:7;inset:0;overflow:hidden;border-radius:5px;pointer-events:none;transform:translateZ(9px)}
.envelope-seams svg{display:block;width:100%;height:100%;overflow:visible}
.envelope-seams path{fill:none;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round}
.seam-shadow{stroke:rgba(91,54,47,.24);stroke-width:3.2;filter:blur(.45px)}
.seam-gold{stroke:rgba(172,125,63,.76);stroke-width:1.25}
.seam-light{stroke:rgba(255,252,232,.9);stroke-width:.7;transform:translateY(-.75px);stroke-dasharray:105 920;animation:seamLightTravel 5s ease-in-out infinite}
.side-left,.side-right,.envelope-pocket{filter:drop-shadow(0 -1px 0 rgba(255,251,230,.82)) drop-shadow(0 1.5px 1px rgba(91,54,47,.16))}
.top-flap{filter:drop-shadow(0 2px 1px rgba(91,54,47,.2)) drop-shadow(0 -1px 0 rgba(255,251,230,.9))}
.envelope:not(.opening-now):hover .seam-gold{stroke:rgba(184,132,57,.94)}
.envelope:not(.opening-now):hover .seam-light{animation-duration:2.4s}
@keyframes seamLightTravel{0%,25%{stroke-dashoffset:1080;opacity:0}38%{opacity:1}72%{stroke-dashoffset:0;opacity:.72}73%,100%{stroke-dashoffset:0;opacity:0}}

/* Keep the fully raised invitation inside shorter desktop viewports */
@media(min-width:761px) and (max-height:850px){
  .opening.awaiting-scroll .envelope-scene{
    transform:translate3d(0,clamp(54px,8vh,72px),0) scale(.92);
    transition:transform 1s cubic-bezier(.2,.8,.2,1)
  }
  .opening.awaiting-scroll .open-instruction{top:clamp(54px,8vh,72px)}
}

/* Generated physical envelope states */
.envelope-body{background:#f4eadc;box-shadow:inset 0 0 30px rgba(86,57,43,.08)}
.envelope-open-art{position:absolute;inset:0;border-radius:5px;background:url("assets/royal-envelope-open-burgundy-v3.webp") center/100% 100% no-repeat;pointer-events:none}
.envelope-open-back{z-index:1;transform:translateZ(1px)}
.envelope-open-front{z-index:4;clip-path:polygon(0 37%,8% 37%,50% 79%,92% 37%,100% 37%,100% 100%,0 100%);transform:translateZ(7px);filter:drop-shadow(0 -2px 2px rgba(77,54,42,.14))}
.envelope-closed-cover{position:absolute;z-index:6;inset:0;border-radius:5px;background:url("assets/royal-envelope-closed-burgundy-v3.webp") center/100% 100% no-repeat;transform:translateZ(8px);opacity:1;pointer-events:none;transition:opacity .32s ease,transform .55s ease}
.flap{height:80%;clip-path:polygon(0 0,100% 0,50% 100%)}
.inside-flap{display:none}
.top-flap{z-index:7;background:url("assets/royal-envelope-closed-burgundy-v3.webp") center top/100% 125% no-repeat;filter:drop-shadow(0 5px 4px rgba(35,10,18,.34));box-shadow:none}
.envelope-side,.envelope-pocket,.envelope-seams,.gilded-rim,.envelope-monogram{display:none}
.envelope:not(.opening-now):hover .top-flap{filter:drop-shadow(0 7px 6px rgba(73,49,38,.24)) brightness(1.015)}
.invitation-letter{opacity:0}
.envelope.opening-now .envelope-closed-cover{opacity:0;transform:translateZ(8px) scale(.985)}
.envelope.opening-now .invitation-letter{opacity:1}
.seal-aura,.wax-seal{top:69%}
.wax-seal{filter:drop-shadow(0 12px 10px rgba(35,10,18,.38))}

/* Lightweight floral artwork used across the invitation. */
.opening-flower,.invitation-letter,.welcome,.portal-card,.footer-floral{background-image:url("assets/wedding-watercolor-v2.webp")}
.celebration{background-image:linear-gradient(rgba(248,241,233,.94),rgba(248,241,233,.94)),url("assets/wedding-watercolor-v2.webp")}
.opening:not(.secondary-assets-ready) .envelope-open-art,.opening:not(.secondary-assets-ready) .invitation-letter,.opening:not(.secondary-assets-ready) .invitation-letter:before{background-image:none}
