/* =========================================================================
   HARMONELLE v3
   Sistema visual, componentes e movimento.

   Regra de marca que governa tudo aqui: o dossie de identidade diz, com
   essas palavras, que a Harmonelle nao deve "tentar parecer premium".
   Entao o refinamento vem de contencao, ar, foto boa e tempo bem calibrado.
   Nao ha dourado brilhante, marmore, serifa gigante em caixa alta, brilho
   de foil, glow colorido nem gradiente animado em nenhum lugar deste arquivo.

   FONTES E CORES AINDA SAO PROVISORIAS. Fraunces substitui a Megafield e
   Inter substitui a Helvena. A paleta foi deduzida do PDF. Enquanto isso
   nao for trocado pelos arquivos oficiais, o que a cliente aprova nao e a
   identidade dela. Isso e bloqueante para o aceite final.
   ========================================================================= */

:root{
  /* ---- cor: a PALETA OFICIAL da Harmonelle, do manual de marca V1.0 da
         Ktarze Brands e do PDF Paleta de Cores. Nada aqui e aproximacao.

         Cinco cores oficiais:
           Branco Antigo   #FEF7E3     Verde Oliva     #81865D
           Bege Rosado     #E6BCA3     Terracota Claro #CE9F83
           Petroleo Escuro #374047

         O FATO QUE GOVERNA TUDO ABAIXO, e foi medido: das cinco, so o
         Petroleo carrega texto. Verde Oliva da 3,57:1 e so serve a texto
         grande; Terracota da 2,20:1 e Bege Rosado 1,62:1, e os dois reprovam
         em qualquer texto. E paleta de superficie e de acento, e nao de
         texto. Por isso tres tokens sao DERIVADOS, cada um mantido na matiz
         da cor de marca que o originou. ---- */
  --branco:#FEF7E3;         /* Branco Antigo puro */
  --areia:#FCF1DD;          /* derivado: Branco Antigo + 10% Bege Rosado */
  --creme:#F7E5D0;          /* derivado: Branco Antigo + 30% Bege Rosado */
  --ink:#374047;            /* Petroleo puro. 9,88:1 no branco, 9,45:1 na areia,
                               8,59:1 no creme. E a cor de acao do site */
  --ink2:#586772;           /* derivado do Petroleo. 5,46:1 corpo de texto */
  --cafe:#646748;           /* derivado do Verde Oliva. 5,49:1 rotulos */
  --caramelo:#81865D;       /* Verde Oliva puro. 3,57:1 sobre claro.
                               So texto grande, filete de 1px e anel de foco, e
                               SO SOBRE FUNDO CLARO: sobre o ink ele cai para
                               2,77:1, contra 4,43:1 do caramelo antigo. Onde
                               ele aparecia dentro de .escuro, agora e
                               --claro-escuro2. */
  --ink-hover:#6B7277;      /* Petroleo clareado 26%. E o TOM DE HOVER dos
                               botoes preenchidos, e existe por um motivo
                               especifico: o hover tem de ser CLAREAMENTO na
                               mesma matiz, e nunca troca de cor.
                               O que estava aqui antes era o --cafe, que na
                               paleta antiga era marrom subindo sobre marrom,
                               matiz 28 sobre 32 graus, ou seja, mesma familia.
                               Com a paleta oficial o --cafe virou oliva, e o
                               mesmo hover passou a girar a matiz de 206 para
                               66 graus: o botao ficava AMARELADO ao passar o
                               mouse. O Marcos viu e reprovou em 19/08/2026.
                               Medido: este tom da 2,16:1 de salto sobre o
                               Petroleo, contra 2,22:1 que a paleta antiga
                               fazia, ou seja, mesma forca de hover; e mantem o
                               rotulo em 4,57:1, acima do minimo de 4,5.
                               Clarear mais reprova o rotulo: em 27% ele cai
                               para 4,44:1. */
  --ouro:#A88347;           /* FORA da paleta oficial, por decisao do Marcos em
                               19/08/2026. 3,27:1 no claro e 3,02:1 no petroleo,
                               e o unico dourado acima de 3:1 nos DOIS fundos.
                               So filete de 1px, moldura, icone e selo. Nunca
                               texto, nunca preenchimento, nunca gradiente, e no
                               maximo uma vez por dobra da tela. */
  --linha:#E6BCA3;          /* Bege Rosado puro. 1,62:1. Divisoria decorativa.
                               ATENCAO: sobre o creme ele cai para 1,41:1 e some.
                               Nao ponha acordeao nem tabela na secao creme. */
  --contorno:rgba(55,64,71,.62); /* Petroleo a 62%. 3,45:1. Obrigatorio quando a
                               borda e a unica indicacao de que e clicavel. */
  --claro-escuro:#FEF7E3;   /* Branco Antigo. 9,88:1 sobre o ink */
  --claro-escuro2:#E6BCA3;  /* Bege Rosado. 6,08:1 sobre o ink */
  --rodape-base:#CFA186;    /* derivado do Terracota, clareado 0,8 ponto de L.
                               4,58:1 sobre o ink. O Terracota puro da 4,49:1 e
                               reprovaria AA por 0,01. */

  /* ---- tipografia ---- */
  --serif:"Fraunces", Georgia, serif;   /* provisoria: substitui a Megafield */
  --sans:"Inter", Helvetica, Arial, sans-serif; /* provisoria: substitui a Helvena */

  /* ---- espaco ----
     O container e o respiro lateral sao VARIAVEIS, e nao numero fixo. Os
     valores base sao os da faixa mais estreita dos 16 dispositivos canonicos,
     344 a 767px: largura cheia e 16px de respiro. A escada inteira, com as
     nove bandas, esta logo abaixo do :root. Ver a nota de 07/09/2026.

     O `--max:1120px` que morava aqui saiu. Ele travava o site em 1072px de
     conteudo em QUALQUER tela acima de 1120, do laptop de 13 a TV 4K. */
  --container:100%;
  --gutter:16px;
  --e1:4px; --e2:8px; --e3:12px; --e4:16px; --e5:24px;
  --e6:32px; --e7:48px; --e8:64px; --e9:96px;
  --sec:clamp(72px,8.5vw,116px);
  --sec-ancora:clamp(96px,12vw,168px);

  /* ---- movimento ---- */
  --ease-suave:cubic-bezier(.22,.61,.36,1);
  --ease-saida:cubic-bezier(.16,1,.3,1);
  --ease-curta:cubic-bezier(.4,0,.2,1);
  --t-micro:160ms; --t-inter:380ms; --t-lento:820ms; --t-foto:1200ms;

  /* ---- sombra: sempre tinta, nunca preto puro, senao suja o creme ---- */
  --sombra-1:0 1px 2px rgba(55,64,71,.06);
  --sombra-2:0 18px 40px -16px rgba(55,64,71,.24);

  --h-header:74px;
}

/* =========================================================================
   A ESCADA DE RESPONSIVIDADE, 07/09/2026
   Regra da agencia: toda pagina obedece aos 16 dispositivos canonicos, cuja
   tabela vive em conhecimento/responsividade/01-viewport-db-16-dispositivos.md.

   Duas coisas, e so duas, mudam por banda: a largura maxima do container e o
   respiro lateral. Todo o resto do site continua fluido.

     banda            container   gutter   quem mora ali
     344 a 767        100%        16px     Fold dobrado, S23, SE, 14 Pro, Pixel 8, 14 Pro Max
     768 a 1023       100%        24px     iPad Mini, iPad, iPad Pro 11
     1024 a 1279      100%        32px     iPad Pro 12.9
     1280 a 1439      1200px      32px     Laptop 13
     1440 a 1919      1340px      40px     Laptop 15
     1920 a 2559      1440px      48px     Full HD
     2560 a 3439      1600px      48px     2K
     3440 a 3839      1800px      64px     Ultrawide 34
     3840 e acima     2000px      80px     TV 4K

   O CONJUNTO DE BREAKPOINTS E FECHADO. Nenhuma media query de largura deste
   projeto pode usar valor fora dele:
     min-width: 375, 430, 768, 1024, 1280, 1440, 1920, 2560, 3440, 3840
     max-width: 374, 429, 767, 1023, 1279, 1439, 1919, 2559, 3439, 3839
   `prefers-reduced-motion` e `print` nao sao largura e ficam de fora da regra.

   Como o `box-sizing` global e `border-box`, o container INCLUI o respiro:
   em 1280 a leitura util e 1200 menos 64, ou seja 1136px, contra os 1072px
   que o `--max:1120px` antigo entregava em toda tela grande.
   ========================================================================= */
@media(min-width:768px) {:root{--gutter:24px}}
@media(min-width:1024px){:root{--gutter:32px}}
@media(min-width:1280px){:root{--container:1200px}}
@media(min-width:1440px){:root{--container:1340px;--gutter:40px}}
@media(min-width:1920px){:root{--container:1440px;--gutter:48px}}
@media(min-width:2560px){:root{--container:1600px}}
@media(min-width:3440px){:root{--container:1800px;--gutter:64px}}
@media(min-width:3840px){:root{--container:2000px;--gutter:80px}}

*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:auto}
@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}
body{
  font-family:var(--sans);
  color:var(--ink);
  background:var(--branco);
  font-weight:400;            /* v2 usava 300. Inter Light em 14px com
                                 antialiasing some para quem tem 45 anos. */
  font-size:16px;
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
.wrap{max-width:var(--container);margin:0 auto;padding:0 var(--gutter)}
h1,h2,h3,.serif{font-family:var(--serif);font-weight:400;line-height:1.15}
h1,h2{letter-spacing:-.012em}
h1 em,h2 em,h3 em{font-style:italic;font-weight:340}
section{padding:var(--sec) 0}
.sec-areia{background:var(--areia)}
.sec-creme{background:var(--creme)}
.center{text-align:center}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

.eyebrow{
  font-family:var(--sans);font-size:12px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--cafe);font-weight:500;margin-bottom:18px;
}

/* =========================================================================
   FOCO
   O v2 nao tinha nenhuma regra :focus no arquivo inteiro. Quem navega por
   teclado nao enxergava onde estava.
   ATENCAO, esta regra MUDOU em 19/08/2026 e a nota antiga estava certa para a
   paleta antiga. O caramelo de antes dava 4,43:1 sobre o ink e 3,61:1 sobre a
   areia, entao um anel unico resolvia tudo, inclusive dentro do botao solido.

   Com a paleta oficial isso deixou de ser possivel, e nao e questao de gosto,
   e sim de aritmetica: um anel com 3:1 sobre o creme precisa de luminancia
   ABAIXO de 0,235, e um anel com 3:1 sobre o Petroleo precisa de luminancia
   ACIMA de 0,248. Nao existe um unico valor que atenda aos dois. Logo, sao
   dois aneis: Verde Oliva no claro, 3,57:1, e Bege Rosado no escuro e dentro
   do botao solido, 6,08:1.
   ========================================================================= */
:where(a,button,summary,details,input,select,textarea,[tabindex]):focus-visible{
  outline:2px solid var(--caramelo);
  outline-offset:3px;
  border-radius:2px;
}
/* o anel do claro sumiria sobre o Petroleo: 2,77:1, abaixo do minimo de 3 */
.escuro :focus-visible,
.btn:focus-visible,
footer :focus-visible{outline-color:var(--claro-escuro2)}

/* =========================================================================
   BOTOES
   Seis niveis. Cada um com um vocabulario de movimento proprio, para que
   dois niveis nunca leiam como o mesmo botao.
   Regra de ouro: nunca dois de nivel 1 na mesma dobra. Luxo e ter uma saida
   obvia, nao varias.
   ========================================================================= */

/* ---- Nivel 1: acao principal. Preenchimento que sobe de baixo ----
   O rotulo fica em <span class="rot"> justamente para que o ::before possa
   passar por tras dele. 101% e nao 100% para matar a linha de subpixel que
   aparece no Safari em escala fracionaria. */
.btn{
  position:relative;isolation:isolate;overflow:hidden;
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  min-height:56px;padding:17px 34px;
  font-family:var(--sans);font-size:15px;font-weight:500;letter-spacing:.06em;
  color:var(--branco);background:var(--ink);
  border:1px solid var(--ink);border-radius:2px;cursor:pointer;
  box-shadow:var(--sombra-1);
  transition:letter-spacing var(--t-inter) var(--ease-suave),
             box-shadow 300ms var(--ease-curta),
             transform 300ms var(--ease-curta);
}
.btn::before{
  content:"";position:absolute;inset:0;background:var(--ink-hover);z-index:-1;
  transform:translateY(101%);
  transition:transform var(--t-inter) var(--ease-suave);
}
.btn:hover::before{transform:translateY(0)}
.btn:hover{letter-spacing:.078em;transform:translateY(-1px);box-shadow:var(--sombra-2)}
.btn:active{transform:translateY(0);transition-duration:90ms;filter:brightness(.94)}
.btn .rot,.btn svg,.btn .seta{position:relative;z-index:1}
.btn svg{width:17px;height:17px;fill:currentColor;flex-shrink:0}

/* =========================================================================
   A MOLDURA DOURADA E O PING
   Escolha do Marcos em 19/08/2026, primeiro no link da bio e depois aqui.

   A moldura e o gesto de etiqueta de perfumaria: uma segunda borda de respiro
   que isola o botao do resto da pagina. E dela que vem a forca de chamada,
   junto com o tamanho, e nao de cor saturada. Medido: o Petroleo salta 9,88:1
   do fundo, enquanto um botao terracota daria 2,07:1 e um dourado preenchido
   2,96:1. Nesta paleta, botao colorido chama MENOS atencao que botao escuro.

   POR QUE EXISTE UM INVOLUCRO, e nao um pseudo-elemento no proprio botao.
   Duas razoes, e as duas quebrariam em silencio:

     1. `.btn` tem `overflow:hidden`, que ele precisa para o preenchimento do
        hover subir por tras do rotulo. Qualquer pseudo-elemento em `inset`
        NEGATIVO seria simplesmente cortado, e a moldura nao apareceria.
     2. `.btn::before` JA E o preenchimento do hover. Usa-lo para o ping
        mataria o hover de todos os botoes do site de uma vez.

   Por isso o `<span class="ouro">` em volta. No link da bio nao foi preciso,
   porque la o `.cta` nao recorta e nao tem `::before`.

   O outline continua reservado ao anel de foco: se a moldura o ocupasse, quem
   navega por teclado ficaria sem indicacao de onde esta.

   E fica so em quatro botoes do site inteiro, de dezesseis. Dourado repetido
   deixa de ser charme e vira tema, que e o que a regra do sistema proibe. */
.ouro{position:relative;display:inline-flex;max-width:100%}
.ouro::after{
  content:"";position:absolute;inset:-7px;pointer-events:none;
  border:1px solid var(--ouro);border-radius:3px
}

/* O ping: uma copia da moldura se solta e evapora para fora, como onda de
   sonar. O botao NAO se mexe, porque botao que pulsa e vocabulario de
   notificacao de aplicativo, que e urgencia, e nao de clinica.

   Tres decisoes que nao sao estetica:
   1. 88% do ciclo e imobilidade. Efeito continuo vira ruido e a pessoa
      aprende a ignorar em dez segundos. E animacao sem pausa briga com a
      rolagem em aparelho sem aceleracao de composicao.
   2. So `transform` e `opacity`, as duas propriedades que o compositor anima
      sem recalcular layout. Animar `inset` custaria um reflow por quadro.
   3. `pointer-events:none`, senao o anel come o toque no botao justamente no
      instante em que ele chama a pessoa para tocar.

   A escala de 1,07 foi medida e nao chutada: em 1,14 o anel passava da
   largura da janela no telefone e ACRESCENTAVA rolagem horizontal a pagina.
   Se mexer neste numero, meca de novo. */
