/* ============================================================
   Vishnu & Amruthanath Â· Traditional Kerala Hindu Wedding
   Pure HTML5 + CSS3 + Vanilla JS. No frameworks.
   ============================================================ */

/* ---------- 1 Â· TOKENS ---------- */
:root{
  --ivory:#FBF7EF;
  --ivory-2:#F6EFE2;
  --beige:#EFE3CF;
  --beige-2:#E6D7BD;
  --gold:#C1962F;
  --gold-lt:#E7C97A;
  --gold-dk:#8E6C1E;
  --brass:#9C7C38;
  --leaf:#3D6B3C;
  --leaf-dk:#2A4E2B;
  --maroon:#6B1F2A;
  --maroon-dk:#4A131C;
  --brown:#7A5C43;
  --ink:#3A2A20;
  --ink-soft:#6A574A;
  --night:#140E08;
  --night-2:#241811;

  --shadow-s:0 2px 10px rgba(58,42,32,.07);
  --shadow-m:0 12px 34px -14px rgba(58,42,32,.28);
  --shadow-l:0 30px 70px -30px rgba(58,42,32,.42);

  --f-display:"Cormorant Garamond",Georgia,"Times New Roman",serif;
  --f-title:"Marcellus",Georgia,serif;
  --f-body:"Jost","Segoe UI",system-ui,-apple-system,sans-serif;
  --f-ml:"Noto Sans Malayalam","Nirmala UI",system-ui,sans-serif;

  --wrap:1120px;
  --pad:clamp(20px,5vw,44px);
  --sec-y:clamp(72px,12vw,132px);

  --ease:cubic-bezier(.22,.61,.36,1);
  --ease-soft:cubic-bezier(.4,0,.2,1);

  --motif:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='72' height='22' viewBox='0 0 72 22'%3E%3Cg fill='none' stroke='%23C1962F' stroke-width='1' stroke-linecap='round' opacity='.6'%3E%3Cpath d='M0 11h14M58 11h14'/%3E%3Cpath d='M22 11c0-3.6 2.6-6.4 5.6-6.4S33.2 7.4 33.2 11s-2.6 6.4-5.6 6.4S22 14.6 22 11z'/%3E%3Cpath d='M38.8 11c0-3.6 2.6-6.4 5.6-6.4S50 7.4 50 11s-2.6 6.4-5.6 6.4S38.8 14.6 38.8 11z'/%3E%3C/g%3E%3Ccircle cx='36' cy='11' r='1.7' fill='%23C1962F' opacity='.75'/%3E%3C/svg%3E");
}

/* ---------- 2 Â· RESET ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  margin:0;
  background:var(--night);
  color:var(--ink);
  font-family:var(--f-body);
  font-weight:300;
  font-size:clamp(15px,1.05vw + 12px,17px);
  line-height:1.75;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
body.is-locked{overflow:hidden;height:100%;position:fixed;inset:0;width:100%}
img,video,canvas,svg{display:block;max-width:100%}
h1,h2,h3,p,dl,dd,ul,ol,figure{margin:0}
ul,ol{list-style:none;padding:0}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer}
::selection{background:var(--gold);color:#fff}
.sprite{position:absolute;width:0;height:0;overflow:hidden}

/* every symbol uses a 64-unit viewBox, so stroke widths are in those
   units â€” roughly 3.8 reads as a 1.4px hairline at typical icon sizes */
.ico{
  width:1em;height:1em;flex:none;
  fill:none;stroke:currentColor;stroke-width:3.8;
  stroke-linecap:round;stroke-linejoin:round;
  overflow:visible;
}

/* ---------- 3 Â· SHARED BITS ---------- */
.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--pad);position:relative;z-index:2}
.wrap--center{text-align:center}

.divider{display:flex;align-items:center;justify-content:center;gap:14px;margin:18px auto 0;max-width:280px;color:var(--gold)}
.divider .ico{width:24px;height:24px;stroke-width:3.6;opacity:.95}
.divider-line{height:1px;flex:1;background:linear-gradient(90deg,transparent,rgba(193,150,47,.75))}
.divider-line:last-child{background:linear-gradient(270deg,transparent,rgba(193,150,47,.75))}
.divider--sm{max-width:200px}
.divider--light{color:var(--gold-lt)}
.divider--light .divider-line{background:linear-gradient(90deg,transparent,rgba(231,201,122,.65))}
.divider--light .divider-line:last-child{background:linear-gradient(270deg,transparent,rgba(231,201,122,.65))}

.mural-border{position:absolute;left:0;right:0;height:22px;background-image:var(--motif);background-repeat:repeat-x;background-position:center;opacity:.5;pointer-events:none}
.mural-border--top{top:22px}

.sample{
  display:inline-block;vertical-align:middle;
  font-family:var(--f-body);font-size:9px;font-weight:500;
  letter-spacing:.16em;text-transform:uppercase;
  padding:2px 7px;margin:0 4px;border-radius:999px;
  color:#8a2036;background:rgba(160,40,60,.09);
  border:1px dashed rgba(160,40,60,.5);
  line-height:1.5;white-space:nowrap;
}
.scene--dark .sample,.scene--finale .sample{color:#F2B7C0;background:rgba(255,140,160,.1);border-color:rgba(255,150,170,.45)}

code{font-family:ui-monospace,"Cascadia Code",Consolas,monospace;font-size:.85em;background:rgba(120,90,40,.1);padding:2px 6px;border-radius:4px}

.muted{color:var(--ink-soft)}

/* ---------- 4 Â· PARTICLE CANVAS ---------- */
#particles{
  position:fixed;inset:0;width:100%;height:100%;
  z-index:80;pointer-events:none;
  opacity:0;transition:opacity 1.4s var(--ease);
  will-change:opacity;
}
#particles.on{opacity:1}

/* ============================================================
   5 Â· LANDING COVER  Â·  image fills the screen; content fits it
   ============================================================ */
#landing{
  position:fixed;inset:0;z-index:70;
  /* reuse .scene--screen grid from scenes.css when both classes apply;
     also declare here so landing works even if load order shifts */
  width:100%;
  height:100svh;height:100vh;
  min-height:100svh;min-height:100vh;
  display:grid;
  grid-template-columns:var(--hero-safe-side,11%) minmax(0,1fr) var(--hero-safe-side,11%);
  grid-template-rows:var(--hero-safe-top,22%) minmax(0,1fr) var(--hero-safe-bottom,16%);
  overflow:hidden;background:#0B0703;
  transition:opacity .42s var(--ease);
  will-change:opacity;
}
#landing.is-opening .btn-open{pointer-events:none;opacity:.72}
#landing.is-out{opacity:0;pointer-events:none}
#landing.is-gone{display:none}

.landing-media,
#landing > .rays,
#landing > .vignette,
#landing > .temple-glow,
#landing > .landing-overlay{
  grid-column:1 / -1;
  grid-row:1 / -1;
  width:100%;
  height:100%;
  pointer-events:none;
}
.landing-media{position:relative;z-index:0;overflow:hidden}
.cover-img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;
  object-position:center center;
  animation:kenburns 26s var(--ease-soft) infinite alternate;
  will-change:transform;
}
.cover-img.failed{display:none}
.cover-fallback{
  position:absolute;inset:0;opacity:0;
  background:
    radial-gradient(120% 70% at 50% 12%,rgba(255,226,164,.36),transparent 62%),
    radial-gradient(80% 55% at 20% 90%,rgba(193,150,47,.28),transparent 70%),
    radial-gradient(80% 55% at 82% 84%,rgba(107,31,42,.34),transparent 70%),
    linear-gradient(180deg,#2A1B0E 0%,#160E07 55%,#0B0703 100%);
}
.landing-media.fallback-on .cover-fallback{opacity:1}

@keyframes kenburns{
  from{transform:scale(1.04) translate3d(0,0,0)}
  to{transform:scale(1.12) translate3d(0,-1.2%,0)}
}

.vignette{
  position:relative;z-index:2;
  background:
    radial-gradient(115% 78% at 50% 34%,transparent 34%,rgba(11,7,3,.35) 82%,rgba(11,7,3,.62) 100%),
    linear-gradient(180deg,rgba(10,6,3,.35) 0%,transparent 26%,transparent 48%,rgba(10,6,3,.55) 100%);
}
.landing-overlay{
  position:relative;z-index:2;
  background:radial-gradient(70% 50% at 50% 45%,transparent 30%,rgba(11,7,3,.2) 100%);
}
.temple-glow{
  position:relative;z-index:2;pointer-events:none;
  background:radial-gradient(ellipse 55% 40% at 50% 18%,rgba(255,214,140,.28),transparent 70%);
  animation:breathe 7.5s var(--ease-soft) infinite;
}
@keyframes breathe{
  0%,100%{opacity:.55}
  50%{opacity:1}
}

/* light rays â€” fill the landing/hero cell */
.rays{
  position:relative;z-index:2;pointer-events:none;opacity:.28;mix-blend-mode:screen;
  overflow:hidden;
}
.rays::before,.rays::after{
  content:"";position:absolute;inset:-20%;
  background:repeating-conic-gradient(from 0deg at 50% 8%,
    rgba(255,226,168,.20) 0deg 2.2deg,
    transparent 2.2deg 10deg);
  -webkit-mask-image:radial-gradient(65% 78% at 50% 6%,#000,transparent 72%);
  mask-image:radial-gradient(65% 78% at 50% 6%,#000,transparent 72%);
  animation:sweep 46s linear infinite;
  will-change:transform;
}
.rays::after{animation-duration:74s;animation-direction:reverse;opacity:.6}
@keyframes sweep{to{transform:rotate(360deg)}}
.rays--hero{opacity:.3}

.landing-inner{
  color:var(--ivory);
  z-index:5;
}

.landing-eyebrow{display:flex;flex-direction:column;gap:6px;animation:riseIn 1.5s .35s var(--ease) both}
.landing-eyebrow .ml{font-family:var(--f-ml);font-size:clamp(14px,3.6vw,18px);color:var(--gold-lt);letter-spacing:.02em}
.landing-eyebrow .en{font-size:clamp(9.5px,2.4vw,11.5px);letter-spacing:.32em;text-transform:uppercase;color:rgba(251,247,239,.62)}

.landing-inner .divider{animation:riseIn 1.5s .6s var(--ease) both}

.landing-names{
  margin-top:16px;font-family:var(--f-display);font-weight:300;
  font-size:clamp(38px,11.5vw,86px);line-height:1.05;letter-spacing:.01em;
  display:flex;flex-direction:column;align-items:center;gap:2px;
  color:#FFF6E3;
  text-shadow:0 2px 30px rgba(255,196,110,.32),0 1px 3px rgba(0,0,0,.4);
}
.landing-names .n{animation:riseIn 1.6s .8s var(--ease) both}
.landing-names .n:last-child{animation-delay:1.05s}
.landing-names .amp{
  font-family:var(--f-display);font-style:italic;font-size:.44em;
  color:var(--gold-lt);opacity:.9;margin:2px 0;
  animation:riseIn 1.6s .95s var(--ease) both;
}
.landing-date{
  margin-top:14px;font-size:clamp(11px,3vw,13px);letter-spacing:.44em;
  text-indent:.44em;color:rgba(255,246,227,.78);
  animation:riseIn 1.6s 1.25s var(--ease) both;
}

@keyframes riseIn{
  from{opacity:0;transform:translate3d(0,22px,0)}
  to{opacity:1;transform:none}
}

/* ---------- Open Invitation button ---------- */
.btn-open{
  position:relative;margin-top:clamp(34px,7vw,52px);
  padding:0;border-radius:999px;isolation:isolate;
  -webkit-tap-highlight-color:transparent;
  animation:riseIn 1.6s 1.5s var(--ease) both;
  transition:transform .4s var(--ease);
}
.btn-open__inner{
  position:relative;z-index:3;display:flex;align-items:center;gap:14px;
  padding:16px clamp(26px,6vw,38px);border-radius:999px;
  background:linear-gradient(145deg,rgba(28,18,9,.72),rgba(12,8,4,.62));
  border:1px solid rgba(231,201,122,.55);
  backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);
  box-shadow:inset 0 1px 0 rgba(255,232,180,.24),0 14px 40px -18px rgba(0,0,0,.9);
  transition:border-color .4s var(--ease),box-shadow .4s var(--ease);
}
.btn-open__lamp{width:26px;height:26px;color:var(--gold-lt);stroke-width:3.6;animation:flicker 3.4s ease-in-out infinite}
@keyframes flicker{0%,100%{opacity:.85;filter:drop-shadow(0 0 4px rgba(255,196,110,.5))}45%{opacity:1;filter:drop-shadow(0 0 12px rgba(255,206,130,.95))}70%{opacity:.9}}

.btn-open__label{display:flex;flex-direction:column;align-items:flex-start;line-height:1.3}
.btn-open__en{font-size:clamp(13px,3.3vw,15px);letter-spacing:.24em;text-transform:uppercase;color:#FFF3DC}
.btn-open__ml{font-family:var(--f-ml);font-size:clamp(10px,2.6vw,11.5px);color:rgba(231,201,122,.82);letter-spacing:.01em}

.btn-open__glow{
  position:absolute;inset:-26px;z-index:1;border-radius:999px;
  background:radial-gradient(closest-side,rgba(255,200,110,.42),transparent 74%);
  animation:pulseGlow 3.6s var(--ease-soft) infinite;
}
@keyframes pulseGlow{0%,100%{opacity:.45;transform:scale(.94)}50%{opacity:1;transform:scale(1.06)}}

.btn-open__ring{
  position:absolute;inset:-7px;z-index:2;border-radius:999px;
  border:1px solid rgba(231,201,122,.42);
  animation:ringOut 3.6s var(--ease-soft) infinite;
}
@keyframes ringOut{0%{opacity:.75;transform:scale(.96)}70%{opacity:0;transform:scale(1.16)}100%{opacity:0}}

.btn-open__shimmer{
  position:absolute;inset:0;z-index:4;border-radius:999px;overflow:hidden;pointer-events:none;
  -webkit-mask-image:linear-gradient(#000,#000);
}
.btn-open__shimmer::before{
  content:"";position:absolute;top:-60%;bottom:-60%;width:34%;left:-45%;
  background:linear-gradient(100deg,transparent,rgba(255,240,205,.5),transparent);
  transform:skewX(-18deg);
  animation:shimmer 4.6s 2.4s var(--ease-soft) infinite;
}
@keyframes shimmer{0%{left:-45%}55%,100%{left:125%}}

.btn-open:hover{transform:translateY(-2px)}
.btn-open:hover .btn-open__inner{border-color:rgba(231,201,122,.95);box-shadow:inset 0 1px 0 rgba(255,232,180,.34),0 18px 46px -16px rgba(255,180,90,.42)}
.btn-open:active{transform:translateY(0) scale(.985)}
.btn-open:focus-visible{outline:2px solid var(--gold-lt);outline-offset:8px}

.landing-hint{
  margin-top:18px;font-size:10px;letter-spacing:.34em;text-transform:uppercase;
  color:rgba(251,247,239,.42);
  animation:riseIn 1.6s 1.9s var(--ease) both,hintFade 3.4s 3s ease-in-out infinite;
}
@keyframes hintFade{0%,100%{opacity:.35}50%{opacity:.85}}

/* ============================================================
   6 Â· REVEAL VIDEO
   ============================================================ */
#reveal{
  position:fixed;inset:0;z-index:60;background:#0B0703;
  opacity:0;visibility:hidden;
  /* Armed under the cover: fully painted but invisible until the cover lifts.
     is-on keeps it under the fading cover; is-live promotes it after the fade. */
  transition:opacity .42s var(--ease),visibility 0s linear .42s;
  will-change:opacity;
}
#reveal.is-armed,
#reveal.is-on{
  opacity:1;visibility:visible;
  transition:opacity .42s var(--ease),visibility 0s;
}
#reveal.is-live{z-index:95}
#reveal.is-out{opacity:0;visibility:hidden;transition:opacity .85s var(--ease),visibility 0s linear .85s;z-index:95}
#reveal.is-gone{display:none}
#revealVideo{
  position:absolute;inset:0;z-index:1;
  width:100%;height:100%;
  object-fit:cover;
  object-position:center center;
  background:#0B0703;
}
.reveal-fade{
  position:absolute;inset:0;z-index:2;pointer-events:none;opacity:0;
  background:radial-gradient(120% 80% at 50% 55%,rgba(255,226,170,.22),transparent 60%),#0B0703;
  transition:opacity 1.1s var(--ease);
}
#reveal.is-out .reveal-fade{opacity:1}

.btn-skip{
  position:absolute;z-index:3;right:max(16px,env(safe-area-inset-right));
  bottom:max(18px,env(safe-area-inset-bottom));
  padding:8px 18px;border-radius:999px;
  font-size:10px;letter-spacing:.26em;text-transform:uppercase;
  color:rgba(255,246,227,.8);border:1px solid rgba(231,201,122,.32);
  background:rgba(0,0,0,.3);backdrop-filter:blur(6px);
  opacity:0;animation:fadeIn .8s var(--ease) forwards;
}
@keyframes fadeIn{to{opacity:.6}}
.btn-skip:hover{opacity:1}

/* ============================================================
   7 Â· SITE SHELL
   ============================================================ */
#site{
  position:relative;z-index:1;
  opacity:0;visibility:hidden;
  transition:opacity .85s var(--ease);
  background:var(--ivory);
}
body.is-revealed #site{opacity:1;visibility:visible}
/* hold every in-page animation until the curtain lifts */
body:not(.is-revealed) #site *{animation-play-state:paused!important}

