/* ==========================================================================
   Laira & Marco Antonio — Casamento — 14.11.2026
   Estrutura estática (sem animações). Fiel ao frame Figma "Site — Desktop".
   ========================================================================== */

:root {
  --ivory: #F6F2EC;
  --paper: #FBF9F5;
  --forest: #20361E;
  --ink: #2B2825;
  --ink-soft: #717171;
  --accent: #336A2E;
  --accent-warm: #E5CAAE;
  --sage: #9DB493;
  --sage-text: #C3D6B8; /* variante clara do sage p/ texto sobre fundo escuro — o sage puro fica pouco legível (verde sobre verde) */
  --on-dark: #F5F5F5;
  --line: #E8E8E8;

  --font-display: 'Cormorant Garamond', serif;
  --font-body: 'Jost', sans-serif;
  --font-script: 'Pinyon Script', cursive;

  --radius-card: 90px;
  --container-max: 1440px;
  --gap-section: 8px;
  --nav-height: 96px;
}

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

html {
  overflow-x: hidden;
  width: 100%;
}

body {
  margin: 0;
  width: 100%;
  max-width: 100%;
  overflow-x: hidden; /* trava dupla — no mobile o <html> sozinho às vezes
                          não basta pra segurar o bounce horizontal do body */
  background: var(--ivory);
  color: var(--ink);
  font-family: var(--font-body);
  font-weight: 300;
  -webkit-font-smoothing: antialiased;
}

/* espaçamento entre seções sem flex no body — flex ali quebrava o cálculo
   de pin-spacing do GSAP ScrollTrigger no hero */
body > * + * {
  margin-top: var(--gap-section);
}

img { max-width: 100%; display: block; }

h1, h2, h3, p, blockquote, ul, ol { margin: 0; }

button { font-family: inherit; cursor: pointer; border: none; background: none; }
input, select { font-family: inherit; }

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 15px 30px;
  font-family: var(--font-body);
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  text-decoration: none;
  transition: opacity 0.2s ease, background-color 0.2s ease;
  white-space: nowrap;
}
.btn:hover { opacity: 0.85; }

.btn-dark { background: var(--forest); color: var(--ivory); }
.btn-outline { background: transparent; color: var(--ink); border: 1px solid var(--ink); }
.btn-maroon { background: #722F26; color: #fff; padding: 16px 30px; }

/* ==========================================================================
   NAV
   ========================================================================== */
.nav {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 100;
  margin: 0; /* fixed: sem isso herdava o margin-top do "body > * + *" e não ficava colado no top:0 */
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: transparent;
  box-shadow: none;
  border: none;
  padding: 32px 80px;
}

/* nav é fixed (fora do fluxo) e flutua transparente por cima do conteúdo —
   sem isso o topo das seções ancoradas pelo menu (História, Cerimônia...)
   rolaria pra baixo do próprio nav */
#story, #venue, #info, #gifts, #rsvp {
  scroll-margin-top: var(--nav-height);
}

.nav-logo img { width: 28px; height: auto; }

.nav-menu {
  display: flex;
  align-items: center;
  gap: 40px;
}

.nav-menu a {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 15px;
  line-height: 1.6;
  color: var(--ivory);
  text-decoration: none;
  transition: color 0.2s ease;
}
.nav-menu a:hover { color: var(--accent); }

/* ==========================================================================
   INTRO — hero + quote + countdown pinados sobre o mesmo fundo estático
   ========================================================================== */
.intro {
  position: relative;
  min-height: 860px;
  height: 100vh;
  max-height: 960px;
  overflow: hidden;
  border-bottom-left-radius: var(--radius-card);
  border-bottom-right-radius: var(--radius-card);
  background: var(--forest);
}

/* ==========================================================================
   HERO
   ========================================================================== */
.hero {
  position: absolute;
  inset: 0;
}

.hero-bg {
  position: absolute;
  inset: 0;
}

.hero-bg-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
}

/* escurece a foto (clara) o suficiente pra segurar a legibilidade do texto
   ivory por cima, sem apagar a imagem — mais forte em cima, mais leve embaixo */
.hero-scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(rgba(32, 54, 30, 0.45), rgba(32, 54, 30, 0.15));
  pointer-events: none;
}

