/* © 2026 Jose Carvalho. Intel Ceasa. Ver LICENSE. */
/* r38 (27/09/2026): todo `font-size` abaixo de 11px nesta folha subiu para 11px (piso de letra da regua da
   Apple, ordem do Carvalho de 26/09 15:25); nos `clamp()` subiu so o minimo. Ver o bloco "A REGUA DA APPLE NO
   COMPUTADOR" no fim de avarias.css. */
/* ============================================================
   SO O QUE A TELA "CONTA CORRENTE POR PRODUTO" (celular) PRECISA E NAO HERDA PRONTO de
   avarias.css/avarias-celular.css. A folha herdada ja da conta de `.av-painel`, `.av-painel-cabeca`,
   `.av-tabela`, `.av-tabela-caixa`, `.av-celula-barra`, `.av-chip-tipo`, `.av-vazio`,
   `.av-painel-apoio` e `.av-ver-todos` (tabela da secao 2.1 do contrato, scratchpad/_b32-contrato.md)
   -- nada disso e reescrito aqui.

   ESCOPO: toda regra que muda a APARENCIA de uma classe partilhada (o selo do cabecalho de painel,
   o botao aceso do alternador) fica atras de `[data-tela="avarias-celular-produto"]`, porque
   `.av-painel.debito`/`.av-painel.credito` tambem sao usados pela tela de COMPUTADOR
   (avarias-por-produto.js) -- sem o escopo, uma regra escrita aqui vazaria para uma tela que nao e
   minha nesta rodada.

   CORES: todas as amostradas pixel a pixel na ficha de extracao
   (scratchpad/avarias-extracao-mobile-produto.md, Camada 3), citadas de novo no comentario de cada
   bloco -- os valores crus tambem estao comentados no topo do arquivo JS irmao, que e quem os usa
   como argumento de `barraNaCelula`/`chipDeVariacao`.
   ============================================================ */

/* ---------- os quatro cabecalhos de painel: o titulo NAO empurra para a borda direita ----------
   ACHADO POR CRITICO DE CONTEXTO LIMPO (abriu a foto e a tela lado a lado): as quatro `.av-painel-
   cabeca` desta tela mediam ate 181px de vao entre o selo/emoji e o titulo -- o titulo colado na
   borda direita da secao, em vez de logo depois do icone.
   A CAUSA E A REGRA PARTILHADA `avarias.css:774`, `.av-painel-cabeca > :last-child:not(:first-
   child) { margin-left: auto }`. O comentario dela afirma "com dois filhos nada e empurrado" --
   e isso e FALSO: com dois filhos (icone + bloco de titulo) o bloco de titulo E `:last-child` e
   NAO e `:first-child` (quem e `:first-child` e o icone), entao a regra bate mesmo assim. Na tela
   de COMPUTADOR isso nunca aparece porque la ha sempre um TERCEIRO filho (o controle de
   ordenacao), e ai sim so o terceiro leva o empurrao -- exatamente o caso que a regra foi escrita
   para cobrir. Aqui `painelComTom` passa `direita: null` (paineis de ranking, dois filhos) e
   `painelDeDetalhe` tem o botao de voltar + emoji + titulo (tres filhos, mas o ULTIMO continua
   sendo o titulo, nunca um controle que devesse ir para a direita).
   CONSERTO NA MINHA FOLHA, sem tocar avarias.css (as outras quatro telas de celular nao usam
   `.av-painel-cabeca`, so `.avc-painel-cabeca` da casca -- conferido pelo critico -- entao esta
   regra so alcanca esta tela e a de computador; escopar a `[data-tela]` garante que nem a de
   computador seja tocada). */
.tela-avarias[data-tela="avarias-celular-produto"] .av-painel-cabeca > :last-child {
  margin-left: 0;
}

/* ---------- a faixa verde nao pode espremer o titulo ----------
   ACHADO POR CRITICO DE CONTEXTO LIMPO: a coluna do titulo saia com 32px de largura e 251px de
   altura -- "Conta Corrente por Produto" picado letra a letra numa coluna estreita, empurrando a
   tela inteira para baixo. `faixaTitulo()` (a casca partilhada) poe icone + titulo + a caixa de
   periodo numa UNICA linha flexivel, e a caixa de periodo (dois `<input type=date>` mais o icone
   de calendario) NAO ENCOLHE (a propria casca marca o ultimo filho `flex: none`) -- entao quando
   as duas nao cabem lado a lado, quem perde e o titulo, que tem `min-width: 0`.
   A TELA IRMA (Conta Corrente) ja resolveu exatamente isto, sem tocar a casca:
   `avarias-celular-conta-corrente.css:46-53`. Copio a MESMA tecnica aqui (nao invento uma nova
   pelo mesmo problema): `flex-wrap` faz a caixa de periodo cair para a linha de baixo quando nao
   cabe do lado do titulo, `min-width: 170px` da folga para o titulo respirar antes de decidir
   empilhar, e `flex-basis: 100%` no periodo faz ele ocupar a linha inteira quando cai, em vez de
   ficar colado sozinho numa ponta. */
[data-tela="avarias-celular-produto"] .avc-faixa-titulo {
  flex-wrap: wrap;
  row-gap: 10px;
}
[data-tela="avarias-celular-produto"] .avc-faixa-titulo-texto {
  min-width: 170px;
}
[data-tela="avarias-celular-produto"] .avc-faixa-titulo > .av-periodo {
  flex-basis: 100%;
}

/* ---------- selo quadrado arredondado do cabecalho de painel (nao circular) ----------
   A ficha mediu DOIS tratamentos de icone na mesma tela: o circulo do cartao de KPI e o quadrado
   arredondado (squircle) do cabecalho de painel, raio ~8px -- diferentes de proposito (Camada 5).
   Reaproveita o layout de `.av-painel-cabeca` (flex, gap) e so troca a forma/cor do selo. */
.tela-avarias[data-tela="avarias-celular-produto"] .avcp-marca {
  align-items: center;
  border-radius: 8px;
  color: #fff;
  display: flex;
  flex: 0 0 auto;
  height: 28px;
  justify-content: center;
  width: 28px;
}
/* Todo icone novo precisa da propria regra de tamanho (armadilha da secao 2.3 do contrato):
   `icone()` devolve um svg sem largura/altura de proposito. */