/* Below-the-fold scenes skip layout/paint until near the viewport */
#story,#timeline,#couple,#family,#ceremony,#reception,#venue,#gallery,#pending,#thankyou,#footer{
  content-visibility:auto;
  contain-intrinsic-size:auto 720px;
}

/* ============================================================
   9 Â· FLOW SECTION INTERNALS
   (outer shell = scenes.css Â· .scene / .section-content)
   ============================================================ */
.section-content--center{
  text-align:center;
  justify-content:center;
  align-items:center;
  min-height:min(100svh, 40rem);
}

.scene--dark .sec-title,
.scene--finale .sec-title{color:#FBF3E2}
.scene--dark .kicker,
.scene--finale .kicker{color:var(--gold-lt);opacity:.9}
.scene--dark .sec-note,
.scene--finale .sec-note{color:rgba(243,233,214,.7)}

.sec-head{text-align:center;margin-bottom:clamp(2rem,5vw,4rem)}
.kicker{
  font-family:var(--f-ml);
  font-size:clamp(11px,2.9vw,13px);letter-spacing:.2em;
  color:var(--brass);margin-bottom:10px;
}
.sec-title{
  font-family:var(--f-display);font-weight:300;
  font-size:clamp(28px,6.5vw,52px);line-height:1.12;letter-spacing:.005em;
  color:var(--ink);
}
.sec-note{
  max-width:640px;margin:16px auto 0;font-size:clamp(12px,2.8vw,13.5px);line-height:1.7;
  color:var(--ink-soft);
}

/* ============================================================
   8 Â· HERO TYPOGRAPHY  (layout lives in scenes.css)
   ============================================================ */
.hero-bless{display:flex;flex-direction:column;gap:clamp(4px,1.2%,8px);margin-bottom:clamp(8px,3%,16px)}
.hero-bless__ml{
  font-family:var(--f-ml);font-size:clamp(11px,3vw,15px);
  color:#8E6C1E;letter-spacing:.02em;
}
.hero-bless__en{
  font-size:clamp(8px,2.2vw,10px);letter-spacing:.28em;text-transform:uppercase;
  color:rgba(74,52,32,.62);
}
.hero-names{
  display:flex;flex-direction:column;align-items:center;gap:0;
  font-family:var(--f-display);font-weight:300;
  font-size:clamp(32px,9vw,58px);line-height:.98;letter-spacing:.01em;
  color:#3A2414;
  text-shadow:0 1px 0 rgba(255,246,220,.55);
}
.hero-names__n{display:block}
.hero-names__amp{
  font-family:var(--f-display);font-style:italic;font-weight:300;
  font-size:.42em;line-height:1;margin:clamp(2px,1%,6px) 0;color:#9C7C38;
}
.hero-date{
  margin-top:clamp(10px,3.5%,20px);
  display:flex;flex-direction:column;align-items:center;gap:clamp(3px,1%,6px);
}
.hero-date__en{
  font-family:var(--f-title);font-size:clamp(11px,3.2vw,15px);
  letter-spacing:.14em;text-transform:uppercase;color:#5A3C1E;
}
.hero-date__ml{
  font-family:var(--f-ml);font-size:clamp(10px,2.8vw,13px);color:#8E6C1E;
}

.scroll-indicator{
  display:flex;flex-direction:column;align-items:center;gap:10px;
  color:var(--brown);
}
.scroll-indicator__word{font-size:9.5px;letter-spacing:.36em;text-transform:uppercase;opacity:.72}
.scroll-indicator__rail{
  position:relative;width:1px;height:52px;
  background:linear-gradient(180deg,rgba(122,92,67,.5),transparent);
  overflow:visible;
}
.scroll-indicator__dot{
  position:absolute;left:50%;top:0;width:5px;height:5px;margin-left:-2.5px;border-radius:50%;
  background:var(--gold);box-shadow:0 0 10px rgba(193,150,47,.9);
  animation:scrollDot 2.4s var(--ease-soft) infinite;
}
@keyframes scrollDot{0%{transform:translateY(0);opacity:0}18%{opacity:1}80%{opacity:1}100%{transform:translateY(46px);opacity:0}}

/* ============================================================
   9 Â· FLOW SECTION INTERNALS
   ============================================================ */
/* (outer shell lives in scenes.css â€” keep only component styles here) */

.lede{
  max-width:720px;margin:0 auto clamp(40px,7vw,62px);text-align:center;
  font-family:var(--f-display);font-size:clamp(17px,4.3vw,22px);
  line-height:1.85;color:var(--ink-soft);font-weight:300;
}
.lede em{font-style:italic;color:var(--maroon);font-weight:400}

/* ---------- reveal on scroll ---------- */
.reveal{opacity:0;transform:translate3d(0,26px,0);transition:opacity .95s var(--ease),transform .95s var(--ease);will-change:opacity,transform}
.reveal.in{opacity:1;transform:none}
.reveal[data-delay="1"]{transition-delay:.09s}
.reveal[data-delay="2"]{transition-delay:.18s}
.reveal[data-delay="3"]{transition-delay:.27s}
.reveal[data-delay="4"]{transition-delay:.36s}

/* ---------- facts ---------- */
.facts{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(215px,1fr))}
.fact{
  position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;
  gap:4px;padding:30px 20px 26px;border-radius:3px;
  background:rgba(255,255,255,.55);
  border:1px solid rgba(193,150,47,.24);
  box-shadow:var(--shadow-s);
  transition:transform .5s var(--ease),box-shadow .5s var(--ease),border-color .5s var(--ease);
}
.fact::before{
  content:"";position:absolute;inset:5px;border:1px solid rgba(193,150,47,.16);border-radius:2px;pointer-events:none;
}
.fact:hover{transform:translateY(-4px);box-shadow:var(--shadow-m);border-color:rgba(193,150,47,.5)}
.fact .ico{width:30px;height:30px;color:var(--gold);stroke-width:3.4;margin-bottom:8px}
.fact-k{font-size:9.5px;letter-spacing:.28em;text-transform:uppercase;color:var(--brass)}
.fact-v{font-family:var(--f-title);font-size:clamp(15px,3.9vw,17.5px);color:var(--ink);line-height:1.4}
.fact-s{font-size:12px;color:var(--ink-soft)}

/* ---------- countdown ---------- */
.countdown{
  display:flex;align-items:center;justify-content:center;gap:clamp(8px,3vw,22px);
  margin-top:clamp(42px,7vw,60px);flex-wrap:wrap;
}
.cd-unit{display:flex;flex-direction:column;align-items:center;min-width:64px}
.cd-n{
  font-family:var(--f-display);font-weight:400;
  font-size:clamp(30px,8vw,48px);line-height:1;color:var(--maroon);
  font-variant-numeric:tabular-nums;
}
.cd-l{margin-top:6px;font-size:9px;letter-spacing:.26em;text-transform:uppercase;color:var(--brass)}
.cd-sep{width:1px;height:34px;background:linear-gradient(180deg,transparent,rgba(193,150,47,.6),transparent)}

/* ---------- cards ---------- */
.card{
  position:relative;padding:clamp(26px,5vw,36px);border-radius:3px;
  background:rgba(255,255,255,.62);
  border:1px solid rgba(193,150,47,.26);
  box-shadow:var(--shadow-s);
  transition:transform .55s var(--ease),box-shadow .55s var(--ease);
}
.card::after{content:"";position:absolute;inset:6px;border:1px solid rgba(193,150,47,.14);pointer-events:none}
.card:hover{transform:translateY(-5px);box-shadow:var(--shadow-m)}
.card-ico{width:34px;height:34px;color:var(--leaf);stroke-width:3.2;margin-bottom:16px;opacity:.85}
.card-title{font-family:var(--f-title);font-size:clamp(17px,4.2vw,20px);color:var(--ink);margin-bottom:10px;font-weight:400}
.card p{font-size:14.5px;line-height:1.85;color:var(--ink-soft)}

.story-grid{display:grid;gap:18px;grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}

/* ---------- timeline ---------- */
.tl{position:relative;max-width:760px;margin-inline:auto;padding-left:8px}
.tl::before{
  content:"";position:absolute;left:23px;top:12px;bottom:12px;width:1px;
  background:linear-gradient(180deg,transparent,rgba(193,150,47,.55) 8%,rgba(193,150,47,.55) 92%,transparent);
}
.tl-item{position:relative;padding:0 0 clamp(34px,6vw,50px) 66px}
.tl-item:last-child{padding-bottom:0}
.tl-node{
  position:absolute;left:0;top:0;width:47px;height:47px;border-radius:50%;
  display:grid;place-items:center;background:var(--ivory);
  border:1px solid rgba(193,150,47,.55);color:var(--gold);
  box-shadow:0 0 0 6px var(--ivory),0 6px 18px -8px rgba(58,42,32,.4);
}
.tl-node .ico{width:22px;height:22px;stroke-width:3.6}
.tl-node--hi{background:linear-gradient(145deg,var(--gold-lt),var(--gold));color:#3A2A20;border-color:transparent}
.tl-node--hi::after{
  content:"";position:absolute;inset:-6px;border-radius:50%;
  border:1px solid rgba(193,150,47,.55);animation:ringOut 3.4s var(--ease-soft) infinite;
}
.tl-date{font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--brass)}
.tl-title{font-family:var(--f-display);font-weight:400;font-size:clamp(22px,5.6vw,30px);color:var(--ink);margin:6px 0 8px;line-height:1.2}
.tl-meta{font-size:13.5px;color:var(--maroon);margin-bottom:8px}
.tl-text{font-size:14.5px;color:var(--ink-soft);line-height:1.8}