.hero-overlay {
  position: absolute;
  left: 50%;
  top: 54%;
  transform: translate(-50%, -50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 20px;
  text-align: center;
  padding: 0 24px;
  width: min(1052px, 90vw);
}

.hero-kicker {
  font-family: var(--font-script);
  font-weight: 400;
  font-size: clamp(28px, 4vw, 51px);
  line-height: 0.9;
  color: var(--accent-warm);
}

.hero-nomes {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: clamp(44px, 8vw, 91px);
  line-height: 1.02;
  letter-spacing: 0.03em;
  color: var(--on-dark);
}

.hero-rule {
  width: 81px;
  height: 1px;
  background: rgba(245, 245, 245, 0.5);
}

.hero-data {
  font-family: var(--font-body);
  font-weight: 400;
  font-size: clamp(13px, 1.4vw, 16.5px);
  letter-spacing: 0.26em;
  color: var(--on-dark);
}

.hero-scroll-cue {
  position: absolute;
  left: 50%;
  bottom: 44px;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
}

.hero-scroll-cue p {
  font-family: var(--font-body);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--on-dark);
  opacity: 0.85;
}

.hero-scroll-cue .scroll-line {
  width: 1px;
  height: 40px;
  background: rgba(245, 245, 245, 0.5);
}

/* ==========================================================================
   QUOTE — overlay transparente sobre o vídeo do hero
   ========================================================================== */
.quote {
  position: absolute;
  inset: 0;
  background: transparent;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 30px;
  text-align: center;
  padding: 0 24px;
  color: var(--on-dark);
  opacity: 0;
  pointer-events: none;
}

.quote-script {
  font-family: var(--font-script);
  font-size: clamp(26px, 3.4vw, 38px);
  line-height: 1;
  color: var(--accent-warm);
}

.quote-text {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(22px, 3vw, 40px);
  line-height: 1.32;
  letter-spacing: 0.02em;
  max-width: 920px;
}

.quote-attr {
  font-family: var(--font-body);
  font-size: 12px;
  letter-spacing: 0.2em;
}

/* ==========================================================================
   COUNTDOWN — overlay transparente sobre o vídeo do hero
   ========================================================================== */
.countdown {
  position: absolute;
  inset: 0;
  background: transparent;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 44px;
  padding: 0 24px;
  opacity: 0;
  pointer-events: none;
}

.countdown-overline {
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.24em;
  color: var(--accent-warm);
  text-align: center;
}

.countdown-blocks {
  display: flex;
  align-items: center;
  gap: clamp(24px, 5vw, 64px);
}

.countdown-unit {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  color: var(--on-dark);
  text-align: center;
}

.countdown-unit .num {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: clamp(38px, 7vw, 66px);
  line-height: 1.02;
  letter-spacing: 0.01em;
}

.countdown-unit .label {
  font-family: var(--font-body);
  font-size: 12px;
  letter-spacing: 0.18em;
}

.countdown-sep {
  width: 1px;
  height: 54px;
  background: rgba(245, 245, 245, 0.4);
}

/* mensagem que substitui os blocos quando a contagem chega a zero —
   escondida por padrão, JS troca o display quando a data-alvo é atingida */
.countdown-done {
  display: none;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: clamp(28px, 4vw, 44px);
  color: var(--on-dark);
  text-align: center;
}

/* ---- prefers-reduced-motion: sem pin/scrub — quote e countdown voltam a
       ser seções normais, empilhadas, com o próprio fundo ---- */
