Ir ao conteúdo
SEED engenharia

Componentes

94. Mensageria de atendimento

estávelseed-componentes.md v2.00 · §94seção 179 de 18494-mensageria-de-atendimento-estavel-decidida-em-9.md · MD5 1486610a

Título completo no canon: Mensageria de atendimento — estável (decidida em 9 de 10 perguntas em 2026-10-10; a Q10, veto geral, ficou sem observação de veto na folha de 2026-10-10 gravada às 11:22Z; marcador da sessão, exposto a veto, MANIFESTO §302) · MS1–MS40 · irmã do §55 (chat com assistente) · pedidos PC-2026-0007 (LC-15, LC-16), PC-2026-0010 (LC-19) e PC-2026-0017 · tela de referência tela-mensageria.html e instrumento suite-mensageria.mjs (ver 94.12)

Contexto para leitor novo. O DS tem um chat com assistente (§55, CH1–CH14). O SEED Chat é outra coisa: uma conversa entre pessoas, com lista de conversas e atendente. O decisor mandou o DS seguir o produto, e não o contrário (MANIFESTO §241, verbatim: "quando formos construir algum chat para o ERP, vamos usar o SEED Chat como modelo, não o contrario."). Esta seção nasceu do estudo G9-11 (2026-09-24, base 767babd), arquivado em 09-pesquisa/2026-09-24-grupo-9/lc-chat/ (proposta PROPOSTA-CANON.md, prancha prancha.html, fontes datadas em PESQUISA.md, pares de contraste em pares-medidos.md, relatório relatorios/G9-11-RELATORIO.md). Prefixo MS (medido em 2026-10-10: 0 ocorrências de **MS<n>** no seed-componentes.md antes desta seção). Siglas: LC linha de lacuna de cobertura do roadmap · PC pedido de cobertura · CH decisões do §55 · MA do §93 (material) · SH do §46 (shell) · CP do seed-composicao.md · SC critério de sucesso do WCAG · AX árvore de acessibilidade · RC régua de contraste por pixel (§93).

Veredito dele, verbatim (colado no chat em 2026-10-10 ~01:47Z, sobre a prancha de 2026-09-24): "Q1 a, Q2 c, Q3 b, Q4 a, Q5 a, Q6 a, Q7 a, Q8 a, Q9 a, Q10 sem resposta". O que cada letra significa está na prancha-fonte.html da pasta do estudo (linhas 233–355); a tabela abaixo as traduz.

Q pergunta opção dele o que ela diz
Q1 o princípio entra como primeira regra a sim, com o limite: anatomia do WhatsApp, aparência do DS, acessibilidade vence
Q2 painel lateral direito c fixo em janela larga (≥ 1560 px), sobrepõe abaixo disso
Q3 lista de conversas b opaca, pelo MA3
Q4 cabeçalho da conversa a vidro (barra superior do MA1)
Q5 tique de "lida" a só muda a cor (como o WhatsApp e o SEED Chat)
Q6 o que separa o balão do papel a sombra
Q7 divisor de data a pílula
Q8 transcrição do áudio a sempre visível sob o áudio
Q9 marca de posição do áudio a pino redondo na posição
Q10 veto geral — sem resposta

Q10: sem veto (folha de 2026-10-10, gravada às 11:22Z, MANIFESTO §302). Tudo o que a prancha mostrou sem pergunta própria (item da lista, cabeçalho, mídia, composer com sugestão da IA, celular) entrou aqui como proposta exposta ao veto geral; cada regra nessa situação leva a marca (veto geral · Q10 sem veto). A folha dele não trouxe observação de veto sobre a Q10: as regras marcadas ficam como decisão da sessão, expostas a veto, e o título da seção passou a estável (o mesmo marcador do §95).

94.1 Princípio e fronteira#

