/* Psicanalista Luciana Lima — psicanálise de orientação clássica, online
   ==================================================================

   A folha única do site, como as do laborclin e da Marina: uma página, uma
   folha, e o comentário explica o porquê e não o quê.

   O registro visual é o do cadastro dela (empresas.registro_visual =
   'terapeutico'): "muito ar, tons dessaturados, tipografia leve — o silêncio
   como composição". A paleta é a do Brand Kit dela ('acolhida' no briefing):
   verde #1F4B3E, linho #F5F0E8, água #4CAF93. A dupla tipográfica é a
   'Brando' (Lora display + Nunito texto), a mesma dos doc_json dos posts
   110–115 — quem vê o feed dela e chega aqui vê a mesma marca.

   ── A virada de 22/09/2026 ────────────────────────────────────────────
   Paleta, dupla tipográfica e as três regras do registro continuam de pé; a
   FORMA mudou inteira, porque a anterior era chrome de template: cartão
   arredondado, pílula, barra de vidro, ícone grande em cada item e um texto
   estreito encostado à esquerda com meia tela vazia do lado. No lugar disso,
   a gramática editorial que o acervo descreve para serviço por hora marcada
   e para grade de agência:

   - **uma grade de 12 colunas de verdade.** O chapéu de cada seção mora nas
     colunas 1–3 e o assunto nas 5–12. É isso que faz a página parecer
     composta e não empilhada — e é isso que ocupa a metade direita que antes
     ficava vazia.
   - **fio de cabelo no lugar de caixa.** Nada de borda em volta, sombra nem
     fundo de cartão: o que separa é uma linha de 1px e o ar em volta dela.
   - **raio quase zero.** 2px no botão, 0 no resto. Arredondado é o sotaque
     de template que a página estava falando.
   - **a foto não fala.** Nenhuma imagem leva texto por cima; quem escreve
     escreve sobre cor chapada. (Foi o que substituiu a prova do véu do
     herói, que deixou de existir junto com a foto dela.)
   - **sem foto dela, por ora** (decisão do Escobar, 22/09). As de banco
     ficam — nenhuma tem rosto.

   ── A emenda da mesma noite ───────────────────────────────────
   Sem a foto dela, a abertura tinha virado tipografia pura — e o Escobar
   devolveu duas coisas: "o herói está muito estranho" e "no começo não pode
   ser SÓ texto". A resposta não foi desfazer a virada: a abertura ganhou
   DUAS COLUNAS, com a foto das mãos em pé ao lado do texto (o recorte
   `maos-alto`, 4:5), e a banda larga que vinha logo abaixo saiu — a mesma
   foto duas vezes seguidas era repetição, não respiro. O que a foto não pode
   fazer continua valendo: ela não leva palavra por cima, e não é foto dela.

   E o que estava "bugado no cabeçalho" não era margem nem padding: era o
   sprite dos ícones desenhando 300×150 em branco no alto do <body>. Está
   explicado na regra `svg[hidden]`, lá embaixo.

   ── E a segunda emenda, no fim do mesmo dia ────────────────────────
   Duas coisas, das mesmas mãos:

   - **a rota** (`.rota`, mais abaixo). Ela mora nos EUA e atende dos dois
     lados, e isso vivia só numa linha da lista de fatos. Agora são duas
     bandeiras de TRAÇO com um fio que se desenha entre elas, fechando a
     coluna de texto do herói.
   - **mais duas fotos** (`ramos` e `cortina`), e as duas por temperatura:
     "as fotos no geral estão meio melancólicas demais". O assunto delas é a
     luz que entra num lugar — sem pessoa, como manda o CREDITS.

   As três regras que vieram dos templates dela e não se quebram:

   1. **A água nunca escreve sobre o linho.** #4CAF93 sobre #F5F0E8 dá 2,4:1.
      A água é traço, círculo vazado e fio; quem escreve em cor de acento é a
      --agua-texto (5,3:1).
   2. **A numeração é PERCURSO, não protocolo.** Círculo vazado, fio fino
      ligando — é um caminho que passa, não uma sequência que prende. Um
      processo terapêutico não tem etapa obrigatória.
   3. **O ar é o assunto.** Nada aqui compete com a palavra.

   Nunca preto, nunca cinza puro: a sombra e o traço são o verde em alpha. */