@media (prefers-reduced-motion: reduce) {
  .intro {
    height: auto;
    overflow: visible;
  }

  .hero {
    position: relative;
    min-height: 860px;
    height: 100vh;
    max-height: 960px;
    overflow: hidden;
  }

  .quote,
  .countdown {
    position: static;
    opacity: 1;
    pointer-events: auto;
    margin-top: var(--gap-section);
  }

  .quote {
    background: var(--ivory);
    color: var(--ink-soft);
    padding: 100px 24px;
    gap: 30px;
  }

  .quote-script { color: inherit; }

  .countdown {
    background: var(--paper);
    padding: 90px 24px;
  }

  .countdown-overline { color: #9d9d9d; }
  .countdown-unit { color: #9d9d9d; }
  .countdown-sep { background: #9d9d9d; }
}

/* ==========================================================================
   COUPLE
   ========================================================================== */
.couple {
  position: relative;
  z-index: 1;
  background: var(--paper);
  border-radius: var(--radius-card);
  padding: 40px 0;
  /* colchão de scroll invisível (fora da área visível do mosaico fixo) —
     dá fôlego pro embaralhamento terminar antes da história cobrir de vez */
  padding-bottom: calc(40px + 100vh);
  overflow: hidden;
}

.couple-grid {
  width: calc(100% + 64px);
  margin: 0 -32px;
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  grid-template-rows: repeat(4, minmax(120px, 1fr));
  aspect-ratio: 1556 / 892;
}

.couple-cell {
  position: relative;
  border: 1px solid var(--line);
  overflow: hidden;
  display: flex;
}

.couple-cell img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.couple-head {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  text-align: center;
}

.couple-overline {
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.24em;
  color: var(--accent);
}

.couple-script {
  font-family: var(--font-script);
  font-size: clamp(32px, 4vw, 52px);
  color: var(--ink);
}

/* ==========================================================================
   STORY
   ========================================================================== */
.story {
  position: relative;
  z-index: 2;
  background: var(--forest);
  border-radius: var(--radius-card);
  padding: 90px 80px;
  /* colchão de scroll invisível no rodapé — sem isso a frase final ainda
     está subindo pra dentro da tela quando o pin de overlap com a #venue
     "congela" o último trecho da seção, cortando ela pela metade. o 60vh
     bate com OVERLAP_FRACTION do JS — reduz o vazio entre as seções sem
     comer a margem de segurança (que fica só no valor fixo em px) */
  padding-bottom: calc(70px + 60vh);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 48px;
  overflow: hidden;
}

.story-head {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  text-align: center;
}

.story-overline {
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.24em;
  color: var(--sage-text);
}

.story-title {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(30px, 4vw, 44px);
  line-height: 1.12;
  letter-spacing: 0.01em;
  color: var(--accent-warm);
}

.timeline {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 56px;
  width: min(560px, 100%);
}

/* linha central contínua, atrás dos dots — "desenha" com o scroll via JS */
.timeline-line {
  position: absolute;
  left: 50%;
  top: 4px;
  bottom: 4px;
  width: 1px;
  background: #fff4e3;
  transform-origin: top center;
}

.milestone {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  text-align: center;
  /* fundo opaco igual ao da seção — "esconde" a linha central atrás do
     texto, deixando ela visível só nos vãos entre um marco e outro */
  background: var(--forest);
  padding: 0 16px;
}

.timeline-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--accent-warm);
}

.milestone-date {
  font-family: var(--font-body);
  font-size: 12px;
  letter-spacing: 0.22em;
  color: var(--accent-warm);
}

.milestone-title {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: clamp(22px, 2.6vw, 28px);
  line-height: 1.2;
  color: var(--on-dark);
}

.milestone-location {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 14px;
  letter-spacing: 0.06em;
  color: var(--sage-text);
}

.milestone-text {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 18px;
  line-height: 1.68;
  color: #cbd3c4;
  max-width: 560px;
}

.story-closing {
  position: relative;
  z-index: 1;
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(20px, 2.4vw, 28px);
  line-height: 1.5;
  color: var(--on-dark);
  text-align: center;
  max-width: 640px;
}

/* ==========================================================================
   VENUE
   ========================================================================== */
.venue {
  position: relative;
  z-index: 3;
  background: var(--paper);
  border-radius: var(--radius-card);
  padding: 90px 100px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 52px;
}

.venue-head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  text-align: center;
}

.venue-overline {
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.24em;
  color: var(--accent);
}

.venue-title {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(32px, 4vw, 48px);
  line-height: 1.12;
  letter-spacing: 0.01em;
  color: var(--ink);
}

.venue-row {
  display: flex;
  gap: 72px;
  align-items: center;
  width: 100%;
  max-width: 1032px;
  flex-wrap: wrap;
  justify-content: center;
}

.venue-info {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 26px;
  width: 400px;
  max-width: 100%;
}