/* ---------- couple ---------- */
.couple-grid{
  display:grid;gap:clamp(28px,6vw,44px);align-items:start;
  grid-template-columns:1fr;justify-items:center;
}
.person{text-align:center;max-width:400px}
.portrait{
  position:relative;width:clamp(180px,54vw,238px);aspect-ratio:3/4;margin:0 auto 26px;
  border-radius:999px 999px 6px 6px;overflow:hidden;
  background:
    repeating-linear-gradient(135deg,rgba(193,150,47,.08) 0 10px,transparent 10px 20px),
    linear-gradient(160deg,#3A2A1A,#20150D);
  border:1px solid rgba(231,201,122,.32);
}
.portrait-img{width:100%;height:100%;object-fit:cover;object-position:center 15%}
.portrait-img.failed{display:none}
.portrait.is-empty::after{
  content:attr(data-label);
  position:absolute;inset:0;display:grid;place-items:center;
  font-size:10px;letter-spacing:.26em;text-transform:uppercase;
  color:rgba(231,201,122,.62);text-align:center;padding:20px;
}
.portrait.is-empty::before{
  content:"";position:absolute;left:50%;top:38%;width:54px;height:54px;margin-left:-27px;
  border:1px solid rgba(231,201,122,.35);border-radius:50%;
}
.portrait-ring{
  position:absolute;inset:7px;border-radius:999px 999px 4px 4px;
  border:1px solid rgba(231,201,122,.35);pointer-events:none;
}
.person-role{font-size:9.5px;letter-spacing:.32em;text-transform:uppercase;color:var(--gold-lt);opacity:.85}
.person-name{font-family:var(--f-display);font-weight:300;font-size:clamp(28px,7.4vw,42px);color:#FBF3E2;margin:8px 0 4px;line-height:1.15}
.person-ml{font-family:var(--f-ml);font-size:14px;color:rgba(231,201,122,.85);margin-bottom:14px}
.person-line{font-size:14px;color:rgba(243,233,214,.82);line-height:1.8}
.person-place{font-size:13px;color:rgba(243,233,214,.55);margin-top:6px}

.couple-knot{display:flex;align-items:center;gap:14px;color:var(--gold-lt);opacity:.7}
.couple-knot .ico{width:34px;height:34px;stroke-width:3}
.couple-knot .ico:last-of-type{transform:scaleX(-1)}
.couple-amp{font-family:var(--f-display);font-style:italic;font-size:30px}

/* ---------- family ---------- */
.family-grid{display:grid;gap:18px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.card--family{text-align:center;padding-block:clamp(32px,6vw,44px)}
.card--family .card-ico{margin-inline:auto;color:var(--brass)}
.family-tag{font-size:9.5px;letter-spacing:.3em;text-transform:uppercase;color:var(--brass);margin-bottom:18px}
.family-name{font-family:var(--f-display);font-weight:400;font-size:clamp(20px,5vw,26px);color:var(--ink);line-height:1.3}
.family-amp{font-family:var(--f-display);font-style:italic;font-size:20px;color:var(--gold);margin:4px 0}
.family-home{margin-top:16px;font-size:14px;color:var(--ink-soft);line-height:1.7}
.family-ml{font-family:var(--f-ml);font-size:13px;color:var(--brass);margin-top:6px}
.family-foot{
  display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
  margin-top:clamp(30px,5vw,44px);font-family:var(--f-display);font-style:italic;
  font-size:clamp(16px,4vw,19px);color:var(--brown);text-align:center;
}
.family-foot .ico{width:28px;height:28px;color:var(--gold);stroke-width:3.4}

/* ---------- temple card (ceremony) ---------- */
.temple-card{position:relative;max-width:560px;margin-inline:auto}
.temple-card__roof{
  display:block;height:26px;
  background:linear-gradient(180deg,var(--maroon),var(--maroon-dk));
  clip-path:polygon(0 100%,50% 0,100% 100%);
}
.temple-card__roof::after{content:""}
.temple-card__body{
  position:relative;text-align:center;padding:clamp(34px,6vw,52px) clamp(24px,5vw,44px);
  background:linear-gradient(180deg,#fff 0%,var(--ivory) 100%);
  border:1px solid rgba(193,150,47,.35);
  box-shadow:var(--shadow-l);
}
.temple-card__body::before{content:"";position:absolute;inset:8px;border:1px solid rgba(193,150,47,.2);pointer-events:none}
.temple-card__base{
  display:block;height:14px;
  background:linear-gradient(180deg,var(--brass),var(--gold-dk));
  clip-path:polygon(3% 0,97% 0,100% 100%,0 100%);
}
.temple-card__crest{width:44px;height:44px;color:var(--gold);stroke-width:2.9;margin:0 auto 18px}
.tc-eyebrow{font-size:9.5px;letter-spacing:.34em;text-transform:uppercase;color:var(--brass)}
.tc-day{font-family:var(--f-display);font-weight:300;font-size:clamp(36px,9vw,58px);color:var(--maroon);line-height:1.05;margin-top:6px}
.tc-date{font-family:var(--f-title);font-size:clamp(17px,4.4vw,21px);color:var(--ink);margin-top:4px}
.tc-ml{font-family:var(--f-ml);font-size:13.5px;color:var(--brass);margin-top:6px}
.tc-rule{height:1px;margin:26px auto;max-width:220px;background:linear-gradient(90deg,transparent,rgba(193,150,47,.65),transparent)}
.tc-list{display:grid;gap:16px;text-align:left;max-width:400px;margin-inline:auto}
.tc-row{display:grid;grid-template-columns:118px 1fr;gap:12px;align-items:start}
.tc-row dt{display:flex;align-items:center;gap:8px;font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--brass);padding-top:4px}
.tc-row dt .ico{width:16px;height:16px;color:var(--gold);stroke-width:4.4}
.tc-row dd{font-size:14.5px;color:var(--ink);line-height:1.65}
.tc-list + .btn{margin-top:30px}

/* ---------- buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  padding:13px 26px;border-radius:999px;
  font-size:11px;letter-spacing:.2em;text-transform:uppercase;
  transition:transform .35s var(--ease),box-shadow .35s var(--ease),background .35s var(--ease),color .35s var(--ease),border-color .35s var(--ease);
  -webkit-tap-highlight-color:transparent;
}
.btn .ico{width:15px;height:15px;stroke-width:4.4}
.btn--gold{background:linear-gradient(145deg,var(--gold-lt),var(--gold));color:#3A2A20;box-shadow:0 10px 26px -12px rgba(193,150,47,.85)}
.btn--gold:hover{transform:translateY(-2px);box-shadow:0 16px 34px -12px rgba(193,150,47,.95)}
.btn--ghost{border:1px solid rgba(193,150,47,.55);color:var(--brass)}
.btn--ghost:hover{background:rgba(193,150,47,.1);transform:translateY(-2px)}
.btn--outline-gold{border:1px solid rgba(231,201,122,.55);color:var(--gold-lt);margin-top:22px}
.btn--outline-gold:hover{background:rgba(231,201,122,.12);transform:translateY(-2px)}
.btn:active{transform:translateY(0) scale(.98)}

/* ---------- reception ---------- */
.lux-card{
  position:relative;display:grid;gap:clamp(24px,5vw,40px);
  grid-template-columns:1fr;align-items:center;
  max-width:920px;margin-inline:auto;
  padding:clamp(32px,6vw,56px);
  background:linear-gradient(150deg,rgba(255,246,225,.09),rgba(255,246,225,.03));
  border:1px solid rgba(231,201,122,.3);
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);
}
.lux-card::before,.lux-card::after{
  content:"";position:absolute;width:44px;height:44px;border:1px solid rgba(231,201,122,.7);pointer-events:none;
}
.lux-card::before{top:-1px;left:-1px;border-right:0;border-bottom:0}
.lux-card::after{bottom:-1px;right:-1px;border-left:0;border-top:0}
.lux-card__rule{height:1px;background:linear-gradient(90deg,transparent,rgba(231,201,122,.5),transparent)}
.lux-eyebrow{font-size:9.5px;letter-spacing:.3em;text-transform:uppercase;color:var(--gold-lt);opacity:.85}
.lux-day{font-family:var(--f-display);font-weight:300;font-size:clamp(38px,10vw,64px);line-height:1.02;color:#FBF3E2;margin-top:8px}
.lux-date{font-family:var(--f-title);font-size:clamp(17px,4.4vw,21px);color:rgba(243,233,214,.9);margin-top:4px}
.lux-time{margin-top:14px;font-size:12px;letter-spacing:.24em;color:var(--gold-lt)}
.lux-k{display:flex;align-items:center;gap:8px;font-size:9.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--brass)}
.lux-k .ico{width:15px;height:15px;color:var(--gold-lt);stroke-width:4.4}
.lux-v{font-family:var(--f-display);font-weight:400;font-size:clamp(22px,5.6vw,30px);color:#FBF3E2;margin-top:10px;line-height:1.25}
.lux-sub{font-size:13.5px;color:rgba(243,233,214,.62);margin-top:6px}
.lux-note{font-size:14px;color:rgba(243,233,214,.78);margin-top:16px;line-height:1.8}

/* ---------- venue ---------- */
.venue-grid{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.venue-card{
  overflow:hidden;border-radius:4px;background:#fff;
  border:1px solid rgba(193,150,47,.24);box-shadow:var(--shadow-s);
  transition:transform .55s var(--ease),box-shadow .55s var(--ease);
}
.venue-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-m)}
.venue-map{
  position:relative;height:150px;overflow:hidden;
  background:linear-gradient(160deg,#EDE3CE,#DFD0B2);
}
.venue-map__grid{
  position:absolute;inset:0;
  background-image:
    linear-gradient(rgba(122,92,67,.13) 1px,transparent 1px),
    linear-gradient(90deg,rgba(122,92,67,.13) 1px,transparent 1px);
  background-size:26px 26px;
}
.venue-map__road{position:absolute;background:rgba(255,255,255,.75);box-shadow:0 0 0 1px rgba(122,92,67,.12)}
.venue-map__road--a{left:-10%;right:-10%;top:58%;height:11px;transform:rotate(-7deg)}
.venue-map__road--b{top:-10%;bottom:-10%;left:32%;width:9px;transform:rotate(5deg)}
.venue-map__road--c{left:-10%;right:-10%;top:42%;height:11px;transform:rotate(6deg)}
.venue-map__road--d{top:-10%;bottom:-10%;left:64%;width:9px;transform:rotate(-4deg)}
.venue-map__pin{
  position:absolute;left:50%;top:44%;z-index:2;transform:translate(-50%,-50%);
  color:var(--maroon);filter:drop-shadow(0 6px 8px rgba(58,42,32,.35));
  animation:pinBob 3s var(--ease-soft) infinite;
}
.venue-map__pin .ico{width:34px;height:34px;stroke-width:3.2;fill:rgba(255,255,255,.5)}
@keyframes pinBob{0%,100%{transform:translate(-50%,-50%)}50%{transform:translate(-50%,-62%)}}
.venue-map::after{
  content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg,transparent 58%,rgba(255,255,255,.9) 100%);
}
.venue-body{padding:clamp(22px,4.5vw,30px)}
.venue-tag{font-size:9.5px;letter-spacing:.3em;text-transform:uppercase;color:var(--brass)}
.venue-name{font-family:var(--f-display);font-weight:400;font-size:clamp(21px,5.2vw,27px);color:var(--ink);margin:8px 0 12px;line-height:1.25}
.venue-addr{font-size:14px;color:var(--ink-soft);line-height:1.75}
.venue-when{display:flex;align-items:center;gap:8px;margin-top:14px;font-size:13px;color:var(--maroon)}
.venue-when .ico{width:15px;height:15px;color:var(--gold);stroke-width:4.4}
.venue-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}

.contact{
  margin-top:clamp(40px,6vw,58px);text-align:center;padding:clamp(28px,5vw,40px) var(--pad);
  border:1px solid rgba(193,150,47,.26);background:rgba(255,255,255,.5);
}
.contact-title{font-size:9.5px;letter-spacing:.3em;text-transform:uppercase;color:var(--brass)}
.contact-row{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:18px}
.chip{
  display:inline-flex;align-items:center;gap:9px;padding:11px 20px;border-radius:999px;
  border:1px solid rgba(193,150,47,.4);color:var(--ink);font-size:14px;
  transition:background .35s var(--ease),transform .35s var(--ease);
}
.chip .ico{width:15px;height:15px;color:var(--gold);stroke-width:4.4}
.chip:hover{background:rgba(193,150,47,.12);transform:translateY(-2px)}
.contact-sub{margin-top:18px;font-family:var(--f-display);font-style:italic;font-size:16px;color:var(--brown)}

/* ---------- gallery Â· cinematic photo wall ---------- */
#gallery{overflow:hidden}
.gallery-lede{
  max-width:36em;margin-inline:auto;color:var(--ink-soft);
  font-family:var(--f-display);font-style:italic;font-size:clamp(15px,2.4vw,18px);
  letter-spacing:.01em;border:0;background:none;padding:0;
}
.gallery-lede .sample{display:none}
.gallery-rays{
  position:absolute;inset:0;pointer-events:none;z-index:1;opacity:.55;
  background:
    radial-gradient(42% 28% at 18% 22%,rgba(231,201,122,.22),transparent 70%),
    radial-gradient(36% 24% at 82% 38%,rgba(193,150,47,.14),transparent 72%),
    radial-gradient(50% 30% at 50% 88%,rgba(255,248,230,.35),transparent 70%);
}

.photo-wall-stage{
  position:relative;
  width:100%;
  max-width:min(1180px,100%);
  margin-inline:auto;
}
.photo-wall__fx{
  position:absolute;inset:0;
  pointer-events:none;z-index:1;overflow:hidden;
}
.photo-wall{
  position:relative;
  columns:3;
  column-gap:clamp(18px,2.8vw,34px);
  padding:clamp(8px,2vw,20px) 0 clamp(20px,4vw,48px);
  z-index:2;
}

.photo-card{
  --rot:0deg;
  --nudge-x:0px;
  --nudge-y:0px;
  --scale:1;
  --parallax-y:0px;
  --enter-x:0px;
  --enter-y:28px;
  --enter-s:.96;
  --drift-delay:0s;
  position:relative;
  display:inline-block;
  width:100%;
  margin:0 0 clamp(22px,3.2vw,42px);
  break-inside:avoid;
  page-break-inside:avoid;
  vertical-align:top;
  opacity:0;
  transform:translate3d(0,var(--parallax-y),0);
  will-change:transform,opacity;
  z-index:2;
}
.photo-card--sm{width:86%;margin-inline:auto}
.photo-card--md{width:96%;margin-inline:auto}
.photo-card--lg{width:100%}

.photo-card[data-enter="left"]{--enter-x:-56px;--enter-y:18px;--enter-s:1}
.photo-card[data-enter="right"]{--enter-x:56px;--enter-y:18px;--enter-s:1}
.photo-card[data-enter="up"]{--enter-x:0px;--enter-y:40px;--enter-s:.93}

.photo-card__inner{
  transform:
    translate3d(var(--enter-x),var(--enter-y),0)
    scale(var(--enter-s));
  transition:transform 1.15s var(--ease),opacity 1.15s var(--ease);
  transform-origin:center center;
}
.photo-card.is-in{opacity:1}
.photo-card.is-in .photo-card__inner{
  transform:
    translate3d(var(--nudge-x),var(--nudge-y),0)
    rotate(var(--rot))
    scale(var(--scale));
  animation:photoDrift 8.5s ease-in-out infinite alternate;
  animation-delay:calc(1.2s + var(--drift-delay));
}

.photo-card__paper{
  position:relative;
  padding:clamp(8px,1.2vw,12px);
  border-radius:10px;
  background:
    linear-gradient(165deg,rgba(255,252,245,.98),rgba(246,239,226,.96) 55%,rgba(238,226,204,.94));
  border:1px solid rgba(231,201,122,.55);
  box-shadow:
    0 1px 0 rgba(255,255,255,.7) inset,
    0 10px 28px -16px rgba(58,42,32,.28),
    0 2px 8px rgba(58,42,32,.06);
  transition:
    transform .55s var(--ease),
    box-shadow .55s var(--ease),
    filter .55s var(--ease);
  transform:translateZ(0);
  cursor:default;
}
.photo-card__paper::before{
  content:"";
  position:absolute;inset:5px;
  border-radius:7px;
  border:1px solid rgba(193,150,47,.28);
  pointer-events:none;
  z-index:2;
}
.photo-card__paper::after{
  content:"";
  position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:3;
  background:linear-gradient(135deg,rgba(255,255,255,.28),transparent 42%,rgba(193,150,47,.06));
  mix-blend-mode:soft-light;
}

.photo-card__paper img{
  position:relative;z-index:1;
  width:100%;
  height:auto;
  max-width:100%;
  display:block;
  object-fit:contain;
  object-position:center;
  border-radius:4px;
  background:rgba(230,215,190,.35);
  /* never crop â€” preserve full photograph & natural aspect ratio */
}

.photo-card__paper img.failed{display:none}
.photo-card.is-empty .photo-card__paper{
  min-height:180px;
}
.photo-card.is-empty .photo-card__paper::before{
  content:attr(data-label);
  inset:12px;display:grid;place-items:center;text-align:center;padding:16px;
  font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:rgba(122,92,67,.72);
  border:1px dashed rgba(193,150,47,.55);border-radius:6px;background:transparent;
}

/* hover / focus â€” desktop lift */
@media (hover:hover) and (pointer:fine){
  .photo-card:hover{z-index:5}
  .photo-card.is-in:hover .photo-card__paper{
    transform:translateY(-10px) scale(1.025) rotate(.6deg);
    box-shadow:
      0 1px 0 rgba(255,255,255,.75) inset,
      0 28px 54px -22px rgba(58,42,32,.42),
      0 10px 22px rgba(193,150,47,.12);
    filter:saturate(1.04);
  }
  .photo-card.is-in:focus-within .photo-card__paper{
    outline:2px solid rgba(193,150,47,.55);
    outline-offset:4px;
  }
}

/* mobile / touch bounce + soft glow */
.photo-card.is-touched .photo-card__paper{
  animation:photoTouch .55s var(--ease);
  box-shadow:
    0 1px 0 rgba(255,255,255,.75) inset,
    0 18px 40px -18px rgba(58,42,32,.36),
    0 0 0 1px rgba(231,201,122,.45),
    0 0 28px rgba(231,201,122,.28);
}

@keyframes photoDrift{
  0%{
    transform:
      translate3d(var(--nudge-x),var(--nudge-y),0)
      rotate(var(--rot))
      scale(var(--scale));
  }
  50%{
    transform:
      translate3d(calc(var(--nudge-x) + 2px),calc(var(--nudge-y) - 5px),0)
      rotate(calc(var(--rot) + .35deg))
      scale(calc(var(--scale) * 1.008));
  }
  100%{
    transform:
      translate3d(calc(var(--nudge-x) - 1px),calc(var(--nudge-y) + 3px),0)
      rotate(calc(var(--rot) - .25deg))
      scale(var(--scale));
  }
}
@keyframes photoTouch{
  0%{transform:translateY(0) scale(1)}
  40%{transform:translateY(-6px) scale(1.03)}
  100%{transform:translateY(0) scale(1)}
}

/* decorative sparkles / petals / dots */
.photo-decor{
  position:absolute;pointer-events:none;z-index:1;
  opacity:.55;
}
.photo-decor--spark{
  width:7px;height:7px;
  background:radial-gradient(circle,rgba(231,201,122,.95) 0%,rgba(193,150,47,.2) 55%,transparent 70%);
  border-radius:50%;
  animation:photoSpark 4.8s ease-in-out infinite;
}
.photo-decor--spark::before,
.photo-decor--spark::after{
  content:"";position:absolute;left:50%;top:50%;
  width:1px;height:12px;background:linear-gradient(180deg,transparent,rgba(231,201,122,.75),transparent);
  transform:translate(-50%,-50%);
}
.photo-decor--petal{
  width:7px;height:7px;
  background:radial-gradient(circle,rgba(231,201,122,.95) 0%,rgba(193,150,47,.2) 55%,transparent 70%);
  border-radius:50%;
  animation:photoSpark 5.2s ease-in-out infinite;
}
.photo-decor--petal::before,
.photo-decor--petal::after{
  content:"";position:absolute;left:50%;top:50%;
  width:1px;height:12px;background:linear-gradient(180deg,transparent,rgba(231,201,122,.75),transparent);
  transform:translate(-50%,-50%);
}
.photo-decor--petal::after{transform:translate(-50%,-50%) rotate(90deg)}
.photo-decor--dot{
  width:3px;height:3px;border-radius:50%;
  background:rgba(193,150,47,.55);
  box-shadow:0 0 8px rgba(231,201,122,.45);
  animation:photoSpark 6s ease-in-out infinite;
}
.photo-decor--ray{
  width:120px;height:120px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,248,230,.45),transparent 68%);
  filter:blur(2px);
  animation:photoSpark 9s ease-in-out infinite;
}
.photo-decor.a{top:8%;left:6%;animation-delay:0s}
.photo-decor.b{top:42%;right:4%;animation-delay:1.2s}
.photo-decor.c{bottom:18%;left:48%;animation-delay:2.4s}
.photo-decor.d{top:28%;left:38%;opacity:.35}
.photo-decor.e{bottom:32%;right:18%;opacity:.3;transform:rotate(-18deg) scale(.85)}
.photo-decor.f{top:16%;right:28%}
.photo-decor.g{bottom:12%;left:12%}
.photo-decor.h{top:55%;left:8%;opacity:.4}

