/* ===================================================================
   BASE.CSS — folha COMPARTILHADA pelas landing pages da Fazenda
   Fazenda dos Cordeiros - 03/08/2026

   Uma alteracao aqui reflete nas TRES LPs (e nas proximas). Extraida da
   folha da A Gosto de Caminhar, que era a mais completa e virou a
   referencia-mae de padrao visual e de secoes.

   O QUE VIVE AQUI: paleta, tipografia, botoes, cabecalho, menu mobile,
   hero, secao do evento, cards de programacao, faixa tematica (.walk),
   tarifas, "o que esta incluido", galeria + lightbox, depoimentos, FAQ,
   CTA final, rodape, banner de cookies, reveal e as media queries.

   O QUE NAO VIVE AQUI: nada que seja de UMA pagina so. Componentes
   exclusivos ficam na folha da propria LP, carregada DEPOIS desta — por
   isso um override de la sempre vence.

   O widget "Fale com nossa equipe" tem folha propria (wa-widget.css),
   porque ja era compartilhado antes desta extracao.
   =================================================================== */

/* ============ 1. VARIÁVEIS & RESET ============ */
:root {
  /* ARRANJO A — papéis normais, alinhados à LP principal (31/07/2026)
       · ESTRUTURA (cabeçalho, rodapé, faixas, CTA) = VERDE  #00491D
       · AÇÃO/ACENTO (botões, filetes, detalhes)    = TERRACOTA #A25641

     Este bloco foi revertido do ARRANJO B (teste de 30/07/2026, que invertia
     os dois papéis e usava botão dourado) ao unificar as três LPs em um site
     só: as páginas dividem cabeçalho, rodapé e navegação, e duas paletas
     opostas no mesmo site brigavam entre si. Os comentários de cada token
     abaixo voltaram a bater com o que o token guarda.
     O mapa dos dois arranjos segue em PALETA.md (projeto
     fazenda-agosto-caminhar) — para retomar o arranjo B, é de lá que se parte.
     Os tokens agora são idênticos aos de assets/css/style.css e
     cafe-com-orquideas.css: mexer nos três juntos, senão o site diverge. */
  /* ===== BRAND KIT OFICIAL (Lao Martins) — cores do site institucional ===== */
  --c-forest:     #00491D;   /* verde principal oficial */
  --c-forest-dk:  #00330F;   /* hover/pressed do verde */
  --c-forest-soft:#1A6B39;   /* verde mais claro p/ bordas/detalhes */
  --c-terra:      #A25641;   /* primária/acento oficial (substitui o antigo terracota) */
  --c-terra-dk:   #7D4030;   /* hover do acento */
  --c-terra-lt:   #E9A184;   /* clareado do acento — só p/ acento SOBRE fundo escuro
                                (hero/selo), onde o #A25641 não atinge contraste AA */
  --c-text:       #0E0E0E;   /* texto do corpo (quase-preto oficial) */

  /* ===== BOTÕES = VERDE DA MARCA =====
     No arranjo B (30/07/2026) o preenchimento era dourado #ffd766, com rótulo
     em --c-text e borda própria porque dourado sobre creme quase não se
     destaca. Ao unificar o site, o botão voltou ao verde institucional, que é
     o mesmo das outras duas páginas — rótulo branco, 10,4:1 medido.
     O #ffd766 segue na folha como ACENTO (eyebrow do hero, schedule-weekday,
     CTA final, assinatura do rodapé); só deixou de preencher botão. */
  --c-btn:        #00491D;   /* preenchimento dos botões = verde institucional */
  --c-btn-dk:     #00330F;   /* hover dos botões */

  /* Blocos escuros / rodapé — derivados do verde profundo #00491D */
  --c-ink:        #013A17;   /* fundos escuros (walk, groups, testemunhos) */
  --c-ink-soft:   #075026;   /* cartões/realces sobre o escuro */
  --c-footer:     #012A10;   /* rodapé — o verde mais profundo */

  /* ===== FUNDO: OFF-WHITE #FAF7F3 =====
     Confirmado pelo cliente em 03/08/2026. Entra como token PROPRIO
     (--c-bg) em vez de sobrescrever --c-cream: o creme #f7f4ea continua
     servindo superficies de componente (botao sobre faixa escura, cartoes),
     e trocar os dois de uma vez achataria essa distincao.
     So o body usa --c-bg. */
  --c-bg:         #FAF7F3;   /* fundo da pagina */
  --c-cream:      #f7f4ea;   /* fundo claro institucional */
  --c-bege:       #ebe4d2;   /* bege do kit — botão sobre faixa escura */
  --c-sand:       #ebe4d2;   /* destaque suave / superfície secundária */
  --c-muted:      #5a5648;   /* texto secundário */
  --c-line:       #ddd6c2;   /* bordas */
  --c-white:      #ffffff;
  --c-wa:         #25d366;   /* verde WhatsApp (funcional, mantido) */

  /* ===== WHATSAPP — botão flutuante + widget de captação =====
     Tokens portados do Solar Dona Dora. Ficam fora da paleta institucional de
     propósito: verde-WhatsApp e lilás não pertencem à identidade da fazenda,
     são cores FUNCIONAIS do componente de chat (o usuário reconhece o canal
     por elas). Uma só fonte de verdade para a distância até a base, para que
     botão e widget subam juntos se um dia precisarem. */
  --wa-bottom: 22px; --wa-side: 22px; --wa-size: 56px;
  --wa-green: #25D366;        /* verde oficial do WhatsApp */
  --wa-green-dark: #12793F;   /* cabeçalho do widget */
  --wa-green-rgb: 37, 211, 102;
  --wa-bubble: #E8DDF0;       /* lilás claro do balão de saudação */
  --wa-border: rgba(26,26,26,.12);

  /* ===== TIPOGRAFIA: Bree Serif (titulos) + Poppins (corpo) =====
     Confirmada pelo cliente em 03/08/2026, valendo para as TRES LPs de uma
     vez. Era a identidade da versao standalone desta pagina, antes da
     unificacao de 31/07 ter normalizado tudo para PT Serif.
     ATENCAO ao historico: os commits de 29/07 chamam a PT Serif de "fonte
     oficial do brand kit (Lao Martins)". Esta troca reverte aquela decisao
     de propria escolha do cliente — se o brand kit voltar a valer, e este
     bloco (mais o <link> das fontes no <head> das LPs) que se desfaz.
     A Bree Serif so tem peso 400: titulos nao levam font-weight 700, senao o
     navegador sintetiza o negrito. O peso vem da Poppins, no corpo. */
  --font-serif: 'Bree Serif', Georgia, serif;
  --font-sans:  'Poppins', system-ui, -apple-system, 'Segoe UI', sans-serif;

  --container: 1240px;
  --radius: 4px;
  --header-h: 78px;
  --ease: cubic-bezier(.22,.61,.36,1);
  /* Respiro vertical uniforme entre seções (mobile ~64px; desktop ~112px abaixo) */
  --section-gap: 4rem;
}
@media (min-width: 768px) { :root { --section-gap: 7rem; } }

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

html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }

body {
  font-family: var(--font-sans);
  font-weight: 400;
  color: var(--c-text);
  background: var(--c-bg);
  line-height: 1.7;
  overflow-x: hidden;
  font-size: 17px;
}

img, iframe { display: block; max-width: 100%; }
img { height: auto; }
ul { list-style: none; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; border: none; background: none; color: inherit; }

/* ============ 2. TIPOGRAFIA & UTILITÁRIOS ============ */
/* Títulos herdam a cor do contexto: escuro (--c-text) nas seções claras,
   branco nas seções escuras (walk/cta-final/footer definem color:#fff). */
h1, h2, h3, h4 { font-family: var(--font-serif); font-weight: 400; line-height: 1.2; }
/* O 400 acima é o peso FINAL dos títulos, não um valor de partida: a Bree
   Serif só tem esse peso. h3 já teve um override em 600 e a folha já teve um
   bloco no fim forçando 700 — os dois produziam negrito sintetizado e foram
   removidos. Ver o bloco 21, no fim desta folha. */

.container { width: 100%; max-width: var(--container); margin: 0 auto; padding: 0 22px; }

.eyebrow {
  font-family: var(--font-sans);
  font-weight: 700;
  /* .72rem (11,5px) era pequeno demais: a linha de contexto que abre cada
     seção — "Galeria", "Programação", "Agenda 2026" — quase não se lia, e ela
     é justamente o que diz ao leitor ONDE ele está na página. O contraste já
     estava ótimo (9,7:1 medido); o problema era só o corpo.
     Subiu em três passos, a pedido: .72rem -> .85rem -> 1rem -> 1.15rem
     (11,5px -> 18,4px, +60%). A 1.15rem ele passa o .section-lead (16,8px), o
     que é incomum para um sobretítulo — mas é deliberado: estes rótulos são a
     única sinalização de ONDE a pessoa está numa página longa, e a queixa
     recorrente era não conseguir vê-los. Continua a 38% do h2 (48px), então a
     hierarquia com o título se mantém folgada.
     ⚠ Vale para as TRÊS páginas — é o eyebrow de todas as seções, não só o da
     galeria. Foi de propósito: a queixa era de legibilidade, e ela não é de uma
     seção só. */
  font-size: 1.15rem;
  /* Sem caixa-alta e sem tracking decorativo — igual ao .eyebrow da LP-agenda
     (commit bba8de6 de lá). Era .28em + uppercase. */
  letter-spacing: normal;
  color: var(--c-terra);
  margin-bottom: 1rem;
}
/* .eyebrow--forest REMOVIDO em 03/08/2026.
   Era o modificador que pintava de VERDE (--c-forest) os rótulos de seção
   sobre fundo claro, enquanto os demais ficavam no terracota (--c-terra) do
   .eyebrow. Na prática isso dava DUAS cores para a mesma coisa na mesma
   página: "Galeria" e "Programação" saíam verdes, "Agenda 2026" e
   "Exposição · só nesta edição" saíam terracota — sem que a diferença
   comunicasse nada, era só herança de duas LPs que cresceram separadas.
   Agora todos os rótulos usam o terracota do .eyebrow, que é a cor de acento
   da marca. A classe saiu do HTML das três páginas e do _template.
   Se um dia precisar de um rótulo verde, crie um modificador com nome que
   diga o PAPEL (ex.: .eyebrow--sobre-escuro), não a cor. */

/* EXCEÇÃO: o eyebrow do HERO fica no corpo antigo (.72rem).
   Ele não é um rótulo curto como os das seções ("Galeria", "Agenda 2026") — é
   uma linha de contexto longa: "Fazenda dos Cordeiros · Silva Jardim, RJ · a
   90 km do Rio". Medido a 390px de largura, com 331px disponíveis:
     .72rem …… 1 linha   ← cabe
     .85rem …… 2 linhas
     1rem   …… 2 linhas
   Em duas linhas ele vira um parágrafo em miniatura no topo do hero, come
   altura justo onde ela é escassa no mobile, e briga com o título logo abaixo.
   Se um dia esse texto encurtar, esta exceção pode sair. */
.hero .eyebrow { font-size: .72rem; }

.section-head { text-align: center; max-width: 680px; margin: 0 auto 3rem; }
/* text-wrap:balance (04/08/2026) — o título centrado quebrava com a última
   palavra órfã na segunda linha. O caso que motivou foi "Sábado e domingo, no
   ritmo da fazenda" na LP da trilha: 37 caracteres contra os 680px do
   .section-head davam "…no ritmo da / fazenda". O balance distribui as
   palavras entre as linhas em vez de encher a primeira até o limite:
     antes  → "Sábado e domingo, no ritmo da" / "fazenda"
     depois → "Sábado e domingo," / "no ritmo da fazenda"
   Não muda fonte, tamanho nem o texto — só onde a linha corta. Em navegador
   sem suporte (Chrome <114, Safari <17.5) a declaração é ignorada e o título
   volta a quebrar como antes: degrada sozinho, sem fallback.
   Vale para TODOS os títulos de seção das três páginas, de propósito — é o
   mesmo componente, e o problema é do formato centrado, não daquele título. */
