:root {
  --surface:#f5efe3; --surface-deep:#dce6db; --ink:#17372f; --accent:#9b7b45;
  --rsvp:#082e2a; --hero-overlay:rgba(3,24,22,.16); --gold:#c6aa70;
  --font-display:"Cormorant Garamond",Georgia,serif; --font-royal:"Cinzel",serif;
  --font-script:"Great Vibes",cursive; --font-ui:"Jost",sans-serif;
  --base-size:16px; --name-size:62px;
}
* { box-sizing:border-box; }
html { scroll-behavior:smooth; background:#061e1c; }
body { margin:0; color:var(--ink); background:#071f1c; font:var(--base-size)/1.55 var(--font-display); }
button,input { font:inherit; }
img,video { display:block; max-width:100%; }
[hidden] { display:none!important; }
.mobile-shell { position:relative; width:min(100%,440px); min-height:100vh; margin:auto; overflow:hidden; background:var(--surface); box-shadow:0 0 80px rgba(0,0,0,.45); }
.desktop-stage { position:fixed; inset:0; display:flex; flex-direction:column; align-items:flex-start; justify-content:center; padding-left:max(7vw,48px); color:#e9ddbd; background:radial-gradient(circle at 72% 18%,#12483f 0,#061e1c 42%,#020e0d 100%); }
.desktop-stage::before { content:""; position:absolute; inset:0; opacity:.13; background:repeating-linear-gradient(90deg,transparent 0 34px,rgba(235,220,184,.3) 35px,transparent 36px); }
.desktop-stage span { position:relative; font:400 clamp(46px,6vw,92px)/1 var(--font-script); }.desktop-stage small { position:relative; margin-top:10px; font:500 10px/1 var(--font-royal); letter-spacing:.24em; text-transform:uppercase; }
.progress { position:fixed; z-index:100; top:0; left:50%; width:min(100%,440px); height:3px; transform:translateX(-50%) scaleX(0); transform-origin:left; background:linear-gradient(90deg,#f2e8ca,var(--gold),#bfe2d1); }

.hero { position:relative; height:100svh; min-height:680px; overflow:hidden; color:#fff8e8; background:#082e2a; }
.hero-poster,.hero-film { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:center; }
.hero-film { z-index:2; }.hero-shade { position:absolute; z-index:3; inset:0; pointer-events:none; background:linear-gradient(180deg,rgba(1,18,16,.34),transparent 40%,rgba(1,14,13,.18) 72%,rgba(1,14,13,.48)); opacity:0; transition:opacity 1s ease; }
.intro-trigger { position:absolute; z-index:6; inset:0; width:100%; border:0; color:#fff8e8; background:linear-gradient(180deg,transparent 50%,rgba(2,16,14,.35)); cursor:pointer; transition:opacity .4s ease,visibility .4s; }
.intro-trigger::before { content:""; position:absolute; left:50%; bottom:19%; width:66px; height:66px; border:1px solid rgba(255,245,216,.55); border-radius:50%; transform:translate(-50%,-50%); box-shadow:0 0 0 8px rgba(255,245,216,.08); animation:veilPulse 2s ease-in-out infinite; }
.intro-kicker,.intro-action { position:absolute; left:50%; width:max-content; transform:translateX(-50%); text-transform:uppercase; }.intro-kicker { bottom:31%; font:500 9px/1 var(--font-royal); letter-spacing:.28em; }.intro-action { bottom:17%; font:600 10px/1 var(--font-ui); letter-spacing:.2em; }
.intro-trigger.is-hidden { opacity:0; visibility:hidden; pointer-events:none; }
.hero-copy { position:absolute; z-index:4; inset:7% 12% auto; max-height:49%; display:flex; flex-direction:column; align-items:center; text-align:center; opacity:0; transform:translateY(12px); transition:opacity 1s .25s ease,transform 1s .25s ease; text-shadow:0 2px 12px rgba(0,20,17,.96),0 1px 2px rgba(0,0,0,.9); }
.hero.is-ready .hero-copy { opacity:1; transform:none; }.hero.is-ready .hero-shade { opacity:1; }
.hero-kicker { margin:0 0 10px; font:500 8px/1.5 var(--font-royal); letter-spacing:.2em; text-transform:uppercase; }
.hero h1 { margin:0; display:flex; flex-direction:column; align-items:center; font:400 var(--name-size)/.76 var(--font-script); filter:drop-shadow(0 2px 8px #031a17); }.hero h1 em { margin:7px 0 5px; font:400 18px/1 var(--font-display); }.hero-jasmine { margin:8px 0 7px; color:#eed9a2; font-size:9px; }
.hero-family { max-width:290px; margin:2px 0; font:500 10px/1.3 var(--font-display); }.hero-date { margin:12px 0 1px; font:600 10px/1.4 var(--font-royal); letter-spacing:.12em; text-transform:uppercase; }.hero-venue { max-width:270px; margin:3px 0; font:500 10px/1.35 var(--font-display); }
.hero-scroll { position:absolute; z-index:5; bottom:max(16px,env(safe-area-inset-bottom)); left:50%; display:flex; flex-direction:column; align-items:center; gap:5px; color:#fff8e8; text-decoration:none; opacity:0; transform:translate(-50%,8px); transition:opacity .8s .8s ease,transform .8s .8s ease; }.hero.is-ready .hero-scroll { opacity:.78; transform:translate(-50%,0); }.hero-scroll span { width:1px; height:26px; background:currentColor; animation:scrollLine 1.8s ease-in-out infinite; transform-origin:top; }.hero-scroll small { font:500 7px/1 var(--font-ui); letter-spacing:.18em; text-transform:uppercase; }
body.intro-active { overflow:hidden; }

.section { position:relative; padding:88px 24px; }.eyebrow { margin:0 0 11px; color:var(--accent); font:600 9px/1.5 var(--font-royal); letter-spacing:.2em; text-transform:uppercase; }
.section-heading { margin-bottom:36px; text-align:center; }.section-heading h2 { margin:0; color:#264b41; font:500 42px/.95 var(--font-display); }.section-heading > p:last-child:not(.eyebrow) { max-width:290px; margin:12px auto 0; opacity:.7; font:400 14px/1.5 var(--font-display); }
.welcome { overflow:hidden; text-align:center; background:radial-gradient(circle at 50% 15%,#fffdf7,var(--surface) 60%,#dce6db 140%); }.welcome::before,.welcome::after { content:""; position:absolute; width:155px; height:155px; border:1px solid rgba(155,123,69,.15); border-radius:50%; }.welcome::before { top:-95px; left:-85px; }.welcome::after { right:-80px; bottom:-105px; }.script-title { margin:0; color:#264b41; font:400 50px/.95 var(--font-script); }.jasmine-rule { display:flex; align-items:center; justify-content:center; gap:12px; margin:20px auto; color:var(--gold); }.jasmine-rule i { width:56px; height:1px; background:linear-gradient(90deg,transparent,currentColor); }.jasmine-rule i:last-child { transform:scaleX(-1); }.jasmine-rule b { font-size:8px; }.welcome-copy { max-width:315px; margin:0 auto; font:500 17px/1.65 var(--font-display); }
.date-medallion { position:relative; isolation:isolate; width:190px; height:190px; margin:34px auto 0; padding:22px; display:flex; flex-direction:column; align-items:center; justify-content:center; overflow:hidden; color:var(--ink); border:1px solid rgba(155,123,69,.4); border-radius:50%; background:radial-gradient(circle,#fffef8,#e9ddc4); box-shadow:0 20px 45px rgba(35,69,60,.13); cursor:pointer; }.date-medallion::after { content:""; position:absolute; inset:9px; border:1px solid rgba(155,123,69,.22); border-radius:50%; }.date-medallion > span:not(.date-cover) { font:600 10px/1.3 var(--font-royal); letter-spacing:.15em; text-transform:uppercase; }.date-medallion strong { margin:5px 0; color:#264b41; font:500 55px/.9 var(--font-display); }.date-cover { position:absolute; z-index:3; inset:0; display:grid; place-content:center; gap:9px; color:#fff9e9; border-radius:50%; background:radial-gradient(circle at 40% 32%,#557363,#173e35 58%,#082e2a); transition:opacity .65s ease,transform .85s cubic-bezier(.2,.8,.2,1); }.date-cover small { font:600 8px/1 var(--font-ui); letter-spacing:.18em; text-transform:uppercase; }.date-cover b { font:400 54px/1 var(--font-script); color:#e7d09b; }.date-medallion.is-revealed .date-cover { opacity:0; transform:scale(1.3) rotate(10deg); pointer-events:none; }

.events { overflow:hidden; padding-inline:20px; background:linear-gradient(180deg,#0b322d,#123f37); color:#f8f0de; }.events .eyebrow { color:#d8bf86; }.events .section-heading h2 { color:#fff7e6; }.events-list { display:grid; gap:76px; }.event-curtain-card { display:grid; justify-items:center; perspective:1300px; }.event-stage { position:relative; width:min(100%,350px); aspect-ratio:1; overflow:hidden; border:1px solid rgba(226,205,155,.45); border-radius:26px 26px 8px 8px; background:#071f1c; box-shadow:0 26px 60px rgba(0,0,0,.36); opacity:.72; transform:translateY(22px) scale(.95); transition:opacity .7s ease,transform .95s cubic-bezier(.2,.8,.2,1); }.event-curtain-card.is-open .event-stage { opacity:1; transform:none; }.event-photo { width:100%; height:100%; object-fit:cover; transform:scale(1.07); filter:saturate(.83) brightness(.68); transition:transform 1.45s .28s ease,filter 1s .3s ease; }.event-curtain-card.is-open .event-photo { transform:scale(1.01); filter:saturate(.96) brightness(.9); }
.event-curtains { position:absolute; z-index:3; inset:0; overflow:hidden; pointer-events:none; }.event-curtain { position:absolute; top:0; bottom:0; width:50.2%; background-image:linear-gradient(rgba(3,25,22,.04),rgba(3,25,22,.13)),url("../img/event-curtain-closed.png"); background-repeat:no-repeat; background-size:200% 100%; box-shadow:0 0 26px rgba(0,0,0,.2); transition:transform 1.35s cubic-bezier(.18,.78,.16,1),filter 1.1s ease; will-change:transform; }.event-curtain--left { left:0; background-position:left center; transform-origin:left center; }.event-curtain--right { right:0; background-position:right center; transform-origin:right center; }.event-curtain-card.is-open .event-curtain--left { transform:translateX(-101%) rotateY(-8deg); filter:brightness(.84); }.event-curtain-card.is-open .event-curtain--right { transform:translateX(101%) rotateY(8deg); filter:brightness(.84); }.event-seal { position:absolute; z-index:4; top:50%; left:50%; width:38px; height:38px; display:grid; place-items:center; color:#fff8e5; border:1px solid rgba(255,247,224,.65); border-radius:50%; transform:translate(-50%,-50%); background:#9b7b45; box-shadow:0 0 0 6px rgba(224,202,151,.34),0 8px 18px rgba(0,0,0,.32); font-size:9px; transition:opacity .35s .28s ease,transform .7s ease; }.event-curtain-card.is-open .event-seal { opacity:0; transform:translate(-50%,-50%) scale(.35); }
.event-content { width:min(92%,335px); margin-top:21px; text-align:center; opacity:0; transform:translateY(16px); transition:opacity .7s .65s ease,transform .7s .65s ease; }.event-curtain-card.is-open .event-content { opacity:1; transform:none; }.event-content h3 { margin:0; color:#f3dfad; font:500 32px/1 var(--font-display); }.event-when { margin:10px 0 4px; color:#cfb879; font:600 9px/1.35 var(--font-royal); letter-spacing:.08em; text-transform:uppercase; }.event-venue { margin:0; font:500 14px/1.35 var(--font-display); }.event-description { max-width:285px; margin:8px auto 0; opacity:.76; font:400 italic 15px/1.45 var(--font-display); }.evt-map { display:inline-block; margin-top:11px; color:#ead29b; font:600 8px/1 var(--font-ui); letter-spacing:.11em; text-transform:uppercase; text-underline-offset:3px; }

.story { background:linear-gradient(180deg,#dfe8dd,#f7f1e6); }.story-frame { position:relative; width:88%; margin:0 auto 28px; padding:8px; border:1px solid rgba(38,75,65,.3); border-radius:180px 180px 16px 16px; background:#edf1e7; box-shadow:0 24px 58px rgba(16,58,49,.16); }.story-frame::before { content:""; position:absolute; inset:-9px 20px auto; height:78px; border:1px solid rgba(155,123,69,.36); border-bottom:0; border-radius:100px 100px 0 0; }.story-frame img { width:100%; aspect-ratio:2/3; object-fit:cover; border-radius:170px 170px 10px 10px; }.story-frame span { position:absolute; inset:8px; border-radius:170px 170px 10px 10px; background:linear-gradient(180deg,transparent 60%,rgba(5,40,34,.24)); }.story-copy { max-width:330px; margin:auto; text-align:center; font:400 italic 19px/1.6 var(--font-display); }.hashtag { margin:16px 0 0; text-align:center; color:var(--accent); font:500 10px/1 var(--font-royal); letter-spacing:.13em; }
.gallery { background:linear-gradient(180deg,#f5efe3,#dce6db); }.gallery-grid { width:min(100%,350px); margin:auto; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:11px; }.gallery-item { position:relative; overflow:hidden; aspect-ratio:4/5; border:1px solid rgba(155,123,69,.3); border-radius:70px 70px 9px 9px; background:#dbe5d9; box-shadow:0 15px 32px rgba(18,58,50,.13); }.gallery-item img { width:100%; height:100%; object-fit:cover; }
.venue { background:#f8f3e9; }.venue-card { position:relative; max-width:340px; margin:auto; padding:54px 24px; text-align:center; border:1px solid rgba(155,123,69,.32); background:radial-gradient(circle at 50% 0,rgba(255,255,255,.9),rgba(220,230,219,.72)); box-shadow:0 20px 48px rgba(17,59,50,.11); }.venue-card::before,.venue-card::after { content:""; position:absolute; inset:8px; border:1px solid rgba(155,123,69,.18); pointer-events:none; }.venue-card::after { inset:14px; }.venue-mark { color:var(--gold); font-size:24px; }.venue-card h3 { margin:12px 0 5px; color:#264b41; font:500 28px/1.1 var(--font-display); }.venue-card p { margin:5px 0; }.venue-date { font:500 10px/1.4 var(--font-royal); letter-spacing:.08em; text-transform:uppercase; }.venue-card a { display:inline-block; margin-top:18px; padding:11px 20px; color:var(--accent); border:1px solid var(--accent); border-radius:999px; font:600 9px/1 var(--font-ui); letter-spacing:.13em; text-decoration:none; text-transform:uppercase; }
.things { background:#dce6db; }.things-list { list-style:none; margin:0; padding:0; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }.thing { min-height:190px; padding:20px 14px; display:flex; flex-direction:column; align-items:center; text-align:center; border:1px solid rgba(38,75,65,.17); border-radius:64px 64px 15px 15px; background:rgba(250,247,238,.72); box-shadow:0 14px 30px rgba(18,58,50,.08); }.thing-index { width:38px; height:38px; margin-bottom:15px; display:grid; place-items:center; color:var(--accent); border:1px solid rgba(155,123,69,.36); border-radius:50%; font:600 9px/1 var(--font-royal); }.thing h3 { margin:0 0 8px; font:600 16px/1.2 var(--font-display); }.thing p { margin:0; opacity:.75; font:400 13px/1.42 var(--font-display); }
.calendar { text-align:center; background:#f8f3e9; }.calendar-actions { max-width:280px; margin:auto; display:flex; flex-direction:column; gap:10px; }.calendar-actions a { padding:14px 20px; color:var(--accent); border:1px solid var(--accent); border-radius:999px; font:600 10px/1 var(--font-ui); letter-spacing:.12em; text-decoration:none; text-transform:uppercase; }.calendar-actions a:first-child { color:#fff9e8; background:#31584d; border-color:#31584d; }
.rsvp { padding:100px 22px; color:#fff6e4; background:radial-gradient(circle at 50% 0,rgba(198,170,112,.28),transparent 36%),var(--rsvp); }.rsvp-inner { text-align:center; }.rsvp .eyebrow { color:#d9bd80; }.rsvp h2 { margin:0; font:400 50px/.95 var(--font-script); }.rsvp-inner > p:not(.eyebrow) { max-width:310px; margin:16px auto 28px; opacity:.78; font:400 16px/1.55 var(--font-display); }.rsvp-panel { max-width:360px; margin:auto; }.rsvp-choices { display:grid; grid-template-columns:1fr 1fr; gap:10px; }.rsvp-choice { min-height:110px; padding:16px 10px; color:inherit; border:1px solid rgba(255,255,255,.24); border-radius:45px 45px 12px 12px; background:rgba(255,255,255,.06); }.rsvp-choice strong,.rsvp-choice span { display:block; }.rsvp-choice strong { font:500 18px/1.2 var(--font-display); }.rsvp-choice span { margin-top:7px; opacity:.65; font:400 11px/1.35 var(--font-ui); }.rsvp-choice:first-child { border-color:#d7bd83; background:rgba(255,255,255,.11); }.rsvp-form { display:grid; gap:10px; }.rsvp-form input { width:100%; padding:13px 15px; color:inherit; border:1px solid rgba(255,255,255,.24); border-radius:10px; background:rgba(255,255,255,.07); font:400 14px/1 var(--font-ui); }.rsvp-form input::placeholder { color:rgba(255,255,255,.52); }.rsvp-form button { padding:14px; color:#082e2a; border:0; border-radius:999px; background:#e5cf9a; font:600 10px/1 var(--font-ui); letter-spacing:.14em; text-transform:uppercase; }.rsvp-back { margin-top:10px; color:inherit; border:0; background:none; text-decoration:underline; }
.closing-countdown { overflow:hidden; padding-block:82px 76px; text-align:center; background:radial-gradient(circle at 50% 44%,rgba(255,255,255,.9),transparent 44%),linear-gradient(180deg,#dce6db,var(--surface)); }.countdown { max-width:340px; margin:auto; display:grid; grid-template-columns:repeat(4,1fr); gap:5px; }.countdown div { padding:14px 3px; border-top:1px solid rgba(155,123,69,.3); border-bottom:1px solid rgba(155,123,69,.3); }.countdown strong,.countdown span { display:block; }.countdown strong { color:#264b41; font:500 27px/1 var(--font-display); }.countdown span { margin-top:5px; font:500 7px/1 var(--font-ui); letter-spacing:.14em; text-transform:uppercase; }.countdown-signoff { margin:27px 0 0; color:#264b41; font:400 34px/1 var(--font-script); }
footer { padding:54px 20px 90px; text-align:center; background:var(--surface); }.footer-mark { color:var(--gold); }.footer-mark + p { margin:12px 0; font:400 34px/1 var(--font-script); }.footer-mark + p + small { opacity:.6; font:400 9px/1.4 var(--font-ui); letter-spacing:.12em; text-transform:uppercase; }.footer-mark + p + small a { color:inherit; }

.music-toggle,.nav-toggle { position:fixed; z-index:85; right:max(calc(50% - 203px),14px); bottom:max(18px,env(safe-area-inset-bottom)); width:44px; height:44px; color:#fff9e8; border:1px solid rgba(255,255,255,.38); border-radius:50%; background:rgba(8,46,42,.92); backdrop-filter:blur(8px); box-shadow:0 9px 25px rgba(0,20,17,.28); }.music-toggle { bottom:max(72px,calc(env(safe-area-inset-bottom) + 72px)); display:flex; align-items:center; justify-content:center; gap:3px; }.music-toggle span { width:2px; height:10px; background:currentColor; }.music-toggle[aria-pressed="true"] span { animation:bars .8s ease-in-out infinite alternate; }.music-toggle[aria-pressed="true"] span:nth-child(2){animation-delay:.2s}.music-toggle[aria-pressed="true"] span:nth-child(3){animation-delay:.4s}
.nav-toggle i { position:absolute; left:12px; width:19px; height:1px; background:currentColor; transition:.3s; }.nav-toggle i:first-child { top:17px; }.nav-toggle i:last-child { top:25px; }.nav-toggle[aria-expanded="true"] i:first-child { top:21px; transform:rotate(45deg); }.nav-toggle[aria-expanded="true"] i:last-child { top:21px; transform:rotate(-45deg); }.nav-panel { position:fixed; z-index:80; right:max(calc(50% - 203px),14px); bottom:72px; width:174px; padding:18px; display:grid; gap:13px; visibility:hidden; opacity:0; transform:translateY(10px) scale(.96); transform-origin:bottom right; border:1px solid rgba(255,255,255,.28); border-radius:16px; background:rgba(5,38,34,.97); backdrop-filter:blur(12px); transition:.3s ease; }.nav-panel.is-open { visibility:visible; opacity:1; transform:none; }.nav-panel a { color:#fff6e5; font:500 10px/1 var(--font-ui); letter-spacing:.12em; text-decoration:none; text-transform:uppercase; }
.reveal { opacity:1; transform:none; }.reveal-armed .reveal,.reveal-armed .thing,.reveal-armed .gallery-item { opacity:0; transform:translateY(24px); transition:opacity .8s ease,transform .8s cubic-bezier(.2,.8,.2,1); }.reveal-armed .reveal.is-visible,.reveal-armed .thing.is-visible,.reveal-armed .gallery-item.is-visible { opacity:1; transform:none; }
@keyframes veilPulse { 50% { opacity:.5; transform:translate(-50%,-50%) scale(1.08); } } @keyframes scrollLine { 0%,100%{transform:scaleY(.35);opacity:.3}50%{transform:scaleY(1);opacity:1} } @keyframes bars { to{height:20px} }
@media (max-width:460px) { .desktop-stage{display:none}.mobile-shell{width:100%;box-shadow:none}.progress{left:0;width:100%;transform:scaleX(0)}.music-toggle,.nav-toggle,.nav-panel{right:14px} }
@media (max-height:700px) { .hero-copy{inset:4% 12% auto}.hero h1{font-size:50px}.hero-family{font-size:9px}.hero-date{margin-top:8px} }
@media (prefers-reduced-motion:reduce) { html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.event-stage{opacity:1;transform:none}.event-curtains,.event-seal{display:none}.event-content{opacity:1;transform:none} }
