/* ====== design system: tokens.css ====== */
/* =============================================================================
   ESTÚDIO BRASA — DESIGN SYSTEM
   Tokens: cor, tipo, espaço. Fonte única de verdade.

   Decidido com o Yuri em 13/08/2026, a partir do logo 2026 e dos três
   carrosséis de referência em Z:\ELEMENTOS\Estudio ID Visual 2026\.

   ⛔ As fontes são ARQUIVO, nunca link de CDN. Página de Artifact bloqueia
      host externo — fonte linkada cai em substituta sem avisar.
   ============================================================================= */

/* --- Fontes -----------------------------------------------------------------
   Caminho relativo a este arquivo. Em página que precisa ser autossuficiente
   (Artifact, PDF), embutir como data URI em vez de referenciar o arquivo.     */

@font-face {
  font-family: "Anton";
  src: url("/fontes/Anton-Regular.ttf") format("truetype");
  font-weight: 400;              /* peso ÚNICO — não existe Anton Light */
  font-style: normal;
  font-display: block;
}

@font-face {
  font-family: "Inter";
  src: url("/fontes/Inter[opsz,wght].ttf") format("truetype-variations");
  font-weight: 100 900;
  font-style: normal;
  font-display: block;
}

@font-face {
  font-family: "Fira Code";
  src: url("/fontes/FiraCode[wght].ttf") format("truetype-variations");
  font-weight: 300 700;
  font-style: normal;
  font-display: block;
}

:root {

  /* ==========================================================================
     COR — cinco valores, e mais nenhum.

     ⛔ REGRA DE IDENTIDADE: a paleta é RELEITURA das cores do Brasil, não
        citação literal. O verde é limão neon, não o #009C3B da bandeira; o
        âmbar não é o amarelo-ouro. Nunca "corrigir" para os tons oficiais.
        (Decisão do Yuri, 13/08/2026.)
     ========================================================================== */

  --brasa-verde:  #A4FF00;   /* a marca. Medido no vetor do logo 2026        */
  --brasa-preto:  #000000;   /* impacto: tela com foto, capa, abertura       */
  --brasa-giz:    #EDEBE1;   /* leitura: case escrito, documento, artefato   */
  --brasa-ambar:  #FFA900;   /* SÓ a marcação à mão — ver regra abaixo       */
  --brasa-branco: #FFFFFF;   /* texto sobre foto                             */

  /* ⛔ O ÂMBAR NUNCA É FUNDO, NUNCA É TEXTO, NUNCA É ÍCONE.
        Ele é exclusivamente o risco desenhado por cima da palavra.
        Verificado nos 14 cards de referência: em nenhum ele tem outro papel. */

  /* --- Neutros derivados ---------------------------------------------------
     Viés levíssimo de verde-amarelo herdado do próprio verde da marca — é o
     que faz o neutro parecer escolhido, e não cinza de sistema.              */

  --tinta:          #0A0B09;   /* preto de superfície, um pouco acima do puro */
  --papel:          #F2F0E8;   /* segundo nível do claro: cartão sobre o Giz  */

  --sobre-escuro:   #E8EAE2;   /* texto no escuro                             */
  --meia-escuro:    #8E9287;   /* texto secundário no escuro                  */
  --fio-escuro:     rgba(232, 234, 226, 0.15);

  --sobre-claro:    #22241C;   /* texto no claro                              */
  --meia-claro:     #6B6E62;   /* texto secundário no claro                   */
  --fio-claro:      rgba(34, 36, 28, 0.15);

  /* Vindos do painel do BrasaChat (protótipo aprovado pelo Yuri em 08/10/2026,
     acrescentados em 09/10/2026). Não são cor nova: são o Giz um degrau
     abaixo, o mesmo fio do claro mais marcado e o preto pela metade.
     Quem usa: a seção 7 do componentes.css (formulário e estado).            */

  --superf:         #E4E2D7;   /* passar o mouse no claro: Giz um degrau abaixo */
  --fio-forte:      rgba(34, 36, 28, 0.32);   /* cartão e campo no claro      */
  --veu-modal:      rgba(0, 0, 0, 0.5);       /* escurece a página atrás da janela */

  /* ==========================================================================
     TIPO — três papéis, e cada um só faz o seu.
     ========================================================================== */

  --fonte-titulo:   "Anton", "Haettenschweiler", "Arial Narrow", sans-serif;
  --fonte-texto:    "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
  --fonte-destaque: "Fira Code", ui-monospace, SFMono-Regular, Menlo, monospace;

  /* A Sink é a fonte do LOGO e SÓ do logo (decisão do Yuri, 13/08/2026).
     Ela mora em logo/, fora de fonts/, de propósito. Não usar em material. */

  /* --- Pesos ---------------------------------------------------------------
     Anton tem peso único. Inter e Fira Code são variáveis.                   */

  --peso-corpo:      300;   /* Inter no texto longo — leve, como pedido       */
  --peso-corpo-claro:350;   /* no Giz precisa de um toque a mais que no preto */
  --peso-forte:      600;   /* Inter em ênfase dentro do parágrafo            */
  --peso-negrito:    700;   /* Inter no título de bloco, janela e "Atenção"
                               (painel do BrasaChat, 08/10/2026)              */
  --peso-black:      900;   /* Inter Black — alternativa ao Anton em UI densa */
  --peso-destaque:   600;   /* Fira Code em rótulo e selo                     */

  /* --- Escala de tipo (tela) -----------------------------------------------
     Fluida: encolhe no celular sem quebrar hierarquia.                       */

  --t-display:  clamp(2.4rem, 7vw, 4.5rem);   /* abertura de página          */
  --t-h1:       clamp(1.9rem, 5vw, 3rem);
  --t-h2:       clamp(1.45rem, 3.4vw, 2.1rem);
  --t-h3:       1.15rem;
  --t-corpo:    1.03rem;
  --t-corpo-g:  1.15rem;                       /* lead, primeiro parágrafo    */
  --t-peq:      0.9rem;
  --t-rotulo:   0.68rem;                       /* caixa alta + tracking       */

  --lh-titulo:  1.04;
  --lh-corpo:   1.7;
  --tr-titulo:  0;                             /* Anton já vem apertada       */
  --tr-rotulo:  0.16em;

  /* --- Espaço --------------------------------------------------------------
     Passo de 4px. Usar sempre estes, nunca número solto.                     */

  --e-1: 0.25rem;  --e-2: 0.5rem;   --e-3: 0.75rem;  --e-4: 1rem;
  --e-5: 1.5rem;   --e-6: 2rem;     --e-7: 3rem;     --e-8: 4rem;
  --e-9: 6rem;

  --col-leitura: 64ch;   /* largura máxima de texto corrido */

  /* --- Toque ---------------------------------------------------------------
     Tudo que se toca tem pelo menos 44px de altura, mais que os 36 do
     ManyChat, porque o painel do BrasaChat é usado no celular (protótipo
     aprovado pelo Yuri em 08/10/2026).                                       */

  --toque: 2.75rem;

  /* --- Canto ---------------------------------------------------------------
     O sistema é reto. O único canto arredondado da marca é o do losango do
     logo, e ele é parte do desenho do logo — não se repete em componente.    */

  --canto: 0;
}


/* =============================================================================
   PAPÉIS DE SUPERFÍCIE
   Aplicar em um contêiner. Tudo dentro herda o par certo de cores.
   ============================================================================= */

.brasa-escuro {
  background: var(--brasa-preto);
  color: var(--sobre-escuro);
  --cor-titulo: var(--brasa-branco);
  --cor-meia: var(--meia-escuro);
  --cor-fio: var(--fio-escuro);
  --peso-do-corpo: var(--peso-corpo);
}

.brasa-claro {
  background: var(--brasa-giz);
  color: var(--sobre-claro);
  --cor-titulo: var(--brasa-preto);
  --cor-meia: var(--meia-claro);
  --cor-fio: var(--fio-claro);
  --peso-do-corpo: var(--peso-corpo-claro);
}


/* =============================================================================
   TIPO — classes semânticas
   ============================================================================= */

.brasa-display,
.brasa-h1,
.brasa-h2 {
  font-family: var(--fonte-titulo);
  font-weight: 400;
  line-height: var(--lh-titulo);
  letter-spacing: var(--tr-titulo);
  color: var(--cor-titulo);
  text-wrap: balance;
  margin: 0;
}

.brasa-display { font-size: var(--t-display); }
.brasa-h1      { font-size: var(--t-h1); }
.brasa-h2      { font-size: var(--t-h2); }

.brasa-h3 {
  font-family: var(--fonte-texto);
  font-variation-settings: "wght" 600, "opsz" 20;
  font-size: var(--t-h3);
  line-height: 1.3;
  color: var(--cor-titulo);
  margin: 0;
}

