/* ============================================================================
   CLUBE DA PSICOLOGIA · reimaginação 2026-08-23 · folha única
   ----------------------------------------------------------------------------
   THOTH. Direção nova, superseda a direção C. Mecânica e clima traduzidos da
   referência aprovada pelo Neto (cloudstudio.es), reescritos do zero com o
   sistema da casa. Nenhum byte da referência entra aqui.

   Regras herdadas que esta folha respeita:
   - Cores: tokens medidos da tokens.css v3.0 de produção (49 medições).
     Nenhum par texto/fundo novo foi inventado; pares decorativos são
     aria-hidden e não carregam informação.
   - D1/GEO: a página é COMPLETA sem JavaScript. Todo estado inicial aqui é
     o estado legível. A classe `js` no <html> é quem arma as animações.
   - prefers-reduced-motion: reduz TUDO (transitions, marquee, parallax).
   - O acento vermelho rege o convite. Cabeçalho sussurra, hero afirma,
     convite fecha.
   ========================================================================== */

/* ---------------------------------------------------------------------------
   1. FONTES · auto-hospedadas, licenciadas (SIL OFL 1.1), nunca CDN
--------------------------------------------------------------------------- */
@font-face {
  font-family: 'Space Grotesk';
  src: url('../fontes/SpaceGrotesk-Variable-latin.woff2') format('woff2');
  font-weight: 300 700; font-display: swap; font-style: normal;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Space Grotesk';
  src: url('../fontes/SpaceGrotesk-Variable-latin-ext.woff2') format('woff2');
  font-weight: 300 700; font-display: swap; font-style: normal;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Literata';
  src: url('../fontes/Literata-Variable-latin.woff2') format('woff2');
  font-weight: 300 700; font-display: swap; font-style: normal;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Literata';
  src: url('../fontes/Literata-Variable-latin-ext.woff2') format('woff2');
  font-weight: 300 700; font-display: swap; font-style: normal;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Literata';
  src: url('../fontes/Literata-Italic-Variable-latin.woff2') format('woff2');
  font-weight: 300 700; font-display: swap; font-style: italic;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Archivo';
  src: url('../fontes/Archivo-Variable-latin.woff2') format('woff2');
  font-weight: 400 800; font-display: swap; font-style: normal;
  font-stretch: 62% 125%;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Archivo';
  src: url('../fontes/Archivo-Variable-latin-ext.woff2') format('woff2');
  font-weight: 400 800; font-display: swap; font-style: normal;
  font-stretch: 62% 125%;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ---------------------------------------------------------------------------
   2. TOKENS · valores medidos, herdados de tokens.css v3.0
--------------------------------------------------------------------------- */
:root {
  --fundo:      #E7E4DE;
  --fundo-2:    #DCD8D1;
  --clara:      #FCFBF8;
  --tinta-sup:  #0F0F10;
  --tinta:      #121314;   /* 18,13:1 na clara · 14,78:1 no fundo */
  --tinta-2:    #4A4E52;   /*  8,11:1 na clara */
  --tinta-3:    #5F6367;   /*  5,86:1 na clara · 4,78:1 no fundo */
  --tinta-inv:  #F2F2F0;   /* 17,10:1 no cartão tinta */
  --tinta-inv-2:#A8A9A6;   /*  7,10:1 no cartão tinta */
  --linha:      #D6D2CA;
  --linha-forte:#797D81;
  --linha-inv:  #34343A;
  /* 🎨 O ACENTO É TERRACOTA QUENTE. GO do Neto em 2026-08-23: "vai de terracota".
     O urucum #D42A1B saiu, e o amarelo saiu antes dele, nos dois registros.
     A família inteira foi RECALCULADA no matiz novo (13°), não trocada por
     busca e substituição: cada derivado abaixo foi medido, não herdado. */
  --acento:       #A8452A; /* matiz 13° · sat 60% · luz 41% */
  --acento-tinta: #FFFFFF; /* 5,92:1 dentro da terracota (no urucum era 5,07:1) */
  /* 🔴 A TERRACOTA DISPENSA O IRMÃO ESCURO, E ISSO É O GANHO ESTRUTURAL DELA.
     O urucum precisava de um segundo valor para virar texto, porque puro media
     3,99:1 no papel e reprovava. A terracota pura mede 4,66:1 no papel e 5,72:1
     na clara: passa como superfície E como texto, com um valor só.
     Testei escurecê-la para folgar ainda mais e DESISTI por medição: a versão
     mais escura passa a separar a ênfase PIOR do que o vermelho que ela
     substitui (2,79:1 contra 2,91:1 na visão comum), e separação de ênfase é
     justamente o motivo da escolha. Detalhe no bloco de ênfase, adiante. */
  --acento-texto: #A8452A;
  --acento-fraco: #F2DED9; /* luminância casada com o token antigo (0,761 contra
                              0,757): mesma presença de linha, matiz novo */
  /* o mesmo acento quando a superfície é escura. Aqui a terracota resolveu um
     impasse que o urucum não resolvia: o salmão de antes lia bem (7,22:1) mas
     separava mal da tinta clara vizinha (2,43:1), e o candidato que separava
     mais caía para 4,93:1 de legibilidade. Esta terracota clara lê a 6,20:1 E
     separa a 2,83:1, melhor que o salmão nos TRÊS canais de visão.
     🔴 VALOR CORRIGIDO POR AUDITORIA DE PAR NO DOM, e a lição fica: a primeira
     escolha (#CC684D, luz 55%) separava ainda melhor (3,31:1) e media 5,30:1
     sobre o carvão, mas caía para 4,32:1 sobre o CARTÃO ELEVADO do escuro
     (#212126), que a planilha não conhecia porque é superfície que só existe
     no DOM. Este valor passa em todas: 6,20 no carvão · 6,04 na tinta-sup ·
     5,05 no cartão elevado · 6,62 no preto. Separação 2,83 / 3,07 / 2,53
     contra 2,43 / 2,69 / 2,09 do salmão: melhor nos três, sem reprovar em
     lugar nenhum. */
  --acento-sobre-tinta: #D17961;

  --grao: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.86' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23g)'/%3E%3C/svg%3E");
  --grao-forca: .035;

  --disp: 'Space Grotesk', system-ui, sans-serif;   /* título e interface */
  --serif: 'Literata', Georgia, serif;              /* corpo de leitura */
  --larga: 'Archivo', system-ui, sans-serif;        /* rótulo: caixa alta, tracking largo */

  /* ESCADA DE TÍTULOS · seis degraus, razão ~1,31, ancorada em --t4, que é a
     base de 19 ocorrências. Tracking e entrelinha andam JUNTO com o corpo, de
     forma monótona: quanto maior a letra, mais apertado o tracking e mais
     baixo o vão, convergindo para o corpo de texto (17px, tracking 0, vão 1,7).
     🔴 Regra da folha: NENHUM título escreve font-size fora desta escada.
     Antes desta escada o h2 tinha 8 tamanhos, dois deles colidindo com o h3,
     e a home ia 64 → 73,6 → 70,4 → 92,2 → 70,4 → 64 → 115,2. */
  --t1: clamp(2.7rem,  8.2vw, 7.2rem);  --t1-tr: -.040em; --t1-lh: .96;  /* 115,2 @1440 · monumento */
  --t2: clamp(2.35rem, 6.2vw, 5.5rem);  --t2-tr: -.037em; --t2-lh: .98;  /*  88,0 @1440 · hero de interna */
  --t3: clamp(1.95rem, 4.7vw, 4.2rem);  --t3-tr: -.034em; --t3-lh: 1.00; /*  67,2 @1440 · abertura de ato */
  --t4: clamp(1.65rem, 3.7vw, 3.2rem);  --t4-tr: -.031em; --t4-lh: 1.04; /*  51,2 @1440 · seção e cartão (base) */
  --t5: clamp(1.3rem,  2.4vw, 2.05rem); --t5-tr: -.026em; --t5-lh: 1.10; /*  32,8 @1440 · nome curto em cartão */
  --t6: clamp(1.1rem,  1.8vw, 1.6rem);  --t6-tr: -.020em; --t6-lh: 1.18; /*  25,6 @1440 · subseção */

  --miolo: 1360px;
  --lado: clamp(18px, 4vw, 48px);
  --raio: 4px;
  --raio-cartao: clamp(18px, 3vw, 34px);

  --mola: cubic-bezier(.16, 1, .3, 1);
}
@media (prefers-color-scheme: dark) {
  :root {
    --fundo:      #0B0B0D;
    --fundo-2:    #16161A;
    --clara:      #212126;
    --tinta-sup:  #000000;
    --tinta:      #F2F2F0;  /* 13,30:1 no carvão */
    --tinta-2:    #B2B3B0;
    --tinta-3:    #8C8D8A;
    --tinta-inv:  #F2F2F0;
    --tinta-inv-2:#A8A9A6;
    --linha:      #34343A;
    --linha-forte:#767B80;
    --linha-inv:  #2A2A30;
    /* terracota no escuro. --acento (a superfície do convite) NÃO troca aqui,
       de propósito: a tela de barro é a mesma nos dois registros. O que troca é
       o acento quando ele vira TEXTO sobre carvão. */
    --acento-fraco:#391711; /* luminância casada com o #3A1410 antigo (0,0152
                               contra 0,0144), matiz novo */
    --acento-texto:#D17961; /* 6,20:1 sobre o carvão, 5,05:1 sobre o cartão
                               elevado · separa a ênfase melhor que o salmão
                               antigo nos três canais de visão */
    --grao-forca: .05;
  }
}

