/* Editorial polish layer — intentionally isolated from functional styles. */
:root{--cream:#f4eee5;--champagne:#d8c4aa;--brown:#6f5946;--coffee:#28231e;--hairline:rgba(91,72,51,.18);--script:'Cormorant Garamond',Georgia,serif}
body{background:#f4eee5;font-size:16px;line-height:1.75}.paper-section{background-color:transparent;background-image:none}.section-inner{width:min(1180px,88vw)}main{position:relative;isolation:isolate}main:before{content:"";position:absolute;z-index:-5;inset:0;background:linear-gradient(180deg,#f7f2ea 0%,#f7f2ea 15%,#eee5d8 26%,#f4eee5 41%,#f8f4ed 62%,#e7dac9 79%,#f5efe6 91%)}
.kicker{font-size:.66rem;font-weight:500;letter-spacing:.32em}.section-heading h2{letter-spacing:-.035em}.section-script,.form-script,.save-script,.countdown-script,.person-sign{font:italic 400 2rem/1 var(--script);color:var(--gold)}

/* Cinematic hero */
.hero{isolation:isolate;overflow:hidden;background:none;align-items:stretch}.hero:before{content:"";position:absolute;z-index:-3;inset:-3%;background:var(--hero) 62% center/cover no-repeat;animation:heroBreath 18s ease-in-out alternate infinite;will-change:transform}.hero:after{z-index:-2;height:auto;inset:0;background:linear-gradient(90deg,rgba(22,18,15,.72) 0%,rgba(22,18,15,.16) 48%,rgba(22,18,15,.22) 100%),linear-gradient(0deg,rgba(20,16,13,.6),transparent 42%)}.hero-frame{position:absolute;z-index:0;inset:4.5vh 3vw;border:1px solid rgba(255,255,255,.24);pointer-events:none}.hero-monogram{position:absolute;z-index:1;right:6vw;top:7vh;font:italic 1.2rem var(--serif);letter-spacing:.08em}.hero-content{position:relative;width:100%;padding:11vh 7vw 11vh;display:grid;grid-template:1fr auto 1fr/1fr 1fr;align-items:center}.hero-content>p{grid-area:1/1;align-self:start;margin:1rem 0}.hero h1{display:contents}.hero h1 span{position:relative;font-size:clamp(5rem,11vw,10rem);line-height:.74;letter-spacing:-.055em;text-shadow:0 5px 40px #0004}.hero h1 span:first-child{grid-area:2/1;align-self:start}.hero h1 span:last-child{grid-area:2/2;align-self:end;text-align:right;translate:0 1.05em}.hero h1 i{grid-area:2/1/3/3;justify-self:center;align-self:center;margin:0;font-size:clamp(3rem,6vw,5rem);color:#e5c9a5;translate:0 .35em}.hero time{grid-area:3/1;align-self:end;border-top:1px solid rgba(255,255,255,.4);padding-top:1rem;width:max-content}.scroll-cue{bottom:8vh}.invitation-bg{background:radial-gradient(circle at 22% 15%,#fff9,transparent 32%),radial-gradient(circle at 85% 78%,#c6ae8e33,transparent 26%),linear-gradient(135deg,#ded3c4,#f6f0e8)}

/* Flowing introduction and date */
.welcome{position:relative;overflow:hidden;padding:16rem 0 13rem;margin-top:-1px}.welcome:after{content:"";position:absolute;left:-5%;right:-5%;bottom:-70px;height:140px;background:#d9c7af;border-radius:50% 50% 0 0/35% 35% 0 0;opacity:.24}.welcome .narrow{position:relative;z-index:2}.welcome h2{font-size:clamp(4rem,8vw,7rem);margin:.6rem 0 2rem;letter-spacing:-.04em}.welcome p:last-child{font-size:clamp(1.35rem,2.3vw,1.7rem);max-width:620px;margin:0 auto}.ghost-word{position:absolute;left:-2vw;top:28%;font:400 clamp(6rem,18vw,18rem)/1 var(--serif);letter-spacing:-.06em;color:#8a725a0a}.botanical{position:absolute;width:180px;color:#9c8060;opacity:.2}.botanical svg{width:100%;fill:none;stroke:currentColor;stroke-width:1}.botanical-a{right:-30px;bottom:4%;rotate:8deg}.ornament{font-size:1rem;letter-spacing:.3em}
.countdown-section{position:relative;overflow:hidden;padding:8.5rem 4vw 10rem;background:linear-gradient(180deg,#d9c7af3d,#cab29370 58%,#efe6d900);color:var(--ink)}.countdown-section .kicker{color:var(--brown)}.countdown-script{position:absolute;left:50%;top:1.5rem;translate:-50% 0;font-size:clamp(3.5rem,9vw,8rem);color:#7f64490c;white-space:nowrap}.countdown{gap:clamp(2rem,8vw,8rem);margin-top:3.5rem}.countdown div{position:relative}.countdown div:not(:last-child):after{content:"·";position:absolute;right:clamp(-4.4rem,-4vw,-1rem);top:18%;color:#9c8060;font-size:1.5rem}.countdown b{font-size:clamp(4rem,9vw,8rem);letter-spacing:-.045em}.countdown span{color:#756b60;font-weight:500}.save-date{position:relative;overflow:hidden;padding:12rem 0 15rem}.save-date:after{content:"";position:absolute;z-index:-1;left:44%;top:3%;width:44vw;height:44vw;border-radius:50%;background:radial-gradient(circle,#d6c3a872,transparent 68%)}.save-script{position:absolute;z-index:1;left:48%;top:20%;font-size:clamp(3rem,7vw,7rem);rotate:-9deg;color:#9c765f3e}.save-grid{grid-template-columns:.8fr 1.2fr;gap:0;position:relative}.save-copy{align-self:end;padding-bottom:3rem}.save-copy h2{font-size:clamp(3.4rem,6vw,6rem)}.date-mark{position:relative;border:0;padding:0 0 0 4vw;display:block}.date-mark strong{display:block;font-size:clamp(12rem,25vw,23rem);line-height:.55;letter-spacing:-.08em}.date-mark span{display:block;margin:4rem 0 0 46%;font:400 clamp(2rem,4vw,4rem) var(--serif);letter-spacing:.03em;color:var(--gold)}.date-mark span small{font-size:.5em}.date-mark em{position:absolute;right:2%;top:10%;writing-mode:vertical-rl;text-transform:uppercase;letter-spacing:.4em;font-size:.6rem}.save-grid>.text-link{position:absolute;left:0;bottom:-4rem}.text-link{position:relative;border:0;padding-bottom:.6rem}.text-link:after,.venue a:after{content:"";position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid;transform-origin:right;transition:transform .45s var(--ease)}.text-link:hover:after,.venue a:hover:after{transform:scaleX(.25);transform-origin:left}

/* Editorial couple composition */
.couple-section{position:relative;overflow:hidden;padding:14rem 5vw 8rem;background:transparent}.couple-section:before{content:"";position:absolute;inset:0 0 auto;height:260px;background:linear-gradient(#f8f4ed,transparent)}.couple-ghost{position:absolute;right:-2vw;top:7rem;font:400 clamp(12rem,30vw,30rem)/1 var(--serif);color:#7a5f4709}.couple-section .section-heading{position:relative;z-index:2;text-align:left;width:min(1180px,90vw);margin:0 auto 3rem}.couple-section .section-heading h2{max-width:620px;font-size:clamp(4rem,8vw,8rem)}.person{position:relative;width:min(1180px,92vw);min-height:760px;margin:0 auto 3rem;display:block}.person-photo{position:absolute;overflow:hidden;background:#d6c9b9}.person-photo:after,.image-reveal:after{content:"";position:absolute;inset:0;background:#e8ded0;transform:scaleX(1);transform-origin:right;transition:transform 1.15s var(--ease)}.visible .person-photo:after,.image-reveal.visible:after,.visible.image-reveal:after{transform:scaleX(0)}.person-photo img,.image-reveal img{width:100%;height:100%;object-fit:cover;transform:scale(1.045);transition:transform 1.5s var(--ease)}.visible .person-photo img,.image-reveal.visible img,.visible.image-reveal img{transform:scale(1)}.person-groom .person-photo{left:5%;top:0;width:47%;height:720px}.person-bride .person-photo{right:2%;top:1rem;width:51%;height:760px}.person-copy{position:absolute;z-index:2;width:48%}.person-groom .person-copy{right:2%;top:37%}.person-bride .person-copy{left:3%;top:25%;text-align:right}.person h3{margin:.2rem 0 1.5rem;font-size:clamp(5rem,10vw,9.5rem);line-height:.7;white-space:nowrap;letter-spacing:-.06em}.person-groom h3{translate:-10% 0}.person-bride h3{translate:12% 0}.person-copy p{font-size:1rem;max-width:360px}.person-bride .person-copy p{margin-left:auto}.person-sign{display:block;margin-top:1rem;font-size:2.7rem;color:#9b7a5b54}.couple-stroke{width:min(800px,80vw);margin:-5rem auto 2rem;color:#987a5a55}.couple-stroke svg{fill:none;stroke:currentColor;stroke-width:1}

/* Formal inner invitation */
.family{position:relative;overflow:hidden;margin:0 3vw;padding:13rem 0 14rem;background:#faf7f0;box-shadow:0 25px 80px #5f493810}.family:before{content:"";position:absolute;inset:2.5rem;border:1px solid #a78a6824;pointer-events:none}.family-corner{position:absolute;right:7vw;top:5rem;font:400 clamp(4rem,8vw,8rem) var(--serif);color:#846b4d0d}.family-corner i{font-size:.5em}.family .section-heading{margin-bottom:4.5rem}.family-grid{position:relative}.family-side{padding:3rem 7vw}.family-side+article{border:0}.family-side h3{font-size:.85rem;color:var(--gold);letter-spacing:.32em}.family-side p{font:400 1.15rem/1.8 var(--serif)}.family-side strong{font-size:1.45rem}.family-side address{font-size:.88rem}.family-divider{position:absolute;z-index:2;left:50%;top:0;bottom:0;width:1px;background:linear-gradient(transparent,#9d806b55 25%,#9d806b55 75%,transparent)}.family-divider span{position:absolute;left:50%;top:50%;translate:-50% -50%;white-space:nowrap;background:#faf7f0;padding:1.2rem .6rem;font:italic 1rem var(--serif);color:var(--gold)}

/* Curved story */
.story-section{position:relative;overflow:hidden;padding:16rem 5vw 11rem;background:linear-gradient(180deg,#efe7dc,#f5efe7 78%,transparent)}.story-section .section-heading{text-align:left;width:min(1080px,90vw);margin:0 auto 10rem}.story-section .section-heading h2{font-size:clamp(5rem,10vw,10rem);line-height:.72}.story-ghost{position:absolute;font:400 clamp(7rem,17vw,17rem)/1 var(--serif);color:#745a4308;white-space:nowrap}.story-ghost-a{right:-5%;top:10%}.story-ghost-b{left:-7%;bottom:13%;rotate:-90deg}.story-line{position:relative;width:min(1120px,92vw);margin:auto;min-height:1850px}.story-line:before{display:none}.story-path{position:absolute;z-index:0;inset:0;width:100%;height:100%;overflow:visible}.story-path path{fill:none;stroke:#997b5c50;stroke-width:1.2;stroke-dasharray:1;stroke-dashoffset:1;pathLength:1;transition:stroke-dashoffset 2.4s var(--ease)}.story-line.visible .story-path path{stroke-dashoffset:0}.story-item{position:absolute;z-index:1;display:block;margin:0}.story-item-1{left:1%;top:0;width:54%}.story-item-2{right:0;top:37%;width:47%}.story-item-3{left:10%;top:69%;width:60%}.story-item .story-photo,.story-item:nth-child(even) .story-photo{width:100%;height:auto}.story-item-1 .story-photo{height:520px}.story-item-2 .story-photo{height:590px}.story-item-3 .story-photo{height:430px}.story-photo:after{inset:0;z-index:1;border:0;background:#e3d7c8}.story-copy,.story-item:nth-child(even) .story-copy{position:relative;z-index:3;width:75%;margin:-3.5rem -5% 0 auto;padding:2rem 0 0 2rem;text-align:left;background:#f3ede5}.story-item-2 .story-copy{margin:-4rem auto 0 -10%;padding:2.2rem 2rem 0 0}.story-copy h3{font-size:clamp(2.8rem,5vw,5rem);letter-spacing:-.04em}.story-dot{position:absolute;z-index:4;width:42px;height:42px;border:1px solid #9a7956;border-radius:50%;display:grid;place-items:center;background:#f2ebe2;color:#876b50;font-size:.55rem}.story-item-1 .story-dot{right:-12%;top:17%}.story-item-2 .story-dot{left:-15%;top:27%}.story-item-3 .story-dot{right:-9%;top:38%}

/* Collage, not a grid */
.gallery-section{position:relative;overflow:hidden;padding:15rem 0 16rem}.gallery-section:before{content:"";position:absolute;inset:-6rem 0 auto;height:300px;background:linear-gradient(#f5efe7,transparent)}.gallery-intro{position:relative;z-index:2;width:min(1180px,88vw);margin:0 auto -5rem;text-align:right}.gallery-intro h2{margin:0 0 .6rem;font:400 clamp(4.5rem,9vw,9rem)/.78 var(--serif);letter-spacing:-.055em}.gallery-intro>span{text-transform:uppercase;letter-spacing:.2em;font-size:.58rem;color:var(--gold)}.gallery{position:relative;display:grid;grid-template-columns:repeat(12,1fr);grid-template-rows:repeat(16,70px);gap:0;width:min(1280px,94vw)}.gallery-item{position:relative;overflow:visible;transform:rotate(var(--angle,0deg))}.gallery-item:after{z-index:2}.gallery-item img{position:relative;z-index:1}.gallery-item small{position:absolute;z-index:3;left:0;bottom:-1.8rem;font:italic 1rem var(--serif);color:var(--brown);white-space:nowrap}.gallery-item:nth-child(1){grid-area:2/1/10/8;--angle:-.3deg}.gallery-item:nth-child(2){grid-area:1/9/6/13;--angle:.6deg}.gallery-item:nth-child(3){grid-area:7/9/13/13;--angle:-.5deg}.gallery-item:nth-child(4){grid-area:11/2/17/6;--angle:.4deg}.gallery-item:nth-child(5){grid-area:11/7/16/12;--angle:-.2deg}.gallery-item:nth-child(6){grid-area:7/6/11/9;z-index:3;--angle:1deg}.gallery-item:hover img{transform:scale(1.018)}

/* Cinematic schedule */
.day-section{position:relative;overflow:hidden;padding:13rem 5vw;background:radial-gradient(circle at 15% 20%,#64574844,transparent 32%),linear-gradient(135deg,#25221e,#343028);margin-top:-4rem;clip-path:polygon(0 4%,100% 0,100% 100%,0 96%)}.day-section:after{content:"20 / 09";position:absolute;right:-2vw;bottom:4%;font:400 clamp(8rem,20vw,20rem)/1 var(--serif);color:#fff04}.day-line:before{transform:scaleX(0);transform-origin:left;transition:transform 1.8s var(--ease)}.day-line.visible:before{transform:scaleX(1)}.day-item i{position:relative;border-radius:50%;width:30px;padding:0;display:grid;place-items:center}.day-item i:after{content:"";position:absolute;inset:9px;border-radius:50%;background:#c9a783;box-shadow:0 0 0 5px #c9a78310}.day-item time{font-size:2rem}.dress{position:relative;z-index:1}

/* Venues as information typography */
.venues{position:relative;overflow:hidden;padding:15rem 0 13rem}.venues .section-heading{text-align:left;width:min(1180px,88vw);margin:0 auto 7rem}.venues .section-heading h2{font-size:clamp(5rem,11vw,11rem)}.venue-list{display:grid;grid-template-columns:repeat(12,1fr);gap:4rem 0}.venue{position:relative;padding:3rem 0 3rem 4rem;border:0;border-top:1px solid var(--hairline)}.venue+.venue{border-left:0}.venue:nth-child(1){grid-column:1/8}.venue:nth-child(2){grid-column:5/12}.venue:nth-child(3){grid-column:2/11}.venue-number{position:absolute;left:-.03em;top:-.3em;font:400 clamp(7rem,13vw,13rem)/1 var(--serif);color:#7e62490c}.venue h3{position:relative;font-size:clamp(2.8rem,5vw,5rem);margin:.4rem 0 1.3rem}.venue p{min-height:0;max-width:470px}.venue a{position:relative;display:block;min-height:44px;padding:1rem 0 .5rem;border:0}

/* Functional sections, still editorial */
.rsvp-section{position:relative;overflow:hidden;padding:15rem 0;background:linear-gradient(115deg,rgba(220,207,191,.96),rgba(234,224,211,.9)),url('../images/story5-wedding.jpg') center/cover}.rsvp-section:before{content:"";position:absolute;inset:3vw;border:1px solid #725b4025;pointer-events:none}.rsvp-ghost{position:absolute;right:-2%;top:8%;font:400 clamp(13rem,32vw,32rem)/1 var(--serif);color:#765b4108}.form-layout{position:relative;grid-template-columns:1fr .9fr;gap:13vw}.form-intro h2{font-size:clamp(3.8rem,7vw,7rem);line-height:.85;max-width:650px}.form-intro p:last-child{font-size:1rem}.form-script{font-size:3rem;display:block;rotate:-6deg;width:max-content;margin:-1rem 0 3rem 40%;opacity:.58}.editorial-form{gap:1.8rem}.editorial-form label,.editorial-form legend{font-size:.66rem;font-weight:500}.editorial-form input,.editorial-form textarea,.editorial-form select{font-size:1rem;padding:.75rem 0}.primary-btn{position:relative;overflow:hidden;border-radius:0;padding:1.1rem 1.4rem;transition:color .35s,background .35s,transform .35s var(--ease)}.primary-btn:hover{transform:translateY(-2px)}.form-status.success{font:italic 1.2rem var(--serif);padding:1rem 0;border-top:1px solid #73907670}.wishes{position:relative;overflow:hidden;padding:14rem 0 17rem}.wishes:before{content:"";position:absolute;left:-10%;bottom:-12%;width:50vw;height:50vw;border-radius:50%;background:#d9c6aa35;filter:blur(40px)}.wishes .section-heading{position:relative;z-index:1;text-align:left;width:min(1180px,88vw);margin:0 auto 7rem}.wishes .section-heading h2{font-size:clamp(4.3rem,8vw,8rem);max-width:700px}.section-script{display:block;font-size:4rem;margin:-2.5rem 0 0 45%;rotate:-7deg;opacity:.55}.wishes-wrap{position:relative;z-index:1;grid-template-columns:.85fr 1.15fr;gap:12vw}.wish-list{gap:0}.wish-note{position:relative;padding:2.2rem 1rem 2.4rem 3rem;background:transparent;box-shadow:none;border-bottom:1px solid var(--hairline)}.wish-note:before{content:"“";position:absolute;left:0;top:1rem;font:italic 3rem var(--serif);color:#ad8e6a44}.wish-note h3{font-size:1.75rem}.wish-note p{font:italic 1.08rem/1.65 var(--serif)}
.gift-call{position:relative;overflow:hidden;padding:11rem 6vw 13rem;background:linear-gradient(135deg,#bda78d,#d9c8b2)}.gift-call:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 20% 30%,#fff4,transparent 28%)}.gift-call>div{position:relative;z-index:1}.gift-call p{font-size:clamp(1.8rem,3vw,2.6rem)}.gift-letter{position:absolute;right:8%;top:50%;width:160px;height:110px;border:1px solid #765d4140;transform:translateY(-50%) rotate(8deg)}.gift-letter:before,.gift-letter:after{content:"";position:absolute;inset:0;clip-path:polygon(0 0,50% 58%,100% 0);border:1px solid #765d4140}.outline-btn{border:0;border-bottom:1px solid;padding:1rem 0;background:transparent}.outline-btn:hover{background:transparent;color:var(--ink);transform:translateY(-2px)}
.ending{min-height:100svh;background:none;overflow:hidden;isolation:isolate}.ending:before{content:"";position:absolute;z-index:-2;inset:-3%;background:var(--ending) center/cover;animation:heroBreath 20s ease-in-out alternate infinite}.ending:after{z-index:-1;height:auto;inset:0;background:radial-gradient(circle,#1a17125c,#17130fc9)}.ending h2{font-size:clamp(3rem,7vw,7rem);max-width:850px}.ending>div{max-width:920px}

/* Modal depth and unified reveals */
.modal{background:#211b16a8;backdrop-filter:blur(10px)}.modal-panel{background:#f6f0e7;transform:scale(.97);animation:modalIn .45s var(--ease) forwards}.bank-tabs button{transition:color .3s,border-color .3s}.copy-btn{transition:background .3s,color .3s}.copy-btn:hover{background:var(--ink);color:white}.js [data-reveal="fade-left"]{transform:translateX(16px)}.js [data-reveal="fade-right"]{transform:translateX(-16px)}.js [data-reveal="text-reveal"]{transform:translateY(16px)}.js [data-reveal].visible{opacity:1;transform:none}.js .image-reveal{clip-path:inset(0 0 0 0)}

@keyframes heroBreath{from{transform:scale(1)}to{transform:scale(1.04)}}@keyframes modalIn{to{transform:scale(1)}}

@media(max-width:800px){
 body{font-size:15px}.hero-frame{inset:18px}.hero:before{background-position:67% center}.hero-content{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:10vh 7vw 15vh}.hero-content>p{order:0;align-self:auto}.hero h1{display:flex;width:100%;font-size:inherit}.hero h1 span{font-size:clamp(4.1rem,19vw,6.1rem);line-height:.78}.hero h1 span:last-child{align-self:flex-end;text-align:right;translate:0}.hero h1 i{position:absolute;left:46%;bottom:28%;translate:0;font-size:3.5rem}.hero time{align-self:auto;margin-top:2.2rem}.hero-monogram{right:8vw;top:4vh}.scroll-cue{right:7vw}
 .welcome{padding:11rem 0 9rem}.welcome h2{font-size:3.8rem}.botanical{width:120px;right:-45px}.countdown-section{padding:7rem 4vw}.countdown{gap:1rem}.countdown div:not(:last-child):after{right:-.7rem}.countdown b{font-size:clamp(2.9rem,14vw,4.1rem)}.countdown span{font-size:.53rem}.save-date{padding:10rem 0 12rem}.save-grid{grid-template-columns:1fr}.save-script{left:35%;top:34%;font-size:3.5rem}.date-mark{padding:5rem 0 0}.date-mark strong{font-size:52vw}.date-mark span{margin:2.5rem 0 0 45%;font-size:2.4rem}.date-mark em{top:25%}.save-grid>.text-link{bottom:-5rem}
 .couple-section{padding:11rem 0 5rem}.couple-section .section-heading{margin-bottom:6rem}.couple-section .section-heading h2{font-size:4.3rem}.person{min-height:0;margin-bottom:11rem}.person-photo,.person-groom .person-photo,.person-bride .person-photo{position:relative;left:auto;right:auto;top:auto;width:82%;height:67vh}.person-groom .person-photo{margin-left:0}.person-bride .person-photo{margin-left:auto}.person-copy,.person-groom .person-copy,.person-bride .person-copy{position:relative;left:auto;right:auto;top:auto;width:92%;margin:-3.5rem 0 0 auto;text-align:left}.person-bride .person-copy{margin:-3rem auto 0 0}.person h3,.person-groom h3,.person-bride h3{font-size:18vw;translate:0;white-space:nowrap}.person-bride .person-copy p{margin-left:0}.person-sign{font-size:2.2rem}.couple-stroke{margin-top:-8rem}
 .family{margin:0 12px;padding:9rem 0}.family:before{inset:12px}.family .section-heading h2{font-size:4.1rem}.family-grid{grid-template-columns:1fr}.family-side{padding:3rem 7vw}.family-side+article{border-top:0;margin-top:5rem}.family-side+article:before{content:"✦";display:block;margin:-2.5rem 0 2.5rem;color:var(--gold)}.family-divider{display:none}.family-side strong{font-size:1.35rem}
 .story-section{padding:12rem 0 8rem}.story-section .section-heading{margin-bottom:7rem}.story-section .section-heading h2{font-size:19vw}.story-line{min-height:auto;width:100%;padding:0 0 0 9vw}.story-path{left:4vw;width:28px;height:100%}.story-path path{d:path("M14 0C30 300 0 650 17 950S8 1400 17 1800")}.story-item,.story-item-1,.story-item-2,.story-item-3{position:relative;left:auto;right:auto;top:auto;width:100%;padding:0;margin:0 0 10rem;display:block}.story-item .story-photo,.story-item:nth-child(even) .story-photo,.story-item-1 .story-photo,.story-item-2 .story-photo,.story-item-3 .story-photo{width:88%;height:56vh;margin-left:auto}.story-item-2 .story-photo{width:78%;margin-left:0}.story-copy,.story-item:nth-child(even) .story-copy,.story-item-2 .story-copy{width:86%;margin:-2.8rem 0 0 auto;padding:1.5rem 1rem;background:#f3ede5;text-align:left}.story-item-2 .story-copy{margin:-2.8rem auto 0 0}.story-dot,.story-item-1 .story-dot,.story-item-2 .story-dot,.story-item-3 .story-dot{left:-7vw;right:auto;top:18%;width:34px;height:34px}.story-ghost-b{display:none}
 .gallery-section{padding:11rem 0 9rem}.gallery-intro{text-align:left;margin-bottom:5rem}.gallery-intro h2{font-size:17vw}.gallery{display:grid;grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(14,76px);gap:8px;width:94vw}.gallery-item:nth-child(1){grid-area:1/1/6/3}.gallery-item:nth-child(2){grid-area:6/1/10/2}.gallery-item:nth-child(3){grid-area:6/2/11/3}.gallery-item:nth-child(4){grid-area:10/1/14/2}.gallery-item:nth-child(5){grid-area:11/2/15/3}.gallery-item:nth-child(6){display:none}.gallery-item small{bottom:.4rem;left:.6rem;color:white;text-shadow:0 1px 4px #0008}
 .day-section{margin-top:0;padding:11rem 6vw;clip-path:polygon(0 2%,100% 0,100% 100%,0 98%)}.day-line:before{transform:scaleY(0);transform-origin:top}.day-line.visible:before{transform:scaleY(1)}.day-item i{background:#333129}.venues{padding:11rem 0}.venues .section-heading{margin-bottom:4rem}.venue-list{display:block}.venue,.venue:nth-child(n){padding:4rem 0 4rem 2.5rem}.venue h3{font-size:3.2rem}.venue-number{font-size:8rem}
 .rsvp-section{padding:11rem 0}.rsvp-section:before{inset:12px}.form-layout{grid-template-columns:1fr;gap:5rem}.form-intro h2{font-size:4.3rem}.form-script{margin-left:45%}.wishes{padding:11rem 0}.wishes .section-heading h2{font-size:4.5rem}.section-script{margin-left:45%;font-size:3.2rem}.wishes-wrap{grid-template-columns:1fr;gap:5rem}.wish-note{padding-left:2rem}.gift-call{padding:9rem 6vw 11rem}.gift-letter{right:-50px;top:16%;width:120px;height:85px}.ending h2{font-size:3.6rem}
}
@media(max-width:430px){.section-inner{width:86vw}.hero h1 i{bottom:29%;font-size:3rem}.hero-content{padding-bottom:17vh}.welcome p:last-child{font-size:1.25rem}.countdown{gap:.65rem}.countdown b{font-size:2.7rem}.date-mark strong{font-size:55vw}.person-photo,.person-groom .person-photo,.person-bride .person-photo{height:62vh}.person h3,.person-groom h3,.person-bride h3{font-size:20vw}.family .section-heading h2{font-size:3.6rem}.story-item .story-photo,.story-item:nth-child(even) .story-photo,.story-item-1 .story-photo,.story-item-2 .story-photo,.story-item-3 .story-photo{height:50vh}.gallery{grid-template-rows:repeat(14,65px)}.form-intro h2{font-size:3.65rem}.wishes .section-heading h2{font-size:3.8rem}.modal-panel{border-radius:0}.gift-call p{font-size:1.65rem}}
@media(prefers-reduced-motion:reduce){.hero:before,.ending:before{animation:none}.story-path path{stroke-dashoffset:0}.person-photo:after,.image-reveal:after{transform:scaleX(0)}.person-photo img,.image-reveal img{transform:none}}

/* Motion properties kept separate so scale animation and scroll offset can coexist. */
.hero:before{translate:0 var(--parallax-y,0);will-change:transform,translate}
.story-path path{stroke-dasharray:3000;stroke-dashoffset:3000}
.story-line.visible .story-path path{stroke-dashoffset:0}

/* Section flow after removing the two timeline chapters. */
.family{padding-bottom:5rem}
.family+.venues{padding-top:7rem}
.venues{padding-bottom:5rem}
.venues+.gallery-section{padding-top:7rem}

@media(max-width:800px){
 .family{padding-bottom:4rem}
 .family+.venues{padding-top:5rem}
 .venues{padding-bottom:4rem}
 .venues+.gallery-section{padding-top:5rem}
}

/* Final stacking and type rhythm corrections from visual QA. */
.hero:before{z-index:0}.hero:after{z-index:1}.hero-content,.scroll-cue{z-index:2}.hero-frame{z-index:3}.hero-monogram{z-index:4}
.hero:before{display:none}.hero-photo{position:absolute;z-index:0;inset:-3%;width:106%;height:106%;max-width:none;object-fit:cover;object-position:var(--hero-position-desktop,50% 32%);animation:heroBreath 18s ease-in-out alternate infinite;translate:0 var(--parallax-y,0);will-change:transform,translate}.person-photo img,.gallery-item img{object-position:var(--image-position-desktop,50% 50%)}
.ending:before{z-index:0}.ending:after{z-index:1}.ending>div{z-index:2}
.js .reveal{transition-delay:var(--reveal-delay,0ms)}
@media(max-width:800px){.hero-photo{object-position:var(--hero-position-mobile,50% 50%)}.person-photo img,.gallery-item img{object-position:var(--image-position-mobile,var(--image-position-desktop,50% 50%))}.hero-monogram{left:8vw;right:auto}.hero h1{gap:.08em}.hero h1 span{line-height:.9}.hero h1 span:last-child{margin-top:.06em}.hero h1 i{left:33%;bottom:30%;font-size:2.8rem}}
@media(max-width:430px){.hero h1 span{font-size:17.5vw}.hero h1 i{left:35%;bottom:30.5%}}
.visible .image-reveal:after{transform:scaleX(0)}.visible .image-reveal img{transform:scale(1)}
@media(prefers-reduced-motion:reduce){.hero-photo{animation:none}.visible .image-reveal:after{transform:scaleX(0)}}

/* Primary wedding-gift CTA: visible, tactile, still editorial. */
.gift-cta-composition{display:grid;grid-template-columns:minmax(28px,1fr) auto minmax(28px,1fr);align-items:center;gap:clamp(1rem,3vw,2.6rem);width:min(840px,92vw);margin:3.5rem auto 0}.gift-cta-line{height:1px;background:linear-gradient(90deg,transparent,rgba(91,67,43,.42))}.gift-cta-line:last-child{background:linear-gradient(90deg,rgba(91,67,43,.42),transparent)}.gift-call .gift-cta{position:relative;min-width:min(460px,68vw);min-height:116px;padding:1.25rem 1.5rem;display:grid;grid-template-columns:76px 1fr 32px;align-items:center;gap:1.25rem;border:1px solid rgba(91,67,43,.42);border-radius:2px;background:rgba(250,246,238,.72);color:var(--ink);box-shadow:0 14px 38px rgba(76,56,37,.09),inset 0 0 0 1px rgba(255,255,255,.28);text-align:left;transition:transform .35s var(--ease),background-color .35s,border-color .35s,box-shadow .35s}.gift-call .gift-cta:before{content:"";position:absolute;inset:6px;border:1px solid rgba(117,88,59,.1);pointer-events:none;transition:border-color .35s}.gift-call .gift-cta:hover{transform:translateY(-2px);background:rgba(255,252,246,.88);border-color:rgba(79,58,38,.62);box-shadow:0 18px 42px rgba(76,56,37,.13),inset 0 0 0 1px rgba(255,255,255,.4)}.gift-call .gift-cta:hover:before{border-color:rgba(117,88,59,.18)}.gift-call .gift-cta:active{transform:translateY(0) scale(.98);transition-duration:.12s}.gift-call .gift-cta:focus-visible{outline:2px solid var(--brown);outline-offset:5px}.gift-cta-icon{width:70px;height:70px;display:grid;place-items:center;color:#795f45;transition:transform .45s var(--ease)}.gift-cta-icon svg{width:60px;height:60px;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}.gift-call .gift-cta:hover .gift-cta-icon{transform:translateY(-3px) rotate(-1deg)}.gift-cta-copy{display:flex;flex-direction:column;gap:.12rem}.gift-cta-copy small{font:500 .64rem/1.4 var(--sans);letter-spacing:.28em;text-transform:uppercase;color:var(--brown)}.gift-cta-copy strong{font:400 clamp(1.65rem,3vw,2.2rem)/1 var(--serif);letter-spacing:-.02em}.gift-cta-arrow{justify-self:end;font:300 1.25rem var(--sans);transition:transform .35s var(--ease)}.gift-call .gift-cta:hover .gift-cta-arrow{transform:translate(2px,-2px)}.gift-ribbon{stroke-dasharray:72;stroke-dashoffset:72;transition:stroke-dashoffset 1.1s var(--ease) .2s}.visible .gift-ribbon{stroke-dashoffset:0}.gift-spark{opacity:0;transform-origin:center}.visible .gift-spark-a{animation:giftSpark .65s ease-out .85s both}.visible .gift-spark-b{animation:giftSpark .65s ease-out 1.05s both}@keyframes giftSpark{0%{opacity:0;transform:scale(.4)}55%{opacity:1;transform:scale(1.08)}100%{opacity:.72;transform:scale(1)}}
@media(max-width:800px){.gift-cta-composition{grid-template-columns:1fr;width:min(520px,88vw);gap:1.4rem}.gift-cta-line{display:none}.gift-call .gift-cta{width:100%;min-width:0;min-height:104px;grid-template-columns:62px 1fr 24px;gap:1rem;padding:1.1rem 1.15rem}.gift-cta-icon{width:58px;height:58px}.gift-cta-icon svg{width:52px;height:52px}.gift-cta-copy strong{font-size:1.7rem}.gift-cta-copy small{font-size:.6rem;letter-spacing:.22em}}
@media(max-width:430px){.gift-cta-composition{width:90vw;margin-top:3rem}.gift-call .gift-cta{grid-template-columns:54px 1fr 20px;min-height:96px;padding:.95rem;gap:.8rem}.gift-cta-icon{width:50px;height:50px}.gift-cta-icon svg{width:46px;height:46px}.gift-cta-copy strong{font-size:1.48rem}.gift-cta-copy small{font-size:.56rem;letter-spacing:.18em}.gift-cta-arrow{font-size:1rem}}
@media(prefers-reduced-motion:reduce){.gift-ribbon{stroke-dashoffset:0}.gift-spark{opacity:.72}.gift-call .gift-cta,.gift-cta-icon,.gift-cta-arrow{transition:none}}

/* Mobile rhythm audit: compact normal flow without changing desktop compositions. */
.guest-count[hidden],.load-wishes[hidden]{display:none}

@media(max-width:800px){
 body{--mobile-section:clamp(4.5rem,11vw,5.5rem);--mobile-compact:clamp(3.5rem,9vw,4.5rem);--mobile-content:clamp(2.5rem,7vw,3.5rem)}
 .hero{min-height:100svh}
 .hero-content{padding:8svh 7vw 12svh}
 .scroll-cue{bottom:5svh}

 .countdown-section{padding:var(--mobile-compact) 4vw}
 .countdown{margin-top:2rem}
 .countdown-script{top:.75rem}

 .save-date{padding:var(--mobile-section) 0 calc(var(--mobile-section) + .5rem)}
 .save-grid{gap:0}
 .save-copy{padding-bottom:0}
 .date-mark{padding-top:var(--mobile-content)}
 .date-mark span{margin-top:1.5rem}
 .save-grid>.text-link{position:relative;left:auto;bottom:auto;margin-top:2rem}

 .couple-section{padding:calc(var(--mobile-section) + .5rem) 0 var(--mobile-compact)}
 .couple-section .section-heading{margin-bottom:var(--mobile-content)}
 .person{margin-bottom:5rem}
 .person:last-of-type{margin-bottom:3.5rem}
 .person-photo,.person-groom .person-photo,.person-bride .person-photo{height:clamp(470px,125vw,590px)}
 .person-copy,.person-groom .person-copy,.person-bride .person-copy{margin-top:-2.75rem}
 .person-bride .person-copy{margin-top:-2.5rem}
 .person h3,.person-groom h3,.person-bride h3{margin-bottom:.8rem}
 .person-sign{margin-top:.5rem}
 .couple-stroke{margin:-1.5rem auto 0}

 .family{padding-top:var(--mobile-section);padding-bottom:var(--mobile-compact)}
 .family .section-heading{margin-bottom:var(--mobile-content)}
 .family-side{padding:1.5rem 7vw}
 .family-side+article{margin-top:2.5rem}
 .family-side+article:before{margin:-.75rem 0 1.75rem}
 .family-side address{margin:1rem 0 0}

 .family+.venues,.venues{padding-top:var(--mobile-section);padding-bottom:var(--mobile-compact)}
 .venues .section-heading{margin-bottom:var(--mobile-content)}
 .venue,.venue:nth-child(n){padding:2.5rem 0 2.5rem 2rem}
 .venue h3{font-size:clamp(2.65rem,12vw,3.2rem);margin-bottom:1rem}
 .venue a{margin-top:1.25rem}

 .venues+.gallery-section,.gallery-section{padding-top:var(--mobile-section);padding-bottom:var(--mobile-section)}
 .gallery-intro{margin-bottom:var(--mobile-content)}
 .gallery{grid-template-rows:repeat(14,clamp(54px,16vw,70px))}

 .rsvp-section,.wishes{padding:var(--mobile-section) 0}
 .form-layout,.wishes-wrap{gap:var(--mobile-content)}
 .form-script{margin-bottom:1.75rem}
 .editorial-form{gap:1.25rem}
 .editorial-form input,.editorial-form textarea,.editorial-form select{min-height:44px;padding:.55rem 0}
 .editorial-form textarea{min-height:88px}
 .primary-btn{min-height:48px}
 .form-status{min-height:0}
 .form-status:empty{display:none}
 .wishes .section-heading{margin-bottom:var(--mobile-content)}
 .section-script{margin-top:-1.5rem}
 .wishes-wrap{grid-template-columns:1fr}
 .wish-note{padding-top:1.6rem;padding-bottom:1.75rem}
 .load-wishes{min-height:44px}

 .gift-call{padding:var(--mobile-compact) 6vw calc(var(--mobile-compact) + .5rem)}
 .gift-cta-composition{margin-top:2.25rem}

 .ending{min-height:clamp(560px,78svh,720px)}
 .ending>div{padding:2rem}

 .modal{padding:8px}
 .modal-panel{max-height:calc(100dvh - 16px);padding:clamp(1.5rem,6vw,2.25rem);overscroll-behavior:contain}
 .bank-tabs{margin:1.25rem 0}
 .bank-panel{gap:1rem}
 .bank-panel img{width:min(220px,60vw);height:auto}
 .gift-confirm{margin-top:1.5rem;padding-top:1.25rem}

 .js [data-reveal]{transform:translateY(16px)}
 .js [data-reveal].visible{transform:none}
}

@media(max-width:430px){
 .hero-content{padding-bottom:13svh}
 .hero time{margin-top:1.5rem}
 .person h3,.person-groom h3,.person-bride h3{font-size:18vw}
 .family .section-heading h2{font-size:clamp(3.15rem,15vw,3.6rem)}
 .form-intro h2{font-size:clamp(3.15rem,15vw,3.65rem)}
 .wishes .section-heading h2{font-size:clamp(3.2rem,15vw,3.8rem)}
}

/* Wedding wishes stream — a quiet editorial layer, never a notification toast. */
.wish-stream[hidden]{display:none}.wish-stream{position:fixed;z-index:260;left:clamp(24px,4vw,64px);bottom:clamp(24px,4vh,44px);width:min(420px,calc(100vw - 48px));min-height:92px;padding:1rem 1.15rem;display:grid;grid-template-columns:28px 1fr;align-items:start;gap:.75rem;color:var(--ink);background:rgba(248,243,235,.86);border-top:1px solid rgba(112,86,58,.3);border-bottom:1px solid rgba(112,86,58,.22);box-shadow:0 14px 38px rgba(48,37,27,.08);backdrop-filter:blur(7px);opacity:0;transform:translateY(8px);pointer-events:none;transition:opacity .65s ease,transform .65s var(--ease),visibility .65s}.wish-stream.is-active{opacity:1;transform:translateY(0);pointer-events:auto}.wish-stream.is-leaving{opacity:0;transform:translateY(-5px);pointer-events:none}.wish-stream:focus-visible{outline:1px solid var(--brown);outline-offset:4px}.wish-stream-ornament{padding-top:.1rem;font:italic 1.25rem/1 var(--serif);color:var(--gold)}.wish-stream-copy{min-width:0;display:grid;gap:.12rem}.wish-stream-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:500 .58rem/1.5 var(--sans);letter-spacing:.18em;text-transform:uppercase;color:var(--brown)}.wish-stream-message{margin:0;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;font:italic 1.08rem/1.35 var(--serif);quotes:"“" "”"}.wish-stream-copy em{margin-top:.2rem;font:400 .52rem/1.5 var(--sans);font-style:normal;letter-spacing:.12em;text-transform:uppercase;color:var(--soft)}

@media(max-width:800px){.wish-stream{left:5vw;bottom:calc(env(safe-area-inset-bottom,0px) + 68px);width:min(90vw,520px);min-height:84px;padding:.8rem 1rem;grid-template-columns:24px 1fr;gap:.55rem}.wish-stream-message{font-size:1rem;-webkit-line-clamp:2}.wish-stream-copy em{font-size:.5rem}.wish-stream-ornament{font-size:1.1rem}}
@media(prefers-reduced-motion:reduce){.wish-stream{transition:opacity .15s linear;transform:none}.wish-stream.is-leaving{transform:none}}

/* Guestbook viewport: three measured notes, independent from the floating stream. */
.guestbook-list-column{min-width:0}.guestbook-viewport[hidden],.guestbook-empty[hidden]{display:none}.guestbook-viewport{--guestbook-item-height:148px;--guestbook-visible-count:3;position:relative;height:calc(var(--guestbook-item-height)*var(--guestbook-visible-count));overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;touch-action:pan-y;scrollbar-width:none;will-change:scroll-position;mask-image:linear-gradient(to bottom,transparent 0,#000 7px,#000 calc(100% - 7px),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 7px,#000 calc(100% - 7px),transparent 100%)}.guestbook-viewport::-webkit-scrollbar{display:none}.guestbook-viewport:focus-visible{outline:1px solid var(--gold);outline-offset:4px}.guestbook-viewport .wish-list{display:block}.guestbook-viewport .wish-note{height:var(--guestbook-item-height);min-height:var(--guestbook-item-height);padding:1.35rem 1rem 1.4rem 2.25rem;overflow:hidden;transform:none}.guestbook-viewport .wish-note h3{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.55rem;line-height:1.15}.guestbook-viewport .wish-note p{margin:.35rem 0;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:1rem;line-height:1.5}.guestbook-viewport .wish-note time{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.guestbook-viewport .wish-note[data-clone="true"]{pointer-events:none}.guestbook-empty{margin:0;padding:1.5rem 0;border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);font:italic 1.05rem/1.6 var(--serif);color:var(--soft)}

@media(max-width:800px){.guestbook-viewport{--guestbook-item-height:clamp(124px,31vw,148px)}.guestbook-viewport .wish-note{padding:1.15rem .75rem 1.2rem 2rem}.guestbook-viewport .wish-note h3{font-size:1.4rem}.guestbook-viewport .wish-note p{font-size:.98rem}.guestbook-list-column .load-wishes{margin-top:1.25rem}}
@media(prefers-reduced-motion:reduce){.guestbook-viewport{scroll-behavior:auto}}

/* Guided viewing control remains legible while page motion changes state. */
.utility .auto-btn.is-complete{opacity:.65;cursor:default}.utility .auto-btn[hidden]{display:none}

/* Keep the sixth real wedding photo visible on mobile in a near-native portrait frame. */
@media(max-width:800px){.gallery{grid-template-rows:repeat(24,76px)}.gallery-item:nth-child(6){display:block;grid-area:15/1/25/3}}
@media(max-width:430px){.gallery{grid-template-rows:repeat(24,65px)}}
.lightbox img{width:auto;height:auto;object-fit:contain}
@media(max-width:800px){.utility .auto-btn span{display:inline}}

/* Opening invitation — a physical envelope composition with a staged reveal. */
.invitation{--opening-ease:cubic-bezier(.22,.78,.2,1);--card-travel:-64%;z-index:900;overflow:hidden;padding:clamp(18px,4vh,42px);background:#e9dfd1;opacity:1;visibility:visible;transition:none;perspective:1400px}
.invitation-bg{z-index:0;background:radial-gradient(circle at 22% 12%,rgba(255,255,255,.72),transparent 31%),radial-gradient(circle at 82% 82%,rgba(167,137,102,.16),transparent 30%),linear-gradient(145deg,#ddd0bf 0%,#f3ece2 48%,#dfd1bf 100%);transition:opacity .78s ease}
.invitation-bg:after{content:"";position:absolute;inset:0;opacity:.18;background-image:radial-gradient(rgba(90,69,46,.2) .55px,transparent .7px);background-size:5px 5px;pointer-events:none}
.opening-composition{position:relative;z-index:1;width:min(100%,720px);display:grid;justify-items:center;grid-template-rows:auto auto auto;gap:0;animation:openingEntrance .82s var(--opening-ease) both}
.invite-guest{position:static;min-height:54px;margin:0 0 clamp(24px,4vh,38px);display:grid;align-content:end;justify-items:center;text-align:center;color:#695b4b;transition:opacity .4s ease,transform .55s var(--opening-ease)}
.invite-guest span{font-size:.58rem;letter-spacing:.27em;text-transform:uppercase}.invite-guest strong{max-width:min(88vw,560px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:italic 400 clamp(1.25rem,4vw,1.65rem)/1.4 var(--serif)}
.envelope{--envelope-width:clamp(292px,84vw,620px);position:relative;isolation:isolate;width:var(--envelope-width);aspect-ratio:1.48;border:0;padding:0;overflow:visible;background:transparent;filter:drop-shadow(0 24px 22px rgba(68,49,31,.2));perspective:1200px;transform-style:preserve-3d;transform-origin:50% 70%;transition:transform .28s var(--opening-ease),filter .65s ease}
.envelope:focus-visible{outline:1px solid rgba(104,76,49,.78);outline-offset:12px}
.envelope-back{position:absolute;z-index:1;inset:0;border:1px solid rgba(102,76,49,.2);background:linear-gradient(155deg,#d4c1a9,#e1d1bc 54%,#cdb79e);box-shadow:inset 0 1px rgba(255,255,255,.55),inset 0 -14px 28px rgba(94,67,40,.08)}
.envelope-inner{position:absolute;z-index:2;inset:1px;background:linear-gradient(180deg,rgba(86,61,37,.2),rgba(126,94,62,.06) 34%,transparent 62%);clip-path:polygon(0 0,100% 0,50% 59%);opacity:.72;transition:opacity .5s ease}
.envelope-letter{position:absolute;z-index:3;left:7%;right:7%;bottom:0;height:100%;padding:15% 9% 10%;display:grid;align-content:center;justify-items:center;gap:.18rem;overflow:hidden;color:#463b30;background:linear-gradient(150deg,#fffdf9,#f8f1e6 70%,#efe3d2);border:1px solid rgba(112,84,54,.2);box-shadow:0 3px 7px rgba(72,50,29,.08),inset 0 0 36px rgba(154,121,86,.04);transform:translateY(-3%) scale(.99);transform-origin:center 78%;transition:transform .98s var(--opening-ease),box-shadow .65s ease,opacity .72s ease;will-change:transform,opacity}
.envelope-letter:before{content:"";position:absolute;inset:5%;border:1px solid rgba(132,101,67,.2);pointer-events:none}
.letter-copy{position:relative;z-index:1;opacity:0;transform:translateY(5px);transition:opacity .48s ease,transform .55s var(--opening-ease)}
.letter-kicker{font:500 .5rem/1.4 var(--sans);letter-spacing:.23em;text-transform:uppercase;color:#846c55}
.letter-names{margin:.4rem 0;display:grid;justify-items:center;font-family:var(--serif);line-height:.82}.letter-names b{font-size:clamp(1.65rem,6vw,3.15rem);font-weight:400;letter-spacing:-.035em}.letter-names i{margin:.05rem 0;font-size:clamp(1.15rem,3vw,1.65rem);font-weight:400;color:#9a7956}
.letter-date{font:500 .58rem/1.5 var(--sans);letter-spacing:.25em}.letter-guest{max-width:90%;margin-top:.55rem;padding-top:.45rem;border-top:1px solid rgba(118,87,56,.2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:italic .92rem/1.3 var(--serif);color:#725d49}
.envelope-flap{position:absolute;z-index:6;inset:0;overflow:hidden;background:linear-gradient(155deg,#eadcca 4%,#d8c3aa 68%,#cfb89d);clip-path:polygon(0 0,100% 0,50% 60%);transform:rotateX(0);transform-origin:top center;transform-style:preserve-3d;backface-visibility:visible;box-shadow:0 5px 9px rgba(77,53,31,.11);transition:transform .8s cubic-bezier(.3,.05,.18,1),opacity .5s ease,box-shadow .45s ease;will-change:transform}
.envelope-flap span{position:absolute;inset:0;background:linear-gradient(180deg,#cab295,#e4d3bd);clip-path:inherit;transform:rotateX(180deg) translateZ(1px);backface-visibility:hidden}
.envelope-side{position:absolute;z-index:5;inset:0;pointer-events:none;transition:opacity .58s ease}.envelope-side-left{clip-path:polygon(0 0,52% 61%,0 100%);background:linear-gradient(105deg,#e8d8c5,#d7c1a7)}.envelope-side-right{clip-path:polygon(100% 0,48% 61%,100% 100%);background:linear-gradient(255deg,#dfcdb6,#ccb397)}
.envelope-front{position:absolute;z-index:4;inset:0;clip-path:polygon(0 34%,50% 65%,100% 34%,100% 100%,0 100%);background:linear-gradient(165deg,#e9dac7 0%,#d6c0a6 78%,#cbb294);box-shadow:inset 0 1px rgba(255,255,255,.5);transition:opacity .58s ease,transform .7s var(--opening-ease)}
.envelope-front:after{content:"";position:absolute;inset:0;background:linear-gradient(33deg,transparent 49.7%,rgba(112,83,53,.16) 50%,transparent 50.35%),linear-gradient(-33deg,transparent 49.7%,rgba(112,83,53,.14) 50%,transparent 50.35%);opacity:.62}
.wax{position:absolute;z-index:7;left:50%;top:51%;width:clamp(58px,15vw,76px);height:clamp(58px,15vw,76px);translate:-50% -50%;display:grid;place-items:center;border-radius:48% 52% 46% 54%/53% 47% 55% 45%;color:#ead7c3;background:radial-gradient(circle at 34% 28%,#ad715f 0 8%,#945b4b 35%,#7f493e 100%);box-shadow:inset 2px 2px 3px rgba(255,227,212,.17),inset -3px -4px 6px rgba(74,32,27,.2),0 6px 9px rgba(72,43,30,.24);transition:transform .34s var(--opening-ease),opacity .28s ease,translate .34s var(--opening-ease);will-change:transform,opacity}
.wax:before{content:"";position:absolute;inset:10%;border:1px solid rgba(239,208,190,.28);border-radius:53% 47% 51% 49%}.wax strong{position:relative;font:italic 500 clamp(.82rem,2.7vw,1.05rem)/1 var(--serif);letter-spacing:.02em;text-shadow:0 1px rgba(73,35,29,.4)}
.open-hint{position:static;margin:clamp(25px,4vh,34px) 0 0;color:#735f4d;font-size:.61rem;letter-spacing:.2em;text-transform:uppercase;animation:openingHint 3.2s ease-in-out 1.1s infinite;transition:opacity .35s ease,transform .45s var(--opening-ease)}
.invitation.is-pressing .envelope{animation:envelopeTap .2s ease-out both}.invitation.is-pressing .open-hint{opacity:.5}
.invitation.is-seal-released .wax{transform:scale(.92) rotate(3deg);translate:-50% calc(-50% + 7px);opacity:0}
.invitation.is-flap-opening .envelope-flap{transform:rotateX(178deg);box-shadow:0 -4px 7px rgba(72,50,30,.06)}
.invitation.is-flap-behind .envelope-flap{z-index:2}
.invitation.is-card-rising .envelope-letter{transform:translateY(var(--card-travel)) scale(1);box-shadow:0 16px 28px rgba(72,50,29,.18),inset 0 0 36px rgba(154,121,86,.04)}
.invitation.is-card-rising .invite-guest,.invitation.is-card-rising .open-hint{opacity:0;transform:translateY(5px)}.invitation.is-card-rising .open-hint{animation:none}
.invitation.is-card-revealed .letter-copy{opacity:1;transform:translateY(0)}.invitation.is-card-revealed .letter-names{transition-delay:.07s}.invitation.is-card-revealed .letter-date{transition-delay:.14s}.invitation.is-card-revealed .letter-guest{transition-delay:.2s}
.invitation.is-card-focused .envelope-letter{z-index:8;transform:translateY(calc(var(--card-travel) - 2%)) scale(1.035);box-shadow:0 21px 40px rgba(65,43,24,.2)}
.invitation.is-card-focused .envelope-back,.invitation.is-card-focused .envelope-inner,.invitation.is-card-focused .envelope-side,.invitation.is-card-focused .envelope-front,.invitation.is-card-focused .envelope-flap{opacity:.55}.invitation.is-card-focused .envelope{filter:drop-shadow(0 12px 16px rgba(68,49,31,.12))}
.invitation.is-transitioning{pointer-events:none}.invitation.is-transitioning .invitation-bg{opacity:0}.invitation.is-transitioning .envelope-letter{opacity:0;transform:translateY(calc(var(--card-travel) - 3%)) scale(1.06)}.invitation.is-transitioning .envelope-back,.invitation.is-transitioning .envelope-inner,.invitation.is-transitioning .envelope-side,.invitation.is-transitioning .envelope-front,.invitation.is-transitioning .envelope-flap{opacity:0}
.invitation.opened{opacity:0;visibility:hidden;transition:opacity .62s ease,visibility 0s linear .62s}
@keyframes openingEntrance{from{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:none}}
@keyframes envelopeTap{0%,100%{transform:scale(1)}55%{transform:scale(.985)}}
@keyframes openingHint{0%,100%{opacity:.66}50%{opacity:1}}

@media(max-width:800px){.invitation{--card-travel:-60%;padding-inline:16px}.opening-composition{width:100%}.invite-guest{margin-bottom:clamp(22px,3.5vh,30px)}.letter-names b{font-size:clamp(1.7rem,7.5vw,2.45rem)}.invitation.is-card-focused .envelope-letter{transform:translateY(calc(var(--card-travel) - 1%)) scale(1.025)}.invitation.is-transitioning .envelope-letter{transform:translateY(calc(var(--card-travel) - 2%)) scale(1.045)}}
@media(max-width:430px){.envelope{--envelope-width:clamp(286px,84vw,360px)}.letter-guest{font-size:.82rem}}
@media(max-height:700px){.invitation{--card-travel:-56%;padding-block:12px}.envelope{--envelope-width:clamp(270px,76vw,390px)}.invite-guest{min-height:42px;margin-bottom:16px}.open-hint{margin-top:20px}.envelope-letter{padding-top:13%}.letter-names{margin:.22rem 0}.letter-guest{margin-top:.3rem;padding-top:.3rem}}
@media(min-width:801px){.invitation{--card-travel:-55%}.invitation.is-card-focused .envelope-letter{transform:translateY(calc(var(--card-travel) - 2%)) scale(1.05)}}
@media(min-width:801px) and (max-height:820px){.invitation{--card-travel:-58%}.envelope{--envelope-width:min(500px,64vw)}.invite-guest{margin-bottom:24px}.open-hint{margin-top:24px}}
@media(prefers-reduced-motion:reduce){.opening-composition{animation:none}.open-hint{animation:none}.envelope,.wax,.envelope-flap,.envelope-letter,.letter-copy,.invitation-bg,.invitation.opened{transition-duration:.22s!important}.invitation.is-flap-opening .envelope-flap{transform:rotateX(165deg)}.invitation.is-card-focused .envelope-letter{transform:translateY(var(--card-travel)) scale(1.015)}}