.section-head h2 { font-size: clamp(2rem, 6vw, 3rem); text-wrap: balance; }
.section-lead { color: var(--c-muted); margin-top: 1rem; font-size: 1.05rem; }

/* Data do evento em verde, sempre que aparecer sobre fundo CLARO (creme/branco).
   Pedido do Cauã em 30/07/2026. Não usar sobre os fundos verdes da página — o
   cabeçalho dos cards de programação e a faixa do CTA final — onde verde sobre
   verde some; nesses dois lugares a data segue branca e dourada, respectivamente. */
.data-evento { color: var(--c-forest); font-weight: 700; }

/* Acessibilidade: skip link */
.skip-link {
  position: absolute; left: -999px; top: 0; z-index: 2000;
  background: var(--c-forest); color: var(--c-white);
  padding: .8rem 1.4rem; font-size: .85rem;
}
.skip-link:focus { left: 12px; top: 12px; }

/* Foco visível global */
a:focus-visible, button:focus-visible, input:focus-visible,
select:focus-visible, textarea:focus-visible {
  outline: 2px solid var(--c-forest);
  outline-offset: 3px;
}

/* ============ 3. BOTÕES & LINKS ============
   Animações: brilho que varre no hover (sheen), elevação com sombra colorida,
   "tremidinha" do ícone e resposta tátil no clique. Tudo via transition/
   animation — o bloco global de prefers-reduced-motion desativa sozinho. */
.btn {
  position: relative; overflow: hidden;
  display: inline-flex; align-items: center; justify-content: center; gap: .6rem;
  padding: 1rem 2.1rem;
  font-family: var(--font-sans);
  font-weight: 700; font-size: .82rem;
  /* Rótulo em caixa normal, como os botões da LP-agenda. Era .16em + uppercase. */
  letter-spacing: normal;
  border-radius: var(--radius);
  transition: transform .35s var(--ease), box-shadow .35s var(--ease),
              background-color .35s var(--ease), background-size .45s var(--ease),
              color .35s var(--ease), border-color .35s var(--ease), filter .35s var(--ease);
  border: 1px solid transparent;
  /* Mobile-first: texto pode quebrar (nowrap estourava a viewport em 375px —
     o rótulo longo alargava o track do grid em "Escolas e grupos") */
  white-space: normal; text-align: center;
}

/* Sheen: faixa de luz que atravessa o botão uma vez por hover */
.btn::after, .nav-cta::after {
  content: ""; position: absolute; top: -4px; bottom: -4px; left: -45%; width: 38%;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,.45), transparent);
  transform: skewX(-18deg);
  opacity: 0; pointer-events: none;
}
.btn:hover::after, .nav-cta:hover::after { animation: btnSheen .85s var(--ease); }
@keyframes btnSheen {
  0%   { transform: translateX(0) skewX(-18deg); opacity: 0; }
  15%  { opacity: 1; }
  100% { transform: translateX(440%) skewX(-18deg); opacity: 0; }
}

/* Ícone acena no hover */
.btn:hover .ic { animation: icWiggle .55s var(--ease); }
@keyframes icWiggle {
  0%, 100% { transform: rotate(0) scale(1); }
  30%      { transform: rotate(-12deg) scale(1.15); }
  65%      { transform: rotate(8deg) scale(1.08); }
}

/* Clique: afunda de leve — resposta tátil imediata */
.btn:active, .nav-cta:active {
  transform: translateY(0) scale(.97);
  transition-duration: .1s;
}

/* ---- BOTÕES ----
   Idênticos aos das outras duas páginas do site desde 31/07/2026: o que a
   classe pinta aqui é exatamente o que ela pinta em style.css e em
   cafe-com-orquideas.css. Mexer nos três juntos.

   No arranjo B (30/07) todos os botões desta página eram DOURADOS, e por isso
   --green e --terra guardavam outras cores e carregavam uma borda extra para
   se destacarem do fundo claro. Com a volta ao arranjo A, os nomes voltaram a
   bater com o que pintam e a borda saiu. */
.btn--green { background: var(--c-forest); color: var(--c-white); }
.btn--green:hover {
  background: var(--c-forest-dk); transform: translateY(-3px);
  box-shadow: 0 12px 26px -10px rgba(36,64,42,.6);
}
/* Outline: o verde sobe preenchendo o botão (fill deslizante) */
.btn--outline-green {
  background-image: linear-gradient(var(--c-forest), var(--c-forest));
  background-repeat: no-repeat; background-size: 100% 0; background-position: 0 100%;
  color: var(--c-forest); border-color: var(--c-forest);
}
.btn--outline-green:hover {
  background-size: 100% 100%; color: var(--c-white); transform: translateY(-3px);
  box-shadow: 0 12px 26px -10px rgba(0,73,29,.45);
}
/* Botão BEGE — para uso SOBRE as faixas escuras (hoje só o "Garantir minha
   vaga" da seção da trilha). Numa faixa escura, um botão de cor cheia da marca
   compete com o fundo; o claro separa na hora.
   Usa o BEGE institucional (--c-bege), não o off-white do fundo: sobre o
   terracota, o #FAF7F3 lia como branco, e a marca tem um bege próprio.
   Rótulo em --c-text: bege é claro demais para sustentar texto branco. */
/* CREME — para botão sobre faixa escura (.walk, .cta-final). O #ebe4d2 é o bege
   do brand kit; sobre o verde --c-ink o rótulo em --c-text mede 13:1.
   Os três CSS têm este bloco idêntico desde 31/07/2026 — antes a principal e a
   do Café com Orquídeas usavam branco puro com rótulo verde, e só a de Agosto
   era creme. Mexer nos três juntos. */
.btn--light {
  background: var(--c-sand); color: var(--c-text);
  box-shadow: 0 8px 22px -8px rgba(0,0,0,.5);
}
.btn--light:hover {
  background: var(--c-cream); color: var(--c-text); transform: translateY(-3px);
  box-shadow: 0 16px 34px -10px rgba(0,0,0,.55);
}
/* Ghost: vive SOBRE a foto do hero, onde o fundo é escuro — aqui o dourado
   pode ser o próprio texto (9:1 contra o scrim), sem precisar de fundo. */
.btn--ghost { background: transparent; color: var(--c-white); border-color: rgba(255,255,255,.6); }
.btn--ghost:hover {
  background: rgba(255,255,255,.14); border-color: #fff; transform: translateY(-3px);
  box-shadow: 0 10px 24px -12px rgba(0,0,0,.5);
}
/* ⚠ VERDE, NÃO DOURADO — e é decisão, não esquecimento.
   Este botão e os outros dois do canal (.wa-submit e .wa-fab, hoje em
   assets/css/wa-widget.css) usam o verde OFICIAL do WhatsApp. É a cor pela qual o
   usuário reconhece o canal antes de ler o rótulo; dourada, a ação vira "mais
   um botão do site" e perde o atalho de reconhecimento. É também o padrão da
   Solar Dona Dora, que esta LP segue. */