.brasa-corpo {
  font-family: var(--fonte-texto);
  font-variation-settings: "wght" var(--peso-do-corpo, 300), "opsz" 16;
  font-size: var(--t-corpo);
  line-height: var(--lh-corpo);
  max-width: var(--col-leitura);
  text-wrap: pretty;
  margin: 0;
}

.brasa-lead {
  font-family: var(--fonte-texto);
  font-variation-settings: "wght" 250, "opsz" 20;
  font-size: var(--t-corpo-g);
  line-height: 1.6;
  max-width: var(--col-leitura);
  margin: 0;
}

.brasa-corpo strong,
.brasa-lead strong {
  font-variation-settings: "wght" var(--peso-forte), "opsz" 16;
  color: var(--cor-titulo);
}

.brasa-rotulo {
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: var(--t-rotulo);
  letter-spacing: var(--tr-rotulo);
  text-transform: uppercase;
  color: var(--cor-meia);
}

/* Selo — o destaque em tarja verde. Fira Code, sempre. */
.brasa-selo {
  display: inline-block;
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: var(--t-peq);
  background: var(--brasa-verde);
  color: var(--brasa-preto);
  padding: 0.15em 0.5em;
}

/* Palavra em verde dentro do título — um destaque por frase, no máximo. */
.brasa-verde { color: var(--brasa-verde); }


/* =============================================================================
   A MARCAÇÃO À MÃO
   O risco de caneta em âmbar, por baixo de UMA palavra ou expressão curta.

   Regras:
   - um risco por peça, no máximo dois;
   - só em palavra que carrega o sentido da frase;
   - nunca em texto corrido, nunca em rótulo, nunca em botão;
   - o traço passa POR TRÁS do glifo, encostando na palavra.

   Uso:
     <span class="brasa-risco">própria<svg …><path …/></svg></span>

   O SVG é o do arquivo marcacao.svg — copiar o path de lá.
   ============================================================================= */

.brasa-risco {
  position: relative;
  display: inline-block;
  isolation: isolate;      /* prende o z-index negativo dentro deste span */
}

.brasa-risco > svg {
  position: absolute;
  left: -0.12em;
  width: calc(100% + 0.24em);
  bottom: 0.04em;          /* encosta na palavra, subindo um pouco na letra */
  height: 0.40em;
  overflow: visible;
  z-index: -1;             /* por trás do glifo — a letra nunca é cortada  */
  pointer-events: none;
}

.brasa-risco > svg path { fill: var(--brasa-ambar); }

/* ====== design system: componentes.css ====== */
/* =============================================================================
   ESTÚDIO BRASA — COMPONENTES
   Depende de tokens.css. Carregar os dois, nesta ordem.

   O bloco base do sistema é o PAINEL: uma moldura de linha fina com uma barra
   de rótulo em cima e um miolo embaixo. Foto, galeria e vídeo são o mesmo
   painel com miolos diferentes — não são componentes separados.

   Aprovado pelo Yuri em 13/08/2026.
   ============================================================================= */


/* =============================================================================
   1. PAINEL — a moldura com barra de rótulo
   ============================================================================= */

.brasa-painel {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--cor-fio, var(--fio-escuro));
  border-radius: var(--canto);
  overflow: hidden;
  min-width: 0;                    /* deixa encolher dentro de grid           */
}

/* A barra de cima. Rótulo curto, em caixa alta — o que a coisa É, não frase. */
.brasa-painel > .barra {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--e-4);
  padding: 0.6rem 1rem;
  border-bottom: 1px solid var(--cor-fio, var(--fio-escuro));
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: var(--t-rotulo);
  letter-spacing: var(--tr-rotulo);
  text-transform: uppercase;
  color: var(--cor-meia, var(--meia-escuro));
}

/* O lado direito da barra: contagem, duração, ano. Nunca frase. */
.brasa-painel > .barra > .marca-dir { color: var(--brasa-verde); }

.brasa-painel > .miolo {
  padding: var(--e-6) var(--e-5) calc(var(--e-6) + var(--e-2));
  display: flex;
  flex-direction: column;
  gap: var(--e-3);
  flex: 1;
}

/* Miolo que recebe imagem/vídeo não tem respiro — a mídia sangra até a borda. */
.brasa-painel > .miolo.sangra {
  padding: 0;
  gap: 0;
}


/* =============================================================================
   2. MÍDIA — a base de foto e vídeo
   ============================================================================= */

.brasa-midia {
  position: relative;
  display: block;
  overflow: hidden;
  background: var(--brasa-preto);
  min-width: 0;
}

.brasa-midia > img,
.brasa-midia > video {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* --- Proporções. Usar sempre uma destas, nunca altura fixa. --------------- */
.brasa-r-169  { aspect-ratio: 16 / 9;  }   /* showreel, YouTube, LinkedIn     */
.brasa-r-45   { aspect-ratio: 4 / 5;   }   /* feed — o formato dos carrosséis */
.brasa-r-916  { aspect-ratio: 9 / 16;  }   /* Reel, TikTok, Stories           */
.brasa-r-11   { aspect-ratio: 1 / 1;   }   /* miniatura de galeria            */
.brasa-r-larga{ aspect-ratio: 21 / 9;  }   /* faixa de abertura               */

/* --- O véu -----------------------------------------------------------------
   Foto com texto por cima SEMPRE leva véu. Sem ele o texto some no claro da
   imagem e a peça fica ilegível em metade das fotos.
   É o gesto que os carrosséis já usam.                                       */

.brasa-veu::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to top,
    rgba(0, 0, 0, 0.82) 0%,
    rgba(0, 0, 0, 0.55) 38%,
    rgba(0, 0, 0, 0.18) 70%,
    rgba(0, 0, 0, 0.28) 100%
  );
  pointer-events: none;
}

/* Véu parelho, para quando o texto fica no meio da imagem. */
.brasa-veu-todo::after {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.52);
  pointer-events: none;
}

/* --- Texto sobre a mídia -------------------------------------------------- */
.brasa-midia > .sobreposto {
  position: absolute;
  inset: auto 0 0 0;
  z-index: 2;
  padding: var(--e-5) var(--e-5) var(--e-5);
  display: flex;
  flex-direction: column;
  gap: var(--e-2);
  color: var(--brasa-branco);
}

.brasa-midia > .sobreposto .tit {
  margin: 0;
  font-family: var(--fonte-titulo);
  font-weight: 400;
  font-size: clamp(1.3rem, 3vw, 2rem);
  line-height: var(--lh-titulo);
  color: var(--brasa-branco);
  text-wrap: balance;
}

/* Assinatura do rodapé da peça — BRASA à esquerda, @ à direita.
   É o padrão dos carrosséis; vale em capa e em peça de rede.               */
.brasa-midia > .assinatura {
  position: absolute;
  inset: auto 0 0 0;
  z-index: 3;
  display: flex;
  justify-content: space-between;
  padding: var(--e-4) var(--e-5);
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: var(--t-rotulo);
  letter-spacing: var(--tr-rotulo);
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.85);
}


/* =============================================================================
   3. GALERIA — o fio fino entre as fotos
   O gap é 1px e o fundo é a cor do fio: as linhas que separam as fotos são
   as mesmas linhas da moldura. É o que costura a galeria ao resto.
   ============================================================================= */

.brasa-galeria {
  display: grid;
  gap: 1px;
  background: var(--cor-fio, var(--fio-escuro));
  min-width: 0;
}

.brasa-galeria.col-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.brasa-galeria.col-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.brasa-galeria.col-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