# Decisão Porquê Descartado
MS1 (Q1 a) Anatomia e interação seguem o WhatsApp; a aparência é do DS; a acessibilidade vence onde os dois divergem. Onde fica cada coisa, o que cada gesto faz e a ordem das informações vêm do WhatsApp; cor, fonte, raio, sombra, material e ícone vêm dos tokens. Nunca o logotipo, o verde de identidade nem o papel de parede do WhatsApp Regra do decisor para o chat (PC-2026-0017, verbatim: "a regra principal do chat é que seu layout deve parecer o maximo com o whatsapp, pois o proposito é evitar atrito com o usuário"); a página de marca da Meta regula nome e logotipo, não a anatomia copiar a aparência (fere a marca SEED e a da Meta) · ignorar o WhatsApp (custo de aprender para quem já opera o WhatsApp todo dia)
MS2 (veto geral · Q10 sem veto) O DS dá a FORMA; o produto dá o conteúdo. Abas do painel, ações do ERP, regras de fila e atribuição e o que a IA diz são do produto. O §55 continua valendo aqui no que cobre: CH4 (histórico role="log"), CH5, CH6, CH7 (estendido pela MS14), CH8, CH9, CH11 (com a exceção do celular, MS34) e CH13 Mesma divisão da triagem (MANIFESTO §235.1: "o conteúdo das abas Cliente/Ações/Íris fica fora do DS como decisão de produto") seção nova que repete o §55 (duas verdades)

94.2 A forma TELA#

# Decisão Porquê Descartado
MS3 (veto geral · Q10 sem veto) Três lugares, sempre nos mesmos lugares: rail (§46) · lista de conversas (padrão 30 % da largura útil, redimensionável entre 22 % e 45 %, recolhível) · conversa com o resto. A conversa é a protagonista WhatsApp Web e SEED Chat (Conversas.tsx:175-199) três colunas sempre abertas (a conversa caía a 44 % da tela)
MS4 (veto geral · Q10 sem veto) Uma casca, uma peça: o rail flutua sobre o canvas; lista e conversa vivem na MESMA peça de conteúdo (CP1/CP17), separadas por borda SEED Chat (CHAT-054) e o gate de 2026-08-15 do DS lista e conversa como peças soltas sem motivo de material
MS5 (Q2 c) Painel lateral direito do contato: fechado por padrão; abre pelo ⓘ do cabeçalho (aria-pressed); 420 px; abas (§34) com a aba sem conteúdo desabilitada e o motivo no título; recolhe por » (CH2), nunca ×; fechado = inert. Comportamento: FIXO quando a janela tem ≥ 1560 px (a conversa mantém ≈ 640 px) e SOBREPOSTO abaixo disso; o limiar é por largura do contêiner (CP27), não por media query de janela. Supersede de 2026-10-18 (folha 11, SH62b = a; aplicado na leva 45): o comportamento é a regra do §31.4 — empurra a conversa enquanto ela fica ≥ 640 px e sobrepõe abaixo disso (medido em 2026-10-24: a 1700 px empurra; a 1440 e a 1100 px a conversa de 927 e 689 px não encolhe e o painel sobrepõe); e, quando cobre, nasce abaixo do cabeçalho da conversa (64 px), com o ⓘ ligado visível e clicável (SH60 = a, PL9; antes o ⓘ ficava sob o painel nas 3 larguras medidas). Fronteira com o §55: o CH3 ("o painel sobrepõe, não empurra") vale para a forma PAINEL do chat com assistente (peça lateral sobre a tela viva); o painel de contato desta regra é parte da forma TELA e, em janela larga, encolhe a conversa de propósito (histórico) — desde a folha 11 (SH62b = a, SH62d = b) não há mais fronteira de comportamento: o painel do assistente (CH3) e o painel do contato seguem a MESMA regra do §31.4; a diferença entre as duas formas fica na peça (PAINEL sobre a tela viva × TELA de atendimento) Pedido do decisor ("uma tela sobreposta ou fixa abra na lateral direita", §235.1); Zendesk; WhatsApp Web encolhe a conversa; a conta da largura está na prancha sempre sobreposto (Q2 a — esconde a conversa em tela larga sem necessidade) · sempre fixo (Q2 b — a conversa fica com ≈ 500 px numa tela de 1440)

94.3 O item da lista de conversas#

