/* Việt Phương & Ninh Hương wedding invitation — page styles.
   Base tokens and components live in classical.css; this file adds the themes and the layout. */

/* Five palettes. Each one only declares the semantic --wed-* variables, which are then
   mapped onto design-system tokens, so no component hard-codes a colour. */
:root,[data-wed-theme="hien-dai"]{
  --font-heading:"Playfair Display",Georgia,serif;
  --font-body:"Be Vietnam Pro",system-ui,sans-serif;
  --font-heading-weight:500;--wed-body-weight:300;--wed-h-space:-.012em;
  --wed-background:#edeae1;--wed-surface:#e2ded1;
  --wed-primary:#4f6046;--wed-secondary:#cdbfa4;--wed-accent:#b07d4a;
  --wed-text:#20241d;
  --wed-primary-deep:#33402d;--wed-accent-deep:#6f4e2d;
  --wed-primary-tint:#e8ede4;--wed-accent-tint:#f6ece0;
}
[data-wed-theme="sage"]{
  /* Sage Green · Ivory · Antique Gold — elegant, natural */
  --font-heading:"Cormorant Garamond",Garamond,serif;
  --font-body:"Lora",Georgia,serif;
  --font-heading-weight:500;--wed-body-weight:400;--wed-h-space:.004em;
  --wed-background:#f7f4ec;--wed-surface:#efe9db;
  --wed-primary:#87977f;--wed-secondary:#d8c9a9;--wed-accent:#af8a4d;
  --wed-text:#30332f;
  --wed-primary-deep:#4c5846;--wed-accent-deep:#6f572f;
  --wed-primary-tint:#eaeee7;--wed-accent-tint:#f6eeda;
}
[data-wed-theme="navy"]{
  /* Deep Navy · Champagne · Ivory — luxurious, formal */
  --font-heading:"Playfair Display",Georgia,serif;
  --font-body:"Lora",Georgia,serif;
  --font-heading-weight:500;--wed-body-weight:400;--wed-h-space:-.006em;
  --wed-background:#f7f5ef;--wed-surface:#ece6d8;
  --wed-primary:#1f2a44;--wed-secondary:#e5d6b8;--wed-accent:#c79c5a;
  --wed-text:#30343b;
  --wed-primary-deep:#182034;--wed-accent-deep:#7d5f2c;
  --wed-primary-tint:#e7e9ee;--wed-accent-tint:#f7efdd;
}
[data-wed-theme="rose"]{
  /* Dusty Rose · Burgundy · Cream — romantic, slightly vintage */
  --font-heading:"EB Garamond",Garamond,serif;
  --font-body:"Be Vietnam Pro",system-ui,sans-serif;
  --font-heading-weight:500;--wed-body-weight:300;--wed-h-space:-.004em;
  --wed-background:#faf4ee;--wed-surface:#efdcd4;
  --wed-primary:#6b2737;--wed-secondary:#e8d9cf;--wed-accent:#c08f84;
  --wed-text:#3b2d2d;
  --wed-primary-deep:#4a1624;--wed-accent-deep:#8a5a5a;
  --wed-primary-tint:#f4e8ea;--wed-accent-tint:#f9edec;
}
[data-wed-theme="truyen-thong"]{
  /* Vietnamese red · warm ivory · antique gold — traditional, with modern restraint */
  --font-heading:"Noto Serif Display","Noto Serif",serif;
  --font-body:"Be Vietnam Pro",system-ui,sans-serif;
  --font-heading-weight:500;--wed-body-weight:300;--wed-h-space:-.004em;
  --wed-background:#f9f3e7;--wed-surface:#f2e8d4;
  --wed-primary:#9e1b32;--wed-secondary:#c9a24a;--wed-accent:#d4af5a;
  --wed-text:#3b2424;
  --wed-primary-deep:#7d1526;--wed-accent-deep:#8a6a25;
  --wed-primary-tint:#f7e8e9;--wed-accent-tint:#f8f0dd;
}
/* Semantic variables → design-system tokens (shared by every palette) */
:root{
  --wed-text-muted:color-mix(in srgb,var(--wed-text) 62%,transparent);
  --wed-border:color-mix(in srgb,var(--wed-text) 16%,transparent);
  --wed-overlay:color-mix(in srgb,var(--wed-text) 55%,transparent);
  --color-bg:var(--wed-background);
  --color-surface:var(--wed-surface);
  --color-text:var(--wed-text);
  --color-divider:var(--wed-border);
  --color-accent:var(--wed-primary);
  --color-accent-100:var(--wed-primary-tint);
  --color-accent-200:color-mix(in srgb,var(--wed-primary) 22%,var(--wed-background));
  --color-accent-300:color-mix(in srgb,var(--wed-primary) 40%,var(--wed-background));
  --color-accent-400:color-mix(in srgb,var(--wed-primary) 70%,var(--wed-background));
  --color-accent-500:var(--wed-primary);
  --color-accent-600:color-mix(in srgb,var(--wed-primary-deep) 70%,var(--wed-primary));
  --color-accent-700:var(--wed-primary-deep);
  --color-accent-800:color-mix(in srgb,var(--wed-primary-deep) 78%,#000);
  --color-accent-900:color-mix(in srgb,var(--wed-primary-deep) 58%,#000);
  --color-accent-2:var(--wed-accent);
  --color-accent-2-100:var(--wed-accent-tint);
  --color-accent-2-200:color-mix(in srgb,var(--wed-accent) 24%,var(--wed-background));
  --color-accent-2-300:color-mix(in srgb,var(--wed-accent) 44%,var(--wed-background));
  --color-accent-2-400:color-mix(in srgb,var(--wed-accent) 72%,var(--wed-background));
  --color-accent-2-500:var(--wed-accent);
  --color-accent-2-600:color-mix(in srgb,var(--wed-accent-deep) 70%,var(--wed-accent));
  --color-accent-2-700:var(--wed-accent-deep);
  --color-accent-2-800:color-mix(in srgb,var(--wed-accent-deep) 78%,#000);
  --color-accent-2-900:color-mix(in srgb,var(--wed-accent-deep) 58%,#000);

  /* Ink and gold used on the deep bands (countdown, quote, footer, opening envelope) */
  --wed-dark-ink:#f8eee6;--wed-dark-gold:#e6c98f;

  --wed-gutter:clamp(20px,5vw,72px);
  --wed-soft:color-mix(in srgb,var(--color-text) 78%,transparent);
  --wed-danger:#a3362a;
}

/* ===== Base ===== */
html{background:color-mix(in srgb,var(--color-bg) 88%,#fff);scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:transparent;color:var(--color-text);font-family:var(--font-body);font-weight:var(--wed-body-weight,300);transition:background-color .5s ease,color .5s ease;text-wrap:pretty;-webkit-font-smoothing:antialiased}
[hidden]{display:none!important}
a{color:var(--color-accent-700);text-decoration:none}
a:hover{color:var(--color-accent-600);text-decoration:underline;text-underline-offset:3px}
a.btn,a.btn:hover{text-decoration:none}
h1,h2,h3,blockquote{letter-spacing:var(--wed-h-space,0)}
section[id]{scroll-margin-top:72px}

/* Design-system component overrides that suit the paper-like background */
.input,.input::placeholder,textarea.input{color:var(--color-text)}
.input{background:transparent;border-color:var(--color-divider)}
.input::placeholder{opacity:.5}
.card,.plate{background:transparent}
/* The design system tints framed photos sepia; wedding photos keep their own colours */
/* ===== Photo finish =====
   True colours (classical.css tints plates sepia) with a tiny lift against WebP flatness.
   Depth comes from the frame, a soft vignette and a hover response, not from tinting the pixels. */
.plate{filter:none;box-shadow:var(--shadow-md),0 18px 40px -22px color-mix(in srgb,var(--wed-primary-deep) 45%,transparent);transition:transform .35s ease,box-shadow .35s ease}
/* --py / --sc let scroll parallax (.wed-par, set from js) and the hover zoom share one transform */
.wed-slot img{filter:contrast(1.04) saturate(1.06);transform:translate3d(0,var(--py,0px),0) scale(var(--sc,1));transition:transform .5s ease,filter .35s ease}
.wed-slot.is-filled img{animation:wed-img-in .9s ease both}
@keyframes wed-img-in{from{opacity:0}}
.wed-par img{--sc:1.14;transition:filter .35s ease}
.wed-slot.is-filled::after{content:"";position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 clamp(24px,5vw,64px) color-mix(in srgb,var(--wed-primary-deep) 16%,transparent)}
.wed-slot--qr img{filter:none}
.wed-slot--qr::after{display:none}
@media (hover:hover){
  .plate:has(.is-zoomable):hover{transform:translateY(-3px);box-shadow:var(--shadow-lg),0 30px 54px -24px color-mix(in srgb,var(--wed-primary-deep) 55%,transparent)}
  .plate:has(.is-zoomable):hover .wed-slot img{--sc:1.035;filter:contrast(1.04) saturate(1.06) brightness(1.03)}
  .plate:has(.is-zoomable):hover .wed-slot.wed-par img{--sc:1.17}
}
@media (prefers-reduced-motion:reduce){
  .plate,.wed-slot img{transition:none}
  .wed-slot.is-filled img{animation:none}
  .plate:has(.is-zoomable):hover{transform:none}
  .plate:has(.is-zoomable):hover .wed-slot img{--sc:1}
}
.btn-secondary,.btn-ghost{color:var(--color-text)}
.btn-primary{transition:box-shadow .45s ease,background-color .3s ease,color .3s ease}
.btn-primary:hover{box-shadow:0 0 0 4px color-mix(in srgb,var(--wed-accent) 24%,transparent)}
.tag,.tag-accent,.tag-outline,.tag-neutral{color:var(--color-accent-700);border-color:var(--color-accent)}
.tag-accent{background:var(--color-accent-100)}

/* ===== Shared blocks ===== */
.wed-wrap{max-width:1200px;margin:0 auto;padding:clamp(48px,6vw,88px) var(--wed-gutter)}
.wed-wrap--story{max-width:1100px}
.wed-band{border-top:1px solid var(--color-divider)}
.wed-band--both{border-bottom:1px solid var(--color-divider)}
.wed-kicker{font-size:13px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-accent-700);margin:0 0 14px}
.wed-title{font-family:var(--font-heading);font-weight:400;font-size:clamp(30px,3.6vw,46px);line-height:1.1;letter-spacing:-.01em;margin:0 0 clamp(26px,4vw,40px)}
.wed-lead{font-size:16px;line-height:1.75;color:var(--wed-soft);margin:0}
.wed-label{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-accent);margin:0}
.wed-head{text-align:center;margin-left:auto;margin-right:auto}
.wed-h3{font-family:var(--font-heading);font-weight:400;font-size:24px;line-height:1.25;margin:0}
.wed-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:clamp(22px,4vw,44px)}
.wed-panel{border:1px solid var(--color-divider);border-radius:var(--radius-md);padding:clamp(22px,3vw,36px)}

/* Couple names: a calligraphic script face that supports Vietnamese diacritics */
.wed-name{font-family:"Great Vibes","Dancing Script",var(--font-heading),cursive;font-weight:400;letter-spacing:.01em;line-height:1.16;white-space:nowrap}
.wed-amp{font-family:"Great Vibes",var(--font-heading),cursive;font-style:normal;color:var(--color-accent-2)}

/* Photo slot: shows the image set in js/config.js, or a placeholder frame until there is one */
.wed-slot{position:relative;display:block;width:100%;overflow:hidden;background:rgba(127,127,127,.08)}
.wed-slot img{position:absolute;inset:0;width:100%;height:100%;max-width:none;object-fit:cover}
.wed-slot-cap{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:12px;font-size:13px;line-height:1.3;font-weight:500;letter-spacing:.01em;color:color-mix(in srgb,currentColor 75%,transparent);border:1.5px dashed color-mix(in srgb,currentColor 35%,transparent)}
.wed-slot.is-filled .wed-slot-cap{display:none}
.wed-slot--qr{width:124px;height:124px;flex:none;border-radius:4px}
.wed-slot--qr .wed-slot-cap{border-radius:4px}
.wed-slot--qr img{object-fit:contain}

/* Reveal on scroll — content is only hidden once JS is running (.js class on <html>) */
.js .wed-reveal{opacity:0;transform:translateY(9px);transition:opacity 1.15s cubic-bezier(.33,.72,.3,1),transform 1.15s cubic-bezier(.33,.72,.3,1)}
.js .wed-reveal.wed-in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.js .wed-reveal,.js .wed-reveal.wed-in{opacity:1;transform:none;transition:none}}
@keyframes vpnh-rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ===== Navigation ===== */
.wed-nav{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--color-bg) 92%,transparent);backdrop-filter:blur(8px);gap:clamp(12px,2.5vw,28px);padding:12px var(--wed-gutter)}
.wed-nav .nav-brand{font-size:19px;letter-spacing:.02em;white-space:nowrap}
.wed-nav-links{display:flex;align-items:center;gap:clamp(14px,2.2vw,26px)}
.wed-nav-links a{font-size:13.5px;letter-spacing:.04em;color:var(--color-text);white-space:nowrap}
.wed-menu{display:none}
.wed-menu summary{min-height:44px;padding-inline:16px}