.ouro--ping::before{
  content:"";position:absolute;inset:-7px;pointer-events:none;
  border:1px solid var(--ouro);border-radius:3px;
  animation:ping 5s cubic-bezier(.16,1,.3,1) infinite
}
@keyframes ping{
  0%,58%{transform:scale(1);opacity:0}
  60%{transform:scale(1);opacity:.85}
  100%{transform:scale(1.07);opacity:0}
}
@media (prefers-reduced-motion:reduce){
  /* some o pulso, e nunca o acabamento: a moldura fixa continua ali */
  .ouro--ping::before{animation:none;opacity:0}
}

/* botao claro, para usar dentro da secao escura */
.btn--claro{background:var(--areia);color:var(--ink);border-color:var(--areia)}
.btn--claro::before{background:var(--branco)}
.btn--claro:hover{color:var(--ink)}

/* ---- Nivel 2: contorno. Moldura interna que se aproxima da externa ----
   Gesto emprestado de convite impresso e etiqueta de perfumaria. E o unico
   lugar do site em que o caramelo aparece como moldura, e ainda assim com
   1px e meia opacidade. */
.btn-linha{
  position:relative;
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  min-height:56px;padding:16px 32px;
  font-family:var(--sans);font-size:15px;font-weight:500;letter-spacing:.06em;
  color:var(--ink);background:transparent;cursor:pointer;
  border:1px solid var(--contorno);border-radius:2px;
  transition:border-color 300ms var(--ease-curta),
             background-color 300ms var(--ease-curta),
             letter-spacing var(--t-inter) var(--ease-suave);
}
.btn-linha::after{
  content:"";position:absolute;inset:6px;pointer-events:none;
  border:1px solid transparent;border-radius:1px;
  transition:inset 460ms var(--ease-suave), border-color 320ms var(--ease-curta);
}
.btn-linha:hover{border-color:var(--ink);background-color:rgba(55,64,71,.05);letter-spacing:.075em}
/* a moldura interna que se aproxima no hover: tinta de Petroleo, e nao
   oliva. Oliva aqui lia como risco amarelo em volta do rotulo. */
.btn-linha:hover::after{inset:3px;border-color:rgba(55,64,71,.38)}
.btn-linha:active{background-color:rgba(55,64,71,.08);transition-duration:90ms}
.btn-linha svg{width:16px;height:16px;fill:currentColor;flex-shrink:0}
.btn-linha--claro{color:var(--claro-escuro);border-color:rgba(254,247,227,.42)}
.btn-linha--claro:hover{border-color:var(--areia);background-color:rgba(252,241,221,.07)}

/* ---- Nivel 4: link com seta que estica ----
   A seta nao translada, ela abre. Transladar e gesto de aplicativo,
   esticar e gesto tipografico. Animar a largura de um traco de 1px
   nao custa nada e a ponta permanece ancorada. */
.seta{
  position:relative;display:inline-block;flex-shrink:0;
  width:14px;height:1px;background:currentColor;margin-left:2px;
  transition:width var(--t-inter) var(--ease-saida);
}
/* A ponta gira em volta do PROPRIO CENTRO, e o centro dela fica na altura do
   traco. O v3 girava em volta do canto superior direito, com top:-3px: o
   vertice caia 3px acima do traco e a ponta aparecia solta, flutuando fora da
   haste. Era o defeito de todas as 23 setas do site, porque todas usam esta
   mesma regra. Com origem no centro, o vertice cai exatamente sobre a linha e
   a ponta avanca ~1,4px alem dela, que e o encaixe correto. */
.seta::after{
  content:"";position:absolute;right:0;top:50%;width:7px;height:7px;
  border-top:1px solid currentColor;border-right:1px solid currentColor;
  transform:translateY(-50%) rotate(45deg);
}
.btn:hover .seta,.btn-linha:hover .seta,.link-seta:hover .seta,
.card:hover .link-seta .seta{width:24px}

/* ---- Nivel 3: link fantasma. Sublinhado que cresce do centro ----
   Crescer do centro e nao da esquerda e a diferenca entre editorial e
   template de blog. 480ms porque a linha percorre pouca distancia e
   precisa ser lenta o bastante para ser lida como intencao. */
.link-luxo{
  position:relative;display:inline-block;
  font-size:15px;letter-spacing:.04em;color:var(--ink2);
  padding:6px 0 6px;
  border-bottom:1px solid rgba(129,134,93,.6);
  transition:color 200ms var(--ease-curta);
}
.link-luxo::after{
  content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;
  background:var(--ink);transform:scaleX(0);transform-origin:50% 50%;
  transition:transform 480ms var(--ease-saida);
}
/* area de toque de 44px sem mexer no desenho: o retangulo invisivel cresce
   em volta do texto, centrado, entao a linha continua colada na palavra */
.link-luxo::before{
  content:"";position:absolute;left:0;right:0;top:50%;
  transform:translateY(-50%);height:44px;
}
.link-luxo:hover{color:var(--ink)}
.link-luxo:hover::after{transform:scaleX(1)}
.link-luxo--claro{color:var(--claro-escuro2);border-bottom-color:rgba(129,134,93,.75)}
.link-luxo--claro::after{background:var(--areia)}
.link-luxo--claro:hover{color:var(--areia)}

/* microcopy sob o CTA: diz o que acontece depois do clique.
   Reduz o custo psicologico do toque, que e onde o funil vaza de verdade. */
.pos-cta{font-size:13px;color:var(--ink2);margin-top:14px;max-width:390px;line-height:1.5}
.center .pos-cta{margin-left:auto;margin-right:auto}
.pos-cta--claro{color:var(--claro-escuro2)}

/* =========================================================================
   BARRA DE AVISO INTERNO: removida nesta versao.
   Esta e a versao limpa, para apresentacao a cliente.
   ========================================================================= */

/* ---- header ---- */
header{
  position:sticky;top:0;z-index:50;
  background:rgba(254,247,227,.94);backdrop-filter:blur(8px);
  border-bottom:1px solid var(--linha);
  transition:background-color 320ms var(--ease-suave),border-color 320ms var(--ease-suave);
}
.nav{display:flex;align-items:center;justify-content:space-between;height:var(--h-header);
     transition:height 320ms var(--ease-suave)}
header.compacto{background:rgba(254,247,227,.985);border-bottom-color:rgba(55,64,71,.118)}
header.compacto .nav{height:62px}
header.compacto .logo{font-size:21px}
.logo{display:inline-block;padding:10px 0;font-family:var(--serif);font-size:24px;
      letter-spacing:.02em;transition:font-size 320ms var(--ease-suave)}
.logo em{font-style:italic}
.menu{display:flex;gap:30px;align-items:center;list-style:none}
.menu a{
  display:inline-block;font-size:13.5px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--ink2);padding:12px 0;border-bottom:1px solid transparent;
  transition:color .2s,border-color .2s;
}
.menu a:hover,.menu a.ativo{color:var(--ink);border-bottom-color:var(--caramelo)}
.nav .btn{min-height:46px;padding:12px 22px;font-size:13px}
#burger{display:none;background:none;border:0;cursor:pointer;color:var(--ink);
        width:46px;height:46px;align-items:center;justify-content:center;font-size:20px}

/* ---- paginas ---- */
.page{display:none}
.page.ativa{display:block;animation:entra 340ms var(--ease-saida) both}
@keyframes entra{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* =========================================================================
   MIDIA
   Todo o acervo da clinica e vertical, entre 2:3, 3:4 e 9:16. Nao ha uma
   unica foto deitada. Por isso a grade se rende ao formato do acervo, e nao
   o contrario.

   modo integra: a imagem define a altura, nada e cortado. Pecas editoriais.
   modo recorte: o container define a altura, com corte ja decidido no build.
   ========================================================================= */
.midia{position:relative;overflow:hidden;border-radius:2px;background:var(--creme)}
.midia img{display:block;width:100%;height:auto}
.midia--recorte img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:var(--pos,50% 40%);
}
/* placeholder de foto ainda nao produzida: mantem o briefing visivel.

   Os dois hex do degrade sao os UNICOS valores de cor deste arquivo que nao
   sao token, e por isso ficam com a conta escrita ao lado: eles continuam a
   mesma rampa das superficies, Branco Antigo #FEF7E3 recebendo Bege Rosado
   #E6BCA3, so que mais adiante. O --creme e a rampa a 30%; estes sao 45% e
   60%. Nao invente valor aqui: derive, senao entra cor fora da paleta pela
   porta dos fundos, que foi exatamente o defeito da versao anterior. */
.foto-pend{
  background:linear-gradient(160deg,var(--creme),#F3DCC6 60%,#F0D4BD);
  border:1px solid var(--linha);border-radius:2px;
  display:flex;align-items:flex-end;position:relative;
}
.foto-pend span{
  font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--cafe);
  padding:14px 16px;border-top:1px solid var(--linha);width:100%;
  background:rgba(254,247,227,.72);
}
.foto-pend::before{
  content:"";position:absolute;top:20px;left:20px;width:34px;height:34px;
  border:1px solid var(--caramelo);border-radius:50%;opacity:.55;
}

/* ---- hero ---- */
.hero{padding:clamp(56px,7vw,96px) 0 clamp(64px,8vw,104px)}
.hero .grid{display:grid;grid-template-columns:minmax(0,1.04fr) minmax(0,.96fr);
            gap:clamp(40px,5vw,72px);align-items:center}
.hero h1{font-size:clamp(40px,5vw,64px);margin-bottom:24px}
.hero p.sub{font-size:17.5px;color:var(--ink2);max-width:490px;margin-bottom:34px}
.hero .acoes{display:flex;gap:18px;align-items:center;flex-wrap:wrap}
.hero .midia img{animation:assenta 2400ms var(--ease-saida) both}
@keyframes assenta{from{transform:scale(1.06)}to{transform:scale(1)}}
/* O acervo e todo vertical, entao a altura precisa de teto: sem ele, uma
   coluna larga multiplicada por 3/2 gera uma foto de mais de 1200px e a
   primeira dobra deixa de caber na tela. O teto e o que mantem o CTA visivel. */
.hero .midia{aspect-ratio:2/3;max-height:min(74vh,700px);width:100%}

/* ---- barra de confianca ----
   Invertida em relacao ao v2: o dado vem grande em serif e o rotulo pequeno
   embaixo. Filete vertical entre as colunas, que faz a faixa parecer papel
   timbrado em vez de rodape de sistema. */
.confianca{border-top:1px solid var(--linha);border-bottom:1px solid var(--linha);
           padding:38px 0;background:var(--branco)}
.confianca ul{display:grid;grid-template-columns:repeat(4,1fr);gap:0;list-style:none;text-align:center}
.confianca li{font-size:13px;letter-spacing:.02em;color:var(--ink2);padding:0 22px;
              border-left:1px solid var(--linha);line-height:1.45}
.confianca li:first-child{border-left:0}
.confianca li b{display:block;font-family:var(--serif);font-size:clamp(22px,2.4vw,28px);
                font-weight:400;color:var(--ink);letter-spacing:0;margin-bottom:6px;line-height:1.1}

/* ---- manifesto: o silencio da pagina ----
   Sem eyebrow, porque era justamente o eyebrow que fazia esta secao parecer
   igual as outras cinco. No lugar, uma regua de 40px. */
.manifesto{padding:var(--sec-ancora) 0}
.regua{width:40px;height:1px;background:var(--caramelo);margin:0 auto 40px}
.manifesto p{font-family:var(--serif);font-size:clamp(30px,3.6vw,44px);line-height:1.25;
             max-width:21ch;margin:0 auto;font-weight:300}
.manifesto p em{font-style:italic}

/* ---- vitrine ---- */
.grupo-titulo{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--cafe);
              font-weight:500;margin:var(--e7) 0 var(--e5);display:flex;align-items:center;gap:16px}
.grupo-titulo::after{content:"";flex:1;height:1px;background:var(--linha)}

/* auto-fill e nao auto-fit. Com auto-fit as trilhas vazias colapsam, e no v2
   isso esticava a Rinomodelacao sozinha para os 1072px inteiros, com a foto
   travada em 190px de altura: sobrava 12% da imagem. E 240px em vez de 255px
   faz caber 4 colunas, o que elimina o card orfao no grupo Rosto. */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:24px}
.card{
  position:relative;isolation:isolate;
  background:var(--branco);border:1px solid var(--linha);border-radius:2px;
  padding:0 0 26px;display:flex;flex-direction:column;
  transition:transform 420ms var(--ease-saida),
             box-shadow 420ms var(--ease-saida),
             border-color 300ms var(--ease-curta);
}
.card .midia{aspect-ratio:3/4;border-bottom:1px solid var(--linha);border-radius:2px 2px 0 0}
.card .midia img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
                 transform:scale(1.001);transition:transform var(--t-foto) var(--ease-saida)}
.card h3{font-size:22px;margin:22px 22px 8px}
.card p{font-size:15px;line-height:1.6;color:var(--ink2);margin:0 22px 20px;flex:1}
.card:hover{transform:translateY(-3px);box-shadow:var(--sombra-2);border-color:rgba(129,134,93,.42)}
.card:hover .midia img{transform:scale(1.045)}

/* Nivel 4 no rodape do card. O ::before estica a area clicavel para o card
   inteiro, mantendo uma unica ancora semantica: bom para leitor de tela e
   bom para o Google. No v2 o unico alvo era um texto de 12,5px sem padding. */
.link-seta{
  display:inline-flex;align-items:center;gap:9px;
  margin:0 22px;padding:8px 0;
  font-size:13px;letter-spacing:.09em;text-transform:uppercase;font-weight:500;
  color:var(--cafe);transition:color 200ms var(--ease-curta);
}
.link-seta::before{content:"";position:absolute;inset:0;z-index:2}
.card:hover .link-seta{color:var(--ink)}
.card .tag{
  position:absolute;top:14px;left:14px;z-index:3;margin:0;
  font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  background:rgba(55,64,71,1);backdrop-filter:blur(6px);color:var(--branco);
  padding:6px 11px;border-radius:2px;
}
/* o card de destaque ocupa duas colunas e deita, criando hierarquia real de
   produto em vez de sete retangulos identicos */
.card.destaque{grid-column:span 2;flex-direction:row;border-color:rgba(129,134,93,.5)}
.card.destaque .midia{aspect-ratio:4/5;flex:0 0 44%;border-bottom:0;border-right:1px solid var(--linha);
                      border-radius:2px 0 0 2px}
.card.destaque .corpo{display:flex;flex-direction:column;justify-content:center;padding:26px 0}
.card.destaque h3{font-size:25px;margin-top:0}

/* ---- metodo: linha do tempo vertical ----
   No v2 eram tres colunas iguais, o mesmo gesto da vitrine logo acima.
   O numeral vira o unico elemento decorativo grande da Home. */
.passos-linha{display:grid;grid-template-columns:auto 1fr;gap:0 var(--e6);
              position:relative;margin-top:var(--e7)}
.passos-linha::before{content:"";position:absolute;left:41px;top:34px;bottom:34px;
                      width:1px;background:var(--linha)}
.passo{display:contents}
.passo .num{
  font-family:var(--serif);font-size:clamp(52px,6vw,84px);font-style:italic;
  color:var(--caramelo);line-height:.9;position:relative;z-index:1;
  padding:10px 0 30px;background:var(--creme);text-align:center;min-width:84px;
}
.passo .txt{padding:16px 0 34px}
.passo h3{font-size:26px;margin-bottom:10px}
.passo p{font-size:15.5px;color:var(--ink2);max-width:56ch}

/* ---- secao escura: a unica inversao de fundo do site ----
   Cai exatamente onde a pagina precisa de gravidade, que e a pessoa que
   assina o resultado. De quebra, resolve sozinha o problema dos tres fundos
   claros separados por menos de 4% de luminancia. */