@keyframes photoSpark{
  0%,100%{opacity:.25;transform:scale(.85)}
  50%{opacity:.7;transform:scale(1.15)}
}
@keyframes photoPetal{
  0%{transform:translateY(0) rotate(18deg)}
  100%{transform:translateY(10px) rotate(42deg)}
}

/* ---------- pending note ---------- */
.note-box{
  max-width:760px;margin-inline:auto;padding:clamp(22px,4.5vw,32px);
  border:1px dashed rgba(160,40,60,.45);border-radius:6px;background:rgba(160,40,60,.04);
}
.note-head{font-size:13.5px;color:#8a2036;font-weight:400;letter-spacing:.02em}
.note-del{color:var(--ink-soft);font-size:12px}
.note-list{margin-top:14px;display:grid;gap:8px}
.note-list li{position:relative;padding-left:18px;font-size:14px;color:var(--ink-soft);line-height:1.7}
.note-list li::before{content:"";position:absolute;left:2px;top:.7em;width:5px;height:5px;border-radius:50%;background:rgba(160,40,60,.6)}
.note-ok{margin-top:16px;font-size:13.5px;color:var(--leaf-dk);line-height:1.7}

/* ============================================================
   10 Â· THANK YOU FINALE
   ============================================================ */
.finale-glow{
  position:absolute;left:50%;top:46%;width:min(96%,860px);aspect-ratio:2/1;
  transform:translate(-50%,-50%);pointer-events:none;opacity:0;
  background:radial-gradient(closest-side,rgba(255,206,130,.34),transparent 72%);
  transition:opacity 1.8s var(--ease);
}
body.finale-glow-on .finale-glow{opacity:1}

.finale-stage{
  position:relative;width:100%;
  height:clamp(150px,30vh,250px);
  display:grid;place-items:center;
}
.finale-fallback{
  font-family:var(--f-display);font-weight:300;
  font-size:clamp(34px,11vw,84px);letter-spacing:.16em;
  color:rgba(255,232,180,.92);
  text-shadow:0 0 40px rgba(255,196,110,.4);
  transition:opacity 1.2s var(--ease);
}
body.finale-particles .finale-fallback{opacity:0}

.finale-sub{
  margin-top:8px;font-family:var(--f-display);font-style:italic;
  font-size:clamp(17px,4.4vw,24px);color:rgba(243,233,214,.72);
}
.finale-ml{margin-top:10px;font-family:var(--f-ml);font-size:clamp(13px,3.4vw,15px);color:rgba(231,201,122,.72);letter-spacing:.04em}

/* ============================================================
   10b Â· AUDIO DISC CONTROL
   ============================================================ */
.audio-disc{
  position:fixed;
  z-index:110;
  left:max(16px,env(safe-area-inset-left));
  bottom:max(18px,env(safe-area-inset-bottom));
  width:64px;height:64px;
  padding:0;border-radius:50%;
  isolation:isolate;
  -webkit-tap-highlight-color:transparent;
  opacity:0;visibility:hidden;pointer-events:none;
  transform:translate3d(0,12px,0) scale(.88);
  transition:opacity .55s var(--ease),visibility 0s linear .55s,transform .55s var(--ease);
}
.audio-disc.is-visible{
  opacity:1;visibility:visible;pointer-events:auto;
  transform:none;
  transition:opacity .55s var(--ease),visibility 0s,transform .55s var(--ease);
}
.audio-disc__glow{
  position:absolute;inset:-14px;z-index:0;border-radius:50%;
  background:radial-gradient(closest-side,rgba(255,196,110,.38),transparent 72%);
  opacity:.55;pointer-events:none;
  transition:opacity .4s var(--ease);
}
.audio-disc.is-playing .audio-disc__glow{
  opacity:1;animation:pulseGlow 3.2s var(--ease-soft) infinite;
}
.audio-disc__ring{
  position:absolute;inset:-5px;z-index:1;border-radius:50%;
  border:1px solid rgba(231,201,122,.45);
  pointer-events:none;
}
.audio-disc.is-playing .audio-disc__ring{
  animation:ringOut 3.2s var(--ease-soft) infinite;
}
.audio-disc__platter{
  position:absolute;inset:0;z-index:2;border-radius:50%;
  background:
    radial-gradient(circle at 50% 50%,#2a1c10 0 18%,transparent 18.5%),
    repeating-radial-gradient(circle at 50% 50%,
      #1a120c 0 1.5px,
      #24180f 1.5px 3px);
  border:2px solid rgba(231,201,122,.72);
  box-shadow:
    inset 0 0 0 1px rgba(255,232,180,.18),
    0 10px 28px -10px rgba(0,0,0,.75),
    0 0 0 1px rgba(193,150,47,.2);
  overflow:hidden;
}
.audio-disc__grooves{
  position:absolute;inset:8%;border-radius:50%;
  background:
    repeating-radial-gradient(circle at 50% 50%,
      transparent 0 2px,
      rgba(255,220,150,.06) 2px 3px);
  -webkit-mask-image:radial-gradient(circle,transparent 28%,#000 30%,#000 92%,transparent 94%);
  mask-image:radial-gradient(circle,transparent 28%,#000 30%,#000 92%,transparent 94%);
  pointer-events:none;
}
.audio-disc__hub{
  position:absolute;inset:28%;z-index:2;border-radius:50%;
  display:grid;place-items:center;
  background:
    radial-gradient(circle at 35% 30%,rgba(255,236,190,.35),transparent 55%),
    linear-gradient(145deg,#C1962F,#8E6C1E 55%,#6B5316);
  border:1px solid rgba(255,232,180,.45);
  box-shadow:inset 0 1px 0 rgba(255,240,205,.35),0 2px 8px rgba(0,0,0,.35);
}
.audio-disc__mono{
  font-family:var(--f-display);font-weight:500;font-style:italic;
  font-size:11px;letter-spacing:.04em;line-height:1;
  color:#FFF6E3;
  text-shadow:0 1px 2px rgba(0,0,0,.35);
  opacity:.92;
}
.audio-disc.is-playing .audio-disc__platter{
  animation:discSpin 4.8s linear infinite;
}
@keyframes discSpin{to{transform:rotate(360deg)}}

.audio-disc__icon{
  position:absolute;inset:0;z-index:4;
  display:grid;place-items:center;
  border-radius:50%;
  background:radial-gradient(circle,rgba(11,7,3,.18) 0%,rgba(11,7,3,.42) 70%,rgba(11,7,3,.55) 100%);
  color:#FFF3DC;
  transition:background .35s var(--ease),opacity .35s var(--ease);
}
.audio-disc.is-playing .audio-disc__icon{
  background:radial-gradient(circle,rgba(11,7,3,.08) 0%,rgba(11,7,3,.28) 100%);
  opacity:.88;
}
.audio-disc__icon svg{width:18px;height:18px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.4))}
.audio-disc__pause{display:none}
.audio-disc.is-playing .audio-disc__play{display:none}
.audio-disc.is-playing .audio-disc__pause{display:block}

.audio-disc:hover{transform:translateY(-2px)}
.audio-disc:hover .audio-disc__platter{
  border-color:rgba(231,201,122,.95);
  box-shadow:
    inset 0 0 0 1px rgba(255,232,180,.28),
    0 14px 34px -12px rgba(255,180,90,.35),
    0 0 0 1px rgba(193,150,47,.35);
}
.audio-disc:active{transform:scale(.96)}
.audio-disc:focus-visible{outline:2px solid var(--gold-lt);outline-offset:6px}

/* ============================================================
   11 Â· FOOTER
   ============================================================ */
.footer{color:rgba(243,233,214,.8)}
.footer-crest{width:42px;height:42px;color:var(--gold-lt);stroke-width:2.9;margin:0 auto 20px;opacity:.9;animation:flicker 4.2s ease-in-out infinite}
.footer-blessing{font-family:var(--f-ml);font-size:clamp(16px,4.2vw,21px);color:var(--gold-lt)}
.footer-bless-en{max-width:520px;margin:14px auto 0;font-family:var(--f-display);font-style:italic;font-size:clamp(15px,3.8vw,18px);color:rgba(243,233,214,.65);line-height:1.8}
.footer-names{margin-top:28px;font-family:var(--f-display);font-weight:300;font-size:clamp(26px,7vw,42px);color:#FBF3E2}
.footer-names span{font-style:italic;color:var(--gold-lt);font-size:.6em;margin:0 6px}
.footer-date{margin-top:8px;font-size:10.5px;letter-spacing:.28em;text-transform:uppercase;color:rgba(243,233,214,.45)}
.footer-fine{margin-top:30px;font-family:var(--f-ml);font-size:15px;color:var(--gold);opacity:.75}

/* ============================================================
   12 Â· RESPONSIVE
   ============================================================ */

@media (max-width:900px){
  .photo-wall{columns:2;column-gap:clamp(14px,3vw,22px)}
  .photo-card--sm{width:90%}
  .photo-card--md{width:98%}
}
@media (max-width:720px){
  .tl{padding-left:0}
  .tl::before{left:19px}
  .tl-item{padding-left:56px}
  .tl-node{width:39px;height:39px;box-shadow:0 0 0 5px var(--ivory)}
  .tl-node .ico{width:19px;height:19px}
  .tc-row{grid-template-columns:1fr;gap:2px}
  .tc-row dd{padding-left:24px}
  .audio-disc{width:58px;height:58px}
  .audio-disc__mono{font-size:10px}
  .audio-disc__icon svg{width:16px;height:16px}
  .photo-card{margin-bottom:clamp(18px,4vw,28px)}
  .photo-card[data-enter="left"],
  .photo-card[data-enter="right"]{--enter-x:0px;--enter-y:32px;--enter-s:.96}
}
@media (max-width:520px){
  .photo-wall{columns:1}
  .photo-wall-stage{max-width:420px}
  .photo-card--sm,
  .photo-card--md,
  .photo-card--lg{width:100%}
  .photo-card{--nudge-y:0px;--scale:1}
  .photo-decor{opacity:.35}
}
@media (max-width:420px){
  .countdown{gap:6px}
  .cd-unit{min-width:56px}
}
@media (min-width:900px){
  .couple-grid{grid-template-columns:1fr auto 1fr;align-items:center}
  .lux-card{grid-template-columns:1fr auto 1fr}
  .lux-card__rule{width:1px;height:auto;align-self:stretch;background:linear-gradient(180deg,transparent,rgba(231,201,122,.5),transparent)}
  .photo-wall{columns:3}
}
@media (min-width:1200px){
  .photo-wall{column-gap:38px}
}

/* ---------- 13 Â· MOTION / A11Y ---------- */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important;
  }
  .reveal{opacity:1;transform:none}
  .photo-card,
  .photo-card.is-in{opacity:1;transform:none}
  .photo-card__inner,
  .photo-card.is-in .photo-card__inner{
    transform:translate3d(var(--nudge-x,0),var(--nudge-y,0),0) rotate(var(--rot,0deg)) scale(var(--scale,1));
    animation:none!important;
  }
  .photo-card.is-touched .photo-card__paper,
  .photo-decor{animation:none!important}
  #particles{display:none}
  .cover-img{animation:none;transform:none}
  .audio-disc.is-playing .audio-disc__platter{animation:none}
  .audio-disc.is-playing .audio-disc__glow,
  .audio-disc.is-playing .audio-disc__ring{animation:none}
  .scene--hero,.scene--hero.loaded{opacity:1;visibility:visible}
  .scene--hero > .section-bg,
  .scene--hero > picture.section-bg,
  .scene--hero > picture.section-bg > img{opacity:1}
  .scene--hero > .section-content,
  .scene--hero.loaded.text-ready > .section-content,
  .scene--hero > .scroll-indicator,
  .scene--hero.loaded.text-ready > .scroll-indicator{
    opacity:1;transform:none;
  }
}
@media (prefers-contrast:more){
  .sec-note,.fact-s,.tl-text,.card p{color:#4A362A}
}


/* ============================================================
   Scene architecture
   Every block is one component:

     .scene
       .section-bg        â† real <img> filling the section
       .section-overlay
       .section-content   â† lives in the same box as the image

   The image defines the visual stage. Content uses % of that
   stage (CSS grid tracks), so type moves with the artwork â€”
   never with fixed viewport pixels.
   ============================================================ */

:root{
  --safe-x: clamp(1.1rem, 5.5vw, 2.75rem);
  --safe-y: clamp(2.4rem, 7vw, 5.5rem);
  --content-max: 42rem;
  --content-wide: 68rem;

  /* Hero artwork safe zone â€” % of the FULL SCREEN section
     (tuned to the gold dividers / clear centre of the mandapam) */
  --hero-safe-top: 26%;
  --hero-safe-bottom: 20%;
  --hero-safe-side: 11%;
}

/* ---------- Base scene ---------- */
.scene{
  position:relative;
  isolation:isolate;
  display:grid;
  grid-template-columns:minmax(0,1fr);
  grid-template-rows:minmax(0,1fr);
  width:100%;
  overflow:hidden;
  color:var(--ink);
}

.scene > .section-bg,
.scene > picture.section-bg,
.scene > .section-overlay,
.scene > .section-content,
.scene > .scroll-indicator{
  min-width:0;
}

.section-bg,
picture.section-bg{
  display:block;
  width:100%;
  height:100%;
  pointer-events:none;
  user-select:none;
}
picture.section-bg img,
img.section-bg{
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center center;
  display:block;
}

.section-overlay{
  z-index:1;
  pointer-events:none;
}

.section-content{
  position:relative;
  z-index:2;
  display:flex;
  flex-direction:column;
  width:100%;
  max-width:var(--content-wide);
  margin-inline:auto;
  padding:
    var(--safe-y)
    var(--safe-x)
    calc(var(--safe-y) + env(safe-area-inset-bottom, 0px));
  box-sizing:border-box;
}

.section-content > .sec-head,
.section-content > .lede,
.section-content > .facts,
.section-content > .countdown,
.section-content > .story-grid,
.section-content > .tl,
.section-content > .couple-grid,
.section-content > .family-grid,
.section-content > .family-foot,
.section-content > .temple-card,
.section-content > .lux-card,
.section-content > .venue-grid,
.section-content > .contact,
.section-content > .masonry,
.section-content > .photo-wall,
.section-content > .photo-wall-stage,
.section-content > .note-box,
.section-content > .finale-stage,
.section-content > .finale-sub,
.section-content > .finale-ml{
  width:100%;
  max-width:var(--content-max);
  margin-inline:auto;
}
.section-content > .facts,
.section-content > .story-grid,
.section-content > .couple-grid,
.section-content > .family-grid,
.section-content > .venue-grid,
.section-content > .masonry,
.section-content > .photo-wall,
.section-content > .photo-wall-stage,
.section-content > .lux-card{
  max-width:var(--content-wide);
}
.section-content > .photo-wall,
.section-content > .photo-wall-stage{
  max-width:min(1180px,100%);
}

/* Tone plates */
.scene--ivory{background:#F7F0E4;color:var(--ink)}
.scene--beige{background:#EFE3CF;color:var(--ink)}
.scene--dark{background:#150E07;color:#F3E9D6}
.scene--finale{background:#0F0A05;color:#F3E9D6}
.scene--note{background:#F3E9D8;color:var(--ink)}

.scene--ivory .section-overlay{
  background:
    radial-gradient(120% 70% at 50% 0%,rgba(255,255,255,.45),transparent 55%),
    linear-gradient(180deg,rgba(251,247,239,.2),rgba(251,247,239,.55));
}
.scene--beige .section-overlay{
  background:
    radial-gradient(90% 60% at 50% 0%,rgba(255,246,225,.35),transparent 60%),
    linear-gradient(180deg,rgba(239,227,207,.15),rgba(239,227,207,.5));
}
.scene--dark .section-overlay{
  background:
    radial-gradient(90% 55% at 50% 0%,rgba(193,150,47,.16),transparent 62%),
    linear-gradient(180deg,rgba(20,14,8,.2),rgba(20,14,8,.55));
}
.scene--finale .section-overlay{
  background:
    radial-gradient(80% 55% at 50% 45%,rgba(193,150,47,.14),transparent 66%),
    linear-gradient(180deg,rgba(15,10,5,.1),rgba(15,10,5,.65));
}

/* ============================================================
   FULL-SCREEN ART  Â·  image fills the viewport; content fits IT
   ============================================================
   One grid. The <img> covers the whole section (object-fit:cover).
   Content occupies the centre tracks â€” those % are of the same
   box the image fills, so typography tracks the artwork as the
   screen changes size/shape.
*/
.scene--screen{
  min-height:100svh;
  min-height:100vh;
  height:100svh;
  height:100vh;
  width:100%;
  background:#EBD9B6;
  display:grid;
  grid-template-columns:
    var(--hero-safe-side)
    minmax(0,1fr)
    var(--hero-safe-side);
  grid-template-rows:
    var(--hero-safe-top)
    minmax(0,1fr)
    var(--hero-safe-bottom);
  padding:0;
}

/* Image + overlay paint the entire screen */
.scene--screen > .section-bg,
.scene--screen > picture.section-bg,
.scene--screen > .section-overlay,
.scene--screen > .rays,
.scene--screen > .temple-glow{
  grid-column:1 / -1;
  grid-row:1 / -1;
  width:100%;
  height:100%;
  z-index:0;
}
.scene--screen > .section-overlay{z-index:1}
.scene--screen > .rays,
.scene--screen > .temple-glow{z-index:1;pointer-events:none}

.scene--screen > picture.section-bg{
  display:block; /* override display:contents so it can occupy the grid cell */
}
.scene--screen > picture.section-bg > img,
.scene--screen > img.section-bg{
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center center;
}

/* Content sits only in the clear centre of the artwork */
.scene--screen > .section-content{
  grid-column:2;
  grid-row:2;
  z-index:2;
  max-width:none;
  width:100%;
  height:100%;
  margin:0;
  padding:clamp(0.25rem, 2%, 0.75rem);
  display:flex;
  flex-direction:column;
  justify-content:center;
  align-items:center;
  text-align:center;
  box-sizing:border-box;
}

/* Scroll cue in the bottom safe band of the SAME image */
.scene--screen > .scroll-indicator{
  grid-column:1 / -1;
  grid-row:3;
  z-index:3;
  justify-self:center;
  align-self:end;
  margin-bottom:clamp(10px, 18%, 36px);
  opacity:0;
  transition:opacity .6s ease .3s;
}

.scene--hero .section-overlay{
  background:
    radial-gradient(70% 40% at 50% 18%,rgba(255,240,210,.12),transparent 70%),
    linear-gradient(180deg,rgba(255,246,225,.05) 0%,transparent 20%,transparent 72%,rgba(250,240,220,.28) 100%);
}

/* Wider screens crop more of the portrait sides â€” keep centre safe, nudge sides in */
@media (min-aspect-ratio: 3/4){
  .scene--screen{
    --hero-safe-side: 18%;
    --hero-safe-top: 24%;
    --hero-safe-bottom: 18%;
  }
}
@media (min-aspect-ratio: 1/1){
  .scene--screen{
    --hero-safe-side: 26%;
    --hero-safe-top: 22%;
    --hero-safe-bottom: 16%;
  }
  .scene--screen > picture.section-bg > img,
  .scene--screen > img.section-bg{
    object-position:center 42%;
  }
}
@media (min-aspect-ratio: 16/10){
  .scene--screen{
    --hero-safe-side: 32%;
    --hero-safe-top: 20%;
    --hero-safe-bottom: 14%;
  }
}
/* Tall phones â€” more headroom for garlands / lamps */
@media (max-aspect-ratio: 9/19){
  .scene--screen{
    --hero-safe-top: 30%;
    --hero-safe-bottom: 22%;
    --hero-safe-side: 10%;
  }
}
@media (max-height: 480px) and (orientation:landscape){
  .scene--screen{
    --hero-safe-top: 12%;
    --hero-safe-bottom: 10%;
    --hero-safe-side: 22%;
  }
}

/* ============================================================
   FLOW SCENES  Â·  content height drives the section; bg covers it
   ============================================================ */
.scene--flow{
  display:block;
  min-height:auto;
}
.scene--flow > .section-bg{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  z-index:0;
}
.scene--flow > .section-overlay{
  position:absolute;
  inset:0;
  z-index:1;
}
.scene--flow > .section-content{
  position:relative;
  z-index:2;
}

.section-content--center{
  text-align:center;
  justify-content:center;
  align-items:center;
  min-height:min(100svh, 40rem);
}

/* ============================================================
   Hero load gate
   ============================================================ */
.scene--hero{
  opacity:0;visibility:hidden;
  transition:opacity .55s ease,visibility 0s linear .55s;
}
.scene--hero.loaded{
  opacity:1;visibility:visible;
  transition:opacity .55s ease,visibility 0s;
}
.scene--hero > .section-bg,
.scene--hero > picture.section-bg,
.scene--hero > picture.section-bg > img{
  opacity:0;
  transition:opacity .55s ease;
}
.scene--hero.loaded > .section-bg,
.scene--hero.loaded > picture.section-bg,
.scene--hero.loaded > picture.section-bg > img{
  opacity:1;
}
.scene--hero > .section-content{
  opacity:0;
  transform:translate3d(0,14px,0);
  transition:opacity .7s var(--ease) .15s, transform .7s var(--ease) .15s;
}
.scene--hero.loaded.text-ready > .section-content{
  opacity:1;transform:none;
}
.scene--hero.loaded.text-ready > .scroll-indicator{opacity:1}


/* ==========================================================================
   TRADITIONAL KERALA HINDU WEDDING INVITATION
   Abhilash P & Anjitha Sathyakumar
   Palette: Royal Maroon (#4A0811), Auspicious Gold (#D4AF37), Kasavu Ivory (#FDFBF7)
   ========================================================================== */

:root {
  --gold-100: #FBF4DC;
  --gold-200: #F4E4A6;
  --gold-300: #E7CF76;
  --gold-400: #D4AF37;
  --gold-500: #B88E18;
  --gold-600: #8C6A0D;
  --gold-glow: rgba(212, 175, 55, 0.45);
  
  --maroon-deep: #2A0409;
  --maroon-rich: #480911;
  --maroon-mid: #68101C;
  --maroon-light: #8E1C2B;
  
  --ivory-base: #FDFBF7;
  --ivory-warm: #F8F3E6;
  --ivory-parchment: #F1E7D0;
  
  --text-dark: #2B1518;
  --text-muted: #6B4E53;
  --text-gold: #D4AF37;
  --text-light: #FDFBF7;
  
  --font-serif: 'Cinzel', 'Cormorant Garamond', serif;
  --font-body: 'Marcellus', serif;
  --font-sans: 'Jost', sans-serif;
  --font-ml: 'Noto Serif Malayalam', serif;
  
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
}

*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  scroll-behavior: smooth;
  font-size: 16px;
  background-color: var(--maroon-deep);
  color: var(--text-dark);
}

body {
  font-family: var(--font-body);
  line-height: 1.65;
  background-color: var(--maroon-deep);
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
}

body.is-locked {
  overflow: hidden;
  height: 100vh;
}

/* ==========================================================================
   ORNAMENTAL ICONS & SPRITE
   ========================================================================== */
.ico {
  display: inline-block;
  width: 1.25em;
  height: 1.25em;
  vertical-align: -0.2em;
  fill: currentColor;
  stroke: currentColor;
  stroke-width: 0;
}

.sprite {
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
  pointer-events: none;
}

/* ==========================================================================
   STAGE 1 Â· COVER PAGE
   ========================================================================== */
#coverPage {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 24px 20px;
  background: 
    radial-gradient(ellipse at center, rgba(110, 16, 28, 0.88) 0%, rgba(35, 4, 8, 0.98) 100%),
    url('../c9ae8523-80f6-45c5-9aa6-4cd50ccc29ff.png') center/cover no-repeat;
  transition: opacity 0.8s var(--ease), visibility 0.8s var(--ease);
}

#coverPage.is-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.cover-canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 1;
}

.cover-border-frame {
  position: absolute;
  inset: 14px;
  border: 1px solid rgba(212, 175, 55, 0.35);
  border-radius: 12px;
  pointer-events: none;
  z-index: 2;
}

.cover-border-inner {
  position: absolute;
  inset: 6px;
  border: 1px dashed rgba(212, 175, 55, 0.25);
  border-radius: 8px;
}

.cover-corner {
  position: absolute;
  width: 24px;
  height: 24px;
  border-color: var(--gold-400);
  border-style: solid;
}
.cover-corner.tl { top: -2px; left: -2px; border-width: 2px 0 0 2px; }
.cover-corner.tr { top: -2px; right: -2px; border-width: 2px 2px 0 0; }
.cover-corner.bl { bottom: -2px; left: -2px; border-width: 0 0 2px 2px; }
.cover-corner.br { bottom: -2px; right: -2px; border-width: 0 2px 2px 0; }

.cover-content {
  position: relative;
  z-index: 3;
  max-width: 480px;
  width: 100%;
  color: var(--text-light);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.cover-om {
  font-family: var(--font-ml);
  font-size: clamp(2rem, 6vw, 2.6rem);
  color: var(--gold-300);
  text-shadow: 0 0 22px var(--gold-glow);
  margin-bottom: 6px;
}

.cover-ganesha-text {
  font-family: var(--font-ml);
  font-size: 0.95rem;
  letter-spacing: 0.08em;
  color: var(--gold-200);
  margin-bottom: 16px;
  text-shadow: 0 2px 8px rgba(0,0,0,0.6);
}

.cover-lamp {
  width: 52px;
  height: 52px;
  color: var(--gold-400);
  filter: drop-shadow(0 0 14px var(--gold-glow));
  margin-bottom: 16px;
  animation: lampPulse 3s ease-in-out infinite alternate;
}

@keyframes lampPulse {
  0% { transform: scale(0.96); filter: drop-shadow(0 0 10px rgba(212,175,55,0.4)); }
  100% { transform: scale(1.04); filter: drop-shadow(0 0 24px rgba(212,175,55,0.85)); }
}

.cover-bless-ml {
  font-family: var(--font-ml);
  font-size: clamp(0.9rem, 2.8vw, 1.05rem);
  color: #F8E6B8;
  margin-bottom: 4px;
}

.cover-bless-en {
  font-family: var(--font-sans);
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.22em;
  color: rgba(255, 255, 255, 0.75);
  margin-bottom: 22px;
}

.cover-divider {
  display: flex;
  align-items: center;
  width: 100%;
  max-width: 280px;
  margin-bottom: 20px;
  gap: 12px;
}

.cover-divider-line {
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--gold-400), transparent);
}

.cover-names {
  font-family: var(--font-serif);
  font-size: clamp(2.2rem, 8vw, 3.4rem);
  font-weight: 700;
  letter-spacing: 0.04em;
  line-height: 1.15;
  color: #FFF3D6;
  text-shadow: 0 4px 18px rgba(0, 0, 0, 0.8), 0 0 28px rgba(212, 175, 55, 0.5);
  margin-bottom: 12px;
}

.cover-names .amp {
  display: block;
  font-family: var(--font-body);
  font-size: 0.55em;
  font-weight: 400;
  color: var(--gold-300);
  margin: 2px 0;
}

.cover-date-badge {
  display: inline-block;
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 500;
  letter-spacing: 0.28em;
  color: var(--gold-200);
  padding: 6px 18px;
  border-top: 1px solid rgba(212, 175, 55, 0.4);
  border-bottom: 1px solid rgba(212, 175, 55, 0.4);
  margin-bottom: 36px;
}

/* Open Invitation Button */
.btn-open {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
  padding: 18px clamp(32px,7vw,52px);
  background: linear-gradient(170deg, rgba(30,22,14,.92) 0%, rgba(16,11,6,.96) 100%);
  border: 1.5px solid rgba(212,175,55,.70);
  border-radius: 999px;
  color: #FFF8E8;
  font-family: var(--font-sans);
  text-decoration: none;
  cursor: pointer;
  box-shadow: inset 0 1px 0 rgba(255,232,180,.18),
              0 16px 48px -18px rgba(0,0,0,.95),
              0 0 0 1px rgba(212,175,55,.10);
  transition: all 0.35s var(--ease);
  overflow: hidden;
}

.btn-open:hover, .btn-open:focus-visible {
  transform: translateY(-3px);
  border-color: rgba(212,175,55,1);
  box-shadow: inset 0 1px 0 rgba(255,232,180,.32),
              0 20px 52px -16px rgba(0,0,0,.9),
              0 0 32px -4px rgba(212,175,55,.40);
}

.btn-open__icon {
  width: 28px;
  height: 28px;
  color: rgba(231,201,122,.92);
  filter: drop-shadow(0 0 6px rgba(255,200,110,.55));
  flex-shrink: 0;
}

.btn-open__text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 3px;
  text-align: left;
}

.btn-open__en {
  font-size: clamp(13px,3.2vw,15px);
  font-weight: 600;
  letter-spacing: .30em;
  text-transform: uppercase;
  color: #FFF8E8;
}

.btn-open__ml {
  font-family: var(--font-ml);
  font-size: clamp(10px,2.5vw,11.5px);
  color: rgba(212,175,55,.80);
  letter-spacing: .02em;
}

.cover-tap-hint {
  font-family: var(--font-sans);
  font-size: 0.7rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.5);
  margin-top: 18px;
}

/* ==========================================================================
   STAGE 2 Â· INTRO VIDEO STAGE
   ========================================================================== */
#videoStage {
  position: fixed;
  inset: 0;
  z-index: 900;
  background-color: #000;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.6s var(--ease), visibility 0.6s var(--ease);
}

#videoStage.is-active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

#videoStage.is-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.video-container {
  position: relative;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

#introVideo {
  width: 100%;
  height: 100%;
  max-width: 100vw;
  max-height: 100vh;
  object-fit: contain;
  background-color: #000;
}

.btn-skip {
  position: absolute;
  bottom: 28px;
  right: 24px;
  z-index: 10;
  background: rgba(42, 4, 9, 0.75);
  backdrop-filter: blur(8px);
  border: 1px solid var(--gold-400);
  color: #FFF3D6;
  padding: 10px 20px;
  border-radius: 999px;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  cursor: pointer;
  transition: all 0.3s var(--ease);
  box-shadow: 0 4px 16px rgba(0,0,0,0.5);
}

.btn-skip:hover {
  background: var(--maroon-mid);
  transform: scale(1.04);
}

/* ==========================================================================
   STAGE 3 Â· MAIN TRADITIONAL INVITATION DETAILS
   ========================================================================== */
#mainDetails {
  position: relative;
  width: 100%;
  min-height: 100vh;
  background-color: var(--maroon-deep);
  color: var(--text-dark);
  opacity: 0;
  transition: opacity 1s var(--ease);
}