/* Popover built on <details>: the mobile nav menu and the "add to calendar" menus */
.wed-pop{position:relative}
.wed-pop summary{list-style:none;cursor:pointer}
.wed-pop summary::-webkit-details-marker{display:none}
.wed-pop summary::marker{content:""}
.wed-pop-list{position:absolute;right:0;top:calc(100% + 10px);min-width:220px;background:var(--color-bg);border:1px solid var(--color-divider);border-radius:var(--radius-md);box-shadow:var(--shadow-md);padding:8px;display:grid;gap:2px;z-index:30}
.wed-pop-list a{display:flex;align-items:center;min-height:44px;padding:0 12px;border-radius:var(--radius-sm);font-size:15px;color:var(--color-text)}
.wed-pop-list a.is-cta{color:var(--color-accent-700)}

/* ===== Theme picker ===== */
.wed-theme-strip{display:flex;flex-wrap:wrap;align-items:center;gap:10px clamp(10px,2vw,16px);padding:12px var(--wed-gutter);border-bottom:1px solid var(--color-divider);background:var(--color-surface)}
.wed-theme-strip > span{font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:color-mix(in srgb,var(--color-text) 58%,transparent)}
.wed-theme-chip,.wed-preset{cursor:pointer;background:transparent;font-family:var(--font-body);font-size:12.5px;letter-spacing:.03em;padding:7px 14px;min-height:36px;border:1px solid var(--color-divider);border-radius:100px;color:color-mix(in srgb,var(--color-text) 70%,transparent);transition:border-color .3s ease,color .3s ease}
.wed-theme-chip:hover,.wed-preset:hover{border-color:var(--color-accent);color:var(--color-accent-700)}
.wed-theme-chip:focus-visible,.wed-preset:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}
.wed-theme-chip[aria-pressed="true"],.wed-preset[aria-pressed="true"]{border-color:var(--color-accent);color:var(--color-accent-700);background:var(--color-accent-100)}

/* ===== Animated backdrop: ambient light blobs plus a canvas of petals, hearts and dust =====
   Colours and density are read from the theme variables, so the backdrop follows the theme. */
