/* style.css - 100% Exact Wedgo Halcyon Theme Clone (Enhanced Edition) */
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Hanuman:wght@300;400;700;900&family=Kantumruy+Pro:wght@300;400;500;600;700&family=Lora:ital,wght@0,400;0,600;1,400&family=Moul&family=Noto+Serif+Khmer:wght@400;500;600;700;800&family=Raleway:wght@300;400;500;600;700&family=Vidaloka&display=swap');

:root {
  --accent: #356B9E;
  --accent-light: #CDE2F4;
  --accent-dark: #1E3A5F;
  --accent-rose: #BD6E52;
  --accent-copper: #C06A4F;
  --gold: #C59B4E;
  --gold-glow: rgba(197, 155, 78, 0.45);
  --bg-gradient: linear-gradient(180deg, #E6F1F9 0%, #D8E8F5 15%, #CEE2F2 35%, #DCECF7 70%, #EBF4FA 100%);
  --text-dark: #1E2D3D;
  --text-muted: #5B7288;
  --card-bg: rgba(255, 255, 255, 0.94);
  --card-border: 1px solid rgba(74, 136, 189, 0.22);
  --shadow-soft: 0 10px 30px rgba(74, 136, 189, 0.08);
  --shadow-gold: 0 8px 24px rgba(197, 155, 78, 0.22);
  --shadow-sky: 0 8px 24px rgba(74, 136, 189, 0.16);
  --font-kh-muol: 'Khmer OS Muol Light', 'Khmer OS Muol', 'Moul', cursive, serif;
  --font-kh-serif: 'Noto Serif Khmer', 'Kantumruy Pro', serif;
  --font-kh-title: 'Khmer OS Muol Light', 'Khmer OS Muol', 'Moul', cursive, serif;
  --font-kh-body: 'Hanuman', 'Kantumruy Pro', sans-serif;
  --font-en-title: 'Vidaloka', 'Cormorant Garamond', serif;
  --font-en-body: 'Lora', 'Raleway', serif;
}

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  -webkit-tap-highlight-color: transparent;
}

html, body {
  width: 100%;
  min-height: 100vh;
  background: #DCEAF6;
  color: var(--text-dark);
  font-family: var(--font-kh-body);
  overflow-x: hidden;
  scroll-behavior: smooth;
}

@media (min-width: 481px) {
  body {
    background: radial-gradient(ellipse at center top, #E8F2FA 0%, #D2E4F4 50%, #BDD6EC 100%);
    background-attachment: fixed;
  }
}

/* Center Shell on Desktop, Full on Mobile */
.app-container {
  max-width: 440px;
  min-height: 100vh;
  margin: 0 auto;
  background-color: transparent;
  position: relative;
  box-shadow: 0 0 50px rgba(40, 75, 110, 0.18);
  overflow-x: hidden;
}

/* Continuous Full-Length Fixed Floral Background (Frames every section all the way to the end) */
.sky-bg-fixed {
  position: fixed;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 100%;
  max-width: 440px;
  height: 100vh;
  height: 100dvh;
  background-image: url('uploads/sky-floral-bg-new.png');
  background-position: center top;
  background-size: cover;
  background-repeat: no-repeat;
  pointer-events: none;
  z-index: 0;
}

/* Falling Petals Interactive Particle Canvas */
#petals-canvas {
  position: fixed;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 100%;
  max-width: 440px;
  height: 100vh;
  height: 100dvh;
  pointer-events: none;
  z-index: 50;
}

/* =========================================
   1. PRELOADER
   ========================================= */
#preloader {
  position: fixed;
  inset: 0;
  z-index: 999999;
  background: radial-gradient(120% 120% at 50% 35%, #FFFBF7 0%, #FBF4EE 45%, #EFF5F0 100%);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 24px;
  transition: opacity 0.6s ease, visibility 0.6s ease;
}

#preloader.fade-out {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.preloader-monogram {
  font-family: var(--font-en-title);
  font-size: 42px;
  color: var(--accent);
  letter-spacing: 4px;
  animation: wlPreloadBreathe 2.4s ease-in-out infinite;
  text-shadow: 0 4px 16px rgba(216, 144, 116, 0.3);
}

.preloader-dots {
  display: inline-flex;
  gap: 8px;
}

.preloader-dots span {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--accent);
  opacity: 0.35;
  animation: wlPreloadDot 1.1s ease-in-out infinite;
}

.preloader-dots span:nth-child(2) { animation-delay: 0.16s; }
.preloader-dots span:nth-child(3) { animation-delay: 0.32s; }

@keyframes wlPreloadBreathe {
  0%, 100% { transform: scale(1); opacity: 0.95; }
  50% { transform: scale(1.05); opacity: 1; }
}

@keyframes wlPreloadDot {
  0%, 100% { opacity: 0.3; transform: translateY(0); }
  40% { opacity: 1; transform: translateY(-6px); }
}

/* =========================================
   2. CURTAIN OPENING OVERLAY (Sky Blue Silk + Royal Khmer Luxury)
   ========================================= */
#curtain-overlay {
  position: fixed;
  inset: 0;
  z-index: 99999;
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
  background: #1B365D;
  transition: visibility 1.2s ease, opacity 0.6s ease 0.8s;
}

#curtain-overlay.opened {
  visibility: hidden;
  opacity: 0;
  pointer-events: none;
}

/* Center Seam Between Left & Right Curtains */
.curtain-center-seam {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  width: 2px;
  transform: translateX(-50%);
  z-index: 6;
  pointer-events: none;
  background: linear-gradient(180deg, 
    rgba(230, 202, 133, 0) 0%, 
    rgba(255, 235, 179, 0.75) 15%, 
    rgba(212, 175, 55, 1) 50%, 
    rgba(255, 235, 179, 0.75) 85%, 
    rgba(230, 202, 133, 0) 100%);
  box-shadow: 0 0 10px rgba(255, 235, 179, 0.75), 0 0 20px rgba(212, 175, 55, 0.45);
  transition: opacity 0.4s ease;
}

#curtain-overlay.opened .curtain-center-seam {
  opacity: 0;
}

/* Curtain Drapes (Left and Right Panels with Photorealistic Sky Blue Silk) */
.curtain-drape {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 50.5%;
  z-index: 2;
  overflow: hidden;
  transition: transform 1.2s cubic-bezier(0.7, 0, 0.25, 1);
  background-color: #4A76A8;
}

.curtain-left {
  left: 0;
  background-image: url('uploads/curtain-left-bg.jpg?v=skyblue');
  background-size: cover;
  background-position: left center;
  background-repeat: no-repeat;
  box-shadow: inset -8px 0 30px rgba(0, 0, 0, 0.35);
  border-right: 1.5px solid rgba(212, 175, 55, 0.7);
}

.curtain-right {
  right: 0;
  background-image: url('uploads/curtain-right-bg.jpg?v=skyblue');
  background-size: cover;
  background-position: right center;
  background-repeat: no-repeat;
  box-shadow: inset 8px 0 30px rgba(0, 0, 0, 0.35);
  border-left: 1.5px solid rgba(212, 175, 55, 0.7);
}

#curtain-overlay.opened .curtain-left {
  transform: translateX(-100%);
}

#curtain-overlay.opened .curtain-right {
  transform: translateX(100%);
}

/* Soft Cinematic Lighting Overlay on Silk Curtains */
.curtain-lighting-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: radial-gradient(circle at center, transparent 45%, rgba(18, 42, 70, 0.22) 100%);
  mix-blend-mode: multiply;
}

/* Ambient Floating Bokeh / Sparkles & Warm Falling Petals */
.curtain-sparkles {
  position: absolute;
  inset: 0;
  z-index: 5;
  pointer-events: none;
  overflow: hidden;
}