/* ---------------------------------------------------------------------------
   3. BASE
--------------------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
body {
  margin: 0;
  background: var(--fundo);
  color: var(--tinta);
  font-family: var(--serif);
  font-size: 1.0625rem;
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;
}
/* grão de papel por cima de tudo, imperceptível e essencial */
body::after {
  content: ''; position: fixed; inset: 0; z-index: 9999;
  background: var(--grao); opacity: var(--grao-forca);
  pointer-events: none; mix-blend-mode: multiply;
}
img { max-width: 100%; height: auto; display: block; }
a { color: inherit; }
::selection { background: var(--acento); color: var(--acento-tinta); }

/* TRATAMENTO D (decisão do Neto, 2026-08-23) · UMA FAMÍLIA SÓ NO TÍTULO.
   Acabou a segunda voz dentro da frase de título: a Literata itálica saiu do
   h1 e continua onde mede bem (corpo de texto e .fechamento). Motivo medido
   pelo ARGOS: só a Literata tem eixo óptico (opsz 7-72), então o par divergia
   progressivamente conforme o título crescia; e a palavra destacada tinha
   23,8% MENOS tinta que a frase ao redor, ou seja, a ênfase estava invertida.

   🔴 font-synthesis: none é a TRAVA. Sem ela o navegador cisalha os contornos
   da Space Grotesk quando pede itálico, e o defeito passa calado: era assim
   que 5 das 7 páginas serviam itálico FALSO enquanto a home servia o
   verdadeiro, com o mesmo padrão autoral. Com a trava, defeito desse tipo
   grita (a ênfase some) em vez de passar por design. */
h1, h2, h3 {
  font-family: var(--disp);
  font-weight: 600;                /* era 500. A referência aprovada usa 700/800. */
  font-synthesis: none;
  font-size: var(--t4); letter-spacing: var(--t4-tr); line-height: var(--t4-lh);
  margin: 0 0 .5em; text-wrap: balance;
}

/* A ênfase é COR + PESO, nunca uma segunda família.
   Dois canais de propósito: ênfase feita só de cor desaparece para quem não
   distingue cor, e o peso é o canal que sobrevive. O incremento não reflui o
   texto porque a Space Grotesk é quase duplexada (0,4% de variação de largura
   de 300 a 700, medido pelo ARGOS), conferido de novo aqui, palavra a palavra. */
h1 em, h2 em, h3 em,
h1 i, h2 i, h3 i,
h1 strong, h2 strong, h3 strong {
  font-family: inherit; font-style: normal;
  font-weight: 700; color: var(--acento-texto);
  letter-spacing: inherit;
}
/* e o acento troca de valor conforme a superfície, senão a ênfase some.
   (é o mesmo modo de falhar do itálico falso: regra presa a UM contexto.) */
.s-escura :is(h1, h2, h3) :is(em, i, strong),
.carta.s-carta-tinta :is(h1, h2, h3) :is(em, i, strong),
.cartao-g.g-tinta :is(h1, h2, h3) :is(em, i, strong),
.cartao-selo.selo-tinta :is(h1, h2, h3) :is(em, i, strong),
.perfil-cartao.p-tinta :is(h1, h2, h3) :is(em, i, strong),
.estado-display :is(h1, h2, h3) :is(em, i, strong) { color: var(--acento-sobre-tinta); }
.s-acento-sec :is(h1, h2, h3) :is(em, i, strong),
.convite-int :is(h1, h2, h3) :is(em, i, strong),
.ato-convite :is(h1, h2, h3) :is(em, i, strong),
.cartao-g.g-acento :is(h1, h2, h3) :is(em, i, strong) { color: var(--acento-tinta); }
@media (prefers-color-scheme: dark) {
  /* 🔴 NO ESCURO QUEM MARCA A PALAVRA É O PESO, NÃO A COR, E ISSO É MEDIDO.
     Números refeitos em 2026-08-23 com a terracota, simulação Brettel/Viénot,
     ênfase medida contra o TEXTO VIZINHO (que é a pergunta certa: não é "dá
     para ler", é "dá para VER que aquela palavra está destacada").

     ⚠️ ERRATA DA VERSÃO ANTERIOR DESTE COMENTÁRIO. Ele afirmava que o vermelho
     separava 3,91:1 sob protanopia e 5,02:1 sob deuteranopia no papel claro.
     Esses dois números NÃO se reproduzem: medindo #B82315 contra #121314 dá
     2,46:1 e 3,65:1, e nenhum par de tokens desta folha devolve 3,91 ou 5,02.
     O sentido também estava invertido: sob protanopia o vermelho separa PIOR,
     não melhor, porque o simulador escurece o vermelho na direção do texto.
     Fica a régua: número em comentário é afirmação, e afirmação se reproduz.

     PAPEL CLARO, ênfase terracota #A8452A contra texto #121314:
       2,91 → 3,14 na visão comum · 2,46 → 2,83 sob protanopia · 3,65 → 3,66 sob
       deuteranopia. A terracota separa MELHOR que o urucum nos três canais, e
       foi por isso que ela ganhou a bancada de cor.
     ESCURO, ênfase #D17961 contra tinta clara #F2F2F0:
       2,83 na visão comum · 3,07 sob protanopia · 2,53 sob deuteranopia, contra
       2,43 / 2,69 / 2,09 do salmão antigo. Melhor nos três, sem custo de
       leitura: lê a 6,20:1 sobre o carvão, muito acima dos 4,93:1 que a rodada
       anterior tinha rejeitado como preço alto demais. A terracota resolveu um
       impasse que o vermelho não resolvia.
     Ainda assim o peso continua sendo o canal principal no escuro, porque toda
     separação por cor cai lá. Por isso o título escuro segue em 550: o
     incremento da ênfase sai de +8,7% de haste para +13,6%, e de quebra corrige
     o florescimento óptico que faz texto claro sobre fundo escuro parecer mais
     gordo do que é. */
  h1, h2, h3 { font-weight: 550; }
  .s-escura :is(h1, h2, h3) :is(em, i, strong),
  .carta.s-carta-tinta :is(h1, h2, h3) :is(em, i, strong),
  .cartao-g.g-tinta :is(h1, h2, h3) :is(em, i, strong),
  .perfil-cartao.p-tinta :is(h1, h2, h3) :is(em, i, strong) { color: var(--acento-texto); }
}
p { margin: 0 0 1em; }
p:last-child { margin-bottom: 0; }