.wed-atm{position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden;contain:strict}
.wed-atm b{position:absolute;display:block;border-radius:50%;will-change:transform}
.wed-atm b:nth-child(1){width:60vw;height:60vw;left:-14vw;top:-16vw;background:radial-gradient(circle,color-mix(in srgb,var(--wed-primary) 8%,transparent),transparent 68%);animation:wed-amb-a 52s ease-in-out infinite alternate}
.wed-atm b:nth-child(2){width:50vw;height:50vw;right:-12vw;top:22vh;background:radial-gradient(circle,color-mix(in srgb,var(--wed-accent) 11%,transparent),transparent 68%);animation:wed-amb-b 68s ease-in-out infinite alternate}
.wed-atm b:nth-child(3){width:68vw;height:68vw;left:16vw;bottom:-26vw;background:radial-gradient(circle,color-mix(in srgb,var(--wed-secondary) 8%,transparent),transparent 70%);animation:wed-amb-c 84s ease-in-out infinite alternate}
@keyframes wed-amb-a{to{transform:translate3d(5vw,3vh,0) scale(1.1)}}
@keyframes wed-amb-b{to{transform:translate3d(-4vw,-4vh,0) scale(1.14)}}
@keyframes wed-amb-c{to{transform:translate3d(3vw,-3vh,0) scale(1.08)}}
.wed-atm-canvas{position:fixed;inset:0;width:100%;height:100%;z-index:-1;pointer-events:none}
/* Set while the mouse rests on a falling petal or heart, which pops when clicked */
.wed-atm-hit body{cursor:pointer}
@media (prefers-reduced-motion:reduce){.wed-atm b{animation:none}.wed-atm-canvas{display:none}}

/* ===== Hero ===== */
/* Words on the left, a framed portrait on the right, both inside the page measure */
.wed-hero{position:relative;display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:clamp(24px,3vw,48px);align-items:center;max-width:1360px;margin:0 auto;padding:clamp(36px,5vw,72px) var(--wed-gutter)}
.wed-hero-text{container-type:inline-size;animation:vpnh-rise .7s ease both;text-align:center;width:100%;max-width:640px;justify-self:center}
.wed-hero-photo{position:relative;margin:0;width:100%;max-width:680px;justify-self:center;aspect-ratio:4/5;animation:vpnh-rise .9s ease both}
/* The portrait sits in an arch, with a second thin arch offset behind it */
.wed-hero-frame{position:absolute;inset:0;overflow:hidden;border:1px solid var(--color-accent-2);border-radius:999px 999px 6px 6px;box-shadow:var(--shadow-lg),0 30px 70px -30px color-mix(in srgb,var(--wed-primary) 40%,transparent)}
.wed-hero-frame::after{content:"";position:absolute;inset:10px;border:1px solid color-mix(in srgb,#fff 62%,transparent);border-radius:999px 999px 3px 3px;pointer-events:none;z-index:1}
.wed-hero-photo::before{content:"";position:absolute;inset:-14px;border:1px solid var(--color-accent-2);border-radius:999px 999px 10px 10px;opacity:.65;pointer-events:none}
.wed-hero-frame .wed-slot{position:absolute;inset:0;height:100%;aspect-ratio:auto!important}
.wed-hero-frame .wed-slot img{object-position:50% 24%}
.wed-hero-frame .wed-slot.is-filled::after{box-shadow:none}
.wed-hero-text .wed-name{font-size:min(20cqw,108px);margin:2px 0 0}
.wed-hero-kicker{font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-accent-700);font-feature-settings:'tnum' 1;margin:0 0 20px}
.wed-hero-text .wed-amp{font-size:clamp(30px,3.4vw,46px);margin:2px 0 0}
.wed-hero-date{display:flex;align-items:center;justify-content:center;gap:16px;margin:32px 0 0}
.wed-hero-date i{height:1px;width:56px;background:var(--color-accent-2);display:block}
.wed-hero-date span{font-family:var(--font-heading);font-size:clamp(20px,2.2vw,28px);font-feature-settings:'tnum' 1;letter-spacing:.06em}
.wed-hero-text .wed-lead{margin:20px auto 0;max-width:46ch}
.wed-hero-actions{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;margin-top:28px}
.wed-hero-actions .btn-secondary{min-height:50px}
@media (max-width:820px){
  /* Phones: the photo fills the first screen and the names sit on it, so the invitation reads at a glance */
  .wed-hero{display:block;max-width:none;padding:0;min-height:calc(100svh - 68px);overflow:hidden;isolation:isolate}
  .wed-hero-photo{position:absolute;inset:0;max-width:none;width:auto;aspect-ratio:auto;justify-self:stretch;z-index:-1}
  .wed-hero-photo::before{display:none}
  .wed-hero-photo::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(to top,color-mix(in srgb,var(--wed-primary-deep) 94%,transparent) 0,color-mix(in srgb,var(--wed-primary-deep) 78%,transparent) 30%,color-mix(in srgb,var(--wed-primary-deep) 18%,transparent) 62%,transparent 80%)}
  .wed-hero-frame{border:0;border-radius:0;box-shadow:none}
  .wed-hero-frame::after{inset:14px;border-radius:0;border-color:color-mix(in srgb,var(--wed-dark-gold) 55%,transparent)}
  .wed-hero-frame .wed-slot img{object-position:50% 22%}
  .wed-hero-text{position:relative;display:flex;flex-direction:column;justify-content:flex-end;min-height:calc(100svh - 68px);max-width:none;padding:0 clamp(26px,7vw,48px) 112px;color:var(--wed-dark-ink)}
  .wed-hero-text .wed-name{font-size:min(19cqw,84px);text-shadow:0 2px 24px rgba(40,8,18,.55)}
  .wed-hero-text .wed-amp{color:var(--wed-dark-gold)}
  .wed-hero-kicker{color:var(--wed-dark-gold);margin-bottom:10px}
  .wed-hero-date span{color:var(--wed-dark-ink)}
  .wed-hero-date i{background:var(--wed-dark-gold)}
  .wed-hero-date{margin-top:18px}
  .wed-hero-text .wed-lead{display:none}
  .wed-hero-actions{display:none}
}