/* Mosaico: a primeira foto ocupa quatro células. Para capa de trabalho. */
.brasa-galeria.mosaico {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
.brasa-galeria.mosaico > :first-child {
  grid-column: span 2;
  grid-row: span 2;
}

@media (max-width: 34rem) {
  .brasa-galeria.col-3,
  .brasa-galeria.col-4,
  .brasa-galeria.mosaico { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .brasa-galeria.mosaico > :first-child { grid-column: span 2; grid-row: span 1; }
}


/* =============================================================================
   4. VÍDEO — o play em losango
   A forma vem do logo. É o único lugar do sistema onde o losango se repete,
   e é de propósito: ele marca "isto toca".
   ============================================================================= */

.brasa-play {
  position: absolute;
  inset: 0;
  z-index: 3;
  display: grid;
  place-items: center;
  border: 0;
  background: none;
  cursor: pointer;
  color: inherit;
}

.brasa-play > svg {
  width: clamp(3.5rem, 9vw, 5.5rem);
  height: auto;
  filter: drop-shadow(0 2px 14px rgba(0, 0, 0, 0.45));
  transition: transform 140ms ease;
}

.brasa-play:hover > svg,
.brasa-play:focus-visible > svg { transform: scale(1.06); }

.brasa-play:focus-visible {
  outline: 2px solid var(--brasa-verde);
  outline-offset: -4px;
}

/* Duração do vídeo, canto inferior direito. */
.brasa-duracao {
  position: absolute;
  right: var(--e-3);
  bottom: var(--e-3);
  z-index: 3;
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: 0.75rem;
  background: rgba(0, 0, 0, 0.72);
  color: var(--brasa-branco);
  padding: 0.15em 0.45em;
}


/* =============================================================================
   5. LEGENDA — sempre em Fira Code, sempre curta
   ============================================================================= */

.brasa-legenda {
  font-family: var(--fonte-destaque);
  font-weight: 500;
  font-size: 0.78rem;
  letter-spacing: 0.03em;
  color: var(--cor-meia, var(--meia-escuro));
  padding: var(--e-3) var(--e-4);
  border-top: 1px solid var(--cor-fio, var(--fio-escuro));
}


/* =============================================================================
   6. GRADE DE PAINÉIS — como os painéis se arrumam na página
   ============================================================================= */

.brasa-grade {
  display: grid;
  gap: var(--e-5);
  grid-template-columns: repeat(auto-fit, minmax(19rem, 1fr));
}

.brasa-grade.justa { gap: 1px; background: var(--cor-fio, var(--fio-escuro)); }
.brasa-grade.justa > .brasa-painel { border: 0; }


/* =============================================================================
   7. FORMULÁRIO E ESTADO
      (vindos do painel do BrasaChat, aprovados pelo Yuri em 08/10/2026)

   As peças que o sistema não tinha até o painel do BrasaChat: campo, botão,
   escolha, interruptor, etiqueta de estado, etiqueta de palavra, lista densa,
   estado de erro, quadro "Atenção", ajuda do "?", janela e aviso rápido.
   A proposta foi o protótipo aprovado
   (brasa-vault/shared/raw/brasachat/prototipo/prototipo.src.html); entraram
   aqui em 09/10/2026, com as cores e as fontes trocadas pelos tokens.

   São peças da superfície CLARA: usar dentro de .brasa-claro. No escuro ainda
   não existem; quando houver caso, propor ao Yuri antes.

   O que veio junto com elas:
   - Cinco cores e nenhuma a mais: não existe vermelho nem amarelo. Perigo e
     aviso são feitos com o PRETO (borda grossa, tarja, caixa).
   - O verde é o sinal de "no ar, tudo certo". Nunca de alerta.
   - Tudo que se toca tem pelo menos 44px de altura (--toque).
   - Nada de bolinha: a escolha é um quadrado com um quadrado cheio dentro.
   - O foco do campo é a borda dobrada (contorno de 1px por dentro). O
     protótipo fazia com box-shadow; aqui não, porque o sistema não tem sombra.
   - O rótulo do campo é o .brasa-rotulo de sempre (Fira Code, caixa alta).

   Os nomes são os do protótipo, menos os que já existiam no site
   (web/site/), no painel (web/painel/) ou no preview deste sistema. Esses
   ganharam o prefixo brasa-:

     protótipo   aqui            por que
     .campo      .brasa-campo    já existe no molde web/painel/prototipo-aprovacao/
     .bt         .brasa-bt       idem
     .rotulo     .brasa-rotulo   já existia neste sistema; é a mesma peça
     .chip       .brasa-chip     o preview usa .chip na amostra de cor
     .linhas     .brasa-linhas   web/painel/index.html
     .bloco      .brasa-bloco    web/painel/index.html
     .passo      .brasa-passo    o site usa .passo na home (web/site/site.css)
     .falta      .brasa-falta    .falta é o selo listrado de buraco do
                                 montar.py e do site; não confundir

   Os modificadores e as peças de dentro (bt-cheio, campo-pe, bloco-cab…)
   ficam com o nome do protótipo, como .barra e .miolo no painel.
   ============================================================================= */

/* --- 7.1 Campo de texto e área de texto --------------------------------------
   Rótulo em cima, campo no Giz dentro do cartão Papel, e um pé com a ajuda à
   esquerda e o contador à direita.

   <div class="brasa-campo">
     <label class="brasa-rotulo" for="f-botao">Texto do botão</label>
     <input id="f-botao">
     <div class="campo-pe"><span class="ajuda">Até 20 letras.</span>
       <span class="contador">12/20</span></div>
   </div>                                                                      */

.brasa-campo {
  display: grid;
  gap: 0.35rem;
  min-width: 0;
}

.brasa-campo input,
.brasa-campo textarea {
  box-sizing: border-box;
  width: 100%;
  min-height: var(--toque);
  margin: 0;
  padding: 0.6rem var(--e-3);
  background: var(--brasa-giz);
  border: 1px solid var(--fio-forte);
  border-radius: var(--canto);
  font-family: var(--fonte-texto);
  font-size: 0.95rem;
  line-height: 1.45;
  color: var(--sobre-claro);
}

.brasa-campo textarea {
  min-height: 5.5rem;
  resize: vertical;
}

/* Foco: a borda fica preta e o contorno por dentro faz a segunda linha. */
.brasa-campo input:focus,
.brasa-campo textarea:focus {
  border-color: var(--sobre-claro);
  outline: 1px solid var(--sobre-claro);
  outline-offset: -2px;
}

.campo-pe {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--e-3);
}

/* Texto de ajuda: embaixo do campo ou solto no bloco. */
.ajuda {
  margin: 0;
  font-family: var(--fonte-texto);
  font-size: 0.82rem;
  line-height: 1.45;
  color: var(--meia-claro);
}

.ajuda b {
  font-weight: var(--peso-forte);
  color: var(--sobre-claro);
}

/* Contador de letras. Perto do limite (.perto) e depois dele (.passou) vira
   tarja preta: o aviso é o preto, não uma cor.                               */
.contador {
  margin-left: auto;
  font-family: var(--fonte-destaque);
  font-size: var(--t-rotulo);
  color: var(--meia-claro);
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.contador.perto,
.contador.passou {
  padding: 0.1rem 0.35rem;
  background: var(--brasa-preto);
  color: var(--brasa-giz);
}

/* --- 7.2 Botões --------------------------------------------------------------
   O contorno preto é o padrão. Cheio preto é a ação principal (uma por tela).
   Leve é a secundária, tracejado é "acrescentar", pequeno e só ícone são pra
   onde falta lugar. Inter 600 e nunca caixa alta: botão não é rótulo.

   <button class="brasa-bt bt-cheio">Salvar</button>
   <button class="brasa-bt bt-p bt-leve bt-tracejado">Pôr botão de link</button>
   <button class="brasa-bt bt-icone" aria-label="Fechar"><svg …></svg></button>
   <div class="acoes"> …os botões lado a lado… </div>                          */

.brasa-bt {
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--e-2);
  min-height: var(--toque);
  margin: 0;
  padding: 0 1.1rem;
  border: 1px solid var(--sobre-claro);
  border-radius: var(--canto);
  background: transparent;
  font-family: var(--fonte-texto);
  font-weight: var(--peso-forte);
  font-size: 0.88rem;
  color: var(--sobre-claro);
  white-space: nowrap;
  cursor: pointer;
}

.brasa-bt:hover { background: var(--superf); }

.bt-cheio {
  background: var(--brasa-preto);
  border-color: var(--brasa-preto);
  color: var(--brasa-giz);
}

.bt-cheio:hover { background: var(--sobre-claro); }

.bt-leve      { border-color: var(--fio-forte); }
.bt-tracejado { border-style: dashed; }

.bt-p {
  min-height: 2.25rem;
  padding: 0 0.8rem;
  font-size: 0.82rem;
}

.bt-icone {
  min-width: var(--toque);
  padding: 0;
  border-color: transparent;
}

.bt-icone:hover {
  border-color: var(--fio-forte);
  background: transparent;
}

.brasa-bt[disabled] {
  opacity: 0.38;
  cursor: not-allowed;
}

/* Fileira de botões. */
.acoes {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-2);
  align-items: center;
}

/* --- 7.3 Escolha entre opções ------------------------------------------------
   Um quadrado com um quadrado cheio dentro. Sem bolinha: o sistema não tem
   canto redondo. A opção marcada ganha a borda preta.

   <div class="opcao marcada">
     <label><input type="radio" name="alvo" checked>um post específico</label>
   </div>                                                                      */

.opcao {
  display: grid;
  gap: var(--e-3);
  padding: 0.8rem;
  border: 1px solid var(--fio-forte);
  background: var(--brasa-giz);
}

.opcao.marcada { border-color: var(--sobre-claro); }

.opcao label {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  font-family: var(--fonte-texto);
  font-weight: 500;
  cursor: pointer;
}

