/* ============================================================
   DIGITAL INVITES V8 — DIRECTOR'S CUT / CONTINUOUS STORY ARCHITECTURE
   One sticky stage per chapter group; shared objects morph across beats.
   ============================================================ */
.sequence{position:relative;background:var(--ivory)}
.sequence-stage{position:sticky;top:0;height:100svh;overflow:hidden;isolation:isolate}
.scene-layer{position:absolute;inset:0}
.anchor-marker{position:absolute;left:0;top:var(--anchor);width:1px;height:1px;pointer-events:none}
.float-copy{position:absolute;z-index:7;font:400 clamp(5rem,14vw,14rem)/.8 var(--serif);letter-spacing:-.06em;white-space:nowrap;pointer-events:none;opacity:.055;color:#fff}

/* ---------- opening ---------- */
.opening-sequence{height:470vh;background:#11110f}
.opening-stage{background:#11110f;color:#fff}
.opening-photo{z-index:0;transform:scale(calc(1.025 + var(--open-p,0)*.045));will-change:transform}
.opening-photo img{width:100%;height:100%;object-fit:cover;object-position:center 42%;filter:saturate(.7) contrast(1.02);transform:scale(1.035)}
.opening-vignette{position:absolute;inset:0;background:linear-gradient(180deg,rgba(9,9,8,.28),rgba(9,9,8,.22) 42%,rgba(9,9,8,.6)),linear-gradient(90deg,rgba(8,8,7,.44),transparent 28%,transparent 72%,rgba(8,8,7,.3))}
.opening-light{position:absolute;inset:-10%;background:radial-gradient(circle at calc(64% + var(--open-p,0)*4%) calc(25% + var(--open-p,0)*8%),rgba(255,239,210,.23),transparent 34%);mix-blend-mode:screen}
.hero-editorial{z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:10vh 7vw 8vh;opacity:var(--hero-o,1);transform:translate3d(0,var(--hero-y,0px),0);will-change:transform,opacity}
.hero-overline{font-size:.58rem;letter-spacing:.34em;text-transform:uppercase;margin-bottom:clamp(24px,4vh,52px);opacity:.8}
.hero-names{display:flex;align-items:center;justify-content:center;gap:clamp(12px,2vw,30px);width:100%;font:500 clamp(5.6rem,13.4vw,13rem)/.72 var(--serif);letter-spacing:-.055em;text-shadow:0 3px 30px rgba(0,0,0,.2)}
.hero-name{display:inline-block;will-change:transform,opacity}.hero-bride{transform:translate3d(var(--bride-x,0px),0,0);opacity:var(--name-o,1)}.hero-groom{transform:translate3d(var(--groom-x,0px),0,0);opacity:var(--name-o,1)}.hero-names em{font-weight:400;font-size:.42em;opacity:var(--amp-o,1);transform:rotate(var(--amp-r,0deg)) scale(var(--amp-s,1));display:inline-block}
.hero-editorial>p{max-width:630px;margin:clamp(24px,4vh,42px) auto 24px;font:400 clamp(1.15rem,1.55vw,1.48rem)/1.6 var(--serif);font-style:italic;opacity:var(--hero-copy-o,.82)}
.hero-details{display:flex;align-items:center;gap:1rem;font-size:.54rem;letter-spacing:.22em;text-transform:uppercase;opacity:var(--hero-copy-o,.82)}.hero-details i{width:26px;height:1px;background:rgba(255,255,255,.55)}
.hero-side{position:absolute;top:50%;font-size:.46rem;letter-spacing:.27em;opacity:.56;text-transform:uppercase;writing-mode:vertical-rl}.hero-side-a{left:24px;transform:translateY(-50%) rotate(180deg)}.hero-side-b{right:24px;transform:translateY(-50%)}
.scroll-cue{position:absolute;z-index:8;left:50%;bottom:24px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:9px;font-size:.47rem;letter-spacing:.24em;text-transform:uppercase;opacity:var(--scroll-o,.65)}.scroll-cue i{width:1px;height:42px;background:linear-gradient(#fff,transparent)}

.invitation-object{z-index:4;display:grid;place-items:center;pointer-events:none;opacity:var(--invite-o,0);transform:translate3d(0,var(--invite-y,20vh),0) scale(var(--invite-s,.62));will-change:transform,opacity}
.invite-paper{position:relative;width:min(760px,76vw);min-height:min(76vh,700px);background:var(--paper);color:var(--ink);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:clamp(46px,7vw,88px);box-shadow:0 25px 80px rgba(0,0,0,.24);overflow:hidden}
.invite-paper::before{content:"";position:absolute;inset:18px;border:1px solid rgba(127,102,69,.23);pointer-events:none}.invite-paper::after{content:"";position:absolute;inset:0;background:linear-gradient(115deg,transparent 28%,rgba(255,255,255,.72) 46%,transparent 62%);transform:translateX(var(--foil-x,-120%));opacity:.5;pointer-events:none}
.invite-foil{font:500 clamp(1.3rem,2vw,1.85rem) var(--serif);letter-spacing:.12em;color:#977a51}.invite-rule{width:56px;height:1px;background:#b49b76;margin:18px 0 34px}.invite-paper small{font-size:.53rem;letter-spacing:.3em;color:#756c63}.invite-paper h2{font:500 clamp(3.6rem,7.2vw,7rem)/.86 var(--serif);letter-spacing:-.04em;margin:28px 0 24px}.invite-paper p{max-width:560px;font:400 clamp(1rem,1.25vw,1.22rem)/1.75 var(--serif);color:#675f57}.invite-paper strong{font:400 clamp(2rem,3.2vw,3.2rem)/1 var(--serif);font-style:italic;margin-top:25px}.invite-date{font-size:.5rem;letter-spacing:.25em;margin-top:26px;color:#766b60}.invite-shadow{position:absolute;width:min(720px,70vw);height:80px;background:rgba(0,0,0,.28);filter:blur(28px);bottom:8vh;border-radius:50%;z-index:-1;transform:scaleX(var(--shadow-s,.8));opacity:var(--shadow-o,.3)}

.date-object{z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#302d29;background:var(--ivory);opacity:var(--date-o,0);transform:scale(var(--date-s,.86));will-change:transform,opacity}
.date-object::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 50% 44%,rgba(201,176,131,.23),transparent 30%),linear-gradient(180deg,#f8f4ed,#eee7dc);z-index:-1}
.date-kicker{font-size:.55rem;letter-spacing:.4em;color:#7b6e60;margin-bottom:-.35rem}.date-number{font:500 clamp(12rem,30vw,31rem)/.7 var(--serif);letter-spacing:-.08em;color:#2f2b27;transform:translateY(var(--date-n-y,0px));will-change:transform}.date-month{display:flex;align-items:center;gap:1rem;font-size:.64rem;letter-spacing:.32em;margin-top:2vh}.date-month i{width:54px;height:1px;background:#a68e69}
.countdown-inline{display:flex;gap:clamp(22px,5vw,68px);margin-top:clamp(28px,5vh,58px);opacity:var(--count-o,0);transform:translateY(var(--count-y,22px));will-change:opacity,transform}.countdown-inline div{min-width:70px;text-align:center}.countdown-inline strong{display:block;font:500 clamp(2rem,4vw,4.5rem)/1 var(--serif);letter-spacing:-.04em}.countdown-inline span{display:block;margin-top:.45rem;font-size:.48rem;letter-spacing:.24em;text-transform:uppercase;color:#81756a}
.opening-continuity{position:absolute;z-index:8;left:50%;bottom:0;height:22vh;display:flex;flex-direction:column;align-items:center;gap:9px;color:#5c554e;opacity:var(--line-o,0);transform:translateX(-50%)}.opening-continuity i{width:1px;flex:1;background:linear-gradient(#b19770,#b19770 68%,transparent)}.opening-continuity span{font-size:.45rem;letter-spacing:.28em;text-transform:uppercase;padding-bottom:18px}.float-opening-a{left:-2vw;top:16vh;transform:translate3d(var(--foa-x,0px),0,0)}.float-opening-b{right:-3vw;bottom:9vh;transform:translate3d(var(--fob-x,0px),0,0)}

/* ---------- relationship story ---------- */
.story-sequence{height:630vh;background:#151513}
.story-stage{background:#151513;color:#fff}
.story-media{position:absolute;inset:0;background-size:cover;background-position:center;transform:scale(var(--story-media-s,1.04));will-change:transform,opacity;transition:background-image .01s linear}.story-media::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(11,11,10,.79) 0 34%,rgba(11,11,10,.26) 62%,rgba(11,11,10,.55)),linear-gradient(180deg,rgba(11,11,10,.15),rgba(11,11,10,.48))}.story-shade{position:absolute;inset:0;background:#151513;opacity:var(--story-fade,0);z-index:1}
.story-rail{position:absolute;z-index:4;left:clamp(24px,5vw,76px);top:12vh;bottom:10vh;width:72px;display:flex;flex-direction:column;align-items:center;gap:15px;opacity:var(--story-ui-o,1);transition:opacity .2s linear}.story-rail>span{font-size:.45rem;letter-spacing:.22em;writing-mode:vertical-rl;transform:rotate(180deg);opacity:.66}.story-line{position:relative;flex:1;width:1px;background:rgba(255,255,255,.2);overflow:hidden}.story-line b{position:absolute;inset:0;background:#d2b98d;transform-origin:top;transform:scaleY(var(--story-line-p,0));will-change:transform}.story-rail strong{font-size:.46rem;letter-spacing:.14em;font-weight:400}
.story-copy{position:absolute;z-index:4;left:clamp(120px,13vw,210px);bottom:12vh;width:min(640px,50vw);will-change:transform,opacity;transform:translate3d(0,var(--story-copy-y,0px),0);opacity:var(--story-copy-o,1)}.story-year{font:500 clamp(7rem,12vw,13rem)/.72 var(--serif);letter-spacing:-.07em;color:rgba(255,255,255,.15);display:block;margin-left:-.04em}.story-copy small{display:block;font-size:.52rem;letter-spacing:.31em;color:#d6bd93;margin:1rem 0 1.25rem}.story-copy h2{font:500 clamp(3rem,5.3vw,6.4rem)/.86 var(--serif);letter-spacing:-.045em;margin:0;max-width:720px}.story-copy p{max-width:520px;margin:1.6rem 0 0;font:400 clamp(1rem,1.25vw,1.22rem)/1.75 var(--serif);color:rgba(255,255,255,.72)}
.story-index{position:absolute;z-index:4;right:clamp(24px,5vw,78px);top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:12px;opacity:var(--story-ui-o,1);transition:opacity .2s linear}.story-index i{width:28px;height:1px;background:rgba(255,255,255,.28);transition:width .35s var(--ease),background .35s ease}.story-index i.active{width:56px;background:#d3bb91}
.proposal-scene{position:absolute;z-index:5;inset:0;display:grid;place-items:center;pointer-events:none;opacity:var(--proposal-o,0);transform:translate3d(18vw,var(--proposal-y,18px),0) scale(var(--proposal-s,.88));will-change:transform,opacity}.proposal-halo{position:absolute;width:min(52vw,700px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,rgba(215,187,137,.22),transparent 66%)}
.ring-box{position:relative;width:260px;height:190px;perspective:900px;transform:rotate(var(--box-r,-5deg))}.ring-box-base{position:absolute;left:0;right:0;bottom:0;height:112px;border-radius:22px 22px 29px 29px;background:linear-gradient(145deg,#35302b,#1e1c19);box-shadow:0 25px 50px rgba(0,0,0,.45),inset 0 0 0 2px rgba(255,255,255,.04)}.ring-box-base::before{content:"";position:absolute;inset:12px;border-radius:15px;background:radial-gradient(circle at 50% 20%,#807266,#4f4942 58%,#3a3530);box-shadow:inset 0 8px 22px rgba(0,0,0,.34)}.ring-box-lid{position:absolute;left:0;right:0;bottom:93px;height:105px;border-radius:28px 28px 18px 18px;background:linear-gradient(145deg,#3b3530,#201d1a);transform-origin:bottom center;transform:rotateX(var(--lid-angle,0deg));will-change:transform;box-shadow:0 -8px 35px rgba(0,0,0,.24)}.ring-box-lid>div{position:absolute;inset:12px;border-radius:18px;background:#5d544c;display:grid;place-items:center;align-content:center;gap:4px;color:#d7c6ae}.ring-box-lid span{font:500 1rem var(--serif);letter-spacing:.18em}.ring-box-lid small{font-size:.4rem;letter-spacing:.3em}.velvet-slot{position:absolute;z-index:2;left:50%;top:51%;width:100px;height:12px;border-radius:50%;background:#292622;transform:translate(-50%,-50%);box-shadow:0 2px 6px rgba(0,0,0,.6)}.proposal-ring{position:absolute;z-index:3;left:50%;top:48%;width:80px;height:80px;border:5px solid #d5bb86;border-radius:50%;transform:translate(-50%,var(--ring-y,-12px)) scale(var(--ring-s,.8));opacity:var(--ring-o,0);box-shadow:inset 0 0 0 1px #806c48,0 0 20px rgba(213,187,134,.18);will-change:transform,opacity}.proposal-ring b{position:absolute;left:50%;top:-18px;width:34px;height:34px;transform:translateX(-50%) rotate(45deg);background:linear-gradient(135deg,#fff,#d7d7d7 46%,#fbf1dd 48%,#fff);clip-path:polygon(50% 0,100% 48%,75% 100%,25% 100%,0 48%);box-shadow:0 0 22px rgba(255,244,219,.7)}.proposal-ring b::after{content:"";position:absolute;inset:7px;border:1px solid rgba(151,137,118,.38);clip-path:inherit}.proposal-spark{position:absolute;z-index:6;width:10px;height:10px;border-radius:50%;background:#fff7df;box-shadow:0 0 22px 8px rgba(255,242,205,.45);transform:translate3d(calc(18vw + 27px),-55px,0) scale(var(--spark-s,0));opacity:var(--spark-o,0)}
.story-outro{position:absolute;z-index:8;left:50%;top:50%;transform:translate(-50%,-50%) translateY(var(--outro-y,24px));text-align:center;opacity:var(--outro-o,0);will-change:transform,opacity;pointer-events:none}.story-outro span{font-size:.5rem;letter-spacing:.4em;color:#d4bb91}.story-outro strong{display:block;font:500 clamp(5.2rem,10.5vw,11.5rem)/.76 var(--serif);letter-spacing:-.058em;margin-top:1rem}.story-outro small{display:block;margin-top:1.7rem;font:.48rem/1 var(--sans);letter-spacing:.34em;color:rgba(255,255,255,.55)}
.carry-line{display:none!important}.float-story{right:-5vw;top:8vh;transform:translateX(var(--story-float-x,0px))}

/* ---------- wedding day -> venue -> dress ---------- */
.day-sequence{height:560vh;background:var(--ivory)}
.day-stage{background:var(--ivory);color:var(--ink)}.day-paper{position:absolute;inset:0;background:linear-gradient(180deg,#f5f0e8,#eee7dd);transform:scale(var(--day-bg-s,1.02));will-change:transform}.day-paper::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 73% 20%,rgba(201,176,131,.16),transparent 28%)}
.day-heading{z-index:2;left:clamp(26px,6vw,90px);right:auto;top:11vh;bottom:auto;height:auto;width:min(720px,58vw);opacity:var(--day-heading-o,1);transform:translateY(var(--day-heading-y,0px));will-change:opacity,transform}.day-heading span,.venue-copy>span,.dress-copy>span{font-size:.5rem;letter-spacing:.34em;color:#8e7858}.day-heading h2{font:500 clamp(4.5rem,8.2vw,9rem)/.76 var(--serif);letter-spacing:-.055em;margin:1rem 0 0}.day-heading h2 em{font-weight:400;color:#9b7d54}
.event-panel{z-index:3;opacity:var(--events-o,0);transform:translateY(var(--events-y,32px));will-change:opacity,transform}.event-route{position:absolute;left:9vw;top:34vh;bottom:9vh;width:1px;background:rgba(76,66,54,.14)}.event-route i{position:absolute;inset:0;background:#ad936d;transform-origin:top;transform:scaleY(var(--event-line-p,0));will-change:transform}.event-list{position:absolute;left:13vw;top:30vh;width:min(650px,48vw)}.event-row{display:grid;grid-template-columns:110px 110px 1fr;gap:1rem;padding:1.1rem 0 1.35rem;border-bottom:1px solid rgba(63,55,46,.14);opacity:var(--row-o,.25);transform:translateX(var(--row-x,20px));will-change:transform,opacity}.event-row time{font:500 2.8rem/1 var(--serif);letter-spacing:-.03em}.event-row small{font-size:.48rem;letter-spacing:.2em;text-transform:uppercase;padding-top:.6rem;color:#8f7858}.event-row h3{font:500 1.55rem/1.05 var(--serif);margin:0 0 .35rem}.event-row p{font-size:.7rem;line-height:1.65;color:#756e66;margin:0;max-width:320px}.event-photo{position:absolute;right:6vw;top:24vh;width:min(31vw,480px);height:58vh;overflow:hidden;background:#d8d0c5;box-shadow:0 25px 70px rgba(66,51,34,.12)}.event-photo img{width:100%;height:100%;object-fit:cover;transform:scale(var(--event-photo-s,1.07));filter:saturate(.58) sepia(.08);will-change:transform}.event-photo span{position:absolute;right:14px;bottom:14px;background:rgba(245,240,232,.88);padding:.7rem .9rem;font-size:.45rem;letter-spacing:.22em}

.venue-panel{z-index:4;background:#171715;color:#f7f0e5;opacity:var(--venue-o,0);transform:translateY(var(--venue-y,30px));will-change:opacity,transform}.venue-map{position:absolute;inset:0 42% 0 0;overflow:hidden;background:#171715}.map-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);background-size:42px 42px;transform:translateY(var(--map-grid-y,0px))}.venue-map svg{position:absolute;left:8%;top:14%;width:84%;height:68%;fill:none;stroke:#c7aa79;stroke-width:2;stroke-linecap:round;stroke-dasharray:1800;stroke-dashoffset:var(--venue-dash,1800);will-change:stroke-dashoffset}.venue-pin{position:absolute;left:70.5%;top:24%;width:58px;height:58px;border:1px solid #cfb07c;border-radius:50%;display:grid;place-items:center;color:#e3c997;font:500 .8rem var(--serif);transform:scale(var(--pin-s,.6));opacity:var(--pin-o,0)}.venue-pin i{position:absolute;bottom:-28px;width:1px;height:28px;background:#cfb07c}.map-label{position:absolute;font-size:.42rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.46)}.label-a{left:18%;bottom:19%}.label-b{right:17%;top:13%}.label-c{left:42%;top:10%;writing-mode:vertical-rl}
.venue-image{position:absolute;right:0;top:0;bottom:0;width:42%;overflow:hidden}.venue-image::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#171715,transparent 30%),linear-gradient(180deg,transparent 55%,rgba(12,12,11,.55))}.venue-image img{width:100%;height:100%;object-fit:cover;filter:saturate(.55) sepia(.1);transform:scale(var(--venue-img-s,1.08));will-change:transform}.venue-copy{position:absolute;z-index:3;left:9vw;bottom:12vh;width:min(540px,38vw)}.venue-copy h2{font:500 clamp(4rem,7vw,8rem)/.78 var(--serif);letter-spacing:-.055em;margin:1.1rem 0 .55rem}.venue-copy p{font:400 clamp(1.2rem,1.7vw,1.7rem) var(--serif);margin:.2rem 0}.venue-copy small{display:block;font-size:.62rem;line-height:1.6;color:rgba(255,255,255,.58);margin:1rem 0 1.9rem}

.dress-panel{z-index:5;background:var(--ivory);color:var(--ink);opacity:var(--dress-o,0);will-change:opacity}.silk{position:absolute;top:-18%;bottom:-18%;width:58%;background:linear-gradient(110deg,#d4c0a1,#eee4d3 35%,#bca17a 55%,#eadfce 75%,#c8ae86);box-shadow:inset 0 0 80px rgba(255,255,255,.32);will-change:transform}.curtain-left{left:-7%;transform:translateX(var(--curtain-left,0%)) rotate(-5deg)}.curtain-right{right:-7%;transform:translateX(var(--curtain-right,0%)) rotate(5deg)}.dress-copy{position:absolute;z-index:2;left:9vw;top:23vh;width:min(520px,38vw);opacity:var(--dress-copy-o,0);transform:translateY(var(--dress-copy-y,22px));will-change:opacity,transform}.dress-copy h2{font:500 clamp(4.3rem,7.4vw,8.2rem)/.8 var(--serif);letter-spacing:-.055em;margin:1.1rem 0 1.5rem}.dress-copy p{font:400 clamp(1rem,1.2vw,1.2rem)/1.75 var(--serif);color:#6c645c}.palette-editorial{position:absolute;z-index:2;right:7vw;top:20vh;width:min(42vw,620px);height:60vh;display:flex;align-items:flex-end;gap:9px;opacity:var(--palette-o,0);transform:translateY(var(--palette-y,28px));will-change:opacity,transform}.palette-swatch{position:relative;flex:1;height:var(--swatch-h,70%);min-width:48px;background:var(--swatch);transform:scaleY(var(--swatch-s,0));transform-origin:bottom;will-change:transform}.palette-swatch span{position:absolute;left:50%;bottom:-32px;transform:translateX(-50%);font-size:.42rem;letter-spacing:.18em;white-space:nowrap;color:#746b62}.float-day{left:-2vw;bottom:7vh;color:#403a34;opacity:var(--day-float-o,.045);transform:translateX(var(--day-float-x,0px))}

/* ---------- gallery ---------- */
.gallery-sequence{height:550vh;background:#121210}
.gallery-stage{background:#121210;color:#f6efe5}.gallery-intro{position:absolute;z-index:4;left:6vw;top:9vh;opacity:var(--gallery-intro-o,1);transform:translateY(var(--gallery-intro-y,0px));will-change:opacity,transform}.gallery-intro>span{font-size:.48rem;letter-spacing:.33em;color:#c7ab7c}.gallery-intro h2{font:500 clamp(4.1rem,7vw,8.4rem)/.78 var(--serif);letter-spacing:-.05em;margin:1rem 0 0}.gallery-intro em{font-weight:400;color:#cbb184}
.gallery-track{position:absolute;left:0;top:26vh;height:62vh;display:flex;align-items:center;gap:clamp(20px,2.5vw,42px);padding:0 8vw;width:max-content;transform:translate3d(var(--gallery-x,0px),0,0);will-change:transform}.gallery-card{position:relative;flex:0 0 auto;width:clamp(280px,29vw,520px);height:var(--card-h,58vh);overflow:hidden;background:#2a2824;cursor:pointer;transform:translateY(var(--card-y,0px)) rotate(var(--card-r,0deg));will-change:transform}.gallery-card.tall{height:65vh;width:clamp(260px,25vw,450px)}.gallery-card.wide{width:clamp(380px,40vw,700px);height:50vh}.gallery-card img{width:100%;height:100%;object-fit:cover;filter:saturate(.72) sepia(.05);transform:scale(1.035);transition:transform .8s var(--ease),filter .5s ease}.gallery-card:hover img{transform:scale(1.075);filter:saturate(.9)}.gallery-card::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 62%,rgba(8,8,7,.48))}.gallery-card figcaption{position:absolute;z-index:2;left:18px;bottom:15px;font-size:.48rem;letter-spacing:.24em;text-transform:uppercase}.gallery-card .gallery-no{position:absolute;z-index:2;right:14px;top:14px;font:500 1.4rem var(--serif);opacity:.75}.gallery-progress{position:absolute;left:6vw;right:6vw;bottom:5vh;height:28px;display:flex;align-items:center;gap:18px}.gallery-progress::before{content:"";height:1px;flex:1;background:rgba(255,255,255,.18)}.gallery-progress i{position:absolute;left:0;top:13px;height:1px;width:calc((100% - 70px)*var(--gallery-p,0));background:#cbb184}.gallery-progress span{font-size:.47rem;letter-spacing:.16em}.gallery-float{position:absolute;font:400 clamp(6rem,15vw,15rem)/.8 var(--serif);letter-spacing:-.06em;color:#fff;opacity:.035;pointer-events:none}.gallery-float-a{right:-3vw;top:1vh;transform:translateX(var(--gfa-x,0px))}.gallery-float-b{left:-4vw;bottom:9vh;transform:translateX(var(--gfb-x,0px))}.gallery-to-rsvp{position:absolute;z-index:7;left:50%;top:50%;transform:translate(-50%,-50%) scale(var(--gtr-s,.84));text-align:center;opacity:var(--gtr-o,0);will-change:transform,opacity}.gallery-to-rsvp span{display:block;font-size:.52rem;letter-spacing:.32em;color:#ccb386}.gallery-to-rsvp strong{display:block;font:500 clamp(4.5rem,9vw,10rem)/.78 var(--serif);letter-spacing:-.055em;margin-top:1rem}

/* ---------- RSVP ---------- */
.rsvp-section{position:relative;min-height:145vh;background:var(--ivory);display:grid;place-items:center;padding:12vh 24px 16vh;overflow:hidden}.rsvp-section::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 80% 15%,rgba(201,176,131,.19),transparent 30%),linear-gradient(180deg,#f2ece3,#f8f4ed)}.rsvp-photo-echo{position:absolute;left:50%;top:-18vh;width:min(60vw,850px);height:45vh;background:var(--rsvp-photo,none) center/cover;transform:translateX(-50%) rotate(-1.8deg);filter:saturate(.55) sepia(.08);box-shadow:0 25px 80px rgba(68,49,28,.15);opacity:.48}.rsvp-paper{position:relative;z-index:2;width:min(820px,92vw);min-height:760px;background:#fffdf9;padding:clamp(48px,7vw,88px);box-shadow:0 28px 80px rgba(73,53,32,.12);display:grid;align-content:center;overflow:hidden}.rsvp-paper::before{content:"";position:absolute;inset:20px;border:1px solid rgba(128,103,68,.24);pointer-events:none}.rsvp-monogram{position:absolute;left:50%;top:42px;transform:translateX(-50%);font:500 1.1rem var(--serif);letter-spacing:.15em;color:#947852}.rsvp-step{transition:opacity .45s var(--ease),transform .55s var(--ease)}.rsvp-step-choice{text-align:center}.rsvp-step-choice small,.rsvp-form-head>small{font-size:.52rem;letter-spacing:.34em;color:#9c8059}.rsvp-step-choice h2,.rsvp-form-head h2{font:500 clamp(4.2rem,8vw,7.7rem)/.79 var(--serif);letter-spacing:-.055em;margin:1.2rem 0}.rsvp-step-choice p{font:400 1.08rem/1.6 var(--serif);color:#6c635b}.rsvp-choice-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:2.4rem}.rsvp-choice{border:1px solid rgba(65,57,48,.2);background:transparent;min-height:76px;padding:0 22px;display:flex;align-items:center;justify-content:space-between;text-transform:uppercase;font-size:.58rem;letter-spacing:.16em;color:#403a34;cursor:pointer;transition:background .35s ease,color .35s ease,border-color .35s ease}.rsvp-choice:hover{background:#26231f;color:#fff;border-color:#26231f}.rsvp-choice b{font:400 1.2rem var(--serif)}
.rsvp-form{display:none;opacity:0;transform:translateY(20px)}.rsvp-form.active{display:block;animation:rsvpIn .5s var(--ease) forwards}@keyframes rsvpIn{to{opacity:1;transform:none}}.rsvp-step-choice.hidden{display:none}.rsvp-form-head{text-align:center;margin-bottom:2.4rem}.rsvp-form-head h2{font-size:clamp(3rem,5.5vw,5.3rem);margin:1rem 0}.rsvp-back{border:0;background:none;display:block;margin:0 auto 1.4rem;font-size:.5rem;letter-spacing:.15em;text-transform:uppercase;color:#80756a;cursor:pointer}.field{display:block;border-bottom:1px solid rgba(65,57,48,.2);padding:1rem 0 .75rem}.field>span{display:block;font-size:.47rem;letter-spacing:.2em;text-transform:uppercase;color:#8a7c6d;margin-bottom:.55rem}.field input,.field textarea,.field select{width:100%;border:0;outline:0;background:transparent;color:#37312c;font:400 clamp(1.25rem,2vw,1.65rem) var(--serif);padding:.25rem 0;resize:none}.field select{appearance:none}.accept-only{display:grid;grid-template-columns:1fr 1fr;gap:30px}.accept-only.hidden{display:none}.submit-rsvp{margin:2rem auto .8rem;width:100%;height:70px;border:0;background:#26231f;color:white;text-transform:uppercase;letter-spacing:.21em;font-size:.57rem;display:flex;align-items:center;justify-content:center;gap:1.4rem;cursor:pointer}.submit-rsvp b{font-size:1rem;font-weight:300}.demo-note{display:block;text-align:center;font-size:.48rem;letter-spacing:.12em;color:#887c71}

/* ---------- finale ---------- */
.finale-sequence{height:240vh;background:#11110f}.finale-stage{background:#11110f;color:#f5efe5;display:grid;place-items:center}.finale-rings{position:absolute;inset:0;display:grid;place-items:center}.final-ring{position:absolute;width:clamp(150px,18vw,270px);aspect-ratio:1;border:2px solid #c7ab78;border-radius:50%;box-shadow:inset 0 0 0 1px rgba(255,244,218,.14),0 0 28px rgba(201,176,131,.08);will-change:transform,opacity}.ring-a{transform:translate3d(var(--ring-a-x,-28vw),var(--ring-y,0px),0) rotate(-10deg);opacity:var(--final-rings-o,0)}.ring-b{transform:translate3d(var(--ring-b-x,28vw),var(--ring-y,0px),0) rotate(10deg);opacity:var(--final-rings-o,0)}.finale-spark{width:8px;height:8px;border-radius:50%;background:#fff8e9;box-shadow:0 0 22px 10px rgba(255,239,201,.38);transform:scale(var(--final-spark-s,0));opacity:var(--final-spark-o,0)}
.finale-copy{position:relative;z-index:3;text-align:center;width:min(850px,90vw);opacity:var(--final-copy-o,0);transform:translateY(var(--final-copy-y,28px));will-change:opacity,transform}.finale-copy>span{font-size:.5rem;letter-spacing:.34em;color:#ceb381}.finale-copy h2{font:500 clamp(5.5rem,12vw,13rem)/.7 var(--serif);letter-spacing:-.065em;margin:1rem 0 1.8rem}.finale-copy h2 em{font-weight:400;color:#d0b584}.finale-copy p{max-width:530px;margin:0 auto;font:400 clamp(1rem,1.25vw,1.25rem)/1.7 var(--serif);color:rgba(255,255,255,.68)}.finale-copy strong{display:block;margin-top:1.8rem;font:400 clamp(1.8rem,3vw,3rem) var(--serif);font-style:italic}
.wax-finale{position:absolute;z-index:5;width:110px;height:110px;border-radius:47% 53% 49% 51%;background:radial-gradient(circle at 32% 24%,#b89362,#745634 68%);color:#f5e4c9;display:grid;place-items:center;font:500 1.25rem var(--serif);letter-spacing:.12em;transform:scale(var(--wax-s,0)) rotate(var(--wax-r,-25deg));opacity:var(--wax-o,0);box-shadow:0 15px 35px rgba(0,0,0,.35);will-change:transform,opacity}.wax-finale i{position:absolute;inset:14px;border:1px solid rgba(255,244,222,.42);border-radius:50%}.finale-word{position:absolute;bottom:-1vw;left:-2vw;font:400 clamp(7rem,20vw,20rem)/.7 var(--serif);letter-spacing:-.08em;color:#fff;opacity:.025;transform:translateX(var(--final-word-x,0px))}

/* ---------- responsive ---------- */
@media(max-width:900px){
  .opening-sequence{height:400vh}.story-sequence{height:560vh}.day-sequence{height:500vh}.gallery-sequence{height:470vh}.finale-sequence{height:215vh}
  .hero-names{font-size:clamp(4.5rem,14vw,8rem)}.hero-details{font-size:.48rem}.hero-side{display:none}
  .invite-paper{width:min(86vw,650px)}
  .story-copy{left:100px;width:calc(100vw - 140px)}.story-copy h2{font-size:clamp(3.2rem,7vw,5.5rem)}.story-copy p{max-width:80%}.story-rail{left:24px}.proposal-scene{transform:translate3d(18vw,var(--proposal-y,18px),0) scale(var(--proposal-s,.82))}
  .event-list{left:9vw;width:54vw}.event-row{grid-template-columns:90px 1fr;gap:.6rem}.event-row small{display:none}.event-row .event-copy{grid-column:2}.event-photo{right:4vw;width:34vw}.venue-map{right:38%}.venue-image{width:38%}.venue-copy{left:7vw;width:46vw}.dress-copy{left:7vw;width:42vw}.palette-editorial{right:5vw;width:42vw}
  .gallery-track{padding-left:7vw}.gallery-card{width:48vw}.gallery-card.tall{width:42vw}.gallery-card.wide{width:62vw}
}
@media(max-width:680px){
  .opening-sequence{height:350vh}.story-sequence{height:500vh}.day-sequence{height:430vh}.gallery-sequence{height:auto;background:#121210}.gallery-stage{position:relative;height:auto;min-height:100svh;padding:100px 0 70px;overflow:visible}.finale-sequence{height:190vh}
  .hero-editorial{padding:10vh 20px 9vh}.hero-overline{font-size:.47rem;letter-spacing:.27em}.hero-names{font-size:clamp(4.2rem,20vw,7.2rem);gap:7px;flex-wrap:wrap}.hero-names em{font-size:.34em}.hero-editorial>p{font-size:1rem;max-width:88%}.hero-details{flex-direction:column;gap:.5rem}.hero-details i{width:30px}.float-copy{font-size:27vw}
  .invite-paper{width:88vw;min-height:70svh;padding:52px 32px}.invite-paper h2{font-size:clamp(3.1rem,12vw,4.8rem)}.invite-paper p{font-size:1rem}.invite-paper::before{inset:12px}.countdown-inline{gap:14px;width:90vw;justify-content:center}.countdown-inline div{min-width:0;flex:1}.countdown-inline strong{font-size:clamp(1.8rem,8vw,3rem)}.countdown-inline span{font-size:.4rem;letter-spacing:.16em}
  .story-media::after{background:linear-gradient(180deg,rgba(11,11,10,.35),rgba(11,11,10,.74) 58%,rgba(11,11,10,.88))}.story-rail{top:10vh;bottom:12vh;left:16px;width:38px}.story-copy{left:68px;right:22px;bottom:11vh;width:auto}.story-year{font-size:22vw}.story-copy h2{font-size:clamp(2.8rem,12vw,4.7rem)}.story-copy p{max-width:100%;font-size:.96rem}.story-index{right:12px;top:26%;gap:9px}.story-index i{width:15px}.story-index i.active{width:28px}.proposal-scene{transform:translate3d(0,-5vh,0) scale(var(--proposal-s,.78));place-items:start center;padding-top:13vh}.ring-box{width:210px;height:156px}.ring-box-base{height:90px}.ring-box-lid{bottom:74px;height:86px}.proposal-ring{width:64px;height:64px}.proposal-spark{transform:translate3d(25px,-34vh,0) scale(var(--spark-s,0))}.story-outro{width:88vw}.story-outro strong{font-size:19vw;line-height:.76}.story-outro small{margin-top:1.2rem;font-size:.4rem}
  .day-heading{left:24px;top:10vh;width:88vw}.day-heading h2{font-size:15vw}.event-panel{padding-top:24vh}.event-route{left:28px;top:30vh;bottom:9vh}.event-list{left:52px;top:27vh;width:calc(100vw - 78px)}.event-row{grid-template-columns:78px 1fr;padding:.9rem 0}.event-row time{font-size:2.2rem}.event-row p{font-size:.65rem}.event-photo{display:none}.venue-map{inset:0}.venue-image{width:100%;height:48%;top:auto;bottom:0;opacity:.36}.venue-image::after{background:linear-gradient(180deg,#171715,transparent 24%,rgba(12,12,11,.5))}.venue-copy{left:28px;right:28px;bottom:10vh;width:auto}.venue-copy h2{font-size:15vw}.venue-copy p{font-size:1.3rem}.venue-map svg{top:5%;height:55%}.venue-pin{top:15%}.dress-copy{left:28px;right:28px;top:15vh;width:auto}.dress-copy h2{font-size:15vw}.palette-editorial{left:28px;right:28px;top:auto;bottom:15vh;width:auto;height:34vh}.palette-swatch span{font-size:.36rem}.silk{width:75%}
  .gallery-intro{position:relative;left:auto;top:auto;padding:0 24px;margin-bottom:46px}.gallery-intro h2{font-size:14vw}.gallery-track{position:relative;left:auto;top:auto;height:auto;width:auto;display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:16px;padding:0 24px 28px;transform:none!important;scrollbar-width:none;-webkit-overflow-scrolling:touch}.gallery-track::-webkit-scrollbar{display:none}.gallery-card,.gallery-card.tall,.gallery-card.wide{width:78vw;height:62svh;scroll-snap-align:center;flex:0 0 78vw}.gallery-progress{position:relative;left:auto;right:auto;bottom:auto;margin:10px 24px 0}.gallery-float{display:none}.gallery-to-rsvp{display:none}
  .rsvp-section{min-height:130svh;padding:16vh 14px 12vh}.rsvp-photo-echo{width:90vw;top:-8vh;height:30vh}.rsvp-paper{width:94vw;min-height:720px;padding:66px 28px 42px}.rsvp-step-choice h2{font-size:16vw}.rsvp-choice-grid{grid-template-columns:1fr}.accept-only{grid-template-columns:1fr;gap:0}.rsvp-form-head h2{font-size:11vw}
  .final-ring{width:40vw}.finale-copy h2{font-size:19vw}.finale-copy p{padding:0 18px}.wax-finale{width:88px;height:88px}
}

@media(prefers-reduced-motion:reduce){
  .sequence{height:auto!important;background:var(--ivory)}.sequence-stage{position:relative;height:auto;min-height:auto;overflow:visible}.opening-stage,.story-stage,.day-stage,.finale-stage{display:block;padding:80px 24px}.opening-photo,.hero-editorial,.invitation-object,.date-object,.story-media,.story-shade,.story-rail,.proposal-scene,.story-outro,.carry-line,.day-paper,.day-heading,.event-panel,.venue-panel,.dress-panel,.gallery-to-rsvp,.float-copy,.scroll-cue,.opening-continuity,.finale-rings,.wax-finale,.finale-word{position:relative!important;inset:auto!important;left:auto!important;right:auto!important;top:auto!important;bottom:auto!important;transform:none!important;opacity:1!important}.opening-photo{height:70vh;margin:-80px -24px 40px}.hero-editorial{padding:20px 0 80px}.invitation-object{display:block;margin:0 auto 60px}.date-object{min-height:70vh}.story-stage{background:#151513}.story-media{height:55vh;margin:-80px -24px 40px}.story-rail,.story-index,.proposal-scene,.story-outro,.carry-line{display:none!important}.story-copy{position:relative!important;left:auto!important;bottom:auto!important;width:auto!important}.day-stage{padding:80px 24px}.day-heading{width:auto!important}.event-panel,.venue-panel,.dress-panel{margin:60px 0;min-height:70vh}.gallery-sequence{background:#121210}.gallery-stage{position:relative;height:auto;min-height:auto;padding:80px 0}.gallery-track{position:relative;left:auto;top:auto;transform:none!important;overflow:auto}.finale-stage{min-height:100vh}.finale-copy{position:relative;opacity:1!important;transform:none!important}
}
.story-photo{position:absolute;inset:-2%;width:104%;height:104%;object-fit:cover;opacity:0;transform:scale(1.035);transition:opacity .65s ease;will-change:opacity,transform}.story-photo.active{opacity:1}.story-media::after{z-index:2}.story-media::before{z-index:2}

/* ============================================================
   V8 DIRECTOR'S CUT — TRUE SHARED-OBJECT TRANSITIONS
   These overrides make the end of one scene physically become the next.
   ============================================================ */

/* The hero is revealed like an editorial title card after the envelope leaves. */
.hero-name{clip-path:inset(0 0 100% 0)}
body.invite-opened .hero-bride{animation:diHeroClip .95s .08s var(--ease) forwards}
body.invite-opened .hero-groom{animation:diHeroClip .95s .22s var(--ease) forwards}
@keyframes diHeroClip{to{clip-path:inset(0 0 0 0)}}

/* Opening -> story: the tiny continuation line becomes a dark slit and opens into the story film. */
.opening-iris{position:absolute;z-index:7;inset:0;pointer-events:none;display:grid;place-items:center;overflow:hidden}
.opening-iris i{display:block;width:8vw;height:140vh;background:#151513;transform:scaleX(var(--iris-s,0));transform-origin:center;will-change:transform}

/* Story copy is no longer mutated abruptly; every chapter exists in the same stack and crossfades through scroll. */
.story-copy-stack{opacity:1!important;transform:none!important;height:min(52vh,520px)}
.story-copy-card{position:absolute;left:0;bottom:0;width:100%;opacity:var(--card-o,0);transform:translate3d(0,var(--card-y,36px),0);pointer-events:none;will-change:transform,opacity}
.story-copy-card .story-year{margin-bottom:.2rem}
.story-copy-card small{display:block}
.story-copy-card h2{max-width:720px}
.story-copy-card p{max-width:520px}
.story-photo{transition:none!important;opacity:var(--photo-o,0)!important;transform:scale(var(--photo-s,1.055))!important}

/* Story -> wedding day: ivory paper rises under the drawn gold line, so the line survives the scene change. */
.story-paper-wipe{position:absolute;z-index:6;inset:-2px;background:linear-gradient(180deg,#f7f2ea,#eee7dd);transform:translate3d(0,var(--story-wipe-y,102%),0);will-change:transform;pointer-events:none;box-shadow:0 -28px 70px rgba(235,224,208,.16)}
.story-paper-wipe::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:linear-gradient(90deg,transparent,rgba(177,151,112,.5) 30%,rgba(177,151,112,.5) 70%,transparent);opacity:.7}
.story-outro{z-index:8}

/* Dress -> gallery: the final charcoal swatch expands into the dark album canvas. */
.day-gallery-portal{position:absolute;z-index:9;right:12vw;bottom:18vh;width:14vmax;aspect-ratio:1;border-radius:50%;background:#121210;transform:scale(var(--day-portal-s,0));transform-origin:center;pointer-events:none;will-change:transform;display:grid;place-items:center;color:#fff}
.day-gallery-portal span{font:400 clamp(2rem,4vw,5rem)/1 var(--serif);font-style:italic;opacity:var(--day-portal-word-o,0);transform:none;white-space:nowrap}

/* Gallery -> RSVP: the last photograph leaves the film strip, flips over, then its ivory back fills the viewport. */
.gallery-track{opacity:var(--gallery-track-o,1)}
.gallery-to-rsvp{width:min(470px,36vw);height:60vh;perspective:1400px;opacity:var(--gtr-o,0);transform:translate(-50%,-50%);text-align:initial}
.gallery-transition-card{position:absolute;inset:0;transform-style:preserve-3d;transform:rotateY(var(--gtr-ry,0deg)) scale(var(--gtr-s,.82));will-change:transform}
.gallery-transition-face{position:absolute;inset:0;backface-visibility:hidden;box-shadow:0 32px 90px rgba(0,0,0,.35)}
.gallery-transition-front{background:var(--rsvp-photo,linear-gradient(145deg,#655b51,#2b2925)) center/cover no-repeat}
.gallery-transition-front::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 55%,rgba(10,9,8,.38))}
.gallery-transition-back{transform:rotateY(180deg);background:#fffdf9;color:#37312c;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:12%;border:1px solid rgba(130,104,67,.22)}
.gallery-transition-back::before{content:"";position:absolute;inset:18px;border:1px solid rgba(130,104,67,.22)}
.gallery-transition-back span{position:relative;display:block;font-size:.52rem;letter-spacing:.32em;color:#9b7d55}
.gallery-transition-back strong{position:relative;display:block;font:500 clamp(3.2rem,5vw,5.6rem)/.8 var(--serif);letter-spacing:-.045em;margin:1rem 0;color:#37312c}
.gallery-transition-back i{position:relative;font:400 1.45rem var(--serif);color:#987d57}

/* RSVP -> finale: the RSVP paper gives way to a dark circular seal field. */
.rsvp-section{padding-bottom:34vh}
.rsvp-paper{transform:translate3d(0,var(--rsvp-paper-y,0px),0) scale(var(--rsvp-paper-s,1));opacity:var(--rsvp-paper-o,1);will-change:transform,opacity}
.rsvp-finale-portal{position:absolute;z-index:1;left:50%;bottom:-18vmax;width:32vmax;aspect-ratio:1;border-radius:50%;background:#11110f;transform:translateX(-50%) scale(var(--rsvp-portal-s,0));will-change:transform;display:grid;place-items:center;color:#cdb382}
.rsvp-finale-portal span{font:500 1rem var(--serif);letter-spacing:.2em;opacity:var(--rsvp-portal-o,0)}

/* Finale -> credits: a hairline and label appear in the same visual language as the creator credit below. */
.finale-credit-cue{position:absolute;z-index:7;left:50%;bottom:5.5vh;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:12px;opacity:var(--credit-o,0);color:#cdb382}
.finale-credit-cue i{display:block;width:1px;height:46px;background:linear-gradient(transparent,#cdb382)}
.finale-credit-cue span{font-size:.44rem;letter-spacing:.3em}

/* Performance: colour treatment is done with overlays, not expensive filters on moving full-size imagery. */
.opening-photo img,.event-photo img,.venue-image img,.gallery-card img{filter:none!important}
.gallery-card img{transition:transform .7s var(--ease)!important}
.sequence-stage{contain:paint}

@media(max-width:680px){
  .story-copy-stack{height:52vh}
  .story-copy-card h2{font-size:clamp(2.75rem,11.5vw,4.7rem)}
  .gallery-to-rsvp{display:none!important}
  .opening-iris i{width:18vw}
  .day-gallery-portal{width:18vmax;right:10vw;bottom:16vh}
  .rsvp-section{padding-bottom:24vh}
  .rsvp-finale-portal{bottom:-12vmax;width:38vmax}
  .grain{display:none!important}
  .sequence-stage,.story-copy-card,.story-photo,.proposal-ring,.ring-box-lid,.final-ring{will-change:auto!important}
}

@media(prefers-reduced-motion:reduce){
  .opening-iris,.story-paper-wipe,.day-gallery-portal,.rsvp-finale-portal,.finale-credit-cue{display:none!important}
  .story-copy-stack{height:auto!important}
  .story-copy-card{position:relative!important;opacity:1!important;transform:none!important;margin:0 0 54px}
}

.mobile-gallery-exit{display:none}
@media(max-width:680px){
  .mobile-gallery-exit{position:relative;display:flex;min-height:82svh;margin-top:30px;padding:12vh 24px 8vh;align-items:center;justify-content:flex-end;flex-direction:column;text-align:center;background:linear-gradient(180deg,#121210 0 35%,#f5f0e8 100%);color:#2f2b27;overflow:hidden}
  .mobile-gallery-exit>div{width:72vw;height:46svh;background:var(--rsvp-photo,linear-gradient(145deg,#645b52,#2b2925)) center/cover no-repeat;transform:rotate(-2deg);box-shadow:0 24px 60px rgba(0,0,0,.28);margin-bottom:-6svh}
  .mobile-gallery-exit span{position:relative;margin-top:9svh;font-size:.46rem;letter-spacing:.3em;text-transform:uppercase;color:#967b57}
  .mobile-gallery-exit strong{position:relative;font:500 13vw/.82 var(--serif);letter-spacing:-.045em;margin-top:.7rem}
}
@media(prefers-reduced-motion:reduce){.mobile-gallery-exit{display:none!important}}

/* V8.1 visual QA refinements */
.opening-iris::after{content:"CHAPTER ONE";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:.46rem;letter-spacing:.34em;color:#cdb382;opacity:var(--iris-copy-o,0);white-space:nowrap}
.story-paper-wipe{z-index:6}
@media(max-width:680px){.day-gallery-portal span{display:none}}

/* ============================================================
   V10 ATELIER CUT — remove synthetic objects, keep cinematic continuity.
   ============================================================ */

/* Proposal: an editorial photographic reveal replaces the CSS ring box. */
.proposal-scene{position:absolute;z-index:5;inset:0;display:block;pointer-events:none;opacity:var(--proposal-o,0);transform:none!important;padding:0!important;will-change:opacity}
.proposal-editorial{position:absolute;right:6.5vw;top:13vh;width:min(31vw,480px);height:72vh;transform:translate3d(0,var(--proposal-y,22px),0);opacity:1;will-change:transform}
.proposal-detail{position:absolute;inset:0 0 12vh 0;margin:0;overflow:hidden;background:#26231f;clip-path:inset(0 var(--proposal-clip,100%) 0 0);box-shadow:0 24px 70px rgba(0,0,0,.22);will-change:clip-path}
.proposal-detail::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 55%,rgba(11,10,9,.34));pointer-events:none}
.proposal-detail img{width:100%;height:100%;object-fit:cover;object-position:center;filter:saturate(.72) contrast(1.02);transform:scale(var(--proposal-photo-s,1.07));will-change:transform}
.proposal-detail-edge{position:absolute;inset:12px;border:1px solid rgba(255,255,255,.22);z-index:2}
.proposal-note{position:absolute;z-index:3;left:-3.5vw;right:2.5vw;bottom:0;background:#f3eee6;color:#2f2b27;padding:22px 26px 24px;border-left:1px solid rgba(174,145,103,.5);opacity:var(--proposal-note-o,0);transform:translate3d(var(--proposal-note-x,24px),0,0);will-change:transform,opacity}
.proposal-note small{display:block;font-size:.43rem;letter-spacing:.29em;color:#9a7f5c}.proposal-note strong{display:block;margin:.65rem 0 .28rem;font:500 clamp(1.9rem,2.8vw,3rem)/.92 var(--serif);letter-spacing:-.035em}.proposal-note span{font:400 .85rem/1.5 var(--serif);color:#746b62}
.proposal-light{position:absolute;z-index:4;left:-22%;top:0;width:34%;height:60vh;background:linear-gradient(90deg,transparent,rgba(255,247,230,.28),transparent);transform:translate3d(var(--proposal-light-x,-140%),0,0) skewX(-10deg);opacity:var(--proposal-light-o,0);pointer-events:none;will-change:transform,opacity}

/* Dress -> gallery: the final dark swatch expands as a crisp matte wipe. */
.day-gallery-portal{display:none!important}
.day-gallery-wipe{position:absolute;z-index:10;inset:0;background:#121210;clip-path:inset(var(--day-wipe-t,20vh) var(--day-wipe-r,7vw) var(--day-wipe-b,20vh) var(--day-wipe-l,51vw));pointer-events:none;will-change:clip-path}
.day-gallery-wipe::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.018),transparent 24%);opacity:var(--day-wipe-sheen,0)}

/* Gallery: remove the oversized ghost words and use photography as the motion. */
.gallery-float,.gallery-caption-ghost{display:none!important}
.gallery-track{opacity:var(--gallery-track-o,1)}
.gallery-to-rsvp{position:absolute;z-index:8;left:50%;top:52%;width:min(880px,76vw);height:min(62vh,610px);transform:translate(-50%,-50%);opacity:var(--gtr-o,0);text-align:initial;will-change:opacity}
.gallery-transition-photo{position:absolute;left:0;top:50%;width:42%;height:88%;background:var(--rsvp-photo,linear-gradient(145deg,#655b51,#2b2925)) center/cover no-repeat;transform:translate3d(var(--gtr-photo-x,0px),-50%,0) rotate(var(--gtr-photo-r,-1.5deg)) scale(var(--gtr-photo-s,.98));box-shadow:0 24px 70px rgba(0,0,0,.30);will-change:transform,opacity}
.gallery-transition-photo::after{content:"";position:absolute;inset:12px;border:1px solid rgba(255,255,255,.16)}
.gallery-transition-paper{position:absolute;right:0;top:50%;width:52%;min-height:76%;background:#f8f4ed;color:#322e2a;transform:translate3d(var(--gtr-paper-x,54px),-50%,0);opacity:var(--gtr-paper-o,0);display:flex;flex-direction:column;justify-content:center;padding:clamp(34px,5vw,66px);border-left:1px solid rgba(145,115,77,.22);will-change:transform,opacity}
.gallery-transition-paper::before{content:"";position:absolute;inset:16px;border:1px solid rgba(145,115,77,.14)}
.gallery-transition-paper span,.gallery-transition-paper strong,.gallery-transition-paper small{position:relative}.gallery-transition-paper span{font-size:.46rem;letter-spacing:.3em;color:#927652}.gallery-transition-paper strong{font:500 clamp(3.4rem,5.5vw,6.2rem)/.82 var(--serif);letter-spacing:-.05em;margin:1rem 0 1.5rem}.gallery-transition-paper small{font-size:.46rem;letter-spacing:.22em;color:#81756b}
.gallery-rsvp-wipe{position:absolute;z-index:9;inset:0;background:#f5f0e8;clip-path:inset(var(--gtr-wipe-t,50%) var(--gtr-wipe-r,50%) var(--gtr-wipe-b,50%) var(--gtr-wipe-l,50%));pointer-events:none;will-change:clip-path}

/* RSVP: an editorial spread, not a floating form card. */
.rsvp-section{position:relative;min-height:150vh;background:#f5f0e8;display:block;padding:0;overflow:hidden}
.rsvp-section::before{display:none}
.rsvp-photo-echo{position:absolute;z-index:0;left:0;top:0;width:38vw;height:100%;background:var(--rsvp-photo,none) center/cover no-repeat;transform:none;filter:none;box-shadow:none;opacity:1}
.rsvp-photo-echo::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 52%,rgba(245,240,232,.16)),linear-gradient(180deg,rgba(17,16,14,.08),rgba(17,16,14,.28))}
.rsvp-paper{position:relative;z-index:2;margin-left:38vw;width:62vw;min-height:100svh;background:#f8f4ed;padding:clamp(74px,8vw,120px) clamp(54px,7vw,110px);box-shadow:none;display:grid;align-content:center;overflow:hidden;border-left:1px solid rgba(122,101,74,.16);transform:translate3d(0,var(--rsvp-paper-y,0px),0);opacity:var(--rsvp-paper-o,1);will-change:transform,opacity}
.rsvp-paper::before{inset:28px;border-color:rgba(128,103,68,.16)}
.rsvp-monogram{left:auto;right:clamp(38px,5vw,74px);top:42px;transform:none;font:500 .46rem var(--sans);letter-spacing:.24em;color:#8f7452}
.rsvp-step-choice{text-align:left}.rsvp-step-choice h2{max-width:700px}.rsvp-step-choice p{max-width:520px}
.rsvp-choice-grid{max-width:680px}.rsvp-choice{background:transparent;border-color:rgba(65,57,48,.18)}
.rsvp-form-head{text-align:left}.rsvp-back{margin:0 0 1.4rem;padding:0}.demo-note{text-align:left}
.rsvp-to-finale{position:absolute;z-index:4;inset:0;clip-path:inset(var(--rsvp-final-top,100%) 0 0 0);background:#11110f;pointer-events:none;will-change:clip-path}
.rsvp-to-finale-image{position:absolute;inset:0;background:var(--rsvp-photo,none) center/cover no-repeat;transform:scale(var(--rsvp-final-s,1.08));will-change:transform}
.rsvp-to-finale-image::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(13,12,11,.5),rgba(13,12,11,.18) 58%,rgba(13,12,11,.38)),linear-gradient(180deg,transparent 45%,rgba(10,9,8,.55))}
.rsvp-finale-portal,.rsvp-answer-echo{display:none!important}

/* Finale: photographic, cinematic and restrained. No CSS rings, no monogram seal. */
.finale-sequence{height:190vh;background:#11110f}.finale-stage{background:#11110f;color:#f7f1e7;display:block;overflow:hidden}
.finale-rings,.finale-halo,.wax-finale,.finale-word{display:none!important}
.finale-photo{position:absolute;inset:0;opacity:var(--final-photo-o,1);overflow:hidden}.finale-photo img{width:100%;height:100%;object-fit:cover;filter:saturate(.68) contrast(1.03);transform:scale(var(--final-photo-s,1.08));will-change:transform}
.finale-shade{position:absolute;inset:0;background:linear-gradient(90deg,rgba(10,9,8,.70),rgba(10,9,8,.28) 60%,rgba(10,9,8,.16)),linear-gradient(180deg,rgba(10,9,8,.08),rgba(10,9,8,.55));opacity:var(--final-shade-o,.9)}
.finale-date-mark{position:absolute;z-index:3;right:4.5vw;top:50%;transform:translate3d(var(--final-date-x,24px),-50%,0);writing-mode:vertical-rl;font-size:.46rem;letter-spacing:.32em;color:rgba(255,255,255,.62);opacity:var(--final-date-o,0);will-change:transform,opacity}
.finale-copy{position:absolute;z-index:4;left:7vw;bottom:11vh;text-align:left;width:min(820px,68vw);opacity:var(--final-copy-o,0);transform:translate3d(0,var(--final-copy-y,30px),0);will-change:opacity,transform}
.finale-copy>span{font-size:.46rem;letter-spacing:.34em;color:#dcc69e}.finale-copy h2{font:500 clamp(4.8rem,8.5vw,9.8rem)/.76 var(--serif);letter-spacing:-.058em;margin:1rem 0 1.5rem;max-width:900px}.finale-copy h2 em{font-weight:400;color:#f0dfc2}.finale-copy p{max-width:520px;margin:0;font:400 clamp(1rem,1.2vw,1.2rem)/1.72 var(--serif);color:rgba(255,255,255,.76)}.finale-copy strong{display:block;margin-top:1.6rem;font:400 clamp(1.8rem,2.8vw,2.8rem) var(--serif);font-style:italic;color:#f4e7d2}
.finale-credit-cue{position:absolute;z-index:5;right:4.5vw;bottom:4.5vh;left:auto;transform:none;display:block;opacity:var(--credit-o,0);color:#d4bd94}.finale-credit-cue i{display:none}.finale-credit-cue span{font-size:.42rem;letter-spacing:.3em}

/* Tablet adjustments. */
@media(max-width:900px){
  .proposal-editorial{right:4vw;width:min(35vw,430px)}
  .rsvp-photo-echo{width:34vw}.rsvp-paper{margin-left:34vw;width:66vw;padding-left:7vw;padding-right:7vw}
  .gallery-to-rsvp{width:84vw}.finale-copy{width:78vw}
}

/* Mobile is choreographed independently; no desktop trick is simply shrunk. */
@media(max-width:680px){
  .story-sequence{height:470vh}.day-sequence{height:405vh}.finale-sequence{height:150vh}
  .story-copy-stack{height:46vh}.story-copy-card{transition:opacity .32s ease,transform .42s var(--ease)}.story-photo{transition:opacity .48s ease!important,transform .8s var(--ease)!important}
  .story-copy{left:58px;right:20px;bottom:9vh}.story-copy-card h2{font-size:clamp(2.55rem,11vw,4.25rem);line-height:.88}.story-copy-card p{font-size:.9rem;line-height:1.55}.story-year{font-size:18vw}.story-index{display:none}
  .proposal-scene{opacity:var(--proposal-o,0)}.proposal-editorial{left:auto;right:20px;top:12vh;width:70vw;height:43vh;transform:translate3d(0,var(--proposal-y,16px),0)}.proposal-detail{inset:0 0 8.5vh 0}.proposal-note{left:-12vw;right:0;padding:16px 18px 18px}.proposal-note strong{font-size:1.85rem}.proposal-note span{font-size:.72rem}.proposal-light{height:34vh}
  .day-gallery-wipe{clip-path:inset(var(--day-wipe-t,51vh) var(--day-wipe-r,28px) var(--day-wipe-b,15vh) var(--day-wipe-l,28px))}
  .gallery-sequence{height:auto}.gallery-stage{padding:78px 0 0}.gallery-intro{padding:0 22px;margin-bottom:30px}.gallery-intro h2{font-size:13vw;line-height:.83}.gallery-track{padding:0 22px 20px;gap:14px}.gallery-card,.gallery-card.tall,.gallery-card.wide{width:82vw;height:58svh;flex-basis:82vw}.gallery-progress{margin:8px 22px 0}.gallery-to-rsvp,.gallery-rsvp-wipe{display:none!important}
  .mobile-gallery-exit{display:grid;min-height:94svh;margin-top:48px;padding:0;background:#f5f0e8;color:#2f2b27;grid-template-rows:56svh auto;text-align:left;overflow:hidden}.mobile-exit-photo{width:100%;height:56svh;background:var(--rsvp-photo,linear-gradient(145deg,#645b52,#2b2925)) center/cover no-repeat;box-shadow:none;margin:0;transform:none}.mobile-exit-copy{padding:8vh 24px 11vh;background:#f5f0e8}.mobile-exit-copy span{display:block;font-size:.42rem;letter-spacing:.3em;text-transform:uppercase;color:#8d7351}.mobile-exit-copy strong{display:block;margin-top:.8rem;font:500 12vw/.88 var(--serif);letter-spacing:-.045em;max-width:90vw}
  .rsvp-section{min-height:145svh;padding:0;background:#f5f0e8}.rsvp-photo-echo{position:relative;left:auto;top:auto;width:100%;height:34svh;background-position:center 46%;opacity:1}.rsvp-photo-echo::after{background:linear-gradient(180deg,rgba(10,9,8,.08),rgba(10,9,8,.28))}.rsvp-paper{margin:0;width:100%;min-height:96svh;padding:72px 24px 54px;border:0;box-shadow:none;background:#f8f4ed;transform:translate3d(0,var(--rsvp-paper-y,0px),0);opacity:var(--rsvp-paper-o,1)}.rsvp-paper::before{inset:14px}.rsvp-monogram{right:24px;top:30px;font-size:.38rem}.rsvp-step-choice{text-align:left}.rsvp-step-choice h2{font-size:14vw;line-height:.82;margin-top:1rem}.rsvp-step-choice p{font-size:1rem}.rsvp-choice-grid{grid-template-columns:1fr;gap:9px;margin-top:1.8rem}.rsvp-choice{min-height:68px}.rsvp-form-head{text-align:left}.rsvp-form-head h2{font-size:10vw;line-height:.9}.accept-only{grid-template-columns:1fr}.rsvp-to-finale{z-index:5}
  .finale-date-mark{right:18px;top:18vh;transform:translate3d(var(--final-date-x,18px),0,0);writing-mode:vertical-rl;font-size:.38rem}.finale-copy{left:22px;right:22px;bottom:10vh;width:auto}.finale-copy h2{font-size:15vw;line-height:.79;margin:1rem 0 1.2rem}.finale-copy p{font-size:.98rem;line-height:1.6;max-width:92%}.finale-copy strong{font-size:1.85rem}.finale-credit-cue{right:18px;bottom:18px}.finale-credit-cue span{font-size:.36rem;letter-spacing:.24em}
}

@media(prefers-reduced-motion:reduce){
  .proposal-editorial,.proposal-detail,.proposal-note,.day-gallery-wipe,.gallery-rsvp-wipe,.rsvp-to-finale{clip-path:none!important;transform:none!important;opacity:1!important}
  .gallery-to-rsvp{display:none!important}.rsvp-photo-echo{position:relative!important;width:100%!important;height:44vh!important}.rsvp-paper{margin:0!important;width:100%!important;min-height:auto!important}.finale-photo,.finale-shade,.finale-date-mark,.finale-copy{position:relative!important;inset:auto!important;left:auto!important;right:auto!important;top:auto!important;bottom:auto!important;transform:none!important;opacity:1!important}.finale-photo{height:68vh;margin:-80px -24px 46px}.finale-stage{padding:80px 24px!important}.finale-date-mark{writing-mode:horizontal-tb;margin-bottom:30px}.finale-copy{width:auto!important}
}
@media(max-width:680px){
  .mobile-gallery-exit>.mobile-exit-photo{width:100%!important;height:56svh!important;margin:0!important;transform:none!important;box-shadow:none!important;background:var(--rsvp-photo,linear-gradient(145deg,#645b52,#2b2925)) center/cover no-repeat!important}
  .mobile-gallery-exit>.mobile-exit-copy{width:100%!important;height:auto!important;margin:0!important;transform:none!important;box-shadow:none!important;background:#f5f0e8!important}
}
/* V10.1 QA refinements */
@media(min-width:681px){
  .proposal-editorial{right:0;top:0;width:min(42vw,650px);height:100%;}
  .proposal-detail{inset:0;margin:0;box-shadow:none}
  .proposal-detail-edge{inset:28px}
  .proposal-note{left:-7vw;right:5vw;bottom:8vh;padding:24px 28px 26px;background:rgba(243,238,230,.96)}
  .proposal-light{height:100%}
}
.gallery-rsvp-wipe{opacity:var(--gtr-wipe-o,0)}
@media(max-width:680px){
  .story-copy-card{transition:none!important}
  .story-photo{transition:none!important}
}

/* ============================================================
   V10.2 VISUAL CORRECTIONS
   - Removes the floating black rectangle during Day -> Gallery.
   - Gives RSVP a photographic editorial spread with no giant card UI.
   ============================================================ */

/* Day -> Gallery: one full-bleed charcoal curtain attached to the viewport edge. */
.day-gallery-wipe{
  inset:-2px;
  clip-path:polygon(8% 0,100% 0,100% 100%,0 100%);
  transform:translate3d(var(--day-wipe-x,106%),0,0);
  opacity:var(--day-wipe-o,0);
  background:#121210;
  will-change:transform,opacity;
  overflow:hidden;
}
.day-gallery-wipe::before{
  content:"";
  position:absolute;
  inset:0 auto 0 0;
  width:14vw;
  background:linear-gradient(90deg,rgba(246,241,233,.08),rgba(246,241,233,0));
  transform:translateX(-20%);
  opacity:.7;
}
.day-gallery-wipe::after{
  background:linear-gradient(105deg,rgba(255,255,255,.045),transparent 28%);
}

/* RSVP: real photography on the left, restrained stationery on the right. */
.rsvp-section{min-height:138vh;background:#f5f0e8}
.rsvp-photo-echo{
  width:44vw;
  height:100svh;
  position:absolute;
  top:0;
  background-position:center 43%;
  filter:saturate(.78) contrast(1.02);
}
.rsvp-photo-echo::after{
  background:
    linear-gradient(90deg,rgba(12,11,10,.04) 0%,rgba(12,11,10,.02) 62%,rgba(245,240,232,.34) 100%),
    linear-gradient(180deg,rgba(12,11,10,.03),rgba(12,11,10,.26));
}
.rsvp-paper{
  margin-left:44vw;
  width:56vw;
  min-height:100svh;
  padding:clamp(84px,8.5vw,132px) clamp(48px,6.4vw,96px);
  align-content:center;
  border-left:1px solid rgba(122,101,74,.14);
}
.rsvp-paper::before{
  inset:30px 30px 30px 0;
  border:0;
  border-top:1px solid rgba(128,103,68,.17);
  border-bottom:1px solid rgba(128,103,68,.17);
}
.rsvp-paper::after{opacity:.22}
.rsvp-monogram{right:clamp(46px,5.3vw,86px);top:48px;color:#8b704d}
.rsvp-step{width:min(720px,100%);margin-inline:auto}
.rsvp-step-choice h2{
  max-width:650px;
  font-size:clamp(4.6rem,6.8vw,7.8rem);
  line-height:.79;
}
.rsvp-step-choice p{max-width:460px}
.rsvp-choice-grid{
  max-width:610px;
  display:grid;
  grid-template-columns:1fr;
  gap:0;
  margin-top:2.25rem;
  border-top:1px solid rgba(65,57,48,.18);
}
.rsvp-choice{
  min-height:72px;
  border:0;
  border-bottom:1px solid rgba(65,57,48,.18);
  padding:0 4px;
  background:transparent;
}
.rsvp-choice:hover{
  background:transparent;
  color:#8f7452;
  padding-left:12px;
}
.rsvp-choice b{transition:transform .3s var(--ease)}
.rsvp-choice:hover b{transform:translateX(-4px)}

@media(max-width:900px) and (min-width:681px){
  .rsvp-photo-echo{width:40vw}
  .rsvp-paper{margin-left:40vw;width:60vw;padding-left:6vw;padding-right:6vw}
  .rsvp-step-choice h2{font-size:clamp(4rem,7.3vw,6.5rem)}
}

@media(max-width:680px){
  .day-gallery-wipe{
    clip-path:polygon(0 8%,100% 0,100% 100%,0 100%);
    transform:translate3d(0,var(--day-wipe-y,106%),0);
  }
  .day-gallery-wipe::before{
    inset:0 0 auto 0;
    width:auto;
    height:14svh;
    background:linear-gradient(180deg,rgba(246,241,233,.08),rgba(246,241,233,0));
    transform:translateY(-20%);
  }

  .rsvp-section{min-height:auto;background:#f5f0e8}
  .rsvp-photo-echo{
    position:relative;
    top:auto;
    width:100%;
    height:45svh;
    background-position:center 38%;
  }
  .rsvp-paper{
    margin:0;
    width:100%;
    min-height:92svh;
    padding:76px 24px 58px;
    border:0;
  }
  .rsvp-paper::before{inset:14px 20px;border-top:1px solid rgba(128,103,68,.14);border-bottom:1px solid rgba(128,103,68,.14)}
  .rsvp-monogram{right:28px;top:34px}
  .rsvp-step{width:100%}
  .rsvp-step-choice h2{font-size:clamp(3.25rem,14vw,5rem);max-width:92vw}
  .rsvp-choice-grid{max-width:none;margin-top:1.7rem}
  .rsvp-choice{min-height:66px}
}
/* ============================================================
   V10.4 — RSVP -> FINALE SEAMLESS PHOTO TAKEOVER
   A single viewport-sized photograph rises over the stationery and
   hands off to the finale with an identical crop/grade.
   ============================================================ */
.rsvp-section{
  min-height:156vh;
}
.rsvp-to-finale{
  position:fixed;
  z-index:60;
  inset:0;
  height:100svh;
  clip-path:none;
  background:#11110f;
  transform:translate3d(0,var(--rsvp-final-y,100%),0);
  opacity:var(--rsvp-final-o,1);
  overflow:hidden;
  pointer-events:none;
  will-change:transform;
}
.rsvp-to-finale-image{
  position:absolute;
  inset:0;
  background:var(--rsvp-photo,none) center 42%/cover no-repeat;
  filter:saturate(.68) contrast(1.03);
  transform:scale(var(--rsvp-final-s,1.035));
  transform-origin:center center;
  will-change:transform;
}
.rsvp-to-finale-image::after,
.finale-shade{
  background:
    linear-gradient(90deg,rgba(10,9,8,.70),rgba(10,9,8,.28) 60%,rgba(10,9,8,.16)),
    linear-gradient(180deg,rgba(10,9,8,.08),rgba(10,9,8,.55));
}
.finale-photo img{
  object-position:center 42%;
  filter:saturate(.68) contrast(1.03);
}
/* Hide any one-pixel subpixel boundary when the sticky finale takes ownership. */
.finale-sequence{
  margin-top:-1px;
}

@media(max-width:680px){
  /* Give the takeover enough scroll runway on phones without stretching the form. */
  .rsvp-section{
    min-height:166svh;
    padding-bottom:28svh;
  }
  .rsvp-to-finale{
    height:100svh;
  }
  .rsvp-to-finale-image{
    background-position:center 42%;
  }
}

@media(prefers-reduced-motion:reduce){
  .rsvp-section{min-height:auto!important;padding-bottom:0!important}
  .rsvp-to-finale{
    position:relative!important;
    inset:auto!important;
    height:62vh!important;
    transform:none!important;
    margin-top:0;
  }
  .rsvp-to-finale-image{transform:none!important}
}

/* ============================================================
   V11 — EDITORIAL CONTINUITY / FINAL ART-DIRECTION PASS
   Keeps the existing cinematic architecture, removes visual clutter,
   closes dead scroll runways, and gives mobile its own choreography.
   ============================================================ */

/* Story: one year, one message, one photograph. No competing ghost type. */
.story-year-ghost,.story-kicker-ghost{display:none!important}
.story-media{transform:scale(var(--story-media-s,1.03));overflow:hidden}
.story-photo{
  transform:translate3d(var(--photo-x,0px),var(--photo-y,0px),0) scale(var(--photo-s,1.045))!important;
  transform-origin:center center;
}
.story-copy-stack{height:min(54vh,540px)}
.story-copy-card .story-year{color:rgba(255,255,255,.13);font-size:clamp(6.6rem,10.5vw,11.5rem)}
.story-copy-card h2{max-width:660px;text-wrap:balance}
.story-copy-card p{max-width:475px}
.story-outro strong{font-size:clamp(5rem,9vw,9.8rem);text-wrap:balance}
.story-paper-wipe{background:linear-gradient(180deg,#f7f2e9 0%,#f3ede4 72%,#eee6dc 100%)}

/* Proposal: photographic editorial insert; never a floating 3D prop. */
.proposal-scene{pointer-events:none}
.proposal-editorial{right:5vw;top:9vh;width:min(35vw,540px);height:78vh}
.proposal-detail{inset:0 0 11vh 0;box-shadow:0 28px 76px rgba(0,0,0,.20)}
.proposal-detail img{filter:saturate(.72) contrast(1.03)}
.proposal-detail-edge{position:absolute;inset:18px;border:1px solid rgba(255,255,255,.18);pointer-events:none}
.proposal-note{left:-5vw;right:3vw;bottom:0;padding:22px 26px 24px;background:rgba(247,242,234,.97);box-shadow:0 16px 50px rgba(0,0,0,.12)}
.proposal-note small{letter-spacing:.30em}
.proposal-note strong{font-size:clamp(2.15rem,3vw,3.5rem);line-height:.88}
.proposal-light{opacity:calc(var(--proposal-light-o,0) * .65)}

/* Wedding day: imagery changes with the active moment instead of one static picture. */
.event-photo{background:#d3cabd;isolation:isolate}
.event-photo-stack{position:absolute;inset:0;overflow:hidden}
.event-photo-frame{
  position:absolute;inset:-2%;width:104%;height:104%;object-fit:cover;
  opacity:0;transform:scale(1.065) translate3d(0,8px,0);
  transition:opacity .72s ease,transform 1.15s var(--ease);
  filter:saturate(.66) contrast(1.02);
}
.event-photo-frame.active{opacity:1;transform:scale(1.02) translate3d(0,0,0)}
.event-photo::after{z-index:2;background:linear-gradient(180deg,transparent 48%,rgba(20,18,16,.32))}
.event-photo>span{z-index:3}
.event-row{transition:color .35s ease}
.event-row.active{color:#2e2924}
.event-row.active time{color:#9a7c52}
.event-row.active h3{transform:translateX(4px)}
.event-row h3{transition:transform .35s var(--ease),color .35s ease}

/* Dress palette: actual editorial/fabric samples rather than a flat colour block. */
.palette-editorial{
  right:5.5vw;top:18vh;width:min(45vw,690px);height:64vh;
  display:grid;grid-template-columns:repeat(5,1fr);align-items:center;gap:0;
  perspective:1000px;
}
.palette-swatch{
  position:relative;min-width:0;height:62%;background:transparent!important;
  transform:translate3d(var(--swatch-x,0px),var(--swatch-y,0px),0)
            rotate(var(--swatch-r,0deg)) scaleY(var(--swatch-s,0));
  transform-origin:bottom center;overflow:visible;
}
.palette-swatch i{
  position:absolute;inset:0;background:var(--swatch);border:1px solid rgba(74,61,47,.12);
  box-shadow:0 18px 44px rgba(71,55,36,.10);
}
.palette-swatch i::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(110deg,rgba(255,255,255,.22),transparent 36%,rgba(0,0,0,.025) 68%,rgba(255,255,255,.08));
  pointer-events:none;
}
.palette-swatch span{
  left:0;bottom:-48px;transform:none;width:100%;display:flex;flex-direction:column;gap:5px;
  font-size:.44rem;letter-spacing:.16em;text-transform:uppercase;color:#6f655b;
}
.palette-swatch span b{font-weight:400;font-size:.38rem;letter-spacing:.20em;color:#ad9169}
.palette-swatch:nth-child(1){height:58%;--swatch-x:18px;--swatch-y:18px;--swatch-r:-4deg}.palette-swatch:nth-child(2){height:72%;--swatch-x:8px;--swatch-y:8px;--swatch-r:-2deg}.palette-swatch:nth-child(3){height:86%;--swatch-x:0px;--swatch-y:0px;--swatch-r:0deg}.palette-swatch:nth-child(4){height:72%;--swatch-x:-8px;--swatch-y:8px;--swatch-r:2deg}.palette-swatch:nth-child(5){height:58%;--swatch-x:-18px;--swatch-y:18px;--swatch-r:4deg}

/* Day -> gallery: a real full-bleed scene takeover, never a floating rectangle. */
.day-gallery-wipe{clip-path:none!important;inset:-2px!important;transform:translate3d(var(--day-wipe-x,106%),0,0)!important;background:#121210}
.day-gallery-wipe::before{width:10vw;background:linear-gradient(90deg,rgba(245,240,232,.10),transparent)}

/* Gallery: active photograph owns the visual field; ambient caption stays sharp. */
.gallery-ghost-caption{
  position:absolute;z-index:1;left:3vw;right:3vw;bottom:-.06em;
  font:400 clamp(8rem,18vw,19rem)/.72 var(--serif);letter-spacing:-.07em;
  color:#fff;opacity:.026;white-space:nowrap;pointer-events:none;transform:translate3d(var(--gallery-ghost-x,0),0,0)
}
.gallery-intro{z-index:5}
.gallery-track{z-index:3}
.gallery-card{transition:opacity .42s ease,transform .7s var(--ease);transform:translateY(var(--card-y,0)) rotate(var(--card-r,0deg)) scale(.985)}
.gallery-card.active{transform:translateY(var(--card-y,0)) rotate(0deg) scale(1);opacity:1}
.gallery-card:not(.active){opacity:.78}
.gallery-card figcaption{transition:color .3s ease,transform .35s var(--ease)}
.gallery-card.active figcaption{color:#e3cda7;transform:translateX(4px)}
.gallery-card img{transform:scale(1.015)}
.gallery-card.active img{transform:scale(1.045)}
.gallery-transition-photo{box-shadow:0 24px 72px rgba(0,0,0,.24)}
.gallery-transition-paper{box-shadow:0 24px 76px rgba(0,0,0,.16)}
.gallery-rsvp-wipe{background:#f5f0e8}

/* RSVP: a sticky editorial spread on desktop. The photo itself expands to become the finale. */
.rsvp-section{height:190vh!important;min-height:0!important;padding:0!important;background:#f5f0e8;overflow:visible!important}
.rsvp-stage{position:relative;top:auto;height:auto;overflow:visible;background:#f5f0e8;isolation:isolate}
.rsvp-photo-echo{
  position:absolute!important;z-index:3!important;inset:0!important;width:auto!important;height:auto!important;
  background:var(--rsvp-photo,none) center 42%/cover no-repeat!important;
  clip-path:inset(0 var(--rsvp-photo-clip,56%) 0 0);
  transform:scale(var(--rsvp-photo-s,1.02))!important;transform-origin:center center;
  filter:none!important;opacity:1!important;will-change:clip-path,transform;
}
.rsvp-photo-echo::after{
  background:linear-gradient(90deg,rgba(10,9,8,.14),rgba(10,9,8,.04) 38%,rgba(10,9,8,var(--rsvp-photo-shade,.22)))!important
}
.rsvp-photo-caption{
  position:absolute;z-index:2;left:5.5vw;bottom:8vh;width:min(340px,28vw);color:#fff;
  opacity:var(--rsvp-photo-caption-o,1);transform:translate3d(0,0,0);transition:opacity .2s linear;
}
.rsvp-photo-caption span{display:block;font-size:.42rem;letter-spacing:.32em;color:#e0c79d;margin-bottom:.8rem}
.rsvp-photo-caption strong{display:block;font:400 clamp(1.6rem,2.2vw,2.5rem)/1.04 var(--serif);letter-spacing:-.02em}
.rsvp-paper{
  position:absolute!important;z-index:2!important;right:0!important;top:0!important;margin:0!important;
  width:56vw!important;height:100svh!important;min-height:0!important;
  padding:clamp(74px,7vw,112px) clamp(52px,6vw,92px)!important;
  overflow:hidden!important;overscroll-behavior:auto!important;
}
.rsvp-paper::before{inset:28px 28px 28px 0}
.rsvp-to-finale{display:none!important}
.rsvp-choice{min-height:68px}
.rsvp-choice:focus-visible,.submit-rsvp:focus-visible,.rsvp-back:focus-visible{outline:1px solid #9b7e57;outline-offset:4px}

/* Finale: same photograph, controlled push, one light sweep, then quiet brand credit. */
.finale-stage{isolation:isolate}
.finale-photo img{transform:translate3d(var(--final-photo-x,0px),0,0) scale(var(--final-photo-s,1.01))!important;transform-origin:center center}
.finale-light-sweep{
  position:absolute;z-index:3;inset:-8%;pointer-events:none;
  background:linear-gradient(110deg,transparent 36%,rgba(255,238,205,.13) 48%,transparent 60%);
  transform:translate3d(var(--final-light-x,-130%),0,0);opacity:var(--final-light-o,0);will-change:transform,opacity
}
.finale-end-title{
  position:absolute;z-index:6;left:50%;top:50%;transform:translate(-50%,-50%) translateY(var(--final-end-y,20px));
  text-align:center;color:#f7f1e7;opacity:var(--final-end-o,0);pointer-events:none
}
.finale-end-title span{display:block;font-size:.45rem;letter-spacing:.36em;color:#d3ba91;margin-bottom:1rem}
.finale-end-title strong{display:block;font:400 clamp(4.2rem,8vw,8.5rem)/.82 var(--serif);letter-spacing:-.05em;font-style:italic}

/* Creator: feels like end credits rather than a sales card. */
.creator{min-height:100svh;padding-top:clamp(110px,13vw,190px)}
.creator-meta{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:2.1rem}
.creator-meta span{font-size:.42rem;letter-spacing:.22em;border:1px solid rgba(255,255,255,.15);padding:.65rem .8rem;color:rgba(255,255,255,.6)}
.creator-link{margin-top:.2rem}

/* Medium screens keep the same editorial composition with calmer geometry. */
@media(max-width:900px) and (min-width:681px){
  .proposal-editorial{right:3vw;width:39vw}
  .palette-editorial{right:4vw;width:46vw}
  .rsvp-paper{width:60vw!important}
  .rsvp-photo-echo{clip-path:inset(0 var(--rsvp-photo-clip,60%) 0 0)}
  .rsvp-photo-caption{left:4vw;width:30vw}
}

/* Mobile is intentionally a different choreography — no desktop scene is simply shrunk. */
@media(max-width:680px){
  .story-sequence{height:455vh}
  .story-copy{left:54px;right:18px;bottom:8.5vh}
  .story-copy-stack{height:43vh}
  .story-copy-card .story-year{font-size:17vw;margin-bottom:.2rem}
  .story-copy-card h2{font-size:clamp(2.45rem,10.7vw,4rem);line-height:.89}
  .story-copy-card p{font-size:.88rem;line-height:1.52;max-width:96%}
  .story-rail{left:12px;width:28px;top:9vh;bottom:9vh}
  .story-rail>span{font-size:.36rem}.story-rail strong{font-size:.36rem}
  .proposal-editorial{right:16px;left:54px;top:10vh;width:auto;height:42vh}
  .proposal-detail{inset:0 0 8vh 0}
  .proposal-detail-edge{inset:12px}
  .proposal-note{left:-18px;right:8px;bottom:0;padding:14px 16px 16px}
  .proposal-note small{font-size:.36rem}.proposal-note strong{font-size:1.75rem}.proposal-note span{font-size:.72rem}
  .story-outro strong{font-size:18vw}

  .day-sequence{height:410vh}
  .event-panel{padding-top:0}
  .event-photo{display:block!important;right:18px;top:15vh;width:52vw;height:37svh;opacity:.34;box-shadow:none}
  .event-photo::after{background:linear-gradient(180deg,rgba(245,240,232,.06),rgba(245,240,232,.68))}
  .event-list{left:44px;top:35vh;width:calc(100vw - 66px);z-index:4}
  .event-route{left:20px;top:37vh;bottom:10vh}
  .event-row{grid-template-columns:66px 1fr;padding:.8rem 0 1rem}
  .event-row time{font-size:2rem}.event-row h3{font-size:1.38rem}.event-row p{font-size:.62rem;line-height:1.5}

  .dress-copy{top:12vh}
  .dress-copy h2{font-size:14vw}
  .palette-editorial{left:22px;right:22px;top:auto;bottom:12vh;width:auto;height:31vh;grid-template-columns:repeat(5,1fr)}
  .palette-swatch{transform:translate3d(0,var(--swatch-y,0px),0) rotate(var(--swatch-r,0deg)) scaleY(var(--swatch-s,0))}
  .palette-swatch:nth-child(1){--swatch-r:-3deg}.palette-swatch:nth-child(2){--swatch-r:-1.5deg}.palette-swatch:nth-child(3){--swatch-r:0deg}.palette-swatch:nth-child(4){--swatch-r:1.5deg}.palette-swatch:nth-child(5){--swatch-r:3deg}
  .palette-swatch span{bottom:-39px;font-size:.32rem;letter-spacing:.08em}.palette-swatch span b{font-size:.30rem}

  .day-gallery-wipe{transform:translate3d(0,var(--day-wipe-y,106%),0)!important}

  .gallery-ghost-caption{display:none}
  .gallery-card,.gallery-card.tall,.gallery-card.wide{opacity:1!important;transform:none!important}
  .gallery-card.active{transform:none!important}
  .gallery-card img,.gallery-card.active img{transform:scale(1.015)!important}

  .rsvp-section{height:auto!important;min-height:0!important;overflow:visible!important;background:#f5f0e8}
  .rsvp-stage{position:relative;top:auto;height:auto;overflow:visible;background:#f5f0e8}
  .rsvp-photo-echo{
    position:relative!important;inset:auto!important;width:100%!important;height:46svh!important;
    clip-path:none!important;transform:none!important;background-position:center 38%!important;z-index:1!important
  }
  .rsvp-photo-caption{left:22px;right:22px;bottom:24px;width:auto}.rsvp-photo-caption strong{font-size:1.55rem;max-width:280px}
  .rsvp-paper{
    position:relative!important;right:auto!important;top:auto!important;width:100%!important;height:auto!important;min-height:92svh!important;
    padding:74px 24px 58px!important;overflow:visible!important;transform:none!important;opacity:1!important;border:0!important
  }
  .rsvp-paper::before{inset:14px 20px}
  .rsvp-to-finale{
    display:block!important;position:relative!important;inset:auto!important;height:78svh!important;width:100%!important;
    transform:none!important;opacity:1!important;background:#11110f;overflow:hidden
  }
  .rsvp-to-finale-image{position:absolute;inset:0;background:var(--rsvp-photo,none) center 42%/cover no-repeat;transform:scale(1.015)!important}
  .rsvp-to-finale-image::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(10,9,8,.08),rgba(10,9,8,.52))}

  .finale-sequence{height:175vh}
  .finale-copy{left:22px;right:22px;bottom:9vh}
  .finale-copy h2{font-size:14.6vw;line-height:.80}
  .finale-end-title{width:90vw}.finale-end-title strong{font-size:13.5vw}
  .creator-meta{gap:7px}.creator-meta span{font-size:.34rem;padding:.55rem .6rem}
}

@media(max-width:360px){
  .story-copy{left:48px;right:14px}.story-copy-card h2{font-size:10vw}.story-copy-card p{font-size:.82rem}
  .event-list{left:38px;width:calc(100vw - 52px)}.event-route{left:16px}.event-photo{right:12px;width:56vw}
  .rsvp-step-choice h2{font-size:13.5vw}.rsvp-paper{padding-inline:20px!important}
  .finale-copy h2{font-size:14vw}
}

@media(prefers-reduced-motion:reduce){
  .story-year-ghost,.story-kicker-ghost,.gallery-ghost-caption,.finale-light-sweep,.finale-end-title{display:none!important}
  .event-photo-frame{transition:none!important}.event-photo-frame:first-child{opacity:1!important}
  .rsvp-section{height:auto!important}.rsvp-stage{position:relative!important;height:auto!important;overflow:visible!important}
  .rsvp-photo-echo{position:relative!important;width:100%!important;height:52vh!important;clip-path:none!important;transform:none!important}
  .rsvp-paper{position:relative!important;width:100%!important;height:auto!important;min-height:auto!important;overflow:visible!important}
  .rsvp-to-finale{display:none!important}
}

/* ============================================================
   V11.1 — SEAMLESS HANDOFFS / NO DEAD FRAMES
   Transitional surfaces carry the next chapter title so the sticky
   stages never end on an empty colour field.
   ============================================================ */
.float-opening-a,.float-opening-b{opacity:var(--opening-float-o,.055)}
.opening-iris::after{content:"OUR JOURNEY";opacity:var(--iris-copy-o,0);font-size:.46rem;letter-spacing:.38em;color:#d5bd93}
.opening-iris::before{
  content:"CHAPTER 02";position:absolute;z-index:2;left:50%;top:calc(50% - 26px);
  transform:translate(-50%,-50%);font:500 .36rem/1 var(--sans);letter-spacing:.28em;
  color:rgba(255,255,255,.42);opacity:var(--iris-copy-o,0);white-space:nowrap;
}
.story-paper-teaser{
  position:absolute;inset:0;display:grid;place-content:center;text-align:center;color:#332e29;
  opacity:var(--story-paper-teaser-o,0);transform:translate3d(0,var(--story-paper-teaser-y,20px),0);
  pointer-events:none;
}
.story-paper-teaser span{font-size:.64rem;letter-spacing:.24em;color:#967c57;margin-bottom:1.25rem}
.story-paper-teaser strong{font:500 clamp(2.8rem,5.2vw,5.8rem)/.9 var(--serif);letter-spacing:.018em;color:#332e29}
.story-paper-teaser::after{content:"";width:min(92px,14vw);height:1px;background:rgba(150,124,87,.46);margin:1.5rem auto 0}
.day-gallery-teaser{
  position:absolute;z-index:3;inset:0;display:grid;place-content:center;text-align:center;color:#f6f0e7;
  opacity:var(--day-gallery-teaser-o,0);transform:translate3d(0,var(--day-gallery-teaser-y,18px),0);
  pointer-events:none;
}
.day-gallery-teaser span{font-size:.38rem;letter-spacing:.32em;color:#c9ae7d;margin-bottom:.9rem}
.day-gallery-teaser strong{font:400 clamp(3.8rem,7vw,8rem)/.8 var(--serif);font-style:italic;letter-spacing:-.045em}
.gallery-rsvp-teaser{
  position:absolute;z-index:2;inset:0;display:grid;place-content:center;text-align:center;color:#322e29;
  opacity:var(--gallery-rsvp-teaser-o,0);transform:translate3d(0,var(--gallery-rsvp-teaser-y,18px),0);
  pointer-events:none;
}
.gallery-rsvp-teaser span{font-size:.4rem;letter-spacing:.34em;color:#977a53;margin-bottom:1rem}
.gallery-rsvp-teaser strong{font:500 clamp(4.2rem,8vw,8.8rem)/.78 var(--serif);letter-spacing:-.052em}

/* RSVP stage must explicitly own the viewport width. Absolute children are
   intentionally taken out of flow, so leaving this to intrinsic sizing can
   collapse the sticky containing block in Chromium. */
.rsvp-stage{width:100%;max-width:none}

@media(max-width:680px){
  .opening-sequence{height:330vh}
  .story-paper-teaser strong{font-size:10.5vw}
  .story-paper-teaser span{font-size:.52rem}
  .day-gallery-teaser strong{font-size:13vw}.day-gallery-teaser span{font-size:.32rem}
  .gallery-rsvp-teaser strong{font-size:13vw}.gallery-rsvp-teaser span{font-size:.32rem}
}

@media(prefers-reduced-motion:reduce){
  .story-paper-teaser,.day-gallery-teaser,.gallery-rsvp-teaser{display:none!important}
}

/* V11.2 — Gallery -> RSVP uses the same split composition as the RSVP itself. */
@media(min-width:681px){
  .gallery-rsvp-wipe::before{
    content:"";position:absolute;z-index:1;left:0;top:0;bottom:0;width:44%;
    background:var(--rsvp-photo,none) center 42%/cover no-repeat;
    opacity:var(--gallery-rsvp-photo-o,0);
  }
  .gallery-rsvp-wipe::after{
    content:"";position:absolute;z-index:1;left:44%;top:0;bottom:0;width:1px;
    background:rgba(126,102,72,.16);opacity:var(--gallery-rsvp-photo-o,0);
  }
  .gallery-rsvp-teaser{left:44%;width:56%;right:auto;place-content:center start;text-align:left;padding:7vw}
}
@media(max-width:680px){
  .rsvp-to-finale{height:100svh!important}
  .rsvp-to-finale-image{background-position:center 42%!important;transform:scale(1.005)!important}
}

/* V11.3 — RSVP handoffs use paper/ink continuity rather than duplicated photos. */
@media(min-width:681px){
  .gallery-rsvp-wipe::before{
    background:
      radial-gradient(circle at 72% 20%,rgba(245,237,224,.12),transparent 30%),
      linear-gradient(145deg,#9b8a78,#746758 68%,#655a4e);
  }
  .rsvp-photo-echo::before{
    content:"";position:absolute;z-index:1;inset:0;
    background:
      radial-gradient(circle at 72% 20%,rgba(245,237,224,.12),transparent 30%),
      linear-gradient(145deg,#9b8a78,#746758 68%,#655a4e);
    opacity:var(--rsvp-photo-cover-o,1);pointer-events:none;
  }
  .rsvp-photo-echo::after{z-index:1}
  .rsvp-photo-caption{z-index:2}
}
@media(max-width:680px){
  .rsvp-to-finale{display:none!important}
  .finale-stage::before{
    content:"";position:absolute;z-index:7;inset:-1px;background:#f5f0e8;
    transform:translate3d(0,var(--final-paper-y,0%),0);will-change:transform;pointer-events:none;
    border-bottom:1px solid rgba(152,125,88,.18);
  }
}
@media(prefers-reduced-motion:reduce){
  .finale-stage::before{display:none!important}
}

/* Mobile RSVP ends with the interaction itself — no decorative empty paper runway. */
@media(max-width:680px){
  .rsvp-paper{min-height:auto!important;padding-bottom:64px!important}
  .rsvp-step-choice{padding:28px 0 18px}
  .rsvp-form{padding-top:10px}
}

/* ============================================================
   V11.4 — MOBILE SEAM POLISH
   Keep chapter handoffs authored even while sticky stages release.
   ============================================================ */
@media(max-width:680px){
  /* The opening sticky scene releases before the story sticky scene reaches
     the top of the viewport. Give that physical seam an editorial title so
     it never reads as an empty dark band. */
  .opening-sequence::after{
    content:"02  /  OUR JOURNEY";
    position:absolute;z-index:14;left:0;right:0;bottom:0;height:54svh;
    display:grid;place-items:center;padding-bottom:5svh;
    font:500 .35rem/1 var(--sans);letter-spacing:.34em;color:rgba(220,198,159,.72);
    text-transform:uppercase;pointer-events:none;
    background:linear-gradient(180deg,rgba(21,21,19,0),rgba(21,21,19,.08));
  }

  /* RSVP hands directly into the closing photograph. A short ivory-to-image
     veil preserves paper continuity without creating a blank full-screen
     curtain before the finale appears. */
  .finale-stage::before{
    display:block!important;content:"";position:absolute;z-index:7;
    left:-1px;right:-1px;top:-1px;bottom:auto;height:34svh;
    background:linear-gradient(180deg,#f5f0e8 0%,rgba(245,240,232,.92) 24%,rgba(245,240,232,.42) 64%,rgba(245,240,232,0) 100%);
    transform:none!important;pointer-events:none;border:0!important;
  }
}
@media(prefers-reduced-motion:reduce) and (max-width:680px){
  .opening-sequence::after{display:none!important}
  .finale-stage::before{display:none!important}
}

/* V11.5 — keep the transformed hero/proposal/finale imagery on the compositor.
   Colour mood comes from authored overlays instead of animated image filters. */
.proposal-detail img,.finale-photo img{filter:none!important}

/* V11.2 image resilience — no empty black frames while remote demo photography resolves. */
#heroImage,.story-photo,.event-photo-frame,.venue-image img,.gallery-card img,#proposalDetailImage,#finaleImage{
  background:#d8d0c5;
}
img[data-image-guard="1"]{transition:opacity .45s ease}
img[data-image-guard="1"]:not(.image-ready):not(.image-failed){opacity:.001}
img[data-image-guard="1"].image-ready,img[data-image-guard="1"].image-failed{opacity:1}
.event-photo-frame[data-image-guard="1"]:not(.active){opacity:0!important}
.story-photo[data-image-guard="1"]{opacity:var(--photo-o,0)!important}
.story-photo[data-image-guard="1"].image-failed{object-fit:cover}
@media (prefers-reduced-motion:reduce){img[data-image-guard="1"]{transition:none!important}}


/* ============================================================
   V11.4 — CONTINUOUS SCROLL + LEGIBILITY PASS
   Final overrides intentionally live last so older version rules cannot
   re-introduce tiny text, nested scrolling, or overlong pinned plateaus.
   ============================================================ */

/* Faster cinematic pacing: enough scroll to animate, never enough to feel frozen. */
@media(min-width:901px){
  .opening-sequence{height:410vh!important}
  .story-sequence{height:520vh!important}
  .day-sequence{height:465vh!important}
  .gallery-sequence{height:430vh!important}
  .finale-sequence{height:165vh!important}
  .rsvp-section{height:148vh!important}
}
@media(max-width:900px) and (min-width:681px){
  .opening-sequence{height:370vh!important}
  .story-sequence{height:470vh!important}
  .day-sequence{height:425vh!important}
  .gallery-sequence{height:390vh!important}
  .finale-sequence{height:158vh!important}
  .rsvp-section{height:145vh!important}
}
@media(max-width:680px){
  .opening-sequence{height:315vh!important}
  .story-sequence{height:420vh!important}
  .day-sequence{height:365vh!important}
  .finale-sequence{height:150vh!important}
}

/* RSVP never becomes a nested scrolling container. */
@media(min-width:681px){
  .rsvp-paper{overflow:hidden!important;overscroll-behavior:auto!important}
  .rsvp-section.has-answer{height:auto!important;min-height:100svh!important;overflow:visible!important}
  .rsvp-section.has-answer .rsvp-stage{position:relative!important;top:auto!important;height:auto!important;min-height:100svh!important;overflow:visible!important}
  .rsvp-section.has-answer .rsvp-photo-echo{position:absolute!important;inset:0!important;height:100%!important;clip-path:inset(0 56% 0 0)!important;transform:scale(1.02)!important}
  .rsvp-section.has-answer .rsvp-paper{position:relative!important;top:auto!important;right:auto!important;margin-left:44vw!important;width:56vw!important;height:auto!important;min-height:100svh!important;overflow:visible!important;opacity:1!important;transform:none!important}
}
@media(max-width:900px) and (min-width:681px){
  .rsvp-section.has-answer .rsvp-photo-echo{clip-path:inset(0 60% 0 0)!important}
  .rsvp-section.has-answer .rsvp-paper{margin-left:40vw!important;width:60vw!important}
}

/* Gallery touch area can pan horizontally without swallowing vertical page scroll. */
@media(max-width:680px){
  .gallery-track{touch-action:pan-x pan-y;overscroll-behavior-x:contain;overscroll-behavior-y:auto;scroll-padding-inline:24px}
}

/* Remove obsolete second RSVP takeover completely. */
.gallery-rsvp-wipe,.gallery-rsvp-teaser{display:none!important}

/* Readability — editorial, not microscopic. */
.hero-overline{font-size:clamp(.78rem,.7vw,.92rem)!important;letter-spacing:.20em!important;font-weight:500}
.hero-editorial>p{font-size:clamp(1rem,1.05vw,1.16rem)!important;line-height:1.75!important}
.hero-details{font-size:clamp(.72rem,.7vw,.84rem)!important;letter-spacing:.14em!important;font-weight:500}
.invite-paper>small,.date-kicker{font-size:clamp(.72rem,.7vw,.86rem)!important;letter-spacing:.22em!important;font-weight:500}
.invite-paper p{font-size:clamp(1.05rem,1.2vw,1.28rem)!important;line-height:1.75!important}
.invite-date{font-size:clamp(.72rem,.7vw,.84rem)!important;letter-spacing:.16em!important}
.countdown-inline span{font-size:clamp(.68rem,.64vw,.78rem)!important;letter-spacing:.13em!important}
.scroll-cue{font-size:.68rem!important;letter-spacing:.18em!important}
.story-rail>span,.story-rail strong{font-size:.64rem!important;letter-spacing:.14em!important}
.story-copy-card small{font-size:clamp(.72rem,.66vw,.82rem)!important;letter-spacing:.16em!important;font-weight:500}
.story-copy-card p{font-family:var(--sans)!important;font-size:clamp(.96rem,1vw,1.08rem)!important;line-height:1.72!important;font-weight:400}
.proposal-note small{font-size:.68rem!important;letter-spacing:.16em!important}
.proposal-note span{font-family:var(--sans);font-size:.88rem!important;line-height:1.55}
.story-outro>span,.story-outro>small,.story-paper-teaser span{font-size:.70rem!important;letter-spacing:.18em!important}
.day-heading>span,.venue-copy>span,.dress-copy>span,.gallery-intro>span{font-size:.72rem!important;letter-spacing:.20em!important;font-weight:500}
.event-row small{font-size:.68rem!important;letter-spacing:.14em!important}
.event-row p{font-family:var(--sans)!important;font-size:clamp(.90rem,.9vw,1rem)!important;line-height:1.62!important}
.event-photo>span{font-size:.66rem!important;letter-spacing:.15em!important}
.map-label{font-size:.64rem!important;letter-spacing:.14em!important}
.venue-copy small{font-family:var(--sans)!important;font-size:.88rem!important;line-height:1.65!important}
.dress-copy p{font-family:var(--sans)!important;font-size:clamp(.96rem,1vw,1.08rem)!important;line-height:1.72!important}
.palette-swatch span{font-size:.66rem!important;letter-spacing:.08em!important}
.palette-swatch span b{font-size:.62rem!important}
.gallery-card figcaption{font-size:.68rem!important;letter-spacing:.16em!important;font-weight:500}
.gallery-progress span{font-size:.68rem!important}
.gallery-transition-paper span,.gallery-transition-paper small{font-size:.70rem!important;letter-spacing:.18em!important}
.rsvp-photo-caption span{font-size:.70rem!important;letter-spacing:.20em!important}
.rsvp-step-choice small,.rsvp-form-head>small{font-size:.72rem!important;letter-spacing:.20em!important;font-weight:500}
.rsvp-step-choice p{font-family:var(--sans)!important;font-size:1rem!important;line-height:1.65!important}
.rsvp-choice{font-size:.76rem!important;letter-spacing:.10em!important;font-weight:500;min-height:74px!important}
.rsvp-back{font-size:.72rem!important;letter-spacing:.10em!important;font-weight:500}
.field>span{font-size:.72rem!important;letter-spacing:.12em!important;font-weight:500}
.field input,.field textarea,.field select{font-family:var(--sans)!important;font-size:clamp(1rem,1.2vw,1.15rem)!important;line-height:1.5!important}
.submit-rsvp{font-size:.76rem!important;letter-spacing:.13em!important;font-weight:600}
.demo-note{font-size:.70rem!important;letter-spacing:.08em!important;line-height:1.5}
.finale-copy>span,.finale-date-mark,.finale-credit-cue span,.finale-end-title span{font-size:.70rem!important;letter-spacing:.18em!important}
.finale-copy p{font-family:var(--sans)!important;font-size:clamp(.96rem,1vw,1.08rem)!important;line-height:1.7!important}
.creator-meta span{font-size:.68rem!important;letter-spacing:.12em!important}

@media(max-width:680px){
  .hero-overline{font-size:.72rem!important;letter-spacing:.16em!important}
  .hero-editorial>p{font-size:.98rem!important;line-height:1.65!important}
  .hero-details{font-size:.68rem!important;letter-spacing:.10em!important;gap:.55rem!important}
  .invite-paper>small,.date-kicker{font-size:.68rem!important;letter-spacing:.16em!important}
  .invite-paper p{font-size:1rem!important;line-height:1.65!important}
  .invite-date{font-size:.66rem!important;letter-spacing:.10em!important}
  .countdown-inline span{font-size:.64rem!important}
  .story-rail>span,.story-rail strong{font-size:.54rem!important}
  .story-copy-card small{font-size:.68rem!important}
  .story-copy-card p{font-size:.92rem!important;line-height:1.6!important}
  .day-heading>span,.venue-copy>span,.dress-copy>span,.gallery-intro>span{font-size:.68rem!important}
  .event-row p{font-size:.86rem!important;line-height:1.55!important}
  .map-label{font-size:.56rem!important}
  .venue-copy small{font-size:.82rem!important}
  .dress-copy p{font-size:.92rem!important;line-height:1.62!important}
  .gallery-card figcaption{font-size:.66rem!important}
  .mobile-exit-copy span{font-size:.68rem!important;letter-spacing:.18em!important}
  .rsvp-photo-caption span{font-size:.66rem!important}
  .rsvp-step-choice small,.rsvp-form-head>small{font-size:.68rem!important}
  .rsvp-step-choice p{font-size:.94rem!important}
  .rsvp-choice{font-size:.74rem!important}
  .field>span{font-size:.68rem!important}
  .field input,.field textarea,.field select{font-size:1rem!important}
  .demo-note{font-size:.66rem!important}
  .finale-copy>span,.finale-date-mark,.finale-credit-cue span,.finale-end-title span{font-size:.66rem!important}
}


/* ============================================================
   V11.5 — RSVP SINGLE-SURFACE + NO-STICK FIX
   RSVP is normal document flow on every breakpoint. This removes
   sticky/compositor ghosting and prevents wheel/touch scroll traps.
   ============================================================ */
.gallery-to-rsvp,.gallery-transition-photo,.gallery-transition-paper{display:none!important}
.gallery-exit-wash{position:absolute;z-index:20;inset:0;background:#f7f2ea;color:#2b2824;transform:translate3d(0,var(--gallery-exit-y,102%),0);opacity:var(--gallery-exit-o,0);will-change:transform,opacity;display:grid;place-items:center;pointer-events:none}
.gallery-exit-wash::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 72% 28%,rgba(195,166,121,.16),transparent 34%),linear-gradient(180deg,rgba(255,255,255,.18),transparent 42%)}
.gallery-exit-note{position:relative;text-align:center;opacity:var(--gallery-exit-note-o,0);transform:translate3d(0,var(--gallery-exit-note-y,22px),0);will-change:transform,opacity;padding:28px}
.gallery-exit-note span{display:block;font-family:var(--sans);font-size:.78rem;line-height:1;letter-spacing:.20em;font-weight:600;color:#927650}
.gallery-exit-note strong{display:block;font:500 clamp(4rem,8vw,8rem)/.86 var(--serif);letter-spacing:-.05em;margin:1rem 0 1.15rem}
.gallery-exit-note small{display:block;font-family:var(--sans);font-size:1rem;line-height:1.6;color:#6f665e}

.rsvp-section,.rsvp-section.has-answer{position:relative!important;height:auto!important;min-height:100svh!important;padding:0!important;margin:0!important;overflow:clip!important;background:#f7f2ea!important;display:block!important}
.rsvp-section::before{display:none!important}
.rsvp-stage,.rsvp-section.has-answer .rsvp-stage{position:relative!important;top:auto!important;left:auto!important;right:auto!important;width:100%!important;height:auto!important;min-height:100svh!important;display:grid!important;grid-template-columns:minmax(0,44%) minmax(0,56%)!important;overflow:visible!important;background:#f7f2ea!important;isolation:isolate}
.rsvp-photo-echo,.rsvp-section.has-answer .rsvp-photo-echo{position:relative!important;inset:auto!important;left:auto!important;top:auto!important;width:100%!important;height:auto!important;min-height:100svh!important;margin:0!important;background:var(--rsvp-photo,none) center 42%/cover no-repeat!important;transform:none!important;clip-path:none!important;opacity:1!important;filter:none!important;box-shadow:none!important;overflow:hidden!important}
.rsvp-photo-echo::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(12,11,10,.05),rgba(12,11,10,.40))!important;z-index:0}
.rsvp-photo-caption{z-index:2!important}
.rsvp-paper,.rsvp-section.has-answer .rsvp-paper{position:relative!important;inset:auto!important;top:auto!important;right:auto!important;left:auto!important;margin:0!important;width:100%!important;height:auto!important;min-height:100svh!important;padding:clamp(82px,8vw,132px) clamp(48px,7vw,116px)!important;display:grid!important;align-content:center!important;background:#fbf8f2!important;transform:none!important;opacity:1!important;overflow:visible!important;box-shadow:none!important}
.rsvp-paper::before{inset:28px!important;border-color:rgba(125,98,62,.18)!important}
.rsvp-monogram{top:48px!important;font-size:.9rem!important}
.rsvp-step-choice{text-align:left!important;max-width:780px}
.rsvp-step-choice h2{font-size:clamp(4.6rem,7vw,8.2rem)!important;line-height:.86!important;margin:1.25rem 0 1.4rem!important}
.rsvp-step-choice p{max-width:520px}
.rsvp-choice-grid{grid-template-columns:1fr 1fr!important;gap:14px!important}
.rsvp-choice{min-height:82px!important}
.rsvp-form-head{text-align:left!important}
.rsvp-form-head h2{font-size:clamp(3.4rem,5vw,5.8rem)!important;line-height:.92!important}
.rsvp-back{margin-left:0!important;margin-right:0!important}
.rsvp-to-finale{display:none!important}
.rsvp-section.has-answer .rsvp-photo-echo{position:relative!important}
.rsvp-section.has-answer .rsvp-paper{margin:0!important;width:100%!important}

@media(max-width:900px){.rsvp-stage,.rsvp-section.has-answer .rsvp-stage{grid-template-columns:minmax(0,40%) minmax(0,60%)!important}.rsvp-paper,.rsvp-section.has-answer .rsvp-paper{padding:80px 42px!important}.rsvp-step-choice h2{font-size:clamp(4rem,8vw,6rem)!important}}
@media(max-width:680px){.gallery-exit-wash{display:none!important}.rsvp-section,.rsvp-section.has-answer{min-height:0!important;overflow:visible!important}.rsvp-stage,.rsvp-section.has-answer .rsvp-stage{display:block!important;min-height:0!important}.rsvp-photo-echo,.rsvp-section.has-answer .rsvp-photo-echo{height:44svh!important;min-height:300px!important;background-position:center 42%!important}.rsvp-photo-caption{left:22px!important;right:22px!important;bottom:24px!important;width:auto!important}.rsvp-paper,.rsvp-section.has-answer .rsvp-paper{min-height:0!important;padding:70px 22px 62px!important}.rsvp-paper::before{inset:14px!important}.rsvp-monogram{top:28px!important;right:22px!important;left:auto!important;transform:none!important;font-size:.72rem!important}.rsvp-step-choice h2{font-size:14vw!important;line-height:.88!important;margin:1rem 0 1.1rem!important}.rsvp-choice-grid{grid-template-columns:1fr!important;gap:10px!important;margin-top:1.6rem!important}.rsvp-choice{min-height:70px!important}.rsvp-form-head h2{font-size:10.5vw!important;line-height:.94!important}}


/* V11.5 scroll stability: shorter pin distances, no hidden wheel/touch capture. */
html{scroll-behavior:auto!important}
.sequence-stage{overscroll-behavior:auto;touch-action:pan-y}
@media(min-width:901px){
  .opening-sequence{height:370vh!important}
  .story-sequence{height:465vh!important}
  .day-sequence{height:410vh!important}
  .gallery-sequence{height:365vh!important}
  .finale-sequence{height:145vh!important}
}
@media(max-width:900px) and (min-width:681px){
  .opening-sequence{height:340vh!important}
  .story-sequence{height:425vh!important}
  .day-sequence{height:380vh!important}
  .gallery-sequence{height:340vh!important}
  .finale-sequence{height:140vh!important}
}
@media(max-width:680px){.sequence-stage{touch-action:auto}.gallery-track{touch-action:pan-x pan-y!important}}

/* V11.6.3 — Day section cleanup. Decorative background time/date removed completely. */
.day-heading,.day-ghost-time,.float-day{display:none!important;visibility:hidden!important;opacity:0!important;}
.day-sequence{height:360vh!important;}
.event-list{top:22vh;width:min(620px,46vw);}
.event-route{top:25vh;}
.event-photo{right:5vw;top:18vh;width:min(28vw,420px);height:60vh;}
.event-photo>span{display:none!important;}
@media(max-width:1100px){.day-sequence{height:345vh!important;}.event-list{width:54vw;}}
@media(max-width:900px){.day-sequence{height:325vh!important;}.event-list{top:20vh;width:calc(100vw - 78px);}.event-route{top:23vh;}.event-photo{display:none!important;}}
@media(max-width:680px){.day-sequence{height:300vh!important;}.event-list{top:18vh;}.event-route{top:21vh;}}
@media(prefers-reduced-motion:reduce){.day-heading,.day-ghost-time,.float-day{display:none!important;}}

/* ============================================================
   V11.9 — LATE-JOURNEY CINEMATIC CONTINUITY
   Gallery -> RSVP -> finale -> webXCode. Transform/opacity only.
   ============================================================ */

/* Gallery handoff: the last photographic world resolves into the RSVP split. */
@media(min-width:681px){
  .gallery-exit-wash{
    display:grid!important;grid-template-columns:44% 56%;place-items:stretch!important;
    padding:0!important;background:#f7f2ea!important;overflow:hidden!important;
  }
  .gallery-exit-wash::before{display:none!important}
  .gallery-exit-photo{
    position:relative;overflow:hidden;background:var(--rsvp-photo,linear-gradient(145deg,#827567,#4e463d)) center 42%/cover no-repeat;
    opacity:var(--gallery-exit-photo-o,1);transform:translate3d(var(--gallery-exit-photo-x,-32px),0,0) scale(var(--gallery-exit-photo-s,1.035));
    transform-origin:center;will-change:transform,opacity;
  }
  .gallery-exit-photo::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(11,10,9,.06),rgba(11,10,9,.36))}
  .gallery-exit-photo i{position:absolute;z-index:2;left:8%;top:9%;width:1px;height:var(--gallery-exit-line-h,0%);background:rgba(232,213,180,.72)}
  .gallery-exit-photo span{position:absolute;z-index:2;left:calc(8% + 14px);top:9%;font:600 .66rem/1 var(--sans);letter-spacing:.18em;color:#ead6b5;writing-mode:vertical-rl;opacity:var(--gallery-exit-photo-label-o,0)}
  .gallery-exit-note{
    align-self:center;text-align:left!important;width:min(620px,80%);padding:clamp(48px,7vw,110px)!important;
    opacity:var(--gallery-exit-note-o,0)!important;transform:translate3d(var(--gallery-exit-note-x,40px),var(--gallery-exit-note-y,0),0)!important;
  }
  .gallery-exit-note span{font-size:.74rem!important;letter-spacing:.19em!important}
  .gallery-exit-note strong{font-size:clamp(4.8rem,7.2vw,8.4rem)!important;line-height:.78!important;margin:1.1rem 0 1.4rem!important}
  .gallery-exit-note strong em{font-weight:400;color:#9f8057;font-style:italic}
  .gallery-exit-note small{font-size:1.02rem!important;line-height:1.65!important;max-width:420px}
  .gallery-exit-rule{display:block;width:var(--gallery-exit-rule-w,0px);height:1px;background:#a78a60;margin-top:2rem}
}

/* RSVP: the paper is still normal document flow, but enters like a real invitation. */
.rsvp-section{--rsvp-enter:0;--rsvp-paper-o:0;--rsvp-photo-o:0}
.rsvp-photo-echo,.rsvp-section.has-answer .rsvp-photo-echo{
  opacity:var(--rsvp-photo-o,1)!important;
  transform:translate3d(var(--rsvp-photo-x,-26px),0,0) scale(var(--rsvp-photo-s,1.025))!important;
  will-change:transform,opacity!important;
}
.rsvp-paper,.rsvp-section.has-answer .rsvp-paper{
  opacity:var(--rsvp-paper-o,1)!important;
  transform:translate3d(var(--rsvp-paper-x,42px),var(--rsvp-paper-y,0px),0) scale(var(--rsvp-paper-s,.988))!important;
  transform-origin:center right;will-change:transform,opacity!important;
}
.rsvp-paper::after{
  content:"";position:absolute;z-index:0;left:0;top:0;width:var(--rsvp-accent-w,0%);height:3px;
  background:linear-gradient(90deg,#a98c61,#d7c09b 72%,transparent);pointer-events:none;
}
.rsvp-paper-accent{position:absolute;z-index:2;left:clamp(48px,7vw,116px);right:clamp(48px,7vw,116px);top:50px;display:flex;align-items:center;gap:14px;color:#957750;opacity:var(--rsvp-accent-o,0);transform:translateY(var(--rsvp-accent-y,10px))}
.rsvp-paper-accent i{height:1px;width:var(--rsvp-rule-w,0px);background:#ad9169}
.rsvp-paper-accent span{font:600 .64rem/1 var(--sans);letter-spacing:.18em}
.rsvp-date-side{position:absolute;z-index:2;right:24px;top:50%;transform:translateY(-50%);writing-mode:vertical-rl;font:600 .60rem/1 var(--sans);letter-spacing:.22em;color:#a0845e;opacity:var(--rsvp-date-o,0)}
.rsvp-question{overflow:visible}
.rsvp-question span,.rsvp-question em{display:block;font:inherit;letter-spacing:inherit;line-height:inherit;will-change:transform,opacity}
.rsvp-question span{opacity:var(--rsvp-q1-o,0);transform:translate3d(0,var(--rsvp-q1-y,28px),0)}
.rsvp-question em{font-weight:400;color:#9b7d55;font-style:italic;opacity:var(--rsvp-q2-o,0);transform:translate3d(0,var(--rsvp-q2-y,32px),0)}
.rsvp-step-choice>small{display:block;opacity:var(--rsvp-kicker-o,0);transform:translateY(var(--rsvp-kicker-y,14px));will-change:transform,opacity}
.rsvp-step-choice>p{opacity:var(--rsvp-deadline-o,0);transform:translateY(var(--rsvp-deadline-y,14px));will-change:transform,opacity}
.rsvp-choice-grid{opacity:var(--rsvp-choices-o,0);transform:translateY(var(--rsvp-choices-y,26px));will-change:transform,opacity}
.rsvp-choice{position:relative;overflow:hidden;isolation:isolate}
.rsvp-choice::before{content:"";position:absolute;z-index:-1;inset:0;background:#27231f;transform:translate3d(-102%,0,0);transition:transform .42s var(--ease)}
.rsvp-choice:hover::before,.rsvp-choice:focus-visible::before{transform:none}
.rsvp-choice:hover,.rsvp-choice:focus-visible{background:transparent!important;color:#fff!important}
.rsvp-choice:active{transform:scale(.985)}
.rsvp-monogram{opacity:var(--rsvp-monogram-o,0);transform:translateY(var(--rsvp-monogram-y,-8px))!important}

/* Between RSVP and finale, the RSVP photograph becomes the closing film. */
.rsvp-finale-bridge{position:relative;height:82vh;min-height:560px;overflow:hidden;background:#11110f;color:#f7f1e7;isolation:isolate}
.rsvp-finale-bridge::before{content:"";position:absolute;z-index:4;top:0;right:0;bottom:0;width:56%;background:#fbf8f2;transform:translate3d(var(--bridge-cover-x,0%),0,0);will-change:transform}
.rsvp-bridge-photo{position:absolute;z-index:1;inset:-2%;background:var(--rsvp-photo,none) center 42%/cover no-repeat;transform:scale(var(--bridge-photo-s,1.025)) translate3d(var(--bridge-photo-x,-10px),0,0);will-change:transform}
.rsvp-bridge-shade{position:absolute;z-index:2;inset:0;background:linear-gradient(90deg,rgba(10,9,8,.14),rgba(10,9,8,.30) 52%,rgba(10,9,8,.62));opacity:var(--bridge-shade-o,.5)}
.rsvp-bridge-copy{position:absolute;z-index:5;left:7vw;bottom:9vh;width:min(620px,72vw);opacity:var(--bridge-copy-o,0);transform:translate3d(0,var(--bridge-copy-y,26px),0);will-change:transform,opacity}
.rsvp-bridge-copy span{display:block;font:600 .68rem/1 var(--sans);letter-spacing:.22em;color:#dec69d;margin-bottom:1rem}
.rsvp-bridge-copy strong{display:block;font:500 clamp(4.4rem,8vw,9rem)/.78 var(--serif);letter-spacing:-.055em}
.rsvp-bridge-copy strong em{font-weight:400;color:#d2b786;font-style:italic}
.rsvp-bridge-copy small{display:block;margin-top:1.8rem;font:600 .62rem/1 var(--sans);letter-spacing:.20em;color:rgba(255,255,255,.70)}

/* Finale: line-by-line reveal and a red webXCode thread appears only at the end. */
.finale-copy h2 span,.finale-copy h2 em{display:block;will-change:transform,opacity}
.finale-copy h2 span{opacity:var(--final-l1-o,0);transform:translate3d(0,var(--final-l1-y,28px),0)}
.finale-copy h2 em{opacity:var(--final-l2-o,0);transform:translate3d(0,var(--final-l2-y,32px),0)}
.finale-copy>span{opacity:var(--final-kicker-o,0);transform:translateY(var(--final-kicker-y,12px));display:block}
.finale-copy>p{opacity:var(--final-body-o,0);transform:translateY(var(--final-body-y,16px));will-change:transform,opacity}
.finale-copy>strong{opacity:var(--final-names-o,0);transform:translateY(var(--final-names-y,16px));will-change:transform,opacity}
.finale-credit-cue{display:flex!important;align-items:center!important;gap:14px!important}
.finale-credit-cue i{display:block;width:var(--final-credit-line-w,0px);height:1px;background:#e8000d;box-shadow:0 0 16px rgba(232,0,13,.24)}
.finale-credit-cue span{opacity:var(--credit-o,0)}

/* webXCode credit is part of the scroll journey, not a hard stop after it. */
.creator.creator-webx{--creator-logo-o:.2;--creator-message-o:.15;--creator-bottom-o:.12;--creator-top-o:.2}
.creator.creator-webx .creator-topline{opacity:var(--creator-top-o)!important;transform:translate3d(0,var(--creator-top-y,20px),0)!important;transition:none!important}
.creator.creator-webx .webx-brand-lockup{opacity:var(--creator-logo-o)!important;transform:translate3d(0,var(--creator-logo-y,28px),0) scale(var(--creator-logo-s,.975))!important;transition:none!important}
.creator.creator-webx .creator-message{opacity:var(--creator-message-o)!important;transform:translate3d(0,var(--creator-message-y,30px),0)!important;transition:none!important}
.creator.creator-webx .creator-bottomline{opacity:var(--creator-bottom-o)!important;transform:translate3d(0,var(--creator-bottom-y,18px),0)!important;transition:none!important}
.creator-x-outline{transform:translate3d(var(--creator-x-x,0px),var(--creator-x-y,0px),0) rotate(var(--creator-x-r,0deg))!important;opacity:var(--creator-x-o,.28)!important}
.creator-red-glow{transform:translate3d(var(--creator-glow-x,0px),var(--creator-glow-y,0px),0) scale(var(--creator-glow-s,1))!important;opacity:var(--creator-glow-o,.45)!important}

@media(prefers-reduced-motion:reduce){
  .gallery-exit-photo,.gallery-exit-note,.rsvp-photo-echo,.rsvp-paper,.rsvp-question span,.rsvp-question em,.rsvp-step-choice>small,.rsvp-step-choice>p,.rsvp-choice-grid,.rsvp-finale-bridge::before,.rsvp-bridge-photo,.rsvp-bridge-copy,.finale-copy h2 span,.finale-copy h2 em,.finale-copy>span,.finale-copy>p,.finale-copy>strong,.creator.creator-webx .creator-topline,.creator.creator-webx .webx-brand-lockup,.creator.creator-webx .creator-message,.creator.creator-webx .creator-bottomline{opacity:1!important;transform:none!important}
  .rsvp-finale-bridge::before{display:none!important}
}

/* RSVP response transition: form content arrives in a measured editorial cascade. */
.rsvp-form .rsvp-form-head,.rsvp-form .field,.rsvp-form .submit-rsvp,.rsvp-form .demo-note{opacity:0;transform:translate3d(0,18px,0)}
.rsvp-form.active .rsvp-form-head{animation:rsvpFieldReveal .52s .04s var(--ease) forwards}
.rsvp-form.active .field{animation:rsvpFieldReveal .52s var(--ease) forwards}
.rsvp-form.active>label.field:first-of-type{animation-delay:.10s}
.rsvp-form.active .accept-only .field:nth-child(1){animation-delay:.16s}
.rsvp-form.active .accept-only .field:nth-child(2){animation-delay:.22s}
.rsvp-form.active>label.field:last-of-type{animation-delay:.28s}
.rsvp-form.active .submit-rsvp{animation:rsvpFieldReveal .52s .34s var(--ease) forwards}
.rsvp-form.active .demo-note{animation:rsvpFieldReveal .45s .40s var(--ease) forwards}
@keyframes rsvpFieldReveal{to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.rsvp-form .rsvp-form-head,.rsvp-form .field,.rsvp-form .submit-rsvp,.rsvp-form .demo-note{opacity:1!important;transform:none!important;animation:none!important}}


/* ============================================================
   V12 — LATE JOURNEY / VISIBLE CINEMATIC TRANSFORMATIONS
   Deliberately stronger than V11.9 while remaining transform/opacity driven.
   ============================================================ */

/* Gallery becomes an editorial film-strip, not a standard carousel. */
.gallery-stage-word{position:absolute;z-index:0;left:4vw;right:4vw;top:8vh;display:flex;align-items:baseline;justify-content:space-between;pointer-events:none;color:#fff;opacity:var(--gallery-word-o,.075)}
.gallery-stage-word span{font:500 clamp(5rem,13vw,14rem)/.74 var(--serif);letter-spacing:-.07em;transform:translate3d(var(--gallery-word-x,-5vw),0,0)}
.gallery-stage-word em{font:400 italic clamp(2.4rem,5vw,6rem)/1 var(--serif);color:#d2b98d;transform:translate3d(var(--gallery-word2-x,4vw),0,0)}
@media(min-width:681px){
  .gallery-card{opacity:var(--card-o,.42)!important;transform:translate3d(0,var(--card-focus-y,0px),0) rotate(var(--card-focus-r,0deg)) scale(var(--card-focus-s,.91))!important;transition:filter .35s ease,box-shadow .35s ease!important;box-shadow:0 12px 28px rgba(0,0,0,.12)}
  .gallery-card.active{box-shadow:0 38px 90px rgba(0,0,0,.42);z-index:4}
  .gallery-card img{transform:scale(var(--card-img-s,1.055)) translate3d(0,var(--card-img-y,0px),0)!important;transition:none!important}
  .gallery-card::before{content:"";position:absolute;z-index:3;inset:0;border:1px solid rgba(239,218,181,var(--card-border-o,.08));pointer-events:none}
  .gallery-card figcaption{transform:translate3d(0,var(--card-caption-y,10px),0);opacity:var(--card-caption-o,.25);transition:none!important}
  .gallery-card .gallery-no{opacity:var(--card-number-o,.25)!important;transition:none!important}
}

/* RSVP handoff: a photographed memory becomes invitation paper. */
.gallery-exit-wash{box-shadow:inset 0 0 0 1px rgba(156,126,85,.08)}
.gallery-exit-photo{clip-path:inset(0 var(--gallery-exit-photo-clip,0%) 0 0);will-change:transform,opacity,clip-path}
.gallery-exit-note::before{content:"";display:block;width:var(--gallery-exit-note-line,0px);height:1px;background:#a98c61;margin-bottom:26px}
.gallery-exit-note strong{transform:translate3d(0,var(--gallery-exit-head-y,18px),0) scale(var(--gallery-exit-head-s,.98));transform-origin:left center}

/* RSVP is the main event: image + letterpress + staged question. */
.rsvp-section{background:#eee7dc!important}
.rsvp-photo-echo{width:44vw!important}
.rsvp-paper{margin-left:44vw!important;width:56vw!important;background:#fbf8f2!important;clip-path:inset(0 0 0 var(--rsvp-paper-clip,14%));transform-origin:right center!important;isolation:isolate}
.rsvp-paper::before{z-index:3!important}
.rsvp-ghost-word{position:absolute;z-index:0;left:-.025em;bottom:-.13em;font:500 clamp(8rem,19vw,21rem)/.72 var(--serif);letter-spacing:-.085em;color:#3a332b;opacity:var(--rsvp-ghost-o,.026);pointer-events:none;white-space:nowrap;transform:translate3d(var(--rsvp-ghost-x,7vw),0,0)}
.rsvp-question-rule{position:absolute;z-index:2;left:clamp(48px,7vw,116px);bottom:34%;width:var(--rsvp-question-rule-w,0%);height:1px;background:linear-gradient(90deg,#a98c61,rgba(169,140,97,.15),transparent);pointer-events:none}
.rsvp-step{position:relative;z-index:4}
.rsvp-question{font-size:clamp(5.4rem,8.8vw,9.7rem)!important;line-height:.73!important;margin:1.05rem 0 1.6rem!important}
.rsvp-question span{transform:translate3d(var(--rsvp-q1-x,-9vw),var(--rsvp-q1-y,28px),0)!important}
.rsvp-question em{transform:translate3d(var(--rsvp-q2-x,9vw),var(--rsvp-q2-y,32px),0)!important}
.rsvp-step-choice>p{font-size:1.15rem!important}
.rsvp-choice-grid{margin-top:3rem!important;gap:16px!important}
.rsvp-choice{min-height:86px!important;border-color:rgba(70,59,47,.28)!important;background:rgba(255,255,255,.25)!important;backdrop-filter:none!important}
.rsvp-choice span{font-size:.72rem;letter-spacing:.13em;font-weight:600}
.rsvp-choice b{font-size:1.5rem}

/* The RSVP literally opens to reveal the closing film. */
.rsvp-finale-bridge{height:94vh!important;min-height:620px!important}
.rsvp-finale-bridge::before{display:none!important}
.rsvp-bridge-curtain{position:absolute;z-index:4;top:0;bottom:0;width:50.2%;background:#fbf8f2;will-change:transform}
.rsvp-bridge-curtain.curtain-a{left:0;transform:translate3d(var(--bridge-left-x,0%),0,0)}
.rsvp-bridge-curtain.curtain-b{right:0;transform:translate3d(var(--bridge-right-x,0%),0,0)}
.rsvp-bridge-copy{left:50%!important;bottom:50%!important;width:min(880px,86vw)!important;text-align:center;transform:translate3d(-50%,calc(50% + var(--bridge-copy-y,26px)),0)!important}
.rsvp-bridge-copy strong{font-size:clamp(5rem,10vw,11rem)!important}
.rsvp-bridge-copy small{margin-top:2.2rem!important}

/* Finale begins like a wedding film, then opens to full frame. */
.finale-letterbox{position:absolute;z-index:8;left:0;right:0;height:var(--final-letterbox-h,12vh);background:#090908;pointer-events:none;will-change:transform}
.finale-letterbox-top{top:0;transform:translate3d(0,var(--final-letterbox-top,0%),0)}
.finale-letterbox-bottom{bottom:0;transform:translate3d(0,var(--final-letterbox-bottom,0%),0)}
.finale-copy{z-index:10!important}
.finale-red-thread{position:absolute;z-index:12;left:0;right:auto;bottom:0;height:3px;width:var(--final-red-w,0%);background:#e8000d;box-shadow:0 0 24px rgba(232,0,13,.34)}
.creator.creator-webx{border-top:1px solid rgba(232,0,13,.5)}

@media(max-width:680px){
  .gallery-stage-word{position:relative;left:auto;right:auto;top:auto;padding:0 22px 22px;opacity:.11;display:block}
  .gallery-stage-word span{display:block;font-size:17vw;transform:none}.gallery-stage-word em{display:block;font-size:10vw;margin-top:-.12em;transform:none}
  .gallery-card,.gallery-card.tall,.gallery-card.wide{width:84vw!important;flex-basis:84vw!important;height:64svh!important;transition:transform .45s var(--ease),opacity .35s ease!important;opacity:.56;transform:scale(.93)!important}
  .gallery-card.is-mobile-active{opacity:1;transform:scale(1)!important}
  .gallery-card.is-mobile-active img{transform:scale(1.075)!important}
  .rsvp-photo-echo,.rsvp-section.has-answer .rsvp-photo-echo{width:100%!important;height:48svh!important;position:relative!important;left:auto!important;top:auto!important;transform:scale(var(--rsvp-photo-s,1.025))!important;opacity:var(--rsvp-photo-o,1)!important}
  .rsvp-paper,.rsvp-section.has-answer .rsvp-paper{margin-left:0!important;width:100%!important;clip-path:inset(var(--rsvp-paper-clip-mobile,10%) 0 0 0)!important;margin-top:-7svh!important;border-radius:0!important;padding-top:76px!important;transform:translate3d(0,var(--rsvp-paper-y,34px),0) scale(var(--rsvp-paper-s,.992))!important}
  .rsvp-ghost-word{font-size:35vw;bottom:-.02em;left:-.04em}
  .rsvp-question{font-size:17vw!important;line-height:.77!important}
  .rsvp-question span{transform:translate3d(var(--rsvp-q1-x,-13vw),var(--rsvp-q1-y,28px),0)!important}
  .rsvp-question em{transform:translate3d(var(--rsvp-q2-x,13vw),var(--rsvp-q2-y,32px),0)!important}
  .rsvp-question-rule{left:22px;right:22px;bottom:38%;width:auto;transform:scaleX(var(--rsvp-question-rule-s,0));transform-origin:left}
  .rsvp-choice-grid{gap:12px!important}.rsvp-choice{min-height:76px!important}
  .rsvp-finale-bridge{height:78svh!important;min-height:500px!important}
  .rsvp-bridge-curtain{left:0!important;right:0!important;width:100%!important;height:50.2%!important}
  .rsvp-bridge-curtain.curtain-a{top:0;bottom:auto!important;transform:translate3d(0,var(--bridge-top-y,0%),0)}
  .rsvp-bridge-curtain.curtain-b{bottom:0;top:auto!important;transform:translate3d(0,var(--bridge-bottom-y,0%),0)}
  .rsvp-bridge-copy{width:calc(100vw - 44px)!important}.rsvp-bridge-copy strong{font-size:15vw!important;line-height:.79!important}
  .finale-letterbox{height:8svh}
}

@media(prefers-reduced-motion:reduce){
  .gallery-card,.gallery-card img,.rsvp-paper,.rsvp-photo-echo,.rsvp-question span,.rsvp-question em,.rsvp-bridge-curtain,.finale-letterbox{opacity:1!important;transform:none!important;clip-path:none!important}
  .rsvp-bridge-curtain,.finale-letterbox{display:none!important}
}


/* V12.0.1 QA corrections: preserve the visible motion without layout drift. */
@media(min-width:681px){
  .rsvp-paper,.rsvp-section.has-answer .rsvp-paper{
    margin:0!important;width:100%!important;
    opacity:var(--rsvp-paper-o,1)!important;
    transform:translate3d(var(--rsvp-paper-x,48px),var(--rsvp-paper-y,0px),0) scale(var(--rsvp-paper-s,.965))!important;
    clip-path:inset(0 0 0 var(--rsvp-paper-clip,14%))!important;
  }
  .rsvp-photo-echo,.rsvp-section.has-answer .rsvp-photo-echo{
    opacity:var(--rsvp-photo-o,1)!important;
    transform:translate3d(var(--rsvp-photo-x,-30px),0,0) scale(var(--rsvp-photo-s,1.035))!important;
  }
}
/* The bridge and finale use the same crop, so the photo never jumps at the section boundary. */
.rsvp-bridge-photo{background-position:center 42%!important}
.finale-photo img{object-position:center 42%!important}
/* Remove artificial cinema bars: continuity is created by the photograph itself. */
.finale-letterbox{display:none!important}


/* V12.0.2 — RSVP flows directly into the finale; no duplicate-photo bridge section. */
.rsvp-finale-bridge{display:none!important}
.finale-opening-curtain{position:absolute;z-index:8;top:0;bottom:0;width:50.1%;background:#fbf8f2;will-change:transform;pointer-events:none}
.finale-opening-curtain.opening-curtain-a{left:0;transform:translate3d(var(--final-open-left,0%),0,0)}
.finale-opening-curtain.opening-curtain-b{right:0;transform:translate3d(var(--final-open-right,0%),0,0)}
.finale-opening-copy{position:absolute;z-index:9;left:50%;top:50%;width:min(900px,88vw);text-align:center;color:#f7f1e7;opacity:var(--final-open-copy-o,0);transform:translate3d(-50%,calc(-50% + var(--final-open-copy-y,22px)),0);pointer-events:none}
.finale-opening-copy span{display:block;font:600 .68rem/1 var(--sans);letter-spacing:.22em;color:#e3cba3;margin-bottom:1rem}
.finale-opening-copy strong{display:block;font:500 clamp(5rem,10vw,11rem)/.78 var(--serif);letter-spacing:-.055em}
.finale-opening-copy strong em{font-weight:400;color:#d4b985;font-style:italic}
.finale-opening-copy small{display:block;margin-top:1.8rem;font:600 .62rem/1 var(--sans);letter-spacing:.20em;color:rgba(255,255,255,.70)}
@media(max-width:680px){
  .finale-opening-curtain{left:0!important;right:0!important;width:100%!important;height:50.1%!important}
  .finale-opening-curtain.opening-curtain-a{top:0;bottom:auto!important;transform:translate3d(0,var(--final-open-top,0%),0)}
  .finale-opening-curtain.opening-curtain-b{bottom:0;top:auto!important;transform:translate3d(0,var(--final-open-bottom,0%),0)}
  .finale-opening-copy{width:calc(100vw - 44px)}
  .finale-opening-copy strong{font-size:15vw;line-height:.79}
}
@media(prefers-reduced-motion:reduce){.finale-opening-curtain{display:none!important}.finale-opening-copy{opacity:1!important;transform:translate3d(-50%,-50%,0)!important}}


/* V12.0.3 mobile finale handoff: one continuous paper sheet lifts away instead of two blank halves. */
@media(max-width:680px){
  .finale-opening-curtain.opening-curtain-a{display:block!important;inset:0!important;width:100%!important;height:100%!important;transform:translate3d(0,var(--final-mobile-cover,0%),0)!important}
  .finale-opening-curtain.opening-curtain-b{display:none!important}
}

.rsvp-photo-echo>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 42%;display:block;z-index:0;transform:scale(1.015)}
.rsvp-photo-echo::after{z-index:1!important}.rsvp-photo-caption{z-index:2!important}


/* V12.0.5 — distinct imagery across the late journey.
   Gallery exit = final gallery photo; RSVP = stationery; Finale = reception atmosphere. */
.gallery-exit-photo,
.gallery-transition-front,
.gallery-transition-photo,
.mobile-gallery-exit>.mobile-exit-photo{
  background-image:var(--gallery-exit-photo,linear-gradient(145deg,#827567,#4e463d))!important;
}
.rsvp-photo-echo,
.rsvp-section.has-answer .rsvp-photo-echo{
  background-image:var(--rsvp-photo,none)!important;
}
.rsvp-to-finale-image,
.rsvp-bridge-photo,
.mobile-rsvp-finale-bridge{
  background-image:var(--finale-photo,linear-gradient(145deg,#302b26,#171513))!important;
}
@media(max-width:680px){
  .mobile-gallery-exit>.mobile-exit-photo{background-position:center 52%!important;}
  .rsvp-photo-echo,.rsvp-section.has-answer .rsvp-photo-echo{background-position:center 48%!important;}
  .rsvp-to-finale-image,.rsvp-bridge-photo,.mobile-rsvp-finale-bridge{background-position:center 50%!important;}
}


/* ============================================================
   12.6.2 — REMOVE OPENING -> STORY TRANSITION FRAME
   The invitation/date scene now hands directly into the story.
   No Chapter 02 iris, empty black pause, or mobile seam title.
   ============================================================ */
.opening-iris,
.opening-continuity,
.float-opening-a,
.float-opening-b{display:none!important;visibility:hidden!important;opacity:0!important}
.opening-sequence::after{display:none!important;content:none!important}

/* Remove the unused tail that previously existed only for the iris transition. */
@media(min-width:901px){.opening-sequence{height:330vh!important}}
@media(max-width:900px) and (min-width:681px){.opening-sequence{height:305vh!important}}
@media(max-width:680px){.opening-sequence{height:285vh!important}}


/* ============================================================
   12.6.3 — FULL-WIDTH RSVP / CONTINUOUS HANDOFF
   The former left photographic panel is gone. The stationery surface
   owns the whole viewport, enters from the gallery and lifts into finale.
   ============================================================ */

/* Gallery -> RSVP: resolve the gallery into the SAME ivory stationery world. */
@media(min-width:681px){
  .gallery-exit-wash{
    display:grid!important;grid-template-columns:1fr!important;place-items:center!important;
    background:#fbf8f2!important;color:#2b2824!important;padding:0!important;
  }
  .gallery-exit-wash::before{
    display:block!important;content:""!important;position:absolute!important;inset:0!important;
    background:radial-gradient(circle at 72% 22%,rgba(196,164,117,.13),transparent 30%),linear-gradient(180deg,rgba(255,255,255,.35),transparent 48%)!important;
  }
  .gallery-exit-photo{display:none!important}
  .gallery-exit-note{
    width:min(900px,84vw)!important;text-align:center!important;padding:42px!important;margin:0 auto!important;
    transform:translate3d(0,var(--gallery-exit-note-y,24px),0)!important;
  }
  .gallery-exit-note::before{margin:0 auto 28px!important}
  .gallery-exit-note strong{transform:translate3d(0,var(--gallery-exit-head-y,20px),0) scale(var(--gallery-exit-head-s,.98))!important;transform-origin:center!important}
  .gallery-exit-note small{margin:0 auto!important}
  .gallery-exit-rule{margin:28px auto 0!important}
}

/* Main RSVP scroll runway. */
.rsvp-section,.rsvp-section:not(.has-answer){
  position:relative!important;height:185vh!important;min-height:0!important;margin:0!important;padding:0!important;
  overflow:visible!important;background:#11110f!important;display:block!important;
}
.rsvp-stage,.rsvp-section:not(.has-answer) .rsvp-stage{
  position:sticky!important;top:0!important;width:100%!important;height:100svh!important;min-height:0!important;
  display:block!important;overflow:hidden!important;isolation:isolate!important;background:#11110f!important;
}
.rsvp-stage::after{
  content:"";position:absolute;z-index:0;inset:-3%;pointer-events:none;
  background:var(--finale-photo,linear-gradient(145deg,#332d27,#131210)) center 50%/cover no-repeat;
  opacity:var(--rsvp-exit-bg-o,0);transform:scale(var(--rsvp-exit-bg-s,1.035));
  transition:none;will-change:opacity,transform;
}
.rsvp-stage::before{
  content:"";position:absolute;z-index:1;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(10,9,8,.02),rgba(10,9,8,.25));
  opacity:var(--rsvp-exit-bg-o,0);
}
.rsvp-photo-echo,.rsvp-photo-caption{display:none!important}
.rsvp-paper,.rsvp-section:not(.has-answer) .rsvp-paper{
  position:absolute!important;z-index:3!important;inset:0!important;left:0!important;right:0!important;top:0!important;
  margin:0!important;width:100vw!important;height:100svh!important;min-height:0!important;
  padding:clamp(78px,8vh,112px) max(7vw,calc((100vw - 980px)/2)) clamp(64px,7vh,96px)!important;
  display:grid!important;align-content:center!important;background:#fbf8f2!important;box-shadow:none!important;
  border:0!important;overflow:hidden!important;opacity:var(--rsvp-paper-o,0)!important;
  clip-path:inset(var(--rsvp-paper-clip-top,10%) 0 var(--rsvp-paper-clip-bottom,0%) 0)!important;
  transform:translate3d(0,var(--rsvp-paper-y,68px),0) scale(var(--rsvp-paper-s,.972))!important;
  transform-origin:center center!important;will-change:transform,opacity,clip-path!important;
}
.rsvp-paper::before{inset:28px!important;border:1px solid rgba(128,103,68,.16)!important}
.rsvp-paper::after{opacity:.19!important}
.rsvp-step-choice,.rsvp-form{width:min(920px,100%)!important;margin-inline:auto!important}
.rsvp-step-choice{text-align:left!important}
.rsvp-step-choice h2,.rsvp-question{font-size:clamp(5.2rem,8vw,9rem)!important;line-height:.76!important;max-width:850px!important}
.rsvp-question-rule{left:max(7vw,calc((100vw - 980px)/2))!important;right:max(7vw,calc((100vw - 980px)/2))!important;width:auto!important;transform:scaleX(var(--rsvp-question-rule-s,0))!important;transform-origin:left center!important}
.rsvp-choice-grid{grid-template-columns:1fr 1fr!important;gap:16px!important;max-width:920px!important}
.rsvp-monogram{left:max(7vw,calc((100vw - 980px)/2))!important;right:auto!important;transform:translate3d(0,var(--rsvp-monogram-y,0),0)!important;opacity:var(--rsvp-monogram-o,0)!important}
.rsvp-date-side{right:max(3vw,34px)!important;opacity:var(--rsvp-date-o,0)!important}
.rsvp-paper-accent{left:max(7vw,calc((100vw - 980px)/2))!important;right:max(7vw,calc((100vw - 980px)/2))!important}
.rsvp-ghost-word{left:max(-.03em,calc((100vw - 1500px)/2))!important;font-size:clamp(11rem,24vw,26rem)!important}

/* The content fades in as one authored sequence. */
.rsvp-step-choice>small{opacity:var(--rsvp-kicker-o,0)!important;transform:translate3d(0,var(--rsvp-kicker-y,14px),0)!important}
.rsvp-question span{opacity:var(--rsvp-q1-o,0)!important}
.rsvp-question em{opacity:var(--rsvp-q2-o,0)!important}
.rsvp-step-choice>p{opacity:var(--rsvp-deadline-o,0)!important;transform:translate3d(0,var(--rsvp-deadline-y,14px),0)!important}
.rsvp-choice-grid{opacity:var(--rsvp-choices-o,0)!important;transform:translate3d(0,var(--rsvp-choices-y,28px),0)!important}

/* Interaction mode: once a response is selected, release the sticky runway so
   long forms remain naturally scrollable and accessible. */
.rsvp-section.has-answer{
  height:auto!important;min-height:100svh!important;overflow:visible!important;background:#fbf8f2!important;
}
.rsvp-section.has-answer .rsvp-stage{
  position:relative!important;top:auto!important;height:auto!important;min-height:100svh!important;overflow:visible!important;background:#fbf8f2!important;
}
.rsvp-section.has-answer .rsvp-stage::before,.rsvp-section.has-answer .rsvp-stage::after{display:none!important}
.rsvp-section.has-answer .rsvp-paper{
  position:relative!important;inset:auto!important;width:100%!important;height:auto!important;min-height:100svh!important;
  margin:0!important;padding:clamp(84px,8vw,128px) max(7vw,calc((100vw - 980px)/2))!important;
  opacity:1!important;clip-path:none!important;transform:none!important;overflow:visible!important;
}
.rsvp-section.has-answer .rsvp-form{width:min(920px,100%)!important;margin-inline:auto!important}

/* Mobile: a portrait paper reveal, not a scaled desktop split. */
@media(max-width:680px){
  .mobile-gallery-exit{
    display:grid!important;min-height:76svh!important;margin-top:34px!important;padding:0!important;
    place-items:center!important;background:#fbf8f2!important;color:#2b2824!important;text-align:center!important;grid-template-rows:1fr!important;
  }
  .mobile-gallery-exit>.mobile-exit-photo{display:none!important}
  .mobile-gallery-exit>.mobile-exit-copy{
    width:100%!important;padding:13vh 24px 14vh!important;background:transparent!important;text-align:center!important;
    opacity:var(--mg-copy-o,1);transform:translate3d(0,var(--mg-copy-y,26px),0);
  }
  .mobile-exit-copy span{font-size:.68rem!important;letter-spacing:.18em!important}
  .mobile-exit-copy strong{margin:1rem auto 0!important;font-size:13vw!important;max-width:88vw!important}
  .mobile-exit-copy small{display:block!important;max-width:320px!important;margin:1rem auto 0!important;font:400 .92rem/1.6 var(--sans)!important;color:#71685f!important}

  .rsvp-section,.rsvp-section:not(.has-answer){height:170svh!important;min-height:0!important;background:#11110f!important;overflow:visible!important}
  .rsvp-stage,.rsvp-section:not(.has-answer) .rsvp-stage{position:sticky!important;top:0!important;height:100svh!important;min-height:0!important;overflow:hidden!important;background:#11110f!important}
  .rsvp-paper,.rsvp-section:not(.has-answer) .rsvp-paper{
    position:absolute!important;inset:0!important;width:100%!important;height:100svh!important;min-height:0!important;margin:0!important;
    padding:76px 22px 54px!important;clip-path:inset(var(--rsvp-paper-clip-top,8%) 0 var(--rsvp-paper-clip-bottom,0%) 0)!important;
    transform:translate3d(0,var(--rsvp-paper-y,54px),0) scale(var(--rsvp-paper-s,.982))!important;opacity:var(--rsvp-paper-o,0)!important;overflow:hidden!important;
  }
  .rsvp-paper::before{inset:14px!important}
  .rsvp-step-choice,.rsvp-form{width:100%!important;max-width:none!important;margin:0!important}
  .rsvp-step-choice h2,.rsvp-question{font-size:15.5vw!important;line-height:.78!important;max-width:92vw!important}
  .rsvp-choice-grid{grid-template-columns:1fr!important;gap:10px!important;margin-top:1.7rem!important}
  .rsvp-choice{min-height:70px!important}
  .rsvp-monogram{left:22px!important;right:auto!important;top:28px!important}
  .rsvp-date-side{right:14px!important}
  .rsvp-paper-accent{left:22px!important;right:22px!important}
  .rsvp-question-rule{left:22px!important;right:22px!important}
  .rsvp-ghost-word{font-size:37vw!important;left:-.04em!important}

  .rsvp-section.has-answer{height:auto!important;min-height:0!important;background:#fbf8f2!important}
  .rsvp-section.has-answer .rsvp-stage{position:relative!important;height:auto!important;min-height:0!important;background:#fbf8f2!important;overflow:visible!important}
  .rsvp-section.has-answer .rsvp-paper{position:relative!important;height:auto!important;min-height:100svh!important;padding:72px 22px 58px!important;clip-path:none!important;transform:none!important;opacity:1!important;overflow:visible!important}
}

@media(prefers-reduced-motion:reduce){
  .rsvp-section,.rsvp-section:not(.has-answer){height:auto!important;min-height:100svh!important;background:#fbf8f2!important}
  .rsvp-stage,.rsvp-section:not(.has-answer) .rsvp-stage{position:relative!important;height:auto!important;min-height:100svh!important;background:#fbf8f2!important}
  .rsvp-stage::before,.rsvp-stage::after{display:none!important}
  .rsvp-paper,.rsvp-section:not(.has-answer) .rsvp-paper{position:relative!important;height:auto!important;min-height:100svh!important;opacity:1!important;clip-path:none!important;transform:none!important}
  .rsvp-step-choice>small,.rsvp-question span,.rsvp-question em,.rsvp-step-choice>p,.rsvp-choice-grid,.rsvp-monogram,.rsvp-date-side{opacity:1!important;transform:none!important}
}