.escuro{background:var(--ink);color:var(--claro-escuro2)}
.escuro h2,.escuro h3{color:var(--areia)}
.escuro .eyebrow{color:var(--claro-escuro2)}   /* 6,08:1. Ver nota do --caramelo */
.escuro .grid{display:grid;grid-template-columns:.82fr 1.18fr;gap:clamp(40px,5vw,72px);align-items:center}
.escuro p{color:var(--claro-escuro2);max-width:56ch}
.escuro .cred{font-size:13px;letter-spacing:.11em;text-transform:uppercase;
              color:var(--claro-escuro2);margin-bottom:22px}  /* 6,08:1 */
.escuro h2{font-size:clamp(32px,3.6vw,46px);margin-bottom:18px}
.escuro .bio p{font-size:16.5px;margin-bottom:14px}
.escuro .midia{aspect-ratio:2/3;max-height:min(72vh,660px);max-width:100%}

/* ---- selo de credencial ----
   Moldura dupla fina. Sem brasao, sem louro, sem escudo: a moldura ja
   entrega "documento", e qualquer ilustracao derrubaria o registro. */
.selo{position:relative;display:inline-block;padding:18px 26px;text-align:center;
      border:1px solid var(--contorno);border-radius:2px}
.selo::before{content:"";position:absolute;inset:4px;border:1px solid rgba(129,134,93,.35);border-radius:1px}
.selo .nome{font-family:var(--serif);font-size:17px;display:block;margin-bottom:3px}
.selo .reg{font-size:11.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--cafe)}
.escuro .selo{border-color:rgba(254,247,227,.34)}
.escuro .selo::before{border-color:rgba(129,134,93,.55)}
.escuro .selo .nome{color:var(--areia)}
.escuro .selo .reg{color:var(--claro-escuro2)}   /* 6,08:1 */
.selos{display:flex;gap:16px;flex-wrap:wrap;margin-top:var(--e6)}

/* ---- certificados, pagina Sobre ----
   O assunto aqui NAO e design de diploma: e geografia. O que muda a autoridade
   e a leitora saber que ela saiu do pais para aprender. Por isso o pais vem
   grande, em serifa, e o certificado entra embaixo como prova.
   Agrupado por pais, e nao numa grade unica de sete, por dois motivos: grade
   unica de sete le como parede de diplomas e apaga a viagem, que e a mensagem;
   e os quatro certificados de Moscou sao retrato enquanto os tres de Belgrado e
   da Coreia sao paisagem, entao a orientacao ja separa os grupos sozinha.
   Documento NUNCA e cortado: object-fit contain dentro de moldura de proporcao
   fixa, sobre fundo claro. Certificado cortado deixa de ser prova. */
.cert-pais + .cert-pais{margin-top:var(--e7)}
.cert-pais .lugar{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;
                  padding-bottom:12px;border-bottom:1px solid var(--linha)}
.cert-pais .lugar b{font-family:var(--serif);font-size:clamp(21px,2.1vw,26px);
                    font-weight:400;color:var(--ink);letter-spacing:0}
.cert-pais .lugar span{font-size:12px;letter-spacing:.14em;text-transform:uppercase;
                       color:var(--cafe)}
.cert-pais .nota{font-size:15px;color:var(--ink2);margin-top:14px;max-width:66ch}

/* Quatro colunas para os retratos de Moscou e TRES para os paisagens de
   Belgrado e da Coreia. Em duas colunas, como estava, o certificado paisagem
   saía com quase o dobro da area do retrato, e a hierarquia visual invertia:
   Belgrado parecia mais importante que Moscou, que e onde estao as quatro
   formacoes mais fortes. Em tres colunas as duas familias ficam na mesma
   escala, e a coluna que sobra em cada grupo recebe texto em vez de vazio. */
.cert-grade{display:grid;gap:18px;margin-top:var(--e5)}
.cert-grade--4{grid-template-columns:repeat(4,1fr)}
.cert-grade--3{grid-template-columns:repeat(3,1fr)}

.cert{display:flex;flex-direction:column}
.cert .doc{
  position:relative;background:var(--branco);
  border:1px solid var(--contorno);border-radius:2px;
  padding:10px;overflow:hidden;
  transition:border-color 320ms var(--ease-curta), box-shadow 320ms var(--ease-curta);
}
.cert .doc::after{content:"";position:absolute;inset:4px;pointer-events:none;
                  border:1px solid rgba(129,134,93,.22);border-radius:1px}
.cert:hover .doc{border-color:var(--caramelo);box-shadow:var(--sombra-1)}
.cert-grade--4 .doc{aspect-ratio:3/4}
.cert-grade--3 .doc{aspect-ratio:3/2}
.cert .doc img{width:100%;height:100%;object-fit:contain;display:block}
.cert h4{font-family:var(--sans);font-size:14.5px;font-weight:500;color:var(--ink);
         margin:14px 0 5px;letter-spacing:.01em;line-height:1.3}
.cert p{font-size:13.5px;line-height:1.5;color:var(--ink2)}

/* O bloco de texto que fecha a composicao no lugar onde sobraria vazio, na
   linha da Coreia, que tem um certificado so. Vazio ali leria como falta. */
.cert-fecho{display:flex;flex-direction:column;justify-content:center;
            padding:26px 30px;background:var(--branco);border-radius:2px;
            border:1px solid var(--linha)}
.cert-fecho--largo{grid-column:span 2}
.cert-fecho b{font-family:var(--serif);font-size:clamp(18px,1.8vw,22px);
              font-weight:400;line-height:1.25;margin-bottom:10px}
/* MEDIDA DE LEITURA, 07/09/2026, e o bloco mais largo dos oito. Ele nao ocupa
   uma celula da grade de certificados, ocupa DUAS, por causa do
   `.cert-fecho--largo` logo acima, entao ja lia 99 caracteres por linha em 1280
   e 113 em 1440, antes de qualquer escada de container. Como nada pode encolher
   no laptop, o teto tem de ficar acima dos 772px que ele mede em 1440, e 85ch
   da 778px. O que se ganha e travar o crescimento: sem isso ele chega a 1159px
   e 158 caracteres em 3840. Fica registrado que a medida que combinaria com a
   vizinha, a `.cert-pais .nota` de 66ch, cortaria 168px ja em 1280, e por isso
   nao foi usada. */
.cert-fecho p{font-size:14.5px;line-height:1.55;color:var(--ink2);max-width:85ch}
/* O codigo de verificacao e o unico dado do conjunto que a leitora confere
   sozinha, entao ele ganha tratamento de dado e nao de texto corrido. */
.cert-fecho code{display:inline-block;margin-top:10px;font-family:var(--sans);
                 font-size:13px;letter-spacing:.06em;color:var(--ink);
                 background:var(--areia);padding:7px 11px;border-radius:2px;
                 word-break:break-all}

/* ---- bloco da avaliacao: o produto de entrada ---- */
.aval-grid{display:grid;grid-template-columns:.9fr 1.1fr;gap:clamp(36px,4.5vw,64px);align-items:center}
.aval-lista{list-style:none;margin-top:var(--e5)}
.aval-lista li{display:grid;grid-template-columns:auto 1fr;gap:var(--e4);
               padding:18px 0;border-top:1px solid var(--linha)}
.aval-lista li:last-child{border-bottom:1px solid var(--linha)}
/* DEFEITO PRE-EXISTENTE, corrigido aqui em 19/08/2026. Este rotulo usava
   --caramelo em 15px sobre fundo claro, o que sempre reprovou AA: 3,61:1 com
   a paleta antiga e 3,57:1 com a nova, contra o minimo de 4,5 para corpo. Era
   violacao da propria regra escrita no token, que diz "nunca em texto pequeno
   sobre fundo claro". O --cafe resolve sem sair da familia: e o mesmo Verde
   Oliva, so que escurecido, e da 5,49:1. Medido nas duas versoes com a mesma
   auditoria: o site de producao ainda tem a falha, e fica relatado. */
.aval-lista .rot{font-family:var(--serif);font-size:15px;font-style:italic;
                 color:var(--cafe);min-width:74px;padding-top:2px}
.aval-lista .val{font-size:15.5px;color:var(--ink2)}
.aval-lista .val b{color:var(--ink);font-weight:500}

/* ---- objecao: unico componente com peso assimetrico, e funciona ---- */
.objecao{background:var(--areia);border-left:2px solid var(--caramelo);
         padding:24px 28px;border-radius:2px;margin:26px 0}
.objecao b{font-family:var(--serif);font-size:18px;font-weight:500;font-style:italic;
           display:block;margin-bottom:8px}
.objecao p{font-size:15px;color:var(--ink2)}
.objecoes{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:var(--e7)}
.objecoes .objecao{margin:0;background:var(--branco)}

/* ---- prova de processo, no lugar das aspas vazias ----
   Enquanto nao houver depoimento real coletado, moldura vazia comunica
   ausencia, e nao discricao. Prova de processo funciona sem um unico
   paciente e e exatamente o que a marca vende. */
.provas{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:var(--e7);text-align:left}
.prova{padding:28px 0 0;border-top:1px solid var(--linha)}
.prova b{font-family:var(--serif);font-size:19px;font-weight:400;display:block;margin-bottom:8px}
/* MEDIDA DE LEITURA, 07/09/2026. Este e o mais folgado dos oito, porque a
   `.provas` divide a largura em tres colunas e a coluna so chega a 597px em
   3840. 58ch e o mesmo valor do `.sub-sec`, o paragrafo que abre esta secao, e
   do `.assina`, que tambem e texto de 14,5px: em vez de inventar numero, o
   cartao passa a ler com a largura de corpo padrao do site. So comeca a valer
   em 3440, porque ate 2560 a coluna e mais estreita que o teto. */
.prova p{font-size:14.5px;color:var(--ink2);max-width:58ch}

/* ---- vip ---- */
.vip{border:1px solid var(--linha);background:var(--branco);border-radius:2px;
     padding:40px 44px;display:flex;align-items:center;justify-content:space-between;gap:36px}
.vip h3{font-size:25px;margin-bottom:8px}
.vip p{font-size:15px;color:var(--ink2);max-width:520px}

/* ---- acesso e discricao ---- */
.acesso-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(36px,4.5vw,64px);align-items:center}
.acesso-lista{list-style:none;margin-top:var(--e5)}
/* MEDIDA DE LEITURA, 07/09/2026. Mesma construcao da `.paraquem li`: o `28px`
   entra somado FORA do `ch` porque `max-width` conta a caixa de borda e esses
   28px sao a indentacao do marcador redondo, e nao texto. O texto fica em 62ch,
   que em 15,5px da 606px, a mesma familia do `.sub-sec` que abre a secao.
   O valor foi medido, e nao deduzido: 64ch deixava a linha exatamente em 85
   caracteres, em cima do limite, e 62ch a leva para 83.
   O teto de 634px foi escolhido junto com o da `.regiao`, logo abaixo: as duas
   pecas se encostam por um filete horizontal cada, e dois filetes parando em
   pontos diferentes leriam como desalinho. Hoje elas medem igual em toda
   largura, e depois do teto continuam medindo igual.
   Nao morde em 1280 (566,2px) nem em 1440 (627,9px). */
.acesso-lista li{font-size:15.5px;color:var(--ink2);padding:13px 0 13px 28px;
                 max-width:calc(62ch + 28px);
                 position:relative;border-bottom:1px solid var(--linha)}
.acesso-lista li::before{content:"";position:absolute;left:2px;top:21px;width:8px;height:8px;
                         border:1px solid var(--caramelo);border-radius:50%}
.acesso-lista li b{color:var(--ink);font-weight:500}
/* MEDIDA DE LEITURA, 07/09/2026. O `69,3ch` nao e valor de gosto, e conversao:
   ele existe para dar os mesmos 634px do teto da `.acesso-lista li` acima, e o
   numero e quebrado porque `ch` mede contra o corpo do proprio elemento, e aqui
   o corpo e 14,5px contra os 15,5px da lista. Fossem dois valores redondos, os
   dois filetes horizontais parariam em pontos diferentes acima de 1920.
   Nao morde em 1280 (566,2px) nem em 1440 (627,9px). Fica registrado que este
   paragrafo ja lia 87 caracteres por linha em 1440, ou seja, acima do alvo de
   85 antes de qualquer teto: descer ate 85 exigiria cortar 26px no laptop, e a
   tarefa proibe. O teto congela a linha nesses 87 e trava o crescimento, que
   ia a 128 em 3840. */
.regiao{font-size:14.5px;color:var(--ink2);margin-top:var(--e5);padding-top:var(--e5);
        max-width:69.3ch;border-top:1px solid var(--linha)}

/* ---- localizacao ---- */
.local .grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(36px,4.5vw,56px);align-items:center}
.local iframe{width:100%;height:400px;border:1px solid var(--linha);border-radius:2px;
              filter:saturate(.6) contrast(.96)}
.local h2{font-size:clamp(28px,3vw,40px);margin-bottom:20px}
/* MEDIDA DE LEITURA, 07/09/2026. 64ch em 15,5px da 626px, que e exatamente a
   largura da `.encaminha`, o outro bloco de 15,5px do site: mesmo corpo, mesma
   medida. O bloco carrega endereco, CEP e horario, entao o teto foi conferido
   na tela e nao so na conta: nenhuma linha de endereco passa a quebrar por
   causa dele, porque as linhas cadastrais sao curtas e separadas por `<br>`, e
   quem chega a duas linhas e so a prosa do atendimento em Sao Paulo.
   Nao morde em 1280 (540px) nem em 1440 (602px). */
.dados p{font-size:15.5px;color:var(--ink2);margin-bottom:12px;max-width:64ch}
.dados b{color:var(--ink);font-weight:500}
.acoes{margin-top:28px;display:flex;gap:16px;flex-wrap:wrap;align-items:center}

.titulo-sec{font-size:clamp(30px,3.6vw,44px);max-width:15ch;margin-bottom:16px}
.titulo-sec.largo{max-width:20ch}
.center .titulo-sec{margin-left:auto;margin-right:auto}
.sub-sec{font-size:16.5px;color:var(--ink2);max-width:58ch}
.center .sub-sec{margin-left:auto;margin-right:auto}

/* =========================================================================
   PAGINA DE PROCEDIMENTOS
   ========================================================================= */