/* ===== Lightbox: any filled photo opens large, with pinch / wheel / button zoom and drag to pan ===== */
.wed-slot.is-zoomable{cursor:zoom-in}
.wed-slot.is-zoomable:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}
.wed-lb{position:fixed;inset:0;z-index:90;display:flex;flex-direction:column;background:color-mix(in srgb,var(--color-text) 92%,black);color:#fff;touch-action:none;user-select:none;-webkit-user-select:none;animation:wed-lb-in .25s ease both}
.wed-lb[hidden]{display:none}
.wed-lb-stage{position:relative;flex:1;overflow:hidden;display:flex;align-items:center;justify-content:center;cursor:grab}
.wed-lb-stage.is-zoomed{cursor:grab}
.wed-lb-stage.is-dragging{cursor:grabbing}
.wed-lb-img{max-width:calc(100% - 24px);max-height:calc(100% - 24px);object-fit:contain;transform-origin:center;will-change:transform;box-shadow:0 30px 80px -20px rgba(0,0,0,.6);transition:transform .18s ease}
.wed-lb-stage.is-dragging .wed-lb-img,.wed-lb-stage.is-pinching .wed-lb-img{transition:none}
.wed-lb-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;font-size:13px;letter-spacing:.06em}
.wed-lb-bar--top{position:absolute;top:0;left:0;right:0;z-index:2;background:linear-gradient(to bottom,rgba(0,0,0,.45),transparent)}
.wed-lb-bar--bottom{justify-content:center;gap:8px;padding-bottom:max(12px,env(safe-area-inset-bottom))}
.wed-lb-caption{margin:0;font-family:var(--font-heading);font-style:italic;font-size:15px;opacity:.9;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wed-lb-count{margin:0;opacity:.75;font-feature-settings:'tnum' 1}
.wed-lb-btn{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;padding:0;border-radius:50%;border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.08);color:#fff;font:500 18px/1 var(--font-body);cursor:pointer;transition:background-color .2s ease}
.wed-lb-btn:hover{background:rgba(255,255,255,.2)}
.wed-lb-btn:focus-visible{outline:2px solid #fff;outline-offset:2px}
.wed-lb-btn:disabled{opacity:.35;cursor:default}
.wed-lb-btn svg{width:20px;height:20px}
.wed-lb-zoom{min-width:58px;border-radius:21px;font-size:12px;letter-spacing:.04em}
.wed-lb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:2}
.wed-lb-nav--prev{left:12px}
.wed-lb-nav--next{right:12px}
@media (max-width:640px){.wed-lb-nav{display:none}.wed-lb-bar--bottom .wed-lb-nav--m{display:inline-flex}}
.wed-lb-nav--m{display:none}
@keyframes wed-lb-in{from{opacity:0}to{opacity:1}}
@media (prefers-reduced-motion:reduce){.wed-lb{animation:none}.wed-lb-img{transition:none}}

/* ===== Countdown ===== */
.wed-cd-row{max-width:960px;margin:0 auto;padding:clamp(40px,6vw,76px) var(--wed-gutter);text-align:center}
.wed-cd-kicker{display:flex;align-items:center;justify-content:center;gap:16px;font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--color-accent-700);margin:0 0 18px}
.wed-cd-rule{flex:1;max-width:120px;height:1px;background:linear-gradient(to right,transparent,var(--color-accent-2))}
.wed-cd-kicker > .wed-cd-rule:last-child{background:linear-gradient(to left,transparent,var(--color-accent-2))}
.wed-cd-when{font-family:var(--font-heading);font-weight:400;font-size:clamp(22px,2.6vw,32px);line-height:1.25;font-feature-settings:'tnum' 1;margin:0 0 clamp(26px,4vw,38px);color:var(--color-text)}
.wed-cd{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border-top:1px solid var(--color-divider);border-bottom:1px solid var(--color-divider);padding:clamp(20px,3vw,30px) 0}
.wed-cd-cell{position:relative;padding:0 clamp(6px,1.5vw,18px)}
.wed-cd-cell + .wed-cd-cell::before{content:"";position:absolute;left:0;top:8%;bottom:26%;width:1px;background:var(--color-divider)}
.wed-cd-cell + .wed-cd-cell::after{content:"";position:absolute;left:-3px;top:50%;width:5px;height:5px;margin-top:-14px;transform:rotate(45deg);background:var(--color-accent-2);opacity:.75}
.wed-cd-num{font-family:var(--font-heading);font-weight:400;font-size:clamp(40px,5.4vw,72px);line-height:1;font-feature-settings:'tnum' 1;margin:0}
.wed-cd-num--days{color:var(--color-accent-700)}
.wed-cd-lbl{font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;color:color-mix(in srgb,var(--color-text) 62%,transparent);margin:14px 0 0}
.wed-cd-sec{animation:wed-tick 1s steps(1,end) infinite}
@keyframes wed-tick{0%,55%{opacity:1}72%{opacity:.62}100%{opacity:1}}
@media (prefers-reduced-motion:reduce){.wed-cd-sec{animation:none}}
.wed-cd-place{font-family:var(--font-heading);font-style:italic;font-size:clamp(15px,1.7vw,19px);line-height:1.6;color:color-mix(in srgb,var(--color-text) 72%,transparent);margin:clamp(22px,3vw,30px) 0 0}

/* ===== The two families ===== */
.wed-families{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:clamp(24px,4vw,56px)}
.wed-person{text-align:center;container-type:inline-size}
.wed-person .wed-label{margin-bottom:18px}
.wed-person figure{margin:0 0 22px;width:100%}
.wed-person .wed-name{font-size:min(13cqw,46px);margin:0 0 10px}
.wed-person-role{font-size:14px;letter-spacing:.06em;text-transform:uppercase;color:color-mix(in srgb,var(--color-text) 60%,transparent);margin:0 0 22px}
.wed-person .hr{margin:0 0 18px}
.wed-parents{display:grid;grid-template-columns:auto auto;justify-content:center;gap:10px 16px;margin:0;font-size:15.5px;line-height:1.6;text-align:left}
.wed-parents dt{color:color-mix(in srgb,var(--color-text) 55%,transparent)}
.wed-parents dd{margin:0}

/* ===== Our story ===== */
.wed-story{position:relative;display:grid;gap:clamp(34px,5vw,64px)}
.wed-story::before{content:"";position:absolute;left:50%;top:6px;bottom:6px;width:1px;background:linear-gradient(to bottom,transparent,var(--color-divider) 8%,var(--color-divider) 92%,transparent)}
.wed-story-row{display:grid;grid-template-columns:1fr 64px 1fr;align-items:center}
.wed-story-row > figure{grid-column:1;margin:0}
.wed-story-text{grid-column:3;text-align:left}
.wed-story-alt > figure{grid-column:3}
.wed-story-alt .wed-story-text{grid-column:1;text-align:right}
.wed-story-row > figure,.wed-story-text{grid-row:1}
.wed-story-row::after{content:"";grid-column:2;grid-row:1;justify-self:center;width:9px;height:9px;transform:rotate(45deg);background:var(--color-bg);border:1px solid var(--color-accent-2);box-shadow:0 0 0 5px var(--color-bg)}
.wed-story-year{font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-feature-settings:'tnum' 1;color:var(--color-accent-700);margin:0 0 10px}
.wed-story-title{font-family:var(--font-heading);font-weight:400;font-size:clamp(24px,2.4vw,32px);line-height:1.2;margin:0 0 10px}
.wed-story-body{font-size:15.5px;line-height:1.75;color:var(--wed-soft);margin:0;max-width:40ch}
.wed-story-alt .wed-story-body{margin-left:auto}

/* ===== Schedule ===== */
.wed-tl-row{display:grid;grid-template-columns:minmax(120px,168px) minmax(0,1fr) auto;gap:clamp(16px,3vw,40px);align-items:start;padding:clamp(22px,3vw,34px) 0;border-top:1px solid var(--color-divider)}
.wed-tl-row:last-child{border-bottom:1px solid var(--color-divider)}
.wed-tl-time{font-family:var(--font-heading);font-weight:400;font-size:clamp(28px,3vw,40px);line-height:1;font-feature-settings:'tnum' 1;margin:0}
.wed-tl-time--main{color:var(--color-accent)}
.wed-tl-date{font-size:13.5px;font-feature-settings:'tnum' 1;letter-spacing:.06em;color:color-mix(in srgb,var(--color-text) 60%,transparent);margin:10px 0 0}
.wed-tl-title{font-family:var(--font-heading);font-weight:400;font-size:clamp(22px,2.2vw,30px);line-height:1.2;margin:8px 0}
.wed-tl-place{font-size:15.5px;line-height:1.65;color:var(--wed-soft);margin:0;max-width:52ch}
.wed-tl-row .tag{margin-bottom:10px}
.wed-tl-row .btn{white-space:nowrap}
.wed-tl-actions{display:flex;flex-direction:column;align-items:stretch;gap:6px}
.wed-cal summary{width:100%}
/* Directions and add-to-calendar buttons in each schedule row: rounded, with an icon, hard to miss */
.wed-act{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:50px;padding:0 24px;border-radius:999px;font-size:15px;font-weight:500;letter-spacing:.02em;white-space:nowrap;cursor:pointer;transition:background-color .25s ease,color .25s ease,transform .25s ease,box-shadow .25s ease}
.wed-act svg{width:20px;height:20px;flex:none}
.wed-act--route{border:1.5px solid var(--wed-primary);background:var(--wed-primary);color:var(--wed-background);box-shadow:0 10px 24px -12px color-mix(in srgb,var(--wed-primary) 80%,transparent)}
.wed-act--route:hover{background:var(--wed-primary-deep);border-color:var(--wed-primary-deep);color:var(--wed-background);transform:translateY(-1px);text-decoration:none}
.wed-act--cal{border:1.5px solid var(--wed-primary);background:color-mix(in srgb,var(--wed-accent) 14%,transparent);color:var(--wed-primary-deep)}
.wed-act--cal:hover,.wed-cal[open] .wed-act--cal{background:color-mix(in srgb,var(--wed-accent) 30%,transparent);transform:translateY(-1px)}
.wed-tl-actions{gap:10px}