.pular {
  position: absolute; left: -9999px; top: 0; z-index: 300;
  background: var(--tinta-sup); color: var(--tinta-inv);
  padding: 12px 20px; font-family: var(--disp); text-decoration: none;
}
.pular:focus { left: 12px; top: 12px; }

:focus-visible { outline: 3px solid var(--acento); outline-offset: 3px; border-radius: 2px; }
@media (prefers-color-scheme: dark) { :focus-visible { outline-color: var(--acento-texto); } }

.so-leitor { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

/* A VOZ DE RÓTULO DA CASA · Archivo.
   O `fontes/LICENSES.md` já elegia a Archivo como a voz "rótulo" e ela estava
   licenciada, em disco (176.344 bytes) e com ZERO regra usando: var(--disp)
   governava 23 das 26 regras de família, uma fonte fazendo nove trabalhos.
   Agora o registro de rótulo é dela e só dela.
   🔴 Predicado desta classe, para não virar exceção de novo: rótulo é
   CAIXA ALTA + tracking largo + corpo pequeno. É este predicado, e não o
   nome da classe, que decide quem usa var(--larga).
   Substituição, nunca soma: nada de mono ao lado disto (parecer do ARGOS). */
.vm {
  font-family: var(--larga);
  font-weight: 600;
  font-size: .74rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
}
.vm.suave { color: var(--tinta-3); }

.miolo { max-width: var(--miolo); margin-inline: auto; padding-inline: var(--lado); }

/* ---------------------------------------------------------------------------
   4. TOPO
--------------------------------------------------------------------------- */
.topo {
  position: fixed; inset: 0 0 auto 0; z-index: 120;
  pointer-events: none;
  isolation: isolate;
}
.topo-caixa {
  max-width: var(--miolo); margin-inline: auto;
  padding: 14px var(--lado);
  display: flex; align-items: center; gap: clamp(14px, 3vw, 34px);
}
.topo-caixa > * { pointer-events: auto; }
.topo::before {
  content: ''; position: absolute; inset: 0; z-index: -1;
  background: color-mix(in srgb, var(--fundo) 72%, transparent);
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  mask-image: linear-gradient(to bottom, #000 62%, transparent);
  -webkit-mask-image: linear-gradient(to bottom, #000 62%, transparent);
}
.marca {
  display: inline-flex; align-items: center; gap: 9px;
  text-decoration: none; font-family: var(--disp); font-weight: 600;
  font-size: .95rem; letter-spacing: -.01em;
}
.marca svg { width: 9px; height: 30px; }
.marca svg:last-of-type { transform: scaleX(-1); }
.topo nav { display: flex; gap: clamp(10px, 2vw, 22px); margin-left: auto; }
.topo nav a {
  font-family: var(--larga); font-weight: 600; font-size: .74rem;
  letter-spacing: .13em; text-transform: uppercase;
  text-decoration: none; color: var(--tinta-2);
  padding: 10px 2px; position: relative;
}
.topo nav a::after {
  content: ''; position: absolute; left: 2px; right: 100%; bottom: 6px;
  height: 2px; background: var(--tinta); transition: right .45s var(--mola);
}
.topo nav a:hover::after, .topo nav a[aria-current="page"]::after { right: 2px; }
.topo nav a[aria-current="page"] { color: var(--tinta); }
.relogio { display: none; }
@media (min-width: 900px) {
  .relogio { display: inline-block; color: var(--tinta-3); margin-right: 4px; }
}
/* topo em tela estreita: a marca vira só o par de colchetes, o botão sai
   (o convite mora no hero e no fim), a navegação fica numa linha só */
@media (max-width: 760px) {
  .marca span { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
  .marca { gap: 5px; }
  .topo-caixa { gap: 10px; padding-block: 12px; }
  .topo nav { gap: 13px; }
  .topo nav a { font-size: .64rem; letter-spacing: .09em; white-space: nowrap; padding: 8px 0; }
  .topo .botao { display: none; }
}

.botao {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 46px; padding: 10px 24px;
  font-family: var(--larga); font-weight: 600; font-size: .82rem;
  letter-spacing: .09em; text-transform: uppercase;
  text-decoration: none; border-radius: 999px;
  background: var(--tinta-sup); color: var(--tinta-inv);
  border: 1px solid var(--tinta-sup);
  transition: transform .35s var(--mola), background .2s;
}
.botao:hover { transform: translateY(-2px); }
.botao:active { transform: translateY(0); }
.botao.vazado { background: transparent; color: var(--tinta); border-color: var(--linha-forte); }
.botao.vazado:hover { border-color: var(--tinta); }
.botao.acento { background: var(--acento); border-color: var(--acento); color: var(--acento-tinta); }
@media (prefers-color-scheme: dark) {
  .botao { background: var(--tinta); color: var(--fundo); border-color: var(--tinta); }
  .botao.vazado { background: transparent; color: var(--tinta); }
  .botao.acento { background: var(--acento); color: var(--acento-tinta); }
}

/* ---------------------------------------------------------------------------
   5. HUD · a página se declara (rail de atos + progresso)
--------------------------------------------------------------------------- */
.hud {
  position: fixed; z-index: 110; right: var(--lado); bottom: 18px;
  display: flex; align-items: baseline; gap: 14px;
  font-variant-numeric: tabular-nums;
  color: var(--tinta-3);
  pointer-events: none;
}
.hud .hud-ato { min-width: 16ch; text-align: right; }
.hud .hud-pct { color: var(--tinta); }
.hud, .rail { transition: opacity .5s; }
.hud.cede, .rail.cede { opacity: 0; }
.rail {
  position: fixed; z-index: 110; left: calc(var(--lado) / 2); top: 50%;
  translate: 0 -50%;
  display: flex; flex-direction: column; gap: 10px;
  pointer-events: none;
}
.rail i {
  width: 5px; height: 5px; border-radius: 50%;
  background: var(--linha-forte); opacity: .5;
  transition: opacity .3s, transform .3s, background .3s;
}
.rail i.on { background: var(--tinta); opacity: 1; transform: scale(1.5); }
@media (max-width: 900px) { .rail { display: none; } .hud { right: 14px; bottom: 12px; } .hud .hud-ato { display: none; } }

/* ---------------------------------------------------------------------------
   6. ATOS · o esqueleto rítmico. Superfícies inteiras alternando.
--------------------------------------------------------------------------- */
.ato { position: relative; }
.ato-rotulo {
  display: flex; align-items: center; gap: 12px;
  margin: 0 0 clamp(20px, 4vw, 44px);
  color: var(--tinta-3);
}
.ato-rotulo .num { color: var(--acento-texto); }
.ato-rotulo .traco { flex: 0 1 120px; height: 1px; background: var(--linha-forte); opacity: .6; }
.s-escura .ato-rotulo, .s-escura .vm.suave { color: var(--tinta-inv-2); }
.s-escura .ato-rotulo .num { color: var(--tinta-inv); }
.s-escura .ato-rotulo .traco { background: var(--linha-inv); }

/* superfícies */
.s-papel { background: var(--fundo); }
.s-clara-sec { background: var(--clara); }
.s-escura { background: var(--tinta-sup); color: var(--tinta-inv); }
.s-acento-sec { background: var(--acento); color: var(--acento-tinta); }

/* transição de superfície: a seção seguinte sobe com ombros arredondados */
.ombro { border-radius: var(--raio-cartao) var(--raio-cartao) 0 0; margin-top: calc(-1 * var(--raio-cartao)); }

/* numeral fantasma sangrando pela borda (decorativo, aria-hidden) */
.fantasma {
  position: absolute; right: -2%; bottom: -.18em; z-index: 0;
  font-family: var(--disp); font-weight: 700;
  font-size: min(46vw, 56vh); line-height: .8; letter-spacing: -.06em;
  pointer-events: none; user-select: none;
  color: transparent;
  -webkit-text-stroke: 1px color-mix(in srgb, currentColor 0%, var(--tinta) 22%);
  opacity: .14;
}
.s-escura .fantasma { -webkit-text-stroke-color: color-mix(in srgb, var(--tinta-inv) 30%, transparent); opacity: .35; }

/* ---------------------------------------------------------------------------
   7. HERO
--------------------------------------------------------------------------- */
.hero {
  min-height: 100svh;
  display: flex; flex-direction: column; justify-content: center;
  padding: 120px 0 40px;
  position: relative; overflow: clip;
}
.hero .miolo { position: relative; z-index: 2; width: 100%; }
.hero h1 {
  font-size: var(--t1); letter-spacing: var(--t1-tr); line-height: var(--t1-lh);
  max-width: 14ch;
  margin: 0 0 clamp(22px, 4vw, 40px);
}
.hero h1 .ln { display: block; overflow: clip; }
.hero h1 .pal { display: inline-block; }
/* aqui morava a regra que trazia a Literata itálica para dentro do h1 e que
   existia SÓ no .hero, nunca no .hero-int. Era ela que produzia dois
   resultados para o mesmo padrão autoral. Saiu com o tratamento D. */
.hero .dek {
  font-size: clamp(1.05rem, 1.6vw, 1.3rem); line-height: 1.6;
  max-width: 46ch; color: var(--tinta-2);
}
.hero .acoes { display: flex; flex-wrap: wrap; gap: 12px; margin-top: clamp(20px, 3vw, 34px); }
.hero-meta {
  display: flex; flex-wrap: wrap; gap: 8px 28px;
  margin-top: clamp(30px, 6vh, 70px);
  color: var(--tinta-3);
}
.hero-meta b { color: var(--tinta); font-weight: 600; }

/* o organismo: partículas que se reúnem no selo. O SVG estático é o estado
   sem JS e sem movimento; o canvas entra por cima quando pode. */
.organismo {
  position: absolute; z-index: 1;
  right: clamp(-40px, 2vw, 90px); top: 50%;
  translate: 0 -50%;
  width: clamp(300px, 44vw, 760px); height: clamp(300px, 44vw, 760px);
  pointer-events: none;
}
.organismo svg.selo-fixo {
  position: absolute; inset: 12%;
  width: 76%; height: 76%;
  color: var(--tinta);
  opacity: .16;
}
.organismo canvas { position: absolute; inset: 0; width: 100%; height: 100%; }
html.js.movel .organismo svg.selo-fixo { opacity: 0; transition: opacity .8s; }
@media (max-width: 860px) {
  .hero { padding-top: 100px; }
  .organismo {
    position: relative; right: auto; top: auto; translate: none;
    width: min(72vw, 340px); height: min(72vw, 340px);
    margin: 8px auto 0; order: 9;
  }
}

/* ---------------------------------------------------------------------------
   8. FITA · marquee (decorativa, aria-hidden, texto duplicado)
--------------------------------------------------------------------------- */
.fita-caixa {
  overflow: clip; border-block: 1px solid var(--linha);
  background: var(--clara); padding: 14px 0;
  position: relative; z-index: 2;
}
.fita { display: flex; width: max-content; }
.fita .rotulo {
  font-family: var(--disp); font-weight: 500; font-size: .85rem;
  letter-spacing: .06em; white-space: nowrap; color: var(--tinta-2);
  padding-right: 2ch;
}
html.movel .fita { animation: fita-anda 46s linear infinite; }
@keyframes fita-anda { to { transform: translateX(-50%); } }

/* ---------------------------------------------------------------------------
   9. ATO 02 · duas casas
--------------------------------------------------------------------------- */
.ato-casas { padding: clamp(70px, 11vw, 160px) 0; }
.ato-casas h2 { font-size: var(--t3); letter-spacing: var(--t3-tr); line-height: var(--t3-lh); max-width: 22ch; }
.casas {
  display: grid; grid-template-columns: 1fr auto 1fr;
  gap: clamp(18px, 4vw, 54px); align-items: stretch;
  margin-top: clamp(30px, 5vw, 60px);
}
.casas .lado {
  background: var(--clara); border: 1px solid var(--linha);
  border-radius: var(--raio-cartao); padding: clamp(22px, 3.4vw, 44px);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.6);
}
@media (prefers-color-scheme: dark) { .casas .lado { box-shadow: inset 0 1px 0 rgba(255,255,255,.04); } }
.casas .marco {
  display: block; font-family: var(--disp); font-weight: 600;
  font-size: 1.15rem; letter-spacing: -.01em; margin-bottom: 12px;
}
.casas .lado p { color: var(--tinta-2); font-size: 1rem; }
.casas .fio {
  display: flex; flex-direction: column; align-items: center; gap: 0;
  min-width: 60px; justify-content: center; position: relative;
}
.casas .fio::before, .casas .fio::after {
  content: ''; width: 1px; flex: 1;
  background: linear-gradient(var(--linha-forte), var(--linha-forte)) center / 1px 100% no-repeat;
}
.casas .selo-vao {
  font-family: var(--disp); font-weight: 500;
  font-size: clamp(1.6rem, 3vw, 2.4rem);
  padding: 10px 4px; color: var(--acento-texto);
  letter-spacing: .1em;
}
.casas-fecho { max-width: 62ch; margin-top: clamp(26px, 4vw, 44px); color: var(--tinta-2); }
@media (max-width: 760px) {
  .casas { grid-template-columns: 1fr; }
  .casas .fio { flex-direction: row; min-height: 60px; }
  .casas .fio::before, .casas .fio::after { width: auto; height: 1px; background: var(--linha-forte); }
}

/* ---------------------------------------------------------------------------
   10. ATO 03 · a pilha (cartões pinados, mecanismo central)
--------------------------------------------------------------------------- */
.pilha-intro { padding: clamp(70px, 10vw, 150px) 0 clamp(40px, 6vw, 80px); }
.pilha-intro h2 { font-size: var(--t3); letter-spacing: var(--t3-tr); line-height: var(--t3-lh); max-width: 16ch; }
.pilha { position: relative; }
.carta {
  position: sticky; top: 0;
  min-height: 100svh;
  display: flex; align-items: center;
  overflow: clip;
  border-radius: var(--raio-cartao) var(--raio-cartao) 0 0;
  padding: clamp(90px, 12vh, 120px) 0;
}
.carta .miolo { position: relative; z-index: 2; width: 100%; }
.carta-grade {
  display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr);
  gap: clamp(24px, 5vw, 80px); align-items: center;
}
/* 🔴 O RESPIRO DA CARTA NO MOBILE, E A LIÇÃO DE COMO EU ERREI ANTES.
   A mecânica (sticky top:0, cada carta cobrindo a anterior) é APROVADA e não se
   toca. Mas ela só cobre de verdade se a carta CABE na janela: carta mais alta
   que a tela deixa o rodapé abaixo da dobra e a cobertura vira meia-verdade.
   Com os 74px fixos, 3 de 5 cartas estouravam a 360x640 e 1 de 5 a 375x667
   (iPhone SE e 8, aparelho real, não caso de borda). Defeito PRE-EXISTENTE, que
   o tratamento D já tinha reduzido sozinho de 4/5 para 3/5 ao encolher o h3.

   Meu primeiro conserto encolheu os DOIS lados por igual (clamp simétrico) e a
   FOTO reprovou o que a tabela tinha aprovado: o cabeçalho fixo mede 57,4px e
   cobre só o TOPO, então o respiro simétrico pagou a conta justamente com o
   único lado que não podia encolher, e o trilho de progresso sumiu por baixo do
   cabeçalho nos QUATRO celulares. Número melhorou, recurso sumiu.
   Por isso aqui o respiro é ASSIMÉTRICO: o topo é fixo em 76px porque a função
   dele é guardar o cabeçalho (folga medida de 18,9px a 19,1px em toda a faixa),
   e quem flexa é o rodapé, que não guarda nada.
   Medido: 375x667 sai de -21,1px para +30,9px de folga; 390x844 e acima seguem
   folgados; 360x640 sai de -67,2px para -14,4px, 2,2% da janela, resíduo que eu
   NÃO pago comprimindo o ritmo interno da carta em todo celular bom.
   Desktop não muda 1px: 108px e 162,8px de folga antes e depois. */
@media (max-width: 860px) { .carta-grade { grid-template-columns: 1fr; gap: 26px; } .carta { min-height: auto; padding: 76px 0 clamp(18px, 3svh, 74px); } }

/* trilho mono de progresso dentro da carta */
.trilho-mono { display: flex; align-items: center; gap: 10px; margin-bottom: clamp(20px, 3vw, 34px); }
.trilho-mono .aqui { color: currentColor; }
.trilho-mono .longe { opacity: .38; }
.trilho-mono .t1 { width: 34px; height: 2px; background: currentColor; }
.trilho-mono .t2 { width: 12px; height: 1px; background: currentColor; opacity: .38; }

.carta h3 { font-size: var(--t4); letter-spacing: var(--t4-tr); line-height: var(--t4-lh); max-width: 17ch; }
.carta .wg-corpo { font-size: clamp(1rem, 1.4vw, 1.18rem); max-width: 46ch; }
.carta .medida { display: flex; align-items: baseline; gap: 14px; margin-top: clamp(18px, 3vw, 30px); }
.carta .medida .numeral {
  font-family: var(--disp); font-weight: 500; letter-spacing: -.04em;
  font-size: clamp(3.4rem, 8vw, 7rem); line-height: 1;
}
.carta .cred { margin-top: clamp(18px, 3vw, 30px); }

/* superfícies das cartas */
.carta.s-carta-clara { background: var(--clara); color: var(--tinta); box-shadow: 0 -18px 50px rgba(15,15,16,.14); }
.carta.s-carta-tinta { background: var(--tinta-sup); color: var(--tinta-inv); box-shadow: 0 -18px 50px rgba(15,15,16,.3); }
.carta.s-carta-fundo2 { background: var(--fundo-2); color: var(--tinta); box-shadow: 0 -18px 50px rgba(15,15,16,.14); }
.carta.s-carta-clara .wg-corpo, .carta.s-carta-fundo2 .wg-corpo { color: var(--tinta-2); }
.carta.s-carta-tinta .wg-corpo { color: var(--tinta-inv-2); }
.carta.s-carta-tinta .fantasma { -webkit-text-stroke-color: rgba(242,242,240,.28); opacity: .4; }

/* o adereço de cada carta (coluna direita): composição tipográfica própria */
.peca { position: relative; display: grid; place-items: center; min-height: clamp(180px, 30vh, 320px); }
.peca .selo-mono { width: clamp(60px, 8vw, 110px); opacity: .9; }
.peca-ficha {
  width: 100%; max-width: 420px;
  border: 1px solid currentColor; border-radius: 14px;
  padding: clamp(16px, 2.4vw, 26px);
  font-variant-numeric: tabular-nums;
}
.peca-ficha .linha-ficha {
  display: flex; justify-content: space-between; gap: 14px;
  padding: 9px 0; border-bottom: 1px dashed color-mix(in srgb, currentColor 34%, transparent);
}
.peca-ficha .linha-ficha:last-child { border-bottom: 0; }
.peca-ficha .linha-ficha b { font-weight: 600; text-align: right; }

/* ---------------------------------------------------------------------------
   11. ATO 04 · credencial · o baralho de selos
--------------------------------------------------------------------------- */
.ato-cred { padding: clamp(80px, 11vw, 160px) 0; overflow: clip; }
.ato-cred h2 { font-size: var(--t3); letter-spacing: var(--t3-tr); line-height: var(--t3-lh); max-width: 15ch; }
.cred-grade {
  display: grid; grid-template-columns: minmax(0, .95fr) minmax(0, 1.05fr);
  gap: clamp(28px, 5vw, 80px); align-items: start;
  margin-top: clamp(26px, 4vw, 50px);
}
@media (max-width: 900px) { .cred-grade { grid-template-columns: 1fr; } }
.cred-abertura { font-size: clamp(1.05rem, 1.5vw, 1.25rem); color: var(--tinta-2); max-width: 52ch; }

/* baralho: sem JS, os 3 cartões ficam expostos em leque vertical.
   Com JS, viram pilha clicável. */
.baralho { position: relative; display: grid; gap: 16px; }
.cartao-selo {
  background: var(--clara); border: 1px solid var(--linha);
  border-radius: 18px; padding: clamp(20px, 2.8vw, 30px);
  box-shadow: 0 10px 30px rgba(15,15,16,.08), inset 0 1px 0 rgba(255,255,255,.65);
  width: 100%;
}
@media (prefers-color-scheme: dark) { .cartao-selo { box-shadow: 0 10px 30px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.05); } }
.cartao-selo.selo-tinta { background: var(--tinta-sup); border-color: var(--linha-inv); color: var(--tinta-inv); }
.cartao-selo .cab {
  display: flex; justify-content: space-between; align-items: center;
  padding-bottom: 14px; margin-bottom: 14px;
  border-bottom: 1px solid var(--linha);
}
.cartao-selo.selo-tinta .cab { border-color: var(--linha-inv); }
.cartao-selo .nome-selo {
  font-family: var(--disp); font-weight: 600;
  font-size: var(--t5); letter-spacing: var(--t5-tr); line-height: var(--t5-lh);
  margin: 6px 0 10px;
}
.cartao-selo p { color: var(--tinta-2); margin: 0; }
.cartao-selo.selo-tinta p { color: var(--tinta-inv-2); }
.cred {
  display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--larga); font-weight: 600; font-size: .74rem;
  letter-spacing: .13em; text-transform: uppercase;
  padding: 7px 14px; border-radius: 999px;
}
.cred--verificado { background: var(--tinta-sup); color: var(--tinta-inv); }
.cred--verificado::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--acento); }
.cred--declarado { border: 1px solid var(--linha-forte); color: var(--tinta-2); }
.cred--sem { border: 1px dashed var(--linha-forte); color: var(--tinta-3); }
.carta.s-carta-tinta .cred--verificado { background: var(--tinta-inv); color: var(--tinta-sup); }
@media (prefers-color-scheme: dark) {
  .cred--verificado { background: var(--tinta); color: var(--fundo); }
  .cartao-selo.selo-tinta .cred--verificado { background: var(--tinta-inv); color: var(--tinta-sup); }
}