.opcao input[type="radio"] {
  -webkit-appearance: none;
  appearance: none;
  box-sizing: border-box;
  flex: none;
  display: grid;
  place-items: center;
  width: 1.15rem;
  height: 1.15rem;
  margin: 0;
  border: 1.5px solid var(--sobre-claro);
  border-radius: var(--canto);
  background: var(--brasa-giz);
  cursor: pointer;
}

.opcao input[type="radio"]::after {
  content: "";
  width: 0.55rem;
  height: 0.55rem;
  background: transparent;
}

.opcao input[type="radio"]:checked::after { background: var(--brasa-preto); }

/* --- 7.4 Interruptor ---------------------------------------------------------
   Retangular. Desligado: Giz com o marcador cinza. Ligado: preto com o
   marcador verde. É um <button role="switch">; o estado mora no aria-checked.

   <div class="linha-chave">
     <span>Responder embaixo do comentário</span>
     <button type="button" class="chave" role="switch" aria-checked="true"
             aria-label="Responder em público"></button>
   </div>                                                                      */

.linha-chave {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--e-4);
}

.linha-chave span { font-weight: 500; }

.chave {
  box-sizing: border-box;
  flex: none;
  position: relative;
  width: 2.9rem;
  height: 1.6rem;
  margin: 0;
  padding: 0;
  border: 1.5px solid var(--sobre-claro);
  border-radius: var(--canto);
  background: var(--brasa-giz);
  cursor: pointer;
}

.chave::after {
  content: "";
  position: absolute;
  top: 2px;
  left: 2px;
  width: 1.05rem;
  height: 1.05rem;
  background: var(--meia-claro);
  transition: transform 0.15s;
}

.chave[aria-checked="true"] {
  background: var(--brasa-preto);
  border-color: var(--brasa-preto);
}

.chave[aria-checked="true"]::after {
  transform: translateX(1.28rem);
  background: var(--brasa-verde);
}

/* --- 7.5 Etiqueta de estado --------------------------------------------------
   Fira Code em caixa alta, como o rótulo. Uma por coisa, ao lado do nome.
     .estado            pausada: só o contorno
     .estado.no-ar      no ar: verde com fio preto
     .estado.rascunho   rascunho: contorno tracejado
     .estado.alerta     alerta: preta (parou e precisa de mão)

   <span class="estado no-ar">No ar</span>                                     */

.estado {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.22rem var(--e-2);
  border: 1px solid var(--fio-forte);
  font-family: var(--fonte-destaque);
  font-size: var(--t-rotulo);
  font-weight: var(--peso-destaque);
  letter-spacing: var(--tr-rotulo);
  text-transform: uppercase;
  color: var(--meia-claro);
  white-space: nowrap;
}

.estado.no-ar {
  background: var(--brasa-verde);
  border-color: var(--brasa-preto);
  color: var(--brasa-preto);
}

.estado.rascunho { border-style: dashed; }

.estado.alerta {
  background: var(--brasa-preto);
  border-color: var(--brasa-preto);
  color: var(--brasa-giz);
}

/* --- 7.6 Etiqueta de palavra -------------------------------------------------
   A palavra-chave e as variações dela: contorno fino, Fira Code.
   Dentro de .variacoes ganha o × pra tirar.

   <span class="brasa-chip">mapa</span>

   <div class="brasa-campo">
     <label class="brasa-rotulo" for="f-var">Variações</label>
     <div class="variacoes">
       <span class="brasa-chip">mapas<button type="button" aria-label="Tirar mapas">×</button></span>
       <input id="f-var" placeholder="digite e aperte Enter">
     </div>
   </div>                                                                      */

.brasa-chip {
  display: inline-block;
  padding: 0.08rem 0.4rem;
  border: 1px solid var(--sobre-claro);
  font-family: var(--fonte-destaque);
  font-size: var(--t-rotulo);
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  white-space: nowrap;
}

/* O campo de palavras: as etiquetas e o campo de digitar, na mesma caixa. */
.variacoes {
  box-sizing: border-box;
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  align-items: center;
  padding: 0.4rem;
  min-height: var(--toque);
  background: var(--brasa-giz);
  border: 1px solid var(--fio-forte);
}

.variacoes:focus-within {
  border-color: var(--sobre-claro);
  outline: 1px solid var(--sobre-claro);
  outline-offset: -2px;
}

.variacoes .brasa-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  padding-right: 0;
}

.variacoes .brasa-chip button {
  min-height: 1.4rem;
  padding: 0 0.3rem;
  border: 0;
  background: transparent;
  font-family: var(--fonte-texto);
  font-size: 0.85rem;
  line-height: 1;
  color: inherit;
  cursor: pointer;
}

.variacoes input {
  flex: 1 1 6rem;
  min-width: 6rem;
  min-height: 1.9rem;
  padding: 0.3rem;
  border: 0;
  background: transparent;
}

.variacoes input:focus { outline: none; }

/* --- 7.7 Lista densa: a linha-cartão -----------------------------------------
   Cada item é um cartão Papel de uma linha: o nome com a etiqueta de estado,
   dois números, a data e o menu. O cartão inteiro abre (.camp-abre é um botão
   por cima de tudo); o menu fica acima dele. No celular a linha quebra em três
   colunas. As colunas são as da lista de campanhas do BrasaChat; outra lista
   com outras colunas troca o grid-template-columns da .camp e da .cab-lista.

   <div class="cab-lista brasa-rotulo"><span>Campanha</span><span>Comentaram</span>
     <span>Tocaram</span><span>Mudou</span><span></span></div>
   <div class="brasa-linhas">
     <article class="camp">
       <button type="button" class="camp-abre" aria-label="Abrir Mapa Mundi"></button>
       <div class="camp-nome"><span class="estado no-ar">No ar</span><h3>Mapa Mundi</h3></div>
       <div class="camp-num c1"><b>889</b><span>comentaram</span></div>
       <div class="camp-num c2"><b>50%</b><span>tocaram</span></div>
       <div class="camp-data">08/10</div>
       <div class="camp-menu"><button class="brasa-bt bt-icone" aria-label="Mais ações">…</button></div>
       <p class="camp-frase">Comentar <span class="brasa-chip">mapa</span> …</p>
     </article>
   </div>                                                                      */

.brasa-linhas {
  display: grid;
  gap: 0.6rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.camp {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 6rem 6rem 7.5rem var(--toque);
  gap: var(--e-2) 1.25rem;
  align-items: center;
  padding: 1.1rem var(--e-4) 1.1rem 1.25rem;
  background: var(--papel);
  border: 1px solid var(--fio-forte);
}

.camp:hover { border-color: var(--sobre-claro); }

.camp-abre {
  position: absolute;
  inset: 0;
  padding: 0;
  background: transparent;
  border: 0;
  cursor: pointer;
}

.camp-nome {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--e-2) 0.7rem;
  min-width: 0;
}

.camp-nome h3 {
  margin: 0;
  min-width: 0;
  font-family: var(--fonte-texto);
  font-size: 1.02rem;
  font-weight: var(--peso-forte);
  color: inherit;
}

.camp-frase {
  grid-column: 1 / 2;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.45rem;
  min-width: 0;
  margin: 0;
  font-size: 0.82rem;
  color: var(--meia-claro);
}

.camp-num {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.camp-num b {
  display: block;
  font-family: var(--fonte-destaque);
  font-size: 0.95rem;
  font-weight: var(--peso-destaque);
}

.camp-num span {
  display: block;
  font-size: 0.72rem;
  color: var(--meia-claro);
}

.camp-data {
  font-size: 0.8rem;
  color: var(--meia-claro);
  text-align: right;
}

.camp-menu {
  position: relative;
  z-index: 2;
  justify-self: end;
}

/* A cabeça da lista: os nomes das colunas, em rótulo, alinhados com a .camp. */
.cab-lista {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 6rem 6rem 7.5rem var(--toque);
  gap: 1.25rem;
  padding: 0 var(--e-4) var(--e-2) 1.25rem;
}

.cab-lista span { text-align: right; }
.cab-lista span:first-child { text-align: left; }

/* --- 7.8 Bloco de formulário e estado de erro --------------------------------
   O bloco é um passo do formulário: cartão Papel, cabeça com o número do passo
   e o título, corpo com os campos. Quando falta coisa, a borda vira preta e
   grossa (.erro) e entra a tarja preta "FALTA" dizendo o que falta.

   <section class="brasa-bloco erro">
     <div class="bloco-cab">
       <h2><span class="brasa-rotulo brasa-passo">Passo 2</span>um comentário com a palavra</h2>
       <button type="button" class="ajuda-bt" aria-expanded="false" aria-label="O que é isto">?</button>
     </div>
     <div class="bloco-corpo">
       <p><span class="brasa-falta">Falta</span> <span class="ajuda"><b>Escreva a palavra-chave.</b></span></p>
       …os campos…
     </div>
   </section>                                                                  */

.brasa-bloco {
  background: var(--papel);
  border: 1px solid var(--fio-forte);
}

.brasa-bloco.erro { border: 2px solid var(--brasa-preto); }

.bloco-cab {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--e-3);
  padding: var(--e-4) 1.1rem 0;
}

