/* Burgundy ink, warm ivory paper, and restrained gold details. */
#full-invite .published-gallery{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:32px 0}
.published-gallery button{border:1px solid #b18a5755;padding:6px;background:#fffaf1;border-radius:5px;cursor:pointer;overflow:hidden}
.published-gallery img{display:block;width:100%;height:290px;object-fit:cover;border-radius:2px;transition:transform .3s}
.published-gallery button:hover img{transform:scale(1.025)}
.photo-viewer{border:1px solid #b18a57;border-radius:8px;background:#411925;color:#fff0df;padding:18px;max-width:94vw;max-height:94svh;margin:auto;width:min(960px,94vw)}
.photo-viewer::backdrop{background:#1b0812e8;backdrop-filter:blur(6px)}
.photo-viewer>img{display:block;max-width:100%;max-height:72svh;object-fit:contain;margin:auto}
.photo-viewer>p{text-align:center;padding:14px;font-size:17px}
.photo-viewer-controls{display:flex;justify-content:space-between;gap:8px}
.photo-viewer-controls button{background:transparent;color:#efcf9d;border:1px solid #b18a5766;padding:10px 16px;border-radius:3px;cursor:pointer}
#full-invite .reply-card select{width:100%;background:#fffdf8;border:1px solid #c8b19580;border-radius:3px;padding:13px 14px;font-family:'Cormorant Garamond',serif;font-size:18px;color:#642637}
.reply-error{padding:12px;background:#f6e4e0;color:#8d2d42;font-size:16px;border:1px solid #c48a8a;border-radius:3px}
@media(max-width:760px){#full-invite .published-gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.published-gallery img{height:230px}}
@media(max-width:480px){.published-gallery img{height:180px}.photo-viewer{padding:10px}.photo-viewer-controls button{padding:9px;font-size:11px}}
#scene.leaving-invitation{pointer-events:none;animation:envelopeDissolve .9s ease-in both}
#scene.leaving-invitation #invitation-card.keepsake-card{animation:keepsakeLift .85s cubic-bezier(.4,0,.2,1) both}
#full-invite.invitation-arriving{animation:invitationUnfold 1.2s cubic-bezier(.16,1,.3,1) both}
#full-invite.invitation-arriving .intro-banner{opacity:1;transform:none}
#full-invite.invitation-arriving .banner-content{animation:invitationWords 1.3s ease both}
#full-invite .banner-names:focus{outline:none}
@keyframes keepsakeLift{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}45%{opacity:1;transform:translate(-50%,-57%) scale(1.04)}100%{opacity:0;transform:translate(-50%,-72%) scale(1.08);filter:blur(5px)}}
@keyframes envelopeDissolve{0%,35%{opacity:1}100%{opacity:0}}
@keyframes invitationUnfold{from{opacity:0;transform:translateY(55px) scale(.98);filter:blur(4px)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}
@keyframes invitationWords{0%,15%{opacity:0;transform:translateY(16px)}100%{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){#scene.leaving-invitation,#scene.leaving-invitation #invitation-card.keepsake-card,#full-invite.invitation-arriving,#full-invite.invitation-arriving .banner-content{animation:none}}
.couple-loader{position:relative;width:340px;max-width:88vw;height:255px;margin-bottom:28px}
.walking-bride,.walking-groom{position:absolute;bottom:8px;width:112px;height:215px;overflow:visible;z-index:1;filter:drop-shadow(0 7px 8px #21060c40)}
.walking-bride{left:0;animation:brideArrives 3.1s cubic-bezier(.25,.5,.35,1) both}
.walking-groom{right:0;animation:groomArrives 3.1s cubic-bezier(.25,.5,.35,1) both}
.couple-step{animation:weddingStep .5s ease-in-out 6;transform-origin:center bottom}
.walking-groom .couple-step{animation-delay:.1s}
.groom-leg{transform-origin:60px 134px;animation:weddingStride .5s ease-in-out 6}
.groom-leg.leg-back{animation-direction:reverse}
.groom-arm{transform-origin:36px 81px;animation:weddingArm .5s ease-in-out 6}
.couple-heart{position:absolute;left:50%;top:0;color:#e8c68c;font-size:38px;line-height:1;animation:coupleHeart 3.5s ease both}
.couple-ground{position:absolute;left:10%;right:10%;bottom:4px;height:1px;background:linear-gradient(90deg,transparent,#d8ad7180,transparent)}
@keyframes brideArrives{from{transform:translateX(-30px);opacity:0}12%{opacity:1}to{transform:translateX(70px);opacity:1}}
@keyframes groomArrives{from{transform:translateX(30px);opacity:0}12%{opacity:1}to{transform:translateX(-70px);opacity:1}}
@keyframes weddingStep{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@keyframes weddingStride{0%,100%{transform:rotate(0deg)}25%{transform:rotate(7deg)}75%{transform:rotate(-7deg)}}
@keyframes weddingArm{0%,100%{transform:rotate(0deg)}50%{transform:rotate(-8deg)}}
@keyframes coupleHeart{0%,75%{opacity:0;transform:translate(-50%,12px) scale(.6)}100%{opacity:1;transform:translate(-50%,0) scale(1)}}
@media(max-width:380px){.walking-bride,.walking-groom{width:100px}.walking-bride{left:-8px}.walking-groom{right:-8px}.couple-loader{height:240px}}
@media(prefers-reduced-motion:reduce){.couple-loader *{animation-duration:.01ms!important;animation-delay:0s!important;animation-iteration-count:1!important}}
.music-btn.is-muted::after{content:'';position:absolute;left:50%;top:50%;width:25px;height:2px;background:currentColor;border-radius:2px;transform:translate(-50%,-50%) rotate(-45deg);pointer-events:none}
/* Photographic figures replace the original vector couple. */
.couple-loader>svg{display:none}
.couple-loader{width:400px;max-width:94vw;height:365px;margin-bottom:28px}
.couple-loader .realistic-figure{width:190px;height:310px;bottom:8px;filter:drop-shadow(0 8px 12px #21060c25)}
.realistic-figure img{display:block;width:100%;height:100%;object-fit:contain;transform-origin:50% 95%;animation:realisticStep .6s ease-in-out 5}
.couple-loader .walking-bride{left:-15px;animation-name:realBrideArrives}
.couple-loader .walking-groom{right:-15px;animation-name:realGroomArrives}
.walking-groom.realistic-figure img{animation-delay:.15s}
.couple-loader .couple-heart{top:0}
@keyframes realBrideArrives{from{transform:translateX(-25px);opacity:0}12%{opacity:1}to{transform:translateX(52px);opacity:1}}
@keyframes realGroomArrives{from{transform:translateX(25px);opacity:0}12%{opacity:1}to{transform:translateX(-52px);opacity:1}}
@keyframes realisticStep{0%,100%{transform:translateY(0) rotate(0deg)}50%{transform:translateY(-2px) rotate(.6deg)}}
@media(max-width:480px){.couple-loader{width:340px;height:320px}.couple-loader .realistic-figure{width:165px;height:270px}.couple-loader .walking-bride{left:-12px}.couple-loader .walking-groom{right:-12px}}
@media(prefers-reduced-motion:reduce){.realistic-figure img{animation:none}}
body:has(#full-invite.show){background:#f8f1e7!important}
body:has(#full-invite.show)::before{background:radial-gradient(ellipse at top,#fffaf1,#f4e8d9);opacity:1}
body:has(#full-invite.show) .particles{opacity:.18}
#full-invite{max-width:1100px;margin:0 auto;padding:0 40px 50px;color:#642637}
#full-invite .section{padding:65px 0 35px}
#full-invite .intro-banner{position:relative;isolation:isolate;margin:28px auto 0;padding:95px 30px 70px;min-height:680px;display:flex;align-items:center;justify-content:center;border:1px solid #ae895557;border-radius:260px 260px 8px 8px;background:#fffaf0;overflow:hidden}
#full-invite .intro-banner::before{content:'';position:absolute;inset:12px;border:1px solid #ae895533;border-radius:inherit;pointer-events:none;z-index:-1}
#full-invite .intro-banner::after{content:'';position:absolute;inset:0;background:url('assets/Images/burgundy-florals.svg') center/cover;opacity:.12;z-index:-1;pointer-events:none}
#full-invite .banner-row{gap:18px}
#full-invite .banner-line{width:65px;height:1px;background:#ae8955;opacity:.6}
.invitation-eyebrow{font-family:'Cinzel',serif;font-size:10px;letter-spacing:.27em;text-transform:uppercase;color:#967548;margin-bottom:32px;text-align:center}
#full-invite .banner-names{font-family:'Great Vibes',cursive;font-weight:400;font-size:clamp(65px,9vw,112px);line-height:1.04;color:#642637;text-align:center}
#full-invite .banner-names span{display:inline-block;font-family:'Cormorant Garamond',serif;font-size:30px;line-height:1.5;color:#ae8955}
#full-invite .banner-subtitle{font-size:21px;color:#876959;margin-top:23px;text-align:center}
#full-invite .banner-date{font-family:'Cinzel',serif;font-size:clamp(16px,2.4vw,24px);color:#642637;letter-spacing:.1em;margin-top:32px;text-align:center}
#full-invite .banner-time{font-size:18px;letter-spacing:.08em;color:#876959;margin-top:12px;text-align:center}
.banner-venue{font-size:18px;line-height:1.7;text-align:center;color:#876959;margin-top:24px}
#full-invite .section-tag{color:#a17b49;font-size:9px;letter-spacing:.3em;margin:0 0 18px}
#full-invite .section-heading{color:#642637;font-size:clamp(42px,6vw,62px);font-weight:400;margin-bottom:22px}
#full-invite .section-body{color:#765d52;font-size:20px;line-height:1.8}
#full-invite hr.ornamental{margin:28px auto;width:110px;height:1px;background:#ae895560}
#full-invite hr.ornamental::after{content:'\2726';font-size:13px;color:#ae8955;background:#f8f1e7;padding:0 16px;transform:translateY(-8px);letter-spacing:0}
#full-invite .countdown-grid{max-width:650px;margin:30px auto;gap:16px}
#full-invite .countdown-box{background:#fffaf1;border:1px solid #b8966555;border-radius:60px 60px 3px 3px;padding:28px 10px 22px;backdrop-filter:none}
#full-invite .countdown-num{color:#642637;font-family:'Cormorant Garamond',serif;font-size:52px;margin-bottom:12px}
#full-invite .countdown-label{color:#99794f;font-size:8px;letter-spacing:.18em}
#full-invite .scroll-btn,#full-invite .rsvp-btn{background:#642637;color:#fff6e9;border:1px solid #642637;padding:16px 30px;font-family:'Cinzel',serif;font-size:10px;letter-spacing:.16em;box-shadow:none}
#full-invite .scroll-btn:hover,#full-invite .rsvp-btn:hover{background:#813a4b;color:#fff6e9}
#full-invite .story-card{max-width:740px;margin:20px auto;background:transparent;border:0;border-left:1px solid #ae895575;border-right:1px solid #ae895575;padding:20px 42px;border-radius:0}
#full-invite .story-text{font-size:23px;line-height:1.85;color:#765d52;font-weight:400}
#full-invite .event-cards{grid-template-columns:repeat(4,minmax(0,1fr));padding:0;gap:18px;margin:55px auto}
#full-invite .event-card{background:#fffaf1;border:1px solid #ae895540;border-radius:100px 100px 4px 4px;box-shadow:none;text-align:center}
#full-invite .event-card img{height:220px;filter:saturate(.75);display:block}
#full-invite .event-name{color:#642637;font-size:22px;font-weight:500;margin:20px 12px 8px}
#full-invite .event-detail{color:#876959;font-size:16px;margin:0 12px 24px}
#full-invite .event-card::after{height:1px;background:#ae8955}
#full-invite #s-gallery .gallery-grid{gap:12px}
#full-invite #s-gallery .gallery-item,#full-invite #s-gallery .gallery-item img{border-radius:3px}
#full-invite .rsvp-wrapper{max-width:620px;margin:auto}
#full-invite .rsvp-form{width:100%;max-width:520px;background:#fffaf1;border:1px solid #ae895540;padding:35px;border-radius:4px;box-shadow:none}
#full-invite .rsvp-form input,#full-invite .rsvp-form select,#full-invite .rsvp-form textarea{background:#f8f1e7;color:#642637;border:1px solid #b8966566;border-radius:2px;font-family:'Cormorant Garamond',serif;font-size:18px;padding:15px}
#full-invite .rsvp-form input::placeholder,#full-invite .rsvp-form textarea::placeholder{color:#8d7668;opacity:1}
#full-invite .rsvp-form input:focus,#full-invite .rsvp-form select:focus,#full-invite .rsvp-form textarea:focus{outline:1px solid #642637;border-color:#642637;box-shadow:none}
#full-invite .rsvp-success{color:#642637;background:#fffaf1;border-color:#ae8955}
#full-invite .map-placeholder{position:relative;max-width:620px;margin:28px auto 0;padding:48px 24px;background:#642637;border:1px solid #ae8955;border-radius:130px 130px 4px 4px;overflow:hidden}
#full-invite .map-placeholder::before{content:'';position:absolute;inset:0;background:url('assets/Images/burgundy-florals.svg') center/cover;opacity:.25;pointer-events:none}
#full-invite .map-icon{color:#d6b57e;font-size:28px}
#full-invite .map-address{color:#fff1df;font-size:25px;line-height:1.6;position:relative}
#full-invite .map-link{display:inline-block;margin-top:20px;color:#e4c690;opacity:1;border-bottom:1px solid #d6b57e80;padding-bottom:5px;position:relative}
#full-invite .invite-footer{padding:65px 20px 25px;border-top:0}
#full-invite .footer-names{font-family:'Great Vibes',cursive;color:#642637;font-size:42px}
#full-invite .footer-sub{color:#99794f;font-size:10px;letter-spacing:.2em;margin-top:17px}
body:has(#full-invite.show) .music-btn{background:#642637;color:#fff1df;border:1px solid #b89665}
@media(max-width:800px){#full-invite{padding:0 22px 30px}#full-invite .event-cards{grid-template-columns:repeat(2,minmax(0,1fr));max-width:600px}#full-invite .banner-line{width:25px}#full-invite .intro-banner{min-height:630px;padding:70px 15px 55px}}
@media(max-width:480px){#full-invite{padding:0 18px 25px}#full-invite .intro-banner{margin-top:18px;min-height:590px;border-radius:170px 170px 4px 4px}#full-invite .banner-line{display:none}.invitation-eyebrow{font-size:8px;letter-spacing:.18em;margin-bottom:28px}#full-invite .banner-names{font-size:72px}#full-invite .banner-subtitle{font-size:18px}#full-invite .section{padding:48px 0 28px}#full-invite .countdown-grid{gap:8px}#full-invite .countdown-box{padding:22px 5px 18px}#full-invite .countdown-num{font-size:36px}#full-invite .countdown-label{font-size:7px;letter-spacing:.06em}#full-invite .story-card{padding:12px 20px}#full-invite .story-text{font-size:20px}#full-invite .event-cards{gap:12px}#full-invite .event-card img{height:165px}#full-invite .event-name{font-size:20px}#full-invite .event-detail{font-size:14px}#full-invite .rsvp-form{padding:23px 18px}#full-invite .map-address{font-size:23px}#full-invite .footer-names{font-size:35px}}
#full-invite .gallery-placeholders{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin:32px auto 0;max-width:820px}
#full-invite .gallery-placeholder{aspect-ratio:4/5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;border:1px solid #b18a5766;border-radius:110px 110px 4px 4px;background:linear-gradient(145deg,#fffaf1,#efe0d0);color:#a17b49}
#full-invite .gallery-placeholder span{font-size:40px;font-weight:300}
#full-invite .gallery-placeholder p{font-family:'Cinzel',serif;font-size:9px;letter-spacing:.15em;text-align:center}
@media(max-width:480px){#full-invite .gallery-placeholders{gap:9px}#full-invite .gallery-placeholder{gap:8px}#full-invite .gallery-placeholder span{font-size:28px}#full-invite .gallery-placeholder p{font-size:7px;letter-spacing:.04em}}
#full-invite .venue-map{max-width:800px;margin:30px auto 0;padding:8px;border:1px solid #b18a5766;background:#fffaf1;border-radius:8px;overflow:hidden;box-shadow:0 12px 35px #6426370d}
#full-invite .venue-map iframe{display:block;width:100%;height:360px;border-radius:3px}
@media(max-width:480px){#full-invite .venue-map{padding:5px}#full-invite .venue-map iframe{height:280px}}
/* A personal reply card. */
#full-invite #s-rsvp > .rsvp-section{padding:0}
#full-invite .rsvp-wrapper{max-width:700px}
#full-invite .rsvp-form.reply-card{max-width:700px;padding:0;gap:0;overflow:hidden;border:1px solid #b18a5766;border-radius:8px;box-shadow:0 18px 55px #6426370d;text-align:left;background:#fffaf2}
.reply-header{position:relative;isolation:isolate;padding:32px 24px;text-align:center;background:#642637;color:#fbeedc}
.reply-header::before{content:'';position:absolute;inset:0;background:url('assets/Images/burgundy-florals.svg') center/cover;opacity:.22;z-index:-1}
.reply-heart{display:block;font-size:35px;line-height:1;color:#e2c18b;margin-bottom:16px}
.reply-eyebrow{font-family:'Cinzel',serif;font-size:8px;letter-spacing:.19em;text-transform:uppercase;color:#e2c18b;margin-bottom:12px}
.reply-header h3{font-family:'Great Vibes',cursive;font-size:42px;line-height:1.2;font-weight:400;margin-bottom:12px}
.reply-header>p:last-child{font-size:14px;letter-spacing:.06em;color:#e5c9c4}
.reply-fields{display:flex;flex-direction:column;gap:25px;padding:34px}
.reply-row{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.reply-field{min-width:0}
.reply-field>label,.reply-attendance legend{display:block;font-family:'Cinzel',serif;font-size:9px;letter-spacing:.07em;color:#642637;margin-bottom:10px;line-height:1.7}
.reply-field label>span,.reply-attendance legend>span{color:#a17b49}
.reply-field label>small{font-family:'Cormorant Garamond',serif;font-style:italic;font-size:14px;color:#987e6b;letter-spacing:0}
#full-invite .reply-card input:not([type=radio]),#full-invite .reply-card textarea{background:#fffdf8;border:1px solid #c8b19580;border-radius:3px;padding:13px 14px;font-size:18px;box-shadow:none}
#full-invite .reply-card textarea{min-height:105px;resize:vertical}
.reply-attendance{border:0;padding:0;margin:0;min-width:0}
.reply-choices{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.reply-choice{display:flex;align-items:center;gap:10px;padding:17px 12px;border:1px solid #c8b19580;border-radius:4px;cursor:pointer;background:#fffdf8;transition:background .2s,border-color .2s}
#full-invite .reply-card .reply-choice input{width:16px;height:16px;margin:0;accent-color:#642637;flex-shrink:0}
.reply-choice strong{display:block;font-size:17px;font-weight:500;color:#642637;line-height:1.3}
.reply-choice small{display:block;font-size:14px;color:#987e6b;margin-top:4px}
.reply-choice:has(input:checked){background:#f1e4dd;border-color:#642637}
.reply-choice:has(input:focus-visible){outline:2px solid #642637;outline-offset:3px}
#full-invite .reply-card .rsvp-btn{width:100%;border-radius:3px;display:flex;justify-content:center;align-items:center;gap:22px;padding:18px;margin:0;cursor:pointer}
#full-invite .reply-card .rsvp-btn::after{display:none}
.reply-footnote{text-align:center;color:#987e6b;font-style:italic;font-size:16px;margin-top:-10px}
@media(max-width:480px){.reply-fields{padding:25px 20px;gap:22px}.reply-row{grid-template-columns:1fr;gap:22px}.reply-header{padding:28px 16px}.reply-header h3{font-size:36px}.reply-choices{grid-template-columns:1fr}.reply-choice{padding:14px 16px}.reply-eyebrow{font-size:7px}}
/* Numbered celebration cards, with a photograph beside each event. */
#full-invite .celebration-events .event-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:22px;max-width:none;margin:38px auto 0}
#full-invite .celebration-events .event-card{display:grid;grid-template-columns:40% 60%;min-height:240px;background:#642637;border:1px solid #b18a5755;border-radius:5px;text-align:left;box-shadow:0 8px 24px #6426370c}
#full-invite .celebration-events .event-card img{width:100%;height:100%;min-height:240px;object-fit:cover;filter:saturate(.65);transition:filter .4s,transform .6s}
#full-invite .celebration-events .event-card:hover{transform:translateY(-4px);box-shadow:0 12px 28px #6426371c}
#full-invite .celebration-events .event-card:hover img{filter:saturate(.95)}
#full-invite .celebration-events .event-card::after{inset:9px;width:auto;height:auto;border:1px solid #d7b67d55;background:none;pointer-events:none;opacity:1}
#full-invite .event-copy{align-self:center;padding:40px 24px 28px;position:relative}
#full-invite .celebration-events .event-name{font-size:28px;font-weight:400;color:#fff0dc;line-height:1.1;margin:0 0 15px}
#full-invite .celebration-events .event-detail{font-family:'Cinzel',serif;font-size:10px;letter-spacing:.1em;color:#e0bf88;margin:0 0 17px;line-height:1.7}
#full-invite .event-note{font-size:17px;line-height:1.5;font-style:italic;color:#e5c9c4;border-top:1px solid #d7b67d40;padding-top:14px}
#full-invite .event-number{position:absolute;top:17px;left:17px;z-index:1;display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:1px solid #e2c48e99;border-radius:50%;background:#481a26cc;color:#f6dfba;font-family:'Cinzel',serif;font-size:11px}
@media(max-width:800px){#full-invite .celebration-events .event-cards{grid-template-columns:1fr;max-width:540px}#full-invite .celebration-events .event-card{min-height:215px}#full-invite .celebration-events .event-card img{min-height:215px}}
@media(max-width:480px){#full-invite .celebration-events .event-cards{gap:18px}#full-invite .event-copy{padding:30px 21px 27px}#full-invite .celebration-events .event-name{font-size:26px}#full-invite .event-note{font-size:16px}#full-invite .celebration-events .event-detail{font-size:9px;letter-spacing:.07em}}
@media(prefers-reduced-motion:reduce){#full-invite .section{transition:none;transform:none}#full-invite .event-card:hover{transform:none}}