#mainDetails.is-revealed {
  opacity: 1;
}

/* Main Container Card: Traditional Parchment with Kasavu border */
.trad-container {
  max-width: 900px;
  margin: 0 auto;
  background: var(--ivory-base);
  box-shadow: 0 0 50px rgba(0, 0, 0, 0.75);
  position: relative;
}

/* Traditional Gold Kasavu Zari Border */
.kasavu-top, .kasavu-bottom {
  height: 16px;
  width: 100%;
  background: repeating-linear-gradient(
    90deg,
    var(--gold-500) 0px,
    var(--gold-300) 6px,
    var(--gold-500) 12px,
    #5A0A14 12px,
    #5A0A14 15px
  );
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
}

.section-wrapper {
  padding: 60px 24px;
  position: relative;
  text-align: center;
}

@media (min-width: 768px) {
  .section-wrapper {
    padding: 80px 48px;
  }
}

/* Section Dividers */
.trad-divider {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
  margin: 24px auto;
  max-width: 320px;
}

.trad-divider-line {
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--gold-400), transparent);
}

.trad-divider .ico {
  width: 22px;
  height: 22px;
  color: var(--gold-500);
}

/* --------------------------------------------------------------------------
   HEADER / HERO
   -------------------------------------------------------------------------- */
.trad-header {
  background: 
    radial-gradient(ellipse at center top, rgba(120, 18, 30, 0.08) 0%, transparent 70%),
    linear-gradient(180deg, var(--ivory-warm) 0%, var(--ivory-base) 100%);
  border-bottom: 1px solid var(--ivory-parchment);
}