.bloco-cab h2 {
  margin: 0;
  font-family: var(--fonte-texto);
  font-size: 1.12rem;
  font-weight: var(--peso-negrito);
  line-height: 1.3;
  color: inherit;
}

/* "Passo 1" em cima do título do bloco. Vai junto com .brasa-rotulo. */
.brasa-passo {
  display: block;
  margin-bottom: 0.2rem;
}

.bloco-corpo {
  display: grid;
  gap: var(--e-3);
  padding: 0.9rem 1.1rem 1.1rem;
}

.bloco-corpo > p { margin: 0; }

/* A tarja do que falta. */
.brasa-falta {
  display: inline-block;
  padding: 0.15rem 0.45rem;
  background: var(--brasa-preto);
  color: var(--brasa-giz);
  font-family: var(--fonte-destaque);
  font-size: var(--t-rotulo);
  font-weight: var(--peso-destaque);
  letter-spacing: var(--tr-rotulo);
  text-transform: uppercase;
}

/* --- 7.9 Quadro "Atenção" ----------------------------------------------------
   O pedido de decisão: algo que só a pessoa pode resolver. Borda preta grossa,
   rótulo "Atenção", título, explicação e os botões.

   <div class="atencao" role="alert">
     <span class="brasa-rotulo">Atenção</span>
     <h3>1 envio sem confirmação da Meta</h3>
     <p>Se mandar de novo, a pessoa pode receber duas vezes.</p>
     <div class="acoes">…</div>
   </div>                                                                      */

.atencao {
  display: grid;
  gap: var(--e-3);
  padding: 1.1rem 1.25rem;
  background: var(--papel);
  border: 2px solid var(--brasa-preto);
}

.atencao h3 {
  margin: 0;
  font-family: var(--fonte-texto);
  font-size: 1rem;
  font-weight: var(--peso-negrito);
  color: inherit;
}

.atencao p {
  margin: 0;
  font-size: 0.88rem;
}

/* --- 7.10 Ajuda que abre com "?" ---------------------------------------------
   O "?" abre uma caixa preta logo abaixo. Funciona no toque do celular, que
   não tem "passar o mouse". O estado mora no aria-expanded.

   <button type="button" class="ajuda-bt" aria-expanded="true" aria-label="O que é isto">?</button>
   <p class="ajuda-caixa">Maiúscula e acento não contam: <b>MAPA</b> e <b>mapa</b> são a mesma palavra.</p> */

.ajuda-bt {
  box-sizing: border-box;
  flex: none;
  display: grid;
  place-items: center;
  width: 1.6rem;
  height: 1.6rem;
  margin: 0;
  padding: 0;
  border: 1px solid var(--fio-forte);
  border-radius: var(--canto);
  background: transparent;
  font-family: var(--fonte-destaque);
  font-size: 0.75rem;
  font-weight: var(--peso-destaque);
  color: var(--meia-claro);
  cursor: pointer;
}

.ajuda-bt[aria-expanded="true"] {
  background: var(--sobre-claro);
  border-color: var(--sobre-claro);
  color: var(--brasa-giz);
}

.ajuda-caixa {
  margin: 0;
  padding: 0.7rem 0.8rem;
  background: var(--sobre-claro);
  color: var(--brasa-giz);
  font-family: var(--fonte-texto);
  font-size: 0.84rem;
  line-height: 1.5;
}

.ajuda-caixa b {
  font-weight: var(--peso-forte);
  color: var(--brasa-verde);
}

/* --- 7.11 Janela (modal) -----------------------------------------------------
   Cartão Papel com fio preto, sobre o véu que escurece a página. Cabeça com o
   título e o ×, corpo, e o pé com "Cancelar" à esquerda e a ação escrita por
   extenso à direita. Fecha pelo ×, pelo Esc ou tocando fora.

   <div class="fundo-modal">
     <div class="modal" role="dialog" aria-modal="true" aria-labelledby="m-tit">
       <div class="modal-cab"><h2 id="m-tit">Mandar pra lixeira?</h2>…×…</div>
       <div class="modal-corpo"><p>…</p></div>
       <div class="modal-pe">
         <button class="brasa-bt bt-p bt-leve">Cancelar</button>
         <button class="brasa-bt bt-p bt-cheio">Mandar pra lixeira</button>
       </div>
     </div>
   </div>                                                                      */

.fundo-modal {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: grid;
  place-items: center;
  padding: var(--e-4);
  background: var(--veu-modal);
}

.modal {
  box-sizing: border-box;
  width: min(100%, 34rem);
  max-height: calc(100vh - 2rem);
  overflow-y: auto;
  background: var(--papel);
  border: 1px solid var(--brasa-preto);
  color: var(--sobre-claro);
}

.modal.largo { width: min(100%, 46rem); }

.modal-cab {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--e-4);
  padding: 0.9rem 1.1rem;
  border-bottom: 1px solid var(--fio-forte);
}

.modal-cab h2 {
  margin: 0;
  font-family: var(--fonte-texto);
  font-size: 1.1rem;
  font-weight: var(--peso-negrito);
  line-height: 1.3;
  color: inherit;
}

.modal-corpo {
  display: grid;
  gap: var(--e-4);
  padding: 1.1rem;
}

.modal-corpo > p { margin: 0; }

.modal-pe {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-2);
  justify-content: space-between;
  padding: 0.9rem 1.1rem;
  border-top: 1px solid var(--fio-forte);
}

/* --- 7.12 Aviso rápido (toast) -----------------------------------------------
   Preto, embaixo e no meio da tela, depois de cada ação. Uma frase curta; a
   palavra que importa em verde.
   No painel do BrasaChat, no celular, sobe acima do menu fixo de baixo
   (bottom: 5.5rem): isso é da casca do painel, não daqui.

   <div class="toast" role="status"><b>No ar.</b> Já responde quem comentar.</div> */

.toast {
  position: fixed;
  z-index: 60;
  left: 50%;
  bottom: var(--e-5);
  transform: translateX(-50%);
  max-width: calc(100vw - 2rem);
  padding: 0.7rem 1.1rem;
  background: var(--brasa-preto);
  color: var(--brasa-giz);
  font-family: var(--fonte-destaque);
  font-size: 0.75rem;
  letter-spacing: 0.06em;
}

.toast b {
  font-weight: var(--peso-destaque);
  color: var(--brasa-verde);
}

/* --- 7.13 Foco do teclado ----------------------------------------------------
   Contorno preto de 2px, nunca sombra. Na linha-cartão ele entra por dentro,
   porque o botão cobre o cartão inteiro.                                     */

.brasa-bt:focus-visible,
.chave:focus-visible,
.ajuda-bt:focus-visible,
.opcao input[type="radio"]:focus-visible,
.variacoes .brasa-chip button:focus-visible {
  outline: 2px solid var(--sobre-claro);
  outline-offset: 2px;
}

.camp-abre:focus-visible {
  outline: 2px solid var(--sobre-claro);
  outline-offset: -2px;
}

/* --- 7.14 No celular ---------------------------------------------------------
   O corte é o do painel do BrasaChat: abaixo de 900px o menu lateral vira
   barra em cima, e a linha-cartão quebra em três colunas.                    */