.chips{
  position:sticky;top:var(--h-header);z-index:40;
  background:rgba(254,247,227,.96);backdrop-filter:blur(8px);
  border-bottom:1px solid var(--linha);overflow-x:auto;
  scrollbar-width:none;
  /* mascara nas pontas: e o que avisa que ha mais chips fora da tela.
     No v2 o overflow existia sem nenhuma indicacao visual. */
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 22px,#000 calc(100% - 30px),transparent 100%);
  mask-image:linear-gradient(90deg,transparent 0,#000 22px,#000 calc(100% - 30px),transparent 100%);
}
.chips::-webkit-scrollbar{display:none}
/* A barra de chips e sangrada, mas a FILA dentro dela e o mesmo container da
   pagina, senao o primeiro chip nao alinha com o titulo logo abaixo. Por isso
   ela consome `--container` e `--gutter`, e nao numero proprio. */
.chips ul{display:flex;gap:8px;list-style:none;padding:12px var(--gutter);
  max-width:var(--container);margin:0 auto}
.chips a{
  display:inline-flex;align-items:center;min-height:44px;padding:0 18px;
  font-size:13px;letter-spacing:.04em;white-space:nowrap;
  border:1px solid var(--contorno);border-radius:999px;color:var(--ink2);
  transition:background-color 220ms var(--ease-curta),color 220ms var(--ease-curta),
             border-color 220ms var(--ease-curta);
}
.chips a:hover{border-color:var(--ink);color:var(--ink)}
.chips a[aria-current="true"]{background:var(--ink);border-color:var(--ink);color:var(--branco)}

.proc{border-top:1px solid var(--linha);padding:clamp(64px,7.5vw,96px) 0;
      scroll-margin-top:calc(var(--h-header) + 70px)}
.proc.sec-areia{border-top:0}
.proc .eyebrow{margin-bottom:14px}
.proc .grid2{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(36px,4.5vw,56px);align-items:start}
.proc .gancho{font-size:clamp(27px,3.2vw,38px);margin-bottom:16px;max-width:18ch}
.proc .oque{font-size:16px;color:var(--ink2);max-width:58ch}
.proc .midia{aspect-ratio:4/5}
/* a peca da coluna lateral do Hipro e vertical 9:16. Emoldurada no formato
   nativo e centralizada, em vez de esticada num container deitado como no v2. */
.proc .midia--vertical{aspect-ratio:9/16;max-width:340px;margin:0 auto}

.paraquem{list-style:none;margin:22px 0 4px}
/* MEDIDA DE LEITURA, 07/09/2026. Com o container subindo ate 2000px a coluna de
   texto das 16 chega a 936px aqui, e o item passa de 125 caracteres por linha.
   O `28px` somado FORA do `ch` nao e enfeite: `max-width` conta a caixa de
   borda, e os 28px de `padding-left` sao a indentacao do marcador redondo, que
   nao e texto. Sem somar, a medida real de leitura ficaria 28px menor que a
   declarada. Com a soma, o texto mede 64ch, que em 15px da 606px, a mesma
   familia dos vizinhos da coluna: o `.oque` mede 585px e a `.encaminha` 626px.
   O valor foi medido, e nao deduzido: 66ch dava 652px e ainda deixava a linha
   em 87 caracteres, acima do alvo. Com 64ch a linha cai para 80.
   Nao morde em 1280 (567px) nem em 1440 (632,1px, contra teto de 633,6px).
   Comeca a valer em 1920. */
.paraquem li{font-size:15px;color:var(--ink2);padding:12px 0 12px 28px;position:relative;
             max-width:calc(64ch + 28px);
             border-bottom:1px solid var(--linha)}
.paraquem li::before{content:"";position:absolute;left:2px;top:20px;width:8px;height:8px;
                     border:1px solid var(--caramelo);border-radius:50%}

/* ---- box resumo ----
   Melhor componente do v2. Muda pouco e ganha muito: o valor sai de sans
   13,5px e vira serif 17px, o que o transforma de tabela de especificacao
   tecnica em ficha de dossie. E o rotulo sobe de 10,5px para 11,5px. */
.boxresumo{
  display:grid;grid-template-columns:repeat(2,1fr);gap:1px;
  background:rgba(55,64,71,.165);border:1px solid rgba(55,64,71,.165);
  border-radius:2px;overflow:hidden;margin-top:26px;
}
.boxresumo div{background:var(--branco);padding:20px 20px 18px}
.sec-areia .boxresumo div{background:var(--areia)}
.boxresumo b{display:block;font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;
             color:var(--cafe);margin-bottom:8px;font-weight:500}
.boxresumo span{display:block;font-family:var(--serif);font-size:17px;font-weight:400;
                line-height:1.35;color:var(--ink)}
/* nota sob a grade: qualifica os quatro quadrantes de uma vez, em vez de
   encher cada valor de ressalva */
/* MEDIDA DE LEITURA, 07/09/2026, e este e o caso desconfortavel do conjunto.
   Em 12,5px a legenda ja lia 94 caracteres por linha em 1280 e 98 em 1440, ou
   seja, ela nascia longa e nao ficou longa por causa da escada de container. A
   regra da tarefa e que nada pode encolher abaixo de 1920, entao o valor nao
   pode descer ate a familia de leitura do projeto, que aqui daria 66ch, 521px,
   e cortaria 111px no laptop. Entao o teto tem de ficar logo acima dos 632,1px
   que a coluna mede em 1440, e o `80,4ch` e o numero medido, nao deduzido: ele
   da 634px, e a faixa util e estreita mesmo. Com 80,6ch, dois pixels acima, a
   legenda ja aceita mais uma palavra na primeira linha e salta de 98 para 105
   caracteres; com 80,2ch ela morderia o laptop. O ganho e congelar a legenda
   nos mesmos 98 caracteres que ela ja tem em 1440, em vez de deixa-la ir a 157
   em 3840. Fica registrado que ela continua acima do alvo de 85, e apertar mais
   e decisao do Marcos, porque mexe no que ele ja aprovou. */
.box-nota{font-size:12.5px;line-height:1.5;color:var(--ink2);margin-top:10px;
          max-width:80.4ch}
/* 1024, e nao 921: e o par exato do `max-width:1023px` que colapsa a `.grid2`
   em uma coluna. Os dois tem de trocar juntos, senao existe uma faixa em que a
   coluna lateral fica grudada sem ter ao lado de que grudar. */
@media(min-width:1024px){.proc .col-lado{position:sticky;top:calc(var(--h-header) + 78px)}}

/* ---- riscos ----
   COMPONENTE RETIRADO DO SITE a pedido do Marcos, em 2026-08-16: risco e
   contraindicacao passam a ser tratados na anamnese e no plano por escrito,
   e nao na pagina de procedimentos. O estilo fica aqui, sem uso, porque
   restaurar os blocos e so devolver o HTML. Ver PROC-FAQ-R7 e PROC-INTRO-SUB,
   que continuam dizendo que o tema existe e onde ele e tratado. ---- */
.riscos{margin-top:26px;padding:20px 24px;border:1px solid var(--linha);
        border-radius:2px;background:var(--branco)}
.sec-areia .riscos{background:var(--areia)}
.riscos b{display:block;font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;
          color:var(--cafe);margin-bottom:8px;font-weight:500}
.riscos p{font-size:14.5px;color:var(--ink2)}

/* ---- FAQ ----
   O <details> nativo entrega acessibilidade de graca e e indexavel.
   O sinal de "+" gira 90 graus e vira traco, em vez de trocar o glifo por
   "x" como no v2, o que fazia o icone pular de tamanho. */
.faq{max-width:780px;margin:var(--e7) auto 0}
.faq details{border-bottom:1px solid var(--linha)}
.faq summary{
  font-family:var(--serif);font-size:19px;cursor:pointer;list-style:none;
  display:flex;justify-content:space-between;align-items:center;gap:20px;
  padding:22px 0;min-height:44px;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{
  content:"";width:11px;height:11px;flex-shrink:0;
  background:linear-gradient(var(--caramelo),var(--caramelo)) center/11px 1px no-repeat,
             linear-gradient(var(--caramelo),var(--caramelo)) center/1px 11px no-repeat;
  transition:transform 420ms var(--ease-saida);
}
.faq details[open] summary::after{
  transform:rotate(90deg);
  background:linear-gradient(var(--caramelo),var(--caramelo)) center/11px 1px no-repeat;
}
.faq details p{font-size:15px;color:var(--ink2);padding:0 0 24px;max-width:66ch}

/* =========================================================================
   RODAPE
   ========================================================================= */
footer{background:var(--ink);color:var(--claro-escuro2);padding:72px 0 34px;font-size:14px}
footer .cols{display:grid;grid-template-columns:1.35fr 1fr 1fr 1.1fr;gap:44px;margin-bottom:48px}
footer h4{font-family:var(--serif);color:var(--areia);font-size:19px;font-weight:400;margin-bottom:16px}
footer .flogo{font-family:var(--serif);font-size:26px;color:var(--areia);margin-bottom:14px;display:block}
footer .flogo em{font-style:italic}
footer p,footer a{color:var(--claro-escuro2);font-size:14px;line-height:1.75}
footer a{transition:color 200ms var(--ease-curta)}
footer a:hover{color:var(--areia)}
footer ul{list-style:none}
/* alvo de toque: 39px no desktop, 47px no celular, onde o dedo e o ponteiro */
footer li a{display:inline-block;padding:8px 0}
@media(max-width:1023px){footer li a{padding:12px 0}}
/* Grid de tres colunas, e nao flex com space-between: o item do meio precisa
   ficar no centro da LINHA, e nao no meio do espaco que sobra entre dois
   vizinhos de larguras diferentes. Com 1fr/auto/1fr o centro e real. */
footer .base{border-top:1px solid rgba(252,241,221,.14);padding-top:26px;
             display:grid;grid-template-columns:1fr auto 1fr;align-items:center;
             gap:var(--e5);font-size:12.5px;color:var(--rodape-base)}
footer .base > :nth-child(1){justify-self:start;text-align:left}
footer .base > :nth-child(2){justify-self:center;text-align:center}
footer .base > :nth-child(3){justify-self:end;text-align:right}
footer .base a{font-size:12.5px;color:var(--rodape-base)}
/* Os numeros de inscricao no CRBM sao links de conferencia. Sem sublinhado eles
   nao se anunciam como clicaveis, porque o reset global zera text-decoration e
   no rodape nao ha outra pista de cor. */
footer .base a.reg-link{text-decoration:underline;text-underline-offset:3px;
  text-decoration-color:rgba(252,241,221,.38)}
footer .base a.reg-link:hover{text-decoration-color:currentColor}
footer .base a:hover{color:var(--claro-escuro2)}

/* =========================================================================
   CASO CONDUZIDO
   Entrou em 2026-08-17. Substitui a pagina de Casos que foi descartada.
   Le como METODO, e nunca como prova: sem aspas, sem foto, sem moldura de
   depoimento, sem numeracao, sem data e sem contador. O relatorio de UX e
   explicito quanto a isso: a autoridade de HOME-09 vem inteira da palavra
   "verificar", e caso narrado nao e verificavel. Se este componente parecer
   prova, ele contamina o bloco vizinho.
   A nota final e obrigatoria e NAO pode ficar discreta: e ela que separa
   narrativa composta de depoimento fabricado.
   ========================================================================= */
.caso{border-top:1px solid var(--linha);padding-top:var(--e6);
      margin-top:var(--e7);max-width:70ch;text-align:left}
.caso h3{font-family:var(--serif);font-weight:400;
         font-size:clamp(21px,2.2vw,27px);line-height:1.25;
         color:var(--ink);margin-bottom:var(--e4)}
.caso p{font-size:16.5px;line-height:1.75;color:var(--ink2);
        margin-bottom:var(--e3)}
/* o fecho e a unica linha em serifa: e a voz da clinica, e nao a narracao */
.caso .caso-fecho{font-family:var(--serif);font-style:italic;
                  font-size:clamp(18px,1.9vw,21px);line-height:1.45;
                  color:var(--ink);border-left:2px solid var(--cafe);
                  padding-left:var(--e4);margin:var(--e5) 0 var(--e5)}
.caso .caso-nota{font-size:13px;line-height:1.65;color:var(--ink2)}
/* na Home o bloco fica solto e centralizado no wrap; nos procedimentos ele
   herda a coluna da grid2, e por isso nao leva margem automatica la */
.caso--solto{margin-left:auto;margin-right:auto}

/* =========================================================================
   PAGINA DE PRIVACIDADE
   Entrou em 2026-08-17. Pagina de leitura, e nao de venda: nenhum componente
   novo alem de tipografia e ritmo. Medida de linha travada em 70ch, que e o
   limite acima do qual o olho perde a linha seguinte em texto corrido longo.
   ========================================================================= */
.priv h2{font-family:var(--serif);font-weight:400;font-size:clamp(21px,2.1vw,26px);
         line-height:1.25;margin:var(--e6) 0 var(--e3);color:var(--ink)}
.priv h2:first-child{margin-top:0}
.priv p{font-size:16.5px;line-height:1.75;color:var(--ink2);
        margin-bottom:var(--e3);max-width:70ch}
.priv b{color:var(--ink);font-weight:600}
.priv a{color:var(--cafe);text-decoration:underline;text-underline-offset:3px}
.priv-lista{list-style:none;margin:0 0 var(--e3);padding:0;max-width:70ch}
.priv-lista li{position:relative;padding-left:20px;font-size:16.5px;line-height:1.75;
               color:var(--ink2);margin-bottom:var(--e2)}
/* traco em vez de bolinha: o site nao usa marcador redondo em lugar nenhum */
.priv-lista li::before{content:"";position:absolute;left:0;top:14px;
                       width:8px;height:1px;background:var(--cafe)}

/* =========================================================================
   ACOES FLUTUANTES
   O circulo verde #1FAF38 do v2 era a unica cor saturada do site inteiro e
   dizia varejo, nao boutique. O glifo do WhatsApp e reconhecivel sem a cor
   de marca, pelo mesmo motivo que o icone do Instagram no rodape dispensa
   o degrade. Entao ele vira tinta.
   ========================================================================= */
#waFloat{
  position:fixed;right:20px;bottom:20px;z-index:80;
  width:56px;height:56px;border-radius:50%;background:var(--ink);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 10px 26px rgba(55,64,71,.354);
  transition:transform 300ms var(--ease-saida),background-color 300ms var(--ease-curta);
}
/* o balao trocava de Petroleo para oliva no hover, um circulo de 56px mudando
   de cor de uma vez, sem a revelacao que o botao retangular tem. Era o lugar
   onde a troca de matiz mais aparecia. Agora e clareamento na mesma matiz. */
#waFloat:hover{transform:translateY(-2px);background:var(--ink-hover)}
#waFloat svg{width:28px;height:28px;fill:var(--areia)}

/* barra fixa mobile. Entra depois que o hero sai da tela, e nao de cara,
   o que leria como agressivo. Com ela presente o botao flutuante some:
   dois CTAs flutuantes ao mesmo tempo leem como desespero. */
.acao-fixa{display:none}
/* 767, e nao 760: e a fronteira canonica entre telefone e tablet. Os quatro
   blocos que valiam 760 no site inteiro andaram juntos, senao a barra fixa
   apareceria numa largura e o balao do WhatsApp sumiria em outra. */
@media(max-width:767px){
  .acao-fixa{
    position:fixed;left:0;right:0;bottom:0;z-index:80;
    display:flex;gap:10px;align-items:center;
    padding:11px 14px calc(11px + env(safe-area-inset-bottom));
    background:rgba(254,247,227,.94);backdrop-filter:blur(12px);
    border-top:1px solid var(--linha);
    transform:translateY(101%);
    transition:transform 420ms var(--ease-saida);
  }
  .acao-fixa.visivel{transform:translateY(0)}
  /* O filete dourado vai por DENTRO nesta barra, e nao em volta: colada na
     base da tela nao existe respiro externo para uma moldura. Sombra `inset`
     nao e cortada pelo `overflow:hidden` do botao, ao contrario do que
     aconteceria com um pseudo-elemento. */
  .acao-fixa .btn{
    box-shadow:inset 0 0 0 1px var(--branco), inset 0 0 0 2px var(--ouro)
  }
  /* o involucro vira o filho flexivel, e o botao ocupa ele inteiro */
  .acao-fixa .ouro{flex:1}
  .acao-fixa .ouro .btn{width:100%}
  /* O ping aqui tem FIM, e essa e a unica diferenca em relacao ao ping da
     pagina. A barra, uma vez visivel, nao se esconde mais: um anel pulsando
     para sempre no rodape da tela durante a rolagem inteira e o oposto de
     chamar atencao, vira mobilia. Sao tres pulsos e silencio depois. Como a
     animacao so nasce quando o JS poe `.visivel`, os tres acontecem no
     instante em que a barra entra, que e quando ha o que anunciar. */
  .acao-fixa.visivel .ouro::before{
    content:"";position:absolute;inset:-5px;pointer-events:none;
    border:1px solid var(--ouro);border-radius:3px;
    animation:ping 5s cubic-bezier(.16,1,.3,1) 3
  }
  .acao-fixa .btn,.acao-fixa .btn-linha{flex:1;min-height:50px;padding:13px 14px;font-size:14px}
  .acao-fixa .btn-linha{flex:0 0 40%}
  body{padding-bottom:76px}
  #waFloat{display:none}
}

/* =========================================================================
   MOVIMENTO
   18px de deslocamento, nunca mais que 24, senao o olho le "elemento voando"
   em vez de "elemento assentando". 820ms, o dobro do hover, porque revelacao
   e evento de ambiente e nao resposta a um gesto. 70ms de escalonamento
   entre irmaos, limitado a 6 para o atraso nunca passar de 420ms.
   ========================================================================= */
/* O conteudo NUNCA depende de JavaScript para ficar visivel. A regra so vale
   quando o proprio script marcou <html class="js">, o que significa que ele
   carregou e vai conseguir revelar de volta. Com JS desligado, com erro de
   script ou com o observer perdendo um elemento, o site aparece inteiro.
   Sem essa trava, um unico tropeco no script apaga metade da pagina. */
.js .revela{
  opacity:0;transform:translateY(18px);
  transition:opacity var(--t-lento) var(--ease-saida),
             transform var(--t-lento) var(--ease-saida);
  transition-delay:calc(var(--i,0) * 70ms);
}
.js .revela.dentro{opacity:1;transform:none}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important;
  }
  /* sem esta excecao, quem tem movimento reduzido ligado veria a pagina em
     branco, porque a classe deixa opacity:0 e a transicao para de rodar */
  .js .revela{opacity:1!important;transform:none!important}
  .hero .midia img{animation:none!important}
}

