/*
Theme Name: Ana Elisa Brito Vilibor
Theme URI: https://anaelisabritovilibor.com.br
Author: Migração Builderall -> WordPress
Description: Tema leve e semântico para o site da Dra. Ana Elisa Brito Vilibor. Reproduz a identidade original (Muli/Montserrat, bronze, hexágonos) em HTML responsivo, sem jQuery e com fontes self-hosted.
Version: 1.2.0
Requires at least: 6.5
Requires PHP: 8.1
License: GPLv2 or later
Text Domain: anaelisa
*/

/* ---------------------------------------------------------------
   1. Fontes — as mesmas do site original, self-hosted
      (fontConfig do Builderall: h1/h2 Muli Black, h3-h6 Muli,
       p Muli Light, menu Montserrat Light)
   --------------------------------------------------------------- */
@font-face { font-family:'Muli'; src:url('assets/fonts/Muli-Light.woff2') format('woff2');
  font-weight:300; font-style:normal; font-display:swap; }
@font-face { font-family:'Muli'; src:url('assets/fonts/Muli.woff2') format('woff2');
  font-weight:400; font-style:normal; font-display:swap; }
@font-face { font-family:'Muli'; src:url('assets/fonts/Muli-Black.woff2') format('woff2');
  font-weight:900; font-style:normal; font-display:swap; }
@font-face { font-family:'Montserrat'; src:url('assets/fonts/Montserrat-Light.woff2') format('woff2');
  font-weight:300; font-style:normal; font-display:swap; }

/* ---------------------------------------------------------------
   2. Tokens — hex exatos extraídos do config do site original
   --------------------------------------------------------------- */
:root {
  --bronze:       #d69a5b;  /* bordas, foco, detalhes — nunca sob texto branco */
  /* Mesmo tom, escuro o bastante para texto branco: #d69a5b dava 2,43:1 com
     #fff (WCAG AA pede 4,5:1 em texto corrido). Este dá 4,63:1 e fica entre
     os dois bronzes que o site já usava. */
  --bronze-acc:   #9c6a3a;  /* cartão do hero, caixa do rodapé, botões */
  /* 3,86:1 com branco — NÃO usar como cor de texto sobre branco nem como
     fundo sob texto branco. Para texto use --bronze-text (definido na §18,
     5,05:1); para superfície use --bronze-acc ou --bronze-deep. */
  --bronze-dark:  #b47334;  /* faixa do rodapé (sobre textura), contornos de foco */
  --bronze-deep:  #865e3c;  /* cartão de especialidade escuro */
  --peach-soft:   #fdf5ef;

  --heading:      #7f8c8d;  /* títulos de seção e legendas */
  --ink:          #4a4a4a;  /* menu */
  --btn-ink:      #595555;  /* texto do botão "Saiba Mais" */
  --line:         #ece7e1;
  --white:        #fff;

  --font:  'Muli', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-nav: 'Montserrat', var(--font);

  /* Medido no original: a área de conteúdo tem ~1018px (em 1366 o conteúdo
     começa em x=176). Com 1200px tudo ficava ~100px à esquerda do original. */
  --wrap: 1020px;
  --gap: clamp(1.5rem, 4vw, 3rem);
  /* Painéis do original medem 605-775px de altura; respiro menor que o meu
     primeiro palpite, senão a página fica ~17% mais alta que a referência. */
  --section-y: clamp(2.5rem, 5vw, 4rem);

  --radius: 12px;
  --shadow: 0 4px 18px rgba(0,0,0,.10);
  --shadow-card: 4px 4px 13px 3px rgba(128,128,130,.45);
  --shadow-lg: 0 10px 34px rgba(0,0,0,.14);
}

/* ---------------------------------------------------------------
   3. Reset + tipografia base
   --------------------------------------------------------------- */
