/* Cabeçalho e rodapé padrão: usado por todas as páginas e ferramentas.
   Fala o vocabulário do design system (tokens em português, sem fallback):
   `assets/design-system.css` é carregado antes desta folha em toda página que
   usa o componente. Página que ainda não carrega a folha declara os mesmos
   nomes no próprio `:root`, é o caso de `privacidade/` e `termos/`. */

/* ---------------------------------------------------------------------------
   A GRADE: um container para a casca inteira (design-system.md §9, v2 de
   05/09/2026). Medido pelo Designer em 21 páginas: 12 larguras de container
   no conteúdo, o cabeçalho numa 13ª (1400) e o rodapé numa 14ª; a 1280 o
   logo, o conteúdo e o rodapé começavam em três x diferentes em 20 de 21.
   A regra é UMA, escrita UMA vez, para as cinco caixas da casca: cabeçalho,
   miolo do rodapé, linha final do rodapé, raiz da ferramenta e raiz da
   institucional. Os números moram em `design-system.css` (`--container`,
   `--gutter`); aqui só o token. `testes/grade.teste.js` reprova quem sair.
   `--largura-ferramenta`/`--largura-pagina` NÃO mudam o container: limitam a
   coluna interna de conteúdo (`.ferramenta-conteudo`/`.pagina-conteudo`),
   que nasce na linha-guia, à esquerda; centrar a coluna criaria uma segunda
   linha-guia, que foi o defeito medido (§9, "A ferramenta estreita").
   --------------------------------------------------------------------------- */
.rhc-topo,.rhc-rodape-in,.rhc-r-fim,.ferramenta,.pagina{
  max-width:var(--container);margin-inline:auto;padding-inline:var(--gutter)}
.ferramenta-conteudo,.pagina-conteudo{min-width:0;margin-left:0}
.ferramenta-conteudo{max-width:var(--largura-ferramenta)}
.pagina-conteudo{max-width:var(--largura-pagina)}
/* Os dois modificadores de coluna do §9, formulário e documento longo. A
   página marca a classe no container do conteúdo, via `identidade().coluna`
   na ferramenta ou `{ coluna }` em `RHCPagina.iniciar`.
   REVISTO EM 10/09/2026 (§21 e §25): a coluna estreita ancorada à esquerda era
   o defeito "texto todo colado na esquerda". Na FERRAMENTA ela não estreita
   mais nada: quem divide a largura é o layout de app (`.ferramenta-corpo`,
   no fim desta folha). Na INSTITUCIONAL ela é CENTRADA de propósito: é a
   tarefa única e curta (entrar, segurança da conta, descadastro), o desenho
   das telas de entrada do Linear e do Vercel, com a mesma sobra dos dois
   lados. A classe continua sendo marcada pelas duas bases. */
.coluna-estreita{max-width:var(--coluna-estreita)}
.coluna-leitura{max-width:var(--coluna-leitura)}
.pagina-conteudo.coluna-estreita{margin-inline:auto}
.ferramenta-corpo > .coluna-estreita,.ferramenta-corpo > .coluna-leitura{max-width:none}

.rhc-topo{display:flex;align-items:center;justify-content:space-between;gap:var(--e-4);flex-wrap:wrap;
  padding-block:var(--e-4)}
.rhc-logo{display:inline-flex;align-items:center;gap:var(--e-2);min-height:var(--toque-min);
  text-decoration:none;color:inherit}
.rhc-logo svg{width:47.5px;height:40px;flex:none;display:block}

/* O prisma pintado por token: a marca nos dois temas.
   ---------------------------------------------------------------------------
   As cores saíram dos atributos do SVG porque `var()` não funciona lá. Aqui
   elas seguem o tema: no claro, `--acento`, `--secundaria` e `--primaria` já
   valem #C2410C, #0E7490 e #6D45FF, que é exatamente o que o guia de marca
   manda usar sobre fundo claro. O feixe de entrada é `--texto`: branco no
   escuro, quase-preto no claro; no escrito do guia, "a cor do texto". */
.rhc-prisma .pr-feixe{fill:var(--texto);opacity:.95}
.rhc-prisma .pr-vidro{fill:color-mix(in srgb, var(--primaria) 22%, transparent);
  stroke:var(--secundaria)}
.rhc-prisma .pr-dentro{opacity:.3}
.rhc-prisma .pr-c{fill:var(--acento)}
.rhc-prisma .pr-s{fill:var(--secundaria)}
.rhc-prisma .pr-p{fill:var(--primaria)}
.rhc-prisma .pr-ponta{opacity:.78}
.rhc-wordmark{font-family:"Space Grotesk",system-ui,sans-serif;font-weight:700;font-size:20px;
  color:var(--texto)}
.rhc-wordmark span{background:var(--espectro);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.rhc-nav{display:flex;gap:var(--e-2);flex-wrap:wrap}
.rhc-nav a{display:inline-flex;align-items:center;min-height:var(--toque-min);
  padding:var(--e-3) var(--e-5);border-radius:var(--r-total);font-weight:600;font-size:14px;text-decoration:none;
  color:var(--texto-3);border:1px solid var(--borda);
  /* Sem transição em `color`: com ela, a troca de tema ao vivo deixava o link
     preso na cor do tema anterior até recarregar (Chromium; medido em 05/09,
     AXE-03). A borda continua animando. */
  transition:border-color .2s}
.rhc-nav a:hover{color:var(--texto);border-color:var(--secundaria)}

.rhc-rodape{/* Era `margin-top:clamp(40px,8vh,90px)`, e somado ao padding-bottom
     de 64 da página dava de 129 a 185px de nada antes do filete: o maior vão
     de toda a varredura de 06/09, e o único acima de 96 em 15 páginas. Quem
     separa o rodapé do conteúdo agora é `--ritmo-rodape`, aplicado UMA vez,
     no pé da página (abaixo). O rodapé encosta no filete de propósito: o
     filete e a mudança de superfície já são a separação. */
  margin-top:0;border-top:1px solid var(--borda);
  /* Era rgba(11,15,26,.6): cinza-escuro fixo, que no tema claro pintava uma
     faixa quase preta sob uma página branca; visto em 19/08 num print do dono.
     A superfície de cartão é o token certo aqui: acompanha o tema sozinha. */
  background:var(--fundo-2)}
/* O respiro DENTRO do rodapé também era viewport (5vh/3vh no bloco, 4vw no
   vão): três valores que engordavam junto com a tela do dono. Viraram degraus
   da escala. O vão entre colunas continua elástico porque é horizontal, e vão
   horizontal pode acompanhar a largura; o vertical não. */
.rhc-rodape-in{padding-block:var(--e-7) var(--e-5);
  display:grid;row-gap:var(--ritmo-bloco);column-gap:clamp(24px,4vw,54px);grid-template-columns:1fr}
@media(min-width:820px){.rhc-rodape-in{grid-template-columns:minmax(0,1.25fr) minmax(0,1.75fr)}}
.rhc-r-marca p{color:var(--texto-3);font-size:16px;line-height:1.6;margin-top:var(--e-3);max-width:42ch}
.rhc-r-cols{display:grid;gap:var(--e-5);grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
/* O título de coluna virou <h2> em 06/09/2026: era <h3> logo abaixo do <h1> da
   página, e 12 páginas pulavam um nível de título por causa dele. O desenho é o
   mesmo, porque quem pinta é a classe. */
.rhc-r-cols h2{font-size:12px;text-transform:uppercase;letter-spacing:.14em;
  color:var(--secundaria);margin:0 0 var(--e-3);font-weight:700}
.rhc-r-cols a{display:flex;align-items:center;min-height:var(--toque-min);
  color:var(--texto-3);text-decoration:none;font-size:16px}
.rhc-r-cols a:hover{color:var(--texto)}
.rhc-r-fim{padding-block:var(--e-4) var(--e-5);
  border-top:1px solid var(--borda);display:flex;justify-content:space-between;gap:var(--e-3);flex-wrap:wrap;
  color:var(--texto-3);font-size:14px}
@media(max-width:620px){.rhc-r-fim{flex-direction:column;gap:var(--e-1)}}

/* ---------------------------------------------------------------------------
   PADRÃO DAS FERRAMENTAS
   Vale para toda ferramenta do catálogo, não só para as duas de hoje.

   1. faixa-jogo, o nome do jogo tem UM lugar: centralizado, com o símbolo
      próprio da ferramenta, filetes laterais e corpo maior que a wordmark do
      cabeçalho. A logo é assinatura; o jogo é o título.
   2. nota-ferramenta: a frase curta sobre como a ferramenta funciona
      ("tudo roda no seu navegador", "sala ao vivo…") fica logo ABAIXO do botão
      de ação principal, onde a pessoa está olhando ao decidir. Solta no meio ou
      no pé da página, ela vira ruído.
   1b. fj-lead, v2 §11 (05/09/2026): a segunda linha da faixa, a frase que
      diz o que a ferramenta faz. Vem de `identidade().lead`, a base emite.
      Medido: aparecia solta como `.mont-intro` no Bingo e em nenhuma das
      outras onze; o nome ficava "colado" no guia. Abaixo da faixa inteira,
      `--ritmo-faixa` (§10).
      Por que o lead NÃO tem `max-width` (05/09, medido pelos três Devs): o
      item flex parte de `flex-basis:100%`, mas o tamanho hipotético é
      APERTADO pelo `max-width`: com a medida ele encolhia para a medida,
      cabia ao lado do nome a 1280 e só descia a 375. A largura do item fica
      em 100% (é o que força a segunda linha) e a medida vira `padding-inline`
      em `max(0, (100% − medida)/2)`: o texto lê na medida, centrado, em toda
      tela. O número saiu daqui em 06/09 (B1): é `--medida-leitura`, do §21,
      e muda em um lugar só.
   --------------------------------------------------------------------------- */
.faixa-jogo{display:flex;flex-wrap:wrap;align-items:center;gap:clamp(12px,1.6vw,22px);row-gap:var(--e-2);width:100%;
  margin:0 auto var(--ritmo-faixa)}
.fj-lead{flex:1 0 100%;max-width:none;box-sizing:border-box;
  padding-inline:max(0px,calc((100% - var(--medida-leitura)) / 2));
  margin:0;text-align:center;font-size:16px;line-height:1.6;color:var(--texto-2)}
.fj-fio{flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--borda-forte),transparent)}
.fj-nome{flex:none;display:inline-flex;align-items:center;gap:var(--e-3);
  font-family:"Space Grotesk",system-ui,sans-serif;font-weight:700;line-height:1.05;white-space:nowrap;
  font-size:var(--tipo-titulo-pagina);letter-spacing:-.01em;color:var(--texto)}