/* =========================================================================
   RESPONSIVO
   O v2 tinha uma unica media query, em 920px. Faltava o intervalo de tablet
   e faltava qualquer coisa abaixo de 480px.

   EM 07/09/2026 ESTA ESCADA FOI REFEITA. Os valores de antes, 420, 560, 640,
   760, 920, 921 e 1080, eram improvisados: nenhum deles coincidia com a
   fronteira de um dispositivo real, entao o site sempre trocava de layout no
   meio de uma faixa de aparelhos, e nunca entre duas. O de/para, com o motivo
   de cada escolha, esta no comentario de cada bloco. A tabela que manda esta
   em conhecimento/responsividade/01-viewport-db-16-dispositivos.md.
   ========================================================================= */

/* 1279, e nao 1023: o que este bloco faz e derrubar os quatro certificados em
   fila para dois, e a nota abaixo diz que quatro em fila ficam ilegiveis antes
   de 1080. Descer para 1023 devolveria os quatro a faixa de 1024 a 1279, onde
   o container ainda e fluido e cada documento nao passa de 250px. */
@media(max-width:1279px){
  .escuro .grid{grid-template-columns:.95fr 1.05fr;gap:40px}
  .card.destaque .midia{flex:0 0 40%}
  /* quatro certificados em fila ficam ilegiveis antes de 1080px: o documento
     precisa de largura para o nome dela aparecer, que e o que a leitora procura */
  .cert-grade--4{grid-template-columns:repeat(2,1fr)}
  .cert-grade--3{grid-template-columns:repeat(2,1fr)}
}
/* 1023, e nao 767: este e o bloco que colapsa TODAS as grades de duas colunas
   do site, hero, secao escura, localizacao, grid2 das 16, avaliacao e acesso.
   Descer para 767 deixaria as duas colunas vivas na faixa de 768 a 1023, que e
   onde moram os tres iPads: o texto cairia para menos de 370px ao lado de uma
   foto, que e menos que a medida de leitura de 58ch declarada nele. Subir para
   1023 e o certo, e leva junto o menu sanfona: o iPad passa a receber o menu de
   toque em vez do menu de hover, que num aparelho sem ponteiro nunca abriu bem. */
@media(max-width:1023px){
  .menu{display:none}
  .menu.aberto{
    display:flex;position:absolute;top:var(--h-header);left:0;right:0;
    background:var(--branco);flex-direction:column;padding:20px 24px 26px;
    border-bottom:1px solid var(--linha);gap:6px;align-items:flex-start;
  }
  .menu.aberto a{padding:12px 0;font-size:15px;letter-spacing:.08em}
  #burger{display:flex}
  .nav .btn{display:none}
  .hero .grid,.escuro .grid,.local .grid,.proc .grid2,
  .aval-grid,.acesso-grid{grid-template-columns:1fr;gap:36px}
  .hero .midia{max-width:460px}
  .escuro .midia{max-width:420px}
  .confianca ul{grid-template-columns:repeat(2,1fr);gap:24px 0}
  .confianca li:nth-child(3){border-left:0}
  .confianca li:nth-child(-n+2){padding-bottom:22px;border-bottom:1px solid var(--linha)}
  .objecoes,.provas{grid-template-columns:1fr;gap:16px}
  /* no celular o certificado ocupa a largura toda: e a unica forma de o
     documento continuar sendo prova em vez de selo decorativo */
  .cert-grade--3{grid-template-columns:1fr}
  .cert-fecho--largo{grid-column:auto}
  .cert-fecho{padding:24px 24px}
  .provas{gap:26px}
  .vip{flex-direction:column;align-items:flex-start;padding:32px 28px}
  .card.destaque{grid-column:span 2;flex-direction:column}
  .card.destaque .midia{aspect-ratio:3/4;flex:none;border-right:0;
                        border-bottom:1px solid var(--linha);border-radius:2px 2px 0 0}
  .card.destaque .corpo{padding:0}
  .proc .midia--vertical{max-width:300px}
  footer .cols{grid-template-columns:1fr 1fr;gap:36px}
}
/* 767, e nao 429: a regra central daqui e travar a vitrine em DUAS colunas, e
   ela precisa valer no telefone inteiro. Em 429 os cartoes voltariam ao
   `auto-fill` de 240px entre 430 e 767, onde ele resolve para uma coluna so em
   boa parte da faixa, e a vitrine de dezesseis viraria uma pilha. O preco e o
   rodape cair para uma coluna ja em 767, em vez de 640, o que num telefone
   deitado continua legivel. */
@media(max-width:767px){
  .cards{grid-template-columns:1fr 1fr;gap:16px}
  .card.destaque{grid-column:span 2}
  .card h3{font-size:19px;margin:18px 16px 6px}
  .card p{font-size:14px;margin:0 16px 16px}
  .link-seta{margin:0 16px;font-size:12.5px}
  .passos-linha{gap:0 var(--e5)}
  .passos-linha::before{left:31px}
  .passo .num{min-width:64px;font-size:44px;padding:8px 0 22px}
  /* o mosaico tem as proprias regras responsivas mais abaixo, junto da
     definicao dele. Havia aqui um par de !important que vencia aquelas
     regras e colapsava a grade para uma coluna de 2px. */
  footer .cols{grid-template-columns:1fr;gap:32px}
  /* empilhado e centralizado: as tres pontas do desktop viram tres linhas */
  footer .base{grid-template-columns:1fr;gap:var(--e3);text-align:center}
  footer .base > :nth-child(1),
  footer .base > :nth-child(2),
  footer .base > :nth-child(3){justify-self:center;text-align:center}
}
/* 429, e a fronteira dos telefones estreitos: Fold dobrado, S23, SE, 14 Pro e
   Pixel 8 de um lado, 14 Pro Max do outro.
   O `.wrap{padding:0 18px}` que morava aqui SAIU. Ele existia para roubar 12px
   de respiro no telefone quando o `.wrap` tinha 24px fixo; hoje o respiro base
   ja e 16px, vindo de `--gutter`, e o override so criaria um decimo valor de
   gutter fora da tabela. */
@media(max-width:429px){
  .hero h1{font-size:32px}
  .cards{grid-template-columns:1fr}
  .card.destaque{grid-column:span 1}
  .titulo-sec{font-size:27px}
  .manifesto p{font-size:26px}
  .acao-fixa .btn-linha{flex:0 0 42%;padding:13px 10px;font-size:13px}
}

/* =========================================================================
   MOSAICO DO ESPACO
   A primeira versao dava proporcao fixa a cada peca dentro de uma grade de
   linhas iguais. As duas geometrias brigavam: a foto alta media 615px, a
   coluna do lado somava 804px, e sobrava um buraco de 315x394 no canto.
   Ocupacao real: 72%.

   Aqui a ordem se inverte. A GRADE define a geometria, com altura unica, e
   as pecas se acomodam por object-fit. O corte deixa de ser acidente e passa
   a ser decisao, e foto de ambiente aceita corte de um jeito que retrato nao
   aceitaria. Resultado: 100% de ocupacao e todas as bordas alinhadas.

   A peca vertical entra na composicao, e nao solta embaixo dela, que era o
   que a fazia flutuar no meio de 346px de sobra de cada lado.
   ========================================================================= */
.mosaico{
  display:grid;
  grid-template-columns:1.25fr 1.15fr .8fr .8fr;
  grid-template-rows:1fr 1fr;
  gap:16px;
  height:clamp(440px,50vw,600px);
  margin-top:var(--e7);
}
.mosaico>*{min-width:0;min-height:0}
.mosaico .m-alta{grid-row:span 2}                 /* recepcao e sala de atendimento */
.mosaico .m-larga{grid-column:span 2}             /* faixa de baixo, a direita */
.mosaico img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:var(--pos,50% 45%);
}
/* Abaixo de 1023px o `span 2` das pecas altas tem que sair. Mantido, ele
   consome duas das tres linhas e espreme as outras tres pecas para 10px de
   altura, que foi o que aconteceu no primeiro teste. Em duas colunas cada
   peca ocupa uma celula, e so a faixa de baixo atravessa.
   O valor era 920 e virou 1023 em 07/09/2026, junto com o resto das grades de
   varias colunas: quatro pecas em fila num iPad dariam 170px cada. */
@media(max-width:1023px){
  .mosaico{
    grid-template-columns:1fr 1fr;
    grid-template-rows:1.25fr 1.25fr .9fr;
    height:clamp(560px,112vw,820px);
  }
  .mosaico .m-alta{grid-row:auto}
  .mosaico .m-larga{grid-column:span 2}
}
/* 429, que e a fronteira canonica mais proxima do 560 antigo. Aqui a escolha
   nao muda geometria, so ritmo: o vao cai de 16 para 12px e o teto de altura
   baixa, e as duas coisas servem ao telefone estreito. Entre 430 e 767 o
   mosaico segue com as medidas do bloco de 1023, que ja sao proprias para ele. */
@media(max-width:429px){
  .mosaico{gap:12px;height:clamp(500px,126vw,700px)}
}

/* Link dentro de texto corrido, usado so nas duas chamadas de conferencia de
   registro, no FAQ e na Sobre. Nao da para reaproveitar .link-luxo: ele e
   inline-block com padding e uma area de toque de 44px em ::before, que dentro
   de um paragrafo atropela as linhas de cima e de baixo. E o reset global
   (a{text-decoration:none}) deixaria o link invisivel no meio da frase. Mesmo
   tratamento visual que .priv a, que ja existia na pagina de Privacidade. */
.link-conf{color:var(--cafe);text-decoration:underline;text-underline-offset:3px;
  text-decoration-thickness:1px;text-decoration-color:rgba(100,103,72,.5);
  transition:text-decoration-color 200ms var(--ease-curta)}
.link-conf:hover{text-decoration-color:var(--cafe)}

/* =========================================================================
   BANNER DE CONSENTIMENTO DE COOKIES
   Entrou em 2026-08-20. Tres decisoes de desenho que sao exigencia legal e
   nao gosto, e que nao devem ser "melhoradas" depois:
   1. Recusar custa o mesmo que aceitar. Os dois sao .btn-linha, mesmo tamanho,
      lado a lado. Recusar em link cinza menor e o padrao escuro que a ANPD
      trata como consentimento viciado.
   2. Nao existe X, nao fecha por clique fora e nao fecha por rolagem. Fechar
      sem escolher seria consentimento tacito, que a LGPD nao aceita.
   3. z-index 95, acima do #waFloat e da .acao-fixa, que ficam em 80. E
      enquanto o banner esta aberto os dois SOMEM, em vez de brigar por espaco
      no rodape do celular: sao 3 elementos fixos disputando a mesma faixa.
   ========================================================================= */
.consent{
  position:fixed;left:0;right:0;bottom:0;z-index:95;
  display:grid;grid-template-columns:1fr auto;align-items:center;gap:var(--e5);
  padding:12px var(--gutter) calc(12px + env(safe-area-inset-bottom));
  background:rgba(254,247,227,.97);backdrop-filter:blur(12px);
  border-top:1px solid rgba(129,134,93,.42);
  box-shadow:0 -10px 30px rgba(55,64,71,.10);
}
.consent[hidden]{display:none}
/* O titulo virou LINHA, e nao paragrafo proprio: um paragrafo so para dizer
   "Cookies" custava uma linha inteira de altura. Com o texto encurtado de 229
   para cerca de 110 caracteres, o banner cabe em UMA linha no desktop. */
.consent-t{font-family:var(--serif);font-size:15px;color:var(--ink)}
.consent-txt p{font-size:13.5px;line-height:1.55;color:var(--ink2);max-width:92ch}
.consent-acoes{display:flex;gap:var(--e3);flex-shrink:0}
/* .btn-linha nasceu para <a>. Em <button> o navegador injeta font e fundo
   proprios, entao os tres precisam ser zerados aqui. */
.consent .btn-linha{font-family:var(--sans);background:transparent;cursor:pointer;
  white-space:nowrap}
body.consent-aberto #waFloat,
body.consent-aberto .acao-fixa{display:none}
@media(max-width:767px){
  /* o `padding` que estava aqui saiu: ele repetia o respiro lateral na mao,
     com um 18px que hoje vem de `--gutter` */
  .consent{grid-template-columns:1fr;gap:10px}
  .consent-acoes{display:grid;grid-template-columns:1fr 1fr;gap:var(--e2)}
  .consent .btn-linha{width:100%;justify-content:center;text-align:center}
}
/* No telefone estreito "Aceitar cookies" nao cabe com 32px de padding de cada
   lado dentro de meia tela, e o `white-space:nowrap` do proprio componente
   impede a quebra: o rotulo vazava para fora do botao. O padding cede, e nao a
   quebra, porque os dois botoes tem de continuar com a MESMA largura, que e a
   exigencia de consentimento livre escrita no bloco de comentario acima. */
@media(max-width:429px){
  .consent .btn-linha{padding-left:8px;padding-right:8px;font-size:14px}
}
/* botao que se comporta como link, no rodape, para reabrir a escolha */
.link-cookie{font-family:var(--sans);background:none;border:0;padding:0;
  cursor:pointer;font-size:12.5px;color:var(--rodape-base);
  text-decoration:underline;text-underline-offset:3px;
  transition:color 200ms var(--ease-curta)}
.link-cookie:hover{color:var(--claro-escuro2)}


/* ===== MENU COM SUBMENU POR AREA =====
   Nomenclatura da decisao de 19/08/2026. O submenu sai da largura do <li> e
   ocupa a faixa inteira, porque seis colunas nao cabem sob um item de 136px. */
.tem-sub > a{display:inline-flex;align-items:center;gap:7px}
.chev{width:6px;height:6px;border-right:1.5px solid currentColor;
  border-bottom:1.5px solid currentColor;transform:rotate(45deg) translate(-1px,-1px);
  transition:transform 220ms var(--ease-curta)}
.tem-sub.aberto .chev{transform:rotate(-135deg) translate(-2px,-2px)}
.submenu{
  position:fixed;left:0;right:0;top:var(--h-header);
  background:var(--branco);border-bottom:1px solid var(--linha);
  box-shadow:0 18px 40px rgba(55,64,71,.10);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity 220ms var(--ease-curta),transform 220ms var(--ease-saida),visibility 220ms;
  z-index:49;
}
.tem-sub:hover .submenu,.tem-sub:focus-within .submenu,.tem-sub.aberto .submenu{
  opacity:1;visibility:visible;transform:none}
.sm-grade{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));
  gap:28px;padding:32px 0 26px}