.btn--wa { background: var(--c-wa); color: #06351a; }
.btn--wa:hover {
  filter: brightness(1.05); transform: translateY(-3px);
  box-shadow: 0 14px 30px -10px rgba(37,211,102,.6);
}
/* Era .btn--wa .ic. Virou .btn .ic quando o CTA final trocou o verde pelo bege
   (.btn--light): o ícone do WhatsApp continua ali e precisava seguir dimensionado
   fora da classe verde. `fill: currentColor` faz o ícone herdar a cor do rótulo
   — verde-escuro no botão verde, --c-text no bege. */
.btn .ic { width: 20px; height: 20px; fill: currentColor; }
/* Antes terracota; dourado desde 30/07/2026. Vive sobre a foto do hero e sobre
   a faixa escura da trilha — daí manter a sombra, que separa o botão do fundo. */
/* Terracota e sem borda, igual ao .btn--terra das outras duas folhas. Estava
   em var(--c-btn) (verde) com contorno: sobra do arranjo B, quando o botão era
   dourado e precisava de limite visível sobre o fundo claro. */
.btn--terra {
  background: var(--c-terra); color: #fff;
  box-shadow: 0 8px 22px -8px rgba(0,0,0,.5);
}
.btn--terra:hover {
  background: var(--c-terra-dk); color: #fff; transform: translateY(-3px);
  box-shadow: 0 16px 34px -10px rgba(0,0,0,.55);
}
.btn--block { width: 100%; white-space: normal; }
.btn--lg { padding: 1.15rem 2.6rem; font-size: .9rem; }
.btn--sm { padding: .65rem 1.3rem; font-size: .74rem; }

/* ============ 4. PLACEHOLDERS DE FOTO (padrão Morada) ============ */
/* Blocos neutros até as fotos reais — nenhuma imagem de banco ou IA. */
.ph {
  position: relative;
  background:
    repeating-linear-gradient(45deg,
      rgba(162,86,65,.06) 0, rgba(162,86,65,.06) 14px,
      rgba(0,73,29,.08) 14px, rgba(0,73,29,.08) 28px),
    var(--c-sand);
  border: 1px dashed var(--c-line);
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
.ph-label {
  font-size: .72rem; letter-spacing: normal;
  color: var(--c-muted); text-align: center; padding: 1rem;
  max-width: 90%;
}

/* Imagens reais inseridas nos blocos de mídia — cobrem o contêiner sem
   distorcer (object-fit: cover). Convivem com os .ph ainda pendentes. */
.day-media, .hero-bg { position: relative; }
.day-media > picture { position: absolute; inset: 0; }
.hero-bg picture, .day-media picture { display: block; width: 100%; height: 100%; }
.hero-bg img, .day-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.hero-bg { overflow: hidden; }

/* Hero: a foto COBRE o hero inteiro em qualquer proporção (cover), sem barras
   nem emendas de fundo. A panorâmica do vale é 1600x900 — 16:9 exato, a mesma
   proporção do hero em desktop, então praticamente não há corte. */
.hero-bg { background-color: var(--c-ink); background-size: cover; background-position: center; }
.hero-bg > picture { position: relative; z-index: 1; display: block; width: 100%; height: 100%; }
/* brightness em .70 (era .82, baixado em 10/08/2026 a pedido do cliente): o
   .82 servia a uma foto de mata fechada, escura por natureza na faixa do
   texto. A foto atual é capim ao sol — verde claro e alto contraste embaixo
   do bloco de texto branco — e nesse fundo o .82 deixava as letras rasas.
   Na prática esta regra vale só para A Gosto de Caminhar: a home sobrescreve
   com .60 (style.css) e o Café com Orquídeas com .72 (cafe-com-orquideas.css).
   Y em 55% dá mais peso à vegetação e empurra o céu claro do topo para fora. */
.hero-bg img { object-fit: cover; object-position: 50% 55%; filter: brightness(.70) saturate(1.05); }

/* ============ 5. HEADER ============ */
.site-header {
  position: fixed; top: 0; left: 0; width: 100%; z-index: 1000;
  transition: background .4s var(--ease), box-shadow .4s var(--ease);
}
.nav-bar {
  /* gradiente sutil só no topo → contraste do texto branco sobre o céu claro do hero;
     ao rolar, o fundo creme sólido (regra .scrolled) cobre isto. */
  background: linear-gradient(180deg, rgba(10,14,8,.5) 0%, rgba(10,14,8,.12) 65%, rgba(10,14,8,0) 100%);
  transition: background .4s var(--ease), padding .4s var(--ease);
  padding: .4rem 0;
}
.nav-inner { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }

.brand { display: flex; flex-direction: row; align-items: center; gap: .65rem; line-height: 1; color: var(--c-white); transition: color .4s; }
/* Logo oficial da fazenda (selo circular, terracota #A25641). Substituiu o
   símbolo verde em 31/07/2026, na unificação das três páginas: é a marca
   principal e agora é a mesma nos três cabeçalhos, rodapés e favicons.
   O terracota é meio-tom, então funciona nos dois estados do header — sobre o
   hero escuro e sobre o creme do .scrolled — sem precisar de filtro.
   O arquivo é quadrado (212x212); a altura manda e a largura acompanha. */
.brand-logo { height: 46px; width: auto; flex-shrink: 0; }
.brand-text { display: flex; flex-direction: column; }
.brand-mark { font-family: var(--font-serif); font-size: .96rem; font-weight: 400; letter-spacing: .1em; white-space: nowrap; }
.brand-sub { font-size: .6rem; letter-spacing: .1em; margin-top: 3px; opacity: .95; white-space: nowrap; }

.nav { display: none; }
.nav a {
  font-size: .95rem; letter-spacing: .08em; color: var(--c-white);
  padding: .5rem 0; position: relative; transition: color .3s; white-space: nowrap;
}
.nav a::after {
  content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 1px;
  background: var(--c-terra); transition: width .3s var(--ease);
}
.nav a:hover::after { width: 100%; }

.nav-actions { display: flex; align-items: center; gap: 1rem; }
/* Botão do cabeçalho — TERRACOTA, igual ao das outras duas páginas.
   Estava em var(--c-btn) (verde) e com uma borda em var(--c-btn-dk): sobra do
   arranjo B, onde o botão era dourado e precisava de contorno para se destacar
   do fundo claro. Com o botão de volta ao terracota sobre o hero escuro, o
   contorno não tem função e só deixava este cabeçalho diferente dos outros.
   Este bloco é idêntico ao de style.css e cafe-com-orquideas.css — mexer nos
   três juntos. */
.nav-cta {
  position: relative; overflow: hidden; flex-shrink: 0;
  display: inline-flex; align-items: center; white-space: nowrap;
  padding: .5rem .8rem; background: var(--c-terra); color: #fff;
  font-size: .68rem; letter-spacing: normal;
  border-radius: var(--radius); box-shadow: 0 6px 18px -8px rgba(0,0,0,.5);
  transition: background .3s, transform .3s var(--ease), box-shadow .3s var(--ease);
}
.nav-cta:hover {
  background: var(--c-terra-dk); transform: translateY(-2px);
  box-shadow: 0 12px 26px -10px rgba(0,0,0,.55);
}
.nav-cta--mobile { display: none; }
/* Rótulo curto no mobile; completo no desktop (evita 3 linhas / overflow) */
.nc-full { display: none; }
.nc-short { display: inline; }

/* Header enxuto no mobile para caber logo + marca + CTA curto + hambúrguer */
@media (max-width: 640px) {
  .brand-logo { height: 38px; width: auto; }
  .brand { gap: .45rem; }
  .brand-mark { font-size: .72rem; letter-spacing: .02em; }
  /* O brand-sub desta LP carrega o nome do evento + a data
     ("A GOSTO DE CAMINHAR · 22 E 23 DE AGOSTO"), bem mais longo que o da
     LP-agenda ("MATA ATLÂNTICA · SILVA JARDIM, RJ"); a 390px ele encostava no
     CTA, e com a PT Serif, que é mais larga, chegava a invadir o botão.
     Tracking menor aqui em vez de .08em — só o suficiente para folgar. Se a
     data sair do rótulo, pode voltar ao valor da LP-agenda. */
  .brand-sub { font-size: .46rem; letter-spacing: .02em; }
  .nav-actions { gap: .5rem; }
  .nav-inner { gap: .4rem; }
  .nav-cta { padding: .46rem .72rem; font-size: .64rem; }
}

/* Estado: header rolado (fundo claro) */
.site-header.scrolled .nav-bar { background: var(--c-cream); box-shadow: 0 6px 30px rgba(46,18,12,.08); }
.site-header.scrolled .brand,
.site-header.scrolled .nav a { color: var(--c-text); }

/* MENU MOBILE ABERTO — dois defeitos herdados da LP-agenda, corrigidos aqui:
   1. O JS pinta o painel de #1b2318, mas a regra .scrolled acima deixava os
      links quase pretos sobre esse fundo escuro (contraste ~1.1:1, ilegível).
   2. O CTA do menu (.nav-cta--mobile) nascia display:none e nunca era
      reativado — o menu mobile abria sem nenhum botão de conversão. */
body.menu-open .nav a,
body.menu-open .site-header.scrolled .nav a { color: var(--c-white); }
/* Mesma armadilha na barra do hambúrguer: com o header rolado ela virava
   --c-text (#0E0E0E) sobre o painel #1b2318 — o "X" de fechar sumia e o
   usuário não enxergava como sair do menu. */
body.menu-open .site-header.scrolled .menu-toggle span { background: var(--c-white); }
body.menu-open .nav-cta--mobile {
  display: inline-flex; justify-content: center;
  margin-top: 1.2rem; padding: .8rem 1rem; font-size: .72rem;
}

/* Menu hambúrguer */
.menu-toggle { display: flex; flex-direction: column; gap: 5px; width: 30px; height: 22px; justify-content: center; }
.menu-toggle span { display: block; height: 2px; width: 100%; background: var(--c-white); transition: transform .35s var(--ease), opacity .3s; }
.site-header.scrolled .menu-toggle span { background: var(--c-text); }
body.menu-open .menu-toggle span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
body.menu-open .menu-toggle span:nth-child(2) { opacity: 0; }
body.menu-open .menu-toggle span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* ============ 6. HERO DO EVENTO ============ */
.hero { position: relative; min-height: 100vh; min-height: 100svh; display: flex; align-items: center; overflow: hidden; }
.hero-bg { position: absolute; inset: 0; }
.hero-bg.ph--hero { border: none; }
.hero-bg .ph-label { position: absolute; bottom: 18px; right: 18px; background: rgba(250,247,243,.85); padding: .5rem .9rem; border-radius: var(--radius); max-width: 70%; }
.hero-overlay {
  position: absolute; inset: 0;
  /* SCRIM LATERAL (a camada principal no desktop): funciona como "fundo" do bloco
     de texto. Denso no canto esquerdo, sustenta ~.72 até 42% (todo o texto cabe
     dentro dos primeiros 50% da largura) e zera em 84% — daí para a direita a
     foto aparece limpa, sem véu, e é justamente onde a fila de caminhantes
     segue subindo a trilha. O ângulo de 96deg tira o ar de faixa reta.
     Sobre a foto (já com brightness .70), .72 de alfa põe até o pixel mais claro
     em 7,4:1 contra o branco — AAA mesmo no pior ponto (era 6,1:1 com o .82).
     Medido na faixa do texto da foto atual, não estimado. */
  background:
    linear-gradient(96deg,
      rgba(38,15,10,.88) 0%,
      rgba(38,15,10,.84) 24%,
      rgba(38,15,10,.72) 42%,
      rgba(38,15,10,.44) 57%,
      rgba(38,15,10,.16) 71%,
      rgba(38,15,10,0)  84%),
    /* Véu vertical de apoio: só segura o header no topo e ancora a base. */
    linear-gradient(180deg, rgba(38,15,10,.45) 0%, rgba(38,15,10,.10) 28%, rgba(38,15,10,.12) 60%, rgba(38,15,10,.58) 100%);
}
/* TABLET / NOTEBOOK PEQUENO — aqui o texto já ocupa quase toda a largura, então
   o scrim lateral do desktop apagaria cedo demais (o título chegava a 4:1). As
   paradas andam para a direita e o véu vertical sobe um pouco; o canto superior
   direito continua limpo.
   O `.hero-bg > picture { height: 138% }` que existia aqui foi REMOVIDO: era um
   hack para empurrar a base da foto retrato de orquídea fora do bloco de texto.
   Com uma foto 16:9 ele só ampliava a imagem sem motivo — e ampliar é justamente
   o que esta foto de 656px não pode sofrer. */
@media (max-width: 1024px) {
  .hero-overlay {
    background:
      linear-gradient(96deg,
        rgba(38,15,10,.88) 0%,
        rgba(38,15,10,.86) 30%,
        rgba(38,15,10,.78) 52%,
        rgba(38,15,10,.60) 70%,
        rgba(38,15,10,.34) 85%,
        rgba(38,15,10,.10) 100%),
      linear-gradient(180deg, rgba(38,15,10,.48) 0%, rgba(38,15,10,.22) 30%, rgba(38,15,10,.26) 62%, rgba(38,15,10,.70) 100%);
  }
}

.hero-content { position: relative; z-index: 2; color: #fff; max-width: 760px; padding-top: var(--header-h); padding-bottom: 3rem; }

/* RESPIRO DO TOPO — SÓ NAS LPs DE EVENTO (04/08/2026)
   O padding-top era exatamente var(--header-h): a conta cobria a altura do
   cabeçalho fixo e mais nada, então o eyebrow nascia encostado na barra.
   Aqui ele ganha uma folga real por cima.

   POR QUE O EXTRA DESCE MENOS DO QUE PARECE: o .hero é flex com
   align-items:center, e o bloco é centrado JÁ COM os paddings dentro. Quem
   desloca o conteúdo para baixo não é o padding-top sozinho, é a DIFERENÇA
   entre ele e o padding-bottom, e ainda pela metade — (pt - pb) / 2. Por isso
   o topo cresce mais que o de baixo, em vez de os dois juntos.

   ⚠ ESCOPADO em .hero--evento de propósito: a página principal (hub) usa as
   mesmas .hero/.hero-content e ficou de fora do pedido. Sem o modificador,
   isto mexeria no hero da agenda também. */
.hero--evento .hero-content { padding-top: calc(var(--header-h) + 3.5rem); }

/* DESCIDA EXTRA — SÓ NA LP DA TRILHA (.hero--caminhar, 04/08/2026)
   Pedido: "descer mais" o bloco sobre a foto. Aqui está o TETO do que dava
   para descer no desktop, e o motivo está medido:

     · o bloco do hero desta página tem ~700px de altura (título + badge +
       parágrafo de 6 linhas + CTA + selo). Numa viewport de 686px de altura
       ele JÁ ocupa a tela inteira;
     · como o bloco é centrado, o que desloca o conteúdo é (padding-top menos
       padding-bottom) dividido por 2 — por isso o padding-bottom cai para
       1.25rem: é ele que financia a descida sem inflar o bloco.

   Resultado medido a 1536x686: eyebrow de 134px para 150px do topo, com o
   selo terminando a 19px da dobra. Passar disto empurra o selo para fora
   (a +6rem o selo já saía 5px da tela).

   PARA DESCER DE VERDADE no desktop, o caminho não é padding: é encurtar o
   parágrafo do hero. Escondendo a 2ª frase (a mesma que já some no mobile
   via .so-desktop) o eyebrow desce para 232px e ainda sobram 29px de folga —
   medido. Isso é decisão de copy, não de CSS, e não foi feito.

   No MOBILE não existe esse aperto: lá o bloco ancora no pé do hero (regra
   no @media abaixo), o que desce o conteúdo bem mais. */
.hero--caminhar .hero-content {
  padding-top: calc(var(--header-h) + 4.5rem);
  padding-bottom: 1.25rem;
}
/* Terracota clareado (--c-terra-lt) — sobre a foto do hero o #00491D puro
   não atingiria AA; o clareado sim.
   O text-shadow é a ÚNICA sombra do hero e segue mantido por precaução: com a
   troca da foto (o close claro de orquídea saiu, entrou a trilha, de fundo verde
   escuro na faixa do texto) o contraste do eyebrow tende a MELHORAR bastante em
   relação aos 2,9:1 medidos na LP anterior. Mas "tende" não é medida: a sombra
   fica até alguém remedir o contraste do fundo composto (foto + scrim) nesta
   foto, em 390px e em desktop. Ver PENDENTES.md.
   Título e parágrafo seguem sem sombra, como na LP-agenda. */
.hero-content .eyebrow { color: #ffd766; text-shadow: 0 1px 3px rgba(0,0,0,.85), 0 0 14px rgba(0,0,0,.6); }
/* Escala do título copiada do .hero-title da LP-agenda (era clamp(2.2rem, 7vw,
   4.2rem)). O margin-bottom fica em .9rem, e não nos 1.2rem de lá, porque aqui
   o título é seguido pelo badge da data — na LP-agenda ele encosta direto no
   parágrafo. Diferença de estrutura, não de tipografia. */
.hero-title { font-size: clamp(1.9rem, 5.5vw, 3.4rem); font-weight: 400; margin-bottom: .9rem; color: #fff; }
/* Data do evento logo abaixo do título — a informação nº 1 de uma LP de evento.
   VERDE da marca, não mais o terracota: pedido do Cauã em 30/07/2026 para que a
   data apareça em verde. O #A25641 a .92 sobre a foto deixa o texto branco em
   ~10,7:1 — bem acima do que o terracota entregava. */
.hero-badge {
  display: inline-block;
  margin-bottom: 1.4rem; padding: .45rem 1.1rem;
  background: rgba(162,86,65,.92);
  border: 1px solid rgba(255,255,255,.28); border-radius: 50px;
  font-size: clamp(.82rem, 2.2vw, .95rem); font-weight: 700;
  letter-spacing: normal; color: #fff;
  text-shadow: 0 1px 4px rgba(0,0,0,.4);
  box-shadow: 0 8px 24px -10px rgba(0,0,0,.65);
}
/* FATOS DA TRILHA no hero — duração e dificuldade em chips.
   ⚠ SEM USO DESDE 30/07/2026: os chips saíram do hero a pedido do Cauã (a tela
   inicial ficou só com nome, data e convite). O CSS fica aqui porque o
   componente é pequeno, está pronto e pode voltar — para reativar, basta
   recolocar o <ul class="hero-facts"> no index.html; o markup está descrito no
   comentário que ficou no lugar dele.
   Se decidirem que os chips não voltam, este bloco e a regra de .hero-facts na
   media query de 640px podem ser apagados juntos. */
.hero-facts {
  display: flex; flex-wrap: wrap; gap: .6rem;
  margin-bottom: 1.6rem;
}
.hero-fact {
  display: inline-flex; align-items: center; gap: .5rem;
  padding: .5rem .95rem;
  background: rgba(38,15,10,.6);
  border: 1px solid rgba(250,247,243,.28);
  border-radius: 50px;
  font-size: .84rem; line-height: 1.35;
  color: var(--c-cream);
  backdrop-filter: blur(3px);
  box-shadow: 0 6px 18px -8px rgba(0,0,0,.55);
}
.hero-fact svg { width: 17px; height: 17px; fill: var(--c-cream); flex-shrink: 0; opacity: .85; }
.hero-fact strong { font-weight: 700; color: #fff; }
/* Dificuldade: borda e ícone em terracota clareado (--c-terra-lt, a variante da
   marca aprovada para acento SOBRE fundo escuro). É o aviso, não um alarme —
   nada de vermelho, que não existe na paleta da fazenda. */
.hero-fact--alert {
  border-color: rgba(232,242,234,.62);
  background: rgba(125,64,48,.52);
}
.hero-fact--alert svg { fill: var(--c-terra-lt); opacity: 1; }
.hero-fact--alert strong { color: var(--c-terra-lt); }

/* Tamanho/peso/largura já eram os da LP-agenda; saiu só o text-shadow. */
.hero-text { font-size: clamp(1rem, 2.2vw, 1.12rem); font-weight: 400; max-width: 540px; margin-bottom: 1.8rem; opacity: .96; }

/* HERO MOBILE — o texto ocupa a largura toda, então aqui o scrim volta a ser
   VERTICAL (o lateral do desktop não faria sentido). As sombras do texto saíram
   junto com as do desktop, para bater com a LP-agenda: quem segura o contraste
   aqui é o overlay, que continua denso atrás do bloco de texto. */
@media (max-width: 640px) {
  .hero-overlay {
    background:
      linear-gradient(180deg, rgba(38,15,10,.62) 0%, rgba(38,15,10,.5) 34%, rgba(38,15,10,.72) 62%, rgba(38,15,10,.9) 100%);
  }
  /* ENQUADRAMENTO (mobile): a matemática do `cover` é dura — foto 3:2 dentro
     de um hero ~9:19,5. A foto escala pela ALTURA, então só ~31% da largura
     entra no quadro. Com a foto atual (1000px), o X em 42% recorta a faixa
     entre ~290px e ~600px do original: é exatamente onde está o grupo de
     caminhantes, que é o assunto. Mais à direita entraria só capim ao sol,
     claro demais para segurar o texto branco. */
  .hero-bg img { object-position: 42% 50%; }
  /* Fatos da trilha: em 390px os dois chips não cabem lado a lado sem aperto —
     cada um ocupa a própria linha e mantém o texto em uma linha só. */
  .hero-facts { flex-direction: column; align-items: flex-start; gap: .5rem; }
  .hero-text  { opacity: 1; }
  /* SEGUNDA METADE DA FRASE DO HERO — some no mobile, onde o bloco de texto
     compete com a foto e a frase longa empurra o CTA para fora da dobra.
     Vale para as duas LPs de evento (Café com Orquídeas desde 03/08/2026, A
     Gosto de Caminhar desde 04/08/2026), e por isso a regra mora aqui e não
     mais no cafe-com-orquideas.css.
     Contrato do HTML: o span envolve o trecho descartável e a pontuação é
     posicionada de modo que a versão CURTA também termine em frase fechada —
     ou o mobile fica com travessão solto. É display:none, não remoção: o
     texto continua no documento para buscador e leitor de tela. */
  .hero-text .so-desktop { display: none; }
  .hero-badge { text-shadow: none; }
  /* Selo: no mobile o texto quebra em 2 linhas — alinha o ícone à primeira. */
  .hero-selo { align-items: flex-start; }
  .hero-selo svg { margin-top: .05rem; }

  /* BLOCO ANCORADO NO PÉ DO HERO — as duas LPs de evento (04/08/2026).
     O .hero é flex com align-items:center: centrado, ele divide a folga meio a
     meio e metade vira um rodapé vazio embaixo do selo, que não serve para
     nada. Com flex-end toda a folga sobe e vira FOTO visível acima do texto —
     é o que "desce o conteúdo" no mobile, muito mais do que padding-top
     conseguiria (medido na LP da trilha: eyebrow de 240px para 353px).
     Ancorado no pé o bloco também nunca transborda: termina sempre a 2.5rem da
     borda, e o que varia é quanta foto sobra em cima.

     Estava só no cafe-com-orquideas.css desde 03/08/2026; com a trilha pedindo
     o mesmo comportamento, subiu para cá sob .hero--evento. A página principal
     tem regra equivalente própria, no style.css — não depende desta.

     ⚠ Vem depois de .hero--caminhar de propósito: mesma especificidade (0,2,0),
     então é a ORDEM que faz o padding-bottom de 2.5rem vencer no mobile. */
  .hero--evento { align-items: flex-end; }
  .hero--evento .hero-content { padding-bottom: 2.5rem; }
}
.hero-actions { display: flex; flex-wrap: wrap; gap: .8rem; align-items: stretch; }
/* Botões do hero um pouco menores que o padrão do site */
.hero-actions .btn { padding: .72rem 1.5rem; font-size: .74rem; }
/* O ghost cai sobre a foto na faixa em que o gradiente já está fraco; um vidro
   escuro garante o contraste do rótulo branco e o alinha visualmente ao selo. */
.hero-actions .btn--ghost {
  background: rgba(1,16,7,.42);
  border-color: rgba(247,244,234,.55);
  backdrop-filter: blur(3px);
  box-shadow: 0 8px 22px -10px rgba(0,0,0,.55);
}
.hero-actions .btn--ghost:hover { background: rgba(1,16,7,.62); border-color: var(--c-cream); }

/* Selo 10% OFF na reserva direta — mesma família creme/terracota do resto do
   hero (o dourado de antes era a única cor fora da paleta). */
.hero-selo {
  display: inline-flex; align-items: center; gap: .7rem;
  margin-top: 1.8rem; padding: .72rem 1.25rem;
  background: rgba(38,15,10,.62);
  border: 1px solid rgba(232,242,234,.5);
  border-radius: 50px;
  /* Sem line-height próprio: herda o 1.7 do body, como o selo da LP-agenda
     (era 1.35 aqui). */
  font-size: .88rem; letter-spacing: normal;
  color: var(--c-cream);
  backdrop-filter: blur(3px);
  box-shadow: 0 8px 24px -8px rgba(0,0,0,.6);
}
.hero-selo svg { width: 26px; height: 26px; fill: none; stroke: var(--c-terra-lt); stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
.hero-selo strong { color: var(--c-terra-lt); font-weight: 700; }

/* ============ 7. SOBRE O EVENTO ============
   Contida sobre o creme (respiro claro após o hero); foto alinhada ao
   container do texto, com cantos arredondados — sem sangrar na borda.
   Reaproveita as classes .day* da LP-agenda ("Um dia na fazenda"). */
.day { background: var(--c-cream); padding: var(--section-gap) 0; }
.day-inner { display: grid; grid-template-columns: 1fr; gap: 2rem; align-items: center; }

/* TEXTO ANTES DA FOTO NO MOBILE (04/08/2026)
   No HTML a .day-media vem antes da .day-content, o que é certo no desktop:
   lá são duas colunas e a foto fica AO LADO do texto. Mas abaixo de 900px a
   grade vira uma coluna só e a ordem do HTML passa a ser a ordem de leitura —
   a foto ia inteira na frente do título.
   Medido em 390px antes da correção: o título aparecia 491px depois do topo da
   seção na principal e no Café com Orquídeas, 326px na A Gosto de Caminhar.
   Quase uma tela de foto antes de a pessoa saber do que a seção trata.
   Não era decisão de design: não havia nenhuma regra `order` no projeto, era
   só o HTML aparecendo quando o grid colapsa.
   Vale para as TRÊS páginas de uma vez — todas usam .day-inner (na principal é
   "Um dia na fazenda"; nas LPs de evento é a seção "O evento"). O desktop não
   muda: a partir de 900px o `order` volta ao natural, logo abaixo. */
.day-content { order: -1; }
/* Proporção 4:3, não o 4:5 herdado. O 4:5 (retrato) servia à foto da sala com
   orquídeas do Café com Orquídeas; aqui a foto é uma aérea PAISAGEM do vale
   (1600x900), e um recorte retrato jogaria fora justamente a largura do vale,
   que é o assunto. 4:3 ainda dá altura suficiente para equilibrar a coluna de
   texto ao lado, no desktop. */
.day-media {
  aspect-ratio: 4/3; border-radius: 10px; overflow: hidden;
  box-shadow: 0 18px 44px -20px rgba(46,18,12,.4);
}
.day-content { max-width: 640px; }
.day-content h2 { font-size: clamp(1.9rem, 5.5vw, 2.7rem); margin-bottom: 1.3rem; }
.day-content p { color: var(--c-muted); margin-bottom: 1.1rem; font-size: 1.02rem; }
.day-content p:last-child { margin-bottom: 0; }

/* ============ 8. PROGRAMAÇÃO DOS 2 DIAS ============
   Um card por dia (sábado / domingo — o evento é 22 e 23/08). Enquanto a
   grade oficial não chega, o <ol> leva o modificador .schedule--draft e cada
   card exibe linhas "a definir"; ao receber, o <ul class="schedule-list">
   cresce com quantos itens a grade tiver e o modificador sai. */
.schedule { padding: var(--section-gap) 0; background: var(--c-sand); }
.schedule-grid { display: grid; grid-template-columns: 1fr; gap: 1.4rem; }
.schedule-day {
  display: flex; flex-direction: column;
  background: var(--c-white); border-radius: var(--radius);
  box-shadow: 0 10px 40px rgba(46,18,12,.06);
  overflow: hidden;
}
.schedule-head {
  padding: 1.3rem 1.6rem;
  background: var(--c-forest); color: #fff;
}
.schedule-weekday {
  font-size: .74rem; letter-spacing: normal;
  color: var(--c-terra-lt); font-weight: 700; margin-bottom: .1rem;
}
.schedule-date { font-family: var(--font-serif); font-size: 1.45rem; font-weight: 400; line-height: 1.25; }
.schedule-body { padding: 1.6rem; flex: 1; display: flex; flex-direction: column; }
.schedule-list { display: flex; flex-direction: column; }
.schedule-list li {
  display: flex; gap: .9rem; align-items: baseline;
  padding: .7rem 0; border-bottom: 1px solid var(--c-line);
  color: var(--c-muted); font-size: .95rem;
}
.schedule-list li:last-child { border-bottom: none; }
.schedule-time {
  flex-shrink: 0; min-width: 3.9rem;
  font-weight: 700; color: var(--c-terra-dk); font-size: .88rem;
  letter-spacing: .04em;
}

/* ---- SINALIZAÇÃO DE RASCUNHO ----------------------------------------
   O cliente é rígido com precisão: a grade provisória NÃO pode ser
   confundida com programação oficial. Tudo abaixo existe só para deixar
   isso explícito e sai junto com o modificador .schedule--draft. */
.schedule-draft-note {
  max-width: 760px; margin: 0 auto 2rem;
  padding: 1rem 1.3rem 1rem 3.1rem; position: relative;
  background: rgba(0,73,29,.08);
  border: 1px dashed var(--c-terra);
  border-radius: var(--radius);
  color: var(--c-terra-dk); font-size: .95rem; line-height: 1.55;
}
/* "!" desenhado em CSS — nada de emoji, que varia entre sistemas */
.schedule-draft-note::before {
  content: '!'; position: absolute; left: 1.15rem; top: 1.05rem;
  width: 20px; height: 20px; border-radius: 50%;
  background: var(--c-terra); color: #fff;
  font-size: .8rem; font-weight: 700; line-height: 20px; text-align: center;
}
.schedule-draft-note strong { color: var(--c-terra-dk); font-weight: 700; }

/* Cabeçalho do dia em rascunho: hachura sobre o verde, para o card não
   ter o mesmo peso visual de uma programação fechada. */
.schedule--draft .schedule-head {
  background:
    repeating-linear-gradient(135deg,
      rgba(255,255,255,.07) 0, rgba(255,255,255,.07) 8px,
      transparent 8px, transparent 16px),
    var(--c-forest);
}
.schedule--draft .schedule-day { border: 1px dashed var(--c-terra); box-shadow: none; }
.schedule-tag {
  display: inline-block; margin-top: .6rem; padding: .18rem .6rem;
  background: rgba(255,255,255,.16); border: 1px solid rgba(255,255,255,.4);
  border-radius: 50px;
  font-size: .62rem; letter-spacing: normal;
  font-weight: 700; color: #fff;
}
/* Horário provisório e linha ainda sem conteúdo definido */
.schedule--draft .schedule-time { color: var(--c-muted); font-weight: 400; font-style: italic; }
.schedule--draft .schedule-open { color: var(--c-muted); font-style: italic; }
/* Faixa "O que já está confirmado" — o que temos de concreto até a grade chegar */
.schedule-confirmed {
  background: var(--c-white); border-radius: var(--radius);
  padding: 2.2rem; margin-top: 2.4rem;
}
.schedule-confirmed h3 { font-size: 1.35rem; margin-bottom: 1rem; }

/* ============ 9. A TRILHA (faixa escura) ============
   Bloco .walk herdado da LP-agenda (texto + moldura de mídia) — e aqui ele
   volta à função original: falar da caminhada. A moldura 9:16 recebe o VÍDEO
   real da trilha da fazenda.
   A variante .walk--expo (moldura 4:3 para as obras da exposição do Allan Pin)
   foi REMOVIDA junto com a seção — era exclusiva do Café com Orquídeas. */
.walk { background: var(--c-ink); color: var(--c-white); padding: var(--section-gap) 0; overflow: hidden; }
.walk-inner { display: grid; grid-template-columns: 1fr; gap: 2.6rem; align-items: center; }
/* min-width:0 deixa as colunas do grid encolherem e o texto quebrar (evita overflow no mobile) */
.walk-inner > * { min-width: 0; }
.walk-content { max-width: 560px; }
.walk-content h2 { font-size: clamp(1.9rem, 5.5vw, 2.7rem); margin-bottom: 1.2rem; }
.walk-content p { color: rgba(250,247,243,.82); margin-bottom: 1.1rem; font-size: 1.02rem; }
.walk-caption { font-size: .9rem; color: rgba(250,247,243,.6); font-style: italic; }
.walk-content .btn { margin-top: .6rem; }

.walk-media { display: flex; justify-content: center; }
/* Moldura de mídia — retrato (9:16) por padrão, como uma "janela" para a mata */
.walk-frame {
  position: relative; width: 100%; max-width: 420px; aspect-ratio: 9/16;
  border-radius: 10px; overflow: hidden;
  box-shadow: 0 24px 60px rgba(0,0,0,.45);
  border: 1px solid rgba(250,247,243,.14);
}
.walk-frame picture, .walk-frame img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }

/* VÍDEO da trilha na moldura — mesma regra das imagens: preenche o 9:16 sem
   distorcer. O vídeo é 900x1600 (exatamente 9:16), então não há corte.
   O poster é atributo nativo do <video> e obedece ao mesmo object-fit, o que
   mantém o enquadramento idêntico antes e depois do play (sem "salto"). */
.walk-frame .walk-video {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover; display: block;
  background: var(--c-ink-soft); /* fundo enquanto o poster não pinta */
}

/* ESPECIFICAÇÕES DA TRILHA — o destaque honesto de duração e dificuldade.
   Dois blocos de rótulo+valor sobre a faixa escura. Repete o que o hero já
   diz, de propósito: quem chega por link direto na seção precisa da mesma
   informação. */
.trail-specs {
  display: flex; flex-wrap: wrap; gap: .9rem;
  margin: 0 0 1.6rem;
}
.trail-specs li {
  flex: 1 1 auto; min-width: 150px;
  display: flex; flex-direction: column; gap: .15rem;
  padding: .9rem 1.2rem;
  background: rgba(250,247,243,.06);
  border: 1px solid rgba(250,247,243,.16);
  border-left: 3px solid var(--c-terra-lt);
  border-radius: var(--radius);
}
.ts-label {
  font-size: .7rem; font-weight: 700;
  color: rgba(250,247,243,.62);
}
.ts-value {
  font-family: var(--font-serif); font-size: 1.25rem; font-weight: 400;
  line-height: 1.2; color: #fff;
}
/* A dificuldade é o dado que o público precisa NÃO deixar passar. */
.ts-value--alert { color: var(--c-terra-lt); }

/* Placeholder no tom da faixa escura (usado na moldura e nos cards da programação) */
.walk-ph {
  position: absolute; inset: 0; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: .8rem; text-align: center;
  padding: 1.4rem; background: var(--c-ink-soft);
  border: 1px dashed rgba(250,247,243,.22);
}
.walk-ph svg { width: 44px; height: 44px; fill: rgba(250,247,243,.5); }
.walk-ph .ph-label { font-size: .74rem; letter-spacing: .07em; color: rgba(250,247,243,.66); overflow-wrap: anywhere; }

/* ============ 10. TARIFAS ============
   Três cards de preço (Casal / Extra / Day Use) — substituem o grid de
   múltiplos eventos da LP-agenda. O bloco .events-info (o que está
   incluído / como reservar) foi mantido e reaproveitado logo abaixo. */
.rates { padding: var(--section-gap) 0; }
.rates-grid { display: grid; grid-template-columns: 1fr; gap: 1.4rem; align-items: stretch; }
.rate-card {
  display: flex; flex-direction: column;
  background: var(--c-white); border: 1px solid var(--c-line);
  border-radius: var(--radius); padding: 2rem 1.8rem;
  box-shadow: 0 10px 40px rgba(46,18,12,.06);
  transition: transform .4s var(--ease), box-shadow .4s, border-color .4s;
}
.rate-card:hover { transform: translateY(-6px); box-shadow: 0 24px 60px rgba(46,18,12,.13); border-color: var(--c-forest-soft); }
/* Pacote principal do evento — destacado com a borda verde da marca */
.rate-card--feature { border-color: var(--c-forest); border-width: 2px; }
.rate-tag {
  align-self: flex-start; margin-bottom: .8rem; padding: .3rem .7rem;
  background: rgba(0,73,29,.1); color: var(--c-terra-dk);
  border: 1px solid rgba(0,73,29,.3); border-radius: 50px;
  font-size: .72rem; letter-spacing: normal; font-weight: 700;
}
.rate-card--feature .rate-tag {
  background: var(--c-forest); color: #fff; border-color: var(--c-forest);
}
.rate-name { font-family: var(--font-serif); font-size: 1.5rem; font-weight: 400; margin-bottom: .4rem; }
.rate-price {
  font-family: var(--font-serif); font-weight: 400; line-height: 1;
  font-size: 2.7rem; color: var(--c-forest);
  display: flex; align-items: baseline; gap: .22rem;
}
.rate-currency { font-size: 1.15rem; font-weight: 400; color: var(--c-muted); }
.rate-unit { font-size: .82rem; color: var(--c-muted); margin: .5rem 0 1.1rem; }
.rate-note {
  color: var(--c-muted); font-size: .95rem;
  padding-top: 1.1rem; border-top: 1px solid var(--c-line);
  margin-bottom: 1.6rem;
}
.rate-card .btn { margin-top: auto; }
.rates-foot {
  text-align: center; color: var(--c-muted); font-size: .92rem;
  margin: 1.8rem auto 2.6rem; max-width: 560px;
}

.events-info {
  display: grid; grid-template-columns: 1fr; gap: 2rem;
  background: var(--c-sand); border-radius: var(--radius); padding: 2.2rem;
}
.events-info h3 { font-size: 1.35rem; margin-bottom: 1rem; }
.check-list li {
  position: relative; padding-left: 1.7rem; margin-bottom: .7rem;
  color: var(--c-muted); font-size: .96rem;
}
.check-list li::before {
  content: ''; position: absolute; left: 0; top: .42em;
  width: 14px; height: 8px;
  border-left: 2px solid var(--c-forest); border-bottom: 2px solid var(--c-forest);
  transform: rotate(-45deg);
}
.check-list--light li { color: rgba(255,255,255,.82); }
.check-list--light li::before { border-color: var(--c-terra); }

/* Lista de EXCLUSÕES ("não está incluído"). Sem isto ela herdava o mesmo tique
   verde dos itens inclusos e dizia visualmente o contrário do texto. O "x" é
   desenhado com duas bordas giradas, no mesmo terracota dos demais acentos —
   nada de emoji, que muda de forma entre sistemas. */
.check-list--out li::before {
  width: 12px; height: 12px; top: .38em;
  border: none; transform: none;
  background:
    linear-gradient(45deg, transparent 44%, var(--c-terra) 44%, var(--c-terra) 56%, transparent 56%),
    linear-gradient(-45deg, transparent 44%, var(--c-terra) 44%, var(--c-terra) 56%, transparent 56%);
}
.events-info-sub { margin-top: 1.6rem; }

/* ============ 10b. O QUE OFERECE ============
   Seção PENDENTE: a lista do que o pacote inclui não pode ser herdada do
   Café com Orquídeas. Enquanto não chega, a seção exibe a .schedule-draft-note
   (reaproveitada da programação) + um CTA para o WhatsApp — quem quer a
   informação agora tem para onde ir, e a página não afirma nada.
   AO RECEBER A LISTA: trocar a nota por uma <ul class="check-list">; este
   bloco de CSS pode ficar como está. */
.offers { padding: var(--section-gap) 0; background: var(--c-cream); }
.offers-cta { text-align: center; margin-top: 1.8rem; }

/* ============ 10c. GALERIA + LIGHTBOX ============
   MASONRY por CSS columns, não por grid. Motivo: as fotos do acervo têm
   proporções muito diferentes (retratos 3:4, paisagens 16:9, uma quadrada) e
   um grid de linhas iguais cortaria todas no mesmo formato. Com `columns`
   cada foto entra na altura que tem e a coluna se acomoda — é o que dá o
   encaixe irregular do masonry sem uma linha de JavaScript.
   O preço é que a ORDEM DE LEITURA vira vertical (coluna 1 inteira, depois a
   2). Para uma galeria isso é irrelevante; para conteúdo sequencial, não use. */
.gallery { padding: var(--section-gap) 0; background: var(--c-cream); }
/* SEGUNDA GRADE — "Onde você dorme" (10/08/2026). Vem logo depois da galeria,
   que também é creme: sem trocar o fundo, as duas leem como uma faixa só e a
   separação por tema — que é a razão de existir da seção — some. Branco porque
   já é o par de contraste usado pelo .faq, então não entra cor nova na folha. */
.gallery--quartos { background: var(--c-white); }

/* ESTA GRADE NÃO É MASONRY, e é de propósito. O masonry do .gallery-grid
   existe porque o acervo da galeria tem proporções muito diferentes. As fotos
   de quarto são o oposto: 14 das 18 são exatamente 4:3, da mesma câmera. Com
   células de altura quase igual, `columns` não tem como equilibrar — a altura
   da coluna precisa ser uma soma de células inteiras, e o que sobra é sempre
   um degrau de célula inteira. Medido em 10/08/2026: 205px de buraco no
   desktop com 18 fotos, e 185px com 16. Trocar a contagem não resolve; o que
   quebra a conta é a única foto em retrato, 2,4x mais alta que as outras.
   Grade de linhas iguais fecha por construção, em qualquer contagem e em
   qualquer ponto de quebra — buraco zero, sem depender de cálculo de ordem.
   O preço é o `cover` recortar para 4:3, o que para 14 das 18 não corta nada;
   a foto em retrato é a que mais perde, e o lightbox segue mostrando inteira.
   NÃO aplique isto na galeria principal: lá o recorte uniforme destruiria o
   mosaico, que é o motivo de o projeto ter escolhido columns (ver acima). */
.gallery-grid--catalogo {
  columns: auto; display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px;
}
.gallery-grid--catalogo .gallery-item { margin-bottom: 0; }
.gallery-grid--catalogo .gallery-btn { height: 100%; }
.gallery-grid--catalogo .gallery-btn img { height: 100%; aspect-ratio: 4/3; object-fit: cover; }
@media (min-width: 560px) { .gallery-grid--catalogo { gap: 16px; } }
@media (min-width: 960px) { .gallery-grid--catalogo { grid-template-columns: repeat(3, 1fr); gap: 18px; } }
.gallery-grid { columns: 2; column-gap: 12px; }
.gallery-item { break-inside: avoid; margin-bottom: 12px; }

.gallery-btn {
  display: block; width: 100%; padding: 0; border: none;
  position: relative; overflow: hidden; cursor: pointer;
  border-radius: 8px; background: var(--c-sand);
  box-shadow: 0 8px 24px -14px rgba(162,86,65,.5);
}
.gallery-btn img { width: 100%; height: auto; display: block; transition: transform .5s var(--ease), filter .4s var(--ease); }

/* Hover: zoom leve + escurecida, e a lupa entra. Tudo só no ponteiro fino —
   em tela de toque não existe hover e o efeito ficaria preso no último item
   tocado. */
.gallery-lupa {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  background: rgba(38,15,10,.38); opacity: 0;
  transition: opacity .35s var(--ease);
}
.gallery-lupa svg {
  width: 40px; height: 40px; fill: none; stroke: #fff; stroke-width: 1.7;
  stroke-linecap: round; stroke-linejoin: round;
  transform: scale(.85); transition: transform .35s var(--ease);
}
@media (hover: hover) and (pointer: fine) {
  .gallery-btn:hover img { transform: scale(1.06); filter: brightness(.92); }
  .gallery-btn:hover .gallery-lupa { opacity: 1; }
  .gallery-btn:hover .gallery-lupa svg { transform: scale(1); }
}
.gallery-btn:focus-visible { outline: 3px solid var(--c-terra); outline-offset: 3px; }
.gallery-btn:focus-visible .gallery-lupa { opacity: 1; }

/* 2 colunas já no mobile: com 12 fotos, coluna única vira uma rolagem longa
   demais. A 390px cada coluna fica com ~172px, suficiente para a miniatura.
   AO MEXER NA GALERIA: `columns` não reparte as fotos igualmente — com
   break-inside:avoid ele empilha na ordem e uma coluna pode parar bem acima
   das outras (era o caso com 10 fotos: 572px de creme vazio no fim da grade,
   a 1536px). Depois de acrescentar ou remover item, conferir o rodapé da
   grade nos dois pontos de quebra, 2 e 3 colunas. */
@media (min-width: 560px)  { .gallery-grid { column-gap: 16px; } .gallery-item { margin-bottom: 16px; } }
@media (min-width: 960px)  { .gallery-grid { columns: 3; column-gap: 18px; } .gallery-item { margin-bottom: 18px; } }

/* ---- LIGHTBOX ---- */
.lb {
  position: fixed; inset: 0; z-index: 1600;
  /* .97 e não .94: com 6% de transparência a barra clara do cabeçalho fixo
     (creme, quase branca) vazava como uma faixa mais clara no topo do véu.
     Medido: o lightbox já ficava por cima — o problema era só o vazamento. */
  background: rgba(38,15,10,.97);
  display: flex; align-items: center; justify-content: center;
  padding: 60px 16px;
  animation: lbEntra .25s var(--ease);
}
.lb[hidden] { display: none; }
@keyframes lbEntra { from { opacity: 0; } to { opacity: 1; } }

.lb-palco { max-width: 100%; max-height: 100%; display: flex; flex-direction: column; align-items: center; gap: .9rem; }
.lb-palco picture { display: block; max-width: 100%; }
.lb-palco img {
  max-width: 100%;
  /* desconta o padding vertical (120px) e a linha da legenda */
  max-height: calc(100vh - 190px); max-height: calc(100svh - 190px);
  width: auto; height: auto; display: block;
  border-radius: 6px; box-shadow: 0 24px 70px rgba(0,0,0,.55);
}
.lb-legenda {
  color: rgba(250,247,243,.85); font-size: .88rem; text-align: center;
  max-width: 640px; line-height: 1.5;
}
.lb-contador { color: rgba(250,247,243,.55); white-space: nowrap; }

.lb-fechar, .lb-nav {
  position: absolute; z-index: 2;
  display: flex; align-items: center; justify-content: center;
  background: rgba(250,247,243,.12); border: 1px solid rgba(250,247,243,.28);
  border-radius: 50%; cursor: pointer;
  transition: background .25s, transform .25s var(--ease);
}
.lb-fechar svg, .lb-nav svg { fill: none; stroke: #fff; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.lb-fechar:hover, .lb-nav:hover { background: var(--c-terra); border-color: var(--c-terra); }
.lb-fechar { top: 14px; right: 14px; width: 44px; height: 44px; }
.lb-fechar svg { width: 22px; height: 22px; }
.lb-nav { top: 50%; transform: translateY(-50%); width: 48px; height: 48px; }
.lb-nav:hover { transform: translateY(-50%) scale(1.08); }
.lb-nav svg { width: 26px; height: 26px; }
.lb-prev { left: 14px; }
.lb-next { right: 14px; }

/* MOBILE: as setas saem da lateral (roubariam a largura da foto) e viram uma
   dupla na base, ao lado do contador. O swipe continua sendo o gesto
   principal — as setas são o alvo de toque para quem não desliza. */
@media (max-width: 640px) {
  .lb { padding: 56px 10px 84px; }
  .lb-palco img { max-height: calc(100svh - 210px); }
  .lb-nav { top: auto; bottom: 18px; transform: none; width: 46px; height: 46px; }
  .lb-nav:hover { transform: none; }
  .lb-prev { left: calc(50% - 62px); }
  .lb-next { right: calc(50% - 62px); }
}
body.lb-aberto { overflow: hidden; }

/* ============ 11. PROVA SOCIAL (depoimentos) ============
   A seção está COMENTADA no index.html: não existe nenhum depoimento
   autorizado do "A Gosto de Caminhar", e o padrão do projeto é não
   publicar placeholder de prova social. Os estilos ficam aqui para que a
   seção volte sem retrabalho quando os depoimentos chegarem (o markup
   pronto está no comentário do HTML, entre §6 e §7). */
.testimonials { padding: var(--section-gap) 0; background: var(--c-ink-soft); color: #fff; }
.testimonials .eyebrow { color: var(--c-terra); }
.testimonials .section-head h2 { color: #fff; }
.testi-grid { display: grid; grid-template-columns: 1fr; gap: 1.6rem; }
.testi-card { background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.1); padding: 2.2rem; border-radius: var(--radius); }
.testi-card blockquote { font-family: var(--font-serif); font-size: 1.3rem; font-style: italic; line-height: 1.5; margin-bottom: 1.5rem; color: rgba(255,255,255,.92); }
.testi-card figcaption strong { display: block; font-weight: 700; letter-spacing: normal; }
.testi-card figcaption span { font-size: .82rem; color: rgba(255,255,255,.55); }
/* Card-placeholder enquanto os depoimentos autorizados não chegam */
.testi-card--ph {
  display: flex; align-items: center; justify-content: center; text-align: center;
  min-height: 190px; border-style: dashed; border-color: rgba(255,255,255,.22);
  background: rgba(255,255,255,.02);
}
.testi-card--ph .ph-label { color: rgba(250,247,243,.6); font-size: .74rem; letter-spacing: .07em; }
/* Dado de ocupação ("a edição de 2024 esgotou") — só publicar depois de
   CONFIRMADO pelo cliente. Estilo já pronto para quando for liberado. */
.social-proof-stat {
  text-align: center; max-width: 620px; margin: 0 auto 2.4rem;
  font-family: var(--font-serif); font-size: clamp(1.15rem, 3.4vw, 1.5rem);
  font-style: italic; color: var(--c-terra-lt);
}

/* ============ 12. FAQ ============ */
.faq { padding: var(--section-gap) 0; background: var(--c-white); }
.faq-inner { max-width: 820px; }
.faq-list { display: flex; flex-direction: column; gap: .8rem; }
.faq-item { border: 1px solid var(--c-line); border-radius: var(--radius); background: var(--c-cream); }
.faq-item summary {
  cursor: pointer; list-style: none;
  padding: 1.15rem 3rem 1.15rem 1.4rem;
  font-family: var(--font-serif); font-size: 1.25rem; font-weight: 400;
  position: relative;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: '+'; position: absolute; right: 1.3rem; top: 50%;
  transform: translateY(-50%);
  font-family: var(--font-sans); font-size: 1.4rem; font-weight: 400;
  color: var(--c-forest); transition: transform .3s var(--ease);
}
.faq-item[open] summary::after { transform: translateY(-50%) rotate(45deg); }
.faq-item p { padding: 0 1.4rem 1.3rem; color: var(--c-muted); font-size: .98rem; }

/* ============ 13. CTA FINAL ============ */
.cta-final { padding: var(--section-gap) 0; background: var(--c-forest); color: #fff; }
.cta-inner { text-align: center; max-width: 680px; }
.cta-final .eyebrow { color: #ffd766; }
.cta-final h2 { font-size: clamp(2rem, 6vw, 2.9rem); margin-bottom: 1rem; }
.cta-final p { color: rgba(255,255,255,.82); margin-bottom: 2rem; font-size: 1.05rem; }
.cta-final strong { color: #ffd766; }

/* ============ 14. FOOTER ============ */
.site-footer { background: var(--c-footer); color: rgba(255,255,255,.7); padding-top: 4rem; }
.footer-grid { display: grid; grid-template-columns: 1fr; gap: 2.4rem; padding-bottom: 3rem; }
.footer-logo { height: 52px; width: auto; flex-shrink: 0; }
/* Logo ao lado da marca (mesma lógica do header) */
.footer-brand-top { display: flex; align-items: center; gap: .7rem; margin-bottom: 1rem; }
.footer-brand-text { display: flex; flex-direction: column; }
.footer-brand .brand-mark { color: #fff; font-size: 1.2rem; }
.footer-brand .brand-sub { color: rgba(255,255,255,.55); }
.footer-about { margin: 1rem 0 1.4rem; font-size: .9rem; max-width: 340px; }
.footer-social { display: flex; gap: .8rem; }
.footer-social a, .footer-social button {
  width: 40px; height: 40px; border: 1px solid rgba(255,255,255,.2); border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background .35s var(--ease), border-color .35s,
              transform .35s var(--ease), box-shadow .35s var(--ease);
}
.footer-social a:hover, .footer-social button:hover { transform: translateY(-4px) scale(1.08); }
.footer-social svg { width: 18px; height: 18px; fill: #fff; transition: transform .35s var(--ease); }
.footer-social a:hover svg, .footer-social button:hover svg { transform: scale(1.15) rotate(-8deg); }
/* Cada rede acende com a cor da própria marca */
.footer-social .social-wa:hover {
  background: var(--c-wa); border-color: var(--c-wa);
  box-shadow: 0 10px 22px -8px rgba(37,211,102,.6);
}
.footer-social .social-ig:hover {
  background: radial-gradient(circle at 30% 110%, #fdf497 0%, #fdf497 5%, #fd5949 45%, #d6249f 60%, #285aeb 90%);
  border-color: transparent;
  box-shadow: 0 10px 22px -8px rgba(214,36,159,.55);
}
.footer-social .social-fb:hover {
  background: #1877f2; border-color: #1877f2;
  box-shadow: 0 10px 22px -8px rgba(24,119,242,.6);
}
.footer-social .social-yt:hover {
  background: #ff0000; border-color: #ff0000;
  box-shadow: 0 10px 22px -8px rgba(255,0,0,.55);
}
.footer-social .social-mail:hover {
  background: var(--c-terra); border-color: var(--c-terra);
  box-shadow: 0 10px 22px -8px rgba(0,73,29,.6);
}
.footer-col h4 { color: #fff; font-family: var(--font-sans); font-weight: 700; font-size: .82rem; letter-spacing: normal; margin-bottom: 1.1rem; }
.footer-col a, .footer-addr, .footer-link-btn {
  display: block; font-size: .92rem; color: rgba(255,255,255,.65);
  padding: .35rem 0; transition: color .3s; text-align: left;
}
.footer-col a:hover, .footer-link-btn:hover { color: var(--c-terra); }
.footer-addr { color: rgba(255,255,255,.5); }
/* Linhas de contato com a logo de cada canal */
.footer-contact { display: inline-flex; align-items: center; gap: .55rem; }
.footer-contact .fc-ic { width: 16px; height: 16px; fill: currentColor; flex-shrink: 0; transition: transform .3s var(--ease), fill .3s; }
a.footer-contact:hover .fc-ic, button.footer-contact:hover .fc-ic { transform: scale(1.2) rotate(-8deg); }
.footer-bottom { border-top: 1px solid rgba(255,255,255,.1); padding: 1.6rem 0; }
.footer-bottom-inner { display: flex; flex-direction: column; gap: 1rem; align-items: center; text-align: center; font-size: .82rem; }
/* Coluna do copyright + identificação legal do responsável (produtor rural).
   No mobile fica centralizada junto do resto; no tablet+ o .footer-bottom-inner
   vira linha e este bloco alinha à esquerda (ver media query de 600px). */
.footer-bottom-legal { display: flex; flex-direction: column; gap: .35rem; }
/* Dados legais em corpo menor que o copyright, mas ainda LEGÍVEIS: é
   identificação de controlador de dados, não letra miúda decorativa.
   Medido sobre o --c-footer (#43201A): rgba(255,255,255,.45) dava 4,26:1 — abaixo
   do mínimo AA de 4,5:1 para texto pequeno. Em .55 o contraste vai a 5,6:1, o
   mesmo valor dos links de .footer-legal ao lado. Não baixar deste alfa. */
.footer-entity {
  font-size: 12px; line-height: 1.55;
  color: rgba(255,255,255,.55);
}
/* Política de Privacidade discreta (obrigação LGPD): pequena e de baixo contraste
   dentro do AA, no canto do rodapé — cumpre a lei sem competir com o CTA. */
.footer-legal { display: flex; gap: 1.4rem; font-size: 12px; }
.footer-legal a { color: rgba(255,255,255,.55); }
.footer-legal a:hover { color: rgba(255,255,255,.8); }

/* Coluna direita do rodapé inferior: políticas + assinatura da agência.
   No mobile o .footer-bottom-inner é coluna e tudo fica centralizado; no
   tablet+ esta coluna encosta à direita (ver media query de 600px). */
.footer-bottom-right { display: flex; flex-direction: column; gap: .5rem; align-items: center; }
/* Assinatura "Desenvolvido por Komplexa Hotéis" — mesmo padrão do .ft-bot da
   Solar Dona Dora: texto neutro, nome da agência em destaque dourado.
   O dourado é o #ffd766 que já circula nesta folha (eyebrow do hero,
   schedule-weekday, cta-final) — a Solar usa o --accent #FEB50E dela, que não
   existe na paleta da fazenda. */
/* O "Desenvolvido por" em .55 e não no .4 da Solar: sobre o --c-footer
   (#43201A), .45 dá 4,26:1 — abaixo do AA para 12px. Em .55 vai a 5,6:1, o
   mesmo alfa já usado no .footer-entity e nos links de .footer-legal.
   O dourado do nome da agência mede 11,3:1, com folga. */
.footer-credit { font-size: 12px; color: rgba(255,255,255,.55); }
.footer-credit a { color: #ffd766; transition: color .3s; }
.footer-credit a:hover { color: #f0cd6a; text-decoration: underline; }

/* ============ WHATSAPP FLUTUANTE + WIDGET DE CAPTACAO ============
   Movidos para assets/css/wa-widget.css em 03/08/2026: viraram o componente
   COMPARTILHADO pelas 3 LPs. O que estava aqui (.whatsapp-float e o modal
   .lead-modal / o widget .wa-form-*) foi removido para nao haver duas regras
   disputando o mesmo canto da tela.
   Para ajustar so nesta pagina, sobrescreva os tokens --wa-* dentro de
   `.wa-widget` AQUI — nao copie o bloco de volta.
   ============================================================ */

/* ============ 17. BANNER DE COOKIES (LGPD) ============ */
.cookie-banner {
  position: fixed; left: 50%; bottom: 16px; transform: translateX(-50%);
  z-index: 1200;
  width: min(calc(100% - 24px), 720px);
  background: var(--c-ink); color: rgba(255,255,255,.85);
  border-radius: 8px; padding: 1.2rem 1.4rem;
  box-shadow: 0 20px 60px rgba(0,0,0,.4);
  display: flex; flex-direction: column; gap: 1rem;
  font-size: .86rem;
}
.cookie-banner[hidden] { display: none; }
.cookie-banner a { text-decoration: underline; color: var(--c-terra); }
.cookie-actions { display: flex; gap: .8rem; flex-wrap: wrap; }
/* "Só essenciais": dentro do banner escuro, o rótulo escuro do
   .btn--outline-green padrão ficaria ilegível. Aqui ele vira DOURADO sobre o
   fundo escuro (11,3:1) — e o "Aceitar" ao lado é dourado sólido. Os dois
   pesam parecido de propósito: o usuário precisa enxergar a opção de RECUSAR
   tão bem quanto a de aceitar (LGPD). */
/* "Só essenciais" — branco sobre o verde do banner, igual ao das outras duas.
   Estava em --c-terra-lt com borda esverdeada: sobra do arranjo B. */
.cookie-banner .btn--outline-green {
  color: var(--c-white); border-color: rgba(255,255,255,.65);
  background-image: linear-gradient(var(--c-white), var(--c-white));
}
.cookie-banner .btn--outline-green:hover { color: var(--c-forest-dk); border-color: var(--c-white); }

/* ============ 18. PÁGINA LEGAL (/privacidade/) ============ */
.legal-page { padding: calc(var(--header-h) + 3rem) 0 5rem; }
.legal-page .container { max-width: 820px; }
.legal-page h1 { font-size: clamp(2rem, 6vw, 2.8rem); margin-bottom: .6rem; }
.legal-updated { color: var(--c-muted); font-size: .85rem; margin-bottom: 2.4rem; }
.legal-page h2 { font-size: 1.5rem; margin: 2.2rem 0 .8rem; }
.legal-page p, .legal-page li { color: var(--c-muted); margin-bottom: .8rem; font-size: .98rem; }
.legal-page ul { list-style: disc; padding-left: 1.4rem; }
.legal-header { background: var(--c-ink); }
.legal-header .nav-bar { background: var(--c-ink); }

/* ============ 19. ANIMAÇÕES (reveal) ============
   Fail-open por construção: NÃO existe estado oculto no CSS.
   `.reveal` sozinho não faz nada — o conteúdo é 100% visível com JS
   ausente, quebrado ou com observer que nunca dispara.
   Quando o IntersectionObserver confirma que o elemento entrou no
   viewport, o JS adiciona `.in-view`, que roda uma ANIMAÇÃO partindo
   do invisível. Sem a classe, nada é escondido em momento algum. */
.reveal.in-view { animation: revealUp .9s var(--ease) both; }
@keyframes revealUp {
  from { opacity: 0; transform: translateY(34px); }
  to   { opacity: 1; transform: none; }
}

/* Respeita preferências de movimento reduzido */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}

/* ============ 20. MEDIA QUERIES ============ */

/* --- Tablet --- */
@media (min-width: 600px) {
  .btn { white-space: nowrap; }
  .btn--block { white-space: normal; }
  .events-info { grid-template-columns: repeat(2, 1fr); padding: 2.6rem; }
  .testi-grid { grid-template-columns: repeat(2, 1fr); }
  .footer-grid { grid-template-columns: repeat(2, 1fr); }
  .footer-bottom-inner { flex-direction: row; justify-content: space-between; align-items: flex-end; }
  .footer-bottom-legal { text-align: left; }
  /* Assinatura e políticas encostam à direita, como no .ft-bot da Solar */
  .footer-bottom-right { align-items: flex-end; text-align: right; }
  .cookie-banner { flex-direction: row; align-items: center; justify-content: space-between; }
}

/* --- Desktop --- */
@media (min-width: 960px) {
  .nav { display: flex; gap: 2rem; }
  .menu-toggle { display: none; }
  /* CTA do header volta ao rótulo completo e padding normal */
  .nc-full { display: inline; }
  .nc-short { display: none; }
  .nav-cta { padding: .56rem 1.15rem; font-size: .7rem; letter-spacing: .12em; }

  .testi-grid { grid-template-columns: repeat(3, 1fr); }
  .footer-grid { grid-template-columns: 1.6fr 1fr 1fr; }

  .day-inner { grid-template-columns: 1fr 1fr; gap: 4rem; }
  /* order volta ao natural: em duas colunas a foto fica À ESQUERDA, ao lado do
     texto, e não antes dele. O `order: -1` lá em cima vale só no empilhado. */
  .day-content { padding: 0; order: 0; }

  /* Programação: um card por dia, lado a lado. São DOIS dias (22 e 23/08) —
     com repeat(3, 1fr), herdado dos 3 dias do Café com Orquídeas, sobrava uma
     coluna vazia à direita e os cards ficavam desalinhados do resto da página. */
  .schedule-grid { grid-template-columns: repeat(2, 1fr); gap: 1.8rem; }

  /* Tarifas: os três pacotes lado a lado */
  .rates-grid { grid-template-columns: repeat(3, 1fr); gap: 1.8rem; }

  .walk { padding: var(--section-gap) 0; }
  .walk-inner { grid-template-columns: 1fr 1fr; gap: 4rem; }
  .walk-content { padding-right: 1rem; }
  .walk-frame { max-width: 460px; margin-left: auto; }
}

/* Tablet: os 2 dias de programação já cabem lado a lado; as tarifas ficam
   melhor em 1 coluna até o desktop (preço grande). */
@media (min-width: 720px) and (max-width: 959px) {
  .schedule-grid { grid-template-columns: repeat(2, 1fr); }
  .rates-grid { grid-template-columns: repeat(3, 1fr); }
}

/* --- Telas largas --- */
@media (min-width: 1280px) {
  .hero-title { font-size: 3.6rem; }
}


/* ============ 21. PESO DOS TÍTULOS ============
   NÃO REABRIR ESTE BLOCO COM font-weight: 700.

   Existiu aqui, até 03/08/2026, uma regra que forçava 700 em h1–h4 e em toda
   a tipografia serifada da folha (.hero-title, .brand-mark, .schedule-date,
   .rate-*, .faq-item summary, .ts-value, .social-proof-stat). Ela fazia
   sentido enquanto a fonte era a PT Serif, que desenha um 700 de verdade.
   Com a volta para a Bree Serif — peso ÚNICO 400 — o 700 virou negrito
   SINTETIZADO: o navegador engorda o traço por conta própria e o resultado
   é um título borrado, diferente do desenho da fonte. Como o bloco ficava no
   FIM da folha, vencia por ordem e contaminava as três páginas de uma vez.

   Cada um daqueles seletores já declara `font-weight: 400` no seu próprio
   bloco, lá em cima — por isso apagar aqui bastou, sem precisar reescrever
   nada. O contraste da hierarquia vem do TAMANHO e da cor, não do peso; onde
   é preciso peso de verdade, use a Poppins (--font-sans), que tem 400/500/
   600/700 reais.

   Se algum dia a fonte serifada mudar de novo, é aqui que se checa primeiro:
   antes de pedir 700, confirme se a família carregada no <head> das LPs tem
   esse peso. */


/* ============ OUTROS EVENTOS — ponte entre as páginas do site ============
   Adicionada em 31/07/2026. Sem ela, quem cai direto nesta página por anúncio
   ou busca não descobre que existe outra.
   Fica entre o FAQ (branco) e o CTA final (verde), em creme, para as três
   faixas não encostarem uma na outra com o mesmo fundo. */
.other-events { padding: var(--section-gap) 0; background: var(--c-cream); }
.other-grid { display: grid; grid-template-columns: 1fr; gap: 1.6rem; }

.other-card {
  display: flex; flex-direction: column; color: var(--c-text);
  background: var(--c-white); border-radius: var(--radius); overflow: hidden;
  box-shadow: 0 10px 40px rgba(1,58,23,.06);
  transition: transform .4s var(--ease), box-shadow .4s var(--ease);
}
.other-card:hover { transform: translateY(-6px); box-shadow: 0 24px 60px rgba(1,58,23,.13); }
.other-img { aspect-ratio: 16/9; overflow: hidden; }
.other-img img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.other-card:hover .other-img img { transform: scale(1.04); }

.other-body { padding: 1.8rem; display: flex; flex-direction: column; flex: 1; }
.other-date { font-size: .74rem; color: var(--c-forest); font-weight: 700; margin-bottom: .5rem; }
.other-body h3 { font-size: 1.5rem; margin-bottom: .7rem; }
.other-desc { color: var(--c-muted); font-size: .95rem; margin-bottom: 1.4rem; flex: 1; }
/* O card inteiro é o link — este é só o sinal visual de que dá para clicar,
   por isso é <span> e não <a> (link dentro de link é HTML inválido). */
.other-cta { font-size: .8rem; font-weight: 700; color: var(--c-terra); }
.other-cta::after { content: " →"; }
.other-card:hover .other-cta { color: var(--c-terra-dk); }

/* O card da agenda completa não tem foto: vai em bege, com o corpo centrado,
   para não parecer um card de imagem que falhou em carregar.
   O `flex: 0 1 auto` na descrição é o que faz a centralização valer — com o
   `flex: 1` herdado, ela esticava e empurrava tudo para o topo. */
.other-card--all { background: var(--c-sand); }
.other-card--all .other-body { justify-content: center; }
.other-card--all .other-desc { flex: 0 1 auto; }

/* GRADE EM UMA COLUNA — o card da agenda completa fica EMBAIXO do card do
   evento irmão, não ao lado.
   Era `1fr 1fr` a partir de 720px, e os dois ficavam lado a lado. Empilhados
   eles passam a ler como uma escada: primeiro o convite concreto (a outra data,
   com foto e preço), depois a saída mais ampla ("e tem mais o ano inteiro").
   Lado a lado os dois competiam, e o card sem foto — que é o mais fraco
   visualmente — disputava atenção com o que tem imagem.

   ⚠ Isto vale enquanto houver UM card de evento + o da agenda. Ao publicar uma
   terceira LP, entra um segundo card de evento aqui e aí a conta muda: o certo
   passa a ser duas colunas para os cards de EVENTO e o da agenda ocupando a
   linha inteira embaixo (`grid-column: 1 / -1`). */
.other-grid { grid-template-columns: 1fr; }

/* Links do rodapé que SAEM desta página (a fazenda e o outro evento).
   Filete acima para separar das âncoras internas logo acima — sem isso a
   pessoa clica achando que vai rolar a página, e troca de página. */
.footer-link-out {
  margin-top: .35rem; padding-top: .7rem;
  border-top: 1px solid rgba(255,255,255,.14);
  color: #fff;
}
.footer-link-out + .footer-link-out { margin-top: 0; padding-top: 0; border-top: 0; }

/* ============ LINKS DE OUTRA PÁGINA NO MENU ============
   Os dois últimos itens do menu não são âncoras de seção: levam para as landing
   pages do A Gosto de Caminhar e do Café com Orquídeas.

   LARGURA — o menu passou de 4 para 6 itens e deixou de caber na barra nas
   telas médias. Medido nesta página: marca 288px + menu 698px + botão 159px =
   1145px de conteúdo. O container tem 1240px de teto menos 44px de padding, ou
   seja 1196px úteis — só a partir de 1240px de viewport sobra folga (51px).
   Por isso a barra horizontal só entra em 1240px; entre 960 e 1239 o menu volta
   ao hambúrguer, onde os 6 itens cabem em coluna sem aperto. O bloco de 960px
   mais acima segue valendo para o resto (CTA, rótulos), só o .nav e o
   .menu-toggle é que mudam de faixa. */
/* COR — pedido do Cauã (31/07/2026): estes dois eram terracota clareado para
   se distinguirem das âncoras. Agora seguem a MESMA cor dos demais itens do
   menu: branco sobre o hero, escuro quando o cabeçalho vira creme (.scrolled).
   Por isso não há regra de cor aqui — herdam de `.nav a` e de
   `.site-header.scrolled .nav a`. Fixar #fff quebraria o estado rolado, onde o
   fundo é creme e o branco sumiria.
   Quem sinaliza que o link troca de página passa a ser só o filete separador. */

/* A marca e o bloco do botão não podem encolher abaixo do próprio texto.
   Sem isto, o flex do .nav-inner espremia a caixa da marca quando o menu
   cresceu para 6 itens — e como .brand-mark é `nowrap`, o texto vazava da
   caixa e passava POR CIMA do primeiro item do menu (medido: 27px de invasão
   em 1240px, sem que a caixa acusasse sobreposição).
   Quem cede espaço agora é o menu, cujos itens já encolhem por media query. */
.nav-inner > .brand,
.nav-inner > .nav-actions { flex-shrink: 0; }

/* 960–1239px — a faixa dos notebooks e das janelas não maximizadas.
   Aqui os 6 itens não cabem no tamanho cheio, mas ESCONDER o menu atrás do
   hambúrguer é pior: o visitante deixa de ver que existem outras páginas, que é
   justamente o que estes links vieram resolver. Então o menu fica, e o que
   encolhe é o que não é essencial nesta largura:
     · a linha "MATA ATLÂNTICA · SILVA JARDIM, RJ" sai (a marca continua legível);
     · o botão usa o rótulo curto que já existia (.nc-short);
     · corpo e respiro do menu diminuem.
   Contas medidas nesta faixa: sobra ~69px na principal e ~49px nas páginas de
   evento (que têm um item a mais). Mexer nos rótulos do menu exige refazer a
   medição. */
/* Abaixo de 1000px o menu volta ao hambúrguer. Medido: entre 960 e 999 a barra
   da página PRINCIPAL estoura até 37px além da margem direita (os rótulos dela
   são os mais longos). As páginas de evento aguentariam até 960, mas o limite é
   o mesmo nas três — dois limites diferentes seria divergência sem ganho. */
@media (min-width: 960px) and (max-width: 999.98px) {
  .nav { display: none; }
  .menu-toggle { display: flex; }
}

@media (min-width: 1000px) and (max-width: 1239.98px) {
  .brand-sub { display: none; }
  .brand-mark { font-size: .82rem; }
  .brand-logo { height: 38px; }

  .nav { display: flex; gap: .85rem; }
  .nav a { font-size: .76rem; }
  .menu-toggle { display: none; }

  .nc-full { display: none; }
  .nc-short { display: inline; }
  .nav-cta { padding: .5rem .8rem; font-size: .64rem; }

}

@media (min-width: 1240px) {
  /* Respiro e corpo menores que o padrão. Nasceu em 31/07/2026 para devolver os
     ~150px que os dois links de LP consumiam no menu da página principal.
     Esses dois links SAÍRAM em 04/08/2026, mas a regra fica: quem trabalha no
     limite agora é o menu das LPs de evento, que tem SETE itens e estoura a
     barra com oito (medido a 1536px). Aumentar de volta reabre o aperto lá. */
  .nav { gap: 1.15rem; }
  .nav a { font-size: .82rem; }
}

/* O filete vertical/horizontal do .nav-lp — que separava as âncoras dos links
   que trocavam de página — foi REMOVIDO em 04/08/2026, com os dois links.
   Eram três blocos de regra (≥1240px, ≥960px e a versão em coluna do
   hambúrguer) apoiados no seletor `.nav a:not(.nav-lp) + a.nav-lp`.
   A classe não sobrou em nenhum HTML: a principal era a única que a usava — o
   menu das LPs de evento nunca teve .nav-lp. Está no histórico do git. */