.ganesha-crest {
  margin-bottom: 20px;
}

.ganesha-crest .ico {
  width: 68px;
  height: 68px;
  color: var(--maroon-mid);
  filter: drop-shadow(0 2px 6px rgba(212, 175, 55, 0.4));
}

.ganesha-sloka-ml {
  font-family: var(--font-ml);
  font-size: clamp(1rem, 3.2vw, 1.25rem);
  font-weight: 600;
  color: var(--maroon-mid);
  margin-bottom: 8px;
}

.ganesha-sloka-sub {
  font-family: var(--font-ml);
  font-size: 0.9rem;
  color: var(--text-muted);
  max-width: 620px;
  margin: 0 auto 28px;
  line-height: 1.7;
}

.invitation-kicker {
  font-family: var(--font-sans);
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.3em;
  color: var(--gold-500);
  font-weight: 600;
  margin-bottom: 12px;
}

.trad-main-title {
  font-family: var(--font-serif);
  font-size: clamp(2.4rem, 7vw, 3.6rem);
  font-weight: 700;
  color: var(--maroon-deep);
  line-height: 1.15;
  margin-bottom: 12px;
}

.trad-main-title .amp {
  font-family: var(--font-body);
  font-size: 0.65em;
  font-weight: 400;
  color: var(--gold-500);
}