.info-item {
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.info-label {
  font-family: var(--font-body);
  font-size: 11px;
  letter-spacing: 0.2em;
  color: var(--accent);
}

.info-value {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 19px;
  line-height: 1.68;
  color: var(--ink);
}

.venue-map-placeholder {
  flex: 1 1 480px;
  max-width: 560px;
  aspect-ratio: 560 / 380;
  background: #e9e2d7;
  border: 1px solid #7e7e7e;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  overflow: hidden; /* mesmo raio de canto do placeholder (0) — mas já deixa
                        pronto pra recortar o iframe se algum dia entrar um */
}

.venue-map-placeholder iframe {
  display: block; /* remove o espacinho fantasma que iframe inline deixa embaixo */
}

.weather-row {
  display: flex;
  align-items: center;
  gap: 32px;
  flex-wrap: wrap;
  justify-content: center;
}

.weather-head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
  text-align: center;
  max-width: 224px;
}

.weather-overline {
  font-family: var(--font-body);
  font-size: 16px;
  letter-spacing: 0.24em;
  color: var(--accent);
}

.weather-sub {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 17px;
  line-height: 1.12;
  color: var(--ink-soft);
}

.weather-card {
  background: var(--paper);
  border: 1px solid #7e7e7e;
  border-radius: 46px;
  display: flex;
  align-items: center;
  gap: 42px;
  min-height: 150px; /* era height fixo — o clima real/histórico pode ter
                         texto mais longo que o placeholder e precisar
                         crescer um pouco, sem quebrar o card */
  padding: 20px 40px;
  width: 420px; /* um pouco mais larga que antes — dá espaço pro "máx ~26°"
                    caber numa linha só sem precisar espremer a fonte */
  max-width: 100%;
}

.weather-icon {
  width: 56px;
  height: 56px;
  flex-shrink: 0;
  color: var(--forest);
  display: block; /* svg inline tem espaço fantasma embaixo sem isso */
}

.weather-text { display: flex; align-items: center; gap: 20px; }

.weather-temp {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(24px, 6vw, 34px);
  line-height: 1.28;
  color: var(--ink);
}

/* cada linha (ex.: "máx ~26°") não quebra no meio — se não couber, quem
   cede é o font-size (clamp acima), não a quebra de "máx"/valor */
.weather-temp .temp-line {
  display: block;
  white-space: nowrap;
}

.weather-loc {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 14px;
  line-height: 1.3;
  color: var(--ink-soft);
  max-width: 110px;
}

/* ==========================================================================
   INFO
   ========================================================================== */
.info {
  position: relative;
  background: var(--ivory);
  border-radius: var(--radius-card);
  padding: 120px 80px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 44px;
  overflow: hidden;
}

.info-bg {
  position: absolute;
  top: -10%;
  left: 50%;
  transform: translateX(-50%);
  width: 160%;
  max-width: none;
  opacity: 0.5;
  pointer-events: none;
  z-index: 0;
}

.info-head, .pill, .hotel-row, .salon-row {
  position: relative;
  z-index: 1;
}

.info-head {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  text-align: center;
}

.info-overline {
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.24em;
  color: var(--accent);
}

.info-title {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(28px, 4vw, 44px);
  line-height: 1.12;
  letter-spacing: 0.01em;
  color: var(--ink);
  text-align: center;
}

.pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--forest);
  color: #FBDFC3;
  border-radius: 44px;
  padding: 15px 40px;
  font-family: var(--font-body);
  font-size: 26px;
  line-height: 1.2;
  text-transform: uppercase;
}

.hotel-row {
  display: flex;
  gap: 37px;
  width: 100%;
  max-width: 1264px;
  flex-wrap: wrap;
  justify-content: center;
}

.hotel-card {
  width: 288px;
  max-width: 100%;
  flex: 1 1 260px;
  display: flex;
  flex-direction: column;
}

.hotel-card-shape {
  position: relative;
  width: 100%;
  aspect-ratio: 288.118 / 442.962;
  background: url('assets/hotel-card-shape.svg') no-repeat center / contain;
}

.hotel-photo {
  position: absolute;
  left: 7.1%;
  top: 15.32%;
  width: 86.13%;
  height: 60.64%;
  object-fit: cover;
}

.hotel-pin {
  position: absolute;
  left: 46.13%;
  top: 4.62%;
  width: 7.42%;
  height: auto;
}

.hotel-caption {
  position: absolute;
  left: 10.32%;
  top: 82.88%;
  width: 53.23%;
  display: flex;
  flex-direction: column;
  gap: 6px;
  text-align: left;
}

