/* ============================================================
   Umesh & Neethu · 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(2px,.8%,5px);margin-bottom:clamp(4px,1.5%,10px)}
.hero-bless--top{
  /* sits in the top safe band — above the decorative symbol in the artwork */
  grid-column:1 / -1;
  grid-row:1;
  z-index:3;
  align-self:end;
  justify-self:center;
  text-align:center;
  margin:0 0 clamp(8px,2%,16px);
  display:flex;flex-direction:column;gap:4px;
}
.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:400;
  font-size:clamp(34px,9vw,62px);line-height:1;letter-spacing:.01em;
  color:#2A1A0A;
  text-shadow:0 2px 18px rgba(255,246,220,.7), 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(6px,2%,14px);
  display:flex;flex-direction:column;align-items:center;gap:clamp(2px,.8%,5px);
}
.hero-chingam{
  /* sits in the bottom safe band — below the decorative symbol */
  grid-column:1 / -1;
  grid-row:3;
  z-index:3;
  align-self:start;
  justify-self:center;
  text-align:center;
  margin:clamp(8px,2%,16px) 0 0;
  font-family:var(--f-title);
  font-size:clamp(11px,2.8vw,14px);
  letter-spacing:.12em;
  color:#5A3C1E;
  opacity:.85;
}
.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;font-weight:700}
.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}

/* ---------- scroll progress bar ---------- */
#scroll-progress{
  position:fixed;top:0;left:0;z-index:200;
  height:3px;width:0%;
  background:linear-gradient(90deg,var(--gold-dk),var(--gold-lt),var(--gold));
  box-shadow:0 0 10px rgba(193,150,47,.7);
  transition:width .08s linear;
  pointer-events:none;
  border-radius:0 2px 2px 0;
  opacity:0;
  transition:width .1s linear, opacity .4s ease;
}
#scroll-progress.is-visible{opacity:1}

/* ---------- reveal on scroll ---------- */

/* Default: fade up */
.reveal{
  opacity:0;
  transform:translate3d(0,32px,0);
  transition:opacity .85s var(--ease),transform .85s var(--ease);
  will-change:opacity,transform;
}
.reveal.in{opacity:1;transform:none}

/* Heading blocks: subtle scale-up */
.sec-head.reveal{
  transform:translate3d(0,20px,0) scale(.97);
  transition:opacity .9s var(--ease),transform .9s var(--ease);
}
.sec-head.reveal.in{transform:none}

/* Cards: pop in with a tiny lift */
.card.reveal, .fact.reveal{
  transform:translate3d(0,36px,0) scale(.98);
  transition:opacity .8s var(--ease),transform .8s var(--ease),box-shadow .8s var(--ease);
}
.card.reveal.in, .fact.reveal.in{transform:none}

/* Timeline items: slide in from left */
.tl-item.reveal{
  transform:translate3d(-28px,14px,0);
  transition:opacity .8s var(--ease),transform .8s var(--ease);
}
.tl-item.reveal.in{transform:none}

/* Person cards: alternate left/right */
.person.reveal:nth-child(odd){
  transform:translate3d(-22px,18px,0);
  transition:opacity .85s var(--ease),transform .85s var(--ease);
}
.person.reveal:nth-child(even){
  transform:translate3d(22px,18px,0);
  transition:opacity .85s var(--ease),transform .85s var(--ease);
}
.person.reveal.in{transform:none}

/* Temple / lux cards: scale up from slightly smaller */
.temple-card.reveal, .lux-card.reveal{
  transform:translate3d(0,24px,0) scale(.975);
  transition:opacity .95s var(--ease),transform .95s var(--ease);
}
.temple-card.reveal.in, .lux-card.reveal.in{transform:none}

/* Countdown: fade with a gentle bounce */
.countdown.reveal{
  transform:translate3d(0,18px,0);
  transition:opacity .9s var(--ease),transform .9s cubic-bezier(.34,1.42,.64,1);
}
.countdown.reveal.in{transform:none}

/* Delays */
.reveal[data-delay="1"]{transition-delay:.10s}
.reveal[data-delay="2"]{transition-delay:.20s}
.reveal[data-delay="3"]{transition-delay:.30s}
.reveal[data-delay="4"]{transition-delay:.40s}

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce){
  .reveal,.sec-head.reveal,.card.reveal,.fact.reveal,
  .tl-item.reveal,.person.reveal,.temple-card.reveal,
  .lux-card.reveal,.countdown.reveal{
    transform:none;
    transition:opacity .4s ease;
  }
}