.sm-titulo{font-size:11px;letter-spacing:.15em;text-transform:uppercase;
  color:var(--cafe);font-weight:500;margin-bottom:12px;padding-bottom:9px;
  border-bottom:1px solid var(--linha)}
.sm-area ul{list-style:none}
.sm-area li a{display:block;padding:7px 0;font-size:14px;color:var(--ink2);
  text-transform:none;letter-spacing:0;border:0;line-height:1.35;
  transition:color 180ms var(--ease-curta)}
.sm-area li a:hover{color:var(--ink)}
.sm-rodape{grid-column:1/-1;border-top:1px solid var(--linha);padding-top:16px;margin-top:4px}
.sm-todos{display:inline-flex;align-items:center;gap:10px;font-size:12px;
  letter-spacing:.13em;text-transform:uppercase;color:var(--cafe);border:0;padding:6px 0}
/* 1023, EM TRAVA COM o `.menu{display:none}` e o `#burger{display:flex}` do
   v3.parte3.css, e com o `matchMedia` do JS logo abaixo. Os tres tem de
   dizer o mesmo numero: se o CSS esconder o menu de barra numa largura e o
   JS achar que ainda e desktop em outra, o toque no item de procedimentos
   navega em vez de abrir a sanfona, e a area some do celular. */
@media(max-width:1023px){
  /* No celular o menu ja e sanfona: o submenu vira mais um nivel dela, e nao
     uma camada flutuante. */
  .submenu{position:static;opacity:1;visibility:visible;transform:none;
    box-shadow:none;border:0;display:none;background:transparent}
  .tem-sub.aberto .submenu{display:block}
  .sm-grade{grid-template-columns:1fr;gap:14px;padding:8px 0 12px}
  .sm-titulo{margin-bottom:6px}
  .sm-area li a{padding:9px 0;font-size:14.5px}
  .sm-rodape{padding-top:12px}
}


/* ===== O QUE SOBROU DO GABARITO, 2026-08-20, CORRIGIDO EM 2026-08-21 =====
   Em 20/08 o layout A foi escolhido e a nota dizia que a lateral ficava com
   foto E quadro. Aquilo valia para o DESKTOP, onde a lateral fica ao lado do
   texto e o quadro cai mesmo na primeira dobra. No celular a grade colapsa
   para uma coluna e vale a ordem do DOM, entao a lateral inteira ia parar
   depois de tudo: no bioestimulador o botao de WhatsApp aparecia por volta do
   caractere 4300 do `<main>` e o quadro so por volta do 7100. A visitante lia
   o botao antes dos quatro dados que ela veio buscar.

   Em 21/08 o Marcos aprovou a variante B1: o `<dl class="boxresumo">` e o
   `.box-nota` que o qualifica saem da `.col-lado` e passam a ser emitidos no
   corrido, logo depois do "o que e", em TODAS as larguras. Isso e ordem de
   documento de verdade, e nao `order` de CSS so no celular: olho, teclado e
   leitor de tela concordam, e o carrossel que tem `tabindex` continua onde
   estava. A FOTO e o CARROSSEL nao se moveram.

   A faixa de largura total continua descartada, e agora por conta: no corrido
   o quadro herda a coluna esquerda, 533px, e com `repeat(2,1fr)` cada celula
   da 266px. Uma faixa de 1072px em `repeat(4,1fr)` daria 268px por celula, ou
   seja, a MESMA medida de texto, ao custo de quebrar a `.grid2` em duas e de
   soltar "Para quem e", objecao, caso e CTA da coluna de 58ch em que eles
   foram desenhados. Paga-se a estrutura inteira para nao ganhar largura.

   Por isso este arquivo nao ganhou nenhuma regra nova: `.boxresumo` inteiro,
   `repeat(2,1fr)` incluido, vale igual dentro do corrido. `.boxresumo--faixa`
   nao existe e nao precisa existir.

   Sobrou uma peca de CSS so, e ela independe do arranjo. */
/* O `margin-top` virou `--e6`, 32px, em 2026-08-22. Ele valia 14px de quando o
   vizinho de cima era um `<p class="oque">`, e hoje o vizinho e a `.box-nota`,
   que e legenda de 12,5px. Ver a conta inteira no item 8, no fim do arquivo. */
.encaminha{margin-top:var(--e6);padding-left:16px;border-left:2px solid var(--caramelo);
  font-size:15.5px;line-height:1.7;color:var(--ink2);max-width:64ch}

/* ===== TAREFA 21: os cartoes de AREA na Home =====
   Trocaram os sete cartoes de procedimento, que foram escolhidos quando eram
   sete no total. Com dezesseis, sete escolhidos por acaso nao servem e
   dezesseis viram catalogo. As seis areas resolvem os dois, e deixam Home, hub
   e menu contando a mesma historia. */
.areas-home{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}
/* SAO SEIS AREAS, e seis so fecha linha inteira em 1, 2, 3 ou 6 colunas.
   Com o container fixo em 1120px o `auto-fill` sempre resolvia para tres, e
   ninguem precisou dizer isso em voz alta. Com a escada de 07/09/2026 o
   container chega a 2000px, e ai o `auto-fill` passa a devolver quatro em
   1440, CINCO em 2560 e 3440, e cinco deixa um cartao sozinho na segunda
   linha. Cartao orfao e exatamente o defeito que a nota do `.cards`, no
   v3.parte2.css, conta ter sido eliminado a proposito.
   Tres colunas travadas do laptop para cima devolvem o 3+3 aprovado, em
   qualquer largura, e o cartao cresce junto com a tela em vez de sobrar. */
@media(min-width:1280px){.areas-home{grid-template-columns:repeat(3,minmax(0,1fr))}}
.area-conta{display:block;font-size:12px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--cafe);margin:10px 0 14px}
/* O cartao da Intima NAO tem foto, e isso e o desenho e nao economia: numa
   grade, o unico sem imagem chama atencao E comunica discricao ao mesmo tempo.
   Mesma decisao ja tomada no hub. Nao "consertar" pondo uma foto. */
.area-card--sem-foto{background:var(--creme);display:flex;align-items:flex-end;min-height:300px}

/* ===== TAREFA 18: o balao do WhatsApp =====
   Sao QUATRO elementos fixos disputando o rodape do celular: o balao, o
   #waFloat, a .acao-fixa e o banner de cookies. A ordem de empilhamento e
   deliberada: cookies em 95 manda em todos, o balao em 79 fica ABAIXO do
   #waFloat e da .acao-fixa, que estao em 80, para nunca cobrir o botao que
   ele proprio esta convidando a apertar. */
.balao{
  position:fixed;right:20px;bottom:88px;z-index:79;width:min(320px,calc(100vw - 40px));
  background:var(--branco);border:1px solid var(--linha);
  box-shadow:0 14px 40px rgba(55,64,71,.16);
  padding:16px 18px 14px;
  opacity:0;transform:translateY(10px);
  transition:opacity 320ms var(--ease-curta),transform 320ms var(--ease-saida);
}
.balao.aberto{opacity:1;transform:none}
.balao[hidden]{display:none}
/* o rabinho que aponta para o botao */
.balao::after{content:"";position:absolute;right:26px;bottom:-7px;width:12px;height:12px;
  background:var(--branco);border-right:1px solid var(--linha);border-bottom:1px solid var(--linha);
  transform:rotate(45deg)}
.balao-x{position:absolute;top:6px;right:6px;width:32px;height:32px;border:0;background:none;
  cursor:pointer;color:var(--ink2);font-size:13px;line-height:1}
.balao-x:hover{color:var(--ink)}
.balao-topo{display:flex;align-items:center;gap:11px;margin-bottom:10px}
/* Monograma, e nao rosto: quem responde e a Gabriella, e foto dela nao existe.
   Ver o comentario no _rodape.html. */
.balao-avatar{position:relative;flex-shrink:0;width:42px;height:42px;border-radius:50%;
  background:var(--ink);color:var(--areia);font-family:var(--serif);font-size:20px;
  display:flex;align-items:center;justify-content:center}