html.js .baralho.armado { display: block; height: 440px; }
html.js .baralho.armado .cartao-selo {
  position: absolute; inset: 0 auto auto 0; width: 100%;
  height: 360px; overflow: clip;
  transition: transform .6s var(--mola), opacity .4s;
  cursor: pointer;
}
html.js .baralho.armado .cartao-selo:focus-visible { outline-offset: 6px; }
.baralho-dica { margin-top: 14px; color: var(--tinta-3); display: none; }
html.js .baralho-dica.armado { display: block; }

.ressalva {
  margin-top: clamp(30px, 5vw, 56px);
  border-left: 3px solid var(--acento);
  padding: 6px 0 6px clamp(16px, 2.4vw, 28px);
  max-width: 62ch; color: var(--tinta-2);
}

/* ---------------------------------------------------------------------------
   12. ATO 05 · a regra da casa · statement monumental (fillword)
--------------------------------------------------------------------------- */
.ato-regra { padding: clamp(100px, 16vw, 220px) 0; }
.ato-regra .grande {
  font-size: var(--t1); letter-spacing: var(--t1-tr); line-height: var(--t1-lh);
  max-width: 15ch; margin-bottom: clamp(34px, 6vw, 70px);
}
/* fillword: SEM JS todas as palavras já estão acesas (estado completo).
   Com JS, cena.js apaga e acende conforme a rolagem. */