/* ── Fontes ─────────────────────────────────────────────────────────────
   Self-hosted, copiadas de social/assets/fonts. A folha do Google bloquearia
   o render e só descobriria os woff2 depois — mesmo motivo do landing.css.
   Lora tem 400–700, Nunito 200–1000; nenhuma das duas tem itálico no
   repositório (src/typography/fonts.js), então o CSS nunca pede itálico. */
@font-face {
  font-family: 'Lora';
  src: url(../fontes/lora.woff2) format('woff2');
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
  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: 'Nunito';
  src: url(../fontes/nunito.woff2) format('woff2');
  font-weight: 200 1000;
  font-style: normal;
  font-display: swap;
  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;
}

/* ── Tokens ─────────────────────────────────────────────────────────────
   Contraste WCAG calculado e escrito ao lado de cada par que carrega texto.
   O provar.js recalcula todos eles a cada rodada — se um token mudar de mão,
   a prova cai. */
:root {
  --linho: #F5F0E8;      /* o papel do body — o `claro` do Brand Kit           */
  --linho-2: #FBF8F3;    /* seção clara. Verde por cima: 9,3:1                 */
  --linho-3: #EDE6DA;    /* reservado: tom intermediário do papel              */

  --verde: #1F4B3E;      /* o `escuro` do Brand Kit. 8,7:1 sobre o linho       */
  --verde-2: #4F5E57;    /* parágrafo. 6,0:1 sobre o linho                     */
  --verde-traco: rgba(31, 75, 62, .16);   /* o fio de cabelo que separa tudo   */

  --agua: #4CAF93;       /* o `acento`. 2,4:1 sobre o linho: NUNCA texto.
                            Só traço, círculo vazado e fio.                    */
  --agua-texto: #2C6E5C; /* 5,3:1 sobre o linho — o chapéu e o link            */
  --agua-clara: #A8DCC9; /* 6,4:1 sobre o verde — o chapéu no fundo escuro     */

  --sobre-verde: #F5F0E8;      /* texto no fundo escuro: 8,7:1                 */
  --sobre-verde-2: #C9E6DA;    /* parágrafo no fundo escuro: 7,4:1             */
  --traco-claro: rgba(168, 220, 201, .32);  /* o fio de cabelo no escuro       */

  --foco: #2C6E5C;

  --e1: 4px;  --e2: 8px;  --e3: 12px; --e4: 16px; --e5: 20px;
  --e6: 24px; --e7: 32px; --e8: 40px; --e9: 64px; --e10: 96px;

  /* Raio quase zero: o botão ganha 2px só para não ficar cortante, e o resto
     da página não tem canto redondo nenhum. Arredondar cartão e foto era o
     que fazia a página soar template. */
  --r-m: 2px;

  --margem: var(--e5);
  --secao: 88px;
  --coluna: 1240px;
  --vao: var(--e6);      /* a calha entre as 12 colunas                        */
  --topo-ancora: 84px;   /* a barra grudada não pode comer o título da âncora  */

  --f-display: 'Lora', Georgia, 'Times New Roman', serif;
  --f-texto: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --curva: cubic-bezier(.2, .7, .3, 1);

  /* Sem isto, um telefone no modo escuro entrega os controles nativos em
     preto no meio de uma página de papel. */
  color-scheme: light;
  accent-color: var(--agua-texto);
}

/* ── Base ─────────────────────────────────────────────────────────────── */
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--linho);
  color: var(--verde);
  font-family: var(--f-texto);
  font-size: 17px;
  font-weight: 400;
  line-height: 1.7;
  overflow-wrap: break-word;
  -webkit-font-smoothing: antialiased;
  padding-bottom: 80px;   /* o espaço da barra do pé; sai em ≥900px */
}

img { max-width: 100%; display: block; }

/* O sprite dos ícones é declaração, não desenho — e o `hidden` do HTML não
   basta para escondê-lo: a regra `[hidden] { display: none }` da folha do
   navegador vale para elementos HTML, e o `<svg>` é de outro namespace. Sem
   esta linha ele nasce com os 300×150 que é o tamanho padrão de um SVG sem
   medida — uma banda em branco de 150px empurrando a barra do topo para
   baixo, que foi exatamente o defeito relatado em 22/09/2026. O `marina.css`
   já trazia esta linha, com o mesmo comentário; esta folha nasceu sem ela. */
svg[hidden] { display: none; }
p { margin: 0; }
dl, dd { margin: 0; }
h1, h2, h3 { margin: 0; font-family: var(--f-display); font-weight: 500; }
ul, ol { margin: 0; padding: 0; list-style: none; }