.balao-online{position:absolute;right:0;bottom:1px;width:11px;height:11px;border-radius:50%;
  background:#3FBF6B;border:2px solid var(--branco)}
.balao-quem{display:flex;flex-direction:column;line-height:1.25}
.balao-quem b{font-size:14.5px;font-weight:500;color:var(--ink)}
.balao-quem i{font-style:normal;font-size:11.5px;color:var(--ink2)}
.balao-msg{font-size:14px;line-height:1.55;color:var(--ink2);margin-bottom:12px}
.balao-cta{display:inline-flex;align-items:center;gap:9px;font-size:11.5px;
  letter-spacing:.13em;text-transform:uppercase;color:var(--cafe);min-height:44px}
/* O CARTAO INTEIRO leva ao WhatsApp. O retangulo invisivel sai do proprio link
   e cobre o balao, que ja e `position:fixed` e portanto ancora o `inset:0`.
   E a mesma tecnica do `.card`, e a mesma armadilha: sem ancora posicionada
   ele subiria e cobriria outra coisa.

   O X fica em z-index MAIOR, senao fechar viraria abrir o WhatsApp, que e o
   erro classico deste componente. */
.balao{cursor:pointer}
.balao-cta::before{content:"";position:absolute;inset:0;z-index:1}
.balao-x{z-index:2}
/* 767: a mesma fronteira da `.acao-fixa`, e ela nao e opcional. Os dois sao
   o mesmo par: onde a barra fixa entra, o balao tem de deixar de ser cartao
   solto no canto e virar faixa. Em larguras diferentes eles se sobrepoem. */
@media(max-width:767px){
  .balao{right:14px;left:14px;width:auto;bottom:calc(84px + env(safe-area-inset-bottom))}
  .balao::after{display:none}
}
/* enquanto a pessoa nao decidiu sobre cookies, o balao nao aparece: dois avisos
   ao mesmo tempo e ruido, e o de cookies tem precedencia legal */
body.consent-aberto .balao{display:none}

/* ===== O ROTULO DE FAQ VIROU <h2> E A PERGUNTA VIROU <h3>, 2026-08-20 =====
   Duas linhas, e as duas existem so para o desenho NAO mudar. A troca e de
   semantica: o `bloco_faq()` do conteudo.py passou a emitir
   `<h2 class="eyebrow">` no lugar de `<p class="eyebrow">` e
   `<summary><h3>Pergunta</h3></summary>` no lugar de `<summary>Pergunta</summary>`.
   Trocar a TAG traz junto o que o seletor de tipo diz sobre ela, e e ai que
   este tipo de mudanca costuma vazar um pixel sem ninguem ver.

   1. `h1,h2,h3` do v3.parte2.css declara `line-height:1.15`. O `.eyebrow` nao
      declara line-height nenhum, entao o `<p>` de hoje herda o 1.65 do body.
      Virando `<h2>`, e so essa propriedade que muda, porque `.eyebrow` ja
      vence o seletor de tipo em font-family, font-size, font-weight e
      letter-spacing por especificidade (0,1,0 contra 0,0,1). Sem esta linha o
      rotulo encolheria de 19,8px de caixa para 13,8px, e a distancia dele para
      o acordeao mudaria em 6px.

      POR QUE `h2.eyebrow` E NAO `.eyebrow` SECO, que era o pedido: `.eyebrow`
      seco valeria tambem para os `<p class="eyebrow">` que continuam sendo
      `<p>`, e ali ele deixaria de ser no-op no dia em que um deles estiver
      dentro de um container com line-height proprio, porque escrever o valor
      mata a heranca. Ha caso disso na pagina: o eyebrow do `.caso` so escapa
      hoje porque `.caso p` tem especificidade maior. Escopado na tag, a regra
      alcanca exatamente os elementos que mudaram de tag e prova sozinha que
      nao toca em mais nada. O `h3.eyebrow` entra junto, para a leva 2 nao
      precisar voltar aqui.

   2. `<summary>` e `display:flex`, entao o texto ja era um item de flex
      anonimo e o `<h3>` ocupa o mesmo lugar, sem mexer no
      `justify-content:space-between` nem no `+` que gira. O que o `<h3>`
      traria de novo e tipografia: `font-size` de UA, 1.17em sobre os 19px do
      `.faq summary`, ou seja 22,2px, e o mesmo `line-height:1.15`.
      `font:inherit` devolve os sete longhands da abreviacao ao valor do
      `<summary>`, que e onde eles ja estavam. Nao use `font-size:inherit`
      sozinho aqui: o line-height escaparia. */
h2.eyebrow,h3.eyebrow{line-height:1.65}
.faq summary h3{font:inherit}

/* ===== LEVA 2 DA ESTRUTURA SEMANTICA, 2026-08-20 =====
   Sete regras. Cinco existem so para o desenho NAO mudar quando um elemento
   troca de tag, e duas sao componente novo. O CSS entra aqui, e nao no
   `v3.parte2.css` nem no `v3.parte3.css`, pelo mesmo motivo da leva 1: as duas
   partes grandes ficam fechadas e tudo que a reforma toca fica num lugar so.

   1. O `<b>` que abre o bloco de objecao virou `<h2>`. A pergunta ali e a
      frase que a pessoa digita no Google, e era o unico texto de peso da
      pagina sem nivel nenhum. A regra `.objecao b` do v3.parte2.css nao alcanca
      `<h2>`, entao ela e repetida aqui, mais os DOIS valores que o `<b>`
      recebia por heranca e que o `<h2>` perderia para o seletor de tipo:
      `line-height` 1.65, que vinha do body contra o 1.15 de `h1,h2,h3`, e
      `letter-spacing` 0, contra o -.012em de `h1,h2`. Sem os dois, a caixa
      encolhe e a frase aperta, em dezesseis paginas. */
.objecao h2{font-family:var(--serif);font-size:18px;font-weight:500;font-style:italic;
            display:block;margin-bottom:8px;line-height:1.65;letter-spacing:0}

/*  2. O `<p class="grupo-titulo">Tambem em ...</p>` do bloco de irmas virou
       `<h2>`. Esta e a que muda a tela de verdade se faltar: `.grupo-titulo`
       nao declara `font-family`, entao `h1,h2,h3{font-family:var(--serif)}`
       assumiria e o rotulo trocaria de Inter para Fraunces em catorze paginas.
       O `line-height` cai junto, pelo mesmo motivo do item 1. Todo o resto,
       tamanho, peso, caixa alta, tracking e cor, ja esta em `.grupo-titulo`,
       que vence o seletor de tipo por especificidade. */
.grupo-titulo{font-family:var(--sans);line-height:1.65}

/*  3. O `.oque` deixou de ser um paragrafo unico e passou a ser de dois a
       quatro, cortados nos pontos que o texto ja tinha. Nenhuma palavra
       mudou. O reset global zera margem de tudo, entao sem esta linha os
       paragrafos colariam e a quebra nao existiria na tela.

       Em 2026-08-22 o valor subiu de 14px para `--e5`, 24px. O 14px era meia
       linha e deixava a quebra ambigua. A conta esta no item 8. */
.proc .oque + .oque{margin-top:var(--e5)}

/*  4. O quadro de dados virou lista de definicao: `<div class="boxresumo">`
       com `<b>`/`<span>` passou a `<dl>` com `<div><dt>/<dd></div>`, que e a
       forma valida de agrupar par em `<dl>`. Os `<div>` de dentro continuam
       casando com `.boxresumo div`, e a grade nao muda. `<dd>` traz
       `margin-inline-start:40px` do agente de usuario, e quem o mata e o
       `*{margin:0}` do reset, que roda antes. */
.boxresumo dt{display:block;font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;
              color:var(--cafe);margin-bottom:8px;font-weight:500}
.boxresumo dd{display:block;font-family:var(--serif);font-size:17px;font-weight:400;
              line-height:1.35;color:var(--ink)}

/*  5. COMPONENTE NOVO: os dois `<h2>` de estrutura das dezesseis, "O que e o
       <nome>" e "Para quem e".

       O tamanho e a decisao: 22px fica entre o gancho, que e clamp de 27 a
       38px, e o corpo, que e 16px. Isso e deck editorial, e nao subtitulo de
       blog: se ele encostar no gancho, a pagina passa a ter dois titulos
       disputando, e o gancho e a voz da marca.

       Familia, peso e tracking NAO sao declarados de proposito: vem de
       `h1,h2,h3` e de `h1,h2`, que sao as mesmas regras que vestem o gancho.
       Assim os dois andam juntos se a tipografia da marca mudar.

       As duas linhas de `margin` seguintes existem porque o reset zera tudo e
       porque margem de irmaos colapsa: sem elas o deck cairia 26px abaixo do
       gancho, longe demais, e o "Para quem e" ficaria 22px acima da lista que
       ele nomeia, ou seja, mais perto do texto de cima do que do de baixo.

       O `max-width:26em`, e nao um valor em `ch`, foi MEDIDO nos dezesseis: a
       coluna esquerda do `.grid2` da 533px na largura cheia, e 26em a 22px da
       572px, ou seja, quem manda na quebra e a coluna, e nao esta linha. Com
       34ch, que foi a primeira tentativa, tres titulos quebravam deixando uma
       palavra orfa na segunda linha: Hipro em 499px, PEIM em 497px e Remocao
       de Tatuagem em 520px, todos cabendo na coluna. Hoje quinze cabem em uma
       linha e so o do Scizer, com 661px, quebra em duas equilibradas. O `em`
       ainda serve de teto se a coluna crescer.

       As DUAS margens mudaram em 2026-08-22, de `26px 0 10px` para
       `--e7 0 --e3`, ou seja 48px em cima e 12px embaixo. O motivo nao e
       estetico solto: o vao entre paragrafos subiu para 24px, e 26px contra
       24px deixaria o H2 sem anunciar secao nenhuma. Item 8. */
.proc .proc-sub{font-size:22px;line-height:1.3;color:var(--ink);
                max-width:26em;margin:var(--e7) 0 var(--e3)}
.proc .gancho + .proc-sub{margin-top:0}
.proc .proc-sub + .paraquem{margin-top:0}

/*  6. COMPONENTE NOVO: a linha de assinatura, igual nas dezesseis, entre o
       bloco de objecao e o CTA. Tamanho de nota, e nao de corpo: ela e
       credencial, e nao argumento, e competir com o texto do bloco de objecao
       logo acima seria o erro. `margin-top:0` deixa o gap de 26px vir do
       proprio `.objecao`, que ja o tinha para o botao. */
.proc .assina{font-size:14.5px;line-height:1.6;color:var(--ink2);
              max-width:58ch;margin:0 0 22px}
.proc .assina b{font-weight:500;color:var(--ink)}

/*  7. O BLOCO DE OBJECAO passou a ter mais de um paragrafo, 2026-08-22.

       Mesma historia do item 3, e a mesma armadilha: nove das dezesseis
       objecoes foram cortadas em dois ou tres `<p>` nas fronteiras de frase
       que o texto ja tinha, sem trocar uma palavra. `.objecao p` declara
       `font-size` e `color` e mais nada, o `*{margin:0}` do reset zera o
       resto, e ate 21/08 isso nao doia porque toda objecao era um `<p>` so.
       Sem esta linha os paragrafos novos colam e o corte nao existe na tela.

       POR QUE `--e5`, E POR QUE NAO COPIEI O 14px DO ITEM 3. A conta e outra
       porque o texto e outro: `.objecao p` e 15px e NAO redeclara
       `line-height`, entao herda o 1.65 do body. Linha de 15 x 1.65 =
       24,75px. Na escala do projeto:

         --e4 = 16px = 0,65 linha, fraco. Em cima de uma entrelinha ja
                       generosa vira soluco, e o olho fica em duvida se
                       comecou paragrafo novo ou se foi so uma quebra larga.
         --e5 = 24px = 0,97 linha. Uma linha em branco, a menos de um pixel.
         --e6 = 32px = 1,29 linha, forte demais para argumento continuo.

       O item 3 usa 14px porque `.oque` e 16px, linha de 26,4px, e 14px ali e
       0,53 linha, MEIA linha: os `.oque` sao batidas de uma explicacao so, sem
       moldura em volta, e precisam continuar soldados. Aqui e o oposto: sao
       movimentos distintos de um argumento, dentro de uma caixa com borda.
       Copiar o 14px daria meia linha dentro de um bloco que pede uma.

       O SEGUNDO MOTIVO E ARITMETICO E FECHA A ESCOLHA: `.objecao` tem
       `padding:24px 28px`. Com `--e5`, o vao entre paragrafos fica 24px,
       EXATAMENTE o padding vertical da caixa, e o ritmo interno passa a ser
       uniforme: o paragrafo fica tao longe do vizinho quanto da borda. Com
       `--e6` o vao interno, 32px, ficaria MAIOR que o proprio padding da
       caixa, e a moldura passaria a segurar tres recados empilhados em vez de
       um argumento.

       `p + p`, e nao `margin-bottom` no `p`: irmao adjacente nao toca o
       primeiro nem o ultimo paragrafo, entao o padding da caixa fica intacto e
       nao ha pergunta de colapso de margem. Regra inerte onde nao ha irmao,
       ou seja, nas sete objecoes que continuaram com um `<p>` so e nas tres
       `.objecao` da Home, que tem `<b>` mais um `<p>`. */
.objecao p + p{margin-top:var(--e5)}

/*  8. O ESPACAMENTO DA COLUNA DE TEXTO DAS 16, 2026-08-22.

       Este item nao e uma regra, e um conjunto acoplado: mexer em um valor
       sozinho quebra a hierarquia dos outros. Por isso a conta fica toda
       aqui, e os tres valores que moram acima no arquivo apontam para ca.

       O QUE ESTAVA ERRADO. Medido no Chrome, com a animacao `.revela`
       neutralizada, a coluna esquerda tinha esta sequencia de vaos:

         gancho -> H2 .............. 16
         H2 -> primeiro .oque ...... 10
         .oque -> .oque ............ 14
         .oque -> .boxresumo ....... 26
         .boxresumo -> .box-nota ... 10
         .box-nota -> .encaminha ... 14
         .encaminha -> H2 .......... 26
         H2 -> .paraquem ........... 10
         .paraquem -> .objecao ..... 26
         .objecao -> .assina ....... 26

       Tres defeitos, e o terceiro so nasceu em 21/08:

       a) 14px entre `.oque` e MEIA linha. `.proc .oque` e 16px e herda o
          line-height 1.65 do body, ou seja linha de 26,4px. Com 14px, a
          distancia de base a base entre paragrafos fica 40,4px contra 26,4px
          dentro do paragrafo, razao 1,53. Isso e detectavel mas ambiguo: numa
          entrelinha ja generosa, o olho fica em duvida se comecou paragrafo
          novo ou se foi so uma linha curta. Com `--e5`, 24px, a razao vai a
          1,91 e a quebra deixa de ter duas leituras.

       b) 26 contra 14 dava razao 1,86 e sustentava o H2. Subindo o meio para
          24, sobrariam 26 contra 24, razao 1,08: o H2 pararia de anunciar
          secao. Por isso o topo do `.proc-sub` foi para `--e7`, 48px, que e o
          DOBRO exato do vao de paragrafo. Nao ha valor intermediario na
          escala: `--e6`, 32px, daria 1,33 sobre 24, fraco demais para o unico
          vao da pagina que precisa carregar sentido sozinho, porque um H2 nao
          tem borda nem fundo que o anuncie.

       c) DEFEITO NOVO, do dia em que o quadro desceu para o corrido: a
          `.encaminha` valia 14px de quando o vizinho de cima era um `.oque`.
          Hoje o vizinho e a `.box-nota`, legenda de 12,5px que pertence ao
          quadro. A 14px a frase de encaminhamento colava na legenda e lia como
          continuacao dela, quando ela e outro objeto, com borda propria, e
          aponta para fora da pagina. Foi para `--e6`, 32px, o mesmo token dos
          outros objetos.

       A ESCALA QUE SAIU, quatro degraus e um significado por degrau:

         --e3, 12px .. AMARRA. "isto pertence aquilo": H2 ao seu conteudo, e
                       a `.box-nota` ao quadro que ela qualifica. Mesmo token
                       porque e a mesma relacao. Substitui os dois 10px, que
                       estavam fora da escala.
         --e5, 24px .. QUEBRA DE PARAGRAFO. Mesmo token que o item 7 deu a
                       `.objecao p + p`, e agora o site tem uma resposta so
                       para "quanto vale trocar de paragrafo".
         --e6, 32px .. OBJETO NOVO dentro da mesma secao: o quadro de dados, a
                       frase de encaminhamento e a caixa de objecao. Os tres se
                       anunciam sozinhos, com borda ou fundo, entao o vao so
                       precisa nao ser menor que uma quebra de paragrafo.
         --e7, 48px .. SECAO NOVA. Unico vao que carrega sentido sem ajuda.

       Razoes: 24/12 = 2,0. 32/24 = 1,33. 48/32 = 1,5. 48/24 = 2,0.
       O degrau mais fraco, 1,33, e justamente o que tem borda ajudando.

       CUSTO EM ALTURA: +82px numa pagina de tres `.oque`, sobre 2170px de
       coluna, 3,8%. +64px numa de um `.oque` so, sobre 1283px, 5,0%.

       AS CINCO DE UM `.oque` SO, que sao full-face, gluteos, labial, rino e
       toxina: nelas o `.oque + .oque` nao dispara, e so ele. As outras oito
       mudancas valem igual, inclusive as duas maiores, o H2 de secao a 48px e
       a `.encaminha` a 32px. Elas ganham 64 dos 82 pixels. Nao ficam para tras.

       POR QUE TUDO ESCOPADO EM `.proc`: `.objecao` tambem existe na Home,
       dentro de `.objecoes`, onde `margin:0` e proposital porque ali sao tres
       cartoes numa grade. `.proc` nao aparece em nenhuma das 6 paginas que
       nao sao procedimento, conferido uma a uma, entao o escopo isola as 16
       por construcao. `.proc .objecao` tem especificidade 0,2,0 e vence
       `.objecao` de 0,1,0; contra `.objecoes .objecao`, que tambem e 0,2,0,
       nao ha disputa porque os dois seletores nunca casam no mesmo elemento.

       O QUE FICOU FORA DA ESCALA DE PROPOSITO, e fica dito em vez de
       escondido: `.assina{margin-bottom:22px}`, o vao para o botao, e
       `.paraquem{margin:22px 0 4px}`, cujos dois valores ja sao neutralizados
       pelas regras do item 5 e nao chegam a aparecer nas 16. Nenhum dos dois e
       exigido pelo acoplamento, e mexer neles seria escopo que o Marcos nao
       aprovou nesta rodada. */
.proc .boxresumo{margin-top:var(--e6)}
.proc .box-nota{margin-top:var(--e3)}
.proc .objecao{margin:var(--e6) 0}

/*  9. MEDIDA DE LEITURA DA CAIXA DE OBJECAO, 07/09/2026.

       O teto vai no `<p>`, e nao na `.objecao`. A caixa tem fundo, borda a
       esquerda e padding de 24px por 28px: encolher a caixa mudaria o
       componente, e o que precisa de teto e a linha de texto. Assim a moldura
       continua acompanhando a coluna e so o texto para de crescer.

       62ch em 15px da 587px, que e a MESMA largura de leitura do `.oque`, o
       bloco que abre a coluna: ele e 58ch em 16px, ou seja 585px. Os dois
       passam a ler com a mesma linha, e nao com duas parecidas. Nao da para
       escrever 58ch aqui e chegar no mesmo lugar, porque `ch` mede contra o
       corpo do proprio elemento, e este e 15px e nao 16px: 58ch daria 549px,
       abaixo dos 574px que a caixa tem em 1440, e cortar no laptop e o que a
       tarefa proibe. Medido: a linha cai de 84 para 80 caracteres.

       Escopado em `.proc` de proposito. Na Home a `.objecao` vive dentro da
       grade de tres colunas `.objecoes`, onde a coluna nao passa de 544px nem
       em 3840, ou seja, la nao ha o que cortar e um teto so acrescentaria
       regra sem efeito. */
.proc .objecao p{max-width:62ch}

/* =========================================================================
   404: A LISTA DE SAIDAS, e o filete que falta.        07/09/2026

   Nasceu de tres auditorias em paralelo, de UX, de UI e de SEO, e as tres
   apontaram o mesmo defeito: a 404 usava `.passos-linha`, que e um componente
   de SEQUENCIA. Nas outras duas vezes em que ela aparece no site, na Home e na
   Contato, os numeros contam etapas que acontecem uma depois da outra. Aqui os
   quatro itens sao DESTINOS, e destino nao tem ordem: nada acontece antes de
   Contato. Numerar convida a leitora a comecar pelo 01, que e justamente o
   endereco que ela ja tentou e que nao existe.

   Quatro medidas do componente antigo nesta pagina, e elas decidem sozinhas:

   1. O `<h3>` declarava 26px e NUNCA chegava a tela. O `.link-luxo` dentro
      dele impoe `font-size:15px`, e o `<a>` era o unico conteudo do `<h3>`.
      Resultado computado: nome do destino a 15px, descricao a 15,5px. O titulo
      saia MENOR que o texto que ele titula, e na mesma cor.
   2. Em 1440 o numeral ocupava caixa de 96 por 146 pixels, e o link a tocar
      media 44 por 20. O ornamento tinha dezesseis vezes a area do alvo.
   3. O unico sinal de que aquilo era clicavel era o filete do `.link-luxo`,
      medido em 1,88:1 no PNG renderizado, abaixo do minimo de 3:1 da WCAG
      1.4.11 para indicacao nao textual.
   4. O filete vertical que liga os passos e `--linha` sobre `--areia`, 1,55:1.
      Existia no DOM e nao aparecia na tela. Sobrava linha do tempo sem a linha.

   Em 344px o numeral e o vao dele levavam 88 dos 312 pixels uteis, 28% da
   largura, para nao dizer nada.
   ========================================================================= */
.saidas{
  list-style:none;
  display:grid;
  grid-template-columns:minmax(0,1fr);
  margin:var(--e6) 0 0;
  padding:0;
  /* MEDIDA DE LEITURA. 1136px e a largura util que o proprio contrato de
     responsividade entrega em 1280: container de 1200 menos os dois gutters de
     32. Reusar esse numero, em vez de inventar outro, faz a lista parar de
     crescer a partir de 1440 e manter, de 1440 a 3840, a mesma linha que o
     laptop ja lia. */
  max-width:1136px;
}
.saida{
  /* OBRIGATORIO, e nao e enfeite. O `::before` do link abaixo e `inset:0`, e
     pseudo-elemento absoluto se ancora no ancestral posicionado mais proximo.
     Sem `position` aqui, o retangulo invisivel de UMA saida se ancoraria na
     secao e cobriria o clique das outras tres, SEM NENHUM SINTOMA VISUAL. E a
     mesma armadilha que o `.link-seta` fora de `.card` ja custou a este
     projeto, e que esta escrita no CLAUDE.md. */
  position:relative;
  padding:var(--e5) 0;
  border-top:1px solid var(--linha);
}
.saida a{
  display:inline-block;
  font-family:var(--serif);
  font-size:clamp(24px,2.4vw,32px);
  line-height:1.25;
  letter-spacing:-.012em;
  color:var(--ink);                    /* 9,45:1 sobre --areia */
  /* O sublinhado que cresce do centro e a assinatura de link da casa, do
     `.link-luxo`. Aqui ele e `background-image` e nao `::after` porque o
     `::before` ja esta ocupado com a area de toque da linha inteira, e um
     elemento so tem um `::before`. */
  background-image:linear-gradient(var(--ink),var(--ink));
  background-repeat:no-repeat;
  background-position:50% 100%;
  background-size:0 1px;
  transition:background-size 480ms var(--ease-saida);
}
/* a linha INTEIRA e o alvo, e nao so as seis letras de "Inicio" */
.saida a::before{content:"";position:absolute;inset:0;z-index:1}
.saida:hover a{background-size:100% 1px}
.saida p{
  margin-top:var(--e2);
  font-size:15.5px;
  line-height:1.65;
  color:var(--ink2);                   /* 5,22:1 sobre --areia */
  max-width:56ch;
}

/* O ANEL DE FOCO, e o `@supports` aqui NAO e zelo excessivo.
   O anel global do site cerca o TEXTO do link, e aqui o alvo e a linha toda:
   sem isto, quem navega por teclado ve um retangulo de 44px marcando uma area
   clicavel de 130px. Mas a regra depende de `:has()`, e a linha que apaga o
   anel global, `outline:none`, NAO depende. Escritas soltas, um navegador sem
   `:has()` aplicaria so a segunda e ficaria SEM anel nenhum, que e trocar um
   desalinho por uma barreira de acessibilidade. Dentro do `@supports`, as duas
   caem juntas e o anel global do texto continua valendo onde `:has()` falta.
   `--caramelo` da 3,41:1 sobre `--areia`, acima do minimo de 3. */
@supports selector(:has(*)){
  .saida:has(a:focus-visible){outline:2px solid var(--caramelo);outline-offset:4px}
  .saida a:focus-visible{outline:none}
}

/* 768: duas colunas. Nao e so economia de altura, e a correcao semantica
   chegando ao layout: coluna unica ainda insinua ordem de cima para baixo, e
   uma grade 2 por 2 diz "sao pares" sem precisar de palavra nenhuma.
   `minmax(0,1fr)` e o mesmo idioma da `.areas-home`, e existe para a celula
   nao estourar por conta do conteudo. */
@media(min-width:768px){
  .saidas{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--e7)}
}
@media(prefers-reduced-motion:reduce){
  .saida a{transition:none}
}