.trad-event-date {
  font-family: var(--font-serif);
  font-size: clamp(1.1rem, 3.5vw, 1.4rem);
  color: var(--maroon-rich);
  font-weight: 600;
  margin-bottom: 6px;
}

.trad-event-date-ml {
  font-family: var(--font-ml);
  font-size: 0.95rem;
  color: var(--text-muted);
}

/* --------------------------------------------------------------------------
   LEDE INVITATION TEXT
   -------------------------------------------------------------------------- */
.invitation-lede-box {
  background: var(--ivory-warm);
  border: 1px solid var(--ivory-parchment);
  border-radius: 12px;
  padding: 32px 24px;
  margin: 40px auto 0;
  max-width: 680px;
  position: relative;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.03);
}

.invitation-lede-box::before {
  content: "";
  position: absolute;
  inset: 5px;
  border: 1px dashed rgba(212, 175, 55, 0.4);
  border-radius: 8px;
  pointer-events: none;
}

.invitation-lede-text {
  font-family: var(--font-body);
  font-size: 1.05rem;
  line-height: 1.85;
  color: var(--text-dark);
}

.invitation-lede-text em {
  font-family: var(--font-serif);
  font-weight: 600;
  font-style: normal;
  color: var(--maroon-mid);
}

/* --------------------------------------------------------------------------
   THE BLESSED COUPLE SECTION
   -------------------------------------------------------------------------- */
.trad-couple {
  background: 
    radial-gradient(circle at 50% 15%, rgba(212, 175, 55, 0.12) 0%, transparent 60%),
    var(--ivory-base);
  border-bottom: 1px solid var(--ivory-parchment);
}

.sec-heading-ml {
  font-family: var(--font-ml);
  font-size: 1.15rem;
  color: var(--gold-500);
  font-weight: 600;
  margin-bottom: 4px;
}

.sec-heading-en {
  font-family: var(--font-serif);
  font-size: clamp(1.8rem, 5vw, 2.5rem);
  color: var(--maroon-deep);
  font-weight: 700;
}

.couple-cards-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 40px;
  margin-top: 48px;
  align-items: start;
}

@media (min-width: 768px) {
  .couple-cards-grid {
    grid-template-columns: 1fr auto 1fr;
    gap: 24px;
  }
}

.couple-person {
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* Traditional Arch Portrait Frame */
.arch-portrait {
  position: relative;
  width: clamp(200px, 50vw, 240px);
  aspect-ratio: 3 / 4;
  border-radius: 999px 999px 12px 12px;
  overflow: hidden;
  margin-bottom: 24px;
  background: linear-gradient(160deg, #3A060C, #1C0306);
  border: 3px solid var(--gold-400);
  box-shadow: 
    0 12px 30px rgba(74, 8, 17, 0.25),
    0 0 20px rgba(212, 175, 55, 0.25);
}

.arch-portrait-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 15%;
  transition: transform 0.6s var(--ease);
}

.arch-portrait:hover .arch-portrait-img {
  transform: scale(1.04);
}

.arch-portrait-ring {
  position: absolute;
  inset: 6px;
  border-radius: 999px 999px 8px 8px;
  border: 1px dashed rgba(255, 243, 214, 0.65);
  pointer-events: none;
}

.person-role {
  font-family: var(--font-sans);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold-500);
  margin-bottom: 6px;
}

.person-name-en {
  font-family: var(--font-serif);
  font-size: 1.8rem;
  font-weight: 700;
  color: var(--maroon-deep);
  margin-bottom: 2px;
}

.person-name-ml {
  font-family: var(--font-ml);
  font-size: 1.15rem;
  font-weight: 600;
  color: var(--maroon-mid);
  margin-bottom: 12px;
}

.person-family-info {
  font-size: 0.95rem;
  color: var(--text-dark);
  line-height: 1.6;
  max-width: 320px;
}

.person-grandparents {
  font-size: 0.85rem;
  color: var(--text-muted);
  margin-top: 6px;
  line-height: 1.5;
}

.person-ancestral-home {
  font-weight: 600;
  color: var(--maroon-rich);
  margin-top: 8px;
  font-size: 0.92rem;
}

/* Mangalya Knot Icon between Couple */
.couple-knot-center {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 20px 0;
}

.knot-ico {
  width: 44px;
  height: 44px;
  color: var(--gold-500);
  filter: drop-shadow(0 2px 8px rgba(212, 175, 55, 0.4));
  margin-bottom: 8px;
}

.knot-text {
  font-family: var(--font-serif);
  font-size: 1.5rem;
  color: var(--maroon-mid);
  font-style: italic;
}

/* --------------------------------------------------------------------------
   CEREMONY & MUHURTHAM SECTION
   -------------------------------------------------------------------------- */
.trad-ceremony {
  background: 
    linear-gradient(180deg, var(--ivory-warm) 0%, var(--ivory-base) 100%);
  border-bottom: 1px solid var(--ivory-parchment);
}

.temple-card {
  max-width: 680px;
  margin: 40px auto 0;
  background: #FFF;
  border-radius: 16px;
  border: 1.5px solid var(--gold-400);
  box-shadow: 0 10px 32px rgba(74, 8, 17, 0.1);
  overflow: hidden;
  position: relative;
}

.temple-card-header {
  background: linear-gradient(135deg, var(--maroon-mid), var(--maroon-deep));
  color: #FFF3D6;
  padding: 24px;
  text-align: center;
}

.temple-card-header .ico {
  width: 36px;
  height: 36px;
  color: var(--gold-300);
  margin-bottom: 8px;
}

.tc-title-ml {
  font-family: var(--font-ml);
  font-size: 1.35rem;
  font-weight: 700;
  color: var(--gold-200);
}

.tc-title-en {
  font-family: var(--font-serif);
  font-size: 1.5rem;
  font-weight: 700;
  letter-spacing: 0.05em;
}

.temple-card-body {
  padding: 36px 28px;
  text-align: center;
}

.muhurtham-highlight {
  display: inline-block;
  background: var(--ivory-warm);
  border: 1px solid rgba(212, 175, 55, 0.5);
  border-radius: 10px;
  padding: 16px 28px;
  margin-bottom: 28px;
}

.mh-label {
  font-family: var(--font-sans);
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.24em;
  color: var(--gold-600);
  font-weight: 600;
}

.mh-time {
  font-family: var(--font-serif);
  font-size: clamp(1.4rem, 4vw, 1.8rem);
  font-weight: 700;
  color: var(--maroon-deep);
  margin: 4px 0;
}

.mh-sub {
  font-family: var(--font-ml);
  font-size: 0.92rem;
  color: var(--maroon-rich);
}

.event-details-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
  text-align: left;
  max-width: 480px;
  margin: 0 auto 32px;
}

.ed-row {
  display: flex;
  align-items: flex-start;
  gap: 16px;
}

.ed-icon {
  width: 24px;
  height: 24px;
  color: var(--gold-500);
  flex-shrink: 0;
  margin-top: 2px;
}

.ed-text strong {
  display: block;
  font-family: var(--font-serif);
  color: var(--maroon-deep);
  font-size: 1.05rem;
  margin-bottom: 2px;
}

.ed-text p {
  font-size: 0.92rem;
  color: var(--text-dark);
}

.ed-text .muted {
  color: var(--text-muted);
  font-size: 0.85rem;
}

/* Action Buttons */
.card-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  justify-content: center;
}

.btn-primary {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 12px 26px;
  background: linear-gradient(135deg, var(--maroon-mid), var(--maroon-deep));
  color: #FFF3D6;
  border: 1px solid var(--gold-400);
  border-radius: 999px;
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-decoration: none;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(74, 8, 17, 0.25);
  transition: all 0.3s var(--ease);
}

.btn-primary:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(74, 8, 17, 0.4);
  border-color: #FFF;
}

.btn-secondary {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 12px 26px;
  background: transparent;
  color: var(--maroon-deep);
  border: 1.5px solid var(--gold-500);
  border-radius: 999px;
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-decoration: none;
  cursor: pointer;
  transition: all 0.3s var(--ease);
}

.btn-secondary:hover {
  background: var(--ivory-warm);
  transform: translateY(-2px);
}

/* --------------------------------------------------------------------------
   COUNTDOWN TIMER
   -------------------------------------------------------------------------- */
.countdown-box {
  margin-top: 48px;
  text-align: center;
}

.countdown-title {
  font-family: var(--font-sans);
  font-size: 0.74rem;
  font-weight: 600;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--gold-600);
  margin-bottom: 16px;
}

.countdown-grid {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: clamp(8px, 2.5vw, 20px);
}

.countdown-unit {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: clamp(64px, 18vw, 84px);
  height: clamp(74px, 20vw, 94px);
  background: linear-gradient(145deg, #FFF, var(--ivory-warm));
  border: 1px solid rgba(212, 175, 55, 0.5);
  border-radius: 12px;
  box-shadow: 0 4px 14px rgba(74, 8, 17, 0.08);
}

.countdown-n {
  font-family: var(--font-serif);
  font-size: clamp(1.6rem, 5vw, 2.2rem);
  font-weight: 700;
  color: var(--maroon-deep);
  line-height: 1;
}

.countdown-l {
  font-family: var(--font-sans);
  font-size: 0.65rem;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--text-muted);
  margin-top: 6px;
}

.countdown-sep {
  font-family: var(--font-serif);
  font-size: 1.6rem;
  color: var(--gold-500);
  font-weight: 700;
}

/* --------------------------------------------------------------------------
   RECEPTION SECTION
   -------------------------------------------------------------------------- */
.trad-reception {
  background: var(--ivory-base);
  border-bottom: 1px solid var(--ivory-parchment);
}

.reception-card {
  max-width: 680px;
  margin: 40px auto 0;
  background: linear-gradient(135deg, #38070E, #1F0306);
  color: #FFF3D6;
  border-radius: 16px;
  border: 1.5px solid var(--gold-400);
  padding: 40px 28px;
  text-align: center;
  box-shadow: 0 12px 36px rgba(0, 0, 0, 0.35);
  position: relative;
}

.reception-card::before {
  content: "";
  position: absolute;
  inset: 6px;
  border: 1px dashed rgba(212, 175, 55, 0.35);
  border-radius: 10px;
  pointer-events: none;
}

.rec-eyebrow {
  font-family: var(--font-sans);
  font-size: 0.74rem;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--gold-300);
  margin-bottom: 8px;
}

.rec-title-ml {
  font-family: var(--font-ml);
  font-size: 1.4rem;
  font-weight: 700;
  color: #FFF;
  margin-bottom: 4px;
}

.rec-title-en {
  font-family: var(--font-serif);
  font-size: 1.8rem;
  font-weight: 700;
  color: var(--gold-200);
  margin-bottom: 20px;
}

.rec-date-time {
  font-size: 1.15rem;
  color: #FFF;
  margin-bottom: 24px;
  line-height: 1.6;
}

.rec-date-time strong {
  color: var(--gold-300);
}

.rec-venue {
  font-size: 1.05rem;
  line-height: 1.7;
  max-width: 480px;
  margin: 0 auto 30px;
  color: #F8E6B8;
}

/* --------------------------------------------------------------------------
   CHERISHED MOMENTS & VIDEO SECTION
   -------------------------------------------------------------------------- */
.trad-moments {
  background: 
    radial-gradient(circle at 50% 80%, rgba(212, 175, 55, 0.1) 0%, transparent 60%),
    var(--ivory-warm);
  border-bottom: 1px solid var(--ivory-parchment);
}

.couple-photo-featured {
  max-width: 580px;
  margin: 40px auto 36px;
  background: #FFF;
  padding: 14px;
  border-radius: 12px;
  border: 1.5px solid var(--gold-400);
  box-shadow: 0 12px 36px rgba(74, 8, 17, 0.15);
}