a { color: var(--agua-texto); }
a:focus-visible, button:focus-visible {
  outline: 3px solid var(--foco); outline-offset: 3px; border-radius: var(--r-m);
}
/* A barra do topo é grudada: sem isto, pular para uma âncora deixa o título
   debaixo dela. */
section[id], main[id] { scroll-margin-top: var(--topo-ancora); }

.coluna { width: min(var(--coluna), 100% - var(--margem) * 2); margin-inline: auto; }

.pular {
  position: absolute; left: -9999px; top: 0; z-index: 60;
  background: var(--verde); color: var(--linho);
  padding: var(--e3) var(--e5); text-decoration: none;
}
.pular:focus { left: 0; }

/* O único ícone que sobrou é o do botão: os grandes, um em cada item de
   lista, pesavam mais que a palavra — e neste registro nada pesa mais que a
   palavra. O sprite continua inteiro, para quem precisar depois. */
.ic { width: 19px; height: 19px; flex: none; color: currentColor; }

/* ── A barra do topo ───────────────────────────────────────────────────
   Linho chapado e um fio embaixo. O vidro borrado saiu: efeito de vidro é
   exatamente o que esta gramática não tem. */
.barra {
  position: sticky; top: 0; z-index: 30;
  background: var(--linho);
  border-bottom: 1px solid var(--verde-traco);
}
.barra-in { display: flex; align-items: center; gap: var(--e6); min-height: 68px; }
/* min-height de 44: a marca também é um alvo de dedo, e a régua da casa não
   abre exceção para quem é só logotipo em texto. */
.marca {
  display: grid; align-content: center; min-height: 44px;
  text-decoration: none; color: var(--verde); margin-right: auto;
}
.marca strong { font-family: var(--f-display); font-size: 20px; font-weight: 500; line-height: 1.2; }
.marca small {
  /* 12px é o piso da régua de mobile da casa (scripts/mobile/shot.js): abaixo
     disso o medidor marca LETRA-MIUDA, e com razão. */
  font-size: 12px; font-weight: 600; line-height: 1.4;
  letter-spacing: .18em; text-transform: uppercase; color: var(--agua-texto);
}
.barra-links { display: none; gap: var(--e7); }
.barra-links a {
  display: inline-flex; align-items: center; min-height: 44px;
  color: var(--verde-2); text-decoration: none;
  font-size: 12px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  border-bottom: 1px solid transparent;
}
.barra-links a:hover { color: var(--verde); border-bottom-color: var(--agua); }
/* No celular a barra do polegar já oferece o WhatsApp; repetir aqui só
   abarrota o topo. O seletor tem dois nomes porque o `.btn` vem depois nesta
   folha e, com a mesma especificidade, quem vem depois ganha. */
.barra-in .barra-acao { display: none; }