/* ---- O GESTO: o filete que falta ----

   E a `.regua` da casa, o mesmo 1px de `--caramelo` do bloco do manifesto, com
   um vao no meio. Fica entre o rotulo "Erro 404" e o titulo, que e onde o olho
   passa da palavra da maquina para a palavra da marca.

   Por que ele e marca e nao enfeite: a tese da clinica e "ninguem precisa notar
   que voce fez", e esta e a unica pagina do site onde alguma coisa esta
   genuinamente faltando. Um filete com um vao e essa frase desenhada. Custa um
   elemento e nao gasta imagem nenhuma.

   POR QUE NAO E DOURADO, e a conta decide: `--ouro` ja esta gasto nesta pagina,
   porque a `.acao-fixa` do celular carrega o filete dourado por dentro do botao
   e e visivel em toda largura ate 767px. Um segundo ouro no topo poria dois na
   mesma dobra no telefone, contra a regra escrita no proprio token.

   O corte e ASSIMETRICO, 40 de filete, 16 de vao e 8 de retomada. Comparado com
   a versao simetrica de 24 mais 24: simetrico le como ornamento de dois tracos,
   assimetrico le como linha interrompida que volta. A `.regua` da casa e
   `margin:0 auto`, centralizada; aqui ela alinha a esquerda, com o eyebrow. */
.regua--falta{
  display:block;position:relative;
  width:64px;height:1px;
  background:none;
  margin:0 0 var(--e5);
}
.regua--falta::before,
.regua--falta::after{
  content:"";position:absolute;top:0;height:1px;background:var(--caramelo);
}
.regua--falta::before{left:0;width:40px}
.regua--falta::after{right:0;width:8px}

/* A pagina do arquivo sempre aparece. Ver o comentario em caminhos(). */
.pagina{display:block}
.pendente{border-left:2px solid var(--caramelo);padding:4px 0 4px 18px;margin-bottom:22px}
.pend-rot{font-size:11px;letter-spacing:.15em;text-transform:uppercase;color:var(--cafe);margin-bottom:8px}
.pendente p{font-size:15.5px;color:var(--ink2);line-height:1.65;max-width:56ch}
.vizinhas{max-width:520px;border-top:1px solid var(--linha)}
.viz{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:56px;
  padding:14px 2px;border-bottom:1px solid var(--linha);font-family:var(--serif);
  font-size:19px;font-weight:400;transition:color 200ms var(--ease-curta)}
.viz:hover{color:var(--cafe)}
.viz:hover .seta{width:24px}

/* ===== MIGALHA, bloco 1 do gabarito de 20/08 =====
   Contraste medido antes de escrever, porque 12,5px e texto pequeno e o
   minimo e 4,5:1: --ink2 da 5,46:1 e passa. O filete do link vai em
   --contorno, 3,45:1, e nao em --linha, 1,62:1: aqui o sublinhado e a UNICA
   indicacao de que o item e clicavel, porque o reset global zera o
   text-decoration de todo <a>, e a propria nota do token manda usar
   --contorno nesse caso. O separador nao e texto, e por isso vai em <i>
   com aria-hidden, para o leitor de tela nao ler "maior que" tres vezes. */
.migalha{font-size:12.5px;line-height:1.6;color:var(--ink2);margin-bottom:16px}
.migalha a{color:var(--ink2);border-bottom:1px solid var(--contorno);padding-bottom:1px;
  transition:color 180ms var(--ease-curta)}
.migalha a:hover{color:var(--cafe)}
.migalha i{font-style:normal;margin:0 8px;color:var(--ink2);opacity:.6}
.migalha .aqui{color:var(--ink)}

.al{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;
  gap:4px 18px;padding:14px 0;border-bottom:1px solid rgba(252,241,221,.18);
  align-items:center}
.al b{font-family:var(--serif);font-size:clamp(17px,1.7vw,21px);font-weight:400;
  color:var(--areia);line-height:1.25}
.al i{grid-column:1/-1;font-style:normal;font-size:13.5px;color:var(--claro-escuro2);line-height:1.5}
.al:hover b{color:#fff}
.hub-fim{display:flex;flex-wrap:wrap;gap:24px;align-items:center;justify-content:space-between}
.hub-fim p{font-size:16px;color:var(--ink2);max-width:52ch;line-height:1.65}
/* 767: o par de texto mais botao ja quebra sozinho por `flex-wrap` bem antes
   disso, entao o que este bloco faz e alinhar o botao a esquerda no telefone.
   Era 600, um valor de ninguem. */
@media(max-width:767px){.hub-fim{flex-direction:column;align-items:flex-start}}

/* ===== CONCEITO 2: A CORTINA =====
   <dialog> nativo com showModal(): entrega armadilha de foco, Esc e inerte
   atras, de graca. Escrever isso a mao e onde esse padrao costuma quebrar
   acessibilidade. */
.blocos{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
/* Mesmo caso da `.areas-home` da Home, e sao as mesmas seis areas: acima de
   1440 o `auto-fill` deixaria um bloco orfao na segunda linha. Ver a nota
   inteira no estilo_extra.py. */
@media(min-width:1280px){.blocos{grid-template-columns:repeat(3,minmax(0,1fr))}}
.bl{position:relative;min-height:38vh;border:0;padding:0;cursor:pointer;overflow:hidden;
  background:var(--ink);text-align:left;display:block}
.bl img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  filter:grayscale(.35) brightness(.62);transition:transform 620ms var(--ease-saida),filter 420ms}
.bl:hover img{transform:scale(1.05);filter:grayscale(0) brightness(.7)}
.bl::after{content:"";position:absolute;inset:0;
  background:linear-gradient(to top,rgba(55,64,71,.88) 0%,rgba(55,64,71,.30) 60%,transparent 100%)}
.bl-txt{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:24px;display:block}
.bl-txt b{display:block;font-family:var(--serif);font-size:clamp(21px,2.2vw,28px);
  font-weight:400;color:var(--areia);margin-bottom:4px}
.bl-txt i{display:block;font-style:normal;font-size:13px;color:var(--claro-escuro2);margin-bottom:12px}
.bl--sem-foto{background:var(--ink-hover);display:flex;align-items:flex-end;min-height:38vh}
.bl--sem-foto::after{background:none}
.bl--sem-foto .bl-txt{position:relative}
.bl-cta{font-size:11px;letter-spacing:.15em;text-transform:uppercase;color:var(--areia);
  display:inline-flex;align-items:center;gap:8px}
.cortina{width:100%;max-width:100%;height:100%;max-height:100%;border:0;padding:0;
  background:var(--ink);color:var(--areia);overflow-y:auto}
.cortina::backdrop{background:rgba(30,35,40,.7)}
.cortina[open]{animation:cortEntra 380ms var(--ease-saida) both}
@keyframes cortEntra{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}
.cor-topo{position:sticky;top:0;z-index:5;display:flex;justify-content:space-between;
  align-items:center;padding:16px var(--gutter);background:var(--ink);
  border-bottom:1px solid rgba(252,241,221,.14)}
.cor-topo button{background:none;border:0;cursor:pointer;color:var(--claro-escuro2);
  font-family:var(--sans);font-size:12px;letter-spacing:.13em;text-transform:uppercase;
  min-height:44px;padding:0 4px}
.cor-topo button:hover{color:var(--areia)}
.cor-x{font-size:17px!important;letter-spacing:0!important}
.cortina .cor-grade:not(:has(.cor-foto)){grid-template-columns:minmax(0,1fr)}
.cor-grade{display:grid;grid-template-columns:minmax(0,320px) minmax(0,1fr);
  gap:clamp(24px,4vw,56px);padding-top:36px;padding-bottom:40px;align-items:start}
.cor-foto{position:sticky;top:88px;aspect-ratio:2/3;overflow:hidden}
.cor-foto img{width:100%;height:100%;object-fit:cover}
.cor-tit{font-family:var(--serif);font-size:clamp(28px,3.4vw,42px);margin-bottom:8px}
.cor-desc{font-size:15px;color:var(--claro-escuro2);max-width:52ch;margin-bottom:20px;line-height:1.6}
.cor-chips{position:sticky;bottom:0;background:var(--ink);
  border-top:1px solid rgba(252,241,221,.14);padding:12px 0}
.cor-chips ul{display:flex;gap:8px;overflow-x:auto;padding:0 var(--gutter);list-style:none}
.cor-chips a,
.cor-chips button{white-space:nowrap;background:none;cursor:pointer;
  border:1px solid rgba(252,241,221,.28);color:var(--claro-escuro2);
  padding:10px 16px;font-size:12px;font-family:var(--sans);min-height:44px}
.cor-chips .ativo{border-color:var(--caramelo);color:var(--areia)}
/* 1023, e nao 767. A `.cor-grade` e a mesma figura das outras grades de duas
   colunas do site: foto fixa de 320px ao lado de texto. Em 768 o texto
   ficaria com 369px, menos que os 52ch declarados na propria `.cor-desc`, e
   a lista de procedimentos passaria a quebrar nome e funcao em duas linhas.
   Com 1023 o iPad recebe a cortina de uma coluna, com a foto deitada, que e
   o mesmo tratamento que o resto do site da a ele. */
@media(max-width:1023px){
  .bl{min-height:24vh}
  .cor-grade{grid-template-columns:1fr;padding-top:20px}
  .cor-foto{position:relative;top:auto;aspect-ratio:16/9}
}

/* =========================================================================
   CARROSSEL DAS PAGINAS DE PROCEDIMENTO, ideia 3: a espiada do proximo
   Escolhido pelo Marcos em 20/08/2026. So nas 16 de procedimento.
   ========================================================================= */
.c3{position:relative}
.c3-janela{overflow:hidden}
.c3-trilho{display:flex;gap:12px;
  transition:transform var(--t-lento) var(--ease-saida);will-change:transform}
.c3-trilho.arrastando{transition:none}
/* A caixa da foto e a mesma que as tres ideias usaram, para a comparacao com a
   cliente nao ficar contaminada por tamanho: 413x516 na coluna de 483px. A
   sobra de 70px vira a espiada do proximo. */
.c3-item{flex:0 0 calc(100% - 70px);aspect-ratio:4/5;overflow:hidden;
  background:var(--creme);position:relative;cursor:pointer}
/* a foto em exibicao nao e alvo de clique, so as que espiam. Sem esta linha o
   cursor promete uma acao que nao existe em cima da foto que ja esta aberta. */
.c3-item.on{cursor:default}
.c3-item img{width:100%;height:100%;object-fit:cover;
  transform:scale(1.06);transition:transform var(--t-foto) var(--ease-saida),
  filter 620ms var(--ease-curta);filter:grayscale(.35) brightness(.86)}
/* O item ATIVO ganha cor cheia e volta ao tamanho: quem espia fica apagado, e
   e isso que faz a espiada parecer intencao e nao sobra de layout.
   ARMADILHA: `filter:none` so devolve a cor que o ARQUIVO tem. Cinco fotos do
   acervo sao preto e branco na origem, com saturacao 0,000, e nenhuma regra de
   CSS as traz de volta. Por isso a lista FOTOS la em cima nao usa nenhuma
   delas. Ver o relatorio de 20/08/2026. */
.c3-item.on img{transform:scale(1);filter:none}
.c3-item::after{content:"";position:absolute;inset:0;background:rgba(55,64,71,.16);
  opacity:1;transition:opacity 620ms var(--ease-curta)}
.c3-item.on::after{opacity:0}
/* so os pontos, e centrados: sem legenda, nao ha o que alinhar do outro lado */
.c3-baixo{display:flex;align-items:center;justify-content:center;padding-top:16px}
.c3-dots{display:flex;gap:7px;flex-shrink:0}
.c3-dot{width:7px;height:7px;border-radius:50%;border:0;padding:0;cursor:pointer;
  background:rgba(55,64,71,.24);
  transition:background-color 320ms var(--ease-curta),width 420ms var(--ease-saida)}
.c3-dot:hover{background:rgba(55,64,71,.45)}
/* o dot ativo NAO cresce de tamanho, ele vira um traco: circulo que incha
   parece controle de app, e traco parece indice de editorial */
.c3-dot.on{width:22px;border-radius:4px;background:var(--ouro)}
/* 767: no telefone a foto vertical ganha altura, porque a coluna e a tela
   inteira. Era 760, e virou a fronteira canonica de telefone. */
@media(max-width:767px){ .c3-item{aspect-ratio:3/4} }

/* ---- o botao de pausa da passagem automatica ----
   Canto inferior ESQUERDO, e nao direito: na coluna lateral a borda direita da
   foto e onde cai a espiada do proximo, e o botao ficava por cima dela. */
.auto-pausa{position:absolute;left:12px;bottom:12px;z-index:5;
  width:44px;height:44px;border-radius:50%;border:1px solid rgba(252,241,221,.5);
  background:rgba(55,64,71,.708);backdrop-filter:blur(6px);color:var(--areia);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  font-size:11px;line-height:1;transition:background-color 220ms var(--ease-curta),opacity 320ms}
.auto-pausa:hover{background:rgba(55,64,71,1)}
.auto-pausa[hidden]{display:none}
/* o anel de progresso do tempo, fino e discreto: a pessoa ve que vai passar,
   em vez de ser surpreendida */
.auto-anel{position:absolute;inset:-1px;border-radius:50%;pointer-events:none}
.auto-anel circle{fill:none;stroke:var(--ouro);stroke-width:2;
  stroke-dasharray:132;stroke-dashoffset:132;transform:rotate(-90deg);transform-origin:50% 50%}
.auto-rodando .auto-anel circle{animation:autoGira var(--auto-tempo,5s) linear infinite}
@keyframes autoGira{from{stroke-dashoffset:132}to{stroke-dashoffset:0}}
@media (prefers-reduced-motion:reduce){.auto-anel{display:none}}