.fj-nome em{font-style:normal;background:var(--espectro);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.fj-nome .sb{flex:none;display:block}
@media(max-width:600px){
  .faixa-jogo{gap:var(--e-2);row-gap:var(--e-2)}
  .fj-nome{font-size:20px;gap:var(--e-2)}
}
/* A nota não tem teto desde 10/09/2026 (§21 revisto). Em tela larga ela mora
   no painel lateral (§25), alinhada à esquerda e com a largura do painel; na
   pilha do celular ela fecha a tela, centrada, depois do resumo. O teto de
   56ch de 06/09 existia porque a nota atravessava 1192px sozinha; no painel
   ela tem 326px, e fora dele a tela é estreita. */
.nota-ferramenta{margin:var(--e-3) 0 0;text-align:center;color:var(--texto-3);
  font-size:16px;line-height:1.6}
.nota-ferramenta b{color:var(--texto)}

/* ---------------------------------------------------------------------------
   3. bloco-etapa: cabeçalho padrão dos cartões de montagem de qualquer
      ferramenta. O número da etapa fica em um disco ancorado na BORDA do
      cartão (metade para fora); o TÍTULO abre a linha, na linha-guia do
      cartão; o selo e o ícone do assunto fecham a linha, à direita; um filete
      separa do conteúdo.

      Por que na borda: dentro do cartão o número disputava espaço com o ícone
      e empurrava o título; na borda ele vira marcador de sequência; lê-se a
      coluna de números antes de ler os títulos.

      Por que o ícone à DIREITA (v2 §11, 05/09/2026): medido em 12 de 12
      ferramentas, o título começava 36px à direita do corpo (24 de ícone +
      12 de vão) e computava peso 400, só o tamanho o separava do corpo.
      Agora `x(.be-tit) === x(primeiro p do corpo)` e o título é 20/700.
      Título → filete → corpo: `--ritmo-titulo` duas vezes (§10).
   --------------------------------------------------------------------------- */
.bloco-etapa{display:flex;align-items:center;gap:var(--e-3);
  font-family:"Space Grotesk",system-ui,sans-serif;font-size:20px;line-height:1.3;
  margin-bottom:var(--ritmo-titulo);padding-bottom:var(--ritmo-titulo);border-bottom:1px solid var(--borda)}
/* O disco fica montado no CANTO do cartão: o centro cai exatamente sobre o
   vértice, então metade sobra para fora nos dois eixos e as duas metades ficam
   simétricas na horizontal e na vertical. Pequeno e sem brilho: é marcador de
   sequência, não elemento de destaque. Exige `position:relative` no cartão
   (cada ferramenta declara isso na sua classe de cartão). */
.be-n{position:absolute;top:0;left:0;transform:translate(-50%,-50%);
  width:26px;height:26px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-family:"JetBrains Mono",monospace;font-weight:700;font-size:12px;color:#fff;
  background:linear-gradient(140deg,var(--primaria),var(--secundaria));
  box-shadow:0 0 0 3px var(--fundo)}
/* A ordem visual é a ordem da marcação (título · selo · ícone), e `order`
   a fixa também para a marcação antiga que ainda traga o ícone primeiro. */
.be-tit{flex:1;min-width:0;order:1;font-weight:700;color:var(--texto)}
.be-extra{flex:none;order:2;font-family:"JetBrains Mono",monospace;font-size:12px;color:var(--texto-3);
  padding:var(--e-1) var(--e-2);border-radius:var(--r-total);border:1px solid var(--borda)}
.be-ic{flex:none;order:3;width:var(--simbolo-catalogo);height:var(--simbolo-catalogo);color:var(--secundaria)}
.be-ic svg{width:100%;height:100%}
/* O disco fica no vértice em TODA largura. A exceção antiga (abaixo de 900px
   ele entrava na linha do título) existia porque o cartão encostava na borda
   da tela e metade do disco seria cortada; com a grade v2 a `--gutter` de 16
   é maior que a metade do disco (13), e o disco cabe. Dentro da linha ele
   empurrava o título 38px: o defeito A1 em tela estreita. */

/* ===========================================================================
   A FILEIRA FECHA (10/09/2026): a última fileira ocupa a largura inteira
   ---------------------------------------------------------------------------
   O DEFEITO, medido no WebKit e no Chromium com o guia aberto: os blocos do
   "Como funciona" em três colunas davam 1 + 3 + 1 em oito ferramentas, com
   913px vazios ao lado do último bloco a 1440, e 1 + 3 + 2 na Retrospectiva
   (457px). O mesmo defeito em /design/ (a régua de tokens em 6 + 1, 1125px;
   os cartões em 4 + 1, 1011px) e na letra miúda da chamada de /planos/.

   O QUE OS PESQUISADOS FAZEM (10/09, 1440 de tela, medido sobre as caixas):
   nenhum deixa vaga numa fileira de cartões. Linear e Vercel só publicam
   contagem que enche a fileira (Vercel /pricing: 27 grades de 4 colunas,
   todas com múltiplo de 4). Quando a contagem não enche, a última fileira
   divide a largura: o Notion dá `grid-column: 1 / -1` ao terceiro cartão de
   uma grade de duas (/product e /pricing), o Intercom fecha três trilhas com
   um cartão de uma e outro de duas (/customers), e o Stripe põe o último
   cartão do bento da capa em `flex-grow: 1` com base de 100%.

   A TÉCNICA, uma só para o produto, é a do Stripe com a conta de colunas do
   Notion: flex com quebra, e cada item nasce com a largura de uma coluna e
   cresce. A fileira cheia fica igual a uma grade; a fileira incompleta divide
   a largura inteira entre os seus itens, seja qual for a contagem, sem contar
   filho para achar a última fileira.
   - `--fileira-colunas` diz quantas colunas a largura comporta, em degraus
     (container query ou media query). Abaixo da largura da grade, 1.
   - Quando a divisão deixaria um item sozinho e largo demais para ler, a
     grade escolhe as colunas pelo número de itens, com `:has()`: quatro
     blocos do guia viram 2 + 2, e não 3 + 1 com uma linha de 190 caracteres;
     cinco passos viram 3 + 2, e não 2 + 2 + 1 (seção 4, os passos). A
     variável também vale declarada no ITEM: aí ela muda só a base dele.
   - O item que abre a leitura (`.destaque`) toma a fileira: base de 100%.
   - O item não declara altura nem margem: a altura da fileira é o `stretch`
     do flex, e margem somaria à base e empurraria o último para baixo.
   - O `- 1px` da base é a folga do arredondamento. Três colunas de 444,67px
     podem somar uma fração de pixel além da caixa, e a terceira desceria. O
     crescimento devolve o pixel a cada item.
   - As variáveis têm valor de reserva (`1` e `--ritmo-bloco`): quem só põe a
     classe tem uma coluna e o vão do bloco.
   ONDE A REGRA MORA HOJE: `interno/docs/design-system.md` §17.2, na tabela
   "Uma regra, dois mecanismos". A regra é uma só, nenhuma vaga na última
   fileira, e o mecanismo sai de uma pergunta: o item alinha partes de dentro
   com o vizinho?
   - FLEX, este bloco, quando os itens são independentes: blocos de leitura,
     passos, abas, amostras, opções de configuração. Também quando a grade
     mora numa coluna que não é a da página (a da ferramenta, um painel),
     mesmo com contagem conhecida, porque ali as colunas são da caixa e não
     da tela.
   - GRADE de 12 trilhas, em `design-system.css` §17.2, quando o cartão
     alinha título, descrição e selo com o vizinho por subgrid: é a
     `.grade-equilibrada`, do catálogo. Subgrid só existe com o pai em grade,
     e por isso ela não usa este bloco.
   =========================================================================== */
.fileira-fecha,.g-blocos,.g-passos,.pf-abas{display:flex;flex-wrap:wrap;align-items:stretch;
  gap:var(--fileira-vao, var(--ritmo-bloco))}
.fileira-fecha > *,.g-blocos > *,.g-passos > *,.pf-abas > *{min-width:0;margin:0;
  flex:1 1 calc((100% - (var(--fileira-colunas, 1) - 1) * var(--fileira-vao, var(--ritmo-bloco))) / var(--fileira-colunas, 1) - 1px)}
.fileira-fecha > .destaque,.g-blocos > .destaque{flex-basis:100%}

/* ===========================================================================
   A FILEIRA QUE ROLA (10/09/2026, BV16)
   ---------------------------------------------------------------------------
   O DEFEITO: grupo pequeno de pílulas com quebra livre deixava uma sozinha na
   última linha. As seis categorias do catálogo davam 5 + 1 a 1280, 1440 e
   1920 ("Metas e performance" sozinha), e os cinco itens do Feedback 4 + 1 a
   1280 ("Qualidade da reunião"), no WebKit e no Chromium.

   O QUE OS PESQUISADOS FAZEM (15 fontes, 8 design systems e 7 produtos, lidas
   em 10/09/2026): ninguém equilibra as linhas de chips; os componentes quebram
   livre; YouTube e Polaris, no celular, põem os chips numa fileira que rola;
   catálogo grande vira lateral ou menu; o Carbon põe até 6 numa linha.

   A REGRA (decisão do Coordenador, 10/09/2026):
   - GRUPO PEQUENO E FIXO, de até 8 pílulas, nunca tem pílula sozinha: é uma
     fileira só. Onde cabe, é uma fileira comum; onde falta largura, ela rola,
     com a borda esmaecida do lado em que há mais.
   - LISTA LONGA OU FEITA POR QUEM USA quebra livre, sem equilíbrio forçado:
     os itens do Bingo, os nomes do Amigo Oculto. Não leva esta regra.

   COMO SE PEDE:
   - `.fileira-rola` em qualquer fileira de pílulas (o índice por função do
     catálogo, que é navegação e não `.chip`);
   - `.chips[role="group"]` de até 8 itens entra sozinho, sem classe nova. O
     papel de grupo com rótulo é o que diz "conjunto de opções que o produto
     oferece", e é o que o leitor de tela já pede. Lista feita por quem usa não
     é grupo de opções e não leva o papel.
   Mora aqui, e não em `componentes/padroes.css`, porque esta é a folha que
   toda página carrega: `padroes.css` só entra em duas, e o `.chip` é de
   `componentes/formulario.css`.

   ACESSIBILIDADE:
   - teclado: cada pílula é link ou botão, o foco rola a fileira até ela, e o
     `scroll-padding` a deixa fora do esmaecido;
   - foco visível: 8px de folga por dentro, devolvidos pela margem, para o anel
     de 3px com afastamento de 2 (§6 do design-system.css) não ser cortado pela
     caixa que rola. A pílula fica no mesmo x e y de antes;
   - leitor de tela: nada sai da árvore. A rolagem só recorta a pintura, e o
     esmaecido é máscara, não conteúdo;
   - a barra de rolagem fica, fina: é o caminho de quem só tem mouse.
   O esmaecido usa `animation-timeline` (Chromium 115 e Safari 26). Sem ele, a
   pílula cortada na borda é a indicação. Sem rolagem, a linha do tempo fica
   inativa e não há máscara. Na máscara só o alfa conta: `black` não é cor de
   desenho, é "opaco".
   =========================================================================== */
@property --rola-ini{syntax:'<length>';inherits:false;initial-value:0px}
@property --rola-fim{syntax:'<length>';inherits:false;initial-value:0px}
.fileira-rola,.chips[role="group"]:not(:has(> :nth-child(9))){display:flex;flex-wrap:nowrap;
  overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scroll-padding-inline:var(--e-7);
  padding:var(--e-2);margin:calc(-1 * var(--e-2));scrollbar-width:thin}
.fileira-rola > *,.chips[role="group"]:not(:has(> :nth-child(9))) > *{flex-shrink:0}
/* COM FOCO DE TECLADO, A FILEIRA ABRE. Medido em 10/09/2026, numa página sem
   nenhuma folha da casa, no WebKit e no Chromium: o navegador rola até o item
   focado quando ele está escondido de todo, e NÃO rola quando ele está
   escondido em parte. A 1280, no Chromium, com Tab, "Metas e performance"
   ficava com 68 de 207px à vista e só 20 fora do esmaecido, com o foco nela;
   "Qualidade da reunião", no Feedback, 59 de 199 e 11. Nenhuma folha resolve
   isso com rolagem, e o Feedback não carrega script desta casa. Então,
   enquanto o foco de teclado está na fileira, ela quebra em linhas e toda
   pílula fica inteira, com o anel; o foco sai, e ela volta a uma fileira.
   Clique e toque não acionam `:focus-visible`: só quem navega por teclado vê
   a fileira aberta, e só onde ela de fato rolava. */
.fileira-rola:has(:focus-visible),.chips[role="group"]:not(:has(> :nth-child(9))):has(:focus-visible){flex-wrap:wrap;row-gap:var(--e-2)}
.fileira-rola:has(:focus-visible) > *,.chips[role="group"]:not(:has(> :nth-child(9))):has(:focus-visible) > *{flex-grow:0}
@keyframes rola-bordas{
  0%{--rola-ini:0px;--rola-fim:var(--e-7)}
  12%{--rola-ini:var(--e-7)}
  88%{--rola-fim:var(--e-7)}
  100%{--rola-ini:var(--e-7);--rola-fim:0px}}
@supports (animation-timeline: scroll()){
  .fileira-rola,.chips[role="group"]:not(:has(> :nth-child(9))){
    -webkit-mask-image:linear-gradient(to right,transparent,black var(--rola-ini),black calc(100% - var(--rola-fim)),transparent);
    mask-image:linear-gradient(to right,transparent,black var(--rola-ini),black calc(100% - var(--rola-fim)),transparent);
    animation:rola-bordas linear both !important;animation-timeline:scroll(self inline) !important}}
/* O `!important` acima é de propósito. O esmaecido não é movimento: não anda
   sozinho, só acompanha a rolagem que a própria pessoa faz, e é ele que diz
   que há mais. Páginas que desligam toda animação com movimento reduzido
   (`*{animation:none!important}` no Bingo) o apagavam: a 375, a duração da
   rodada rolava sem indicação nenhuma, nos dois motores. */

/* ---------------------------------------------------------------------------
   4. guia: bloco "Como funciona", colapsado por padrão, no topo da montagem de
      TODA ferramenta. Traz o passo a passo encenado (.palco-fases) e os blocos
      de leitura (.g-blocos). Quem já conhece não é obrigado a passar por ele;
      quem nunca conduziu tem o roteiro antes de começar.
   --------------------------------------------------------------------------- */
/* faixa → guia é `--ritmo-faixa` (§10): a faixa já traz essa margem embaixo e
   o guia a repete em cima; as duas colapsam numa só, e o valor não depende
   de qual das duas peças está na tela. */
.guia{margin-top:var(--ritmo-faixa);border:1px solid var(--borda);border-radius:var(--r-g);background:var(--fundo-2);overflow:hidden}
.guia > summary{display:flex;align-items:center;gap:var(--e-3);padding:var(--e-4);cursor:pointer;list-style:none}
.guia > summary::-webkit-details-marker{display:none}
.guia > summary:hover{background:color-mix(in srgb, var(--primaria) 6%, transparent)}
.guia summary b{display:block;font-size:16px}
.guia summary small{color:var(--texto-3);font-size:14px}
.guia .g-ic{flex:none;width:24px;height:24px;color:var(--secundaria)}
.guia .g-ic svg{width:100%;height:100%}
.guia .g-seta{margin-left:auto;color:var(--texto-3);transition:transform .25s var(--spring,cubic-bezier(.34,1.56,.64,1))}
.guia[open] > summary .g-seta{transform:rotate(180deg);color:var(--secundaria)}
.guia[open] > summary{border-bottom:1px solid var(--borda)}
.guia-corpo{padding:var(--e-4)}
.g-int{font-size:16px;line-height:1.6;margin-bottom:var(--e-4)}
.g-fases{display:grid;gap:var(--e-2);margin-bottom:var(--e-4)}
@media(min-width:900px){.g-fases{grid-template-columns:repeat(3,1fr)}}
.g-fase{display:flex;gap:var(--e-3);padding:var(--e-3) var(--e-4);border-radius:var(--r-m);background:var(--fundo);
  border:1px solid var(--borda)}
.g-n{flex:none;width:30px;height:30px;border-radius:var(--r-p);display:flex;align-items:center;justify-content:center;
  font-family:"JetBrains Mono",monospace;font-weight:700;background:linear-gradient(140deg,var(--primaria),var(--secundaria));color:#fff}
.g-fase b{font-size:16px}
.g-fase em{font-style:normal;font-family:"JetBrains Mono",monospace;font-size:12px;color:var(--secundaria);margin-left:var(--e-1)}
.g-fase p{color:var(--texto-3);font-size:16px;line-height:1.6;margin-top:var(--e-1)}
.g-fase p b, .guia-corpo li b{color:var(--texto)}
.g-cols{display:grid;gap:var(--e-4)}
@media(min-width:900px){.g-cols{grid-template-columns:1fr 1fr}}
.guia-corpo h4{font-size:12px;text-transform:uppercase;letter-spacing:.12em;color:var(--secundaria);margin-bottom:var(--e-2)}
.guia-corpo h4 + ul{margin-bottom:var(--e-3)}
.guia-corpo ul{list-style:none;display:grid;gap:var(--e-2)}
.guia-corpo li{position:relative;padding-left:var(--e-4);font-size:16px;line-height:1.6;color:var(--texto-3)}
.guia-corpo li::before{content:"";position:absolute;left:2px;top:.62em;width:6px;height:6px;border-radius:var(--r-p);
  background:linear-gradient(140deg,var(--acento),var(--primaria))}
.g-nota{margin-top:var(--e-2);color:var(--texto-3);font-size:14px;line-height:1.6}
.g-quando{margin-top:var(--e-4);padding:var(--e-3) var(--e-4);border-radius:var(--r-m);font-size:16px;line-height:1.6;
  border:1px solid color-mix(in srgb, var(--acento) 30%, transparent);background:color-mix(in srgb, var(--acento) 7%, transparent);color:var(--acento)}
.g-fontes{margin-top:var(--e-4);border-top:1px solid var(--borda);padding-top:var(--e-3)}
.g-fontes summary{display:flex;align-items:center;min-height:var(--toque-min);
  cursor:pointer;color:var(--secundaria);font-size:14px;font-weight:600}
.g-fontes p{color:var(--texto-3);font-size:14px;line-height:1.6;margin:var(--e-2) 0}
.g-fontes li{font-size:14px}

/* passo a passo encenado */
.palco-fases{margin:var(--e-4) 0;border:1px solid var(--borda);border-radius:var(--r-g);
  background:var(--fundo);overflow:hidden}
/* cinco passos: cabem em uma linha no monitor e viram duas no celular. A
   fileira fecha (10/09/2026, a técnica logo acima da seção 4): em três ou
   duas colunas, a aba que sobra divide a largura. Em grade, a 375, o quinto
   passo ficava na metade esquerda da última fileira com a outra metade vazia
   (154px de 307, 50%, no WebKit e no Chromium). */
.pf-abas{--fileira-vao:0px;--fileira-colunas:5;border-bottom:1px solid var(--borda)}
@media(max-width:760px){.pf-abas{--fileira-colunas:3}}
@media(max-width:420px){.pf-abas{--fileira-colunas:2}}
/* `background:transparent` explicito: sem isto a aba herda o cinza padrao de
   <button> do navegador (#C0C0C0) em qualquer pagina que nao tenha um reset
   global de botao, foi o que aconteceu na inicial, com o texto a 1,9:1.
   Componente que depende do reset da pagina hospedeira nao e componente. */
.pf-aba{display:flex;align-items:center;min-height:var(--toque-min);gap:var(--e-2);padding:var(--e-3);
  border-right:1px solid var(--borda);
  background:transparent;border-top:0;border-left:0;border-bottom:0;
  font-family:inherit;font-size:14px;
  color:var(--texto-3);transition:background .2s,color .2s}
.pf-aba:last-child{border-right:0}
.pf-aba[aria-selected="true"]{color:var(--texto);background:color-mix(in srgb, var(--primaria) 12%, transparent)}
.pf-n{flex:none;width:24px;height:24px;border-radius:var(--r-p);display:flex;align-items:center;justify-content:center;
  font-family:"JetBrains Mono",monospace;font-weight:700;font-size:12px;
  background:var(--fundo-2);border:1px solid var(--borda)}
.pf-aba[aria-selected="true"] .pf-n{background:linear-gradient(140deg,var(--primaria),var(--secundaria));color:#fff;border-color:transparent}
.pf-aba b{font-size:14px;line-height:1.3}
.pf-aba em{font-style:normal;font-family:"JetBrains Mono",monospace;font-size:12px;color:var(--texto-3)}
@media(max-width:900px){.pf-aba em{display:none}}
@media(max-width:640px){.pf-aba{padding:var(--e-2);gap:var(--e-2)}}
.pf-palco{padding:var(--e-4);min-height:238px}
.cena-duo{display:grid;gap:var(--e-3);grid-template-columns:1fr;animation:entra .4s var(--spring,cubic-bezier(.34,1.56,.64,1))}
@media(min-width:720px){.cena-duo{grid-template-columns:1.4fr 1fr}.cena-duo.um{grid-template-columns:1fr}}
.cena-telao,.cena-fone{position:relative;padding:var(--e-3);border-radius:var(--r-m);background:var(--fundo-2);
  border:1px solid var(--borda);display:flex;flex-direction:column;gap:var(--e-2)}
.cena-fone{max-width:260px}
.cena-rot{font-family:"JetBrains Mono",monospace;font-size:12px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--secundaria);margin-bottom:var(--e-1)}
.cena-it{display:flex;align-items:center;gap:var(--e-2);padding:var(--e-2) var(--e-3);border-radius:var(--r-m);background:var(--fundo);
  border:1px solid var(--borda);font-size:14px}
.cena-it.on{border-color:color-mix(in srgb, var(--sucesso) 45%, transparent);background:color-mix(in srgb, var(--sucesso) 9%, transparent)}
.cena-pt{margin-left:auto;font-family:"JetBrains Mono",monospace;font-size:12px;color:var(--texto-3)}
.cena-it.on .cena-pt{color:var(--sucesso)}
.cena-nome{margin-left:var(--e-3);padding:var(--e-1) var(--e-3);border-radius:var(--r-p);font-size:14px;
  background:color-mix(in srgb, var(--primaria) 14%, transparent);border:1px solid color-mix(in srgb, var(--primaria) 30%, transparent)}
.cena-cron{font-family:"JetBrains Mono",monospace;font-weight:700;font-size:28px;text-align:center;color:var(--acento)}
.cena-qr{width:76px;height:76px;background:#fff;border-radius:var(--r-p);padding:var(--e-1)}
.cena-qr svg{width:100%;height:100%}
.cena-cod{font-family:"JetBrains Mono",monospace;font-weight:700;font-size:20px;letter-spacing:.2em}
.cena-tags{display:flex;flex-wrap:wrap;gap:var(--e-1)}
.cena-tag{display:inline-flex;align-items:center;gap:var(--e-1);padding:var(--e-1) var(--e-2);border-radius:var(--r-total);font-size:12px;
  background:var(--fundo);border:1px solid var(--borda)}
.cena-tag.ok{border-color:color-mix(in srgb, var(--sucesso) 40%, transparent)}
.pisca-p{width:7px;height:7px;border-radius:50%;background:var(--sucesso);animation:pulsa 1.8s infinite}
@keyframes pulsa{70%{box-shadow:0 0 0 8px color-mix(in srgb, var(--sucesso) 0%, transparent)}100%{box-shadow:0 0 0 0 color-mix(in srgb, var(--sucesso) 0%, transparent)}}
.cena-podio{margin-top:var(--e-1);padding:var(--e-2) var(--e-3);border-radius:var(--r-m);font-size:14px;
  border:1px solid color-mix(in srgb, var(--alerta) 45%, transparent);background:color-mix(in srgb, var(--alerta) 10%, transparent)}
.cena-podio b{font-family:"JetBrains Mono",monospace;color:var(--alerta)}
.pf-txt{padding:0 var(--e-4) var(--e-3);color:var(--texto-3);font-size:16px;line-height:1.6}
.pf-txt b{color:var(--texto)}
.pf-ctrl{display:flex;align-items:center;gap:var(--e-3);padding:0 var(--e-4) var(--e-3)}
.pf-play{display:inline-flex;align-items:center;justify-content:center;min-height:var(--toque-min);
  font-family:inherit;font-size:14px;font-weight:600;color:var(--texto-3);padding:var(--e-3) var(--e-5);border-radius:var(--r-total);
  border:1px solid var(--borda-forte);background:transparent}
/* `background:transparent` zera o `buttonface` do UA: no escuro ele é um cinza
   médio e o --texto-3 por cima dava 2,07:1 (QA 05/09). O Bingo não sofria por
   ter `button{background:none}` de página; a regra é da base, não da página. */
.pf-play:hover{color:var(--texto);border-color:var(--secundaria)}
.pf-barra{flex:1;height:3px;border-radius:var(--r-total);background:var(--borda);overflow:hidden}
.pf-barra i{display:block;height:100%;width:0;background:var(--espectro)}
.pf-barra i.correndo{animation:corre 6s linear forwards}
@keyframes corre{to{width:100%}}
@media(prefers-reduced-motion:reduce){.pf-barra i.correndo{animation:none;width:100%}.cena-duo{animation:none}}

/* guia em blocos: sem divisão visível, virava uma parede de texto */
.g-blocos{--fileira-vao:var(--e-3);margin-top:var(--e-1)}
/* Mesmo motivo dos passos: três colunas cabem no guia largo, não no de 760,
   onde cada cartão de leitura ficaria com 234px. Duas colunas a partir de 560
   de guia, três a partir de 900, e a fileira fecha pela técnica logo acima
   da seção 4 (A FILEIRA FECHA, 10/09/2026): o bloco que sobra divide a
   largura com os irmãos da fileira. QUATRO BLOCOS viram 2 + 2. Em três
   colunas o quarto ficaria sozinho e cresceria até 1326px a 1440, perto de
   190 caracteres de 14px por linha, quase o dobro do teto medido nos
   pesquisados (84 a 100, `design-system.md` §21.1). O `of :not(.destaque)`
   conta só os blocos da grade: o destaque toma a fileira dele e fica fora da
   conta. */
@container guia (min-width:560px){.g-blocos{--fileira-colunas:2}}
@container guia (min-width:900px){.g-blocos{--fileira-colunas:3}
  .g-blocos:has(> :nth-child(1 of :not(.destaque)):nth-last-child(4 of :not(.destaque))){--fileira-colunas:2}}
.g-bloco{padding:var(--e-4);border-radius:var(--r-m);border:1px solid var(--borda);background:var(--fundo)}
.g-bloco h4{display:flex;align-items:center;gap:var(--e-2);font-size:12px;text-transform:uppercase;
  letter-spacing:.1em;color:var(--texto-3);margin-bottom:var(--e-3)}
/* O ícone do bloco de leitura fica em cima do título, em bloco: o texto
   começa na linha-guia interna do cartão e o ícone não o empurra (v2 §11). */
.g-bloco .gb-ic{display:block;flex:none;width:var(--simbolo-catalogo);height:var(--simbolo-catalogo);color:var(--secundaria);margin-bottom:var(--e-2)}
.g-bloco .gb-ic svg{width:100%;height:100%}
/* o destaque: primeiro na leitura, borda do espectro e um pouco mais de ar.
   O "mais de ar" é o degrau seguinte da escala (--e-5), não um número solto. */
.g-bloco.destaque{border-color:color-mix(in srgb, var(--primaria) 50%, transparent);
  background:linear-gradient(180deg,color-mix(in srgb, var(--primaria) 13%, transparent),color-mix(in srgb, var(--secundaria) 5%, transparent));padding:var(--e-5)}
.g-bloco.destaque h4{color:var(--texto);font-size:14px}
.g-bloco.destaque .gb-ic{color:var(--acento)}
@media(min-width:900px){.g-bloco.destaque ul{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--e-2) var(--e-5)}}
.g-bloco ul{list-style:none;display:grid;gap:var(--e-2)}
.g-bloco li{padding-left:var(--e-4);position:relative;line-height:1.6}
.g-bloco li::before{content:"";position:absolute;left:0;top:.55em;width:6px;height:6px;border-radius:var(--r-p);
  background:linear-gradient(140deg,var(--acento),var(--primaria))}
.g-bloco li b{font-size:16px}
.g-bloco li span{display:block;color:var(--texto-3);font-size:14px}
/* O intervalo numérico do guia (`.sem-quebra`, posto por `escFaixa` na base, 10/09/2026) é
   um span dentro do item, e a regra de cima o fazia bloco: "384–399" ia sozinho para uma linha
   inteira e o ponto descia para a de baixo. Aqui ele volta a ser texto corrido, com a cor e o
   corpo do item. */
.g-bloco li .sem-quebra{display:inline;color:inherit;font-size:inherit}
.g-fala{margin-top:var(--e-3);padding:var(--e-3) var(--e-4);border-radius:var(--r-m);font-size:16px;line-height:1.6;
  border:1px solid color-mix(in srgb, var(--secundaria) 28%, transparent);background:color-mix(in srgb, var(--secundaria) 7%, transparent)}
.g-fala b{color:var(--secundaria)}


/* ---------------------------------------------------------------------------
   5. btn-acao: o botão de ação principal de qualquer tela ocupa a LARGURA
      INTEIRA do bloco de conteúdo, alinhado aos cartões acima dele, com
      fonte de 20px e altura de var(--toque-acao) (o porte do "Bora sortear?"
      do Amigo Oculto). Todo botão leva ícone à esquerda do rótulo: o ícone diz
      o que acontece antes de a pessoa ler.
   --------------------------------------------------------------------------- */
/* .btn.btn-acao: a folha de cada ferramenta é carregada depois desta, então
   a regra precisa de especificidade maior para não perder para o .btn local */
.btn.btn-acao, .btn-acao{width:100%;min-height:var(--toque-acao);font-size:20px;border-radius:var(--r-m);
  display:inline-flex;align-items:center;justify-content:center;gap:var(--e-2)}
.btn-acao .bi, .btn .bi{width:20px;height:20px;flex:none}
.btn .bi{width:16px;height:16px}

/* ---------------------------------------------------------------------------
   CARROSSEL VIVO da página inicial: bloco B9b.
   O palco é o mesmo dos guias (.palco-fases); estes ajustes são o que muda
   quando ele deixa de ser um detalhe dentro de um `<details>` e passa a ser
   seção principal: mais respiro, saída visível e as abas por ferramenta em
   vez de por fase.
   O palco está NA GRADE (05/09, pedido dos Devs): `max-width:1000px` o
   centrava em x=140 a 1280, fora da linha-guia que a seção da home já põe
   em 44. É componente da casca, container e gutter vêm do token, como as
   cinco caixas do topo desta folha: a largura é `--container`, e a margem
   lateral é a `--gutter` que a seção da home já aplica em volta (a mesma
   conta de `.rhc-topo.sobre-hero`). O palco não repete a gutter: dentro do
   container ele ocupa a largura inteira, do x=44 ao x=1236.
   --------------------------------------------------------------------------- */
.cv-palco{max-width:var(--container);margin-inline:auto}
/* Na largura do container o duo muda de proporção: em `1.4fr 1fr` a trilha do
   celular cresce para ~480px e a cena (presa em 260) deixa ~230px vazios à
   direita. Aqui o celular tem a largura da cena e o telão fica com o resto:
   a mesma medida do celular dos guias, só a trilha muda. */
@media(min-width:720px){
  .cv-palco .cena-duo{grid-template-columns:minmax(0,1fr) auto}
  .cv-palco .cena-fone{width:260px}
}
.cv-palco .pf-abas{--fileira-colunas:4}
@media(max-width:760px){.cv-palco .pf-abas{--fileira-colunas:2}}
.cv-palco .pf-palco{min-height:300px}
/* A aba no ar precisa PARECER no ar. O tom de dentro dos guias (12% de roxo)
   some numa seção com este tamanho: aqui ela ganha a borda do espectro. */
.cv-palco .pf-aba[aria-selected="true"]{background:color-mix(in srgb, var(--primaria) 18%, transparent);
  box-shadow:inset 0 -2px 0 var(--primaria)}
@media(max-width:640px){.cv-palco .pf-palco{min-height:0}}

/* CV-6: a saída de cada cena. Fica na barra de controle, não solta no fim da
   seção, porque ela pertence à CENA que está no ar: muda junto com ela. */
.cv-saida{flex:none;display:inline-flex;align-items:center;justify-content:center;min-height:var(--toque-min);
  text-decoration:none;font-size:14px;font-weight:600;padding:var(--e-3) var(--e-5);border-radius:var(--r-total);
  color:var(--texto);background:color-mix(in srgb, var(--primaria) 16%, transparent);border:1px solid color-mix(in srgb, var(--primaria) 42%, transparent);
  transition:background .2s,border-color .2s}
.cv-saida:hover{background:color-mix(in srgb, var(--primaria) 26%, transparent);border-color:var(--primaria)}
@media(max-width:560px){
  .cv-palco .pf-ctrl{flex-wrap:wrap}
  .cv-saida{order:-1;width:100%;text-align:center}
}

/* CV-1 na tela, não só no código: quem olha a vitrine lê que ela é encenada. */
.cv-aviso{max-width:var(--container);margin:var(--e-3) auto 0;text-align:center;
  color:var(--texto-3);font-size:14px;line-height:1.6}

/* CV-7: no celular o duo vira uma coluna; telão e celular lado a lado não
   cabem em 375px, e espremer os dois entrega dois ilegíveis em vez de um bom. */
@media(max-width:719px){
  .cv-palco .cena-fone{max-width:none}
}

/* A cena anda por dentro (05/09/2026): cronômetro, contagem, palavra chegando.
   A entrada animada só na TROCA de cena (classe `entra`), nunca a cada quadro,
   senão o palco pulsaria a cada segundo. `entra` é o mesmo movimento dos guias. */
.cv-palco .cena-duo{animation:none}
.cv-palco .cena-duo.entra{animation:cv-entra .4s var(--spring,cubic-bezier(.34,1.56,.64,1))}
@keyframes cv-entra{from{transform:scale(.96) translateY(8px);opacity:0}to{transform:none;opacity:1}}
/* A palavra que cresce na nuvem: só degraus da escala tipográfica. */
.cena-tag.g1{font-size:16px}
.cena-tag.g2{font-size:20px}
.cena-tag.g3{font-size:28px}
.cena-ic{flex:none;vertical-align:middle}
.cena-nome .cena-ic{margin-right:var(--e-1)}
.cena-digit{display:inline-flex;align-items:center;min-height:1.4em}
.cena-cursor{display:inline-block;width:2px;height:1em;margin-left:var(--e-1);background:var(--texto);animation:cv-cursor 1s steps(2) infinite}
@keyframes cv-cursor{to{opacity:0}}
/* A curva do check-in: cinco semanas, a última viva. */
.cena-barras{display:block;width:100%;height:48px;color:var(--secundaria)}
.cena-barras rect{fill:color-mix(in srgb, currentColor 45%, transparent)}
.cena-barras rect.viva{fill:currentColor;transition:y .6s,height .6s}
.cena-carinhas{display:flex;gap:var(--e-2);justify-content:space-between}
.cena-carinha{display:flex;align-items:center;justify-content:center;width:var(--toque-min);height:var(--toque-min);
  border-radius:var(--r-m);border:1px solid var(--borda-forte);background:var(--fundo);color:var(--texto-3)}
.cena-carinha.ok{border-color:var(--primaria);color:var(--texto);background:color-mix(in srgb, var(--primaria) 14%, transparent)}
.pf-play .bi{width:16px;height:16px;margin-right:var(--e-2)}
/* Texto só para leitor de tela: o status da cena. */
.cv-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
@media(prefers-reduced-motion:reduce){.cena-cursor{animation:none}.cv-palco .cena-duo.entra{animation:none}}

/* Botão de tema, mesmo porte dos links do topo, e alvo de toque de verdade.
   Nasceu em 19/08/2026: o tema claro existia e não havia como escolhê-lo sem
   trocar o tema do sistema operacional inteiro. */
.rhc-tema{appearance:none;background:transparent;border:1px solid var(--borda-forte);
  color:var(--texto-2);border-radius:var(--r-total);cursor:pointer;
  min-height:var(--toque-min);padding:0 var(--e-4);
  font:inherit;font-size:14px;line-height:1;white-space:nowrap;
  transition:border-color var(--t-medio),color var(--t-medio)}
.rhc-tema:hover{border-color:var(--secundaria);color:var(--texto)}


/* ---------------------------------------------------------------------------
   A MARCAÇÃO QUE A BASE EMITE: descoberto pelo piloto de 22/08/2026.
   Esta folha foi escrita para o guia do Bingo (`.guia-corpo`, `.g-bloco h4`), e
   a base emite outros nomes (`.g-corpo`, `.g-passos`, blocos de <b>+<p>). Sem
   estas regras o guia sai sem respiro e o disco do bloco de etapa vaza para o
   canto da página, e a primeira migração resolveu isso com CSS local, que as
   outras sete copiariam. Regra que sete páginas copiariam mora na folha.
   --------------------------------------------------------------------------- */
/* O corpo respirava em três lados e não no de cima: `padding-top:0` colava o
   primeiro passo no filete que `[open] > summary` desenha. Medido a 1280 nas
   doze ferramentas em 06/09: 0px entre o filete e o título do passo 1, contra
   16 dos outros três lados. O padding passa a ser um só, e o interior do guia
   nasce no mesmo x em que o cabeçalho dele nasce. */
.g-corpo{padding:var(--e-4);container-type:inline-size;container-name:guia}
/* O vão entre passos era `--e-3` (12), MENOR que o vão entre duas linhas do
   mesmo passo (14px × 1,6 = 22,4). Nada agrupava: cinco passos liam como um
   parágrafo só, que é a "bagunça" medida. Agora a linha separa por
   `--ritmo-faixa` (24) e a coluna por `--ritmo-bloco` (32), os dois da escala:
   a coluna abre mais que a linha, então o olho lê o par lado a lado como dois
   passos e não como uma frase que atravessa a página. */
.g-passos{list-style:none;--fileira-vao:var(--ritmo-bloco);row-gap:var(--ritmo-faixa);
  margin:0 0 var(--ritmo-bloco);padding:0}
/* Uma linha-guia por passo: o disco na primeira coluna, título e texto na
   segunda, os dois no mesmo x. O disco alinha pelo CENTRO do título, não pelo
   topo do bloco, assim ele não fica pendurado acima da linha em passo de
   título longo. `align-content:start` porque a grade de fora ESTICA o <li>
   até a altura do par: sem ela, o passo de texto curto espalhava as duas
   linhas dentro da caixa esticada e abria um vão que não era de ninguém. */
.g-passo{display:grid;grid-template-columns:auto minmax(0,1fr);
  column-gap:var(--e-3);row-gap:var(--e-1);align-items:center;align-content:start}
.g-passo .g-n{grid-area:1/1;width:var(--simbolo-catalogo);height:var(--simbolo-catalogo);
  font-size:12px;line-height:1}
.g-passo > b{grid-area:1/2}
.g-passo .g-t{grid-area:2/2}
/* A grade dos passos abre em duas colunas quando o GUIA é largo, não quando a
   TELA é larga. A diferença passou a existir em 06/09, quando o guia deixou de
   ser a largura do container e passou a ser a da coluna: a 1280 as sete
   ferramentas de coluna estreita tinham tela de 1280 (a regra ligava) e guia de
   760, e cada passo caía numa coluna de 311px: 44 caracteres a 14px, contra os
   60 a 75 que o §21 pede. `@container` pergunta ao guia, que é quem sabe. */
/* CONTAGEM ÍMPAR: OS TRÊS PRIMEIROS FECHAM A PRIMEIRA FILEIRA (10/09/2026).
   O DEFEITO: em duas colunas, cinco passos davam 2 + 2 + 1, e o quinto
   crescia sozinho pela fileira inteira. Medido no WebKit e no Chromium com o
   guia aberto, nos dois temas, as medidas iguais ao décimo de pixel: a 1440
   e a 1920 o passo sozinho tinha 1358px e linhas de 146 a 198 caracteres nas
   dez ferramentas de cinco passos, o dobro do teto de 90; onde o texto cabia
   em uma linha, sobrava a ponta direita vazia, até 26% (Amigo Oculto). A
   1280, 146 a 179 caracteres. No espécime de /design/, três passos curtos em
   2 + 1, o terceiro sobrava com 77% da fileira vazia a 1440. Esticar era pior
   que a vaga, e teto no texto é o que o §21 (E2) proíbe.
   A SAÍDA é a do §17.2, colunas pela contagem, declarada no item: com número
   ímpar de passos, os três primeiros nascem com um terço da largura e fecham
   a primeira fileira, e os outros seguem em pares. 5 viram 3 + 2, 3 viram 3,
   7 viriam 3 + 2 + 2; contagem par continua em pares (Retrospectiva e Duas
   Verdades, 2 + 2 + 2). Com o guia em colunas, nenhuma fileira sai com um
   passo só, e o guia aberto fica mais baixo: o do Bingo passou de 314 para
   238px a 1440.
   O PREÇO, medido nas mesmas dez: na fileira de três a linha tem 47 a 52
   caracteres a 1280 e 51 a 61 a 1440 e 1920, abaixo do piso de 60; na de
   dois, 74 a 85 e 83 a 98, como já era. Na tela de 1024 a 1180, medida no
   WebKit, a fileira de três desce a 32 a 48, e o passo sozinho, antes, tinha
   121 a 154. Linha curta lê devagar; linha de 198 não se lê. */
/* A FAIXA ESTREITA DO GUIA (10/09/2026, BV30). Com o guia de 900 a 1119px
   (tela de 1024 a 1201), a fileira de três dava 37,0 a 40,3 caracteres por
   linha a 1024, 40,6 a 44,3 a 1100 e 44,5 a 48,5 a 1180, nos dois motores
   (medida = coluna do texto / largura média do caractere, §16.1); o primeiro
   passo do Check-in descia a 11 linhas a 1024. O DISCO EM CIMA DO TÍTULO,
   medido antes de mexer, dá ao texto os 36px do disco e do vão e não basta:
   42,2 a 46,0 a 1024 (28 de 30 passos abaixo de 45) e 42,2 a 49,9 a 1100 (2
   de 33). Em três colunas a conta não fecha: a 1024 cada passo tem 293px.
   A SAÍDA: nessa faixa o guia fica em duas colunas, e o último passo de uma
   contagem ímpar toma a fileira com as duas trilhas de cima, disco e título
   na primeira e o texto na segunda, no mesmo x do texto dos passos da coluna
   da direita. O texto dele tem a coluna dos outros, então não há passo
   sozinho de linha longa. A partir de 1120px de guia (tela de 1202) volta o
   3 + 2, com 47,2 caracteres ou mais a 1240. */
@container guia (min-width:900px){.g-passos{--fileira-colunas:2}}
@container guia (min-width:1120px){
  .g-passos:has(> :last-child:nth-child(odd)) > :nth-child(-n+3){--fileira-colunas:3}}
/* O PASSO QUE ATRAVESSA A FILEIRA LÊ COMO UM PASSO (10/09/2026, BV35). Com o
   título na primeira trilha e o texto na segunda, o título ficava sozinho à
   esquerda e o texto caía embaixo do texto do passo 4, no mesmo x: nas dez
   ferramentas de cinco passos, de 1024 a 1201, nos dois motores, o texto do
   último nascia a 523-612px do começo do item, na altura do título. Parecia
   continuação do 4.
   AGORA o item tem a forma de todo passo, disco e título em cima e o texto
   embaixo, e o texto corre em duas colunas alinhadas às trilhas de cima. A
   conta: o texto começa no x do título (disco + vão, como nos outros), e o vão
   entre as colunas é o vão da fileira mais disco e vão, então a coluna da
   esquerda termina onde termina a trilha da esquerda e a da direita começa no
   x do texto do passo da direita. Cada coluna tem a largura do texto dos
   passos de cima: a medida de leitura não muda (59,5 a 78,7 caracteres por
   linha de 1024 a 1201, igual ao que era, nos dois motores).
   OS MOTORES DIFEREM SÓ NO TEXTO DE DUAS LINHAS. `orphans` e `widows` em 1
   fazem o Chromium partir duas linhas em 1 + 1. O WebKit não lê as duas
   propriedades (o valor calculado continua 2) e deixa as duas linhas na
   primeira coluna, com a segunda vazia na altura de duas linhas (45px):
   acontece no Amigo Oculto e no Kudos de 1180 a 1201. Com três linhas ou mais
   os dois dão o mesmo equilíbrio: 2 + 1, 2 + 2, 3 + 2, 3 + 3. */
@container guia (min-width:900px) and (max-width:1119.98px){
  .g-passos > .g-passo:last-child:nth-child(odd) .g-t{column-count:2;orphans:1;widows:1;
    column-gap:calc(var(--fileira-vao, var(--ritmo-bloco)) + var(--simbolo-catalogo) + var(--e-3))}}
.g-passo b{font-family:"Space Grotesk",system-ui,sans-serif;font-size:16px;color:var(--texto)}
/* O texto do passo enche a coluna do passo (§21 revisto, 10/09/2026). Com o
   teto de 528px o portão de espaço mediu o texto parando a 64-78% da coluna
   em doze de doze ferramentas; quem limita a linha é a coluna do passo, um
   terço ou metade do guia aberto pela contagem acima. */
.g-passo .g-t{font-size:14px;line-height:1.6;color:var(--texto-2);display:block}
.g-bloco b{display:block;font-family:"Space Grotesk",system-ui,sans-serif;font-size:16px;
  color:var(--texto);margin-bottom:var(--e-2)}
.g-bloco p{font-size:14px;line-height:1.6;color:var(--texto-2);margin:0}
.gb-ic{display:block;width:24px;height:24px;color:var(--secundaria);margin-bottom:var(--e-2)}
.gb-itens{margin:var(--e-2) 0 0;padding-left:var(--e-4);display:grid;gap:var(--e-1)}
.gb-itens li{font-size:14px;line-height:1.6;color:var(--texto-2)}
.gb-itens li b{display:inline;margin:0;font-size:14px}

/* O cartão de etapa que `bloco()` emite. O CSS do disco exige `position:relative`
   no cartão e dizia "cada ferramenta declara na sua classe", mas se a base já
   assume a classe, o cartão vem com ela. */
.cartao-etapa{position:relative;margin-top:var(--ritmo-bloco);padding:var(--e-5);
  border-radius:var(--r-g);background:var(--fundo-2);border:1px solid var(--borda)}
/* guia → primeiro bloco é `--ritmo-guia`, e bloco → bloco `--ritmo-bloco`
   (§10): o primeiro filho do conteúdo ganha o degrau do guia; os seguintes,
   o do bloco. Em tela estreita o cartão respira 16 (§11, L6). */
@media(max-width:719px){.cartao-etapa{padding:var(--e-4)}}

/* Enquadramento fora da tela projetada: faixa, guia e nota são de quem monta a
   dinâmica a 60 cm; na projeção a três metros eles competem com o conteúdo.
   A tela que declara `enquadramento:false` sem ser projetada (06/09: o
   celular de quem joga, a revelação de quem recebeu o link) perde guia e
   nota, que são de quem conduz; a FAIXA fica, porque a página precisa de
   título a 30 cm: ela só sai em `html.telao`, onde o conteúdo é o título. */
.sem-enquadramento .ferramenta-corpo > .guia,
.sem-enquadramento .ferramenta-lado{display:none}
html.telao .sem-enquadramento > .faixa-jogo{display:none}

/* ---------------------------------------------------------------------------
   O QUE A BASE EMITE, parte 2: os quatro pedidos das migrações (04/09/2026).
   Nuvem, Kudos, Duas Verdades, Check-in e Retro herdaram a base e pediram as
   mesmas quatro coisas. Regra que cinco páginas repetem mora aqui.
   --------------------------------------------------------------------------- */

/* 1. Cabeçalho e rodapé do site somem na projeção. `.sem-enquadramento` só
   alcança filhos de #app, e #rhc-topo/#rhc-rodape vivem fora dele. A regra
   mira o que `rodape.js` DESENHA (`.rhc-topo`, `.rhc-rodape`), não os divs
   de encaixe: assim ela não disputa com nenhuma regra local sobre `#rhc-topo`
   e ganha sem precisar de id nem de !important. */
html.telao .rhc-topo,
html.telao .rhc-rodape{display:none}

/* 2. A largura da ferramenta. Até 05/09 cada página trazia o seu
   `#app{max-width:…}` (760, 820, 900, 1100 e 1120: um por ferramenta) e
   `--largura-ferramenta` mudava o container. Agora o container é o da GRADE
   (topo desta folha): `.ferramenta` só põe o respiro do pé, e
   `--largura-ferramenta` limita a coluna de conteúdo, dentro dele. A
   página que precisa da coluna estreita declara `identidade().coluna`, e
   nada mais. É classe, não `#app`, de propósito: regra por id alcançaria
   página que não passou pela base. */
.ferramenta{padding-bottom:var(--ritmo-rodape)}
html.telao .ferramenta{max-width:none;padding:0}
/* 2b. A coluna solta no telão (05/09, pedido dos Devs no Kudos): a coluna
   estreita é da montagem, lida a 60 cm; projetada, ela deixaria o mural em
   760px encostados à esquerda de um projetor largo. Em `html.telao` toda
   coluna de conteúdo solta o limite, seja da identidade ou da tela. Quem
   quer coluna numa tela específica declara `telas().x.coluna`; a base aplica
   a classe por tela em `irPara`. */
html.telao .ferramenta-conteudo{max-width:none}
html.telao .ferramenta-corpo{display:block;margin-top:0}

/* 3. A saída da projeção. No pé do conteúdo e à direita, onde o Bingo põe
   a barra de controle do telão, porque no pé ela não disputa com o título
   projetado nem cobre o que a ferramenta desenhou. `margin-top:auto` ancora
   no pé quando o container é flex-coluna (a `.projecao` da Nuvem). O corpo é
   `--telao-apoio` no telão: nada abaixo dele numa tela lida a três metros. */
.ferramenta-saida{display:flex;justify-content:flex-end;margin-top:auto;padding-top:var(--e-5)}
.ferramenta-sair{gap:var(--e-2)}
.ferramenta-sair svg{width:20px;height:20px;flex:none}
html.telao .ferramenta-sair{font-size:var(--telao-apoio)}

/* 4a. Abas de uma view (`Ferramenta.abas`). A marcação é a do check-in; o
   painel que sai recebe `hidden`, e esta regra garante que `hidden` vença
   qualquer `display` que a página dê ao painel. */
.abas{display:flex;flex-wrap:wrap;gap:var(--e-2);margin-bottom:var(--e-4)}
.aba{appearance:none;background:transparent;border:1px solid var(--borda-forte);
  min-height:var(--toque-min);display:inline-flex;align-items:center;justify-content:center;
  color:var(--texto-3);border-radius:var(--r-total);padding:var(--e-2) var(--e-4);
  cursor:pointer;font-family:inherit;font-weight:600;font-size:14px}
/* A aba ativa NÃO é botão primário (§14.1, 06/09): diz-se por borda e cor de
   texto, nunca por preenchimento; o preenchido é da única ação primária da
   tela. Borda dupla por sombra interna para não mexer no tamanho. */
.aba[aria-selected="true"]{color:var(--primaria-texto);border-color:var(--primaria-texto);
  box-shadow:inset 0 0 0 1px var(--primaria-texto)}
[role="tabpanel"][hidden]{display:none}

/* 4b. Barra de fases (`Ferramenta.progresso`). Lista ordenada de verdade:
   ativo por `aria-current`, concluído por ✓ além da cor (RT-09). */
.barra-fase{display:flex;gap:var(--e-2);flex-wrap:wrap;align-items:center;
  list-style:none;margin:0 0 var(--e-5);padding:0;color:var(--texto-3);font-size:14px}
.passo{display:inline-flex;align-items:center;gap:var(--e-2);
  padding:var(--e-2) var(--e-3);border-radius:var(--r-total);
  border:1px solid color-mix(in srgb, var(--texto-3) 20%, transparent)}
.passo[data-ativo="sim"]{background:var(--primaria);color:var(--btn-texto);border-color:var(--primaria)}
.passo[data-feito="sim"]{color:var(--sucesso);
  border-color:color-mix(in srgb, var(--sucesso) 40%, transparent)}
.passo svg{width:14px;height:14px;flex:none}

/* ---------------------------------------------------------------------------
   O QUE A BASE EMITE, parte 3: o portão na preparação e o campo que ele lê
   (05/09/2026). `funil-de-ativacao.md §3`: uma pergunta antes de abrir, e o
   gate transparente no lugar da montagem quando a resposta é "4 ou mais".
   --------------------------------------------------------------------------- */

/* O campo do bloco "Quantas pessoas?". As cinco páginas migradas já traziam
   `.campo`/`.entrada` iguais, cada uma na sua folha; estes são os mesmos
   valores, na mesma especificidade, ANTES delas no cascata: a folha local
   continua vencendo onde existe, e o bloco da base não sai nu onde não. */
.campo{display:block;font-weight:600;margin-bottom:var(--ritmo-rotulo);font-size:14px}
.entrada{width:100%;background:var(--fundo);color:var(--texto);
  border:1px solid var(--borda-forte);border-radius:var(--r-m);
  padding:var(--e-3) var(--e-4);font-size:16px;min-height:var(--toque-min)}
.entrada[aria-invalid="true"]{border-color:var(--acento)}
.campo-erro{margin:var(--ritmo-rotulo) 0 0;font-size:14px;color:var(--acento)}
.campo-erro[hidden]{display:none}
/* O grupo de campo (v2 §13): rótulo, campo, ajuda/erro a `--ritmo-rotulo`
   um do outro, grupo → grupo a `--ritmo-paragrafo`. A anatomia completa mora
   em `componentes/formulario.css`, que a página lista depois desta folha;
   o mínimo fica aqui para o bloco da base não sair nu onde ela ainda não
   chegou. Dentro do grupo, o gap É o ritmo: as margens soltas zeram. */
.grupo-campo{display:grid;gap:var(--ritmo-rotulo);margin:0 0 var(--ritmo-paragrafo);min-width:0}
.grupo-campo:last-child{margin-bottom:0}
.grupo-campo > .campo,.grupo-campo > .campo-erro{margin:0}
/* Dentro do grupo a nota perde a margem vertical mas NÃO a caixa centrada do
   §21: `margin:0` zerava o `auto` e a jogava para a esquerda. */
.grupo-campo > .nota-ferramenta{margin-block:0}
.ferramenta-nota-campo{text-align:left}

/* O gate: a forma dos três estados de `componentes/estados.css` (coluna,
   centrado, cartão), sem depender do componente; `nucleo/` não consome
   `componentes/`. Não é erro nem vazio: é uma proposta, e a cor do ícone é a
   secundária, não o coral. Duas saídas de verdade (`.btn`) e uma terceira
   discreta, para quem quer só ajustar o número. */
.ferramenta-portao{display:flex;flex-direction:column;align-items:center;text-align:center;
  gap:var(--e-3);margin-top:var(--e-5);padding:var(--e-7) var(--e-5);
  border-radius:var(--r-g);background:var(--fundo-2);border:1px solid var(--borda)}
.fp-ic{color:var(--secundaria);flex:none;width:40px;height:40px}
/* A VARIANTE DE ERRO (`data-estado="erro"`, 10/09/2026). Quando a pergunta de
   acesso falha (códigos ferramenta-1 e ferramenta-2) o portão deixa de ser
   proposta e passa a ser erro, e o triângulo toma a cor de erro do sistema,
   `--acento`: a mesma do ícone de `.est-erro` em `componentes/estados.css` e
   do `.campo-erro`. Até aqui ele herdava a secundária da proposta, e a falha
   lia como convite. A negação de verdade continua na secundária. */
.ferramenta-portao[data-estado="erro"] .fp-ic{color:var(--acento)}
.fp-titulo{font-family:"Space Grotesk",system-ui,sans-serif;font-size:20px;font-weight:700;
  line-height:1.3;color:var(--texto);margin:0}
/* Sem teto de medida desde 10/09/2026 (`design-system.md` §21, E2: texto
   dentro de componente enche o componente). Com 46ch o motivo parava a 418px
   numa caixa de 1132 a 1280, e o portão de espaço reprovou o espécime do
   portão em /design/ nos dois motores. A caixa é centrada e o motivo é curto:
   a linha acompanha a caixa, e no celular quebra pela borda. */
.fp-motivo{font-size:16px;line-height:1.6;color:var(--texto-2);margin:0}
.fp-acoes{display:flex;gap:var(--e-3);flex-wrap:wrap;justify-content:center;margin-top:var(--e-2)}
.fp-acoes .btn{text-decoration:none}
.fp-voltar{appearance:none;background:none;border:0;padding:var(--e-2) var(--e-3);
  display:inline-flex;align-items:center;justify-content:center;
  min-height:var(--toque-min);font:inherit;font-size:14px;font-weight:600;
  color:var(--texto-2);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.fp-voltar:hover{color:var(--texto)}

/* ---------------------------------------------------------------------------
   O QUE A BASE EMITE, parte 4: a casca é uma só (05/09/2026).
   `decisoes/2026-09-05-uma-casca-so.md`: toda página é #rhc-topo → #app →
   #rhc-rodape, e o conteúdo vem de UMA de duas famílias. Esta parte cobre o
   que faltava: o cabeçalho cabendo em 375px com o botão de tema dentro, o item
   da própria página marcado, e o molde institucional (`nucleo/pagina.js`).
   --------------------------------------------------------------------------- */

/* 1. O botão de tema mora no cabeçalho, ao lado dos links, com o mesmo porte. */
.rhc-nav .rhc-tema{display:inline-flex;align-items:center;gap:var(--e-2)}
.rhc-nav a[aria-current="page"]{color:var(--texto);border-color:var(--secundaria)}

/* 2. Em 375px o menu não cabia: a home apertou o dela em 05/09 (`@media
   (max-width:480px)` do index.html) e a regra veio para cá, porque a home
   passa a usar este cabeçalho. Wordmark um degrau menor, links mais justos e
   o botão de tema só com o símbolo: `aria-label` diz o resto. O alvo de
   toque continua em `--toque-min` em tudo. */
@media(max-width:480px){
  .rhc-topo{gap:var(--e-2);padding-block:var(--e-3)}
  .rhc-wordmark{font-size:16px}
  .rhc-nav{gap:var(--e-1)}
  .rhc-nav a{padding:var(--e-2) var(--e-3)}
  .rhc-tema{padding:0 var(--e-3);min-width:var(--toque-min);justify-content:center}
  .rhc-nav .rhc-tema-rotulo{position:absolute;width:1px;height:1px;overflow:hidden;
    clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
}

/* 1b. O PULO PARA O CONTEÚDO (06/09/2026). Primeiro elemento focável da
   página, invisível até receber foco. Fica FORA da tela por deslocamento, não
   por `display:none`: elemento sem caixa sai da ordem de foco, e um pulo que
   nunca recebe foco não existe. No foco ele volta ao canto superior esquerdo,
   sobre tudo, com o contorno do sistema. */
.rhc-pular{position:fixed;left:var(--gutter);top:0;z-index:200;
  transform:translateY(-150%);display:inline-flex;align-items:center;
  min-height:var(--toque-min);padding:0 var(--e-4);border-radius:var(--r-m);
  background:var(--primaria);color:#fff;font-size:14px;font-weight:600;
  text-decoration:none;transition:transform var(--t-curto,.15s) ease}
.rhc-pular:focus,.rhc-pular:focus-visible{transform:translateY(var(--e-2))}

/* 1c. O ACESSO À CONTA. Último item do menu e do mesmo porte dos outros: pela
   §14.1 entrar não é a ação primária de nenhuma tela do site, e um botão
   preenchido aqui competiria com a ação da página em todas elas. O que o separa
   da navegação de conteúdo é a posição e um contorno discreto. */
.rhc-nav .rhc-conta{border-color:var(--borda-forte);color:var(--texto-2)}
.rhc-nav .rhc-conta:hover{color:var(--texto);border-color:var(--primaria)}

/* 2b. O cabeçalho sobre o hero da capa (a página inicial). A home é a única
   página com hero cinematográfico: o prisma se monta no scroll e o cabeçalho
   precisa flutuar sobre ele, transparente, entrando só quando a montagem
   termina (`espera` → `pronto`, postas pelo script da página) e ganhando
   fundo ao rolar (`scrolled`). Até 05/09 isso era um `<nav>` próprio da
   home; agora a classe vai no cabeçalho compartilhado, e a regra mora aqui
   porque é do cabeçalho, não da página. `max-width:none` porque o fundo do
   estado `scrolled` tem de ir de borda a borda, e o LOGO continua na
   linha-guia da grade: a margem lateral é a sobra do container dividida em
   dois mais a `--gutter`, nunca menos que a `--gutter` (o mesmo cálculo da
   grade visível em `design-system.css`). */
.rhc-topo.sobre-hero{position:fixed;top:0;left:0;right:0;z-index:90;max-width:none;
  padding-inline:max(var(--gutter),calc((100vw - var(--container)) / 2 + var(--gutter)));
  transition:background var(--t-medio),backdrop-filter var(--t-medio),opacity .5s ease,
    transform .5s var(--mola,cubic-bezier(.34,1.56,.64,1))}
.rhc-topo.sobre-hero.espera{opacity:0;transform:translateY(-14px);pointer-events:none}
.rhc-topo.sobre-hero.espera.pronto{opacity:1;transform:none;pointer-events:auto}
.rhc-topo.sobre-hero.scrolled{background:var(--fundo);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--borda)}
/* 3. O molde institucional. A raiz recebe `.pagina`; o container é o da
   GRADE (topo desta folha), o mesmo da `.ferramenta`. `--largura-pagina` e
   `{ coluna }` limitam só a coluna de conteúdo. */
.pagina{padding-bottom:var(--ritmo-rodape)}

/* O cabeçalho da página: kicker, título, lead; centrados, como a faixa da
   ferramenta é centrada. O TÍTULO É IRMÃO DO NOME DA FERRAMENTA: mesma
   fonte, mesmo peso, mesmo tamanho que `.fj-nome` (acima, "PADRÃO DAS
   FERRAMENTAS"), inclusive o degrau de 20px em tela estreita. Há um caso em
   `testes/pagina.teste.js` que reprova se os dois divergirem. */
.pagina-cabeca{display:grid;gap:var(--e-3);justify-items:center;text-align:center;
  margin:var(--e-5) 0 var(--e-6)}
.pg-kicker{margin:0;font-family:"JetBrains Mono",monospace;font-size:12px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--secundaria)}
.pg-titulo{margin:0;font-family:"Space Grotesk",system-ui,sans-serif;font-weight:700;line-height:1.05;
  font-size:var(--tipo-titulo-pagina);letter-spacing:-.01em;color:var(--texto)}
.pg-destaque{background:var(--espectro);-webkit-background-clip:text;background-clip:text;color:transparent}
.pg-lead{margin:0;font-size:16px;line-height:1.6;color:var(--texto-2);max-width:64ch}
/* O PISO DE 20 ABAIXO DE 600, e por que ele é do NOME e não da página: a faixa
   da ferramenta é `white-space:nowrap`, e o nome mais longo do produto ("Duas
   Verdades e Uma Mentira") mede 320,6px a 20px numa coluna de 343 a 375. A 22
   ele mede 348 e transborda. Medido em 06/09, e é esse número que trava os três
   níveis em 20 abaixo de 600: o h2 desce junto porque título de seção maior que
   título de página seria pior que o empate. */
@media(max-width:600px){.pagina-cabeca{margin-top:var(--e-4)}.pg-titulo{font-size:20px}.pg-subtitulo{font-size:20px}}

/* A seção interna (`RHCPagina.secao`): h2 UM DEGRAU abaixo do título da página
   e um degrau acima do título de cartão. Até 06/09 ele media 20px fixos, o
   mesmo valor do h3 do cartão: três níveis, dois tamanhos, e no catálogo isso
   achatava a hierarquia inteira. O tamanho agora vem do token da escala
   (`design-system.css` §24), que a 1280 dá 24 e nunca ultrapassa o h1. */
.pagina-secao{margin-top:var(--ritmo-secao)}
.secao-cabeca{display:grid;gap:var(--e-2);margin-bottom:var(--ritmo-paragrafo)}
.pg-subtitulo{margin:0;font-family:"Space Grotesk",system-ui,sans-serif;font-weight:700;
  font-size:var(--tipo-titulo-secao);line-height:1.3;color:var(--texto)}
/* O lead da seção tem a MESMA medida de leitura do lead da página. Até 06/09
   ele era `max-width:none` e dois leads do catálogo chegavam a 147 caracteres
   por linha, mais que o dobro da régua (`design-system.md §16`). O `none` era
   herança de quando o cabeçalho da seção era centrado e o teto o apertava; hoje
   ele é alinhado à linha-guia, e o teto só limita o comprimento da linha. */
.secao-cabeca .pg-lead{max-width:none}
.secao-conteudo{min-width:0}

/* ===========================================================================
   §25. O LAYOUT DE APP DA FERRAMENTA (10/09/2026)
   ---------------------------------------------------------------------------
   O DEFEITO, nas palavras do dono: "texto todo colado na esquerda, não expande
   o espaço todo". Medido pelo portão de espaço a 1440: guia e montagem numa
   coluna de 760 à esquerda em sete ferramentas, 432px vazios à direita, e o
   título centrado sobre a largura inteira. Dois eixos, meia tela vazia.

   O QUE OS PESQUISADOS FAZEM numa tela de configuração larga (10/09, 1440):
   Linear e Vercel dividem a largura entre o formulário e um bloco de apoio
   (Linear 672 de texto + 607 de formulário; Vercel, campos de 850 a 1416); a
   documentação do Vercel e do Linear põe um painel fixo de 240 a 300px ao lado
   da coluna principal. Ninguém estica campo de texto até 1192px: campo gigante
   é UX ruim.

   A REGRA: a partir de 1100px, duas colunas que somam a largura do container.
   - PRINCIPAL: os blocos de montagem, como sempre.
   - PAINEL (`--largura-lado`, 360): o que antes empilhava em cima e embaixo. O
     rótulo de privacidade (a base o tira do conteúdo e o põe aqui, antes do
     primeiro campo no DOM, como pede o RN-206), o RESUMO VIVO da montagem
     (passo a passo com o estado de cada bloco e o próximo passo) e a nota. O
     miolo do painel é `sticky`: acompanha a rolagem ao lado do formulário.
   - GUIA "Como funciona": fechado, é a primeira linha do painel; aberto, vira
     área de leitura na largura inteira, acima das duas colunas.
   O painel é uma CAIXA na altura inteira do conteúdo, e isso é desenho, não
   enfeite: a faixa da direita é dele de cima a baixo, como o painel de
   propriedades de um app, e o formulário ao lado nunca termina num vazio.

   ABAIXO DE 1100 o painel se desfaz (`display:contents`) e as peças voltam à
   pilha na ordem certa: guia, rótulo de privacidade, blocos, resumo, nota. O
   resumo não some: vira o fechamento da tela, antes da nota.

   Tela sem nada para o painel (sem rótulo e sem blocos de montagem) não abre
   painel: a base só marca `.com-lado` quando há o que pôr nele. Tela
   projetada e tela `enquadramento:false` não têm painel.
   =========================================================================== */
.ferramenta-corpo{display:grid;grid-template-columns:minmax(0,1fr);row-gap:var(--ritmo-bloco);
  margin-top:var(--ritmo-guia);align-items:start}
.ferramenta-corpo > .guia{margin-top:0}
.ferramenta-corpo > .ferramenta-conteudo > :first-child{margin-top:0}
.ferramenta-lado,.fl-miolo{display:contents}
.fl-privacidade:empty{display:none}
.fl-privacidade > .privacidade{margin:0}
.ferramenta-resumo{order:1}
.ferramenta-resumo[hidden]{display:none}
.ferramenta-lado .nota-ferramenta{order:2;margin:0}

@media(min-width:1100px){
  .ferramenta-corpo.com-lado{grid-template-columns:minmax(0,1fr) var(--largura-lado);
    grid-template-rows:auto 1fr;column-gap:var(--ritmo-bloco);row-gap:var(--ritmo-faixa);align-items:stretch}
  .ferramenta-corpo.com-lado > .guia{grid-column:2;grid-row:1;align-self:start}
  .ferramenta-corpo.com-lado > .ferramenta-conteudo{grid-column:1;grid-row:1 / span 2;align-self:start}
  .ferramenta-corpo.com-lado > .ferramenta-lado{display:block;grid-column:2;grid-row:2;min-width:0;
    padding:var(--e-4);border-radius:var(--r-g);border:1px solid var(--borda);
    background:color-mix(in srgb, var(--fundo-2) 55%, transparent)}
  .ferramenta-corpo.com-lado .fl-miolo{display:grid;gap:var(--ritmo-faixa);position:sticky;top:var(--e-5)}
  .ferramenta-corpo.com-lado .ferramenta-resumo,
  .ferramenta-corpo.com-lado .ferramenta-lado .nota-ferramenta{order:0}
  .ferramenta-corpo.com-lado .ferramenta-lado .nota-ferramenta{text-align:left;font-size:14px;line-height:1.5}
  /* Guia aberto: a leitura ganha a largura inteira, acima das duas colunas. */
  .ferramenta-corpo.com-lado:has(> .guia[open]) > .guia{grid-column:1 / -1}
  .ferramenta-corpo.com-lado:has(> .guia[open]) > .ferramenta-conteudo{grid-row:2}
}

/* O RESUMO VIVO. A base lê os blocos de montagem (`.cartao-etapa`) e diz, por
   bloco, quantos campos estão preenchidos; a ferramenta pode acrescentar os
   dados que vão ao telão por `resumo()`. Cada passo é um link que leva ao
   bloco. O estado é dito por texto e pelo ✓ desenhado, nunca só pela cor. */
.ferramenta-resumo{display:grid;gap:var(--e-3);min-width:0}
.fr-tit{margin:0;font-size:12px;line-height:1.5;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;color:var(--texto-3)}
.fr-passos{list-style:none;margin:0;padding:0;display:grid;gap:var(--e-1)}
.fr-passo{margin:0}
.fr-ir{appearance:none;text-decoration:none;width:100%;display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  align-items:center;gap:var(--e-3);min-height:var(--toque-min);padding:var(--e-2) var(--e-3);
  border-radius:var(--r-m);border:1px solid transparent;background:transparent;color:var(--texto-2);
  font:inherit;font-size:14px;line-height:1.4;text-align:left;cursor:pointer;
  transition:border-color var(--t-medio),background var(--t-medio)}
.fr-ir:hover{border-color:var(--borda-forte);color:var(--texto)}
.fr-n{flex:none;width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-family:"JetBrains Mono",monospace;font-size:12px;font-weight:700;line-height:1;
  border:1px solid var(--borda-forte);color:var(--texto-2)}
.fr-n svg{width:14px;height:14px}
.fr-passo[data-estado="feito"] .fr-n{border-color:var(--sucesso);color:var(--sucesso);
  background:color-mix(in srgb, var(--sucesso) 14%, transparent)}
.fr-passo[data-atual="sim"] .fr-ir{color:var(--texto);border-color:color-mix(in srgb, var(--primaria) 45%, transparent);
  background:color-mix(in srgb, var(--primaria) 10%, transparent)}
.fr-nome{min-width:0}
.fr-estado{font-family:"JetBrains Mono",monospace;font-size:12px;line-height:1.5;color:var(--texto-3);white-space:nowrap}
.fr-dados{margin:0;display:grid}
.fr-dado{display:flex;justify-content:space-between;align-items:baseline;gap:var(--e-3);
  padding:var(--e-2) 0;border-top:1px solid var(--borda);font-size:14px;line-height:1.5}
.fr-dado dt{color:var(--texto-2)}
.fr-dado dd{margin:0;color:var(--texto);font-weight:600;text-align:right}
.fr-proximo{margin:0;font-size:14px;line-height:1.5;color:var(--texto-2)}
.fr-proximo b{color:var(--texto)}

/* ===========================================================================
   §25.1 A SEÇÃO INSTITUCIONAL LARGA (10/09/2026)
   ---------------------------------------------------------------------------
   O DEFEITO: o cabeçalho de seção era título e lead empilhados à esquerda, com
   o lead a 56ch; a 1440 o catálogo deixava 651px vazios ao lado de cada lead.
   O QUE OS PESQUISADOS FAZEM: o Vercel põe o título numa coluna e o texto na
   outra (FAQ de /pricing: texto a partir de x=732, 672px); o Stripe põe o
   índice fixo à esquerda e o conteúdo ao lado. A cópia:
   1. Cabeçalho com lead, a partir de 1100: título na coluna da esquerda, lead
      e apoio (os selos do grupo) na da direita, 5 : 7. O apoio mora na coluna
      do texto e não sob o título: medido a 1280, a fileira de selos quebrava
      em duas linhas numa coluna de 493px e deixava 739px vazios à direita.
   2. `.secao-lado` (`RHCPagina.secao(id, { lado: true })`): a seção inteira em
      duas colunas, o cabeçalho fixo à esquerda e o corpo à direita. É a forma
      da prosa longa (documento legal, perguntas frequentes): a linha fica
      entre 85 e 97 caracteres, dentro da faixa dos pesquisados (84 a 100), e
      a borda direita do texto é a do container.
   3. POUCOS CARTÕES: seção cuja grade equilibrada tem um ou dois cartões divide
      a fileira com o cabeçalho. Um cartão sozinho abaixo de um cabeçalho era
      o mesmo defeito da fileira órfã, com o título em cima.
   =========================================================================== */
.secao-apoio{min-width:0}
@media(min-width:1100px){
  .secao-cabeca:has(> .pg-lead){grid-template-columns:minmax(0,5fr) minmax(0,7fr);
    column-gap:var(--e-7);align-items:start}
  .secao-cabeca:has(> .pg-lead) > .pg-subtitulo{grid-column:1;grid-row:1 / span 2}
  .secao-cabeca:has(> .pg-lead) > .pg-lead{grid-column:2;grid-row:1}
  .secao-cabeca:has(> .pg-lead) > .secao-apoio{grid-column:2;grid-row:2}

  .pagina-secao.secao-lado{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);
    column-gap:var(--e-7);align-items:start}
  .pagina-secao.secao-lado > .secao-cabeca{position:sticky;top:var(--e-6);margin-bottom:0;
    grid-template-columns:minmax(0,1fr)}
  .pagina-secao.secao-lado > .secao-cabeca > *{grid-column:1;grid-row:auto}

  .pagina-secao:has(> .secao-conteudo > .grade-equilibrada > :last-child:nth-child(-n+2)){
    display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
    column-gap:var(--grade-vao, var(--ritmo-bloco));align-items:start}
  .pagina-secao:has(> .secao-conteudo > .grade-equilibrada > :only-child) > .secao-cabeca{grid-column:span 3}
  .pagina-secao:has(> .secao-conteudo > .grade-equilibrada > :only-child) > .secao-conteudo{grid-column:span 1}
  .pagina-secao:has(> .secao-conteudo > .grade-equilibrada > :last-child:nth-child(2)) > .secao-cabeca,
  .pagina-secao:has(> .secao-conteudo > .grade-equilibrada > :last-child:nth-child(2)) > .secao-conteudo{grid-column:span 2}
}