.ato-regra .grande .fw { color: var(--tinta-inv); transition: color .18s linear; }
.ato-regra .grande .fw.apagada { color: color-mix(in srgb, var(--tinta-inv) 22%, transparent); }
.ato-regra .colunas {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr));
  gap: clamp(20px, 3.4vw, 44px);
  color: var(--tinta-inv-2); font-size: 1rem;
}
.ato-regra .colunas p { margin: 0; }

/* ---------------------------------------------------------------------------
   13. ATO 06 · fronteiras · o índice das negativas + CVV
--------------------------------------------------------------------------- */
.ato-fronteiras { padding: clamp(80px, 11vw, 160px) 0; }
.ato-fronteiras h2 { font-size: var(--t3); letter-spacing: var(--t3-tr); line-height: var(--t3-lh); max-width: 17ch; margin-bottom: clamp(30px, 5vw, 60px); }
.razao { list-style: none; margin: 0; padding: 0; counter-reset: nao; }
.razao li {
  counter-increment: nao;
  display: grid; grid-template-columns: auto 1fr; gap: clamp(14px, 3vw, 40px);
  align-items: baseline;
  padding: clamp(18px, 3vw, 30px) 0;
  border-top: 1px solid var(--linha);
}
.razao li:last-child { border-bottom: 1px solid var(--linha); }
.razao li::before {
  content: counter(nao, decimal-leading-zero);
  font-family: var(--disp); font-weight: 500;
  font-size: clamp(1.4rem, 3vw, 2.4rem); letter-spacing: -.02em;
  color: var(--tinta-3); font-variant-numeric: tabular-nums;
  min-width: 2ch;
}
.razao .frase { margin: 0; }
.razao .frase b {
  display: block; font-family: var(--disp); font-weight: 500;
  font-size: clamp(1.3rem, 2.8vw, 2.3rem); letter-spacing: -.02em; line-height: 1.15;
}
.razao .detalhe { display: block; color: var(--tinta-2); max-width: 66ch; margin-top: 6px; font-size: 1rem; }

