@font-face{font-family:Garden;src:url('assets/fonts/CormorantGaramond-Regular.woff') format('woff');font-style:normal;font-display:swap;font-weight:400}
@font-face{font-family:Garden;src:url('assets/fonts/CormorantGaramond-Italic.woff') format('woff');font-style:italic;font-display:swap;font-weight:400}
:root{--paper:#f6f3eb;--ink:#3d4f3c;--rose:#9b7169;--sage:#8f9d7d;--gold:#ab9062;--muted:#66675a;color:var(--ink);background:#e6e7de;font:19px/1.5 Garden,Georgia,serif;font-synthesis:none;text-rendering:optimizeLegibility}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;-webkit-font-smoothing:antialiased}button,input,textarea,select{font:inherit;color:inherit}button,a,summary{-webkit-tap-highlight-color:transparent}button,a,summary,input,textarea,select{touch-action:manipulation}a{color:inherit}button{cursor:pointer}button:disabled{cursor:default}a:focus-visible,button:focus-visible,summary:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid #6e7551;outline-offset:5px}img{display:block;max-width:100%;height:auto}p{margin:0 0 18px}h1,h2,h3,h4{font-weight:400;margin:0;text-wrap:balance}h2{font-size:clamp(34px,6vw,48px);line-height:1.08;margin-bottom:24px;letter-spacing:-.7px}h2 em{font-style:italic;color:var(--rose)}h3{font-size:28px;line-height:1.2;margin-bottom:12px}h4{font-size:22px}i,em,.italic{font-style:italic}.italic{font-size:22px;line-height:1.4;color:#73715d}.eyebrow,.small-caps{font-family:Georgia,serif;text-transform:uppercase;font-size:10px;letter-spacing:2.4px;line-height:1.8;color:#736b58}.eyebrow{margin-bottom:20px}.small-caps{letter-spacing:1.8px}.fine-rule{display:block;width:64px;height:1px;background:#b9a37980;margin:28px auto}.section{text-align:center;position:relative;scroll-margin-top:22px}#invitation{max-width:660px;margin:0 auto;overflow:clip;background-color:var(--paper);background-image:repeating-linear-gradient(0deg,#9e977707 0px,#9e977707 1px,transparent 1px,transparent 3px),repeating-linear-gradient(90deg,#fff6 0px,#fff6 1px,transparent 1px,transparent 4px);box-shadow:0 0 70px #36443412}.sr-only{position:absolute!important;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;left:16px;top:-100px;z-index:100;background:var(--paper);padding:12px 18px}.skip-link:focus{top:15px}[hidden]{display:none!important}
/* A quiet outer linen cover. The plaque belongs to the right leaf. */
.opening{height:clamp(720px,100svh,1100px);position:relative;isolation:isolate;overflow:hidden;background:#f7f2e7}.garden-stage{position:absolute;inset:0;overflow:hidden;z-index:1;pointer-events:none}.hero-garden{position:absolute;height:43%;width:auto;max-width:none;bottom:3%;left:50%;transform:translateX(-50%)}.hero-copy{position:absolute;top:20.5%;left:18%;right:18%;text-align:center;z-index:2;opacity:0;overflow-wrap:anywhere}.hero-copy .eyebrow{font-size:8px;letter-spacing:1.8px;margin-bottom:20px}.hero-copy h1{font-size:clamp(40px,7vw,62px);line-height:.99;letter-spacing:-.5px}.hero-copy h1>span{display:block}.hero-copy h1 i{display:block;font-size:.48em;line-height:1.6;color:#8c956e}.hero-date{font-size:13px;line-height:1.45;margin:24px 0 8px}.hero-city{font-size:11px;letter-spacing:2px;text-transform:uppercase}.curtain-stage{position:absolute;inset:0 0 auto;height:56%;z-index:3;pointer-events:none}#curtain-canvas{display:block;width:100%;height:100%}.curtain-valance{position:absolute;width:100%;height:auto;left:0;top:-6%;z-index:2}.book-door{position:absolute;inset:0 auto 0 0;width:50%;z-index:5;background-color:#a2ad93;background-image:linear-gradient(90deg,#69745a15,#f2f0d722 45%,#64745422),repeating-linear-gradient(0deg,#ffffff1a 0,#ffffff1a .6px,#596c5a0a 1px,transparent 2px),repeating-linear-gradient(90deg,#f3f0da18 0,#f3f0da18 .5px,transparent 1px,transparent 2.8px);border:1px solid #77836466;box-shadow:inset 0 0 36px #52614124;will-change:auto}.book-door--left{border-right:1px solid #64705688;box-shadow:inset -5px 0 8px #55634c22;transform-origin:left center}.book-door--right{left:50%;transform-origin:right center;box-shadow:inset 4px 0 6px #f3f2df22}.opening-plaque{border:0;background:transparent;padding:0;position:absolute;width:clamp(164px,44vw,240px);left:0;top:min(45%,45svh);transform:translate(-50%,-50%);filter:drop-shadow(1px 5px 5px #3a422a33)}.opening-plaque img{width:100%}.plaque-copy{position:absolute;inset:24% 12% 19%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px}.plaque-copy small{font-size:7px;letter-spacing:1.3px;font-family:Georgia,serif}.plaque-copy>[data-initials]{font-size:34px;line-height:1;color:#687353}.plaque-copy em{font-size:12px;line-height:1.4;color:#79735e}.cover-hints{position:absolute;z-index:6;top:min(71%,71svh);left:0;right:0;text-align:center;color:#35472f;pointer-events:none}.cover-hints p{font-size:17px;margin:9px 0 28px}.cover-scroll{font-size:13px;color:#4b5942}.cover-scroll>span{display:inline-block;margin-left:10px}.tap-gesture{display:inline-block;width:27px;height:32px}.tap-gesture svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}.tap-gesture circle{transform-origin:21px 14px;animation:tap-ring 2.8s ease-out infinite}.hero-scroll{position:absolute;bottom:1.2%;left:15%;right:15%;text-align:center;z-index:4;text-decoration:none;font-size:14px;opacity:0;display:flex;align-items:center;justify-content:center;gap:16px;min-height:44px}.scroll-line{height:22px;width:1px;background:#798260;position:relative;animation:scroll-cue 2.8s ease-in-out infinite}.scroll-line:after{content:'';position:absolute;width:6px;height:6px;border-right:1px solid #798260;border-bottom:1px solid #798260;bottom:0;left:-3px;transform:rotate(45deg)}.opening.is-open .tap-gesture circle{animation:none}.opening-finished .book-door,.opening-finished .cover-hints{display:none}.opening-finished .hero-copy,.opening-finished .hero-scroll{opacity:1}.opening-finished .hero-copy{transform:none!important}
/* The same cloth continues through every chapter; illustrations set the rhythm. */
.welcome{padding:0 0 10px}.hanging-garden{width:100%;height:auto;aspect-ratio:12/5;object-fit:contain;pointer-events:none}.welcome-copy{padding:16px 14% 0}.welcome-copy p:last-child{max-width:330px;margin:0 auto;font-size:21px;line-height:1.5}.welcome-swans{width:66%;margin:12px auto 0;aspect-ratio:40/27;object-fit:contain}.pearl-garland{width:100%;margin-top:-3%;pointer-events:none}.countdown{padding:65px 6% 70px}.countdown h2{margin-bottom:14px}.countdown>div>p:not(.eyebrow):not(.italic){color:var(--muted)}.countdown-medallions{display:flex;justify-content:center;gap:2%;margin:28px auto 36px;max-width:480px}.countdown-medallions>div{width:32%}.medallion{aspect-ratio:1;background:url('assets/pearl-medallion.webp') center/contain no-repeat;display:grid;place-items:center}.medallion strong{font-size:clamp(27px,7.6vw,47px);font-weight:400;line-height:1;padding-top:8%;font-variant-numeric:tabular-nums}.countdown-medallions>div>span{display:block;font-family:Georgia,serif;font-size:9px;letter-spacing:2px;text-transform:uppercase;margin-top:10px}.countdown .italic{font-size:20px}.family{padding:50px 14% 75px}.family>p:first-child{font-size:18px}.family h2{font-size:44px;line-height:1.2;margin:27px 0}.family h2 span,.family h2 i{display:block}.family h2 i{font-size:20px;color:#9a8565;line-height:2}.family>p:last-child{margin-top:29px;line-height:2.1}.celebration{padding:0 5%}.celebration-card{position:relative;border:68px solid transparent;border-image:url('assets/celebration-frame.webp') 240 220 fill / 78px 70px / 0 stretch round;min-height:700px;margin:0 -1%;padding:12px 0}.celebration-content{margin:0 -20px;position:relative}.celebration h2{font-size:38px;line-height:1.15;margin-bottom:15px}.celebration .eyebrow{font-size:8px;letter-spacing:1.7px}.celebration h3{font-size:26px}.venue-region{font-style:italic;margin-top:8px;color:var(--muted)}.event-date{font-size:17px;line-height:1.5}.event{padding:21px 0 0}.event-time{margin:3px 0;font-size:18px}.event-place{font-size:15px;margin:0;color:#656955}.event-note{font-size:15px;font-style:italic;line-height:1.5;margin:5px 0 0;color:#746854}.address{font-size:14px;line-height:1.5;margin:26px 0 10px}.event-actions{display:flex;gap:15px;justify-content:center;position:relative;z-index:4;flex-wrap:wrap;margin-top:14px}.link-menu{position:relative;max-width:100%}.link-menu summary{font-size:16px;min-height:44px;display:flex;gap:12px;align-items:center;justify-content:center;border-bottom:1px solid #a8977966;cursor:pointer;list-style:none;padding:3px 4px}.link-menu summary::-webkit-details-marker{display:none}.menu-options{position:absolute;z-index:10;top:100%;left:50%;transform:translateX(-50%);width:180px;padding:8px;background:#fbf8ef;border:1px solid #b8ae90;box-shadow:0 10px 20px #54432b20;text-align:left}.menu-options a,.menu-options button{display:block;width:100%;padding:12px 8px;background:none;border:0;text-decoration:none;font-size:16px;min-height:44px;text-align:left}.menu-options a:hover,.menu-options button:hover{background:#e9eadc}.demo-note{font-size:11px;line-height:1.5;color:#76705e;margin:24px auto 0;max-width:230px}.celebration>.hanging-garden{width:110%;max-width:none;margin:5px -5% 0}.sway{transform-origin:50% 5%;animation:garden-sway 7s ease-in-out infinite;animation-play-state:paused}.sway.is-in-view{animation-play-state:running}.dress-code{padding:45px 12% 50px}.dress-code>p:not(.eyebrow){font-size:20px}.palette{display:flex;gap:13px;justify-content:center;margin:25px 0 5px}.palette span{display:block;width:16px;height:16px;border-radius:50%;border:1px solid #82735544;box-shadow:inset 0 0 0 2px #ffffff66;background:#ba9387}.palette span:nth-child(2){background:#9aa77f}.palette span:nth-child(3){background:#e9e0c7}.palette span:nth-child(4){background:#b7a06f}.motif{position:relative;overflow:hidden;aspect-ratio:512/500}.motif img{position:absolute;width:300%;height:204.8%;max-width:none;left:0;top:0}.toast img{left:-100%}.dinner img{left:-200%}.attire,.music,.gift{aspect-ratio:512/524}.attire img,.music img,.gift img{height:195.41984733%;top:-95.41984733%}.music img{left:-100%}.gift img{left:-200%}.attire{width:80%;max-width:330px;margin:15px auto 0}.dress-note{margin-top:4px;color:#77745d}.story-section{padding:45px 0 25px}.story-section>h2{padding:0 18%;margin-bottom:6px}.story-section>.eyebrow{margin-bottom:12px}.story-wreath{position:relative;width:100%;aspect-ratio:899/1100}.story-wreath>img{position:absolute;inset:0;width:100%;height:100%}.story-copy{position:absolute;left:24%;right:24%;top:27%;text-align:center}.story-copy p{font-size:19px;line-height:1.4;margin-bottom:0}.story-copy .fine-rule{width:36px;margin:21px auto}.story-copy .italic{font-size:18px}.story-expanded .story-wreath{aspect-ratio:auto;padding:210px 16% 100px;min-height:650px}.story-expanded .story-wreath>img{height:240px;object-fit:cover;object-position:top;opacity:.85;mask-image:linear-gradient(#000 65%,transparent)}.story-expanded .story-copy{position:relative;inset:auto}.story-expanded .story-copy p{font-size:21px;line-height:1.6}.timeline{padding:65px 9%}.timeline>div>p:not(.eyebrow){font-size:19px;color:var(--muted)}.timeline-rows{position:relative;margin:35px 0}.timeline-track{position:absolute;left:37%;top:8%;bottom:8%;width:1px;background:repeating-linear-gradient(to bottom,#9b9c7c 0,#9b9c7c 3px,transparent 3px,transparent 9px)}.timeline-pearl{position:absolute;top:calc(var(--progress,0)*100%);left:50%;width:13px;height:13px;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle at 35% 30%,#fffefa,#f1e8d7 40%,#c6bb9b 75%,#fff9eb);box-shadow:1px 2px 3px #75664455;z-index:2}.timeline-row{display:grid;grid-template-columns:32% 1fr;gap:12%;align-items:center;min-height:160px;text-align:left}.timeline-row .motif{width:100%}.timeline-row .timeline-time{font-size:26px;margin:0 0 7px;font-variant-numeric:tabular-nums}.timeline-title{font-size:11px;line-height:1.6;text-transform:uppercase;letter-spacing:1.3px;margin:0 0 7px;font-family:Georgia,serif;text-wrap:wrap}.timeline-row .timeline-note{font-size:16px;line-height:1.4;margin:0;color:#75735e}.timeline>.italic{font-size:19px;margin-top:35px}.brunch{padding:10px 10% 75px}.brunch .fine-rule{margin-bottom:65px}.brunch h2{font-size:42px}.tea-vignette{width:112%;max-width:none;margin:15px -6% 25px;aspect-ratio:10/7;object-fit:contain}.brunch h3{font-size:30px}.brunch p{margin-bottom:10px}.brunch #brunch-address{font-size:16px;color:var(--muted)}.brunch .italic{font-size:21px;margin:24px 0}.guest-guide{padding:40px 12% 80px}.guest-guide h2{font-size:38px}.guest-details{margin-top:30px;text-align:left}.guest-details details{border-bottom:1px solid #a4a68855}.guest-details details:first-child{border-top:1px solid #a4a68855}.guest-details summary{display:flex;align-items:center;justify-content:space-between;gap:20px;list-style:none;font-size:20px;padding:20px 0;cursor:pointer}.guest-details summary::-webkit-details-marker{display:none}.guest-details summary>span{font-size:24px;font-weight:400;color:#9e8f72}.guest-details details[open] summary>span{transform:rotate(45deg)}.guest-details details>p{font-size:18px;line-height:1.6;margin-bottom:22px}.gifts{padding:0 9% 85px}.gift-note{padding:30px 10% 45px;border:1px solid #bba77d;outline:1px solid #c8b99a80;outline-offset:7px;position:relative;border-radius:35px 35px 4px 4px;background:#fffaf021}.gift-note .gift{width:115px;margin:0 auto 25px}.gift-note h2{font-size:40px}.gift-note>p:not(.eyebrow){font-size:21px}.gift-note>.italic{margin:0}.rsvp{padding:40px 13% 60px}.rsvp-deadline{font-size:18px}#rsvp-form{text-align:left;margin:35px auto 0;max-width:400px}#rsvp-form>label,#guest-count-wrap>label,#dietary-wrap>label,legend{display:block;font-size:20px;margin:22px 0 10px}label small{font-size:15px;color:var(--muted)}input:not([type=radio]),select,textarea{width:100%;border:1px solid #a7ac935e;border-radius:0;background:#fffdf655;min-height:49px;padding:12px 13px;font-size:18px;box-shadow:none}input::placeholder,textarea::placeholder{color:#80816e;opacity:1;font-size:17px}textarea{resize:vertical;min-height:105px}fieldset{border:0;margin:10px 0 0;padding:0;min-width:0}legend{padding:0}.radio-label{min-height:44px;display:flex;align-items:center;gap:12px;font-size:19px;cursor:pointer}.radio-label input{appearance:auto;width:18px;height:18px;accent-color:#5d6e4c;margin:0}.reply-button{display:flex;align-items:center;justify-content:space-between;gap:15px;width:100%;background:#536447;color:#f9f4e8;border:1px solid #536447;padding:16px 19px;font-size:19px;margin-top:26px;min-height:54px}.reply-button:hover{background:#42543a}.demo-disclosure{font-size:13px;line-height:1.5;text-align:center;color:#777362;margin:15px 0}.form-status{font-size:17px;line-height:1.5;margin:20px 0 0;min-height:0}.form-status:empty{margin:0}.closing{text-align:center;padding:65px 0 35px}.closing>div{padding:0 12%}.closing h2{font-size:48px;margin:18px 0}.closing h2>span{display:block}.closing h2>i{font-size:27px;display:block;color:#9c8d6d;line-height:1.4}.closing .small-caps{font-size:9px;letter-spacing:1.5px}.closing-garden{width:100%;margin:20px 0 30px}.maker{display:inline-flex;flex-direction:column;gap:6px;align-items:center;text-decoration:none}.maker>span{font-size:30px;line-height:1.1}.maker>small{font:7px Georgia,serif;letter-spacing:2.1px}.collection-back{display:block;margin:25px auto 0;font-size:13px;color:#6b725b;text-underline-offset:4px}
.js .reveal{opacity:0;transform:translateY(16px);transition:opacity .75s ease,transform .75s cubic-bezier(.2,.65,.3,1)}.js .reveal.revealed,.js .reveal.is-in-view{opacity:1;transform:none}.is-hidden *{animation-play-state:paused!important}.is-hidden .sway{animation-play-state:paused}@keyframes tap-ring{0%,20%{opacity:.25;transform:scale(.7)}50%,80%{opacity:1;transform:scale(1.2)}100%{opacity:.25;transform:scale(.7)}}@keyframes scroll-cue{0%,100%{transform:translateY(-3px)}50%{transform:translateY(3px)}}@keyframes garden-sway{0%,100%{transform:rotate(-.6deg)}50%{transform:rotate(.6deg)}}
@container woven (min-width: 540px) {.opening{min-height:1000px}.hero-copy{top:22%}.hero-copy .eyebrow{font-size:10px;margin-bottom:25px}.hero-date{font-size:17px}.hero-city{font-size:13px}.plaque-copy>[data-initials]{font-size:44px}.plaque-copy small{font-size:9px}.plaque-copy em{font-size:15px}.welcome-copy{padding-top:25px}.welcome-copy p:last-child{font-size:24px;max-width:390px}.countdown{padding-top:90px;padding-bottom:90px}.family{padding-top:70px;padding-bottom:105px}.family h2{font-size:58px}.celebration-card{border-width:85px 90px;border-image-width:110px 100px;min-height:760px}.celebration h2{font-size:48px}.celebration h3{font-size:34px}.event h4{font-size:27px}.event-time{font-size:21px}.event-note,.event-place{font-size:19px}.event-date{font-size:20px}.event{padding-top:28px}.celebration-content{margin:0 -18px}.dress-code{padding-top:55px;padding-bottom:80px}.story-copy p{font-size:26px;line-height:1.5}.story-copy .italic{font-size:24px}.story-copy .fine-rule{margin:30px auto}.timeline{padding-top:90px;padding-bottom:90px}.timeline-row{min-height:185px}.timeline-title{font-size:13px}.timeline-row .timeline-time{font-size:33px}.timeline-row .timeline-note{font-size:20px}.timeline .motif{width:85%}.brunch{padding-bottom:95px}.gift-note{padding:45px 16% 65px}.gift-note .gift{width:140px}.rsvp{padding-bottom:85px}.closing h2{font-size:60px}}
@container woven (max-width: 360px) {:root{font-size:18px}.hero-copy{left:16%;right:16%;top:21%}.hero-copy h1{font-size:37px}.hero-date{font-size:12px;margin-top:18px}.hero-copy .eyebrow{font-size:7px;margin-bottom:15px}.welcome-copy{padding-left:12%;padding-right:12%}.welcome-copy p:last-child{font-size:19px}.countdown{padding:50px 4%}.countdown h2{font-size:34px}.countdown .italic{font-size:18px}.family{padding-left:10%;padding-right:10%}.celebration-card{border-width:65px 54px;border-image-width:72px 57px}.celebration-content{margin:0 -18px}.celebration h2{font-size:34px}.celebration h3{font-size:25px}.celebration .eyebrow{font-size:7px;letter-spacing:1.4px}.event-actions{gap:6px}.link-menu summary{font-size:15px;gap:5px}.menu-options{width:157px}.story-copy p{font-size:16px;line-height:1.4}.story-copy .italic{font-size:16px}.story-copy .fine-rule{margin:17px auto}.story-section>h2{font-size:33px}.timeline{padding-left:7%;padding-right:7%}.timeline-row{min-height:155px;gap:12%}.timeline-title{font-size:9px;letter-spacing:1px}.timeline-row .timeline-note{font-size:15px}.timeline-row .timeline-time{font-size:25px}.brunch h2,.gift-note h2{font-size:35px}.guest-guide h2{font-size:34px}.rsvp{padding-left:10%;padding-right:10%}.closing h2{font-size:44px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.js .reveal{opacity:1;transform:none}.hero-scroll .scroll-line{transform:none}}
@media print{.book-door,.curtain-stage,.cover-hints,.hero-scroll,.skip-link,.maker,.collection-back{display:none!important}.hero-copy{opacity:1!important;transform:none!important}#invitation{max-width:100%;overflow:visible}.opening{height:900px}.js .reveal{opacity:1;transform:none}.section{break-inside:avoid}.link-menu .menu-options{position:static;transform:none}.form-status{display:none}}

/* Keep prose inside the wreath's real clear field; long copy flows below its arch. */
.story-copy{top:32%}.story-section>.italic{margin:0 0 20px}.arrival{aspect-ratio:1200/849}.arrival img{position:static;width:100%;height:auto;max-width:100%}.opening-plaque{width:min(clamp(164px,44vw,240px),42svh)}.skip-link{visibility:hidden}.skip-link:focus-visible{visibility:visible;top:15px}
.opening.hero-expanded{height:var(--expanded-height,1100px);min-height:0}.hero-expanded .hero-copy{top:155px;left:16%;right:16%}.hero-expanded .curtain-stage{height:var(--expanded-curtain,560px)}.hero-expanded .hero-garden{height:340px;bottom:50px}.hero-expanded .hero-copy h1 span{overflow-wrap:anywhere}.hero-expanded .hero-scroll{bottom:7px}
@container woven (min-width: 540px) {.hero-expanded .hero-copy{top:190px}.hero-expanded .hero-garden{height:440px}}

.opening:not(.hero-in-view) .tap-gesture circle,.opening:not(.hero-in-view) .scroll-line{animation-play-state:paused}

.section h2,.section h3,.section h4,.section p,.closing h2{overflow-wrap:anywhere}.has-long-names .family h2,.has-long-names .closing h2{font-size:36px}@container woven (min-width: 540px) {.has-long-names .family h2,.has-long-names .closing h2{font-size:46px}}

.hero-expanded .hero-copy{top:220px}.hero-copy .eyebrow{max-width:78%;margin-left:auto;margin-right:auto}.hero-expanded .hero-copy .eyebrow{max-width:85%}@container woven (min-width: 540px) {.hero-expanded .hero-copy{top:280px}.story-copy{left:27%;right:27%;top:33%}.story-expanded .story-copy{left:auto;right:auto;top:auto}}
@media(max-height:500px){.plaque-copy{gap:8px;inset:28% 14% 24%}.plaque-copy small{font-size:6px;letter-spacing:1px}.plaque-copy>[data-initials]{font-size:28px}.plaque-copy em{font-size:9px;line-height:1.3}.cover-hints p{margin:5px 0 10px;font-size:15px}.cover-scroll{font-size:11px}}
.celebration h3{margin-left:-8px;margin-right:-8px;hyphens:auto}

/* V2: measured textile composition, calm clear paper, and a larger attached seal. */
:root{--paper:#f6f3ee}#invitation{background-image:none;background-color:var(--paper)}
.opening{height:clamp(620px,100svh,1100px);background:#f4efe5 repeating-linear-gradient(0deg,#aa875008 0 1px,transparent 1px 4px) center/390px auto}.hero-garden{height:46%;bottom:.6%}.curtain-stage{height:54.5%}.curtain-valance{height:44%;max-height:none;object-fit:fill;top:-6.8%}.hero-copy{top:25.5%;left:20%;right:20%}.hero-copy h1{font-size:34px;line-height:1.08}.hero-copy h1 i{font-size:.75em;line-height:1.15}.hero-date{font-size:14px;line-height:1.5;margin:18px -10px 0;letter-spacing:1px}.hero-scroll{bottom:0;min-height:40px;font-size:12px;gap:12px;text-shadow:0 1px 3px #fff,0 0 4px #fff}.hero-scroll .scroll-line{height:17px}
.book-door{background-color:#9eaa90;background-image:repeating-linear-gradient(0deg,#aa875008 0 1px,transparent 1px 4px);background-size:390px auto;background-blend-mode:multiply;border-color:#596b4d38}.book-door--left{box-shadow:inset -5px 0 8px #33472e66}.book-door--right{box-shadow:inset 3px 0 5px #ffffff44}.opening-plaque{width:min(220px,57vw,43svh);aspect-ratio:.76;top:min(50%,50svh);filter:drop-shadow(-3px 5px 3px #313d2c88)}.opening-plaque img{width:100%;height:100%}.plaque-copy{inset:20%;gap:0}.plaque-copy>[data-initials]{font-size:45px;color:#9c8051;letter-spacing:-2px;text-shadow:0 1px 0 #fff4}.cover-hints{top:min(81%,81svh)}.cover-hints p{font-size:14px;margin:6px 0 12px;letter-spacing:.4px}.cover-scroll{font-size:12px;color:#42553c}.tap-gesture{width:23px;height:27px}.opening:not(.is-open) .cover-hints{color:#33482e}
.welcome{padding:0 0 18px;margin-top:8px;background:url('assets/welcome-vines.webp') center/100% 100% no-repeat;isolation:isolate}.welcome:before{content:'';position:absolute;inset:2px;z-index:-1;background:repeating-linear-gradient(0deg,#aa875008 0 1px,transparent 1px 4px) center/390px auto;opacity:.28}.welcome-copy{padding:12px 19% 0}.welcome-copy h2{font-size:32px;line-height:1.15;margin-bottom:20px}.welcome-copy p:last-child{font-size:19px;line-height:1.5;max-width:330px}.welcome-swans{width:80%;margin:14px auto 0}.welcome>.pearl-garland{width:96%;margin:-4% auto 0}.countdown{padding:50px 0 35px}.countdown-tapestry{position:relative;aspect-ratio:900/1500;width:100%;max-width:540px;margin:auto}.countdown-frame{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}.countdown-content{position:absolute;left:3%;right:3%;top:34%;text-align:center}.countdown h2{font-size:34px;margin-bottom:32px}.countdown-medallions{margin:0 auto;gap:1%;max-width:440px}.countdown-medallions>div{width:32%}.medallion strong{font-size:42px;padding-top:7%;letter-spacing:-1.6px}.countdown-medallions>div>span{margin-top:16px;font-size:9px}.family{padding:35px 14% 70px}.family h2{font-size:40px;margin:24px 0}.family h2 i{font-size:19px}.family>p:last-child{margin-top:24px}.celebration-card{min-height:0;padding:2px 0}.celebration h2{font-size:34px;margin:10px 0 16px}.celebration .fine-rule{margin:20px auto}.celebration h3{font-size:25px}.celebration .venue-region{margin-bottom:20px}.event{padding-top:18px}.event h4{font-size:21px}.event-time{font-size:17px}.event-place{font-size:15px}.event-note:empty{display:none}.event-note{font-size:15px}.event-date{font-size:16px}.celebration .address{margin-top:23px}.celebration .demo-note{margin-top:20px}.celebration>.hanging-garden{margin-top:2px}.dress-code{padding-top:30px;padding-bottom:45px}.dress-code h2{font-size:34px}.dress-code>p:not(.eyebrow){font-size:19px}.story-section{padding-top:40px}.story-section>h2{font-size:34px;margin-bottom:0}.timeline{padding-top:60px;padding-bottom:65px}.timeline h2{font-size:36px}.timeline-row{min-height:150px}.timeline>div>p:not(.eyebrow){font-size:18px}.timeline-row .timeline-time{font-size:25px}.timeline-row .timeline-note{font-size:16px}.brunch{padding-bottom:60px}.brunch .fine-rule{margin-bottom:55px}.brunch h2{font-size:36px}.brunch h3{font-size:28px}.guest-guide{padding-top:30px;padding-bottom:65px}.guest-guide h2{font-size:34px}.gifts{padding:10px 3% 55px}.gift-note{border:0;outline:0;border-radius:0;background:none;padding:0;aspect-ratio:900/1100;width:100%;max-width:520px;margin:auto}.gift-frame{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}.gift-copy{position:absolute;inset:25% 19% auto}.gift-note h2{font-size:34px;margin-bottom:24px}.gift-copy>p{font-size:19px;line-height:1.55}.gift-copy .fine-rule{margin:23px auto}.gift-copy>.italic{font-size:19px}.gift-note.gift-expanded{aspect-ratio:auto;padding:115px 17% 80px;border:1px solid #b5a47f;background:#fbf6ec}.gift-expanded .gift-frame{height:125px;object-fit:cover;object-position:top;mask-image:linear-gradient(#000 50%,transparent)}.gift-expanded .gift-copy{position:relative;inset:auto}.rsvp{padding-top:35px}.rsvp h2{font-size:36px}.closing{padding-top:55px}.closing h2{font-size:42px}.closing>div>.italic{font-size:20px}
@container woven (min-width: 540px) {.opening{min-height:1000px}.hero-copy{top:25.5%}.hero-copy h1{font-size:46px}.hero-date{font-size:18px;margin-top:24px}.curtain-valance{height:43%;top:-8%}.plaque-copy>[data-initials]{font-size:50px}.opening-plaque{width:min(260px,43svh)}.welcome-copy{padding-top:14px}.welcome-copy h2{font-size:42px}.welcome-copy p:last-child{font-size:24px}.welcome-swans{width:75%}.countdown{padding-top:70px;padding-bottom:50px}.countdown h2{font-size:42px;margin-bottom:45px}.medallion strong{font-size:55px}.countdown-medallions>div>span{font-size:11px}.family h2{font-size:50px}.celebration h2{font-size:43px}.celebration h3{font-size:32px}.event h4{font-size:25px}.event-time{font-size:21px}.event-place{font-size:18px}.event-date{font-size:20px}.event{padding-top:25px}.dress-code h2,.story-section>h2,.guest-guide h2{font-size:42px}.dress-code{padding-bottom:60px}.dress-code>p:not(.eyebrow){font-size:23px}.timeline h2,.brunch h2,.rsvp h2{font-size:44px}.timeline-row{min-height:180px}.timeline-row .timeline-time{font-size:31px}.timeline-row .timeline-note{font-size:20px}.gift-note h2{font-size:43px}.gift-copy>p{font-size:24px}.gift-copy>.italic{font-size:23px}.closing h2{font-size:52px}}
@container woven (max-width: 360px) {.hero-copy h1{font-size:30px}.hero-date{font-size:12px;letter-spacing:.5px}.plaque-copy>[data-initials]{font-size:38px}.welcome-copy{padding-left:19%;padding-right:19%}.welcome-copy h2{font-size:28px}.welcome-copy p:last-child{font-size:17px}.countdown h2{font-size:29px;margin-bottom:26px}.medallion strong{font-size:36px}.countdown-medallions>div>span{font-size:8px;margin-top:12px}.family h2{font-size:37px}.celebration h2{font-size:30px}.celebration h3{font-size:24px}.event{padding-top:17px}.gift-note h2{font-size:29px;margin-bottom:17px}.gift-copy>p{font-size:17px;line-height:1.4}.gift-copy .fine-rule{margin:15px auto}.gift-copy>.italic{font-size:17px}.gifts{padding-left:2%;padding-right:2%}}
@media(max-height:500px){.plaque-copy>[data-initials]{font-size:36px}.cover-hints p{font-size:13px;margin:3px 0 7px}.cover-scroll{font-size:11px}.cover-hints{top:min(82%,82svh)}}
.hero-date{margin-left:0;margin-right:0}
.opening{background-image:linear-gradient(#f7f3ea80,#f7f3ea80),repeating-linear-gradient(0deg,#aa875008 0 1px,transparent 1px 4px);background-size:auto,390px auto}
/* Enlarged text keeps its requested size and gets its own flowing middle. */
.countdown-expanded{aspect-ratio:auto}.countdown-expanded .countdown-frame{display:none}.countdown-expanded:before,.countdown-expanded:after{content:'';display:block;width:100%;aspect-ratio:2/1;background:url('assets/countdown-tapestry.webp') top center/100% auto no-repeat}.countdown-expanded:after{background-position:bottom center}.countdown-expanded .countdown-content{position:relative;inset:auto;padding:25px 4% 35px}.countdown-expanded .countdown-medallions{display:grid;grid-template-columns:1fr;gap:28px}.countdown-expanded .countdown-medallions>div{width:min(90%,270px);margin:auto}.countdown-expanded .countdown-medallions>div>span{margin-top:14px}.countdown-expanded h2{overflow-wrap:anywhere}
/* The outer cover lifts into perspective before the inner fabric gathers. */
/* Isolate each leaf's 3D subtree so translucent children cannot cut holes
   through another leaf during Chromium depth sorting. */
.cover-scene{position:absolute;inset:0;z-index:5;perspective:1404px;perspective-origin:50% 50%;transform-style:flat;pointer-events:none}
.cover-scene .book-door{transform-style:preserve-3d;backface-visibility:hidden;pointer-events:none}
.cover-scene .book-door--left{box-shadow:inset -3px 0 5px #33472e66,12px 0 27px #26332245}
.cover-scene .book-door--right{box-shadow:inset 2px 0 4px #ffffff66,-12px 0 27px #26332245}
.book-door:after{content:'';position:absolute;top:0;bottom:0;width:1px;background:#e6e7ca;backface-visibility:hidden;pointer-events:none;transform:translateZ(1px)}
.book-door--left:after{right:0}.book-door--right:after{left:0;background:#d8dcc0}
.door-light{position:absolute;inset:0;pointer-events:none;opacity:0;backface-visibility:hidden}
.book-door--left .door-light{background:linear-gradient(90deg,#263d2710,#23362166)}
.book-door--right .door-light{background:linear-gradient(90deg,#f9f3db50,#f8f2dc10)}
.cover-scene .opening-plaque{pointer-events:auto;backface-visibility:hidden;transform:translate(-50%,-50%) translateZ(2px)}
.opening-finished .cover-scene{display:none}
.cover-cast-shadow{position:absolute;inset:0;z-index:4;pointer-events:none;background:linear-gradient(90deg,#29301e70,#282b2038 50%,#29301e70);opacity:.85}
.doors-open .cover-cast-shadow{display:none}
.cover-scene .book-door--left{background-color:#929f83}
.book-door--left .door-light{background:linear-gradient(90deg,#26361caa,#1c2611f2)}
.book-door--right .door-light{background:linear-gradient(90deg,#fffadc77,#f8f2dc22)}
.door-light{transform:translateZ(.5px)}
/* Keep the complete opening guide within short viewports. */
@media(max-height:500px){.cover-hints{top:auto;bottom:max(12px,calc(100% - 100svh + 12px))}.opening-plaque{top:min(43svh,calc(71.7svh - 120px))}}

/* Event choices expand in the page, leaving every note and following chapter readable. */
.event-actions{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;max-width:320px;margin-left:auto;margin-right:auto}
.link-menu{width:100%;min-width:0}
.link-menu summary{justify-content:space-between;padding:8px 4px;min-height:48px}
.menu-options{position:static;transform:none;width:100%;margin-top:8px;box-shadow:none}
.menu-options a,.menu-options button{overflow-wrap:anywhere;line-height:1.4}

/* The monogram is the entrance; keep the invitation in place until it opens. */
html.opening-locked{overflow:hidden;overscroll-behavior:none;scroll-behavior:auto}
.opening-locked body{position:fixed;inset:0;overflow:hidden;overflow:clip;overscroll-behavior:none}
.opening-locked .skip-link,.opening-locked .hero-scroll{visibility:hidden;pointer-events:none}
.opening-locked .skip-link{display:none}
.skip-link{visibility:visible;top:0;max-width:calc(100% - 32px);transform:translateY(calc(-100% - 20px));opacity:0;pointer-events:none}
.skip-link:focus,.skip-link:focus-visible{top:15px;transform:none;opacity:1;pointer-events:auto}
.opening:not(.is-open) .cover-hints{color:#10200e}
.cover-hints p{font-size:17px;line-height:1.4;letter-spacing:.1px;margin:10px 0 0;text-shadow:0 1px 1px #ffffff66}
.hero-scroll{bottom:max(12px,calc(100% - 100svh + 12px));left:20%;right:20%;min-height:44px;font-size:14px;color:#40513a;background:#f7f3eae6;border:1px solid #b5aa8b55;border-radius:28px;text-shadow:none}
@media(max-height:500px){.cover-hints p{font-size:15px;margin-top:6px}}
/* Keep the embroidered composition; make small practical copy readable on phones. */
.timeline-title{font-size:14px;line-height:1.5;text-transform:none;letter-spacing:.1px;color:#3d4f3c}
.timeline-row .timeline-note{font-size:16px;line-height:1.5;color:#626553}
.countdown-medallions>div>span{font-size:11px;letter-spacing:1.2px;color:#5e6555}
.family .small-caps,.closing .small-caps{font-size:12px;line-height:1.8;letter-spacing:1.2px;color:#5e6555}
.event-place,.celebration .address,.brunch #brunch-address{font-size:16px;line-height:1.5;color:#5e6555}
.link-menu summary,.menu-options a,.menu-options button{font-size:16px;color:#485c43}
.demo-note,.demo-disclosure{color:#626553}
input::placeholder,textarea::placeholder{color:#696e5c}
@container woven (min-width: 540px) {.timeline-title{font-size:16px}.timeline-row .timeline-note{font-size:20px}.event-place{font-size:18px}}

/* The atelier cover is one continuous embroidered artwork, divided at its seam.
   Keep this face in the first viewport even when personalised copy expands the
   invitation behind it. Each leaf still owns its original isolated 3D subtree. */
.opening .cover-scene{height:min(100%,100svh);bottom:auto}
.cover-scene .book-door{
  background-color:#a5af97;
  background-image:url('assets/atelier-cover.webp');
  background-size:200% 100%;
  background-repeat:no-repeat;
  background-blend-mode:normal;
  background-origin:border-box;
  background-clip:border-box;
  border:0;
}
.cover-scene .book-door--left{background-position:left center;box-shadow:inset -1px 0 1px #46523b32}
.cover-scene .book-door--right{background-position:right center;box-shadow:inset 1px 0 1px #fff9df66}
.cover-scene .book-door:after{background:#766f52;opacity:.45}
.cover-scene .opening-plaque{
  width:clamp(138px,39vw,154px);
  max-width:32svh;
  aspect-ratio:4/5;
  top:50%;
  filter:drop-shadow(1px 5px 5px #4e56383d);
}
.opening-plaque img{height:100%;object-fit:contain}
.opening-plaque .plaque-copy{inset:24% 15%;gap:0}
.opening-plaque .plaque-copy>[data-initials]{font-size:clamp(28px,8vw,34px);line-height:1;color:#6d7652;letter-spacing:-1.2px;white-space:nowrap;text-shadow:0 1px 0 #fff9}
.opening .cover-hints{inset:0;bottom:auto;height:min(100%,100svh);color:#39472e;pointer-events:none}
.opening:not(.is-open) .cover-hints{color:#39472e}
.cover-hints .cover-eyebrow,.cover-hints .cover-message,.cover-hints .cover-touch{position:absolute;left:15%;right:15%;margin:0}
.cover-hints .cover-eyebrow{top:29%;font:10px/1.5 Georgia,serif;letter-spacing:3px;text-transform:uppercase;text-shadow:0 1px 0 #ffffff60}
.cover-hints .cover-message{top:65.5%;font-size:clamp(23px,6vw,28px);font-style:italic;line-height:1.12;letter-spacing:.1px;text-shadow:0 1px 0 #ffffff4d}
.cover-hints .cover-touch{top:78%;display:flex;align-items:center;justify-content:center;gap:9px}
.cover-touch .tap-gesture{width:21px;height:25px;flex:none}
.cover-hints .cover-touch p{margin:0;font:13px/1.5 Georgia,serif;letter-spacing:.15px;text-shadow:0 1px 0 #ffffff60}
@container woven (min-width: 540px) {
  .cover-scene .opening-plaque{width:178px;max-width:29svh}
  .opening-plaque .plaque-copy>[data-initials]{font-size:39px}
  .cover-hints .cover-eyebrow{font-size:11px}
  .cover-hints .cover-touch p{font-size:14px}
}
@media(max-height:500px){
  .cover-scene .opening-plaque{max-width:27svh}
  .opening-plaque .plaque-copy>[data-initials]{font-size:clamp(20px,6svh,30px)}
  .cover-hints .cover-eyebrow{top:25%;font-size:9px;letter-spacing:2px}
  .cover-hints .cover-message{display:none}
  .cover-hints .cover-touch{top:74%}
  .cover-hints .cover-touch p{font-size:12px}
}
@media print{.opening .cover-scene,.opening .cover-hints{display:none!important}}
/* Preserve the flower proportions on a rotated phone: show the ribbon's
   central crop rather than flattening a portrait textile into a wide strip. */
@media(max-height:500px) and (min-aspect-ratio:1/1){
  .cover-scene .book-door{background-size:200% auto}
}

/* A complete silk stage conceals the garden until the cinematic draw begins. */
.opening .curtain-stage,.opening.hero-expanded .curtain-stage{height:100%}
.opening .curtain-valance{height:clamp(125px,19svh,190px);top:-12px;object-fit:fill}
.opening .cover-scene{transform-origin:50% 50%}
.opening .garden-stage{transform-origin:50% 74%}
.opening-light{position:absolute;inset:0;z-index:4;pointer-events:none;opacity:0;background:radial-gradient(ellipse at 50% 44%,#fff9df00 28%,#55442c52 100%)}
.opening-finished .opening-light{display:none}
.opening #couple-title>span,.opening #couple-title>i{transform-origin:50% 70%}
@container woven (min-width: 540px) {.opening .curtain-valance{height:220px;top:-18px}}
@media(max-height:500px){.opening .curtain-valance{height:115px;top:-10px}}
@media print{.opening-light{display:none!important}}
.opening .hero-copy h1{font-size:clamp(36px,10.8vw,54px)}
/* Longer personalised names keep the established readable fit inside the silk. */
.has-long-names .opening .hero-copy h1{font-size:34px}
@container woven (max-width: 360px) {.has-long-names .opening .hero-copy h1{font-size:30px}}
@container woven (min-width: 540px) {.has-long-names .opening .hero-copy h1{font-size:46px}}
