/* =========================================================================
   BRADA · SITE V2 — o site NA LINGUAGEM da LP Assinatura para Empresas
   =========================================================================

   MUDANÇA DE ABORDAGEM (18/09/2026). A primeira V2 era um RE-TINTE: carregava
   o `style.css` e trocava tokens por cima. Dava a cor certa e a estrutura
   antiga. O Bender liberou refazer design, layout, fontes e palavras — então
   agora é o contrário:

     As páginas V2 RECONSTRUÍDAS carregam `lp-brada.css` e usam os componentes
     `.emp-*` DA PRÓPRIA LP. Não imitam a linguagem: são escritas nela.

   Este arquivo é só o que o SITE tem e a LP não: um menu de topo (a LP não
   tem menu, e isso é a regra 8), grades de produto, galeria e o rodapé com
   navegação. Carrega DEPOIS do `lp-brada.css`.

   DUAS ESPÉCIES DE PÁGINA V2, e a diferença importa para quem for mexer:
     · RECONSTRUÍDA — carrega `lp-brada.css` + este arquivo. HTML escrito à
       mão, marcado com `<!-- v2-manual -->`. O gerador NÃO a sobrescreve.
     · TEMATIZADA — carrega `style.css` + `site-v2-tema.css`. É a original
       com a paleta trocada. Gerada por `referencia/gerar-v2.py`.
   Reconstruir uma página é mover ela da segunda espécie para a primeira.

   ⚠️ A FONTE DE DISPLAY É PROVISÓRIA. As comps da Gabi usam uma serifada e o
   projeto não tem arquivo de serifada licenciado — só Poiret One, Parisienne
   e Jost em `assets/fonts/`. Então `--disp` é uma PILHA DO SISTEMA de
   serifada old-style: Iowan Old Style no iPhone e no Mac (é a mais próxima
   das comps), Palatino no Windows, Georgia como piso universal. Nenhum
   arquivo novo, nenhuma licença inventada. Quando a Gabi mandar a fonte
   certa, é um `@font-face` e uma linha de `--disp`.
   ========================================================================= */

@font-face{font-family:'Jost';font-style:normal;font-weight:100 900;font-display:swap;
  src:url(fonts/jost-400.woff2) format('woff2')}
@font-face{font-family:'Parisienne';font-style:normal;font-weight:400;font-display:swap;
  src:url(fonts/parisienne-400.woff2) format('woff2')}
@font-face{font-family:'Poiret One';font-style:normal;font-weight:400;font-display:swap;
  src:url(fonts/poiret-one-400.woff2) format('woff2')}

:root{
  --titulo:'Poiret One',Futura,'Century Gothic',sans-serif;
  --script:'Parisienne',cursive;
  --texto:'Jost','Segoe UI',system-ui,sans-serif;
  color-scheme:light;
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:5rem}
/* ⚠️ `overflow-x:clip` na RAIZ, e não só `hidden` no body.
   Medido em 18/09/2026, num viewport de 375: a página rolava 300px de área
   VAZIA — `documentElement.scrollWidth` dava 808 e a rolagem acontecia de
   verdade. A causa não foi encontrada: nenhum elemento mede mais de 375px,
   esconder cada um dos ~300 elementos um a um não reduz o `scrollWidth`,
   zerar todos os pseudo-elementos não muda nada, e `elementFromPoint` na
   faixa rolada não devolve NADA — é área em branco sem dono. O `hidden` no
   body não bastava porque o body virava container de rolagem e o overflow
   subia para o documento.
   `clip` mata a rolagem sem transformar a raiz em container de rolagem
   (o que quebraria o `position:sticky` do topo). Verificado depois: nenhum
   conteúdo ficou inacessível — a área clipada era a área vazia.
   FICA COMO PERGUNTA ABERTA, não como resolvida. */
html{overflow-x:clip}
body{margin:0;background:#F2ECE0;color:#2B1C12;font-family:var(--texto);
  font-size:18px;line-height:1.7;-webkit-font-smoothing:antialiased;
  overflow-x:clip}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:focus-visible{outline:2px solid #7A5D00;outline-offset:3px}

/* A serifada entra como display da linha. Substitui `--disp` do `.emp`, que
   por padrão aponta para Poiret One. */
.emp{ --disp:'Iowan Old Style','Palatino Linotype','Book Antiqua',Palatino,
        Georgia,'Noto Serif','Times New Roman',serif; }
/* A serifada tem eixo vertical e conta de caractere diferentes do Poiret:
   sem afrouxar o tracking e apertar a entrelinha ela fica pesada no título. */
.emp .emp-t{letter-spacing:.005em;line-height:1.12;font-weight:400}
.emp .emp-t--g{line-height:1.05}
/* O wordmark continua em Poiret: é o logotipo, não título de seção.
   ⚠️ SEM o escopo `.emp`. O `lp-brada.css` declara `.emp-marca b{font-family:
   var(--disp)}`, e `--disp` só existe DENTRO de `.emp`. O cabeçalho do site
   fica FORA dele, então a variável vinha vazia e o logotipo caía para o Jost
   herdado — o do topo em Jost, o do rodapé em Poiret, na mesma página. */
.emp-marca b{font-family:var(--titulo)}

/* =========================================================================
   0a · A CALHA ÚNICA — o conserto da diagramação no desktop
   =========================================================================
   MEDIDO em 18/09/2026, num viewport de 1440: a home tinha QUATRO margens
   esquerdas diferentes — 0, 72, 120 e 312. Nada alinhava, e era isso que
   fazia a página parecer desmontada no navegador.

   A causa é a mistura de duas convenções que, sozinhas, estão certas:
     · os blocos do SITE centram uma coluna (`max-width:74rem` + `auto`);
     · os blocos sangrados da LP usam a CALHA (`padding:var(--gut)`), porque
       na LP a foto precisa encostar na borda da tela.
   Num viewport de 1425 a primeira dá margem de 120px e a segunda dá 72px.
   Duas réguas, dois alinhamentos.

   O conserto é escolher UMA régua: a calha passa a ser a própria distância
   até a coluna de 74rem, e as caixas centradas param de recentrar. Assim
   todo bloco — sangrado ou não — começa no mesmo x, e em telas muito largas
   a calha cresce sozinha em vez de o texto esticar.
   ========================================================================= */
:root{ --sv-gut: max(1.4rem, calc((100vw - 74rem) / 2)); }
.emp{ --gut: var(--sv-gut); }
/* Quem já centrava para de centrar: a calha agora faz esse trabalho, e
   manter os dois gera a diferença de 8px entre o topo e o conteúdo. */
.sv-topo{ padding-inline:var(--sv-gut) }
.sv-topo__in,.sv-in,.emp-bl__in,.emp-pilares__in,.emp-rodape__in{ max-width:none }
/* O `--estreito` continua centrado DE PROPÓSITO: bloco curto e centralizado
   é composição, não desalinho. */
.emp-bl__in--estreito{ max-width:50rem; margin-inline:auto }
/* A faixa somava a calha DEPOIS de centrar em 74rem — dava 192px. */
.emp-faixa__txt{ max-width:none; padding-inline:var(--sv-gut) }
/* No mosaico o texto é sempre a coluna da esquerda; ele encosta na calha de
   um lado e respira do outro. */
.emp-mosaico__txt{ padding-left:var(--sv-gut); padding-right:clamp(1.4rem,3.4vw,3.4rem) }
/* A calha alargou as colunas de texto e a linha passou de 82 caracteres.
   ~34em ≈ 68 caracteres. Em `em`, nunca em `ch` (armadilha 3.2). */
.emp-rec__txt .emp-corpo,.emp-faixa__txt .emp-corpo,.emp-mosaico__txt .emp-corpo{
  max-width:34em }
/* O `.emp-sub` so ganha medida quando esta num bloco centrado. Fora dele,
   com a calha nova, ele corria os 1.169px inteiros. */
.emp-bl__in > .emp-sub,.sv-in > .emp-sub{ max-width:34em }

/* =========================================================================
   0c · O HERO DE FOTO COM TEXTO POR CIMA (`.sv-hero`)
   =========================================================================
   O hero de painéis da LP separa texto e foto em duas faixas: você lê um
   bloco, depois desce e vê a foto. O Bender pediu o molde da V1 — UMA cena
   só, foto sangrada e o texto por cima dela. É também o que economiza uma
   tela inteira de rolagem.

   ⚠️ O VÉU É MEDIDO, NÃO ESTIMADO (regra 3 do CLAUDE.md). Amostrando 16.740
   pixels da região onde o texto se apoia no `hero-fundo.jpg`, contra o creme
   #F2ECE0, o pior pixel dá:
        véu 0,50 → 2,98:1     véu 0,60 → 4,02:1
        véu 0,65 → 4,73:1     véu 0,70 → 5,50:1
   Por isso o gradiente começa em 0,66 e não em 0,5: abaixo disso o título
   reprova em cima da flor clara. TROCOU A FOTO DO HERO? REMEÇA — o script
   está no fim deste arquivo, em comentário.
   ========================================================================= */
.sv-hero{position:relative;display:flex;align-items:flex-end;overflow:hidden;
  min-height:min(82svh,720px);background:#3B2416;color:#F2ECE0;
  padding:clamp(5rem,12vh,8rem) var(--sv-gut) clamp(2.4rem,5vh,3.6rem)}
.sv-hero__foto{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  object-position:center 45%}
.sv-hero::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(43,26,15,.66) 0%,rgba(43,26,15,.72) 45%,
    rgba(43,26,15,.84) 100%)}