/* O BLOCO DO CVV: inteiro, estático, sem nenhuma classe de movimento.
   Nenhuma regra de reveal, parallax ou pin encosta nele. */
.aviso-cuidado {
  margin-top: clamp(34px, 5vw, 60px);
  background: var(--clara); border: 1px solid var(--linha);
  border-left: 4px solid var(--acento);
  border-radius: var(--raio);
  padding: clamp(18px, 3vw, 28px) clamp(20px, 3.4vw, 34px);
  max-width: 74ch; color: var(--tinta);
  font-size: 1.02rem;
}
.aviso-cuidado b { font-family: var(--disp); font-size: 1.15em; }

/* ---------------------------------------------------------------------------
   14. ATO 07 · onde estamos · as chapas
--------------------------------------------------------------------------- */
.ato-chapas { padding: clamp(80px, 11vw, 160px) 0; overflow: clip; }
.ato-chapas .grade {
  display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);
  gap: clamp(30px, 5vw, 90px); align-items: start;
}
@media (max-width: 900px) { .ato-chapas .grade { grid-template-columns: 1fr; } }
.ato-chapas h2 { font-size: var(--t3); letter-spacing: var(--t3-tr); line-height: var(--t3-lh); max-width: 15ch; }
.ato-chapas .prosa p { color: var(--tinta-2); }
.plano { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(14px, 2.4vw, 30px); }
.chapa-peca { margin: 0; }
.chapa-peca:nth-child(even) { translate: 0 clamp(20px, 4vw, 56px); }
.chapa {
  border-radius: 12px; overflow: clip;
  border: 1px solid var(--linha);
  box-shadow: 0 14px 34px rgba(15,15,16,.12);
  background: var(--fundo-2);
}
.chapa img { aspect-ratio: 640 / 860; object-fit: cover; }
.chapa-peca figcaption {
  margin-top: 10px;
  font-family: var(--larga); font-weight: 600; font-size: .72rem;
  letter-spacing: .14em; text-transform: uppercase; color: var(--tinta-3);
}

/* ---------------------------------------------------------------------------
   15. ATO 08 · convite · o único palco do acento
--------------------------------------------------------------------------- */
.ato-convite { padding: clamp(100px, 15vw, 200px) 0; text-align: left; position: relative; overflow: clip; }
.ato-convite h2 {
  font-size: var(--t1); letter-spacing: var(--t1-tr); line-height: var(--t1-lh);
  max-width: 12ch; margin-bottom: clamp(14px, 2vw, 24px);
}
.ato-convite p { max-width: 46ch; font-size: clamp(1.02rem, 1.5vw, 1.25rem); color: var(--acento-tinta); }
/* 🔴 O BOTÃO DO CONVITE VESTE O ACENTO, NÃO O ACENTO-TEXTO, E ISSO É CONSERTO
   DE DEFEITO MEDIDO, NÃO PREFERÊNCIA. Ele é branco por cima da superfície de
   acento, e a superfície não troca com o tema. O --acento-texto troca: no
   escuro ele vira a terracota clara, que sobre branco mede 3,17:1 e reprova.
   Defeito PRÉ-EXISTENTE e pior antes: com o salmão do urucum media 2,71:1.
   Com --acento (a própria terracota) mede 5,92:1 nos dois registros. */
.ato-convite .botao {
  margin-top: clamp(22px, 3vw, 36px);
  background: var(--acento-tinta); color: var(--acento); border-color: var(--acento-tinta);
  font-size: .9rem; padding: 16px 34px;
}
.ato-convite .vm { color: var(--acento-tinta); }
.ato-convite .fantasma { -webkit-text-stroke-color: rgba(255,255,255,.3); opacity: .3; }

.fechamento {
  font-family: var(--serif); font-style: italic;
  font-size: clamp(1.05rem, 1.6vw, 1.3rem);
  color: var(--tinta-2); text-align: center;
  padding: clamp(40px, 6vw, 70px) var(--lado);
  margin: 0;
}