.cpf-img-wrap {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 5;
  border-radius: 8px;
  overflow: hidden;
  background-color: #1C0306;
}

.cpf-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
}

.cpf-caption {
  font-family: var(--font-serif);
  font-size: 1.15rem;
  color: var(--maroon-deep);
  font-weight: 600;
  margin-top: 14px;
}

.cpf-caption-sub {
  font-family: var(--font-ml);
  font-size: 0.88rem;
  color: var(--text-muted);
}

/* Watch Video Button */
.video-teaser-cta {
  margin-top: 32px;
}

/* --------------------------------------------------------------------------
   FAMILY & COMPLIMENTS SECTION
   -------------------------------------------------------------------------- */
.trad-family {
  background: var(--ivory-base);
  border-bottom: 1px solid var(--ivory-parchment);
}

.family-residence-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 28px;
  max-width: 720px;
  margin: 40px auto 0;
  text-align: center;
}

@media (min-width: 640px) {
  .family-residence-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.family-box {
  background: var(--ivory-warm);
  border: 1px solid var(--ivory-parchment);
  border-radius: 12px;
  padding: 28px 20px;
}

.fb-tag {
  font-family: var(--font-sans);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold-600);
  margin-bottom: 8px;
}

.fb-name {
  font-family: var(--font-serif);
  font-size: 1.2rem;
  color: var(--maroon-deep);
  font-weight: 700;
  margin-bottom: 4px;
}

.fb-address {
  font-size: 0.9rem;
  color: var(--text-dark);
  line-height: 1.6;
  margin-top: 8px;
}

.fb-address-ml {
  font-family: var(--font-ml);
  font-size: 0.85rem;
  color: var(--text-muted);
  margin-top: 4px;
}

.compliments-banner {
  margin-top: 48px;
  padding: 22px;
  border-top: 1px solid var(--ivory-parchment);
  border-bottom: 1px solid var(--ivory-parchment);
}

.compliments-text {
  font-family: var(--font-serif);
  font-size: 1.15rem;
  color: var(--maroon-rich);
  font-weight: 600;
}

.compliments-ml {
  font-family: var(--font-ml);
  font-size: 0.95rem;
  color: var(--text-muted);
  margin-top: 4px;
}

/* --------------------------------------------------------------------------
   SACRED CLOSING & FOOTER
   -------------------------------------------------------------------------- */
.trad-footer {
  background: linear-gradient(180deg, var(--maroon-rich) 0%, var(--maroon-deep) 100%);
  color: #FFF3D6;
  text-align: center;
  padding: 60px 24px;
}

.footer-lamp {
  width: 44px;
  height: 44px;
  color: var(--gold-400);
  margin-bottom: 16px;
  filter: drop-shadow(0 0 12px var(--gold-glow));
}

.footer-blessing-ml {
  font-family: var(--font-ml);
  font-size: 1.3rem;
  font-weight: 700;
  color: var(--gold-200);
  margin-bottom: 8px;
}

.footer-blessing-en {
  font-family: var(--font-body);
  font-size: 1rem;
  color: rgba(255, 255, 255, 0.85);
  max-width: 500px;
  margin: 0 auto 24px;
  line-height: 1.7;
}

.footer-names {
  font-family: var(--font-serif);
  font-size: 1.8rem;
  font-weight: 700;
  color: #FFF;
  margin-bottom: 4px;
}

.footer-date {
  font-family: var(--font-sans);
  font-size: 0.8rem;
  letter-spacing: 0.22em;
  color: var(--gold-300);
  text-transform: uppercase;
}

.footer-shubham {
  font-family: var(--font-ml);
  font-size: 1.4rem;
  color: var(--gold-400);
  margin-top: 24px;
  letter-spacing: 0.1em;
}

/* --------------------------------------------------------------------------
   FLOATING AUDIO TOGGLE
   -------------------------------------------------------------------------- */
.floating-music-btn {
  position: fixed;
  bottom: 24px;
  left: 24px;
  z-index: 800;
  width: 50px;
  height: 50px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--maroon-mid), var(--maroon-deep));
  border: 1.5px solid var(--gold-400);
  color: var(--gold-300);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5), 0 0 14px var(--gold-glow);
  transition: all 0.3s var(--ease);
}

.floating-music-btn:hover {
  transform: scale(1.08);
  border-color: #FFF;
}

.floating-music-btn.is-playing {
  animation: pulseRotate 12s linear infinite;
}

@keyframes pulseRotate {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

.floating-music-btn .ico {
  width: 24px;
  height: 24px;
}

/* --------------------------------------------------------------------------
   OPEN INVITATION BUTTON
   -------------------------------------------------------------------------- */
.btn-open-invitation {
  display: inline-flex;
  align-items: center;
  gap: 16px;
  margin-top: 24px;
  padding: 14px 30px;
  background: linear-gradient(180deg, #2b241c 0%, #1c1712 100%);
  border: 1px solid #a9843f;
  border-radius: 40px;
  color: #d4af6a;
  cursor: pointer;
  box-shadow: 0 0 0 1px rgba(169, 132, 63, 0.15), 0 4px 10px rgba(0, 0, 0, 0.4);
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.btn-open-invitation:hover {
  transform: translateY(-2px);
  box-shadow: 0 0 0 1px rgba(169, 132, 63, 0.3), 0 6px 14px rgba(0, 0, 0, 0.5);
}

.btn-open-invitation .invite-icon {
  width: 22px;
  height: 22px;
  flex-shrink: 0;
}

.btn-open-invitation .invite-text {
  display: flex;
  flex-direction: column;
  line-height: 1.3;
  text-align: left;
}

.btn-open-invitation .invite-title {
  font-family: 'Montserrat', sans-serif;
  font-size: 15px;
  letter-spacing: 3px;
  font-weight: 600;
  color: #e6c98a;
}

.btn-open-invitation .invite-subtitle {
  font-family: var(--font-ml);
  font-size: 12px;
  color: #b89a63;
  letter-spacing: 0.5px;
}

/* --------------------------------------------------------------------------
   RSVP section (imported from ashik-thomas)
   -------------------------------------------------------------------------- */
#rsvp {
  --gold: #D4AF37;
  --gold-lt: #F6E2A0;
  --brass: #B8860B;
  --maroon: #7B1C2A;
  --ink: #2C1D18;
  --ink-soft: #5C4639;
  --shadow-m: 0 14px 38px -12px rgba(44, 29, 24, .25);
  --f-body: "Jost", "Segoe UI", system-ui, -apple-system, sans-serif;
  --f-display: "Cormorant Garamond", Georgia, "Times New Roman", serif;
  --ease: cubic-bezier(.22, .61, .36, 1);
  background-color: #F5EBE0;
}

.rsvp-card {
  position: relative;
  max-width: 720px;
  margin-inline: auto;
  padding: clamp(32px, 6vw, 52px) clamp(24px, 5vw, 44px);
  background: rgba(255, 255, 255, .72);
  border: 1px solid rgba(193, 150, 47, .35);
  border-radius: 4px;
  box-shadow: var(--shadow-m);
}

.rsvp-card::before {
  content: "";
  position: absolute;
  inset: 7px;
  border: 1px solid rgba(193, 150, 47, .2);
  border-radius: 2px;
  pointer-events: none;
}

/* Corner decorations — small gold L-shapes */
.rsvp-card__corner {
  position: absolute;
  width: 28px;
  height: 28px;
  border-color: rgba(193, 150, 47, .65);
  border-style: solid;
  pointer-events: none;
  z-index: 1;
}
.rsvp-card__corner--tl { top: -1px; left: -1px; border-width: 2px 0 0 2px; }
.rsvp-card__corner--tr { top: -1px; right: -1px; border-width: 2px 2px 0 0; }
.rsvp-card__corner--bl { bottom: -1px; left: -1px; border-width: 0 0 2px 2px; }
.rsvp-card__corner--br { bottom: -1px; right: -1px; border-width: 0 2px 2px 0; }

/* Decorative star */
.rsvp-star {
  position: absolute;
  top: clamp(36px, 6vw, 56px);
  left: clamp(12px, 3vw, 20px);
  font-size: 14px;
  color: var(--gold);
  opacity: .55;
  animation: rsvpStarPulse 4s ease-in-out infinite;
  pointer-events: none;
}

@keyframes rsvpStarPulse {
  0%, 100% { opacity: .35; transform: scale(.9) rotate(0deg); }
  50% { opacity: .7; transform: scale(1.15) rotate(15deg); }
}

/* Form layout */
.rsvp-form {
  display: flex;
  flex-direction: column;
  gap: clamp(20px, 4vw, 28px);
}

.rsvp-field {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.rsvp-fieldset {
  border: 0;
  padding: 0;
  margin: 0;
}

.rsvp-label {
  font-size: 9.5px;
  font-weight: 500;
  letter-spacing: .28em;
  text-transform: uppercase;
  color: var(--brass);
}

.rsvp-req {
  color: var(--maroon);
  font-size: 11px;
}

.rsvp-opt {
  font-weight: 300;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--ink-soft);
  font-size: 8.5px;
}

/* Input & Select shared */
.rsvp-input,
.rsvp-select {
  width: 100%;
  padding: 14px 16px;
  font-family: var(--f-body);
  font-size: 15px;
  font-weight: 300;
  color: var(--ink);
  background: rgba(255, 255, 255, .65);
  border: 1px solid rgba(193, 150, 47, .3);
  border-radius: 3px;
  outline: none;
  transition:
    border-color .35s var(--ease),
    box-shadow .35s var(--ease),
    background .35s var(--ease);
  -webkit-appearance: none;
  appearance: none;
}

.rsvp-input::placeholder {
  color: var(--ink-soft);
  opacity: .55;
  font-weight: 200;
}

.rsvp-input:hover,
.rsvp-select:hover {
  border-color: rgba(193, 150, 47, .55);
}

.rsvp-input:focus,
.rsvp-select:focus {
  border-color: var(--gold);
  box-shadow: 0 0 0 3px rgba(193, 150, 47, .12);
  background: rgba(255, 255, 255, .85);
}

/* Validation error state */
.rsvp-input.is-error {
  border-color: var(--maroon);
  box-shadow: 0 0 0 3px rgba(107, 31, 42, .1);
}

/* Select wrapper */
.rsvp-select-wrap {
  position: relative;
}

.rsvp-select {
  cursor: pointer;
  padding-right: 44px;
}

.rsvp-select-arrow {
  position: absolute;
  right: 14px;
  top: 50%;
  transform: translateY(-50%);
  width: 18px;
  height: 18px;
  color: var(--brass);
  pointer-events: none;
  transition: color .35s var(--ease);
}

.rsvp-select:focus + .rsvp-select-arrow {
  color: var(--gold);
}

/* Radio buttons — custom circular marks like the reference */
.rsvp-radios {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.rsvp-radio {
  display: flex;
  align-items: center;
  gap: 12px;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}

.rsvp-radio input {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

.rsvp-radio__mark {
  position: relative;
  flex: none;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  border: 2px solid rgba(193, 150, 47, .4);
  background: rgba(255, 255, 255, .6);
  transition:
    border-color .35s var(--ease),
    background .35s var(--ease),
    box-shadow .35s var(--ease);
}

.rsvp-radio__mark::after {
  content: "";
  position: absolute;
  inset: 4px;
  border-radius: 50%;
  background: var(--gold);
  transform: scale(0);
  transition: transform .3s var(--ease);
}

.rsvp-radio input:checked + .rsvp-radio__mark {
  border-color: var(--gold);
  background: rgba(255, 255, 255, .85);
  box-shadow: 0 0 0 3px rgba(193, 150, 47, .12);
}

.rsvp-radio input:checked + .rsvp-radio__mark::after {
  transform: scale(1);
}

.rsvp-radio:hover .rsvp-radio__mark {
  border-color: rgba(193, 150, 47, .65);
}

.rsvp-radio input:focus-visible + .rsvp-radio__mark {
  outline: 2px solid var(--gold-lt);
  outline-offset: 3px;
}

.rsvp-radio__text {
  font-family: var(--f-body);
  font-size: 15px;
  font-weight: 300;
  color: var(--ink);
  line-height: 1.4;
}

/* Submit button */
.rsvp-btn {
  align-self: center;
  margin-top: 8px;
  padding: 15px 38px;
  font-size: 12px;
  letter-spacing: .22em;
}

.rsvp-btn.is-sending {
  pointer-events: none;
  opacity: .7;
}

.rsvp-btn.is-success {
  pointer-events: none;
  background: linear-gradient(145deg, #4CAF50, #388E3C);
  box-shadow: 0 10px 26px -12px rgba(76, 175, 80, .65);
  color: #fff;
  animation: successPulse 2s ease-in-out 1;
}

@keyframes successPulse {
  0% { transform: scale(1); }
  30% { transform: scale(1.06); }
  60% { transform: scale(1); }
}

/* Success state */
.rsvp-success {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: clamp(24px, 5vw, 40px) 0;
  animation: riseIn .8s var(--ease) both;
}

.rsvp-success__ico {
  width: 48px;
  height: 48px;
  color: var(--gold);
  stroke-width: 2.8;
  margin-bottom: 18px;
}

.rsvp-success__title {
  font-family: var(--f-display);
  font-weight: 300;
  font-size: clamp(28px, 7vw, 42px);
  color: var(--maroon);
  margin-bottom: 12px;
}

.rsvp-success__text {
  font-family: var(--f-display);
  font-style: italic;
  font-size: clamp(15px, 3.8vw, 18px);
  color: var(--ink-soft);
  line-height: 1.8;
}