@media (max-width: 899px) {
  .camp {
    grid-template-columns: minmax(0, 1fr) auto auto;
    gap: 0.6rem var(--e-4);
    padding: var(--e-4);
  }
  .camp-nome      { grid-column: 1 / 3; }
  .camp-menu      { grid-column: 3; grid-row: 1; }
  .camp-frase     { grid-column: 1 / -1; }
  .camp-num       { text-align: left; }
  .camp-num.c1    { grid-column: 1; }
  .camp-num.c2    { grid-column: 2; }
  .camp-data      { grid-column: 3; align-self: end; }
  .cab-lista      { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .chave::after { transition: none; }
}


/* =============================================================================
   8. NÚMEROS E LISTAS
      (vindos do painel do BrasaChat, aprovados pelo Yuri em 08/10/2026)

   As peças de leitura do painel: os números grandes em fileira, o funil, o
   filtro em fichas, a linha de pessoa com os três tracinhos e a lista de
   escolha ao lado. Vieram do mesmo protótipo da seção 7 e entraram aqui em
   10/10/2026, com a etapa 6 do BrasaChat (a tela de Leads e os números).

   Valem as regras da seção 7: superfície CLARA, cinco cores, 44px no que se
   toca. O número grande é Anton, como o título. O verde marca só o fim do
   funil, o clique: é o número que mostra se o infoproduto vende.

   Os nomes são os do protótipo, menos os dois que já existiam:

     protótipo   aqui             por que
     .fchip      .brasa-fchip     a central de controle (web/painel/index.html)
                                  tem a dela, em caixa alta; é a mesma ideia
     .passos     .brasa-passos    a galeria do cliente usa .passos na lista
                                  do passo a passo (web/cliente/assets/escolha.css)

   Mudança em relação ao protótipo: a ficha de filtro tinha 40px de altura e
   aqui tem 44px (--toque), como manda a regra do toque.
   ============================================================================= */

/* --- 8.1 Números em fileira --------------------------------------------------
   Quatro números lado a lado dentro de um painel, cada um com o nome embaixo e,
   se precisar, uma taxa pequena em Fira Code. No celular, dois por linha.

   <div class="nums">
     <div class="num"><b>214</b><span>Comentaram a palavra</span><small>&nbsp;</small></div>
     <div class="num"><b>109</b><span>Tocaram no botão</span><small>51% de quem comentou</small></div>
   </div>                                                                      */

.nums {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.num {
  min-width: 0;
  padding: 1.1rem 1.25rem;
  border-left: 1px solid var(--fio-forte);
}

.num:first-child { border-left: 0; }

.num b {
  display: block;
  font-family: var(--fonte-titulo);
  font-weight: 400;
  font-size: clamp(1.8rem, 4vw, 2.5rem);
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

.num span { display: block; margin-top: 0.45rem; }

.num small {
  display: block;
  margin-top: 0.2rem;
  font-family: var(--fonte-destaque);
  font-size: 0.68rem;
  color: var(--meia-claro);
}

/* --- 8.2 O funil -------------------------------------------------------------
   Uma linha por passo: o nome, a taxa sobre a linha de cima, o número grande e
   uma barra no tamanho certo. A linha inteira é um botão (no painel, abre a
   lista daquele passo). A barra do último passo é verde.

   A largura da barra é o dado: style="width:50%" no <i>. Em página com
   Content-Security-Policy sem 'unsafe-inline' (o painel do BrasaChat), a
   largura entra pelo script (elemento.style.width), porque o navegador recusa
   estilo escrito no HTML.

   <ol class="funil">
     <li><button type="button" class="funil-linha">
       <span><span class="funil-nome">Tocaram no botão</span><span class="funil-pct">50% de quem recebeu o direct</span></span>
       <b>445</b>
       <span class="barra-n" aria-hidden="true"><i style="width:50%"></i></span>
     </button></li>
   </ol>                                                                       */

.funil {
  display: grid;
  margin: 0;
  padding: 0;
  list-style: none;
}

.funil li { border-bottom: 1px solid var(--fio-claro); }
.funil li:last-child { border-bottom: 0; }

.funil-linha {
  box-sizing: border-box;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: var(--e-1) var(--e-4);
  align-items: end;
  width: 100%;
  margin: 0;
  padding: var(--e-4) 1.25rem;
  background: transparent;
  border: 0;
  font: inherit;
  color: inherit;
  text-align: left;
  cursor: pointer;
}

.funil-linha:hover { background: var(--superf); }

.funil-linha b {
  font-family: var(--fonte-titulo);
  font-weight: 400;
  font-size: 2rem;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

.funil-nome { font-weight: var(--peso-forte); }

.funil-pct {
  display: block;
  margin-top: 0.15rem;
  font-family: var(--fonte-destaque);
  font-size: 0.7rem;
  color: var(--meia-claro);
}

.barra-n {
  grid-column: 1 / -1;
  height: 0.5rem;
  margin-top: 0.4rem;
  background: var(--fio-claro);
}

.barra-n i { display: block; height: 100%; background: var(--sobre-claro); }

/* o fio preto por dentro, sem sombra (o sistema não tem sombra) */
.barra-n i.fim {
  background: var(--brasa-verde);
  outline: 1px solid var(--brasa-preto);
  outline-offset: -1px;
}

/* --- 8.3 Filtro em fichas ----------------------------------------------------
   Uma fileira de fichas, uma só marcada (aria-pressed): marcada é preta cheia.
   Vai ao lado da busca.

   <button type="button" class="brasa-fchip" aria-pressed="true">Todos</button>
   <button type="button" class="brasa-fchip" aria-pressed="false">Clicaram</button> */

.brasa-fchip {
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  min-height: var(--toque);
  margin: 0;
  padding: 0 0.8rem;
  background: transparent;
  border: 1px solid var(--fio-forte);
  border-radius: var(--canto);
  font-family: var(--fonte-texto);
  font-size: 0.8rem;
  font-weight: var(--peso-forte);
  color: inherit;
  cursor: pointer;
}

.brasa-fchip b { font-family: var(--fonte-destaque); font-weight: 500; font-size: 0.75rem; }

.brasa-fchip[aria-pressed="true"] {
  background: var(--sobre-claro);
  border-color: var(--sobre-claro);
  color: var(--brasa-giz);
}

/* --- 8.4 A linha de pessoa ---------------------------------------------------
   Uma linha por pessoa numa lista longa: o quadrado com a inicial, o @ e o que
   ela escreveu, de onde veio, até onde foi e quando. "Até onde foi" são três
   tracinhos, um por passo, cheios de preto até onde a pessoa chegou; o último,
   quando cheio, é verde. Sem foto de terceiro: a inicial resolve. (No painel do
   BrasaChat, o quadrado da inicial é o mesmo .av da foto do perfil.)

   <div class="cab-leads brasa-rotulo"><span></span><span>Pessoa e comentário</span>
     <span>Campanha</span><span>Até onde foi</span><span>Quando</span></div>
   <div class="lead">
     <span class="lead-ini">C</span>
     <div class="lead-pessoa"><b>@carla.exemplo</b><span>“MAPA quero muito!”</span></div>
     <div class="lead-camp">Mapa Mundi Drone IA</div>
     <div class="brasa-passos"><span class="passos-tr" aria-hidden="true"><i class="f"></i><i class="f"></i><i></i></span><small>tocou no botão</small></div>
     <div class="lead-data">08/10 14:05</div>
   </div>                                                                      */

.lead,
.cab-leads {
  display: grid;
  grid-template-columns: 2.6rem minmax(0, 1.5fr) minmax(0, 1fr) 8.5rem 6.5rem;
  gap: 0.4rem var(--e-4);
  align-items: center;
  padding: 0.85rem 0.4rem;
  border-bottom: 1px solid var(--fio-claro);
}

.cab-leads { padding-top: 0; padding-bottom: var(--e-2); border-bottom-color: var(--fio-forte); }
.cab-leads span:last-child { text-align: right; }

.lead-ini {
  display: grid;
  place-items: center;
  width: 2.6rem;
  height: 2.6rem;
  background: var(--superf);
  border: 1px solid var(--fio-forte);
  font-family: var(--fonte-titulo);
  font-size: 1.1rem;
  color: var(--meia-claro);
}

.lead-pessoa { min-width: 0; }

.lead-pessoa b,
.lead-pessoa span,
.lead-camp {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.lead-pessoa b { font-weight: var(--peso-forte); }
.lead-pessoa span { font-size: 0.84rem; color: var(--meia-claro); }
.lead-camp { min-width: 0; font-size: 0.84rem; }

.lead-data {
  font-family: var(--fonte-destaque);
  font-size: 0.7rem;
  color: var(--meia-claro);
  text-align: right;
}

.brasa-passos { display: grid; gap: 0.3rem; }
.passos-tr { display: flex; gap: 3px; }
.passos-tr i { flex: 1; height: 6px; border: 1px solid var(--fio-forte); }
.passos-tr i.f { background: var(--sobre-claro); border-color: var(--sobre-claro); }
.passos-tr i.v { background: var(--brasa-verde); border-color: var(--brasa-preto); }

.brasa-passos small {
  font-family: var(--fonte-destaque);
  font-size: 0.64rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--meia-claro);
}

/* --- 8.5 A lista de escolha ao lado ------------------------------------------
   A coluna da esquerda de uma lista longa: cada opção com a contagem, a
   escolhida em preto cheio. No celular ela some e no lugar entra um <select>
   (.sel-movel) com as mesmas opções.

   <div class="lista-camps">
     <button type="button" aria-pressed="true"><span>Todas as campanhas</span><b>939</b></button>
     <button type="button" aria-pressed="false"><span>Mapa Mundi Drone IA</span><b>889</b></button>
   </div>
   <div class="sel-movel"><select>…</select></div>                             */

.lista-camps { display: grid; }

.lista-camps button {
  box-sizing: border-box;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--e-3);
  min-height: var(--toque);
  margin: 0;
  padding: var(--e-2) 0.9rem;
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--fio-claro);
  font: inherit;
  font-size: 0.86rem;
  color: inherit;
  text-align: left;
  cursor: pointer;
}

.lista-camps button:last-child { border-bottom: 0; }
.lista-camps button span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lista-camps button b { font-family: var(--fonte-destaque); font-weight: 500; font-size: 0.76rem; }
.lista-camps button[aria-pressed="true"] { background: var(--sobre-claro); color: var(--brasa-giz); }

.sel-movel { display: none; }

.sel-movel select {
  box-sizing: border-box;
  width: 100%;
  min-height: var(--toque);
  padding: 0 0.6rem;
  background: var(--papel);
  border: 1px solid var(--fio-forte);
  border-radius: var(--canto);
  font: inherit;
  font-size: 16px;   /* 16px: o iPhone não dá zoom no campo */
  color: inherit;
}

/* --- 8.6 No celular ----------------------------------------------------------
   O mesmo corte de 900px da seção 7.                                         */

@media (max-width: 899px) {
  .nums                 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .num:nth-child(3)     { border-left: 0; }
  .num:nth-child(n + 3) { border-top: 1px solid var(--fio-forte); }
  .lista-camps          { display: none; }
  .sel-movel            { display: block; }
  .cab-leads            { display: none; }
  .lead                 { grid-template-columns: 2.6rem minmax(0, 1fr) auto; }
  .lead-pessoa          { grid-column: 2; }
  .lead-data            { grid-column: 3; grid-row: 1; align-self: start; }
  .lead-camp,
  .lead .brasa-passos   { grid-column: 2 / -1; }
}


/* =============================================================================
   ⛔ REGRAS DURAS

   - Foto com texto por cima SEMPRE leva véu. Sem exceção.
   - A barra do painel é RÓTULO, não título: uma a três palavras, caixa alta.
     Se precisa de frase, ela vai no miolo, em Anton.
   - Um risco à mão por painel, no máximo.
   - O losango só aparece no logo e no botão de play. Em mais nenhum lugar.
   - Sem canto arredondado, sem sombra, sem gradiente decorativo.
     O único gradiente permitido é o véu, e ele é função, não enfeite.
   - Vídeo de portfólio nunca em player de terceiro: o arquivo é servido pela
     nossa VPS. Player de fora põe marca alheia e sugere concorrente no fim.
   ============================================================================= */

/* ====== o site ====== */
/* =============================================================================
   ESTÚDIO BRASA — o site
   Carrega DEPOIS de tokens.css e componentes.css do design system.
   ⛔ Nunca inventar cor, tamanho ou espaço aqui: só usar as variáveis do DS.

   As regras duras vêm do mapa das páginas (brasa-vault/shared/wiki/
   site-mapa-paginas.md, seção 2) e são de aceite, não de gosto:
   desenhado do celular pra fora · zero rolagem lateral · 44px medidos no que
   se toca · coluna declarada em grade de número fixo · logo travado por altura.
   ============================================================================= */

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--brasa-preto);
  color: var(--sobre-escuro);
  font-family: var(--fonte-texto);
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;            /* trava de segurança contra rolagem lateral */
}