.hotel-city {
  font-family: var(--font-body);
  font-size: 11px;
  letter-spacing: 0.2em;
  color: var(--accent);
}

.hotel-name {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 17px;
  color: var(--ink);
}

/* telefone/instagram — link com ícone inline, reaproveitado em hotéis e
   salões; cada seção ajusta só o tamanho da fonte/ícone (ver abaixo) */
.contact-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 0; /* área de toque um pouco maior sem inflar o visual */
  font-family: var(--font-body);
  font-weight: 300;
  text-decoration: none;
  color: var(--ink-soft);
  transition: color 0.2s ease;
}

.contact-link:hover { color: var(--accent); }

.contact-icon {
  width: 13px;
  height: 13px;
  flex-shrink: 0;
  color: var(--accent);
}

.hotel-caption .contact-link {
  font-size: 11px;
  letter-spacing: 0.02em;
}

.hotel-caption .contact-icon {
  width: 10px;
  height: 10px;
}

.salon-row {
  display: flex;
  gap: 32px;
  width: 100%;
  max-width: 1264px;
  flex-wrap: wrap;
  justify-content: center;
}

.salon-card {
  background: #fff;
  border: 1px solid #7e7e7e;
  border-radius: 24px;
  padding: 34px;
  width: 400px;
  max-width: 100%;
  flex: 1 1 320px;
  display: flex;
  flex-direction: column;
  gap: 26px;
  transition: box-shadow 0.3s ease, border-color 0.3s ease;
}

.salon-card:hover {
  box-shadow: 0 12px 28px rgba(22, 20, 15, 0.12);
  border-color: #336A2E;
}

/* card do hotel não tem borda própria (o "cartão" é a silhueta do SVG em
   .hotel-card-shape) — no hover a sombra segue esse recorte via drop-shadow
   em vez de um box-shadow retangular, que ficaria por cima do formato */
.hotel-card-shape {
  transition: filter 0.3s ease;
}

.hotel-card:hover .hotel-card-shape {
  filter: drop-shadow(0 10px 18px rgba(22, 20, 15, 0.18));
}

@media (prefers-reduced-motion: no-preference) {
  .salon-card { transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease; }
  .salon-card:hover { transform: translateY(-4px); }

  .hotel-card-shape { transition: transform 0.3s ease, filter 0.3s ease; }
  .hotel-card:hover .hotel-card-shape { transform: translateY(-4px); }
}

.salon-head {
  display: flex;
  align-items: center;
  gap: 16px;
}

.salon-pin { width: 9px; height: 12px; }

.salon-city {
  font-family: var(--font-body);
  font-size: 15px;
  letter-spacing: 0.2em;
  color: var(--accent);
}