.tela-avarias[data-tela="avarias-celular-produto"] .avcp-marca svg {
  height: 16px;
  width: 16px;
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-painel.debito .avcp-marca {
  background: #8f101c; /* ficha: icone quadrado arredondado do cabecalho, lado Débitos */
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-painel.credito .avcp-marca {
  background: #394d09; /* ficha: idem, lado Créditos */
}

/* ---------- os quatro cartoes de KPI ----------
   ESTILO PROPRIO, e nao `.av-kpi` herdado: a ficha mostra um cartao CLARO (fundo rosa/menta bem
   claro, icone em circulo colorido), o oposto do cartao ESCURO que `.av-kpi` desenha para a tela
   de computador (fundo quase preto, texto branco) -- duas fotografias, duas linguagens visuais.
   Reaproveitar `.av-kpi` aqui pintaria um cartao escuro onde o desenho pede um claro.
   Cores FIXAS (nao seguem --avarias-pagina/--avarias-texto do tema claro/escuro do painel), pelo
   mesmo motivo do cabecalho e da barra de baixo da casca celular (avarias-celular.css, topo do
   arquivo): sao identidade da fotografia, e texto escuro sobre um fundo rosa claro CRAVADO
   continuaria legivel no tema escuro do painel, enquanto `--avarias-texto` (que vira quase branco
   no escuro) sobre o MESMO rosa claro perderia contraste. */
.avcp-kpis {
  display: grid;
  gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  padding: 10px 12px;
}
.avcp-kpi {
  align-items: center;
  border-radius: 10px;
  display: flex;
  gap: 10px;
  min-width: 0;
  padding: 10px 12px;
}
.avcp-kpi.debito {
  background: #fbe8e8; /* ficha: fundo do cartao de KPI, Débitos */
}
.avcp-kpi.credito {
  background: #eff6e1; /* ficha: fundo do cartao de KPI, Créditos */
}
.avcp-kpi-icone {
  align-items: center;
  border-radius: 50%;
  color: #fff;
  display: flex;
  flex: 0 0 auto;
  height: 34px;
  justify-content: center;
  width: 34px;
}
.avcp-kpi-icone svg {
  height: 18px;
  width: 18px;
}
.avcp-kpi.debito .avcp-kpi-icone {
  background: #9d1624; /* ficha: circulo do icone do cartao de KPI, Débitos */
}
.avcp-kpi.credito .avcp-kpi-icone {
  background: #394e06; /* ficha: idem, Créditos */
}
.avcp-kpi-corpo {
  display: grid;
  gap: 2px;
  min-width: 0;
}
.avcp-kpi-rotulo {
  color: #474f35;
  font-size: 11px;
  font-weight: 600;
}
.avcp-kpi-valor {
  color: #1b2733;
  font-size: clamp(13px, 4.6cqi, 17px);
  font-weight: 800;
  letter-spacing: -0.01em;
}
/* O CARTAO E O CONTAINER DE MEDIDA DO PROPRIO NUMERO (a mesma tecnica de `.av-kpi`, avarias.css: a
   armadilha ja paga la foi numero de dinheiro cortado por vir de `vw`, que pergunta a largura da
   JANELA em vez da largura do CARTAO). */
.avcp-kpi {
  container-type: inline-size;
}
.avcp-kpi .chip-variacao {
  font-size: 11px;
}

/* ---------- os quatro filtros ----------
   Chip fechado: icone + rotulo pequeno em cima + valor (o proprio <select> nativo) embaixo, borda
   fina clara -- Camada 5 da ficha. O <select> fica SEM moldura propria (herda o fundo do chip) e
   mostra a seta nativa do sistema operacional no lugar de um chevron desenhado a mao: e o "use o
   recurso da plataforma" mais barato que existe, e ela ja e a mesma seta em forma de "v" que a
   ficha descreve. */
.avcp-filtros {
  display: grid;
  gap: 8px;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  padding: 0 12px 10px;
}
/* "Mais filtros" e sempre o mais estreito dos quatro (a ficha mediu isso, Camada 1): as tres
   colunas de filtro de verdade dividem o espaco que sobra em partes iguais. */
.avcp-filtros {
  grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(0, 0.86fr);
}
.avcp-filtro,
.avcp-filtro-botao {
  align-items: center;
  background: var(--avarias-cartao);
  border: 1px solid var(--avarias-borda);
  border-radius: 8px;
  cursor: pointer;
  display: flex;
  font-family: inherit;
  gap: 6px;
  min-height: 44px;
  min-width: 0;
  padding: 6px 8px;
}
.avcp-filtro-icone {
  align-items: center;
  color: #46581b;
  display: flex;
  flex: 0 0 auto;
  justify-content: center;
}
.avcp-filtro-icone svg {
  height: 16px;
  width: 16px;
}
.avcp-filtro-textos {
  display: grid;
  flex: 1 1 0%; /* achado do portao `testar-telas-contra-cenarios.mjs`, 19/09/2026, ver o comentario logo abaixo, em .avcp-filtro-rotulo */
  gap: 1px;
  grid-template-columns: minmax(0, 1fr); /* mesmo achado: uma coluna de grid IMPLICITA (sem isto) e "auto", e "auto" RESPEITA o min-content do filho por baixo -- exatamente a mesma armadilha que min-width:0 resolve em flex, so que em grid o alvo certo e o TRACK, nao so o item */
  min-width: 0;
}
/* HISTORICO DESTA REGRA, PORQUE ELA JA MUDOU DE IDEIA DUAS VEZES: a primeira versao (critico de
   contexto limpo, 390px) tentou `white-space: nowrap` + `text-overflow: ellipsis` e viu os quatro
   rotulos cortarem em "Fornecedo...", "Comprado...", "Mais fil..." -- trocou para deixar a pilula
   CRESCER (altura, nunca a palavra) mais `min-width: min-content` para "Fornecedor" nunca partir
   ao meio. Essa segunda versao quebrou no cenario "gigante" do portao
   `testar-telas-contra-cenarios.mjs`: um filtro pode chegar com QUALQUER texto (o cenario testou
   uma razao social inteira, "SUPERMERCADO ... LTDA", uma palavra de ~90px), e sem teto essa UNICA
   palavra empurrava a fileira inteira para fora da tela; um teto em pixel (`min(min-content,
   55px)`) so trocou "estourar a tela" por "partir a palavra no meio" ("Fornece-/dor"), o mesmo
   defeito que a ellipsis original causava, achado pelo portao IRMAO
   `scripts/testar-quebra-de-linha.mjs`.
   A SAIDA, pedida pelo coordenador citando o padrao que as tabelas de Avarias de COMPUTADOR ja
   usam: `overflow-wrap: normal` (nunca parte palavra) + `white-space: nowrap` + `overflow: hidden`
   + `text-overflow: ellipsis` (corta com "..." o que nao couber) + o texto INTEIRO no `title` do
   elemento (JS, `avarias-celular-produto.js`), para quem passa o dedo/mouse por cima continuar
   lendo a palavra completa. "Mais filtros" volta a cortar em "Mais fil..." num filtro real e
   estreito -- o mesmo preco que a primeira versao rejeitou -- mas e o UNICO caminho que nao
   quebra layout (cenario "gigante") NEM parte palavra no meio (portao de quebra de linha) ao
   mesmo tempo; o `title` e o que evita a palavra ficar de fato perdida. */
.avcp-filtro-rotulo {
  color: var(--muted-foreground);
  font-size: 11px;
  font-weight: 600;
  line-height: 1.15;
  overflow: hidden;
  overflow-wrap: normal;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.avcp-filtro-select {
  background: transparent;
  border: 0;
  color: var(--avarias-texto);
  font-family: inherit;
  /* 16px CRAVADO, nunca menos: abaixo disso o Safari do iPhone da zoom sozinho ao focar o campo
     (regra 4 do portao de celular, scripts/testar-mobile.mjs). A ficha mediu ~14px na fotografia,
     mas a fotografia nao roda no dedo de ninguem -- e regra do aparelho, nao do desenho. */
  font-size: 16px;
  font-weight: 700;
  max-width: 100%;
  /* 28px de altura no minimo (r38, 27/09/2026): o piso de clique no computador; tinha 22. E 44 de
     largura: a 360px a coluna do filtro deixava o campo com 40 */
  min-height: 28px;
  min-width: 44px;
  padding: 0;
  width: 100%;
}
.avcp-filtro:focus-within,
.avcp-filtro-botao:focus-visible {
  outline: 2px solid var(--avarias-botao);
  outline-offset: 2px;
}
.avcp-filtro-botao:hover {
  background: var(--avarias-cabecalho-coluna);
}

/* ---------- o alternador Valor (R$) / Volume (kg) ----------
   Pilula de dois segmentos, sem o rotulo "Ordenar por:" que a tela de COMPUTADOR sempre desenha
   antes dela (`.av-ordenar`, avarias.css): a fotografia desta tela nao tem essa palavra, o par de
   botoes comeca direto. Por isso e uma classe nova, e nao `.av-ordenar` reaproveitada. */
.avcp-alternador {
  background: var(--avarias-botao-inativo);
  border-radius: 7px;
  display: grid;
  gap: 4px;
  grid-template-columns: 1fr 1fr;
  padding: 3px;
}
.avcp-alternador button {
  background: transparent;
  border: 0;
  border-radius: 5px;
  /* A FICHA MEDIU #474f35 para o texto inativo, mas so na fotografia (tema claro): cravado, ele
     rende ~1,9:1 de contraste contra o fundo escuro que `--avarias-botao-inativo` vira no tema
     escuro do painel (bem abaixo do 4,5:1 que WCAG pede) -- achado ao abrir o palco no tema escuro
     e olhar o proprio par de botoes, nao suposto. Ao contrario das cores do cabecalho/rodape da
     casca celular (que sao identidade fixa, como o logotipo), o texto de um controle comum de
     interface tem de acompanhar o tema, exatamente como `.av-ordenar button` (avarias.css, o
     mesmo componente na tela de computador) ja faz com `var(--avarias-texto)`. */
  color: var(--avarias-texto);
  cursor: pointer;
  font-family: inherit;
  font-size: clamp(11px, 3.4cqi, 13px);
  font-weight: 700;
  min-height: 44px; /* piso da Apple HIG e do WCAG 2.2 AA para alvo de toque no dedo (fonte completa no comentario de .avc-topo-botao, avarias-celular.css) */
  padding: 6px 4px;
}
/* Cor do segmento ACESO: vermelho no lado debito, verde no lado credito -- medidos separados na
   ficha (Camada 3), e diferentes do verde unico que `.av-ordenar button[aria-pressed="true"]`
   usa para as duas tabelas de computador. Escopado a esta tela para nao repintar aquela. */
.tela-avarias[data-tela="avarias-celular-produto"] .av-painel.debito .avcp-alternador button[aria-pressed="true"] {
  background: #650c0f;
  color: #fff;
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-painel.credito .avcp-alternador button[aria-pressed="true"] {
  background: #273702;
  color: #fff;
}
.avcp-alternador button:focus-visible {
  outline: 2px solid var(--avarias-botao);
  outline-offset: 2px;
}

.avcp-painel-corpo {
  display: grid;
  gap: 8px;
  min-width: 0;
}
.avcp-painel-pe {
  border-top: 1px solid var(--avarias-borda);
  margin-top: 2px;
  padding-top: 8px;
}

/* ---------- o chevron que abre o detalhe de uma linha ----------
   44x44 CRAVADO: a ficha mediu a linha da tabela em ~34px, mas 44x44 e o piso da Apple HIG e do
   WCAG 2.2 AA para alvo de toque (fonte completa no comentario de `.avc-topo-botao`,
   avarias-celular.css; o Android/Material Design pede 48x48, um degrau acima) em qualquer botao no
   dedo, e mede o BOTAO, nunca a linha ao redor. A linha inteira cresce sozinha para caber isto,
   porque a altura de um <tr> e sempre a da celula mais alta -- entao a tela sai um pouco mais alta
   do que os 34px medidos, e essa diferenca e o preco de um alvo que o polegar acerta. */
.avcp-abrir {
  align-items: center;
  background: transparent;
  border: 0;
  border-radius: 6px;
  color: var(--avarias-texto);
  cursor: pointer;
  display: flex;
  height: 44px;
  justify-content: center;
  width: 44px;
}
.avcp-abrir:hover {
  background: var(--avarias-cabecalho-coluna);
}
.avcp-abrir:focus-visible {
  outline: 2px solid var(--avarias-botao);
  outline-offset: 2px;
}
/* A linha "Outros" (sem chevron, ver o comentario em `botaoAbrir`/`agrupador` no JS) leva este
   marcador do MESMO TAMANHO do botao no lugar dele (agora 44px, acompanhando a subida acima), so
   para a linha nao ficar mais baixa que as vizinhas -- nunca clicavel, nunca focavel,
   `aria-hidden`. NAO E `min-height` na celula: essa foi a tentativa ANTERIOR (achada quebrada por
   um critico de contexto limpo, medindo 57px contra 28px de verdade) porque `min-height` nao tem
   efeito nenhum em `display: table-cell` no Chromium -- um marcador de verdade, do tamanho certo,
   resolve pela causa raiz. */
.avcp-abrir-vazio {
  display: inline-block;
  height: 44px;
  /* `vertical-align: middle`, senao sobra ~4px de espaco "fantasma" embaixo dele: e a mesma
     armadilha classica de `inline-block` alinhando pela LINHA DE BASE do texto (que reserva
     espaco para a "perna" de uma letra como "g"), e nao pelo meio da caixa -- o botao de verdade
     nao tem esse problema porque e `display: flex`, que nao participa de linha de base nenhuma. */
  vertical-align: middle;
  width: 44px;
}

/* ---------- o cabecalho do painel de detalhe (voltar + emoji + titulo) ----------
   Terceiro tratamento de icone da mesma tela (Camada 5 da ficha): nem circulo nem quadrado, so o
   emoji cru ao lado do chevron de voltar. 44x44 (piso da Apple HIG e do WCAG 2.2 AA, fonte
   completa no comentario de `.avc-topo-botao`, avarias-celular.css). */
.avcp-voltar {
  align-items: center;
  background: transparent;
  border: 0;
  border-radius: 8px;
  color: var(--avarias-texto);
  cursor: pointer;
  display: flex;
  flex: 0 0 auto;
  height: 44px;
  justify-content: center;
  width: 44px;
}
.avcp-voltar svg {
  height: 16px;
  width: 16px;
}
.avcp-voltar:hover {
  background: var(--avarias-cabecalho-coluna);
}
.avcp-voltar:focus-visible {
  outline: 2px solid var(--avarias-botao);
  outline-offset: 2px;
}
.avcp-detalhe-emoji {
  flex: 0 0 auto;
  font-size: 20px;
  line-height: 1;
}

/* Glifo liso ("%"/"$") das duas operacoes de credito sem produto -- verde escuro, nunca emoji
   colorido (ficha, Camada 3: "nao usam emoji colorido, usam glifo liso verde").

   ELE E A UNICA COR DESTA TELA QUE PRECISA TROCAR COM O TEMA, e o porque vale escrito: o fundo
   dos CARTOES aqui e identidade fixa (rosa e menta nos dois temas, como o cabecalho), entao a
   cor do texto deles e travada de proposito. Este glifo nao mora num cartao: mora numa CELULA DE
   TABELA, e o fundo da tabela e `--avarias-cartao`, que TROCA (branco no claro, `#181e0a` no
   escuro). Verde escuro sobre verde quase preto da 1,46:1, medido pelo portao das cinco telas.
   A fotografia so existe no tema claro, entao o `#303d12` continua sendo o da foto; no escuro o
   glifo assume o mesmo papel com o verde claro que o resto do modulo ja usa naquele tema. */
.avcp-glifo-credito {
  color: #303d12;
  font-weight: 800;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-tema="claro"]) .avcp-glifo-credito {
    color: #aacd5a;
  }
}
:root[data-tema="escuro"] .avcp-glifo-credito {
  color: #aacd5a;
}

/* ---------- a barra atras do valor: proporcional de VERDADE ----------
   ACHADO POR CRITICO DE CONTEXTO LIMPO, medido com `getBoundingClientRect()` no iPhone 17 Pro Max:
   linhas de valor pequeno saiam ate 32,9% MAIS COMPRIDAS do que a fracao mandava (cenoura: fracao
   real 0,1017, barra desenhada em 0,1350 do trilho -- 32,8% de erro). A causa e a regra
   PARTILHADA `.av-celula-barra` (avarias.css), `grid-template-columns: minmax(28px, 1fr) auto`: a
   segunda coluna ("auto") e a largura do PROPRIO TEXTO do numero, entao o TRILHO (primeira coluna)
   sobra menor quando o numero e mais comprido ("R$ 8.750,00", 11 caracteres) e maior quando e mais
   curto ("R$ 890,00", 9 caracteres). `width: fracao%` sobre trilhos de tamanho DIFERENTE deixa de
   significar a mesma coisa em cada linha -- a mesma fracao vira um numero de pixels diferente.
   O CONSERTO, escopado a esta tela (nunca em avarias.css: a regra e usada pela tela de
   COMPUTADOR tambem, que nao e minha nesta rodada): a barra passa a ocupar a CELULA INTEIRA,
   atras do numero -- exatamente como a ficha de extracao descreveu desde o inicio ("barra atras
   do valor, alinhada a direita da CELULA", nao um toco ao lado dela). Sem grid de duas colunas: o
   numero fica em `position: relative` (pinta por cima, na ordem natural do DOM) e a barra em
   `position: absolute`, esticada de ponta a ponta e centralizada na vertical -- assim a largura
   que `barraNaCelula` usa como 100% e SEMPRE a da celula inteira, nunca a de um trilho que muda de
   tamanho com o texto ao lado. */
.tela-avarias[data-tela="avarias-celular-produto"] .av-celula-barra {
  display: block;
  position: relative;
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-celula-barra .barra-celula {
  left: 0;
  position: absolute;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
  width: auto;
  /* O TRILHO (a parte que a barra NAO preenche) e transparente na regra partilhada -- no desenho
     original (so tema claro) isso basta, porque atras dele so ha o branco da pagina. Aqui o
     trilho ganha um cinza bem claro FIXO, e a razao e o proximo comentario, no numero. */
  background: #f0f1ed;
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-celula-barra > span {
  display: block;
  padding-right: 4px;
  position: relative;
  text-align: right;
  /* O NUMERO PRECISA DE UMA COR SO, e ela tem de funcionar em cima de DUAS coisas diferentes: o
     preenchimento colorido (nas linhas de fracao alta, que cobre a celula inteira) e o trilho (nas
     de fracao baixa, onde o preenchimento nao chega). Um texto TEMA-ADAPTAVEL
     (`--avarias-texto-linha`) resolveria so a segunda metade: no tema escuro ele vira quase
     branco, o que fica bem sobre um fundo de linha escuro mas ILEGIVEL sobre o preenchimento rosa/
     menta claro (o mesmo problema ja achado e corrigido no alternador Valor/Volume desta tela).
     A SAIDA, achada por critico de contexto limpo: o trilho (acima) tambem vira um cinza claro
     FIXO, em vez de transparente -- entao a celula inteira (preenchida ou nao) e sempre um fundo
     claro, nos dois temas, e um texto escuro FIXO funciona em cima dela inteira, sem precisar
     saber em qual das duas partes o numero cai. */
  color: #293238;
}

/* ---------- os dois paineis lado a lado ----------
   MEDIDO NO NAVEGADOR, nao chutado (secao 9 do contrato): esta tela e a que tem as colunas mais
   estreitas das cinco, porque cada metade carrega uma tabela de ate 6-7 colunas (a de origem de
   credito: #, Fornecedor, Comprador, Tipo, Volume, Valor, abrir).

   O CABECALHO DO PAINEL (icone + titulo + subtitulo + o alternador Valor/Volume) NUNCA quebra: um
   script proprio (scratchpad/_b32-produto-verificar.mjs, passo 9) estreitou o CONTAINER de 900px
   ate 390px medindo se algum botao do alternador cortava o proprio rotulo (`scrollWidth >
   clientWidth`) ou se o `<h2>` do cabecalho cortava -- as duas coisas ficaram falsas o tempo
   inteiro. Se so isso decidisse, dava para nunca empilhar.

   QUEM DECIDE DE VERDADE E A TABELA, e por um motivo mais fino do que "ela precisa caber": ela tem
   `overflow-x: auto` DE PROPOSITO (secao 4.2 do contrato) e pode rolar, mas ROLAR NAO PODE
   SIGNIFICAR CORTAR UM NUMERO NO MEIO. MEDIDO AO VIVO (scratchpad/_b32-produto-verificar.mjs,
   passo 9, lendo `getBoundingClientRect()` do `<span>` de dinheiro da 1a linha contra a borda da
   caixa que rola, container por container): a 500-540px de largura o valor da tabela de Creditos
   ("R$ 6.320,00") ficava PARCIALMENTE ATRAS da borda da caixa -- a foto mostrava "R$ 6.32" cortado
   no meio do centavo, sem nada avisando que faltava o resto do numero. Pior que uma tabela que
   rola: e o tipo de defeito que so a conta pega, nao a figura (mesma licao da secao 5 do contrato,
   so que aqui e o NUMERO da tabela, nao a barra atras dele). A transicao exata ficou entre 545px
   (cortava 2px) e 550px (nao cortava mais); 560px foi o valor escolhido, com folga confortavel
   acima do ponto medido (a mesma tabela de Debitos ja sobrava 34px de vao a essa largura) -- e por
   coincidencia (nao copia: nunca vi o CSS do computador antes de medir) e o MESMO numero que
   `.av-par`, em avarias.css, usa para o par de paineis da tela de computador, que tem uma pressao
   parecida (duas colunas de tabela/grafico competindo pelo mesmo espaco).
   ACIMA de 560px o par mostra #, Produto e o Valor completo sem rolar (Volume e % do Total
   continuam atras da rolagem da propria caixa, e isso e o comportamento CERTO, nao um defeito -- e
   a mesma tela que a secao 4.2 do contrato descreve). ABAIXO de 560px (todo iPhone testado, 390 a
   440px, cai bem dentro disso) o par empilha e cada tabela ganha a largura inteira da tela, que e
   como as 5-6 colunas cabem sem cortar nenhum numero. */
.avcp-par {
  align-items: start;
  display: grid;
  gap: 10px;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  padding: 0 12px 10px;
}
@container (max-width: 560px) {
  .avcp-par {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ---------- a rolagem de lado nao pode esconder o dinheiro nem o botao ----------
   ACHADO POR CRITICO DE CONTEXTO LIMPO, com regua da MINHA PROPRIA folha (secao 4.2 do contrato:
   "rolar nao pode significar cortar um numero no meio"): eu medi essa regra so nas DUAS TABELAS DE
   RANKING (dai o breakpoint de 560px do `.avcp-par`, acima) e nunca medi nas duas de DETALHE, que
   sao mais largas ainda (Fornecedor e Comprador escrevem nome, nao emoji+produto) -- 469px e 502px
   de largura natural contra 386px de caixa a 390px de tela. No SCROLL PADRAO (sem ninguem tocar),
   isso deixava o valor em reais cortado no meio do centavo ("R$ 2.940,0"), a tabela de credito sem
   coluna de Valor NENHUMA visivel, e o botao de abrir inteiro fora da tela (74,8px e 108px alem da
   borda, medido).

   O CONSERTO NAO E ALARGAR A CAIXA (nao ha largura sobrando num celular de 390px) NEM REORDENAR AS
   COLUNAS (proibido pela mesma secao 4.2). DUAS TENTATIVAS ANTERIORES, DESCARTADAS POR MIM MESMO
   depois de medir cada uma:

   1. Prender Valor+Volume+%+Abrir com `position: sticky` e `width` fixo nos quatro. `width` numa
      celula de tabela com `table-layout: auto` (o padrao, e o que `.av-tabela` tinha) e so um
      PALPITE para o navegador, nao uma ordem -- e a conta dele, tentando caber tudo no
      `width: 100%` da tabela, espremeu Valor para 77px em vez dos 108px pedidos. Como o `right`
      de cada coluna soma LARGURAS QUE EU MANDEI (nao as que o navegador realmente usou), o bloco
      colado saiu desalinhado e cobriu METADE do Comprador e o Volume inteiro, na vista padrao, sem
      rolagem nenhuma que revelasse o que ficou por baixo -- pior que o problema original, porque
      aquele conteudo ficou preso atras de um elemento fixo, nunca alcancavel rolando.
   2. So `scroll-snap` (sem sticky nenhum), a alternativa que o proprio coordenador ja tinha
      oferecido como igualmente valida ("a rolagem tem de parar em limite de coluna"). Ela cumpre
      a PROMESSA (nunca para no meio de uma coluna DEPOIS de um gesto de rolagem), mas nao mexe na
      POSICAO INICIAL, antes de qualquer toque -- e foi ai que continuou reprovando: origem-credito
      a 440px media 5 de 11 caracteres do Valor, porque a posicao 0 (onde a pagina nasce) nao e
      resultado de rolagem nenhuma, entao o navegador nao tem motivo pra "encaixar" nada ali.

   O CONSERTO QUE FICOU, e que passou nas quatro medidas (ver a tabela abaixo): as DUAS COISAS que
   o coordenador pediu para nunca sumirem -- o Valor e o botao "Abrir" -- ficam presas na borda
   direita com `position: sticky`, e SO ELAS DUAS (nunca Volume nem "%": ver por que abaixo). Para
   o `right` de cada uma bater com a largura DE VERDADE, a tabela virou `table-layout: fixed`, que
   faz o navegador OBEDECER a largura que eu escrevo em vez de negociar -- e o total das colunas
   pode passar de 100% da caixa (e passa, de proposito: e o que abre espaco pra rolar). AS
   LARGURAS FORAM MEDIDAS, nao chutadas (medido com `canvas.measureText` no texto mais largo de
   cada coluna, na fonte que a propria tabela usa a 390px, o pior caso: 10px, o piso do `clamp`
   compartilhado). `scroll-snap` fica ligado em TODA coluna, sticky ou nao: para as colunas do meio
   (Volume, "%", Tipo) ele garante que a rolagem nunca solta o dedo com um numero cortado ao meio;
   para o Valor das tabelas de DETALHE (que nao cabe sticky -- ver o comentario mais abaixo, junto
   da regra) ele e a UNICA protecao, entao precisa valer sempre, nao so como reforco. */
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela {
  table-layout: fixed;
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela-caixa {
  scroll-snap-type: x mandatory;
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela th,
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela td {
  scroll-snap-align: start;
}
/* LARGURA DE CADA COLUNA, medida (nao chutada) a 390px, a fonte de 10px que e o piso do `clamp`
   compartilhado -- o pior caso de espaco. Cada numero tem uma folga pequena por cima do texto
   mais largo medido (comentado ao lado). As colunas de nome (Fornecedor, Comprador, o "Produto"
   do ranking) ganham `overflow-wrap: break-word` -- perde-se altura, nunca a palavra, o MESMO
   criterio ja usado no rotulo dos filtros -- porque a largura fixa e mais estreita que o nome mais
   comprido numa linha so ("Sebastião da Manga" precisa de 89px, a coluna tem 70px: quebra em
   duas linhas em vez de cortar ou espremer a fonte). */
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela :is(th, td).avcp-col-num {
  width: 24px; /* "#": ate dois digitos (1 a 11) */
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela :is(th, td).avcp-col-nome {
  overflow-wrap: break-word;
  white-space: normal;
  /* 78px, e o numero subiu em 20/09/2026: os 70px tinham sido medidos contra o DADO, e o titulo
     da coluna e mais largo que ele. "Fornecedor" em negrito pede 77,3px e partia ao meio
     ("Fornece / dor"). A tabela deste modulo rola de proposito (secao 4.2 do contrato): rolar
     mais custa menos que titulo partido. */
  width: 78px;
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela :is(th, td).avcp-col-produto {
  overflow-wrap: break-word;
  white-space: normal;
  width: 92px; /* o mais largo e "% Desconto em NF"/"$ Verba financeira" (glifo + nome do tipo) */
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela :is(th, td).avcp-col-comprador {
  overflow-wrap: break-word;
  white-space: normal;
  /* 78px pelo mesmo motivo da coluna ao lado: os 62px vinham de "Guilherme" (o dado, 61,4px) e
     o TITULO "Comprador", em negrito, pede 77,4px. Medido em 20/09/2026. */
  width: 78px;
}
/* O TITULO DA COLUNA NUNCA PARTE (r128, 09/10/2026): os 78px acima foram medidos no Mac ("Fornecedor" em negrito pede
   77,3px), e a fonte desenhada no Linux sai um pouco mais larga; com 0,7px de folga, "Fornecedor" e "Comprador" partiam
   ao meio em todas as larguras (testar-quebra-de-linha.mjs). O titulo fica numa linha so e a coluna cresce o que ele
   pedir; o nome da pessoa, embaixo, continua quebrando entre palavras. A tabela rola de proposito (secao 4.2). */
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela th:is(.avcp-col-nome, .avcp-col-comprador) {
  white-space: nowrap;
}
/* CORRIGIDO DEPOIS DE UM RECUO MEU: a primeira saida (chip com reticencias) trocou "transborda
   sobre o Volume" por "corta o rotulo" -- e o coordenador apontou, com print e medida, que essa
   troca e a MESMA classe de defeito que o resto do modulo passou a noite consertando: "Descont…"
   e "Verba fin…" nao dizem mais qual e o tipo do lancamento, que e justamente a coluna que
   distingue uma linha da outra nesta tabela. A saida certa e a que o resto do modulo ja usa:
   ROLAR MAIS, nunca cortar rotulo (secao 4.2 do contrato endossa a rolagem de proposito).
   A largura precisa caber o CHIP INTEIRO, e nao so o texto dele: "Desconto em NF" mede 86px de
   CHIP (span com o padding do proprio `.av-chip-tipo`, 9px de cada lado, partilhado -- nao e so o
   texto), e a celula ainda soma o PROPRIO padding por fora (`.av-tabela td`, 8px de cada lado,
   partilhado). 86 + 8 + 8 = 102px e o piso exato para o chip mais largo nao tocar a borda da
   celula; uso 104px, 2px de folga para arredondamento de subpixel entre navegadores. So TRES
   rotulos existem (`catalogo.tiposDeCredito`, fechado), entao esta largura nao fica velha
   sozinha no dia em que um cadastro novo aparecer -- teria de vir com um QUARTO tipo de credito
   no catalogo, o que e mudanca de dado, nao de tela. */
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela :is(th, td).avcp-col-tipo {
  width: 104px; /* medido: chip "Desconto em NF" precisa de 86px + 16px de padding da celula */
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela :is(th, td).avcp-col-volume {
  width: 52px; /* medido: "8.200" precisa de 44px */
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela :is(th, td).avcp-col-pct {
  width: 56px; /* medido: "100,0%" precisa de 50,6px */
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela :is(th, td).avcp-col-valor {
  width: 84px; /* medido: "R$ 8.750,00" precisa de 56px de texto + o padding da celula */
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela :is(th, td).avcp-col-abrir {
  width: 60px; /* o botao de 44px (piso da Apple HIG e do WCAG 2.2 AA, varredura de 19/09/2026) mais 8px de padding de cada lado */
}

/* ABRIR GRUDA NA BORDA DIREITA, EM QUALQUER TABELA: 60px precisa de mais espaco do que os 56px
   antigos (o botao cresceu de 40 para 44px de alvo de toque) -- na tabela mais cheia (origem dos
   creditos: #+Fornecedor+Comprador+Tipo+Volume = 286px de colunas antes dele, 286+60 = 346px),
   isso passa a exceder o piso de ~340px de caixa medido no aparelho mais estreito testado. A
   TABELA JA ROLA DE LADO (`caixaDeTabela`, `overflow-x`), entao esses 6px a mais nao cortam nada:
   viram scroll horizontal em vez de sobreposicao, o mesmo comportamento que qualquer tabela deste
   modulo ja tem quando o conteudo nao cabe. Voltar a medir com `elementsFromPoint` depois desta
   mudanca (bateria `node scripts/testar-colisao.mjs` e `SO_TAM=390 bash scripts/testar-mobile.sh`)
   e o que confirma que nada ficou clicavel por baixo de outra coisa mesmo com a rolagem maior. */
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela td.avcp-col-abrir {
  background: var(--avarias-cartao);
  position: sticky;
  right: 0;
  z-index: 1;
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela th.avcp-col-abrir {
  position: sticky;
  right: 0;
  z-index: 2;
}

/* VALOR TAMBEM GRUDAR, ALEM DO ABRIR, SO CABE NAS TABELAS DE RANKING -- ACHADO POR CRITICO DE
   CONTEXTO LIMPO, com `elementsFromPoint` (a mesma tecnica que o portao de contraste usa): nas
   duas tabelas de RANKING so ha DUAS colunas antes do Valor (# e Produto, 116px), entao
   116+84+56=256px, cabe com folga (~84px sobrando mesmo no aparelho mais estreito). Nas DUAS
   TABELAS DE DETALHE ha tres ou quatro colunas antes dele (Fornecedor e Comprador escrevem nome, a
   de credito ainda tem Tipo): 208px (debito) e 286px (credito) de colunas antes do Valor.
   208+84+56=348px e 286+84+56=426px -- as DUAS estouram os ~340-386px medidos, e a sobreposicao
   e real: medido com `elementsFromPoint` no meio da celula de Volume, o elemento que aparece no
   TOPO da pilha nao e o Volume, e sim o proprio `<td>` do Valor grudado por cima -- o numero de
   Volume fica soterrado, sem jeito de rolar ate ele (um elemento `sticky` nao "solta" o que cobre
   quando se rola, e a posicao de repouso, 0, ja e o minimo). Prender o Valor tambem nas tabelas de
   detalhe trocaria "numero cortado" por "numero inteiro escondido para sempre" -- pior, nao
   melhor. Por isso so os RANKINGS grudam os dois; as de DETALHE grudam so o Abrir, e o Valor
   delas fica protegido pelo `scroll-snap` (abaixo) em vez de por `sticky`. */
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela[data-tabela^="produtos-"] td.avcp-col-valor {
  background: var(--avarias-cartao);
  position: sticky;
  right: 56px; /* a largura de .avcp-col-abrir -- as duas ficam lado a lado, sem vao */
  z-index: 1;
}
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela[data-tabela^="produtos-"] th.avcp-col-valor {
  position: sticky;
  right: 56px;
  z-index: 2;
}
/* NAS TABELAS DE DETALHE, o Valor nao e sticky, mas precisa ACABAR bem colado no Abrir quando a
   rolagem chega no fim -- senao sobra um respiro estranho entre os dois, ou o Valor para
   ligeiramente escondido atras do proprio Abrir. `scroll-padding-right` do tamanho do Abrir avisa
   o `scroll-snap` para tratar a borda direita como se ela ja estivesse 56px mais para dentro,
   entao o ultimo ponto de encaixe antes do fim e exatamente a borda esquerda do Valor -- ele
   chega inteiro, colado no botao, nunca cortado. */
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela-caixa:has(.av-tabela[data-tabela="origem-debito"]),
.tela-avarias[data-tela="avarias-celular-produto"] .av-tabela-caixa:has(.av-tabela[data-tabela="origem-credito"]) {
  scroll-padding-right: 56px;
}

/* ---------- a faixa "Importante" ----------
   Fundo verde bem claro, icone de lampada verde escura, uma frase corrida (Camada 5 da ficha) --
   diferente de `.av-aviso` (herdada): aquela e branca/adaptavel ao tema, com um circulo cinza-
   esverdeado e permite lista com marcadores; esta e sempre clara (identidade da fotografia, mesmo
   raciocinio dos cartoes de KPI) e nunca tem lista, so uma frase. */
.avcp-importante {
  align-items: center;
  background: #eff6e1;
  border-radius: 10px;
  color: #1b230b;
  display: flex;
  gap: 10px;
  margin: 0 12px 10px;
  padding: 12px;
}
.avcp-importante-icone {
  color: #394d09;
  flex: 0 0 auto;
  height: 22px;
  width: 22px;
}
.avcp-importante p {
  font-size: 12.5px;
  line-height: 1.35;
  margin: 0;
}

/* A terceira linha da faixa de titulo (dentro de `.avc-faixa-titulo-texto p`, ver o comentario de
   `faixaTitulo` no arquivo JS): mais apagada que a segunda linha, para ficar subordinada a ela --
   a ficha nao mediu um tom separado para esta frase (so documentou as cores principais da tela),
   entao a escolha aqui e RELATIVA (um pouco menor, um pouco mais transparente), nunca um hexadecimal
   novo inventado como se fosse medido. */
.avcp-faixa-nota {
  display: inline-block;
  font-size: max(11px, 0.86em); /* r38: nunca abaixo do piso de 11px (dava 9,9) */
  margin-top: 1px;
  opacity: 0.8;
}

/* A LINHA "vs. mês anterior" DENTRO DOS CARTOES DO TOPO, e o porque de ela precisar de cor FIXA.
   Achado por medicao no tema escuro, em 19/09/2026: contraste de 1,41:1, ou seja, praticamente
   invisivel (`rgb(185,205,197)` sobre `rgb(251,232,232)`; o minimo do WCAG AA para texto pequeno
   e 4,5:1).
   A causa: `chipDeVariacao()` (grafico.js) poe essa linha em `.chip-base`, esta folha nao tinha
   NENHUMA regra para ela, e entao valia `avarias.css` com `color: var(--avarias-apoio-na-faixa)`,
   que foi escrita para o cartao ESCURO do computador. O fundo dos cartoes desta tela e CLARO FIXO
   nos dois temas (rosa e menta sao identidade, como o cabecalho), entao um token que clareia no
   tema escuro some.
   A tela de Conta Corrente teve o mesmo defeito e o mesmo conserto (avarias-celular-conta-corrente.css,
   `.avcc-kpi .chip-base`). */
.avcp-kpi .chip-base {
  color: #1b230b;
}
/* O NUMERO DO CHIP ("12,3%"/"15,8%") TINHA O MESMO DEFEITO DA LINHA DE APOIO ACIMA, so que a
   causa nao era falta de regra: `avarias.css` ja escreve
   `.chip-variacao.ruim{color:var(--avarias-vermelho)}` / `.bom{color:var(--avarias-verde-alta)}`,
   mas `assets/css/fdv-atacado-pedido.css` (outro modulo, nao meu nesta rodada) declara um
   `.chip-variacao.ruim`/`.bom` PROPRIO, MESMA especificidade (duas classes), carregado DEPOIS --
   e aponta para `--fdv-vermelho`/`--fdv-verde-alta`, que so existem dentro de `.tela-fdv`. Um
   `var()` que nao resolve invalida a declaracao inteira, e `color` cai para o herdado (o texto
   quase-branco do tema escuro do painel) sobre o fundo claro fixo do cartao -- medido pelo portao
   de tema escuro. Escopado por `data-tela` (tres selecionadores) pra vencer a colisao sem mexer
   no arquivo do outro modulo. */
[data-tela="avarias-celular-produto"] .chip-variacao.ruim {
  color: var(--avarias-vermelho-texto);
}
[data-tela="avarias-celular-produto"] .chip-variacao.bom {
  color: var(--avarias-verde-texto);
}

/* r81 (03/10/2026): o escuro sem pastel. Os dois cartoes de numero, o aviso "importante" e o trilho das barras eram
   claros fixos e viravam manchas claras sobre o grafite; no escuro leem os tons de assunto e o grafite do painel.
   No claro nada mudou. */
@media (prefers-color-scheme: dark) {
  :root:not([data-tema="claro"]) .avcp-kpi.debito {
    background: var(--tom-coral-fundo);
  }
  :root:not([data-tema="claro"]) .avcp-kpi.credito {
    background: var(--tom-verde-fundo);
  }
  :root:not([data-tema="claro"]) .avcp-kpi-rotulo,
  :root:not([data-tema="claro"]) .avcp-kpi .chip-base {
    color: var(--muted-foreground);
  }
  :root:not([data-tema="claro"]) .avcp-kpi-valor {
    color: var(--foreground);
  }
  :root:not([data-tema="claro"]) .avcp-importante {
    background: var(--tom-verde-fundo);
    color: var(--foreground);
  }
  :root:not([data-tema="claro"]) .avcp-importante-icone,
  :root:not([data-tema="claro"]) .avcp-filtro-icone {
    color: var(--tom-verde);
  }
}
:root[data-tema="escuro"] .avcp-kpi.debito {
  background: var(--tom-coral-fundo);
}
:root[data-tema="escuro"] .avcp-kpi.credito {
  background: var(--tom-verde-fundo);
}
:root[data-tema="escuro"] .avcp-kpi-rotulo,
:root[data-tema="escuro"] .avcp-kpi .chip-base {
  color: var(--muted-foreground);
}
:root[data-tema="escuro"] .avcp-kpi-valor {
  color: var(--foreground);
}
:root[data-tema="escuro"] .avcp-importante {
  background: var(--tom-verde-fundo);
  color: var(--foreground);
}
:root[data-tema="escuro"] .avcp-importante-icone,
:root[data-tema="escuro"] .avcp-filtro-icone {
  color: var(--tom-verde);
}