.sparkle {
  position: absolute;
  border-radius: 50%;
  background: radial-gradient(circle, #FFF2CC 0%, rgba(229, 186, 108, 0.8) 60%, transparent 100%);
  box-shadow: 0 0 8px #FFE8B2, 0 0 16px rgba(212, 175, 55, 0.6);
  opacity: 0;
  animation: sparkleFloat 4s ease-in-out infinite;
}

.sparkle.s1 { width: 5px; height: 5px; left: 16%; top: 25%; animation-delay: 0s; }
.sparkle.s2 { width: 7px; height: 7px; left: 24%; top: 68%; animation-delay: 1.2s; }
.sparkle.s3 { width: 4px; height: 4px; left: 32%; top: 40%; animation-delay: 2.1s; }
.sparkle.s4 { width: 6px; height: 6px; left: 78%; top: 22%; animation-delay: 0.6s; }
.sparkle.s5 { width: 8px; height: 8px; left: 84%; top: 62%; animation-delay: 1.8s; }
.sparkle.s6 { width: 4px; height: 4px; left: 70%; top: 80%; animation-delay: 2.7s; }
.sparkle.s7 { width: 5px; height: 5px; left: 48%; top: 12%; animation-delay: 0.9s; }
.sparkle.s8 { width: 6px; height: 6px; left: 52%; top: 88%; animation-delay: 2.3s; }

@keyframes sparkleFloat {
  0% { transform: translateY(0) scale(0.6); opacity: 0; }
  50% { transform: translateY(-18px) scale(1.15); opacity: 0.85; }
  100% { transform: translateY(-36px) scale(0.6); opacity: 0; }
}

/* Floating Warm Rose Petals */
.curtain-petal {
  position: absolute;
  width: 13px;
  height: 19px;
  background: radial-gradient(circle at 35% 35%, #FFF0EB 0%, #F5B5A7 40%, #D97E6C 85%, #AA4937 100%);
  border-radius: 50% 0 50% 50%;
  transform: rotate(35deg);
  opacity: 0;
  filter: drop-shadow(0 2px 5px rgba(90, 25, 10, 0.35));
  animation: curtainPetalFall 7.5s ease-in-out infinite;
  pointer-events: none;
}

.curtain-petal.cp1 { top: -20px; left: 14%; animation-delay: 0.3s; transform: scale(0.9) rotate(25deg); }
.curtain-petal.cp2 { top: -20px; left: 26%; animation-delay: 3.5s; transform: scale(1.05) rotate(50deg); }
.curtain-petal.cp3 { top: -20px; left: 66%; animation-delay: 1.5s; transform: scale(0.85) rotate(-30deg); }
.curtain-petal.cp4 { top: -20px; left: 84%; animation-delay: 4.8s; transform: scale(1) rotate(42deg); }
.curtain-petal.cp5 { top: -20px; left: 46%; animation-delay: 6.2s; transform: scale(0.75) rotate(-22deg); }

@keyframes curtainPetalFall {
  0% {
    top: -20px;
    opacity: 0;
    transform: translateX(0) rotate(15deg) scale(0.8);
  }
  15% {
    opacity: 0.85;
  }
  85% {
    opacity: 0.85;
  }
  100% {
    top: 105vh;
    opacity: 0;
    transform: translateX(40px) rotate(180deg) scale(1);
  }
}

/* =========================================
   Central Royal Khmer Ivory Invitation Card
   ========================================= */
.curtain-card {
  position: relative;
  z-index: 10;
  width: 90%;
  max-width: 410px;
  height: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  background: linear-gradient(172deg, #FFFFFF 0%, #FFFDF9 25%, #FAF5EE 65%, #F4ECE0 100%);
  border: 1.5px solid rgba(218, 185, 115, 0.75);
  border-radius: 26px;
  box-shadow: 
    0 24px 60px rgba(45, 12, 5, 0.38), 
    0 8px 22px rgba(181, 93, 75, 0.18),
    inset 0 1px 2px rgba(255, 255, 255, 0.9);
  animation: wlCurtainCardIn 0.85s cubic-bezier(0.16, 1, 0.3, 1) both;
  transition: opacity 0.5s ease, transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
  box-sizing: border-box;
  overflow: visible;
}

#curtain-overlay.opened .curtain-card {
  opacity: 0;
  transform: scale(0.88) translateY(28px);
  pointer-events: none;
}

@keyframes wlCurtainCardIn {
  from { opacity: 0; transform: scale(0.9) translateY(24px); }
  to { opacity: 1; transform: scale(1) translateY(0); }
}

/* Card Inset Hairline Frame */
.card-inner-frame {
  position: absolute;
  inset: 7px;
  border: 1px solid rgba(218, 185, 115, 0.45);
  border-radius: 19px;
  pointer-events: none;
  z-index: 1;
}

/* 4 Corner Ornaments */
.card-corner-ornament {
  position: absolute;
  width: 76px;
  height: 76px;
  pointer-events: none;
  z-index: 2;
}

.corner-tl {
  top: -1px;
  left: -1px;
}

.corner-tr {
  top: -1px;
  right: -1px;
  transform: scaleX(-1);
}

.corner-bl {
  bottom: -1px;
  left: -1px;
  transform: scaleY(-1);
}

.corner-br {
  bottom: -1px;
  right: -1px;
  transform: scale(-1);
}

/* Monogram Seal Capping Top of Card */
.curtain-seal-wrap {
  position: absolute;
  top: -6px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 5;
  pointer-events: none;
  display: flex;
  justify-content: center;
  align-items: center;
}

.curtain-seal-img {
  width: 172px;
  height: auto;
  display: block;
  filter: drop-shadow(0 4px 10px rgba(70, 25, 10, 0.25));
}

.card-content-wrap {
  position: relative;
  z-index: 3;
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 80px 26px 36px;
  box-sizing: border-box;
}

/* Card Typography */
.curtain-title {
  font-family: var(--font-kh-muol);
  font-size: 21.5px;
  font-weight: 400;
  color: #164A7E;
  margin: 0 0 6px;
  line-height: 1.45;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.85);
  letter-spacing: 0.25px;
  overflow: visible;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

.curtain-subtitle {
  font-family: var(--font-kh-serif);
  font-size: 13.5px;
  font-weight: 400;
  color: #496A8B;
  margin: 0 0 16px;
  line-height: 1.6;
  letter-spacing: 0.2px;
  overflow: visible;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

/* Ornate Dividers */
.curtain-divider-top-wrap {
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 0 0 14px;
  width: 100%;
}

.curtain-divider-top-img {
  width: 154px;
  height: auto;
  display: block;
  filter: drop-shadow(0 1px 1px rgba(180, 130, 60, 0.25));
}

.curtain-divider-bottom-wrap {
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 0 0 18px;
  width: 100%;
}

.curtain-divider-bottom-img {
  width: 154px;
  height: auto;
  display: block;
  filter: drop-shadow(0 1px 1px rgba(180, 130, 60, 0.25));
}

/* Prominent Gold-Framed Guest Name Box */
.curtain-guest-box {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin: 0 auto 14px;
  padding: 7px 24px;
  max-width: 86%;
  background: linear-gradient(180deg, #FFFDF8 0%, #FFF5EB 100%);
  border: 1px solid rgba(212, 175, 55, 0.52);
  border-radius: 9999px;
  box-shadow: 0 2px 10px rgba(180, 130, 60, 0.12), inset 0 1px 1.5px #FFFFFF;
  animation: wlCurtainGuestFadeIn 0.5s ease-out both;
}

.guest-box-wing {
  color: #C5923E;
  font-size: 13px;
  line-height: 1;
  user-select: none;
  opacity: 0.9;
}

.curtain-guest-name {
  font-family: var(--font-kh-serif);
  font-size: 16px;
  font-weight: 600;
  color: #875414;
  letter-spacing: 0.25px;
  line-height: 1.5;
  word-break: break-word;
  overflow-wrap: break-word;
  white-space: normal;
  text-align: center;
  overflow: visible;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

@keyframes wlCurtainGuestFadeIn {
  from { opacity: 0; transform: translateY(-4px) scale(0.97); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* Couple Names with Elegant Noto Serif Khmer Bold & Sky Blue Tone */
.curtain-names {
  font-family: var(--font-kh-serif);
  font-size: 21px;
  font-weight: 700;
  line-height: 1.7;
  padding: 8px 12px 6px;
  margin: -4px 0 20px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  overflow: visible;
  color: #236DB1;
  background: none;
  -webkit-background-clip: initial;
  -webkit-text-fill-color: initial;
  filter: drop-shadow(0 1px 1px rgba(255, 255, 255, 0.7));
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

.curtain-names .groom-name,
.curtain-names .bride-name {
  display: inline;
  font-family: var(--font-kh-serif);
  font-weight: 700;
  color: #236DB1;
  -webkit-text-fill-color: #236DB1;
  line-height: inherit;
  overflow: visible;
  letter-spacing: 0.3px;
}

.curtain-names .amp {
  font-family: var(--font-en-title);
  font-weight: 400;
  color: #C99B43;
  -webkit-text-fill-color: #C99B43;
  font-size: 22px;
  margin: 0 8px;
  line-height: inherit;
}

/* Curtain Button Group with Khmer Traditional Dividers Above & Below */
.curtain-btn-group {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin: 4px auto 0;
  width: 100%;
}

.curtain-btn-divider-top,
.curtain-btn-divider-bottom {
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  pointer-events: none;
  user-select: none;
}

.curtain-btn-divider-top svg,
.curtain-btn-divider-bottom svg {
  display: block;
  filter: drop-shadow(0 1px 1px rgba(197, 155, 78, 0.25));
}

/* Action Button "បើកធៀបអញ្ជើញ" Styled as Royal Khmer Ornamental Plaque */
.open-invite-btn.open-invite-plaque-btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 232px;
  max-width: 90%;
  height: 48px;
  padding: 0;
  background: transparent;
  border: none;
  border-radius: 0;
  box-shadow: none;
  cursor: pointer;
  outline: none;
  filter: drop-shadow(0 4px 12px rgba(180, 130, 60, 0.22));
  transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), filter 0.25s ease;
  animation: wlPlaqueFloat 3s ease-in-out infinite;
}

.open-invite-btn.open-invite-plaque-btn .plaque-svg-bg {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: block;
  pointer-events: none;
}

.open-invite-btn.open-invite-plaque-btn .open-btn-text {
  position: relative;
  z-index: 2;
  font-family: var(--font-kh-serif);
  font-weight: 600;
  font-size: 15.5px;
  color: #875414;
  letter-spacing: 0.35px;
  line-height: 1.4;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.9);
  pointer-events: none;
  user-select: none;
}

.open-invite-btn.open-invite-plaque-btn:hover {
  transform: translateY(-5px) scale(1.015);
  filter: drop-shadow(0 8px 18px rgba(180, 130, 60, 0.34));
}

.open-invite-btn.open-invite-plaque-btn:active {
  transform: translateY(-1px) scale(0.98);
  filter: drop-shadow(0 2px 6px rgba(180, 130, 60, 0.2));
}

/* Gentle floating animation: up/down by 4px, 3s duration, ease-in-out, infinite */
@keyframes wlPlaqueFloat {
  0%, 100% {
    transform: translateY(0);
    filter: drop-shadow(0 4px 12px rgba(180, 130, 60, 0.22));
  }
  50% {
    transform: translateY(-4px);
    filter: drop-shadow(0 8px 18px rgba(180, 130, 60, 0.32));
  }
}

@media (prefers-reduced-motion: reduce) {
  .open-invite-btn.open-invite-plaque-btn {
    animation: none;
    transform: none;
  }
}

/* Mobile Responsiveness for Curtain Opening Screen */
@media (max-width: 480px) {
  .curtain-left {
    background-position: left center;
  }
  .curtain-right {
    background-position: right center;
  }
  .curtain-card {
    width: 90%;
    max-width: 340px;
    height: auto;
    border-radius: 22px;
  }
  .card-inner-frame {
    inset: 6px;
    border-radius: 16px;
  }
  .card-corner-ornament {
    width: 58px;
    height: 58px;
  }
  .corner-tl {
    top: -1px;
    left: -1px;
  }
  .corner-tr {
    top: -1px;
    right: -1px;
  }
  .corner-bl {
    bottom: -1px;
    left: -1px;
  }
  .corner-br {
    bottom: -1px;
    right: -1px;
  }
  .curtain-seal-wrap {
    top: -6px;
  }
  .curtain-seal-img {
    width: 138px;
  }
  .card-content-wrap {
    padding: 66px 16px 28px;
    height: auto;
  }
  .curtain-title {
    font-size: 19px;
    margin-bottom: 4px;
    line-height: 1.45;
  }
  .curtain-subtitle {
    font-size: 12px;
    margin-bottom: 12px;
    line-height: 1.55;
  }
  .curtain-divider-top-wrap {
    margin-bottom: 11px;
  }
  .curtain-divider-top-img {
    width: 128px;
  }
  .curtain-guest-box {
    margin-bottom: 11px;
    padding: 6px 18px;
    max-width: 90%;
  }
  .curtain-guest-name {
    font-size: 15px;
    line-height: 1.45;
  }
  .curtain-divider-bottom-wrap {
    margin-bottom: 13px;
  }
  .curtain-divider-bottom-img {
    width: 128px;
  }
  .curtain-names {
    font-size: 19px;
    line-height: 1.7;
    padding: 6px 10px 4px;
    margin: -3px 0 16px;
    overflow: visible;
  }
  .curtain-names .amp {
    font-size: 20px;
    margin: 0 6px;
  }
  .open-invite-btn.open-invite-plaque-btn {
    width: 224px;
    height: 46px;
  }
  .open-invite-btn.open-invite-plaque-btn .open-btn-text {
    font-size: 14.8px;
  }
}

/* =========================================
   4. FLOATING CONTROLS
   ========================================= */
.floating-controls {
  position: fixed;
  bottom: 20px;
  right: 20px;
  z-index: 900;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.float-btn {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.94);
  border: 1px solid var(--gold);
  color: var(--accent);
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.12);
  backdrop-filter: blur(8px);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: transform 0.2s, background-color 0.2s;
  font-size: 14px;
  font-weight: 700;
}

.float-btn:hover {
  transform: scale(1.08);
}

.music-btn.playing svg {
  animation: spinDisc 4s linear infinite;
}

@keyframes spinDisc {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* =========================================
   5. PANEL 2: MAIN INVITATION (Clean Sky Blue Luxury)
   ========================================= */
.sky-main-section {
  position: relative;
  z-index: 1;
  text-align: center;
  padding: 24px 16px 0;
  overflow: hidden;
}

/* Top Welcome Header */
.sky-top-header {
  margin-bottom: 14px;
  position: relative;
  z-index: 2;
}

.sky-top-welcome {
  font-family: var(--font-kh-body);
  font-size: 13px;
  font-weight: 600;
  color: #4A657D;
  margin-bottom: 3px;
  letter-spacing: 0.2px;
}

.sky-top-guest-badge {
  font-family: var(--font-kh-body);
  font-size: 14px;
  font-weight: 700;
  color: #356B9E;
  background: rgba(255, 255, 255, 0.9);
  border: 1px solid rgba(74, 136, 189, 0.35);
  border-radius: 9999px;
  padding: 4px 16px;
  margin: 4px auto 6px;
  box-shadow: 0 2px 6px rgba(74, 136, 189, 0.1);
  display: inline-block;
}

.sky-top-names {
  font-family: var(--font-kh-title);
  font-size: 19px;
  font-weight: 700;
  color: #BD6E52;
  line-height: 1.45;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.sky-top-guest-name {
  font-family: var(--font-kh-title);
  font-size: 20px;
  font-weight: 700;
  color: #875414;
  line-height: 1.45;
  display: inline-block;
  letter-spacing: 0.3px;
  text-shadow: 0 1px 2px rgba(255, 255, 255, 0.85);
}

.sky-top-names .amp {
  font-family: var(--font-en-title);
  font-size: 20px;
  color: #C59B4E;
  margin: 0 5px;
}

/* Hero Arch Couple Photo Framed with Floral Garland Wreath */
.hero-arch-wrapper {
  position: relative;
  width: 224px;
  max-width: 75vw;
  aspect-ratio: 490 / 610;
  margin: 0 auto 16px;
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 112px 112px 12px 12px;
  border: 2px solid #C9A45D;
  box-sizing: border-box;
  overflow: hidden;
  filter: drop-shadow(0 8px 24px rgba(35, 65, 95, 0.2));
  animation: wlArchBreathe 6s ease-in-out infinite alternate;
}

.hero-arch-wrapper::after {
  content: "";
  position: absolute;
  top: 4px;
  left: 4px;
  right: 4px;
  bottom: 4px;
  border: 1px solid #E8D5A3;
  border-radius: 106px 106px 6px 6px;
  pointer-events: none;
  z-index: 2;
  box-sizing: border-box;
}

.hero-arch-img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  object-position: center top;
  border-radius: 110px 110px 10px 10px;
}

@keyframes wlArchBreathe {
  0% { transform: scale(1); }
  100% { transform: scale(1.02); }
}

/* Main Wedding Typography */
.sky-couple-title {
  font-family: var(--font-kh-muol);
  font-size: 21.5px;
  font-weight: 400;
  color: #164A7E;
  margin: 0 0 5px;
  letter-spacing: 0.25px;
  line-height: 1.45;
  overflow: visible;
}

.sky-couple-subtitle {
  font-family: var(--font-kh-serif);
  font-size: 14.5px;
  font-weight: 500;
  color: #3C638A;
  margin: 0 0 10px;
  line-height: 1.6;
  letter-spacing: 0.2px;
  overflow: visible;
}

/* Guest Name Ivory-and-Gold Capsule */
.sky-main-guest-box {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin: 0 auto 10px;
  padding: 6px 22px;
  background: linear-gradient(180deg, #FFFDF8 0%, #FFF5EB 100%);
  border: 1px solid rgba(212, 175, 55, 0.55);
  border-radius: 9999px;
  box-shadow: 0 2px 10px rgba(180, 130, 60, 0.12), inset 0 1px 1.5px #FFFFFF;
}

.sky-main-guest-box .guest-box-wing {
  color: #C99B43;
  font-size: 11px;
  line-height: 1;
  user-select: none;
}

.sky-main-guest-name {
  font-family: var(--font-kh-serif);
  font-size: 15px;
  font-weight: 600;
  color: #875414;
  letter-spacing: 0.2px;
  line-height: 1.4;
  overflow: visible;
  text-align: center;
}

/* Subtle Gold Divider */
.sky-main-divider {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin: 0 auto 12px;
}

.sky-main-divider .divider-dash {
  display: inline-block;
  width: 28px;
  height: 1px;
  background: linear-gradient(90deg, transparent, #C59B4E, transparent);
}

.sky-main-divider .divider-heart {
  font-size: 11px;
  line-height: 1;
}

.sky-main-couple-names {
  font-family: var(--font-kh-serif);
  font-size: 21.5px;
  font-weight: 700;
  color: #236DB1;
  line-height: 1.65;
  margin: 0 0 16px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  overflow: visible;
}

.sky-main-couple-names .groom-name,
.sky-main-couple-names .bride-name {
  display: inline;
  color: #236DB1;
  -webkit-text-fill-color: #236DB1;
  line-height: inherit;
  overflow: visible;
}

.sky-main-couple-names .amp {
  font-family: var(--font-en-title);
  font-size: 24px;
  font-weight: 400;
  color: #C99B43;
  -webkit-text-fill-color: #C99B43;
  margin: 0 7px;
  line-height: inherit;
}

/* Date Pill Badge */
.sky-date-pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  background: rgba(255, 255, 255, 0.95);
  border: 1px solid rgba(74, 136, 189, 0.32);
  border-radius: 9999px;
  padding: 8px 24px;
  font-family: var(--font-kh-serif);
  font-size: 14.5px;
  font-weight: 600;
  color: #1A4D7C;
  box-shadow: 0 3px 12px rgba(74, 136, 189, 0.1);
  margin-bottom: 18px;
}

.sky-date-pill .pill-cal-icon {
  font-size: 14px;
  line-height: 1;
}

/* Quick Action Cards (Calendar & Share) */
.sky-action-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  max-width: 320px;
  margin: 0 auto;
  position: relative;
  z-index: 2;
}

.sky-action-card {
  background: #FFFFFF;
  border: 1px solid rgba(74, 136, 189, 0.22);
  border-radius: 16px;
  padding: 12px 10px 10px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(74, 136, 189, 0.08);
  transition: transform 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
  font-family: inherit;
}

.sky-action-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 20px rgba(74, 136, 189, 0.15);
  background: #F8FBFE;
}

.sky-action-card:active {
  transform: scale(0.98);
}

.action-card-icon {
  margin-bottom: 5px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.action-card-title {
  font-family: var(--font-kh-serif);
  font-size: 13.5px;
  font-weight: 600;
  color: #20364F;
  line-height: 1.4;
}

.action-card-sub {
  font-family: var(--font-en-body);
  font-size: 10px;
  color: #6C8299;
  margin-top: 1px;
}

/* Parents Luxury Card */
.sky-parents-luxury-card {
  background: rgba(255, 255, 255, 0.95);
  border: 1px solid rgba(212, 175, 55, 0.45);
  border-radius: 18px;
  padding: 14px 12px;
  box-shadow: 0 8px 24px rgba(74, 136, 189, 0.08);
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  max-width: 320px;
  margin: 0 auto;
  box-sizing: border-box;
  position: relative;
  z-index: 2;
}

.sky-parent-column {
  background: #FFFFFF;
  border: 1px solid rgba(74, 136, 189, 0.16);
  border-radius: 14px;
  padding: 16px 8px 14px;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  box-shadow: 0 2px 8px rgba(74, 136, 189, 0.04);
}

.sky-parent-icon-badge {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: #4A88BD;
  color: #FFFFFF;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 8px;
  box-shadow: 0 2px 8px rgba(74, 136, 189, 0.35);
}

.sky-parent-role {
  font-family: var(--font-kh-serif);
  font-size: 13.5px;
  font-weight: 600;
  color: #BD6E52;
  margin-bottom: 8px;
  letter-spacing: 0.2px;
  line-height: 1.5;
}

.sky-parent-names {
  font-family: var(--font-kh-serif);
  font-size: 14.5px;
  font-weight: 500;
  color: #20364F;
  line-height: 1.65;
}

/* Romantic Quote Section */
.sky-quote-wrap {
  text-align: center;
  padding: 6px 16px 20px;
  position: relative;
  z-index: 2;
}

.sky-quote-mark {
  font-family: var(--font-en-title);
  font-size: 38px;
  line-height: 1;
  color: #C59B4E;
  margin-bottom: 4px;
}

.sky-quote-text {
  font-family: var(--font-kh-serif);
  font-size: 14.5px;
  line-height: 1.8;
  color: #8C5E3C;
  font-weight: 500;
  font-style: normal;
}

.sky-quote-heart-divider {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  margin-top: 14px;
  margin-bottom: 2px;
  position: relative;
  z-index: 5;
}

.quote-dash {
  display: inline-block;
  width: 32px;
  height: 1px;
  background: linear-gradient(90deg, transparent, #C59B4E, transparent);
}

.quote-heart {
  font-size: 15px;
  line-height: 1;
}

/* ===================================================
   5B. LUXURY KHMER BLESSING & APPRECIATION CARD
   =================================================== */
.sky-blessing-luxury-card {
  position: relative;
  background: linear-gradient(180deg, #FFFFFF 0%, #FDFBF7 45%, #FAF5EE 100%);
  border: 1.5px solid #C9A45D;
  border-radius: 20px;
  padding: 24px 18px 22px;
  box-shadow: 0 8px 24px rgba(22, 74, 126, 0.08), 0 2px 6px rgba(201, 164, 93, 0.12);
  overflow: hidden;
  box-sizing: border-box;
  text-align: center;
  margin-bottom: 22px;
  width: 100%;
}

/* Inner delicate champagne-gold rounded outline with 4px gap */
.sky-blessing-luxury-card::before {
  content: '';
  position: absolute;
  top: 4px;
  left: 4px;
  right: 4px;
  bottom: 4px;
  border: 1px solid #E8D5A3;
  border-radius: 16px;
  pointer-events: none;
  z-index: 1;
}

/* 4 Corner Floral Decorations */
.blessing-corner-flower {
  position: absolute;
  pointer-events: none;
  z-index: 2;
  object-fit: contain;
}
.blessing-flower-tl {
  top: 3px;
  left: 3px;
  width: 65px;
  height: auto;
}
.blessing-flower-tr {
  top: 3px;
  right: 3px;
  width: 68px;
  height: auto;
}
.blessing-flower-bl {
  bottom: 3px;
  left: 3px;
  width: 66px;
  height: auto;
  transform: scaleX(-1);
}
.blessing-flower-br {
  bottom: 3px;
  right: 3px;
  width: 66px;
  height: auto;
}

/* Content Wrapper */
.blessing-content {
  position: relative;
  z-index: 3;
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* Top Refined Gold Crown/Scroll Ornament */
.blessing-top-ornament {
  width: 100px;
  height: auto;
  margin-bottom: 7px;
  display: block;
  filter: drop-shadow(0 1px 2px rgba(201, 164, 93, 0.35));
}

/* Royal-Blue Khmer Heading */
.blessing-heading {
  font-family: var(--font-kh-serif);
  font-size: 16px;
  font-weight: 700;
  color: #164A7E;
  margin: 0 0 6px 0;
  line-height: 1.4;
  letter-spacing: 0.15px;
  text-shadow: 0 1px 2px rgba(22, 74, 126, 0.12);
  padding: 0 4px;
  white-space: nowrap;
}

/* Middle Refined Gold Divider */
.blessing-mid-divider {
  width: 120px;
  height: auto;
  margin: 0 auto 12px;
  display: block;
  filter: drop-shadow(0 1px 1px rgba(201, 164, 93, 0.3));
}

/* Khmer Paragraph Message */
.blessing-message-text {
  font-family: var(--font-kh-serif);
  font-size: 13.5px;
  font-weight: 500;
  color: #20364F;
  line-height: 1.85;
  letter-spacing: 0.15px;
  text-align: center;
  margin: 0 0 12px 0;
  padding: 0 6px;
  user-select: text;
  -webkit-user-select: text;
}

/* Bottom Refined Gold Divider (Intertwined Hearts) */
.blessing-bottom-divider {
  width: 130px;
  height: auto;
  display: block;
  filter: drop-shadow(0 1px 1px rgba(201, 164, 93, 0.3));
}

@media (max-width: 375px) {
  .sky-blessing-luxury-card {
    padding: 20px 12px 18px;
    border-radius: 18px;
  }
  .sky-blessing-luxury-card::before {
    border-radius: 14px;
  }
  .blessing-heading {
    font-size: 15px;
    white-space: normal;
  }
  .blessing-message-text {
    font-size: 13px;
    line-height: 1.8;
  }
  .blessing-flower-tl,
  .blessing-flower-tr,
  .blessing-flower-bl,
  .blessing-flower-br {
    width: 56px;
  }
}

/* =========================================
   6. PANEL 3: CALENDAR, COUNTDOWN & TIMELINE
   ========================================= */
.sky-sections-wrapper {
  position: relative;
  z-index: 1;
  padding: 8px 0 24px;
}

.sky-panel-heading {
  font-family: var(--font-kh-muol);
  font-size: 18px;
  font-weight: 400;
  color: #164A7E;
  text-align: center;
  margin: 24px 0 16px;
  letter-spacing: 0.3px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
}

.sky-panel-heading::before,
.sky-panel-heading::after {
  content: "";
  display: inline-block;
  width: 26px;
  height: 1.5px;
  background: linear-gradient(90deg, #E5BA6C, #C5923E);
  border-radius: 1px;
}

/* Wedding Calendar Card */
.wedding-calendar-card {
  position: relative;
  background: rgba(255, 255, 255, 0.96);
  border: 1px solid rgba(212, 175, 55, 0.45);
  border-radius: 20px;
  padding: 22px 16px 20px;
  max-width: 346px;
  width: 100%;
  margin: 0 auto 18px;
  box-shadow: 0 8px 24px rgba(74, 136, 189, 0.08), 0 2px 8px rgba(212, 175, 55, 0.08);
  box-sizing: border-box;
  overflow: hidden;
}

.cal-month-year {
  font-family: var(--font-kh-title);
  font-size: 21.5px;
  font-weight: 700;
  color: #1A5488;
  text-align: center;
  margin: 0 0 16px;
  letter-spacing: 0.4px;
  line-height: 1.35;
}

.cal-weekdays-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
  margin-bottom: 12px;
  text-align: center;
}

.cal-weekdays-grid span {
  font-family: var(--font-kh-serif);
  font-size: 14px;
  font-weight: 700;
  color: #4B739B;
  user-select: none;
}

.cal-days-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 8px 2px;
  text-align: center;
  align-items: center;
  justify-items: center;
  position: relative;
  z-index: 1;
}

.cal-day-cell {
  width: 38px;
  height: 38px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-kh-serif);
  font-size: 16px;
  font-weight: 600;
  color: #203F60;
  border-radius: 50%;
  box-sizing: border-box;
  transition: transform 0.2s ease, background-color 0.2s ease;
}

.cal-day-cell.empty {
  pointer-events: none;
  visibility: hidden;
}

/* Special Wedding Day Highlight Badge (Day 21) - Solid Sky Blue Circle */
.cal-day-cell.special-wedding-day {
  width: 38px;
  height: 38px;
  border: 1px solid rgba(255, 235, 175, 0.9);
  background: linear-gradient(135deg, #3273AD 0%, #1E5080 100%);
  color: #FFFFFF;
  font-weight: 700;
  font-size: 17px;
  border-radius: 50%;
  box-shadow: 0 4px 14px rgba(46, 109, 164, 0.45), 0 0 0 2px rgba(212, 175, 55, 0.5);
  position: relative;
  z-index: 2;
  animation: specialDayBreath 3s ease-in-out infinite;
}

@keyframes specialDayBreath {
  0%, 100% {
    box-shadow: 0 4px 14px rgba(46, 109, 164, 0.45), 0 0 0 2px rgba(212, 175, 55, 0.5);
    transform: scale(1);
  }
  50% {
    box-shadow: 0 6px 18px rgba(46, 109, 164, 0.6), 0 0 0 4px rgba(212, 175, 55, 0.2);
    transform: scale(1.06);
  }
}

/* 4 Separate Luxury Countdown Pill Cards */
.countdown-grid-luxury {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  max-width: 346px;
  width: 100%;
  margin: 0 auto 28px;
  box-sizing: border-box;
}

.countdown-pill-card {
  background: #FFFFFF;
  border: 1px solid rgba(212, 175, 55, 0.38);
  border-radius: 16px;
  padding: 12px 2px 10px;
  text-align: center;
  box-shadow: 0 4px 14px rgba(74, 136, 189, 0.08), 0 1px 3px rgba(212, 175, 55, 0.08);
  position: relative;
  overflow: hidden;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.countdown-pill-card .countdown-num {
  font-family: 'Raleway', 'Cormorant Garamond', sans-serif;
  font-size: 26.5px;
  font-weight: 700;
  color: #1A5488;
  line-height: 1.1;
  margin-bottom: 3px;
  letter-spacing: 0.5px;
  font-variant-numeric: tabular-nums;
}

.countdown-pill-card .countdown-label {
  font-family: var(--font-kh-serif);
  font-size: 13px;
  font-weight: 600;
  color: #527599;
  line-height: 1.4;
}

/* Ceremony Timeline Section */
.sky-timeline-section {
  position: relative;
  overflow: hidden;
  padding: 0 0 20px;
}

.sky-timeline-card-wrapper {
  background: transparent;
  border: none;
  border-radius: 0;
  padding: 8px 4px 16px;
  max-width: 350px;
  width: 100%;
  margin: 0 auto;
  box-shadow: none;
  position: relative;
  overflow: visible;
  box-sizing: border-box;
}

.timeline {
  position: relative;
  padding-left: 10px;
  padding-right: 10px;
}

.timeline::before {
  content: "";
  position: absolute;
  top: 18px;
  bottom: 18px;
  left: 27px;
  width: 2px;
  background: linear-gradient(180deg, #E2CA88 0%, #C59B4E 50%, #B8860B 100%);
  border-radius: 2px;
  opacity: 0.85;
}

.timeline-line-progress {
  position: absolute;
  top: 18px;
  left: 27px;
  width: 3px;
  height: 0px;
  background: linear-gradient(180deg, #FFE4A0 0%, #D4AF37 50%, #B8860B 100%);
  border-radius: 2px;
  box-shadow: 0 0 10px rgba(212, 175, 55, 0.9), 0 0 18px rgba(212, 175, 55, 0.45);
  pointer-events: none;
  z-index: 1;
  transform: translateX(-50%);
  transition: height 0.1s ease-out;
}

.timeline-item {
  position: relative;
  display: flex;
  align-items: flex-start;
  gap: 12px;
  margin-bottom: 18px;
  transition: transform 0.35s ease, opacity 0.35s ease;
}

.timeline-icon-box {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: #FFFFFF;
  border: 1.5px solid #C59B4E;
  color: #356B9E;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  z-index: 2;
  box-shadow: 0 2px 8px rgba(197, 155, 78, 0.25);
  padding: 6px;
  transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), 
              border-color 0.35s ease, 
              background 0.35s ease, 
              box-shadow 0.35s ease, 
              color 0.35s ease;
}

.timeline-icon-box svg {
  width: 100%;
  height: 100%;
  transition: transform 0.3s ease;
}

.timeline-item.active .timeline-icon-box {
  transform: scale(1.15);
  border-color: #D4AF37;
  background: linear-gradient(135deg, #FFFDF8 0%, #FFF3D6 100%);
  box-shadow: 0 0 16px rgba(212, 175, 55, 0.75), 0 4px 12px rgba(74, 136, 189, 0.25);
  color: #265985;
}

.timeline-item.active .timeline-icon-box svg {
  transform: scale(1.08);
}

.timeline-content {
  background: #FFFFFF;
  border: 1px solid rgba(74, 136, 189, 0.2);
  border-radius: 14px;
  padding: 10px 14px;
  flex: 1;
  max-width: 100%;
  box-shadow: 0 3px 12px rgba(74, 136, 189, 0.06);
  transition: border-color 0.35s ease, background 0.35s ease, box-shadow 0.35s ease, transform 0.35s ease;
  word-break: break-word;
  overflow-wrap: break-word;
}

.timeline-item.active .timeline-content {
  border-color: rgba(212, 175, 55, 0.55);
  background: #FFFFFF;
  box-shadow: 0 6px 18px rgba(74, 136, 189, 0.12);
  transform: translateX(3px);
}

.timeline-time {
  font-family: var(--font-kh-serif);
  font-size: 14.5px;
  font-weight: 700;
  color: #2D6396;
  margin-bottom: 4px;
  line-height: 1.5;
  letter-spacing: 0.2px;
}

.timeline-desc {
  font-family: var(--font-kh-serif);
  font-size: 14px;
  color: #243E5B;
  line-height: 1.65;
  letter-spacing: 0.15px;
}

/* Accessibility: prefers-reduced-motion */
@media (prefers-reduced-motion: reduce) {
  .timeline-line-progress {
    transition: none !important;
  }
  .timeline-item,
  .timeline-icon-box,
  .timeline-content {
    transition: none !important;
    animation: none !important;
  }
}

/* =========================================
   7. GENERAL SECTION CONTAINER & CARDS
   ========================================= */
.section-wrapper {
  padding: 16px 18px;
}

.card {
  background: var(--card-bg);
  border: var(--card-border);
  border-radius: 20px;
  padding: 24px 18px;
  box-shadow: var(--shadow-soft);
  backdrop-filter: blur(10px);
  margin-bottom: 22px;
  position: relative;
}

.card-title {
  font-family: var(--font-kh-title);
  font-size: 17px;
  color: #1E3A5F;
  text-align: center;
  margin-bottom: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
}

.card-title::before, .card-title::after {
  content: "";
  height: 1px;
  width: 28px;
  background: rgba(74, 136, 189, 0.35);
}

/* =========================================
   9. DRESS CODE & COLORS
   ========================================= */
.colors-grid {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-wrap: wrap;
  gap: 14px;
  margin-top: 10px;
}

.color-swatch {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 2px solid #fff;
  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
  transition: transform 0.2s;
  cursor: pointer;
}

.color-swatch:hover {
  transform: scale(1.15);
}

/* =========================================
   10. PHOTO GALLERY & LIGHTBOX
   ========================================= */
.gallery-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 12px;
}

/* Dynamic Gallery Item Container */
.gallery-item {
  position: relative;
  overflow: hidden;
  border-radius: 16px;
  border: 1px solid rgba(197, 155, 78, 0.35);
  background: #F0F6FB;
  box-shadow: 0 4px 14px rgba(74, 136, 189, 0.08), 0 1px 4px rgba(197, 155, 78, 0.08);
  cursor: pointer;
  transition: transform 0.3s cubic-bezier(0.25, 1, 0.5, 1), 
              box-shadow 0.3s ease, 
              border-color 0.3s ease;
  display: block;
}

.gallery-item:hover {
  transform: translateY(-2px) scale(1.015);
  border-color: rgba(212, 175, 55, 0.7);
  box-shadow: 0 8px 22px rgba(74, 136, 189, 0.18), 0 4px 12px rgba(197, 155, 78, 0.22);
}

.gallery-item:active {
  transform: scale(0.985);
}

/* Layout Variants */
.gallery-item.gallery-layout-portrait {
  grid-column: span 1;
  aspect-ratio: 4 / 5;
}

.gallery-item.gallery-layout-landscape {
  grid-column: span 2;
  aspect-ratio: 16 / 10;
  box-shadow: 0 6px 18px rgba(74, 136, 189, 0.12), 0 2px 8px rgba(197, 155, 78, 0.12);
}

.gallery-item.gallery-layout-square {
  grid-column: span 1;
  aspect-ratio: 1 / 1;
}

/* Image inside Gallery Item */
.gallery-item .gallery-thumb {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  border: none;
  border-radius: 0;
  box-shadow: none;
  background: transparent;
  pointer-events: none;
  transition: transform 0.25s ease-out;
}

/* Backward compatibility for direct .gallery-thumb elements */
img.gallery-thumb {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  object-position: center 30%;
  border-radius: 16px;
  border: 1px solid rgba(197, 155, 78, 0.35);
  background: #F0F6FB;
  box-shadow: 0 4px 14px rgba(74, 136, 189, 0.08), 0 1px 4px rgba(197, 155, 78, 0.08);
  cursor: pointer;
  transition: transform 0.3s cubic-bezier(0.25, 1, 0.5, 1), 
              box-shadow 0.3s ease, 
              border-color 0.3s ease;
  display: block;
}

img.gallery-thumb:first-child {
  grid-column: span 2;
  aspect-ratio: 16 / 10;
  object-position: center 26%;
  box-shadow: 0 6px 18px rgba(74, 136, 189, 0.12), 0 2px 8px rgba(197, 155, 78, 0.12);
}

img.gallery-thumb:hover {
  transform: translateY(-2px) scale(1.015);
  border-color: rgba(212, 175, 55, 0.7);
  box-shadow: 0 8px 22px rgba(74, 136, 189, 0.18), 0 4px 12px rgba(197, 155, 78, 0.22);
}

img.gallery-thumb:active {
  transform: scale(0.985);
}

/* Lightbox Modal */
#lightbox-modal {
  position: fixed;
  inset: 0;
  z-index: 999999;
  background: rgba(0, 0, 0, 0.94);
  display: none;
  align-items: center;
  justify-content: center;
  padding: 16px;
}

#lightbox-modal.active {
  display: flex;
}

#lightbox-img {
  max-width: 92%;
  max-height: 82vh;
  border-radius: 12px;
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
  transition: opacity 0.25s ease;
}

.lightbox-close {
  position: absolute;
  top: 20px;
  right: 20px;
  color: #fff;
  font-size: 34px;
  cursor: pointer;
  background: none;
  border: none;
  z-index: 10;
}

.lightbox-nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: rgba(255, 255, 255, 0.18);
  border: 1px solid rgba(255, 255, 255, 0.3);
  color: #fff;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  cursor: pointer;
  transition: background-color 0.2s;
}

.lightbox-prev { left: 16px; }
.lightbox-next { right: 16px; }
.lightbox-nav:hover { background: rgba(255, 255, 255, 0.35); }

/* =========================================
   11. VENUE & MAP
   ========================================= */
.venue-details {
  text-align: center;
  margin-bottom: 14px;
}

.venue-name {
  font-family: var(--font-kh-serif);
  font-size: 16.5px;
  font-weight: 700;
  color: #1A5488;
  margin-bottom: 6px;
  line-height: 1.5;
}

.venue-address {
  font-family: var(--font-kh-serif);
  font-size: 14.5px;
  color: #243E5B;
  line-height: 1.65;
}

.map-embed-wrapper {
  position: relative;
  width: 100%;
  height: 250px;
  border-radius: 16px;
  overflow: hidden;
  margin-bottom: 16px;
  border: 1px solid rgba(200, 168, 92, 0.4);
  box-shadow: 0 4px 16px rgba(138, 107, 62, 0.12);
  background: #f7f3ec;
  transition: box-shadow 0.25s ease, border-color 0.25s ease;
}

.map-embed-wrapper:hover {
  border-color: var(--gold);
  box-shadow: 0 6px 20px rgba(138, 107, 62, 0.2);
}

.map-iframe {
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}

.map-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
  background: linear-gradient(135deg, #FAF4EB 0%, #F5E5D8 100%);
  border: 1px solid var(--gold);
  border-radius: 16px;
  padding: 14px;
  color: #1A5488;
  font-family: var(--font-kh-serif);
  font-weight: 600;
  font-size: 14.5px;
  line-height: 1.5;
  text-decoration: none;
  box-shadow: 0 4px 12px rgba(200, 168, 92, 0.18);
  transition: transform 0.2s, background-color 0.2s, box-shadow 0.2s;
}

.map-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 16px rgba(200, 168, 92, 0.28);
}

@media (max-width: 480px) {
  .sky-couple-title {
    font-size: 19.5px;
    line-height: 1.45;
  }
  .sky-couple-subtitle {
    font-size: 14px;
    line-height: 1.6;
  }
  .sky-main-guest-name {
    font-size: 14.5px;
  }
  .sky-main-couple-names {
    font-size: 20px;
    line-height: 1.65;
  }
  .sky-main-couple-names .amp {
    font-size: 21px;
  }
  .map-embed-wrapper {
    height: 220px;
    border-radius: 14px;
  }
}

/* =========================================
   12. DIGITAL GIFT (KHQR / ABA) & FLYING MONEY
   ========================================= */
.gift-card {
  text-align: center;
  position: relative;
  overflow: hidden;
}

/* Realistic Banknote (65 x 31px, 15% smaller than original demo) */
.banknote {
  width: 65px;
  height: 31px;
  background: linear-gradient(135deg, #eef5e7 0%, #d0e0c0 50%, #e2eee0 100%);
  border: 1px solid #3c5a33;
  border-radius: 2px;
  box-shadow: 0 4px 10px rgba(30, 50, 25, 0.22), 0 1px 3px rgba(0, 0, 0, 0.12);
  position: absolute;
  box-sizing: border-box;
  overflow: hidden;
  user-select: none;
  pointer-events: none;
  will-change: transform, opacity;
}

.banknote::before {
  content: '';
  position: absolute;
  inset: 2px;
  border: 0.8px solid rgba(48, 74, 40, 0.45);
  border-radius: 1px;
  background-image: repeating-linear-gradient(
    45deg,
    transparent,
    transparent 2px,
    rgba(60, 89, 51, 0.08) 2px,
    rgba(60, 89, 51, 0.08) 4px
  );
}

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

.banknote-oval {
  width: 16px;
  height: 20px;
  border: 0.9px solid #385731;
  border-radius: 50%;
  background: radial-gradient(ellipse at center, #f4faee 25%, #bfd4b0 100%);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 0 2px rgba(40, 65, 35, 0.3);
}

.banknote-oval::after {
  content: '★';
  font-size: 6.5px;
  color: #2f4e27;
  line-height: 1;
}

.banknote-corner {
  position: absolute;
  font-family: 'Courier New', monospace, sans-serif;
  font-size: 5px;
  font-weight: 800;
  color: #2b4524;
  line-height: 1;
  letter-spacing: -0.2px;
}
.banknote-tl { top: 2px; left: 3px; }
.banknote-tr { top: 2px; right: 3px; }
.banknote-bl { bottom: 2px; left: 3px; }
.banknote-br { bottom: 2px; right: 3px; }

/* Ambient falling banknotes layer */
.gift-money-ambient {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 3;
  perspective: 600px;
}

/* Burst banknotes layer */
.gift-money-burst {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 15;
  perspective: 700px;
}

/* Foreground controls staying clean & unobstructed */
.gift-card .card-title,
.gift-account-name,
.gift-account-number,
.copy-acc-btn {
  position: relative;
  z-index: 12;
}

.gift-qr-wrapper {
  width: 170px;
  height: 170px;
  margin: 0 auto 16px;
  padding: 8px;
  background: #fff;
  border: 2px dashed var(--gold);
  border-radius: 16px;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
  position: relative;
  z-index: 12;
  cursor: pointer;
  box-sizing: border-box;
  transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
  user-select: none;
  -webkit-tap-highlight-color: transparent;
}

.gift-qr-wrapper:hover {
  transform: scale(1.02);
}

.gift-qr-wrapper.qr-tap-bounce {
  animation: qrBounce 0.45s ease;
}

@keyframes qrBounce {
  0% { transform: scale(1); }
  30% { transform: scale(0.94); }
  65% { transform: scale(1.04); }
  100% { transform: scale(1); }
}

.gift-qr-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 10px;
  display: block;
}

.gift-account-name {
  font-family: var(--font-kh-serif);
  font-weight: 700;
  font-size: 15px;
  color: #1A5488;
  margin-bottom: 4px;
  line-height: 1.5;
}

.gift-account-number {
  font-family: monospace;
  font-size: 16px;
  color: var(--text-dark);
  letter-spacing: 1px;
  margin-bottom: 12px;
}

.copy-acc-btn {
  background: linear-gradient(135deg, var(--gold) 0%, #B89647 100%);
  color: #fff;
  border: none;
  border-radius: 20px;
  padding: 8px 22px;
  font-family: var(--font-kh-serif);
  font-size: 13.5px;
  font-weight: 600;
  line-height: 1.5;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  box-shadow: 0 4px 12px rgba(200, 168, 92, 0.35);
  transition: transform 0.2s;
}

.copy-acc-btn:hover { transform: translateY(-2px); }

/* 3D Falling Banknote Animations */
@keyframes fallDrift1 {
  0% {
    top: -45px;
    transform: translateX(0) rotateX(10deg) rotateY(15deg) rotateZ(5deg);
    opacity: 0;
  }
  15% { opacity: 0.95; }
  50% {
    transform: translateX(18px) rotateX(190deg) rotateY(80deg) rotateZ(35deg);
  }
  85% { opacity: 0.9; }
  100% {
    top: 105%;
    transform: translateX(-12px) rotateX(360deg) rotateY(180deg) rotateZ(60deg);
    opacity: 0;
  }
}

@keyframes fallDrift2 {
  0% {
    top: -45px;
    transform: translateX(0) rotateX(-15deg) rotateY(-20deg) rotateZ(-10deg);
    opacity: 0;
  }
  15% { opacity: 0.95; }
  50% {
    transform: translateX(-20px) rotateX(160deg) rotateY(-110deg) rotateZ(-40deg);
  }
  85% { opacity: 0.9; }
  100% {
    top: 105%;
    transform: translateX(15px) rotateX(360deg) rotateY(-200deg) rotateZ(-65deg);
    opacity: 0;
  }
}

@keyframes fallDrift3 {
  0% {
    top: -45px;
    transform: translateX(0) rotateX(25deg) rotateY(-10deg) rotateZ(20deg);
    opacity: 0;
  }
  15% { opacity: 0.92; }
  50% {
    transform: translateX(14px) rotateX(175deg) rotateY(95deg) rotateZ(-15deg);
  }
  85% { opacity: 0.88; }
  100% {
    top: 105%;
    transform: translateX(-16px) rotateX(350deg) rotateY(210deg) rotateZ(40deg);
    opacity: 0;
  }
}

/* 8 Continuously Falling Banknotes */
.ambient-note-1 { left: 4%;  animation: fallDrift1 5.8s cubic-bezier(0.4, 0, 0.6, 1) infinite; animation-delay: -0.8s; }
.ambient-note-2 { left: 24%; animation: fallDrift2 6.6s cubic-bezier(0.4, 0, 0.6, 1) infinite; animation-delay: -3.4s; }
.ambient-note-3 { left: 54%; animation: fallDrift3 5.4s cubic-bezier(0.4, 0, 0.6, 1) infinite; animation-delay: -1.7s; }
.ambient-note-4 { left: 78%; animation: fallDrift1 6.2s cubic-bezier(0.4, 0, 0.6, 1) infinite; animation-delay: -4.5s; }
.ambient-note-5 { left: 14%; animation: fallDrift2 6.0s cubic-bezier(0.4, 0, 0.6, 1) infinite; animation-delay: -5.2s; }
.ambient-note-6 { left: 42%; animation: fallDrift3 7.0s cubic-bezier(0.4, 0, 0.6, 1) infinite; animation-delay: -2.9s; }
.ambient-note-7 { left: 68%; animation: fallDrift1 5.6s cubic-bezier(0.4, 0, 0.6, 1) infinite; animation-delay: -4.1s; }
.ambient-note-8 { left: 86%; animation: fallDrift2 6.4s cubic-bezier(0.4, 0, 0.6, 1) infinite; animation-delay: -1.3s; }

/* Offscreen pause */
.gift-card.money-paused .gift-money-ambient .banknote {
  animation-play-state: paused !important;
}

/* Prefers-reduced-motion */
@media (prefers-reduced-motion: reduce) {
  .gift-money-ambient,
  .gift-money-burst {
    display: none !important;
  }
}

/* =========================================
   13. RSVP ATTENDANCE CONFIRMATION
   ========================================= */
.rsvp-form {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.rsvp-status-group {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-bottom: 4px;
}

.rsvp-status-btn {
  background: #fff;
  border: 1px solid rgba(200, 168, 92, 0.35);
  border-radius: 14px;
  padding: 12px 8px;
  font-family: inherit;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--text-dark);
  cursor: pointer;
  transition: all 0.2s;
}

.rsvp-status-btn.selected {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
  box-shadow: 0 4px 12px rgba(216, 144, 116, 0.35);
}

.rsvp-select, .rsvp-input {
  width: 100%;
  height: 44px;
  border-radius: 12px;
  border: 1px solid rgba(200, 168, 92, 0.35);
  background: #fff;
  padding: 0 14px;
  font-family: inherit;
  font-size: 13.5px;
  outline: none;
  color: var(--text-dark);
}

.rsvp-submit-btn {
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 22px;
  padding: 13px;
  font-family: inherit;
  font-size: 14.5px;
  font-weight: 700;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(216, 144, 116, 0.4);
  transition: transform 0.2s;
}

.rsvp-submit-btn:hover { transform: translateY(-2px); }

.rsvp-success-msg {
  display: none;
  background: #E8F5E9;
  border: 1px solid #A5D6A7;
  color: #2E7D32;
  border-radius: 14px;
  padding: 14px;
  text-align: center;
  font-size: 14px;
  font-weight: 600;
}

/* =========================================
   14. GUEST SEARCH & PERSONALIZED INVITE
   ========================================= */
.search-box-wrapper {
  position: relative;
  margin-bottom: 12px;
}

.search-input {
  width: 100%;
  height: 48px;
  border-radius: 24px;
  border: 1px solid rgba(200, 168, 92, 0.45);
  background: #fff;
  padding: 0 18px 0 44px;
  font-family: inherit;
  font-size: 14.5px;
  color: var(--text-dark);
  outline: none;
  transition: border-color 0.2s, box-shadow 0.2s;
}

.search-input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 4px rgba(216, 144, 116, 0.18);
}

.search-icon {
  position: absolute;
  left: 16px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--text-muted);
}

.guest-dropdown {
  max-height: 220px;
  overflow-y: auto;
  border-radius: 14px;
  background: #fff;
  border: 1px solid rgba(200, 168, 92, 0.25);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
  display: none;
  margin-bottom: 16px;
}

.guest-dropdown.active {
  display: block;
}

.guest-option {
  padding: 11px 16px;
  font-size: 13.5px;
  color: var(--text-dark);
  cursor: pointer;
  border-bottom: 1px solid #FAF4EB;
  transition: background-color 0.15s;
}

.guest-option:hover {
  background: #FAF4EB;
  color: var(--accent);
}

/* Personalized Guest Card */
.personalized-card {
  background: linear-gradient(135deg, #FFF9F2 0%, #FBF1EA 100%);
  border: 1px dashed var(--gold);
  border-radius: 16px;
  padding: 18px;
  text-align: center;
  display: none;
}

.personalized-card.active {
  display: block;
}

.personalized-guest-name {
  font-family: var(--font-kh-title);
  font-size: 18px;
  color: var(--accent);
  margin-bottom: 8px;
}

.copy-link-btn {
  margin-top: 10px;
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 20px;
  padding: 8px 20px;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

/* =========================================
   15. WISHES / GUESTBOOK SECTION
   ========================================= */
.wish-form {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-bottom: 20px;
}

.wish-input, .wish-textarea {
  width: 100%;
  border-radius: 14px;
  border: 1px solid rgba(200, 168, 92, 0.35);
  background: #fff;
  padding: 12px 16px;
  font-family: inherit;
  font-size: 14px;
  color: var(--text-dark);
  outline: none;
}

.wish-textarea {
  resize: vertical;
  min-height: 75px;
}

.wish-submit-btn {
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 20px;
  padding: 12px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.2s;
}

.wishes-list {
  max-height: 260px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.wish-bubble {
  background: #fff;
  border: 1px solid rgba(200, 168, 92, 0.2);
  border-radius: 14px;
  padding: 12px 14px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.03);
}

.wish-author {
  font-size: 13px;
  font-weight: 700;
  color: var(--accent);
  margin-bottom: 3px;
}

.wish-text {
  font-size: 13.5px;
  color: var(--text-dark);
  line-height: 1.45;
}

/* Toast Message */
#toast {
  position: fixed;
  bottom: 80px;
  left: 50%;
  transform: translateX(-50%) translateY(20px);
  background: rgba(40, 30, 20, 0.92);
  color: #fff;
  padding: 10px 22px;
  border-radius: 24px;
  font-size: 13.5px;
  font-weight: 600;
  opacity: 0;
  visibility: hidden;
  transition: all 0.3s ease;
  z-index: 9999999;
  backdrop-filter: blur(6px);
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
}

#toast.show {
  opacity: 1;
  visibility: visible;
  transform: translateX(-50%) translateY(0);
}

/* Footer */
.footer {
  position: relative;
  z-index: 2;
  text-align: center;
  padding: 36px 16px 85px;
  margin-top: 16px;
}

.footer .footer-divider {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin: 0 auto 12px;
}

.footer .footer-divider .divider-dash {
  display: inline-block;
  width: 32px;
  height: 1px;
  background: linear-gradient(90deg, transparent, #C59B4E, transparent);
}

.footer .footer-divider .divider-heart {
  font-size: 11px;
  line-height: 1;
}

.footer-couple-name {
  font-family: 'Kantumruy Pro', 'Montserrat', sans-serif;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 2.2px;
  color: #164A7E;
  text-transform: uppercase;
  margin-bottom: 6px;
  text-shadow: 0 1px 3px rgba(255, 255, 255, 0.9);
}

.footer-note {
  font-family: var(--font-kh-serif);
  font-size: 14px;
  font-weight: 500;
  color: #4A6E8F;
  line-height: 1.65;
  text-shadow: 0 1px 3px rgba(255, 255, 255, 0.9);
}

/* =========================================
   16. SCROLL FADE-IN & UPWARD REVEAL ANIMATION
   ========================================= */
.js-scroll-reveal .scroll-reveal {
  opacity: 0;
  transform: translateY(14px);
  transition: opacity 0.65s cubic-bezier(0.22, 1, 0.36, 1), 
              transform 0.65s cubic-bezier(0.22, 1, 0.36, 1);
  will-change: opacity, transform;
}

.js-scroll-reveal .scroll-reveal.is-revealed {
  opacity: 1;
  transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
  .js-scroll-reveal .scroll-reveal {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}