/* ── O botão ───────────────────────────────────────────────────────────
   Retângulo. A pílula era o sotaque mais alto da página anterior; aqui o
   convite se destaca por peso e por cor cheia, não por forma. */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--e2);
  min-height: 54px; padding: 0 var(--e6);
  border-radius: var(--r-m); border: 1px solid transparent;
  background: var(--verde); color: var(--linho);
  font-family: var(--f-texto); font-size: 15px; font-weight: 700; line-height: 1.2;
  letter-spacing: .01em;
  text-decoration: none; text-align: center;
  transition: background-color .18s var(--curva), border-color .18s var(--curva), transform .18s var(--curva);
}
.btn:hover { background: #17392F; }
.btn:active { transform: translateY(1px); }
.btn-vazado { background: transparent; color: var(--verde); border-color: var(--verde-traco); }
.btn-vazado:hover { background: transparent; border-color: var(--verde); }
.btn-claro { background: var(--linho); color: var(--verde); }
.btn-claro:hover { background: #FFFFFF; }
.btn-vazado-claro { background: transparent; color: var(--sobre-verde); border-color: var(--traco-claro); }
.btn-vazado-claro:hover { background: transparent; border-color: var(--agua-clara); }
.btn-pequeno { min-height: 46px; padding: 0 var(--e5); font-size: 14px; }

.botoes { display: flex; flex-wrap: wrap; gap: var(--e3); margin-top: var(--e7); }

/* ── O chapéu e os títulos ─────────────────────────────────────────────
   O chapéu é a assinatura tipográfica do registro: Nunito 700 em caixa alta
   com .2em de espaço entre letras. Na peça ele é da cor do acento; aqui, da
   --agua-texto, porque aqui ele é TEXTO e precisa passar no AA. */
.chapeu {
  font-size: 12px; font-weight: 700; line-height: 1.5;
  letter-spacing: .2em; text-transform: uppercase; color: var(--agua-texto);
  margin: 0 0 var(--e5);
}
.chapeu-claro { color: var(--agua-clara); }
.chapeu-2 { margin-top: var(--e10); }

/* Tracking negativo cresce com o corpo: o que assenta uma serifa a 54px
   aperta demais uma a 20px. */
.titulo {
  font-size: clamp(30px, 4.6vw, 52px); line-height: 1.15; letter-spacing: -.015em;
  margin: 0 0 var(--e6);
}
.titulo-pequeno { font-size: clamp(24px, 3vw, 32px); letter-spacing: -.01em; }
.titulo-claro { color: var(--sobre-verde); }

.corpo { font-size: 17px; line-height: 1.75; color: var(--verde-2); max-width: 62ch; }
.corpo + .corpo { margin-top: var(--e5); }
.corpo-claro { color: var(--sobre-verde-2); }

.secao { padding-block: var(--secao); }
.secao-clara { background: var(--linho-2); }
.secao-escura { background: var(--verde); color: var(--sobre-verde); }
.secao-escura .titulo { color: var(--sobre-verde); }
.secao-curta { padding-block: calc(var(--secao) * .62); }

/* ── A cabeça de seção ─────────────────────────────────────────────────
   O padrão que dá ritmo à página inteira: um fio de cabelo em cima, o chapéu
   na coluna estreita da esquerda e o assunto nas colunas largas da direita.
   No celular tudo empilha e o fio continua. */
.cabeca { border-top: 1px solid var(--verde-traco); padding-top: var(--e6); }
.cabeca-clara { border-top-color: var(--traco-claro); }

/* ── A abertura ──────────────────────────────────────────
   Duas colunas: o que ela diz à esquerda, a foto das mãos em pé à direita.

   A versão tipográfica pura durou algumas horas: "no começo não pode ser SÓ
   texto" (Escobar, 22/09/2026). O que a foto não pode fazer continua valendo — ela
   não leva palavra por cima e não é foto dela. É coluna, ao lado.

   No celular, a pilha: texto, foto, fio, fatos. */
.secao-abre { padding-top: var(--e9); padding-bottom: var(--e8); }
.abre h1 {
  font-size: clamp(42px, 7vw, 76px); line-height: 1.04; font-weight: 400;
  letter-spacing: -.028em; margin: 0;
}
.abre-linha {
  margin-top: var(--e5);
  font-size: 17px; line-height: 1.6; color: var(--verde-2); max-width: 34ch;
}
.abre-corpo { margin-top: var(--e5); font-size: 18px; }

/* A imagem é absoluta dentro da figura para a figura não ter altura própria:
   assim, na grade, ela estica até a altura da pilha de texto ao lado. No
   celular não há o que esticar, e aí quem manda é o `aspect-ratio`. */
.abre-foto {
  position: relative; margin: var(--e8) 0 0;
  aspect-ratio: 4 / 5; max-height: 58vh; overflow: hidden;
}
.abre-foto img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
  /* O retrato: quando a coluna corta (no celular, pelo max-height), corta
     embaixo e não na testa. */
  object-position: 50% 20%; }

/* A rota Brasil–Estados Unidos. O fio entre as duas bandeiras se desenha uma
   vez, com a mesma ideia do percurso: --rota vai de 0 a 1, o estado FINAL é o
   padrão (fallback 1) e o pré-estado só existe sob html[data-luz]. Água aqui
   é fundo de 1px, nunca texto — quem escreve é a --agua-texto. */
.rota { margin-top: var(--e8); }
.rota-marca { display: flex; align-items: center; gap: var(--e4); color: var(--verde-2); }
.rota-bandeira { width: 34px; height: 34px; flex: none; }
.rota-fio { position: relative; flex: 1 1 auto; height: 1px; background: var(--verde-traco); }
.rota-fio i { position: absolute; left: 0; top: 0; bottom: 0; width: calc(var(--rota, 1) * 100%); background: var(--agua); }
.rota-texto {
  margin-top: var(--e4);
  font-size: 12px; font-weight: 700; line-height: 1.5;
  letter-spacing: .18em; text-transform: uppercase; color: var(--agua-texto);
}

.abre-pe { margin-top: var(--e9); border-top: 1px solid var(--verde-traco); padding-top: var(--e7); }

/* Os fatos do cadastro como lista de metadados: rótulo em serifa, valor em
   texto miúdo, um fio entre cada um. Era a faixa de três ícones — e ícone de
   monitor ao lado da palavra "Online" não acrescenta informação nenhuma. */
.fatos { display: grid; }
.fatos > div { padding-block: var(--e5); border-top: 1px solid var(--verde-traco); }
.fatos > div:first-child { border-top: 0; padding-top: 0; }
.fatos dt { font-family: var(--f-display); font-size: 19px; line-height: 1.3; color: var(--verde); }
.fatos dd { margin-top: var(--e1); font-size: 15px; line-height: 1.65; color: var(--verde-2); max-width: 52ch; }

/* ── O percurso ────────────────────────────────────────────────────────
   Círculo VAZADO e fio fino, como no 'travessia' dela. O que mudou: cada
   parada virou uma linha da grade, com um fio de cabelo em cima, título à
   esquerda e explicação à direita — índice, não cartão.

   O fio tem duas camadas: a apagada (o caminho todo) e a andada (--andado,
   de 0 a 1), que o JS escreve ao rolar. Sem JS, --andado fica em 1 e o
   caminho nasce inteiro — o estado final é o padrão. */
.percurso { position: relative; margin-top: var(--e9); padding-left: 62px; }
.parada { position: relative; padding-block: var(--e6); border-top: 1px solid var(--verde-traco); }
.marcador {
  position: absolute; left: -62px; top: var(--e6);
  width: 44px; height: 44px; display: grid; place-items: center;
  border: 1px solid var(--agua); border-radius: 50%;
  background: var(--linho);
  font-family: var(--f-display); font-size: 16px; color: var(--agua-texto);
}
/* O marcador tem fundo opaco porque o fio passa POR TRÁS dele: o círculo é
   vazado, mas o fio não pode aparecer no meio do número. */
.secao-clara .marcador { background: var(--linho-2); }
.secao-escura .marcador { background: var(--verde); border-color: var(--agua-clara); color: var(--agua-clara); }
.parada h3 { font-size: 21px; line-height: 1.3; letter-spacing: -.01em; }
.parada p { margin-top: var(--e2); font-size: 16px; line-height: 1.7; color: var(--verde-2); max-width: 56ch; }

.fio {
  position: absolute; left: 22px; top: calc(var(--e6) + 44px); bottom: 0; width: 1px;
  background: rgba(76, 175, 147, .30);
  /* "O último sem fio": o caminho não continua depois da última parada. Como
     a altura da última varia com o texto, o fim não é uma medida — é um
     esmaecimento. E cai bem no que o percurso quer dizer: é um caminho que
     passa, não uma sequência que fecha.
     Máscara não pinta: só o alfa da parada conta, e por isso ela usa a cor
     do próprio fio — a folha não tem preto puro, e isso é régua. */
  -webkit-mask-image: linear-gradient(to bottom, var(--agua) 72%, transparent 100%);
  mask-image: linear-gradient(to bottom, var(--agua) 72%, transparent 100%);
}
.fio-andado {
  position: absolute; inset: 0 0 auto 0; height: calc(var(--andado, 1) * 100%);
  background: var(--agua); transform-origin: top;
}

/* ── Os temas (fundo escuro) ───────────────────────────────────────────
   Mesma gramática de índice: fio em cima, nome do assunto à esquerda, o que
   ele quer dizer à direita. Cinco itens numa grade de duas colunas ficavam
   com um buraco no canto; em linha, não ficam. */
.temas { margin-top: var(--e8); }
.temas li { padding-block: var(--e6); border-top: 1px solid var(--traco-claro); }
.temas h3 { font-size: 21px; line-height: 1.3; letter-spacing: -.01em; color: var(--sobre-verde); }
.temas p { margin-top: var(--e2); font-size: 16px; line-height: 1.7; color: var(--sobre-verde-2); max-width: 56ch; }

.nota-clara {
  margin-top: var(--e8); padding-top: var(--e6);
  border-top: 1px solid var(--traco-claro);
  font-family: var(--f-display); font-size: clamp(19px, 2.2vw, 23px); line-height: 1.5;
  color: var(--sobre-verde); max-width: 48ch;
}

/* ── As bandas de foto ─────────────────────────────────────────────────
   Sem legenda e sem texto por cima: é respiro, e no registro terapêutico o
   respiro é conteúdo. Há uma prova para isso — nenhum texto da página pousa
   sobre imagem. */
.banda { margin: 0; position: relative; isolation: isolate; }
.banda img { width: 100%; height: clamp(210px, 34vw, 400px); object-fit: cover; }
/* A planície é preto e branco de origem: o multiply de verde a traz para a
   paleta sem mexer no que a foto mostra. */
.banda-tingida::after {
  content: ''; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: var(--verde); opacity: .26; mix-blend-mode: multiply;
}

/* ── A citação ─────────────────────────────────────────────────────────
   O texto é dela, palavra por palavra, do cadastro. Ganha o corpo maior e a
   serifa porque é fala, não copy da casa. A barra de água à esquerda saiu: o
   tamanho já diz que aquilo é citação. */
.citacao {
  margin: var(--e8) 0 0;
  font-family: var(--f-display);
  font-size: clamp(21px, 2.9vw, 30px); line-height: 1.45; letter-spacing: -.012em;
  color: var(--verde); max-width: 26ch;
}
/* A fala e a luz. No celular, a fala e depois a foto; na grade, a foto ocupa
   a metade esquerda que a citação deixava vazia. A colocação é explícita
   (grid-row: 1 nas duas) porque a ordem do HTML é a do celular, e não a do
   desenho. */
.fala-foto { margin: var(--e7) 0 0; width: 100%; }
.fala-foto img { width: 100%; height: auto; }

.fecho { margin-top: var(--e9); padding-top: var(--e6); border-top: 1px solid var(--verde-traco); }

/* ── A história (23/09/2026) ───────────────────────────────────────────
   Duas partes com a virada no meio. A figura tem largura DEFINIDA: em
   coluna `auto` de grade, uma foto lazy encolhe ao min-content antes de
   chegar. Canto reto — a foto é bloco de composição, não cartão.

   No celular a coluna de texto se DESFAZ (`display: contents`) para a foto
   poder entrar entre o título e os capítulos: antes dela, o rosto chegava
   no fim de sete parágrafos; antes do título, abria a seção sem dizer do
   que ela é. */
.historia-grade { display: grid; }
.historia:not(.historia-2) .historia-grade { border-top: 1px solid var(--verde-traco); padding-top: var(--e7); }
.historia-texto { display: contents; }
.historia-texto > * { order: 2; }
.historia-texto > .chapeu, .historia-texto > .titulo { order: 0; }
.historia-foto { order: 1; margin: var(--e4) 0 0; width: 100%; }
.historia-2 .historia-foto { margin-top: 0; }
.historia-foto img { width: 100%; height: auto; }

/* Os capítulos: a gramática do percurso sem número — círculo vazado e um
   fio que esmaece, porque a história continua depois da página. */
.capitulos { position: relative; margin-top: var(--e8); padding-left: 36px; }
.capitulos::before {
  content: ''; position: absolute; left: 6px; top: 12px; bottom: 0; width: 1px;
  background: rgba(76, 175, 147, .45);
  -webkit-mask-image: linear-gradient(to bottom, var(--agua) 80%, transparent 100%);
  mask-image: linear-gradient(to bottom, var(--agua) 80%, transparent 100%);
}
.capitulos li { position: relative; }
.capitulos li + li { margin-top: var(--e8); }
.capitulos li::before {
  content: ''; position: absolute; left: -36px; top: 6px; width: 13px; height: 13px;
  border: 1px solid var(--agua); border-radius: 50%; background: var(--linho-2);
}
.capitulos h3 { font-size: 21px; line-height: 1.3; letter-spacing: -.01em; color: var(--verde); }
.capitulos p { margin-top: var(--e3); font-size: 17px; line-height: 1.75; color: var(--verde-2); max-width: 62ch; }
.capitulos p + p { margin-top: var(--e5); }
.historia-2 .capitulos { margin-top: var(--e8); }

/* A virada: a frase dela sozinha, no verde. */
.virada { padding-block: calc(var(--secao) * .7); }
.virada-frase {
  font-family: var(--f-display); font-size: clamp(30px, 5vw, 58px); line-height: 1.18;
  letter-spacing: -.018em; color: var(--sobre-verde); max-width: 20ch;
}

/* A crença dela abre o convite: fala, então serifa. */
.conversar-crenca {
  font-family: var(--f-display); font-size: clamp(20px, 2.4vw, 25px); line-height: 1.5;
  color: var(--sobre-verde); max-width: 40ch; margin-bottom: var(--e6);
}
.assinatura {
  margin-top: var(--e7); padding-top: var(--e5); border-top: 1px solid var(--verde-traco);
  display: grid; font-family: var(--f-display); font-size: 19px; color: var(--verde);
}
.assinatura span {
  font-family: var(--f-texto); font-size: 13px; font-weight: 600; line-height: 1.6;
  letter-spacing: .04em; color: var(--verde-2); margin-top: var(--e1);
}

/* ── O rodapé ──────────────────────────────────────────────────────────
   Informação operacional primeiro: quem é, qual o registro, como atende e
   por onde se fala com ela. */
.rodape {
  border-top: 1px solid var(--verde-traco);
  padding-block: var(--e9) var(--e8);
  font-size: 14px; line-height: 1.7; color: var(--verde-2);
}
.rodape-grade { display: grid; gap: var(--e7); }
.rodape-bloco p + p { margin-top: var(--e2); }
.rodape-nome { font-family: var(--f-display); font-size: 19px; color: var(--verde); }
.rodape-rotulo {
  font-size: 12px; font-weight: 700; letter-spacing: .18em; text-transform: uppercase;
  color: var(--agua-texto); margin-bottom: var(--e2);
}
/* O contato do rodapé é alvo de dedo como qualquer outro: 44px de altura,
   que é a régua da casa e o que o provar.js cobra a 390px. */
.rodape a {
  display: inline-flex; align-items: center; min-height: 44px;
  color: var(--agua-texto); text-decoration-thickness: 1px; text-underline-offset: 3px;
  overflow-wrap: anywhere;
}
.rodape-aviso {
  margin-top: var(--e6); padding-top: var(--e5);
  border-top: 1px solid var(--verde-traco);
  max-width: 76ch; font-size: 13px;
}
.rodape-aviso strong { color: var(--verde); }

/* ── A barra do polegar ────────────────────────────────────────────────── */
.barra-pe {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
  display: grid; grid-template-columns: 1.15fr 1fr; gap: var(--e2);
  padding: var(--e2) var(--e4) calc(var(--e2) + env(safe-area-inset-bottom));
  background: var(--linho);
  border-top: 1px solid var(--verde-traco);
}
.barra-pe .btn { min-height: 52px; padding: 0 var(--e3); font-size: 14px; }
/* Onde a barra do polegar existe, os botões do herói saem: no celular eram
   quatro botões na primeira dobra, os mesmos dois repetidos (23/09/2026, o
   Escobar: "no mobile tem que sair do hero"). A barra e o "Conversar" do
   cabeçalho trocam de lugar no MESMO corte de 900px — nenhuma largura fica
   com as duas saídas ao mesmo tempo. */
@media (max-width: 899.98px) {
  .abre .botoes { display: none; }
}

/* ── Movimento ─────────────────────────────────────────────────────────
   O contrato da casa: o estado PADRÃO é o FINAL; o pré-estado só existe sob
   html[data-luz], que o inline do <head> só põe se houver JS e o visitante
   não pedir menos movimento — e que sai sozinho se o site.js falhar. */
html[data-luz] [data-revela] {
  transition: opacity .6s var(--curva), transform .7s var(--curva);
}
html[data-luz] [data-revela]:not([data-aceso]) {
  opacity: 0; transform: translateY(12px);
}
/* O fio nasce inteiro (o fallback 1 do calc) e só encolhe sob data-luz — é o
   contrato: o pré-estado vive debaixo do html[data-luz], nunca fora dele. */
html[data-luz] .fio-andado { --andado: 0; transition: height .18s linear; }
/* O fio da rota anda uma vez só, e só sob luz. `both` segura o zero durante o
   atraso e o cem por cento depois do fim — sem ele, a linha piscaria inteira
   antes de começar. */
html[data-luz] .rota-fio i { --rota: 0; animation: rota-anda 1.5s var(--curva) .5s both; }
@keyframes rota-anda { from { width: 0; } to { width: 100%; } }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  * { animation: none !important; transition: none !important; }
}

