@charset "UTF-8";

/*
  GABRIELLA 15 — REDESIGN 2026
  Direção: pôster editorial de moda encontra uma cortina de teatro.
  A interface é reta, tipográfica e tátil. Sem cards genéricos, vidro ou loader.
*/

:root {
  --ink: #12080b;
  --ink-soft: #211014;
  --wine: #4b0c18;
  --wine-live: #76152a;
  --paper: #f1e4d7;
  --paper-soft: #e6d2c3;
  --blush: #d7b2b4;
  --gold: #c7a265;
  --blue: #1b2b49;
  --text: #231115;
  --text-soft: #705b60;
  --light: #f6ede4;
  --light-soft: #cfbdba;
  --line-dark: rgba(35, 17, 21, 0.22);
  --line-light: rgba(246, 237, 228, 0.25);
  --danger: #9f2e38;
  --success: #2d684b;
  --display: "Bodoni Moda", Didot, "Times New Roman", serif;
  --body: "Manrope", "Helvetica Neue", Arial, sans-serif;
  --utility: "DM Mono", "Courier New", monospace;
  --gutter: clamp(1.25rem, 0.45rem + 3.2vw, 4.75rem);
  --max: 1320px;
  --section: clamp(6rem, 9vw, 10rem);
  --fast: 180ms;
  --base: 320ms;
  --slow: 760ms;
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  --s-1: 0.25rem;
  --s-2: 0.5rem;
  --s-3: 0.75rem;
  --s-4: 1rem;
  --s-5: 1.5rem;
  --s-6: 2rem;
}

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 5.5rem; }
body {
  margin: 0;
  min-width: 320px;
  overflow-x: hidden;
  background: var(--ink);
  color: var(--light);
  font-family: var(--body);
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.65;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}
body.menu-aberto { overflow: hidden; }
img { display: block; max-width: 100%; }
button, input, select, textarea { color: inherit; font: inherit; }
button, a { -webkit-tap-highlight-color: transparent; }
a { color: inherit; }
p, h1, h2, h3, h4, figure, ul, ol, dl, dd { margin: 0; }
ul, ol { padding: 0; }
button { border: 0; }
::selection { background: var(--blush); color: var(--ink); }

:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 5px;
}
.secao--papel :focus-visible { outline-color: var(--wine); }

.pular {
  position: fixed;
  z-index: 500;
  top: 0.75rem;
  left: 0.75rem;
  padding: 0.8rem 1rem;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--utility);
  font-size: 0.75rem;
  text-decoration: none;
  transform: translateY(-150%);
  transition: transform var(--fast);
}
.pular:focus { transform: translateY(0); }
.svg-defs, .loader, .hero__poeira, .arco-portal { display: none !important; }

.wrap {
  width: min(calc(100% - (2 * var(--gutter))), var(--max));
  margin-inline: auto;
}

.secao {
  position: relative;
  padding-block: var(--section);
  isolation: isolate;
}
.secao--papel { background: var(--paper); color: var(--text); }
.secao--vinho { background: var(--wine); color: var(--light); }
.secao--noite { background: var(--ink); color: var(--light); }

.secao__cabeca {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) minmax(18rem, 0.65fr);
  gap: clamp(2rem, 6vw, 8rem);
  align-items: end;
  margin-bottom: clamp(3.5rem, 7vw, 7rem);
}
.t-h2,
.convite__frase,
.rodape__nome {
  font-family: var(--display);
  font-weight: 500;
  letter-spacing: -0.065em;
}
.t-h2 {
  max-width: 10ch;
  font-size: clamp(3.5rem, 7.7vw, 8rem);
  line-height: 0.8;
}
.t-it {
  color: var(--blush);
  font-style: italic;
  font-weight: 400;
}
.secao--papel .t-it { color: var(--wine-live); }
.t-h3 {
  font-family: var(--display);
  font-size: clamp(2.5rem, 4.7vw, 5rem);
  font-weight: 500;
  letter-spacing: -0.045em;
  line-height: 0.95;
}
.lead {
  max-width: 44ch;
  font-size: clamp(1.03rem, 1.4vw, 1.3rem);
  line-height: 1.65;
}
.prosa { max-width: 59ch; }
.prosa p + p { margin-top: 1.2em; }
.prosa--claro { color: var(--text-soft); }
.prosa--escuro { color: var(--light-soft); }
.num,
.rotulo,
.chave {
  font-family: var(--utility);
  font-size: 0.7rem;
  font-weight: 400;
  letter-spacing: 0.15em;
  text-transform: uppercase;
}

/* Navegação -------------------------------------------------------------- */
.topo {
  position: fixed;
  z-index: 100;
  inset: 0 0 auto;
  color: var(--light);
  transition: background var(--base), transform var(--base), border-color var(--base);
}
.topo::after {
  content: "";
  position: absolute;
  inset: auto var(--gutter) 0;
  height: 1px;
  background: var(--line-light);
}
.topo.fixo { background: rgba(18, 8, 11, 0.94); backdrop-filter: blur(12px); }
.topo__inner {
  width: min(calc(100% - (2 * var(--gutter))), var(--max));
  height: 5.25rem;
  margin-inline: auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}
.topo__marca {
  display: inline-flex;
  align-items: center;
  gap: 0.8rem;
  text-decoration: none;
}
.topo__mono { width: 2rem; height: 2rem; color: var(--gold); }
.topo__nome {
  font-family: var(--display);
  font-size: 1rem;
  letter-spacing: -0.02em;
}
.topo__acoes { display: flex; align-items: center; gap: 1rem; }
.topo__menu {
  min-height: 2.75rem;
  display: inline-flex;
  align-items: center;
  gap: 0.7rem;
  padding: 0 0.6rem;
  background: transparent;
  cursor: pointer;
  font-family: var(--utility);
  font-size: 0.68rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
.topo__barras { position: relative; width: 1.25rem; height: 0.75rem; }
.topo__barras i {
  position: absolute;
  right: 0;
  width: 100%;
  height: 1px;
  background: var(--gold);
  transition: transform var(--base), top var(--base), width var(--base);
}
.topo__barras i:first-child { top: 0.2rem; }
.topo__barras i:last-child { top: 0.58rem; width: 65%; }
.topo__menu[aria-expanded="true"] .topo__barras i:first-child { top: 0.4rem; transform: rotate(45deg); }
.topo__menu[aria-expanded="true"] .topo__barras i:last-child { top: 0.4rem; width: 100%; transform: rotate(-45deg); }

.menu {
  position: fixed;
  z-index: 95;
  inset: 0;
  visibility: hidden;
  opacity: 0;
  pointer-events: none;
  background: var(--wine);
  color: var(--light);
  transition: opacity var(--base), visibility var(--base);
}
.menu::before {
  content: "XV";
  position: absolute;
  right: -0.05em;
  bottom: -0.18em;
  color: rgba(246, 237, 228, 0.045);
  font-family: var(--display);
  font-size: min(62vw, 52rem);
  font-weight: 900;
  letter-spacing: -0.12em;
  line-height: 0.7;
}
.menu.aberto { visibility: visible; opacity: 1; pointer-events: auto; }
.menu__inner {
  position: relative;
  z-index: 1;
  width: min(calc(100% - (2 * var(--gutter))), var(--max));
  min-height: 100%;
  margin-inline: auto;
  padding: 8.5rem 0 3rem;
  display: grid;
  grid-template-columns: 1fr 0.45fr;
  gap: 4rem;
  align-items: end;
}
.menu__lista { list-style: none; }
.menu__lista li { border-top: 1px solid var(--line-light); }
.menu__lista a {
  display: grid;
  grid-template-columns: 3.5rem 1fr;
  align-items: baseline;
  padding: 0.35rem 0 0.55rem;
  font-family: var(--display);
  font-size: clamp(2.2rem, 5.2vw, 5rem);
  letter-spacing: -0.045em;
  line-height: 1;
  text-decoration: none;
  transition: color var(--fast), padding-left var(--base);
}
.menu__lista a:hover { color: var(--blush); padding-left: 0.5rem; }
.menu__pe {
  max-width: 34ch;
  color: var(--light-soft);
  font-size: 0.9rem;
}

/* Botões e links --------------------------------------------------------- */
.btn {
  min-height: 3.35rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.8rem;
  padding: 0.85rem 1.4rem;
  border: 1px solid currentColor;
  border-radius: 0;
  background: transparent;
  cursor: pointer;
  font-family: var(--utility);
  font-size: 0.73rem;
  font-weight: 500;
  letter-spacing: 0.04em;
  line-height: 1;
  text-decoration: none;
  transition: background var(--fast), color var(--fast), border-color var(--fast), transform var(--fast);
}
.btn svg { width: 1rem; height: 1rem; }
.btn:hover { transform: translateY(-2px); }
.btn:disabled { cursor: wait; opacity: 0.62; transform: none; }
.btn--cheio { border-color: var(--paper); background: var(--paper); color: var(--ink); }
.btn--cheio:hover { border-color: var(--blush); background: var(--blush); }
.secao--papel .btn--cheio { border-color: var(--wine); background: var(--wine); color: var(--light); }
.secao--papel .btn--cheio:hover { border-color: var(--blue); background: var(--blue); }
.btn--fio { color: currentColor; }
.btn--fio:hover { border-color: var(--paper); background: var(--paper); color: var(--ink); }
.secao--papel .btn--fio:hover { border-color: var(--wine); background: var(--wine); color: var(--light); }
.topo .btn--fio:hover { background: var(--paper); color: var(--ink); }
.btn--largo { width: 100%; }
.link {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  color: inherit;
  font-family: var(--utility);
  font-size: 0.72rem;
  letter-spacing: 0.06em;
  text-decoration: none;
  text-transform: uppercase;
}
.link::after { content: "↗"; font-size: 1rem; transition: transform var(--fast); }
.link:hover::after { transform: translate(3px, -3px); }

/* Hero ------------------------------------------------------------------ */
.hero {
  position: relative;
  min-height: 100svh;
  overflow: hidden;
  isolation: isolate;
  background: var(--ink);
  color: var(--light);
}
.hero::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0 auto 0 0;
  width: 44%;
  background: none;
  opacity: 0.22;
  -webkit-mask-image: linear-gradient(90deg, #000 12%, rgba(0,0,0,.8) 55%, transparent 100%);
  mask-image: linear-gradient(90deg, #000 12%, rgba(0,0,0,.8) 55%, transparent 100%);
}
.hero::after {
  content: "14  ·  11  ·  2026";
  position: absolute;
  left: 1rem;
  top: 50%;
  color: var(--gold);
  font-family: var(--utility);
  font-size: 0.62rem;
  letter-spacing: 0.16em;
  writing-mode: vertical-rl;
  transform: translateY(-50%) rotate(180deg);
}
.hero__inner {
  width: min(calc(100% - (2 * var(--gutter))), var(--max));
  min-height: 100svh;
  margin-inline: auto;
  padding: 8.5rem 0 4.5rem;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: clamp(0.8rem, 2vw, 2rem);
  align-items: center;
}
.hero__texto {
  position: relative;
  z-index: 3;
  grid-column: 1 / 8;
  min-width: 0;
  padding-top: 2rem;
}
.hero__data {
  display: flex;
  align-items: center;
  gap: 0.9rem;
  margin-bottom: 1.8rem;
  color: var(--gold);
  font-family: var(--utility);
  font-size: clamp(0.64rem, 0.8vw, 0.75rem);
  letter-spacing: 0.11em;
  text-transform: uppercase;
}
.hero__data::before { content: "ATO ÚNICO"; color: var(--blush); }
.hero__data::after { content: ""; width: 3rem; height: 1px; background: var(--gold); }
.hero__titulo { width: 120%; font-family: var(--display); line-height: 0.76; }
.hero__nome {
  display: block;
  font-size: clamp(5.3rem, 11.2vw, 11rem);
  font-weight: 500;
  letter-spacing: -0.08em;
}
.hero__sobrenome {
  display: block;
  margin: 1.2rem 0 0.6rem 0.4rem;
  color: var(--gold);
  font-family: var(--utility);
  font-size: clamp(0.8rem, 1.25vw, 1.1rem);
  font-weight: 400;
  letter-spacing: 0.62em;
  line-height: 1;
  text-transform: uppercase;
}
.hero__it {
  display: block;
  margin-left: clamp(1rem, 8vw, 7rem);
  color: var(--blush);
  font-size: clamp(2.5rem, 5vw, 5.7rem);
  font-style: italic;
  font-weight: 400;
  letter-spacing: -0.065em;
  line-height: 0.95;
}
.hero__lead {
  max-width: 40rem;
  margin-top: 2.2rem;
  color: var(--light-soft);
}
.hero__acoes { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-top: 2rem; }
.hero__figura {
  position: relative;
  z-index: 2;
  grid-column: 8 / 13;
  min-width: 0;
  width: 100%;
  max-width: 31rem;
  margin: 3rem 0 0 auto;
  align-self: end;
}
.hero__figura::before {
  content: "XV";
  position: absolute;
  z-index: 2;
  right: -0.11em;
  bottom: -0.18em;
  color: rgba(246, 237, 228, 0.9);
  font-family: var(--display);
  font-size: clamp(7rem, 14vw, 14rem);
  font-style: italic;
  font-weight: 400;
  letter-spacing: -0.12em;
  line-height: 1;
  mix-blend-mode: screen;
  pointer-events: none;
}
.hero__arco {
  position: relative;
  height: min(72vh, 47rem);
  overflow: hidden;
  border: 1px solid var(--line-light);
}
.hero__arco::after,
.hosp__item .arco::after,
.vaga .arco::after {
  content: "";
  position: absolute;
  inset: 0;
  box-shadow: inset 0 0 0 1px rgba(246, 237, 228, 0.12);
  pointer-events: none;
}
.hero__arco img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 30%; filter: contrast(1.05); }
.hero__legenda {
  margin-top: 0.75rem;
  color: rgba(246, 237, 228, 0.42);
  font-family: var(--utility);
  font-size: 0.58rem;
  letter-spacing: 0.04em;
}
.hero__selo { display: none; }
.hero__rolar {
  position: absolute;
  z-index: 4;
  left: var(--gutter);
  bottom: 2rem;
  display: inline-flex;
  align-items: center;
  gap: 0.8rem;
  color: var(--light-soft);
  font-family: var(--utility);
  font-size: 0.6rem;
  letter-spacing: 0.12em;
  text-decoration: none;
  text-transform: uppercase;
}
.hero__rolar i { width: 2rem; height: 1px; background: var(--gold); }

/* Convite ---------------------------------------------------------------- */
.convite {
  overflow: clip;
  background: #f8f3ee;
}
.convite__frase {
  grid-column: 1 / 12;
  max-width: 15ch;
  margin: 0 0 clamp(3.5rem, 6.5vw, 6.5rem);
  font-size: clamp(3.8rem, 7.2vw, 7.4rem);
  line-height: 0.9;
  letter-spacing: -0.045em;
  text-wrap: balance;
}
.convite__frase em {
  color: var(--wine-live);
  font-style: italic;
  font-weight: 400;
}
.convite__composicao {
  position: relative;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: clamp(0.75rem, 1.5vw, 1.5rem);
}
.convite__midia {
  position: relative;
  z-index: 1;
  grid-column: 1 / -1;
  width: 100%;
  aspect-ratio: 16 / 8.1;
  margin: 0;
  overflow: hidden;
  background: #e8ddd4;
  isolation: isolate;
}
.convite__midia picture {
  display: block;
  width: 100%;
  height: 100%;
}
.convite__imagem {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  transform-origin: 64% 50%;
}
.convite__midia::after {
  content: "";
  position: absolute;
  z-index: 2;
  inset: 0;
  background: linear-gradient(90deg, rgba(31, 13, 18, 0.05), transparent 22%, transparent 78%, rgba(31, 13, 18, 0.04));
  box-shadow: inset 0 0 0 1px rgba(55, 26, 35, 0.08);
  pointer-events: none;
}
.convite__texto {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: clamp(0.75rem, 1.5vw, 1.5rem);
  max-width: none;
  margin-top: clamp(2.25rem, 4vw, 4rem);
  padding: clamp(1.5rem, 2.3vw, 2.25rem) 0 0;
  border: 0;
  border-top: 1px solid rgba(55, 26, 35, 0.18);
  border-radius: 0;
  background: transparent;
  color: #59444b;
  box-shadow: none;
}
.convite__texto p {
  margin: 0;
  font-size: clamp(1rem, 1.05vw, 1.08rem);
  line-height: 1.76;
}
.convite__texto p:first-child { grid-column: 1 / 6; }
.convite__texto p:last-child { grid-column: 8 / 13; }
.convite__texto p + p { margin-top: 0; }
.convite__texto strong {
  color: #371a23;
  font-weight: 600;
}

/* Roteiro da noite ------------------------------------------------------- */
.noite__grade {
  display: grid;
  grid-template-columns: minmax(18rem, 0.65fr) minmax(0, 1fr);
  gap: clamp(3rem, 9vw, 9rem);
  align-items: start;
}
.noite__cabeca { display: block; position: sticky; top: 8rem; margin: 0; }
.noite__cabeca .lead { margin-top: 2rem; }
.roteiro { list-style: none; border-top: 1px solid var(--line-light); }
.roteiro__item {
  display: grid;
  grid-template-columns: 9rem 1fr;
  gap: 2rem;
  padding: 1.6rem 0 1.8rem;
  border-bottom: 1px solid var(--line-light);
}
.roteiro__hora {
  color: var(--gold);
  font-family: var(--utility);
  font-size: clamp(1.7rem, 3vw, 3rem);
  font-weight: 300;
  letter-spacing: -0.08em;
  line-height: 1;
}
.roteiro__nome { font-family: var(--display); font-size: clamp(1.8rem, 3vw, 3rem); font-weight: 500; line-height: 1; }
.roteiro__texto { max-width: 44ch; margin-top: 0.65rem; color: var(--light-soft); font-size: 0.9rem; }

.traje {
  display: grid;
  grid-template-columns: minmax(18rem, 0.65fr) minmax(0, 1fr);
  gap: clamp(3rem, 9vw, 9rem);
  margin-top: clamp(7rem, 12vw, 12rem);
  padding-top: clamp(4rem, 7vw, 7rem);
  border-top: 1px solid var(--line-light);
}
.traje > * { min-width: 0; }
.traje__linha { margin: 1.25rem 0; color: var(--blush); font-family: var(--utility); font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; }
.traje__aviso { max-width: 43ch; margin-top: 2rem; padding-left: 1rem; border-left: 2px solid var(--gold); color: var(--light-soft); font-size: 0.86rem; }
.traje__aviso strong { color: var(--light); }
.traje__cartelaTitulo { margin-bottom: 1rem; color: var(--gold); }
.cartela { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); min-height: 26rem; list-style: none; }
.cartela li { position: relative; min-width: 0; background: var(--cor); border-right: 1px solid rgba(255,255,255,.2); }
.cartela__cor { display: block; height: 100%; }
.cartela__nome {
  position: absolute;
  left: 50%;
  bottom: 1rem;
  color: var(--light);
  font-family: var(--utility);
  font-size: 0.54rem;
  letter-spacing: 0.04em;
  text-align: left;
  text-transform: uppercase;
  transform: translateX(-50%) rotate(-90deg) translateX(50%);
  transform-origin: 50% 100%;
  white-space: nowrap;
  mix-blend-mode: difference;
}
.cartela__hex { display: inline; margin-left: 0.5rem; opacity: 0.65; }
.cartela__reservada::after {
  content: "GABI";
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  border: 2px solid var(--gold);
  color: var(--gold);
  font-family: var(--utility);
  font-size: 0.62rem;
  letter-spacing: 0.14em;
  writing-mode: vertical-rl;
}

/* Lugar ----------------------------------------------------------------- */
.mapa {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) minmax(18rem, 0.65fr);
  border-top: 1px solid var(--line-light);
  border-bottom: 1px solid var(--line-light);
}
.mapa__moldura { position: relative; min-height: 33rem; overflow: hidden; border-right: 1px solid var(--line-light); }
.mapa__frame { width: 100%; height: 100%; min-height: 33rem; border: 0; filter: grayscale(1) sepia(.25) contrast(1.05); }
.mapa__tinta { position: absolute; inset: 0; background: rgba(75, 12, 24, 0.18); pointer-events: none; mix-blend-mode: multiply; }
.mapa__pino {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 3.3rem;
  height: 3.3rem;
  display: grid;
  place-items: center;
  background: var(--wine);
  color: var(--paper);
  transform: translate(-50%, -50%);
}
.mapa__pino svg { width: 1.4rem; height: 1.4rem; }
.endereco { padding: clamp(2rem, 5vw, 5rem); align-self: center; }
.endereco::before { content: "DESTINO / 03"; color: var(--gold); font-family: var(--utility); font-size: 0.65rem; letter-spacing: 0.12em; }
.endereco__nome { margin-top: 2rem; font-family: var(--display); font-size: clamp(2.8rem, 5vw, 5rem); font-weight: 500; letter-spacing: -0.05em; line-height: 0.9; }
.endereco__linhas { margin-top: 1.5rem; color: var(--light-soft); }
.endereco__nota { margin-top: 1.5rem; padding-top: 1.25rem; border-top: 1px solid var(--line-light); color: var(--light-soft); font-size: 0.82rem; }
.endereco__acoes { display: flex; flex-wrap: wrap; gap: 0.7rem; margin-top: 2rem; }

.hosp { margin-top: clamp(6rem, 10vw, 10rem); }
.hosp > .lead { margin-bottom: 3rem; }
.hosp__ico { width: 2.1rem; height: 2.1rem; margin-right: 0.8rem; color: var(--gold); }
.hosp__lista { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1px; background: var(--line-light); border: 1px solid var(--line-light); }
.hosp__item { display: grid; grid-template-columns: 0.9fr 1.1fr; min-height: 21rem; background: var(--ink); }
.hosp__item:nth-child(even) .arco { order: 2; }
.hosp__item .arco { position: relative; min-height: 100%; overflow: hidden; }
.hosp__item img { width: 100%; height: 100%; object-fit: cover; filter: saturate(.7) contrast(1.05); }
.hosp__item > div:last-child { padding: clamp(1.5rem, 3vw, 3rem); align-self: center; }
.hosp__dist { color: var(--gold); font-family: var(--utility); font-size: 0.65rem; letter-spacing: 0.08em; text-transform: uppercase; }
.hosp__nome { margin-top: 1rem; font-family: var(--display); font-size: clamp(1.7rem, 2.7vw, 2.6rem); font-weight: 500; line-height: 1; }
.hosp__texto { margin: 1rem 0; color: var(--light-soft); font-size: 0.84rem; }

/* Presentes -------------------------------------------------------------- */
.presentes__lista { display: grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--text); border-bottom: 1px solid var(--text); }
.presente { min-height: 22rem; display: flex; flex-direction: column; padding: 2rem; border-right: 1px solid var(--line-dark); }
.presente:last-child { border-right: 0; }
.presente__topo { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; }
.presente__topo .num { color: var(--wine-live); }
.presente__nome { max-width: 8ch; font-family: var(--display); font-size: clamp(2.2rem, 4vw, 4rem); font-weight: 500; letter-spacing: -0.05em; line-height: 0.92; }
.presente__texto { max-width: 31ch; margin-top: auto; padding: 3rem 0 1.5rem; color: var(--text-soft); font-size: 0.9rem; }
.presente .link { color: var(--wine-live); }

/* Galeria ---------------------------------------------------------------- */
.galeria__pista { width: min(calc(100% - (2 * var(--gutter))), var(--max)); margin-inline: auto; }
.galeria__lista {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-auto-rows: minmax(16rem, 23vw);
  gap: clamp(0.7rem, 1.5vw, 1.4rem);
  list-style: none;
}
.vaga { position: relative; min-width: 0; }
.vaga:nth-child(1) { grid-column: span 4; grid-row: span 2; }
.vaga:nth-child(2) { grid-column: span 3; }
.vaga:nth-child(3) { grid-column: span 5; }
.vaga:nth-child(4) { grid-column: span 3; }
.vaga:nth-child(5) { grid-column: span 3; }
.vaga:nth-child(6) { grid-column: span 2; }
.vaga .arco { position: relative; height: calc(100% - 2rem); overflow: hidden; background: var(--ink-soft); }
.vaga img { width: 100%; height: 100%; object-fit: cover; filter: saturate(.75); transition: transform var(--slow) var(--ease), filter var(--base); }
.vaga:hover img { transform: scale(1.035); filter: saturate(1); }
.vaga__rotulo { height: 2rem; display: flex; align-items: end; gap: 0.6rem; color: var(--light-soft); font-family: var(--utility); font-size: 0.62rem; letter-spacing: 0.08em; text-transform: uppercase; }
.vaga__rotulo .num { color: var(--gold); }
.vaga--reservada .arco {
  display: grid;
  place-items: center;
  border: 1px solid var(--line-light);
  background: transparent;
}
.vaga__marca { position: absolute; top: 1.2rem; right: 1.2rem; color: var(--gold); }
.vaga__marca svg { width: 1.5rem; height: 1.5rem; }
.vaga__aviso { font-family: var(--utility); font-size: 0.62rem; letter-spacing: 0.12em; text-align: center; text-transform: uppercase; }
.vaga__aviso em { display: block; margin-top: 0.35rem; color: var(--blush); font-family: var(--display); font-size: clamp(2rem, 4vw, 4.5rem); font-weight: 400; letter-spacing: -0.05em; text-transform: none; }

/* RSVP ------------------------------------------------------------------- */
.confirmar__grade {
  display: grid;
  grid-template-columns: minmax(18rem, 0.7fr) minmax(0, 1fr);
  gap: clamp(4rem, 10vw, 10rem);
  align-items: start;
}
.confirmar__lado { position: sticky; top: 8rem; }
.contagem { display: grid; grid-template-columns: repeat(4, 1fr); margin-top: 4rem; border-top: 1px solid var(--line-light); border-bottom: 1px solid var(--line-light); }
.contagem__bloco { min-width: 0; padding: 1.25rem 0.5rem 1.25rem 0; border-right: 1px solid var(--line-light); }
.contagem__bloco:last-child { border-right: 0; padding-left: 0.6rem; }
.contagem__bloco b { display: block; font-family: var(--utility); font-size: clamp(1.55rem, 3vw, 2.8rem); font-weight: 300; letter-spacing: -0.08em; line-height: 1; }
.contagem__bloco small { display: block; margin-top: 0.65rem; color: var(--gold); font-family: var(--utility); font-size: 0.56rem; letter-spacing: 0.1em; text-transform: uppercase; }
.contagem__prazo { margin-top: 1.4rem; color: var(--light-soft); font-size: 0.83rem; }