/* cada salão vira um bloco: nome + telefone + instagram, empilhados */
.salon-item {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.salon-item + .salon-item {
  margin-top: 4px;
}

.salon-name {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 18px;
  line-height: 1.4;
  color: var(--ink);
}

.salon-item .contact-link {
  font-size: 14px;
}

/* ==========================================================================
   TRANSPORT
   ========================================================================== */
.transport {
  background: var(--paper);
  border-radius: var(--radius-card);
  padding: 120px 80px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 38px;
  text-align: center;
}

.transport-route { width: min(484px, 100%); height: auto; }

.transport-overline {
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.24em;
  color: var(--accent);
}

.transport-title {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(26px, 3.6vw, 40px);
  line-height: 1.12;
  letter-spacing: 0.01em;
  color: var(--ink);
  max-width: 820px;
}

.transport-text {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 18px;
  line-height: 1.68;
  color: var(--ink-soft);
  max-width: 660px;
}

/* ==========================================================================
   DRESSCODE
   ========================================================================== */
.dresscode {
  background: var(--ivory);
  border-radius: var(--radius-card);
  padding: 120px 80px 120px 141px;
  display: flex;
  align-items: center;
  gap: 60px;
  flex-wrap: wrap;
}

.dresscode-content {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 26px;
  flex: 1 1 460px;
  max-width: 600px;
}

.dresscode-overline {
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.24em;
  color: var(--accent);
}

.dresscode-title {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(46px, 6vw, 76px);
  letter-spacing: 0.01em;
  line-height: 1.05;
  color: var(--ink);
}

.dresscode-text {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 18px;
  line-height: 1.68;
  color: var(--ink-soft);
}

.evitar-card {
  background: var(--paper);
  border: 1px solid #7e7e7e;
  padding: 34px 40px;
  width: 100%;
  max-width: 500px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.evitar-label {
  font-family: var(--font-body);
  font-size: 12px;
  letter-spacing: 0.22em;
  color: #cd3737;
}

.evitar-item {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 18px;
  line-height: 1.68;
  color: var(--ink);
}

.dresscode-collage {
  flex: 1 1 500px;
  width: 100%;
  max-width: 560px;
  display: flex;
}

.dresscode-collage img {
  width: 100%;
  height: auto;
}

/* ==========================================================================
   GIFTS
   ========================================================================== */
.gifts {
  background: var(--forest);
  border-radius: var(--radius-card);
  padding: 154px 80px 120px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 26px;
  text-align: center;
}

.gifts-script {
  font-family: var(--font-script);
  font-size: clamp(28px, 3.4vw, 38px);
  color: var(--accent-warm);
}

.gifts-title {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(32px, 4vw, 48px);
  line-height: 1.12;
  letter-spacing: 0.01em;
  color: #E9DBCE;
}

.gifts-text {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 18px;
  line-height: 1.68;
  color: #DBD3CA;
  max-width: 640px;
}

/* ==========================================================================
   RSVP
   ========================================================================== */
.rsvp {
  position: relative;
  background: var(--ivory);
  border-radius: var(--radius-card);
  padding: 130px 80px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 26px;
  text-align: center;
  overflow: hidden;
}

.rsvp-bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.34;
  pointer-events: none;
  z-index: 0;
}

.rsvp-overline, .rsvp-title, .rsvp-text, .rsvp-form {
  position: relative;
  z-index: 1;
}

.rsvp-overline {
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.24em;
  color: var(--accent);
}

.rsvp-title {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(32px, 4vw, 48px);
  line-height: 1.12;
  letter-spacing: 0.01em;
  color: var(--ink);
}

.rsvp-text {
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 18px;
  line-height: 1.68;
  color: var(--ink-soft);
  max-width: 520px;
}

.rsvp-form {
  display: flex;
  flex-direction: column;
  gap: 16px;
  width: 100%;
  max-width: 520px;
  padding-top: 8px;
}

.rsvp-field {
  background: var(--paper);
  border: 1px solid #7e7e7e;
  height: 56px;
  padding: 0 20px;
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 16px;
  color: var(--ink);
  width: 100%;
  appearance: none;
  -webkit-appearance: none;
}

select.rsvp-field {
  color: var(--ink-soft);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1L6 6L11 1' stroke='%23717171' stroke-width='1.4' fill='none'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 20px center;
}

.rsvp-field::placeholder { color: var(--ink-soft); }

.rsvp-submit {
  height: 56px;
  padding: 16px 30px;
  margin-top: 0;
}

/* ==========================================================================
   FOOTER
   ========================================================================== */
.footer {
  background: var(--forest);
  padding: 54px 24px 80px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 26px;
  text-align: center;
}

.footer-seal {
  width: 181px;
  height: 175px;
  object-fit: cover;
  border-radius: 50%;
}

.footer-nomes {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: 32px;
  line-height: 1.12;
  letter-spacing: 0.01em;
  color: var(--ivory);
}

.footer-data {
  font-family: var(--font-body);
  font-size: 12px;
  letter-spacing: 0.2em;
  color: #B8B0A6;
}

.footer-sign {
  font-family: var(--font-script);
  font-size: 30px;
  color: #C9BBA6;
}

/* ==========================================================================
   RESPONSIVE — TABLET (~768px)
   ========================================================================== */
@media (max-width: 768px) {
  :root { --radius-card: 48px; --nav-height: 76px; }

  .nav { padding: 22px 28px; }
  .nav-menu { gap: 20px; }
  .nav-menu a { font-size: 13px; }

  .intro { min-height: 620px; border-bottom-left-radius: 48px; border-bottom-right-radius: 48px; }
  .hero-overlay { gap: 14px; }

  .quote, .countdown { padding: 0 24px; }
  /* versículo encostava nas bordas — limita a coluna de quebra (o <br> do
     HTML já força 2 blocos; isso só estreita o 2º pra quebrar em 2 linhas
     com folga, mantendo as 3 linhas no total) */
  .quote-text { max-width: 260px; margin: 0 auto; }
  /* números/blocos largos demais, quase sem margem lateral */
  .countdown-blocks { gap: 14px; }
  .countdown-unit .num { font-size: 30px; }

  .couple { padding: 28px 0; }

  /* mobile: grid retrato denso de 2 colunas, sem os buracos do layout
     desktop. grid-column/row:auto!important ignora o posicionamento
     inline (grid-column:X;grid-row:Y) que cada .couple-cell traz no HTML
     pro desktop — deixa o navegador auto-posicionar em ordem de documento.
     células vazias (sem foto/head) somem com :empty, sem precisar mexer
     no HTML */
  .couple-grid {
    width: 100%;
    margin: 0;
    grid-template-columns: repeat(2, 1fr);
    grid-template-rows: none;
    grid-auto-rows: auto;
    grid-auto-flow: dense; /* preenche o buraco que o card "nós dois" (span 2)
                               deixaria — sem isso ele "empurra" a foto seguinte
                               pra próxima linha e sobra uma célula vazia */
    aspect-ratio: auto;
    gap: 6px;
  }
  .couple-cell {
    grid-column: auto !important;
    grid-row: auto !important;
  }
  .couple-cell:empty { display: none; }
  .couple-cell img {
    aspect-ratio: 3 / 4;
    height: auto;
  }
  .couple-head {
    grid-column: span 2 !important;
    padding: 20px 12px;
  }
  .couple-script {
    font-size: clamp(28px, 8vw, 44px);
  }

  /* 11 fotos é ímpar — com 2 colunas, a última sempre sobraria sozinha
     numa linha com um buraco do lado. Célula da foto 11 (data-col/row do
     desktop, continuam únicos e estáveis no mobile) ocupa a linha toda;
     um pouco mais larga (4:3) já que agora é full-width — 3:4 ficaria
     esticada verticalmente demais nessa largura */
  .couple-cell[data-col="6"][data-row="4"] {
    grid-column: 1 / -1 !important;
  }
  .couple-cell[data-col="6"][data-row="4"] img {
    aspect-ratio: 4 / 3;
  }

  .story, .venue, .info, .transport, .dresscode, .gifts, .rsvp {
    padding-left: 28px;
    padding-right: 28px;
  }

  /* sem o pin de overlap com #venue no mobile (JS), o buffer de calc(+60vh)
     que dava fôlego pro freeze virou só espaço vazio — volta a ser um
     padding normal */
  .story { padding-top: 64px; padding-bottom: 64px; gap: 36px; }
  .timeline { gap: 40px; }

  .venue { padding-top: 64px; padding-bottom: 64px; gap: 40px; }
  .venue-row { gap: 40px; }
  .venue-info { width: 100%; }
  /* causa do vazamento horizontal no mobile: width:420px fixo + max-width:100%
     não estava sendo clampado corretamente dentro do .weather-row (flex),
     e o card vazava ~22px pra fora da viewport de cada lado. width:100%
     direto (em vez de confiar no max-width) resolve */
  .weather-card { width: 100%; }

  .info { padding-top: 80px; padding-bottom: 80px; }
  .hotel-row, .salon-row { gap: 24px; }

  /* card de hotel no mobile: era um shape de aspect-ratio fixo com foto/pin/
     legenda em position:absolute (percentuais) por cima — com telefone
     dentro da legenda, o conteúdo passou a precisar de mais altura do que
     o shape fixo tinha, e como nada cortava (sem overflow:hidden), o texto
     vazava pra fora do card e sobrepunha o próximo. Aqui ele vira um fluxo
     normal (igual o .salon-card): foto no topo, legenda abaixo, altura
     automática — sem travar em aspect-ratio nem height fixo */
  .hotel-card { width: 100%; max-width: 320px; }
  .hotel-card-shape {
    aspect-ratio: auto;
    background: var(--paper);
    border: 1px solid #7e7e7e;
    border-radius: 24px;
    padding: 20px;
    display: flex;
    flex-direction: column;
    gap: 14px;
  }
  .hotel-photo {
    position: static;
    width: 100%;
    height: auto;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: 14px;
  }
  /* no layout novo (foto em fluxo normal, não mais dentro do shape) o pin
     fica solto/sem referência visual — só esconde no mobile. Salões não
     usam essa classe, ficam intactos */
  .hotel-pin {
    display: none;
  }
  .hotel-caption {
    position: static;
    width: 100%;
  }

  .transport { padding-top: 80px; padding-bottom: 80px; }

  .dresscode {
    padding: 64px 28px;
    flex-direction: column;
    align-items: flex-start;
  }
  /* causa real do esticamento: no desktop .dresscode-collage tem
     flex:1 1 500px (500px de LARGURA, fila em linha). Ao virar
     flex-direction:column no mobile, esse 500px passa a valer como
     ALTURA — e como o container é display:flex (row) por padrão,
     a imagem (align-items:stretch, o default) era esticada pra
     preencher essa altura herdada, deformando a proporção */
  .dresscode-collage {
    max-width: 100%;
    width: 100%;
    flex: 0 1 auto;
    align-items: flex-start;
  }
  /* trava a proporção real do PNG (1276x1301, ~1:1) como reforço extra */
  .dresscode-collage img {
    width: 100%;
    height: auto;
    aspect-ratio: 1276 / 1301;
    object-fit: cover;
  }

  .gifts { padding: 80px 28px; }

  .rsvp { padding: 80px 28px; }

  .footer { padding: 44px 24px 60px; }
  /* "14 DE NOVEMBRO DE 2026 · HORIZONTINA — RS" quebrava e o "RS" ficava
     sozinho na linha de baixo — reduz fonte/tracking pra caber numa linha só */
  .footer-data { font-size: 10.5px; letter-spacing: 0.12em; white-space: nowrap; }
}

/* ==========================================================================
   RESPONSIVE — MOBILE (~480px)
   ========================================================================== */
@media (max-width: 480px) {
  :root { --radius-card: 32px; --nav-height: 62px; }

  .nav { padding: 18px 20px; }
  .nav-menu { gap: 12px; flex-wrap: wrap; justify-content: flex-end; }
  .nav-menu a { font-size: 11px; }

  .intro { min-height: 560px; border-bottom-left-radius: 32px; border-bottom-right-radius: 32px; }

  .quote, .countdown { padding: 0 20px; }
  .quote-text { max-width: 230px; }
  .countdown-blocks { gap: 12px; }
  .countdown-unit .num { font-size: 28px; }
  .countdown-sep { height: 40px; }

  .couple { padding: 20px 0; }
  .couple-grid { gap: 4px; }
  .couple-overline { font-size: 10px; }

  .story, .venue, .info, .transport, .dresscode, .gifts, .rsvp {
    padding-left: 20px;
    padding-right: 20px;
  }

  .story { padding-top: 48px; padding-bottom: 48px; }
  .timeline { gap: 32px; }
  .milestone-text { font-size: 15px; }

  .venue { padding-top: 48px; padding-bottom: 48px; }
  .venue-map-placeholder { aspect-ratio: 4 / 3; }
  .weather-card { flex-direction: column; height: auto; padding: 24px; gap: 16px; text-align: center; }
  .weather-text { flex-direction: column; gap: 6px; }

  .info { padding-top: 56px; padding-bottom: 56px; }
  .hotel-card-shape { padding: 16px; }
  .salon-card { padding: 24px; }
  .pill { font-size: 18px; padding: 12px 28px; }

  .transport { padding-top: 56px; padding-bottom: 56px; }
  .transport-text { font-size: 16px; }

  .dresscode { padding: 48px 20px; }
  .evitar-card { padding: 24px; }

  .gifts { padding: 56px 20px; }
  .gifts-text { font-size: 16px; }

  .rsvp { padding: 56px 20px; }

  .footer-seal { width: 130px; height: 130px; }
  .footer-nomes { font-size: 26px; }
}

/* prefers-reduced-motion + telas estreitas: hero recupera a própria altura
   (já que o .intro deixa de controlar o tamanho quando height:auto) */
@media (prefers-reduced-motion: reduce) and (max-width: 768px) {
  .hero { min-height: 620px; }
}

@media (prefers-reduced-motion: reduce) and (max-width: 480px) {
  .hero { min-height: 560px; }
}