# Decisão Porquê Descartado
MS6 (veto geral · Q10 sem veto) Anatomia: 76 px; avatar 40 px neutro (§32 AV2/AV3); linha 1 = nome (titulo-secao 16 px, peso 500) + hora (12 px mono: HH:mm hoje, "ontem", dia da semana na semana, dd/MM antes); linha 2 = prévia (14 px, 400) com o tique quando a última mensagem é nossa e ícone + rótulo quando é mídia ("Áudio · 0:13") + estado à direita (fila · encerrada · atendente) + contagem de não lidas WhatsApp Web 76 px (avatar 48); SEED Chat ItemDaLista.tsx:74-158 avatar 48 (não é degrau do §32) · item de 96 px (2,5 conversas numa tela de 674 px)
MS7 (veto geral · Q10 sem veto) Não lida por PESO + contagem + cor da hora, nunca só cor (nome 600, prévia 500, hora text-brand-strong 700, contagem em pílula action-primary de 20 px, "99+" acima de 99) §28 LS5 só cor da hora (reprova a SC 1.4.1)
MS8 (veto geral · Q10 sem veto) Selecionado: surface-subtle + barra de 3 px em text-brand + aria-current surface-subtle mede 1,11 contra o branco e some no cinza (medição do produto, 2026-09-24); a barra é a do SH5, por analogia só o fundo
MS9 (veto geral · Q10 sem veto) O item é alvo acessível (Enter e Espaço abrem) e tem menu de contexto (§35) SEED Chat ItemDaLista.tsx:67-72 div clicável sem teclado

94.4 O cabeçalho da conversa#

# Decisão Porquê Descartado
MS10 (veto geral · Q10 sem veto) 64 px: [← no celular] · avatar 40 · nome (16 px, 500) · subtítulo de 12 px (código humano · telefone · número · "atendida por …") · ações como ícones de 40 px com aria-label (assumir ou atribuir, analisar, ⓘ, ⋮, fechar a conversa). No celular só ⓘ e ⋮; o resto vai para o menu WhatsApp 64 px; SEED Chat CabecalhoDaConversa.tsx:81-157; a 390 px cinco botões espremem o contexto 125 px com ações em botões de texto

94.5 O fio#