.form { padding: clamp(2rem, 5vw, 5rem); border: 1px solid var(--line-light); background: var(--ink-soft); }
.campo + .campo, .campo + fieldset, fieldset + .form__dupla, .form__dupla + .campo { margin-top: 2rem; }
.campo label, .campo legend {
  display: block;
  margin-bottom: 0.55rem;
  color: var(--gold);
  font-family: var(--utility);
  font-size: 0.65rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.campo { min-width: 0; padding: 0; border: 0; }
.campo input[type="text"],
.campo input[type="tel"],
.campo select,
.campo textarea {
  width: 100%;
  min-height: 3.35rem;
  padding: 0.7rem 0;
  border: 0;
  border-bottom: 1px solid var(--line-light);
  border-radius: 0;
  outline: 0;
  background: transparent;
  color: var(--light);
  transition: border-color var(--fast);
}
.campo textarea { resize: vertical; }
.campo select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--gold) 50%), linear-gradient(135deg, var(--gold) 50%, transparent 50%); background-position: calc(100% - 11px) 50%, calc(100% - 6px) 50%; background-size: 5px 5px; background-repeat: no-repeat; }
.campo select option { background: var(--ink); color: var(--light); }
.campo input:focus, .campo select:focus, .campo textarea:focus { border-bottom-color: var(--gold); }
.campo [aria-invalid="true"] { border-bottom-color: var(--danger); }
.obrig { color: var(--blush); }
.ajuda, .erro { margin-top: 0.5rem; font-size: 0.72rem; }
.ajuda { color: var(--light-soft); }
.erro { color: #f19da4; }
.opcoes { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.6rem; }
.opcao { position: relative; cursor: pointer; }
.opcao input { position: absolute; opacity: 0; }
.opcao span {
  min-height: 3.35rem;
  display: grid;
  place-items: center;
  padding: 0.8rem 1rem;
  border: 1px solid var(--line-light);
  color: var(--light-soft);
  font-family: var(--body);
  font-size: 0.84rem;
  text-align: center;
  transition: background var(--fast), border-color var(--fast), color var(--fast);
}
.opcao input:checked + span { border-color: var(--gold); background: var(--gold); color: var(--ink); }
.opcao input:focus-visible + span { outline: 2px solid var(--gold); outline-offset: 4px; }
.form__dupla { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; }
.form .btn { margin-top: 2.5rem; }
.form__estado { min-height: 1.5rem; margin-top: 1rem; color: var(--blush); font-size: 0.82rem; text-align: center; }
.form__aviso { margin-top: 1rem; color: rgba(246, 237, 228, 0.42); font-family: var(--utility); font-size: 0.58rem; text-align: center; }

/* Rodapé ---------------------------------------------------------------- */
.rodape {
  position: relative;
  overflow: hidden;
  padding: clamp(6rem, 10vw, 10rem) var(--gutter) 3rem;
  background: var(--wine);
  color: var(--light);
  text-align: center;
}
.rodape::before {
  content: "XV";
  position: absolute;
  left: 50%;
  bottom: -0.3em;
  color: rgba(246, 237, 228, 0.045);
  font-family: var(--display);
  font-size: min(48vw, 38rem);
  font-style: italic;
  line-height: 0.75;
  transform: translateX(-52%);
}
.rodape > * { position: relative; z-index: 1; }
.rodape__mono { width: 3.6rem; height: 3.6rem; color: var(--gold); }
.rodape__nome { margin-top: 1.5rem; font-size: clamp(5rem, 13vw, 12rem); line-height: 0.8; }
.rodape__meta { margin-top: 2.5rem; color: var(--light-soft); font-size: 0.86rem; }
.rodape__site { display: inline-block; margin-top: 2.5rem; color: var(--gold); font-family: var(--utility); font-size: 0.65rem; letter-spacing: 0.1em; text-decoration: none; text-transform: uppercase; }

.grao {
  position: fixed;
  z-index: 85;
  inset: 0;
  pointer-events: none;
  opacity: 0.055;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 160 160' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.55'/%3E%3C/svg%3E");
}

/* Movimento: conteúdo só é preparado quando JS e IO existem ------------- */
.js .reveal-ready {
  opacity: 0;
  transform: translateY(2rem);
  transition: opacity var(--slow) var(--ease), transform var(--slow) var(--ease);
}
.js .reveal-ready.is-visible { opacity: 1; transform: none; }
.js .hero__data,
.js .hero__titulo,
.js .hero__lead,
.js .hero__acoes,
.js .hero__figura { animation: hero-in 900ms var(--ease) both; }
.js .hero__titulo { animation-delay: 100ms; }
.js .hero__lead { animation-delay: 210ms; }
.js .hero__acoes { animation-delay: 290ms; }
.js .hero__figura { animation-delay: 140ms; }
@keyframes hero-in { from { opacity: 0; transform: translateY(1.5rem); } }

/* Responsivo ------------------------------------------------------------- */
@media (max-width: 1080px) {
  .hero__texto { grid-column: 1 / 8; }
  .hero__figura { grid-column: 8 / 13; }
  .hero__titulo { width: 130%; }
  .hosp__lista { grid-template-columns: 1fr; }
  .hosp__item { grid-template-columns: 0.75fr 1.25fr; }
  .hosp__item:nth-child(even) .arco { order: 0; }
  .cartela { min-height: 22rem; }
}

@media (max-width: 820px) {
  :root { --section: clamp(5rem, 13vw, 7rem); }
  html { scroll-padding-top: 4.75rem; }
  .topo__inner { height: 4.75rem; }
  .topo__cta { display: none; }
  .menu__inner { grid-template-columns: 1fr; align-content: end; padding-top: 7rem; }
  .menu__lista a { grid-template-columns: 2.8rem 1fr; font-size: clamp(2rem, 10vw, 4rem); }
  .menu__pe { display: none; }
  .secao__cabeca { grid-template-columns: 1fr; gap: 2rem; }
  .t-h2 { max-width: 11ch; }

  .hero::before { width: 100%; opacity: 0.13; }
  .hero::after { display: none; }
  .hero__inner { min-height: auto; padding: 7rem 0 5rem; align-items: start; }
  .hero__texto { grid-column: 1 / 13; padding-top: 0; }
  .hero__titulo { width: 100%; }
  .hero__nome { font-size: clamp(4.8rem, 20.5vw, 9rem); }
  .hero__it { margin-left: 15vw; }
  .hero__lead { max-width: 36rem; }
  .hero__figura { grid-column: 3 / 13; width: 100%; max-width: none; margin-top: 3.5rem; }
  .hero__arco { height: min(80vh, 44rem); }
  .hero__rolar { display: none; }

  .noite__grade,
  .traje,
  .confirmar__grade { grid-template-columns: 1fr; }
  .convite__composicao { display: block; }
  .convite__frase {
    max-width: 14ch;
    margin-bottom: clamp(2.75rem, 8vw, 4rem);
  }
  .convite__midia {
    width: 100%;
    aspect-ratio: 4 / 5;
  }
  .convite__imagem { object-position: center; transform-origin: 50% 45%; }
  .convite__texto {
    width: 100%;
    max-width: none;
    margin: clamp(2.25rem, 8vw, 3rem) 0 0;
    padding-top: 1.5rem;
  }
  .noite__cabeca,
  .confirmar__lado { position: static; }
  .roteiro__item { grid-template-columns: 7rem 1fr; }
  .traje { gap: 3.5rem; }
  .cartela { min-height: 23rem; }
  .mapa { grid-template-columns: 1fr; }
  .mapa__moldura { min-height: 25rem; border-right: 0; border-bottom: 1px solid var(--line-light); }
  .mapa__frame { min-height: 25rem; }
  .presentes__lista { grid-template-columns: 1fr; }
  .presente { min-height: 16rem; border-right: 0; border-bottom: 1px solid var(--line-dark); }
  .presente:last-child { border-bottom: 0; }
  .presente__texto { max-width: 48ch; }
  .galeria__lista { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 25rem; }
  .vaga:nth-child(n) { grid-column: span 1; grid-row: span 1; }
  .vaga:nth-child(1) { grid-row: span 2; }
  .vaga:nth-child(5) { grid-column: span 2; }
}

@media (max-width: 620px) {
  :root { --gutter: 1.15rem; }
  body { font-size: 0.95rem; }
  .topo__inner,
  .hero__inner { width: calc(100vw - 2.3rem); max-width: calc(100vw - 2.3rem); }
  .topo__nome { font-size: 0.9rem; }
  .topo__marca { min-width: 0; }
  .topo__acoes { flex: 0 0 auto; margin-left: auto; }
  .topo__mono { width: 1.75rem; height: 1.75rem; }
  .topo__menu { position: fixed; top: 1rem; right: var(--gutter); padding-right: 0; }
  .hero__inner { padding-top: 6.5rem; }
  .hero__texto { width: 100%; max-width: calc(100vw - 2.3rem); overflow: hidden; }
  .hero__data { align-items: flex-start; flex-wrap: wrap; max-width: 100%; gap: 0.55rem; font-size: 0.56rem; }
  .hero__data::after { display: none; }
  .hero__nome { font-size: clamp(4rem, 19.7vw, 6.7rem); }
  .hero__sobrenome { margin-top: 1rem; font-size: 0.7rem; letter-spacing: 0.45em; }
  .hero__it {
    width: 100%;
    max-width: 100%;
    margin: 0.8rem 0 0;
    font-size: clamp(2rem, 8.7vw, 3rem);
    text-align: right;
    white-space: normal;
  }
  .hero__lead { width: 100%; max-width: 100%; margin-top: 1.8rem; font-size: 0.95rem; overflow-wrap: anywhere; }
  .hero__acoes { display: grid; grid-template-columns: 1fr; }
  .hero__acoes .btn { width: 100%; max-width: 100%; }
  .hero__figura { grid-column: 2 / 13; width: 100%; max-width: calc(100vw - 3.45rem); margin-top: 2.5rem; }
  .hero__arco { height: 66vh; min-height: 30rem; }
  .hero__figura::before { font-size: 8rem; }
  .hero__legenda { max-width: 30ch; }

  .convite__frase { font-size: clamp(3rem, 14.2vw, 4.75rem); line-height: 0.93; }
  .convite__texto { display: block; }
  .convite__texto p + p { margin-top: 1.35rem; }
  .convite__texto p { font-size: 1rem; line-height: 1.72; }
  .roteiro__item { grid-template-columns: 1fr; gap: 0.8rem; }
  .roteiro__hora { font-size: 1.5rem; }
  .cartela { min-height: 19rem; overflow-x: auto; grid-template-columns: repeat(7, 4.5rem); }
  .mapa__moldura, .mapa__frame { min-height: 21rem; }
  .endereco { padding: 2rem 0.2rem; }
  .hosp__item { grid-template-columns: 1fr; }
  .hosp__item .arco { min-height: 15rem; }
  .hosp__item > div:last-child { padding: 1.5rem; }
  .galeria__lista { grid-template-columns: 1fr; grid-auto-rows: 29rem; }
  .vaga:nth-child(n) { grid-column: span 1; grid-row: span 1; }
  .form { padding: 1.5rem 1rem; }
  .form__dupla, .opcoes { grid-template-columns: 1fr; }
  .contagem__bloco { padding-right: 0.2rem; }
  .contagem__bloco b { font-size: 1.35rem; }
  .rodape__nome { font-size: 24vw; }
  .grao { display: none; }
}

@media (max-width: 820px) and (orientation: landscape) and (max-height: 600px) {
  .convite__midia { aspect-ratio: 16 / 9; }
  .convite__imagem { object-position: center 42%; }
  .convite__texto { max-width: none; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }
  .js .reveal-ready { opacity: 1; transform: none; }
}

@media print {
  .topo, .menu, .grao, .hero__rolar, .form, .mapa__frame { display: none !important; }
  body, .hero, .secao, .rodape { background: #fff !important; color: #111 !important; }
  .hero { min-height: auto; }
  .hero__inner { min-height: auto; padding-top: 2rem; }
  .hero__figura { max-width: 18rem; }
}


@charset "UTF-8";

/* Hero v2 — fase 1 do refinamento. Delicada, luminosa e hierárquica. */

.topo {
  color: #371a23;
  background: rgba(248, 243, 238, 0.68);
  -webkit-backdrop-filter: blur(12px) saturate(1.08);
  backdrop-filter: blur(12px) saturate(1.08);
}
.topo::after { background: rgba(55, 26, 35, 0.16); }
.topo.fixo {
  background: rgba(248, 243, 238, 0.86);
  color: #371a23;
  box-shadow: 0 10px 32px rgba(82, 49, 45, 0.07);
}
.topo__mono { color: #7a2843; }
.topo__menu {
  color: inherit;
  font-family: var(--body);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.08em;
}
.topo__barras i { background: #7a2843; }
.topo__nome em {
  color: #a5536a;
  font-style: italic;
  font-weight: 500;
}
.topo .topo__cta {
  border-color: #641d37;
  background: #641d37;
  color: #fffaf6;
  box-shadow: 0 10px 24px rgba(100, 29, 55, 0.16);
}
.topo .topo__cta:hover {
  border-color: #7f2c48;
  background: #7f2c48;
  color: #fffaf6;
}

.btn {
  min-height: 3.45rem;
  padding: 0.95rem 1.55rem;
  border-radius: 999px;
  font-family: var(--body);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0;
}
.btn svg { transition: transform var(--fast) var(--ease); }
.btn:hover svg { transform: translateX(3px); }
.hero .btn--cheio {
  border-color: #641d37;
  background: #641d37;
  color: #fffaf6;
  box-shadow: 0 14px 30px rgba(100, 29, 55, 0.18);
}
.hero .btn--cheio:hover { border-color: #7f2c48; background: #7f2c48; }
.hero .btn--fio { border-color: rgba(74, 39, 48, 0.32); color: #48242e; }
.hero .btn--fio:hover { border-color: #48242e; background: #48242e; color: #fffaf6; }

.hero {
  min-height: max(52rem, 100svh);
  overflow: hidden;
  background: #f8f3ee;
  color: #381a23;
}
.hero::before,
.hero::after { content: none; }

/* A entrada desta fase pertence ao timeline do GSAP, sem animações duplicadas. */
.js .hero__visual,
.js .hero__titulo,
.js .hero__lead,
.js .hero__acoes { animation: none; }

.hero__visual {
  position: absolute;
  z-index: 0;
  inset: 0;
  overflow: hidden;
  transform-origin: 100% 50%;
}
.hero__visual picture {
  display: block;
  width: 100%;
  height: 100%;
}
.hero__visual::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg,
    rgba(248, 243, 238, 0.99) 0%,
    rgba(248, 243, 238, 0.95) 30%,
    rgba(248, 243, 238, 0.64) 48%,
    rgba(248, 243, 238, 0.08) 75%,
    rgba(248, 243, 238, 0) 100%);
}
.hero__visual img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  transform: scale(1.025);
}

.hero__halo {
  position: absolute;
  z-index: 1;
  display: block;
  border: 1px solid rgba(143, 68, 91, 0.2);
  border-radius: 50%;
  pointer-events: none;
}
.hero__halo--um { width: 18rem; height: 18rem; right: 7vw; top: 16vh; }
.hero__halo--dois { width: 7rem; height: 7rem; right: 3.5vw; top: 11vh; border-color: rgba(199, 162, 101, 0.42); }

.hero__inner {
  position: relative;
  z-index: 3;
  width: min(calc(100% - (2 * var(--gutter))), var(--max));
  min-height: max(52rem, 100svh);
  margin-inline: auto;
  padding: clamp(8.5rem, 14vh, 11rem) 0 14rem;
  display: flex;
  align-items: center;
}
.hero__texto {
  width: min(58%, 47rem);
  min-width: 0;
  padding: 0;
}
.hero__titulo {
  width: auto;
  color: #371a23;
  font-family: var(--display);
  font-size: clamp(5.4rem, 9.6vw, 9.8rem);
  font-weight: 500;
  letter-spacing: -0.075em;
  line-height: 0.72;
}
.hero__line {
  display: block;
  overflow: hidden;
  padding: 0.08em 0.1em 0.12em 0;
}
.hero__line > span { display: block; }
.hero__line--sobrenome {
  margin-top: -0.2em;
  margin-left: 0.3em;
  padding: 0.08em 0.2em 0.11em 0.02em;
  color: #a5536a;
}
.hero__line--sobrenome > span {
  font-style: italic;
  font-weight: 400;
  line-height: 1.06;
}
.hero__it {
  width: auto;
  margin: -0.5rem 0 0 clamp(1.25rem, 3vw, 3rem);
  color: rgba(55, 26, 35, 0.65);
  font-family: var(--display);
  font-size: clamp(1.75rem, 2.7vw, 2.85rem);
  font-style: normal;
  font-weight: 400;
  letter-spacing: -0.035em;
  line-height: 1.08;
  text-align: left;
  white-space: nowrap;
}
.hero__support { margin-top: clamp(3.25rem, 6vh, 4rem); }
.hero__lead {
  max-width: 37rem;
  margin-top: 0;
  color: #715a61;
  font-size: clamp(0.92rem, 1.15vw, 1.05rem);
  line-height: 1.65;
}
.hero__lead strong {
  color: inherit;
  font-family: inherit;
  font-size: inherit;
  font-weight: 600;
  letter-spacing: inherit;
}
.hero__lead-line { display: block; }
.hero__lead-copy { display: block; }
.hero__lead-copy--mobile { display: none; }
.hero__acoes {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  gap: 0.75rem;
  margin-top: 0.8rem;
}
.hero__acoes .btn {
  min-height: 3.45rem;
  align-self: stretch;
}

.hero__bridge {
  position: relative;
  z-index: 8;
  height: 0;
}
.hero__facts {
  position: absolute;
  z-index: 5;
  left: 50%;
  top: 0;
  display: grid;
  grid-template-columns: 1fr 0.78fr 1.25fr;
  gap: 0.85rem;
  transform: translate(-50%, -50%);
}
.hero__fact {
  min-width: 0;
  min-height: 7.25rem;
  display: grid;
  grid-template-columns: 2.8rem minmax(0, 1fr);
  gap: 0.95rem;
  align-items: center;
  padding: 1.2rem 1.3rem;
  border: 1px solid rgba(84, 46, 55, 0.12);
  border-radius: 1.35rem;
  background: rgba(255, 252, 249, 0.94);
  box-shadow: 0 18px 48px rgba(83, 48, 44, 0.11);
}
.hero__factIcone {
  width: 2.8rem;
  height: 2.8rem;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: #f3e4e3;
  color: #792944;
}
.hero__factIcone svg { width: 1.2rem; height: 1.2rem; }
.hero__fact > span:last-child { min-width: 0; display: flex; flex-direction: column; }
.hero__fact small {
  color: #9a6c78;
  font-size: 0.63rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
.hero__fact strong {
  margin-top: 0.25rem;
  overflow: hidden;
  color: #3e2029;
  font-size: 0.94rem;
  font-weight: 700;
  line-height: 1.25;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.hero__fact em {
  margin-top: 0.18rem;
  overflow: hidden;
  color: #806a70;
  font-size: 0.69rem;
  font-style: normal;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.hero__rolar {
  z-index: 6;
  left: auto;
  right: var(--gutter);
  bottom: 11.2rem;
  flex-direction: column;
  gap: 0.75rem;
  color: #765862;
  font-family: var(--body);
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.09em;
}
.hero__rolar i { width: 1px; height: 2.6rem; background: #b78c5b; }

@media (max-width: 1080px) {
  .hero__texto { width: 64%; }
  .hero__facts { grid-template-columns: repeat(3, 1fr); }
  .hero__fact { padding-inline: 1rem; }
  .hero__rolar { display: none; }
}

@media (max-width: 820px) {
  .topo__cta { display: none; }
  .hero { min-height: auto; }
  .hero__visual img { object-position: 63% center; }
  .hero__visual::after {
    background: linear-gradient(180deg,
      rgba(248, 243, 238, 0.82) 0%,
      rgba(248, 243, 238, 0.93) 48%,
      rgba(248, 243, 238, 1) 76%);
  }
  .hero__halo--um { width: 12rem; height: 12rem; right: -4rem; top: 8rem; }
  .hero__halo--dois { right: 1.5rem; top: 6.4rem; }
  .hero__inner {
    min-height: 45rem;
    padding: 8.2rem 0 3rem;
    align-items: flex-end;
  }
  .hero__texto { width: 100%; max-width: 42rem; }
  .hero__titulo { font-size: clamp(5rem, 18vw, 8.5rem); }
  .hero__line--sobrenome { margin-left: 0.18em; }
  .hero__bridge {
    height: auto;
    padding: 0.1px 0 2rem;
    background: #f8f3ee;
  }
  .hero__facts {
    position: relative;
    left: auto;
    top: auto;
    bottom: auto;
    margin-bottom: 0;
    transform: none;
  }
}

@media (max-width: 620px) {
  .topo {
    inset: 0 auto auto 0;
    width: 100vw;
    max-width: 100vw;
    background: rgba(248, 243, 238, 0.82);
  }
  .topo__inner {
    width: calc(100vw - 2.3rem);
    max-width: none;
    height: 4rem;
    gap: 0.75rem;
  }
  .topo__marca { gap: 0.55rem; }
  .topo__mono { width: 1.7rem; height: 1.7rem; flex: 0 0 auto; }
  .topo__nome { font-size: 0.83rem; white-space: nowrap; }
  .topo__acoes { margin-left: auto; }
  .topo__menu {
    position: static;
    display: inline-flex;
    visibility: visible;
    opacity: 1;
    min-width: 4.6rem;
    min-height: 2.75rem;
    padding: 0 0.15rem 0 0.5rem;
    color: #371a23;
  }

  .hero {
    width: 100%;
    height: clamp(27.5rem, calc(100svh - 18rem), 29.5rem);
    min-height: 0;
  }
  .hero__visual {
    inset: 4rem 0 0;
    height: calc(100% - 4rem);
  }
  .hero__visual picture { width: 100%; }
  .hero__visual::after {
    background:
      linear-gradient(180deg, rgba(248, 243, 238, 0.06) 0%, rgba(248, 243, 238, 0.12) 48%, rgba(248, 243, 238, 0.84) 100%),
      linear-gradient(90deg, rgba(248, 243, 238, 0.96) 0%, rgba(248, 243, 238, 0.78) 42%, rgba(248, 243, 238, 0.12) 78%, rgba(248, 243, 238, 0) 100%);
  }
  .hero__visual img { object-position: 62% center; }
  .hero__visual img {
    object-position: 66% 42%;
    transform: scale(1.52);
    transform-origin: 72% 82%;
  }
  .hero__halo--um { width: 8rem; height: 8rem; right: -2.5rem; top: 5.6rem; }
  .hero__halo--dois { width: 4.25rem; height: 4.25rem; right: 1.1rem; top: 4.65rem; }
  .hero__inner {
    width: calc(100% - 2.3rem);
    max-width: none;
    height: 100%;
    min-height: 0;
    padding: 6.75rem 0 1rem;
    align-items: flex-start;
  }
  .hero__texto {
    height: 100%;
    display: flex;
    flex-direction: column;
    overflow: visible;
  }
  .hero__titulo {
    max-width: 100%;
    font-size: clamp(3.7rem, 18vw, 4.55rem);
    letter-spacing: -0.07em;
    line-height: 0.75;
  }
  .hero__line { padding-bottom: 0.1em; }
  .hero__line--sobrenome {
    margin-top: -0.2em;
    margin-left: 0.05em;
    padding-right: 0.2em;
    padding-bottom: 0.11em;
  }
  .hero__it {
    margin: -0.4rem 0 0 0.55rem;
    font-size: clamp(1.45rem, 6.9vw, 1.72rem);
    text-align: left;
  }
  .hero__support {
    position: relative;
    z-index: 2;
    width: 100%;
    margin-top: 1rem;
    margin-bottom: 0;
  }
  .hero__support::before {
    content: "";
    position: absolute;
    z-index: -1;
    inset: -1.4rem -1.25rem -1.4rem -1rem;
    background: linear-gradient(90deg, rgba(248, 243, 238, 0.88) 0%, rgba(248, 243, 238, 0.72) 62%, rgba(248, 243, 238, 0) 100%);
    -webkit-mask-image: linear-gradient(180deg, transparent 0%, #000 18%, #000 82%, transparent 100%);
    mask-image: linear-gradient(180deg, transparent 0%, #000 18%, #000 82%, transparent 100%);
    pointer-events: none;
  }
  .hero__lead {
    width: min(86%, 18rem);
    max-width: 100%;
    margin-top: 0;
    font-size: clamp(0.75rem, 3.1vw, 0.8rem);
    line-height: 1.52;
    letter-spacing: -0.01em;
  }
  .hero__lead strong {
    font-size: inherit;
    font-weight: 600;
  }
  .hero__lead-copy--desktop { display: none; }
  .hero__lead-copy--mobile { display: block; }
  .hero__lead-copy--mobile > span { display: block; }
  .hero__lead-line { display: block; }
  .hero__acoes {
    display: block;
    width: auto;
    margin-top: 0.55rem;
  }
  .hero__acoes .btn {
    width: auto;
    min-height: 3.25rem;
    padding: 0.7rem 1.15rem;
    font-size: 0.72rem;
    white-space: nowrap;
  }
  .hero__acoes .btn--fio { display: none; }

  .hero__facts {
    width: calc(100% - 2.3rem);
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.55rem;
    margin: 0 auto;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
    transform: translateY(0.15rem);
  }
  .hero__bridge {
    height: 10.25rem;
    margin-top: -1px;
    padding: 0;
    border-top: 0;
    background: #f8f3ee;
  }
  .hero__bridge::after {
    content: "";
    position: absolute;
    z-index: 1;
    right: 0;
    bottom: -2px;
    left: 0;
    height: 4px;
    background: #f8f3ee;
    pointer-events: none;
  }
  .convite { padding-top: 2rem; }
  .convite__frase {
    max-width: 14ch;
    font-size: clamp(2.35rem, 9.8vw, 3rem);
    line-height: 1;
    letter-spacing: -0.04em;
  }
  .hero__fact {
    min-height: 4.55rem;
    grid-template-columns: 1.75rem minmax(0, 1fr);
    gap: 0.55rem;
    padding: 0.7rem;
    border: 1px solid rgba(84, 46, 55, 0.1);
    border-radius: 1rem;
    background: rgba(255, 252, 249, 0.95);
    box-shadow: 0 12px 30px rgba(83, 48, 44, 0.08);
  }
  .hero__fact:nth-child(3) {
    grid-column: 1 / -1;
    min-height: 4rem;
  }
  .hero__factIcone { width: 1.75rem; height: 1.75rem; }
  .hero__factIcone svg { width: 0.88rem; height: 0.88rem; }
  .hero__fact > span:last-child {
    display: flex;
    flex-direction: column;
  }
  .hero__fact small { font-size: 0.55rem; letter-spacing: 0.07em; }
  .hero__fact strong {
    margin-top: 0.18rem;
    overflow: visible;
    font-size: 0.75rem;
    line-height: 1.22;
    text-overflow: clip;
    white-space: normal;
  }
  .hero__fact em {
    display: block;
    margin-top: 0.1rem;
    overflow: visible;
    font-size: 0.58rem;
    line-height: 1.2;
    text-overflow: clip;
    white-space: normal;
  }
}

@media (max-width: 350px) {
  .topo__marca { gap: 0.42rem; }
  .topo__nome { display: inline; font-size: 0.72rem; }
  .hero__titulo { font-size: 3.55rem; }
}

@media (orientation: landscape) and (max-height: 520px) and (min-width: 621px) and (max-width: 900px) {
  .topo__inner { height: 3.75rem; }
  .hero__inner {
    min-height: auto;
    padding: 5.3rem 0 2rem;
    align-items: flex-start;
  }
  .hero__texto { width: 58%; }
  .hero__titulo { font-size: clamp(4rem, 9.6vw, 5rem); line-height: 0.75; }
  .hero__line--sobrenome { margin-left: 0.15em; }
  .hero__it { margin: 0.15rem 0 0 3.5rem; font-size: 1.7rem; }
  .hero__support { margin-top: 1.4rem; }
  .hero__lead { margin-top: 0; font-size: 0.9rem; line-height: 1.5; }
  .hero__acoes { margin-top: 0.65rem; }
  .hero__acoes .btn { min-height: 3rem; padding-block: 0.75rem; }
  .hero__bridge { padding-bottom: 1.2rem; }
  .hero__facts { margin-bottom: 0; }
  .hero__fact { min-height: 5.6rem; padding: 0.8rem 1rem; }
  .hero__halo--um { top: 5rem; }
  .hero__halo--dois { top: 4rem; }
}


@charset "UTF-8";

/* Seções 3 a 7: continuidade luminosa, editorial e responsiva. */

:root {
  --v3-paper: #f8f3ee;
  --v3-paper-bright: #fffaf6;
  --v3-blush: #ead7d1;
  --v3-blush-strong: #d9b8b8;
  --v3-plum: #371a23;
  --v3-wine: #641d37;
  --v3-rose: #a5536a;
  --v3-muted: #715a61;
  --v3-line: rgba(55, 26, 35, 0.16);
  --v3-shadow: 0 28px 80px rgba(76, 43, 43, 0.12);
  --v3-radius: clamp(1.35rem, 2vw, 2.25rem);
  --grid-edge: max(var(--gutter), calc((100vw - var(--max)) / 2));
}

/* Abertura: a assinatura é o único gesto cênico antes da hero. */
html.carregando,
html.carregando body {
  overflow: hidden;
}

.loader.loader-v3 {
  display: none !important;
}

.carregando .loader.loader-v3 {
  position: fixed;
  z-index: 9999;
  inset: 0;
  display: grid !important;
  place-content: center;
  justify-items: start;
  padding: max(1.25rem, env(safe-area-inset-top)) max(1.25rem, env(safe-area-inset-right)) max(1.25rem, env(safe-area-inset-bottom)) max(1.25rem, env(safe-area-inset-left));
  background: #fffaf6;
  color: var(--v3-plum);
  cursor: wait;
}

.loader-v3__assinatura {
  width: min(62vw, 28rem);
  min-width: 18rem;
  font-family: var(--display);
  font-size: clamp(4.4rem, 10vw, 9rem);
  font-weight: 500;
  letter-spacing: -0.075em;
  line-height: 0.72;
}

.loader-v3__linha {
  display: block;
  overflow: hidden;
  padding: 0.08em 0.08em 0.1em 0;
}

.loader-v3__linha > span,
.loader-v3__linha > em,
.loader-v3__letra {
  display: inline-block;
}

.loader-v3__linha--sobrenome {
  margin-left: 0.38em;
  color: var(--v3-rose);
  font-style: italic;
  font-weight: 400;
}

.loader-v3__fio {
  width: 100%;
  height: 1px;
  overflow: hidden;
  display: block;
  margin-top: 2rem;
  background: rgba(55, 26, 35, 0.12);
}

.loader-v3__fio i {
  width: 100%;
  height: 100%;
  display: block;
  background: var(--v3-rose);
  transform-origin: left center;
}

.loader-v3__apoio {
  width: 100%;
  display: flex;
  justify-content: space-between;
  gap: 1.25rem;
  margin-top: 0.8rem;
  color: rgba(55, 26, 35, 0.52);
  font-family: var(--body);
  font-size: 0.62rem;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.12em;
  line-height: 1.4;
  text-transform: uppercase;
}

/* Grid mestre: qualquer elemento full-bleed usa exatamente a mesma borda. */
.capitulo > .wrap {
  position: relative;
  z-index: 2;
}

.topo__marca {
  min-width: 44px;
  min-height: 44px;
}

.capitulo__cabeca {
  position: relative;
}

.capitulo__cabeca::after {
  content: "";
  width: clamp(3.25rem, 6vw, 6rem);
  height: 1px;
  display: block;
  margin-top: clamp(1.5rem, 3vw, 2.4rem);
  background: rgba(165, 83, 106, 0.48);
}

.ornamento {
  position: absolute;
  z-index: 1;
  width: clamp(10rem, 18vw, 17rem);
  aspect-ratio: 240 / 520;
  background: url("../assets/ramo-xv.svg") center / contain no-repeat;
  opacity: 0.13;
  pointer-events: none;
}

.ornamento--direita {
  top: 7rem;
  right: max(-14rem, calc(var(--grid-edge) - 18rem));
}

.ornamento--esquerda {
  top: 31rem;
  left: max(-14rem, calc(var(--grid-edge) - 18rem));
  transform: scaleX(-1);
}

.ornamento--baixo {
  top: auto;
  bottom: 4rem;
}

.capitulo {
  position: relative;
  isolation: isolate;
  overflow: clip;
  padding-block: clamp(6.5rem, 10vw, 10rem);
  background: var(--v3-paper);
  color: var(--v3-plum);
}

.capitulo__cabeca {
  display: block;
  margin-bottom: clamp(3.5rem, 7vw, 7rem);
}

.capitulo__titulo {
  max-width: 10ch;
  font-family: var(--display);
  font-size: clamp(3.65rem, 7.6vw, 8rem);
  font-weight: 500;
  letter-spacing: -0.068em;
  line-height: 0.9;
}

.capitulo__titulo em {
  color: var(--v3-rose);
  font-style: italic;
  font-weight: 400;
}

.capitulo__lead {
  max-width: 52ch;
  margin-top: clamp(1.6rem, 3vw, 2.4rem);
  color: var(--v3-muted);
  font-size: clamp(1rem, 1.25vw, 1.16rem);
  line-height: 1.75;
}

/* A noite: três atos em um stack verdadeiro. */
.noite-v3 {
  background: #f4e9e3;
}

.noite-v3__cabeca {
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(19rem, 0.55fr);
  gap: clamp(3rem, 8vw, 8rem);
  align-items: end;
}

.noite-v3__cabeca .capitulo__lead {
  margin-top: 0;
}

.noite-v3__cabeca::after {
  position: absolute;
  left: 0;
  bottom: -2rem;
  margin-top: 0;
}

.atos {
  position: relative;
}

.ato {
  position: relative;
  min-height: min(76svh, 50rem);
  overflow: hidden;
  display: flex;
  align-items: flex-end;
  padding: clamp(2rem, 5vw, 5rem);
  border: 1px solid rgba(55, 26, 35, 0.12);
  border-radius: var(--v3-radius);
  box-shadow: var(--v3-shadow);
  transform-origin: 50% 0;
}

.ato + .ato {
  margin-top: clamp(1.5rem, 3vw, 2.5rem);
}

.ato--chegada {
  background: #ead4cf;
}

.ato--ritual {
  color: var(--v3-plum);
  background: #d9bbb0;
}

.ato--festa {
  background: #f9f2ed;
}

.ato__imagem,
.ato__imagem img,
.ato__veu {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}

.ato__imagem img {
  object-fit: cover;
  object-position: center;
}

.ato__veu {
  background: linear-gradient(
    180deg,
    rgba(248, 243, 238, 0.04) 0%,
    rgba(248, 243, 238, 0.12) 58%,
    rgba(248, 243, 238, 0.22) 100%
  );
}

.ato--ritual .ato__imagem img {
  filter: grayscale(1) contrast(0.9);
}

.ato--ritual .ato__imagem {
  opacity: 0.28;
}

.ato__corpo {
  position: relative;
  z-index: 2;
  width: min(100%, 61rem);
}

.ato--ritual .ato__corpo {
  width: min(100%, 58rem);
  padding: clamp(1.4rem, 3vw, 2.6rem);
  border: 1px solid rgba(255, 255, 255, 0.48);
  border-radius: calc(var(--v3-radius) * 0.72);
  background: rgba(255, 250, 246, 0.9);
  box-shadow: 0 20px 50px rgba(55, 26, 35, 0.1);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
}

.ato__nome {
  margin-bottom: clamp(2.5rem, 5vw, 5rem);
  font-family: var(--display);
  font-size: clamp(3.8rem, 8vw, 8.5rem);
  font-weight: 500;
  letter-spacing: -0.075em;
  line-height: 0.78;
}

.ato__eventos {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(1.4rem, 4vw, 4rem);
}

.ato__evento {
  display: grid;
  grid-template-columns: 5.5rem minmax(0, 1fr);
  gap: clamp(1rem, 2.2vw, 2.25rem);
  align-items: start;
  padding-top: 1.2rem;
  border-top: 1px solid rgba(55, 26, 35, 0.23);
}

.ato__evento time {
  color: var(--v3-wine);
  font-size: 0.82rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.04em;
}

.ato__evento h3 {
  font-family: var(--display);
  font-size: clamp(1.75rem, 3vw, 3.1rem);
  font-weight: 500;
  letter-spacing: -0.045em;
  line-height: 1;
}

.ato__evento p {
  max-width: 38ch;
  margin-top: 0.7rem;
  color: #6d535a;
  font-size: 0.9rem;
  line-height: 1.65;
}

.ato__marca {
  position: absolute;
  z-index: 0;
  top: -0.09em;
  right: -0.03em;
  color: rgba(55, 26, 35, 0.055);
  font-family: var(--display);
  font-size: clamp(9rem, 23vw, 24rem);
  font-style: italic;
  line-height: 0.8;
  pointer-events: none;
}

.traje-v3 {
  position: relative;
  isolation: isolate;
  margin-top: clamp(8rem, 13vw, 13rem);
  padding-block: clamp(4rem, 7vw, 7rem);
  border-block: 1px solid var(--v3-line);
}

.traje-v3__cabeca {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 2rem;
  margin-bottom: clamp(2rem, 4vw, 3.75rem);
}

.traje-v3__cabeca h3,
.estadia__cabeca h3 {
  font-family: var(--display);
  font-size: clamp(3rem, 5.4vw, 5.6rem);
  font-weight: 500;
  letter-spacing: -0.06em;
  line-height: 0.92;
}

.traje-v3__linha {
  max-width: 24rem;
  margin-bottom: 0.45rem;
  color: var(--v3-wine);
  font-size: clamp(0.78rem, 1vw, 0.9rem);
  font-weight: 700;
  letter-spacing: 0.035em;
  line-height: 1.5;
  text-transform: uppercase;
}

.traje-v3__experiencia {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) minmax(20rem, 0.65fr);
  overflow: hidden;
  border: 1px solid rgba(55, 26, 35, 0.12);
  border-radius: clamp(1.5rem, 2.8vw, 2.75rem);
  background: rgba(255, 250, 246, 0.78);
  box-shadow: 0 24px 70px rgba(76, 43, 43, 0.09);
}

.traje-v3__visual {
  position: relative;
  min-height: clamp(27rem, 41vw, 38rem);
  overflow: hidden;
  background: #d9c7bb;
}

.traje-v3__visual picture,
.traje-v3__visual img {
  display: block;
  width: 100%;
  height: 100%;
}

.traje-v3__visual img {
  object-fit: cover;
  object-position: center;
}

.traje-v3__tinta {
  position: absolute;
  z-index: 1;
  inset: 0;
  display: block;
  background: var(--traje-tom);
  mix-blend-mode: color;
  opacity: 0.2;
  pointer-events: none;
  transform-origin: left center;
}

.traje-v3__visual::after {
  content: "";
  position: absolute;
  z-index: 3;
  inset: 0;
  border: 1px solid rgba(55, 26, 35, 0.12);
  border-radius: inherit;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.38);
  pointer-events: none;
}

.traje-v3__legenda {
  position: absolute;
  z-index: 2;
  inset: auto 0 0;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: end;
  gap: 0.15rem 1.15rem;
  padding: clamp(5rem, 8vw, 7.5rem) clamp(1.4rem, 3vw, 2.75rem) clamp(1.4rem, 3vw, 2.5rem);
  color: #fffaf6;
  background: linear-gradient(to top, rgba(35, 18, 24, 0.72), rgba(35, 18, 24, 0));
  pointer-events: none;
}

.traje-v3__legenda > span {
  grid-column: 1 / -1;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.11em;
  text-transform: uppercase;
}

.traje-v3__legenda strong {
  font-family: var(--display);
  font-size: clamp(2.25rem, 4.1vw, 4.25rem);
  font-style: italic;
  font-weight: 400;
  letter-spacing: -0.045em;
  line-height: 1;
}

.traje-v3__legenda small {
  max-width: 24ch;
  padding-bottom: 0.3rem;
  color: rgba(255, 250, 246, 0.8);
  font-size: clamp(0.72rem, 0.9vw, 0.82rem);
  line-height: 1.5;
}

.traje-v3__texto {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: clamp(2rem, 4vw, 4.5rem);
  border-left: 1px solid rgba(55, 26, 35, 0.1);
}

.traje-v3__texto > p {
  max-width: 48ch;
  color: var(--v3-muted);
  line-height: 1.75;
}

.traje-v3__aviso {
  margin-top: clamp(1.75rem, 3vw, 2.5rem);
  padding: 1.25rem 0 0;
  border-top: 1px solid rgba(122, 40, 67, 0.3);
}

.traje-v3__aviso strong {
  color: var(--v3-plum);
  font-weight: 700;
}

.traje-v3__convite {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin-top: clamp(2rem, 3vw, 3rem);
  color: var(--v3-plum) !important;
  font-size: 0.76rem;
  font-weight: 700;
  letter-spacing: 0.035em;
}

.traje-v3__convite > span {
  width: 2.6rem;
  height: 1px;
  flex: 0 0 auto;
  background: var(--v3-wine);
}

.traje-v3__cartela-cabeca {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 1.35rem;
}

.traje-v3__cartela-cabeca > p {
  color: var(--v3-plum);
  font-size: 0.86rem;
  font-weight: 700;
}

.traje-v3__cartela-cabeca > span {
  color: var(--v3-muted);
  font-size: 0.72rem;
  letter-spacing: 0.04em;
}

.traje-v3__cartela {
  margin-top: clamp(2.5rem, 4vw, 4rem);
  padding-top: clamp(2rem, 3.5vw, 3rem);
  border-top: 1px solid var(--v3-line);
}

.traje-v3__cartela ul {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: clamp(0.5rem, 1.1vw, 1rem);
  list-style: none;
}

.traje-v3__cartela li {
  min-width: 0;
}

.traje-cor {
  width: 100%;
  min-width: 0;
  display: grid;
  grid-template-rows: clamp(5.5rem, 8vw, 7.5rem) auto;
  gap: 0.7rem;
  padding: 0;
  border: 0;
  border-radius: 0.65rem;
  color: inherit;
  text-align: left;
  background: transparent;
  cursor: pointer;
  touch-action: manipulation;
}

.traje-cor__amostra {
  position: relative;
  display: block;
  overflow: hidden;
  border: 1px solid rgba(55, 26, 35, 0.12);
  border-radius: 0.55rem;
  background:
    linear-gradient(145deg, rgba(255, 255, 255, 0.18), transparent 44%, rgba(0, 0, 0, 0.055)),
    var(--swatch);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.24);
  transition: transform 260ms var(--ease), box-shadow 260ms var(--ease);
}

.traje-cor__amostra::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(100deg, transparent 20%, rgba(255, 255, 255, 0.13) 50%, transparent 78%);
  transform: translateX(-115%);
}

.traje-cor__amostra::before {
  content: "";
  position: absolute;
  z-index: 1;
  inset: 0.45rem;
  border: 1px solid rgba(255, 250, 246, 0);
  border-radius: 0.35rem;
  transition: border-color 220ms ease, box-shadow 220ms ease;
}

.traje-cor__texto {
  display: grid;
  gap: 0.2rem;
  padding-inline: 0.1rem;
}

.traje-cor b {
  color: var(--v3-plum);
  font-size: clamp(0.69rem, 0.82vw, 0.79rem);
  font-weight: 700;
  line-height: 1.35;
}

.traje-cor small {
  color: var(--v3-muted);
  font-size: 0.67rem;
}

.traje-cor.is-ativa .traje-cor__amostra {
  transform: translateY(-0.18rem);
  box-shadow: 0 12px 28px rgba(55, 26, 35, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.32);
}

.traje-cor.is-ativa .traje-cor__amostra::before {
  border-color: rgba(255, 250, 246, 0.82);
  box-shadow: 0 0 0 1px rgba(55, 26, 35, 0.22);
}

.traje-cor.is-ativa b {
  color: var(--v3-wine);
}

.traje-cor:focus-visible {
  outline: 2px solid var(--v3-wine);
  outline-offset: 0.35rem;
}

@media (hover: hover) and (pointer: fine) {
  .traje-cor:hover .traje-cor__amostra {
    transform: translateY(-0.18rem);
  }

  .traje-cor:hover .traje-cor__amostra::after {
    transform: translateX(115%);
    transition: transform 720ms var(--ease);
  }
}

/* Lugar: mapa dominante e informação sobreposta. */
.lugar-v3 {
  background: var(--v3-paper-bright);
}

.lugar-v3__cabeca .capitulo__titulo {
  max-width: 8.5ch;
}

.destino {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1.55fr) minmax(20rem, 0.65fr);
  align-items: center;
}

.destino__mapa {
  position: relative;
  min-height: clamp(34rem, 51vw, 45rem);
  overflow: hidden;
  border-radius: var(--v3-radius);
  background: #e4d5cb;
  box-shadow: var(--v3-shadow);
}

.destino__mapa iframe {
  width: 100%;
  height: 100%;
  min-height: inherit;
  border: 0;
  filter: grayscale(0.88) sepia(0.18) saturate(0.72) contrast(0.96);
}

.destino__tinta {
  position: absolute;
  inset: 0;
  background: rgba(164, 91, 105, 0.12);
  pointer-events: none;
  mix-blend-mode: multiply;
}

.destino__pino {
  position: absolute;
  top: 51%;
  left: 51%;
  width: 4rem;
  aspect-ratio: 1;
  display: grid;
  place-items: center;
  border: 8px solid rgba(255, 250, 246, 0.78);
  border-radius: 50%;
  background: var(--v3-wine);
  color: #fffaf6;
  box-shadow: 0 16px 34px rgba(55, 26, 35, 0.22);
  transform: translate(-50%, -50%);
}

.destino__pino svg {
  width: 1.3rem;
  height: 1.3rem;
}

.destino__cartao {
  position: relative;
  z-index: 2;
  margin-left: clamp(-6rem, -7vw, -3rem);
  padding: clamp(2rem, 4.5vw, 4.2rem);
  border: 1px solid rgba(55, 26, 35, 0.12);
  border-radius: calc(var(--v3-radius) * 0.85);
  background: rgba(255, 250, 246, 0.94);
  box-shadow: var(--v3-shadow);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

.destino__cartao h3 {
  font-family: var(--display);
  font-size: clamp(2.7rem, 4.8vw, 5rem);
  font-weight: 500;
  letter-spacing: -0.06em;
  line-height: 0.92;
}

.destino__cartao > p {
  margin-top: 1.5rem;
  color: var(--v3-muted);
}

.destino__cartao .destino__nota {
  padding-top: 1.25rem;
  border-top: 1px solid var(--v3-line);
  font-size: 0.85rem;
}

.destino__acoes {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-top: 2rem;
}

.lugar-v3 .btn--cheio,
.confirmar-v3 .btn--cheio {
  border-color: var(--v3-wine);
  background: var(--v3-wine);
  color: #fffaf6;
  box-shadow: 0 12px 28px rgba(100, 29, 55, 0.16);
}

.lugar-v3 .btn--cheio:hover,
.confirmar-v3 .btn--cheio:hover {
  border-color: #7f2c48;
  background: #7f2c48;
}

.lugar-v3 .btn--fio {
  border-color: rgba(55, 26, 35, 0.26);
  color: var(--v3-plum);
}

.lugar-v3 .btn--fio:hover {
  border-color: var(--v3-plum);
  background: var(--v3-plum);
  color: #fffaf6;
}

.estadia {
  margin-top: clamp(7rem, 11vw, 11rem);
}

.estadia__cabeca {
  max-width: 51rem;
  margin-bottom: clamp(2.5rem, 5vw, 4.5rem);
}

.estadia__cabeca h3 span,
.estadia__cabeca h3 em {
  display: block;
}

.estadia__cabeca h3 em {
  color: var(--v3-rose);
  font-style: italic;
  font-weight: 400;
}

.estadia__cabeca p {
  max-width: 48ch;
  margin-top: 1.25rem;
  color: var(--v3-muted);
}

.estadia__grade {
  display: grid;
  grid-template-columns: minmax(0, 1.18fr) minmax(18rem, 0.82fr);
  gap: clamp(1rem, 2.3vw, 2rem);
  align-items: start;
}

.hotel-card {
  overflow: hidden;
  border: 1px solid rgba(55, 26, 35, 0.11);
  border-radius: var(--v3-radius);
  background: #f5ebe4;
  box-shadow: 0 18px 50px rgba(76, 43, 43, 0.08);
}

.hotel-card--secundario {
  margin-top: clamp(3rem, 8vw, 8rem);
}

.hotel-card__midia {
  position: relative;
  overflow: hidden;
  background: #d8c5b7;
}

.hotel-card__midia picture {
  display: block;
}

.hotel-card img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  filter: none;
  transition: transform 700ms var(--ease);
}

.hotel-card__midia > span {
  position: absolute;
  z-index: 1;
  right: 1rem;
  bottom: 1rem;
  padding: 0.48rem 0.7rem;
  border: 1px solid rgba(255, 250, 246, 0.45);
  border-radius: 999px;
  color: rgba(255, 250, 246, 0.9);
  font-size: 0.6rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  line-height: 1;
  text-transform: uppercase;
  background: rgba(45, 26, 31, 0.42);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
}

.hotel-card:hover img {
  transform: scale(1.035);
}

.hotel-card__corpo {
  padding: clamp(1.5rem, 3vw, 2.5rem);
}

.hotel-card__corpo > p {
  color: var(--v3-wine);
  font-size: 0.75rem;
  font-weight: 700;
}

.hotel-card h4 {
  margin-top: 0.7rem;
  font-family: var(--display);
  font-size: clamp(2rem, 3.5vw, 3.5rem);
  font-weight: 500;
  letter-spacing: -0.055em;
  line-height: 0.98;
}

.hotel-card__corpo > span {
  display: block;
  margin-top: 1rem;
  color: var(--v3-muted);
  font-size: 0.9rem;
}

.hotel-card a {
  display: inline-block;
  min-height: 44px;
  margin-top: 1.3rem;
  color: var(--v3-wine);
  font-weight: 700;
  line-height: 44px;
  text-underline-offset: 0.3em;
}

/* Presentes: composição assimétrica, sem a fileira de três cards iguais. */
.presentes-v3 {
  background: #ead8d2;
}

.presentes-v3__cabeca .capitulo__titulo {
  max-width: 8ch;
}

.presentes-v3__grade {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: clamp(1rem, 2vw, 1.75rem);
}

.presente-v3 {
  position: relative;
  overflow: hidden;
  min-width: 0;
  display: flex;
  flex-direction: column;
  padding: clamp(1.8rem, 4vw, 4rem);
  border: 1px solid rgba(55, 26, 35, 0.12);
  border-radius: var(--v3-radius);
}

.presente-v3--viagem {
  grid-column: span 7;
  min-height: 34rem;
  background: var(--v3-paper-bright);
}

.presente-v3--lista {
  grid-column: span 5;
  min-height: 34rem;
  background: #d7b4b6;
}

.presente-v3--pix {
  grid-column: 1 / -1;
  min-height: 14rem;
  flex-direction: row;
  align-items: end;
  justify-content: space-between;
  gap: 2rem;
  background: #f7ede7;
}

.presente-v3 h3 {
  position: relative;
  z-index: 1;
  max-width: 8ch;
  font-family: var(--display);
  font-size: clamp(2.8rem, 5.4vw, 5.6rem);
  font-weight: 500;
  letter-spacing: -0.065em;
  line-height: 0.9;
}

.presente-v3 p {
  position: relative;
  z-index: 1;
  max-width: 36ch;
  margin-top: auto;
  padding-top: 3rem;
  color: #664e55;
}

.presente-v3--pix p {
  padding-top: 0.8rem;
}

.presente-v3 a {
  position: relative;
  z-index: 1;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  gap: 0.65rem;
  margin-top: 1.6rem;
  color: var(--v3-wine);
  font-size: 0.85rem;
  font-weight: 700;
  text-decoration: none;
}

.presente-v3 a svg {
  width: 1rem;
  height: 1rem;
  transition: transform 220ms var(--ease);
}

.presente-v3 a:hover svg {
  transform: translateX(4px);
}

.presente-v3__fundo {
  position: absolute;
  right: -0.05em;
  bottom: -0.22em;
  color: rgba(100, 29, 55, 0.055);
  font-family: var(--display);
  font-size: clamp(9rem, 20vw, 20rem);
  font-style: italic;
  line-height: 0.8;
  pointer-events: none;
}

/* Ensaio: scroll horizontal somente quando há espaço e precisão de ponteiro. */
.ensaio-v3 {
  padding-bottom: 0;
  background: var(--v3-paper-bright);
}

.ensaio-v3__cabeca .capitulo__titulo {
  max-width: 8.5ch;
}

.ensaio-v3__viewport {
  width: 100%;
  overflow: hidden;
}

.ensaio-v3__track {
  width: max-content;
  display: flex;
  align-items: center;
  gap: clamp(1rem, 2vw, 2rem);
  padding: 0 var(--grid-edge) clamp(3rem, 6vw, 5rem);
}

.ensaio-frame {
  width: min(82vw, 78rem);
  height: min(78svh, 50rem);
  overflow: hidden;
  border-radius: var(--v3-radius);
  background: #e6d5cb;
  box-shadow: var(--v3-shadow);
}

.ensaio-frame--espelho {
  width: min(61vw, 58rem);
}

.ensaio-frame picture,
.ensaio-frame img {
  width: 100%;
  height: 100%;
}

.ensaio-frame img {
  object-fit: cover;
  transition: transform 900ms var(--ease);
}

.ensaio-frame:hover img {
  transform: scale(1.025);
}

/* Confirmação: clímax funcional da narrativa. */
.confirmar-v3 {
  background: #f0dfd9;
}

.confirmar-v3::before {
  content: "XV";
  position: absolute;
  z-index: -1;
  top: 0.05em;
  right: -0.08em;
  color: rgba(100, 29, 55, 0.045);
  font-family: var(--display);
  font-size: min(45vw, 40rem);
  font-style: italic;
  line-height: 0.75;
}

.confirmar-v3__grade {
  grid-template-columns: minmax(20rem, 0.72fr) minmax(0, 1fr);
  gap: clamp(3rem, 9vw, 9rem);
}

.confirmar-v3__lado {
  top: 7.5rem;
}

.confirmar-v3 .capitulo__titulo {
  max-width: 8ch;
}

.confirmar-v3 .contagem {
  display: block;
  margin-top: clamp(2.75rem, 5vw, 4rem);
  padding-block: clamp(1.5rem, 3vw, 2.2rem);
  border-top: 1px solid var(--v3-line);
  border-bottom: 1px solid var(--v3-line);
}

.confirmar-v3 .contagem__dias {
  min-width: 0;
}

.confirmar-v3 .contagem__prefixo {
  display: block;
  margin-bottom: 0.2rem;
  color: var(--v3-wine);
  font-size: 0.78rem;
  font-weight: 700;
}

.confirmar-v3 .contagem__diasValor {
  min-width: 0;
  display: flex;
  align-items: baseline;
  gap: clamp(0.8rem, 2vw, 1.35rem);
}

.confirmar-v3 .contagem__diasValor b {
  color: var(--v3-plum);
  font-family: var(--display);
  font-size: clamp(6.5rem, 11vw, 10rem);
  font-weight: 400;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.085em;
  line-height: 0.78;
}

.confirmar-v3 .contagem__diasValor small {
  color: var(--v3-rose);
  font-family: var(--display);
  font-size: clamp(1.6rem, 2.8vw, 2.4rem);
  font-style: italic;
  line-height: 1.1;
}

.confirmar-v3 .contagem__relogio {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto minmax(0, 1fr);
  gap: clamp(0.7rem, 1.7vw, 1.35rem);
  align-items: start;
  margin-top: 1.5rem;
  padding-top: 1.25rem;
  border-top: 1px solid rgba(55, 26, 35, 0.12);
}

.confirmar-v3 .contagem__bloco,
.confirmar-v3 .contagem__bloco:last-child {
  min-width: 0;
  display: grid;
  gap: 0.35rem;
  padding: 0;
  border: 0;
}

.confirmar-v3 .contagem__bloco b {
  color: var(--v3-plum);
  font-family: var(--body);
  font-size: clamp(1.9rem, 3.5vw, 2.65rem);
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.055em;
  line-height: 1;
}

.confirmar-v3 .contagem__bloco small {
  color: var(--v3-wine);
  font-family: var(--body);
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: none;
}

.confirmar-v3 .contagem__separador {
  color: rgba(165, 83, 106, 0.55);
  font-family: var(--display);
  font-size: 2rem;
  font-weight: 400;
  line-height: 0.9;
}

.confirmar-v3 .contagem__prazo {
  color: var(--v3-muted);
}

.form-v3 {
  padding: clamp(2rem, 4.5vw, 4.5rem);
  border: 1px solid rgba(55, 26, 35, 0.12);
  border-radius: var(--v3-radius);
  background: rgba(255, 250, 246, 0.95);
  color: var(--v3-plum);
  box-shadow: var(--v3-shadow);
}

.form-v3 .campo label,
.form-v3 .campo legend {
  color: var(--v3-plum);
  font-family: var(--body);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: none;
}

.form-v3 .form__dupla {
  align-items: start;
}

.form-v3 .form__dupla > .campo + .campo {
  margin-top: 0;
}

.form-v3 .campo input[type="text"],
.form-v3 .campo input[type="tel"],
.form-v3 .campo select,
.form-v3 .campo textarea {
  min-height: 3.5rem;
  padding-inline: 0.15rem;
  border-bottom-color: rgba(55, 26, 35, 0.25);
  background-color: transparent;
  color: var(--v3-plum);
}

.form-v3 .campo select {
  background-image: linear-gradient(45deg, transparent 50%, var(--v3-wine) 50%), linear-gradient(135deg, var(--v3-wine) 50%, transparent 50%);
}

.form-v3 .campo select option {
  background: #fffaf6;
  color: var(--v3-plum);
}

.form-v3 .campo input:focus,
.form-v3 .campo select:focus,
.form-v3 .campo textarea:focus {
  border-bottom-color: var(--v3-wine);
}

.form-v3 .ajuda {
  color: var(--v3-muted);
}

.form-v3 .erro {
  color: #8a2639;
}

.form-v3 .opcao span {
  min-height: 3.5rem;
  border-color: rgba(55, 26, 35, 0.2);
  border-radius: 999px;
  color: var(--v3-muted);
}

.form-v3 .opcao input:checked + span {
  border-color: var(--v3-wine);
  background: var(--v3-wine);
  color: #fffaf6;
}

.form-v3 .opcao input:focus-visible + span {
  outline-color: var(--v3-wine);
}

.form-v3 .form__estado {
  color: var(--v3-wine);
}

.form-v3 .form__aviso {
  color: rgba(55, 26, 35, 0.58);
  font-family: var(--body);
  font-size: 0.7rem;
}

.rodape-v3 {
  background: var(--v3-paper-bright);
  color: var(--v3-plum);
}

.rodape-v3::before {
  display: none;
}

.rodape-v3 .rodape__mono,
.rodape-v3 .rodape__site {
  color: var(--v3-wine);
}

.rodape-v3 .rodape__meta {
  color: var(--v3-muted);
}

.rodape-v3 .rodape__nome span,
.rodape-v3 .rodape__nome em {
  display: block;
}

.rodape-v3 .rodape__nome em {
  margin-top: 0.06em;
  color: var(--v3-rose);
  font-style: italic;
  font-weight: 400;
}

.rodape-v3 .rodape__site {
  min-height: 44px;
  font-family: var(--body);
  font-weight: 700;
  line-height: 44px;
  letter-spacing: 0;
  text-transform: none;
}

@media (max-width: 1080px) {
  .noite-v3__cabeca {
    grid-template-columns: 1fr;
    gap: 2rem;
  }

  .noite-v3__cabeca .capitulo__lead {
    margin-top: 0;
  }

  .destino {
    grid-template-columns: 1fr;
  }

  .destino__cartao {
    width: min(calc(100% - 4rem), 42rem);
    margin: -6rem 2rem 0 auto;
  }

  .estadia__grade {
    grid-template-columns: minmax(0, 1.1fr) minmax(17rem, 0.9fr);
  }

  .confirmar-v3__grade {
    gap: 4rem;
  }
}

@media (max-width: 820px) {
  .loader-v3__assinatura {
    width: min(74vw, 18rem);
    min-width: 0;
    font-size: clamp(4.15rem, 20vw, 5.6rem);
    line-height: 0.74;
  }

  .loader-v3__linha--sobrenome {
    margin-left: 0.26em;
  }

  .loader-v3__fio {
    margin-top: 1.5rem;
  }

  .loader-v3__apoio {
    margin-top: 0.7rem;
    font-size: 0.57rem;
    letter-spacing: 0.1em;
  }

  .ornamento {
    width: 5.5rem;
    opacity: 0.08;
  }

  .ornamento--direita {
    right: -4.35rem;
  }

  .ornamento--esquerda {
    left: -4.35rem;
  }

  .confirmar-v3::before,
  .presente-v3__fundo {
    display: none;
  }

  .capitulo {
    padding-block: clamp(5rem, 14vw, 7rem);
  }

  .capitulo__cabeca {
    margin-bottom: 3.25rem;
  }

  .capitulo__titulo {
    max-width: 10ch;
    font-size: clamp(3.2rem, 13.5vw, 5.7rem);
    line-height: 0.93;
  }

  .capitulo__lead {
    font-size: 1rem;
  }

  .capitulo__cabeca::after {
    width: 3.5rem;
    margin-top: 1.5rem;
  }

  .noite-v3__cabeca::after {
    position: static;
    margin-top: 1.5rem;
  }

  .ato {
    min-height: 38rem;
    padding: 1.4rem;
    border-radius: 1.5rem;
  }

  .ato + .ato {
    margin-top: 1.2rem;
  }

  .ato__nome {
    margin-bottom: 2.5rem;
    font-size: clamp(3.6rem, 18vw, 6rem);
  }

  .ato__eventos {
    grid-template-columns: 1fr;
    gap: 1.6rem;
  }

  .ato__evento {
    grid-template-columns: 4rem minmax(0, 1fr);
    gap: 1rem;
  }

  .ato__evento h3 {
    font-size: 1.85rem;
  }

  .ato--ritual {
    align-items: end;
  }

  .ato--ritual .ato__corpo {
    padding: 1.25rem;
    border-radius: 1.1rem;
  }

  .ato--ritual .ato__nome {
    margin-bottom: 1.8rem;
  }

  .ato__marca {
    top: 0;
    font-size: 36vw;
  }

  .confirmar-v3__grade {
    grid-template-columns: 1fr;
  }

  .traje-v3 {
    margin-top: 6.5rem;
    padding-block: 4.25rem;
  }

  .traje-v3__cabeca {
    display: block;
    margin-bottom: 2.25rem;
  }

  .traje-v3__linha {
    margin-top: 1rem;
    margin-bottom: 0;
  }

  .traje-v3__experiencia {
    grid-template-columns: 1fr;
    border-radius: 1.5rem;
  }

  .traje-v3__visual {
    min-height: 0;
    aspect-ratio: 4 / 5;
  }

  .traje-v3__visual img {
    object-position: center;
  }

  .traje-v3__texto {
    max-width: 36rem;
    padding: 1.75rem 1.35rem 2rem;
    border-top: 1px solid rgba(55, 26, 35, 0.1);
    border-left: 0;
  }

  .traje-v3__legenda {
    grid-template-columns: 1fr;
    gap: 0.2rem;
    padding: 6rem 1.35rem 1.35rem;
  }

  .traje-v3__legenda strong {
    font-size: clamp(2.5rem, 12vw, 3.75rem);
  }

  .traje-v3__legenda small {
    padding-bottom: 0;
  }

  .traje-v3__cartela {
    margin-top: 2.75rem;
    padding-top: 2rem;
  }

  .traje-v3__cartela-cabeca {
    align-items: flex-start;
  }

  .traje-v3__cartela ul {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.75rem;
  }

  .traje-cor {
    min-height: 4.75rem;
    grid-template-columns: 3.5rem minmax(0, 1fr);
    grid-template-rows: 1fr;
    align-items: center;
    gap: 0.75rem;
    padding: 0.55rem;
    border: 1px solid rgba(55, 26, 35, 0.1);
    border-radius: 0.9rem;
    background: rgba(255, 250, 246, 0.52);
  }

  .traje-cor__amostra {
    width: 3.5rem;
    height: 3.5rem;
    border-radius: 0.6rem;
  }

  .traje-cor__amostra::before {
    inset: 0.32rem;
    border-radius: 0.3rem;
  }

  .traje-cor b {
    font-size: 0.76rem;
  }

  .destino__mapa {
    min-height: 25rem;
    border-radius: 1.5rem;
  }

  .destino__cartao {
    width: 100%;
    margin: 1rem 0 0;
    border-radius: 1.5rem;
  }

  .estadia__grade {
    grid-template-columns: 1fr;
  }

  .hotel-card--secundario {
    margin-top: 0;
  }

  .hotel-card img {
    aspect-ratio: 4 / 5;
  }

  .presentes-v3__grade {
    grid-template-columns: 1fr;
  }

  .presente-v3--viagem,
  .presente-v3--lista,
  .presente-v3--pix {
    grid-column: auto;
    min-height: 19.5rem;
  }

  .presente-v3--pix {
    min-height: 14rem;
    flex-direction: column;
    align-items: flex-start;
    justify-content: flex-start;
  }

  .presente-v3--pix p {
    padding-top: 1.4rem;
  }

  .presente-v3 p {
    padding-top: 2rem;
  }

  .presente-v3--pix p {
    padding-top: 1.4rem;
  }

  .ensaio-v3 {
    padding-bottom: 5rem;
  }

  .ensaio-v3__viewport {
    overflow: visible;
  }

  .ensaio-v3__track {
    width: auto;
    display: grid;
    gap: 1rem;
    padding: 0 var(--gutter);
  }

  .ensaio-frame,
  .ensaio-frame--espelho {
    width: 100%;
    height: auto;
    aspect-ratio: 4 / 5;
    border-radius: 1.5rem;
  }

  .ensaio-frame img {
    object-position: center;
  }

  .confirmar-v3__lado {
    position: static;
  }

  .form-v3 {
    border-radius: 1.5rem;
  }
}

@media (hover: none) and (pointer: coarse) {
  .btn,
  .traje-cor,
  .presente-v3 a,
  .hotel-card a,
  .rodape-v3 a {
    touch-action: manipulation;
  }

  .btn:active,
  .traje-cor:active,
  .presente-v3 a:active,
  .hotel-card a:active {
    transform: scale(0.985);
  }
}

@media (max-width: 560px) {
  .capitulo__titulo {
    font-size: clamp(3rem, 14vw, 4.75rem);
  }

  .ato {
    min-height: 35rem;
  }

  .ato__evento {
    grid-template-columns: 1fr;
    gap: 0.5rem;
  }

  .ato__evento p {
    font-size: 0.86rem;
  }

  .ato--ritual .ato__corpo {
    background: rgba(255, 250, 246, 0.94);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }

  .traje-v3__cabeca h3 {
    font-size: clamp(3.6rem, 18vw, 5rem);
  }

  .traje-v3__linha {
    max-width: 19rem;
  }

  .traje-v3__cartela-cabeca {
    display: block;
  }

  .traje-v3__cartela-cabeca > span {
    display: block;
    margin-top: 0.4rem;
  }

  .traje-v3__cartela b {
    font-size: 0.72rem;
  }

  .destino__mapa {
    min-height: 21rem;
  }

  .destino__pino {
    width: 3.5rem;
  }

  .destino__cartao {
    padding: 1.5rem;
  }

  .destino__acoes {
    display: grid;
  }

  .destino__acoes .btn {
    width: 100%;
  }

  .hotel-card {
    border-radius: 1.5rem;
  }

  .presente-v3 {
    padding: 1.5rem;
    border-radius: 1.5rem;
  }

  .presente-v3 h3 {
    font-size: 3.25rem;
  }

  .confirmar-v3 .contagem {
    margin-top: 2.5rem;
    padding-block: 1.4rem 1.6rem;
  }

  .confirmar-v3 .contagem__diasValor b {
    font-size: clamp(6.2rem, 29vw, 8rem);
  }

  .confirmar-v3 .contagem__diasValor small {
    font-size: clamp(1.55rem, 7vw, 2rem);
  }

  .confirmar-v3 .contagem__relogio {
    gap: 0.65rem;
    margin-top: 1.25rem;
    padding-top: 1rem;
  }

  .confirmar-v3 .contagem__bloco b {
    font-size: clamp(1.75rem, 9vw, 2.25rem);
  }

  .confirmar-v3 .contagem__bloco small {
    font-size: 0.58rem;
  }

  .confirmar-v3 .contagem__separador {
    font-size: 1.65rem;
  }

  .form-v3 {
    padding: 1.45rem 1.15rem;
  }

  .form-v3 .form__dupla,
  .form-v3 .opcoes {
    grid-template-columns: 1fr;
  }

  .form-v3 .form__dupla > .campo + .campo {
    margin-top: 1.5rem;
  }
}

@media (prefers-reduced-transparency: reduce) {
  .ato--ritual .ato__corpo,
  .destino__cartao,
  .form-v3 {
    background: var(--v3-paper-bright);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .traje-cor,
  .traje-cor__amostra,
  .traje-cor__amostra::before,
  .hotel-card img,
  .ensaio-frame img,
  .presente-v3 a svg {
    transition: none;
  }
}

/* Sistema de ritmo: uma escala editorial para todas as seções. */
.capitulo {
  padding-block: clamp(5rem, 6vw, 6.5rem);
}

.rodape-v3 {
  padding-block: clamp(5rem, 7vw, 6.5rem);
}

.capitulo__cabeca {
  margin-bottom: clamp(3rem, 5vw, 4.5rem);
}

.capitulo__titulo,
.convite__frase {
  font-size: clamp(3.4rem, 5.8vw, 6rem);
  line-height: 0.94;
  letter-spacing: -0.055em;
  text-wrap: balance;
}

.capitulo__titulo {
  max-width: 21ch;
}

.convite__frase {
  max-width: 24ch;
}

.lugar-v3__cabeca .capitulo__titulo,
.presentes-v3__cabeca .capitulo__titulo,
.ensaio-v3__cabeca .capitulo__titulo,
.confirmar-v3 .capitulo__titulo {
  max-width: 21ch;
}

.convite {
  padding-block: clamp(5rem, 6vw, 6.5rem);
}

.convite__frase {
  margin-bottom: clamp(3rem, 5vw, 4.5rem);
}

.traje-v3 {
  margin-top: clamp(5rem, 8vw, 7rem);
  padding-block: clamp(4.5rem, 7vw, 6rem) clamp(2.5rem, 4vw, 3.5rem);
  border-bottom: 0;
}

.traje-v3__cartela {
  padding-top: 0;
  border-top: 0;
}

/* O traje encerra o capítulo: evita somar três paddings antes de "Lugar". */
.noite-v3 {
  padding-bottom: 0;
}

.estadia {
  margin-top: clamp(5rem, 8vw, 7rem);
}

.traje-v3__cabeca h3,
.estadia__cabeca h3 {
  font-size: clamp(3rem, 5.2vw, 5.4rem);
  line-height: 0.94;
}

.rodape-v3 .rodape__nome {
  font-size: clamp(3.4rem, 5.8vw, 6rem);
  line-height: 0.86;
}

@media (max-width: 820px) {
  .rodape-v3 {
    padding-block: 4.5rem;
  }

  .capitulo {
    padding-block: clamp(3.75rem, 10vw, 4.5rem);
  }

  .capitulo__cabeca {
    margin-bottom: 2.75rem;
  }

  .capitulo .capitulo__titulo,
  .convite__frase {
    width: 100%;
    max-width: none;
    margin-inline: auto;
    font-size: clamp(2.7rem, 10.8vw, 3.4rem);
    line-height: 0.98;
    letter-spacing: -0.05em;
    text-align: center;
  }

  .capitulo .capitulo__titulo em {
    display: inline;
  }

  .convite {
    padding: 2rem 0 clamp(3.75rem, 10vw, 4.5rem);
  }

  .convite__frase {
    margin-bottom: 2.75rem;
    font-size: clamp(2.35rem, 9.2vw, 2.95rem);
  }

  .convite__linha {
    display: inline;
  }

  .capitulo__cabeca,
  .traje-v3__cabeca,
  .estadia__cabeca,
  .traje-v3__cartela-cabeca {
    max-width: none;
    margin-inline: auto;
    text-align: center;
  }

  .capitulo__cabeca::after {
    margin-inline: auto;
  }

  .capitulo__lead,
  .noite-v3__cabeca .capitulo__lead,
  .traje-v3__linha,
  .estadia__cabeca p {
    max-width: 38ch;
    margin-right: auto;
    margin-left: auto;
    text-align: center;
  }

  .noite-v3__cabeca .capitulo__lead {
    margin-top: 1.25rem;
  }

  .traje-v3 {
    margin-top: 4rem;
    padding-block: 4rem 2rem;
    border-bottom: 0;
  }

  .traje-v3__cabeca,
  .estadia__cabeca {
    margin-bottom: 2.75rem;
  }

  .traje-v3__cabeca h3,
  .estadia__cabeca h3 {
    font-size: clamp(3rem, 12vw, 3.6rem);
    line-height: 0.98;
  }

  .traje-v3__cabeca h3 {
    font-size: clamp(3.25rem, 13vw, 3.9rem);
  }

  .traje-v3__linha {
    margin-top: 1rem;
  }

  .traje-v3__cartela {
    padding-top: 0;
    border-top: 0;
  }

  .estadia {
    margin-top: 4rem;
  }

  .rodape-v3 .rodape__nome {
    font-size: clamp(2.7rem, 10.8vw, 3.4rem);
    line-height: 0.88;
  }

}


/* =======================================================================
   AJUSTE v4 — copy real (SITE.md) e fotografia real do ensaio.
   Este bloco vem por último e sobrescreve o que foi calibrado para as
   imagens de IA, que eram pálidas e etéreas. Foto real pede véu leve,
   contraste ancorado e nenhum campo de imagem inventado.
   ===================================================================== */

/* --- Hero: linha de abertura (local e data) --------------------------- */
.hero__eyebrow {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  margin-bottom: clamp(1.4rem, 2.6vw, 2.2rem);
  padding-left: 3.4rem;
  color: #6d545c;
  font-family: var(--body);
  font-size: clamp(0.6rem, 0.72vw, 0.68rem);
  font-weight: 600;
  letter-spacing: 0.155em;
  line-height: 1.5;
  text-transform: uppercase;
}
.hero__eyebrow::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.42em;
  width: 2.4rem;
  height: 1px;
  background: #b78c5b;
}
.hero__eyebrow-data { color: var(--v3-wine); }

/* --- Hero desktop: véu um pouco mais curto, a foto real aguenta luz --- */
.hero__visual::after {
  background: linear-gradient(90deg,
    rgba(248, 243, 238, 0.985) 0%,
    rgba(248, 243, 238, 0.94) 28%,
    rgba(248, 243, 238, 0.6) 46%,
    rgba(248, 243, 238, 0.06) 74%,
    rgba(248, 243, 238, 0) 100%);
}

/* --- Hero mobile: o véu antigo apagava a Gabi. Foto inteira em cima,
       marfim só onde o texto pousa. ------------------------------------ */
@media (max-width: 820px) {
  .hero__visual::after {
    background: linear-gradient(180deg,
      rgba(248, 243, 238, 0.10) 0%,
      rgba(248, 243, 238, 0.05) 32%,
      rgba(248, 243, 238, 0.58) 46%,
      rgba(248, 243, 238, 0.95) 66%,
      rgba(248, 243, 238, 1) 80%);
  }
  .hero__visual img {
    object-position: 50% 22%;
    transform: none;
  }
  .hero__eyebrow {
    padding-left: 2.8rem;
    font-size: 0.58rem;
    letter-spacing: 0.14em;
  }
  .hero__eyebrow::before { width: 1.9rem; }
}

@media (max-width: 560px) {
  .hero {
    height: auto;
    min-height: 0;
  }
  .hero__visual {
    inset: 4rem 0 0;
    height: calc(100% - 4rem);
  }
  .hero__visual::after {
    background: linear-gradient(180deg,
      rgba(248, 243, 238, 0.08) 0%,
      rgba(248, 243, 238, 0.04) 30%,
      rgba(248, 243, 238, 0.52) 44%,
      rgba(248, 243, 238, 0.94) 64%,
      rgba(248, 243, 238, 1) 78%);
  }
  .hero__visual img {
    object-position: 50% 20%;
    transform: none;
  }
  .hero__inner {
    min-height: min(41rem, 92svh);
    padding: 6.4rem 0 2.2rem;
    align-items: flex-end;
  }
  .hero__texto { height: auto; display: block; }
  .hero__eyebrow { margin-bottom: 0.9rem; }
}

/* --- Convite: proporção de foto real e citação editorial -------------- */
.convite__midia { aspect-ratio: 16 / 10; }

.convite__citacao {
  grid-column: 1 / 7;
  position: relative;
  margin: 0;
  padding-left: clamp(1.1rem, 2vw, 1.75rem);
  border-left: 2px solid var(--v3-wine);
}
.convite__citacao p {
  color: #46303a;
  font-family: var(--display);
  font-size: clamp(1.35rem, 2.15vw, 2.05rem);
  font-style: italic;
  font-weight: 400;
  letter-spacing: -0.015em;
  line-height: 1.34;
  text-wrap: balance;
}
.convite__texto > p { grid-column: 8 / 13; }
.convite__texto > p + p { margin-top: 1.1rem; }
.convite__texto > p:last-of-type strong {
  display: inline-block;
  margin-top: 0.35rem;
  color: var(--v3-wine);
}

@media (max-width: 820px) {
  .convite__midia { aspect-ratio: 4 / 5; }
  .convite__citacao,
  .convite__texto > p { grid-column: 1 / -1; }
  .convite__citacao { margin-bottom: 1.75rem; }
  .convite__texto > p:first-of-type { margin-top: 0; }
}

/* --- A noite: momentos sem horário (Celebração, sapatilha) ------------ */
.ato__evento--sem-hora > .ato__selo {
  width: 2.6rem;
  height: 2.6rem;
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(122, 40, 67, 0.32);
  border-radius: 50%;
  color: var(--v3-wine);
}
.ato__evento--sem-hora > .ato__selo svg {
  width: 1.05rem;
  height: 1.05rem;
}

/* --- Ritual: vitral do próprio ensaio, em cor, com cartão legível ----- */
.ato--ritual { background: #e6d3c6; }
.ato--ritual .ato__imagem { opacity: 0.55; }
.ato--ritual .ato__imagem img {
  filter: none;
  object-position: center 30%;
}
.ato--ritual .ato__veu {
  background:
    linear-gradient(180deg, rgba(248, 243, 238, 0) 0%, rgba(248, 243, 238, 0.28) 52%, rgba(248, 243, 238, 0.66) 100%);
}
.ato--ritual .ato__corpo {
  background: rgba(255, 250, 246, 0.88);
  -webkit-backdrop-filter: blur(7px);
  backdrop-filter: blur(7px);
  box-shadow: 0 20px 60px rgba(76, 43, 43, 0.12);
}

/* --- Traje: campo de cor real no lugar da foto de tecido -------------- */
.traje-v3--enxuto .traje-v3__visual {
  min-height: clamp(20rem, 30vw, 27rem);
  background: #efe6dd;
}
.traje-v3--enxuto .traje-v3__tinta {
  mix-blend-mode: normal;
  opacity: 1;
}
.traje-v3--enxuto .traje-v3__visual::after {
  background:
    radial-gradient(120% 90% at 22% 12%, rgba(255, 255, 255, 0.34), rgba(255, 255, 255, 0) 62%),
    linear-gradient(160deg, rgba(255, 255, 255, 0.12), rgba(35, 18, 24, 0.14));
}
.traje-v3--enxuto .traje-v3__legenda {
  background: linear-gradient(to top, rgba(35, 18, 24, 0.6), rgba(35, 18, 24, 0));
}
.traje-v3--enxuto .traje-v3__texto { justify-content: center; }
.traje-v3--enxuto .traje-v3__experiencia {
  grid-template-columns: minmax(0, 1fr) minmax(20rem, 1.05fr);
}

@media (max-width: 820px) {
  .traje-v3--enxuto .traje-v3__experiencia { grid-template-columns: 1fr; }
  .traje-v3--enxuto .traje-v3__visual { min-height: 14rem; }
  .traje-v3--enxuto .traje-v3__texto { border-left: 0; }
}

/* --- Onde: data no cartão do endereço --------------------------------- */
.destino__quando {
  margin-top: 1rem;
  color: var(--v3-wine);
  font-size: 0.86rem;
  font-weight: 600;
  letter-spacing: 0.01em;
}

/* --- Hospedagem: cartões tipográficos, sem foto de referência --------- */
.estadia__grade--texto {
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
  align-items: stretch;
}
.hotel-linha {
  display: flex;
  gap: clamp(1rem, 2vw, 1.5rem);
  padding: clamp(1.6rem, 3vw, 2.4rem);
  border: 1px solid rgba(55, 26, 35, 0.12);
  border-radius: var(--v3-radius);
  background: #f5ebe4;
  box-shadow: 0 18px 50px rgba(76, 43, 43, 0.07);
}
.hotel-linha__icone {
  width: 2.9rem;
  height: 2.9rem;
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(122, 40, 67, 0.26);
  border-radius: 50%;
  color: var(--v3-wine);
}
.hotel-linha__icone svg { width: 1.2rem; height: 1.2rem; }
.hotel-linha h4 {
  color: var(--v3-plum);
  font-family: var(--display);
  font-size: clamp(1.35rem, 2.1vw, 1.7rem);
  font-weight: 500;
  letter-spacing: -0.02em;
  line-height: 1.1;
}
.hotel-linha p {
  margin-top: 0.7rem;
  color: var(--v3-muted);
  font-size: 0.88rem;
  line-height: 1.65;
}
.hotel-linha a {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  margin-top: 0.6rem;
  color: var(--v3-wine);
  font-size: 0.9rem;
  font-weight: 600;
  letter-spacing: 0.01em;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.28em;
}
.hotel-linha a:hover { color: var(--v3-plum); }

/* --- Presentes: dois caminhos, sem Pix -------------------------------- */
.presentes-v3__grade--duplo .presente-v3--lista {
  grid-column: span 6;
  min-height: 30rem;
  background: var(--v3-paper-bright);
}
.presentes-v3__grade--duplo .presente-v3--viagem {
  grid-column: span 6;
  min-height: 30rem;
  background: #d7b4b6;
}
@media (max-width: 820px) {
  .presentes-v3__grade--duplo .presente-v3--lista,
  .presentes-v3__grade--duplo .presente-v3--viagem {
    grid-column: auto;
    min-height: 19.5rem;
  }
}

/* =======================================================================
   AJUSTE v19 — contagem como prazo editorial no mobile
   ======================================================================= */
@media (max-width: 820px) {
  .confirmar-v3 .contagem {
    display: flex;
    align-items: baseline;
    gap: 0.65rem;
    margin-top: 2.25rem;
    padding: 0;
    border: 0;
  }

  .confirmar-v3 .contagem__dias,
  .confirmar-v3 .contagem__diasValor {
    display: flex;
    align-items: baseline;
  }

  .confirmar-v3 .contagem__dias { gap: 0.55rem; }

  .confirmar-v3 .contagem__prefixo {
    margin: 0;
    font-size: 0.72rem;
    letter-spacing: 0.04em;
  }

  .confirmar-v3 .contagem__diasValor { gap: 0.32rem; }

  .confirmar-v3 .contagem__diasValor b {
    font-size: clamp(4.35rem, 20vw, 5.75rem);
    line-height: 0.78;
  }

  .confirmar-v3 .contagem__diasValor small {
    font-size: clamp(1.35rem, 6vw, 1.8rem);
  }

  .confirmar-v3 .contagem__relogio { display: none; }

  .confirmar-v3 .contagem__prazo {
    margin-top: 1.85rem;
    padding-top: 1.45rem;
    border-top: 1px solid var(--v3-line);
    line-height: 1.7;
  }
}

/* Hero mobile: chamada e CTA partilham o mesmo eixo; a Gabi ganha escala. */
@media (max-width: 560px) {
  .hero__visual img {
    object-position: 58% 43%;
    transform: scale(1.55);
    transform-origin: 58% 43%;
  }

  .hero__lead {
    width: min(100%, 18rem);
    max-width: 18rem;
    font-size: clamp(0.96rem, 4.1vw, 1.05rem);
    line-height: 1.55;
  }

  .hero__acoes .btn {
    width: min(100%, 18rem);
    justify-content: space-between;
  }
}

/* Atos: Chegada, Ritual e Festa cedem espaço para os momentos da noite. */
@media (max-width: 560px) {
  .noite-v3 .ato__nome,
  .noite-v3 .ato--chegada .ato__nome,
  .noite-v3 .ato--festa .ato__nome {
    margin-bottom: 2.6rem;
    font-size: clamp(3rem, 12.5vw, 3.55rem);
    line-height: 0.86;
  }
}

/* Cartela desktop: oito tons em duas fileiras completas, cada um em card. */
@media (min-width: 821px) {
  .traje-v3__cartela ul {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 1rem;
  }

  .traje-cor {
    min-height: 6.2rem;
    grid-template-columns: 4.35rem minmax(0, 1fr);
    grid-template-rows: 1fr;
    align-items: center;
    gap: 0.9rem;
    padding: 0.7rem;
    border: 1px solid rgba(55, 26, 35, 0.1);
    border-radius: 1rem;
    background: rgba(255, 250, 246, 0.52);
  }

  .traje-cor__amostra {
    width: 4.35rem;
    height: 4.35rem;
    border-radius: 0.7rem;
  }

  .traje-cor__amostra::before {
    inset: 0.38rem;
    border-radius: 0.38rem;
  }

  .traje-cor__texto { padding-inline: 0; }
}

/* --- Ensaio: quadros retrato para as fotos verticais reais ------------ */
.ensaio-frame--retrato { width: min(42vw, 38rem); }
@media (max-width: 820px) {
  .ensaio-frame--retrato { width: 100%; aspect-ratio: 4 / 5; }
}

/* --- Confirmação: texto de abertura ----------------------------------- */
.confirmar__intro {
  max-width: 42ch;
  margin-top: clamp(1.1rem, 2vw, 1.6rem);
  color: var(--v3-muted);
  line-height: 1.7;
}
.form-v3 textarea#f-nome { min-height: 5.5rem; }

/* --- Rodapé: idade em linha própria ----------------------------------- */
.rodape__idade {
  margin-top: 0.65rem;
  color: var(--v3-wine);
  font-family: var(--body);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

/* --- Traje: a amostra precisa mostrar a cor de verdade ----------------
   O degradê escuro da legenda foi feito para escurecer uma FOTO. Sobre um
   campo de cor chapado ele falseia o tom (champagne virava marrom). Aqui a
   cor ocupa o painel inteiro e a legenda vira uma etiqueta clara, como a
   cartela de tinta de uma loja. -------------------------------------- */
.traje-v3--enxuto .traje-v3__visual::after {
  background: radial-gradient(130% 100% at 24% 8%, rgba(255, 255, 255, 0.26), rgba(255, 255, 255, 0) 66%);
}
.traje-v3--enxuto .traje-v3__legenda {
  inset: auto auto clamp(1.15rem, 2.2vw, 1.9rem) clamp(1.15rem, 2.2vw, 1.9rem);
  width: max-content;
  max-width: calc(100% - clamp(2.3rem, 4.4vw, 3.8rem));
  grid-template-columns: minmax(0, 1fr);
  gap: 0.12rem;
  padding: clamp(0.95rem, 1.7vw, 1.25rem) clamp(1.15rem, 2.1vw, 1.6rem);
  border: 1px solid rgba(55, 26, 35, 0.1);
  border-radius: 1.1rem;
  color: var(--v3-plum);
  background: rgba(255, 250, 246, 0.94);
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
  box-shadow: 0 14px 36px rgba(76, 43, 43, 0.16);
}
.traje-v3--enxuto .traje-v3__legenda > span {
  color: var(--v3-wine);
  font-size: 0.62rem;
  letter-spacing: 0.13em;
}
.traje-v3--enxuto .traje-v3__legenda strong {
  color: var(--v3-plum);
  font-size: clamp(1.85rem, 3vw, 2.75rem);
  line-height: 1.05;
}
.traje-v3--enxuto .traje-v3__legenda small {
  max-width: 30ch;
  padding-bottom: 0;
  color: var(--v3-muted);
  font-size: 0.76rem;
}

/* --- Convite: os dois parágrafos ficam numa coluna só, sem buraco ----- */
.convite__prosa {
  grid-column: 8 / 13;
  align-self: start;
}
.convite__prosa > p + p { margin-top: 1.15rem; }
.convite__prosa strong { color: #371a23; font-weight: 600; }
.convite__prosa > p:last-child strong { color: var(--v3-wine); }
@media (max-width: 820px) {
  .convite__prosa { grid-column: 1 / -1; }
}

/* --- Atos com três momentos (Ritual e Festa) --------------------------
   A grade de duas colunas foi feita para dois eventos. Com três, sobra uma
   célula vazia e a leitura deixa de ser cronológica. Aqui os três viram
   colunas de uma linha só, mantendo a ordem do relógio. ---------------- */
.ato--ritual .ato__eventos,
.ato--festa .ato__eventos {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(1.2rem, 2.6vw, 2.4rem);
}
.ato--ritual .ato__evento,
.ato--festa .ato__evento {
  grid-template-columns: minmax(0, 1fr);
  gap: 0.75rem;
}
.ato--ritual .ato__corpo { width: min(100%, 68rem); }

/* O cartão do Ritual pousa sobre o vitral e sobre o ato anterior durante a
   transição do stack: precisa ser opaco o bastante para não deixar vazar. */
.ato--ritual .ato__corpo { background: rgba(255, 250, 246, 0.96); }

@media (max-width: 1080px) {
  .ato--ritual .ato__eventos,
  .ato--festa .ato__eventos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ato--ritual .ato__evento,
  .ato--festa .ato__evento { grid-template-columns: 5rem minmax(0, 1fr); gap: 1.25rem; }
}
@media (max-width: 820px) {
  .ato--ritual .ato__eventos,
  .ato--festa .ato__eventos { grid-template-columns: 1fr; gap: 1.6rem; }
  .ato--ritual .ato__evento,
  .ato--festa .ato__evento { grid-template-columns: 4rem minmax(0, 1fr); gap: 1rem; }
}

/* Durante a transição do stack o ato anterior fica visível a 68% atrás deste
   cartão. Com backdrop-filter o texto de trás ainda atravessava e prejudicava
   a leitura, então aqui o cartão é sólido. */
.ato--ritual .ato__corpo {
  background: #fffaf6;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

/* --- Hero mobile: a linha do local caía sobre a parte quente e escura da
   foto e ficava ilegível. No celular ela sai (o cartão LOCAL logo abaixo
   repete a mesma informação) e fica só a data, em marsala, que tem
   contraste suficiente. ------------------------------------------------ */
@media (max-width: 820px) {
  .hero__eyebrow > span:not(.hero__eyebrow-data) { display: none; }
  .hero__eyebrow {
    margin-bottom: 1rem;
    color: var(--v3-wine);
    font-weight: 700;
  }
  .hero__eyebrow::before { background: var(--v3-wine); opacity: 0.55; }
}

/* =======================================================================
   AJUSTE v5 — respiro e centralização do convite
   ===================================================================== */

/* Os três cards de Data/Horário/Local flutuam sobre a borda da seção
   (translate -50%), então metade da altura deles come o padding do convite.
   O título ficava colado. Aqui a seção ganha folga real acima e o título
   passa a ser um gesto centrado, não um bloco encostado à esquerda. */
.convite {
  padding-top: clamp(9rem, 11vw, 13rem);
  padding-bottom: clamp(6rem, 8vw, 9rem);
}

.convite__frase {
  grid-column: 1 / -1;
  max-width: 20ch;
  margin-inline: auto;
  margin-bottom: clamp(4.5rem, 7vw, 7rem);
  text-align: center;
}

@media (max-width: 820px) {
  .convite {
    padding-top: clamp(3.5rem, 9vw, 5rem);
    padding-bottom: clamp(4rem, 10vw, 5rem);
  }
  .convite__frase {
    max-width: 16ch;
    margin-inline: auto;
    margin-bottom: clamp(3rem, 8vw, 3.75rem);
    text-align: center;
  }
}

/* --- Hospedagem: volta o card com área de foto -----------------------
   O layout com imagem foi restaurado. Enquanto as fotos reais dos hotéis
   não chegam, a área fica como um campo em espera, com a mesma proporção
   16/9 da foto — assim é só trocar o bloco por um <picture> depois. --- */
.hotel-card__vazio {
  position: relative;
  aspect-ratio: 16 / 9;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  background:
    repeating-linear-gradient(135deg,
      rgba(122, 40, 67, 0.045) 0 12px,
      rgba(122, 40, 67, 0) 12px 24px),
    #ece0d8;
}
.hotel-card__vazioIcone {
  width: 3.1rem;
  height: 3.1rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(122, 40, 67, 0.28);
  border-radius: 50%;
  color: var(--v3-wine);
  background: rgba(255, 250, 246, 0.62);
}
.hotel-card__vazioIcone svg { width: 1.3rem; height: 1.3rem; }
.hotel-card__vazio > span:last-child {
  color: var(--v3-wine);
  font-family: var(--body);
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.13em;
  line-height: 1;
  text-transform: uppercase;
  opacity: 0.72;
}

@media (max-width: 820px) {
  .hotel-card--secundario { margin-top: 0; }
}

/* A regra .hotel-card__midia > span posicionava a antiga etiqueta "Imagem de
   referência" absoluta no canto. Dentro do campo em espera os dois spans
   precisam voltar ao fluxo, centralizados. */
.hotel-card__vazio > span {
  position: static;
  right: auto;
  bottom: auto;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}
.hotel-card__vazio {
  box-shadow: inset 0 0 0 1px rgba(122, 40, 67, 0.09);
}
.hotel-card__vazio > .hotel-card__vazioIcone {
  width: 3.1rem;
  height: 3.1rem;
  border: 1px solid rgba(122, 40, 67, 0.26);
  border-radius: 50%;
  background: rgba(255, 250, 246, 0.66);
}

/* =======================================================================
   AJUSTE v6 — a citação passa a ser tratada como título
   A versão anterior era 100% itálica, num só peso e numa só cor, e o filete
   da esquerda esticava até o fim da linha do grid em vez de acompanhar o
   texto. Agora ela usa o mesmo sistema dos títulos do site: Bodoni romano
   peso 500 em ameixa, com o fecho em marsala itálico.
   ===================================================================== */
.convite__citacao {
  align-self: start;
  padding-block: 0.14em 0.1em;
  border-left-width: 2px;
  border-left-color: var(--wine-live);
}

.convite__citacao p {
  color: var(--v3-plum);
  font-family: var(--display);
  font-size: clamp(1.7rem, 2.85vw, 2.75rem);
  font-style: normal;
  font-weight: 500;
  letter-spacing: -0.035em;
  line-height: 1.13;
  text-wrap: balance;
}

.convite__citacao em {
  color: var(--wine-live);
  font-style: italic;
  font-weight: 400;
}

/* A coluna de texto ao lado ganha um pouco mais de corpo e contraste, para
   não ficar apagada ao lado de um título forte. */
.convite__prosa > p {
  color: #4f3a41;
  font-size: clamp(1.02rem, 1.1vw, 1.12rem);
  line-height: 1.72;
}
.convite__prosa > p:last-child strong {
  display: inline-block;
  margin-top: 0.25rem;
  color: var(--wine-live);
  font-weight: 700;
}

@media (max-width: 820px) {
  .convite__citacao p { font-size: clamp(1.5rem, 6.2vw, 2rem); }
}

/* =======================================================================
   AJUSTE v7 — hospedagem: cards iguais e cabeçalho centrado
   ===================================================================== */

/* Os dois hotéis têm o mesmo peso na informação, então perdem a assimetria
   editorial (1.18fr / 0.82fr com o segundo deslocado para baixo) e passam a
   dividir a linha em partes iguais. */
.estadia__grade {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: stretch;
}
.hotel-card--secundario { margin-top: 0; }
.hotel-card {
  display: flex;
  flex-direction: column;
}
.hotel-card__corpo {
  flex: 1;
  display: flex;
  flex-direction: column;
}
.hotel-card__corpo > a { margin-top: auto; }

/* Cabeçalho centrado, como o título do convite. */
.estadia__cabeca {
  max-width: 62rem;
  margin-inline: auto;
  text-align: center;
}
.estadia__cabeca p {
  max-width: 52ch;
  margin-inline: auto;
}

/* Palavras-âncora no subtítulo, para o texto não virar um bloco cinza. */
.estadia__cabeca p strong {
  color: var(--v3-plum);
  font-weight: 600;
}

@media (max-width: 820px) {
  .estadia__grade { grid-template-columns: 1fr; }
}

/* Centrado, o subtítulo quebrava deixando "para" pendurado no fim da linha.
   O balanceamento distribui as duas linhas com larguras parecidas. */
.estadia__cabeca p { text-wrap: balance; }

/* =======================================================================
   AJUSTE v8 — presentes: respiro interno, contraste e destaques
   ===================================================================== */

/* O parágrafo era empurrado para o rodapé do card com margin-top:auto sobre
   um mínimo de 30rem, o que abria um vão enorme sob o título. Agora o texto
   acompanha o título e só o link fica ancorado embaixo. */
.presentes-v3__grade--duplo .presente-v3--lista,
.presentes-v3__grade--duplo .presente-v3--viagem {
  min-height: clamp(21rem, 29vw, 25rem);
}
.presentes-v3__grade--duplo .presente-v3 p {
  margin-top: clamp(1.15rem, 1.8vw, 1.6rem);
  padding-top: 0;
}
.presentes-v3__grade--duplo .presente-v3 a {
  margin-top: auto;
  padding-top: clamp(1.6rem, 2.6vw, 2.4rem);
}

/* Sobre o blush do card de viagem o cinza do texto quase sumia. Cada card
   passa a ter o tom de texto calibrado para o próprio fundo. */
.presente-v3--lista p { color: #5b444b; }
.presente-v3--viagem p { color: #472a32; }

.presente-v3 p strong { font-weight: 600; }
.presente-v3--lista p strong { color: var(--v3-plum); }
.presente-v3--viagem p strong { color: #2f1a20; }

/* A palavra decorativa passava por trás do texto e do link. Fica só como
   textura, mais discreta e recuada. */
.presente-v3__fundo {
  color: rgba(71, 42, 50, 0.07);
  font-size: clamp(7rem, 14vw, 14rem);
}

/* Âncoras no texto de apoio da seção. */
.capitulo__lead strong {
  color: var(--v3-plum);
  font-weight: 600;
}

/* Com o card mais baixo, a palavra decorativa passou a cruzar o link.
   Recolhida ao canto inferior direito, onde não disputa com nada. */
.presente-v3__fundo {
  right: -0.06em;
  bottom: -0.3em;
  font-size: clamp(6rem, 11vw, 11rem);
}

/* No celular os cards ficam empilhados e não precisam do mínimo do desktop:
   a altura passa a ser ditada pelo conteúdo, com folga curta antes do link. */
@media (max-width: 820px) {
  .presentes-v3__grade--duplo .presente-v3--lista,
  .presentes-v3__grade--duplo .presente-v3--viagem {
    min-height: 0;
  }
  .presentes-v3__grade--duplo .presente-v3 a {
    padding-top: clamp(1.5rem, 5vw, 2rem);
  }
}

/* =======================================================================
   AJUSTE v9 — destaques em todos os textos de apoio + botão de telefone
   ===================================================================== */

/* Um único sistema de ênfase para a página inteira: peso 600 e o tom
   fechado da tipografia, para as âncoras saltarem sem virar negrito duro. */
.capitulo__lead strong,
.estadia__cabeca p strong,
.ato__evento p strong,
.traje-v3__texto p strong,
.destino__nota strong,
.confirmar__intro strong,
.contagem__prazo strong,
.form .ajuda strong,
.convite__prosa strong {
  color: var(--v3-plum);
  font-weight: 600;
}

/* A data-limite do RSVP é a informação mais acionável da página. */
.contagem__prazo time {
  color: var(--v3-wine);
  font-weight: 700;
}

/* Sobre os fundos escuros dos atos o ameixa fecha demais: ali a ênfase
   usa o marsala vivo, que mantém contraste. */
.ato--ritual .ato__evento p strong,
.ato--chegada .ato__evento p strong {
  color: var(--wine-live);
}

/* --- Hotéis: respiro interno e telefone como botão -------------------- */
.hotel-card__corpo {
  padding: clamp(1.9rem, 3.4vw, 2.9rem);
  gap: 0;
}
.hotel-card__corpo > p {
  margin-bottom: 0.9rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.hotel-card h4 {
  margin-top: 0;
  margin-bottom: 1.1rem;
}
.hotel-card__corpo > span {
  margin-top: 0;
  margin-bottom: 1.8rem;
  line-height: 1.7;
}

.hotel-card__fone {
  align-self: flex-start;
  min-height: 46px;
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  margin-top: auto;
  padding-inline: 1.35rem;
  font-size: 0.92rem;
  font-weight: 700;
  letter-spacing: 0.01em;
  line-height: 1;
  text-decoration: none;
  font-variant-numeric: tabular-nums;
}
.hotel-card__fone svg {
  width: 1.05rem;
  height: 1.05rem;
  flex: 0 0 auto;
}

/* O glifo do telefone tem pouca folga à direita: o gap precisa compensar. */
.hotel-card__fone { gap: 0.8rem; }

/* =======================================================================
   AJUSTE v10 — fotos reais dos hotéis e botão de telefone mais esbelto
   ===================================================================== */

/* O botão herdava min-height 3.45rem e padding vertical de 0.95rem do .btn,
   somando quase 62px de altura contra pouca folga lateral: ficava gordo e
   apertado. Aqui a proporção inverte. */
.hotel-card__fone {
  min-height: 0;
  padding: 0.72rem 1.85rem;
  gap: 0.7rem;
  font-size: 0.86rem;
  letter-spacing: 0.02em;
}
.hotel-card__fone svg { width: 0.98rem; height: 0.98rem; }

/* --- Foto principal --------------------------------------------------- */
.hotel-card__foto {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  background: #ece0d8;
  transition: opacity 320ms var(--ease);
}
.hotel-card__foto.is-trocando { opacity: 0; }

/* --- Miniaturas ------------------------------------------------------- */
.hotel-card__thumbs {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.4rem;
  padding: 0.4rem 0.4rem 0;
  background: transparent;
}
.hotel-thumb {
  position: relative;
  overflow: hidden;
  display: block;
  padding: 0;
  border: 0;
  border-radius: 0.6rem;
  background: #ece0d8;
  cursor: pointer;
  transition: transform 260ms var(--ease);
}
.hotel-thumb img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  opacity: 0.62;
  transition: opacity 260ms var(--ease);
}
.hotel-thumb::after {
  content: "";
  position: absolute;
  inset: 0;
  border: 1px solid transparent;
  border-radius: inherit;
  transition: border-color 260ms var(--ease);
  pointer-events: none;
}
.hotel-thumb:hover img,
.hotel-thumb:focus-visible img { opacity: 0.88; }
.hotel-thumb.is-ativa img { opacity: 1; }
.hotel-thumb.is-ativa::after { border-color: var(--v3-wine); }
.hotel-thumb:focus-visible { outline: 2px solid var(--v3-wine); outline-offset: 2px; }

@media (hover: hover) {
  .hotel-thumb:hover { transform: translateY(-2px); }
}
@media (prefers-reduced-motion: reduce) {
  .hotel-card__foto,
  .hotel-thumb,
  .hotel-thumb img { transition: none; }
}

/* `.hotel-card a` (0,1,1) trazia line-height:44px e vencia `.hotel-card__fone`
   (0,1,0): o botão somava 44px de linha + 23px de padding. Igualando a
   especificidade, a altura volta a ser ditada pelo padding. */
.hotel-card a.hotel-card__fone {
  min-height: 0;
  margin-top: auto;
  padding: 0.78rem 1.9rem;
  line-height: 1;
  font-size: 0.86rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-decoration: none;
}

/* =======================================================================
   AJUSTE v11 — galeria completa em bento, subtítulo e ritmo do formulário
   ===================================================================== */

/* --- Chamada abaixo da faixa de fotos --------------------------------- */
.ensaio-v3__acao {
  display: flex;
  justify-content: center;
  margin-top: clamp(2.25rem, 4vw, 3.25rem);
}
.ensaio-v3__abrir { gap: 0.7rem; }
.ensaio-v3__abrir svg { width: 0.95rem; height: 0.95rem; }

/* --- Subtítulo do ensaio ---------------------------------------------- */
.lead-forte {
  color: var(--v3-rose);
  font-weight: 600;
}
/* "pretty" evita a última palavra sozinha na linha. */
.capitulo__lead { text-wrap: pretty; }

/* =======================================================================
   GALERIA COMPLETA
   Não é um lightbox preto de plugin: é a própria página continuando em
   tela cheia. Fundo marfim, monograma, Bodoni no cabeçalho e os mesmos
   cantos e sombras dos cartões do site.
   ===================================================================== */
.galeria-cheia {
  position: fixed;
  z-index: 90;
  inset: 0;
  display: flex;
  align-items: stretch;
  justify-content: center;
}
.galeria-cheia[hidden] { display: none; }

.galeria-cheia__fundo {
  position: absolute;
  inset: 0;
  background: rgba(43, 22, 29, 0.42);
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
  animation: galeriaFundo 320ms var(--ease) both;
}

.galeria-cheia__painel {
  position: relative;
  z-index: 1;
  width: min(100%, 82rem);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: #f8f3ee;
  box-shadow: 0 40px 120px rgba(43, 22, 29, 0.34);
  animation: galeriaPainel 420ms var(--ease) both;
}

@keyframes galeriaFundo { from { opacity: 0 } to { opacity: 1 } }
@keyframes galeriaPainel {
  from { opacity: 0; transform: translateY(18px) }
  to   { opacity: 1; transform: none }
}

/* --- Cabeçalho -------------------------------------------------------- */
.galeria-cheia__topo {
  position: sticky;
  top: 0;
  z-index: 2;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
  padding: clamp(1rem, 2vw, 1.6rem) clamp(1.1rem, 2.6vw, 2.4rem);
  border-bottom: 1px solid rgba(55, 26, 35, 0.12);
  background: rgba(248, 243, 238, 0.94);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}
.galeria-cheia__marca {
  min-width: 0;
  display: flex;
  align-items: center;
  gap: clamp(0.7rem, 1.4vw, 1.05rem);
}
.galeria-cheia__mono {
  width: 2.3rem;
  height: 2.3rem;
  flex: 0 0 auto;
  color: var(--v3-wine);
}
.galeria-cheia__titulo {
  min-width: 0;
  display: flex;
  align-items: baseline;
  gap: 0.4em;
  color: var(--v3-plum);
  font-family: var(--display);
  font-size: clamp(1.15rem, 2.1vw, 1.65rem);
  font-weight: 500;
  letter-spacing: -0.03em;
  line-height: 1;
}
.galeria-cheia__titulo em {
  color: var(--v3-rose);
  font-style: italic;
  font-weight: 400;
}

.galeria-cheia__fechar {
  width: 2.85rem;
  height: 2.85rem;
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 1px solid rgba(122, 40, 67, 0.3);
  border-radius: 50%;
  color: var(--v3-wine);
  background: transparent;
  cursor: pointer;
  transition: color 240ms var(--ease), background 240ms var(--ease), border-color 240ms var(--ease);
}
.galeria-cheia__fechar svg { width: 1.15rem; height: 1.15rem; }
.galeria-cheia__fechar:hover {
  border-color: var(--v3-wine);
  color: #fffaf6;
  background: var(--v3-wine);
}
.galeria-cheia__fechar:focus-visible { outline: 2px solid var(--v3-wine); outline-offset: 3px; }

/* --- Corpo rolável ---------------------------------------------------- */
.galeria-cheia__corpo {
  flex: 1;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  padding: clamp(1.1rem, 2.6vw, 2.4rem);
}

/* --- Bento: paisagem larga + retrato alto, espelhados, e o vitral
       fechando em faixa. Os formatos mistos viram ritmo, não problema. -- */
.bento {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  grid-template-areas:
    "a a a a b b"
    "c c d d d d"
    "e e e e e e";
  gap: clamp(0.45rem, 0.9vw, 0.8rem);
}
.bento__quadro {
  position: relative;
  overflow: hidden;
  margin: 0;
  border-radius: clamp(0.7rem, 1.2vw, 1.1rem);
  background: #e6d5cb;
  animation: bentoEntra 560ms var(--ease) both;
}
.bento__quadro img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 900ms var(--ease);
}
@media (hover: hover) {
  .bento__quadro:hover img { transform: scale(1.03); }
}

.bento__quadro--a { grid-area: a; aspect-ratio: 3 / 2; animation-delay: 60ms; }
.bento__quadro--b { grid-area: b; animation-delay: 130ms; }
.bento__quadro--c { grid-area: c; animation-delay: 200ms; }
.bento__quadro--d { grid-area: d; aspect-ratio: 3 / 2; animation-delay: 270ms; }
.bento__quadro--e { grid-area: e; aspect-ratio: 24 / 9; animation-delay: 340ms; }

@keyframes bentoEntra {
  from { opacity: 0; transform: translateY(14px) scale(0.985) }
  to   { opacity: 1; transform: none }
}

@media (max-width: 980px) {
  .bento {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    grid-template-areas:
      "a a"
      "b c"
      "d d"
      "e e";
  }
  .bento__quadro--b,
  .bento__quadro--c { aspect-ratio: 3 / 4; }
  .bento__quadro--e { aspect-ratio: 16 / 9; }
}

@media (max-width: 560px) {
  .bento {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas: "a" "b" "c" "d" "e";
  }
  .galeria-cheia__painel { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .galeria-cheia__fundo,
  .galeria-cheia__painel,
  .bento__quadro { animation: none; }
  .bento__quadro img { transition: none; }
}

/* Trava a rolagem da página enquanto a galeria estiver aberta. */
html.galeria-aberta,
html.galeria-aberta body { overflow: hidden; }

/* =======================================================================
   Formulário: ritmo vertical consistente
   O espaçamento vinha de `.campo + .campo { margin-top: 2rem }`, que somava
   ao texto de ajuda de alguns campos. Resultado: uns campos separados por
   32px, outros por quase 60px — o desalinho que dava ar de descuido.
   Aqui o form vira uma coluna com gap único e cada campo tem ritmo interno
   próprio: rótulo → campo → ajuda.
   ===================================================================== */
.form-v3 {
  display: grid;
  gap: clamp(1.25rem, 1.9vw, 1.6rem);
  padding: clamp(1.75rem, 3.2vw, 3rem);
}
.form-v3 .campo + .campo,
.form-v3 .campo + fieldset,
.form-v3 fieldset + .campo,
.form-v3 fieldset + .form__dupla,
.form-v3 .form__dupla + .campo {
  margin-top: 0;
}

.form-v3 .campo label,
.form-v3 .campo legend {
  margin-bottom: 0.45rem;
  font-size: 0.8rem;
}

.form-v3 .campo input[type="text"],
.form-v3 .campo input[type="tel"],
.form-v3 .campo select {
  min-height: 2.9rem;
  padding-block: 0.5rem;
}
.form-v3 .campo textarea {
  min-height: 4.6rem;
  padding-block: 0.55rem;
  line-height: 1.6;
}
.form-v3 textarea#f-nome { min-height: 5.2rem; }

.form-v3 .ajuda,
.form-v3 .erro {
  margin-top: 0.4rem;
  font-size: 0.74rem;
  line-height: 1.55;
}

.form-v3 .opcoes { gap: 0.5rem; }

/* Um item de grid vazio ainda consome o gap: sem isso o formulário ganhava
   um degrau fantasma abaixo do botão. */
.form-v3 .form__estado:empty { display: none; }

.form-v3 .btn--largo { margin-top: 0.3rem; }
.form-v3 .form__estado { margin-top: 0; }
.form-v3 .form__aviso {
  margin-top: -0.45rem;
  font-size: 0.72rem;
}

/* O cabeçalho fixo está em z-index 100 e o menu em 95: a galeria precisa
   passar por cima dos dois, mas continuar abaixo do atalho de teclado (500)
   e do loader (9999). */
.galeria-cheia { z-index: 400; }

/* 24/9 cortava um terço do arco: 21/9 mantém a faixa larga sem perder o topo. */
.bento__quadro--e { aspect-ratio: 21 / 9; }

/* =======================================================================
   AJUSTE v12 — presentes identificados e nomes por convidado
   ======================================================================= */

/* Os dois caminhos ganham um objeto-símbolo com o mesmo traço dos demais
   ícones do convite, ancorado no eixo do título. */
.presente-v3__topo {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: clamp(0.85rem, 2vw, 1.5rem);
  min-width: 0;
}

.presente-v3__topo h3 {
  flex: 1 1 auto;
  min-width: 0;
  margin: 0;
}

.presente-v3__icone {
  flex: 0 0 clamp(3.35rem, 4.6vw, 3.9rem);
  width: clamp(3.35rem, 4.6vw, 3.9rem);
  aspect-ratio: 1;
  display: grid;
  place-items: center;
  border: 1px solid var(--v3-wine);
  border-radius: 0.82rem;
  background: var(--v3-wine);
  color: #fffaf6;
}

.presente-v3__icone svg {
  width: clamp(1.45rem, 2.2vw, 1.75rem);
  height: clamp(1.45rem, 2.2vw, 1.75rem);
  display: block;
}

/* A largura agora acompanha o nome: as letras animadas não podem criar uma
   quebra artificial no meio de Gabriella. */
.loader-v3__assinatura {
  width: max-content;
  max-width: calc(100vw - 2.5rem);
  min-width: 0;
}

.loader-v3__linha {
  white-space: nowrap;
}

/* A legenda do grupo continua sendo o rótulo visual principal; cada campo
   recebe seu próprio nome para que a quantidade escolhida seja evidente. */
.form-v3 .campo__rotulo {
  display: block;
  margin-bottom: 0.6rem;
  color: var(--v3-plum);
  font-family: var(--body);
  font-size: 0.82rem;
  font-weight: 700;
}

.convidados__lista {
  display: grid;
  gap: 0.75rem;
}

.convidado__campo {
  display: grid;
  gap: 0.2rem;
}

.form-v3 .convidado__campo label {
  margin: 0;
  color: var(--v3-muted);
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.04em;
}

.form-v3 .convidado__campo input[type="text"] {
  min-height: 3.5rem;
  padding-inline: 0.15rem;
  border-bottom-color: rgba(55, 26, 35, 0.25);
  background: transparent;
  color: var(--v3-plum);
}

.form-v3 .convidado__campo input[type="text"]:focus {
  border-bottom-color: var(--v3-wine);
}

@media (max-width: 520px) {
  .presente-v3__icone {
    flex-basis: 3.15rem;
    width: 3.15rem;
    border-radius: 0.72rem;
  }
}

@media (max-width: 820px) {
  .loader-v3__assinatura {
    font-size: clamp(3.5rem, 17vw, 5.6rem);
  }
}

/* =======================================================================
   AJUSTE v13 — composição mobile-first
   O celular não é a versão comprimida do desktop. A foto ampla abre a cena,
   enquanto título, chamada e informações formam uma primeira dobra completa.
   ======================================================================= */
@media (max-width: 820px) {
  .hero {
    min-height: calc(100svh - 11rem);
    overflow: hidden;
    background: #f8f3ee;
  }

  .hero__visual {
    inset: 4.25rem 0 auto;
    height: clamp(18rem, 46svh, 25rem);
  }

  .hero__visual::after {
    background: linear-gradient(180deg,
      rgba(248, 243, 238, 0) 0%,
      rgba(248, 243, 238, 0.04) 34%,
      rgba(248, 243, 238, 0.52) 58%,
      rgba(248, 243, 238, 0.94) 82%,
      #f8f3ee 100%);
  }

  .hero__visual img {
    object-position: 55% 46%;
    transform: none;
  }

  .hero__halo { display: none; }

  .hero__inner {
    width: min(100% - 2.6rem, 34rem);
    min-height: calc(100svh - 11rem);
    padding: clamp(18.25rem, 47svh, 24rem) 0 clamp(1.6rem, 4svh, 2.6rem);
    display: flex;
    align-items: flex-start;
    justify-content: center;
  }

  .hero__texto {
    width: min(100%, 28rem);
    display: grid;
    justify-items: center;
    text-align: center;
  }

  .hero__titulo {
    font-size: clamp(4.15rem, 15.4vw, 6.2rem);
    line-height: 0.78;
    text-wrap: balance;
  }

  .hero__line--sobrenome,
  .hero__it {
    margin-left: 0;
  }

  .hero__it {
    margin-top: 0.3rem;
    font-size: clamp(1.55rem, 5.7vw, 2rem);
  }

  .hero__support {
    width: 100%;
    display: grid;
    justify-items: center;
    margin-top: 1.45rem;
  }

  .hero__lead {
    max-width: 20.5rem;
    margin-inline: auto;
    font-size: 0.9rem;
    line-height: 1.55;
    text-align: center;
  }

  .hero__acoes {
    width: 100%;
    display: flex;
    justify-content: center;
    margin-top: 1.1rem;
  }

  .hero__acoes .btn {
    min-height: 3.5rem;
    padding-inline: 1.45rem;
  }

  .hero__bridge {
    min-height: 11rem;
    height: auto;
    margin-top: -1px;
    padding: 0.85rem 0 1rem;
    background: #f8f3ee;
  }

  .hero__facts {
    width: min(100% - 2.6rem, 34rem);
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.7rem;
    margin: 0 auto;
  }

  .hero__fact {
    min-height: 4.65rem;
    padding: 0.75rem 0.7rem;
    text-align: left;
  }

  .hero__fact:nth-child(3) { grid-column: 1 / -1; }

  .hero__fact strong { font-size: 0.78rem; }
  .hero__fact em { font-size: 0.61rem; }

  /* Seções informativas voltam a uma leitura editorial, não a um mural
     uniformemente centralizado. */
  .presentes-v3 .capitulo__cabeca,
  .lugar-v3 .capitulo__cabeca,
  .confirmar-v3 .capitulo__cabeca {
    text-align: left;
  }

  .presentes-v3 .capitulo__titulo,
  .presentes-v3 .capitulo__lead,
  .lugar-v3 .capitulo__titulo,
  .lugar-v3 .capitulo__lead,
  .confirmar-v3 .capitulo__titulo,
  .confirmar-v3 .capitulo__lead {
    margin-inline: 0;
    text-align: left;
  }

  .presentes-v3 .capitulo__cabeca::after,
  .lugar-v3 .capitulo__cabeca::after,
  .confirmar-v3 .capitulo__cabeca::after {
    margin-inline: 0;
  }

  .presentes-v3 { padding-block: clamp(4.75rem, 14vw, 6.25rem); }

  .presentes-v3__grade--duplo {
    gap: 1.15rem;
    margin-top: 2.2rem;
  }

  .presentes-v3__grade--duplo .presente-v3--lista,
  .presentes-v3__grade--duplo .presente-v3--viagem {
    min-height: clamp(23.5rem, 96vw, 27rem);
    padding: clamp(1.7rem, 7vw, 2.25rem);
    border-radius: 1.65rem;
  }

  .presentes-v3__grade--duplo .presente-v3 h3 {
    font-size: clamp(3.05rem, 13vw, 4.1rem);
    line-height: 0.88;
    text-wrap: balance;
  }

  .presentes-v3__grade--duplo .presente-v3 p {
    max-width: 21rem;
    margin-top: 1.35rem;
  }

  .presentes-v3__grade--duplo .presente-v3 a {
    padding-top: 2rem;
  }

  .presente-v3__icone {
    flex-basis: 3.4rem;
    width: 3.4rem;
    border-radius: 0.9rem;
  }

  .form-v3 {
    gap: 1.4rem;
    padding: clamp(1.45rem, 6vw, 2rem);
  }

  .form-v3 .campo input[type="text"],
  .form-v3 .campo input[type="tel"],
  .form-v3 .campo select {
    min-height: 3.25rem;
  }

  .pular:focus-visible,
  input:focus-visible,
  textarea:focus-visible,
  select:focus-visible,
  button:focus-visible,
  a:focus-visible {
    outline: 2px solid var(--v3-wine);
    outline-offset: 3px;
  }
}

@media (max-width: 560px) {
  .hero {
    min-height: calc(100svh - 11.2rem);
  }

  .hero__visual {
    inset: 4rem 0 auto;
    height: clamp(16.5rem, 44svh, 21rem);
  }

  .hero__inner {
    width: min(100% - 2.35rem, 28rem);
    min-height: calc(100svh - 11.2rem);
    padding-top: clamp(16.75rem, 44svh, 21rem);
    padding-bottom: 1.55rem;
  }

  .hero__titulo { font-size: clamp(3.85rem, 16vw, 4.7rem); }
  .hero__lead { font-size: 0.84rem; }

  .hero__bridge {
    min-height: 11.2rem;
    padding-top: 0.75rem;
  }

  .hero__facts { width: min(100% - 2.35rem, 28rem); }
}

@media (max-width: 360px) {
  .hero__inner { padding-top: 16.25rem; }
  .hero__titulo { font-size: 3.55rem; }
  .hero__fact { padding-inline: 0.55rem; }
}

/* =======================================================================
   AJUSTE v14 — respiro dos atos e do destino no celular
   A agenda deve ler como programa da noite; cada horário começa em uma zona
   própria. O cartão de local segue a mesma cadência, sem conteúdo encostado.
   ======================================================================= */
@media (max-width: 820px) {
  .noite-v3 {
    padding-top: clamp(5.25rem, 15vw, 7rem);
  }

  .noite-v3__cabeca {
    margin-bottom: clamp(3rem, 11vw, 4.25rem);
  }

  .noite-v3 .ato {
    min-height: 0;
    padding: clamp(2.1rem, 8vw, 2.85rem);
    border-radius: 1.75rem;
  }

  .noite-v3 .ato + .ato {
    margin-top: clamp(1.75rem, 7vw, 2.5rem);
  }

  .noite-v3 .ato__nome {
    margin-bottom: clamp(2.65rem, 9vw, 3.6rem);
  }

  .noite-v3 .ato__eventos,
  .noite-v3 .ato--ritual .ato__eventos,
  .noite-v3 .ato--festa .ato__eventos {
    gap: 0;
  }

  .noite-v3 .ato__evento,
  .noite-v3 .ato--ritual .ato__evento,
  .noite-v3 .ato--festa .ato__evento {
    grid-template-columns: 4.15rem minmax(0, 1fr);
    gap: clamp(0.85rem, 3vw, 1.15rem);
    padding-block: clamp(1.35rem, 5vw, 1.8rem);
  }

  .noite-v3 .ato__evento:first-child { padding-top: 0; }
  .noite-v3 .ato__evento:last-child { padding-bottom: 0; }

  .noite-v3 .ato__evento h3 {
    font-size: clamp(1.8rem, 7.2vw, 2.3rem);
    line-height: 1.04;
  }

  .noite-v3 .ato__evento p {
    max-width: 30ch;
    margin-top: 0.85rem;
    line-height: 1.68;
  }

  .noite-v3 .ato__marca {
    top: 0.3rem;
    right: 0.15rem;
    color: rgba(55, 26, 35, 0.032);
    font-size: clamp(7.5rem, 29vw, 12rem);
  }

  .noite-v3 .ato--ritual {
    display: block;
    padding: 1.2rem;
  }

  .noite-v3 .ato--ritual .ato__corpo {
    width: 100%;
    min-height: 0;
    padding: clamp(2rem, 7vw, 2.6rem);
    border-radius: 1.45rem;
    box-shadow: 0 16px 38px rgba(76, 43, 43, 0.1);
  }

  .lugar-v3 {
    padding-top: clamp(5.5rem, 15vw, 7.25rem);
  }

  .lugar-v3__cabeca {
    margin-bottom: clamp(2.75rem, 10vw, 4rem);
  }

  .destino__cartao {
    margin-top: 1.5rem;
    padding: clamp(2.1rem, 8vw, 2.8rem);
    border-radius: 1.75rem;
    box-shadow: 0 20px 52px rgba(76, 43, 43, 0.09);
  }

  .destino__cartao > p {
    margin-top: 1.75rem;
    line-height: 1.65;
  }

  .destino__cartao .destino__quando {
    margin-top: 2.15rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--v3-line);
    font-size: 0.84rem;
    font-weight: 600;
  }

  .destino__cartao .destino__nota {
    margin-top: 2rem;
    padding-top: 1.55rem;
    line-height: 1.65;
  }

  .destino__acoes {
    gap: 0.9rem;
    margin-top: 2.35rem;
  }

  .destino__acoes .btn { min-height: 3.35rem; }
}

@media (max-width: 560px) {
  .noite-v3 .ato { padding: 2rem 1.8rem; }

  .noite-v3 .ato__evento,
  .noite-v3 .ato--ritual .ato__evento,
  .noite-v3 .ato--festa .ato__evento {
    grid-template-columns: 3.75rem minmax(0, 1fr);
    gap: 0.8rem;
  }

  .noite-v3 .ato--ritual { padding: 1rem; }
  .noite-v3 .ato--ritual .ato__corpo { padding: 1.85rem 1.55rem; }

  .destino__cartao { padding: 2rem 1.45rem; }
}

/* =======================================================================
   AJUSTE v15 — agenda mobile, sem "card dentro de card"
   Apenas o Ritual sustenta uma moldura sobre fotografia. Chegada e Festa
   passam a ser páginas de programa: campo aberto, horários e pausas largas.
   ======================================================================= */
@media (max-width: 820px) {
  .noite-v3 .ato__marca { display: none; }

  .noite-v3 .ato--chegada,
  .noite-v3 .ato--festa {
    padding: clamp(3rem, 12vw, 4.5rem) 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
  }

  .noite-v3 .ato--chegada { border-top: 1px solid rgba(55, 26, 35, 0.15); }
  .noite-v3 .ato--festa { border-bottom: 1px solid rgba(55, 26, 35, 0.15); }

  .noite-v3 .ato--chegada + .ato,
  .noite-v3 .ato--ritual + .ato { margin-top: clamp(3rem, 12vw, 4.75rem); }

  .noite-v3 .ato--chegada .ato__nome,
  .noite-v3 .ato--festa .ato__nome {
    margin-bottom: clamp(3.5rem, 13vw, 5rem);
  }

  .noite-v3 .ato--chegada .ato__evento,
  .noite-v3 .ato--festa .ato__evento,
  .noite-v3 .ato--ritual .ato__evento {
    padding-block: clamp(2rem, 8vw, 2.9rem);
  }

  .noite-v3 .ato--chegada .ato__evento:first-child,
  .noite-v3 .ato--festa .ato__evento:first-child,
  .noite-v3 .ato--ritual .ato__evento:first-child { padding-top: 0; }

  .noite-v3 .ato--chegada .ato__evento:last-child,
  .noite-v3 .ato--festa .ato__evento:last-child,
  .noite-v3 .ato--ritual .ato__evento:last-child { padding-bottom: 0; }

  .noite-v3 .ato__evento h3 {
    font-size: clamp(1.95rem, 7.7vw, 2.45rem);
  }

  .noite-v3 .ato__evento p {
    margin-top: 1rem;
    font-size: 0.91rem;
    line-height: 1.75;
  }

  .noite-v3 .ato--ritual {
    padding: clamp(1.35rem, 5vw, 1.8rem);
    border: 0;
    border-radius: 1.85rem;
    box-shadow: none;
  }

  .noite-v3 .ato--ritual .ato__corpo {
    padding: clamp(2.35rem, 9vw, 3.25rem) clamp(1.75rem, 7vw, 2.55rem);
    border-radius: 1.45rem;
    box-shadow: none;
  }
}

@media (max-width: 560px) {
  .noite-v3 .ato--chegada,
  .noite-v3 .ato--festa { padding-block: 2.75rem; }

  .noite-v3 .ato--chegada .ato__nome,
  .noite-v3 .ato--festa .ato__nome { margin-bottom: 3.25rem; }

  .noite-v3 .ato--ritual { padding: 1rem; }
  .noite-v3 .ato--ritual .ato__corpo { padding: 2.15rem 1.45rem; }
}

/* =======================================================================
   AJUSTE v16 — cartões preservados; intervalos internos corrigidos
   ======================================================================= */
@media (max-width: 820px) {
  .noite-v3 .ato--chegada,
  .noite-v3 .ato--festa {
    padding: clamp(2.2rem, 8vw, 2.85rem);
    border: 1px solid rgba(55, 26, 35, 0.12);
    border-radius: 1.75rem;
    box-shadow: var(--v3-shadow);
  }

  .noite-v3 .ato--chegada { background: #ead4cf; }
  .noite-v3 .ato--festa { background: #f9f2ed; }

  .noite-v3 .ato--chegada + .ato,
  .noite-v3 .ato--ritual + .ato { margin-top: clamp(1.75rem, 7vw, 2.5rem); }

  .noite-v3 .ato--chegada .ato__evento:first-child,
  .noite-v3 .ato--festa .ato__evento:first-child,
  .noite-v3 .ato--ritual .ato__evento:first-child {
    padding-top: clamp(1.65rem, 6vw, 2.05rem);
  }

  .noite-v3 .ato--chegada .ato__evento:last-child,
  .noite-v3 .ato--festa .ato__evento:last-child,
  .noite-v3 .ato--ritual .ato__evento:last-child {
    padding-bottom: clamp(1.1rem, 4vw, 1.5rem);
  }
}

@media (max-width: 560px) {
  .noite-v3 .ato--chegada,
  .noite-v3 .ato--festa { padding: 2.1rem 1.8rem; }

  .noite-v3 .ato--ritual .ato__evento:first-child { padding-top: 1.75rem; }
}

/* O vitral fica como matéria de fundo, em preto e branco, sem disputar a
   leitura do Ritual. */
.ato--ritual .ato__imagem img {
  filter: grayscale(1) contrast(1.06) brightness(0.9);
}

/* =======================================================================
   AJUSTE v17 — foto da Gabi no Ritual e aproximação da hero mobile
   ======================================================================= */
.ato--ritual .ato__imagem img { object-position: 0 44%; }

@media (max-width: 560px) {
  .hero__visual img {
    object-position: 58% 43%;
    transform: scale(1.18);
    transform-origin: 58% 43%;
  }

  .hero__bridge { margin-top: -3rem; }

  .ato--ritual .ato__imagem img { object-position: 0 40%; }
}

/* =======================================================================
   AJUSTE v18 — traje compacto no mobile
   A cor continua sendo o gesto principal, mas deixa de ocupar uma tela inteira.
   ======================================================================= */
@media (max-width: 820px) {
  .traje-v3 {
    margin-top: clamp(2.5rem, 8vw, 3.5rem);
    padding-block: clamp(2.75rem, 9vw, 3.75rem) 1.5rem;
  }

  .traje-v3__cabeca { margin-bottom: 1.6rem; }

  .traje-v3--enxuto .traje-v3__visual {
    min-height: 0;
    aspect-ratio: 16 / 9;
  }

  .traje-v3--enxuto .traje-v3__legenda {
    inset: auto auto 0.85rem 0.85rem;
    padding: 0.7rem 0.9rem;
    border-radius: 0.85rem;
  }

  .traje-v3--enxuto .traje-v3__legenda strong { font-size: 1.7rem; }
  .traje-v3--enxuto .traje-v3__legenda small { font-size: 0.68rem; }

  .traje-v3__texto { padding: 1.35rem 1.2rem 1.45rem; }
  .traje-v3__texto > p { line-height: 1.6; }
  .traje-v3__aviso { margin-top: 1rem; padding-top: 0.9rem; }
  .traje-v3__convite { margin-top: 1.2rem; }
  .traje-v3__cartela { margin-top: 1.75rem; }
}

/* Presentes: no mobile a ação acompanha a descrição, sem vazio artificial. */
@media (max-width: 820px) {
  .presentes-v3__grade--duplo .presente-v3--lista,
  .presentes-v3__grade--duplo .presente-v3--viagem {
    min-height: 0;
  }

  .presentes-v3__grade--duplo .presente-v3 a {
    margin-top: 1.65rem;
    padding-top: 0;
  }
}

/* Ensaio: no celular o texto tem a largura editorial inteira, sem a coluna
   estreita usada nos demais capítulos. */
@media (min-width: 821px) {
  .ensaio-v3__lead { max-width: 76ch; }
}

@media (max-width: 560px) {
  .ensaio-v3__lead {
    width: 100%;
    max-width: none;
    margin-right: 0;
    margin-left: 0;
    font-size: 0.96rem;
    line-height: 1.68;
    text-align: left;
    text-wrap: pretty;
  }
}

/* =======================================================================
   HERO RECOMPOSTA - retrato e carta
   Uma única cena: o retrato ocupa o lado direito e a leitura acontece em
   uma coluna franca à esquerda. A faixa de serviço substitui os três cards.
   ======================================================================= */
.hero {
  min-height: clamp(46rem, 100svh, 60rem);
  overflow: hidden;
  background: #f8f3ee;
}

.hero__halo,
.hero__rolar { display: none; }

.hero__visual {
  inset: 0 0 0 auto;
  width: 56%;
  height: 100%;
}

.hero__visual::after {
  background: linear-gradient(90deg,
    #f8f3ee 0%,
    rgba(248, 243, 238, 0.98) 15%,
    rgba(248, 243, 238, 0.74) 34%,
    rgba(248, 243, 238, 0.16) 63%,
    rgba(248, 243, 238, 0) 82%);
}

.hero__visual img {
  object-position: 56% 46%;
  transform: scale(1.05);
  transform-origin: 56% 46%;
}

.hero__inner {
  width: min(calc(100% - (2 * var(--gutter))), var(--max));
  min-height: clamp(46rem, 100svh, 60rem);
  padding: clamp(6.25rem, 10vh, 8rem) 0 10.5rem;
  display: grid;
  grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
  align-items: center;
}

.hero__texto {
  grid-column: 1;
  width: min(100%, 42rem);
  text-align: left;
}

.hero__titulo {
  font-size: clamp(5.2rem, 7.55vw, 8.6rem);
  line-height: 0.76;
}

.hero__line { padding-left: 0; }
.hero__line--sobrenome { margin-left: 0.14em; }

.hero__it {
  margin: 0.65rem 0 0;
  font-size: clamp(1.75rem, 2.25vw, 2.5rem);
}

.hero__support { margin-top: clamp(1.9rem, 3.8vh, 2.8rem); }

.hero__lead {
  max-width: 33rem;
  color: #60464e;
  font-size: clamp(1rem, 1.18vw, 1.14rem);
  line-height: 1.62;
  text-align: left;
  text-wrap: pretty;
}

.hero__lead br { display: none; }
.hero__lead-copy--desktop { display: block !important; }
.hero__lead-copy--mobile { display: none !important; }

.hero__acoes {
  align-items: center;
  gap: 1.1rem;
  margin-top: 1.75rem;
}

.hero__acoes .btn { min-height: 3.6rem; }

.hero__acoes .btn--cheio {
  min-width: 16.5rem;
  justify-content: space-between;
}

.hero__acoes .btn--fio {
  display: inline-flex;
  padding-inline: 0.15rem;
  border: 0;
  border-bottom: 1px solid rgba(121, 41, 68, 0.36);
  border-radius: 0;
  color: var(--v3-wine);
  background: transparent;
}

.hero__bridge {
  position: relative;
  z-index: 9;
  height: auto;
  margin-top: -8.25rem;
  padding: 1.2rem 0 1.35rem;
  background: rgba(248, 243, 238, 0.94);
}

.hero__facts {
  position: relative;
  inset: auto;
  width: min(calc(100% - (2 * var(--gutter))), var(--max));
  grid-template-columns: 0.95fr 0.9fr 1.35fr;
  gap: 0;
  margin: 0 auto;
  padding-top: 1rem;
  transform: none;
  border-top: 1px solid rgba(84, 46, 55, 0.17);
}

.hero__fact {
  min-height: 0;
  grid-template-columns: 2.35rem minmax(0, 1fr);
  gap: 0.75rem;
  padding: 0.45rem clamp(1rem, 2vw, 2rem);
  border: 0;
  border-right: 1px solid rgba(84, 46, 55, 0.17);
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

.hero__fact:first-child { padding-left: 0; }
.hero__fact:last-child { padding-right: 0; border-right: 0; }

.hero__factIcone {
  width: 2.35rem;
  height: 2.35rem;
  background: #f1dfdf;
}

.hero__fact strong { font-size: 0.88rem; }

@media (max-width: 820px) {
  .hero {
    min-height: 0;
    overflow: hidden;
  }

  .hero__visual {
    inset: 4rem 0 auto;
    width: 100%;
    height: clamp(18rem, 47svh, 24rem);
  }

  .hero__visual::after {
    background: linear-gradient(180deg,
      rgba(248, 243, 238, 0) 0%,
      rgba(248, 243, 238, 0.04) 36%,
      rgba(248, 243, 238, 0.62) 68%,
      #f8f3ee 100%);
  }

  .hero__visual img {
    object-position: 58% 38%;
    transform: scale(1.16);
    transform-origin: 58% 38%;
  }

  .hero__inner {
    width: min(100% - 2.6rem, 31rem);
    min-height: 0;
    padding: clamp(18rem, 48svh, 23.5rem) 0 2rem;
    display: block;
  }

  .hero__texto {
    width: 100%;
    display: block;
    text-align: left;
  }

  .hero__titulo {
    font-size: clamp(3.9rem, 15.2vw, 5.2rem);
    line-height: 0.78;
    text-wrap: balance;
  }

  .hero__line--sobrenome { margin-left: 0.08em; }

  .hero__it {
    margin-top: 0.65rem;
    margin-left: 0;
    font-size: clamp(1.45rem, 5.7vw, 1.9rem);
  }

  .hero__support {
    width: 100%;
    display: block;
    margin-top: 1.55rem;
  }

  .hero__lead {
    width: 100%;
    max-width: 23rem;
    margin-inline: 0;
    font-size: 0.95rem;
    line-height: 1.6;
    text-align: left;
  }

  .hero__acoes {
    width: 100%;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.5rem;
    margin-top: 1.35rem;
  }

  .hero__acoes .btn--cheio {
    width: min(100%, 20rem);
    min-width: 0;
  }

  .hero__acoes .btn--fio {
    min-height: 2.8rem;
    padding-block: 0.45rem;
  }

  .hero__bridge {
    margin-top: 0;
    padding: 1rem 0 1.15rem;
    background: #f8f3ee;
  }

  .hero__facts {
    width: min(100% - 2.6rem, 31rem);
    grid-template-columns: 1fr;
    gap: 0;
    padding-top: 0;
    border-top: 1px solid rgba(84, 46, 55, 0.15);
  }

  .hero__fact,
  .hero__fact:nth-child(3) {
    grid-column: auto;
    min-height: 4.25rem;
    padding: 0.85rem 0;
    border-right: 0;
    border-bottom: 1px solid rgba(84, 46, 55, 0.15);
  }

  .hero__fact:last-child { border-bottom: 0; }
  .hero__fact strong { font-size: 0.83rem; }
  .hero__fact em { font-size: 0.66rem; }
}

/* =======================================================================
   HERO IDR ADAPTADA - fotografia integral e conteúdo em dois planos
   A referência informa a arquitetura: cena única, véu escuro, hierarquia
   baixa e barra de ações. Cores, foto e linguagem continuam da Gabriella.
   ======================================================================= */
.topo {
  color: #fff8f4;
  background: linear-gradient(180deg, rgba(28, 12, 18, 0.58), rgba(28, 12, 18, 0));
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.topo::after { background: rgba(255, 248, 244, 0.2); }
.topo.fixo { background: rgba(38, 16, 24, 0.94); color: #fff8f4; box-shadow: none; }
.topo__mono { color: #e6b1b9; }
.topo__nome em { color: #e6b1b9; }
.topo__barras i { background: #e6b1b9; }
.topo .topo__cta { border-color: #b25e75; background: #b25e75; color: #fff8f4; box-shadow: none; }
.topo .topo__cta:hover { border-color: #cb7890; background: #cb7890; }

.hero {
  min-height: max(48rem, 100svh);
  isolation: isolate;
  background: #201018;
  color: #fff8f4;
}

.hero__visual {
  inset: 0;
  width: 100%;
  height: 100%;
}

.hero__visual::after {
  background:
    linear-gradient(180deg, rgba(29, 12, 18, 0.15) 6%, rgba(29, 12, 18, 0.05) 35%, rgba(29, 12, 18, 0.78) 74%, rgba(29, 12, 18, 0.98) 100%),
    linear-gradient(90deg, rgba(29, 12, 18, 0.58) 0%, rgba(29, 12, 18, 0.16) 57%, rgba(29, 12, 18, 0.04) 100%);
}

.hero__visual img {
  object-position: 54% 44%;
  filter: saturate(0.72) contrast(1.07) brightness(0.76);
  transform: scale(1.03);
  transform-origin: 54% 44%;
}

.hero__inner {
  width: min(calc(100% - (2 * var(--gutter))), var(--max));
  min-height: max(48rem, 100svh);
  padding: calc(5.25rem + clamp(3.5rem, 8vh, 7rem)) 0 9rem;
  display: flex;
  align-items: flex-end;
}

.hero__texto {
  position: relative;
  width: 100%;
  min-height: clamp(18rem, 27vh, 23rem);
  display: grid;
  grid-template-columns: minmax(0, 6.7fr) minmax(18rem, 4.3fr);
  column-gap: clamp(2rem, 5vw, 6rem);
  align-items: end;
  text-align: left;
}

.hero__titulo {
  grid-column: 1;
  grid-row: 1;
  width: min(100%, 45rem);
  color: #fff8f4;
  font-size: clamp(5.2rem, 7vw, 8.15rem);
  line-height: 0.78;
  text-wrap: balance;
}

.hero__line { padding-left: 0; }
.hero__line--sobrenome { margin-left: 0.13em; color: #df9bab; }

.hero__it {
  grid-column: 1;
  grid-row: 2;
  margin: 0.65rem 0 3.65rem;
  color: rgba(255, 239, 240, 0.86);
  font-size: clamp(1.55rem, 2.05vw, 2.25rem);
}

.hero__support {
  position: static;
  grid-column: 2;
  grid-row: 1 / span 2;
  align-self: end;
  width: 100%;
  margin: 0 0 3.8rem;
}

.hero__lead {
  max-width: 31rem;
  color: rgba(255, 244, 241, 0.86);
  font-size: clamp(0.94rem, 1.08vw, 1.04rem);
  line-height: 1.65;
  text-align: left;
}

.hero__lead strong { color: #fff8f4; }
.hero__lead br { display: none; }

.hero__acoes {
  position: absolute;
  left: 0;
  bottom: 0;
  display: flex;
  align-items: center;
  gap: 0.8rem;
  margin: 0;
}

.hero__acoes .btn { min-height: 3.35rem; }
.hero__acoes .btn--cheio {
  min-width: 13.5rem;
  border-color: #b25e75;
  background: #b25e75;
  color: #fff8f4;
  box-shadow: none;
}
.hero__acoes .btn--cheio:hover { border-color: #cb7890; background: #cb7890; }
.hero__acoes .btn--fio {
  min-width: 12.75rem;
  padding-inline: 1.2rem;
  border: 1px solid rgba(255, 248, 244, 0.38);
  border-radius: 0;
  color: #fff8f4;
  background: rgba(31, 14, 20, 0.18);
}
.hero__acoes .btn--fio:hover { border-color: #fff8f4; background: rgba(255, 248, 244, 0.12); color: #fff8f4; }

.hero__bridge {
  z-index: 10;
  height: auto;
  margin-top: -7.75rem;
  padding: 1.35rem 0 1.15rem;
  background: linear-gradient(180deg, rgba(31, 14, 20, 0), rgba(31, 14, 20, 0.92) 38%, #1f0e14 100%);
}

.hero__facts {
  position: relative;
  inset: auto;
  width: min(calc(100% - (2 * var(--gutter))), var(--max));
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1.4rem;
  margin: 0 auto;
  padding-top: 1rem;
  transform: none;
  border-top: 1px solid rgba(255, 248, 244, 0.26);
}

.hero__fact {
  min-height: 0;
  grid-template-columns: 2rem minmax(0, 1fr);
  gap: 0.7rem;
  padding: 0.3rem 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

.hero__factIcone {
  width: 2rem;
  height: 2rem;
  color: #e6b1b9;
  background: rgba(230, 177, 185, 0.12);
}

.hero__fact small { color: rgba(230, 177, 185, 0.86); }
.hero__fact strong { color: #fff8f4; font-size: 0.86rem; }
.hero__fact em { color: rgba(255, 244, 241, 0.68); }

@media (max-width: 820px) {
  .topo { background: rgba(31, 14, 20, 0.42); }
  .topo.fixo { background: rgba(31, 14, 20, 0.94); }

  .hero { min-height: max(44rem, 100svh); }

  .hero__visual {
    inset: 0;
    width: 100%;
    height: 100%;
  }

  .hero__visual::after {
    background: linear-gradient(180deg, rgba(29, 12, 18, 0.1) 3%, rgba(29, 12, 18, 0.18) 35%, rgba(29, 12, 18, 0.8) 67%, #1f0e14 100%);
  }

  .hero__visual img {
    object-position: 56% 38%;
    filter: saturate(0.7) contrast(1.06) brightness(0.72);
    transform: scale(1.12);
    transform-origin: 56% 38%;
  }

  .hero__inner {
    width: min(100% - 2.6rem, 31rem);
    min-height: max(44rem, 100svh);
    padding: clamp(15.5rem, 42svh, 21rem) 0 7.25rem;
    display: block;
  }

  .hero__texto {
    min-height: 0;
    display: block;
  }

  .hero__titulo {
    width: min(100%, 23rem);
    font-size: clamp(3.9rem, 15vw, 5.15rem);
    line-height: 0.79;
  }

  .hero__it {
    margin: 0.55rem 0 0;
    font-size: clamp(1.35rem, 5.45vw, 1.75rem);
  }

  .hero__support {
    width: 100%;
    margin: 1.3rem 0 0;
  }

  .hero__lead {
    max-width: 22rem;
    font-size: 0.9rem;
    line-height: 1.58;
  }

  .hero__acoes {
    position: static;
    flex-wrap: nowrap;
    gap: 0.65rem;
    margin-top: 1.35rem;
  }

  .hero__acoes .btn {
    min-width: 0;
    min-height: 3.15rem;
    padding-inline: 0.85rem;
    font-size: 0.68rem;
  }

  .hero__acoes .btn--cheio { flex: 1.06; }
  .hero__acoes .btn--fio { flex: 0.94; }

  .hero__bridge {
    margin-top: -5.4rem;
    padding: 0.9rem 0 1.1rem;
    background: linear-gradient(180deg, rgba(31, 14, 20, 0), #1f0e14 34%);
  }

  .hero__facts {
    width: min(100% - 2.6rem, 31rem);
    grid-template-columns: 1fr;
    gap: 0;
    padding-top: 0.6rem;
  }

  .hero__fact,
  .hero__fact:nth-child(3) {
    grid-column: auto;
    min-height: 3.9rem;
    padding: 0.65rem 0;
    border-bottom: 1px solid rgba(255, 248, 244, 0.16);
  }

  .hero__fact:last-child { border-bottom: 0; }
}

/* =======================================================================
   HERO PALETA E MOBILE RESTAURADOS
   A referência informa a estrutura desktop. A paleta e a composição mobile
   permanecem próprias da Gabriella.
   ======================================================================= */
.topo {
  color: #371a23;
  background: rgba(248, 243, 238, 0.68);
  -webkit-backdrop-filter: blur(12px) saturate(1.08);
  backdrop-filter: blur(12px) saturate(1.08);
}
.topo::after { background: rgba(55, 26, 35, 0.16); }
.topo.fixo { background: rgba(248, 243, 238, 0.9); color: #371a23; }
.topo__mono { color: #7a2843; }
.topo__nome em { color: #a5536a; }
.topo__barras i { background: #7a2843; }
.topo .topo__cta { border-color: #641d37; background: #641d37; color: #fffaf6; }
.topo .topo__cta:hover { border-color: #7f2c48; background: #7f2c48; }

.hero { background: #f8f3ee; color: #371a23; }

.hero__visual::after {
  background:
    linear-gradient(180deg, rgba(248, 243, 238, 0.04) 6%, rgba(248, 243, 238, 0.02) 37%, rgba(248, 243, 238, 0.72) 78%, #f8f3ee 100%),
    linear-gradient(90deg, rgba(248, 243, 238, 0.9) 0%, rgba(248, 243, 238, 0.46) 48%, rgba(248, 243, 238, 0.06) 100%);
}

.hero__visual img {
  filter: saturate(0.86) contrast(1.02) brightness(0.94);
  transform: scale(1.03);
}

.hero__titulo { color: #371a23; }
.hero__line--sobrenome { color: #a5536a; }
.hero__it {
  margin: 0.22rem 0 0;
  color: rgba(55, 26, 35, 0.67);
}

.hero__support { margin-bottom: 1.55rem; }
.hero__lead { color: #60464e; }
.hero__lead strong { color: #371a23; }

.hero__acoes {
  position: static;
  margin-top: 1.35rem;
}

.hero__acoes .btn {
  min-height: 3.35rem;
  border-radius: 999px;
}

.hero__acoes .btn--cheio {
  min-width: 14rem;
  border-color: #641d37;
  background: #641d37;
  color: #fffaf6;
}
.hero__acoes .btn--cheio:hover { border-color: #7f2c48; background: #7f2c48; }
.hero__acoes .btn--fio {
  min-width: 13.5rem;
  border: 1px solid rgba(100, 29, 55, 0.34);
  border-radius: 999px;
  color: #641d37;
  background: rgba(255, 250, 246, 0.5);
}
.hero__acoes .btn--fio:hover { border-color: #641d37; background: #641d37; color: #fffaf6; }

.hero__bridge {
  margin-top: -7.25rem;
  background: linear-gradient(180deg, rgba(248, 243, 238, 0), rgba(248, 243, 238, 0.92) 46%, #f8f3ee 100%);
}

.hero__facts { border-top-color: rgba(84, 46, 55, 0.17); }
.hero__fact { color: #371a23; }
.hero__factIcone { color: #792944; background: #f3e4e3; }
.hero__fact small { color: #9a6c78; }
.hero__fact strong { color: #3e2029; }
.hero__fact em { color: #715a61; }

@media (max-width: 820px) {
  .topo { background: rgba(248, 243, 238, 0.74); }
  .topo.fixo { background: rgba(248, 243, 238, 0.92); }

  .hero {
    min-height: 0;
    background: #f8f3ee;
  }

  .hero__visual {
    inset: 4.25rem 0 auto;
    height: clamp(18rem, 46svh, 25rem);
  }

  .hero__visual::after {
    background: linear-gradient(180deg,
      rgba(248, 243, 238, 0) 0%,
      rgba(248, 243, 238, 0.04) 34%,
      rgba(248, 243, 238, 0.52) 58%,
      rgba(248, 243, 238, 0.94) 82%,
      #f8f3ee 100%);
  }

  .hero__visual img {
    object-position: 55% 46%;
    filter: none;
    transform: none;
  }

  .hero__inner {
    width: min(100% - 2.6rem, 34rem);
    min-height: calc(100svh - 11rem);
    padding: clamp(18.25rem, 47svh, 24rem) 0 2.1rem;
    display: flex;
    align-items: flex-start;
    justify-content: center;
  }

  .hero__texto {
    width: min(100%, 28rem);
    min-height: 0;
    display: grid;
    justify-items: center;
    text-align: center;
  }

  .hero__titulo {
    width: auto;
    font-size: clamp(4.15rem, 15.4vw, 6.2rem);
    line-height: 0.78;
  }

  .hero__line--sobrenome { margin-left: 0; }

  .hero__it {
    margin: 0.25rem 0 0;
    font-size: clamp(1.55rem, 5.7vw, 2rem);
    text-align: center;
  }

  .hero__support {
    width: 100%;
    margin: 1.35rem 0 0;
  }

  .hero__lead {
    max-width: 20.5rem;
    margin-inline: auto;
    font-size: 0.9rem;
    line-height: 1.55;
    text-align: center;
  }

  .hero__acoes {
    width: 100%;
    flex-direction: column;
    align-items: center;
    gap: 0.55rem;
    margin-top: 1.15rem;
  }

  .hero__acoes .btn,
  .hero__acoes .btn--cheio,
  .hero__acoes .btn--fio {
    width: min(100%, 18rem);
    min-width: 0;
    min-height: 3.35rem;
    flex: 0 0 auto;
    border-radius: 999px;
  }

  .hero__bridge {
    margin-top: -1px;
    padding: 0.85rem 0 1rem;
    background: #f8f3ee;
  }

  .hero__facts {
    width: min(100% - 2.6rem, 34rem);
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.7rem;
    padding-top: 0;
    border-top: 0;
  }

  .hero__fact,
  .hero__fact:nth-child(3) {
    grid-column: auto;
    min-height: 4.65rem;
    grid-template-columns: 2.35rem minmax(0, 1fr);
    gap: 0.65rem;
    padding: 0.75rem 0.7rem;
    border: 1px solid rgba(84, 46, 55, 0.12);
    border-radius: 1rem;
    background: rgba(255, 252, 249, 0.94);
    box-shadow: 0 12px 28px rgba(83, 48, 44, 0.08);
  }

  .hero__fact:nth-child(3) { grid-column: 1 / -1; }
  .hero__fact:last-child { border-bottom: 1px solid rgba(84, 46, 55, 0.12); }
}

/* Mobile da hero congelado no arranjo aprovado: cena clara, eixo central,
   CTA principal único e cartões 2 + 1. Alterações da referência ficam só no desktop. */
@media (max-width: 820px) {
  .hero {
    min-height: calc(100svh - 11rem);
    overflow: hidden;
    background: #f8f3ee;
  }

  .hero__visual {
    inset: 4.25rem 0 auto;
    width: 100%;
    height: clamp(18rem, 46svh, 25rem);
  }

  .hero__visual::after {
    background: linear-gradient(180deg,
      rgba(248, 243, 238, 0) 0%,
      rgba(248, 243, 238, 0.04) 34%,
      rgba(248, 243, 238, 0.52) 58%,
      rgba(248, 243, 238, 0.94) 82%,
      #f8f3ee 100%);
  }

  .hero__visual img {
    object-position: 55% 46%;
    filter: none;
    transform: none;
  }

  .hero__inner {
    width: min(100% - 2.6rem, 34rem);
    min-height: calc(100svh - 11rem);
    padding: clamp(18.25rem, 47svh, 24rem) 0 clamp(1.6rem, 4svh, 2.6rem);
    display: flex;
    align-items: flex-start;
    justify-content: center;
  }

  .hero__texto {
    width: min(100%, 28rem);
    min-height: 0;
    display: grid;
    justify-items: center;
    text-align: center;
  }

  .hero__titulo {
    width: auto;
    font-size: clamp(4.15rem, 15.4vw, 6.2rem);
    line-height: 0.78;
    text-wrap: balance;
  }

  .hero__line--sobrenome { margin-left: 0; }

  .hero__it {
    margin: 0.3rem 0 0;
    font-size: clamp(1.55rem, 5.7vw, 2rem);
    text-align: center;
  }

  .hero__support {
    width: 100%;
    display: grid;
    justify-items: center;
    margin: 1.45rem 0 0;
  }

  .hero__lead {
    max-width: 20.5rem;
    margin-inline: auto;
    font-size: 0.9rem;
    line-height: 1.55;
    text-align: center;
  }

  .hero__acoes {
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 1.1rem;
  }

  .hero__acoes .btn--cheio {
    width: auto;
    min-width: 0;
    min-height: 3.5rem;
    padding-inline: 1.45rem;
    border-radius: 999px;
  }

  .hero__acoes .btn--fio { display: none; }

  .hero__bridge {
    min-height: 11rem;
    height: auto;
    margin-top: -1px;
    padding: 0.85rem 0 1rem;
    background: #f8f3ee;
  }

  .hero__facts {
    width: min(100% - 2.6rem, 34rem);
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.7rem;
    margin: 0 auto;
    padding-top: 0;
    border-top: 0;
  }

  .hero__fact,
  .hero__fact:nth-child(3) {
    grid-column: auto;
    min-height: 4.65rem;
    grid-template-columns: 2.35rem minmax(0, 1fr);
    gap: 0.65rem;
    padding: 0.75rem 0.7rem;
    border: 1px solid rgba(84, 46, 55, 0.12);
    border-radius: 1rem;
    background: rgba(255, 252, 249, 0.94);
    box-shadow: 0 12px 28px rgba(83, 48, 44, 0.08);
    text-align: left;
  }

  .hero__fact:nth-child(3) { grid-column: 1 / -1; }
  .hero__fact strong { font-size: 0.78rem; }
  .hero__fact em { font-size: 0.61rem; }
}

/* Hero desktop: a luz existe apenas como base de leitura; a fotografia fica íntegra acima dela. */
@media (min-width: 821px) {
  .hero__visual::after {
    background:
      radial-gradient(
        120% 125% at 50% -35%,
        rgba(248, 243, 238, 0) 0%,
        rgba(248, 243, 238, 0) 40%,
        rgba(248, 243, 238, 0.1) 50%,
        rgba(248, 243, 238, 0.65) 69%,
        #f8f3ee 88%
      ),
      linear-gradient(
        180deg,
        rgba(248, 243, 238, 0) 0%,
        rgba(248, 243, 238, 0) 42%,
        rgba(248, 243, 238, 0.14) 53%,
        rgba(248, 243, 238, 0.58) 68%,
        rgba(248, 243, 238, 0.94) 81%,
        #f8f3ee 90%
      );
  }

  .hero__visual img {
    object-position: 54% 34%;
    filter: saturate(0.95) contrast(1.02) brightness(0.98);
    transform: translateY(-6%) scale(1.08);
    transform-origin: 54% 34%;
  }

  .hero__lead { color: #48242e; }

  .hero__it {
    margin-top: -1.05rem;
    transform: translateY(-1.15rem);
  }
}

/* Hero mobile: composição própria, em um único eixo central. */
@media (max-width: 820px) {
  .hero__texto {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto;
  }

  .hero__titulo,
  .hero__it,
  .hero__support {
    grid-column: auto;
    grid-row: auto;
  }

  .hero__inner {
    padding-top: clamp(14.75rem, 35svh, 19rem);
  }

  .hero__titulo,
  .hero__it,
  .hero__lead,
  .hero__support,
  .hero__acoes {
    justify-self: center;
    text-align: center;
  }

  .hero__support { margin-top: 1.1rem; }

  .hero__lead {
    width: min(100%, 18rem);
    max-width: 18rem;
  }

  .hero__acoes .btn--cheio {
    width: min(100%, 18rem);
    min-width: 0;
  }

  .hero__bridge {
    min-height: 2rem;
    margin-top: -0.5rem;
    padding-block: 0.7rem 0.85rem;
    border: 0;
    box-shadow: none;
    background: #f8f3ee;
  }

  .hero__bridge::after { display: none; }

  .hero__visual::after {
    background: linear-gradient(
      180deg,
      rgba(248, 243, 238, 0) 0%,
      rgba(248, 243, 238, 0.04) 20%,
      rgba(248, 243, 238, 0.34) 36%,
      rgba(248, 243, 238, 0.86) 54%,
      #f8f3ee 69%,
      #f8f3ee 100%
    );
  }

  .hero__visual img {
    object-position: 55% 35%;
    transform: translateY(-17%) scale(1.16);
    transform-origin: 55% 30%;
  }

  .hero,
  .hero__inner {
    min-height: 0;
  }

  .hero__texto { z-index: 4; }

  .hero__titulo,
  .hero__it {
    opacity: 1 !important;
    visibility: visible !important;
    transform: none !important;
  }

  .hero__texto { isolation: isolate; }

  /* A animação atua nos spans internos; eles também precisam sair do véu. */
  .hero__line > span {
    opacity: 1 !important;
    visibility: visible !important;
    transform: none !important;
    filter: none !important;
    color: #371a23 !important;
  }

  .hero__line--sobrenome > span { color: #a5536a !important; }
  .hero__it { color: #57313c !important; }

  .hero__facts { gap: 0.65rem; }

  .hero__fact,
  .hero__fact:nth-child(3) {
    min-height: 5.15rem;
    grid-template-columns: 2.25rem minmax(0, 1fr);
    gap: 0.85rem;
    padding: 1rem 1.1rem;
    border: 1px solid rgba(84, 46, 55, 0.11);
    border-radius: 1.1rem;
    box-shadow: 0 10px 22px rgba(83, 48, 44, 0.07);
  }

  .hero__factIcone {
    width: 2.25rem;
    height: 2.25rem;
    align-self: center;
  }

  .confirmar-v3 .capitulo__cabeca,
  .confirmar-v3__lado,
  .confirmar-v3 .capitulo__titulo,
  .confirmar-v3 .confirmar__intro,
  .confirmar-v3 .contagem__prazo {
    text-align: center;
  }

  .confirmar-v3 .capitulo__titulo,
  .confirmar-v3 .confirmar__intro {
    margin-inline: auto;
  }

  .confirmar-v3 .capitulo__cabeca::after { margin-inline: auto; }
  .confirmar-v3 .contagem { justify-content: center; }
}

/* QA mobile — a fotografia termina antes da tipografia e os metadados
   permanecem três cartões independentes, sem uma regra solta abaixo. */
@media (max-width: 820px) {
  .hero__visual::after {
    background: linear-gradient(
      180deg,
      rgba(248, 243, 238, 0) 0%,
      rgba(248, 243, 238, 0.03) 20%,
      rgba(248, 243, 238, 0.34) 34%,
      rgba(248, 243, 238, 0.86) 46%,
      #f8f3ee 56%,
      #f8f3ee 100%
    );
  }

  .hero__acoes {
    width: 100%;
    justify-content: center;
    align-items: center;
    margin-inline: auto;
  }

  .hero__acoes .btn--cheio {
    width: min(100%, 18rem);
    justify-content: space-between;
  }

  .hero__bridge {
    min-height: 0;
    margin-top: -0.15rem;
    padding: 0.7rem 0 0.95rem;
    border: 0;
    background: #f8f3ee;
  }

  .hero__bridge::before,
  .hero__bridge::after { display: none; }

  .hero__facts {
    gap: 0.72rem;
    border: 0;
  }

  .hero__fact,
  .hero__fact:nth-child(3) {
    min-height: 5.25rem;
    grid-template-columns: 2.45rem minmax(0, 1fr);
    gap: 0.85rem;
    padding: 0.95rem 1rem;
    border: 1px solid rgba(84, 46, 55, 0.12);
    border-radius: 1.05rem;
    background: #fffaf8;
    box-shadow: 0 10px 22px rgba(83, 48, 44, 0.06);
  }

  .hero__fact:last-child { border-bottom: 1px solid rgba(84, 46, 55, 0.12); }

  .hero__factIcone {
    width: 2.45rem;
    height: 2.45rem;
    align-self: center;
    border: 1px solid rgba(121, 41, 68, 0.12);
    border-radius: 0.78rem;
    background: #f1dfe1;
    color: #792944;
  }

  .hero__factIcone svg { width: 1.02rem; height: 1.02rem; }

  .ensaio-v3__cabeca,
  .ensaio-v3__cabeca .capitulo__titulo,
  .ensaio-v3__cabeca .capitulo__lead {
    margin-inline: 0;
    text-align: left;
  }

  .ensaio-v3__cabeca .capitulo__titulo { max-width: 12ch; }
  .ensaio-v3__cabeca::after { margin-inline: 0; }
}

/* Composição exclusiva de celular: uma única coluna, com CTA no eixo da tela. */
@media (max-width: 820px) {
  .hero__titulo,
  .hero__line,
  .hero__line > span,
  .hero__it {
    opacity: 1 !important;
    visibility: visible !important;
    transform: none !important;
  }

  .hero__texto,
  .hero__support {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
  }

  .hero__acoes {
    display: flex;
    align-self: center;
    width: min(calc(100vw - 2.6rem), 18rem);
    margin: 1.1rem auto 0;
  }

  .hero__acoes .btn--cheio {
    width: 100%;
    min-width: 0;
  }

  .hero__fact,
  .hero__fact:nth-child(3) {
    min-width: 0;
    grid-template-columns: 2.5rem minmax(0, 1fr);
    gap: 0.78rem;
    padding: 0.95rem 1.05rem;
  }

  .hero__factIcone {
    width: 2.5rem;
    height: 2.5rem;
    justify-self: center;
  }

  .hero__facts {
    width: calc(100vw - 2.6rem);
    max-width: 34rem;
    min-width: 0;
    margin-inline: auto;
  }

  /* Regra antiga tinha mais especificidade e removia a margem interna do
     primeiro card. O respiro dos três cartões passa a ser deliberado. */
  .hero__facts .hero__fact:first-child {
    padding-left: 1.05rem;
  }

  .hero__facts .hero__fact:last-child {
    padding-right: 1.05rem;
  }

  /* Sem divisor entre a última informação e o início da seção seguinte. */
  .hero__bridge,
  .hero__facts,
  .convite {
    border-top: 0 !important;
    border-bottom: 0 !important;
  }

  .hero__bridge::before,
  .hero__bridge::after,
  .convite::before {
    content: none !important;
    display: none !important;
  }
}

/* Nome da aniversariante: texto sólido, sem nenhum tratamento de entrada. */
@media (max-width: 820px) {
  .hero__titulo--solida,
  .hero__titulo--solida .hero__line,
  .hero__titulo--solida .hero__line > span,
  .hero__it {
    opacity: 1 !important;
    visibility: visible !important;
    transform: none !important;
    filter: none !important;
    text-shadow: none !important;
    animation: none !important;
    transition: none !important;
    mix-blend-mode: normal !important;
  }

  .hero__titulo--solida,
  .hero__titulo--solida .hero__line,
  .hero__titulo--solida .hero__line > span {
    color: #371a23 !important;
    font-weight: 500 !important;
  }

  .hero__titulo--solida .hero__line--sobrenome,
  .hero__titulo--solida .hero__line--sobrenome > span {
    color: #a5536a !important;
    font-weight: 400 !important;
  }

  .hero__it { color: #57313c !important; }
}

/* Hero mobile — a foto se dissolve no fundo; nenhuma luz é desenhada sobre o texto. */
@media (max-width: 820px) {
  .hero {
    isolation: isolate;
  }

  .hero__texto {
    isolation: isolate;
    position: relative;
    z-index: 20 !important;
  }

  .hero__titulo--solida,
  .hero__titulo--solida .hero__line,
  .hero__titulo--solida .hero__line > span {
    position: relative !important;
    z-index: 21 !important;
    color: #371a23 !important;
    -webkit-text-fill-color: #371a23 !important;
    -webkit-text-stroke: 0 transparent !important;
    background: none !important;
    background-image: none !important;
    -webkit-background-clip: border-box !important;
    background-clip: border-box !important;
    font-weight: 500 !important;
    opacity: 1 !important;
  }

  .hero__titulo--solida .hero__line--sobrenome,
  .hero__titulo--solida .hero__line--sobrenome > span {
    color: #a5536a !important;
    -webkit-text-fill-color: #a5536a !important;
    font-weight: 400 !important;
    -webkit-text-stroke: 0 transparent !important;
  }

  .hero__it {
    position: relative !important;
    z-index: 21 !important;
    color: #57313c !important;
    -webkit-text-fill-color: #57313c !important;
    font-weight: 400 !important;
    -webkit-text-stroke: 0 transparent !important;
    opacity: 1 !important;
  }

  .hero__visual {
    z-index: 0 !important;
  }

  .hero__visual picture {
    position: relative;
    z-index: 0;
    -webkit-mask-image: radial-gradient(145% 115% at 50% -20%, #000 0%, #000 50%, rgba(0, 0, 0, 0.5) 66%, transparent 84%);
    mask-image: radial-gradient(145% 115% at 50% -20%, #000 0%, #000 50%, rgba(0, 0, 0, 0.5) 66%, transparent 84%);
  }

  .hero__visual::after {
    content: none !important;
    display: none !important;
  }

  .hero__visual img {
    object-position: 55% 28% !important;
    transform: translateY(-12%) scale(1.22) !important;
    transform-origin: 55% 24% !important;
  }

  /* O fim da hero não recebe uma regra horizontal antes da próxima seção. */
  .hero__bridge,
  .hero__facts,
  .hero__bridge + .convite {
    border-top: 0 !important;
    border-bottom: 0 !important;
    box-shadow: none !important;
    outline: 0 !important;
  }

  .hero__bridge::before,
  .hero__bridge + .convite::before {
    content: none !important;
    display: none !important;
  }

  .hero__bridge::after {
    content: "" !important;
    display: block !important;
    position: absolute !important;
    z-index: 99 !important;
    right: 0 !important;
    bottom: -5px !important;
    left: 0 !important;
    height: 10px !important;
    border: 0 !important;
    background: #f8f3ee !important;
    box-shadow: none !important;
    pointer-events: none !important;
  }

  .hero__facts .hero__fact:last-child {
    border-bottom: 1px solid rgba(84, 46, 55, 0.12) !important;
  }

}

/* =======================================================================
   AJUSTE v20 — paleta do convite impresso
   Marsala e dourado extraídos do próprio convite da Gabriella:
   o corpo do "G" do monograma mede #5E1418 e o "N" mede #A8854A.
   O bordô anterior (#4B0C18 / #641D37) puxava para o roxo; o marsala do
   convite é mais quente e mais vermelho. O fundo marfim fica como está.
   ===================================================================== */
:root {
  /* marsala */
  --wine: #4A1013;          /* mais fechado: preenchimentos e bordas */
  --wine-live: #5E1418;     /* marsala do convite: ações e ênfases */
  --v3-wine: #5E1418;
  --v3-plum: #33161A;       /* tipografia: mesmo eixo quente do marsala */

  /* dourado do "N" */
  --gold: #A8854A;

  /* acento claro, agora na mesma família quente do marsala */
  --v3-rose: #9E4C55;
  --blush: #D3ADAA;
  --v3-muted: #6E565A;
}

/* =======================================================================
   AJUSTE v21 — traje sem cartela
   A copy final diz apenas "social completo". A cartela interativa de tons
   saiu junto com o texto que a explicava, e o bloco passa a ser um aviso
   curto e centrado, no mesmo tom editorial dos demais.
   ===================================================================== */
.traje-v3--simples {
  display: grid;
  justify-items: center;
  gap: clamp(1.1rem, 2vw, 1.6rem);
  margin-top: clamp(2.5rem, 5vw, 4.5rem);
  padding: clamp(2rem, 4vw, 3.5rem) clamp(1.5rem, 4vw, 3.5rem);
  border: 1px solid rgba(94, 20, 24, 0.16);
  border-radius: var(--v3-radius);
  background: rgba(255, 250, 246, 0.6);
  text-align: center;
}
.traje-v3--simples .traje-v3__cabeca {
  display: grid;
  justify-items: center;
  gap: 0.5rem;
}
.traje-v3--simples h3 {
  margin: 0;
  color: var(--v3-plum);
  font-family: var(--display);
  font-size: clamp(2.1rem, 4vw, 3.2rem);
  font-weight: 500;
  letter-spacing: -0.05em;
  line-height: 1;
}
.traje-v3--simples .traje-v3__linha {
  max-width: none;
  margin: 0;
  color: var(--v3-wine);
  font-size: clamp(0.72rem, 1vw, 0.82rem);
  font-weight: 700;
  letter-spacing: 0.14em;
  line-height: 1;
  text-transform: uppercase;
}
.traje-v3__frase {
  max-width: 34ch;
  margin: 0;
  color: var(--v3-muted);
  font-size: clamp(1rem, 1.2vw, 1.12rem);
  line-height: 1.7;
  text-wrap: balance;
}
.traje-v3__frase strong { color: var(--v3-plum); font-weight: 600; }

/* A cabeça herdava margin-bottom de até 3.75rem da versão com cartela,
   que somava ao gap do grid e abria um vão no meio do bloco. */
.traje-v3--simples .traje-v3__cabeca { margin-bottom: 0; }

/* =======================================================================
   AJUSTE v22 — Pix dentro do card da Viagem dos sonhos
   Fica recolhido para os dois cards continuarem com o mesmo peso; quem
   quiser contribuir abre e encontra o QR e o código copia-e-cola.
   ===================================================================== */
.pix { margin-top: auto; }
.pix > summary { list-style: none; }
.pix > summary::-webkit-details-marker { display: none; }

.pix__abrir {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  min-height: 44px;
  padding-top: clamp(1.6rem, 2.6vw, 2.4rem);
  color: var(--v3-wine);
  font-weight: 700;
  cursor: pointer;
  text-underline-offset: 0.3em;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-decoration-color: rgba(94, 20, 24, 0.35);
  transition: text-decoration-color 240ms var(--ease);
}
.pix__abrir svg {
  width: 0.95rem;
  height: 0.95rem;
  transition: transform 320ms var(--ease);
}
.pix[open] .pix__abrir svg { transform: rotate(90deg); }
.pix__abrir:hover { text-decoration-color: var(--v3-wine); }
.pix__abrir:focus-visible { outline: 2px solid var(--v3-wine); outline-offset: 4px; }

.pix__corpo {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: clamp(1rem, 2vw, 1.5rem);
  align-items: start;
  margin-top: 1.15rem;
  padding: clamp(0.9rem, 1.8vw, 1.2rem);
  border: 1px solid rgba(94, 20, 24, 0.16);
  border-radius: 0.9rem;
  background: rgba(255, 250, 246, 0.72);
  animation: pixEntra 320ms var(--ease) both;
}
@keyframes pixEntra {
  from { opacity: 0; transform: translateY(-6px) }
  to   { opacity: 1; transform: none }
}

.pix__qr {
  display: block;
  width: clamp(6.5rem, 11vw, 8.5rem);
  height: auto;
  padding: 0.5rem;
  border-radius: 0.55rem;
  background: #fffaf6;
}

.pix__dados { min-width: 0; display: grid; gap: 0.4rem; }
.pix__rotulo {
  margin: 0;
  color: var(--v3-wine);
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  line-height: 1;
  text-transform: uppercase;
}
.pix__chave {
  margin: 0;
  color: var(--v3-plum);
  font-family: var(--display);
  font-size: clamp(1.35rem, 2.2vw, 1.75rem);
  font-weight: 500;
  letter-spacing: -0.02em;
  line-height: 1.05;
  font-variant-numeric: tabular-nums;
}
.pix__copiar {
  justify-self: start;
  min-height: 40px;
  margin-top: 0.35rem;
  padding: 0.55rem 1.15rem;
  border: 1px solid var(--v3-wine);
  border-radius: 999px;
  color: #fffaf6;
  background: var(--v3-wine);
  cursor: pointer;
  font-family: var(--body);
  font-size: 0.78rem;
  font-weight: 700;
  line-height: 1;
  transition: background 240ms var(--ease), color 240ms var(--ease);
}
.pix__copiar:hover { background: var(--wine); }
.pix__copiar:focus-visible { outline: 2px solid var(--v3-wine); outline-offset: 3px; }
.pix__copiar.is-copiado { color: var(--v3-wine); background: transparent; }
.pix__nota {
  margin: 0.2rem 0 0;
  color: var(--v3-muted);
  font-size: 0.74rem;
  line-height: 1.55;
}

@media (max-width: 560px) {
  .pix__corpo { grid-template-columns: minmax(0, 1fr); justify-items: center; text-align: center; }
  .pix__dados { justify-items: center; }
  .pix__copiar { justify-self: center; }
}

/* =======================================================================
   AJUSTE v23 — envio real do RSVP
   ===================================================================== */
.form__estado.is-erro {
  color: var(--v3-wine);
  font-weight: 600;
}
.form__estado.is-erro a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 0.25em;
}

.form-pronto {
  display: grid;
  justify-items: center;
  gap: 0.9rem;
  padding: clamp(2.5rem, 5vw, 4rem) clamp(1.75rem, 3.5vw, 3rem);
  border: 1px solid rgba(94, 20, 24, 0.16);
  border-radius: var(--v3-radius);
  background: rgba(255, 250, 246, 0.95);
  box-shadow: var(--v3-shadow);
  text-align: center;
  animation: prontoEntra 460ms var(--ease) both;
}
.form-pronto[hidden] { display: none; }
@keyframes prontoEntra {
  from { opacity: 0; transform: translateY(12px) }
  to   { opacity: 1; transform: none }
}
.form-pronto:focus { outline: none; }

.form-pronto__selo {
  width: 3.4rem;
  height: 3.4rem;
  display: grid;
  place-items: center;
  margin-bottom: 0.25rem;
  border: 1px solid var(--v3-wine);
  border-radius: 50%;
  color: var(--v3-wine);
}
.form-pronto__selo svg { width: 1.5rem; height: 1.5rem; }

.form-pronto h3 {
  margin: 0;
  color: var(--v3-plum);
  font-family: var(--display);
  font-size: clamp(2rem, 3.4vw, 2.9rem);
  font-weight: 500;
  letter-spacing: -0.045em;
  line-height: 1;
}
.form-pronto p {
  max-width: 42ch;
  margin: 0;
  color: var(--v3-muted);
  font-size: clamp(0.95rem, 1.1vw, 1.05rem);
  line-height: 1.7;
  text-wrap: pretty;
}
.form-pronto p a {
  color: var(--v3-wine);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 0.25em;
}
.form-pronto__data {
  margin-top: 0.6rem;
  padding-top: 1.1rem;
  border-top: 1px solid rgba(94, 20, 24, 0.14);
  color: var(--v3-wine) !important;
  font-size: 0.82rem !important;
  font-weight: 600;
  letter-spacing: 0.02em;
}

/* O formulário e a tela de "presença confirmada" precisam ocupar a MESMA
   célula do grid: soltos, viravam dois itens e a confirmação caía na coluna
   da contagem regressiva. */
.confirmar__acao { min-width: 0; }

/* `.form-v3 { display: grid }` (autor) vence o `[hidden] { display: none }`
   da folha do navegador, então o formulário continuava visível depois do
   envio. A regra explícita devolve o comportamento esperado. */
.form-v3[hidden] { display: none; }

/* O SVG do QR não expõe proporção intrínseca a todos os navegadores.
   Com `height: auto` isso poderia colapsar a altura: a proporção fixa
   garante o quadrado em qualquer engine. */
.pix__qr { aspect-ratio: 1; height: auto; }

/* =======================================================================
   AJUSTE v24 — acabamento do bloco Pix
   Cinco correções de acabamento apontadas em revisão visual:
   1. o padding de respiro estava no próprio <summary>, então o anel de
      foco cercava 37px de vazio e nascia um retângulo torto;
   2. a seta não sentava na linha de base nem entrava no sublinhado;
   3. o topo do QR não alinhava com o rótulo ao lado;
   4. cartão branco do QR sobre painel quase branco: duas superfícies
      indistintas;
   5. botão colado no número e nota órfã no rodapé do painel.
   ===================================================================== */

/* 1 + 2 — o respiro sai do alvo focável e vai para o container. */
.pix { padding-top: clamp(1.75rem, 2.8vw, 2.6rem); }

.pix__abrir {
  width: fit-content;
  padding-top: 0;
  align-items: baseline;
  gap: 0.5rem;
  border-radius: 0.25rem;
  text-decoration-color: rgba(94, 20, 24, 0.4);
}
.pix__abrir svg {
  width: 0.85rem;
  height: 0.85rem;
  align-self: center;
  transform: rotate(90deg);           /* fechado: aponta para baixo */
  transition: transform 340ms var(--ease);
}
.pix[open] .pix__abrir svg { transform: rotate(-90deg); }   /* aberto: recolher */
.pix__abrir:focus-visible { outline-offset: 3px; }

/* 3 + 4 + 5 — painel reconstruído com um eixo só e a nota em faixa. */
.pix__corpo {
  grid-template-columns: auto minmax(0, 1fr);
  gap: clamp(1.1rem, 2vw, 1.6rem) clamp(1.1rem, 2.2vw, 1.75rem);
  align-items: start;
  margin-top: 1.05rem;
  padding: clamp(1.1rem, 2vw, 1.5rem);
  background: rgba(255, 252, 250, 0.9);
}

.pix__qr {
  width: clamp(6.75rem, 10.5vw, 8.25rem);
  padding: 0;
  border: 1px solid rgba(94, 20, 24, 0.12);
  border-radius: 0.5rem;
  background: #fff;
}

.pix__dados {
  gap: 0;
  /* alinha a primeira linha de texto com o topo exato do QR */
  padding-top: 0.15rem;
}
.pix__rotulo { line-height: 1.1; }
.pix__chave {
  margin-top: 0.55rem;
  font-size: clamp(1.4rem, 2.1vw, 1.7rem);
}
.pix__copiar { margin-top: 1.05rem; }

.pix__nota {
  grid-column: 1 / -1;
  margin: 0;
  padding-top: clamp(0.9rem, 1.6vw, 1.15rem);
  border-top: 1px solid rgba(94, 20, 24, 0.12);
  font-size: 0.76rem;
  text-wrap: pretty;
}
.pix__nota strong { color: var(--v3-plum); font-weight: 600; }

@media (max-width: 560px) {
  .pix__corpo { grid-template-columns: minmax(0, 1fr); }
  .pix__dados { padding-top: 0; }
  .pix__nota { text-align: center; }
}

/* Causa raiz do desalinho: `.presentes-v3__grade--duplo .presente-v3 p`
   (0,2,1) aplicava margin-top de 1.6rem a TODO parágrafo do card, inclusive
   aos do Pix, e vencia `.pix__rotulo { margin: 0 }` (0,1,0). Reescrito com
   três classes (0,3,0), que ganha da regra do card. */
.presentes-v3__grade--duplo .presente-v3 .pix__rotulo,
.presentes-v3__grade--duplo .presente-v3 .pix__nota { margin-top: 0; }
.presentes-v3__grade--duplo .presente-v3 .pix__chave { margin-top: 0.5rem; }

/* O texto ficava encostado no topo do alvo de toque de 44px, então o anel de
   foco nascia assimétrico. Centralizado, ele vira uma cápsula deliberada. */
.pix__abrir { align-items: center; }
.pix__abrir svg { align-self: auto; }

/* =======================================================================
   LISTA VIRTUAL
   A lista não leva a outra página: abre uma sala de presentes no mesmo
   universo do convite, com imagens locais e links que seguem para as lojas.
   ===================================================================== */
.presente-v3__abrir-lista,
.presente-v3__abrir-dicas {
  position: relative;
  z-index: 1;
  margin-top: auto;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  align-self: flex-start;
  padding: 0.8rem 1.35rem;
  border: 1px solid var(--v3-wine);
  border-radius: 999px;
  color: #fffaf6;
  background: var(--v3-wine);
  font-family: var(--body);
  font-size: 0.87rem;
  font-weight: 700;
  line-height: 1;
  cursor: pointer;
  transition: background 260ms var(--ease), border-color 260ms var(--ease), transform 260ms var(--ease);
}
.presente-v3__abrir-lista svg,
.presente-v3__abrir-dicas svg { width: 0.95rem; height: 0.95rem; flex: 0 0 auto; }
.presente-v3__abrir-lista:hover,
.presente-v3__abrir-dicas:hover { border-color: var(--wine); background: var(--wine); transform: translateY(-2px); }
.presente-v3__abrir-lista:focus-visible,
.presente-v3__abrir-dicas:focus-visible { outline: 2px solid var(--v3-wine); outline-offset: 3px; }

.lista-vitrine {
  position: fixed;
  z-index: 400;
  inset: 0;
  display: flex;
  justify-content: center;
  align-items: stretch;
}
.lista-vitrine[hidden] { display: none; }
.lista-vitrine__fundo {
  position: absolute;
  inset: 0;
  background: rgba(43, 22, 29, 0.46);
  -webkit-backdrop-filter: blur(7px);
  backdrop-filter: blur(7px);
  animation: listaVitrineFundo 320ms var(--ease) both;
}
.lista-vitrine__painel {
  position: relative;
  z-index: 1;
  width: min(100%, 92rem);
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: #f8f3ee;
  box-shadow: 0 40px 120px rgba(43, 22, 29, 0.34);
  animation: listaVitrinePainel 440ms var(--ease) both;
}
@keyframes listaVitrineFundo { from { opacity: 0; } to { opacity: 1; } }
@keyframes listaVitrinePainel { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: none; } }

.lista-vitrine__topo {
  position: sticky;
  top: 0;
  z-index: 2;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.25rem;
  padding: clamp(1rem, 2vw, 1.45rem) clamp(1.15rem, 3.2vw, 3.35rem);
  border-bottom: 1px solid rgba(55, 26, 35, 0.12);
  background: rgba(248, 243, 238, 0.94);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
}
.lista-vitrine__marca {
  min-width: 0;
  display: flex;
  align-items: center;
  gap: clamp(0.7rem, 1.5vw, 1rem);
}
.lista-vitrine__marca img { width: auto; height: clamp(2.1rem, 3vw, 2.55rem); object-fit: contain; }
.lista-vitrine__marca p,
.lista-categoria__cabeca p {
  margin: 0 0 0.25rem;
  color: #806a70;
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1.2;
}
.lista-vitrine__marca h2 {
  margin: 0;
  color: var(--v3-plum);
  font-family: var(--display);
  font-size: clamp(1.55rem, 3vw, 2.2rem);
  font-weight: 500;
  letter-spacing: -0.045em;
  line-height: 0.9;
}
.lista-vitrine__marca h2 em { color: var(--v3-rose); font-style: italic; font-weight: 400; }
.lista-vitrine__fechar {
  width: 2.85rem;
  height: 2.85rem;
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 1px solid rgba(122, 40, 67, 0.3);
  border-radius: 50%;
  color: var(--v3-wine);
  background: transparent;
  cursor: pointer;
  transition: color 240ms var(--ease), background 240ms var(--ease), border-color 240ms var(--ease);
}
.lista-vitrine__fechar svg { width: 1.15rem; height: 1.15rem; }
.lista-vitrine__fechar:hover { border-color: var(--v3-wine); color: #fffaf6; background: var(--v3-wine); }
.lista-vitrine__fechar:focus-visible,
.lista-produto a:focus-visible { outline: 2px solid var(--v3-wine); outline-offset: 3px; }

.lista-vitrine__corpo {
  flex: 1;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  padding: clamp(1.4rem, 3.5vw, 3.75rem) clamp(1.15rem, 3.2vw, 3.35rem) clamp(3rem, 6vw, 6rem);
}
.lista-categoria { max-width: 84rem; margin-inline: auto; }
.lista-categoria + .lista-categoria { margin-top: clamp(3.3rem, 6vw, 6rem); }
.lista-categoria__cabeca {
  display: flex;
  align-items: end;
  gap: 1rem;
  margin-bottom: clamp(1rem, 1.8vw, 1.4rem);
  padding-bottom: 0.8rem;
  border-bottom: 1px solid rgba(55, 26, 35, 0.16);
}
.lista-categoria__cabeca h3 {
  margin: 0;
  color: var(--v3-plum);
  font-family: var(--display);
  font-size: clamp(2rem, 3.6vw, 3.3rem);
  font-weight: 500;
  letter-spacing: -0.06em;
  line-height: 0.92;
}
.lista-categoria__cabeca p { margin-bottom: 0; }
.lista-produtos {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(0.75rem, 1.35vw, 1.2rem);
}
.lista-produto {
  min-width: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: 1px solid rgba(55, 26, 35, 0.11);
  border-radius: clamp(1rem, 1.6vw, 1.35rem);
  background: #fffaf6;
  box-shadow: 0 13px 28px rgba(67, 35, 45, 0.055);
}
.lista-produto__foto {
  aspect-ratio: 1 / 1;
  overflow: hidden;
  display: grid;
  place-items: center;
  padding: clamp(0.65rem, 1.2vw, 1rem);
  background: #f2e8e2;
}
.lista-produto__foto img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  transition: transform 700ms var(--ease);
}
@media (hover: hover) { .lista-produto:hover .lista-produto__foto img { transform: scale(1.035); } }
.lista-produto__conteudo { min-height: 11rem; display: flex; flex-direction: column; padding: clamp(1rem, 1.5vw, 1.25rem); }
.lista-produto__marca {
  margin: 0;
  color: var(--v3-rose);
  font-size: 0.71rem;
  font-weight: 700;
  line-height: 1.25;
}
.lista-produto h4 {
  margin: 0.42rem 0 1rem;
  color: var(--v3-plum);
  font-family: var(--body);
  font-size: 0.94rem;
  font-weight: 700;
  line-height: 1.3;
}
.lista-produto a {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  margin-top: auto;
  padding: 0.72rem 0.85rem;
  border: 1px solid var(--v3-wine);
  border-radius: 999px;
  color: #fffaf6;
  background: var(--v3-wine);
  font-size: 0.8rem;
  font-weight: 700;
  line-height: 1;
  text-align: center;
  text-decoration: none;
  transition: background 220ms var(--ease), transform 220ms var(--ease);
}
.lista-produto a svg { width: 0.9rem; height: 0.9rem; flex: 0 0 auto; }
.lista-produto a:hover { background: var(--wine); transform: translateY(-2px); }

.lista-produtos--destaque { grid-template-columns: minmax(0, 34rem); }
.lista-produto--destaque { display: grid; grid-template-columns: 0.9fr 1.1fr; }
.lista-produto--destaque .lista-produto__foto { aspect-ratio: auto; min-height: 17rem; }
.lista-produto--destaque .lista-produto__conteudo { min-height: 0; padding: clamp(1.3rem, 2.5vw, 2rem); }
.lista-produto--destaque h4 { font-family: var(--display); font-size: clamp(1.65rem, 2.5vw, 2.1rem); font-weight: 500; letter-spacing: -0.05em; line-height: 0.93; }

.lista-acessorios { overflow: hidden; border-radius: clamp(1rem, 1.6vw, 1.35rem); background: #efe5de; }
.lista-acessorios__foto { aspect-ratio: 16 / 7; overflow: hidden; }
.lista-acessorios__foto img { width: 100%; height: 100%; object-fit: cover; object-position: center 53%; }

html.lista-virtual-aberta,
html.lista-virtual-aberta body { overflow: hidden; }

@media (max-width: 1080px) { .lista-produtos { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 720px) {
  .lista-vitrine__painel { width: 100%; }
  .lista-produtos { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.75rem; }
  .lista-produto__conteudo { min-height: 10.75rem; padding: 0.9rem; }
  .lista-produto h4 { font-size: 0.88rem; }
  .lista-produto a { padding-inline: 0.65rem; font-size: 0.75rem; }
  .lista-acessorios__foto { aspect-ratio: 1 / 1; }
}
@media (max-width: 440px) {
  .lista-vitrine__marca img { height: 1.9rem; }
  .lista-vitrine__marca p { font-size: 0.65rem; }
  .lista-vitrine__marca h2 { font-size: 1.45rem; }
  .lista-vitrine__fechar { width: 2.65rem; height: 2.65rem; }
  .lista-produto__foto { padding: 0.55rem; }
  .lista-produto__conteudo { min-height: 11.25rem; }
  .lista-produto h4 { font-size: 0.81rem; }
  .lista-produto a { font-size: 0.7rem; }
  .lista-produto a svg { display: none; }
  .lista-produto--destaque { grid-template-columns: 1fr; }
  .lista-produto--destaque .lista-produto__foto { aspect-ratio: 1 / 0.86; min-height: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .lista-vitrine__fundo,
  .lista-vitrine__painel { animation: none; }
  .lista-produto__foto img,
  .lista-produto a,
  .presente-v3__abrir-lista { transition: none; }
}

/* A nota herdava o max-width dos parágrafos do card (267px), então o filete
   morria no meio do painel em vez de atravessá-lo de ponta a ponta. */
.presentes-v3__grade--duplo .presente-v3 .pix__nota { max-width: none; }

/* =======================================================================
   AJUSTE v25 — proporção do monograma
   O CSS vinha do símbolo SVG antigo, que era quadrado (viewBox 0 0 100 100),
   e forçava width = height. O logo real do convite é 1,30:1, então estava
   sendo espremido na horizontal. Agora a altura manda e a largura segue.
   ===================================================================== */
.topo__mono,
.rodape__mono,
.galeria-cheia__mono {
  width: auto;
  max-width: none;
  object-fit: contain;
}
.topo__mono { height: 2.15rem; }
.rodape__mono { height: 3.9rem; }
.galeria-cheia__mono { height: 2.35rem; }

@media (max-width: 1080px) { .topo__mono { height: 1.95rem; } }
@media (max-width: 820px)  { .topo__mono { height: 1.9rem; } }

/* O reset deixa <img> como block, então o `text-align: center` do rodapé não
   centraliza o monograma — ele precisa de margem automática. O SVG anterior
   não expunha isso porque tinha largura fixa. */
.rodape__mono { margin-inline: auto; }

/* =======================================================================
   AJUSTE v26 — respiro do traje e botões de presente de verdade
   ===================================================================== */

/* `.noite-v3 { padding-bottom: 0 }` existia porque o traje antigo trazia o
   próprio padding-block. O bloco enxuto não tem, então o cartão encostava
   na virada de cor para "Onde". */
.noite-v3 { padding-bottom: clamp(4rem, 7vw, 7rem); }
.traje-v3--simples { margin-bottom: 0; }

/* --- Os dois caminhos de presente viram botões reais -------------------
   Antes: um link de 13,6px com 60px de altura e outro de 16px com 44px,
   ambos sem fundo nem borda. Agora dividem a mesma cápsula marsala. */
.presentes-v3__grade--duplo .presente-v3 > a,
.presentes-v3__grade--duplo .presente-v3 .pix__abrir {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  width: fit-content;
  min-height: 48px;
  margin-top: auto;
  padding: 0.85rem 1.6rem;
  border: 1px solid var(--v3-wine);
  border-radius: 999px;
  color: #fffaf6;
  background: var(--v3-wine);
  font-family: var(--body);
  font-size: 0.88rem;
  font-weight: 700;
  letter-spacing: 0.01em;
  line-height: 1;
  text-decoration: none;
  cursor: pointer;
  transition: background 260ms var(--ease), border-color 260ms var(--ease), transform 260ms var(--ease);
}
.presentes-v3__grade--duplo .presente-v3 > a svg,
.presentes-v3__grade--duplo .presente-v3 .pix__abrir svg {
  width: 0.95rem;
  height: 0.95rem;
  flex: 0 0 auto;
}
.presentes-v3__grade--duplo .presente-v3 > a:hover,
.presentes-v3__grade--duplo .presente-v3 .pix__abrir:hover {
  border-color: var(--wine);
  background: var(--wine);
  transform: translateY(-2px);
}
.presentes-v3__grade--duplo .presente-v3 > a:focus-visible,
.presentes-v3__grade--duplo .presente-v3 .pix__abrir:focus-visible {
  outline: 2px solid var(--v3-wine);
  outline-offset: 3px;
}

/* O respiro acima do botão sai do padding (que agora é do próprio botão)
   e passa para o container. */
.pix { padding-top: clamp(1.5rem, 2.4vw, 2.2rem); }
.presentes-v3__grade--duplo .presente-v3 > a { margin-top: auto; }
.presentes-v3__grade--duplo .presente-v3 .pix { margin-top: auto; }

/* =======================================================================
   AJUSTE v27 — o ensaio vira feed em bento
   Sai o carrossel horizontal e o botão "ver o ensaio completo". As fotos
   passam a viver na página, num bento de cinco quadros: um grande quadrado
   abre, duas faixas largas respiram e dois retratos altos seguram o centro.
   As ações (favoritar, comentar, compartilhar) aparecem no hover e são
   reais: o coração guarda a escolha, o balão leva ao campo de recado e o
   compartilhar usa a API nativa do celular.
   ===================================================================== */
.ensaio-v3 { padding-bottom: clamp(4.5rem, 8vw, 8rem); }

.feed {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  grid-template-areas:
    "a a b b"
    "a a c d"
    "e e c d";
  gap: clamp(0.4rem, 0.85vw, 0.8rem);
  margin-top: clamp(2.5rem, 5vw, 4rem);
}

.feed__item {
  position: relative;
  overflow: hidden;
  margin: 0;
  border-radius: clamp(0.65rem, 1.1vw, 1rem);
  background: #e6d5cb;
}
.feed__item--a { grid-area: a; aspect-ratio: 1; }
.feed__item--b { grid-area: b; }
.feed__item--c { grid-area: c; }
.feed__item--d { grid-area: d; }
.feed__item--e { grid-area: e; }

.feed__foto {
  display: block;
  width: 100%;
  height: 100%;
  padding: 0;
  border: 0;
  background: none;
  cursor: zoom-in;
}
.feed__foto picture {
  display: block;
  width: 100%;
  height: 100%;
}
.feed__foto img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 900ms var(--ease), filter 500ms var(--ease);
}
.feed__foto:focus-visible { outline: 2px solid var(--v3-wine); outline-offset: -4px; }

/* Véu discreto só onde as ações aparecem, para não escurecer a foto toda. */
.feed__item::after {
  content: "";
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  height: 42%;
  opacity: 0;
  background: linear-gradient(180deg, rgba(40, 18, 22, 0) 0%, rgba(40, 18, 22, 0.5) 100%);
  transition: opacity 380ms var(--ease);
  pointer-events: none;
}

.feed__acoes {
  position: absolute;
  z-index: 2;
  right: clamp(0.5rem, 1vw, 0.85rem);
  bottom: clamp(0.5rem, 1vw, 0.85rem);
  display: flex;
  gap: 0.35rem;
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 380ms var(--ease), transform 380ms var(--ease);
}

.feed__acao {
  width: 2.15rem;
  height: 2.15rem;
  display: grid;
  place-items: center;
  padding: 0;
  border: 1px solid rgba(255, 250, 246, 0.4);
  border-radius: 50%;
  color: #fffaf6;
  background: rgba(40, 18, 22, 0.34);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  cursor: pointer;
  transition: background 240ms var(--ease), border-color 240ms var(--ease), transform 240ms var(--ease);
}
.feed__acao svg { width: 0.92rem; height: 0.92rem; display: block; }
.feed__acao:hover { border-color: #fffaf6; background: rgba(40, 18, 22, 0.6); transform: translateY(-2px); }
.feed__acao:focus-visible { outline: 2px solid #fffaf6; outline-offset: 2px; }

/* Coração marcado: preenche e ganha o marsala do convite. */
.feed__acao[aria-pressed="true"] {
  border-color: transparent;
  color: #fffaf6;
  background: var(--v3-wine);
}
.feed__acao[aria-pressed="true"] svg { fill: currentColor; }

@media (hover: hover) {
  .feed__item:hover .feed__acoes,
  .feed__item:focus-within .feed__acoes { opacity: 1; transform: none; }
  .feed__item:hover::after,
  .feed__item:focus-within::after { opacity: 1; }
  .feed__item:hover .feed__foto img { transform: scale(1.04); }
}
/* No toque não existe hover: as ações ficam sempre visíveis, discretas. */
@media (hover: none) {
  .feed__acoes { opacity: 1; transform: none; }
  .feed__item::after { opacity: 1; }
}

@media (max-width: 820px) {
  .feed {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    grid-template-areas:
      "a a"
      "b b"
      "c d"
      "e e";
  }
  .feed__item--b, .feed__item--e { aspect-ratio: 16 / 10; }
  .feed__item--c, .feed__item--d { aspect-ratio: 3 / 4; }
  .feed__acao { width: 2rem; height: 2rem; }
}

@media (prefers-reduced-motion: reduce) {
  .feed__foto img, .feed__acoes, .feed__item::after, .feed__acao { transition: none; }
}

/* =======================================================================
   AJUSTE v28 — visualizador de foto (o que faltava do feed)
   O feed já estava no ar sem comportamento: clicar na foto não fazia nada.
   Aqui entra a peça que faltava — a foto ampliada sobre um véu ameixa
   profundo, para a imagem dominar, com anterior/próxima e contador.
   ===================================================================== */
.lightbox {
  position: fixed;
  z-index: 400;
  inset: 0;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: clamp(0.5rem, 2vw, 1.75rem);
  padding: clamp(3.5rem, 7vw, 5rem) clamp(0.75rem, 2.5vw, 2.5rem);
}
.lightbox[hidden] { display: none; }

.lightbox__fundo {
  position: absolute;
  inset: 0;
  background: rgba(28, 11, 14, 0.93);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  animation: lbFundo 300ms var(--ease) both;
}
@keyframes lbFundo { from { opacity: 0 } to { opacity: 1 } }

.lightbox__palco {
  position: relative;
  z-index: 1;
  grid-column: 2;
  display: grid;
  place-items: center;
  margin: 0;
  min-width: 0;
  height: 100%;
}
.lightbox__palco img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
  border-radius: clamp(0.4rem, 0.8vw, 0.7rem);
  box-shadow: 0 30px 90px rgba(0, 0, 0, 0.45);
  animation: lbFoto 340ms var(--ease) both;
}
@keyframes lbFoto {
  from { opacity: 0; transform: scale(0.97) }
  to   { opacity: 1; transform: none }
}

/* --- Controles --------------------------------------------------------- */
.lightbox__fechar,
.lightbox__nav {
  position: relative;
  z-index: 2;
  display: grid;
  place-items: center;
  padding: 0;
  border: 1px solid rgba(255, 250, 246, 0.34);
  border-radius: 50%;
  color: #fffaf6;
  background: rgba(255, 250, 246, 0.08);
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
  cursor: pointer;
  transition: background 240ms var(--ease), border-color 240ms var(--ease), transform 240ms var(--ease);
}
.lightbox__fechar:hover,
.lightbox__nav:hover {
  border-color: #fffaf6;
  background: rgba(255, 250, 246, 0.2);
}
.lightbox__fechar:focus-visible,
.lightbox__nav:focus-visible { outline: 2px solid #fffaf6; outline-offset: 3px; }

.lightbox__fechar {
  position: absolute;
  top: clamp(0.9rem, 2vw, 1.6rem);
  right: clamp(0.9rem, 2vw, 1.6rem);
  width: 2.9rem;
  height: 2.9rem;
}
.lightbox__fechar svg { width: 1.15rem; height: 1.15rem; }

.lightbox__nav { width: 3.1rem; height: 3.1rem; }
.lightbox__nav svg { width: 1.2rem; height: 1.2rem; }
.lightbox__nav--ant { grid-column: 1; }
.lightbox__nav--ant svg { transform: rotate(180deg); }
.lightbox__nav--prox { grid-column: 3; }
.lightbox__nav:hover { transform: translateY(-2px); }

.lightbox__contador {
  position: absolute;
  z-index: 2;
  bottom: clamp(1rem, 2.4vw, 1.9rem);
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 0.4rem;
  margin: 0;
  color: rgba(255, 250, 246, 0.72);
  font-family: var(--body);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  font-variant-numeric: tabular-nums;
}
.lightbox__contador b { color: #fffaf6; font-weight: 700; }

html.lightbox-aberto,
html.lightbox-aberto body { overflow: hidden; }

@media (max-width: 720px) {
  .lightbox {
    grid-template-columns: minmax(0, 1fr);
    padding: 4.5rem 0.75rem 5.5rem;
  }
  .lightbox__palco { grid-column: 1; }
  .lightbox__nav {
    position: absolute;
    bottom: clamp(0.9rem, 3vw, 1.4rem);
    width: 2.85rem;
    height: 2.85rem;
  }
  .lightbox__nav--ant { left: 22%; }
  .lightbox__nav--prox { right: 22%; }
}

@media (prefers-reduced-motion: reduce) {
  .lightbox__fundo, .lightbox__palco img { animation: none; }
  .lightbox__fechar, .lightbox__nav { transition: none; }
}

/* A linha do grid era implícita (auto), então crescia até a altura natural
   da foto: com retrato, a imagem estourava a tela e empurrava as setas para
   fora do centro. Fixando a linha na altura disponível, o `max-height: 100%`
   da imagem passa a ter contra o que resolver. */
.lightbox { grid-template-rows: minmax(0, 1fr); }
.lightbox__palco { min-height: 0; max-height: 100%; }
.lightbox__palco img { max-height: 100%; min-height: 0; }

/* =======================================================================
   DICAS DE PRESENTE
   Uma pausa editorial curta: orientações diretas, sem galeria de produtos.
   ===================================================================== */
.dicas-presentes {
  position: fixed;
  z-index: 400;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(0.75rem, 2vw, 1.5rem);
}
.dicas-presentes[hidden] { display: none; }
.dicas-presentes__fundo {
  position: absolute;
  inset: 0;
  background: rgba(43, 22, 29, 0.48);
  -webkit-backdrop-filter: blur(7px);
  backdrop-filter: blur(7px);
  animation: dicasPresentesFundo 300ms var(--ease) both;
}
.dicas-presentes__painel {
  position: relative;
  z-index: 1;
  width: min(100%, 47rem);
  max-height: min(43rem, calc(100dvh - 3rem));
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: 1px solid rgba(81, 39, 51, 0.14);
  border-radius: 1.5rem;
  background: #f8f3ee;
  box-shadow: 0 34px 100px rgba(43, 22, 29, 0.34);
  animation: dicasPresentesPainel 380ms var(--ease) both;
}
@keyframes dicasPresentesFundo { from { opacity: 0; } to { opacity: 1; } }
@keyframes dicasPresentesPainel { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }

.dicas-presentes__topo {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: clamp(1rem, 2.3vw, 1.45rem) clamp(1.1rem, 3.2vw, 2rem);
  border-bottom: 1px solid rgba(55, 26, 35, 0.1);
}
.dicas-presentes__marca {
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 0.8rem;
}
.dicas-presentes__marca img {
  width: auto;
  height: 2.2rem;
  object-fit: contain;
}
.dicas-presentes__marca h2 {
  margin: 0;
  color: var(--v3-ink);
  font-family: var(--display);
  font-size: clamp(1.45rem, 3vw, 2rem);
  font-weight: 400;
  line-height: 0.95;
}
.dicas-presentes__fechar {
  width: 2.65rem;
  height: 2.65rem;
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  border: 1px solid rgba(92, 39, 52, 0.18);
  border-radius: 50%;
  color: var(--v3-wine);
  background: transparent;
  cursor: pointer;
  transition: background 220ms var(--ease), color 220ms var(--ease), transform 220ms var(--ease);
}
.dicas-presentes__fechar svg { width: 1rem; height: 1rem; }
.dicas-presentes__fechar:hover { color: #fffaf6; background: var(--v3-wine); transform: rotate(4deg); }
.dicas-presentes__fechar:focus-visible,
.dica-zara a:focus-visible { outline: 2px solid var(--v3-wine); outline-offset: 3px; }

.dicas-presentes__corpo {
  display: grid;
  gap: clamp(1rem, 2vw, 1.4rem);
  overflow: auto;
  padding: clamp(1.2rem, 3.5vw, 2.35rem);
}
.dica-zara {
  padding: clamp(1.25rem, 3.2vw, 2rem);
  border: 1px solid rgba(106, 51, 64, 0.16);
  border-radius: 1rem;
  background: #ead8d2;
}
.dica-zara__sobretitulo {
  margin: 0 0 0.35rem;
  color: #8c626c;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.13em;
  text-transform: uppercase;
}
.dica-zara h3 {
  margin: 0;
  color: var(--v3-ink);
  font-family: var(--display);
  font-size: clamp(2rem, 5vw, 2.85rem);
  font-weight: 400;
  line-height: 0.9;
}
.dica-zara > p:not(.dica-zara__sobretitulo) {
  max-width: 28rem;
  margin: 0.85rem 0 1.15rem;
  color: #5d4147;
  font-size: 0.95rem;
  line-height: 1.55;
}
.dica-zara a {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  min-height: 2.7rem;
  padding: 0.65rem 1rem;
  border-radius: 999px;
  color: #fffaf6;
  background: var(--v3-wine);
  font-size: 0.82rem;
  font-weight: 700;
  text-decoration: none;
  transition: background 220ms var(--ease), transform 220ms var(--ease);
}
.dica-zara a svg { width: 0.9rem; height: 0.9rem; }
.dica-zara a:hover { background: var(--wine); transform: translateY(-2px); }

.dicas-medidas {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0;
  margin: 0;
  border-top: 1px solid rgba(80, 42, 50, 0.16);
  border-left: 1px solid rgba(80, 42, 50, 0.16);
}
.dicas-medidas > div {
  min-height: 7.65rem;
  padding: 1.15rem 1.05rem;
  border-right: 1px solid rgba(80, 42, 50, 0.16);
  border-bottom: 1px solid rgba(80, 42, 50, 0.16);
}
.dicas-medidas dt {
  margin-bottom: 0.4rem;
  color: var(--v3-wine);
  font-family: var(--display);
  font-size: 1.5rem;
  line-height: 1;
}
.dicas-medidas dd {
  margin: 0;
  color: #654a50;
  font-size: 0.87rem;
  line-height: 1.48;
}
html.dicas-presentes-aberta,
html.dicas-presentes-aberta body { overflow: hidden; }

@media (max-width: 560px) {
  .dicas-presentes { padding: 0; }
  .dicas-presentes__painel {
    width: 100%;
    max-height: none;
    min-height: 100dvh;
    border: 0;
    border-radius: 0;
  }
  .dicas-presentes__marca img { height: 1.9rem; }
  .dicas-presentes__marca h2 { font-size: 1.45rem; }
  .dicas-medidas { grid-template-columns: 1fr; }
  .dicas-medidas > div { min-height: auto; }
}

@media (prefers-reduced-motion: reduce) {
  .dicas-presentes__fundo,
  .dicas-presentes__painel { animation: none; }
  .dicas-presentes__fechar,
  .dica-zara a { transition: none; }
}

/* Contraste e ritmo da curadoria de presentes. As cores são explícitas para
   não depender de uma variável ausente em versões anteriores do convite. */
.dicas-presentes__marca h2 { color: #41151d; }
.dica-zara {
  position: relative;
  overflow: hidden;
  border-color: #cfaaa5;
  background: linear-gradient(125deg, #efd9d3 0%, #e7c9c5 100%);
}
.dica-zara::after {
  content: "Z";
  position: absolute;
  right: 1.4rem;
  bottom: -1.9rem;
  color: rgba(94, 20, 24, 0.08);
  font-family: var(--display);
  font-size: 9.5rem;
  line-height: 1;
  pointer-events: none;
}
.dica-zara > * { position: relative; z-index: 1; }
.dica-zara h3 { color: #4a1013; }
.dica-zara > p:not(.dica-zara__sobretitulo) { color: #4d393d; font-weight: 500; }
.dica-zara__sobretitulo { color: #6f353d; }
.dicas-medidas { gap: 0.75rem; border: 0; }
.dicas-medidas > div {
  min-height: 8.2rem;
  padding: 1.35rem 1.25rem;
  border: 1px solid #dfc8c3;
  border-radius: 0.85rem;
  background: #fffaf7;
}
.dicas-medidas > div:nth-child(2) { background: #f7e9e4; }
.dicas-medidas > div:nth-child(3) { background: #f2ded9; }
.dicas-medidas > div:nth-child(4) { background: #ead2d1; }
.dicas-medidas dt { color: #58151d; font-size: 1.65rem; }
.dicas-medidas dd { color: #4f3a3e; font-weight: 500; }
@media (max-width: 560px) { .dicas-medidas { gap: 0.65rem; } }

/* Presentes mobile: um ritmo único substitui as margens automáticas que
   comprimiam título, descrição e ação em versões pequenas. */
@media (max-width: 560px) {
  .presentes-v3 { padding-block: 5.35rem 6.25rem; }
  .presentes-v3 .capitulo__cabeca { margin-bottom: 3rem; }
  .presentes-v3__grade--duplo { gap: 1.45rem; margin-top: 0; }
  .presentes-v3__grade--duplo .presente-v3--lista,
  .presentes-v3__grade--duplo .presente-v3--viagem {
    min-height: 0;
    padding: 1.9rem 1.75rem 1.85rem;
    border-radius: 1.7rem;
  }
  .presentes-v3__grade--duplo .presente-v3 h3 {
    font-size: clamp(3.15rem, 14vw, 3.75rem);
    line-height: 0.9;
  }
  .presentes-v3__grade--duplo .presente-v3 p {
    margin-top: 1.75rem;
    line-height: 1.62;
  }
  .presentes-v3__grade--duplo .presente-v3 .presente-v3__abrir-dicas {
    margin-top: 2.05rem;
    align-self: flex-start;
  }
  .presentes-v3__grade--duplo .presente-v3--viagem .pix {
    margin-top: 2.15rem;
    padding-top: 0;
  }
  .presentes-v3__grade--duplo .presente-v3--viagem .pix__abrir {
    margin-top: 0;
  }
}

/* Vitrine: a fotografia encosta no próprio quadro, sem uma segunda moldura
   clara dentro do card. Os PNGs de skincare recebem corte por produto para
   que a embalagem tenha presença equivalente às demais peças. */
.lista-produto__foto {
  padding: 0;
  border-bottom: 1px solid #f0e5df;
  background: #fff;
}
.lista-produto__foto img[src$="petrizi-po.png"] { transform: scale(2.65); transform-origin: 50% 34%; }
.lista-produto__foto img[src$="principia-kit.png"] { transform: scale(3); transform-origin: 50% 32%; }
.lista-produto__foto img[src$="principia-gl01.png"] { transform: scale(3); transform-origin: 50% 31%; }
.lista-produto__foto img[src$="cicaplast.png"] { transform: scale(2.8); transform-origin: 50% 30%; }
.lista-produto__foto img[src$="simple-niacinamida.png"] { transform: none; }
@media (hover: hover) {
  .lista-produto:hover .lista-produto__foto img[src$="petrizi-po.png"] { transform: scale(2.73); }
  .lista-produto:hover .lista-produto__foto img[src$="principia-kit.png"] { transform: scale(3.08); }
  .lista-produto:hover .lista-produto__foto img[src$="principia-gl01.png"] { transform: scale(3.08); }
  .lista-produto:hover .lista-produto__foto img[src$="cicaplast.png"] { transform: scale(2.88); }
  .lista-produto:hover .lista-produto__foto img[src$="simple-niacinamida.png"] { transform: scale(1.035); }
}

/* =======================================================================
   AJUSTE v29 — convite sem a fotografia
   O respiro entre o título e o texto fora calibrado para vir depois da
   imagem. Sem ela, sobrava um vão de 158px que lia como buraco.
   ===================================================================== */
.convite__texto { margin-top: clamp(1.75rem, 2.6vw, 2.5rem); }

/* O grande responsável pelo vão era o margin-bottom do título (até 7rem),
   dimensionado para abrir espaço antes da fotografia. */
.convite__frase { margin-bottom: clamp(2.25rem, 3.4vw, 3.25rem); }

/* =======================================================================
   AJUSTE v30 — o monograma abre o capítulo
   Os três cards de Data/Horário/Local flutuam sobre a borda da seção, então
   o padding superior precisa liberá-los — o vão de 177px que sobrava não era
   erro, era espaço reservado. Em vez de apertar (o que empurraria os cards
   sobre o título), o monograma do convite impresso ocupa esse espaço, com um
   filete conduzindo o olho até a frase de abertura.
   ===================================================================== */
.convite__selo {
  grid-column: 1 / -1;
  display: grid;
  justify-items: center;
  gap: clamp(0.9rem, 1.6vw, 1.35rem);
  margin-bottom: clamp(1.4rem, 2.4vw, 2.1rem);
}

.convite__mono {
  height: clamp(3rem, 4.4vw, 4rem);
  width: auto;
  display: block;
  object-fit: contain;
}

/* O filete nasce no monograma e some antes do título: conduz sem dividir. */
.convite__fio {
  width: 1px;
  height: clamp(2.25rem, 4.6vw, 4rem);
  display: block;
  background: linear-gradient(
    180deg,
    rgba(168, 133, 74, 0.62) 0%,
    rgba(168, 133, 74, 0.28) 55%,
    rgba(168, 133, 74, 0) 100%
  );
}

@media (max-width: 820px) {
  .convite__selo {
    gap: 0.75rem;
    margin-bottom: 1.15rem;
  }
  .convite__mono { height: 2.6rem; }
  .convite__fio { height: 1.9rem; }
}

/* Com o selo ocupando o espaço, o padding que reservava o vão vazio passa a
   somar em vez de ceder lugar: a seção crescia 177px. Reduzido na medida em
   que o monograma e o filete entram. */
.convite { padding-top: clamp(2.75rem, 3.6vw, 3.75rem); }

@media (max-width: 820px) {
  .convite { padding-top: clamp(1.75rem, 5vw, 2.5rem); }
}

/* =======================================================================
   AJUSTE v31 — monograma mais próximo dos cards
   ===================================================================== */
.convite { padding-top: clamp(1.75rem, 2.2vw, 2.25rem); }

@media (max-width: 820px) {
  .convite { padding-top: clamp(1.1rem, 3.2vw, 1.6rem); }
}
