/* =========================================================================
   IRON AI — site.css
   Base comum a todas as páginas + seções da home.
   Cores, espaços e tipos vêm de tokens.css (design system IRON AI, modo claro).
   Regras: tudo quadrado (radius-none), bordas em vez de sombras, sem gradientes.
   Ordem: 1 fontes · 2 variáveis do site · 3 base · 4 componentes · 5 header
          6 home/hero · 7 home/manifesto · 8 marcadores de próximas partes
          9 responsivo · 10 movimento reduzido
   ========================================================================= */

/* 1. Fontes locais (CSP: font-src 'self') ------------------------------- */
@font-face { font-family: "Manrope"; src: url("../fonts/manrope-latin-400-normal.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: "Manrope"; src: url("../fonts/manrope-latin-500-normal.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: "Manrope"; src: url("../fonts/manrope-latin-600-normal.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; }
@font-face { font-family: "Manrope"; src: url("../fonts/manrope-latin-700-normal.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; }
@font-face { font-family: "Manrope"; src: url("../fonts/manrope-latin-800-normal.woff2") format("woff2"); font-weight: 800; font-style: normal; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("../fonts/ibm-plex-mono-latin-400-normal.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("../fonts/ibm-plex-mono-latin-500-normal.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("../fonts/ibm-plex-mono-latin-600-normal.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; }
/* Source Serif 4 (OFL, variável: peso 200–900 e tamanho óptico) — títulos no estilo do
   Claude.ai, servida do próprio domínio (font-src 'self') */
@font-face { font-family: "Source Serif 4"; src: url("../fonts/source-serif-4-latin-opsz-normal.woff2") format("woff2-variations"), url("../fonts/source-serif-4-latin-opsz-normal.woff2") format("woff2"); font-weight: 200 900; font-style: normal; font-display: swap; }

/* 2. Variáveis do site (derivadas dos tokens) --------------------------- */
:root {
  --gutter: max(6vw, calc(50vw - 620px));      /* lateral das seções */
  --header-h: var(--header-height);            /* 84px */
  --ease-out: cubic-bezier(.2, .7, .2, 1);
  --manifesto-size: clamp(36px, calc(24px + 2.6vw), 61px); /* section-title, fluido 36 -> 61 */
}

/* 3. Base ---------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
html, body { overflow-x: clip; }
body {
  margin: 0;
  background: var(--paper);
  color: var(--text);
  font-family: var(--font-sans);
  font-size: 15px;
  line-height: 1.75;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
a { color: inherit; text-decoration: none; }
img, svg, canvas { display: block; }
p { margin: 0; }
h1, h2, h3 { margin: 0; font-weight: 600; }
:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
::selection { background: var(--manilla); color: var(--text); }

/* [hidden] sempre vence regras de layout (display: flex/grid de componentes) */
[hidden] { display: none !important; }

.visually-hidden {
  position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.skip-link {
  position: fixed; top: 12px; left: 12px; z-index: 100;
  padding: 12px 18px; background: var(--modal-bg); border: 1px solid var(--button-dark-border);
  font: 700 13px/1 var(--font-sans); color: var(--text);
  transform: translateY(-160%); transition: transform .2s;
}
.skip-link:focus { transform: none; }

.container { width: min(var(--page-max), 100% - 48px); margin-inline: auto; }

/* 4. Componentes (padrões de ds/components/bundle.css) ------------------- */
.brand { display: inline-flex; align-items: center; color: var(--text); }
.brand img { display: block; height: 44px; width: auto; }
@media (max-width: 640px) { .brand img { height: 36px; } }

.button {
  display: inline-flex; align-items: center; justify-content: center; gap: 12px;
  min-height: var(--control-height); padding: 0 var(--space-3);
  border: 0; border-radius: var(--radius-none);
  font: 700 13px/1 var(--font-sans); white-space: nowrap; cursor: pointer;
  transition: transform .2s, background-color .2s;
}
.button:hover { transform: translateY(-2px); }
.button-primary { background: var(--cta-bg); color: var(--cta-text); }
.button-primary:hover { background: var(--cta-hover); }
.button-dark { background: var(--button-dark-bg); color: var(--text); border: 1px solid var(--button-dark-border); }
.button-small { min-height: 42px; padding: 0 18px; background: transparent; color: var(--text); border: 1px solid var(--button-dark-border); }
/* hover dos botões de contorno (design-system.md, Movimento, esclarecimento da r21):
   translateY(-2px) do .button + fundo surface, em .2s; o mesmo no foco visível */
.button-small:hover, .button-dark:hover,
.button-small:focus-visible, .button-dark:focus-visible { background: var(--surface); }
.button-small:focus-visible, .button-dark:focus-visible { transform: translateY(-2px); }
.text-link {
  display: inline-flex; align-items: center; gap: 9px; padding: 0; background: none; border: 0;
  font: 800 12px/1 var(--font-sans); color: var(--link);
}
.ico { width: 18px; height: 18px; flex: none; }
.ico path, .ico circle, .ico rect, .ico line {
  fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round;
}

.eyebrow {
  display: flex; align-items: center; gap: 10px; margin: 0;
  color: var(--link); text-transform: uppercase; letter-spacing: .15em;
  font: 600 12px/1.5 var(--font-mono);
}
.eyebrow > span { display: block; width: 25px; height: 1px; flex: none; background: currentColor; }

/* 5. Header -------------------------------------------------------------- */
/* Header sempre opaco (paper, opacidade 1), 84px em todas as larguras, com nav e
   "Agendar diagnóstico" sempre. Só se move na vertical: --hdr-y (px), gravado
   pelo JS a cada quadro a partir da posição (expansão do hero; na passagem, a
   borda da folha do manifesto); sem transição por tempo. */
.site-header {
  --y: var(--hdr-y, 0px);
  position: fixed; inset: 0 0 auto 0; z-index: 50;
  height: var(--header-h);
  background: var(--band);
  transform: translate3d(0, var(--y), 0);
  will-change: transform;
}
/* borda inferior: hairline em todos os estados em que aparece (sobre o hero, encaixado
   e no movimento reduzido; design-system.md). Viajando na borda da
   folha o header é a faixa de cima da própria folha, sem divisória: --rule = 0.
   Encaixado, a divisória se abre do centro para as pontas nos 32/22 px de
   rolagem em que o conteúdo chega à base do header (--rule de 0 a 1, home.js). */
.site-header::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px;
  background: var(--hairline);
  transform: scaleX(var(--rule, 1));
}
/* foco de teclado no header ou menu aberto: ele fica inteiro no topo da tela */
.site-header:has(:focus-visible), .site-header.nav-open { --y: 0px; }
.site-header__inner {
  display: flex; align-items: center; gap: 34px;
  height: 100%; padding: 0 var(--gutter);
}
/* sobre o hero em repouso o header usa as bordas do conteúdo do hero (medidas em home.js);
   ao viajar na folha do manifesto volta ao container da página. O botão do header some
   nesse estado (a ação é a do hero), então a navegação termina na borda do hero. */
.site-header.is-wide .site-header__inner { padding-left: var(--hx-l, var(--gutter)); padding-right: var(--hx-r, var(--gutter)); }
.site-header.is-wide .site-header__cta { display: none; }
.site-nav { display: flex; align-items: center; gap: 34px; margin-left: auto; }
.site-nav a { font: 700 13px/1 var(--font-sans); color: var(--nav-text); transition: color .2s; }
.site-nav a:hover { color: var(--accent-text); }
/* item da página atual: accent-text (5,26:1 sobre band) */
.site-nav a[aria-current="page"], .site-footer li a[aria-current="page"] { color: var(--accent-text); }
.site-header__cta { min-height: 42px; padding: 0 18px; }
/* CTA dentro da nav: só no menu aberto abaixo de 640px (seção 9) */
.site-nav .site-nav__cta { display: none; }
/* botão de menu: alvo de 44 x 44 que não encolhe, contorno como .button-small */
.site-header__menu {
  display: none; place-items: center; flex: none; order: 2; width: 44px; height: 44px; padding: 0;
  background: var(--button-dark-bg); color: var(--text);
  border: 1px solid var(--button-dark-border); border-radius: var(--radius-none); cursor: pointer;
  transition: transform .2s, background-color .2s;
}
.site-header__menu:hover, .site-header__menu:focus-visible { background: var(--surface-2); transform: translateY(-2px); }
.site-header__menu .ico-x { display: none; }
.site-header.nav-open .site-header__menu .ico-menu { display: none; }
.site-header.nav-open .site-header__menu .ico-x { display: block; }

/* 6. Home — hero com rolagem travada e mídia que expande ------------------
   Um foco: a mídia centrada (45% × até 65% da tela). Todo texto do hero fica
   sobre o fundo paper do palco, nunca sobre ilustração. No desktop, coluna
   esquerda: eyebrow + 1ª metade do título; coluna direita: 2ª metade + texto +
   ação. Em telas em retrato: 1ª metade acima da mídia, 2ª metade, texto e ação
   abaixo. A camada de fundo (bloco acid com a grade de nós da capa) é desenhada
   no canvas só onde não há texto e some na expansão. Na expansão, cada texto é
   empurrado para fora pela borda da mídia do seu lado (home.js).
   O JS grava a geometria inicial da mídia em --m-x/--m-y/--m-w/--m-h (px) e o
   tamanho do título em --title-size; os valores abaixo valem sem JS. */

.intro { position: relative; }
/* margem lateral do palco do hero em repouso: a da seção, no mínimo space-4 (mobile: space-3) */
.home-hero { --hm: max(var(--gutter), var(--space-4)); }
@media (max-width: 640px) { .home-hero { --hm: var(--space-3); } }

.home-hero {
  position: sticky; top: 0; z-index: 0;
  height: 100vh;
}
.home-hero__stage {
  --m-x: 15%; --m-w: 70%; --m-y: 30%; --m-h: 40%;
  --gap-t: 28px; --gap-b: 20px; --hg: 40px;
  --title-size: clamp(36px, 11.2vw, 48px);
  --foot-bottom: clamp(20px, 3vh, 32px);
  position: relative; height: 100%; overflow: hidden;
  background: var(--paper);
  will-change: transform;
}

/* mídia: desenhada no canvas; o fallback só aparece sem JS */
.home-hero__fallback {
  position: absolute; z-index: 1;
  left: var(--m-x); top: var(--m-y); width: var(--m-w); height: var(--m-h);
  background: var(--manilla);
}
html.js .home-hero__fallback { display: none; }
.home-hero__canvas { position: absolute; inset: 0; z-index: 1; width: 100%; height: 100%; }

/* título partido */
.home-hero__title {
  margin: 0;
  font-family: var(--font-serif); font-optical-sizing: auto;
  font-size: var(--title-size); font-weight: 400; line-height: 1; letter-spacing: -.025em;
  color: var(--text);
}
.home-hero__title em { font-style: normal; color: var(--accent); }
.home-hero__half {
  position: absolute; z-index: 3; display: block;
  white-space: nowrap; pointer-events: none;
  will-change: transform, opacity;
}
.home-hero__half br { display: none; }

/* textos de apoio e ação */
.home-hero__eyebrow { position: absolute; z-index: 3; }
.home-hero__foot { position: absolute; z-index: 3; will-change: transform, opacity; }
/* lead: 17px/1,75 (token), em todas as larguras */
.home-hero__lead { font-size: 17px; line-height: 1.75; color: var(--muted); }
.home-hero__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 26px; margin-top: 16px; }

/* telas estreitas (padrão): uma metade acima e outra abaixo da mídia */
.home-hero__half .br-s { display: inline; }
.home-hero__half--a { left: var(--hm); bottom: calc(100% - var(--m-y) + var(--gap-b)); }
.home-hero__half--b { right: var(--hm); top: calc(var(--m-y) + var(--m-h) + var(--gap-b)); text-align: right; }
.home-hero__eyebrow { left: var(--hm); top: var(--ey-top, calc(var(--header-h) + 14px)); }
.home-hero__foot { left: var(--hm); right: var(--hm); bottom: var(--foot-bottom); }
/* celulares estreitos: a 2ª metade quebra em "na sua / margem." para caber no page-max a 48px */
.is-stack.is-tight .home-hero__half--b .br-f { display: inline; }

/* texto de apoio: versão curta onde a altura é pouca (paisagem baixa, celular baixo) */
.home-hero__lead .lead-short { display: none; }
.is-short-lead .home-hero__lead .lead-long { display: none; }
.is-short-lead .home-hero__lead .lead-short { display: inline; }

/* paisagem baixa ou estreita (600–999 px, ou onde o lado a lado não comporta 48px):
   painel central (45% da largura, centrado também na altura). Eyebrow e 1ª metade do
   título acima dele, à esquerda; 2ª metade em uma linha abaixo, à direita, com a ação
   na mesma linha, à esquerda, e a frase curta embaixo. */
.is-band .home-hero__half br { display: none; }
/* eyebrow acima da 1ª metade; frase curta abaixo da linha da 2ª metade */
.is-band .home-hero__eyebrow { left: var(--hm); top: var(--ey-top); }
.is-band .home-hero__lead { position: absolute; left: var(--hm); top: var(--lead-y); width: var(--lead-w); margin: 0; text-wrap: balance; pointer-events: auto; will-change: transform; }
.is-band .home-hero__half--a { left: var(--hm); top: var(--a-top); bottom: auto; }
.is-band .home-hero__half--b { right: var(--hm); top: var(--b-top); }
.is-band .home-hero__foot { inset: 0; width: auto; pointer-events: none; }
.is-band .home-hero__actions { position: absolute; left: var(--cta-x); top: var(--cta-y); margin: 0; pointer-events: auto; will-change: transform; }

/* desktop: uma metade de cada lado da mídia, na mesma faixa — a frase continua
   na linha de base: "Coloque / a IA para / trabalhar [mídia] na sua / margem."
   Coluna esquerda: eyebrow (alinhado ao topo da mídia) e 1ª metade.
   Coluna direita: 2ª metade e, ancorados embaixo, o texto e a ação. */
.is-flank .home-hero__half .br-s { display: none; }
.is-flank .home-hero__half .br-f { display: inline; }
.is-flank .home-hero__half--a {
  left: auto; bottom: auto; text-align: right;
  right: calc(100% - var(--m-x) + var(--gap-t));
  top: calc(var(--band-c, calc(var(--m-y) + var(--m-h) / 2)) - var(--title-size) * 1.98);
}
.is-flank .home-hero__half--b {
  right: auto; text-align: left;
  left: calc(var(--m-x) + var(--m-w) + var(--gap-t));
  top: var(--band-c, calc(var(--m-y) + var(--m-h) / 2));
}
.is-flank .home-hero__eyebrow {
  left: auto; bottom: auto; justify-content: flex-end;
  right: calc(100% - var(--m-x) + var(--gap-t));
  top: var(--m-y);
  /* nunca mais perto da borda da tela que --hg (>= space-4): se não couber numa
     linha, quebra em "Do diagnóstico / à operação", com o fio na 1ª linha e o
     texto alinhado à margem, como a 1ª metade do título logo abaixo */
  max-width: calc(var(--m-x) - var(--gap-t) - var(--hg));
  align-items: flex-start; text-align: left;
}
.is-flank .home-hero__eyebrow > span { margin-top: 8.5px; }
.is-flank .home-hero__foot {
  top: auto; margin: 0; width: auto;
  left: calc(var(--m-x) + var(--m-w) + var(--gap-t));
  right: var(--hg);
  bottom: var(--foot-bottom);
}
/* lado a lado estreito (600–999 px): texto e ação centrados abaixo da mídia;
   o eyebrow quebra em linhas na coluna esquerda */
.is-flank.is-narrow .home-hero__foot {
  left: 0; right: 0; margin: 0 auto; width: min(560px, 100% - 2 * var(--hg));
  text-align: center;
}
.is-flank.is-narrow .home-hero__actions { justify-content: center; }
.is-flank.is-narrow .home-hero__eyebrow {
  max-width: calc(var(--m-x) - var(--gap-t) - var(--hg));
  flex-wrap: wrap; justify-content: flex-end; text-align: right; row-gap: 2px;
}

/* espaço de rolagem para a expansão ligada à rolagem (telas de toque) */
.home-hero__spacer { height: 0; }
html.hero-scroll .home-hero__spacer { height: 90vh; }

/* 7. Home — manifesto que acende com a leitura --------------------------- */
/* Eyebrow (rótulo) -> h2 em section-title -> StatGrid.
   Camada que cobre a anterior (design-system.md, "Camadas que cobrem a anterior"):
   a folha sobe com a barra do header na borda (home.js); os primeiros 84px da
   folha são o header e o eyebrow fica a space-4 (mobile: space-3) da base dele.
   Padding inferior space-8 (mobile: space-7). Movimento reduzido: padding normal. */
.manifesto {
  position: relative; z-index: 2;
  display: flex; flex-direction: column;
  background: var(--paper);
  padding: calc(var(--header-h) + var(--space-4)) var(--gutter) var(--space-8);
  /* a folha tem pelo menos a altura da tela: ela encaixa no topo cobrindo o hero
     inteiro e só então trava pela base, e a frase acende com o quadro parado */
  min-height: 100vh;
}
/* composição da folha (design-system.md, "Folha do manifesto"): o eyebrow na borda
   que entra, a frase no meio do espaço que sobra (é o assunto do quadro e a frente
   da leitura fica perto do meio da tela) e os dois dados embaixo */
.manifesto__inner { display: flex; flex-direction: column; flex: 1 0 auto; width: 100%; max-width: var(--page-max); margin: 0 auto; }
.manifesto__eyebrow { margin-bottom: var(--space-3); }
/* sobra da folha dividida 4:1 acima e abaixo da frase: o centro dela fica perto do
   meio da tela, com os dados no pé da folha */
.manifesto__inner::before { content: ''; order: 1; flex: 4 1 0; }
.manifesto__inner::after { content: ''; order: 3; flex: 1 1 0; }
/* h2 section-title em serifa (Source Serif 4, 400, tracking -0,02em), uma expressão em <i> accent */
.manifesto__title {
  order: 2; margin: 0;
  max-width: 18.6em;
  font-family: var(--font-serif); font-optical-sizing: auto;
  font-size: var(--manifesto-size); font-weight: 400; line-height: 1.1; letter-spacing: -.02em;
  color: var(--text);
}
/* leitura (home.js; design-system.md, Movimento, "texto que acende"): cada palavra
   tem um de três estados, todos em cor de token e cada um mais escuro que o
   anterior — apagada (faint, 3,2:1, só em texto grande) -> frente (subtle) -> acesa
   (text, 16,8:1). A frase não tem destaque em accent: a própria leitura é o
   destaque. O estado é função direta da posição da rolagem, sem transição por tempo. */
.manifesto__title .w { display: inline; }
.manifesto__title .w.is-off { color: var(--faint); }
.manifesto__title .w.is-front { color: var(--subtle); }
/* StatGrid: stat 53px/700/-0,06em em accent, rótulo 13px 700, legenda (fonte do dado)
   como `.stat-grid small` do bundle — Manrope 12px/400, sem maiúsculas nem tracking —
   em subtle (design-system.md, esclarecimento abaixo da tabela de papéis de cor) */
.manifesto__data {
  order: 4;
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  width: 100%; max-width: calc(var(--page-max) * 2 / 3); margin-top: var(--space-6);
  border-top: 1px solid var(--line); border-left: 1px solid var(--line);
}
.datum {
  display: flex; flex-direction: column; min-height: 155px;
  margin: 0; padding: 23px 18px;
  border-right: 1px solid var(--line); border-bottom: 1px solid var(--line);
}
.datum strong { display: block; font-family: var(--font-serif); font-size: 53px; font-weight: 400; line-height: 1; letter-spacing: -.02em; color: var(--accent); }
.datum__label { margin-top: 25px; font-size: 13px; font-weight: 700; line-height: 1.5; color: var(--text); }
.datum figcaption { margin-top: 6px; font: 400 12px/1.5 var(--font-sans); letter-spacing: normal; text-transform: none; color: var(--subtle); }

/* 8. Marcador das próximas partes ---------------------------------------- */
/* sem conteúdo nesta parte: altura 0, ou só o necessário para a leitura do manifesto
   terminar antes do fim da página (home.js) */
.next-parts { position: relative; z-index: 2; min-height: 0; background: var(--paper); }

/* 9. Responsivo ---------------------------------------------------------- */
@media (max-width: 980px) {
  .site-nav { gap: 24px; }
}

@media (max-width: 760px) {
  .site-header__inner { gap: 12px; }
  /* o logo empurra o resto para a direita: vale com ou sem o CTA na barra */
  .site-header__inner > .brand { margin-right: auto; }
  .site-header__menu { display: grid; }
  .site-nav {
    position: absolute; top: 100%; left: 0; right: 0;
    display: none; flex-direction: column; align-items: stretch; gap: 0; margin: 0;
    padding: 8px var(--gutter) 18px; background: var(--paper); border-bottom: 1px solid var(--line);
  }
  /* menu aberto: ui 13px/700 em nav-text, como no desktop; área de toque >= 48px */
  .site-nav a { display: flex; align-items: center; min-height: 48px; padding: 0; border-bottom: 1px solid var(--line); }
  .site-header.nav-open .site-nav { display: flex; }
  /* menu aberto: painel que cobre toda a tela abaixo do header, com rolagem própria;
     a página fica travada (site.js: html.nav-locked, Lenis parado, main/footer inert) */
  .site-header.nav-open .site-nav {
    height: calc(100vh - var(--header-h)); height: calc(100dvh - var(--header-h));
    overflow-y: auto; overscroll-behavior: contain; border-bottom: 0;
  }
  html.nav-locked, html.nav-locked body { overflow: hidden; }
  .site-header.nav-open { background: var(--band); }
}

@media (max-width: 640px) {
  :root { --gutter: var(--space-3); }
  /* barra só com logo + menu; o CTA entra como último item do menu aberto,
     botão primário de largura total */
  .site-header__cta { display: none; }
  .site-nav .site-nav__cta {
    display: flex; justify-content: center; gap: 12px; margin-top: 18px;
    min-height: var(--control-height); border-bottom: 0;
    color: var(--cta-text);
  }
  .site-nav .site-nav__cta:hover { color: var(--cta-text); }
  .home-hero__actions { margin-top: 12px; }
  .manifesto { padding: calc(var(--header-h) + var(--space-3)) var(--gutter) var(--space-7); }
  /* os dois dados lado a lado também no celular, abaixo da frase */
  .manifesto__data { margin-top: 38px; }           /* space-6 no mobile: 38px */

  .datum { padding: 18px 14px; min-height: 0; }
}


/* 10. Movimento reduzido: sem rolagem travada, sem coreografia ------------ */
@media (prefers-reduced-motion: reduce) {
  /* sem encaixe de folha: a seção tem a altura do conteúdo e o padding normal, e os
     pilares vêm logo depois, sem pausa */
  .manifesto { min-height: 0; }
  .pilares { margin-top: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .site-header { --y: 0px; --rule: 1; will-change: auto; }
  /* sem coreografia o header não viaja na folha: padding de seção normal */
  .manifesto { padding-top: var(--space-8); border-top: 1px solid var(--line); }
  /* hero estático em fluxo: bloco de texto sobre paper, depois a mídia em tela
     cheia como bloco próprio (a rede completa, com os nomes das 11 áreas) */
  .home-hero { position: relative; height: auto; }
  .home-hero__stage {
    height: auto; overflow: visible; will-change: auto;
    display: flex; flex-direction: column; align-items: flex-start;
    padding: calc(var(--header-h) + 28px) var(--hm) 0;
  }
  .home-hero__eyebrow, .home-hero__half, .home-hero__foot,
  .is-flank .home-hero__eyebrow, .is-flank .home-hero__half--a, .is-flank .home-hero__half--b, .is-flank .home-hero__foot,
  .is-band .home-hero__eyebrow, .is-band .home-hero__half--a, .is-band .home-hero__half--b, .is-band .home-hero__foot,
  .is-band .home-hero__lead, .is-band .home-hero__actions {
    position: static; transform: none !important; opacity: 1 !important; visibility: visible !important; will-change: auto;
  }
  .home-hero__eyebrow { order: 1; }
  /* h1 hero: 48px ou mais e sempre maior que o section-title (36 -> 61) da mesma largura */
  .home-hero__title { order: 2; margin-top: 18px; max-width: 14em; font-size: clamp(48px, 5.6vw, 80px); }
  .home-hero__half, .is-flank .home-hero__half--a, .is-flank .home-hero__half--b { display: inline; white-space: normal; text-align: left; }
  .home-hero__half br, .home-hero__half .br-s,
  .is-flank .home-hero__half .br-f, .is-flank .home-hero__half .br-s,
  .is-stack.is-tight .home-hero__half--b .br-f { display: none; }
  .home-hero__foot, .is-flank .home-hero__foot, .is-flank.is-narrow .home-hero__foot, .is-band .home-hero__foot { order: 3; width: auto; max-width: 560px; margin: 34px 0 0; text-align: left; pointer-events: auto; }
  .is-band .home-hero__actions { margin-top: 16px; }
  .home-hero__lead .lead-long, .is-short-lead .home-hero__lead .lead-long { display: inline; }
  .home-hero__lead .lead-short, .is-short-lead .home-hero__lead .lead-short { display: none; }
  .is-flank.is-narrow .home-hero__actions { justify-content: flex-start; }
  .home-hero__fallback { display: none; }
  .home-hero__canvas {
    order: 4; position: relative; inset: auto;
    width: calc(100% + 2 * var(--hm)); height: 100vh;
    margin: 44px calc(-1 * var(--hm)) 0;
  }
  .home-hero__spacer, html.hero-scroll .home-hero__spacer { height: 0; }
  .button, .button:hover, .button:focus-visible,
  .site-header__menu, .site-header__menu:hover, .site-header__menu:focus-visible { transition: none; transform: none; }
  .skip-link { transition: none; }
}
@media (prefers-reduced-motion: reduce) and (max-width: 640px) {
  .manifesto { padding-top: var(--space-7); }
}

/* 10. Home — P2: pilares, esteira empilhada, zoom e casos de uso ----------
   Cada seção entra como camada por cima da anterior (barra: mecanismo 6): a
   anterior fica presa pela base (position: sticky com top negativo, calculado em
   p2.js) enquanto a seguinte sobe; a borda que entra traz conteúdo a space-4
   (mobile: space-3). As travas só valem com .pins-on (p2.js), para as medidas
   serem feitas sem elas; no movimento reduzido não há trava. */
.intro { z-index: 1; }
.pins-on .intro, .pins-on [data-layer] { position: sticky; top: var(--pin-top, 0px); }
/* a borda de entrada é uma hairline line; o padding desconta 1 px para o primeiro
   elemento ficar a space-4 (32 px) da borda */
.layer { position: relative; padding: calc(var(--space-4) - 1px) var(--gutter) var(--space-8); border-top: 1px solid var(--line); }
.pilares { z-index: 2; background: var(--soft); }
/* pausa da folha do manifesto (design-system.md, "Folha do manifesto"): a folha fica
   parada enquanto a frase acende (clamp(220px, 42vh, 380px), home.js) e mais ~30% da
   tela já acesa; só então a camada dos pilares sobe. A margem fica atrás da folha
   presa, que cobre a tela inteira */
.pilares { margin-top: calc(clamp(220px, 42vh, 380px) + clamp(160px, 30vh, 280px)); }
.esteira { z-index: 3; background: var(--paper); }
.zoom { position: relative; z-index: 4; }
.casos { position: relative; z-index: 5; }
.next-parts { z-index: 6; }
.layer__inner { max-width: var(--page-max); margin: 0 auto; }

/* h2 de seção (section-title) com uma expressão em <i> accent */
.section-h2 {
  margin: var(--space-3) 0 0; max-width: 18.6em;
  font-family: var(--font-serif); font-optical-sizing: auto;
  font-size: var(--manifesto-size); font-weight: 400; line-height: 1.08; letter-spacing: -.02em;
  color: var(--text);
}
.section-h2 i { font-style: normal; color: var(--accent); }
.section-lead { margin: 18px 0 0; max-width: 40em; font-size: 17px; line-height: 1.75; color: var(--muted); }

/* FeatureItem (design system): icon-box 46px, card-title 20px, body-sm muted; trios
   separados por borda line (bordas compartilhadas, como no StatGrid) */
.icon-box {
  display: grid; place-items: center; width: 46px; height: 46px; flex: none;
  color: var(--icon-ink); background: var(--icon-bg); border: 1px solid var(--icon-border);
}
.icon-box .ico { width: 20px; height: 20px; }
.features {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  margin-top: var(--space-6);
  border-top: 1px solid var(--line); border-left: 1px solid var(--line);
}
.feature { margin: 0; padding: 32px 28px 34px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.feature h3 { margin: 28px 0 12px; font-size: 20px; font-weight: 700; line-height: 1.35; letter-spacing: -.025em; color: var(--text); }
.feature p { margin: 0; font-size: 14px; line-height: 1.7; color: var(--muted); }
/* FeatureItem largo (design-system.md, "Estilo minimalista"): a base, numa linha sob
   os três pilares, sem icon-box — título card-title e a frase em muted */
.feature--wide { grid-column: 1 / -1; display: flex; align-items: baseline; flex-wrap: wrap; column-gap: 16px; row-gap: 4px; padding: 24px 28px; }
.feature--wide h3 { margin: 0; }

/* Esteira: cartões que se empilham (barra: mecanismo 3). Todos presos no topo em
   --stack-top; o que sobe por cima cobre o anterior, que encolhe (0,96 -> 0,90) e
   sobe 24 px por cartão acima dele — no quadro intermediário ficam 2 ou 3 bordas.
   O visual interno entra em 2x e chega a 1x quando o cartão assenta (p2.js). */
.stack {
  list-style: none; max-width: var(--page-max);
  margin: var(--space-6) auto 0; padding: 0;
}
/* pausa com os 5 cartões empilhados: um espaço no fluxo (o sticky não entra no
   padding do contêiner, por isso não é padding) */
.stack::after { content: ''; display: block; height: var(--stack-hold, 0px); }
/* a esteira fica presa pela base no instante em que o último cartão termina a pausa:
   a folga sob o cartão da frente é a mesma de sempre (p2.js) */
.layer.esteira { padding-bottom: var(--esteira-pb, var(--space-8)); }
/* Cartão de etapa = ProductCard minimalista (design-system.md, "Estilo minimalista"):
   número mono no canto em subtle, nome product-title, uma linha em muted e o preço;
   borda line, padding 44/32, hover deep-2 em .25s. O visual em código ocupa o lado
   esquerdo até a borda do cartão (campo acid). Em telas estreitas o visual vira uma
   faixa no topo do cartão (data-mode: >980 side; 641–980 band2; ≤640 band1). */
.stack__card {
  position: sticky; top: var(--stack-top, 140px);
  display: grid; grid-template-columns: minmax(0, var(--vis-a, 58fr)) minmax(0, var(--vis-b, 42fr));
  width: 100%; height: var(--card-h, 560px); margin: 0 auto;
  background: var(--paper); border: 1px solid var(--line);
  transition: background .25s, color .25s;
}
.stack__card:hover { background: var(--deep-2); }
.stack__visual { position: relative; overflow: hidden; min-width: 0; min-height: 0; background: var(--manilla); }
.stack__svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.stack__body {
  position: relative; display: flex; flex-direction: column; justify-content: flex-start; gap: 24px;
  min-width: 0; min-height: 0; padding: var(--space-5);
}
.stack__number { position: absolute; top: 35px; right: 38px; font: 400 12px/1.5 var(--font-mono); color: var(--subtle); }
.stack__intro { padding-right: 32px; }
.stack__name { margin: 0 0 13px; font-family: var(--font-serif); font-size: 30px; font-weight: 400; line-height: 1.2; letter-spacing: -.015em; color: var(--text); }
.stack__what { margin: 0; max-width: 24em; font-size: 14px; line-height: 1.65; color: var(--muted); }
.stack__price {
  margin: 0; padding-top: 18px; border-top: 1px solid var(--line);
  font-size: 20px; font-weight: 600; line-height: 1.35; letter-spacing: -.025em; color: var(--text);
}
/* faixa: visual no topo, texto embaixo (padding de card no mobile, space-4); a faixa
   fica em px inteiros (p2.js): a borda entre o visual e o texto cai num pixel */
.stack[data-mode^="band"] .stack__card { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr); }
/* na faixa o texto vem primeiro: o cartão seguinte sobe por cima do visual, e o nome,
   a entrega e o preço do cartão assentado ficam inteiros */
.stack[data-mode^="band"] .stack__body { order: -1; }
.stack[data-mode^="band"] .stack__body { justify-content: flex-start; gap: 18px; padding: var(--space-4); }
.stack[data-mode^="band"] .stack__number { top: 26px; right: 30px; }
.stack[data-mode="band2"] .stack__body {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 28px; align-content: start;
}
.stack[data-mode="band2"] .stack__price { align-self: start; margin-top: 40px; }
/* tela baixa: a descrição continua (é o que o cliente recebe); o corpo usa o padding
   de cartão do mobile (32) e o preço o tamanho lead */
.stack[data-tight] .stack__body { padding: var(--space-4); }
.stack[data-tight] .stack__number { top: 26px; right: 30px; }
.stack[data-tight] .stack__price { font-size: 17px; }
.esteira__more { margin-top: var(--space-5); }
/* cores da ilustração (tokens; design-system.md, "Ilustração e mídia em código") */
/* paleta de ilustração no estilo do Claude.ai (design-system.md, regra 4): campo
   manilla, figuras paper/branco, um destaque clay pequeno, traços em accent-text */
.v-f { fill: var(--manilla); }
.v-b { fill: var(--paper); }
.v-s { fill: var(--modal-bg); }
.v-a { fill: var(--clay); }
.v-t { fill: var(--accent-text); }
.v-g { fill: var(--accent-text); }
/* cartões cobertos: o campo do visual desce de valor a cada cartão por cima (manilla
   -> kraft -> clay), em degraus de token; as bordas empilhadas leem como cartões
   distintos (p2.js: data-covered="1" ou "2") e o corpo passa a surface */
/* os degraus ficam dentro de cada papel: o visual (ilustração) desce de manilla para
   kraft; o corpo (interface) desce de paper para surface e surface-2 */
.stack__card[data-covered="1"] { background: var(--surface); }
.stack__card[data-covered="2"] { background: var(--surface-2); }
/* no cartão coberto o número passa a muted: subtle teria 4,3:1 sobre surface-2 */
.stack__card[data-covered] .stack__number { color: var(--muted); }
.stack__card[data-covered] .stack__visual, .stack__card[data-covered] .v-f { background: var(--kraft); fill: var(--kraft); }

/* Regras públicas da oferta: só os títulos, em linha de três divididas por line */
.rules {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  margin: var(--space-6) 0 0; padding: 0; list-style: none;
  border-top: 1px solid var(--line); border-left: 1px solid var(--line);
}
/* card-title (20px/700), sem descrição */
.rules li {
  padding: 22px 28px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line);
  font-size: 20px; font-weight: 700; line-height: 1.35; letter-spacing: -.025em; color: var(--text);
}

/* Zoom (barra: mecanismo 4): área fixa de 100vh durante 300vh de rolagem; os
   painéis são desenhados no canvas (p2.js), em pixel inteiro e só com tokens */
/* 340vh de área fixa: ~250vh de zoom e, no fim, ~90vh em que os casos sobem por cima
   da grade parada do núcleo (p2.js: M.pc) */
.zoom { height: 440vh; }
.zoom__stage { position: sticky; top: 0; height: 100vh; overflow: hidden; background: var(--band); }
/* borda de entrada da camada do zoom, em hairline line, como as outras camadas */
.zoom__stage::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: var(--line); z-index: 1; }
.zoom__canvas { display: block; width: 100%; height: 100%; }

/* Casos de uso: o painel central do zoom (paper + grade de hairlines line) vira o
   fundo desta seção — a mesma grade, no mesmo passo e na mesma fase (p2.js grava
   --grid-x/--grid-y), continua sem corte. Texto sobre a grade é permitido. */
/* Casos de uso: camada que cobre o clímax do zoom (design-system.md, "A seção que
   nasce do zoom"): borda de entrada em hairline line, eyebrow a space-4/space-3 da
   borda e fundo paper com a grade de hairlines do núcleo (mesmo passo). A margem
   negativa (p2.js) a faz subir por cima da área fixa nos últimos (H - header) px. */
.casos {
  padding: calc(var(--space-4) - 1px) var(--gutter) var(--space-8);
  border-top: 1px solid var(--line);
  background-color: var(--paper);
  background-image: linear-gradient(to right, var(--line) 0 1px, transparent 1px), linear-gradient(to bottom, var(--line) 0 1px, transparent 1px);
  background-size: var(--grid, 48px) var(--grid, 48px);
  background-position: var(--grid-x, 50vw) var(--grid-y, 0px);
  /* a grade conta a partir da borda de cima (a hairline), como a do núcleo do zoom */
  background-origin: border-box;
}
.cases {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  margin-top: var(--space-6);
  border-top: 1px solid var(--line); border-left: 1px solid var(--line);
}
.case { position: relative; display: flex; flex-direction: column; padding: 44px; background: var(--paper); border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }
/* tag do design system (mono 12px, 600, tracking .13em, link); seletor com a classe do
   cartão para não ser vencido por ".case p" */
.case .case__tag { margin: 0; font: 600 12px/1.5 var(--font-mono); letter-spacing: .13em; text-transform: uppercase; color: var(--link); }
.case h3 { margin: 9px 0 13px; font-size: 20px; font-weight: 700; line-height: 1.35; letter-spacing: -.025em; color: var(--text); }
.case .case__text { margin: 0; font-size: 14px; line-height: 1.65; color: var(--muted); }
.case ul { margin: 0; padding: 0; list-style: none; }
.case li { display: flex; gap: 10px; padding: 7px 0; font-size: 13px; line-height: 1.5; color: var(--muted); }
.case li .ico { margin-top: 1px; color: var(--accent-text); }

@media (max-width: 980px) {
  .features, .rules { grid-template-columns: 1fr; }
  .cases { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .layer { padding: calc(var(--space-3) - 1px) var(--gutter) var(--space-7); }
  .casos { padding: calc(var(--space-3) - 1px) var(--gutter) var(--space-7); }
  .features, .cases { margin-top: 38px; }
  .rules { margin-top: 38px; }
  .rules li { padding: 18px 22px; }
  .feature--wide { padding: 22px; }
  .feature { padding: 26px 22px 28px; }
  .cases { grid-template-columns: 1fr; }
  .case { padding: 32px; }
}
@media (prefers-reduced-motion: reduce) {
  /* estático e completo: sem travas, cartões em sequência, visuais em 1x, painéis do
     zoom parados num bloco do tamanho da tela; padding normal de seção */
  .layer, .casos { padding-top: var(--space-8); }
  .stack { padding-bottom: 0; }
  .stack__card { position: relative; top: auto; height: auto; min-height: 420px; margin-bottom: 16px; transform: none !important; transition: none; }
  .stack__visual { min-height: 260px; }
  .stack[data-mode^="band"] .stack__card { grid-template-rows: auto auto; }
  .zoom { height: auto; }
  .zoom__stage { position: relative; height: 100vh; }
}
@media (prefers-reduced-motion: reduce) and (max-width: 640px) {
  .layer, .casos { padding-top: var(--space-7); }
}

/* janelas baixas: os dados ficam compactos, para a frase ficar perto do meio da tela
   quando a folha encaixa (mecanismo 2) */
@media (max-height: 700px) {
  .datum { min-height: 0; padding: 14px 16px; }
  .datum__label { margin-top: 14px; }
  .manifesto { padding-bottom: var(--space-7); }
  .manifesto__data { margin-top: 38px; }
}

/* Movimento reduzido: sem a pausa da folha do manifesto (a regra da pausa vem antes
   no arquivo e venceria a do bloco de movimento reduzido da seção 10) */
@media (prefers-reduced-motion: reduce) {
  .pilares { margin-top: 0; }
}
/* janelas baixas (menos de 700 px de altura) com o cartão lado a lado: o corpo usa o
   padding de cartão do mobile, 32 px (design-system.md, "Pilha da esteira") */
@media (max-height: 700px) and (min-width: 641px) {
  .stack[data-mode="side"] .stack__body { padding: var(--space-4); }
}


/* 11. Rodapé compartilhado (todas as páginas; barra: mecanismo 5) ---------
   Colunas de links em 13px, rótulo de coluna em IBM Plex Mono subtle, linha
   final com o wordmark e o copyright. Fundo footer-bg, hairline no topo, sem
   ícones nem caixas. Marcação: ver o <footer class="site-footer"> de contato.html. */
.site-footer {
  position: relative; z-index: 7;
  padding: var(--space-7) var(--gutter) var(--space-4);
  background: var(--footer-bg);
  border-top: 1px solid var(--hairline);
}
.site-footer__inner { max-width: var(--page-max); margin: 0 auto; }
.site-footer__cols {
  display: grid; grid-template-columns: repeat(3, minmax(0, 200px)); gap: var(--space-4) var(--space-5);
}
.site-footer__label {
  margin: 0 0 14px;
  font: 600 12px/1.5 var(--font-mono); letter-spacing: .13em; text-transform: uppercase;
  color: var(--subtle);
}
.site-footer ul { margin: 0; padding: 0; list-style: none; }
.site-footer li + li { margin-top: 4px; }
/* área de toque >= 24px (WCAG 2.5.8) mantendo o texto em 13px */
.site-footer li a {
  display: inline-flex; align-items: center; min-height: 28px;
  font: 500 13px/1.4 var(--font-sans); color: var(--muted);
  transition: color .2s;
}
.site-footer li a:hover { color: var(--accent-text); }
.site-footer__base {
  display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 10px 24px;
  margin-top: var(--space-6); padding-top: var(--space-3);
  border-top: 1px solid var(--line);
}
.site-footer__base p { font-size: 13px; line-height: 1.5; color: var(--subtle); }
/* wordmark (brand): "IRON" 500 + "AI" 800, 14px, tracking 0,1em */
.wordmark { font: 500 14px/1 var(--font-sans); letter-spacing: .1em; color: var(--text); }
.wordmark b { font-weight: 800; }
@media (max-width: 640px) {
  .site-footer { padding: var(--space-6) var(--gutter) var(--space-4); }
  .site-footer__cols { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-4) var(--space-3); }
  .site-footer__base { margin-top: var(--space-5); flex-direction: column; align-items: flex-start; }
}

/* 12. Páginas internas (contato, política): título de página e seção --------
   Header fixo e opaco desde o início; o conteúdo começa abaixo dele. */
.page-inner main { padding-top: var(--header-h); }
.page-intro { padding: var(--space-7) var(--gutter) var(--space-8); }
.page-section { padding: var(--space-8) var(--gutter); border-top: 1px solid var(--line); }
/* h1 de página: serifa 400 na escala hero do sistema, fluida 48 -> 92px (92 a 1440);
   sempre maior que o section-title da mesma largura */
.page-h1 {
  margin: var(--space-3) 0 0; max-width: 14em;
  font-family: var(--font-serif); font-optical-sizing: auto;
  font-size: clamp(48px, 6.4vw, 92px); font-weight: 400; line-height: 1.02; letter-spacing: -.025em;
  color: var(--text);
}
.page-h1 em { font-style: normal; color: var(--accent); }
.page-inner [id] { scroll-margin-top: calc(var(--header-h) + var(--space-3)); }

/* 13. Contato -------------------------------------------------------------- */
/* Dois caminhos por perfil (barra: mecanismo 3): cards lado a lado que dividem a
   mesma hairline; tag mono, card-title 20px/700, uma frase e a ação */
.paths {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  margin-top: var(--space-6);
  border-top: 1px solid var(--line); border-left: 1px solid var(--line);
}
.path {
  display: flex; flex-direction: column; align-items: flex-start;
  padding: var(--space-5); border-right: 1px solid var(--line); border-bottom: 1px solid var(--line);
  transition: background .25s;
}
.path:hover { background: var(--deep-2); }
.path__tag { margin: 0; font: 600 12px/1.5 var(--font-mono); letter-spacing: .13em; text-transform: uppercase; color: var(--link); }
.path__title { margin: 10px 0 12px; font-size: 20px; font-weight: 700; line-height: 1.35; letter-spacing: -.025em; color: var(--text); }
.path__text { max-width: 30em; font-size: 15px; line-height: 1.7; color: var(--muted); }
.path__action { margin-top: auto; }
.path__text { margin-bottom: var(--space-4); }

/* formulário + coluna lateral */
/* intro e formulário num ritmo único: a intro não tem padding inferior e a seção
   do formulário não tem hairline; entre a base dos caminhos e o eyebrow ficam só
   os space-8 (120px; mobile space-7, 78px) do topo do formulário */
.page-contato .page-intro { padding-bottom: 0; }
.page-contato .contato-form { border-top: 0; }
.contato-grid { margin-top: var(--space-6); }
/* formulário em grupos (barra: mecanismo 7, até 6 itens por título): 01 "Sobre o
   caso" (abre com o motivo, mecanismo 3), 02 "Sobre você", e o fecho (aceite,
   anti-robô e envio). No desktop ocupa até 2/3 do container, à esquerda. */
.form { display: flex; flex-direction: column; gap: var(--space-5); max-width: calc(var(--page-max) * 2 / 3); }
.form__group { margin: 0; padding: 0; border: 0; min-width: 0; }
.form__group ~ .form__group { padding-top: var(--space-4); border-top: 1px solid var(--line); }
.form__group--end { display: flex; flex-direction: column; gap: 26px; }
/* legend em card-title (20px/700) com índice mono; float tira a legend da borda */
.form__legend {
  float: left; width: 100%; display: flex; align-items: baseline; gap: 14px;
  margin: 0 0 22px; padding: 0;
  font-size: 20px; font-weight: 700; line-height: 1.35; letter-spacing: -.025em; color: var(--text);
}
.form__index { font: 400 12px/1.5 var(--font-mono); letter-spacing: normal; color: var(--subtle); }
.form__grid { clear: both; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 26px 24px; }
.field { display: flex; flex-direction: column; min-width: 0; }
.field--full { grid-column: 1 / -1; }
.field__head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.field__label { display: block; margin-bottom: 8px; font: 700 13px/1.4 var(--font-sans); color: var(--text); }
.field__optional { font-weight: 500; color: var(--subtle); }
.field__count { font: 600 12px/1.4 var(--font-mono); letter-spacing: .13em; text-transform: uppercase; color: var(--subtle); }
.field__count.is-near { color: var(--text); }
.field__control {
  width: 100%; min-height: var(--control-height); margin: 0; padding: 0 14px;
  font: 400 15px/1.5 var(--font-sans); color: var(--text);
  background: var(--modal-bg); border: 1px solid var(--field-line); border-radius: var(--radius-none);
  -webkit-appearance: none; appearance: none;
  transition: border-color .2s;
}
.field__control:hover { border-color: var(--muted); }
.field__control:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; border-color: var(--text); }
.field__control--area { min-height: 140px; padding: 12px 14px; resize: vertical; line-height: 1.6; }
.field__control[aria-invalid="true"] { border-color: var(--field-error); }
.field__select { position: relative; }
.field__select .field__control { padding-right: 44px; cursor: pointer; }
.field__select .ico { position: absolute; top: 50%; right: 14px; margin-top: -9px; color: var(--text); pointer-events: none; }
.field__hint { margin-top: 6px; font-size: 13px; line-height: 1.5; color: var(--subtle); }
.field__error {
  display: flex; gap: 8px; margin-top: 8px;
  font: 600 13px/1.5 var(--font-sans); color: var(--field-error);
}
.field__error::before {
  content: ""; flex: none; width: 8px; height: 8px; margin-top: 6px; background: var(--field-error);
}

/* checkbox quadrado, borda field-line, marcado em cta-bg com o traço check em cta-text */
.check { display: flex; align-items: flex-start; gap: 14px; }
.check__box {
  flex: none; width: 22px; height: 22px; margin: 1px 0 0;
  background: var(--modal-bg) center / 18px 18px no-repeat;
  border: 1px solid var(--field-line); border-radius: var(--radius-none);
  -webkit-appearance: none; appearance: none; cursor: pointer;
}
.check__box:checked {
  background-color: var(--cta-bg); border-color: var(--cta-bg);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23faf9f5' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 4 4L19 6'/%3E%3C/svg%3E");
}
.check__box:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.check__box[aria-invalid="true"] { border-color: var(--field-error); }
.check__label { font-size: 14px; line-height: 1.6; color: var(--muted); cursor: pointer; }
.check__label a, .form__alert a, .legal a:not(.button):not(.text-link) {
  color: var(--link); text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px;
}

/* honeypot: fora da tela, do fluxo de leitura e do teclado */
.hp { position: absolute !important; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden; }

/* Turnstile: reserva a altura do widget (65px) para não haver salto; antes de
   carregar, mostra só um rótulo mono sobre a hairline */
.cf-turnstile { min-height: 65px; }
.cf-turnstile:empty {
  display: flex; align-items: center; max-width: 300px; padding: 0 16px;
  border: 1px solid var(--line);
}
.cf-turnstile:empty::before {
  content: "Verificação anti-robô"; font: 600 12px/1.5 var(--font-mono); letter-spacing: .13em; text-transform: uppercase; color: var(--subtle);
}

.form__submit { display: flex; align-items: center; gap: 18px; }
.form__submit .button[disabled] { cursor: progress; background: var(--cta-hover); transform: none; }
.form__alert {
  display: flex; gap: 12px; padding: 14px 18px;
  border: 1px solid var(--field-error); background: var(--modal-bg);
  font: 600 14px/1.6 var(--font-sans); color: var(--field-error);
}

.form-success {
  max-width: calc(var(--page-max) * 2 / 3);
  padding: var(--space-5); border: 1px solid var(--line); background: var(--modal-bg);
}
.form-success .ico { width: 20px; height: 20px; color: var(--icon-ink); }
.form-success__title { margin: 18px 0 8px; font-family: var(--font-serif); font-size: 30px; font-weight: 400; line-height: 1.2; letter-spacing: -.015em; color: var(--text); }
.form-success p { font-size: 15px; line-height: 1.7; color: var(--muted); }
.form-success:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }

/* coluna lateral: as três primeiras etapas, divididas por line */
/* 14. Páginas legais ------------------------------------------------------- */
.legal { max-width: 44em; margin-top: var(--space-6); }
.legal__meta { margin-top: var(--space-3); font: 600 12px/1.5 var(--font-mono); letter-spacing: .13em; text-transform: uppercase; color: var(--subtle); }
.legal__section + .legal__section { margin-top: var(--space-5); }
.legal h2 {
  margin: 0 0 14px; font-family: var(--font-serif); font-optical-sizing: auto;
  font-size: 30px; font-weight: 400; line-height: 1.2; letter-spacing: -.015em; color: var(--text);
}
.legal p, .legal li { font-size: 15px; line-height: 1.75; color: var(--muted); }
.legal p + p, .legal p + ul, .legal ul + p { margin-top: 12px; }
.legal ul { margin: 0; padding-left: 20px; }
.legal li + li { margin-top: 4px; }
.legal strong { color: var(--text); font-weight: 700; }
/* pendência visível para revisão: "[a definir]" como rótulo, sobre surface-2 */
[data-pendente] {
  padding: 1px 6px; background: var(--surface-2); color: var(--text);
  font: 600 12px/1.5 var(--font-mono); letter-spacing: .13em; text-transform: uppercase;
}

@media (max-width: 640px) {
  .page-intro { padding: var(--space-6) var(--gutter) var(--space-7); }
  .page-section { padding: var(--space-7) var(--gutter); }
  .paths, .contato-grid { margin-top: 38px; }
  .page-contato .page-intro { padding-bottom: 0; }
  /* um card por linha, todos com a altura do maior */
  .paths { grid-template-columns: minmax(0, 1fr); grid-auto-rows: 1fr; }
  .path { padding: var(--space-4); }
  .form { gap: var(--space-4); }
  .form__grid { grid-template-columns: minmax(0, 1fr); gap: 22px; }
  .form__group--end { gap: 22px; }
  .form-success { padding: var(--space-4); }
  .legal h2 { font-size: 26px; }
}
@media (prefers-reduced-motion: reduce) {
  .path, .field__control, .site-footer li a { transition: none; }
}

/* Esteira na home: convite comercial sob a pilha (decisão do cliente: sem preços) */
.esteira__cta {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 18px 32px;
  padding: var(--space-4) 0; margin-bottom: var(--space-4);
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
}
.esteira__pitch { max-width: 36em; font-size: 17px; line-height: 1.75; color: var(--muted); }
/* uma regra só: a lista encolhe ao conteúdo, sem hairline sobrando à direita */
.rules:has(> li:only-child) { grid-template-columns: minmax(0, max-content); width: fit-content; max-width: 100%; }

/* 15. Menu sem JS (aprimoramento progressivo; todas as páginas) ----------------
   site.js põe .js no <html> ao iniciar. Sem .js, abaixo do breakpoint do menu
   (760px), o botão de menu (que não abriria) some e a nav vira uma linha de links
   sob a barra do logo, com alvo de 44px; o header deixa de ser fixo e passa a
   ocupar o próprio espaço no fluxo. O CTA da nav (menu aberto) não aparece: no
   641–760 o botão do header continua na barra. Com .js nada muda. */
@media (max-width: 760px) {
  html:not(.js) .site-header { position: relative; height: auto; transform: none; }
  html:not(.js) .site-header__inner { flex-wrap: wrap; row-gap: 0; height: auto; }
  html:not(.js) .site-header__inner > .brand { min-height: var(--header-h); }
  html:not(.js) .site-header__menu { display: none; }
  html:not(.js) .site-nav {
    position: static; display: flex; flex-direction: row; flex-wrap: wrap; align-items: center;
    order: 3; width: 100%; gap: 0 24px; margin: 0; padding: 0 0 8px;
    height: auto; overflow: visible; background: transparent; border: 0;
  }
  html:not(.js) .site-nav a { min-height: 44px; border-bottom: 0; }
  html:not(.js) .site-nav .site-nav__cta { display: none; }
  /* header no fluxo: o conteúdo não precisa mais descontar a altura dele */
  html:not(.js) .page-inner main { padding-top: 0; }
}

/* 16. Sem JS: um botão primário por vista nas páginas com CTA no topo ------------
   Com JS, home.js/esteira.js/casos.js escondem o botão do header enquanto o CTA do
   hero (ou o final) está na tela. Sem JS não há esse controle: nas páginas marcadas
   com body.has-hero-cta o botão do header fica oculto (a ação está no topo e no
   CTA final). Contato e política não são marcadas e mantêm o botão. */
html:not(.js) .has-hero-cta .site-header__cta { display: none; }