img, video, svg { max-width: 100%; }

a { color: inherit; }

.pular {
  position: absolute;
  left: -9999px;
  display: inline-flex;
  align-items: center;
  min-height: 44px;
}
.pular:focus {
  left: var(--e-4);
  top: var(--e-4);
  z-index: 99;
  background: var(--brasa-verde);
  color: var(--brasa-preto);
  padding: 0 var(--e-4);
  font-family: var(--fonte-destaque);
}

/* --- O trilho: uma largura só pra página inteira --------------------------- */

.faixa { padding: var(--e-8) var(--e-5); }
.dentro { max-width: 76rem; margin-inline: auto; }
.leitura { max-width: 48rem; margin-inline: auto; }

/* Preto colado em preto não é troca de parede — entra filete. */
.brasa-escuro + .brasa-escuro { border-top: 1px solid var(--fio-escuro); }


/* =============================================================================
   CABEÇALHO — barra no computador, gaveta no celular
   ============================================================================= */

.topo {
  position: sticky;
  top: 0;
  z-index: 20;
  display: flex;
  align-items: center;
  gap: var(--e-4);
  padding: var(--e-3) var(--e-5);
  background: var(--brasa-preto);
  border-bottom: 1px solid var(--fio-escuro);
}

/* ⛔ Altura, nunca largura: o losango é 358×271 e estoura a barra se travado
   pela largura. */
.topo-logo {
  display: flex;
  align-items: center;
  min-height: 44px;
  margin-right: auto;
}
.topo-logo svg { height: 30px; width: auto; display: block; }

.topo-nav, .topo-cliente { display: none; }

.gaveta-trava { display: none; }

.gaveta-botao {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding-inline: var(--e-3);
  cursor: pointer;
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: var(--t-rotulo);
  letter-spacing: var(--tr-rotulo);
  text-transform: uppercase;
  color: var(--sobre-escuro);
}
.gaveta-fechar { display: none; }
.gaveta-trava:checked ~ .gaveta-botao .gaveta-abrir { display: none; }
.gaveta-trava:checked ~ .gaveta-botao .gaveta-fechar { display: inline; }

/* A gaveta desce colada na barra e tem a altura do próprio conteúdo — tela
   cheia arrancaria a pessoa de onde ela está (decisão do Yuri, 14/08). */
.gaveta {
  display: none;
  position: sticky;
  top: 0;
  z-index: 19;
  background: var(--brasa-preto);
  border-bottom: 1px solid var(--fio-escuro);
  padding: var(--e-5);
}
.topo:has(.gaveta-trava:checked) + .gaveta { display: block; }

.gaveta nav { display: grid; gap: var(--e-2); }
.gaveta nav a {
  display: flex;
  align-items: center;
  min-height: 52px;
  font-family: var(--fonte-titulo);
  font-size: 1.9rem;
  text-transform: uppercase;
  color: var(--brasa-branco);
  text-decoration: none;
}
.gaveta-pe {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-5);
  margin-top: var(--e-4);
  padding-top: var(--e-4);
  border-top: 1px solid var(--fio-escuro);
}
.gaveta-pe a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  font-family: var(--fonte-destaque);
  font-size: var(--t-peq);
  color: var(--meia-escuro);
  text-decoration: none;
}

/* A partir de 56rem sobra largura: o menu vira linha e a gaveta some. */
@media (min-width: 56rem) {
  .gaveta-botao, .gaveta { display: none !important; }

  .topo-nav {
    display: flex;
    gap: var(--e-6);
  }
  /* ⛔ Fira Code, NUNCA Anton: a 15px o menu competiria com o H1, que também
     é Anton, a 40px de distância. */
  .topo-nav a, .topo-cliente {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    font-family: var(--fonte-destaque);
    font-weight: var(--peso-destaque);
    font-size: var(--t-rotulo);
    letter-spacing: var(--tr-rotulo);
    text-transform: uppercase;
    text-decoration: none;
  }
  .topo-nav a { color: var(--sobre-escuro); }
  .topo-nav a:hover { color: var(--brasa-verde); }

  .topo-cliente {
    display: inline-flex;
    margin-left: var(--e-6);
    color: var(--meia-escuro);   /* nunca ganha destaque — não é pro decisor */
  }
}


/* =============================================================================
   ABERTURA — bloco 1
   ============================================================================= */

.abertura { position: relative; padding-block: var(--e-9); }

.abertura-video {
  position: absolute;
  inset: 0;
  overflow: hidden;
}
.abertura-video video,
.abertura-video .falta-caixa {
  width: 100%; height: 100%; object-fit: cover;
}
.abertura-video::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,.55), rgba(0,0,0,.82));
}

.abertura .dentro { position: relative; }

.abertura h1 {
  font-family: var(--fonte-titulo);
  font-size: var(--t-display);
  line-height: var(--lh-titulo);
  color: var(--brasa-branco);
  text-wrap: balance;
  max-width: 20ch;
  margin: 0;
}
.abertura h1 .ponto { color: var(--brasa-verde); }

.abertura .credencial {
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: var(--t-peq);
  letter-spacing: 0.08em;
  color: var(--meia-escuro);
  margin: var(--e-5) 0 0;
}

.abertura .apoio {
  margin-top: var(--e-6);
  max-width: 46ch;
}


/* =============================================================================
   FAIXA DE CLIENTES — bloco 2
   Superfície CLARA de propósito: logo de cliente é desenhado pra fundo branco;
   no preto o brasão da Prefeitura some (achado de 14/08).
   ⛔ Empilha, nunca carrossel: é a primeira pergunta do decisor e tem que
   aparecer inteira de uma vez no celular.
   ============================================================================= */