# Decisão Porquê Descartado
MS11 (veto geral · Q10 sem veto) Papel de parede = surface-subtle liso — sem rabiscos de terceiro Canvas do CP1; o papel do WhatsApp não se copia (MS1) rabiscos do WhatsApp · grafismo da marca (não pedido; exigiria o gerador gen-detalhe.py)
MS12 (Q6 a) Balão: enviado surface-brand-subtle, recebido surface-raised, os dois com text-primary 14 px / 1,5 / 400; raio radius-4 com o canto do autor em radius-1 no primeiro do grupo; largura máxima 60 % (janela larga) · 70 % (média) · 85 % (estreita). O que separa o balão do papel é a SOMBRA (--seed-shadow-raised), como o WhatsApp e o SEED Chat (BalaoDeMensagem.tsx:347-357) §55.5; medido: balão × papel = 1,01 (enviado) e 1,09 (recebido) no claro — a cor não separa, e o anel (alternativa) mede 1,21 no recebido (pares-medidos.md) anel, nunca sombra (Q6 b — o texto do seed-composicao.md até aqui) · balão turquesa cheio com texto branco (vira o elemento mais saturado da tela)
MS13 (veto geral · Q10 sem veto) Agrupamento: mensagens seguidas do mesmo autor a 2 px; troca de autor a sp-2; o nome de quem enviou (11 px, 600) só no primeiro balão do grupo — e o autor e a hora no texto acessível de TODOS (CH6). Nota: 2 px não tem token de espaço (--seed-sp-* começa em 4 px, com sp-1-5 = 6 px) — ver 94.13 SEED Chat; CH6 sp-2/sp-4 do seed-composicao (espaça o dobro do WhatsApp)
MS14 (Q5 a, cor trocada para azul em 2026-10-10; o azul feedback-info-text CONFIRMADO por ele na folha 3, G5 = ok, gravada 2026-10-10 14:45:59Z) Meta no balão, canto inferior direito: [Editada] · hora (11 px mono, text-muted) · estado. Estado = CH7 estendido: enviando (relógio) · enviada (um tique) · entregue (dois tiques) · lida (dois tiques em AZUL: feedback-info-text; a forma é a mesma do entregue) · falhou (alerta + "Tentar de novo", exceto quando o motivo é permanente: sem a ação e com o texto do que fazer, CH7); dois rótulos de falha (folha de 2026-10-10, PC-2026-0044-ROTULOS = b): "Não enviada" (não saiu do nosso lado) e "Não entregue" (saiu, mas não chegou ao cliente), cada um com a microcópia por código de erro (MC3, MC9, MC10, MC12); "Não entregue" só existe quando o retorno de entrega da Meta chega ao produto [não conferido]; rótulo em title e em texto só para leitor de tela. Observação dele sobre a Q5, verbatim (folha de 2026-10-10, gravada às 11:22Z): "as mensagens lidas devem ser representadas igual o whatsapp, mude os 2 traços para a cor azul (escolha o tom de azul melhor na nossa DS)". Escolha da sessão, confirmada por ele (folha 3, G5 = ok): o azul é feedback-info-text (azul-700 #006783 no claro, azul-200 #96E0FD no escuro) — a família de INFO é o único papel de azul na interface (seed-tokens.json, azul-300 "familia de INFO"). A conta (razão de contraste WCAG, medida em 2026-10-10 por script sobre os valores do seed-tokens.css v1.35): contra o balão enviado (surface-brand-subtle #E8FBF7 / #1A3833) e o recebido (surface-raised #FFFFFF / #1D272D): claro 5,99 e 6,43; escuro 8,67 e 10,42 — os quatro passam o 3,0 do SC 1.4.11 (ícone) e até o 4,5 de texto. O "entregue" (text-muted) mede 5,23 e 5,61 no claro, 5,66 e 6,80 no escuro. Candidatos medidos e descartados: feedback-info-solid (azul-500 #0099C1 / azul-300 #53C2E9) mede 3,09 e 3,32 no claro (passa o 3,0 por 0,09, margem fina); azul-400 #01B3E0 mede 2,30 e 2,46 no claro (reprova); text-brand (o verde do tique anterior) 4,28 e 4,60. Exceção "só cor" — estreitou, NÃO sumiu: a luminância relativa do tique lida × entregue é 0,113 × 0,137 no claro (razão 1,15:1) e 0,669 × 0,419 no escuro (1,50:1) — em escala de cinza o par continua quase igual no claro. O que mudou é que a diferença deixou de ser só de luminosidade e passou a ser de MATIZ (cinza-turquesa × azul, a distância de matiz que o DS tem), como no WhatsApp. Por isso a SC 1.4.1 segue atendida por outro meio para esse par: nome acessível distinto ("Lida" × "Entregue") e title; a distinção visual em escala de cinza [não conferido] em tela real (a conta é de luminância, não de captura). Nenhum azul do DS separa os dois em cinza e passa o 3,0 nos quatro fundos com folga; a opção que separaria mais no claro é feedback-info-solid (razão 1,69:1, margem fina) e exigiria um token semântico novo por tema (claro azul-500, escuro azul-200), que não existe e NÃO foi criado. Medido (antes, text-brand): 5,23 (entregue) × 4,28 (lida) no claro, 5,66 × 6,92 no escuro WhatsApp; SC 1.4.1; pares-medidos.md tique lida em text-brand (verde, a escolha Q5 a, trocada por pedido dele em 2026-10-10) · cor + forma, os dois tiques com pastilha cheia (Q5 b — custo: uma classe no SEED Chat; guardado como caminho de volta se a exceção incomodar)
MS15 (Q7 a) Divisor de data = PÍLULA de 24 px (radius-3, surface-raised, 12 px text-muted), como o produto e o WhatsApp. Rótulos "hoje", "ontem", dia da semana, data. Divisor de não lidas ("N mensagens não lidas") em faixa de largura inteira PainelDeMensagens.tsx:251-252; contraste do rótulo 5,16 claro · 7,63 escuro trilha horizontal com rótulo centrado (Q7 b — o texto do seed-composicao.md até aqui)
MS16 (veto geral · Q10 sem veto) Ações por mensagem no sobrevoo e no foco: reagir · editar (só texto nosso, até 15 min) · responder — botões redondos de 32 px (≥ 24 px, SC 2.5.8) do lado de fora do balão SEED Chat BalaoDeMensagem.tsx:316-345 ações só no clique direito (invisíveis para teclado)
MS17 (veto geral · Q10 sem veto) Reação: pílula abaixo do balão, emoji + contagem quando > 1 WhatsApp; SEED Chat :114-133 —
MS18 (veto geral · Q10 sem veto) Resposta citada: dentro do balão, faixa de 3 px em text-brand + autor + até 2 linhas do trecho WhatsApp; MensagemCitada.tsx —
MS19 (veto geral · Q10 sem veto) Apagada: texto em itálico text-muted com ícone do DS (não emoji); editada: "Editada" na meta abre o histórico WhatsApp; SEED Chat mostra 🚫 (ajuste: ícone do set, §45) esconder o balão apagado (perde o rastro)
MS20 (veto geral · Q10 sem veto) Voltar ao fim: botão flutuante de 40 px no canto inferior direito do fio, com a contagem de novas SEED Chat PainelDeMensagens.tsx:287-291 —

94.6 Mídia na conversa (LC-16 — revisão do CH14)#

# Decisão Porquê Descartado
MS21 (veto geral · Q10 sem veto) Imagem: miniatura até min(20rem, 100%), radius-3, carga preguiçosa; abre no visualizador ÚNICO do fio; texto alternativo "Imagem enviada/recebida"; legenda abaixo SEED Chat (B4, B17, CHAT-051) um visualizador por balão · largura fixa em px (vazava em tela estreita, CHAT-051)
MS22 (veto geral · Q10 sem veto) Álbum: grade 2 × 2, "+N" na quarta, rótulo "Álbum com N fotos" PC-2026-0017 (sem canon no produto) — proposta uma imagem por balão
MS23 (veto geral · Q10 sem veto) Vídeo: player nativo com controles, preload="metadata", até min(20rem, 100%); duração em etiqueta sobre a miniatura SEED Chat autoplay
MS24 (veto geral · Q10 sem veto) Documento: cartão de 256 px (ícone em círculo surface-brand-subtle, nome truncado, extensão); PDF abre a pré-visualização no visualizador único do fio; os demais em nova guia; nunca visualizador de terceiro CHAT-052 (dado do cliente não sai sem autorização) Google Docs Viewer e afins
MS25 (veto geral · Q10 sem veto) Localização e contato: o mesmo cartão; localização abre o mapa em nova guia SEED Chat :239-282 mapa embutido (custo e rastreio de terceiro)
MS26 (veto geral · Q10 sem veto) Figurinha: imagem de até 150 px sem balão, meta fora WhatsApp; SEED Chat :162-167 figurinha dentro de balão
MS27 (veto geral · Q10 sem veto) Prévia de link: cartão acima do texto (ordem do WhatsApp) CHAT-053 —
MS28 (veto geral · Q10 sem veto) Menu de opções de fornecedor (lista e botões do WhatsApp Business) mostrado como lista numerada de verdade (<ol>) PC-2026-0017 texto corrido com números digitados
MS29 (veto geral · Q10 sem veto) Grupo: autor acima de cada balão recebido (11 px, 600, text-secondary) — proposta para o piloto de grupos do produto PC-2026-0017 cor por autor (exige paleta categórica sem canon aqui)
MS30 (veto geral · Q10 sem veto) Mídia que ainda não chegou é estado declarado ("carregando…" ou "indisponível"), nunca balão vazio Achado da rodada: o SEED Chat devolve null para documento sem URL (BalaoDeMensagem.tsx:203) balão vazio silencioso

94.7 Áudio#

# Decisão Porquê Descartado
MS31 (veto geral · Q10 sem veto) Player próprio: play/pausa de 36 px (action-primary, rótulo "Ouvir áudio"/"Pausar áudio"); forma de onda medida do arquivo — se não der para medir, barra lisa com o motivo no título, nunca onda inventada; posição como role="slider" com setas de 5 %; tempo em 11 px mono; velocidade 1x → 1,5x → 2x num botão de 28 px com rótulo; avatar de quem enviou com microfone; o arquivo só baixa quando o balão entra na tela SEED Chat PlayerDeAudio.tsx (V-CHAT-23, pedido de velocidade de 2026-09-15) player nativo do navegador (muda por navegador, sem velocidade)
MS32 (Q9 a) Marca de posição = PINO redondo de 12 px em action-primary na posição, com anel da cor do balão. O estado (tocado × não tocado) deixa de depender do par de cores das barras SC 1.4.11; medido: tocada × não tocada 3,09 claro · 3,58 escuro (passa por 0,09 no claro); não tocada × balão recebido 1,49; pino × balão 4,60 claro · 8,31 escuro só a cor das barras (Q9 b — produto até aqui)
MS33 (Q8 a) Transcrição SEMPRE VISÍVEL sob o áudio: texto gravado, rotulado "Transcrição automática", em text-secondary (7,75 claro · 8,11 escuro); falhou → "Transcrição indisponível"; vazia = áudio sem fala. O atendente lê sem clicar SC 1.2.1 aceita as duas formas; o produto mostra sempre recolhida atrás de "Ver transcrição" (Q8 b — como o WhatsApp; custo: um botão e um estado) · nenhuma alternativa em texto (reprova a SC 1.2.1)

94.8 A caixa de escrever na mensageria#

# Decisão Porquê Descartado
MS34 (veto geral · Q10 sem veto) Composer = CH8 (contêiner radius-6, foco no contêiner) na ordem do WhatsApp: emoji · anexo · [IA] · campo · microfone que vira enviar quando há texto (redondo, 40 px, em metal — MA2). Desktop: Enter envia, Shift+Enter quebra (CH11); celular: Enter quebra e só o botão envia — exceção ao CH11, porque o teclado virtual não tem Shift+Enter veredito do SEED Chat (Q6a, 2026-09-14); CampoDeMensagem.tsx:58-225 Enter enviando no celular
MS35 (veto geral · Q10 sem veto) Sugestão da IA inline: linha DENTRO do contêiner, acima do campo (CH13, forma linha), rótulo "Sugestões da IA" e chips; o que a IA sugere só o atendente vê modo "sussurro" do estudo E1; SugestoesDaIA.tsx bloco de três cartões acima do composer
MS36 (veto geral · Q10 sem veto) Respostas rápidas por "/": a lista é sugestão; Enter continua enviando o que foi digitado CampoDeMensagem.tsx:104 "/" que bloqueia o envio

94.9 No celular#

# Decisão Porquê Descartado
MS37 (veto geral · Q10 sem veto) Pilha: lista → conversa (← volta) → painel em folha de tela inteira (← volta, porque é voltar e não descartar). A barra de abas do aplicativo é a do §95 SEED Chat Conversas.tsx:127-148, PainelDaConversa.tsx:47-58 painel sobreposto parcial a 390 px

94.10 Material da forma TELA (LC-19)#

# Decisão Porquê Descartado
MS38 (veto geral · Q10 sem veto) Rail em metal, botão de enviar em metal, casca com luz (uma por tela), fio, diálogos e menus opacos — como o §93 já manda e o SEED Chat aplicou CHAT-074 (itens expostos a veto, sem veto); MA2, MA3, MA4 —
MS39 (Q3 b) A lista de conversas é OPACA, pelo MA3 (lista densa fica opaca) Medido: sem vão, o vidro da lista muda de forma visível só 0,29 % dos pixels no claro e 1,45 % no escuro — é marcação de papel, não efeito vidro sem vão, como o SEED Chat hoje (Q3 a) · vidro como peça própria, com vão sobre o canvas com luz (Q3 c — custo: mudança de layout no SEED Chat)
MS40 (Q4 a) O cabeçalho da conversa é de VIDRO (barra superior do MA1), como o SEED Chat. O vidro só se vê quando o fio rola por baixo dele (medido: 6,79 % dos pixels no claro e 8,40 % no escuro mudam de forma visível nessa condição); sem o fio por baixo ele é marcação de papel, como a lista da MS39 era MA1 opaco (Q4 b)

94.11 Números medidos (com a origem)#

o quê número origem
item da lista 76 px SEED Chat · WhatsApp Web
avatar do item e do cabeçalho 40 px §32 AV3
cabeçalho da conversa · da lista · do painel 64 px SEED Chat · WhatsApp Web
painel lateral 420 px §55.5 · SEED Chat
limiar fixo × sobreposto do painel 1560 px (histórico) — desde a leva 45 não há limiar fixo: piso da conversa 640 px (--seed-side-panel-content-min) pela regra do §31.4 Q2 c (prancha); supersede SH62b = a (folha 11)
busca 40 px, pílula SEED Chat · WhatsApp Web
divisor de data 24 px SEED Chat · WhatsApp Web
largura máxima do balão 60 / 70 / 85 % SEED Chat (WhatsApp Web: 56 %)
play do áudio · velocidade · ação por mensagem 36 · 28 · 32 px SEED Chat
pior pixel de texto na prancha 4,60 claro · 5,33 escuro régua RC, 2026-09-24 12:59 UTC
pares normativos de contraste que passam 14 de 18 pares-medidos.md — os 4 que reprovam são as barras do áudio SEM o pino (onda não tocada em border-default/border-strong sobre o balão); o pino (MS32) é o mecanismo que resolve

94.12 Testes (nascem com a seção)#

  1. Estados de envio — cinco estados, cada um com nome acessível distinto; "lida" difere de "entregue" por MATIZ (azul × cinza-turquesa, MS14), com luminância quase igual no claro — o teste confere o nome acessível e o contraste do azul (≥ 3,0 nos quatro fundos), não a escala de cinza.
  2. Não lida difere de lida em escala de cinza (peso + contagem).
  3. Histórico é role="log", aria-atomic="false", sem aria-live explícito (CH4); campo com aria-controls.
  4. Cada balão tem autor e hora no texto acessível, também os agrupados (CH6).
  5. Painel fechado é inert e fora da ordem de Tab; recolher por » no desktop e ← no celular; fixo a ≥ 1560 px e sobreposto abaixo (histórico) — empurra a conversa enquanto ela fica ≥ 640 px e sobrepõe abaixo disso, nascendo abaixo do cabeçalho (MS5 e §31.4, leva 45).
  6. Áudio: slider responde às setas; sem onda medida, barra lisa com motivo (nunca onda inventada); pino presente; transcrição presente no DOM e visível (MS33).
  7. Alvos das ações por mensagem, velocidade e play ≥ 24 × 24 px (SC 2.5.8).
  8. Régua RC nos dois temas na tela de referência da forma TELA, com o tema no <html>.
  9. Mídia sem URL mostra estado declarado (MS30).

Estes testes têm instrumento: 06-validacao/suites/suite-mensageria.mjs (T1–T9 e F1–F6, 29 de 29 na tela de referência; o teste 8 é a guarda-material.py). O que a prancha mediu segue em 94.11.

94.13 O que falta ao DS para esta seção ter instrumento (pendências a nascer, sem código)#

  • Token de 2 px de espaço (o ritmo do agrupamento, MS13): o SEED Chat usa mt-0.5 do Tailwind, sem token; a prancha usou 2 px literal.
  • Derivados de material não refazem em tema por contêiner: --seed-mat-glass é declarado só no :root (10-publicacao/r/seed-tokens.css, medido em 2026-09-24 na linha 914); num contêiner com data-theme="dark" o vidro continua claro. A tela de referência da forma TELA tem de pôr o tema no <html>.
  • Tela de referência da forma TELA (tela-mensageria.html ou variante do gen-tela-chat.py) com gerador — é onde a régua RC e os testes 94.12 passam a morar. Cumprido na leva 36: nasceu tela-mensageria.html (gerador gen-tela-mensageria.py), variante própria; a tela-chat (forma PAINEL, §55) segue intocada.

94.14 O que a seção NÃO cobre, e o que ela muda em outros textos#

nao_cobre: menção a pessoa (@), thread, a gravação do áudio no composer (o GravadorDeAudio.tsx do produto não foi lido no estudo — [não conferido]), chamada de voz e vídeo, enquete, pagamento, catálogo, status; o conteúdo das abas do painel.

Supersede parcial do CH14 (§55.1). O CH14 dizia: anexo, gravação de áudio, menção a pessoa, thread e reação "não entram nesta versão". A partir desta seção: anexo (mídia), áudio (player e transcrição) e reação passam à §94 (MS17, MS21–MS33); menção, thread e gravação de áudio continuam fora. Motivo: o "caso real" que o CH14 esperava existe — o SEED Chat em produção.

Supersedes pedidos ao seed-composicao.md (linha "Chat / mensageria"; o texto daquele arquivo foi editado na leva 36 (LC-37) e já segue esta tabela):

ponto hoje no seed-composicao.md passa a
raio do balão radius-lg na mensagem radius-4, com o canto do autor em radius-1 — contradição interna medida: o §55.5 mediu 8 px (radius-4); radius-lg = radius-6 = 12 px
separação do balão (Q6 a) "mensagem alheia: surface-raised com anel — nunca sombra" sombra (--seed-shadow-raised), MS12
agrupador por dia (Q7 a) "TRILHA horizontal com rótulo centrado" pílula, MS15
ritmo sp-2 entre mensagens do mesmo autor · sp-4 entre blocos 2 px · sp-2, MS13 (falta o token de 2 px)
Esc