/* ===== Album ===== */
/* One wide photo and three portraits: a single row of five tracks on wide screens,
   the wide one on its own row above the three on tablets, a column on phones */
.wed-album{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(14px,2vw,26px);align-items:start}
.wed-album > figure{margin:0}
@media (min-width:560px){
  .wed-album{grid-template-columns:repeat(3,minmax(0,1fr))}
  .wed-album > .wed-wide{grid-column:1 / -1}
}
/* Wide screens, six tracks: a 3:2 landscape over four tracks is as tall as a 3:4 portrait over two,
   so rows stay level; "--full" landscapes take the whole row. Dense packing fills any gaps. */
@media (min-width:960px){
  .wed-album{grid-template-columns:repeat(6,minmax(0,1fr));grid-auto-flow:dense}
  .wed-album > figure{grid-column:span 2}
  .wed-album > .wed-wide{grid-column:span 4}
  .wed-album > .wed-wide--full{grid-column:1 / -1}
}

/* ===== Quote ===== */
.wed-quote{max-width:1200px;margin:0 auto;padding:clamp(44px,6vw,80px) var(--wed-gutter)}
.wed-quote blockquote{font-family:var(--font-heading);font-weight:400;font-size:clamp(24px,3vw,38px);line-height:1.35;letter-spacing:-.005em;max-width:38ch;margin:0 auto;text-align:center}
.wed-quote figcaption{font-size:15.5px;line-height:1.7;color:color-mix(in srgb,var(--color-text) 65%,transparent);margin:clamp(24px,3vw,40px) 0 0;text-align:center}

/* ===== RSVP ===== */
/* RSVP: heading centred above a wide form laid out in two columns, so it reads across rather than down */
.wed-rsvp{display:grid;gap:clamp(28px,4vw,44px);max-width:calc(1040px + 2 * var(--wed-gutter))}
.wed-rsvp-head{text-align:center}
.wed-rsvp .wed-title{margin-bottom:14px}
.wed-rsvp .wed-lead{max-width:52ch;margin:0 auto;font-size:17px}
.wed-form{border:1px solid var(--color-divider);border-radius:var(--radius-md);padding:clamp(22px,3vw,36px);display:grid;gap:22px;align-content:start;font-size:16px}
.wed-form .input{font-size:16px;min-height:46px}
.wed-form .radio,.wed-form .seg-opt{font-size:16px}
.wed-form--rsvp{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:"name side" "events guests" "events note" "actions actions";column-gap:clamp(24px,3.5vw,44px);row-gap:22px}
.wed-form--rsvp .f-name{grid-area:name}
.wed-form--rsvp .f-side{grid-area:side}
.wed-form--rsvp .f-events{grid-area:events}
.wed-form--rsvp .f-guests{grid-area:guests}
.wed-form--rsvp .f-note{grid-area:note}
.wed-form--rsvp .wed-form-actions{grid-area:actions;justify-self:center;width:min(100%,420px)}
@media (max-width:760px){
  .wed-form--rsvp{grid-template-columns:minmax(0,1fr);grid-template-areas:"name" "side" "events" "guests" "note" "actions"}
}
.wed-flabel{display:block;margin-bottom:9px;font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:color-mix(in srgb,var(--color-text) 62%,transparent)}
.wed-events{display:grid;gap:18px;margin-top:2px}
/* Events are grouped by family: Nhà trai (reception + wedding) and Nhà gái (reception + vu quy) */
.wed-ev-group{display:grid;gap:12px;padding:16px 18px 18px;border:1px solid var(--color-divider);border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-surface) 38%,transparent)}
.wed-ev-title{margin:0 0 2px;font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--color-accent-700);display:flex;align-items:center;gap:12px}
.wed-ev-title::after{content:"";flex:1;height:1px;background:var(--color-divider)}
.wed-box{width:16px;height:16px;flex:none;border:1.5px solid var(--color-divider);border-radius:var(--radius-sm);display:inline-block;position:relative}
.radio:hover .wed-box{border-color:var(--color-accent)}
.radio input:checked + .wed-box{border-color:var(--color-accent);background:var(--color-accent);box-shadow:inset 0 0 0 2px var(--color-bg)}
.radio input:focus-visible + .wed-box{outline:2px solid var(--color-accent);outline-offset:2px}
.wed-form textarea.input{min-height:84px}
.wed-form-actions{display:grid;gap:12px;margin-top:2px}
/* Confirm button: filled with the primary colour — the single strong accent on the page.
   .btn.wed-cta outranks ".nav a", so the nav CTA keeps these colours too. */
.btn.wed-cta{background:var(--wed-primary);border-color:var(--wed-primary);color:var(--wed-background);padding-inline:28px;min-height:50px;font-size:15px;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;box-shadow:0 10px 28px -12px color-mix(in srgb,var(--wed-primary) 70%,transparent);transition:background-color .3s ease,transform .3s ease,box-shadow .3s ease}
.btn.wed-cta:hover{background:var(--wed-primary-deep);border-color:var(--wed-primary-deep);color:var(--wed-background);transform:translateY(-1px);box-shadow:0 0 0 4px color-mix(in srgb,var(--wed-accent) 26%,transparent)}
.btn.wed-nav-cta.wed-cta{min-height:40px;font-size:12.5px;padding-inline:18px;box-shadow:none}
.wed-decline{justify-self:center;font-size:13.5px;color:color-mix(in srgb,var(--color-text) 62%,transparent);text-decoration:underline;text-underline-offset:3px;min-height:40px}
.wed-decline:hover{color:var(--color-accent-700);background:transparent}
.wed-form-error,.wed-form-note{font-size:13.5px;line-height:1.6;color:var(--color-accent-700);margin:0;text-align:center}
.wed-field-error{font-size:13px;line-height:1.5;color:var(--wed-danger);margin:6px 0 0}
.field.has-error .input{border-color:var(--wed-danger)}
.field.has-error .wed-box{border-color:var(--wed-danger)}
.wed-optional{text-transform:none;letter-spacing:.02em;opacity:.8}
.wed-guests{width:auto;min-width:132px}
.wed-presets{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.wed-presets:empty{display:none}
/* Honeypot for bots: off-screen rather than display:none, which some bots skip */
.wed-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.wed-sent{border:1px solid var(--color-accent);border-radius:var(--radius-md);padding:clamp(26px,4vw,44px);animation:vpnh-rise .5s ease both;align-self:start;text-align:center}
.wed-sent .wed-label{color:var(--color-accent-700);margin-bottom:16px}
.wed-sent h3{font-family:var(--font-heading);font-weight:400;font-size:clamp(26px,3vw,36px);line-height:1.15;margin:0 0 12px}
.wed-sent .wed-lead{margin:0 auto 20px;max-width:46ch}

/* ===== Gift box ===== */
.wed-gift .wed-title{margin-bottom:12px}
.wed-gift > .wed-lead{margin:0 auto clamp(26px,4vw,40px);max-width:52ch;text-align:center}
.wed-gift-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:clamp(20px,3vw,40px)}
.wed-gift-card{border:1px solid var(--color-divider);border-radius:var(--radius-md);padding:clamp(20px,3vw,30px);display:flex;gap:clamp(16px,2.5vw,26px);align-items:center;flex-wrap:wrap}
.wed-gift-card > div:last-child{flex:1;min-width:150px}
.wed-gift-card .wed-label{margin-bottom:10px}
.wed-gift-card .wed-h3{line-height:1.2;margin-bottom:8px}
.wed-gift-account{font-size:14.5px;line-height:1.6;color:color-mix(in srgb,var(--color-text) 65%,transparent);margin:0 0 14px}