*, *::before, *::after { box-sizing:border-box; }
html { -webkit-text-size-adjust:100%; scroll-behavior:smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior:auto; }
  *, *::before, *::after { animation-duration:.01ms !important; transition-duration:.01ms !important; }
}
body {
  margin:0; font-family:var(--font); font-weight:300;
  font-size:17px; line-height:1.55; color:#000; background:var(--white);
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
img, picture, video, iframe { max-width:100%; height:auto; display:block; }
/* Link padrão: --bronze-dark dá 3,86:1 sobre branco e reprova AA em texto
   pequeno. --bronze-text é o mesmo bronze escurecido (5,05:1). No hover a cor
   ESCURECE (--bronze-deep, 5,71:1); antes clareava para --bronze, que sozinho
   dá 2,43:1 — o estado de hover ficava menos legível que o normal. */
a { color:var(--bronze-text); text-underline-offset:.18em; }
a:hover { color:var(--bronze-deep); }

/* Escala do fontConfig original */
h1 { font-family:var(--font); font-weight:900; font-size:clamp(40px,6vw,60px); line-height:1.1; margin:0 0 .4em; color:var(--heading); }
h2 { font-family:var(--font); font-weight:900; font-size:clamp(28px,4.2vw,40px); line-height:1.1; margin:0 0 .5em; color:var(--heading); }
/* h3 usa --heading-text, e não --heading, porque é o único título que cai
   abaixo da régua de "texto grande": no celular o clamp resolve para 20px com
   peso 400 (grande = 24px, ou 18,66px se negrito), então precisa de 4,5:1 —
   #7f8c8d dá 3,48. h1 e h2 seguem com --heading: nunca descem de 28px. */
h3 { font-family:var(--font); font-weight:400; font-size:clamp(20px,2.4vw,25px); line-height:1.2; margin:0 0 .5em; color:var(--heading-text); }
p  { margin:0 0 1.1em; }
ul, ol { margin:0 0 1.1em; padding-left:1.3em; }
li { margin-bottom:.4em; }
:focus-visible { outline:3px solid var(--bronze-dark); outline-offset:3px; border-radius:3px; }
/* Primeiro elemento que um usuário de teclado alcança — precisa passar de
   verdade: #b47334 sob texto branco dava 3,86:1. */
.skip-link { position:absolute; left:-9999px; top:0; z-index:999;
  background:var(--bronze-deep); color:#fff; padding:.8rem 1.4rem; }
.skip-link:focus { left:0; }

/* ---------------------------------------------------------------
   4. Layout
   --------------------------------------------------------------- */
.wrap { width:min(100% - 2.5rem, var(--wrap)); margin-inline:auto; }
.wrap--narrow { width:min(100% - 2.5rem, 800px); margin-inline:auto; }
/* overflow:hidden segura os hexágonos, que avançam para fora da coluna */
.section { padding-block:var(--section-y); position:relative; overflow:hidden; }
.text-center { text-align:center; }
.section-title--center { text-align:center; }

/* Texto de seção: 26px no desktop, como no original */
.lead { color:var(--heading); font-size:clamp(17px,2vw,26px); line-height:1.45; }

/* Campo de hexágonos — assets originais. São o elemento dominante do layout:
   no site de origem medem 593-715px e avançam bastante para fora da coluna. */
.hexes { position:absolute; inset:0; overflow:hidden; pointer-events:none; z-index:0; }
.hexes img { position:absolute; height:auto; }
.section > .wrap, .hero > .wrap { position:relative; z-index:1; }
@media (max-width:760px) { .hexes { display:none; } } /* no original, showMobile:false */

/* ---------------------------------------------------------------
   5. Botões
   --------------------------------------------------------------- */
.btn {
  display:inline-flex; align-items:center; justify-content:center; gap:.55rem;
  font-family:var(--font); font-weight:700; font-size:16px;
  text-decoration:none; border:0; cursor:pointer;
  transition:background-color .18s, color .18s, transform .18s;
}
.btn:hover { transform:translateY(-2px); }
/* "Saiba Mais" — branco, pílula, 203x52 no original */
.btn--white { background:#fff; color:var(--btn-ink); border-radius:900px; padding:.9rem 2.5rem; min-width:203px; }
.btn--white:hover { background:#fff; color:#000; }
.btn--bronze { background:var(--bronze-acc); color:#fff; border-radius:60px; padding:.9rem 2rem; }
.btn--bronze:hover { background:#835733; color:#fff; }
.btn--outline { border:2px solid var(--bronze); color:var(--bronze-text); background:transparent; border-radius:900px; padding:.8rem 2rem; }
.btn--outline:hover { background:var(--bronze-acc); color:#fff; }
/* Verde oficial do WhatsApp preservado; o que muda é a TINTA do texto.
   Branco sobre #25d366 dá 1,98:1 — reprova WCAG AA com folga, e este botão
   agora se repete no hero, no cabeçalho, nas seções e no contato. Tinta
   verde-escura no lugar do branco: 6,17:1, sem trocar a cor da marca. */
.btn--wa { background:#25d366; color:#0b3d2c; border-radius:900px; padding:.9rem 2rem; }
.btn--wa:hover { background:#1fbe5b; color:#062018; }

/* ---------------------------------------------------------------
   6. Cabeçalho — menu Montserrat Light 17px
   --------------------------------------------------------------- */
.site-header { position:sticky; top:0; z-index:100; background:#fff; }
.site-header__inner { display:flex; align-items:center; gap:2rem; min-height:86px; }
.site-logo { display:flex; align-items:center; text-decoration:none; flex-shrink:0; }
.site-logo img { width:115px; height:auto; }
.site-logo__text { font-size:.82rem; color:var(--ink); line-height:1.35; text-align:center; }
.site-logo__text span { display:block; font-size:.68rem; color:var(--heading); }

.nav-toggle { display:none; background:none; border:0; padding:.5rem;
  font-size:1.7rem; color:var(--ink); cursor:pointer; line-height:1; margin-left:auto; }

.nav { margin-left:auto; }
.nav ul { list-style:none; margin:0; padding:0; display:flex; gap:0; align-items:center; }
.nav li { margin:0; position:relative; }
.nav > ul > li > a {
  display:block; padding:.7rem 1.05rem; font-family:var(--font-nav);
  font-weight:300; font-size:17px; color:var(--ink); text-decoration:none; white-space:nowrap;
}
.nav > ul > li > a:hover, .nav .current-menu-item > a, .nav .current-page-ancestor > a { color:#000; }
.nav .menu-item-has-children > a::after {
  content:''; display:inline-block; margin-left:.45em; vertical-align:middle;
  border-left:4px solid transparent; border-right:4px solid transparent;
  border-top:5px solid currentColor; opacity:.65;
}
/* Submenu: Muli Light 15px, fundo branco, centralizado */
.nav .sub-menu {
  display:none; position:absolute; top:100%; left:50%; transform:translateX(-50%);
  min-width:240px; background:#fff; box-shadow:var(--shadow-lg);
  padding:.5rem 0; flex-direction:column; max-height:74vh; overflow-y:auto;
}
.nav li:hover > .sub-menu, .nav li:focus-within > .sub-menu { display:flex; }
.nav .sub-menu a {
  display:block; font-family:var(--font); font-weight:300; font-size:15px;
  padding:.5rem 1.4rem; color:#000; text-decoration:none; text-align:center; white-space:nowrap;
}
.nav .sub-menu a:hover { background:rgba(255,255,255,.15); color:var(--bronze-dark); }

@media (max-width:1100px) {
  .nav-toggle { display:block; }
  .nav { display:none; position:absolute; top:100%; left:0; right:0; background:#fff;
    box-shadow:var(--shadow-lg); max-height:80vh; overflow-y:auto; padding:.75rem 1.25rem 2rem; }
  .nav.is-open { display:block; }
  .nav ul { flex-direction:column; align-items:stretch; }
  .nav .sub-menu { display:block; position:static; transform:none; box-shadow:none;
    padding:0 0 .5rem 1rem; max-height:none; }
  .nav > ul > li > a { padding:.75rem .25rem; border-bottom:1px solid var(--line); }
  .nav .sub-menu a { text-align:left; padding:.45rem .25rem; }
}

/* ---------------------------------------------------------------
   7. Hero — cartão bronze #D69A5B, raio 20px, foto sobreposta
   --------------------------------------------------------------- */
/* O respiro de cima era clamp(2rem,5vw,3.5rem) — 56px no desktop, que empurrava
   o cartão e os botões para fora da primeira dobra. Reduzido quase à metade; o
   de baixo continua, porque é ele que separa o hero da próxima seção. */
.hero { position:relative; padding-block:clamp(1rem,2.5vw,2rem) clamp(3rem,7vw,5rem); overflow:hidden; }
.hero__hexes {
  position:absolute; top:0; right:0; width:62%; height:100%;
  background-repeat:no-repeat; background-position:right center; background-size:contain;
  pointer-events:none;
}
.hero__grid { display:grid; grid-template-columns:minmax(0,392px) minmax(0,1fr);
  align-items:center; position:relative; z-index:1; }
.hero__card {
  background:var(--bronze-acc); color:#fff; border-radius:20px;
  padding:2.25rem 1.75rem; text-align:center; position:relative; z-index:2;
}
.hero__card h1 { color:#fff; font-family:var(--font); font-weight:700;
  font-size:20px; line-height:1.4; margin:0 0 .5rem; }
.hero__role { font-size:18px; font-weight:300; margin:0 0 1.5rem; }
/* Sem opacity: a 85% o CRM caía para 3,84:1 sobre o bronze — abaixo do mínimo
   de texto pequeno, justamente na linha que o CFM exige que seja legível. */
.hero__crm { display:block; font-size:13px; margin-top:.35rem; letter-spacing:.03em; }
/* Sem margem embaixo: depois que os botões subiram para antes das credenciais,
   esta lista virou o último elemento do cartão — os 2rem antigos somavam com o
   padding de 2.25rem e deixavam um vão morto no rodapé do cartão. */
.hero__creds { list-style:none; padding:0; margin:0; font-size:18px; font-weight:300; }
.hero__creds li { margin-bottom:.6rem; line-height:1.4; }
.hero__creds li:last-child { margin-bottom:0; }
/* No original a foto mede 601x591 — sem teto ela estoura para 856px. */
.hero__figure { margin:0 0 0 -3rem; max-width:601px; justify-self:center; }
.hero__figure img { border-radius:10px; width:100%; }

@media (max-width:900px) {
  .hero__grid { grid-template-columns:1fr; }
  .hero__figure { margin:0 auto -2rem; order:-1; max-width:520px; }
  .hero__card { max-width:520px; margin-inline:auto; }
  .hero__hexes { display:none; }
}

/* ---------------------------------------------------------------
   8. Blocos texto + colagem
   --------------------------------------------------------------- */
.split { display:grid; grid-template-columns:1fr 1fr; gap:var(--gap); align-items:center; }
@media (max-width:880px) { .split { grid-template-columns:1fr; } }
.collage { display:grid; grid-template-columns:1fr 1fr; gap:1rem; align-items:center; }
.collage img { border-radius:10px; width:100%; object-fit:cover; box-shadow:var(--shadow); }
.collage img:nth-child(1) { aspect-ratio:3/4; }
.collage img:nth-child(2) { aspect-ratio:3/4; transform:translateY(-1.5rem); }
.collage img:nth-child(3) { aspect-ratio:4/3; }
.collage img:nth-child(4) { aspect-ratio:4/3; transform:translateY(-1.5rem); }
@media (max-width:520px) { .collage img { transform:none !important; } }

/* ---------------------------------------------------------------
   9. Vitrine de vídeos da home — cartões 9:16, título em caixa
      branca com raio 0 0 30px 30px (o mesmo da grade antiga)

   O formato mudou em 06/09/2026 junto com o conteúdo: eram 3 embeds
   do YouTube em 322×231 (deitados); passaram a ser 3 vídeos do
   acervo, gravados na vertical. Pôster 9:16 dentro de moldura
   deitada, com object-fit:cover, corta o rosto dela — a moldura é
   que tinha de virar.

   Largura contida em 46rem: 9:16 é ALTO. Numa coluna de 380px o
   cartão passaria de 670px de altura e a seção sozinha ocuparia
   mais de uma tela.
   --------------------------------------------------------------- */
.vshelf {
  list-style:none; margin:0 auto; padding:0; max-width:46rem;
  display:grid; grid-template-columns:repeat(3,1fr); gap:1.75rem;
}
.vshelf__link {
  display:flex; flex-direction:column; height:100%;
  text-decoration:none; color:inherit;
}
.vshelf__thumb {
  position:relative; display:block; aspect-ratio:9/16; background:#000;
  border-radius:30px 30px 0 0; overflow:hidden;
}
.vshelf__thumb img { width:100%; height:100%; object-fit:cover; display:block; transition:opacity .2s; }
.vshelf__link:hover img { opacity:.82; }
.vshelf__link:hover .video-play__bg { fill:#f00; fill-opacity:1; }
.vshelf__link:focus-visible .vshelf__thumb { outline:3px solid var(--bronze); outline-offset:-3px; }
/* O glifo padrão (68×48) domina um cartão estreito. */
.vshelf__thumb .video-play svg { width:54px; height:38px; }
/* Etiqueta de duração, como no YouTube e como no hub /videos/. */
.vshelf__dur {
  position:absolute; right:8px; bottom:8px;
  background:rgba(0,0,0,.8); color:#fff;
  font-size:12px; font-weight:500; line-height:1;
  padding:3px 5px; border-radius:4px;
}
.vshelf__titulo {
  flex:1; display:grid; place-items:center;
  background:#fff; border-radius:0 0 30px 30px;
  box-shadow:0 4px 8px 1px rgba(194,194,194,.75);
  padding:1.2rem 1rem; text-align:center;
  color:var(--heading); font-size:17px; line-height:1.35;
}

/*
 * No telefone, três colunas dariam cartões de ~105px e o título quebraria em
 * cinco linhas. Vira prateleira horizontal com encaixe — o gesto que o
 * visitante já usa em Reels e Shorts. Dois cartões e meio à vista: a metade é
 * o que avisa que há mais.
 *
 * O overflow fica NA LISTA, não no corpo — página com rolagem horizontal é
 * defeito, prateleira com rolagem horizontal é componente.
 */
@media (max-width:640px) {
  .vshelf {
    display:flex; max-width:none; gap:1rem;
    overflow-x:auto; overscroll-behavior-x:contain;
    scroll-snap-type:x mandatory; scrollbar-width:thin;
    padding-bottom:.75rem;
  }
  .vshelf__item { flex:0 0 46%; scroll-snap-align:start; }
  .vshelf__titulo { font-size:15px; padding:1rem .75rem; }
}

/* Facade do YouTube: miniatura local + botão. O player só entra ao clicar.
   Continua em uso na watch page de vídeo do YouTube (page-video.php). */
.video-facade { position:absolute; inset:0; width:100%; height:100%;
  padding:0; border:0; background:#000; cursor:pointer; display:block; }
.video-facade img { width:100%; height:100%; object-fit:cover;
  transition:opacity .2s; }
.video-facade:hover img { opacity:.82; }
.video-play { position:absolute; inset:0; display:grid; place-items:center; }
.video-play svg { width:68px; height:48px; }
.video-play__bg { fill:#212121; fill-opacity:.8; transition:fill-opacity .2s; }
.video-facade:hover .video-play__bg { fill:#f00; fill-opacity:1; }
.video-facade:focus-visible { outline:3px solid var(--bronze); outline-offset:-3px; }

/* ---------------------------------------------------------------
   9b. Fotos de congresso — dispersas e em tamanhos diferentes,
       como no original (201/190/226/346px), não em grade uniforme
   --------------------------------------------------------------- */
/* Posições absolutas medidas no original (x relativo ao início do conteúdo,
   que fica em 176): as fotos se SOBREPÕEM — 3781851 e 10966575 cruzam 62px. */
.fotos-congresso { position:relative; min-height:694px; }
.fotos-congresso img { position:absolute; border-radius:8px;
  box-shadow:var(--shadow); object-fit:cover; }
.fotos-congresso img:nth-child(1) { left:9px;   top:39px;  width:201px; height:255px; z-index:7; }
.fotos-congresso img:nth-child(2) { left:253px; top:96px;  width:190px; height:271px; z-index:9; }
.fotos-congresso img:nth-child(3) { left:0;     top:293px; width:226px; height:287px; z-index:7; }
.fotos-congresso img:nth-child(4) { left:153px; top:348px; width:346px; height:346px; z-index:6; }
@media (max-width:980px) {
  .fotos-congresso { position:static; min-height:0; display:grid;
    grid-template-columns:1fr 1fr; gap:1rem; }
  .fotos-congresso img { position:static; width:100%; height:auto;
    aspect-ratio:4/5; }
}

/* ---------------------------------------------------------------
   10. Especialidades da clínica — cartões bronze em escada, raio 20px
   --------------------------------------------------------------- */
.esp-grid { display:grid; grid-template-columns:repeat(2,minmax(0,190px));
  gap:1.25rem; justify-content:start; }
.esp-card {
  background:var(--bronze-acc); border-radius:20px; padding:1.5rem 1rem;
  text-align:center; color:#fff; display:flex; flex-direction:column;
  align-items:center; gap:.9rem; aspect-ratio:211/239; justify-content:center;
}
/* Dermatologia é o cartão escuro e sobe; cardiologia desce — escada do original. */
.esp-card:nth-child(1) { background:var(--bronze-deep); }
.esp-card:nth-child(2) { transform:translateY(64px); }
.esp-card:nth-child(3) { transform:translateY(-32px); }
.esp-card img { width:100px; height:100px; border-radius:50%; object-fit:cover; }
.esp-card span { font-size:16px; font-weight:700; }
@media (max-width:880px) {
  .esp-grid { grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); }
  .esp-card { transform:none !important; }
}

/* ---------------------------------------------------------------
   11. Fotos da clínica — legenda branca, raio 0 0 20px 20px
   --------------------------------------------------------------- */
/* Cartões de 285px no original — sem teto esticam para 381px. */
.clinic-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,285px));
  gap:1.75rem; align-items:start; justify-content:center; }
.clinic-card { margin:0; }
.clinic-card img { width:100%; aspect-ratio:285/201; object-fit:cover; }
.clinic-card figcaption {
  background:#fff; border-radius:0 0 20px 20px; box-shadow:var(--shadow-card);
  padding:1.15rem .75rem; text-align:center; color:var(--heading); font-size:22px;
}
@media (min-width:780px) {
  .clinic-card:nth-child(1) { transform:translateY(3rem); }
  .clinic-card:nth-child(2) { transform:translateY(1.5rem); }
}

/* ---------------------------------------------------------------
   12. Cartões de navegação (páginas de seção)
   --------------------------------------------------------------- */
.grid { display:grid; gap:var(--gap); }
.grid--3 { grid-template-columns:repeat(auto-fit,minmax(270px,1fr)); }
.card { background:#fff; border:1px solid var(--line); border-radius:var(--radius);
  padding:1.8rem 1.6rem; display:flex; flex-direction:column;
  transition:transform .2s, box-shadow .2s, border-color .2s; }
a.card { text-decoration:none; color:inherit; }
a.card:hover { transform:translateY(-4px); box-shadow:var(--shadow-lg); border-color:var(--bronze); }
.card h3 { font-size:20px; margin-bottom:.45rem; }
/* Cinza mais claro: sobre branco o #7f8c8d puro pesa demais no corpo do cartão. */
.card p { color:#9aa3a4; font-size:15px; margin:0; line-height:1.5; }

/* Páginas de seção (/procedimentos, /diagnosticos…): intro em cinza, não preto.
   O preto vale só para o corpo das páginas de tratamento. */
.page-secao .entry__content,
.page-secao .entry__content p { color:var(--heading-text); }
.secao__titulo { font-size:20px; color:var(--heading); margin:0 0 1.5rem;
  padding-bottom:.75rem; border-bottom:1px solid var(--line); }
.card__more { margin-top:auto; padding-top:1rem; color:var(--bronze-dark); font-size:14px; }

/* ---------------------------------------------------------------
   13. Páginas internas — imagem à esquerda, texto à direita
   --------------------------------------------------------------- */
.tratamento { position:relative; padding-block:clamp(2.5rem,6vw,4.5rem); overflow:hidden; }
.tratamento__hexes {
  position:absolute; top:0; right:0; width:55%; height:100%;
  background-repeat:no-repeat; background-position:right top; background-size:contain;
  opacity:.5; pointer-events:none; z-index:0;
}
/* Tratamentos: imagem ~353px; /perfil usa 376px (foto retrato). */
.tratamento__inner {
  position:relative; z-index:1;
  display:grid; grid-template-columns:minmax(0,353px) minmax(0,1fr);
  gap:clamp(2rem,5vw,4rem); align-items:start;
}
.page-sobre .tratamento__inner { grid-template-columns:minmax(0,376px) minmax(0,1fr); }
/* /perfil não usa título em itálico no original */
.page-sobre .tratamento__texto h1 { font-style:normal; font-size:clamp(30px,3.4vw,40px); color:var(--heading); }
/* Sem imagem: texto na largura toda, como no original (/acne: x=199, 950px). */
.tratamento__inner--solo { grid-template-columns:minmax(0,1fr); }
.tratamento__figura { margin:0; }
.tratamento__figura img { width:100%; height:auto; border-radius:4px; }
/* Medido no original: título 25px, preto, itálico+negrito (h5 com <em><strong>);
   corpo 17px Muli Light PRETO — o cinza #7f8c8d é só dos títulos de seção da home. */
.tratamento__texto h1 {
  font-family:var(--font); font-weight:700; font-style:italic;
  font-size:25px; line-height:1.3; color:#000; margin:0 0 1.4rem;
}
.tratamento__texto .entry__content { color:#000; font-size:17px; line-height:1.55; }
.tratamento__texto .entry__content p { margin-bottom:1.5em; }
.tratamento__texto .entry__content li { color:#000; }
/* Linha de autoria/revisão médica — sinal de E-E-A-T visível ao paciente */
.revisao { font-size:14px; color:var(--heading); margin:0 0 1.6rem;
  padding-bottom:1rem; border-bottom:1px solid var(--line); line-height:1.5; }
.revisao a { color:var(--bronze-dark); }
/* Sem opacity (mesmo erro do .hero__crm e do .hero__local): a 85% este cinza
   caía para 3,46:1 em 13px — e é a data de revisão médica, sinal de confiança
   que precisa ser legível. Sem o véu, 4,58:1. */
.revisao__data { display:block; font-size:13px; margin-top:.15rem; }

.tratamento__cta { margin-top:2rem; display:flex; flex-wrap:wrap;
  align-items:center; gap:1rem 1.5rem; }
.tratamento__contato { font-size:15px; color:var(--heading); }
.tratamento__contato:hover { color:var(--bronze-dark); }

.tratamento__relacionados {
  position:relative; z-index:1; margin-top:clamp(2.5rem,6vw,4rem);
  padding-top:2rem; border-top:1px solid var(--line);
}
.tratamento__relacionados h2 { font-size:20px; margin-bottom:1rem; }
.tratamento__relacionados ul {
  list-style:none; padding:0; margin:0; display:flex; flex-wrap:wrap; gap:.5rem 1.25rem;
}
.tratamento__relacionados li { margin:0; }
.tratamento__relacionados a { font-size:15px; color:var(--heading); text-decoration:none; }
.tratamento__relacionados a:hover { color:var(--bronze-dark); text-decoration:underline; }

@media (max-width:820px) {
  .tratamento__inner { grid-template-columns:1fr; }
  .tratamento__figura { max-width:340px; }
  .tratamento__hexes { display:none; }
}

.page-hero { background:var(--peach-soft); padding-block:clamp(2.25rem,4.5vw,3.25rem); }
.page-hero h1 { font-size:clamp(28px,4.2vw,40px); margin-bottom:.2em; }
.eyebrow { font-family:var(--font-nav); font-size:13px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--bronze-dark); margin-bottom:.7rem; }
.breadcrumb { font-size:14px; color:var(--heading); margin-bottom:.9rem; }
.breadcrumb a { color:var(--heading); text-decoration:none; }
.breadcrumb a:hover { color:var(--bronze-dark); text-decoration:underline; }
.breadcrumb span[aria-current] { color:var(--bronze-dark); }

.entry { display:grid; grid-template-columns:minmax(0,1fr) 320px; gap:var(--gap); align-items:start; }
@media (max-width:900px) { .entry { grid-template-columns:1fr; } }
.entry__content { font-size:17px; line-height:1.7; }
.entry__content > :first-child { margin-top:0; }
.entry__content h2 { font-size:25px; margin-top:2rem; }
.entry__content img { border-radius:10px; margin-block:1.5rem; }

/*
 * Vídeo hospedado no próprio site (não é o embed do YouTube, que usa .video-facade).
 *
 * O arquivo é VERTICAL — 720x1280, formato de Reels. Sem o teto de largura ele
 * ocuparia 1280px de altura e empurraria o texto todo para fora da tela. 340px
 * é a largura em que um 9:16 cabe na coluna de leitura sem dominar a página.
 *
 * `aspect-ratio` reserva o espaço antes de o vídeo carregar: sem isso, o poster
 * chegando depois empurraria o conteúdo abaixo (CLS).
 */
.video-local {
  float:right; width:300px; margin:.25rem 0 1.25rem 2rem;
}
.video-local video {
  width:100%; height:auto; aspect-ratio:9 / 16;
  display:block; border-radius:12px; background:#000;
  box-shadow:var(--shadow);
}
.video-local figcaption {
  margin-top:.6rem; font-size:14px; font-weight:300;
  color:var(--bronze-text); line-height:1.4;
}
/* NÃO usar `clear:right` nos títulos. Tentei, e o efeito foi o oposto do
   pretendido: com o parágrafo de abertura curto, o H2 era empurrado para baixo
   do vídeo INTEIRO e abria um vazio de ~400px no meio da página. Texto
   contornando um float é o comportamento correto. */

/* Abaixo de 780px a coluna não comporta texto ao lado de 300px de vídeo:
   ele volta a ser bloco, centralizado. */
@media (max-width:780px) {
  .video-local { float:none; width:auto; max-width:320px; margin:1.5rem auto; }
  .video-local figcaption { text-align:center; }
}

/*
 * Grade dos vídeos além do primeiro.
 *
 * `clear:both` aqui é legítimo — diferente do que tentei nos <h2>: esta seção
 * DEVE começar abaixo do vídeo flutuante, senão as duas peças de vídeo se
 * encavalariam.
 *
 * auto-fit + minmax deixa a contagem variar sem media query: 3 vídeos viram
 * 3 colunas no desktop e 1 no celular, sem eu prever a quantidade.
 */
.videos-grade { clear:both; margin:2.5rem 0 0; }
.videos-grade h2 { margin-bottom:1.2rem; }
.videos-grade__lista {
  display:grid; gap:1.5rem;
  grid-template-columns:repeat(auto-fit, minmax(210px, 1fr));
}
.videos-grade__item { margin:0; }
.videos-grade__item video {
  width:100%; height:auto; aspect-ratio:9 / 16;
  display:block; border-radius:12px; background:#000;
  box-shadow:var(--shadow);
}
.videos-grade__item figcaption {
  margin-top:.55rem; font-size:14px; font-weight:300;
  color:var(--bronze-text); line-height:1.4;
}

/* ---------------------------------------------------------------
   Área /videos/ — cartão horizontal, no espírito da busca do YouTube
   --------------------------------------------------------------- */
/* Sem `max-width`: o texto acompanha a largura da coluna. A versão anterior
   tinha 70ch e parava no meio da linha, deixando um vazio à direita. */
.videos-hub__intro { margin:0 0 2rem; font-size:17px; line-height:1.65; }

/* ---------- filtros por assunto ---------- */
.vfiltros { display:flex; flex-wrap:wrap; gap:.5rem; margin:0 0 2rem; }
.vfiltro {
  display:inline-flex; align-items:center; gap:.4rem;
  min-height:40px; padding:.4rem .95rem;
  border:1px solid var(--line); border-radius:900px;
  background:#fff; color:var(--ink);
  font-family:inherit; font-size:15px; line-height:1; cursor:pointer;
  transition:background .15s, border-color .15s, color .15s;
}
.vfiltro:hover { border-color:var(--bronze); }
.vfiltro.is-ativo { background:var(--ink); border-color:var(--ink); color:#fff; }
.vfiltro__n { font-size:12px; opacity:.65; }
.vfiltro:focus-visible { outline:3px solid var(--bronze); outline-offset:2px; }
.vsem { font-size:16px; color:var(--bronze-text); }

.vcards {
  list-style:none; margin:0; padding:0;
  display:grid; gap:1.75rem 2.5rem;
  grid-template-columns:repeat(auto-fill, minmax(340px, 1fr));
}

/*
 * Miniatura estreita à esquerda, texto à direita.
 *
 * Com vídeo vertical (9:16) uma grade de cartões empilhados criaria peças de
 * 400px de altura. Assim a miniatura fica em 116px de largura — pequena — e a
 * largura que sobra vai para título e descrição, que é o que o buscador lê e o
 * leitor usa para escolher.
 */
.vcard { display:grid; grid-template-columns:116px 1fr; gap:1rem; align-items:start; }
/*
 * OBRIGATÓRIO. `[hidden] { display:none }` é regra de USER-AGENT, e qualquer
 * regra de AUTOR com `display` a vence — inclusive a linha acima. Sem isto o JS
 * marca `hidden`, o atributo aparece no DOM e o cartão continua na tela.
 *
 * Foi exatamente o bug: o filtro pintava de ativo e não filtrava nada. E o meu
 * teste dizia "ok" porque media `!c.hidden` (a propriedade) em vez do
 * `computedStyle.display` (o que o usuário vê).
 */
.vcard[hidden] { display:none; }
.vcard--largo { grid-template-columns:168px 1fr; }

.vcard__thumb { position:relative; aspect-ratio:9 / 16; background:#000; border-radius:10px; overflow:hidden; }
.vcard--largo .vcard__thumb { aspect-ratio:16 / 9; }
/* `a` junto do `button`: o cartão com watch page é link, o sem é botão. */
.vcard__thumb > button,
.vcard__thumb > a {
  position:absolute; inset:0; width:100%; height:100%;
  padding:0; border:0; background:none; cursor:pointer;
  display:block; text-decoration:none;
}
.vcard__thumb img { width:100%; height:100%; object-fit:cover; display:block; transition:opacity .2s; }
.vcard__thumb button:hover img,
.vcard__thumb a:hover img { opacity:.82; }
.vcard__thumb .video-play svg { width:44px; height:31px; }
.vcard__thumb button:focus-visible,
.vcard__thumb a:focus-visible { outline:3px solid var(--bronze); outline-offset:-3px; }

/* Etiqueta de duração, como no YouTube: canto inferior direito da miniatura. */
.vcard__dur {
  position:absolute; right:6px; bottom:6px;
  background:rgba(0,0,0,.8); color:#fff;
  font-size:12px; font-weight:500; line-height:1;
  padding:3px 5px; border-radius:4px;
}

.vcard__corpo { min-width:0; }
.vcard__titulo {
  font-size:16px; font-weight:700; line-height:1.3;
  margin:0 0 .35rem; color:var(--ink);
}
.vcard__titulo a { color:inherit; text-decoration:none; }
.vcard__titulo a:hover { text-decoration:underline; }
.vcard__desc {
  font-size:14px; font-weight:300; line-height:1.5;
  color:var(--ink); margin:0 0 .5rem;
}
.vcard__link { font-size:14px; color:var(--bronze-deep); text-decoration:none; }
.vcard__link:hover { text-decoration:underline; }

/* Numa coluna só, a miniatura pode crescer um pouco sem dominar. */
@media (max-width:520px) {
  .vcards { grid-template-columns:1fr; }
  .vcard { grid-template-columns:104px 1fr; gap:.85rem; }
  .vcard--largo { grid-template-columns:140px 1fr; }
}

/* ---------- watch page: /videos/<slug>/ ---------- */
/*
 * O vídeo é o conteúdo principal, não ilustração — é isso que separa uma watch
 * page de uma página que por acaso tem vídeo. Daí a coluna dele vir primeiro e
 * dimensionada por ALTURA.
 *
 * Duas variantes porque os vídeos têm duas orientações: os do consultório são
 * 9:16 (gravados no celular) e os do canal são deitados. Uma grade só serviria
 * mal aos dois — vertical numa coluna larga vira uma tira gigante, e deitado
 * numa coluna estreita fica minúsculo.
 */
.watch__grade {
  display:grid; gap:2rem clamp(1.5rem, 3vw, 2.5rem);
  align-items:start; margin-block:1rem 2.5rem;
}
/*
 * Duas colunas SÓ no vídeo vertical. O texto inteiro da página mora na coluna
 * da direita — h1, descrição, corpo, FAQ, CTA —, e não abaixo da grade: com o
 * cabeçalho sozinho ali sobravam ~450px de branco ao lado de um vídeo de 666px.
 */
.watch--vertical .watch__grade { grid-template-columns:minmax(0, 360px) minmax(0, 1fr); }
/* Deitado ocupa a largura inteira e o texto vem abaixo — coluna estreita ao
 * lado de um 16:9 deixaria os dois pequenos. */
.watch--largo .watch__grade { grid-template-columns:minmax(0, 820px); justify-content:center; }

.watch__palco { background:#000; border-radius:12px; overflow:hidden; }
/*
 * Sticky: o vídeo acompanha a leitura em vez de sumir no primeiro rolar. `top`
 * desconta o cabeçalho, que é `position:sticky` com 86px.
 */
.watch--vertical .watch__palco { position:sticky; top:6.5rem; }
/*
 * `height` + `aspect-ratio`, mesma razão do diálogo: com `width:auto` sozinho o
 * <video> nasce 300x150 e só corrige quando os metadados chegam.
 */
.watch--vertical .watch__palco video {
  display:block; margin-inline:auto;
  height:min(70vh, 620px); width:auto; aspect-ratio:9 / 16;
}
.watch--largo .watch__palco video {
  display:block; width:100%; height:auto; aspect-ratio:16 / 9;
}
.watch__yt { position:relative; aspect-ratio:16 / 9; }
.watch__yt img { width:100%; height:100%; object-fit:cover; display:block; }

.watch__texto h1 { margin:0 0 .6rem; font-size:clamp(1.5rem, 3.2vw, 2.1rem); line-height:1.2; }
.watch__meta {
  margin:0 0 1rem; font-size:14px; color:var(--ink-soft, #6b6259);
}
.watch__meta a { color:inherit; }
.watch__desc { margin:0 0 1.25rem; font-size:17px; line-height:1.6; }
.watch__assunto { margin:0 0 2rem; display:flex; flex-wrap:wrap; gap:.75rem; align-items:center; }
.watch__btn-yt {
  display:inline-flex;
  align-items:center;
  gap:8px;
  border-color:var(--line);
  color:var(--ink);
  text-decoration:none;
}
.watch__btn-yt:hover {
  background:var(--peach-soft);
  color:var(--bronze-deep);
  border-color:var(--bronze);
}
.watch__btn-yt svg {
  color:#ff0000;
  flex-shrink:0;
}

.watch__corpo { padding-bottom:1rem; }
.watch__mais { margin-block:2.5rem; }
.watch__mais h2 { font-size:1.25rem; margin:0 0 1rem; }
.watch__voltar { margin-block:2rem; font-size:15px; }
.watch__voltar a { color:var(--bronze-deep); text-decoration:none; }
.watch__voltar a:hover { text-decoration:underline; }

/* Abaixo de 900px a coluna do vídeo já não cabe ao lado do texto. */
@media (max-width:900px) {
  .watch--vertical .watch__grade { grid-template-columns:1fr; }
  /* Sticky numa coluna só empurraria o vídeo por cima do texto. */
  .watch--vertical .watch__palco { position:static; }
  .watch--vertical .watch__palco video { height:min(62vh, 520px); }
}
/*
 * No celular o vídeo ocupa a largura toda: manter a altura mandando deixava
 * 26px de tarja preta de cada lado numa tela de 375px, o que não é enquadramento
 * nenhum — é sobra.
 */
@media (max-width:560px) {
  .watch--vertical .watch__palco video {
    width:100%; height:auto; aspect-ratio:9 / 16;
  }
}

/* ---------- player em diálogo ---------- */
/*
 * O vídeo é 9:16. `max-height:82vh` com `width:auto` deixa a ALTURA mandar:
 * numa tela de 900px o player fica com ~415px de largura e 738 de altura, que é
 * o formato real. Fixar a largura faria o oposto — cortaria ou deformaria.
 */
.vmodal {
  border:0; padding:0; background:none;
  max-width:100vw; max-height:100vh;
  overflow:visible;
}
.vmodal::backdrop { background:rgba(0,0,0,.82); }
.vmodal__palco { display:block; }
/*
 * `height` + `aspect-ratio`, não `max-height` + `width:auto`.
 *
 * Com `width:auto` o elemento fica no padrão do navegador — 300x150 — até os
 * metadados do MP4 chegarem, e o player abre como um retângulo minúsculo que
 * depois pula de tamanho. Fixando a altura e a proporção, ele já nasce certo:
 * numa tela de 720px dá ~415x738.
 */
.vmodal__palco video {
  display:block; height:82vh; width:auto; aspect-ratio:9 / 16;
  max-width:92vw; border-radius:12px; background:#000;
}
/* Os do YouTube são 16:9 — aí quem manda é a largura. */
.vmodal__palco--yt { width:min(92vw, 900px); aspect-ratio:16 / 9; }
.vmodal__palco--yt iframe { width:100%; height:100%; border:0; border-radius:12px; }

.vmodal__titulo {
  margin:.75rem 0 0; color:#fff; font-size:15px; font-weight:300;
  text-align:center; max-width:92vw;
}
.vmodal__fechar {
  position:absolute; top:-44px; right:0;
  width:40px; height:40px; padding:0;
  border:0; border-radius:50%; background:rgba(255,255,255,.15);
  color:#fff; font-size:26px; line-height:1; cursor:pointer;
}
.vmodal__fechar:hover { background:rgba(255,255,255,.3); }
.vmodal__fechar:focus-visible { outline:3px solid #fff; outline-offset:2px; }

/* O link "Ver todos" da seção de vídeos da home. */
.videos-todos { text-align:center; margin-top:2rem; }

.aside { position:sticky; top:110px; display:grid; gap:1.25rem; }
.aside__box { background:var(--peach-soft); border-radius:var(--radius); padding:1.6rem; }
.aside__box h2 { font-size:18px; margin-bottom:.8rem; }
.aside__box p { font-size:15px; color:var(--heading); }
.aside__list { list-style:none; padding:0; margin:0; }
.aside__list li { margin-bottom:.4rem; }
.aside__list a { font-size:15px; color:var(--ink); text-decoration:none; }
.aside__list a:hover { color:var(--bronze-dark); text-decoration:underline; }

/* ---------------------------------------------------------------
   14. Contato + formulário
   --------------------------------------------------------------- */
/* Três colunas, como no original: dados | mapa | formulário. */
.contact-grid { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.3fr) minmax(0,1fr);
  gap:var(--gap); align-items:start; }
@media (max-width:1000px) { .contact-grid { grid-template-columns:1fr 1fr; } }
@media (max-width:700px)  { .contact-grid { grid-template-columns:1fr; } }
/* Link e badge de avaliações no Doctoralia com estrelas */
.avaliacoes {
  display:inline-flex; flex-wrap:wrap; align-items:center; gap:.55rem;
  margin:0 0 1.5rem; font-size:15px; color:var(--heading-text); line-height:1.4;
}
.avaliacoes__estrelas { display:inline-flex; align-items:center; gap:2px; color:#d9a441; }
.avaliacoes__estrelas svg { fill:#d9a441; width:17px; height:17px; flex-shrink:0; }
.avaliacoes a { color:var(--heading-text); text-decoration:none; }
.avaliacoes a strong { color:#000; }
.avaliacoes a:hover { color:var(--bronze-deep); text-decoration:underline; }

.info-list { list-style:none; padding:0; margin:0 0 2rem; }
.info-list li { margin-bottom:1.15rem; }
.info-list strong { display:block; color:var(--heading); font-weight:700; font-size:15px; margin-bottom:.15rem; }
.info-list span, .info-list a { color:var(--heading); font-size:17px; text-decoration:none; }
.info-list a:hover { color:var(--bronze-dark); text-decoration:underline; }
.map-embed { overflow:hidden; box-shadow:var(--shadow); aspect-ratio:402/275; }
.map-embed iframe { width:100%; height:100%; border:0; }

.contact-form .field { margin-bottom:1rem; }
.contact-form label { display:block; font-size:14px; color:var(--heading); margin-bottom:.3rem; }
.contact-form input, .contact-form textarea {
  width:100%; font-family:var(--font); font-size:14px; color:#5c5c5c;
  background:#fff; border:0; border-bottom:1px solid var(--line);
  padding:.7rem .25rem; min-height:40px;
}
.contact-form textarea { resize:vertical; }
.contact-form input:focus, .contact-form textarea:focus { outline:none; border-bottom-color:var(--bronze); }
.contact-form .hp { position:absolute; left:-9999px; }
.form-nota { font-size:14px; color:var(--heading); margin-top:.75rem; }
.form-ok { background:#e8f6ec; border-left:4px solid #2f9e52; padding:.85rem 1rem; font-size:15px; }
.form-erro { background:#fdecec; border-left:4px solid #d34747; padding:.85rem 1rem; font-size:15px; }

/* ---------------------------------------------------------------
   15. Rodapé — faixa bronze, caixa #D69A5B, botões #B47334 retos
   --------------------------------------------------------------- */
/* O rodapé original tem imagem de fundo (3597007) sobre o bronze. A textura é
   opaca e usa `cover`, então é ELA — não a cor de fundo — que fica sob o texto
   branco; a cor só aparece se a imagem falhar.
   Medido pixel a pixel no recorte que cada viewport enxerga: no celular vê-se
   uma tira central de 175px e o pior ponto dá 4,63:1 (passa), mas o desktop
   enxerga 1173px, alcança as partes claras da textura e 32% da faixa cai para
   4,22:1. O véu de 8% abaixo leva o pior caso a 4,88:1 no desktop e 5,30:1 no
   celular, sem mudança perceptível de cor. */
.site-footer { position:relative; background-color:var(--bronze-dark); background-repeat:no-repeat;
  background-position:center; background-size:cover; color:#fff; padding-block:3rem 2rem; }
.site-footer::before { content:''; position:absolute; inset:0;
  background:rgba(0,0,0,.08); pointer-events:none; }
.site-footer > .wrap { position:relative; z-index:1; }
.site-footer a { color:#fff; text-decoration:none; }
.site-footer a:hover { text-decoration:underline; }
.footer-grid { display:grid; grid-template-columns:1.15fr .85fr; gap:var(--gap); align-items:start; }
@media (max-width:860px) { .footer-grid { grid-template-columns:1fr; } }
.footer-info { list-style:none; padding:0; margin:0; }
.footer-info li { display:flex; gap:.9rem; margin-bottom:1.4rem; align-items:flex-start; }
.footer-info svg { width:22px; height:22px; fill:#fff; flex-shrink:0; margin-top:.2rem; }
.footer-info strong { display:block; font-weight:700; font-size:16px; margin-bottom:.1rem; }
.footer-info span { font-size:16px; font-weight:300; line-height:1.5; }

.footer-cta { background:var(--bronze-acc); padding:1.5rem 1.5rem 2rem; text-align:center; }
.footer-cta h2 { color:#fff; font-family:var(--font); font-weight:400;
  font-size:25px; margin:0 0 1.25rem; }
/* Medido no pixel renderizado: o texto solto do rodapé (endereço, horário,
   aviso) cai sobre a TEXTURA escura da imagem 3597007 e dá 4,8–5,0:1 — passa.
   Estes botões não: têm fundo próprio opaco, que a imagem não cobre, e ficam
   em 3,86:1. Só eles precisavam mudar. --bronze-deep dá 5,71:1; a borda clara
   mantém o botão legível como botão contra a caixa bronze. */
.footer-cta a {
  display:flex; align-items:center; justify-content:center; gap:.7rem;
  background:var(--bronze-deep); color:#fff; border-radius:0;
  border:1px solid rgba(255,255,255,.35);
  padding:1rem 1.25rem; margin-bottom:1rem; font-size:16px; font-weight:700;
}
.footer-cta a:hover { background:#6b4a2e; text-decoration:none; }
.footer-cta svg { width:20px; height:20px; fill:#fff; flex-shrink:0; }
.footer-cta small { display:block; font-size:12px; margin-top:1rem; line-height:1.5; }
.site-footer__bottom { margin-top:2.5rem; padding-top:1.5rem;
  border-top:1px solid rgba(255,255,255,.25); font-size:14px; font-weight:300;
  display:flex; flex-wrap:wrap; gap:.75rem; justify-content:space-between; }
/* Aviso YMYL: ocupa a linha inteira acima do copyright. */
.site-footer__aviso { flex:1 1 100%; margin:0 0 .5rem; font-size:13px;
  font-weight:300; line-height:1.5; max-width:70ch; }

/* WhatsApp flutuante com etiqueta "Agende sua Consulta" */
.wa-float { position:fixed; right:20px; bottom:20px; z-index:90;
  display:flex; align-items:center; gap:.6rem; text-decoration:none; }
.wa-float__label { background:#fff; color:var(--ink); font-size:14px;
  padding:.5rem .9rem; box-shadow:var(--shadow); white-space:nowrap; }
.wa-float__icon { width:56px; height:56px; border-radius:50%; background:#25d366;
  display:grid; place-items:center; box-shadow:0 4px 14px rgba(0,0,0,.25);
  transition:transform .2s; flex-shrink:0; }
.wa-float:hover .wa-float__icon { transform:scale(1.08); }
.wa-float__icon svg { width:32px; height:32px; fill:#fff; }
@media (max-width:600px) { .wa-float__label { display:none; } }

/* ---------------------------------------------------------------
   16. Utilitários
   --------------------------------------------------------------- */
.screen-reader-text { position:absolute !important; width:1px; height:1px;
  overflow:hidden; clip:rect(1px,1px,1px,1px); white-space:nowrap; }
.notice { background:#fff8e6; border-left:4px solid #d9a441; padding:1rem 1.25rem;
  font-size:15px; color:#6b5320; margin-bottom:1.5rem; }

/* ---------------------------------------------------------------
   17. Perguntas frequentes — <details> nativo, sem JavaScript
   --------------------------------------------------------------- */
.faq { margin-top:2.5rem; padding-top:1.75rem; border-top:1px solid var(--line); }
.faq h2 { font-size:22px; color:var(--heading); margin-bottom:1.25rem; }
.faq__item { border-bottom:1px solid var(--line); }
.faq__item summary {
  cursor:pointer; padding:.9rem 2rem .9rem 0; font-size:17px; font-weight:700;
  color:var(--heading); list-style:none; position:relative;
}
.faq__item summary::-webkit-details-marker { display:none; }
.faq__item summary::after {
  content:'+'; position:absolute; right:.25rem; top:50%; transform:translateY(-50%);
  font-size:22px; font-weight:400; color:var(--bronze); line-height:1;
}
.faq__item[open] summary::after { content:'−'; }
.faq__item summary:hover { color:var(--bronze-text); }
.faq__item summary:focus-visible { outline:3px solid var(--bronze); outline-offset:2px; }
.faq__resposta { padding:0 0 1.1rem; color:#000; font-size:17px; line-height:1.6; }
.faq__resposta p:last-child { margin-bottom:0; }

/* Ícone do WhatsApp alinhado ao texto em botões e links */
.btn svg, .footer-cta a svg, .form-nota__wa svg { flex-shrink:0; fill:currentColor; }
.form-nota__wa { display:inline-flex; align-items:center; gap:.35rem;
  color:#128c7e; text-decoration:none; font-weight:700; }
.form-nota__wa:hover { color:#075e54; text-decoration:underline; }

/* Avaliações na página de contato */
.tratamento .avaliacoes { margin-top:2rem; padding-top:1.5rem; border-top:1px solid var(--line); }

/* Convênios junto ao CTA das páginas de tratamento */
.tratamento__convenios { margin-top:1rem; font-size:14px; color:var(--heading); }
.tratamento__convenios a { color:var(--bronze-dark); }

/* ---------------------------------------------------------------
   18. Acessibilidade — contraste AA para TEXTO PEQUENO
   Medido: #7f8c8d = 3,48:1 e #b47334 = 3,86:1 sobre branco — falham
   WCAG AA (4,5:1) abaixo de 24px. Estes tons passam (4,58 e 5,05) e
   ficam ~10% mais escuros; títulos grandes (>=24px) mantêm os tokens
   originais, que passam na régua de texto grande (3:1).
   #6b7879 foi calibrado sobre BRANCO (4,58:1), mas o mesmo cinza sobre as
   superfícies tingidas do tema — --peach-soft (.page-hero, .aside__box) e
   #faf7f3 (.secao__cta) — cai para 4,25 e 4,29. Daí este tom, um passo mais
   escuro: 4,92:1 no branco e 4,56:1 no pior fundo tingido.
   Limitação conhecida e NÃO alterada por fidelidade: branco sobre
   bronze (cartão do hero, rodapé) vem do design original e exigiria
   escurecer a cor da marca — decisão da cliente, não técnica.
   --------------------------------------------------------------- */
:root { --heading-text:#667374; --bronze-text:#9c6129; }

.breadcrumb, .breadcrumb a, .lead,
.revisao, .revisao__data,
.tratamento__contato, .tratamento__convenios,
.card p, .aside__box p, .aside__box h2,
.form-nota, .contact-form label,
.vshelf__titulo, .clinic-card figcaption,
.info-list strong, .info-list span, .info-list a,
.secao__titulo, .faq__item summary,
.tratamento__relacionados a { color:var(--heading-text); }

.breadcrumb span[aria-current], .revisao a,
.card__more, .tratamento__convenios a,
.form-nota__wa, .aside__list a:hover,
.tratamento__relacionados a:hover { color:var(--bronze-text); }

/* ---------------------------------------------------------------
   18. UX mobile — critérios objetivos do Google
       (alvo de toque ≥48px, texto de leitura ≥16px)
   --------------------------------------------------------------- */

/* Ações do hero: agendar em primeiro, saber mais em segundo. */
/* margin-bottom: as credenciais vêm logo abaixo dos botões e encostavam neles. */
.hero__acoes { display:flex; flex-wrap:wrap; gap:.75rem; justify-content:center;
  margin-bottom:1.75rem; }
.hero__acoes .btn { flex:0 1 auto; }
@media (max-width:520px) {
  .hero__acoes { flex-direction:column; }
  .hero__acoes .btn { width:100%; min-width:0; }
}

/* Menu hambúrguer: media 40x43, abaixo do mínimo de 48x48 — é o controle
   mais usado do celular. */
.nav-toggle {
  min-width:48px; min-height:48px;
  display:none; align-items:center; justify-content:center;
}
@media (max-width:1100px) { .nav-toggle { display:flex; } }

/* Itens do menu mobile com altura de toque confortável. */
@media (max-width:1100px) {
  .nav > ul > li > a { min-height:48px; display:flex; align-items:center; }
  .nav .sub-menu a { min-height:44px; display:flex; align-items:center; }
}

/* Campos do formulário: mediam 41px de altura. */
.contact-form input,
.contact-form textarea { min-height:48px; font-size:16px; }
.contact-form textarea { min-height:120px; }
.contact-form label { font-size:16px; }
/* 16px também evita o zoom automático do iOS ao focar um campo. */

/* Texto de leitura no mínimo recomendado. */
.form-nota,
.site-footer__aviso,
.wa-float__label { font-size:16px; }

/* O rótulo do WhatsApp flutuante estava oculto no celular — o ícone sozinho
   não diz o que acontece ao tocar. Some só em telas muito estreitas. */
@media (max-width:600px) {
  .wa-float__label { display:inline-block; font-size:15px; padding:.45rem .7rem; }
}
@media (max-width:360px) { .wa-float__label { display:none; } }

/* Links do rodapé e da lista de contato: eram ~20px de altura de toque.
   O padding vertical dá área confortável sem mudar o espaçamento visual
   (compensado com margem negativa). */
@media (max-width:1100px) {
  .footer-info span a,
  .info-list a,
  .contact-grid p a,
  .site-footer__bottom a,
  .form-nota a {
    display:inline-block;
    padding-block:.7rem;
    margin-block:-.7rem;
  }
}

/* ---------------------------------------------------------------
   19. Caminhos de agendamento

   Medido antes: /contato/ sem nenhum link tel:, /procedimentos/ sem
   nenhum CTA, e 5,4 telas da home (64% dela) sem caminho de
   agendamento nenhum. Os componentes daqui fecham esses buracos.
   --------------------------------------------------------------- */

/* Bairro no cartão do hero — "Itaim" só existia no rodapé, em y=7185.
   Sem opacity, pela mesma razão do .hero__crm: a 92% o branco virava
   #f7f3ef e o contraste caía de 4,63:1 para 4,20:1, abaixo do mínimo. */
.hero__local { display:block; font-size:15px; font-weight:300; margin-top:.15rem; }

/* Agendar no cabeçalho fixo: só no celular, onde o menu tem 54 links e
   "Contato" é o último item de todos. No desktop o cabeçalho é o do
   layout original, sem acréscimo — exceto em /en/, que não tem menu.

   A APARÊNCIA fica aqui fora, e só a decisão de MOSTRAR entra na media query.
   Estava tudo dentro do `max-width:1100px`, e por isso o botão de /en/ — que é
   revelado no desktop por `.header-wa--en` — saía sem pílula verde, sem espaço
   entre ícone e texto e com o sublinhado padrão de link. */
.header-wa {
  display:none;
  align-items:center; gap:.4rem;
  margin-left:auto; min-height:48px; padding:.5rem .9rem;
  background:#25d366; color:#0b3d2c; border-radius:900px;
  font-size:15px; font-weight:700; text-decoration:none;
}
.header-wa svg { fill:currentColor; flex-shrink:0; }
@media (max-width:1100px) {
  .header-wa { display:inline-flex; }
  .nav-toggle { margin-left:.35rem; }
}
@media (max-width:400px) { .header-wa span { display:none; } .header-wa { padding:.5rem; } }

/* Atalhos no topo do painel aberto, antes dos 46 termos clínicos. */
.nav__atalhos { display:none; }
@media (max-width:1100px) {
  .nav__atalhos {
    display:flex; flex-direction:column; gap:.6rem;
    padding:1rem .25rem 1.1rem; border-bottom:2px solid var(--line);
  }
  .nav__atalhos .btn { width:100%; min-height:48px; justify-content:center; font-size:16px; }
}

/* Acordeão dos submenus. O link do pai continua indo para a página da
   seção; o botão ao lado só abre e fecha a lista. */
.sub-toggle { display:none; }
@media (max-width:1100px) {
  .nav.tem-acordeao .sub-menu { display:none; }
  .nav.tem-acordeao .is-aberto > .sub-menu { display:block; padding-bottom:.5rem; }
  /* Duas setas seria confuso: a do desktop sai quando o botão entra. */
  .nav.tem-acordeao .menu-item-has-children > a::after { display:none; }
  .nav.tem-acordeao .menu-item-has-children > a { padding-right:60px; }

  .sub-toggle {
    display:flex; align-items:center; justify-content:center;
    position:absolute; top:0; right:0; width:56px; height:48px;
    background:none; border:0; border-bottom:1px solid var(--line);
    cursor:pointer; color:var(--bronze-text);
  }
  .sub-toggle span {
    width:9px; height:9px; margin-top:-4px;
    border-right:2px solid currentColor; border-bottom:2px solid currentColor;
    transform:rotate(45deg); transition:transform .2s;
  }
  .is-aberto > .sub-toggle span { transform:rotate(-135deg); margin-top:4px; }
  .sub-toggle:focus-visible { outline:3px solid var(--bronze); outline-offset:-3px; }
}

/* Botões de agendamento reaproveitados em contato, seções e home. */
.contato-acoes { display:flex; flex-wrap:wrap; gap:.75rem; margin:1.75rem 0 0; }
.contato-acoes .btn { min-height:48px; font-size:16px; }
@media (max-width:560px) {
  .contato-acoes { flex-direction:column; }
  .contato-acoes .btn { width:100%; justify-content:center; }
}

/* Página de contato: mapa e formulário lado a lado. */
.contato-blocos {
  display:grid; grid-template-columns:1fr 1fr; gap:var(--gap);
  margin-top:2.5rem; padding-top:2rem; border-top:1px solid var(--line);
}
@media (max-width:860px) { .contato-blocos { grid-template-columns:1fr; } }
.contato-blocos__titulo { font-size:20px; color:var(--heading-text); margin:0 0 1rem; }
.contato-rota { margin-top:.9rem; font-size:16px; }
.contato-rota a { color:var(--bronze-text); }

/* Faixa de CTA no meio da home. */
.cta-faixa { background:var(--bronze-acc); color:#fff; padding:var(--section-y) 0; text-align:center; }
.cta-faixa h2 { color:#fff; font-size:clamp(24px, 3vw, 30px); margin:0 0 .6rem; }
.cta-faixa p { font-size:17px; font-weight:300; margin:0 auto; max-width:46ch; }
.cta-faixa .contato-acoes { justify-content:center; }
/* Sobre o bronze, o contorno bronze sumiria. */
.cta-faixa .btn--outline { border-color:#fff; color:#fff; }
.cta-faixa .btn--outline:hover { background:#fff; color:var(--bronze-acc); }

/*
 * Selo da avaliação do Google.
 *
 * A nota e a contagem têm pesos diferentes de propósito: "5,0" é o que prende o
 * olho, "9 avaliações" é o que torna o número honesto — some a contagem e o
 * selo vira propaganda. Por isso a contagem nunca é escondida, nem no celular.
 */
.avaliacao-google { margin:1.1rem 0 0; font-size:15px; }
.avaliacao-google a {
	display:inline-flex; align-items:center; gap:.45rem; flex-wrap:wrap;
	justify-content:center; text-decoration:none; color:inherit;
	border-bottom:1px solid transparent; padding-bottom:2px;
}
.avaliacao-google a:hover,
.avaliacao-google a:focus-visible { border-bottom-color:currentColor; }
/* #f5a623 sobre o bronze dá 3.4:1 — decorativo (aria-hidden), não carrega texto. */
.avaliacao-google__estrelas { color:#f5a623; letter-spacing:1px; }
.avaliacao-google__n { font-weight:300; opacity:.85; }
/* Na faixa bronze o texto é branco; as estrelas ficam em branco também para
   não vibrar sobre o fundo saturado. */
.cta-faixa .avaliacao-google__estrelas { color:#fff; }

/* CTA no fim das páginas de seção. */
.secao__cta {
  margin-top:3rem; padding:2rem 1.75rem 2.25rem;
  background:var(--bg-alt, #faf7f3); border-top:3px solid var(--bronze);
}
.secao__cta h2 { font-size:22px; color:var(--heading-text); margin:0 0 .6rem; }
.secao__cta p { font-size:17px; margin:0; max-width:56ch; }
.secao__cta .contato-acoes { margin-top:1.25rem; }
.secao__convenios { margin-top:1.1rem !important; font-size:14px; color:var(--heading-text); }
.secao__convenios a { color:var(--bronze-text); }
/* "9 páginas em Procedimentos" era linguagem de CMS. */
.secao__contagem { display:block; font-size:14px; font-weight:300; margin-top:.2rem; }

.info-list__rota { display:inline-block; margin-top:.35rem; color:var(--bronze-text); }

/* Formulário: erro por campo, telefone opcional, aviso de privacidade. */
.field { position:relative; }
/* Sem opacity: a 75% o cinza do label caía para 2,89:1 sobre branco. O peso
   300 já basta para diferenciar "(opcional)" do nome do campo. */
.field__opt { font-weight:300; }
.field__erro { display:block; margin-top:.35rem; font-size:15px; color:#a3271b; }
.field--erro input, .field--erro textarea { border-color:#a3271b; box-shadow:0 0 0 1px #a3271b; }
.form-privacidade { font-size:15px; line-height:1.5; color:var(--heading-text); margin-top:.85rem; }
.form-privacidade a { color:var(--bronze-text); }

/* "Política de Privacidade" media 43px — 1px abaixo do mínimo de toque. */
@media (max-width:1100px) {
  .site-footer__bottom a { padding-block:.85rem; margin-block:-.85rem; }
}

/* ---------------------------------------------------------------
   20. Seletor de idioma e versão em inglês (/en/)
   --------------------------------------------------------------- */

/* Faixa ACIMA do cabeçalho. Fora do <header> de propósito: dentro dele o
   seletor empurraria o menu ~180px para a esquerda e quebraria o alinhamento
   do layout original. Não é sticky — ao rolar ela sai e só o cabeçalho gruda,
   sem comer altura de tela permanentemente. */
.topbar { background:var(--peach-soft); border-bottom:1px solid var(--line); }
.topbar__inner { display:flex; justify-content:space-between; align-items:center; min-height:38px; gap:1rem; }

/* Redes sociais no topo */
.topbar-social { display:inline-flex; align-items:center; gap:.5rem; }
.topbar-social__label {
  font-family:var(--font-nav); font-size:13px; color:var(--heading-text);
  font-weight:400; margin-right:.25rem;
}
.topbar-social__link {
  display:inline-flex; align-items:center; gap:.4rem;
  padding:.3rem .65rem; border-radius:900px; min-height:32px;
  background:#fff; border:1px solid var(--line);
  color:var(--ink); font-family:var(--font-nav); font-size:13px;
  text-decoration:none; line-height:1;
  transition:background-color .18s, color .18s, border-color .18s, transform .15s;
}
.topbar-social__link svg { flex-shrink:0; fill:currentColor; }
.topbar-social__link:hover {
  transform:translateY(-1px);
  border-color:var(--bronze);
  color:var(--bronze-deep);
  background:#fff;
}
.topbar-social__link--ig:hover { color:#e1306c; border-color:#e1306c; }
.topbar-social__link--tk:hover { color:#010101; border-color:#010101; }
.topbar-social__link--yt:hover { color:#ff0000; border-color:#ff0000; }
.topbar-social__link:focus-visible { outline:3px solid var(--bronze-dark); outline-offset:2px; }

/* Lado direito do topbar */
.topbar__right { display:inline-flex; align-items:center; gap:.65rem; }

/* Em Alta badge no topo */
.topbar-emalta {
  display:inline-flex; align-items:center; gap:.35rem;
  padding:.3rem .65rem; border-radius:900px; min-height:32px;
  background:#fff; border:1px solid var(--bronze);
  color:var(--bronze-deep); font-family:var(--font-nav); font-size:13px; font-weight:600;
  text-decoration:none; line-height:1;
  transition:background-color .18s, color .18s, border-color .18s, transform .15s, box-shadow .18s;
}
.topbar-emalta:hover {
  transform:translateY(-1px);
  background:var(--bronze);
  border-color:var(--bronze);
  color:#fff;
  box-shadow:0 2px 8px rgba(198, 156, 109, 0.28);
}
.topbar-emalta:focus-visible { outline:3px solid var(--bronze-dark); outline-offset:2px; }
.topbar-emalta__sparkle { font-size:12px; line-height:1; }

/* No menu mobile drawer */
.topbar-social--nav {
  display:flex; justify-content:center; width:100%; margin-top:.5rem; gap:.65rem;
}
.topbar-social--nav .topbar-social__label { display:none; }
.topbar-social--nav .topbar-social__link {
  flex:1; justify-content:center; min-height:44px; font-size:14px;
}

/*
 * Ênfase invertida — correção de um erro meu.
 *
 * Na primeira versão o idioma ATIVO era negrito bronze e o outro cinza claro.
 * Mas ninguém precisa clicar no idioma em que já está: o que precisa ser visto
 * é o OUTRO, e era justamente ele o discreto. O cliente não achou o link.
 *
 * Agora: o atual é ESTADO (texto simples), o outro é AÇÃO (pílula com borda).
 * A faixa é quase branca (1,08:1 sobre a página) e nunca vai se destacar
 * sozinha — quem tem de saltar aos olhos é o botão, não a tira.
 */
.lang-switch { display:flex; align-items:center; gap:.5rem; margin-left:auto; }
.lang-switch__item {
  display:inline-flex; align-items:center; gap:.4rem;
  padding:.3rem .7rem; border-radius:900px; min-height:32px;
  font-family:var(--font-nav); font-size:14px; line-height:1; text-decoration:none;
}
.lang-switch__item svg { border-radius:2px; flex-shrink:0; box-shadow:0 0 0 1px rgba(0,0,0,.15); }

/* Idioma atual: é indicação, não botão. */
.lang-switch__item.is-ativo { font-weight:400; color:var(--heading-text); cursor:default; }
.lang-switch__item.is-ativo svg { opacity:.55; }

/* Idioma alternativo: parece o que é — clicável. */
.lang-switch__item:not(.is-ativo) {
  background:#fff; border:1.5px solid var(--bronze);
  color:var(--bronze-text); font-weight:700;
}
.lang-switch__item:not(.is-ativo):hover {
  background:var(--bronze-acc); border-color:var(--bronze-acc); color:#fff;
}
.lang-switch__item:not(.is-ativo):hover svg { box-shadow:0 0 0 1px rgba(255,255,255,.5); }
.lang-switch__item:focus-visible { outline:3px solid var(--bronze-dark); outline-offset:2px; }

@media (max-width:1100px) {
  /* Mínimo de toque do projeto. */
  .lang-switch__item { min-height:44px; }
  .topbar-social__link { min-height:44px; }
  .topbar-emalta { min-height:44px; padding:.35rem .75rem; }
  .topbar__inner { min-height:44px; }
}

@media (max-width:640px) {
  /* No celular esconde o texto do rótulo e o nome da rede, mantendo os ícones compactos */
  .topbar-social__label { display:none; }
  .topbar-social__name { display:none; }
  .topbar-social__link { padding:.35rem .6rem; }
}

@media (max-width:560px) {
  /*
   * No celular só o idioma alternativo aparece. Em que idioma a página está
   * já é evidente pelo próprio texto — o item ativo só ocuparia a largura que
   * o rótulo do outro precisa. E rótulo é o que impede a bandeira de virar
   * adivinhação.
   */
  .lang-switch__item.is-ativo { display:none; }
  .lang-switch__item { padding:.3rem .85rem; }
}

/* /en/ não tem menu, então o botão de WhatsApp do cabeçalho aparece também no
   desktop — é o único caminho de agendamento ali em cima.

   Só troca a visibilidade: a aparência vem da regra base de `.header-wa`. */
.header-wa--en { display:inline-flex; }

.en-list { margin:1.25rem 0 0; padding-left:1.15rem; font-size:17px; }
.en-list li { margin-bottom:.5rem; }
/* Os cartões de área não são links; sem isto herdariam o hover de .card. */
.card--static { cursor:default; }
.card--static:hover { transform:none; box-shadow:var(--shadow-card); }
/* Aviso de que só a home existe em inglês — melhor dizer do que deixar o
   visitante descobrir clicando num link em português. */
.en-nota { margin:2.5rem auto 0; max-width:70ch; text-align:center;
  font-size:16px; color:var(--heading-text); }


/* ---------------------------------------------------------------
   21. Perguntas frequentes na home + equipe da clínica

   A concorrente do mesmo bairro responde as objeções do paciente
   ("dói?", "preciso me afastar?") na própria home, por assunto, em
   vez de deixá-las só em páginas internas. Aqui o mesmo efeito sai
   das perguntas que já existem nas páginas de tratamento.
   --------------------------------------------------------------- */
.faq-home { display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
  gap:var(--gap); align-items:start; }
/* Reaproveita .faq__item; só o cabeçalho do grupo é novo. */
.faq-home__grupo { border-top:3px solid var(--bronze); padding-top:1.25rem; }
.faq-home__assunto { font-size:19px; font-weight:700; color:var(--heading-text);
  margin:0 0 .75rem; }
.faq-home__mais { margin:1rem 0 0; font-size:15px; }

/* Equipe — sai em /a-clinica/ e só com nome e CRM de cada profissional. */
.equipe { margin-top:2.5rem; padding-top:1.75rem; border-top:1px solid var(--line); }
.equipe h2 { font-size:22px; color:var(--heading); margin-bottom:1.25rem; }
.equipe__lista { list-style:none; padding:0; margin:0; display:grid;
  grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:1.25rem; }
.equipe__membro { margin:0; padding:1.1rem 1.25rem; background:var(--peach-soft);
  border-radius:var(--radius); }
.equipe__membro strong { display:block; font-size:17px; color:var(--heading-text); }
.equipe__esp { display:block; font-size:15px; color:var(--heading-text); margin-top:.15rem; }
/* CRM legível, não miudinho: é o dado que identifica o responsável (CFM). */
.equipe__crm { display:block; font-size:14px; color:var(--heading-text);
  margin-top:.35rem; letter-spacing:.02em; }

/* Páginas-filhas por indicação — a página-mãe vira hub (ex.: /preenchimento/). */
.filhas { margin-top:2.5rem; padding-top:1.75rem; border-top:1px solid var(--line); }
.filhas h2 { font-size:22px; color:var(--heading); margin-bottom:1.25rem; }
.filhas__lista { list-style:none; padding:0; margin:0; display:grid;
  grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:1rem; }
.filhas__lista li { margin:0; padding:1rem 1.15rem; background:var(--peach-soft);
  border-radius:var(--radius); }
.filhas__lista a { font-weight:700; text-decoration:none; }
.filhas__lista a:hover { text-decoration:underline; }
.filhas__resumo { display:block; margin-top:.35rem; font-size:15px;
  color:var(--heading-text); line-height:1.5; }

/* Aviso de página no ar aguardando revisão da médica. Amarelo de atenção,
   igual ao .notice do admin — quem cair aqui precisa saber antes de ler. */
.aviso-revisao {
  background:#fff8e6; border-left:4px solid #d9a441;
  padding:1rem 1.25rem; margin:0 0 1.75rem;
  font-size:16px; line-height:1.5; color:#6b5320;
}

/* ---------------------------------------------------------------
   22. Author Box / Autoridade Médica (E-E-A-T / YMYL)
   --------------------------------------------------------------- */
.autor-box {
  display:flex; gap:1.5rem; align-items:flex-start;
  margin-top:2.75rem; padding:1.75rem 1.6rem;
  background:var(--peach-soft); border-radius:var(--radius);
  border:1px solid var(--line); border-left:4px solid var(--bronze-acc);
}
.autor-box__avatar { flex-shrink:0; }
.autor-box__avatar img {
  width:96px; height:96px; border-radius:50%; object-fit:cover;
  box-shadow:var(--shadow); border:2px solid #fff;
}
.autor-box__badge {
  display:inline-block; font-size:12px; font-weight:700;
  text-transform:uppercase; letter-spacing:.05em;
  color:var(--bronze-dark); margin-bottom:.35rem;
}
.autor-box__nome { font-size:20px; color:#000; margin:0 0 .25rem; }
.autor-box__nome a { color:#000; text-decoration:none; }
.autor-box__nome a:hover { color:var(--bronze-deep); text-decoration:underline; }
.autor-box__cargo { font-size:14px; color:var(--heading-text); margin:0 0 .75rem; }
.autor-box__bio { font-size:15px; line-height:1.55; color:#333; margin:0 0 .85rem; }
.autor-box__links { font-size:14px; margin:0; color:var(--heading-text); }
.autor-box__links a { font-weight:700; color:var(--bronze-text); text-decoration:none; }
.autor-box__links a:hover { text-decoration:underline; color:var(--bronze-deep); }

@media (max-width:640px) {
  .autor-box { flex-direction:column; gap:1rem; padding:1.25rem; }
  .autor-box__avatar img { width:72px; height:72px; }
}


.vcard__semposter { width:100%; height:100%; object-fit:cover; display:block; background:#000; }

/* ---------------------------------------------------------------
   23. Treatment Finder / Navegador de Queixas (World-Class CRO)
   --------------------------------------------------------------- */
.treatment-finder {
  background: linear-gradient(180deg, #fff 0%, var(--peach-soft) 100%);
  position: relative;
  overflow: hidden;
  padding: clamp(3.5rem, 6vw, 5.5rem) 0;
}
.treatment-finder__header {
  text-align: center;
  max-width: 760px;
  margin: 0 auto 2.5rem;
}
.treatment-finder__kicker {
  display: inline-block;
  font-size: 13px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--bronze-acc);
  margin-bottom: .6rem;
}
.treatment-finder__lead {
  font-size: 17px;
  color: var(--heading-text);
  line-height: 1.55;
  margin-top: .75rem;
}
.treatment-finder__tabs {
  display: flex;
  justify-content: center;
  gap: .65rem;
  flex-wrap: wrap;
  margin-bottom: 2.75rem;
}
.treatment-finder__tab {
  display: inline-flex;
  align-items: center;
  gap: .55rem;
  padding: .75rem 1.25rem;
  border-radius: 9999px;
  background: #fff;
  border: 1px solid var(--line);
  color: var(--ink);
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  transition: all .2s ease;
  box-shadow: 0 2px 6px rgba(0,0,0,.04);
}
.treatment-finder__tab:hover {
  border-color: var(--bronze-acc);
  color: var(--bronze-deep);
  transform: translateY(-1px);
}
.treatment-finder__tab--active {
  background: var(--bronze-dark);
  color: #fff;
  border-color: var(--bronze-dark);
  box-shadow: 0 4px 12px rgba(156,106,58,.25);
}
.treatment-finder__tab-icon {
  display: inline-flex;
  align-items: center;
  line-height: 1;
}
.treatment-finder__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1.5rem;
  margin-bottom: 2.5rem;
}
.treatment-card {
  background: #fff;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  padding: 1.75rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  box-shadow: var(--shadow);
  transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}
.treatment-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 8px 24px rgba(0,0,0,.08);
  border-color: var(--bronze-acc);
}
.treatment-card__badge {
  display: inline-block;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--bronze-text);
  background: var(--peach-soft);
  padding: .25rem .6rem;
  border-radius: 4px;
  margin-bottom: .85rem;
}
.treatment-card__title {
  font-size: 19px;
  margin: 0 0 .65rem;
  line-height: 1.35;
}
.treatment-card__title a {
  color: #000;
  text-decoration: none;
}
.treatment-card__title a:hover {
  color: var(--bronze-deep);
}
.treatment-card__desc {
  font-size: 14.5px;
  line-height: 1.55;
  color: #555;
  margin: 0 0 1.25rem;
}
.treatment-card__link {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  font-size: 14px;
  font-weight: 700;
  color: var(--bronze-text);
  text-decoration: none;
  transition: gap .15s ease, color .15s ease;
}
.treatment-card__link:hover {
  color: var(--bronze-deep);
  gap: .65rem;
}
.treatment-finder__cta {
  text-align: center;
  background: #fff;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  padding: 2rem;
  max-width: 720px;
  margin: 0 auto;
  box-shadow: 0 4px 16px rgba(0,0,0,.04);
}
.treatment-finder__cta p {
  font-size: 15px;
  color: var(--heading-text);
  margin: 0 0 1.25rem;
}
@media (max-width: 640px) {
  .treatment-finder__tabs {
    justify-content: flex-start;
    flex-wrap: nowrap;
    overflow-x: auto;
    padding-bottom: .5rem;
    -webkit-overflow-scrolling: touch;
  }
  .treatment-finder__tab {
    flex-shrink: 0;
    font-size: 13.5px;
    padding: .6rem 1rem;
  }
}