/* ---------- 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:clamp(11px,2.8vw,13px);letter-spacing:.28em;text-transform:uppercase;color:var(--brass);font-weight:700}
.fact-v{font-family:var(--f-title);font-size:clamp(17px,4.5vw,21px);color:var(--maroon);line-height:1.4;font-weight:700}
.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))}

/* ---------- story prose ---------- */
.story-prose{
  max-width:680px;
  margin-inline:auto;
  text-align:center;
  padding:clamp(36px,6vw,56px) clamp(24px,5vw,48px);
  background:rgba(255,255,255,.58);
  border:1px solid rgba(193,150,47,.28);
  border-radius:3px;
  box-shadow:var(--shadow-m);
  position:relative;
}
.story-prose::before{
  content:"";position:absolute;inset:8px;
  border:1px solid rgba(193,150,47,.14);border-radius:2px;pointer-events:none;
}
.story-prose__icon{
  width:40px;height:40px;color:var(--gold);stroke-width:3.2;
  margin:0 auto clamp(20px,4vw,30px);opacity:.85;
}
.story-prose p{
  font-family:var(--f-display);
  font-size:clamp(16px,4.2vw,20px);
  line-height:1.95;
  color:var(--ink-soft);
  font-weight:300;
  margin-bottom:1.4em;
}
.story-prose p:last-of-type{margin-bottom:0}
.story-prose__names{
  display:flex;align-items:center;justify-content:center;gap:14px;
  margin-top:clamp(24px,4vw,36px);
  font-family:var(--f-display);font-style:italic;
  font-size:clamp(20px,5vw,28px);color:var(--maroon);font-weight:300;
}
.story-prose__names .ico{width:26px;height:26px;color:var(--gold);stroke-width:3.4}

/* ---------- 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}
.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}
.couple-initial{
  font-family:var(--f-display);
  font-style:italic;
  font-size:clamp(42px,10vw,62px);
  font-weight:300;
  color:var(--gold-lt);
  line-height:1;
  text-shadow:0 2px 18px rgba(231,201,122,.45);
  letter-spacing:.02em;
}

/* ---------- 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}

/* ---------- temple card dark variant (reception) ---------- */
.temple-card--dark .temple-card__body{
  background:linear-gradient(180deg,#1E140A 0%,#150E08 100%);
  border-color:rgba(231,201,122,.28);
}
.temple-card--dark .temple-card__body::before{
  border-color:rgba(231,201,122,.14);
}
.temple-card--dark .tc-eyebrow{color:var(--gold-lt);opacity:.75}
.temple-card--dark .tc-day{color:#FBF3E2}
.temple-card--dark .tc-date{color:#EFE3CF}
.temple-card--dark .tc-rule{background:linear-gradient(90deg,transparent,rgba(231,201,122,.45),transparent)}
.temple-card--dark .tc-row dt{color:var(--gold-lt);opacity:.8}
.temple-card--dark .tc-row dd{color:rgba(243,233,214,.88)}
.temple-card--dark .tc-row dd .muted{color:rgba(243,233,214,.5)}
.temple-card--dark .temple-card__crest{color:var(--gold-lt)}

/* ---------- 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--spark::after{transform:translate(-50%,-50%) rotate(90deg)}
.photo-decor--petal{
  width:14px;height:10px;border-radius:60% 40% 60% 40%;
  background:linear-gradient(135deg,rgba(231,201,122,.55),rgba(193,150,47,.15));
  transform:rotate(25deg);
  animation:photoPetal 11s ease-in-out infinite alternate;
}
.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}

/* ---------- gratitude card ---------- */
.gratitude-card{
  max-width:560px;
  margin-inline:auto;
  text-align:center;
  padding:clamp(36px,7vw,60px) clamp(24px,6vw,50px);
  background:linear-gradient(160deg,rgba(255,246,225,.07),rgba(255,246,225,.02));
  border:1px solid rgba(231,201,122,.28);
  position:relative;
}
.gratitude-card::before,.gratitude-card::after{
  content:"";position:absolute;width:36px;height:36px;
  border:1px solid rgba(231,201,122,.6);pointer-events:none;
}
.gratitude-card::before{top:-1px;left:-1px;border-right:0;border-bottom:0}
.gratitude-card::after{bottom:-1px;right:-1px;border-left:0;border-top:0}
.gratitude-kicker{
  font-family:var(--f-title);
  font-size:clamp(11px,2.8vw,13px);
  letter-spacing:.32em;text-transform:uppercase;
  color:var(--gold-lt);opacity:.85;
  margin-bottom:18px;
}
.gratitude-msg{
  margin:22px auto 0;
  max-width:440px;
  font-family:var(--f-display);font-style:italic;
  font-size:clamp(16px,4.2vw,20px);
  line-height:1.9;
  color:rgba(243,233,214,.78);
  font-weight:300;
}
.gratitude-names{
  margin-top:28px;
  font-family:var(--f-display);font-weight:300;
  font-size:clamp(26px,7vw,40px);
  color:#FBF3E2;
  letter-spacing:.02em;
}
.gratitude-date{
  margin-top:8px;
  font-size:10.5px;letter-spacing:.28em;text-transform:uppercase;
  color:rgba(243,233,214,.42);
}
.gratitude-phones{
  display:flex;align-items:center;justify-content:center;
  gap:clamp(10px,3vw,20px);flex-wrap:wrap;
  margin-top:26px;
}
.gratitude-phone{
  display:flex;align-items:center;gap:8px;
  font-size:clamp(13px,3.4vw,15px);
  color:var(--gold-lt);opacity:.85;
  transition:opacity .3s;
}
.gratitude-phone:hover{opacity:1}
.gratitude-phone .ico{width:15px;height:15px;stroke-width:4;flex:none}
.gratitude-phone-sep{color:rgba(231,201,122,.4);font-size:18px}

/* ============================================================
   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}
}
