/* ===================== ADKIRA — MAIN STYLES ===================== */
/* 
  COLOUR SYSTEM:
  --ev-color   = event owner's chosen colour (default #007f9f)
                 Set on <html> at page load, affects GUEST PAGE only
  #007f9f      = AdKira brand colour (dashboards, admin, buttons)
*/

/* ── CRÍTICO: Fallback para Tailwind CDN lento (iPhone/WhatsApp/Safari) ──
   Estas regras NÃO dependem do Tailwind CDN — garantem que os ecrãs
   correctos aparecem mesmo que o CDN demore ou falhe.              ── */
.hidden { display: none !important; }
.flex   { display: flex !important; }
.block  { display: block !important; }
.inline-flex { display: inline-flex !important; }
.grid   { display: grid !important; }
.invisible { visibility: hidden !important; }
.opacity-0 { opacity: 0 !important; }
/* Garantir que apenas o ecrã activo aparece */
.page-section { display: none; }
.page-section:not(.hidden) { display: block; }

*, *::before, *::after { font-family: 'Quicksand', sans-serif; box-sizing: border-box; }
html, body { height: 100%; margin: 0; width: 100%; overflow-x: hidden; }
:root { --ev-color: #007f9f; }

/* ── Brand buttons (dashboard/admin — always AdKira teal) ── */
.btn-main {
  background: #007f9f; color: #fff; border-radius: 0.9rem;
  padding: 0.65rem 1.5rem; font-weight: 600; transition: all 0.2s;
  white-space: nowrap; display: inline-flex; align-items: center; justify-content: center;
  box-shadow: 0 3px 10px rgba(0,127,159,0.18);
}
.btn-main:hover { background: #006b86; transform: translateY(-1px); box-shadow: 0 6px 16px rgba(0,127,159,0.32); }

/* ── Botões: sempre 1 cor sólida (nunca mistura) — a escolha do
   organizador entre cor principal ou 2ª cor já vem em --ev-button-color.
   O texto dentro ajusta-se automaticamente (branco ou escuro) para nunca
   ficar difícil de ler, seja qual for a cor escolhida (ex: prata claro). ── */
.dg-card-btn,
#rsvp-form button[type="submit"],
.iban-copy-btn,
.rsvp-cta-section,
.rsvp-copyright,
.guest-buttons-round .iban-copy-btn .action-btn-icon,
.std-rsvp-btn-anim {
  background: var(--ev-button-color, var(--ev-color)) !important;
  color: var(--ev-button-color-text, #fff) !important;
}
.rsvp-cta-section .action-btn-label,
.rsvp-cta-btn {
  color: var(--ev-button-color-text, #fff);
}
/* Por padrão: ícone e texto lado a lado, tal como já era */
.action-btn-icon { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; }
.action-btn-label { display: inline; }

/* ── O hero (capa principal, seja no layout clássico ou no "Simples") tem
   a SUA PRÓPRIA cor, independente dos nomes que aparecem noutros sítios
   (Save the Date, secção bíblica) — escolher uma não afecta a outra. ── */
#hero-couple-names, .hero-couple-names-simple {
  color: var(--ev-hero-names-color, var(--ev-color)) !important;
}
.hero-subtitle-tagline {
  display: block; color: rgba(255,255,255,0.88); text-shadow: 0 2px 10px rgba(0,0,0,0.55);
  font-size: 0.78rem; font-weight: 700; letter-spacing: 0.22em; text-transform: uppercase;
  font-family: 'Quicksand', sans-serif; margin-top: 0.4rem;
}
/* ── Os outros elementos (nomes fora do hero, contagem, títulos, mensagens,
   data): cada um usa SEMPRE 1 das 2 cores, sólida — nunca misturadas. ── */
.std-couple-names, .bible-couple-names {
  color: var(--ev-names-color, var(--ev-color)) !important;
}
.countdown-section-box {
  background: var(--ev-countdown-color, var(--ev-color)) !important;
  color: var(--ev-countdown-color-text, #fff) !important;
}
.std-countdown-num { color: var(--ev-countdown-color-flat, var(--ev-color)) !important; }
.section-title { color: var(--ev-titles-color, var(--ev-color)) !important; }
.invitation-text, .std-extra-message { color: var(--ev-message-color, var(--ev-color)) !important; }
.std-date-value { color: var(--ev-date-color, var(--ev-color)) !important; }

/* ── "Prateado": pensado para imitar papel metálico amassado a apanhar luz
   (facetas claras e escuras alternadas, em sequência rápida) — não um
   gradiente simples. As faixas escuras ficam suficientemente próximas das
   claras para o contorno do texto continuar sempre legível, mesmo sobre
   fundo branco, mesmo parado (a animação só dá vida extra ao brilho).
   Activado via classe no <html>, posta pelo JS quando o organizador
   escolhe "Prateado" nesse seletor de cor específico. As regras abaixo têm
   sempre mais especificidade + !important do que as regras de cor
   "normais" acima, por isso ganham sempre quando activas. ── */
@keyframes ev-silver-shimmer { 0% { background-position: 0% center; } 100% { background-position: 250% center; } }
html.ev-silver-hero-names #hero-couple-names,
html.ev-silver-hero-names .hero-couple-names-simple,
html.ev-silver-names .std-couple-names,
html.ev-silver-names .bible-couple-names,
html.ev-silver-titles .section-title,
html.ev-silver-message .invitation-text,
html.ev-silver-message .std-extra-message,
html.ev-silver-date .std-date-value,
html.ev-silver-countdown .std-countdown-num {
  background-image: linear-gradient(115deg,
    #4a4a4a 0%, #8c8c8c 7%, #f0f0f0 13%, #ffffff 18%, #b0b0b0 25%,
    #6b6b6b 34%, #a8a8a8 41%, #f5f5f5 47%, #ffffff 51%, #909090 58%,
    #555555 67%, #cfcfcf 75%, #ffffff 80%, #8a8a8a 88%, #4a4a4a 100%) !important;
  background-size: 280% auto;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 1px 1px rgba(0,0,0,0.22));
  color: transparent !important;
  /* ✅ Alguns elementos (ex: nomes/frases no Save the Date) já têm a SUA
     PRÓPRIA animação de entrada, que parte de opacity:0. Como esta regra
     tem mais especificidade, substituía essa animação inteira por esta
     (a propriedade "animation" é uma só, não se somam) — sem nada a
     levar de volta a opacity:1, o texto ficava invisível para sempre.
     Forçar opacity:1 aqui resolve isso em qualquer contexto, sem efeito
     nenhum onde isto não era um problema. */
  opacity: 1 !important;
  animation: var(--ev-metallic-anim, ev-silver-shimmer 11s linear infinite);
}

/* ── "Dourado": exactamente a mesma técnica do "Prateado" acima (papel
   metálico amassado, facetas a alternar), só com tons dourados em vez de
   cinzentos. O ponto mais claro fica num champanhe suave (#fff3c4), nunca
   branco puro — assim continua a ler-se como dourado e não esvanece
   contra fundos brancos. É uma cor própria e fixa, independente da Cor
   Principal e da 2ª Cor do evento — nunca uma mistura entre elas. ── */
html.ev-gold-hero-names #hero-couple-names,
html.ev-gold-hero-names .hero-couple-names-simple,
html.ev-gold-names .std-couple-names,
html.ev-gold-names .bible-couple-names,
html.ev-gold-titles .section-title,
html.ev-gold-message .invitation-text,
html.ev-gold-message .std-extra-message,
html.ev-gold-date .std-date-value,
html.ev-gold-countdown .std-countdown-num {
  background-image: linear-gradient(115deg,
    #6b5512 0%, #a3842c 7%, #e8cf85 13%, #fff3c4 18%, #c9a227 25%,
    #8a6d1e 34%, #d4af37 41%, #f5e08a 47%, #fff3c4 51%, #b8902f 58%,
    #5e4a10 67%, #e0c66a 75%, #fff3c4 80%, #a3842c 88%, #6b5512 100%) !important;
  background-size: 280% auto;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 1px 1px rgba(0,0,0,0.22));
  color: transparent !important;
  opacity: 1 !important;
  animation: var(--ev-metallic-anim, ev-silver-shimmer 11s linear infinite);
}

/* ── Estilo "Redondo": ícone vira um círculo, com o nome do botão por baixo ── */
#screen-guest.guest-buttons-round .rsvp-cta-btn,
#screen-guest.guest-buttons-round .dg-card-btn,
#screen-guest.guest-buttons-round .venue-map-btn,
#screen-guest.guest-buttons-round .iban-copy-btn {
  display: flex; align-items: center; justify-content: center;
  flex-direction: column; gap: 0.5rem;
  background: transparent !important; box-shadow: none !important; border: none !important;
  padding: 0 !important; width: auto !important; text-decoration: none !important;
}
#screen-guest.guest-buttons-round .dg-card-btn,
#screen-guest.guest-buttons-round .venue-map-btn,
#screen-guest.guest-buttons-round .iban-copy-btn { margin: 0 auto; }
#screen-guest.guest-buttons-round .action-btn-icon {
  width: 64px; height: 64px; border-radius: 50%; background: #fff;
  color: var(--ev-button-color-flat, var(--ev-color, #007f9f)); box-shadow: 0 6px 18px rgba(0,0,0,0.18);
}
#screen-guest.guest-buttons-round .action-btn-icon svg { width: 24px; height: 24px; }
#screen-guest.guest-buttons-round .rsvp-cta-btn .action-btn-label { color: #fff; font-size: 0.82rem; font-weight: 700; }
#screen-guest.guest-buttons-round .dg-card-btn .action-btn-icon,
#screen-guest.guest-buttons-round .venue-map-btn .action-btn-icon,
#screen-guest.guest-buttons-round .iban-copy-btn .action-btn-icon {
  background: var(--ev-button-color, var(--ev-color, #007f9f));
  color: var(--ev-button-color-text, #fff); width: 48px; height: 48px;
}
#screen-guest.guest-buttons-round .dg-card-btn .action-btn-icon svg,
#screen-guest.guest-buttons-round .venue-map-btn .action-btn-icon svg,
#screen-guest.guest-buttons-round .iban-copy-btn .action-btn-icon svg { width: 20px; height: 20px; }
#screen-guest.guest-buttons-round .dg-card-btn .action-btn-label,
#screen-guest.guest-buttons-round .venue-map-btn .action-btn-label,
#screen-guest.guest-buttons-round .iban-copy-btn .action-btn-label { color: var(--ev-button-color-flat, var(--ev-color, #007f9f)); font-size: 0.78rem; font-weight: 700; }
.btn-outline {
  border: 2px solid #007f9f; color: #007f9f; border-radius: 0.9rem;
  padding: 0.6rem 1.5rem; font-weight: 600; transition: all 0.2s; background: transparent;
  white-space: nowrap; display: inline-flex; align-items: center; justify-content: center;
}
.btn-outline:hover { background: rgba(0,127,159,0.1); border-color: #005a70; color: #005a70; }

.input-field {
  border: 1.5px solid #d1d5db; border-radius: 0.75rem; padding: 0.6rem 0.85rem;
  width: 100%; transition: all 0.2s; outline: none;
  /* ✅ !important: muitos campos combinam esta classe com utilitários do
     Tailwind tipo "text-xs"/"text-sm" (ambos com a mesma especificidade —
     quem ganha depende da ordem de carregamento, que não é garantida com
     o Tailwind via CDN). Sem isto, alguns campos ficavam com menos de
     16px, e o iOS faz zoom automático da página sempre que se toca num
     campo de texto com menos de 16px — afecta o editor inteiro no iPhone. */
  font-size: 16px !important;
}
.input-field:focus { border-color: #007f9f; box-shadow: 0 0 0 3px rgba(0,127,159,0.15); }

.switch { position: relative; width: 44px; height: 24px; background: #d1d5db; border-radius: 12px; cursor: pointer; transition: 0.3s; flex-shrink: 0; }
.switch.active { background: #007f9f; }
.switch::after { content: ''; position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; background: #fff; border-radius: 50%; transition: 0.3s; }
.switch.active::after { left: 22px; }

.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.4); z-index: 50; display: flex; align-items: center; justify-content: center; padding: 1rem; animation: fadeIn 0.2s; }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
.modal-content { animation: scaleIn 0.25s ease-out; width: 100%; max-width: 480px; }
@keyframes scaleIn { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: scale(1); } }

.stat-card { transition: transform 0.2s; }
.stat-card:hover { transform: scale(1.03); }

.toast-msg {
  position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%);
  background: #1e293b; color: #fff; padding: 0.7rem 1.5rem; border-radius: 0.75rem;
  font-weight: 600; z-index: 9600; animation: toastIn 0.3s ease-out;
  max-width: calc(100vw - 2rem); text-align: center;
}
@keyframes toastIn { from { opacity: 0; transform: translateX(-50%) translateY(16px); } to { opacity: 1; transform: translateX(-50%) translateY(0); } }

.page-transition { animation: fadeSlideIn 0.35s ease-out; }
@keyframes fadeSlideIn { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
.card-hover { transition: transform 0.2s, box-shadow 0.2s; }
.card-hover:hover { transform: translateY(-2px); box-shadow: 0 8px 30px rgba(0,0,0,0.12); }

/* ═══ MUSIC PLAYER ═══ */
.music-player {
  background: rgba(15,23,42,0.88);
  backdrop-filter: blur(12px);
  padding: 0.5rem 1rem;
  display: flex; align-items: center; gap: 0.7rem;
  width: fit-content;
  min-width: 220px;
  max-width: 340px;
  margin: 0.75rem auto;
  border-radius: 999px;
  border: 1px solid rgba(255,255,255,0.1);
  box-shadow: 0 4px 20px rgba(0,0,0,0.25);
  transition: opacity 0.3s;
}
.music-player .music-icon {
  width: 30px; height: 30px; border-radius: 50%;
  background: var(--ev-color);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; cursor: pointer; transition: 0.2s;
}
.music-player .music-icon:hover { filter: brightness(0.85); transform: scale(1.08); }
.music-player .music-info { flex: 1; overflow: hidden; }
.music-player .music-title { color: #e2e8f0; font-size: 0.75rem; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.music-player .music-sub { color: #94a3b8; font-size: 0.65rem; margin-top: 0; line-height: 1.2; }
.music-player audio { display: none; }
.music-equalizer { display: flex; align-items: flex-end; gap: 2px; height: 14px; flex-shrink: 0; }
.music-equalizer span { width: 2.5px; border-radius: 2px; background: var(--ev-color); animation: eq-bar 0.8s infinite ease-in-out alternate; }
.music-equalizer span:nth-child(2) { animation-delay: 0.15s; }
.music-equalizer span:nth-child(3) { animation-delay: 0.3s; }
.music-equalizer span:nth-child(4) { animation-delay: 0.45s; }
@keyframes eq-bar { from { height: 3px; opacity: 0.5; } to { height: 14px; opacity: 1; } }
.music-equalizer.paused span { animation-play-state: paused; height: 4px; }

/* Floating mini player */
#floating-music-btn {
  position: fixed; bottom: 1.5rem; right: 1.5rem; z-index: 150;
  width: 48px; height: 48px; border-radius: 50%;
  background: linear-gradient(135deg, #0f172a, #1e3a4a);
  box-shadow: 0 4px 16px rgba(0,0,0,0.35);
  display: none; align-items: center; justify-content: center;
  cursor: pointer; border: none; transition: transform 0.2s;
}
#floating-music-btn.visible { display: flex; }
#floating-music-btn:hover { transform: scale(1.12); }
#floating-music-btn svg { color: #fff; }
/* When re-parented into the Save the Date screen, force it visible regardless of .visible class */
#std-music-player-slot #floating-music-btn {
  display: flex !important;
  position: relative !important;
  bottom: auto !important; right: auto !important;
  z-index: 1 !important;
  transform: none !important;
  width: 56px !important; height: 56px !important;
  box-shadow: 0 4px 20px rgba(0,0,0,0.3) !important;
}
#std-music-player-slot #floating-music-btn svg {
  width: 22px !important; height: 22px !important;
}
.floating-eq { display: flex; align-items: flex-end; gap: 2px; height: 14px; }
.floating-eq span { width: 3px; border-radius: 2px; background: var(--ev-color); animation: eq-bar 0.8s infinite ease-in-out alternate; }
.floating-eq span:nth-child(2) { animation-delay: 0.15s; }
.floating-eq span:nth-child(3) { animation-delay: 0.3s; }
.floating-eq.paused span { animation-play-state: paused; height: 4px; }

/* ═══ TOPBAR ═══ */
#app-topbar { display: none; position: sticky; top: 0; z-index: 40; background: #007f9f; padding: 0 1rem; height: 56px; align-items: center; justify-content: space-between; box-shadow: 0 2px 12px rgba(0,0,0,0.15); }
#app-topbar.visible { display: flex; }
.topbar-logo { color: #fff; font-weight: 800; font-size: 1.1rem; letter-spacing: 0.01em; display: flex; align-items: center; gap: 0.5rem; }
.topbar-user { color: #fff; font-size: 0.78rem; font-weight: 600; opacity: 0.9; max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hamburger-btn { background: none; border: none; cursor: pointer; padding: 6px; border-radius: 8px; display: flex; flex-direction: column; gap: 4px; }
.hamburger-btn span { display: block; width: 22px; height: 2px; background: #fff; border-radius: 2px; transition: all 0.3s; }
.hamburger-btn.open span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.hamburger-btn.open span:nth-child(2) { opacity: 0; transform: scaleX(0); }
.hamburger-btn.open span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

/* Drawer lateral */
#side-drawer { position: fixed; top: 0; left: -280px; width: 280px; height: 100%; background: #fff; z-index: 200; transition: left 0.32s cubic-bezier(.4,0,.2,1); box-shadow: 4px 0 24px rgba(0,0,0,0.18); display: flex; flex-direction: column; }
#side-drawer.open { left: 0; }
#drawer-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0); z-index: 199; opacity: 0; pointer-events: none; transition: opacity 0.3s; }
#drawer-overlay.open { opacity: 1; pointer-events: all; }
.drawer-header { background: #007f9f; padding: 1.5rem 1.2rem 1.2rem; color: #fff; }
.drawer-avatar { width: 52px; height: 52px; border-radius: 50%; background: rgba(255,255,255,0.2); display: flex; align-items: center; justify-content: center; margin-bottom: 0.6rem; }
.drawer-username { font-weight: 700; font-size: 1rem; }
.drawer-role { font-size: 0.72rem; opacity: 0.8; margin-top: 2px; }
.drawer-nav { flex: 1; overflow-y: auto; padding: 0.75rem 0; }
.drawer-item { display: flex; align-items: center; gap: 0.9rem; padding: 0.85rem 1.4rem; cursor: pointer; color: #374151; font-weight: 600; font-size: 0.93rem; transition: background 0.15s, color 0.15s; border: none; background: none; width: 100%; text-align: left; }
.drawer-item:hover, .drawer-item.active { background: #f0f9fb; color: #007f9f; }
.drawer-item .di-icon { width: 38px; height: 38px; border-radius: 10px; background: #e6f4f7; display: flex; align-items: center; justify-content: center; flex-shrink: 0; transition: background 0.15s; }
.drawer-item:hover .di-icon, .drawer-item.active .di-icon { background: #007f9f22; }
.drawer-item .di-icon svg { width: 18px; height: 18px; color: #007f9f; }
.drawer-sep { height: 1px; background: #e5e7eb; margin: 0.4rem 1.2rem; }
.drawer-footer { padding: 1rem 1.2rem; border-top: 1px solid #e5e7eb; }
.drawer-logout { display: flex; align-items: center; gap: 0.75rem; color: #dc2626; font-weight: 600; font-size: 0.9rem; cursor: pointer; background: none; border: none; width: 100%; padding: 0.6rem 0; }

:root {
  --app-teal: #007f9f;
  --app-teal-deep: #0d9488;
  --app-gold: #007f9f;
  --app-gold-light: #0099bb;
  --app-ink: #1f2937;
  --app-muted: #9ca3af;
  --app-border: #e5e7eb;
  --app-bg: #f9fafb;
  --app-card: #fff;
  --app-radius: 18px;
  --app-shadow: 0 2px 14px rgba(0,0,0,0.06);
  --app-shadow-hover: 0 10px 28px rgba(0,0,0,0.10);
}

/* Quick-action grid */
.quick-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem; margin-bottom: 1.5rem; }
.quick-card { background: var(--app-card); border-radius: var(--app-radius); padding: 1.1rem 0.5rem 0.9rem; display: flex; flex-direction: column; align-items: center; gap: 0.6rem; cursor: pointer; border: 1px solid var(--app-border); transition: all 0.2s; box-shadow: var(--app-shadow); }
.quick-card:hover, .quick-card:active { border-color: var(--app-teal); background: #fff; transform: translateY(-2px); box-shadow: var(--app-shadow-hover); }
.quick-card .qc-icon { width: 44px; height: 44px; border-radius: 13px; background: linear-gradient(135deg, var(--app-gold-light), var(--app-gold)); display: flex; align-items: center; justify-content: center; }
.quick-card .qc-icon svg { width: 20px; height: 20px; color: #fff; }
.quick-card .qc-label { font-size: 0.72rem; font-weight: 700; color: var(--app-ink); text-align: center; line-height: 1.2; }
@media (min-width: 641px) { .quick-grid { grid-template-columns: repeat(4, 1fr); } }

/* Section reorder */
.section-reorder-item { display: flex; align-items: center; gap: 0.75rem; background: #fff; border-radius: 0.75rem; padding: 0.75rem 1rem; border: 1.5px solid #e5e7eb; margin-bottom: 0.5rem; }
.section-reorder-item .sr-label { flex: 1; font-size: 0.9rem; font-weight: 600; color: #374151; }

/* ══════════════════════════════════════════════════════════
   GUEST PAGE — everything below uses var(--ev-color)
   Set by JS: document.documentElement.style.setProperty('--ev-color', color)
   ══════════════════════════════════════════════════════════ */

/* ── Hero ── */
.guest-hero { position: relative; width: 100%; min-height: 100svh; max-height: 100svh; min-height: 100dvh; max-height: 100dvh; display: flex; flex-direction: column; align-items: center; justify-content: center; overflow: hidden; background: #000; }
@media (min-width: 900px) { .guest-hero { min-height: 70vh; max-height: 75vh; } }
.guest-hero-bg { position: absolute; inset: 0; background-size: cover; background-position: center; background-repeat: no-repeat; }

/* Overlay: ONLY a subtle gradient at the bottom for text readability — photo stays visible */
.guest-hero-overlay {
  position: absolute; inset: 0;
  background: linear-gradient(
    to top,
    rgba(0,0,0,0.55) 0%,
    rgba(0,0,0,0.15) 35%,
    rgba(0,0,0,0.00) 65%
  );
}

.guest-hero-content { position: relative; z-index: 2; text-align: center; padding: 2rem 1.5rem; width: 100%; max-width: 700px; margin: 0 auto; margin-top: auto; }
.couple-names { color: #fff; line-height: 1.15; text-shadow: 0 2px 16px rgba(0,0,0,0.6); margin-bottom: 0.5rem; font-weight: 700; animation: coupleEntrance 1.4s cubic-bezier(.22,1,.36,1) 0.3s both; }
@keyframes coupleEntrance { from { opacity: 0; transform: translateY(40px) scale(0.9); } to { opacity: 1; transform: none; } }
.scroll-hint { position: relative; z-index: 3; display: flex; flex-direction: column; align-items: center; gap: 4px; color: rgba(255,255,255,0.8); font-size: 0.72rem; font-weight: 600; animation: bounce-hint 2s infinite; padding-bottom: 1.5rem; }
@keyframes bounce-hint { 0%,100% { transform: translateY(0); } 50% { transform: translateY(8px); } }

/* ── Scroll reveal ── */
.reveal { opacity: 0; transform: translateY(40px); transition: opacity 0.7s cubic-bezier(.4,0,.2,1), transform 0.7s cubic-bezier(.4,0,.2,1); }
.reveal.scale-in { transform: scale(0.88); }
.reveal.visible { opacity: 1 !important; transform: none !important; }
.reveal-stagger > * { opacity: 0; transform: translateY(30px); transition: opacity 0.55s ease, transform 0.55s ease; }
.reveal-stagger.visible > *:nth-child(1) { opacity:1; transform:none; transition-delay:0.05s; }
.reveal-stagger.visible > *:nth-child(2) { opacity:1; transform:none; transition-delay:0.15s; }
.reveal-stagger.visible > *:nth-child(3) { opacity:1; transform:none; transition-delay:0.25s; }
.reveal-stagger.visible > *:nth-child(4) { opacity:1; transform:none; transition-delay:0.35s; }
.reveal-stagger.visible > *:nth-child(5) { opacity:1; transform:none; transition-delay:0.45s; }
.reveal-stagger.visible > *:nth-child(6) { opacity:1; transform:none; transition-delay:0.55s; }
.reveal-stagger.visible > *:nth-child(7) { opacity:1; transform:none; transition-delay:0.65s; }
.reveal-stagger.visible > *:nth-child(8) { opacity:1; transform:none; transition-delay:0.75s; }
/* ✅ CORREÇÃO: as regras acima só cobriam os primeiros 8 itens — qualquer
   9º item ou seguinte (ex: um item extra no Manual do Bom Convidado, mais
   fotos na galeria, etc.) ficava com opacity:0 para sempre, porque nunca
   recebia a classe "visible" combinada com a posição certa. Esta regra
   cobre todos os itens a partir do 9º, com o mesmo atraso do último. */
.reveal-stagger.visible > *:nth-child(n+9) { opacity:1; transform:none; transition-delay:0.75s; }

/* ── Sections ── */
.event-section { width: 100%; padding: 2.5rem 1.25rem; }
.section-inner { max-width: 700px; margin: 0 auto; }
.section-title { font-size: var(--ev-titles-size, 1.6rem); font-weight: 800; color: var(--ev-color); text-align: center; margin-bottom: 1.5rem; }
.section-tag { display: inline-block; font-size: 0.65rem; font-weight: 800; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ev-color); padding: 3px 10px; border: 1.5px solid color-mix(in srgb, var(--ev-color) 20%, transparent); border-radius: 999px; margin-bottom: 0.75rem; background: color-mix(in srgb, var(--ev-color) 8%, white); }
.section-divider { display: flex; align-items: center; justify-content: center; padding: 0 2rem; }
.section-divider-line { width: 100%; max-width: 480px; height: 1px; background: linear-gradient(to right, transparent, #d1d5db 30%, #d1d5db 70%, transparent); }

/* ── Bible ── */
.bible-verse { text-align: center; font-style: italic; color: #4b5563; line-height: 1.8; font-size: 1.05rem; }
.bible-ref { font-style: normal; font-weight: 700; color: var(--ev-color); font-size: 0.85rem; margin-top: 0.5rem; text-align: center; }

/* ── Invitation ── */
.invitation-text { text-align: center; color: #374151; line-height: 2; font-size: calc(1rem * var(--ev-body-scale, 1)); }

/* ── Parents: 2 names per row, two columns side-by-side ── */
.parents-columns { display: flex; gap: 0; justify-content: center; flex-wrap: nowrap; text-align: center; margin-top: 1.5rem; width: 100%; }
.parents-col { flex: 1; min-width: 0; padding: 0 0.75rem; }
.parents-col { flex: 1; min-width: 160px; max-width: 280px; }
.parents-col-title { font-size: 0.68rem; font-weight: 800; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ev-color); margin-bottom: 0.6rem; border-bottom: 1.5px solid color-mix(in srgb, var(--ev-color) 25%, transparent); padding-bottom: 0.4rem; }
/* Grid: 2 names per row within each column */
.parents-name-grid { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 0; }
.parents-name-grid .parent-name:last-child:nth-child(odd) { grid-column: 1 / -1; }
.parent-name { color: #1e293b; font-weight: 600; line-height: 1.85; font-size: 0.88rem; }
.in-memoriam { color: #6b7280; font-size: 0.75rem; font-style: italic; display: block; }
.parents-divider { width: 1px; background: linear-gradient(to bottom, transparent, #d1d5db 20%, #d1d5db 80%, transparent); align-self: stretch; flex-shrink: 0; }

/* ── Date (image style) ── */
.date-display { text-align: center; padding: 0.75rem 1rem 1rem; max-width: 480px; margin: 0 auto; }
.date-weekday-top { font-size: 1.1rem; font-weight: 400; color: var(--ev-color); margin-bottom: 0.35rem; display: flex; align-items: center; justify-content: center; gap: 0.4rem; }
.date-row { display: flex; align-items: center; justify-content: center; }
.date-side { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 0 0.75rem; border-bottom: 1.5px solid color-mix(in srgb, var(--ev-color) 30%, transparent); padding-bottom: 0.3rem; }
.date-side-label { font-size: 0.95rem; color: #374151; }
.date-day-num { font-size: clamp(2.8rem, 10vw, 4.2rem); font-weight: 900; color: var(--ev-color); line-height: 1; padding: 0 0.5rem; }
@media (max-width: 400px) { .date-side-label { font-size: 0.8rem; } .date-day-num { font-size: 2.8rem; } }

/* ── Countdown ── */
.countdown-section-grid { display: flex; justify-content: center; gap: 0.75rem; flex-wrap: nowrap; overflow-x: auto; padding: 0 1rem; -webkit-overflow-scrolling: touch; }
.countdown-section-box { background: var(--ev-color); color: #fff; border-radius: 0.875rem; padding: 0.75rem 0.9rem; text-align: center; min-width: 58px; box-shadow: 0 3px 6px color-mix(in srgb, var(--ev-color) 35%, transparent); }
.countdown-section-box .cdb-num { font-size: clamp(1.4rem, 5vw, 2.2rem); font-weight: 900; line-height: 1; }
.countdown-section-box .cdb-label { font-size: clamp(0.55rem, 1.5vw, 0.65rem); font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.85; margin-top: 2px; }
@media (max-width: 380px) { .countdown-section-box { padding: 0.6rem 0.65rem; min-width: 50px; } .countdown-section-grid { gap: 0.4rem; } }

/* ── Story ── */
.story-section { background: linear-gradient(135deg, #f8fafc, #f0f9fb); }
.story-text { color: #374151; line-height: 1.9; font-size: 1rem; white-space: pre-line; text-align: center; }

/* ── Gallery ── */
.gallery-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.5rem; }
@media(min-width:640px) { .gallery-grid { grid-template-columns: repeat(3, 1fr); } }
.gallery-item { aspect-ratio: 1; overflow: hidden; border-radius: 1rem; cursor: pointer; position: relative; box-shadow: 0 3px 12px rgba(0,0,0,0.1); transition: transform 0.3s, box-shadow 0.3s; }
.gallery-item:hover { transform: scale(1.03); box-shadow: 0 6px 20px rgba(0,0,0,0.18); }
.gallery-item img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.4s; display: block; }
.gallery-item:hover img { transform: scale(1.1); }

/* ── Manual ── */
.manual-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; }
@media(min-width:480px) { .manual-grid { grid-template-columns: repeat(3, 1fr); } }
@media(min-width:640px) { .manual-grid { grid-template-columns: repeat(4, 1fr); } }

/* ── Dress Code + Sugestão de Presentes: secção de 2 cartões com título ── */
.dg-buttons-grid { display: grid; gap: 1rem; max-width: 480px; margin: 0 auto; }
.dg-card {
  display: flex; flex-direction: column; align-items: center; text-align: center; gap: 0.4rem;
  background: #fff; border: 1px solid #f1f5f9; border-radius: 1.25rem;
  padding: 1.5rem 1.1rem; transition: transform 0.2s, box-shadow 0.2s;
  box-shadow: 0 4px 16px rgba(0,0,0,0.06);
}
.dg-card:hover { transform: translateY(-3px); box-shadow: 0 10px 24px rgba(0,0,0,0.1); }
.dg-card-title { font-size: 0.95rem; font-weight: 800; color: #1e293b; margin: 0; }
.dg-card-sub { font-size: 0.74rem; color: #6b7280; line-height: 1.4; margin: 0 0 0.4rem; }
.dg-card-btn {
  background: var(--ev-color, #007f9f); color: #fff; border: none; border-radius: 999px;
  padding: 0.55rem 1.2rem; font-size: 0.8rem; font-weight: 700; cursor: pointer;
  font-family: inherit; transition: filter 0.2s, transform 0.2s; width: 100%;
}
.dg-card-btn:hover { filter: brightness(0.92); }
.dg-card-btn:active { transform: scale(0.98); }

/* ── Alternância grelha/lista (presentes) ── */
.gift-view-toggle-btn {
  display: flex; align-items: center; justify-content: center; width: 28px; height: 24px;
  border-radius: 999px; border: none; background: transparent; color: #94a3b8; cursor: pointer; transition: all 0.15s;
}
.gift-view-toggle-btn.active-view { background: #fff; color: #007f9f; box-shadow: 0 1px 3px rgba(0,0,0,0.12); }

/* ── Paginação dos presentes ── */
.gifts-page-btn {
  min-width: 28px; height: 28px; padding: 0 6px; border-radius: 8px; border: 1px solid #e5e7eb;
  background: #fff; color: #475569; font-size: 0.78rem; font-weight: 600; cursor: pointer; transition: all 0.15s;
}
.gifts-page-btn:hover { border-color: #007f9f; color: #007f9f; }
.gifts-page-btn.active-page { background: #007f9f; border-color: #007f9f; color: #fff; }
.manual-item { display: flex; flex-direction: column; align-items: center; background: #fff; border-radius: 1rem; padding: 1rem 0.5rem; border: 1.5px solid #e5e7eb; text-align: center; box-shadow: 0 1px 4px rgba(0,0,0,0.06); }
.manual-item .mi-icon { width: 48px; height: 48px; background: color-mix(in srgb, var(--ev-color) 12%, white); border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-bottom: 0.5rem; }
.manual-item .mi-icon svg, .manual-item .mi-icon i { width: 26px; height: 26px; color: var(--ev-color); }
.manual-item .mi-text { font-size: calc(0.75rem * var(--ev-body-scale, 1)); font-weight: 600; color: #374151; line-height: 1.3; }

/* ── Zigzag Timeline (Itinerário) ── */
.timeline-wrap { position: relative; padding: 0 0.5rem; max-width: 640px; margin: 0 auto; }
.timeline-line { position: absolute; left: 50%; top: 0; bottom: 0; width: 2px; background: linear-gradient(to bottom, transparent, var(--ev-color) 8%, var(--ev-color) 92%, transparent); transform: translateX(-50%); }
.tl-item { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 0; margin-bottom: 2.5rem; }
.tl-item:last-child { margin-bottom: 0; }
.tl-card { background: #fff; border-radius: 1rem; padding: 0.85rem 1rem; box-shadow: 0 2px 12px rgba(0,0,0,0.07); border: 1.5px solid #e5e7eb; }
.tl-card-left  { grid-column: 1; text-align: right; padding-right: 1.25rem; }
.tl-card-right { grid-column: 3; text-align: left;  padding-left:  1.25rem; }
.tl-node { grid-column: 2; width: 28px; height: 28px; border-radius: 50%; background: var(--ev-color); display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; margin: 0 auto; }
.tl-node svg, .tl-node i { width: 12px; height: 12px; color: #fff; }
.tl-time { font-size: 0.75rem; font-weight: 800; color: var(--ev-color); margin-bottom: 2px; }
.tl-label { font-weight: 700; color: #1e293b; font-size: 0.9rem; }
.tl-sub { font-size: 0.75rem; color: #6b7280; margin-top: 2px; }
/* Itinerary: maintain zigzag on ALL screen sizes */
@media (max-width: 480px) {
  .tl-card { padding: 0.6rem 0.7rem; }
  .tl-card-left { padding-right: 0.6rem; }
  .tl-card-right { padding-left: 0.6rem; }
  .tl-node { width: 24px; height: 24px; }
  .tl-node svg, .tl-node i { width: 10px; height: 10px; }
  .tl-time { font-size: 0.68rem; }
  .tl-label { font-size: 0.8rem; }
  .tl-sub { font-size: 0.7rem; }
}

/* ── IBAN ── */
.iban-card { background: linear-gradient(135deg, #f0f9fb, #e6f4f7); border: 1.5px solid color-mix(in srgb, var(--ev-color) 25%, transparent); border-radius: 1rem; padding: 1.1rem 1.2rem; margin-bottom: 1rem; }
.iban-value { font-family: 'Courier New', monospace; font-size: 0.88rem; font-weight: 700; color: var(--ev-color); letter-spacing: 0.03em; word-break: break-all; text-align: center; display: block; }
.iban-copy-btn { display: inline-flex; align-items: center; gap: 0.4rem; background: var(--ev-color); color: #fff; border: none; border-radius: 0.5rem; padding: 0.4rem 0.9rem; font-size: 0.78rem; font-weight: 700; cursor: pointer; transition: 0.2s; margin-top: 0.5rem; }
.iban-copy-btn:hover { filter: brightness(0.85); }
.iban-copy-btn.copied { background: #16a34a; }

/* ── RSVP CTA section ── */
.rsvp-cta-section { background: var(--ev-color); padding: 3.5rem 1.5rem; text-align: center; }
.dg-card-btn,
#rsvp-form button[type="submit"],
.iban-copy-btn,
.countdown-section-box,
.rsvp-cta-section .action-btn-label {
  text-shadow: 0 1px 3px rgba(0,0,0,0.35);
}
.rsvp-cta-title { color: #fff; font-size: 1.6rem; font-weight: 800; margin-bottom: 0.5rem; }
.rsvp-cta-sub { color: rgba(255,255,255,0.8); font-size: 0.9rem; margin-bottom: 1.5rem; }
.rsvp-cta-deadline { display: inline-flex; gap: 0.75rem; margin-bottom: 2rem; flex-wrap: wrap; justify-content: center; }
.rsvp-cta-box { background: rgba(255,255,255,0.18); border-radius: 0.75rem; padding: 0.6rem 0.9rem; min-width: 60px; }
.rsvp-cta-box .n { font-size: 1.6rem; font-weight: 900; color: var(--ev-countdown-color, #fff); line-height: 1; }
.rsvp-cta-box .l { font-size: 0.6rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--ev-countdown-color, rgba(255,255,255,0.75)); margin-top: 2px; }
.rsvp-cta-btn { display: inline-flex; align-items: center; gap: 0.6rem; background: #fff; color: var(--ev-button-color, var(--ev-color)); font-weight: 800; font-size: 1rem; padding: 0.9rem 2.5rem; border-radius: 999px; border: none; cursor: pointer; box-shadow: 0 4px 20px rgba(0,0,0,0.2); transition: all 0.2s; }
/* ✅ Esta regra (mais específica) garante que o texto deste botão usa a
   mesma cor do botão (a cor do evento) — sem isto, a regra mais acima
   pensada para os ícones redondos (".action-btn-label { color: ... }")
   ganhava por ter mais especificidade, e o texto ficava branco em cima de
   um fundo branco (só visível pela sombra), o que ficava feio e ilegível. */
.rsvp-cta-btn .action-btn-label { color: inherit; }
.rsvp-cta-btn:hover { transform: translateY(-2px); box-shadow: 0 8px 28px rgba(0,0,0,0.25); }

/* ── RSVP Drawer ── */
#rsvp-drawer { position: fixed; inset: 0; z-index: 9500; display: flex; flex-direction: column; justify-content: flex-end; pointer-events: none; visibility: hidden; }
#rsvp-drawer.open { pointer-events: all; visibility: visible; }
#rsvp-drawer-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,0); transition: background 0.35s; }
#rsvp-drawer.open #rsvp-drawer-backdrop { background: rgba(0,0,0,0.45); }
#rsvp-drawer-panel { position: relative; z-index: 1; background: #fff; border-radius: 1.5rem 1.5rem 0 0; max-height: 92dvh; overflow-y: auto; transform: translateY(110%); transition: transform 0.4s cubic-bezier(.4,0,.2,1), visibility 0s 0.4s; padding: 0 0 2rem 0; visibility: hidden; }
#rsvp-drawer.open #rsvp-drawer-panel { transform: translateY(0); visibility: visible; transition: transform 0.4s cubic-bezier(.4,0,.2,1); }

/* ── Background cover ── */
.guest-bg-cover { position: fixed; inset: 0; z-index: -1; background-size: cover; background-position: center; background-repeat: no-repeat; }
@media (max-width: 640px) { .guest-bg-cover { background-attachment: scroll; } }
@media (min-width: 641px) { .guest-bg-cover { background-attachment: fixed; } }
.guest-bg-overlay-el { position: fixed; inset: 0; z-index: -1; }

/* ── Responsive ── */
@media (max-width: 640px) {
  .btn-main, .btn-outline { padding: 0.55rem 1rem; font-size: 0.9rem; }
  .modal-content { max-width: 100%; }
}

/* Countdown — always single row */
@media (max-width: 360px) {
  .countdown-section-box { min-width: 56px; padding: 0.7rem 0.5rem; }
  .countdown-section-box .cdb-num { font-size: 1.7rem; }
}

/* RSVP drawer submit button uses event color */
#rsvp-form button[type="submit"] {
  background: var(--ev-color) !important;
  border-radius: 999px; padding: 0.9rem; font-size: 1rem; font-weight: 800;
}
/* IBAN card icon uses event color */
.iban-icon-color { color: var(--ev-color) !important; stroke: var(--ev-color) !important; }

/* ── RSVP drawer elements use event color ── */
#rsvp-drawer .text-teal-500,
#rsvp-drawer a.text-teal-500,
#rsvp-drawer button.text-teal-500 { color: var(--ev-color) !important; }
#rsvp-drawer .accent-teal-500 { accent-color: var(--ev-color) !important; }

/* ── Slower reveal animations — match scrolling pace ── */
.reveal {
  opacity: 0;
  transform: translateY(60px);
  transition: opacity 1.6s cubic-bezier(.25,0.46,0.45,0.94),
              transform 1.6s cubic-bezier(.25,0.46,0.45,0.94);
}
.reveal.scale-in { transform: scale(0.9); }
.reveal.visible  { opacity: 1 !important; transform: none !important; }
.reveal-stagger > * {
  opacity: 0; transform: translateY(40px);
  transition: opacity 1.4s ease, transform 1.4s ease;
}
.reveal-stagger.visible > *:nth-child(1) { opacity:1; transform:none; transition-delay:0.12s; }
.reveal-stagger.visible > *:nth-child(2) { opacity:1; transform:none; transition-delay:0.28s; }
.reveal-stagger.visible > *:nth-child(3) { opacity:1; transform:none; transition-delay:0.44s; }
.reveal-stagger.visible > *:nth-child(4) { opacity:1; transform:none; transition-delay:0.60s; }
.reveal-stagger.visible > *:nth-child(5) { opacity:1; transform:none; transition-delay:0.76s; }
.reveal-stagger.visible > *:nth-child(6) { opacity:1; transform:none; transition-delay:1.08s; }
.reveal-stagger.visible > *:nth-child(7) { opacity:1; transform:none; transition-delay:1.08s; }
.reveal-stagger.visible > *:nth-child(8) { opacity:1; transform:none; transition-delay:1.24s; }
/* ✅ Mesma correção do bloco anterior: cobre o 9º item e seguintes. */
.reveal-stagger.visible > *:nth-child(n+9) { opacity:1; transform:none; transition-delay:1.24s; }

/* ── Floating music button — circular spinner ring ── */
#floating-music-btn {
  position: fixed; bottom: max(1.5rem, env(safe-area-inset-bottom)); right: max(1.5rem, env(safe-area-inset-right)); z-index: 150;
  width: 52px; height: 52px; border-radius: 50%;
  background: linear-gradient(135deg, #0f172a, #1e3a4a);
  box-shadow: 0 4px 18px rgba(0,0,0,0.4);
  display: none; align-items: center; justify-content: center;
  cursor: pointer; border: none; transition: transform 0.2s;
  padding: 0;
}
#floating-music-btn.visible { display: flex; }
#floating-music-btn:hover { transform: scale(1.1); }
#floating-music-btn .fmb-ring {
  position: absolute; inset: -3px; border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: var(--ev-color);
  animation: spin-ring 1.8s linear infinite;
}
#floating-music-btn.paused .fmb-ring { animation-play-state: paused; border-top-color: rgba(255,255,255,0.3); }
@keyframes spin-ring { to { transform: rotate(360deg); } }

/* ── Music player — slightly rounded ── */
.music-player { border-radius: 0.5rem; margin: 0 0; }

/* ── Itinerary — no cards, just icon + time + label ── */
.tl-card { display: none !important; }
.tl-item { display: flex; align-items: center; gap: 1rem; margin-bottom: 2.5rem; justify-content: center; position: relative; }
.tl-item:last-child { margin-bottom: 0; }
.tl-node { flex-shrink: 0; width: 28px; height: 28px; border-radius: 50%; background: var(--ev-color); display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; }
.tl-node svg, .tl-node i { width: 12px; height: 12px; color: #fff; }
.tl-content { text-align: left; }
.tl-time  { font-size: 0.78rem; font-weight: 800; color: var(--ev-color); }
.tl-label { font-weight: 700; color: #1e293b; font-size: 0.95rem; }
.tl-sub   { font-size: 0.75rem; color: #6b7280; }
.timeline-wrap { max-width: 460px; margin: 0 auto; }

/* ── Guest page footer ── */
.guest-footer {
  background: #0f172a; color: rgba(255,255,255,0.6);
  padding: 2rem 1.5rem; text-align: center; font-size: 0.78rem;
  line-height: 2;
}
.guest-footer a { color: rgba(255,255,255,0.5); text-decoration: underline; }
.guest-footer a:hover { color: #fff; }
.guest-footer .gf-promo {
  background: linear-gradient(135deg, var(--ev-color,#007f9f), #0d4f6a);
  color: #fff; border-radius: 1rem; padding: 1.25rem 1.5rem;
  margin-bottom: 1.5rem; font-size: 0.88rem; line-height: 1.6;
}
.guest-footer .gf-promo a { color: #fff; font-weight: 700; text-decoration: none; }


/* ── Player positioned below hero as centred pill ── */
#guest-music-player {
  position: relative;
  z-index: 10;
  display: flex !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

/* ════════════════════════════════════════════════════════════════
   LANDING PAGE — premium, clean, fully responsive design system
   ════════════════════════════════════════════════════════════════ */
.landing-page {
  --lp-navy: #0a1628;
  --lp-navy-2: #11233b;
  --lp-teal: #007f9f;
  --lp-teal-light: #5eead4;
  --lp-gold: #c9a84c;
  --lp-gold-light: #e3c878;
  --lp-ink: #16202e;
  --lp-muted: #64748b;
  --lp-muted-2: #94a3b8;
  --lp-border: #e7eaf0;
  --lp-bg-alt: #f7f8fb;
  --lp-radius-s: 14px;
  --lp-radius-m: 20px;
  --lp-radius-l: 28px;
  --lp-shadow-s: 0 2px 10px rgba(10,22,40,0.06);
  --lp-shadow-m: 0 10px 30px rgba(10,22,40,0.10);
  --lp-shadow-l: 0 24px 60px rgba(10,22,40,0.16);
  --lp-container: 1180px;
  --lp-gap: clamp(1.5rem, 4vw, 3rem);
  font-family: 'Inter', sans-serif;
  color: var(--lp-ink);
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
}
.landing-page * { font-family: inherit; box-sizing: border-box; }
.landing-page h1, .landing-page h2, .landing-page h3 { font-family: 'Playfair Display', serif; letter-spacing: -0.01em; }

/* ── Shared section scaffolding ── */
.landing-section {
  padding: clamp(3.5rem, 8vw, 6.5rem) max(1.25rem, env(safe-area-inset-left)) clamp(3.5rem, 8vw, 6.5rem) max(1.25rem, env(safe-area-inset-right));
  background: #fff;
}
.landing-section--alt { background: var(--lp-bg-alt); }
.landing-section > * { max-width: var(--lp-container); margin-left: auto; margin-right: auto; }
.landing-eyebrow {
  text-align: center; font-size: 0.72rem; font-weight: 800; letter-spacing: 0.18em;
  text-transform: uppercase; color: var(--lp-teal); margin-bottom: 0.75rem;
}
.landing-page .landing-section-title {
  font-family: 'Inter', sans-serif; font-size: clamp(1.55rem, 3.6vw, 2.5rem); font-weight: 800; color: var(--lp-ink);
  text-align: center; margin-bottom: 0.6rem; line-height: 1.25; letter-spacing: -0.01em;
}
.landing-section-sub {
  text-align: center; color: var(--lp-muted); font-size: clamp(0.92rem, 1.6vw, 1.02rem);
  line-height: 1.65; margin: 0 auto 2.75rem; max-width: 560px;
}
.landing-section-sub--tight { margin-bottom: 0.5rem; }
.landing-fineprint { text-align: center; font-size: 0.82rem; color: var(--lp-muted-2); margin-top: 2rem; max-width: var(--lp-container); margin-left: auto; margin-right: auto; }
.landing-center { text-align: center; }

/* ── HERO — claro, limpo, premium ── */
.landing-hero {
  position: relative; overflow: hidden;
  background: var(--lp-bg-alt);
  padding: clamp(7.5rem, 14vw, 10rem) max(1.5rem, env(safe-area-inset-left)) clamp(3rem, 6vw, 4rem);
}
.landing-hero-grid {
  position: relative; max-width: var(--lp-container); margin: 0 auto;
  display: grid; grid-template-columns: 1.05fr 0.95fr; align-items: center; gap: clamp(2rem, 5vw, 4rem);
}
.landing-hero-copy { text-align: left; }
.landing-eyebrow-line {
  display: flex; align-items: center; gap: 0.6rem;
  font-size: 0.7rem; font-weight: 800; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--lp-teal); margin-bottom: 1.25rem;
}
.landing-eyebrow-line::before { content: ''; width: 22px; height: 1.5px; background: var(--lp-gold); flex-shrink: 0; }
.landing-hero .landing-h1 {
  font-family: 'Inter', sans-serif; font-size: clamp(2.1rem, 4.6vw, 3.5rem); font-weight: 800;
  color: var(--lp-ink); line-height: 1.12; margin-bottom: 1.25rem; letter-spacing: -0.02em;
}
.landing-h1-accent { color: var(--lp-teal); }
.landing-sub {
  color: var(--lp-muted); font-size: clamp(0.95rem, 1.4vw, 1.08rem);
  line-height: 1.7; margin: 0 0 2rem; max-width: 460px; font-family: 'Inter', sans-serif;
}
.landing-actions { display: flex; gap: 0.75rem; flex-wrap: wrap; margin-bottom: 1.75rem; }
.landing-btn-primary {
  background: var(--lp-teal); color: #fff; font-weight: 700; padding: 0.85rem 1.7rem; border-radius: 999px; border: none;
  cursor: pointer; font-size: 0.92rem; display: inline-flex; align-items: center; gap: 0.5rem;
  transition: transform 0.2s, box-shadow 0.2s, background 0.2s; box-shadow: 0 10px 24px rgba(0,127,159,0.22);
}
.landing-btn-primary:hover { transform: translateY(-2px); background: #006b86; box-shadow: 0 14px 28px rgba(0,127,159,0.3); }
.landing-btn-primary:active { transform: translateY(0); }
.landing-btn-outline {
  background: #fff; color: var(--lp-ink); font-weight: 600; padding: 0.85rem 1.7rem;
  border-radius: 999px; border: 1.5px solid var(--lp-border); cursor: pointer;
  font-size: 0.92rem; transition: all 0.2s;
}
.landing-btn-outline:hover { border-color: var(--lp-teal); color: var(--lp-teal); }
.landing-btn-outline-dark {
  background: transparent; color: var(--lp-ink); font-weight: 600; padding: 0.7rem 1.6rem;
  border-radius: 999px; border: 1.5px solid var(--lp-border); cursor: pointer; font-size: 0.85rem; transition: all 0.2s;
}
.landing-btn-outline-dark:hover { border-color: var(--lp-teal); color: var(--lp-teal); }
.landing-btn-solid {
  background: var(--lp-teal); color: #fff; border: none; border-radius: 999px;
  padding: 0.8rem 2.1rem; font-weight: 700; font-size: 0.92rem; cursor: pointer; transition: all 0.2s;
}
.landing-btn-solid:hover { background: #006b86; transform: translateY(-1px); box-shadow: 0 8px 20px rgba(0,127,159,0.3); }

.landing-trust-row {
  display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap;
  font-size: 0.8rem; color: var(--lp-muted-2); font-weight: 600;
}
.landing-trust-dot { width: 3px; height: 3px; border-radius: 50%; background: var(--lp-muted-2); flex-shrink: 0; }

/* Visual de assinatura: convites empilhados com selo, em vez de fotos de telefone */
.landing-hero-visual {
  position: relative; height: clamp(320px, 36vw, 420px); display: flex; align-items: center; justify-content: center;
}
.invite-card {
  position: absolute; width: clamp(150px, 17vw, 200px); aspect-ratio: 3/4.2; border-radius: 18px;
  box-shadow: 0 24px 50px -12px rgba(10,22,40,0.22); display: flex; align-items: center; justify-content: center;
  transition: transform 0.4s ease;
}
.landing-hero-visual:hover .invite-card { transform: translateY(-6px); }
.invite-card--1 { background: linear-gradient(155deg, #fdfaf6 50%, #f3e6c8); transform: rotate(-9deg) translate(-38%, 6%); z-index: 1; }
.invite-card--2 { background: linear-gradient(155deg, #0f2236 50%, #173249); transform: rotate(0deg); z-index: 2; box-shadow: 0 28px 60px -10px rgba(10,22,40,0.35); }
.invite-card--3 { background: linear-gradient(155deg, #fff 50%, #d6ecf1); transform: rotate(9deg) translate(38%, 6%); z-index: 1; }
.invite-seal {
  width: 52px; height: 52px; border-radius: 50%; background: rgba(255,255,255,0.9);
  display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 14px rgba(0,0,0,0.18);
  font-family: 'Playfair Display', serif; font-style: italic; font-weight: 700; font-size: 0.92rem; color: var(--lp-teal);
}
.invite-card--2 .invite-seal { background: rgba(255,255,255,0.95); color: var(--lp-gold); }
.invite-card--photo { position: relative; }
.invite-card--photo::after {
  content: ''; position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(to top, rgba(10,22,40,0.45), transparent 55%);
}
.invite-card--photo .invite-seal { position: relative; z-index: 1; }

.landing-search {
  display: flex; align-items: center; gap: 0; max-width: 460px; margin: clamp(2.5rem, 6vw, 4rem) auto 0;
  background: #fff; border-radius: 999px; border: 1px solid var(--lp-border);
  overflow: hidden; box-shadow: var(--lp-shadow-s); padding-left: 1.1rem; position: relative; z-index: 1;
}
.landing-search svg { color: var(--lp-muted-2); flex-shrink: 0; }
.landing-search input { flex: 1; min-width: 0; background: transparent; border: none; outline: none; color: var(--lp-ink); font-size: 0.9rem; padding: 0.85rem 0.75rem; }
.landing-search input::placeholder { color: var(--lp-muted-2); }
.landing-search button {
  background: var(--lp-teal); color: #fff; border: none; padding: 0 1.4rem; height: 100%;
  font-weight: 700; font-size: 0.85rem; cursor: pointer; align-self: stretch; transition: background 0.2s;
}
.landing-search button:hover { background: #006b86; }

/* ── Nav — clara, sticky, sombra leve ao fazer scroll ── */
.landing-nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 50;
  display: flex; align-items: center; justify-content: space-between;
  padding: 1.1rem clamp(1.25rem, 4vw, 2.5rem);
  padding-top: max(1.1rem, env(safe-area-inset-top));
  background: rgba(251,250,248,0.7); backdrop-filter: blur(10px);
  transition: background 0.3s ease, box-shadow 0.3s ease, padding 0.3s ease;
}
.landing-nav.scrolled {
  background: rgba(255,255,255,0.92) !important; box-shadow: 0 2px 16px rgba(10,22,40,0.08);
  backdrop-filter: blur(14px); padding-top: max(0.75rem, env(safe-area-inset-top));
  padding-bottom: 0.75rem;
}
.landing-logo { display: flex; align-items: center; gap: 0.55rem; }
.landing-logo-mark {
  width: 34px; height: 34px; border-radius: 10px; flex-shrink: 0;
  background: linear-gradient(135deg, var(--lp-gold-light), var(--lp-gold));
  color: #1a1206; font-weight: 800; font-size: 0.8rem; font-family: 'Inter', sans-serif;
  display: flex; align-items: center; justify-content: center;
}
.landing-logo-text { font-weight: 800; font-size: 1.02rem; color: var(--lp-ink); letter-spacing: -0.01em; font-family: 'Inter', sans-serif; }
.landing-nav-links { display: flex; align-items: center; gap: 0.3rem; }
.landing-nav-link {
  color: var(--lp-muted); text-decoration: none; font-weight: 600; font-size: 0.86rem;
  padding: 0.5rem 0.9rem; border-radius: 999px; transition: background 0.2s, color 0.2s;
}
.landing-nav-link:hover { background: rgba(0,127,159,0.08); color: var(--lp-teal); }
.landing-nav-cta {
  background: var(--lp-ink); border: 1.5px solid var(--lp-ink); color: #fff;
  font-weight: 700; font-size: 0.84rem; padding: 0.5rem 1.2rem; border-radius: 999px; cursor: pointer;
  margin-left: 0.4rem; transition: opacity 0.2s;
}
.landing-nav-cta:hover { opacity: 0.82; }
.landing-nav-toggle {
  display: none; flex-direction: column; justify-content: center; gap: 5px;
  width: 40px; height: 40px; border-radius: 10px; background: rgba(10,22,40,0.05);
  border: 1px solid var(--lp-border); cursor: pointer; flex-shrink: 0;
}
.landing-nav-toggle span { display: block; width: 18px; height: 2px; background: var(--lp-ink); margin: 0 auto; border-radius: 1px; transition: transform 0.25s, opacity 0.25s; }
.landing-nav-toggle.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.landing-nav-toggle.open span:nth-child(2) { opacity: 0; }
.landing-nav-toggle.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* ── Cabeçalho simples das sub-páginas (Preços, FAQ) ── */
.landing-subpage-nav {
  display: flex; align-items: center; justify-content: space-between;
  padding: 1.1rem clamp(1.25rem, 4vw, 2.5rem); padding-top: max(1.1rem, env(safe-area-inset-top));
  border-bottom: 1px solid var(--lp-border); background: #fff;
}
#screen-pricing, #screen-faq { background: #fff; min-height: 100%; }
.landing-subpage-back {
  display: flex; align-items: center; gap: 0.4rem; background: none; border: none;
  color: var(--lp-muted); font-weight: 700; font-size: 0.88rem; cursor: pointer; padding: 0.4rem 0.6rem 0.4rem 0;
  transition: color 0.2s;
}
.landing-subpage-back:hover { color: var(--lp-teal); }

@media (max-width: 860px) {
  .landing-hero-grid { grid-template-columns: 1fr; text-align: center; }
  .landing-hero-copy { text-align: center; }
  .landing-eyebrow-line { justify-content: center; }
  .landing-eyebrow-line::before { display: none; }
  .landing-sub { margin: 0 auto 2rem; }
  .landing-actions { justify-content: center; }
  .landing-trust-row { justify-content: center; }
  .landing-hero-visual { height: clamp(220px, 50vw, 300px); margin-top: 1rem; }
  .invite-card { width: clamp(120px, 30vw, 160px); }
}

/* ── Features ── */
.landing-features { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.1rem; max-width: 900px; }
.lf-card {
  background: #fff; border-radius: var(--lp-radius-m); padding: 1.6rem 1.4rem;
  border: 1px solid var(--lp-border); box-shadow: var(--lp-shadow-s);
  transition: transform 0.25s, box-shadow 0.25s;
}
.lf-card:hover { transform: translateY(-4px); box-shadow: var(--lp-shadow-m); }
.lf-card .lf-icon {
  width: 46px; height: 46px; border-radius: 12px; display: flex; align-items: center; justify-content: center;
  background: rgba(0,127,159,0.08); color: var(--lp-teal); margin-bottom: 0.9rem;
}
.lf-card h3 { font-family: 'Inter', sans-serif; font-weight: 700; color: var(--lp-ink); margin-bottom: 0.3rem; font-size: 0.98rem; }
.lf-card p { color: var(--lp-muted); font-size: 0.85rem; line-height: 1.55; margin: 0; }

/* ── Packages ── */
.landing-packages { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.25rem; max-width: 920px; }
.lp-card {
  border-radius: var(--lp-radius-m); padding: 2rem 1.6rem; background: #fff;
  border: 1px solid var(--lp-border); text-align: center; position: relative; box-shadow: var(--lp-shadow-s);
  transition: transform 0.25s, box-shadow 0.25s;
}
.lp-card:hover { transform: translateY(-4px); }
.lp-card.lp-featured { border-color: var(--lp-teal); box-shadow: 0 14px 36px rgba(0,127,159,0.18); }
.lp-card.lp-featured::before {
  content: '★ Mais escolhido'; position: absolute; top: -13px; left: 50%; transform: translateX(-50%);
  background: var(--lp-teal); color: #fff; font-size: 0.66rem; font-weight: 800; letter-spacing: 0.04em;
  padding: 0.3rem 0.9rem; border-radius: 999px; white-space: nowrap;
}
.lp-badge { display: inline-block; font-size: 0.72rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.06em; padding: 4px 12px; border-radius: 999px; margin-bottom: 1rem; }
.lp-price { font-family: 'Inter', sans-serif; font-size: 1.7rem; font-weight: 800; color: var(--lp-ink); margin-bottom: 0.5rem; word-break: break-word; }
.lp-desc { color: #374151; font-size: 0.86rem; margin: 0.5rem 0; line-height: 1.5; }
.lp-detail { color: var(--lp-muted); font-size: 0.84rem; font-weight: 600; margin-bottom: 1.5rem; }
.lp-btn {
  background: var(--lp-teal); color: #fff; border: none; border-radius: 999px; padding: 0.75rem 1.75rem;
  font-weight: 700; cursor: pointer; font-size: 0.9rem; width: 100%; transition: all 0.2s;
}
.lp-btn:hover { background: #006b86; transform: translateY(-1px); box-shadow: 0 8px 18px rgba(0,127,159,0.28); }

/* ── FAQ ── */
.faq-list { max-width: 680px; margin: 0 auto; background: #fff; border: 1px solid var(--lp-border); border-radius: var(--lp-radius-m); padding: 0.4rem 1.4rem; box-shadow: var(--lp-shadow-s); }
.faq-item { border-bottom: 1px solid var(--lp-border); }
.faq-item:last-child { border-bottom: none; }
.faq-q { width: 100%; background: none; border: none; text-align: left; padding: 1.15rem 0; font-weight: 700; color: var(--lp-ink); font-size: 0.95rem; cursor: pointer; display: flex; justify-content: space-between; align-items: center; gap: 1rem; font-family: 'Inter', sans-serif; }
.faq-q svg { flex-shrink: 0; transition: transform 0.3s; color: var(--lp-muted); }
.faq-item.open .faq-q svg { transform: rotate(180deg); }
.faq-a { max-height: 0; overflow: hidden; transition: max-height 0.4s ease; color: var(--lp-muted); font-size: 0.9rem; line-height: 1.65; }
.faq-item.open .faq-a { max-height: 300px; padding-bottom: 1.15rem; }

/* ── Reviews (cards injected by JS keep inline styles; this elevates them) ── */
.landing-reviews-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 1.1rem; max-width: 920px; margin: 0 auto 2.5rem; }
.landing-reviews-grid > div { border-radius: var(--lp-radius-m) !important; box-shadow: var(--lp-shadow-s) !important; border: 1px solid var(--lp-border); }

/* ── Footer ── */
.landing-footer { background: var(--lp-navy); padding: clamp(3rem, 6vw, 4rem) 1.5rem 1.5rem; color: rgba(255,255,255,0.62); font-size: 0.86rem; line-height: 1.75; }
.landing-footer-inner { max-width: var(--lp-container); margin: 0 auto; display: grid; grid-template-columns: 1.3fr 1fr 1fr; gap: 2.5rem; margin-bottom: 2.5rem; }
.landing-footer-col { display: flex; flex-direction: column; gap: 0.35rem; }
.landing-footer-brand { font-size: 1.05rem; color: #fff; font-family: 'Playfair Display', serif; }
.landing-footer-line { display: block; }
.landing-footer-hours { font-size: 0.78rem; opacity: 0.6; margin-top: 0.25rem; }
.landing-footer-col strong { color: #fff; margin-bottom: 0.25rem; font-family: 'Inter', sans-serif; }
.landing-footer a { color: rgba(255,255,255,0.55); text-decoration: none; }
.landing-footer a:hover { color: #fff; text-decoration: underline; }
.landing-social-row { display: flex; justify-content: center; gap: 1rem; flex-wrap: wrap; margin-bottom: 2rem; }
.landing-social-btn {
  display: flex; align-items: center; justify-content: center; width: 42px; height: 42px;
  border-radius: 50%; background: rgba(255,255,255,0.07); color: #fff; transition: background 0.2s, transform 0.2s;
  border: 1px solid rgba(255,255,255,0.1);
}
.landing-social-btn:hover { background: rgba(255,255,255,0.18); transform: translateY(-2px); }
.landing-footer-copy { text-align: center; font-size: 0.76rem; opacity: 0.45; border-top: 1px solid rgba(255,255,255,0.08); padding-top: 1.25rem; max-width: var(--lp-container); margin: 0 auto; }

/* ── Stats band — clara, coerente com o resto da página ── */
.landing-stats {
  background: var(--lp-bg-alt);
  padding: clamp(3rem, 6vw, 4.5rem) 1.5rem; text-align: center;
  border-top: 1px solid var(--lp-border); border-bottom: 1px solid var(--lp-border);
}
.landing-page .landing-stats-title { font-family: 'Inter', sans-serif; color: var(--lp-ink); font-size: clamp(1.3rem, 3vw, 1.7rem); font-weight: 800; margin-bottom: 0.4rem; letter-spacing: -0.01em; }
.landing-stats-sub { color: var(--lp-muted); font-size: 0.9rem; margin-bottom: clamp(2rem, 5vw, 3rem); }
.landing-stats-row { display: flex; gap: clamp(1.5rem, 6vw, 3.5rem); justify-content: center; flex-wrap: wrap; max-width: var(--lp-container); margin: 0 auto; }
.landing-stat-num { font-family: 'Inter', sans-serif; font-size: clamp(2rem, 5vw, 2.7rem); font-weight: 800; color: var(--lp-teal); }
.landing-stat-label { font-size: 0.82rem; color: var(--lp-muted); margin-top: 0.3rem; }

/* ── Decor side images ── */
.decor-side-wrap { position: relative; }
.decor-side-img { position: absolute; top: 0; bottom: 0; width: 80px; opacity: 0.35; background-size: contain; background-repeat: repeat-y; pointer-events: none; z-index: 0; }
.decor-side-img.left { left: 0; }
.decor-side-img.right { right: 0; transform: scaleX(-1); }
@media (max-width: 640px) { .decor-side-img { width: 36px; opacity: 0.2; } }

/* ── Decoração: topo e cantos do fim — zonas próprias, sem texto dentro,
   por isso nunca podem tapar nada (em qualquer ecrã). Não são arrastáveis
   de propósito, ver explicação dada ao cliente. ── */
.decor-corner-left { top: 0.5rem; left: 0.5rem; background-position: top left; }
.decor-corner-right { top: 0.5rem; right: 0.5rem; background-position: top right; }
.decor-bottom-wrap { position: relative; width: 100%; max-width: 720px; margin: 0 auto; height: clamp(80px, 16vw, 150px); pointer-events: none; }
.decor-bottom-img { position: absolute; bottom: 0; width: clamp(90px, 22vw, 170px); height: 100%; background-size: contain; background-repeat: no-repeat; background-position: bottom; }
.decor-bottom-img.left { left: 0.5rem; background-position: bottom left; }
.decor-bottom-img.right { right: 0.5rem; background-position: bottom right; }

/* ── Custom event font ── */
:root { --event-font: 'Quicksand', sans-serif; }
/* Event font only applies to couple names */
.couple-names { font-family: var(--event-font) !important; }

/* ── Zebra striping: handled by JS injecting bg per section ── */

/* ── Landing: features & packages responsive ── */
@media (max-width: 860px) {
  .landing-features { grid-template-columns: repeat(2, 1fr); }
  .landing-packages { grid-template-columns: repeat(2, 1fr); max-width: 640px; }
}
@media (max-width: 480px) {
  .landing-features { grid-template-columns: repeat(2, 1fr); gap: 0.7rem; }
  .lf-card { padding: 1.1rem 0.85rem; }
  .lf-card .lf-icon { width: 38px; height: 38px; }
  .lf-card h3 { font-size: 0.86rem; }
  .lf-card p { font-size: 0.76rem; }
  .landing-packages { grid-template-columns: 1fr; gap: 0.85rem; max-width: 360px; }
}


/* ── IBAN gift icon ── */
.iban-gift-icon { color: var(--ev-color); margin-bottom: 0.5rem; display: flex; justify-content: center; }

/* ── Copyright line below RSVP CTA ── */
.rsvp-copyright { 
  text-align: center; font-size: 0.72rem; color: rgba(255,255,255,0.55);
  padding: 0.75rem 0 0; 
}

/* ── Felicitações section (after RSVP CTA) ── */
.felicitacoes-section {
  background: color-mix(in srgb, var(--ev-color) 5%, #f8fafc);
  padding: 2rem 1.25rem; border-top: 1px solid #e5e7eb;
}

/* ── Itinerary zigzag — responsive ── */
.timeline-wrap { position: relative; padding: 0 1rem; max-width: 500px; margin: 0 auto; text-align: center; }
.timeline-line { position: absolute; left: 50%; top: 0; bottom: 0; width: 2px; background: linear-gradient(to bottom, transparent, var(--ev-color) 5%, var(--ev-color) 95%, transparent); transform: translateX(-50%); z-index: 0; }
.tl-item { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; margin-bottom: 1.5rem; max-width: 500px; margin-left: auto; margin-right: auto; }
.tl-item:last-child { margin-bottom: 0; }
.tl-card-left  { text-align: right; padding-right: 1rem; }
.tl-card-right { text-align: left;  padding-left:  1rem; }
.tl-node { width: 28px; height: 28px; border-radius: 50%; background: var(--ev-color); display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; flex-shrink: 0; }
.tl-node svg, .tl-node i { width: 12px; height: 12px; color: #fff; }
.tl-time  { font-size: 0.72rem; font-weight: 800; color: var(--ev-color); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 2px; }
.tl-label { font-weight: 700; color: #1e293b; font-size: 0.88rem; }
.tl-sub   { font-size: 0.72rem; color: #6b7280; margin-top: 1px; }
@media (max-width: 480px) {
  .tl-card-left  { padding-right: 0.6rem; }
  .tl-card-right { padding-left:  0.6rem; }
  .tl-node { width: 22px; height: 22px; }
  .tl-node svg, .tl-node i { width: 10px; height: 10px; }
  .tl-label { font-size: 0.78rem; }
}

/* ── IBAN copy button positive feedback ── */
.iban-copy-btn.copied, .iban-copy-btn:active { background: #16a34a !important; }

/* ── Felicitações always shown ── */
.felicitacoes-section { display: block !important; }

/* ── Music player section ── */
.music-player-section {
  background: #fff;
  padding: 0.5rem 0;
  display: flex;
  justify-content: center;
  align-items: center;
  border-bottom: 1px solid #e5e7eb;
}

/* ── Footer under RSVP section ── */
.rsvp-copyright {
  background: var(--ev-color);
  color: rgba(255,255,255,0.6);
  text-align: center;
  font-size: 0.72rem;
  padding: 0.6rem 1rem;
  border-top: 1px solid rgba(255,255,255,0.1);
}

/* ── Guest page copyright footer ── */
.guest-copyright-footer {
  text-align: center;
  font-size: 0.72rem;
  color: #9ca3af;
  padding: 1.5rem 1rem;
  background: #fff;
  border-top: 1px solid #e5e7eb;
}

/* ── Parents — no wrap any screen ── */
.parents-col-title { font-size: clamp(0.55rem, 1.5vw, 0.68rem); }
.parent-name { font-size: clamp(0.72rem, 2vw, 0.88rem); line-height: 1.7; }
.parents-divider { width: 1px; background: linear-gradient(to bottom, transparent, var(--ev-color,#007f9f) 20%, var(--ev-color,#007f9f) 80%, transparent); flex-shrink: 0; align-self: stretch; }

/* ── Parents: never wrap, clamp text size to fit any screen ── */
.parents-col { overflow: hidden; }
.parent-name {
  font-size: clamp(0.62rem, 1.8vw, 0.88rem);
  line-height: 1.65;
  white-space: normal;
  word-break: break-word;
  overflow-wrap: anywhere;
}
.in-memoriam { font-size: 0.7em; }
.parents-columns { gap: 0 !important; }
.parents-col { padding: 0 0.5rem; }
@media (max-width: 360px) {
  .parent-name { font-size: 0.6rem; }
}

/* ── Couple names responsive ── */
.couple-names {
  font-size: clamp(1.4rem, 4vw, 2.2rem) !important;
  animation: coupleEntrance 1.4s cubic-bezier(.22,1,.36,1) 0.3s both;
}
@keyframes coupleEntrance { from { opacity:0;transform:translateY(40px) scale(0.9); } to { opacity:1;transform:none; } }

/* ── Landing: nav responsive (mobile menu) ── */
@media (max-width: 768px) {
  .landing-nav-toggle { display: flex; }
  .landing-nav-links {
    position: fixed; top: 0; right: 0; height: 100vh; height: 100dvh; width: min(78vw, 320px);
    background: #fff;
    flex-direction: column; align-items: stretch; justify-content: flex-start;
    padding: calc(4.5rem + env(safe-area-inset-top)) 1.5rem 2rem;
    gap: 0.3rem; transform: translateX(100%); transition: transform 0.32s ease;
    box-shadow: -10px 0 40px rgba(10,22,40,0.18); z-index: 49;
    overflow-y: auto;
  }
  .landing-nav-links.open { transform: translateX(0); }
  .landing-nav-link { color: var(--lp-ink); padding: 0.85rem 0.5rem; font-size: 0.95rem; border-bottom: 1px solid var(--lp-border); border-radius: 0; }
  .landing-nav-cta { margin: 1rem 0 0; text-align: center; }
}
.landing-nav-overlay {
  display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.45); z-index: 48;
}
.landing-nav-overlay.open { display: block; }

/* ── Landing: general responsive scale ── */
@media (max-width: 980px) {
  .landing-footer-inner { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 600px) {
  .landing-footer-inner { grid-template-columns: 1fr; gap: 1.75rem; text-align: center; }
  .landing-stats-row { gap: 2rem 2.5rem; }
}
@media (max-width: 480px) {
  .landing-search { flex-wrap: nowrap; }
  .landing-actions { flex-direction: column; align-items: stretch; }
  .landing-actions button { width: 100%; }
}

/* ── Event type badge ── */
.event-type-badge {
  display: inline-block; font-size: 0.65rem; font-weight: 800;
  text-transform: uppercase; letter-spacing: 0.12em;
  padding: 0.25rem 0.75rem; border-radius: 999px;
  background: color-mix(in srgb, var(--ev-color) 15%, white);
  color: var(--ev-color); border: 1px solid color-mix(in srgb, var(--ev-color) 30%, transparent);
  margin-bottom: 0.5rem;
}

/* ═══ NOSSA HISTÓRIA — ZIGZAG TIMELINE ═══ */
.story-timeline { position: relative; max-width: 640px; margin: 0 auto; padding: 0 1rem; }
.story-line {
  position: absolute; left: 50%; top: 0; bottom: 0; width: 2px;
  background: linear-gradient(to bottom, transparent, var(--ev-color) 5%, var(--ev-color) 95%, transparent);
  transform: translateX(-50%); z-index: 0;
}
.story-row {
  display: grid; grid-template-columns: 1fr auto 1fr;
  align-items: center; margin-bottom: 2.5rem; gap: 0;
}
.story-row:last-child { margin-bottom: 0; }
.story-card {
  background: #fff; border-radius: 1rem;
  padding: 1rem 1.1rem;
  box-shadow: 0 2px 16px rgba(0,0,0,0.07);
  border: 1.5px solid #e5e7eb;
  position: relative; z-index: 2;
}
.story-left  { text-align: right; padding-right: 1.1rem; margin-right: -0.5px; }
.story-right { text-align: left;  padding-left:  1.1rem; margin-left:  -0.5px; }
.story-date  { font-size: 0.72rem; font-weight: 800; color: var(--ev-color); text-transform: uppercase; letter-spacing: 0.1em; margin-bottom: 0.35rem; }
.story-body  { font-size: 0.85rem; color: #4b5563; line-height: 1.6; margin: 0; }
.story-node {
  width: 10px; height: 10px; border-radius: 50%;
  flex-shrink: 0; position: relative; z-index: 3;
  box-shadow: 0 0 0 3px #fff, 0 0 0 4px color-mix(in srgb, var(--ev-color) 30%, transparent);
  transition: width 0.35s ease, height 0.35s ease, box-shadow 0.35s ease;
}
.story-node.active {
  width: 16px; height: 16px;
  box-shadow: 0 0 0 3px #fff, 0 0 0 6px color-mix(in srgb, var(--ev-color) 45%, transparent);
}
.story-card {
  background: transparent; border: none; box-shadow: none;
  position: relative; z-index: 2;
}
@media (max-width: 520px) {
  .story-timeline { padding: 0 0.5rem; }
  .story-card { padding: 0.75rem 0.85rem; }
  .story-left  { padding-right: 0.6rem; }
  .story-right { padding-left:  0.6rem; }
  .story-date { font-size: 0.64rem; }
  .story-body { font-size: 0.78rem; }
  .story-row  { gap: 0; }
}

/* ═══ FELICITAÇÕES — BEAUTIFUL ANIMATED CARDS ═══ */
.felicitacoes-section {
  background: color-mix(in srgb, var(--ev-color) 4%, #f8fafc);
  padding: 2.5rem 1.25rem;
}
.felicitation-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 1rem; max-width: 700px; margin: 0 auto;
}
.felicitation-card {
  background: #fff; border-radius: 1.1rem;
  padding: 1.1rem 1.15rem;
  box-shadow: 0 2px 12px rgba(0,0,0,0.07);
  border-top: 3px solid var(--ev-color);
  animation: cardIn 0.5s cubic-bezier(.22,1,.36,1) both;
  position: relative;
}
@keyframes cardIn {
  from { opacity:0; transform: translateY(20px) scale(0.95); }
  to   { opacity:1; transform: none; }
}
.felicitation-card .fc-quote {
  font-size: 2rem; line-height: 1; color: var(--ev-color); opacity: 0.25;
  font-family: Georgia, serif; position: absolute; top: 0.5rem; left: 0.75rem;
}
.felicitation-card .fc-message {
  font-size: 0.88rem; color: #374151; line-height: 1.6; margin: 1rem 0 0.6rem;
  font-style: italic;
}
.felicitation-card .fc-name {
  font-size: 0.75rem; font-weight: 700; color: var(--ev-color);
  display: flex; align-items: center; gap: 0.4rem;
}
.felicitation-card .fc-name::before {
  content: ''; display: inline-block; width: 18px; height: 2px;
  background: var(--ev-color);
}
.felicitation-card .fc-attending {
  display: inline-flex; align-items: center; gap: 0.3rem;
  font-size: 0.68rem; font-weight: 700; padding: 2px 8px; border-radius: 999px;
  margin-top: 0.4rem;
}
.fc-yes { background: #dcfce7; color: #166534; }
.fc-no  { background: #fee2e2; color: #991b1b; }

/* ── WhatsApp floating button ── */
.wa-float {
  position: fixed; bottom: 1.5rem; right: 1.5rem;
  width: 56px; height: 56px; border-radius: 50%;
  background: #25d366; color: #fff;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 4px 20px rgba(37,211,102,0.4);
  z-index: 9990; cursor: pointer; border: none;
  animation: waPulse 2.5s ease-in-out infinite;
  transition: transform 0.2s ease;
}
.wa-float:hover { transform: scale(1.1); }
@keyframes waPulse {
  0%, 100% { box-shadow: 0 4px 20px rgba(37,211,102,0.4); }
  50% { box-shadow: 0 4px 32px rgba(37,211,102,0.65), 0 0 0 8px rgba(37,211,102,0.1); }
}

/* ── Hero invite text (couple names + invitation) ── */
.hero-invite-wrapper { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 0; }
.hero-couple-name-block { display: flex; flex-direction: column; align-items: center; line-height: 1.1; }
.hero-first-name  { font-size: clamp(1.6rem, 5vw, 2.8rem); font-weight: 800; color: #fff; letter-spacing: -0.01em; }
.hero-last-name   { font-size: clamp(0.9rem, 2.5vw, 1.4rem); font-weight: 400; color: rgba(255,255,255,0.85); margin-top: -0.1em; }
.hero-amp { font-size: clamp(1rem, 3vw, 1.5rem); color: rgba(255,255,255,0.7); margin: 0.3rem 0; }
.hero-invite-text-block { color: rgba(255,255,255,0.82); font-size: clamp(0.72rem, 1.8vw, 0.88rem); line-height: 1.7; margin-top: 1rem; max-width: 340px; }
.hero-invite-text-block .guest-name { font-weight: 700; color: #fff; font-size: 1.05em; }

/* ── Decorative corner SVGs ── */
.decor-corner { position: absolute; z-index: 0; pointer-events: none; opacity: 0.18; }
.decor-corner.top-right  { top: 0; right: 0; transform: rotate(0deg); }
.decor-corner.top-left   { top: 0; left: 0;  transform: scaleX(-1); }
.decor-corner.bot-right  { bottom: 0; right: 0; transform: scaleY(-1); }
.decor-corner.bot-left   { bottom: 0; left: 0;  transform: rotate(180deg); }
.event-section { position: relative; overflow: hidden; }

/* ── Hero name size fix for mobile ── */
#hero-couple-names { font-size: clamp(1.6rem, 6vw, 3rem) !important; }

/* blessing text matches invitation text */
.bible-blessing-label { 
  color: #374151; font-size: 0.9rem; font-style: italic;
  line-height: 1.7; text-align: center; font-weight: 400;
  margin-bottom: 1rem;
}

/* ═══ RSVP DRAWER — REBUILT ═══ */
.rsvp-field-group { margin-bottom: 1rem; }
.rsvp-label { display: block; font-size: 0.82rem; font-weight: 700; color: #374151; margin-bottom: 0.4rem; }
.rsvp-radio-btn {
  flex: 1; text-align: center; padding: 0.6rem 0.5rem;
  border: 1.5px solid #e5e7eb; border-radius: 0.75rem;
  cursor: pointer; font-size: 0.88rem; font-weight: 600; color: #4b5563;
  transition: border-color 0.2s, background 0.2s, color 0.2s;
  user-select: none;
}
.rsvp-radio-btn.active {
  border-color: var(--ev-color);
  background: color-mix(in srgb, var(--ev-color) 10%, white);
  color: var(--ev-color);
}

/* ═══ MUSIC PLAYER — EVENT COLOUR ═══ */
.music-player { border-radius: 999px; overflow: hidden; }
.music-icon { background: var(--ev-color) !important; }

/* ═══ VENUE TITLE EDITABLE ═══ */

/* ── Music player autoplay blocked pulse ── */
@keyframes musicPulseAttention {
  0%,100% { box-shadow: 0 2px 12px rgba(0,0,0,0.08); transform: scale(1); }
  50%      { box-shadow: 0 4px 24px color-mix(in srgb, var(--ev-color) 40%, transparent); transform: scale(1.02); }
}

/* ── Save the Date: hide the full invite content instantly while the
   gate decision is being evaluated, so it never flashes on screen.
   Note: the actual gate overlay (#std-screen-overlay) is appended to
   document.body, not as a child of #screen-guest, so it's naturally
   unaffected by this rule regardless of the :not() exclusions below. ── */
#screen-guest.std-pending > *:not(#std-loading-veil) {
  visibility: hidden !important;
}
#std-loading-veil {
  position: fixed; inset: 0; z-index: 8999; background: #fafafa;
  display: flex; align-items: center; justify-content: center;
}
#std-loading-veil .std-spinner {
  width: 36px; height: 36px; border: 3px solid #e5e7eb; border-top-color: var(--ev-color, #007f9f);
  border-radius: 50%; animation: stdSpin 0.8s linear infinite;
}
@keyframes stdSpin { to { transform: rotate(360deg); } }

/* ── Gallery: 3D Carousel style ── */
.g3d-wrap { position: relative; width: 100%; height: 360px; overflow: hidden; perspective: 1200px; }
.g3d-track { position: relative; width: 100%; height: 100%; transform-style: preserve-3d; z-index: 1; }
.g3d-slide {
  position: absolute; top: 0; left: 50%; width: 64%; height: 100%;
  margin-left: -32%; border-radius: 1.25rem; background-size: cover; background-position: center;
  box-shadow: 0 20px 45px rgba(0,0,0,0.35);
  transition: transform 0.55s cubic-bezier(.22,1,.36,1), opacity 0.55s ease, filter 0.55s ease;
  will-change: transform, opacity;
  backface-visibility: hidden;
}
.g3d-slide::after {
  content: ''; position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(to top, rgba(0,0,0,0.25), transparent 40%);
  opacity: var(--g3d-shade, 0); transition: opacity 0.55s ease;
}
.g3d-dots { display: flex; justify-content: center; gap: 0.4rem; margin-top: 1rem; position: relative; z-index: 2; }
.g3d-dot { width: 7px; height: 7px; border-radius: 50%; transition: background 0.2s, transform 0.2s; cursor: pointer; }
.g3d-dot.active { transform: scale(1.4); }
.g3d-arrow {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 4;
  width: 38px; height: 38px; border-radius: 50%; background: rgba(255,255,255,0.92);
  display: flex; align-items: center; justify-content: center; cursor: pointer;
  box-shadow: 0 4px 14px rgba(0,0,0,0.25); border: none; transition: transform 0.2s, background 0.2s;
}
.g3d-arrow:hover { background: #fff; transform: translateY(-50%) scale(1.08); }
.g3d-arrow:active { transform: translateY(-50%) scale(0.95); }
.g3d-arrow.prev { left: 0.6rem; }
.g3d-arrow.next { right: 0.6rem; }

/* ── Gallery: Masonry style ── */
.gmasonry-grid {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.6rem;
  grid-auto-rows: 90px;
}
.gmasonry-item {
  background-size: cover; background-position: center; border-radius: 0.75rem;
  cursor: pointer; grid-row-end: span 2;
}
.gmasonry-item:nth-child(3n+1) { grid-row-end: span 3; }
.gmasonry-item:nth-child(4n+2) { grid-row-end: span 1; }
@media (min-width: 640px) {
  .gmasonry-grid { grid-template-columns: repeat(3, 1fr); }
}

/* ── Landing: Modelos Visuais ── */
.landing-models-grid {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 1.25rem; max-width: 1100px; margin: 0 auto;
}
.lm-card {
  background: #fff; border-radius: var(--lp-radius-m); overflow: hidden; cursor: pointer;
  border: 1px solid var(--lp-border); box-shadow: var(--lp-shadow-s);
  transition: transform 0.25s, box-shadow 0.25s;
}
.lm-card:hover { transform: translateY(-5px); box-shadow: var(--lp-shadow-m); }
.lm-thumb {
  aspect-ratio: 4/5; display: flex; align-items: center; justify-content: center;
  padding: 1.5rem;
}
.lm-thumb--classico { background: linear-gradient(160deg,#fdfaf6 55%,rgba(201,168,76,0.13)); }
.lm-thumb--moderno  { background: linear-gradient(160deg,#0f172a 55%,rgba(0,127,159,0.2)); }
.lm-thumb--romantico{ background: linear-gradient(160deg,#fff5f5 55%,rgba(244,114,182,0.2)); }
.lm-thumb--tropical { background: linear-gradient(160deg,#f0fdf4 55%,rgba(22,163,74,0.2)); }
.lm-thumb-inner { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; text-align: center; }
.lm-thumb-tag { font-size: 0.62rem; letter-spacing: 0.25em; font-weight: 800; text-transform: uppercase; }
.lm-thumb-names { font-size: 1.3rem; font-weight: 700; color: #1e293b; }
.lm-thumb-line { width: 32px; height: 2px; border-radius: 1px; background: var(--lp-gold); margin-top: 0.25rem; }
.lm-info { padding: 1.1rem 1rem 1.25rem; }
.lm-badge { display: inline-block; font-size: 0.66rem; font-weight: 800; padding: 0.22rem 0.7rem; border-radius: 999px; margin-bottom: 0.5rem; text-transform: uppercase; letter-spacing: 0.04em; }
.lm-desc { font-size: 0.82rem; color: var(--lp-muted); line-height: 1.5; margin: 0; }

/* ── Landing: Como Funciona ── */
.landing-steps {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 1.5rem; max-width: 1020px; margin: 0 auto;
}
.ls-step { text-align: center; padding: 1.25rem 1rem; position: relative; }
.ls-num { font-family: 'Inter', sans-serif; font-size: 2.2rem; font-weight: 800; color: rgba(0,127,159,0.18); margin-bottom: 0.5rem; line-height: 1; }
.ls-step h3 { font-family: 'Inter', sans-serif; font-size: 1rem; font-weight: 700; color: var(--lp-ink); margin-bottom: 0.4rem; }
.ls-step p { font-size: 0.85rem; color: var(--lp-muted); line-height: 1.55; margin: 0; }

@media (max-width: 920px) {
  .landing-models-grid { grid-template-columns: repeat(2, 1fr); }
  .landing-steps { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .landing-models-grid { grid-template-columns: repeat(2, 1fr); gap: 0.85rem; }
  .lm-thumb-names { font-size: 1.05rem; }
}
@media (max-width: 420px) {
  .landing-models-grid { grid-template-columns: 1fr; max-width: 280px; }
}

/* ── Save the Date: botão Confirmar Presença com a mesma animação do convite ── */
.std-rsvp-btn-anim {
  transition: all 0.25s ease;
  animation: stdRsvpBreathe 2.6s ease-in-out infinite;
}
.std-rsvp-btn-anim:hover {
  transform: translateY(-2px) scale(1.02);
  box-shadow: 0 8px 28px rgba(0,0,0,0.3) !important;
}
.std-rsvp-btn-anim:active {
  transform: translateY(0) scale(0.98);
}
@keyframes stdRsvpBreathe {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.035); }
}

/* ── Save the Date: animação de entrada escalonada dos elementos ── */
@keyframes stdFadeInUp {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: translateY(0); }
}
.std-anim {
  opacity: 0;
  animation: stdFadeInUp 0.6s cubic-bezier(.4,0,.2,1) forwards;
}
.std-anim-1 { animation-delay: 0.05s; }
.std-anim-2 { animation-delay: 0.15s; }
.std-anim-3 { animation-delay: 0.25s; }
.std-anim-4 { animation-delay: 0.35s; }
.std-anim-5 { animation-delay: 0.45s; }
.std-anim-6 { animation-delay: 0.55s; }
.std-anim-7 { animation-delay: 0.65s; }

/* A foto de capa entra com um fade simples (sem deslocamento, já que ocupa
   o topo do ecrã e um movimento vertical ficaria estranho ali) */
@keyframes stdCoverFadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}
.std-cover-anim {
  opacity: 0;
  animation: stdCoverFadeIn 0.7s ease forwards;
}

/* ── Abas do editor de evento ("Editar Evento" / "Criar Evento") ──
   Substitui o antigo formulário gigante numa única página por abas, à
   semelhança das abas do navegador — cada uma mostra só a sua secção,
   sem alterar nenhum campo nem comportamento, só a forma como se navega
   entre eles. */
.event-tab-btn {
  flex-shrink: 0; padding: 0.5rem 0.85rem; font-size: 0.8rem; font-weight: 700;
  color: #6b7280; background: transparent; border: none; cursor: pointer;
  border-bottom: 2.5px solid transparent; white-space: nowrap; transition: color 0.15s, border-color 0.15s;
}
.event-tab-btn:hover { color: #0f766e; }
.event-tab-btn.active { color: #0f766e; border-bottom-color: #0f766e; }
.event-tab-pane.hidden { display: none; }

/* ── Modo lista vertical (alternativa às abas horizontais) ──
   Activado via JS (toggleEventTabLayout), guarda a preferência do
   utilizador. As abas passam a ser uma coluna fixa à esquerda, com o
   conteúdo da secção activa à direita — mais fácil de navegar com tantas
   secções do que percorrer uma fila horizontal enorme. */
#event-editor-layout.tabs-vertical {
  display: flex; align-items: flex-start; gap: 1.25rem;
}
#event-editor-layout.tabs-vertical #event-editor-tabs {
  flex-direction: column; flex-shrink: 0; width: 190px;
  overflow-x: visible; overflow-y: auto; max-height: 75vh;
  border-bottom: none; border-right: 1.5px solid #e5e7eb; padding-right: 0.5rem;
  position: sticky; top: 0.5rem;
}
#event-editor-layout.tabs-vertical .event-tab-btn {
  text-align: left; border-bottom: none; border-left: 2.5px solid transparent;
  padding: 0.5rem 0.6rem; border-radius: 0.35rem;
}
#event-editor-layout.tabs-vertical .event-tab-btn.active {
  border-left-color: #0f766e; border-bottom-color: transparent; background: #f0fdfa;
}
#event-editor-layout.tabs-vertical #event-tab-panes-wrapper { flex: 1; min-width: 0; }
@media (max-width: 640px) {
  /* Em telemóvel a coluna lateral fixa não cabe bem — volta a ocupar a
     largura toda por cima do conteúdo, só sem ser uma fila horizontal. */
  #event-editor-layout.tabs-vertical { flex-direction: column; }
  #event-editor-layout.tabs-vertical #event-editor-tabs {
    width: 100%; max-height: 220px; position: static; border-right: none; border-bottom: 1.5px solid #e5e7eb;
  }
}

/* ── Ícone de presente: tampa "salta" a abrir e fecha, em loop suave ──
   A base da caixa fica sempre fixa; só a tampa + laço (agrupados num <g>
   próprio no SVG) é que se move — sobe, inclina ligeiramente, e volta a
   fechar, com um pequeno ressalto a meio para não parecer mecânico.
   Maior parte do tempo fica fechada (efeito discreto, não distrai),
   com um "pop" breve e claro a cada ciclo. */
.gift-box-anim-svg { overflow: visible; }
@keyframes giftBoxLidPop {
  0%, 55% { transform: translateY(0) rotate(0deg); }
  68% { transform: translateY(-3px) rotate(-9deg); }
  76% { transform: translateY(-1.6px) rotate(-4deg); }
  84% { transform: translateY(-2.6px) rotate(-7deg); }
  100% { transform: translateY(0) rotate(0deg); }
}
.gift-box-anim-svg .gift-box-lid {
  transform-origin: 12px 9.5px;
  animation: giftBoxLidPop 3.2s cubic-bezier(.45,0,.2,1) infinite;
}
/* A caixa inteira "respira" muito ligeiramente no momento da abertura —
   dá uma sensação de vida ao ícone sem ser exagerado. */
@keyframes giftBoxWholePulse {
  0%, 55% { transform: scale(1); }
  76% { transform: scale(1.05); }
  100% { transform: scale(1); }
}
.gift-box-anim-svg {
  animation: giftBoxWholePulse 3.2s cubic-bezier(.45,0,.2,1) infinite;
  transform-origin: center;
}
/* Pequenos brilhos que aparecem só no instante em que a tampa está mais
   aberta, como se algo especial estivesse a sair da caixa — desaparecem
   de novo assim que fecha. */
@keyframes giftBoxSparkleFlash {
  0%, 62% { opacity: 0; transform: scale(0.4); }
  74% { opacity: 1; transform: scale(1.1); }
  84% { opacity: 1; transform: scale(1); }
  94%, 100% { opacity: 0; transform: scale(0.4); }
}
.gift-box-anim-svg .gift-box-sparkle {
  transform-origin: 12px 4px;
  animation: giftBoxSparkleFlash 3.2s cubic-bezier(.45,0,.2,1) infinite;
}

/* ── Layout "Elegante": indicador de scroll a saltar suavemente na capa ── */
@keyframes elegantScrollBounce { 0%, 100% { transform: translateY(0); opacity: 0.7; } 50% { transform: translateY(8px); opacity: 1; } }
.elegant-scroll-hint { animation: elegantScrollBounce 1.8s ease-in-out infinite; }

/* ── Fonte do texto normal das secções (Presentes/IBAN, Manual, Cronograma,
   Dress Code, Mensagem dos Noivos, História, FAQ, Texto do Convite, Pais).
   Aplicada aqui no contentor principal — como font-family é uma
   propriedade herdada, chega isto para cobrir os 4 layouts de uma vez,
   sem precisar de tocar em cada secção uma a uma. A fonte dos NOMES (Hero,
   Save the Date) continua separada, controlada por --event-font. */
#guest-sections-container {
  font-family: var(--ev-body-font, inherit);
}

/* ── Ornamento decorativo (junto ao texto bíblico): entrada suave —
   aparece com um leve "pop" e uma rotação ligeira, em vez de aparecer
   de repente sem transição. ── */
@keyframes bibleOrnamentEntrance {
  0% { opacity: 0; transform: scale(0.5) rotate(-12deg); }
  60% { opacity: 1; transform: scale(1.08) rotate(3deg); }
  100% { opacity: 1; transform: scale(1) rotate(0deg); }
}
.bible-ornament-anim {
  animation: bibleOrnamentEntrance 0.9s cubic-bezier(.34,1.56,.64,1) both;
}

/* ── Scroll-reveal no cronograma (timeline style) ── */
.sc-item-reveal {
  opacity: 0;
  transform: translateX(-28px);
  transition: opacity 0.55s ease, transform 0.55s ease;
}
.sc-item-reveal.alt { transform: translateX(28px); }
.sc-item-reveal.visible { opacity: 1; transform: none; }

/* ── Decorações florais por secção ── */
.section-decor {
  position: absolute;
  pointer-events: none;
  z-index: 0;
  background-size: contain;
  background-repeat: no-repeat;
}
.event-section { position: relative; overflow: visible; }

/* ── Proteger fontes cursivas dos nomes dos noivos contra herança do
   ev-body-font — cada elemento que usa 'Great Vibes' ou 'Playfair Display'
   deve ter font-family definido inline, mas esta regra serve de escudo extra
   para os casos em que o cascading pudesse sobrescrever. ── */
.hero-couple-names,
.std-couple-names,
h1.hero-couple-names-simple {
  font-family: var(--event-font, 'Great Vibes', cursive) !important;
}

/* Manual do Bom Convidado — sem círculos (ícones maiores) */
.manual-no-circles .mi-icon {
  background: none !important;
  border-radius: 0 !important;
  width: 52px !important;
  height: 52px !important;
}
.manual-no-circles .mi-icon svg,
.manual-no-circles .mi-icon i {
  width: 42px !important;
  height: 42px !important;
}
.manual-no-circles .mi-icon img {
  width: 42px !important;
  height: 42px !important;
}

/* Em mobile, o vídeo de capa preenche sempre o ecrã todo (sem barras) */
@media (max-width: 767px) {
  #guest-hero-video {
    object-fit: cover !important;
  }
}

/* ===================== MENU DE NAVEGAÇÃO DO CONVIDADO ===================== */
/* Em mobile: só um botão hambúrguer flutuante, fixo no topo — fica sempre
   por cima da foto de capa, mesmo sem dar scroll nenhum ainda.
   Em ecrã largo: uma barra fina fixa no topo, com os links lado a lado. */
.guest-nav-menu {
  position: fixed;
  top: 0.85rem;
  right: 0.85rem;
  z-index: 60;
  display: flex;
  align-items: center;
  justify-content: flex-end;
}
.guest-nav-links-desktop {
  display: none;
}
.guest-nav-link {
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  color: var(--nav-color, #007f9f);
  text-decoration: none;
  white-space: nowrap;
  padding: 0.3rem 0.1rem;
  border-bottom: 2px solid transparent;
  transition: border-color 0.2s;
}
.guest-nav-link:hover { border-bottom-color: var(--nav-color, #007f9f); }
.guest-nav-hamburger {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  border-radius: 50%;
  background: rgba(255,255,255,0.94);
  box-shadow: 0 3px 12px rgba(0,0,0,0.25);
  border: none;
  color: var(--nav-color, #007f9f);
  cursor: pointer;
}
.guest-nav-drawer-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.4);
  z-index: 69;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s;
}
.guest-nav-drawer-overlay.open { opacity: 1; pointer-events: auto; }
.guest-nav-drawer {
  position: fixed;
  top: 0;
  right: 0;
  height: 100%;
  width: 84%;
  max-width: 340px;
  background: #fff;
  z-index: 70;
  box-shadow: -8px 0 30px rgba(0,0,0,0.15);
  transform: translateX(100%);
  transition: transform 0.3s ease;
  padding: 1rem 1.1rem;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
}
.guest-nav-drawer.open { transform: translateX(0); }
.guest-nav-drawer-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #9ca3af;
  margin-bottom: 0.3rem;
  padding-bottom: 0.6rem;
  border-bottom: 1px solid #e5e7eb;
}
.guest-nav-drawer-header button { background: none; border: none; cursor: pointer; color: #6b7280; }
/* Grelha de 2 colunas — cabe muito mais sem precisar de scroll */
.guest-nav-drawer-links {
  display: flex;
  flex-direction: column;
}
.guest-nav-drawer .guest-nav-link {
  font-size: 0.95rem;
  border-bottom: 1px solid #f3f4f6;
  padding: 0.75rem 0;
}

@media (min-width: 768px) {
  .guest-nav-menu {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    background: rgba(255,255,255,0.94);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    padding: 0.7rem 1.5rem;
    justify-content: center;
    box-shadow: 0 2px 12px rgba(0,0,0,0.06);
  }
  .guest-nav-links-desktop {
    display: flex;
    gap: 1.4rem;
    overflow-x: auto;
    scrollbar-width: none;
    justify-content: center;
    flex-wrap: wrap;
  }
  .guest-nav-links-desktop::-webkit-scrollbar { display: none; }
  .guest-nav-hamburger { display: none; }
}