/* ---------------------------------------------------------------------------
   16. RODAPÉ
--------------------------------------------------------------------------- */
.rodape { border-top: 1px solid var(--linha); padding: clamp(40px, 6vw, 70px) 0 90px; }
.rodape-grade { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr)); gap: clamp(24px, 4vw, 60px); }
.rodape .rotulo-pe { margin-bottom: 12px; color: var(--tinta-3); }
.rodape ul { list-style: none; margin: 0; padding: 0; }
.rodape li { margin-bottom: 6px; }
.rodape a { text-decoration-thickness: 1px; text-underline-offset: 3px; }
.rodape .nota { color: var(--tinta-3); font-size: .92rem; max-width: 44ch; }
.rodape .cuidado {
  margin-top: clamp(30px, 5vw, 50px);
  border-left: 3px solid var(--acento);
  padding-left: 18px; max-width: 72ch; color: var(--tinta-2); font-size: .98rem;
}
.rodape .assinatura { margin-top: clamp(26px, 4vw, 40px); color: var(--tinta-3); font-size: .88rem; }

/* ---------------------------------------------------------------------------
   17. PÁGINAS INTERNAS · mesma língua, ritmo contido
--------------------------------------------------------------------------- */
.hero-int { padding: clamp(150px, 22vh, 220px) 0 clamp(50px, 8vw, 90px); position: relative; overflow: clip; }
.hero-int h1 { font-size: var(--t2); letter-spacing: var(--t2-tr); line-height: var(--t2-lh); max-width: 18ch; }
.hero-int h1 .ln { display: block; overflow: clip; }
.hero-int .dek { font-size: clamp(1.02rem, 1.5vw, 1.25rem); max-width: 52ch; color: var(--tinta-2); }
.hero-int .vm { display: inline-block; margin-bottom: 16px; }
.regua-curta { border: 0; height: 2px; width: 72px; background: var(--acento); margin: clamp(26px, 4vw, 40px) 0 0; }

.secao { padding: clamp(46px, 7vw, 90px) 0; border-top: 1px solid var(--linha); }
.secao:first-of-type { border-top: 0; }
.secao h2 { font-size: var(--t4); letter-spacing: var(--t4-tr); line-height: var(--t4-lh); max-width: 22ch; }
.secao h3 { font-size: var(--t6); letter-spacing: var(--t6-tr); line-height: var(--t6-lh); margin-top: 1.6em; }
.prosa { max-width: 68ch; }
.prosa p { color: var(--tinta-2); }
.prosa strong { color: var(--tinta); }

.cartao-g {
  border-radius: var(--raio-cartao); padding: clamp(26px, 4.5vw, 60px);
  position: relative; overflow: clip;
}
.cartao-g.g-tinta { background: var(--tinta-sup); color: var(--tinta-inv); }
.cartao-g.g-tinta .prosa p, .cartao-g.g-tinta p { color: var(--tinta-inv-2); }
.cartao-g.g-tinta h2 { color: var(--tinta-inv); }
.cartao-g.g-acento { background: var(--acento); color: var(--acento-tinta); }
.cartao-g.g-acento .prosa p, .cartao-g.g-acento p { color: var(--acento-tinta); }
.cartao-g.g-acento a { color: var(--acento-tinta); }
.cartao-g .vm { opacity: .8; }

.definicoes { margin: clamp(20px, 3vw, 34px) 0 0; }
.definicoes > div { padding: clamp(16px, 2.4vw, 24px) 0; border-top: 1px solid var(--linha); display: grid; grid-template-columns: minmax(140px, 220px) 1fr; gap: clamp(12px, 3vw, 40px); }
.cartao-g .definicoes > div { border-color: color-mix(in srgb, currentColor 22%, transparent); }
.definicoes dt { font-family: var(--disp); font-weight: 600; font-size: 1.02rem; }
.definicoes dd { margin: 0; color: var(--tinta-2); }
.cartao-g.g-tinta .definicoes dd { color: var(--tinta-inv-2); }
.cartao-g.g-acento .definicoes dd { color: var(--acento-tinta); }
@media (max-width: 640px) { .definicoes > div { grid-template-columns: 1fr; gap: 6px; } }

.fichas { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(230px, 100%), 1fr)); gap: 14px; }
.fichas > div {
  border: 1px solid var(--linha); border-top: 1px solid var(--linha);
  background: var(--clara); border-radius: 14px;
  padding: clamp(16px, 2.4vw, 24px); display: block;
}
.fichas dt { margin-bottom: 8px; }
.fichas dd { font-size: .96rem; }

.lista-regua { list-style: none; margin: 12px 0 0; padding: 0; max-width: 68ch; }
.lista-regua li { padding: 12px 0 12px 26px; border-top: 1px solid var(--linha); position: relative; color: var(--tinta-2); }
.lista-regua li::before { content: ''; position: absolute; left: 2px; top: 1.35em; width: 12px; height: 2px; background: var(--acento); }
.cartao-g.g-tinta .lista-regua li { border-color: var(--linha-inv); color: var(--tinta-inv-2); }

