:root{--rv-paper:#f5e7d9;--rv-ink:#74152b;--rv-gold:#9a7443;--rv-rose:#b86d79;--rv-width:100vw;--rv-h:100svh;--rv-canvas-w:min(100vw,56.25svh);--rv-canvas-h:min(100svh,177.7778vw)}
*{box-sizing:border-box}
html{background:#251a19;scroll-behavior:smooth;scroll-snap-type:y mandatory}
body.rv-body{margin:0;min-height:100%;overflow-x:hidden;background:#251a19;color:var(--rv-ink);font-family:'Cormorant Garamond',Georgia,serif;-webkit-font-smoothing:antialiased}
.rv-story{position:relative;width:100%;padding:0;margin:0 auto}
.rv-scene{position:relative;display:grid;place-items:center;isolation:isolate;width:var(--rv-width);height:100vh;height:var(--rv-h);margin:0 auto;overflow:hidden;background:var(--rv-paper);scroll-snap-align:start;scroll-snap-stop:always;perspective:1300px}
.rv-scene::before{content:none}
.rv-canvas{position:relative;isolation:isolate;z-index:1;width:var(--rv-canvas-w);height:var(--rv-canvas-h);overflow:hidden;background:var(--rv-paper);box-shadow:0 8px 32px rgba(35,17,16,.2);aspect-ratio:9/16;container-type:inline-size}
.rv-art,.rv-envelope__photo{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:contain;object-position:center;user-select:none;-webkit-user-drag:none}
.rv-art{z-index:0}
.rv-scene p,.rv-scene h2,.rv-scene h3{position:absolute;margin:0;text-align:center;color:var(--rv-ink);font-weight:500;line-height:1.13;text-wrap:pretty;z-index:2}
.rv-fit{max-width:90%;overflow-wrap:anywhere}
.rv-next-hint{position:absolute;left:50%;bottom:2.5%;z-index:5;transform:translateX(-50%);font:18px/1 'Cormorant Garamond',serif;color:#8d6940;opacity:.68;animation:rv-hint 2.4s ease-in-out infinite}
.rv-next-hint--end{font-size:13px;letter-spacing:.12em;animation:none}
@keyframes rv-hint{0%,100%{transform:translate(-50%,0);opacity:.45}50%{transform:translate(-50%,5px);opacity:.9}}
.rv-visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}

/* Envelope cover: the seal is the one intentional control. The photo itself
   remains fixed until tapped; then the cover lifts away and the card emerges. */
.rv-envelope{background:#d6b5aa;z-index:4;transition:opacity .45s ease}
.rv-envelope__photo{z-index:1;transition:opacity .45s ease}
.rv-envelope__open-still,.rv-envelope__open-video{position:absolute;inset:0;z-index:2;width:100%;height:100%;object-fit:contain;opacity:0;pointer-events:none;transition:opacity .42s ease}
.rv-envelope__instruction{position:absolute;z-index:3;left:0;right:0;bottom:7%;text-align:center;color:#fff8ef;font:500 clamp(12px,3cqw,16px)/1.2 'Cormorant Garamond',serif;letter-spacing:.04em;text-shadow:0 1px 9px rgba(59,33,27,.55);pointer-events:none}
.rv-envelope__seal{position:absolute;z-index:4;left:40%;top:31%;width:31%;height:22%;border:0;padding:0;border-radius:50%;display:block;background:transparent;touch-action:manipulation;cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}
.rv-envelope__seal:focus-visible{outline:2px solid #fff3d8;outline-offset:2px;box-shadow:0 0 0 5px rgba(121,75,30,.5)}
.rv-envelope__seal:active{transform:scale(.96)}
.rv-envelope__scroll{display:none}
.rv-envelope.is-opening .rv-envelope__photo{opacity:0}
.rv-envelope.is-opening .rv-envelope__open-video{opacity:1}
.rv-envelope.is-reduced-open .rv-envelope__open-still,.rv-video-fallback .rv-envelope.is-opening .rv-envelope__open-still{opacity:1}
.rv-envelope.is-fading .rv-envelope__open-video,.rv-envelope.is-fading .rv-envelope__open-still{opacity:0}
.rv-save .rv-canvas{opacity:1;transition:opacity .75s ease}
.rv-save.is-arriving .rv-canvas{opacity:0}
.rv-save.is-arriving.is-arrived .rv-canvas{opacity:1}
@keyframes rv-invite-breathe{0%,100%{opacity:.72}50%{opacity:1}}

/* Save the Date: the heading is baked into the supplied art and never changes. */
.rv-save__names{position:absolute;z-index:4;top:9.4%;left:31%;width:41%;height:17%;transform:rotate(24deg);display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff0d2;font:700 clamp(28px,7.6cqw,46px)/.78 'Great Vibes',cursive;text-align:center;text-shadow:0 1px 2px rgba(80,25,27,.55);overflow:hidden;white-space:nowrap}
.rv-save__names small{font:600 .40em/.95 'Cormorant Garamond',serif;letter-spacing:.09em;text-transform:lowercase;margin:.03em 0}
.rv-save__date{left:18%;top:62.2%;width:64%;font:700 clamp(19px,5cqw,30px)/1.1 'Bodoni Moda',serif;letter-spacing:.09em;color:#851b36;text-transform:uppercase}
.rv-save__sparkle{position:absolute;z-index:4;left:28%;top:80%;width:7px;height:7px;background:#fff3c4;clip-path:polygon(50% 0,62% 37%,100% 50%,62% 63%,50% 100%,38% 63%,0 50%,38% 37%);filter:drop-shadow(0 0 4px #d4a347);animation:rv-save-sparkle 2.4s ease-in-out infinite}
@keyframes rv-save-sparkle{0%,100%{opacity:.15;transform:scale(.65) rotate(0)}50%{opacity:1;transform:scale(1.25) rotate(45deg)}}

/* Blessings and names page. */
.rv-family__heading{left:12%;top:15%;width:76%;font:700 clamp(16px,4.4cqw,25px)/1.08 'Bodoni Moda',serif;letter-spacing:.1em;text-transform:uppercase}
.rv-family__bride-line{left:10%;top:24.6%;width:80%;font:600 clamp(18px,4.8cqw,28px)/1.08 'Cormorant Garamond',serif}
.rv-family__request{left:10%;top:29.1%;width:80%;font:italic 600 clamp(16px,4.4cqw,26px)/1.15 'Cormorant Garamond',serif}
.rv-family__bride{left:5%;top:37%;width:90%;font:700 clamp(38px,13cqw,78px)/.92 'Great Vibes',cursive;letter-spacing:0;text-transform:none;-webkit-text-stroke:.3px currentColor}
.rv-family__with{position:absolute;left:0;right:0;top:47.5%;z-index:2;text-align:center;color:var(--rv-ink);font:italic 600 clamp(18px,4.3cqw,27px)/1 'Great Vibes',cursive}
.rv-family__groom{left:4%;top:50.4%;width:92%;font:700 clamp(38px,13cqw,78px)/.92 'Great Vibes',cursive;letter-spacing:0;text-transform:none;-webkit-text-stroke:.3px currentColor}
.rv-family__groom-line{left:10%;top:61.5%;width:80%;font:600 clamp(16px,4.2cqw,25px)/1.08 'Cormorant Garamond',serif}
.rv-family__date{left:14%;top:69%;width:72%;font:700 clamp(18px,4.6cqw,27px)/1.08 'Bodoni Moda',serif;letter-spacing:.08em}
.rv-family__city{left:14%;top:72.5%;width:72%;font:700 clamp(15px,3.9cqw,23px)/1.08 'Bodoni Moda',serif;letter-spacing:.12em}

/* Four fixed illustrations; copy blocks alternate around the pictured props. */
.rv-events__heading{left:12%;top:8.5%;width:76%;font:700 clamp(30px,8cqw,46px)/1.03 'Bodoni Moda',serif;letter-spacing:.02em}
.rv-events__couple{left:9%;top:19.9%;width:82%;font:700 clamp(20px,5.8cqw,33px)/1.1 'Bodoni Moda',serif;letter-spacing:.055em}
.rv-events__date{left:18%;top:23.4%;width:64%;font:600 clamp(17px,4.6cqw,26px)/1.08 'Bodoni Moda',serif;letter-spacing:.06em}
.rv-event{position:absolute;z-index:2;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.19em;color:var(--rv-ink);padding:0 1.5%}
.rv-event__title,.rv-event__date,.rv-event__venue,.rv-event__address{position:static!important;max-width:100%;color:var(--rv-ink);line-height:1.12!important}
.rv-event__title{font:700 clamp(16px,4.3cqw,25px)/1.08 'Bodoni Moda',serif;letter-spacing:.02em}
.rv-event__date{font:600 clamp(14px,3.8cqw,22px)/1.08 'Bodoni Moda',serif;letter-spacing:.03em}
.rv-event__venue,.rv-event__address{font:600 clamp(16px,4.2cqw,24px)/1.06 'Cormorant Garamond',serif}
.rv-event__sep{color:#93744e;padding:0 .12em}
.rv-event--1{left:38%;top:28%;width:57%;height:12.5%}
.rv-event--2{left:6%;top:45.4%;width:53%;height:12.6%}
.rv-event--3{left:39%;top:63%;width:57%;height:12%}
.rv-event--4{left:8%;top:80.3%;width:51%;height:12%}

/* Final invitation: all copy is live HTML; the food, diya, border and florals
   remain the supplied artwork. The venue is a normal accessible maps anchor. */
.rv-final__heading{left:17%;top:14.1%;width:66%;font:700 clamp(22px,5.9cqw,35px)/1.08 'Bodoni Moda',serif;letter-spacing:.1em}
.rv-final__couple{left:9%;top:19.4%;width:82%;font:700 clamp(34px,9.2cqw,62px)/.96 'Bodoni Moda',serif;letter-spacing:.02em;text-transform:uppercase;-webkit-text-stroke:.35px currentColor}
.rv-final__lead{left:13%;top:31.6%;width:74%;font:italic 600 clamp(17px,4.4cqw,26px)/1.08 'Cormorant Garamond',serif}
.rv-final__message{left:12%;top:35.4%;width:76%;font:600 clamp(15px,3.9cqw,23px)/1.08 'Cormorant Garamond',serif}
.rv-final__date{left:17%;top:51.5%;width:66%;font:700 clamp(18px,4.6cqw,28px)/1.08 'Bodoni Moda',serif;letter-spacing:.08em}
.rv-final__event{left:14%;top:55.8%;width:72%;font:700 clamp(18px,4.6cqw,28px)/1.08 'Bodoni Moda',serif;letter-spacing:.06em}
.rv-final__time{left:18%;top:59%;width:64%;font:600 clamp(16px,4.2cqw,25px)/1.08 'Cormorant Garamond',serif}
.rv-final__venue-wrap{position:absolute;z-index:3;left:20%;top:63%;width:60%;text-align:center}
.rv-map{display:inline-block;color:var(--rv-ink);text-decoration:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent;border-radius:2px}
.rv-final__venue{font:700 clamp(18px,4.8cqw,29px)/1.08 'Bodoni Moda',serif;text-decoration:underline;text-decoration-color:rgba(147,104,58,.55);text-underline-offset:.16em}
.rv-final__venue:focus-visible{outline:2px solid #9b7044;outline-offset:3px}
.rv-final__address{position:static!important;margin:.28em auto 0!important;width:100%;font:600 clamp(15px,4cqw,24px)/1.08 'Cormorant Garamond',serif}
.rv-final__signoff{left:28%;top:72.8%;width:44%;font:italic 600 clamp(17px,4.4cqw,26px)/1.08 'Great Vibes',cursive}
.rv-final__families{left:14%;top:75.5%;width:72%;font:600 clamp(14px,3.8cqw,23px)/1.08 'Bodoni Moda',serif;letter-spacing:.055em}

/* Petals are a single fixed, low-contrast atmosphere layer across every scene. */
.rv-petals{position:fixed;inset:0;z-index:10;pointer-events:none;overflow:hidden;contain:strict}
.rv-petal{position:absolute;top:-8vh;left:var(--x);width:var(--w);height:var(--h);border-radius:75% 10% 75% 10%;background:linear-gradient(135deg,rgba(218,125,145,.7),rgba(176,82,105,.46));opacity:var(--o);filter:blur(.15px);transform:rotate(var(--r));animation:rv-fall var(--dur) linear var(--delay) infinite}
@keyframes rv-fall{0%{transform:translate3d(0,-8vh,0) rotate(var(--r));}50%{transform:translate3d(var(--sway),52vh,0) rotate(calc(var(--r) + 150deg));}100%{transform:translate3d(var(--sway),112vh,0) rotate(calc(var(--r) + 320deg));}}
.rv-petal--1{--x:4%;--w:8px;--h:12px;--o:.36;--r:22deg;--dur:22s;--delay:-7s;--sway:4vw}.rv-petal--2{--x:13%;--w:7px;--h:10px;--o:.3;--r:-22deg;--dur:27s;--delay:-18s;--sway:-3vw}.rv-petal--3{--x:21%;--w:9px;--h:13px;--o:.32;--r:44deg;--dur:24s;--delay:-12s;--sway:5vw}.rv-petal--4{--x:29%;--w:6px;--h:9px;--o:.34;--r:-10deg;--dur:29s;--delay:-3s;--sway:-4vw}.rv-petal--5{--x:37%;--w:8px;--h:11px;--o:.29;--r:36deg;--dur:25s;--delay:-20s;--sway:4vw}.rv-petal--6{--x:45%;--w:7px;--h:10px;--o:.38;--r:-38deg;--dur:23s;--delay:-9s;--sway:-5vw}.rv-petal--7{--x:53%;--w:9px;--h:13px;--o:.3;--r:18deg;--dur:28s;--delay:-15s;--sway:3vw}.rv-petal--8{--x:61%;--w:6px;--h:9px;--o:.32;--r:55deg;--dur:24s;--delay:-5s;--sway:-4vw}.rv-petal--9{--x:69%;--w:8px;--h:12px;--o:.34;--r:-28deg;--dur:26s;--delay:-22s;--sway:5vw}.rv-petal--10{--x:77%;--w:7px;--h:10px;--o:.3;--r:14deg;--dur:30s;--delay:-11s;--sway:-3vw}.rv-petal--11{--x:85%;--w:9px;--h:13px;--o:.35;--r:38deg;--dur:23s;--delay:-2s;--sway:4vw}.rv-petal--12{--x:93%;--w:6px;--h:9px;--o:.29;--r:-40deg;--dur:27s;--delay:-17s;--sway:-5vw}.rv-petal--13{--x:8%;--w:6px;--h:9px;--o:.3;--r:58deg;--dur:31s;--delay:-25s;--sway:3vw}.rv-petal--14{--x:32%;--w:9px;--h:13px;--o:.27;--r:-18deg;--dur:32s;--delay:-8s;--sway:-4vw}.rv-petal--15{--x:57%;--w:6px;--h:9px;--o:.34;--r:22deg;--dur:29s;--delay:-19s;--sway:4vw}.rv-petal--16{--x:73%;--w:8px;--h:11px;--o:.31;--r:-54deg;--dur:33s;--delay:-27s;--sway:-3vw}.rv-petal--17{--x:89%;--w:6px;--h:9px;--o:.32;--r:47deg;--dur:28s;--delay:-13s;--sway:5vw}.rv-petal--18{--x:49%;--w:7px;--h:10px;--o:.28;--r:-9deg;--dur:35s;--delay:-30s;--sway:-5vw}

@media (min-width:900px){.rv-body{padding:0}.rv-canvas{box-shadow:0 12px 54px rgba(0,0,0,.28)}}
@media (max-width:370px){.rv-family__bride,.rv-family__groom{letter-spacing:-.06em}.rv-final__message{left:13%;width:74%}.rv-event__title{letter-spacing:.025em}}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.rv-next-hint,.rv-envelope__instruction,.rv-save__sparkle{animation:none}.rv-petal{display:none}.rv-envelope{transition:none}.rv-envelope.is-opening{transform:none}.rv-envelope__open-video,.rv-reduced .rv-envelope__open-video,.rv-video-fallback .rv-envelope__open-video{display:none}.rv-scene{scroll-snap-stop:normal}}
@media (forced-colors:active){.rv-map{outline:1px solid LinkText}}
.rv-video-fallback .rv-envelope__open-video{display:none}
/* Progressively enhanced scroll reveals. With no JavaScript, all copy remains visible. */
.rv-js .rv-scene:not(.is-seen) .rv-fit{opacity:0;transform:translateY(9px)}
.rv-js .rv-scene.is-seen .rv-fit{animation:rv-copy-in .58s cubic-bezier(.18,.72,.24,1) both}
@keyframes rv-copy-in{to{opacity:1;transform:translateY(0)}}
@media (prefers-reduced-motion:reduce){.rv-js .rv-scene:not(.is-seen) .rv-fit,.rv-js .rv-scene.is-seen .rv-fit{opacity:1;transform:none;animation:none!important}}
/* The Save the Date art/card is intentionally static; only petals and its gold sparkle move. */
.rv-save .rv-fit,.rv-js .rv-scene.rv-save:not(.is-seen) .rv-fit,.rv-js .rv-scene.rv-save.is-seen .rv-fit{opacity:1!important;transform:none!important;animation:none!important}
/* Phones are taller than 9:16, so the fixed 9:16 card letterboxes with paper
   bands (the report's "upper border"). On phones the canvas instead fills the
   screen and the artwork covers it edge to edge (object-fit:cover): the art is
   undistorted, crops only its outer border margins, and every copy block keeps
   its tested position relative to the viewport. Kept at the end of the file so
   these overrides win the cascade over the base rules above. */
@media (max-width:899px){
  :root{--rv-canvas-w:100vw;--rv-canvas-h:100%}
  .rv-canvas{box-shadow:none}
  .rv-art,.rv-envelope__photo,.rv-envelope__open-still,.rv-envelope__open-video{object-fit:cover}
}