/* ===== Directions ===== */
.wed-place{text-align:center}
.wed-place figure{margin:0 0 20px}
/* Live map: same 16:10 frame the photo used to have */
.wed-map{position:relative;aspect-ratio:16/10;overflow:hidden;background:var(--color-surface)}
.wed-map iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
.wed-place .wed-h3{margin-bottom:10px}
.wed-place p{font-size:15.5px;line-height:1.7;color:var(--wed-soft);margin:0 0 16px}

/* ===== Guestbook ===== */
/* Guestbook: one wish at a time as a large open quote, arrows either side, the form underneath.
   Quote and form share one measure (--wed-wish-measure) so the column reads as a whole. */
.wed-wrap--strip{padding-bottom:0}
.wed-wrap--strip .wed-title{margin-bottom:clamp(8px,1.5vw,16px)}
.wed-wrap--form{max-width:calc(var(--wed-wish-measure) + 2 * var(--wed-gutter));padding-top:clamp(40px,6vw,72px)}
.wed-wrap--form .wed-kicker{margin-bottom:18px}
#luu-but{--wed-wish-measure:720px}
.wed-wishes-strip{display:grid;grid-template-columns:44px minmax(0,var(--wed-wish-measure)) 44px;grid-template-areas:"prev list next" ". count ." ". status .";justify-content:center;align-items:center;column-gap:clamp(16px,3vw,40px);row-gap:clamp(16px,2vw,24px);padding:0 var(--wed-gutter)}
.wed-wishes{grid-area:list;display:flex;align-items:flex-start;gap:40px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;transition:height .4s ease}
.wed-wishes::-webkit-scrollbar{display:none}
.wed-wishes:focus-visible{outline:2px solid var(--color-accent);outline-offset:-2px}
.wed-wishes > .card{flex:0 0 100%;scroll-snap-align:start;justify-content:center;min-height:clamp(200px,26vw,280px);text-align:center;padding:clamp(8px,1.5vw,16px) 0;gap:0;border:0;border-radius:0}
/* The opening quote mark hangs above the wish like a small ornament */
.wed-wishes > .card::before{content:"“";display:block;font-family:var(--font-heading);font-size:clamp(64px,8vw,96px);line-height:.55;height:.45em;color:var(--color-accent);opacity:.55;margin-bottom:clamp(14px,2vw,22px)}
.wed-wish{font-family:var(--font-heading);font-style:italic;font-size:clamp(21px,2.7vw,31px);line-height:1.5;color:var(--color-text);margin:0;text-wrap:balance}
/* Name with a short rule before it, relation underneath in small caps */
.wed-wishes .card-title{display:flex;align-items:center;justify-content:center;gap:12px;margin:clamp(20px,3vw,32px) 0 0;font-size:17px;letter-spacing:.02em}
.wed-wishes .card-title::before{content:"";width:28px;height:1px;background:var(--color-accent);opacity:.7}
.wed-wishes .card-kicker{margin:8px 0 0;font-size:11px;letter-spacing:.14em;color:var(--wed-soft)}
.wed-wish-nav{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border-radius:50%;border:1px solid var(--color-divider);background:transparent;color:var(--color-accent-700);cursor:pointer;transition:background-color .25s ease,border-color .25s ease}
.wed-wish-nav:hover{background:var(--color-accent-100);border-color:var(--color-accent)}
.wed-wish-nav:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}
.wed-wish-prev{grid-area:prev}
.wed-wish-next{grid-area:next}
.wed-wish-count{grid-area:count;margin:0;text-align:center;font-size:12px;letter-spacing:.14em;color:var(--wed-soft)}
.wed-wish-status{grid-area:status;font-family:var(--font-heading);font-style:italic;font-size:17px;line-height:1.6;color:color-mix(in srgb,var(--color-text) 65%,transparent);margin:0;text-align:center}
.wed-wishes:not(:empty) ~ .wed-wish-status{display:none}
@media (max-width:640px){
  .wed-wishes-strip{grid-template-columns:44px minmax(0,1fr) 44px;grid-template-areas:"list list list" "prev count next" "status status status";column-gap:16px}
  .wed-wish-prev{justify-self:end}
  .wed-wish-next{justify-self:start}
}

/* ===== Mobile action bar & footer ===== */
.wed-bar{display:none;position:fixed;left:0;right:0;bottom:0;z-index:40;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--color-bg) 94%,transparent);backdrop-filter:blur(10px);border-top:1px solid var(--color-divider)}
.wed-bar .btn{flex:1;min-height:46px}
.wed-bar .btn.wed-cta{min-height:50px}
/* Big RSVP call to action on computers: larger buttons, a pulsing ring, and a floating pill at the bottom of the
   screen that appears once the guest scrolls past the hero and steps aside when the RSVP form is in view. */
@keyframes wed-cta-glow{
  0%,100%{box-shadow:0 12px 30px -12px color-mix(in srgb,var(--wed-primary) 75%,transparent),0 0 0 0 color-mix(in srgb,var(--wed-accent) 55%,transparent)}
  60%{box-shadow:0 12px 30px -12px color-mix(in srgb,var(--wed-primary) 75%,transparent),0 0 0 16px color-mix(in srgb,var(--wed-accent) 0%,transparent)}}
@media (min-width:861px){
  .btn.wed-nav-cta.wed-cta{min-height:46px;font-size:13.5px;padding-inline:22px}
  .wed-hero-actions{gap:16px;margin-top:34px}
  .wed-hero-actions .btn.wed-cta{min-height:66px;padding-inline:52px;font-size:18px;letter-spacing:.1em;animation:wed-cta-glow 2.6s ease-in-out infinite}
  .wed-hero-actions .btn-secondary{min-height:66px;padding-inline:32px;font-size:16px}
}
@media (min-width:601px){
  .wed-bar{display:flex;left:50%;right:auto;bottom:26px;width:max-content;max-width:calc(100vw - 160px);transform:translateX(-50%);padding:8px;gap:10px;border:1px solid color-mix(in srgb,var(--wed-accent) 55%,transparent);border-radius:999px;box-shadow:0 22px 50px -16px color-mix(in srgb,var(--wed-primary-deep) 55%,transparent);transition:opacity .45s ease,transform .45s ease}
  .wed-bar .btn{flex:none;min-height:50px;padding-inline:28px;border-radius:999px;white-space:nowrap}
  .wed-bar .btn.wed-cta{min-height:66px;padding-inline:54px;font-size:18px;letter-spacing:.1em;animation:wed-cta-glow 2.6s ease-in-out infinite}
  .wed-bar.is-away{opacity:0;pointer-events:none;transform:translate(-50%,22px)}
}
/* Phones: the same rounded floating pill with a pulsing ring, hidden only while the RSVP form is on screen */
@media (max-width:600px){
  .wed-bar{left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));padding:6px;gap:8px;border:1px solid color-mix(in srgb,var(--wed-accent) 55%,transparent);border-radius:999px;box-shadow:0 16px 36px -14px color-mix(in srgb,var(--wed-primary-deep) 55%,transparent);transition:opacity .4s ease,transform .4s ease}
  .wed-bar .btn{border-radius:999px;min-height:46px}
  .wed-bar .btn.wed-cta{min-height:56px;padding-inline:22px;font-size:15px;letter-spacing:.08em;animation:wed-cta-glow 2.6s ease-in-out infinite}
  .wed-bar.in-form{opacity:0;pointer-events:none;transform:translateY(24px)}
}
@media (prefers-reduced-motion:reduce){
  .wed-hero-actions .btn.wed-cta,.wed-bar .btn.wed-cta{animation:none}
}
.wed-footer{border-top:1px solid var(--color-divider)}
.wed-footer > div{max-width:1200px;margin:0 auto;padding:clamp(36px,5vw,64px) var(--wed-gutter);display:flex;flex-direction:column;gap:14px;align-items:center;text-align:center;container-type:inline-size}
.wed-footer .wed-name{font-size:min(9cqw,44px);margin:0;white-space:normal}
.wed-footer-note{font-size:13.5px;letter-spacing:.08em;font-feature-settings:'tnum' 1;color:color-mix(in srgb,var(--color-text) 60%,transparent);margin:0}