/* FAQ nativo: <details>, funciona sem JS */
.faq { max-width: 76ch; }
.faq details { border-top: 1px solid var(--linha); }
.faq details:last-child { border-bottom: 1px solid var(--linha); }
.faq summary {
  cursor: pointer; list-style: none;
  display: flex; justify-content: space-between; align-items: baseline; gap: 20px;
  padding: clamp(16px, 2.6vw, 24px) 0;
  font-family: var(--disp); font-weight: 500;
  font-size: clamp(1.05rem, 1.8vw, 1.4rem); letter-spacing: -.01em;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after {
  content: '+'; font-weight: 400; font-size: 1.4em; line-height: 1;
  color: var(--acento-texto); transition: rotate .3s var(--mola); flex: none;
}
.faq details[open] summary::after { rotate: 45deg; }
.faq .faq-r { padding: 0 0 clamp(16px, 2.6vw, 24px); color: var(--tinta-2); max-width: 64ch; }

/* tabela quem pode o quê */
.tabela-rolante { overflow-x: auto; margin-top: clamp(18px, 3vw, 30px); border: 1px solid var(--linha); border-radius: 14px; background: var(--clara); }
.tabela-rolante table { border-collapse: collapse; width: 100%; min-width: 760px; font-size: .95rem; }
.tabela-rolante th, .tabela-rolante td { text-align: left; padding: 13px 16px; border-bottom: 1px solid var(--linha); vertical-align: top; }
.tabela-rolante thead th { font-family: var(--larga); font-weight: 600; font-size: .74rem; letter-spacing: .11em; text-transform: uppercase; color: var(--tinta-3); }
.tabela-rolante tbody th { font-weight: 500; font-family: var(--disp); }
.tabela-rolante tbody tr:last-child th, .tabela-rolante tbody tr:last-child td { border-bottom: 0; }
.tabela-rolante tr:has(strong) { background: var(--acento-fraco); }
.tabela-rolante tr:has(strong) td, .tabela-rolante tr:has(strong) th { color: var(--tinta); }

/* mosaico de perfis (para-quem-e) e canais (contato) */
.mosaico { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(14px, 2.4vw, 26px); }
@media (max-width: 820px) { .mosaico { grid-template-columns: 1fr; } }
.perfil-cartao {
  background: var(--clara); border: 1px solid var(--linha);
  border-radius: var(--raio-cartao); padding: clamp(22px, 3.4vw, 40px);
  position: relative; overflow: clip;
}
.perfil-cartao h2 { font-size: var(--t4); letter-spacing: var(--t4-tr); line-height: var(--t4-lh); margin-top: 14px; }
.perfil-cartao p { color: var(--tinta-2); font-size: .99rem; }
.perfil-cartao.p-tinta { background: var(--tinta-sup); border-color: var(--linha-inv); color: var(--tinta-inv); }
.perfil-cartao.p-tinta p { color: var(--tinta-inv-2); }
.perfil-cartao .nota-idade { font-size: .88rem; border-top: 1px dashed var(--linha); padding-top: 14px; margin-top: 18px; }
.perfil-cartao.p-tinta .nota-idade { border-color: var(--linha-inv); }
.perfil-cartao .fantasma { font-size: clamp(9rem, 20vw, 16rem); right: -4%; bottom: -.22em; }

.canais { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(14px, 2.4vw, 26px); }
@media (max-width: 720px) { .canais { grid-template-columns: 1fr; } }
.canal-cartao {
  border: 1px solid var(--linha); background: var(--clara);
  border-radius: 18px; padding: clamp(20px, 3vw, 32px);
  display: flex; flex-direction: column; gap: 12px; justify-content: space-between;
  min-height: 150px;
  transition: transform .4s var(--mola), border-color .3s;
}
.canal-cartao:hover { transform: translateY(-4px); border-color: var(--linha-forte); }
.canal-cartao.destaque { grid-column: 1 / -1; background: var(--tinta-sup); border-color: var(--linha-inv); color: var(--tinta-inv); }
.canal-cartao .endereco { margin: 0; font-family: var(--disp); font-weight: 500; font-size: clamp(1.1rem, 2.6vw, 1.7rem); letter-spacing: -.01em; overflow-wrap: anywhere; }
.canal-cartao .endereco a { text-decoration: none; }
.canal-cartao .endereco a:hover { text-decoration: underline; text-underline-offset: 4px; }
.canal-cartao.destaque .endereco { font-size: clamp(1.4rem, 3.6vw, 2.6rem); }

/* estado (lista) */
.estado-display {
  display: flex; flex-direction: column; gap: 8px; align-items: flex-start;
  background: var(--tinta-sup); color: var(--tinta-inv);
  border-radius: var(--raio-cartao); padding: clamp(26px, 4.5vw, 56px);
  margin: clamp(20px, 3vw, 34px) 0;
  position: relative; overflow: clip;
}
.estado-display .marcha {
  font-family: var(--disp); font-weight: 500;
  font-size: clamp(2rem, 5.4vw, 4.4rem); letter-spacing: -.03em; line-height: 1;
}
.estado-display .vm { color: var(--tinta-inv-2); }

/* erro 404 */
.erro { min-height: 72svh; display: flex; flex-direction: column; justify-content: center; align-items: flex-start; padding-top: 140px; padding-bottom: 80px; position: relative; overflow: clip; }
.erro h1 { font-size: var(--t2); letter-spacing: var(--t2-tr); line-height: var(--t2-lh); max-width: 14ch; }
.erro p { color: var(--tinta-2); max-width: 44ch; }
.erro .selo-grande { position: absolute; right: -2%; top: 50%; translate: 0 -50%; width: clamp(120px, 22vw, 300px); opacity: .1; pointer-events: none; }
.erro .selo-grande svg { width: 100%; height: auto; color: var(--tinta); }
.erro .botao { margin-top: 22px; }

/* convite interno */
.convite-int { border-radius: var(--raio-cartao); background: var(--acento); color: var(--acento-tinta); padding: clamp(30px, 5vw, 64px); margin: clamp(46px, 7vw, 90px) 0 0; }
.convite-int h2 { font-size: var(--t3); letter-spacing: var(--t3-tr); line-height: var(--t3-lh); max-width: 18ch; }
.convite-int p { color: var(--acento-tinta); max-width: 50ch; }
/* mesmo conserto do botão do convite grande: acento, não acento-texto */
.convite-int .botao { background: var(--acento-tinta); color: var(--acento); border-color: var(--acento-tinta); margin-top: 18px; }

/* ---------------------------------------------------------------------------
   18. MOVIMENTO · tudo aqui é progressivo. Sem JS: nada disto arma.
--------------------------------------------------------------------------- */
html.js.movel .rev { opacity: 0; transform: translateY(26px); }
html.js.movel .rev.on { opacity: 1; transform: none; transition: opacity .8s var(--mola), transform .9s var(--mola); transition-delay: var(--atraso, 0s); }
html.js.movel .hero h1 .pal { opacity: 0; transform: translateY(105%); }
html.js.movel .hero h1 .pal.on, html.js.movel .hero-int h1 .pal.on { opacity: 1; transform: none; transition: opacity .7s var(--mola), transform .85s var(--mola); transition-delay: calc(var(--i, 0) * 55ms); }
html.js.movel .hero-int h1 .pal { opacity: 0; transform: translateY(105%); display: inline-block; }

/* reduced motion: mata marquee, parallax e qualquer resto */
@media (prefers-reduced-motion: reduce) {
  html.js .fita, html .fita { animation: none !important; }
  *, *::before, *::after { transition-duration: .01ms !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; }
}

/* impressão: papel de verdade */
@media print {
  .topo, .hud, .rail, .fita-caixa, .organismo canvas { display: none !important; }
  body::after { display: none; }
}

/* ---------------------------------------------------------------------------
   19. ALVO DE TOQUE  ·  WCAG 2.2 · 2.5.8 Target Size (Minimum), AA, 24x24
       e 2.5.5 Target Size (Enhanced), AAA, 44x44

   Medido nesta bancada em 2026-08-23, 49 combinações de largura por página:
   os endereços de e-mail mediam 21 a 22px de altura, o que REPROVA no AA
   obrigatório; a navegação do topo, a marca e os links do rodapé passavam no
   AA e ficavam abaixo dos 44px recomendados.

   O gesto é sempre o mesmo: a caixa de toque cresce e o texto NÃO sai do
   lugar. Em elemento inline o respiro vertical não entra na caixa de linha,
   então é de graça. Em elemento de bloco o respiro é devolvido por margem
   negativa de igual valor, então o desenho não se mexe um pixel.

   Por que só até 900px: no desktop a mesma regra encostaria alvo em alvo no
   rodapé, e alvo sobreposto engana mais o dedo do que alvo pequeno. Acima
   disso todos já cumprem o AA de 24px e o ponteiro é o mouse.
--------------------------------------------------------------------------- */
@media (max-width: 900px) {
  /* rodapé: links empilhados. O respiro cresce o alvo sem mexer no layout,
     e o passo entre as linhas cresce junto, senão um alvo invadiria o de cima */
  .rodape li a { padding-block: 9.5px; }
  .rodape li { margin-bottom: 18px; }

  /* contato: os endereços de e-mail, que eram a reprovação de verdade.
     São inline, então a altura do cartão não muda */
  .canal-cartao .endereco a { padding-block: 11px; }

  /* e-mail dentro de frase corrida. A norma dispensa pela exceção Inline
     do 2.5.8 (alvo dentro de sentença, tamanho preso à entrelinha do texto
     que não é alvo), mas aqui o conserto não custa nada, então está feito */
  .perfil-cartao .nota-idade a,
  .convite-int p a[href^="mailto:"] { padding-block: 13px; }
}

@media (max-width: 760px) {
  /* topo: barra fixa, onde altura é patrimônio, ainda mais em paisagem 360px.
     Respiro cresce o alvo até 44px, margem negativa devolve o espaço, a barra
     continua com os mesmos 57,4px e a sublinha do estado ativo é recompensada */
  .topo nav a { padding-block: 13.5px; margin-block: -5.5px; }
  .topo nav a::after { bottom: 11.5px; }

  /* a marca vira só o par de colchetes aqui, 23x30, e 23 de largura reprova
     no AA de 24. Cresce para 44x44, com a folga maior indo para a esquerda,
     que é a margem da página e não tem vizinho, nunca para a direita, onde a
     320px sobram só 10px até o primeiro link da navegação */
  .marca { padding: 7px 3px 7px 18px; margin: -7px -3px -7px -18px; }
}