/* ── As larguras ───────────────────────────────────────────────────────
   Uma quebra só de verdade, em 900px: abaixo dela a página é uma coluna,
   acima dela é a grade de 12. */
@media (min-width: 620px) {
  .fatos { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--e7); }
  .fatos > div:nth-child(2) { border-top: 0; padding-top: 0; }
}

@media (min-width: 900px) {
  :root { --margem: var(--e8); --secao: 132px; --topo-ancora: 96px; }
  .barra-links { display: flex; }
  .barra-in .barra-acao { display: inline-flex; }

  /* A grade de 12. Toda seção que compõe herda estas colunas; o chapéu fica
     nas 1–3 e o assunto nas 5–12, e é essa folga entre 3 e 5 que dá o ar. */
  .cabeca, .abre, .historia-grade, .rodape-grade,
  .parada, .temas li {
    display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--vao);
  }

  .cabeca { padding-top: var(--e7); }
  .cabeca > .chapeu { grid-column: 1 / 4; margin: 0; }
  .cabeca > .titulo { grid-column: 5 / 12; }
  .cabeca > .corpo  { grid-column: 5 / 11; }
  .cabeca > .botoes { grid-column: 5 / 12; }

  /* A abertura: o que ela diz nas colunas 1–7, a foto em pé nas 9–12. As
     duas começam na mesma linha do alto — é esse topo em comum que faz as
     metades lerem como uma composição só. A foto desce mais que o texto de
     propósito: numa primeira tela sem foto de pessoa, é a coluna vertical
     que dá o eixo, e alinhar a base deixaria a imagem deitada. */
  .abre-dizer { grid-column: 1 / 8; align-self: start; }
  .abre-foto {
    grid-column: 9 / 13; margin: 0;
    aspect-ratio: auto; max-height: none; min-height: 500px;
  }
  .abre-pe { grid-column: 1 / 13; }
  .fatos { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--vao); }

  /* O percurso e os temas: mesma divisão de índice em toda a página. */
  .percurso { padding-left: 0; }
  .parada { padding-left: 0; padding-block: var(--e7); }
  .marcador { left: 0; top: var(--e7); }
  .parada h3 { grid-column: 2 / 6; }
  .parada p  { grid-column: 6 / 12; }
  .fio { left: 22px; top: calc(var(--e7) + 44px); }

  .temas li { padding-block: var(--e7); }
  .temas h3 { grid-column: 1 / 5; }
  .temas p  { grid-column: 5 / 12; }
  /* Recuo até o começo da coluna 5, que é onde o assunto de toda seção
     começa. Com 12 colunas e 11 calhas, o começo da 5ª fica em
     4·(coluna + calha) = (largura + calha) / 3. */
  .nota-clara { margin-left: calc((100% + var(--vao)) / 3); }

  .fala {
    display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--vao);
    align-items: start; margin-top: var(--e8);
  }
  .fala > .citacao { grid-column: 5 / 12; grid-row: 1; margin: 0; }
  .fala-foto { grid-column: 1 / 5; grid-row: 1; margin: 0; }
  .citacao { margin-left: calc((100% + var(--vao)) / 3); max-width: 34ch; }
  .fecho { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--vao); }
  .fecho > .corpo { grid-column: 5 / 10; }
  .fecho > .botoes { grid-column: 5 / 12; margin-top: var(--e6); }

  .historia-grade { gap: var(--e9) var(--vao); align-items: start; }
  .historia-texto { display: block; }
  .historia-texto > *, .historia-foto { order: 0; }
  .historia-foto { margin: 0; }
  /* A foto acompanha a leitura: os capítulos são longos e ela, sozinha,
     acabava na metade. Na primeira parte à direita, na segunda à esquerda. */
  .historia-texto { grid-column: 1 / 7; }
  .historia-foto { grid-column: 8 / 13; position: sticky; top: 112px; }
  .historia-2 .historia-foto { grid-column: 1 / 6; grid-row: 1; }
  .historia-2 .historia-texto { grid-column: 7 / 13; grid-row: 1; }
  .virada-frase { margin-left: calc((100% + var(--vao)) / 3); }
  .cabeca > .conversar-crenca { grid-column: 5 / 12; }

  .rodape-grade { gap: var(--e7) var(--vao); }
  .rodape-bloco:nth-child(1) { grid-column: 1 / 4; }
  .rodape-bloco:nth-child(2) { grid-column: 4 / 8; }
  .rodape-bloco:nth-child(3) { grid-column: 8 / 10; }
  .rodape-bloco:nth-child(4) { grid-column: 10 / 13; }
  /* O fio do aviso atravessa o rodapé inteiro: um traço que parasse a dois
     terços da largura leria como defeito, e não como composição. */
  .rodape-aviso { grid-column: 1 / 13; max-width: none; }
}

@media (min-width: 900px) {
  body { padding-bottom: 0; }
  .barra-pe { display: none; }
}