.clientes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; background: var(--fio-claro); margin-top: var(--e-5); }
.clientes > * {
  display: flex; align-items: center; justify-content: center;
  min-height: 84px; padding: var(--e-4);
  background: var(--brasa-giz);
}
/* Normalizado por ÁREA ÓPTICA, não por altura: marca deitada e marca quadrada
   na mesma altura fazem a quadrada virar ícone. */
.clientes img { max-height: 38px; width: auto; }

@media (min-width: 40rem) { .clientes { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 64rem) { .clientes { grid-template-columns: repeat(6, minmax(0, 1fr)); } }


/* =============================================================================
   GRADES — coluna DECLARADA, nunca auto-fit
   São 3 cases, 3 colunas, 4 passos: o auto-fit deixava célula vazia numa
   faixa inteira de larguras, com retângulo cinza ao lado do último item.
   ============================================================================= */

.grade-3, .grade-4 { display: grid; gap: var(--e-5); }

@media (min-width: 48rem) {
  .grade-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .grade-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 64rem) {
  .grade-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* --- Cartão de case -------------------------------------------------------- */

.caso {
  display: block;
  text-decoration: none;
  border: 1px solid var(--cor-fio);
  background: transparent;
}
.caso .capa { aspect-ratio: 4 / 3; overflow: hidden; }
.caso .capa img { width: 100%; height: 100%; object-fit: cover; display: block; }
.caso .texto { padding: var(--e-4); }
.caso .numero {
  display: block;
  font-family: var(--fonte-titulo);
  font-size: var(--t-h2);
  color: var(--brasa-verde);
  line-height: 1;
}
.caso .quem {
  display: block;
  font-family: var(--fonte-destaque);
  font-size: var(--t-rotulo);
  letter-spacing: var(--tr-rotulo);
  text-transform: uppercase;
  color: var(--cor-meia);
  margin-top: var(--e-3);
}
.caso .oque { margin-top: var(--e-2); }

/* --- Coluna de argumento (o "por que existimos" e os 4 passos) -------------- */

.coluna { border-top: 2px solid var(--brasa-verde); padding-top: var(--e-4); }
.coluna h3 { margin-bottom: var(--e-2); }
.coluna .passo {
  font-family: var(--fonte-destaque);
  font-size: var(--t-rotulo);
  letter-spacing: var(--tr-rotulo);
  color: var(--brasa-verde);
  display: block;
  margin-bottom: var(--e-2);
}

/* --- Lista de fatos (bloco 7) ---------------------------------------------- */

.fatos { list-style: none; margin: var(--e-5) 0 0; padding: 0; display: grid; gap: var(--e-3); }
.fatos li {
  padding-left: var(--e-5);
  position: relative;
  font-family: var(--fonte-texto);
  font-variation-settings: "wght" var(--peso-do-corpo, 300), "opsz" 16;
  font-size: var(--t-corpo);
  line-height: var(--lh-corpo);
}
.fatos li::before {
  content: "";
  position: absolute; left: 0; top: 0.62em;
  width: 10px; height: 10px;
  background: var(--brasa-verde);
}

/* --- Chamada (bloco 9) — superfície clara, a última troca de parede -------- */

.chamada { text-align: center; }
.chamada .brasa-h1 { margin-bottom: var(--e-5); }

.botao {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 52px;
  padding: 0 var(--e-6);
  background: var(--brasa-verde);
  color: var(--brasa-preto);
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: var(--t-peq);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  text-decoration: none;
}
.botao:hover { filter: brightness(1.08); }

.botao-fio {
  background: transparent;
  color: inherit;
  border: 1px solid var(--cor-fio);
}

/* Um botão pode encostar no outro; sem isso os dois alvos ficam a 1,6px de
   distância, que foi o outro defeito da primeira medição. */
.botao + .botao, .botao + .botao-fio { margin-left: var(--e-3); }


/* =============================================================================
   RODAPÉ
   ============================================================================= */

.pe { padding: var(--e-8) var(--e-5) var(--e-5); border-top: 1px solid var(--fio-escuro); }
.pe-dentro {
  max-width: 76rem; margin-inline: auto;
  display: grid; gap: var(--e-6);
}
@media (min-width: 48rem) { .pe-dentro { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

.pe-bloco .brasa-corpo { margin-top: var(--e-3); }
.pe-cadastro { font-family: var(--fonte-destaque); font-size: var(--t-peq); line-height: 1.9; }

.pe-nome {
  font-family: var(--fonte-texto);
  font-variation-settings: "wght" 600, "opsz" 16;
  font-size: var(--t-corpo);
  margin: var(--e-3) 0 var(--e-1);
  color: var(--brasa-branco);
}

/* Link de contato é BLOCO, nunca inline dentro de parágrafo — é o que garante
   os 44px medidos. Foi aqui que a primeira medição falhou (21px). */
.pe-links { display: grid; }
.pe-links a {
  display: inline-flex;
  align-items: center;
  align-self: start;
  min-height: 44px;
  color: var(--sobre-escuro);
  font-family: var(--fonte-destaque);
  font-size: var(--t-peq);
  text-decoration: none;
  border-bottom: 1px solid var(--fio-escuro);
}
.pe-links a:hover { color: var(--brasa-verde); }

.pe-fio {
  max-width: 76rem; margin: var(--e-7) auto 0;
  padding-top: var(--e-4);
  border-top: 1px solid var(--fio-escuro);
  display: flex; flex-wrap: wrap; gap: var(--e-4);
  align-items: center; justify-content: space-between;
}
/* 44px medidos também aqui: foram os links miúdos do rodapé que falharam na
   primeira medição (26,7px, com 1,6px entre alvos vizinhos). */
.pe-legal { display: flex; flex-wrap: wrap; gap: var(--e-5); }
.pe-legal a {
  display: inline-flex; align-items: center;
  min-height: 44px;
  font-family: var(--fonte-destaque);
  font-size: var(--t-peq);
  color: var(--meia-escuro);
  text-decoration: none;
}
.pe-legal a:hover { color: var(--brasa-verde); }


/* =============================================================================
   BURACOS DECLARADOS
   O que ainda não existe aparece NA PÁGINA, com nome. Placeholder invisível é
   o jeito mais barato de ir ao ar com furo; este grita, e a prévia vira a
   lista de compras do garimpo.
   ⛔ Nada disso pode sobreviver à publicação: `montar-site.sh --publicar`
   recusa a subir página que ainda tenha buraco.
   ============================================================================= */

.falta {
  display: inline-flex;
  align-items: center;
  gap: var(--e-2);
  padding: 0.2em 0.6em;
  background: repeating-linear-gradient(
    45deg, rgba(255,169,0,.14) 0 8px, transparent 8px 16px);
  border: 1px dashed var(--brasa-ambar);
  color: var(--brasa-ambar);
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: var(--t-rotulo);
  letter-spacing: var(--tr-rotulo);
  text-transform: uppercase;
}

.falta-caixa {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 200px;
  background: repeating-linear-gradient(
    45deg, rgba(255,169,0,.10) 0 10px, transparent 10px 20px);
  border: 1px dashed var(--brasa-ambar);
}


/* =============================================================================
   PADRÃO CLARO — pedido do Yuri em 12/10/2026
   O miolo do site é claro (Giz). Ficam escuros só o cabeçalho (o logo é verde
   e foi desenhado pra fundo preto), a abertura com vídeo (texto sobre imagem
   pede véu e preto, regra do DS) e o rodapé. Entre duas faixas claras entra o
   mesmo filete que já existia entre duas escuras.
   ============================================================================= */

body { background: var(--brasa-giz); color: var(--sobre-claro); }
.brasa-claro + .brasa-claro { border-top: 1px solid var(--fio-claro); }

/* Nomes de cliente em texto, enquanto os logos oficiais não chegam. */
.clientes .cliente-nome {
  font-family: var(--fonte-destaque);
  font-weight: var(--peso-destaque);
  font-size: var(--t-rotulo);
  letter-spacing: var(--tr-rotulo);
  text-transform: uppercase;
  text-align: center;
  color: var(--sobre-claro);
}

/* Vídeo vertical (bastidor) no lugar do showreel 16:9: largura de celular,
   centrado, pra não virar um retângulo preto de parede a parede. */
.midia-vertical { max-width: 22rem; margin-inline: auto; }

/* O cartão de case é <div> enquanto as páginas de case não existem. */
.caso { color: inherit; }

/* "Quem faz" (12/10/2026): a foto dos dois sócios à esquerda, os três textos
   empilhados à direita; no celular vira uma coluna só. */
.quem-faz { display: grid; gap: var(--e-6); }
.quem-faz .coluna + .coluna { margin-top: var(--e-5); }
@media (min-width: 48rem) {
  .quem-faz { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); align-items: center; }
}
