:root{--navy950:#071724;--navy900:#0B2239;--navy850:#102B45;--blue700:#2E5875;--blue500:#567A92;--mist200:#DCE7EE;--mist100:#ECF2F5;--paper:#F7F8F6;--white:#fff;--ink:#142331;--muted:#5E6D78;--line:rgba(16,43,69,.14);--shadow:0 24px 70px rgba(7,23,36,.12);--serif:Georgia,'Times New Roman',serif;--sans:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}img{display:block;width:100%}button{font:inherit}.container{width:min(1180px,calc(100% - 48px));margin-inline:auto}
.nav{position:fixed;inset:0 0 auto 0;z-index:50;background:rgba(7,23,36,.95);border-bottom:1px solid rgba(255,255,255,.10);backdrop-filter:blur(18px);color:#fff}.nav-inner{height:82px;display:flex;align-items:center;justify-content:space-between;gap:28px}.brand{display:flex;flex-direction:column;line-height:1;gap:5px}.brand strong{font-family:var(--serif);font-size:20px;font-weight:500}.brand span{font-size:10px;text-transform:uppercase;letter-spacing:.18em;color:rgba(255,255,255,.66)}.nav-links{display:flex;align-items:center;gap:26px;font-size:13px;color:rgba(255,255,255,.80)}.nav-links a:hover,.nav-links a.active{color:#fff}.nav-cta,.btn,.btn-light,.btn-outline{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:48px;padding:0 22px;border-radius:999px;transition:.24s ease}.nav-cta{border:1px solid rgba(255,255,255,.32);color:#fff}.nav-cta:hover{background:#fff;color:var(--navy900)}.menu-btn{display:none;border:0;background:transparent;color:#fff;font-size:26px}
.inner-hero{padding:150px 0 72px;background:var(--navy950);color:#fff;position:relative;overflow:hidden}.inner-hero.no-image{padding-bottom:96px}.inner-hero-grid{display:grid;grid-template-columns:1.06fr .94fr;gap:70px;align-items:center}.inner-hero .eyebrow,.eyebrow{display:flex;align-items:center;gap:12px;font-size:11px;text-transform:uppercase;letter-spacing:.22em;font-weight:800;color:#AFC9D9}.eyebrow:before{content:'';width:34px;height:1px;background:currentColor;opacity:.55}.breadcrumbs{font-size:12px;color:rgba(255,255,255,.50);margin-bottom:26px}.breadcrumbs a{color:rgba(255,255,255,.72)}.inner-hero h1{font-family:var(--serif);font-size:clamp(54px,6vw,88px);line-height:.98;font-weight:400;letter-spacing:-.05em;margin:24px 0 26px;max-width:800px}.inner-hero h1 em{color:#C5D8E4;font-style:italic}.inner-hero .lead{font-family:var(--serif);font-size:clamp(22px,2.3vw,31px);line-height:1.32;color:#D7E4EB;max-width:720px}.inner-hero .copy{color:rgba(255,255,255,.66);line-height:1.8;max-width:680px;font-size:15px}.hero-photo-card{border-radius:30px;overflow:hidden;box-shadow:0 30px 90px rgba(0,0,0,.28);position:relative}.hero-photo-card img{aspect-ratio:4/5;object-fit:cover}.hero-photo-card:after{content:'';position:absolute;inset:0;background:linear-gradient(0deg,rgba(7,23,36,.28),transparent 45%)}.inner-hero.no-image:before{content:'';position:absolute;width:700px;height:700px;border-radius:50%;border:1px solid rgba(255,255,255,.08);right:-170px;top:-220px}.inner-hero.no-image:after{content:'';position:absolute;width:480px;height:480px;border-radius:50%;border:1px solid rgba(255,255,255,.10);right:-40px;top:-100px}
.section{padding:104px 0}.section.white{background:#fff}.section.mist{background:var(--mist100)}.section.navy{background:var(--navy950);color:#fff}.section-head{max-width:820px;margin-bottom:54px}.section-head h2,.prose h2{font-family:var(--serif);font-size:clamp(40px,4.7vw,66px);font-weight:400;line-height:1.04;letter-spacing:-.04em;margin:20px 0 22px}.section-head p{font-size:17px;color:var(--muted);line-height:1.8}.navy .section-head p{color:rgba(255,255,255,.66)}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:72px;align-items:start}.prose{font-size:17px;line-height:1.82;color:var(--muted)}.prose p{margin:0 0 22px}.prose strong{color:var(--ink)}.prose .callout{border-left:2px solid var(--blue500);padding:3px 0 3px 24px;margin:34px 0;color:var(--ink);font-family:var(--serif);font-size:26px;line-height:1.45}.navy .prose{color:rgba(255,255,255,.68)}.navy .prose strong,.navy .prose .callout{color:#fff}
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.card{background:#fff;border:1px solid var(--line);border-radius:24px;padding:34px;min-height:280px}.card.dark{background:var(--navy900);color:#fff;border-color:transparent}.card .num{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--blue500);font-weight:800}.card h3{font-family:var(--serif);font-size:32px;font-weight:400;line-height:1.12;margin:20px 0 16px}.card p{color:var(--muted);line-height:1.72;margin:0}.card.dark p{color:rgba(255,255,255,.68)}
.split-media{display:grid;grid-template-columns:.92fr 1.08fr;gap:74px;align-items:center}.split-media.reverse{grid-template-columns:1.08fr .92fr}.portrait{border-radius:28px;overflow:hidden;box-shadow:var(--shadow)}.portrait img{aspect-ratio:4/5;object-fit:cover}.timeline{border-top:1px solid var(--line);margin-top:34px}.time-row{display:grid;grid-template-columns:96px 1fr;gap:20px;border-bottom:1px solid var(--line);padding:18px 0}.time-row strong{font-size:12px;letter-spacing:.12em;color:var(--blue700)}
.pillars{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:28px;overflow:hidden}.pillar{background:#fff;padding:42px;min-height:230px}.pillar h3{font-family:var(--serif);font-size:32px;font-weight:400;margin:13px 0 14px}.pillar p{color:var(--muted);line-height:1.7}.pillar .tag{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--blue500);font-weight:800}
.fact-grid{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.fact{padding:28px 26px;border-right:1px solid var(--line)}.fact:last-child{border-right:0}.fact strong{display:block;font-family:var(--serif);font-size:28px;font-weight:400;margin-bottom:8px}.fact span{font-size:13px;color:var(--muted);line-height:1.5}
.checklist{display:grid;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:24px;overflow:hidden}.check{display:grid;grid-template-columns:48px 1fr;background:#fff;padding:24px 28px;align-items:start}.check b{font-size:12px;color:var(--blue500);letter-spacing:.1em}.check h3{margin:0 0 8px;font-family:var(--serif);font-size:24px;font-weight:400}.check p{margin:0;color:var(--muted);line-height:1.65}
.quote-band{background:var(--navy900);color:#fff;padding:68px;border-radius:30px}.quote-band blockquote{font-family:var(--serif);font-size:clamp(36px,4vw,58px);line-height:1.12;letter-spacing:-.035em;margin:0 0 24px;max-width:920px}.quote-band p{color:rgba(255,255,255,.65);line-height:1.7;margin:0;max-width:760px}
.cta-band{padding:82px 0;background:var(--mist200)}.cta-box{background:var(--navy900);color:#fff;border-radius:30px;padding:58px 64px;display:grid;grid-template-columns:1fr auto;gap:40px;align-items:center}.cta-box h2{font-family:var(--serif);font-size:clamp(36px,4vw,58px);font-weight:400;letter-spacing:-.04em;margin:0 0 16px}.cta-box p{color:rgba(255,255,255,.68);line-height:1.7;margin:0;max-width:720px}.btn-light{background:#fff;color:var(--navy900);font-weight:800}.btn-outline{border:1px solid rgba(255,255,255,.28);color:#fff}.btn{background:var(--navy900);color:#fff;font-weight:800}.btn:hover,.btn-light:hover{transform:translateY(-2px)}
.article-list{display:grid;gap:16px}.article-row{display:grid;grid-template-columns:160px 1fr 100px;gap:28px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:22px;padding:22px}.article-art{aspect-ratio:4/3;border-radius:16px;background:linear-gradient(145deg,#0A2136,#668FA9);position:relative;overflow:hidden}.article-art:before,.article-art:after{content:'';position:absolute;border:1px solid rgba(255,255,255,.32);border-radius:50%}.article-art:before{width:130px;height:130px;left:-32px;top:-50px}.article-art:after{width:88px;height:88px;right:-20px;bottom:-35px}.article-copy .meta{font-size:10px;text-transform:uppercase;letter-spacing:.18em;color:var(--blue700);font-weight:800}.article-copy h3{font-family:var(--serif);font-size:27px;font-weight:400;line-height:1.2;margin:10px 0 8px}.article-copy p{color:var(--muted);line-height:1.6;margin:0;font-size:14px}.article-arrow{font-size:28px;color:var(--blue500);text-align:center}
.faq{border-top:1px solid var(--line)}details{border-bottom:1px solid var(--line);padding:20px 0}summary{cursor:pointer;list-style:none;font-family:var(--serif);font-size:24px;padding-right:40px;position:relative}summary:after{content:'+';position:absolute;right:0;color:var(--blue500)}details[open] summary:after{content:'–'}details p{color:var(--muted);line-height:1.72;max-width:850px}
footer{background:#05111C;color:rgba(255,255,255,.58);padding:54px 0 30px;font-size:13px}.footer-top{display:grid;grid-template-columns:1.2fr .8fr;gap:70px;padding-bottom:46px;border-bottom:1px solid rgba(255,255,255,.10)}.footer-brand strong{display:block;color:#fff;font-family:var(--serif);font-size:29px;font-weight:400;margin-bottom:12px}.footer-brand p{line-height:1.75;max-width:620px}.footer-nav{display:grid;grid-template-columns:repeat(2,1fr);gap:12px 36px;align-content:start}.footer-nav a{color:rgba(255,255,255,.68)}.footer-bottom{display:flex;justify-content:space-between;gap:20px;padding-top:28px}.notice{font-size:12px;color:var(--muted);background:rgba(100,142,170,.10);border:1px solid var(--line);border-radius:14px;padding:14px 16px;line-height:1.55}.center{text-align:center}.max760{max-width:760px}.mt32{margin-top:32px}.mt48{margin-top:48px}.mb0{margin-bottom:0}.inline-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}
@media(max-width:980px){.container{width:min(100% - 48px,1180px)}.nav-links{display:none;position:absolute;top:82px;left:0;right:0;background:rgba(7,23,36,.98);padding:24px;flex-direction:column;align-items:flex-start;border-top:1px solid rgba(255,255,255,.1)}.nav-links.open{display:flex}.menu-btn{display:grid;place-items:center;min-width:44px;min-height:44px}.nav-cta{display:none}.inner-hero-grid,.two-col,.split-media,.split-media.reverse,.cta-box{grid-template-columns:1fr}.hero-photo-card{max-width:520px}.cards{grid-template-columns:1fr}.fact-grid{grid-template-columns:1fr 1fr}.fact:nth-child(2){border-right:0}.fact:nth-child(-n+2){border-bottom:1px solid var(--line)}.article-row{grid-template-columns:120px 1fr 50px}.footer-top{grid-template-columns:1fr}}
@media(max-width:680px){.nav-inner{height:72px}.inner-hero{padding-top:125px}.inner-hero h1{font-size:48px}.section{padding:78px 0}.pillars{grid-template-columns:1fr}.fact-grid{grid-template-columns:1fr}.fact{border-right:0;border-bottom:1px solid var(--line)!important}.fact:last-child{border-bottom:0!important}.article-row{grid-template-columns:1fr}.article-art{height:170px;aspect-ratio:auto}.article-arrow{text-align:left}.cta-box{padding:40px 28px}.quote-band{padding:42px 28px}.footer-bottom{flex-direction:column}.footer-nav{grid-template-columns:1fr}.container{width:min(100% - 48px,1180px)}}

/* Enquadramento das fotos. Veio como atributo style= no export, e a CSP
   do site bloqueia atributo style — além de ser, de fato, decisão de estilo. */
.foco-1 { object-position: center 24%; }
.foco-2 { object-position: center 18%; }
.foco-3 { object-position: center 22%; }
.foco-4 { object-position: center 17%; }


/* Link "pular para o conteúdo". Fica fora da tela até receber foco pelo
   teclado — quem navega por Tab não deveria atravessar o menu inteiro em
   toda página para chegar ao texto. */
.pular{position:absolute;left:-9999px;top:0;z-index:999;background:var(--navy950);
 color:#fff;padding:12px 20px;border-radius:0 0 8px 0;font-weight:600;font-size:14px}
.pular:focus{left:0}

/* ===========================================================================
   ALVOS DE TOQUE
   Medido no navegador, em 375px: o botao do menu tinha 35x35 e os 8 links do
   rodape, 16px de altura empilhados. Dedo nao acerta 16px, e errar de linha
   num rodape empilhado leva a pessoa para a pagina errada.
   O alvo e 44px — a referencia de Apple e Google, e a WCAG 2.5.5. Onde 44 nao
   cabe sem quebrar o texto corrido (migalhas dentro de frase), fica o minimo
   da WCAG 2.5.8, que e 24.
   =========================================================================== */


.brand{min-height:44px;display:inline-flex;flex-direction:column;justify-content:center}
.pular{min-height:44px;display:inline-flex;align-items:center}

/* O link do rodape vira bloco com altura propria: o alvo passa a ser a linha
   inteira, e nao so as letras. */
.footer-nav a{display:flex;align-items:center;min-height:44px}

/* Migalhas vivem dentro de uma frase — 44px de altura abriria buracos no
   texto. 24px e o piso da WCAG 2.5.8, e aqui ele cabe. */
.breadcrumbs a{display:inline-block;min-height:24px;padding:4px 2px}

/* ===========================================================================
` e NENHUMA das três travas
   abaixo. São nove seções por página — oito delas sumiriam se o JS falhasse.

   1. Sem JavaScript, nada fica escondido.
   2. Quem pediu menos movimento no sistema vê tudo, sem transição.
   3. Com JS, uma animação de 3 segundos revela de qualquer jeito — se o
      observador marcou antes, ela é cancelada e ninguém percebe.
   =========================================================================== */

/* Hero sem foto: uma coluna só. A classe `.no-image` já existia e cuida do
   respiro vertical; faltava o container, porque `.inner-hero-grid` é fixo em
   duas colunas e deixaria metade da faixa vazia. */
.inner-hero-solo { max-width: 900px; }

/* ------------------------------------------------------------- filtros --- */
/* Sem JS o bloco não aparece: filtro que não filtra é pior que filtro nenhum,
   porque promete um controle que não existe. */
.filtros { display: none; margin-bottom: 34px; }
html.js .filtros { display: block; }

.filtros__busca { display: block; margin-bottom: 16px; }
.filtros__busca input {
  width: 100%; font: inherit; font-size: 16px; color: var(--ink);
  background: #fff; border: 1px solid var(--line); border-radius: 999px;
  padding: 14px 22px; min-height: 48px; transition: border-color .18s ease, box-shadow .18s ease;
}
.filtros__busca input::placeholder { color: var(--muted); }
.filtros__busca input:hover { border-color: var(--blue500); }
.filtros__busca input:focus { outline: none; border-color: var(--blue700); box-shadow: 0 0 0 3px rgba(46,88,117,.14); }

.filtros__grupos { display: flex; flex-direction: column; gap: 10px; }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chip {
  font: inherit; font-size: 13px; font-weight: 600; line-height: 1;
  color: var(--blue700); background: #fff; border: 1px solid var(--line);
  border-radius: 999px; padding: 0 16px; min-height: 40px; cursor: pointer;
  transition: background .18s ease, color .18s ease, border-color .18s ease, transform .18s ease;
}
.chip:hover { border-color: var(--blue700); background: var(--mist100); transform: translateY(-1px); }
.chip:focus-visible { outline: 2px solid var(--blue700); outline-offset: 2px; }
.chip--ativo { background: var(--navy900); border-color: var(--navy900); color: #fff; }
.chip--ativo:hover { background: var(--navy850); border-color: var(--navy850); }

.filtros__conta { font-size: 13px; color: var(--muted); margin: 16px 0 0; min-height: 1em; font-weight: 500; }

.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* ===========================================================================
   HOVER EM TUDO QUE É CLICÁVEL

   Medido no navegador: de 31 elementos interativos da página, 16 não tinham
   nenhum estado de hover — inclusive o `.article-row`, que é o cartão de post
   e o principal alvo do blog. Elemento clicável sem resposta ao mouse não
   parece clicável, e a pessoa não clica no que não parece botão.

   Cada regra abaixo muda algo que se enxerga sem procurar: cor, fundo, borda
   ou deslocamento. Nada de mudança de 2% que só o autor percebe.
   E `prefers-reduced-motion` desliga o que se move, mantendo o que se vê.
   =========================================================================== */

.article-row {
  transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}
.article-row:hover {
  border-color: var(--blue500);
  box-shadow: 0 18px 44px -22px rgba(7,23,36,.34);
  transform: translateY(-2px);
}
.article-row:hover .article-copy h3 { color: var(--blue700); }
.article-row:hover .article-arrow { color: var(--blue700); transform: translateX(4px); }
.article-row .article-copy h3,
.article-row .article-arrow { transition: color .2s ease, transform .2s ease; }
.article-row:focus-visible { outline: 2px solid var(--blue700); outline-offset: 3px; }

.brand { transition: opacity .18s ease; }
.brand:hover { opacity: .78; }

.menu-btn { transition: background .18s ease, color .18s ease; border-radius: 8px; }
.menu-btn:hover { background: rgba(255,255,255,.12); }

.breadcrumbs a { transition: color .18s ease; text-decoration-color: transparent; }
.breadcrumbs a:hover { color: #fff; text-decoration: underline; }

.footer-nav a { transition: color .18s ease, padding-left .18s ease; }
.footer-nav a:hover { color: #fff; padding-left: 5px; }

.pular:hover { background: var(--navy850); }

.nav-links a { transition: color .18s ease; }
.nav-links a:hover { color: #fff; }

/* Quem pediu menos movimento no sistema mantém a mudança de cor e perde o
   deslocamento — o sinal continua, o balanço não. */
@media (prefers-reduced-motion: reduce) {
  .article-row, .article-row:hover,
  .article-row .article-arrow, .footer-nav a { transition: none; transform: none; }
  .article-row:hover { transform: none; }
  .footer-nav a:hover { padding-left: 0; }
}

/* Foto real no lugar do grafismo decorativo do cartão de post. O
   `.article-art` já reserva a proporção; a imagem só preenche. */
.article-art--foto { background: none; }
.article-art--foto:before, .article-art--foto:after { display: none; }
.article-art--foto img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: inherit; }

/* ===========================================================================
   BLOG: destaque + grade

   Disposição pedida pelo cliente, com a referência do blog da Andressa. O que
   veio de lá é a ESTRUTURA — peça mais recente num cartão horizontal grande,
   demais numa grade de três colunas com foto em cima. As cores, a tipografia
   e os raios são os desta marca; copiar a paleta faria dois clientes com a
   mesma cara.
   =========================================================================== */

.post-destaque {
  background: #fff; border: 1px solid var(--line); border-radius: 22px;
  overflow: hidden; margin-bottom: 20px;
  transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}
.post-destaque:hover { border-color: var(--blue500); box-shadow: 0 22px 50px -26px rgba(7,23,36,.36); transform: translateY(-2px); }
.post-destaque__link { display: grid; grid-template-columns: 1.1fr 1fr; text-decoration: none; color: inherit; }
/* Aqui a foto divide a linha com o texto, e por padrao um item de grid se
   estica ate a altura da linha — era o `min-height: 260px` mais o estiramento
   que deformavam o enquadramento. Com a proporcao da capa declarada e
   `align-self: center`, a foto guarda o proprio formato e a linha passa a ser
   tao alta quanto o mais alto dos dois. */
.post-destaque__foto { overflow: hidden; aspect-ratio: 1200/630; align-self: center; background: linear-gradient(145deg,#0A2136,#668FA9); position: relative; }
.post-destaque__foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.post-destaque__corpo { padding: clamp(1.8rem, 3.4vw, 2.8rem); display: flex; flex-direction: column; justify-content: center; }
.post-destaque__titulo {
  font-family: var(--serif); font-weight: 400; font-size: clamp(26px, 2.6vw, 38px);
  line-height: 1.12; letter-spacing: -.025em; color: var(--ink); margin: 0 0 14px;
  transition: color .2s ease;
}
.post-destaque:hover .post-destaque__titulo { color: var(--blue700); }
.post-destaque__resumo { color: var(--muted); line-height: 1.65; font-size: 15px; margin: 0 0 18px; }

.post-grade { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.post-card {
  background: #fff; border: 1px solid var(--line); border-radius: 18px; overflow: hidden;
  transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}
.post-card:hover { border-color: var(--blue500); box-shadow: 0 18px 40px -24px rgba(7,23,36,.32); transform: translateY(-2px); }
.post-card__link { display: flex; flex-direction: column; height: 100%; text-decoration: none; color: inherit; }
/* 1200/630 e a proporcao da capa, o mesmo contrato que o servidor garante
   no envio. Com 16/10 aqui a foto perdia a faixa de cima e a de baixo. */
.post-card__foto { aspect-ratio: 1200/630; overflow: hidden; background: linear-gradient(145deg,#0A2136,#668FA9); position: relative; }
.post-card__foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.post-card__corpo { padding: 20px 22px 24px; display: flex; flex-direction: column; flex: 1; }
.post-card__titulo {
  font-family: var(--serif); font-weight: 400; font-size: 22px; line-height: 1.2;
  letter-spacing: -.02em; color: var(--ink); margin: 0 0 10px; transition: color .2s ease;
}
.post-card:hover .post-card__titulo { color: var(--blue700); }
.post-card__resumo { color: var(--muted); line-height: 1.6; font-size: 14px; margin: 0 0 16px; flex: 1; }

/* O rótulo de categoria e a data compartilham o tratamento nos dois cartões:
   são a mesma informação em dois tamanhos, e tratá-los diferente faria o
   destaque parecer outro tipo de conteúdo. */
.post-k { font-size: 11px; font-weight: 800; letter-spacing: .2em; text-transform: uppercase; color: var(--blue700); margin: 0 0 12px; }
.post-meta { font-size: 13px; color: var(--muted); margin: auto 0 0; }

.post-destaque__link:focus-visible,
.post-card__link:focus-visible { outline: 2px solid var(--blue700); outline-offset: -3px; border-radius: inherit; }

@media (max-width: 980px) {
  .post-destaque__link { grid-template-columns: 1fr; }
  .post-destaque__foto { aspect-ratio: 1200/630; min-height: 0; }
  .post-grade { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .post-grade { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .post-destaque, .post-card, .post-destaque:hover, .post-card:hover { transition: none; transform: none; }
}

/* Marcador de artigo SEM CAPA nos cartões do blog. A regra morava em
   home.css, que a /blog não carrega — ela funcionava por acidente enquanto a
   home usava o mesmo markup. Quando a home trocou de layout e o CSS órfão
   saiu, este marcador ficou sem estilo nenhum. Agora mora junto de quem o
   usa: `cartaoDestaque` e `cartaoGrade`, que só o emitem quando não há foto. */
.micro-dot {
  position: absolute; width: 8px; height: 8px; border-radius: 50%;
  background: white; opacity: .65; left: 70px; top: 62px;
  box-shadow: 52px 44px 0 rgba(255,255,255,.45), 115px 95px 0 rgba(255,255,255,.36),
              184px 54px 0 rgba(255,255,255,.32), 242px 122px 0 rgba(255,255,255,.28);
}

/* ============================================ lista de espera SimbiotaGut ===
   O formulário mora dentro da faixa navy, então tudo aqui é claro sobre
   escuro. A caixa deixa de ser duas colunas (texto | selo) e vira uma só,
   porque campo de formulário ao lado de um título grande fica espremido. */
.cta-box.espera { grid-template-columns: 1fr; gap: 34px; }
.espera__texto p { margin-top: 16px; }

.espera__form { display: flex; flex-direction: column; gap: 18px; max-width: 560px; }
.espera__linha { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.espera__campo { display: flex; flex-direction: column; gap: 7px; }
.espera__campo label { font-size: 13px; font-weight: 600; color: rgba(255,255,255,.88); }
.espera__opcional { font-weight: 400; color: rgba(255,255,255,.5); }

.espera__campo input,
.espera__campo select {
  font: inherit; font-size: 15px;
  padding: 13px 14px; min-height: 48px;
  border-radius: 12px;
  border: 1px solid rgba(255,255,255,.26);
  background: rgba(255,255,255,.07);
  color: #fff;
  transition: border-color .18s, background .18s;
}
.espera__campo input::placeholder { color: rgba(255,255,255,.42); }
/* `color-scheme: dark` faz o menu nativo do <select> abrir escuro; sem isto
   as opções aparecem em branco sobre branco em alguns sistemas. */
.espera__campo select { color-scheme: dark; }
.espera__campo input:hover,
.espera__campo select:hover { border-color: rgba(255,255,255,.42); }
.espera__campo input:focus-visible,
.espera__campo select:focus-visible {
  outline: 2px solid #fff; outline-offset: 2px;
  background: rgba(255,255,255,.12); border-color: transparent;
}
/* `:user-invalid` e não `:invalid`: o segundo pinta de vermelho um campo
   vazio que a pessoa ainda nem tocou. */
.espera__campo input:user-invalid { border-color: #F3A9A2; }

.espera__consentimento {
  display: grid; grid-template-columns: auto 1fr; gap: 11px; align-items: start;
  font-size: 13px; line-height: 1.55; color: rgba(255,255,255,.72);
}
.espera__consentimento input { margin-top: 2px; width: 18px; height: 18px; accent-color: #fff; }
.espera__consentimento a { color: #fff; text-decoration: underline; text-underline-offset: 2px; }

.espera__enviar { align-self: flex-start; cursor: pointer; border: 0; font: inherit; font-weight: 700; }

/* A armadilha some da tela sem usar `display:none`: campo escondido assim é
   ignorado por alguns robôs, e a graça é justamente que ele seja preenchido. */
.espera__isca {
  position: absolute; width: 1px; height: 1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap;
}

.espera__aviso {
  margin: 0; padding: 13px 15px; border-radius: 12px; font-size: 14px; line-height: 1.5;
}
.espera__aviso[data-tipo="ok"]   { background: rgba(60,190,120,.16); color: #BFF0D4; }
.espera__aviso[data-tipo="erro"] { background: rgba(240,120,110,.16); color: #F7C9C4; }

@media (max-width: 620px) {
  .espera__linha { grid-template-columns: 1fr; }
  .espera__enviar { align-self: stretch; text-align: center; }
}

/* ------------------------------------------------------ redes no rodape --- */
.footer-redes { margin-top: 30px; }
.footer-redes__rotulo {
  font-size: 11px; text-transform: uppercase; letter-spacing: .2em;
  font-weight: 700; color: rgba(255,255,255,.5); margin: 0 0 14px;
}
.footer-redes__lista { display: flex; gap: 10px; list-style: none; margin: 0; padding: 0; }
.footer-redes__link {
  display: grid; place-items: center; width: 44px; height: 44px;
  border-radius: 50%; color: rgba(255,255,255,.78);
  border: 1px solid rgba(255,255,255,.18);
  transition: background .18s, color .18s, border-color .18s, transform .18s;
}
.footer-redes__link:hover { background: #fff; color: var(--navy900); border-color: #fff; transform: translateY(-2px); }
.footer-redes__link:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
@media (prefers-reduced-motion: reduce) {
  .footer-redes__link { transition: none; }
  .footer-redes__link:hover { transform: none; }
}

/* A trava dos 3s saiu do CSS e virou condicional em js/revela.js.
   Aqui ela revelava SEMPRE, 3 segundos depois de carregar, tenha o elemento
   sido visto ou nao — e ninguem rola uma pagina em menos de 3 segundos. Era
   ela que matava o efeito no site inteiro desde o primeiro commit. */

/* Título anda menos que a própria margem — ver a nota em componentes.css. */
/* TÍTULO DENTRO DE .prose HERDAVA A COR DO CORPO.
   `.prose { color: var(--muted) }` vale para o texto corrido, e o h2 não
   declarava cor própria — então um título serifado de 66px saía em #5E6D78,
   cinza, com 5:1 de contraste, enquanto os outros títulos do site usam #142331
   e 15:1. Na página lia como texto apagado, não como título.
   A segunda regra existe porque há seções de fundo navy usando .prose: lá o
   título continua branco. */
.prose h2 { color: var(--ink); }
.navy .prose h2 { color: #fff; }

/* --------------------------------------------------------------------------
   .reveal — entrada por rolagem.

   QUATRO TENTATIVAS. Vale registrar, porque cada uma errou de um jeito.

   1. opacity 0 + 24px, sem interruptor. Quebrou o site duas vezes em 31/08:
      elemento preso em opacity 0 esperando um observador que nao marcou.
   2. Trava em CSS: `animation: … 3s forwards`. Revelava SEMPRE aos 3s, tivesse
      sido visto ou nao — e ninguem rola em menos de 3s. Matou o efeito inteiro
      desde o primeiro commit, sem ninguem notar.
   3. transform puro, 18px, sem opacity. Seguro e INVISIVEL: o olho le
      deslocamento como tremida, nao como entrada.
   4. Esta. Fade completo, e o esconder passa a depender de um INTERRUPTOR que
      o proprio JavaScript pode derrubar.

   `html.revelar` e o interruptor, posto por js/marca-js.js. Sem ele, nada
   aqui esconde nada. Classe propria e nao `.js` porque `.js` tem outros usos.

   Quem derruba o interruptor:
   - js/marca-js.js, passados 4s sem nada revelado (cobre revela.js nao carregar)
   - o proprio revela.js, se o observador nao entregar (cobre observador morto)
   - prefers-reduced-motion, sempre
   - ausencia de JavaScript, que nunca liga o interruptor
   -------------------------------------------------------------------------- */

/* Titulo anda menos que a propria margem: com 18px o h2 do corpo, que tem
   16px embaixo, encostaria no proprio paragrafo durante o fade. */

/* --------------------------------------------------------------------------
   .reveal — entrada por rolagem.

   QUATRO TENTATIVAS, e cada uma errou de um jeito diferente:
   1. opacity 0 sem interruptor. Quebrou o site duas vezes em 31/08.
   2. Trava em CSS `animation: … 3s forwards`: revelava SEMPRE aos 3s, tivesse
      sido visto ou nao. Matou o efeito desde o primeiro commit, sem ninguem ver.
   3. transform puro, 18px: seguro e invisivel — o olho le deslocamento como
      tremida, nao como entrada.
   4. Esta. Fade completo, com o esconder dependendo de um INTERRUPTOR que o
      proprio JavaScript derruba se algo der errado.

   `html.revelar` e o interruptor, posto por js/marca-js.js — classe propria, e
   nao `.js`, porque `.js` tem outros usos (ver `.filtros` em paginas.css).

   Quem derruba o interruptor:
   - marca-js.js, aos 4s sem nada revelado  (cobre revela.js nao carregar)
   - revela.js, se o observador nao entregar (cobre observador morto)
   - prefers-reduced-motion, sempre
   - ausencia de JavaScript, que nunca o liga
   -------------------------------------------------------------------------- */
html.revelar .reveal { opacity: 0; transform: translateY(18px); transition: opacity .7s ease, transform .7s ease; }
html.revelar .reveal.visible { opacity: 1; transform: none; }

/* Titulo anda menos que a propria margem: com 18px o h2 do corpo, que tem 16px
   embaixo, encostaria no proprio paragrafo durante o fade. */
html.revelar h2.reveal { transform: translateY(10px); }
html.revelar h2.reveal.visible { transform: none; }

@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1 !important; transform: none !important; transition: none !important; }
}

/* ============================================== CTA que chama atenção ===
   Halo que respira, e NÃO escala do botão. Escalar um botão faz o texto
   dentro dele borrar a cada ciclo e lê como anúncio; o halo puxa o olho sem
   tocar no que está escrito.

   2,6s por ciclo: abaixo de 2s vira piscada, acima de 3s ninguém percebe que
   é um ciclo. A opacidade morre em 70% do tempo, então há um respiro entre
   uma onda e a seguinte — pulso contínuo sem pausa vira ruído de fundo e o
   olho para de registrar em poucos minutos.

   Aplicado ao CTA PRINCIPAL de cada página, não a todo botão. Se tudo pulsa,
   nada se destaca — e os 11 `nav-cta` do topo são navegação, não conversão.

   HALO BRANCO, e nao azul da marca: os dez CTAs que pulsam sao `.btn-light`,
   que e o botao branco — e ele so aparece sobre fundo navy (hero, cta-box,
   caixa da lista de espera). Halo navy sobre navy seria invisivel. Comecei
   errado nisso e so percebi ao conferir onde cada botao vive.

   `prefers-reduced-motion` desliga: animação contínua é gatilho vestibular, e
   a WCAG 2.2.2 trata movimento que dura mais de 5s como algo que precisa
   poder ser parado. Aqui a parada é a preferência do sistema. */
.cta-pulsa { position: relative; }
.cta-pulsa::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  box-shadow: 0 0 0 0 rgba(255, 255, 255, .55);
  animation: cta-respira 2.6s cubic-bezier(.3, .6, .4, 1) infinite;
}
@keyframes cta-respira {
  0%   { box-shadow: 0 0 0 0 rgba(255, 255, 255, .5); }
  70%  { box-shadow: 0 0 0 14px rgba(255, 255, 255, 0); }
  100% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); }
}
/* Ao passar o mouse o halo para: a pessoa já achou o botão, a insistência
   perdeu a função e vira distração na hora de clicar. */
.cta-pulsa:hover::after, .cta-pulsa:focus-visible::after { animation: none; }

@media (prefers-reduced-motion: reduce) {
  .cta-pulsa::after { animation: none; }
}

/* REDES VIRAM COLUNA, E NAO UMA SEGUNDA LINHA.
   O bloco entrou como terceiro filho de uma grade de DUAS colunas, entao ele
   caia numa linha nova: `grid-template-rows: 268px 101px`, mais os 70px de
   gap. Medido no navegador — o rodape foi de 443 para 614px, 79% da altura da
   tela. Como terceira coluna ele cabe na linha que ja existe (a altura e
   ditada pelos 9 links da navegacao) e nao custa altura nenhuma.
   `auto` porque a coluna so precisa dos tres icones de 44px. */
.footer-top { grid-template-columns: 1.2fr .8fr auto; }
.footer-redes { margin-top: 0; }
@media (max-width: 980px) {
  .footer-top { grid-template-columns: 1fr; }
  .footer-redes { margin-top: 6px; }
}