/* ===== "truyen-thong" theme: red takes the lead — headings, buttons, countdown band, footer ===== */
[data-wed-theme="truyen-thong"]{--wed-ivory:#f9f3e7}
[data-wed-theme="truyen-thong"] h1,[data-wed-theme="truyen-thong"] h2,[data-wed-theme="truyen-thong"] h3,[data-wed-theme="truyen-thong"] blockquote,[data-wed-theme="truyen-thong"] .nav-brand{color:var(--wed-primary-deep)}
[data-wed-theme="truyen-thong"] .nav{border-top:3px solid var(--wed-primary);border-bottom:1px solid var(--wed-secondary)}
[data-wed-theme="truyen-thong"] .wed-theme-strip{border-bottom-color:var(--wed-secondary)}
[data-wed-theme="truyen-thong"] footer{border-top:2px solid var(--wed-primary)}
[data-wed-theme="truyen-thong"] .btn-primary{background:var(--wed-primary);border-color:var(--wed-primary);color:var(--wed-ivory)}
[data-wed-theme="truyen-thong"] .btn-primary:hover{background:var(--wed-primary-deep);border-color:var(--wed-primary-deep);color:var(--wed-ivory)}
[data-wed-theme="truyen-thong"] .plate{border:1px solid var(--wed-secondary)}
[data-wed-theme="truyen-thong"] .tag-accent,[data-wed-theme="truyen-thong"] .tag-outline{border-color:var(--wed-primary);color:var(--wed-primary-deep)}

/* ===== Deep bands: give the page a light / dark rhythm ===== */
.wed-dark{position:relative;color:var(--wed-dark-ink);border-color:transparent;background:radial-gradient(120% 170% at 50% -30%,color-mix(in srgb,var(--wed-primary) 78%,var(--wed-primary-deep)),var(--wed-primary-deep) 58%,color-mix(in srgb,var(--wed-primary-deep) 66%,#000))}
.wed-dark--photo{background:linear-gradient(180deg,color-mix(in srgb,var(--wed-primary-deep) 94%,transparent),color-mix(in srgb,var(--wed-primary-deep) 88%,transparent)),url("../assets/photos/album-7.webp") center 25%/cover}
.wed-dark .wed-kicker,.wed-dark .wed-cd-kicker{color:var(--wed-dark-gold)}
.wed-dark .wed-cd-rule{background:linear-gradient(to right,transparent,var(--wed-dark-gold))}
.wed-dark .wed-cd-kicker > .wed-cd-rule:last-child{background:linear-gradient(to left,transparent,var(--wed-dark-gold))}
.wed-dark .wed-cd-when,.wed-dark .wed-cd-num{color:var(--wed-dark-ink)}
.wed-dark .wed-cd-num--days{color:var(--wed-dark-gold)}
.wed-dark .wed-cd-lbl{color:color-mix(in srgb,var(--wed-dark-ink) 72%,transparent)}
.wed-dark .wed-cd-place{color:color-mix(in srgb,var(--wed-dark-ink) 80%,transparent)}
.wed-dark .wed-cd{border-color:color-mix(in srgb,var(--wed-dark-gold) 34%,transparent)}
.wed-dark .wed-cd-cell + .wed-cd-cell::before{background:color-mix(in srgb,var(--wed-dark-gold) 30%,transparent)}
.wed-dark .wed-cd-cell + .wed-cd-cell::after{background:var(--wed-dark-gold);opacity:.9}
.wed-dark .wed-quote blockquote{color:var(--wed-dark-ink)}
.wed-dark .wed-quote figcaption{color:color-mix(in srgb,var(--wed-dark-ink) 78%,transparent)}
.wed-quote::before{content:"“";display:block;text-align:center;font-family:var(--font-heading);font-size:clamp(84px,10vw,130px);line-height:.6;height:.5em;color:var(--wed-dark-gold);opacity:.8;margin-bottom:clamp(10px,2vw,22px)}
.wed-footer.wed-dark{border-top:0}
.wed-footer.wed-dark::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(to right,transparent,var(--wed-dark-gold),transparent);opacity:.7}
.wed-footer .wed-name{color:var(--wed-dark-ink)}
.wed-footer .wed-amp{color:var(--wed-dark-gold);margin:0 .12em}
.wed-footer-note{color:color-mix(in srgb,var(--wed-dark-ink) 72%,transparent)}
/* Softly tinted band so the light sections do not all look the same */
.wed-tint{background:color-mix(in srgb,var(--wed-surface) 52%,transparent)}

/* ===== Section details ===== */
/* Timeline diamonds light up once their row has been revealed */
.js .wed-story-row.wed-in::after{background:var(--color-accent-2);box-shadow:0 0 0 5px var(--color-bg),0 0 16px color-mix(in srgb,var(--color-accent-2) 70%,transparent);transition:background .8s ease .35s,box-shadow .8s ease .35s}
/* Album photos rise and settle as they come into view */
.js .wed-album .wed-reveal{transform:translateY(22px) scale(.965)}
.js .wed-album .wed-reveal.wed-in{transform:none}
@media (prefers-reduced-motion:reduce){.js .wed-album .wed-reveal{transform:none}}
/* QR codes get a white mat and a thin gold frame */
.wed-slot--qr{background:#fff;box-shadow:0 0 0 5px var(--color-bg),0 0 0 6px var(--color-accent-2)}

/* ===== Opening: two curtains =====
   Soft drapes on a gold rod, tinted from the active palette. Tapping the button slides them out to either side. */
.wed-intro{display:none}
.intro-on body{overflow:hidden}
.intro-on .wed-intro{display:block;position:fixed;inset:0;z-index:200;overflow:hidden;color:var(--wed-primary-deep);
  --wi-shade:color-mix(in srgb,var(--wed-primary-deep) 22%,transparent);--wi-cloth:color-mix(in srgb,var(--wed-primary) 10%,var(--wed-accent));--wi-glow:color-mix(in srgb,var(--wed-background) 92%,transparent)}
.intro-on .wed-hero-text,.intro-on .wed-hero-photo{animation-play-state:paused}
.intro-on.intro-reveal .wed-hero-text,.intro-on.intro-reveal .wed-hero-photo{animation-play-state:running}
.wed-curtain{position:absolute;top:0;bottom:0;width:50.4%;
  background:
    linear-gradient(180deg,color-mix(in srgb,var(--wed-primary-deep) 34%,transparent) 0,transparent 20%,transparent 78%,var(--wi-shade) 100%),
    repeating-linear-gradient(90deg,var(--wi-shade) 0,transparent 3.6vw,rgba(255,255,255,.2) 6.4vw,rgba(255,255,255,0) 8.4vw,var(--wi-shade) 10.6vw),
    repeating-linear-gradient(90deg,rgba(255,255,255,0) 0,rgba(255,255,255,.1) 4vw,color-mix(in srgb,var(--wed-primary-deep) 10%,transparent) 9vw,rgba(255,255,255,0) 15vw),
    linear-gradient(180deg,color-mix(in srgb,var(--wi-cloth) 55%,#fff),color-mix(in srgb,var(--wi-cloth) 66%,#fff) 55%,color-mix(in srgb,var(--wi-cloth) 78%,#fff));
  transition:transform 1.7s cubic-bezier(.6,0,.25,1) .3s,opacity 1.4s ease .5s;will-change:transform,opacity}
.wed-curtain--left{left:0;transform-origin:0 50%;box-shadow:8px 0 26px -6px color-mix(in srgb,var(--wed-primary-deep) 35%,transparent)}
.wed-curtain--right{right:0;transform-origin:100% 50%;box-shadow:-8px 0 26px -6px color-mix(in srgb,var(--wed-primary-deep) 35%,transparent)}
/* Gold rod along the top */
.wed-rod{position:absolute;z-index:2;left:0;right:0;top:0;height:10px;background:linear-gradient(180deg,#f3dfa8,#c79d52 60%,#a27a35);box-shadow:0 4px 10px color-mix(in srgb,var(--wed-primary-deep) 30%,transparent);transition:opacity 1s ease .5s}
/* The words sit on a soft light so they read clearly over the folds */
.wed-intro-content{position:absolute;z-index:1;left:50%;top:50%;transform:translate(-50%,-50%);width:min(92vw,560px);display:flex;flex-direction:column;align-items:center;text-align:center;isolation:isolate;transition:opacity .4s ease}
.wed-intro-content::before{content:"";position:absolute;z-index:-1;inset:-16% -20%;background:radial-gradient(closest-side,var(--wi-glow),color-mix(in srgb,var(--wed-background) 66%,transparent) 58%,transparent);pointer-events:none}
.wed-intro-kicker{margin:0;font-size:clamp(11px,2.6vw,14px);letter-spacing:.28em;text-transform:uppercase;color:var(--wed-primary)}
.wed-intro-names{display:flex;flex-direction:column;align-items:center;margin:16px 0 0;font-size:clamp(54px,min(17vw,16vh),118px);line-height:1}
.wed-intro-names .wed-name{font-size:inherit;color:var(--wed-primary-deep);-webkit-text-stroke:.7px var(--wed-primary-deep);text-shadow:0 1px 0 rgba(255,255,255,.7),0 6px 30px var(--wi-glow),0 0 14px var(--wi-glow)}
.wed-intro-names .wed-amp{font-size:.55em;color:var(--wed-accent-deep);margin:.02em 0;text-shadow:0 0 12px var(--wi-glow)}
.wed-intro-date{margin:16px 0 0;font-family:var(--font-heading);font-size:clamp(15px,3.8vw,21px);letter-spacing:.16em;font-feature-settings:'tnum' 1;color:var(--wed-primary)}
.wed-intro-dots{display:flex;gap:9px;margin:22px 0}
.wed-intro-dots i{display:block;width:5px;height:5px;border-radius:50%;background:var(--wed-accent-deep)}
/* Pill button */
.wed-open{display:inline-flex;align-items:center;gap:.9em;padding:1.05em 2.2em;border:0;border-radius:999px;cursor:pointer;font:500 clamp(12px,3.2vw,15px)/1 var(--font-body);letter-spacing:.18em;text-transform:uppercase;color:var(--wed-background);background:var(--wed-primary);box-shadow:0 12px 26px -12px color-mix(in srgb,var(--wed-primary) 75%,transparent);transition:background-color .25s ease,transform .25s ease;animation:wed-open-pulse 2.8s ease-in-out infinite}
.wed-open:hover{background:var(--wed-primary-deep)}
.wed-open:focus-visible,.wed-intro-silent:focus-visible{outline:2px solid var(--wed-accent);outline-offset:5px}
.wed-open svg{width:1.4em;height:1.4em}
@keyframes wed-open-pulse{50%{transform:translateY(-2px);box-shadow:0 0 0 8px color-mix(in srgb,var(--wed-primary) 10%,transparent),0 14px 28px -12px color-mix(in srgb,var(--wed-primary) 75%,transparent)}}
.wed-intro-silent{margin-top:14px;padding:8px 10px;background:transparent;border:0;cursor:pointer;font:inherit;font-size:clamp(11px,2.8vw,13px);color:var(--wed-primary);text-decoration:underline;text-underline-offset:4px}
.wed-intro-silent:hover{color:var(--wed-primary-deep)}
/* Opening: the words fade, and each curtain slides out to its side while it fades away */
.wed-intro.is-opening .wed-intro-content{opacity:0;pointer-events:none}
.wed-intro.is-opening .wed-curtain--left{transform:translateX(-100%);opacity:0}
.wed-intro.is-opening .wed-curtain--right{transform:translateX(100%);opacity:0}
.wed-intro.is-opening .wed-rod{opacity:0}
@media (prefers-reduced-motion:reduce){
  .wed-open{animation:none}
  .wed-curtain,.wed-rod,.wed-intro-content{transition:none}
}

/* ===== Music button ===== */
.wed-music{position:fixed;right:18px;bottom:22px;z-index:45;display:grid;place-items:center;width:46px;height:46px;padding:0;cursor:pointer;border-radius:50%;border:1px solid var(--color-accent-2);background:color-mix(in srgb,var(--color-bg) 90%,transparent);backdrop-filter:blur(8px);box-shadow:var(--shadow-md);transition:transform .25s ease,box-shadow .25s ease}
.wed-music:hover{transform:scale(1.06)}
.wed-music:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}
.intro-on .wed-music{display:none}
.wed-eq{position:relative;display:flex;align-items:flex-end;gap:3px;height:18px}
.wed-eq i{display:block;width:3px;height:5px;border-radius:2px;background:var(--wed-primary)}
.wed-music[aria-pressed="true"] .wed-eq i{animation:wed-eq 1.05s ease-in-out infinite}
.wed-eq i:nth-child(2){animation-delay:-.35s!important}
.wed-eq i:nth-child(3){animation-delay:-.7s!important}
.wed-eq i:nth-child(4){animation-delay:-.2s!important}
@keyframes wed-eq{0%,100%{height:5px}50%{height:18px}}
.wed-music[aria-pressed="false"] .wed-eq::after{content:"";position:absolute;left:-4px;right:-4px;top:50%;height:1.5px;background:var(--wed-primary);transform:rotate(-38deg)}
@media (prefers-reduced-motion:reduce){.wed-music[aria-pressed="true"] .wed-eq i{animation:none;height:12px}}
@media (max-width:600px){.wed-music{right:14px;bottom:calc(98px + env(safe-area-inset-bottom))}}

/* ===== Responsive ===== */
/* The nav collapses a little before the 860px layout breakpoint: with no-wrap links and the
   filled CTA, the full bar no longer fits beside the brand below ~960px. */
@media (max-width:960px){
  .wed-nav-links,.wed-nav-cta{display:none}
  .wed-menu{display:block}
}
@media (max-width:860px){
  .wed-tl-row{grid-template-columns:minmax(0,1fr);gap:14px}
  .wed-tl-actions{flex-direction:row;flex-wrap:wrap;align-items:center;gap:10px}
  .wed-tl-actions > .wed-act,.wed-tl-actions > .wed-cal{flex:1 1 160px}
  .wed-cal .wed-pop-list{left:0;right:auto}
}
@media (max-width:820px){
  .wed-story{gap:30px}
  .wed-story::before,.wed-story-row::after{display:none}
  .wed-story-row,.wed-story-alt{grid-template-columns:minmax(0,1fr);gap:16px}
  .wed-story-row > figure,.wed-story-alt > figure{grid-column:1;grid-row:1}
  .wed-story-text,.wed-story-alt .wed-story-text{grid-column:1;grid-row:2;text-align:center}
  .wed-story-body,.wed-story-alt .wed-story-body{margin:0 auto}
}
@media (max-width:600px){
  .wed-cd-row{padding-inline:16px}
  .wed-cd-kicker{font-size:10.5px;letter-spacing:.14em;gap:10px}
  .wed-cd-rule{max-width:34px}
  .wed-cd{padding:16px 0}
  .wed-cd-cell{padding:0 4px}
  .wed-cd-cell + .wed-cd-cell::after{display:none}
  .wed-cd-num{font-size:30px}
  .wed-cd-lbl{font-size:9.5px;letter-spacing:.1em;margin-top:8px}
  .wed-bar{display:flex;padding-bottom:calc(10px + env(safe-area-inset-bottom))}
  .wed-footer{padding-bottom:calc(104px + env(safe-area-inset-bottom))}
  .wed-gift-card{flex-direction:column;align-items:flex-start}
  .wed-theme-strip{padding-inline:16px;gap:8px}
  .wed-theme-strip > span{width:100%}
}
