/* Rose court: locally hosted typography, restrained gold and the couple's existing artwork. */
@font-face{font-family:"Invitation Title";font-style:normal;font-weight:400;font-display:swap;src:url(assets/envelope-title-calligraphy-v1.woff2) format("woff2")}
@font-face{font-family:"Invitation Date";font-style:normal;font-weight:500;font-display:swap;src:url(assets/envelope-date-serif-v1.woff2) format("woff2")}
.theme-filters{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}
:root{--wine:#621b30;--wine-dark:#350c1a;--cream:#fbf7ef;--gold:#dbc08b;--bronze:#a17d48;--ink:#502432;--serif:"Noto Serif SC","Songti SC","STSong",serif;--display:"Cormorant Garamond",Georgia,serif}
body{background:radial-gradient(ellipse at top,#38222a,#1d1016);font-family:var(--serif);font-weight:400;color:var(--ink);-webkit-font-smoothing:antialiased}.hero{min-height:40rem}
h1,h2,h3{font-family:var(--serif);font-weight:500;letter-spacing:.09em}h2{font-size:clamp(1.4rem,5.5vw,1.95rem);line-height:1.65}.eyebrow{font-size:.7rem;letter-spacing:.24em;font-weight:500}.section-pad{position:relative;isolation:isolate;padding-top:76px;padding-bottom:76px;overflow:hidden}.section-subtitle{font-family:var(--display);font-size:1.2rem;font-weight:500;font-style:italic;letter-spacing:.03em}
.section-art{position:absolute;z-index:-1;pointer-events:none}.parallax-art{transform:translate3d(0,var(--drift,0px),0) rotate(var(--art-rotation,0deg));will-change:transform}.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.envelope-invite h1{font-family:"Invitation Title",var(--serif);font-weight:400;letter-spacing:.2em;color:#63283b}.envelope-date{font-family:"Invitation Date",var(--serif);font-size:clamp(1.55rem,6.5vw,2.3rem);letter-spacing:.05em;font-weight:500;font-style:normal;font-variant-numeric:lining-nums}.envelope-heading{color:#826342}.envelope-heading p{font-size:.95rem}.envelope-subtitle{color:#765348}.envelope-skip{color:#7c543d;font-size:.8rem;line-height:1.5;padding:6px 16px;min-height:34px;border-radius:20px}.seal-button{background:radial-gradient(circle at 30% 20%,#a8445e,#721c37 55%,#4a1126);box-shadow:0 8px 18px #40121b33,inset 0 0 0 4px #791e37,inset 0 0 0 5px #d8b78699}.seal-mark{font-family:var(--serif);font-weight:500}
.hero-heading{color:#5c2538;padding-top:calc(58px + env(safe-area-inset-top))}.hero-heading .eyebrow{color:#795944;font-size:.65rem;letter-spacing:.25em}.hero-heading h2{font-family:var(--serif);font-weight:500;font-size:clamp(2.6rem,10vw,3.7rem);letter-spacing:.17em;text-shadow:0 2px 24px #fff9;margin-top:21px}.hero-script{font-family:var(--display);font-size:clamp(1.4rem,5vw,1.85rem);font-weight:500;letter-spacing:.01em;color:#815844}.hero .ornament{color:#ab884f;margin:20px auto 16px}.hero-date{font-family:var(--display);font-size:clamp(1.65rem,6vw,2.2rem);font-weight:600;letter-spacing:.13em;color:#743249}.hero-time{color:#583e32;font-family:var(--display);font-size:1.3rem;font-weight:600}.hero-time span{font-family:var(--serif);font-weight:400;font-size:.85rem}.hero-location{color:#654835;font-size:.8rem;line-height:1.9}.hero-wash{background:linear-gradient(180deg,#fff7e9bd 0%,#fff5e945 32%,transparent 56%,#41102100 75%,#3c0e2859 100%)}.discover{font-family:var(--serif);font-size:.8rem;color:#ffefcf;letter-spacing:.14em;text-shadow:0 1px 8px #4b1831}
/* One floating music control, aligned with the invitation at every scroll position. */
.page-shell > .music-toggle{position:fixed;top:auto;bottom:max(37px,calc(env(safe-area-inset-bottom) + 25px));right:max(18px,env(safe-area-inset-right),calc((100vw - var(--page-width))/2 + 18px));z-index:15;display:grid;place-items:center;width:46px;height:46px;min-height:46px;padding:0;border-radius:50%;border:1px solid #e2c99ab3;background:#4e1b2bbd;color:#f5dfb4;box-shadow:0 2px 12px #31101d33}.page-shell > .music-toggle[aria-pressed=false]{background:#3c263ac2;color:#eadcc1}.music-notes{width:24px!important;height:24px!important;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.music-notes ellipse{fill:currentColor;stroke-width:.6}.music-slash{display:none;stroke-width:1.8}.music-toggle[aria-pressed=false] .music-slash{display:block}
.wine-section{background:#621b30;color:#f1e5d2}.wine-section h2{color:#ead6af}.wine-section .eyebrow{color:#c8a877}.cream-section{background:var(--cream);color:#6b263d}.cream-section .eyebrow{color:#a3804f}.ornament{color:#b08a4f;gap:15px}.ornament.gold{color:#c7a76e}.ornament span{max-width:58px}.letter{padding-top:40px;padding-bottom:91px;background:radial-gradient(ellipse at 50% 18%,#84294380,transparent 52%),linear-gradient(150deg,#621b30,#440e21)}.letter::before{content:"";position:absolute;inset:16px 15px;border:1px solid #d6b07922;pointer-events:none}.letter::after{height:1px;clip-path:none;background:linear-gradient(90deg,transparent,#c3a570,transparent)}.rose-emblem{position:relative;width:132px;height:198px;object-fit:contain;margin:0 auto 18px;filter:drop-shadow(0 8px 22px #25051655)}.letter .ornament{margin-bottom:25px}.letter h2{margin-top:13px;margin-bottom:27px;font-size:1.5rem}.letter p:not(.eyebrow){font-size:.975rem;line-height:2.35;color:#e2d1be}.letter .letter-signature{color:#c9a874;letter-spacing:.18em;margin-top:30px}.flower-left{width:230px;left:-95px;bottom:-30px;--art-rotation:23deg;opacity:.62;filter:brightness(.72) saturate(.85)}
.celebration{padding-top:72px;padding-bottom:45px;background:#fbf7ef}.palace-ghost{width:100%;height:360px;object-fit:cover;object-position:center bottom;left:0;bottom:-26px;opacity:.1}.celebration h2{font-size:1.5rem;letter-spacing:.1em}.event-date{margin-top:32px;margin-bottom:31px}.event-date>span:first-child{font:500 1.15rem/1.3 var(--display);letter-spacing:.28em}.event-date strong{font:500 clamp(4.6rem,18vw,6rem)/1.28 var(--display);letter-spacing:-.01em;color:#74243e}.event-date strong span{font:400 3.5rem var(--display);color:#b49366}.event-date>span:last-child{font-size:.85rem;color:#866a53}.countdown-label{font-size:.85rem;color:#9d7955}.countdown strong{font-family:var(--display);font-weight:500;font-size:clamp(2rem,8vw,3rem);color:#762540}.countdown div span{font-size:10px;letter-spacing:.07em}.fine-rule{background:linear-gradient(90deg,transparent,#b693578c,transparent)}
.gallery{padding-top:58px;padding-bottom:78px;background:radial-gradient(ellipse at top,#fffdf7,transparent 70%),#f6f0e6}.gallery h2{font-size:1.5rem}.gallery .section-subtitle{font-family:var(--display);color:#a4865d;opacity:1;font-size:1.25rem}.gallery-stage{margin-top:32px;perspective:1300px}.gallery-slide{border-radius:110px 110px 8px 8px;border:1px solid #d1b380;box-shadow:0 18px 32px #5c3a1825;transition:transform .8s cubic-bezier(.22,.75,.23,1),opacity .65s ease;opacity:0}.gallery-slide img{border-radius:inherit}.gallery-slide.is-active{transform:translateX(-50%);z-index:6;opacity:1}.gallery-slide.is-prev{transform:translateX(-105%) scale(.83) rotateY(23deg);opacity:.68;z-index:4}.gallery-slide.is-next{transform:translateX(5%) scale(.83) rotateY(-23deg);opacity:.68;z-index:4}.gallery-slide.is-far-prev{transform:translateX(-145%) scale(.66) rotateY(33deg);opacity:.32;z-index:2}.gallery-slide.is-far-next{transform:translateX(45%) scale(.66) rotateY(-33deg);opacity:.32;z-index:2}.gallery-slide.is-hidden{transform:translateX(-50%) scale(.5);opacity:0;z-index:0}.gallery-arrow{background:#623048b0;border:1px solid #e5c79480;box-shadow:0 4px 12px #452c2921;color:#fff1d5}.gallery-controls{margin-top:14px}.photo-counter{font:500 1.25rem var(--display);letter-spacing:.08em}.gallery-controls button{font-size:.8rem;border-color:#c8ad8270;color:#9a7455}.gallery-hint{color:#a2876d;font-size:.75rem}.gallery-flower{width:245px;right:-115px;bottom:0;--art-rotation:-27deg;opacity:.25}
.film{padding-top:80px;padding-bottom:78px;background:radial-gradient(ellipse at top,#7d284880,transparent 65%),linear-gradient(135deg,#5e152b,#3a0b1c)}.film .section-subtitle{font-family:var(--serif);font-size:.85rem;color:#d0b698;font-style:normal}.film h2{font-size:1.55rem}.film-arch{top:18px;left:4%;width:92%;height:calc(100% - 35px);object-fit:fill;opacity:.075;pointer-events:none}.film-frame{padding:6px;border-color:#c5a16b;margin-top:34px;box-shadow:0 0 0 5px #d6b7800c,0 22px 34px #24031533}.film-play{background:#6c29453b;border-color:#eed3a7}.film-note{color:#c8a36c;font-size:.85rem;letter-spacing:.16em}.film-overlay>span:nth-child(2){font-size:1rem}.film-overlay small{font-size:11px}
.venue{padding-top:76px;padding-bottom:76px;background:radial-gradient(ellipse at top,#fffdf7,#f6f0e7)}.venue h2{font-size:1.6rem}.venue-card{margin-top:34px;outline:1px solid #c0a27250;outline-offset:7px;border:1px solid #bda07199;background:linear-gradient(150deg,#fffdf7,#fbf6eb);padding:27px 20px 33px;box-shadow:0 12px 22px #a48b5810}.venue-topline{font-family:var(--display);font-size:.8rem;font-weight:600;letter-spacing:.14em;color:#a58658}.venue-topline span:last-child{font-family:var(--serif);font-size:.65rem}.venue-card h3{font-weight:500;font-size:clamp(1.17rem,4.6vw,1.5rem);color:#713047;line-height:1.95}.venue-hall{color:#a38756;font-size:1.05rem;letter-spacing:.15em}.venue-time strong{font:600 2.4rem var(--display);color:#72283f}.venue-date{font-size:.8rem;color:#815b5e}.venue-wish{color:#a38b69;font-size:.8rem}.location-address{font-size:.85rem;color:#805c60}.location-transit{font-size:.8rem;color:#a0825b}.venue-location{margin-top:35px}
/* One map surface, a real geographical preview, and one discreet navigation affordance. */
.map-card-shell{position:relative;margin-top:24px;border-radius:16px;overflow:hidden;border:1px solid #d6c4a5;box-shadow:0 12px 26px #73502b15;background:#e4e9de}.map-card{display:block;position:relative;min-height:330px;height:clamp(335px,85vw,420px);text-align:left;text-decoration:none;background:#d8e3dc;overflow:hidden}.map-preview{width:100%;height:100%;object-fit:cover;object-position:center;transition:transform 1s ease}.map-card:hover .map-preview{transform:scale(1.035)}.map-place-card{position:absolute;top:13px;left:13px;right:13px;display:flex;gap:13px;justify-content:space-between;padding:15px 14px;background:#fffefbf5;border:1px solid #e4ddd0;box-shadow:0 4px 12px #263a3224;border-radius:5px;color:#4c3730}.map-place-copy strong{display:block;font-family:var(--serif);font-size:.9rem;line-height:1.7;font-weight:600;letter-spacing:.01em}.map-place-copy>span{display:block;font-family:var(--sans);font-size:12px;line-height:1.7;color:#7d7166;margin-top:6px}.map-open-icon{display:grid;place-items:center;align-self:flex-start;flex-shrink:0;width:38px;height:38px;border-radius:50%;background:#f2e9dd;color:#8c5737}.map-open-icon svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.map-route-chip{position:absolute;left:50%;bottom:29px;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;min-height:42px;padding:9px 19px;background:#fffdf7ed;border:1px solid #d2bd96;border-radius:24px;font-size:.8rem;color:#664631;box-shadow:0 4px 12px #4e39202b}.map-route-chip svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.5}.map-credit{position:absolute;right:0;bottom:0;padding:3px 6px;background:#fffffff0;color:#566253;font:9px/1.4 var(--sans);text-decoration:none}.map-tip{color:#ac916b;margin-top:15px;font-size:.75rem;letter-spacing:.06em}
.rsvp{padding-top:40px;padding-bottom:calc(35px + env(safe-area-inset-bottom));background:radial-gradient(ellipse at 50% 0,#9b344a50,transparent 62%),linear-gradient(160deg,#681a30,#350b1d)}.rsvp-roses{width:210px;max-width:65%;margin:0 auto 18px;filter:brightness(.82) saturate(.86)}.rsvp h2{color:#ead1a6;font-size:clamp(1.35rem,5.2vw,1.8rem);letter-spacing:.08em;margin-top:14px}.rsvp>p:not(.eyebrow){font-size:.95rem;color:#d7bea3;line-height:2.2}.rsvp-link{justify-content:center;text-align:center;width:max-content;min-width:172px;max-width:100%;min-height:46px;padding:10px 26px;margin-top:32px;background:rgba(66,12,29,.18);border:1px solid #c6a87599;border-radius:2px;color:#dfc79f;font-family:var(--serif);font-weight:400;font-size:.9rem;line-height:1.6;letter-spacing:.18em;box-shadow:none;transition:background .2s,border-color .2s,transform .2s}.rsvp .rsvp-note{font-size:.75rem;color:#b79a76}.footer-monogram{font-size:34px;color:#c6a875;margin-top:42px}.rsvp .footer-date{font-family:var(--display);font-size:1.1rem;color:#c6a875}.rsvp .footer-script{font-family:var(--display);font-size:1rem;color:#c6a875;opacity:.66}.replay{font-size:.75rem;color:#b69874;border-color:#b6987445}
/* Staggered entrances; no snapping, sticky panels, or scroll capture. */
.reveal-item{opacity:0;transform:translate3d(0,27px,0);filter:blur(2px);transition:opacity .95s ease,transform 1.1s cubic-bezier(.2,.7,.2,1),filter .9s ease;transition-delay:var(--reveal-delay,0ms)}.reveal-item.is-revealed{opacity:1;transform:translate3d(0,0,0);filter:blur(0)}.reveal-image{transform-origin:center bottom}.rose-emblem.reveal-item{transform:translate3d(0,22px,0) scale(.94)}.rose-emblem.is-revealed{transform:translate3d(0,0,0) scale(1)}.venue-card.reveal-item{transition-duration:1.2s}.gallery-stage.reveal-item{filter:none}
@media(min-width:700px){.hero-heading{padding-top:78px}.hero-heading h2{font-size:3.9rem}.hero-heading .eyebrow{font-size:.75rem}.hero-script{font-size:2rem}.hero-date{font-size:2.25rem}.hero-location{font-size:.9rem}.rose-emblem{width:158px;height:237px}.section-pad{padding-top:86px;padding-bottom:86px}.letter{padding-top:40px}.rsvp{padding-top:38px}.map-place-card{right:auto;max-width:78%;min-width:310px}.map-place-copy strong{font-size:1rem}.map-place-copy>span{font-size:.8rem}.gallery-slide{border-radius:150px 150px 8px 8px}.music-toggle{font-size:12px}}
@media(max-width:359px){.hero-heading{padding:47px 16px 0}.hero-heading h2{font-size:2.45rem}.hero-heading .eyebrow{font-size:9px}.hero-location{max-width:21em;font-size:.75rem}.hero-date{font-size:1.8rem}.section-pad{padding-top:62px;padding-bottom:62px}.letter{padding-top:35px}.rsvp{padding-top:30px}.letter h2,.celebration h2,.gallery h2{font-size:1.3rem}.letter p:not(.eyebrow){font-size:.9rem}.countdown{gap:7px}.countdown strong{font-size:2.05rem}.venue-card{padding-left:13px;padding-right:13px}.venue-card h3{font-size:1.05rem}.map-place-copy strong{font-size:.8rem}.map-place-card{left:10px;right:10px;gap:8px;padding:13px 11px}.map-open-icon{width:32px;height:32px}.map-card{height:345px}.gallery{padding-left:0;padding-right:0}.page-shell > .music-toggle{right:max(16px,env(safe-area-inset-right));bottom:max(36px,calc(env(safe-area-inset-bottom) + 24px))}}
.seal-rose{display:block;width:64%;height:70%;max-width:none;object-fit:contain;pointer-events:none}
/* V4: personal names, two event times, straight photo edges and a live map. */
.couple-names{margin:18px auto 4px;color:#6d263d;font:500 clamp(1.1rem,5.6vw,1.7rem)/1.7 var(--serif);letter-spacing:.055em;text-align:center}.couple-names strong{font-weight:500;white-space:nowrap}.couple-amp{font:400 1.2em/1 var(--display);font-style:italic;color:#ad8855;margin:0 .18em}.envelope-names{margin-top:15px;margin-bottom:3px;font-size:1.25rem}.envelope-invite h1{margin-top:5px}.hero-heading{padding-top:calc(38px + env(safe-area-inset-top))}.hero-heading h2{margin-top:8px}.hero-schedule{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;column-gap:12px;row-gap:4px;margin-top:8px;color:#76543f;font-size:.8rem;line-height:1.8}.hero-schedule>span{white-space:nowrap}.hero-schedule b{font:600 1.35rem/1.5 var(--display);color:#6c293e;letter-spacing:.03em;margin-right:4px}.hero-schedule>i{font-style:normal;color:#b89a6c}.event-schedule{display:grid;grid-template-columns:1fr 1fr;max-width:260px;margin:0 auto 30px;gap:20px}.event-schedule>div{display:flex;flex-direction:column;align-items:center;gap:5px}.event-schedule>div+div{border-left:1px solid #c6aa7838}.event-schedule span{font-size:.8rem;color:#97744f;letter-spacing:.18em}.event-schedule strong{font:500 2.05rem/1.2 var(--display);color:#7b2942}.venue-schedule{margin-top:19px;margin-bottom:0;max-width:230px}.venue-schedule strong{font-size:2.3rem}.gallery .gallery-slide{border-radius:6px}.gallery .gallery-slide img{border-radius:inherit}
.live-map-shell{position:relative;height:440px;isolation:isolate}.map-fallback{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:opacity .2s}.interactive-map{position:absolute;inset:0;z-index:1;width:100%;height:100%;opacity:0;pointer-events:none;background:#e7e9dc;transition:opacity .2s}.map-ready .interactive-map{opacity:1;pointer-events:auto}.map-ready .map-fallback,.map-ready .fallback-credit{opacity:0;pointer-events:none}.live-map-shell .map-place-card{z-index:3;pointer-events:none;right:13px;left:13px;max-width:none;min-width:0;padding:12px}.live-map-shell .map-place-copy>span{font-size:11px}.live-map-shell .map-open-icon{pointer-events:auto;text-decoration:none}.live-map-shell .map-route-chip{z-index:3;left:14px;bottom:30px;transform:none;max-width:calc(100% - 86px);white-space:normal;text-decoration:none;text-align:center;line-height:1.6;padding:9px 13px}.live-map-shell .fallback-credit{z-index:4}.live-map-shell .leaflet-bottom.leaflet-right .leaflet-control-zoom{margin:0 12px 38px 0}.live-map-shell .leaflet-bar{border:1px solid #cdb890;border-radius:5px;box-shadow:0 3px 12px #50381826}.live-map-shell .leaflet-bar a{width:38px;height:38px;line-height:38px;color:#763149;background:#fffdf6;font-size:25px}.live-map-shell .leaflet-bar a:hover{background:#f4ecdf}.live-map-shell .leaflet-control-attribution{font:10px/1.5 var(--sans);background:#fffffff0;color:#555}.live-map-shell .leaflet-control-attribution a{color:#586f4e}.wedding-map-marker{background:none;border:0;filter:drop-shadow(0 2px 3px #34220f40)}.wedding-map-marker svg{display:block;width:34px;height:46px}.live-map-shell .leaflet-popup-content{font:13px/1.8 var(--serif);color:#663049}.live-map-shell .leaflet-popup-content-wrapper{background:#fffdf8}
@media(min-width:700px){.hero-heading{padding-top:58px}.couple-names{font-size:1.6rem}.envelope-names{font-size:1.45rem}.live-map-shell{height:470px}}
@media(max-width:359px){.hero-heading{padding-top:32px}.couple-names{font-size:1.12rem;margin-top:14px}.hero-heading h2{font-size:2.2rem}.hero-script{font-size:1.3rem}.hero .ornament{margin:14px auto 10px}.hero-schedule{column-gap:8px}.hero-schedule b{font-size:1.2rem}.event-schedule{max-width:220px}.live-map-shell{height:445px}.live-map-shell .map-place-card{left:10px;right:10px}.live-map-shell .map-place-copy>span{font-size:11px}}

.rsvp .art-credit{font:12px/1.6 var(--sans);color:#b79a76;opacity:.65;margin:20px auto 0}.art-credit a{color:inherit;text-decoration:none}.art-credit a:hover{text-decoration:underline}

/* Uploaded rose: enlarged seal and matching footer mark. */
.envelope .seal-button{width:94px;height:94px}.envelope .seal-rose{width:74%;height:74%}.rsvp .footer-monogram{display:grid;place-items:center;width:58px;height:58px;margin:38px auto 10px;opacity:1;line-height:0}.footer-rose{display:block;width:58px;height:58px;object-fit:contain}
@media(max-height:620px){.envelope .seal-button{width:80px;height:80px}}
@media(orientation:landscape) and (max-height:500px){.envelope .seal-button{width:70px;height:70px}}

/* Keep the opening focus indicator inside the wax seal, without a detached outer ring. */
.envelope .seal-button:focus-visible{outline:2px solid #f0d3a0;outline-offset:-6px}

/* Coordinate the rose with the muted gold typography, while retaining its original alpha. */
.seal-rose,.footer-rose{filter:url("#rose-text-gold")}

.rsvp-link:hover{background:#dbc08b0d;border-color:#dec499;filter:none;transform:translateY(-1px)}.rsvp-link:active{transform:translateY(0)}

/* One shared page width from the envelope and hero through every invitation section. */
body{padding:0}
.page-shell{border:0}
.js .envelope{border:0}
.hero--invitation-video{width:100%;height:100vh;height:100svh;height:100dvh;min-height:0;max-height:none;background:#2e0b1a}
.hero--invitation-video .hero-backdrop{display:none}
.hero--invitation-video .hero-video,.hero--invitation-video .hero-poster{inset:0;width:100%;height:100%;object-fit:cover;object-position:center}
.hero--invitation-video .hero-wash{background:linear-gradient(180deg,transparent 76%,rgba(38,9,21,.45));pointer-events:none}
.hero--invitation-video .hero-heading{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}
.film .film-frame video{aspect-ratio:16/9;object-fit:contain;object-position:center}
.film-frame.is-loading .film-play{position:relative}
.film-frame.is-loading .film-play svg{visibility:hidden}
.film-frame.is-loading .film-play::after{content:"";position:absolute;width:22px;height:22px;border:1.5px solid #eed3a744;border-top-color:#eed3a7;border-radius:50%;animation:film-loading-spin 1s linear infinite}
.film-overlay:disabled{cursor:wait}
@keyframes film-loading-spin{to{transform:rotate(360deg)}}

@media(orientation:landscape) and (max-height:500px){.envelope-date{font-size:1.3rem}}

/* Opening transition and fallback when sprite sheets are unavailable. */
.js .envelope{transition:opacity .22s ease,visibility .22s!important}
.envelope.opening .envelope-invite{transition:opacity .3s ease,transform .6s ease!important}
.envelope.opening .envelope-heading{transition:opacity .3s ease!important}
.envelope.opening-fallback{perspective:1000px}
.envelope.opening-fallback .envelope-poster{visibility:visible;background:#ebe6dc;transform-origin:50% 15%;animation:envelope-fallback-open var(--envelope-duration,1667ms) cubic-bezier(.22,.7,.2,1) both!important}
@keyframes envelope-fallback-open{0%{transform:translateY(0) rotateX(0);opacity:1}20%{transform:translateY(-2%) rotateX(5deg);opacity:1}100%{transform:translateY(-108%) rotateX(12deg);opacity:0}}

/* An understated RSVP card opens within the last chapter. */
.rsvp-panel{max-width:340px;margin:24px auto 0;padding:24px 20px;border:1px solid #c6a87566;border-radius:3px;background:#2e0b1933;text-align:left;opacity:0;transform:translateY(12px);transition:opacity .55s ease,transform .65s ease!important}
.rsvp-panel.is-visible{opacity:1;transform:translateY(0)}
.rsvp-form-title{margin:0 0 22px;text-align:center;color:#dfc79f;font:400 1rem/1.7 var(--serif);letter-spacing:.18em}
.film .section-subtitle{line-height:1.9}
.rose-emblem-flat{filter:none;color:#c6a875}
.cloche-outline{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round}
.cloche-inner-line{stroke-width:.75;opacity:.42}
.cloche-rose{position:absolute;left:12.5%;top:24%;width:75%;height:55%;object-fit:contain;filter:url(#rose-text-gold)}
.letter .signature-with-mark{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:10px}
.signature-copy{min-width:0;text-align:center}
.signature-copy [data-person]{white-space:nowrap}
.royal-dance-icon{display:block;flex:none;width:36px;height:45px;object-fit:contain}
.invitation-crest{display:block;width:320px;max-width:88%;height:auto;margin:0 auto 26px}
.rsvp-carriage{display:block;width:188px;max-width:72%;height:auto;margin:10px auto 12px}
.rsvp-field{margin-bottom:19px}
.rsvp-field label{display:block;color:#dfc79f;font-size:14px;line-height:1.6;letter-spacing:.1em;margin-bottom:8px}
.rsvp-field label span{font-size:12px;letter-spacing:.04em;color:#ba9e7e;margin-left:7px}
.rsvp-field input{display:block;width:100%;min-height:46px;padding:10px 13px;border:1px solid #d9bf934d;border-radius:2px;background:#faf5e9;color:#63283b;font:400 16px/1.5 var(--serif);outline:none;-webkit-appearance:none;appearance:none;transition:border-color .2s,box-shadow .2s}
.rsvp-field input::placeholder{color:#aa9280;opacity:1}
.rsvp-field input:focus{border-color:#dec499;box-shadow:0 0 0 2px #dbc08b22}
.rsvp-field input[aria-invalid=true]{border-color:#e6a995;box-shadow:0 0 0 1px #e6a99544}
.field-error{display:block;margin-top:6px;color:#f0bcb0;font:12px/1.6 var(--sans)}
.rsvp-submit{display:block;min-width:160px;min-height:46px;margin:26px auto 0;padding:10px 24px;border:1px solid #c6a87599;border-radius:2px;background:#dbc08b0d;color:#dfc79f;font:400 15px/1.6 var(--serif);letter-spacing:.16em;transition:background .2s,border-color .2s}
.rsvp-submit:hover{background:#dbc08b18;border-color:#dec499}
.rsvp-submit:disabled{opacity:.55;cursor:wait}
.rsvp-link:disabled{opacity:.7;cursor:default;transform:none}
.rsvp-status{margin:15px 0 0;text-align:center;color:#f0bcb0;font:13px/1.8 var(--sans)}
.rsvp-success{text-align:center;padding:15px 0 18px;outline:none}
.rsvp-success p{font-size:21px;color:#ead1a6;letter-spacing:.12em;line-height:1.8}
.rsvp-success>span{display:block;margin-top:12px;color:#d7bea3;font-size:14px;line-height:1.9}
.rsvp-noscript{text-align:center;padding:16px;color:#dfc79f}
@media(max-width:359px){.rsvp-panel{padding:20px 15px}}

/* Smooth coverflow transition. */
.gallery .gallery-slide{transition:transform .8s cubic-bezier(.22,.75,.23,1),opacity .65s ease!important;will-change:transform;background:#f7f1e7}
.gallery .gallery-slide img{object-fit:cover}
.gallery .gallery-slide.is-hidden{will-change:auto}
/* Match the portrait frame to the final 2:3 photos instead of adding side mattes. */
.gallery-stage{--gallery-card-height:405px}
@supports(height:clamp(345px,104vw,600px)){.gallery-stage{--gallery-card-height:calc(clamp(345px,104vw,600px) - 35px)}}
@media(min-width:700px){.gallery-stage{--gallery-card-height:565px}}
.gallery .gallery-slide{height:var(--gallery-card-height);width:calc((var(--gallery-card-height) - 2px) * 2 / 3 + 2px);max-width:68%}
