/* Screenshot-calibrated composition. Container-relative sizes preserve the
   approved mobile proportions at 320–540px. Section paddings remain in design.css. */
@font-face{font-family:'Libre Boda';src:url('/assets/fonts/libre-bodoni.ttf') format('truetype');font-style:normal;font-weight:400 700;font-display:swap}
@font-face{font-family:'Libre Boda';src:url('/assets/fonts/libre-bodoni-italic.ttf') format('truetype');font-style:italic;font-weight:400 700;font-display:swap}
:root{--serif:'Libre Boda',Georgia,serif;--lilac:#eee7f7;--gold:#ac841c;--ink:#431348;--plum:#431d49}
main{container-type:inline-size;background:radial-gradient(ellipse at 70% 15%,#f3edfc40,transparent 70%),var(--lilac)}
h1,h2,h3,.btn{font-family:var(--serif);font-optical-sizing:auto;font-weight:400;letter-spacing:-.055em}h2 i{font-weight:400}.wedding-landing h2{font-size:13.2cqw;line-height:.97}.wedding-landing .section{padding-left:7cqw;padding-right:7cqw}.eyebrow{font-size:max(8px,1.75cqw);letter-spacing:.25em;gap:3cqw}.editorial-note{font:400 max(7px,1.65cqw)/1.6 var(--body);letter-spacing:.16em;text-transform:uppercase;color:#714475;position:absolute!important;margin:0!important;z-index:3!important}.editorial-note:after{content:'';display:block;width:4.5cqw;height:1px;background:var(--gold);margin-top:2cqw}.section-number{font:400 5.5cqw/1 var(--serif);color:var(--gold);display:flex;gap:2cqw;align-items:center;margin-bottom:3cqw;letter-spacing:-.04em}.section-number:after{content:'';display:block;height:1px;background:var(--gold);width:28cqw}.section-kicker{font:400 max(8px,1.85cqw)/1.3 var(--body);letter-spacing:.3em;margin-bottom:1.5cqw}.flower img{object-fit:contain;height:auto;filter:drop-shadow(2px 5px 4px #3c164516)}
/* Photo is cropped only at the sky; shoes remain visible. Smooth torn edge. */
.hero-photo{padding-bottom:0}.hero-photo>img{aspect-ratio:4/5;object-fit:cover;object-position:center bottom;mask-image:url('/assets/design/hero-mask.svg');mask-size:100% 100%;mask-repeat:no-repeat;-webkit-mask-image:url('/assets/design/hero-mask.svg');-webkit-mask-size:100% 100%}.hero-photo:after{display:none}.hero-names{left:8cqw;right:4cqw;bottom:7cqw;font-size:18.5cqw;line-height:.81;letter-spacing:-.075em;font-weight:500;text-shadow:0 3px 6px #15291455,0 9px 25px #18201238}.hero-names .second{display:flex;align-items:baseline;font-size:1em;letter-spacing:-.075em;gap:0;white-space:nowrap;margin-left:4cqw}.hero-names .second i{font-size:1.1em;line-height:.8;color:#d7b956;margin-right:-.025em;font-style:normal}.hero-names .partner-name{display:inline;font-size:.9em;letter-spacing:-.055em}.date-section{padding-top:65px;z-index:2;overflow:visible}.date-section h2{font-size:13.3cqw;font-weight:500;letter-spacing:-.08em;position:relative;z-index:3}.date-display{margin-top:5.8cqw;gap:2.8cqw}.date-day{font:400 23.4cqw/.9 var(--serif);letter-spacing:-.09em}.date-month{font:400 5.8cqw/.99 var(--serif);letter-spacing:-.065em;border-color:var(--gold);padding-left:2.5cqw}.date-month b{font-size:1.25em;font-weight:500}.date-time{font-size:4cqw;letter-spacing:.25em;max-width:58%;margin-top:3.8cqw;padding-top:2.6cqw;white-space:nowrap}.date-section>.flower{width:43cqw;right:0;top:9cqw;transform:translateX(1cqw);z-index:1}.date-section>.flower:before{content:'';position:absolute;inset:8% 2% 4% 2%;border:1px solid #b89232;border-radius:50%;transform:rotate(-18deg);z-index:-1}.welcome{position:relative;z-index:2}.welcome .eyebrow{margin:0 0 3cqw;text-align:left;justify-content:flex-start;font:400 max(8px,1.9cqw)/1.65 var(--serif);letter-spacing:.27em;max-width:none}.welcome .eyebrow:after{display:block;position:absolute;bottom:-2cqw;left:0;width:5cqw;height:1px;background:var(--gold)}.welcome .welcome-copy{font:400 max(12px,2.9cqw)/1.37 var(--body)!important;letter-spacing:.055em;max-width:none!important;text-align:center;margin:5cqw auto 0!important;white-space:normal}.welcome .gratitude{font:400 max(9px,2.1cqw)/1.7 var(--serif);letter-spacing:.29em;max-width:none;margin-top:4cqw}.gratitude:before{width:7cqw;margin-bottom:3.5cqw}
/* Venue heading, rose and marginal caption. */
.celebration>.eyebrow{max-width:52%}.celebration h2{font-size:14.7cqw;line-height:.82;padding-bottom:0;letter-spacing:-.07em;width:max-content;max-width:75%}.celebration>.flower{width:32cqw;right:16cqw;top:8px;z-index:1}.celebration-note{right:4.2cqw;top:118px;width:14cqw}.venue-card{margin-top:4cqw;padding:4cqw;gap:2cqw;grid-template-columns:1.05fr .95fr;background:#fffcf6;box-shadow:0 9px 12px #451b4929}.venue-card h3{font-size:5.7cqw;line-height:1.05;letter-spacing:-.06em;white-space:nowrap}.venue-card .floor{font-size:4.2cqw;line-height:1.1;margin:1cqw 0 2.7cqw}.venue-card .address{font-size:max(12px,3.2cqw);line-height:1.4;white-space:nowrap}.venue-time{font:400 4.4cqw/1.2 var(--serif);letter-spacing:-.06em;margin:2.8cqw 0 4cqw;white-space:nowrap}.venue-time:before{margin-bottom:2.7cqw;width:5cqw}.venue-info .micro{font:400 max(7px,1.6cqw)/1.6 var(--body);letter-spacing:.22em;margin:3cqw 0 0}.venue-info .micro:after{content:'';display:block;height:1px;background:var(--gold);width:5cqw;margin-top:2cqw}.venue-card .map,.venue-card .map iframe{min-height:43cqw;height:100%;margin:0}.venue-card>.btn{min-height:44px;font-size:4.5cqw;padding:1.5cqw 4cqw;letter-spacing:-.025em}
/* The rail has its own column; timestamps cannot collide with the descriptions. */
.timeline-section>.eyebrow{margin-bottom:3cqw}.timeline-section h2{font-size:13.1cqw;line-height:.91;letter-spacing:-.06em;margin-bottom:5cqw}.timeline-note{right:4cqw;top:126px;width:18cqw}.timeline{padding-left:9cqw;background:none}.timeline:before{left:4.5cqw;top:6cqw;bottom:6cqw}.timeline li{grid-template-columns:9cqw 26cqw minmax(0,1fr);gap:5.5cqw;min-height:12cqw}.timeline li:after{left:-5.1cqw;width:1.3cqw;height:1.3cqw;top:calc(50% - .65cqw)}.timeline-icon{width:9cqw;height:9cqw}.timeline time{font:400 6.8cqw/1 var(--serif);letter-spacing:-.065em}.timeline time small{font-size:.7em;letter-spacing:-.055em}.timeline li>div{padding-left:0;min-width:0}.timeline li>div:before{width:4.5cqw;left:-8cqw;top:2.4cqw}.timeline h3{font:400 4.35cqw/1.1 var(--serif);letter-spacing:-.055em;white-space:nowrap}.timeline .micro{font:400 max(7px,1.7cqw)/1.5 var(--body);letter-spacing:.16em;margin-top:.8cqw}
/* Wardrobe keeps its original section spacing; internal elements are compact. */
.dress>.eyebrow{max-width:47%;margin-bottom:2cqw}.dress h2{font-size:12.4cqw;line-height:.84;max-width:48%;letter-spacing:-.055em}.dress .dress-note{font:400 max(13px,3.4cqw)/1.1 var(--serif);max-width:53%;margin-top:4cqw;letter-spacing:-.05em}.swatches{gap:.5cqw;margin-top:1cqw;max-width:55%}.swatch{gap:2cqw;font:400 max(13px,3.3cqw)/1.1 var(--serif)}.swatch>span{width:4.2cqw;height:4.2cqw;border-color:var(--gold)}.swatch small{display:inline;font:400 max(9px,2cqw)/1.1 var(--serif);white-space:nowrap}.dress>.flower{width:40cqw;right:23cqw;top:5px;opacity:1;transform:rotate(8deg);z-index:1}.dress>.attire{width:29cqw;right:5cqw;top:125px;z-index:2}.dress-bottom{display:flex;align-items:end;gap:3cqw;margin-top:4cqw;position:relative;z-index:2}.dress-bottom p{font:400 max(7px,1.5cqw)/1.6 var(--body);letter-spacing:.17em}.dress-bottom>span{height:1px;background:var(--gold);flex:1}.dress-bottom p:last-child{margin-left:auto}.dress-bottom p:last-child:after{content:'';display:block;width:4cqw;height:1px;background:var(--gold);margin-top:1.2cqw}
/* Gifts are a two-column composition, rather than one long headline. */
.gift .section-number{margin-top:0}.gift .section-kicker{margin-top:0}.gift h2{font-size:10.7cqw;line-height:.87;max-width:47%;letter-spacing:-.055em}.gift-layout{display:grid;grid-template-columns:44% 56%;gap:0;margin-top:-7cqw;align-items:end;position:relative}.gift-copy{font:400 max(8px,2cqw)/1.45 var(--body);letter-spacing:.11em;align-self:end;margin-bottom:3cqw}.gift-card{width:100%;min-height:35cqw;height:auto;aspect-ratio:1.3;border-radius:13cqw 3cqw 13cqw 10cqw;padding:5cqw 2cqw;gap:4cqw;background:#fffbf4;box-shadow:0 8px 24px #451b490b;align-items:center;justify-content:center}.gift-card .gift-icon{width:8cqw;height:8cqw;align-self:flex-start;margin-left:7cqw}.gift-card p{font:400 max(10px,2.5cqw)/1.35 var(--serif);letter-spacing:-.04em;white-space:nowrap}.gift-card>.flower{width:31cqw;right:-5cqw;top:-23cqw;z-index:1}
/* Three overlapping photographs; decorative samples are replaced by real uploads. */
.gallery-section .section-number{margin-bottom:2.5cqw}.gallery-section h2{font-size:10.8cqw;line-height:.88;letter-spacing:-.055em}.gallery-note{top:75px;right:6cqw;width:15cqw;padding-left:3.5cqw;border-left:1px solid var(--gold);letter-spacing:.03em}.gallery-note:after{display:none}.gallery-section>.gallery-intro{font:400 max(12px,2.9cqw)/1.35 var(--body);margin:2.8cqw 0 0}.gallery-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:1.5cqw -1cqw 4cqw;padding:0}.photo-card{padding:1.4cqw;background:#fff;aspect-ratio:.83;box-shadow:0 6px 10px #35193730;position:relative}.photo-card:nth-child(3n+1){transform:translateY(5cqw) rotate(-9deg);z-index:3}.photo-card:nth-child(3n+2){transform:translateY(.5cqw) rotate(-3deg);z-index:2}.photo-card:nth-child(3n+3){transform:translateY(-2cqw) rotate(8deg);z-index:1}.photo-card img{height:100%;width:100%;object-fit:cover}.gallery-samples .photo-card{cursor:default}.sample-caption{font:400 max(9px,1.8cqw)/1.4 var(--body);margin:8cqw 0 2cqw;text-align:center;opacity:.65}.gallery-section>.btn{font-size:max(17px,4cqw);min-height:44px;padding:1.6cqw 4cqw;letter-spacing:-.03em}
/* Playlist: title on the left, waveform and caption on the right. */
.music-section{padding-bottom:170px}.music-section h2{font-size:10.3cqw;line-height:.92;letter-spacing:-.06em;max-width:68%}.music-section .wave{top:100px;right:24cqw;width:21cqw;height:auto;margin:0;opacity:1}.music-note{top:83px;right:5.5cqw;width:17cqw;padding-left:3cqw;border-left:1px solid var(--gold);letter-spacing:0;font-size:max(8px,1.8cqw);line-height:1.45}.music-note:after{display:none}.music-section>p:not(.section-number):not(.section-kicker):not(.editorial-note){font:400 max(12px,2.8cqw)/1.4 var(--body);max-width:80%;margin:3cqw 0 3.5cqw}.music-section>.btn{font-size:max(15px,3.7cqw);gap:2cqw;letter-spacing:-.04em;min-height:44px;padding:1.4cqw 4cqw}.music-section>.flower{width:31cqw;right:1cqw;bottom:120px;z-index:1}.rsvp{padding-bottom:28px}.rsvp .signoff{padding-top:40px}.signoff p{font:400 3cqw/1.35 var(--serif);letter-spacing:.19em}.signoff h3{font:400 3.7cqw/1.35 var(--serif);letter-spacing:.2em;margin:1cqw auto 0;position:relative;z-index:3}.signoff .triforce{width:6cqw;margin:2cqw auto 0}.rsvp>.flower{width:28cqw;bottom:0;right:1cqw;z-index:1}.rsvp h2{font-size:10cqw;letter-spacing:-.04em}.rsvp .btn.gold{font-size:max(21px,5.4cqw);letter-spacing:-.045em}.music-toggle{width:54px;height:54px}
/* Invitation cover calibrated separately from the landing. */
main.envelope-page{display:block;padding:0;min-height:0;overflow:hidden}.envelope-canvas{position:relative;height:168cqw;min-height:560px}.envelope-page h1.names{position:absolute;left:35cqw;top:3.6cqw;margin:0;font-size:11.8cqw;line-height:.88;letter-spacing:-.06em;text-align:left;font-weight:400}.envelope-page h1.names>span{display:block;margin-left:-3cqw;white-space:nowrap}.envelope-page h1.names b{font-weight:400}.envelope-page .small-title{position:absolute;top:27cqw;left:35cqw;margin:0;font:400 1.85cqw/1.4 var(--body);letter-spacing:.3em;gap:2cqw;white-space:nowrap}.small-title:before,.small-title:after{width:7.5cqw}.envelope-page .invitation-title{position:absolute;top:35.5cqw;right:5cqw;margin:0;font:400 9cqw/.94 var(--serif);letter-spacing:-.06em;z-index:3;text-align:center}.envelope-canvas>.flower.left{position:absolute;left:-25cqw;top:12cqw;width:80cqw;z-index:0;transform:none}.envelope-canvas>.flower.right{position:absolute;left:auto;top:auto;right:-1cqw;bottom:0;width:31cqw;z-index:1;transform:rotate(-9deg)}.envelope-page .envelope-stage{position:absolute;left:21cqw;top:52cqw;width:64cqw;height:96cqw;max-width:none;aspect-ratio:2/3;margin:0;z-index:2;filter:drop-shadow(0 15px 14px #321c3c36)}.envelope-page .envelope-label{top:61%;left:8%;right:8%}.envelope-page .envelope-label strong{font:italic 400 7.2cqw/1.06 var(--serif);letter-spacing:-.055em;overflow-wrap:anywhere;text-wrap:balance}.envelope-page .envelope-label p{font:400 max(8px,2cqw)/1.35 var(--serif);letter-spacing:.2em;max-width:40cqw;margin:2.5cqw auto 0}.envelope-label p:before{width:6cqw;margin-bottom:2.6cqw}.envelope-page .ribbon-half{width:70%;height:62.222%;top:24%}.envelope-page .seal{width:8cqw;height:8cqw;left:calc(50% - 4cqw);top:39%;z-index:8}.envelope-canvas>#open-envelope{position:absolute;top:153.5cqw;left:24.5cqw;width:51cqw;margin:0;min-height:44px;height:10cqw;font:400 max(14px,3cqw)/1.1 var(--serif);letter-spacing:.1em;padding:1.5cqw 3cqw;white-space:nowrap}.envelope-canvas>#envelope-status{position:absolute;top:164.8cqw;width:100%;margin:0;text-align:center;font:10px var(--body)}
@media(max-width:359px){.timeline h3{font-size:4.2cqw}.timeline .micro{letter-spacing:.08em}.gallery-note{font-size:7px}.music-note{font-size:7px}.welcome .welcome-copy{letter-spacing:.015em;font-size:11px!important}.venue-card h3{font-size:5.4cqw}.venue-info .micro{font-size:7px}.envelope-canvas{min-height:0}.date-section h2{font-size:13cqw}.music-section>.btn{font-size:13px}.swatch small{font-size:8px}}
@media(prefers-reduced-motion:reduce){.flower img{animation:none!important}}
/* Final text fitting after measuring the selected typeface. */
@font-face{font-family:'Libre Boda';src:url('/assets/fonts/libre-regular.ttf') format('truetype');font-style:normal;font-weight:400;font-display:swap}
@font-face{font-family:'Libre Boda';src:url('/assets/fonts/libre-medium.ttf') format('truetype');font-style:normal;font-weight:500;font-display:swap}
@font-face{font-family:'Libre Boda';src:url('/assets/fonts/libre-italic.ttf') format('truetype');font-style:italic;font-weight:400;font-display:swap}
.welcome .eyebrow{display:block}.date-section h2{font-size:12.4cqw}.timeline-section h2{font-size:12.2cqw;line-height:.91}.timeline-section h2 i{white-space:nowrap}.music-section h2{font-size:9.2cqw;max-width:80%;line-height:.94}.music-section h2 i{white-space:nowrap}.music-section>.btn{width:61cqw;max-width:none;white-space:nowrap;font-size:3.6cqw;min-height:44px}.music-section>.flower{top:180px;bottom:auto;width:29cqw;right:1cqw}.gallery-section>.btn{width:34cqw;max-width:none;white-space:nowrap;min-height:44px}.section-number{font-size:5.5cqw!important}.gallery-note,.music-note{white-space:nowrap}.envelope-page .invitation-title{width:53cqw;right:4cqw;font-size:8.5cqw;white-space:nowrap}.envelope-canvas>.flower.left{left:-10cqw;width:76cqw;top:12cqw}.envelope-canvas>.flower.right{right:0;width:29cqw;bottom:2cqw}.envelope-page .envelope-label strong{font-size:6.8cqw}.envelope-page .envelope-label p{font-family:var(--serif)}.venue-card{display:block;position:relative}.venue-info{width:58%;position:relative;z-index:2;padding-bottom:4cqw}.venue-card .map{position:absolute;right:3cqw;top:3cqw;width:47cqw;height:calc(100% - 17cqw);min-height:0;clip-path:polygon(36% 0,100% 0,100% 100%,0 100%)}.venue-card .map iframe{min-height:0;height:100%;width:100%}.venue-card>.btn{position:relative;z-index:4;width:100%;white-space:nowrap}.venue-card .floor{white-space:nowrap}.rsvp>.flower{width:31cqw;right:0}.envelope-canvas>#envelope-status{font-size:10px;letter-spacing:0}.envelope-canvas>#envelope-status:empty{display:none}
.envelope-canvas>.flower.right{z-index:4}.envelope-page .seal{width:9.5cqw;height:9.5cqw;left:calc(50% - 4.75cqw);top:38.4%}.envelope-page .invitation-title{word-spacing:.08em;letter-spacing:-.045em}.wedding-landing h2{word-spacing:.025em}.gift-card p{letter-spacing:-.02em}.btn.solid .icon{color:inherit;stroke:currentColor}.date-section .flower img{animation-duration:12s}
@media(max-width:420px){.envelope-canvas>#open-envelope{left:50%;translate:-50% 0;width:51cqw;min-width:220px;gap:2cqw;font-size:13px}}
/* V5: final placement adjustments from the mobile screenshots. */
.date-section>.flower{right:-9cqw;top:16cqw;width:40cqw;transform:none}
.date-month{font-size:5.1cqw;line-height:1.04}
.date-month b{font-size:1.2em}
.welcome .welcome-copy{font-size:max(13px,3.15cqw)!important;line-height:1.48!important;letter-spacing:.035em}
.celebration>.flower{right:1.5cqw;width:27cqw;top:20px}
.dress>.flower{right:28cqw;width:37cqw;transform:rotate(2deg)}
/* The footer of this section is placed after both the dress illustration
   and the flowing text, so that either can grow at narrow widths. */
.dress-bottom{margin-top:9cqw;min-height:7cqw;align-items:end}
.dress>.attire{top:100px;width:28cqw}
.gift-card>.flower{right:-4.5cqw;top:-3cqw;width:35cqw}
.gift-card p{position:relative;z-index:3;max-width:100%}
.gallery-section>.gallery-note{right:9cqw;width:23cqw;padding-left:2.5cqw;white-space:normal;overflow-wrap:normal}
.music-section>.music-note{right:9.5cqw;width:23.5cqw;padding-left:3cqw;white-space:normal}
.music-section>.wave{right:35cqw;width:18cqw}
.music-toggle{position:fixed;left:max(14px,calc(50% - 253px));bottom:max(18px,env(safe-area-inset-bottom));z-index:30;width:54px;height:54px;border-radius:50%;touch-action:manipulation}
.music-toggle.music-pending .music-on{display:block}
.music-toggle.music-pending .music-off{display:none}
@media(max-width:359px){.welcome .welcome-copy{font-size:13px!important;letter-spacing:.01em}.gallery-section>.gallery-note{right:8cqw;width:26cqw;font-size:11px}.music-section>.music-note{right:8cqw;width:25cqw;font-size:10px}.music-section>.wave{right:35cqw;width:17cqw}.dress-bottom{margin-top:12cqw}}
.dress>.attire{top:125px;width:29cqw}
.dress-bottom{position:absolute;top:calc(125px + 47.5cqw);left:7cqw;right:7cqw;margin-top:0;min-height:0}
/* Versioned mask avoids retaining the earlier edge in the asset cache. */
.hero-photo>img{mask-image:url('/assets/design/hero-mask.svg?v=5');-webkit-mask-image:url('/assets/design/hero-mask.svg?v=5')}

/* V6: invitation name spacing, two-line recipient and gift clearance. */
.envelope-page h1.names>span{margin-top:2.5cqw}
.envelope-page .envelope-label{top:53.5%;left:25%;right:13%}
.envelope-page .envelope-label strong{display:block;font-size:4.6cqw;line-height:1.12;letter-spacing:-.035em}
.envelope-label .family-prefix,.envelope-label .family-name{display:block}
.envelope-label .family-prefix{font-size:.88em;margin-bottom:.7cqw}
.envelope-label .family-name{overflow-wrap:anywhere;text-wrap:balance}
.envelope-page .envelope-label p{font-size:max(8px,1.85cqw);line-height:1.4;letter-spacing:.12em;margin-top:1.8cqw;max-width:100%}
.envelope-page .envelope-label p:before{margin-bottom:1.8cqw}
.gift-card>.flower{top:-24cqw}

/* V7: larger recipient and reservation notice outside the envelope. */
.envelope-page .envelope-label{top:54.5%;left:17%;right:17%;text-align:center}
.envelope-page .envelope-label strong{font-size:5.4cqw;line-height:1.15}
.envelope-page .envelope-label .family-prefix{font-size:.92em}
.envelope-canvas{height:179cqw}
.envelope-canvas>.reserved-seats{position:absolute;top:146cqw;left:17%;width:66%;max-width:none;text-align:center;font:400 max(14px,3cqw)/1.4 var(--serif);letter-spacing:.06em;color:var(--ink);margin:0;z-index:5}
.envelope-canvas>#open-envelope{top:163cqw}
.envelope-canvas>#envelope-status{top:175cqw}
.gift-card>.flower{right:-1.5cqw;top:-17cqw}

/* V10: show the invitation only after personalization is available. */
main.invitation-loading{min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;padding:32px;text-align:center;color:var(--ink)}
.invitation-loading>p{font:400 18px/1.5 var(--serif);margin:0;max-width:30ch}
/* Shorten only the wardrobe-to-gift interval, preserving the caption clearance. */
.wedding-landing .dress{min-height:560px}
@media(min-width:480px){.wedding-landing .dress{min-height:600px}}
/* Keep the gift column width and typography; remove excess vertical padding. */
.gift-card{min-height:29cqw;aspect-ratio:auto;padding:3.5cqw 2cqw;gap:2.8cqw}