.sv-hero__in{position:relative;z-index:1;width:100%}
.sv-hero .emp-rot{color:#DFBC4E}                 /* 7,89:1 sobre o véu — medido */
.sv-hero .emp-t{color:#F2ECE0}
.sv-hero .emp-sub{color:#E4D9C4;max-width:32em;margin-top:1.1rem}
.sv-hero .emp-fil{background:#A8823C}
.sv-hero__acoes{display:flex;flex-wrap:wrap;gap:.9rem 1rem;align-items:center;
  margin-top:clamp(1.6rem,3vw,2.4rem)}
.sv-hero__acoes .botao--vazado{border-color:#E4D9C4;color:#F2ECE0;background:transparent}
.sv-hero__acoes .botao--vazado:hover{background:rgba(242,236,224,.16);border-color:#F2ECE0}
@media (max-width:700px){
  .sv-hero{min-height:min(86svh,680px)}
}

/* =========================================================================
   0b · O HERO DA HOME NÃO É O HERO DA LP
   Na LP o hero pode ocupar 1,5 tela: é página de uma decisão e o visitante
   chegou por anúncio. Na home ele precisa deixar ver que há site embaixo.
   Medido: painéis 534px + foto 801px = 1335px antes de qualquer conteúdo,
   num viewport de 900. A foto ficava inteira abaixo da dobra.
   ========================================================================= */
@media (min-width:981px){
  .emp-hero__foto{ aspect-ratio:auto; height:min(52svh,460px); min-height:0 }
  /* A faixa sangrada ia a 76svh e engolia a tela inteira antes do texto
     aparecer. Na LP isso e declaracao; numa home e parede. */
  .emp-faixa__foto{ max-height:min(46svh,420px) }
  /* O mosaico pedia 28rem de altura minima (448px) e crescia com o texto;
     no desktop a foto ficava desproporcional ao lado. */
  .emp-mosaico__foto{ min-height:0 }
}

/* =========================================================================
   0 · OS BOTÕES
   O `lp-brada.css` USA `.botao` mas não o DEFINE — na LP ele vem do
   `style.css`. A página reconstruída não carrega o `style.css`, então sem
   este bloco o botão vira um link pelado: sem fundo, sem borda, sem
   padding. Era a causa dos dois ALTO de contraste no primeiro teste — um
   `botao--vazado` com texto creme sobre fundo creme, 1,13:1.
   Retângulo puro, caixa alta com tracking largo, 44px de altura mínima.
   ========================================================================= */
.botao{display:inline-flex;align-items:center;justify-content:center;gap:.7rem;
  min-height:48px;padding:1rem 2.3rem;font-family:var(--texto);font-weight:500;
  font-size:max(.75rem,.78rem);letter-spacing:.24em;text-transform:uppercase;
  line-height:1;text-align:center;
  border:1px solid #3B2416;background:#3B2416;color:#F2ECE0;
  transition:background .3s,color .3s,border-color .3s}
.botao:hover{background:#2B1A0F;border-color:#2B1A0F}
.botao--vazado{background:transparent;color:#3B2416;border-color:#3B2416}
.botao--vazado:hover{background:#3B2416;color:#F2ECE0}
.botao--claro{background:#A8823C;border-color:#A8823C;color:#2B1C12}
.botao--claro:hover{background:#8E6B2C;border-color:#8E6B2C;color:#F2ECE0}
.botao--pequeno{min-height:44px;padding:.75rem 1.5rem;letter-spacing:.18em}
/* Sobre a foto do hero o vazado escuro desaparece: inverte para creme.
   O `lp-brada.css` já faz isso em `.emp-hero__acoes`, mas repetimos aqui
   porque lá a regra depende do `.botao` base que agora vive neste arquivo. */
.emp-hero__acoes .botao--vazado{border-color:#E4D9C4;color:#F2ECE0;background:transparent}
.emp-hero__acoes .botao--vazado:hover{background:rgba(242,236,224,.16);border-color:#F2ECE0}
/* Em bloco cacau, o vazado também inverte. */
.sv-bl--choc .botao--vazado,.emp-bl--choc .botao--vazado{border-color:#A8823C;color:#F2ECE0}
.sv-bl--choc .botao--vazado:hover,.emp-bl--choc .botao--vazado:hover{background:#A8823C;color:#2B1C12}

/* =========================================================================
   1 · O TOPO — o que a LP não tem
   A LP é página de uma decisão e não tem menu (regra 8). O site precisa de
   um. Na linguagem da linha: creme, um filete de bronze embaixo em vez de
   sombra, rótulo em caixa alta com tracking largo, e o piso de 12px do
   `max()` — sem ele o clamp entrega 10,6px no celular (armadilha 3.5).
   ========================================================================= */
.sv-topo{position:sticky;top:0;z-index:60;background:var(--cr,#F2ECE0);
  border-bottom:1px solid #D8CCB4;padding-inline:var(--sv-gut)}
/* Sem `max-width` aqui: a calha (0a) e que define a coluna. Centrar de
   novo devolvia a segunda regua e o logotipo saia 7px fora do resto. */
.sv-topo__in{min-height:4.4rem;
  display:flex;align-items:center;justify-content:space-between;gap:1.2rem}
/* 44px de altura no logotipo: ele é link para a home e no celular media 38px,
   abaixo do alvo de toque da WCAG 2.5.8. Achado pelo `auditoria-lp.js`. */
.sv-topo .emp-marca{display:flex;flex-direction:column;justify-content:center;
  min-height:44px}
.sv-topo .emp-marca b{font-size:1.5rem;letter-spacing:.2em}
.sv-topo .emp-marca i{font-size:.95rem}
/* A assinatura da tarja de pilares vem a 11,84px do `lp-brada.css` — caixa
   alta com tracking largo abaixo de 12px não se lê (armadilha 3.5). Piso. */
.emp-pilares__ass{font-size:max(.75rem,clamp(.7rem,.95vw,.8rem))}
.sv-menu{display:flex;align-items:center;gap:clamp(.7rem,1.1vw,1.15rem)}
/* Onze itens e nao sete: o menu tem que ser o MESMO em toda pagina, senao a
   pessoa clica em Eventos e descobre que existiam Natal e Parceiros. Com
   onze, o tracking de .2em nao cabe em 1184px — .13em cabe e continua sendo
   o rotulo em caixa alta da linha. */
.sv-menu a{font-size:max(.75rem,.76rem);letter-spacing:.13em;text-transform:uppercase;
  font-weight:500;color:#5C3D28;position:relative;
  display:inline-flex;align-items:center;min-height:44px}
.sv-menu a::after{content:"";position:absolute;left:0;right:100%;bottom:.9rem;
  height:1px;background:#A8823C;transition:right .3s}
.sv-menu a:hover::after,.sv-menu a[aria-current="page"]::after{right:0}
.sv-menu a[aria-current="page"]{color:#2B1C12}
.sv-ham{display:none;min-width:44px;min-height:44px;align-items:center;
  justify-content:center;color:#2B1C12}
.sv-ham svg{width:26px;height:26px}
.sv-movel{display:none;position:fixed;inset:4.4rem 0 auto 0;z-index:55;
  background:var(--cr,#F2ECE0);border-bottom:1px solid #A8823C;
  padding:.6rem var(--gut,1.4rem) 1.4rem;
  transform:translateY(-12px);opacity:0;visibility:hidden;
  transition:transform .3s,opacity .3s,visibility .3s}
.sv-movel.aberto{transform:none;opacity:1;visibility:visible}
.sv-movel a{display:flex;align-items:center;min-height:52px;
  border-bottom:1px solid #D8CCB4;font-size:max(.8rem,.82rem);letter-spacing:.2em;
  text-transform:uppercase;font-weight:500;color:#5C3D28}
/* `.sv-movel a` (0,1,1) vence `.botao` (0,1,0) e pintava o CTA do menu de
   celular com a cor dos links: marrom #5C3D28 sobre o cacau do proprio
   botao, 1,49:1. Devolve a cor do botao. */
.sv-movel .botao{margin-top:1.2rem;width:100%;color:#F2ECE0;letter-spacing:.24em}
.sv-movel .botao:hover{color:#F2ECE0}
@media (max-width:900px){
  .sv-menu{display:none}
  .sv-ham{display:inline-flex}
  .sv-movel{display:block}
}
@media (prefers-reduced-motion:reduce){ .sv-movel{transition:none} }

/* =========================================================================
   2 · GRADE DE PRODUTO — o cartão da linha
   Nas comps o cartão não tem contorno nem canto redondo: tem um filete de
   bronze no topo e se encosta no vizinho. `minmax(min(...),1fr)` é a
   armadilha 3.3: `minmax(20rem,1fr)` cria um piso de 320px que estoura uma
   coluna de 335px.
   ========================================================================= */
.sv-grade{display:grid;gap:1px;background:#D8CCB4;
  grid-template-columns:repeat(auto-fit,minmax(min(17rem,100%),1fr))}
/* Cartão SEM foto precisa de coluna mais larga. Com a mesma grade dos
   cartões com foto, as quatro ocasiões do `eventos` ficavam em 4 colunas de
   243px — ~16em de medida, onde a linha comporta 30 caracteres e o texto
   vira escada. Sem imagem para carregar o olho, duas colunas largas leem
   muito melhor que quatro estreitas. */
.sv-grade:not(:has(.sv-cartao__foto)){
  grid-template-columns:repeat(auto-fit,minmax(min(26rem,100%),1fr))}
.sv-cartao{background:var(--cr,#F2ECE0);border-top:3px solid #A8823C;
  padding:0 1.5rem 1.8rem;display:flex;flex-direction:column;gap:.7rem}
/* A FOTO SANGRA no cartão. Recuada pelo padding ela media 243px num cartão
   de 291 e o resultado era um selo no meio de muito creme — nas comps os
   painéis se encostam, não flutuam. As margens negativas cancelam o padding
   lateral; o `margin-top:0` a encosta no filete de bronze do topo. */
.sv-cartao__foto{margin:0 -1.5rem 1.1rem;aspect-ratio:4/3;width:auto;overflow:hidden;
  background:#E8E0CE}
/* Cartão sem foto (as ocasiões do `eventos`) precisa do respiro de volta. */
.sv-cartao:not(:has(.sv-cartao__foto)){padding-top:1.7rem}
.sv-cartao__foto img{width:100%;height:100%;object-fit:cover}
.sv-cartao h3{font-family:var(--disp);font-weight:400;font-size:1.3rem;
  line-height:1.2;color:#2B1C12;margin:0}
.sv-cartao p{font-size:.95rem;line-height:1.6;color:#5C3D28;margin:0;max-width:30em}
.sv-cartao .botao{margin-top:auto;align-self:flex-start}

/* =========================================================================
   2a · O PASSO COM TÍTULO
   `.emp-passo` é uma grade de DUAS colunas: `2.6rem` para o número e `1fr`
   para o resto. Na LP o passo tem dois filhos — o `<b>` e o `<p>`. Ao pôr
   um `<h3>` no meio, o terceiro filho volta para a PRIMEIRA coluna e o
   parágrafo passa a viver numa faixa de 2,6rem: uma palavra por linha, e a
   seção inteira estica para 2.340px de altura. Foi o que aconteceu no
   `eventos-v2`.
   Prender tudo o que não é o número na coluna 2 conserta o caso e qualquer
   outro passo que venha a ganhar um título.
   ========================================================================= */
.emp-passo > :not(b){ grid-column:2 }
.emp-passo h3{ font-family:var(--disp);font-weight:400;font-size:1.15rem;
  line-height:1.25;color:#2B1C12;margin:0 0 .35rem }

/* =========================================================================
   2b · A GRADE DE ITENS CURTOS (`.emp-mot`)
   Na LP ela recebe QUATRO motivos. Com seis ingredientes ela abriu seis
   colunas de ~180px e o texto virou três palavras por linha — ilegível e
   feio. O piso de 20rem faz cair para três colunas de ~390px, que é onde
   uma frase curta ainda respira. `min()` para não estourar no celular.
   ========================================================================= */
.sv-bl .emp-mot,.emp-bl .emp-mot{
  grid-template-columns:repeat(auto-fit,minmax(min(20rem,100%),1fr))}
/* O item do `.emp-mot` tem fundo creme. Sobre uma seção creme ele some: na
   prova social os três depoimentos viravam texto solto no vazio. O filete
   de bronze no topo é o que faz o cartão existir em qualquer fundo — é o
   mesmo recurso das comps, onde o painel se anuncia por uma barra e não
   por um contorno. */
.emp-mot__i{border-top:3px solid #A8823C}
.sv-bl--cr2 .emp-mot__i{background:#F2ECE0}

/* =========================================================================
   3 · GALERIA — mosaico sangrado, sem moldura
   ========================================================================= */
.sv-galeria{display:grid;gap:2px;
  grid-template-columns:repeat(auto-fill,minmax(min(13rem,46%),1fr))}
.sv-galeria__i{margin:0;position:relative;aspect-ratio:4/3;width:100%;
  overflow:hidden;background:#E8E0CE;cursor:zoom-in}
.sv-galeria__i img{width:100%;height:100%;object-fit:cover;
  transition:transform .6s ease}
.sv-galeria__i:hover img{transform:scale(1.04)}
@media (prefers-reduced-motion:reduce){ .sv-galeria__i img{transition:none} }

/* =========================================================================
   4 · O RODAPÉ com navegação
   Reusa `.emp-rodape` da LP e acrescenta o menu que o site precisa. Os
   links têm 44px de altura porque no celular eles são o alvo mais apertado
   da página — foi um dos achados do `auditoria-lp.js`.
   ========================================================================= */
.sv-rodape__menu{display:flex;flex-wrap:wrap;gap:0 1.3rem;margin-top:.9rem}
.sv-rodape__menu a{color:#E4D9C4;font-size:max(.78rem,.8rem);letter-spacing:.14em;
  text-transform:uppercase;display:inline-flex;align-items:center;min-height:44px}
.sv-rodape__menu a:hover{color:#E9C85A}

/* =========================================================================
   5 · O BOTÃO DE WHATSAPP
   ========================================================================= */
.sv-whats{position:fixed;z-index:70;left:max(1rem,env(safe-area-inset-left));
  bottom:max(1rem,env(safe-area-inset-bottom));
  display:inline-flex;align-items:center;gap:.6rem;min-height:48px;padding:0 1.2rem;
  background:#3B2416;color:#F2ECE0;border:1px solid #A8823C;
  font-size:max(.75rem,.78rem);letter-spacing:.16em;text-transform:uppercase;
  font-weight:500;transition:background .25s}
.sv-whats:hover{background:#2B1A0F}
.sv-whats svg{width:20px;height:20px;flex:none;color:#DFBC4E}
@media (max-width:560px){ .sv-whats span{display:none} .sv-whats{padding:0 .95rem} }

/* =========================================================================
   6 · A TARJA DOS TRÊS PILARES
   Artesanal · Profissional · Brasileira — as três palavras que o Bender
   apontou como o que a Brada é. A tarja é o componente `.emp-pilares` da
   LP (nas comps ela fecha a peça com os pilares separados por um cano de
   bronze), com as palavras da casa. Aparece em TODA página V2: declara os
   três num lugar de baixa atenção, enquanto cada página PROVA um.
   Repetir o bloco de três cartões em doze páginas viraria papel de parede.
   ========================================================================= */
.sv-pilares a{color:inherit;border-bottom:1px solid transparent;transition:border-color .3s}
.sv-pilares a:hover{border-bottom-color:#A8823C}

/* =========================================================================
   7 · A ETIQUETA DE PILAR
   O rótulo que marca QUAL pilar aquela seção prova. É `.emp-rot` com o nome
   do pilar em bronze legível na frente. Não é decoração: é a legenda da
   prova — a foto da chef montando prova "artesanal", a tabela de prazos
   prova "profissional", o ingrediente com nome e lugar prova "brasileira".
   ========================================================================= */
.sv-prova{display:inline-flex;align-items:baseline;gap:.5rem;flex-wrap:wrap}
.sv-prova b{font-weight:600;color:#7A5D00}      /* 5,16:1 no creme — medido */
.sv-prova--claro b{color:#DFBC4E}               /* 7,89:1 no cacau — medido */
.sv-prova i{font-style:normal;opacity:.55}

/* =========================================================================
   7b · OS TRÊS PILARES, versão longa
   O Bender apontou exatamente este bloco ("isso que está na imagem") como o
   que a Brada é. A anatomia dele é mantida — numeral romano, nome, texto —
   e só os materiais mudam para os da linha: numeral em bronze, nome na
   serifada de display, divisória de fio em vez de borda em volta, canto
   reto. As colunas se encostam, como os painéis das comps.
   `minmax(min(...),1fr)` porque `minmax(16rem,1fr)` criaria um piso de
   256px que estoura a coluna no celular (armadilha 3.3).
   ========================================================================= */
.sv-pilares-longo{display:grid;gap:1px;background:#D8CCB4;
  grid-template-columns:repeat(auto-fit,minmax(min(16rem,100%),1fr))}
.sv-pilar{background:#F2ECE0;padding:2rem 1.7rem 2.2rem;scroll-margin-top:6rem}
.sv-pilar__n{display:block;font-family:var(--disp);font-size:1.1rem;
  letter-spacing:.3em;color:#7A5D00;margin-bottom:1.1rem}
/* #7A5D00 e nao o bronze #A8823C: sobre creme o bronze da 3,01:1 e o
   numeral e TEXTO, nao ornamento. Regra 1 do CLAUDE.md. O derivado da
   casa da 5,16:1 e mantem a familia da cor. */
.sv-pilar h2{font-family:var(--disp);font-weight:400;font-size:clamp(1.5rem,3vw,2rem);
  letter-spacing:.06em;line-height:1.15;color:#2B1C12;margin:0 0 .9rem}
.sv-pilar p{font-size:1rem;line-height:1.7;color:#5C3D28;margin:0 0 .8rem;max-width:30em}
.sv-pilar__prova{font-size:max(.75rem,.78rem);letter-spacing:.2em;text-transform:uppercase;
  font-weight:500;color:#7A5D00;margin-top:1.3rem;display:block}
/* 44px: o link da prova e da tarja sao alvo de dedo no celular. */
.sv-pilar__prova a{border-bottom:1px solid #A8823C;
  display:inline-flex;align-items:center;min-height:44px}
.sv-pilares a{display:inline-flex;align-items:center;min-height:44px}
/* O alvo aberto pelo link da tarja ganha um filete de bronze à esquerda —
   quem clicou em "Profissional" precisa VER onde chegou. */
.sv-pilar:target{background:#E8E0CE;box-shadow:inset 3px 0 0 #A8823C}

/* =========================================================================
   8 · AJUSTES DE RITMO
   ========================================================================= */
.sv-in{max-width:74rem;margin-inline:auto}
/* Mesmo clamp do `.emp-bl`: 90px contra 96px é diferença que ninguém vê
   isolada e que faz o sistema parecer descuidado quando os dois tipos de
   bloco se alternam na mesma página. */
/* Respiro apertado depois do retorno do Bender ("está tendo que rolar
   muito"). De 96px para ~68px no desktop: continua sendo o dobro do que a
   V1 usava no miolo, sem transformar cada seção numa tela. */
.sv-bl{padding:clamp(2.4rem,5vw,4.2rem) var(--gut,1.4rem)}
.emp-bl{padding:clamp(2.4rem,5vw,4.2rem) var(--gut)}
.emp-mosaico__txt{padding-block:clamp(2.2rem,4.5vw,3.8rem)}
.emp-faixa__txt{padding-block:clamp(2.2rem,4.5vw,3.6rem)}
.emp-mot,.emp-passos{margin-top:1.8rem}
.sv-bl--cr2{background:#E8E0CE}
.sv-bl--choc{background:#3B2416;color:#F2ECE0}
.sv-bl--choc .emp-t{color:#F2ECE0}
.sv-bl--choc .emp-sub,.sv-bl--choc .emp-corpo{color:#E4D9C4}
.sv-pular{position:absolute;left:-9999px}
.sv-pular:focus{position:static;display:inline-block;margin:.6rem;padding:.6rem 1rem;
  background:#3B2416;color:#F2ECE0}

/* =========================================================================
   9 · A LANDING DE CELEBRAÇÕES (`celebracoes-v2.html`)
   =========================================================================
   Uma URL serve quatro ocasiões via `?ocasiao=`, com os quatro painéis no
   DOM — é a regra 8 do CLAUDE.md e continua valendo na V2: LP de anúncio,
   sem menu, um CTA só.

   ⚠️ ESTA PÁGINA CARREGA `dados.js` + `app.js`, e as reconstruídas não.
   Não é incoerência: o motor das abas e o envio do lead JÁ EXISTEM e estão
   testados lá, incluindo a regra 9 (o WhatsApp não espera o banco) e a
   regra 10 (honeypot + `levou_ms`). Reescrever isso em script inline seria
   duplicar o que mais importa não divergir. O `app.js` é um IIFE de módulos
   guardados por presença de elemento: o que não existe na página, não roda.
   O preço é manter os ganchos que ele procura — `.lp-aba[data-oc]`,
   `.lp-painel[data-oc]`, `#formLead`, `.form-estado` — e é o que fazemos.
   ========================================================================= */
.lp-abas{background:var(--cr2,#E8E0CE);padding:1.1rem var(--sv-gut);
  border-bottom:1px solid #D8CCB4}
.lp-abas__interno{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem 1.4rem}
.lp-abas__rotulo{font-size:max(.75rem,.78rem);letter-spacing:.2em;text-transform:uppercase;
  font-weight:500;color:#5C3D28;margin:0}
.lp-abas__botoes{display:flex;flex-wrap:wrap;gap:.5rem}
.lp-aba{font-family:var(--texto);font-size:max(.75rem,.78rem);letter-spacing:.14em;
  text-transform:uppercase;font-weight:500;color:#5C3D28;
  min-height:44px;padding:0 1.1rem;border:1px solid #BCAB8E;background:transparent;
  transition:background .25s,color .25s,border-color .25s}
.lp-aba:hover{border-color:#5C3D28;color:#2B1C12}
/* A ocasião ativa é cacau sólido: nas comps o estado atual não é um tom mais
   claro do mesmo, é a inversão do campo. */
.lp-aba--ativa{background:#3B2416;border-color:#3B2416;color:#F2ECE0}
.lp-painel{display:none}
.lp-painel--ativa{display:block}

/* ── o que costuma dar errado: a objeção com a resposta ────────────────── */
.sv-erro{display:grid;gap:1px;background:#D8CCB4;margin-top:1.8rem;
  grid-template-columns:repeat(auto-fit,minmax(min(19rem,100%),1fr))}
.sv-erro__i{background:#F2ECE0;border-top:3px solid #A8823C;padding:1.5rem 1.4rem 1.7rem}
.sv-erro__i h3{font-family:var(--disp);font-weight:400;font-size:1.12rem;line-height:1.3;
  color:#2B1C12;margin:0 0 .6rem}
.sv-erro__i p{font-size:.97rem;line-height:1.6;color:#5C3D28;margin:0;max-width:32em}
.sv-erro__i b{font-weight:500;color:#2B1C12}

/* ── a lista do "o que a gente faz" ───────────────────────────────────── */
.sv-lista{list-style:none;margin:1.6rem 0 0;padding:0;display:grid;gap:.75rem}
.sv-lista li{display:grid;grid-template-columns:1.4rem 1fr;gap:.7rem;align-items:start;
  font-size:1rem;line-height:1.55;color:#5C3D28;max-width:34em}
.sv-lista li::before{content:"";width:.55rem;height:2px;background:#A8823C;margin-top:.7rem}

/* ── o formulário ─────────────────────────────────────────────────────
   O `style.css` não vem junto, então o formulário inteiro mora aqui. Campo
   de 48px, rótulo em caixa alta, foco visível em bronze legível. */
.sv-form{background:#2B1A0F;color:#F2ECE0;padding:clamp(2.4rem,5vw,4.2rem) var(--sv-gut)}
.sv-form .emp-t{color:#F2ECE0}
.sv-form .emp-rot{color:#DFBC4E}
.sv-form .emp-sub{color:#E4D9C4}
.form-aval{margin-top:1.8rem;max-width:56rem}
.form-grade{display:grid;gap:1rem 1.4rem;
  grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr))}
.campo{display:flex;flex-direction:column;gap:.45rem;
  font-size:max(.75rem,.78rem);letter-spacing:.16em;text-transform:uppercase;
  font-weight:500;color:#E4D9C4}
.campo--largo{grid-column:1/-1}
.campo input,.campo select,.campo textarea{
  font-family:var(--texto);font-size:1rem;letter-spacing:normal;text-transform:none;
  min-height:48px;padding:.7rem .9rem;color:#F2ECE0;
  background:rgba(242,236,224,.07);border:1px solid rgba(242,236,224,.28);border-radius:0}
.campo textarea{min-height:7rem;resize:vertical}
.campo input::placeholder,.campo textarea::placeholder{color:rgba(242,236,224,.5)}
.campo select option{color:#2B1C12;background:#F2ECE0}
.campo input:focus-visible,.campo select:focus-visible,.campo textarea:focus-visible{
  outline:2px solid #DFBC4E;outline-offset:1px;border-color:#DFBC4E}
.campo i{font-style:normal;color:#DFBC4E}
/* Caixa de marcar: 44px de alvo, como no formulário da assinatura. */
.consentimento{display:flex;gap:.7rem;align-items:flex-start;min-height:44px;
  padding:.5rem 0;margin-top:1.2rem;cursor:pointer;
  font-size:.9rem;line-height:1.5;letter-spacing:normal;text-transform:none;color:#E4D9C4}
.consentimento input[type=checkbox]{width:1.35rem;height:1.35rem;flex:0 0 auto;
  margin-top:.15rem;accent-color:#A8823C;cursor:pointer}
.form-acoes{display:flex;flex-wrap:wrap;gap:1rem;align-items:center;margin-top:1.6rem}
.form-acoes .botao{background:#A8823C;border-color:#A8823C;color:#2B1C12}
.form-acoes .botao:hover{background:#DFBC4E;border-color:#DFBC4E;color:#2B1C12}
.form-estado{font-size:.9rem;color:#DFBC4E;letter-spacing:normal;text-transform:none}
.oculto{position:absolute;left:-9999px}

/* ── os números da régua ──────────────────────────────────────────────── */
.sv-numeros{display:grid;gap:1px;background:#D8CCB4;margin-top:1.8rem;
  grid-template-columns:repeat(auto-fit,minmax(min(12rem,100%),1fr))}
.sv-numeros div{background:#F2ECE0;padding:1.3rem 1.2rem;border-top:3px solid #A8823C}
.sv-numeros b{display:block;font-family:var(--disp);font-weight:400;
  font-size:clamp(1.5rem,3vw,2.1rem);line-height:1;color:#2B1C12;margin-bottom:.4rem}
.sv-numeros span{font-size:.92rem;line-height:1.45;color:#5C3D28}

/* ── parceiros ────────────────────────────────────────────────────────── */
.sv-parceiros{display:flex;flex-wrap:wrap;gap:.6rem 2rem;margin-top:1.4rem;
  font-size:1rem;color:#5C3D28}
.sv-parceiros span{display:inline-flex;align-items:center;gap:.7rem}
/* A lista e lida como um paragrafo unico e corria os 1.169px. */
.sv-parceiros{max-width:38em}
.sv-parceiros span::before{content:"";width:.5rem;height:2px;background:#A8823C}

/* =========================================================================
   10 · A GALERIA V2
   Mosaico sangrado em três seções — mesas, bolos, doces. Sem moldura, sem
   canto redondo: nas comps a foto encosta na vizinha e o respiro é o fio
   de 2px entre elas.

   A legenda NÃO fica por cima da foto. Texto sobre foto exige véu medido
   (regra 3), e são 28 fotos com luminosidade diferente — medir 28 véus para
   uma legenda de apoio é custo sem retorno. Ela vive embaixo, no creme.
   ========================================================================= */
.sv-mosaico{display:grid;gap:2px;background:#D8CCB4;
  grid-template-columns:repeat(auto-fill,minmax(min(20rem,100%),1fr))}
.sv-mosaico--miudo{grid-template-columns:repeat(auto-fill,minmax(min(15rem,46%),1fr))}
.sv-foto{margin:0;background:#F2ECE0;display:flex;flex-direction:column}
.sv-foto__q{position:relative;aspect-ratio:4/3;width:100%;overflow:hidden;
  background:#E8E0CE;border:0;padding:0;cursor:zoom-in;display:block}
.sv-foto__q img{width:100%;height:100%;object-fit:cover;transition:transform .6s ease}
.sv-foto__q:hover img{transform:scale(1.04)}
.sv-foto__q:focus-visible{outline:2px solid #7A5D00;outline-offset:-3px}
.sv-foto figcaption{padding:.7rem .9rem 1rem;font-size:max(.78rem,.82rem);
  line-height:1.45;color:#5C3D28}
@media (prefers-reduced-motion:reduce){ .sv-foto__q img{transition:none} }

/* ── a lupa ────────────────────────────────────────────────────────────
   `<dialog>` nativo: o navegador entrega foco preso, Esc para fechar e
   fundo inerte sem uma linha de JavaScript para isso. */
.sv-lupa{border:0;padding:0;background:transparent;max-width:min(94vw,1200px);
  max-height:94svh;color:#F2ECE0}
.sv-lupa::backdrop{background:rgba(43,26,15,.92)}
.sv-lupa img{width:100%;height:auto;max-height:84svh;object-fit:contain;display:block}
.sv-lupa__pe{display:flex;justify-content:space-between;align-items:center;gap:1rem;
  padding:.8rem .2rem 0;font-size:max(.78rem,.84rem);color:#E4D9C4}
.sv-lupa__x{min-height:44px;min-width:44px;display:inline-flex;align-items:center;
  justify-content:center;border:1px solid #A8823C;color:#F2ECE0;background:transparent;
  font-size:1.2rem;line-height:1}
.sv-lupa__x:hover{background:#A8823C;color:#2B1C12}

/* =========================================================================
   11 · NA MÍDIA
   A página do clipping. A capa da matéria é foto de PÁGINA DE REVISTA —
   por isso não leva tratamento fotográfico e não entra no mosaico de fotos
   da casa: é documento, não produto.
   ========================================================================= */
.sv-midia{display:grid;gap:1px;background:#D8CCB4;margin-top:1.8rem;
  grid-template-columns:repeat(auto-fit,minmax(min(20rem,100%),1fr))}
.sv-midia__pg{margin:0;background:#F2ECE0;border-top:3px solid #A8823C;padding:1.2rem}
.sv-midia__pg a{display:block;overflow:hidden;background:#E8E0CE}
.sv-midia__pg img{width:100%;height:auto;display:block;transition:transform .6s ease}
.sv-midia__pg a:hover img{transform:scale(1.02)}
.sv-midia__pg figcaption{margin-top:.8rem;font-size:max(.75rem,.78rem);
  letter-spacing:.14em;text-transform:uppercase;color:#7A5D00}
/* A citação que a revista destacou, na voz dela. */
.sv-citacao{font-family:var(--disp);font-weight:400;
  font-size:clamp(1.3rem,2.8vw,2rem);line-height:1.35;color:#2B1C12;
  max-width:26em;margin:0}
.sv-citacao::before{content:"“";color:#A8823C}
.sv-citacao::after{content:"”";color:#A8823C}
.sv-credito{font-size:max(.75rem,.78rem);letter-spacing:.16em;text-transform:uppercase;
  color:#5C3D28;margin-top:1rem}
@media (prefers-reduced-motion:reduce){ .sv-midia__pg img{transition:none} }

/* =========================================================================
   12 · MOVIMENTO — o que se move, e o que se recusa a mover
   -------------------------------------------------------------------------
   A marca é "o brado com contenção". Movimento aqui obedece à segunda
   metade: nada salta, nada pisca, nada chama atenção para si. O olho não
   deve perceber a animação — deve perceber que a página respira.
   Tudo aqui é CSS puro. Nenhuma linha de JavaScript foi acrescentada.
   ========================================================================= */

/* 12a · O CARROSSEL DAS OCASIÕES — a correção de rolagem do celular
   ---------------------------------------------------------------
   Medido em 19/09: a seção "O doce que o momento pede" tinha 2187px num
   iPhone de 390 — cinco telas e meia para QUATRO cartões. Era a maior
   seção do site inteiro, e a razão é aritmética: cada cartão carrega uma
   foto 4:3 de 346px de largura, ou seja 260px só de imagem, e são quatro
   empilhados.

   Encolher a foto não resolve (economiza ~120px de 2187). Passar a duas
   colunas põe o parágrafo em 162px — ~11 caracteres por linha, que é
   exatamente o defeito `linha-espremida` que esta casa já corrigiu uma vez
   na tela de eventos.

   Então os cartões deitam: uma faixa que desliza no dedo, com encaixe.
   2187px viram ~560px. O cartão ocupa 82% da largura DE PROPÓSITO -- o
   pedaço do vizinho espiando na borda é o que avisa que dá para arrastar.
   Sem seta, sem bolinha, sem instrução: a borda cortada é a instrução.

   `:has(.sv-cartao__foto)` restringe ao grid COM foto. O `eventos-v2` usa
   a variante sem foto, que já é curta e lê melhor empilhada. */
@media (max-width:640px){
  .sv-grade:has(.sv-cartao__foto){
    grid-template-columns:none;
    grid-auto-flow:column;
    grid-auto-columns:82%;
    overflow-x:auto;
    scroll-snap-type:x mandatory;
    overscroll-behavior-x:contain;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;
  }
  /* A barra de rolagem some: o corte do cartão vizinho já conta a história,
     e uma barra cinza atravessada estraga o filete de bronze. */
  .sv-grade:has(.sv-cartao__foto)::-webkit-scrollbar{display:none}
  .sv-grade:has(.sv-cartao__foto) > .sv-cartao{scroll-snap-align:start}
}

/* 12b · A FOTO DO CARTÃO GANHA O MESMO ZOOM DA GALERIA
   A galeria, o quadro de fotos e o recorte da revista já aproximam a imagem
   no hover. O cartão de ocasião era o único retrato do site que ficava
   parado — inconsistência, não decisão. Mesma curva, mesma duração. */
.sv-cartao__foto img{transition:transform .6s ease}
.sv-cartao:hover .sv-cartao__foto img{transform:scale(1.04)}
@media (prefers-reduced-motion:reduce){ .sv-cartao__foto img{transition:none} }

/* 12c · ENTRADA POR ROLAGEM — sem uma linha de JavaScript
   -------------------------------------------------------
   `animation-timeline:view()` amarra a animação à posição do elemento na
   janela: o próprio navegador toca o quadro conforme você rola. É o que
   antes exigia IntersectionObserver.

   Três cuidados deliberados:

   1. `@supports` — num navegador sem suporte a regra inteira é ignorada e
      o conteúdo aparece normal. Degradação silenciosa, nunca conteúdo
      invisível. Essa é a única falha grave possível aqui, e ela está
      fechada: sem a propriedade, não há `opacity:0`.

   2. `prefers-reduced-motion:no-preference` — quem pediu menos movimento
      no sistema não recebe nenhum. Aqui a regra sequer é escrita.

   3. Anima COMPONENTES, não seções. A faixa de entrada de `view()` tem o
      comprimento do elemento; numa seção de 2187px o esmaecimento levaria
      centenas de pixels de rolagem e pareceria um defeito. Cartão, passo e
      foto cabem na tela, então a conta fecha em ~40% da altura deles. */
@keyframes sv-surge{ from{opacity:0;transform:translateY(14px)} to{opacity:1;transform:none} }
@supports (animation-timeline:view()){
  @media (prefers-reduced-motion:no-preference){
    .sv-cartao,
    .emp-passo,
    .sv-galeria__i,
    .sv-foto__q,
    .sv-midia__pg,
    .emp-mosaico__txt,
    .sv-citacao{
      animation:sv-surge linear both;
      animation-timeline:view(block);
      animation-range:entry 0% entry 40%;
    }
  }
}

/* =========================================================================
   13 · A SEÇÃO CABE NA TELA — o respiro passa a enxergar a ALTURA
   -------------------------------------------------------------------------
   Bender, 19/09, navegando no notebook a 100% de zoom: "quando eu encaixasse
   uma seção, ela aparecesse toda na minha tela". Medido: num 1440x789 quatro
   seções passavam de uma tela — a pior com 976px, 1,24 telas.

   A CAUSA é de uma linha só. Todo o ritmo vertical do site estava escrito em
   `clamp(min, Nvw, max)` — ou seja, o respiro crescia com a LARGURA e era
   cego para a ALTURA. Num notebook, que é largo e baixo, isso é o pior dos
   mundos: a tela tem 789px de altura e o `5vw` de 1440 entrega 72px de
   padding em cima e embaixo como se houvesse espaço de sobra.

   A correção não é acertar números para o 1440x789 do Bender — é fazer a
   página se ajustar a QUALQUER tela, que foi o que ele pediu em seguida.
   `min(5vw, 6.4vh)` resolve: numa tela alta manda a largura (o desenho fica
   como foi pensado), numa tela baixa a altura entra e segura. Um só token,
   `--sv-ar`, para o site inteiro — mesma lição da calha única `--sv-gut`.

   Só a partir de 860px. No celular a rolagem é natural e esperada; espremer
   seção para caber numa tela de telefone é que seria errado.
   ========================================================================= */
@media (min-width:860px){
  :root{
    /* o respiro: cresce com a largura, mas a altura da tela tem a palavra final */
    --sv-ar:clamp(2.2rem, min(5vw, 6.4vh), 4.2rem);
    /* respiro menor, para os blocos que já carregam foto ou grade */
    --sv-ar-c:clamp(1.8rem, min(4.2vw, 5.2vh), 3.4rem);
  }
  .sv-bl,.emp-bl,.sv-form{padding-block:var(--sv-ar)}
  .emp-mosaico__txt,.emp-faixa__txt{padding-block:var(--sv-ar-c)}

  /* A foto do mosaico tinha `min-height:28rem` fixo — 448px, mais da metade
     de um notebook, antes de qualquer texto. Agora ela cede quando a tela é
     baixa e mantém o tamanho quando há altura. */
  .emp-mosaico__foto{min-height:min(28rem,46vh)}

  /* O título e o subtítulo também engordavam só com a largura. Três linhas
     de display a 3.1rem custam ~160px; numa tela baixa isso é um quinto do
     que existe. */
  .emp-t{font-size:clamp(1.9rem, min(4.2vw, 5.4vh), 3.1rem)}
  .emp-sub{font-size:clamp(1rem, min(1.4vw, 2vh), 1.15rem)}
}

/* Tela BAIXA e larga (notebook): a foto do cartão deita de 4:3 para 3:2.
   Numa grade de quatro colunas isso devolve ~80px de altura à seção sem
   tocar no texto — e 3:2 é razão de foto, não improviso. */
@media (min-width:860px) and (max-height:900px){
  .sv-cartao__foto{aspect-ratio:3/2}
}

/* Tela BAIXA: os espaços INTERNOS também cedem.
   Depois de fazer o padding das seções enxergar a altura, sobravam duas
   teimosas num 1440x789 — e a medição mostrou que o padding já não era o
   culpado. Na lista de passos do `eventos`, 464px dos 901 eram os quatro
   passos e 178px o título; nos cartões do `index`, 443px eram a grade.
   Cortar mais padding de fora não resolveria: é o miolo que precisa ceder.

   Os valores abaixo são o resultado de medir, não de estimar. */
@media (min-width:860px) and (max-height:900px){
  .emp-passos{gap:1.15rem;margin-top:1.5rem}
  .emp-passo{gap:.9rem}
  .emp-mosaico__txt .emp-t{margin-top:1.4rem}
  .emp-cta{margin-top:1.2rem}
  /* o respiro entre o título da seção e a grade de cartões */
  .sv-bl > .sv-in[style]{margin-top:1.1rem !important}
  .emp-bl__in > .emp-sub,.sv-in > .emp-sub{margin-top:.8rem}
}

/* A ESCALA INTEIRA CEDE NUMA TELA BAIXA — e o texto de leitura não.
   -------------------------------------------------------------------------
   O `rem` deste site vale 16px e o texto do corpo está fixo em 18px. Essa
   separação, que existia por acaso, é o que torna este ajuste seguro:
   mexer no `rem` encolhe PADDING, MARGEM, TÍTULO e GAP — tudo escrito em
   rem — e não encosta no parágrafo que a pessoa está lendo.

   15,5px em vez de 16px são ~3% em cada medida rem da página. Parece pouco;
   numa seção de 840px são ~30px, que é a diferença entre caber e não caber.

   Por que 15,5 e não 15: os rótulos usam `max(.75rem,.78rem)` e o piso de
   legibilidade da casa é 11,5px. A 15,5 eles dão 12,09px — acima do piso.
   A 15 dariam 11,7px, e a 14,5 cairiam abaixo. O número tem chão. */
@media (min-width:860px) and (max-height:900px){
  html{font-size:15.5px}
}

/* Tela bem baixa: a foto do cartão deita mais um passo, de 3:2 para 16:9.
   Numa coluna de ~296px isso devolve 31px de altura por cartão. */
@media (min-width:860px) and (max-height:820px){
  .sv-cartao__foto{aspect-ratio:16/9}
}

/* O formulário das celebrações: os campos respiram menos quando não há
   altura, e o bloco de pergunta some do caminho antes do botão. */
/* Os seletores certos, achados medindo o formulario por dentro em vez de
   supor: a altura mora na `.form-grade` (383px dos 852 da secao) e nas
   margens que separam rotulo, titulo e subtitulo do bloco de campos.
   A primeira tentativa mirou `.sv-form .campo`, que nao casou com nada --
   e uma regra que nao casa nao avisa, so nao funciona. Dai medir. */
@media (min-width:860px) and (max-height:900px){
  .sv-form .form-grade{row-gap:.8rem}
  .sv-form .emp-t{margin-top:1.2rem}
  .sv-form .emp-sub{margin-top:.7rem}
  .sv-form .form-aval{margin-top:1.2rem}
  .sv-form .form-acoes{margin-top:.9rem}
  /* o mosaico do `eventos` ainda passava por 34px: os quatro passos cedem
     o ultimo respiro que tinham */
  .emp-mosaico__txt .emp-passos{gap:.9rem}
}

/* Os últimos 22px do mosaico do `eventos` — a seção mais teimosa do site,
   porque acumula título de três linhas, quatro passos e um botão numa
   coluna só. Três cortes pequenos somam o que falta. */
@media (min-width:860px) and (max-height:900px){
  :root{--sv-ar-c:clamp(1.6rem, min(4.2vw, 4.6vh), 3.4rem)}
  .emp-mosaico__txt .emp-t{margin-top:1rem}
  .emp-mosaico__txt .emp-passos{gap:.75rem}
}

/* =========================================================================
   14 · A HOME COMO LANDING PAGE — revisão da Gabriella (25/09/2026)
   -------------------------------------------------------------------------
   Os componentes que a nova `index-v2.html` precisou e o sistema não tinha.
   Tudo escopado por classe própria (`sv-roda`, `sv-joia`, `sv-car`, `sv-mini`,
   `sv-exp`, `sv-depo`) — nada aqui muda outra página.
   ========================================================================= */

/* 14.0 · Botão dentro de `.emp-cta`. O `lp-brada.css` pinta TODO `.botao`
   de `.emp-cta` de cacau (0,2,0) — e com isso o vazado e o claro viravam
   o mesmo botão cheio. Numa seção cacau o `--claro` sumia: cacau sobre
   cacau, 1,00:1. Devolve a variante a quem pediu uma. */
.emp-cta .botao.botao--vazado{background:transparent;color:#3B2416;border-color:#3B2416}
.emp-cta .botao.botao--vazado:hover{background:#3B2416;color:#F2ECE0}
.emp-cta .botao.botao--claro{background:#A8823C;border-color:#A8823C;color:#2B1C12}
.emp-cta .botao.botao--claro:hover{background:#C39A4B;border-color:#C39A4B;color:#2B1C12}
.emp-cta{display:flex;flex-wrap:wrap;gap:.9rem 1rem;align-items:center}
/* `.emp p{margin:0}` (0,1,1) vence `.emp-cta{margin-top}` (0,1,0): todo botão
   de fim de seção encostava no bloco de cima — na Experiência ele chegava a
   invadir a grade de fotos. Medido: margin-top computado 0px em 5 de 6. */
.emp .emp-cta{margin-top:clamp(1.4rem,3vw,2rem)}
.emp .botao{line-height:1.3}
/* No carrossel do celular cada card tem a própria altura: esticar todos até
   o mais alto (o de colaboradores, com dois botões) abria ~150px de creme
   vazio entre o texto e o botão dos outros oito. */
@media (max-width:640px){
  .sv-grade--3{align-items:start;background:transparent}
  .sv-joias{align-items:flex-start}
}

/* 14a · O HERO QUE RODA — doze fotos, fade de 1,6 s e zoom lento.
   As fotos ficam empilhadas; só a `.ativa` é opaca. O zoom (1 → 1,07 em
   7 s) começa quando a foto fica ativa e é o que dá vida sem chamar atenção:
   devagar o bastante para ninguém perceber que está se mexendo.
   ⚠️ O VÉU É O DO `.sv-hero::after`, REMEDIDO para as doze fotos (§14a do
   LEIA-ME e `referencia/medir-veu-hero.py`). O texto branco se apoia na
   metade de baixo, onde o véu é mais denso. */
.sv-roda{position:absolute;inset:0;overflow:hidden;background:#3B2416}
.sv-roda__f{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  object-position:center 55%;opacity:0;transition:opacity 1.6s ease;will-change:opacity}
.sv-roda__f.ativa{opacity:1}
@keyframes sv-zoom{from{transform:scale(1)}to{transform:scale(1.07)}}
@media (prefers-reduced-motion:no-preference){
  .sv-roda__f.ativa{animation:sv-zoom 7s ease-out both}
}
.sv-hero--roda{min-height:min(88svh,760px)}
.sv-hero--roda::after{background:linear-gradient(180deg,rgba(43,26,15,.62) 0%,
  rgba(43,26,15,.74) 38%,rgba(43,26,15,.86) 100%)}
/* A linha pequena sai do dourado para o creme. MEDIDO contra as doze fotos
   (referencia/medir-veu-hero.py): o #DFBC4E caía a 3,26:1 no pior pixel;
   o creme fica acima de 5,2:1 em todas. E é a decisão da Gabi (LEIA-ME,
   pendência 20): dourado é ornamento, não texto. */
.sv-hero--roda .emp-rot{color:#F2ECE0}
.sv-hero--roda .emp-t{max-width:15em}
.sv-hero--roda .emp-sub{max-width:36em}
/* O selo do Google: link de verdade, com alvo de 44px. */
.sv-selo{display:inline-flex;align-items:center;gap:.5rem;min-height:44px;margin-top:.9rem;
  color:#F2ECE0;font-size:max(.8rem,.9rem);letter-spacing:.06em;
  border-bottom:1px solid rgba(168,130,60,.9)}
.sv-selo span{color:#DFBC4E}
.sv-selo:hover{border-bottom-color:#F2ECE0}
@media (max-width:700px){
  .sv-hero--roda{min-height:auto;padding-top:clamp(3.5rem,11svh,6rem);padding-bottom:2rem}
  .sv-hero--roda .emp-sub{font-size:1rem;line-height:1.6}
}

/* 14b · OS NOVE CARDS — 3×3 no computador, 2 no meio, carrossel no celular
   (o carrossel é o §12a, que já vale para toda `.sv-grade` com foto). */
@media (min-width:641px){ .sv-grade--3{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (min-width:980px){ .sv-grade--3{grid-template-columns:repeat(3,minmax(0,1fr))} }
/* Capa 4:5. Seletor duplo DE PROPÓSITO: as regras de tela baixa (§13)
   deitam `.sv-cartao__foto` para 3:2 e 16:9, e a capa vertical tem que
   continuar vertical — é a proporção das fotos que a Gabi mandou. */
.sv-cartao__foto.sv-cartao__foto--45{aspect-ratio:4/5}
.sv-cartao__video{width:100%;height:100%;object-fit:cover;display:block}
.sv-cartao .botao{line-height:1.35;white-space:normal}
.sv-cartao__lema{font-family:var(--disp);font-style:italic;font-size:1.05rem!important;
  color:#2B1C12!important;margin:0 0 .4rem!important}
/* "Saiba mais": o corte só existe com JavaScript (`html.js`, posto no
   <head>). Sem script, o texto aparece inteiro — nunca escondido sem saída. */
.js .sv-cartao__txt{max-height:8em;overflow:hidden;font-size:.95rem;line-height:1.6}
.js .sv-cartao__txt.corta{-webkit-mask-image:linear-gradient(180deg,#000 55%,transparent);
  mask-image:linear-gradient(180deg,#000 55%,transparent)}
.js .sv-cartao__txt.aberto{max-height:none;-webkit-mask-image:none;mask-image:none}
.sv-cartao__txt p{font-size:.95rem;line-height:1.6;color:#5C3D28;margin:0}
.sv-mais{align-self:flex-start;display:inline-flex;align-items:center;min-height:44px;
  font-size:max(.75rem,.76rem);letter-spacing:.2em;text-transform:uppercase;font-weight:500;
  color:#5C3D28;border-bottom:1px solid #A8823C;margin-top:-.4rem}
.sv-mais:hover{color:#2B1C12}
.sv-cartao__acoes{margin-top:auto;display:flex;flex-direction:column;align-items:flex-start;gap:.6rem}
.sv-cartao__acoes .botao{margin-top:0}

.sv-sub-centro{margin-inline:auto;max-width:38em}

/* 14c · AS SETE JOIAS — 4 + 3 centralizados. Flex, não grid: a grid
   deixaria a segunda linha encostada à esquerda. */
.sv-joias{display:flex;flex-wrap:wrap;justify-content:center;gap:1.2rem;margin-top:1.8rem}
.sv-joia{flex:0 0 calc((100% - 3.6rem)/4);background:#F2ECE0;border-top:3px solid #A8823C;
  padding:0 1.3rem 1.2rem;display:flex;flex-direction:column;gap:.55rem}
.sv-joia__foto{margin:0 -1.3rem .6rem;aspect-ratio:1;overflow:hidden;background:#E8E0CE}
.sv-joia__foto img{width:100%;height:100%;object-fit:cover}
.sv-joia h3{font-family:var(--disp);font-weight:400;font-size:1.2rem;line-height:1.2;
  color:#2B1C12;margin:0}
.sv-joia p{font-size:.95rem;line-height:1.6;color:#5C3D28;margin:0}
.sv-joia__link{margin-top:auto;align-self:flex-start;display:inline-flex;align-items:center;
  min-height:44px;font-size:max(.75rem,.76rem);letter-spacing:.2em;text-transform:uppercase;
  font-weight:500;color:#5C3D28;border-bottom:1px solid #A8823C}
.sv-joia__link::after{content:"↗";margin-left:.4rem;letter-spacing:0}
.sv-joia__link:hover{color:#2B1C12}
@media (max-width:979px){ .sv-joia{flex-basis:calc((100% - 1.2rem)/2)} }
/* Teto de 20rem: a foto provisória do café tem 317px e no tablet o card a
   esticava para 352 — ALTO de nitidez (pixel inventado). Some quando as
   fotos em alta dos produtores chegarem; aí o teto pode sair. */
.sv-joia{max-width:20rem}
@media (max-width:640px){
  .sv-joias{flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;
    scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;
    margin-inline:calc(-1 * var(--sv-gut));padding-inline:var(--sv-gut);
    scroll-padding-inline:var(--sv-gut)}
  .sv-joias::-webkit-scrollbar{display:none}
  .sv-joia{flex:0 0 78%;scroll-snap-align:start}
}

/* 14d · O CARROSSEL (bastidores e depoimentos). O trilho funciona sozinho
   no dedo (scroll-snap); o script só acrescenta setas, bolinhas e a
   passagem automática. As bolinhas são INDICADOR, não controle (aria-hidden):
   dezesseis alvos de 44px não cabem num celular, e as setas já navegam. */
.sv-car{margin-top:1.8rem}
.sv-car__trilho{display:flex;gap:6px;overflow-x:auto;scroll-snap-type:x mandatory;
  overscroll-behavior-x:contain;scrollbar-width:none;outline-offset:-3px}
.sv-car__trilho::-webkit-scrollbar{display:none}
.sv-car__nav{display:flex;align-items:center;justify-content:center;gap:1rem;margin-top:1rem}
.sv-car__seta{min-width:44px;min-height:44px;display:inline-flex;align-items:center;
  justify-content:center;border:1px solid #A8823C;color:#3B2416;font-size:1.1rem;line-height:1}
.sv-car__seta:hover{background:#3B2416;color:#F2ECE0;border-color:#3B2416}
.sv-car__pontos{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;max-width:60vw}
.sv-car__pontos i{width:7px;height:7px;border-radius:50%;border:1px solid #A8823C;display:block}
.sv-car__pontos i.ativo{background:#A8823C}
/* bastidores: altura fixa, LARGURA NATURAL — nenhuma foto é recortada */
/* sangra até a borda da tela (a seção tem calha dos dois lados) e o
   primeiro quadro começa no mesmo x do texto */
.sv-car--bastidores{margin-inline:calc(-1 * var(--sv-gut))}
.sv-car--bastidores .sv-car__trilho{padding-inline:var(--sv-gut);scroll-padding-inline:var(--sv-gut)}
.sv-car__i{flex:none;height:clamp(22rem,64svh,34rem);width:auto;max-width:none;
  scroll-snap-align:start;background:#E8E0CE}
@media (max-width:640px){ .sv-car__i{height:min(30rem,62svh)} }
.sv-car--bastidores + .sv-in .emp-cta{margin-top:1.4rem}
/* depoimentos: 3 à vista no computador, 1 e o pedaço do próximo no celular */
.sv-car--depo .sv-car__trilho{gap:1.2rem}
.sv-depo{flex:0 0 calc((100% - 2.4rem)/3);margin:0;scroll-snap-align:start;
  background:#E8E0CE;border-top:3px solid #A8823C;padding:1.5rem 1.5rem 1.4rem;
  display:flex;flex-direction:column;gap:1rem}
.sv-depo p{margin:0;font-size:1rem;line-height:1.65;color:#2B1C12}
.sv-depo footer{margin-top:auto;display:flex;flex-direction:column;gap:.15rem}
.sv-depo footer b{font-family:var(--disp);font-weight:400;font-size:1.05rem;color:#2B1C12}
.sv-depo footer span{font-size:max(.75rem,.76rem);letter-spacing:.2em;text-transform:uppercase;color:#5C3D28}
@media (max-width:979px){ .sv-depo{flex-basis:calc((100% - 1.2rem)/2)} }
@media (max-width:640px){ .sv-depo{flex-basis:86%} }

/* 14e · A MINI GALERIA DA CHEF e 14f · A GALERIA DA EXPERIÊNCIA.
   Botões (não links): abrem a lupa `<dialog>`. Sem legenda, por pedido. */
.sv-mini{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:1.8rem;
  max-width:30rem}
.sv-mini__q,.sv-exp__q{display:block;padding:0;border:0;overflow:hidden;cursor:zoom-in;
  background:#D8CCB4;width:100%}
.sv-mini__q{aspect-ratio:1}
.sv-exp__q{aspect-ratio:3/4}
.sv-mini__q img,.sv-exp__q img{width:100%;height:100%;object-fit:cover;transition:transform .6s ease}
.sv-mini__q:hover img,.sv-exp__q:hover img{transform:scale(1.04)}
.sv-mini__q:focus-visible,.sv-exp__q:focus-visible{outline:2px solid #DFBC4E;outline-offset:-3px}
.sv-exp{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;margin-top:1.8rem}
/* 4 colunas já no tablet: com 2, as 8 fotos viravam 4 linhas de ~240px a 768px (geralzona 25/09) */
@media (min-width:700px){ .sv-exp{grid-template-columns:repeat(4,minmax(0,1fr))} }
@media (prefers-reduced-motion:reduce){
  .sv-mini__q img,.sv-exp__q img{transition:none}
}
@supports (animation-timeline:view()){
  @media (prefers-reduced-motion:no-preference){
    .sv-joia,.sv-depo,.sv-exp__q{animation:sv-surge linear both;
      animation-timeline:view(block);animation-range:entry 0% entry 40%}
  }
}

/* A grade de fotos da chef no Sobre: a mesma da Experiência, em creme. */
.sv-exp--chef{margin-top:clamp(1.6rem,4vw,2.6rem)}
.sv-exp--chef .sv-exp__q:focus-visible{outline-color:#7A5D00}

/* Dois parágrafos seguidos de `.emp-corpo` colavam (`.emp p{margin:0}`). */
.emp-rec__txt .emp-corpo + .emp-corpo{margin-top:1rem}

/* =========================================================================
   15 · REVISÃO DA GABI NA HOME (25/09/2026, reunião)
   ========================================================================= */
/* O menu do carrossel some quando tudo cabe na tela (grade de cards no
   desktop). `hidden` sozinho perde para o `display:flex` do componente. */
.sv-car__nav[hidden]{display:none}
/* Ocasiões e joias ganharam setas e bolinhas no celular: "tem que ter a
   opção de navegação pros lados, arrastando o dedo ou clicando na setinha". */
[data-carrossel] > .sv-car__nav{margin-top:1rem}
/* arrasto com o mouse */
[data-trilho],.sv-car__trilho{cursor:grab}
.arrastando{cursor:grabbing;user-select:none}
.arrastando img{pointer-events:none}
@media (min-width:641px){ .sv-grade--3[data-trilho]{cursor:auto} }
@media (min-width:980px){ .sv-joias[data-trilho]{cursor:auto} }
/* Nossas joias: o texto abre no desktop. Gabi: "tá muito compacto, muito
   centralizado — pode ficar mais aberto, uma área maior". 34em → 44em
   Medido: 44em deu 88 caracteres por linha, acima do teto de 82 do
   verificador; 40em dá ~80. No celular não muda. */
[data-bloco="brasileira"] .emp-centro .emp-sub{max-width:40em}

/* Na mídia · o cartão de vídeo: a foto é o link, com o triângulo de play
   por cima (ícone, não texto — a regra "nenhum texto sobre foto" segue). */
.sv-video .emp-rec__foto a{display:block;position:relative;height:100%}
.sv-video__play{position:absolute;left:50%;top:50%;width:68px;height:68px;margin:-34px 0 0 -34px;
  border-radius:50%;background:rgba(43,26,15,.78);border:1px solid #A8823C;transition:transform .3s}
.sv-video__play::after{content:"";position:absolute;left:27px;top:21px;border-style:solid;
  border-width:13px 0 13px 21px;border-color:transparent transparent transparent #F2ECE0}
.sv-video a:hover .sv-video__play{transform:scale(1.08)}
.sv-video h3.emp-t{margin:0}

/* o trilho que acompanha a altura do card (ver `data-altura` no script) */
[data-altura] > [data-trilho]{transition:height .35s ease}
@media (max-width:640px){ [data-altura] > [data-trilho]{overflow-y:hidden} }

/* Geralzona (25/09): no TABLET (641–979px) os 9 cards viravam 5 linhas de 2
   (~3.000px) e as 7 joias, 4 linhas. O carrossel do celular passa a valer até
   979px, com dois cards à vista e o terceiro espiando. */
@media (min-width:641px) and (max-width:979px){
  .sv-grade--3[data-trilho]{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:46%;
    overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;
    align-items:start;background:transparent;cursor:grab}
  .sv-grade--3[data-trilho]::-webkit-scrollbar{display:none}
  .sv-grade--3[data-trilho] > .sv-cartao{scroll-snap-align:start}
  .sv-joias[data-trilho]{flex-wrap:nowrap;justify-content:flex-start;align-items:flex-start;overflow-x:auto;
    scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;cursor:grab}
  .sv-joias[data-trilho]::-webkit-scrollbar{display:none}
  /* teto de 20rem: a foto provisória do café tem 317px (ver 14c) */
  .sv-joias[data-trilho] > .sv-joia{flex:0 0 min(46%,20rem);scroll-snap-align:start}
  [data-altura] > [data-trilho]{overflow-y:hidden}
}
/* celular pequeno: "Conhecer o produtor ↗" quebrava em duas linhas a 360px */
@media (max-width:1100px){ .sv-joia__link{letter-spacing:.12em;white-space:nowrap} }   /* e a 1024: 4 cards estreitos */

/* depoimentos: no celular cada card com a própria altura (o trilho acompanha) */
@media (max-width:979px){ .sv-car--depo .sv-car__trilho{align-items:flex-start;overflow-y:hidden} }

/* 16 · O FORMULÁRIO DE ORÇAMENTO DA HOME (26/09/2026). Reusa o `.sv-form`
   das celebrações (campo escuro, campos creme). O aviso de consentimento fica
   junto do WhatsApp porque é ali que o número passa a ser guardado. */
.sv-form .form-aviso{margin:.9rem 0 0;font-size:max(.8rem,.85rem);line-height:1.5;color:#E4D9C4;max-width:40em}
.sv-form .form-grade{grid-template-columns:repeat(auto-fit,minmax(min(16rem,100%),1fr))}
.sv-form .campo input[type=number]{-moz-appearance:textfield}
@media (min-width:860px){ .sv-form .form-grade{grid-template-columns:repeat(3,minmax(0,1fr))} }
.sv-form .form-aviso--topo{margin:0 0 1.2rem}
