Acessibilidade no Claude Code: o que pedir no prompt e como conferir contraste, foco e leitura de tela

Acessibilidade no Claude Code não vem de brinde: o modelo devolve o que você pediu, e acessibilidade raramente entra sozinha na resposta. A saída é exigir com número no prompt: contraste de texto 4,5:1 (3:1 em texto grande), contraste de componente e anel de foco 3:1, ordem de foco visível e nunca escondida, alvo de toque de 24 por 24 pixels CSS e rótulo, alt e nome acessível em tudo. Depois confira com o Color Picker do Chrome DevTools, o painel Lighthouse, o Show Tabbing Order do Firefox e o leitor de tela NVDA
Fala aí, beleza? A IA te entrega exatamente aquilo que você pediu, nem um item a mais
E acessibilidade quase nunca entra sozinha na resposta
O motivo é meio deprimente: o relatório WebAIM Million 2026 analisou 1 milhão de home pages e achou texto com contraste baixo em 83,9% delas, contra 79,1% em 2025
A média foi de 34 ocorrências distintas de texto com contraste baixo por página, 15% a mais que no ano anterior
Ou seja: o padrão da web já é inacessível, e o modelo aprendeu com esse padrão
Se você usa a IA pra criar telas e protótipos, a conta cai no seu colo
Neste post eu te mostro os cinco pontos que precisam entrar no pedido (com número, não com adjetivo) e como conferir cada um depois, sem depender da palavra da IA 🙂
O que ter em mãos antes de pedir
Nada aqui é pago, e nada precisa de PC da Nasa
- Chrome DevTools: você vai usar o seletor de cor (Color Picker) com a seção Contrast ratio, e o painel Lighthouse pra varredura automática. Detalhe importante: a categoria de acessibilidade do Lighthouse roda sobre o motor axe-core
- Firefox DevTools: o Accessibility Inspector tem a caixa Show Tabbing Order, que desenha na página a ordem em que o teclado vai passar. O recurso está disponível desde o Firefox 84
- NVDA: leitor de tela livre e de código aberto para Windows, criado e mantido pela NV Access desde 2006, com sintetizador de voz embutido e suporte a mais de 55 idiomas
Domine o Claude Code do básico ao avançado
Você vai aprender a criar sistemas completos com Claude Code, sem precisar ser programador. Inscreva-se para ter acesso a um desconto de lançamento e bônus especiais!
E o alvo de referência: a WCAG 2.2, publicada como Recomendação do W3C em 05/10/2023, com atualização publicada em 12/12/2024
As versões 2.0 e 2.1 seguem como Recommendation, mas o próprio W3C recomenda usar a 2.2
Como régua prática, mira no nível AA
Um aviso de escopo antes de seguir: nenhuma dessas ferramentas substitui olhar a tela e usar a tela
Elas te dão evidência, não veredito
Como escrever o pedido: 5 exigências para colar no prompt
A lógica é sempre a mesma: adjetivo o modelo interpreta, número ele cumpre
"Use cores acessíveis" é convite pra improviso
"Texto normal com contraste mínimo de 4,5:1" é especificação
- Contraste de texto: fale o número, não o adjetivo
O critério 1.4.3 no nível AA pede 4,5:1 para texto normal e 3:1 para texto grande
E texto grande tem definição: 18pt ou maior, ou 14pt ou maior se estiver em negrito (negrito aqui é font-weight: 700 ou mais), o que equivale a cerca de 24px e cerca de 18,67px em negrito
Todo texto deve atingir contraste mínimo de 4,5:1 contra o fundo.
Só cai para 3:1 se for texto grande (18pt+, ou 14pt+ em negrito com font-weight 700 ou mais).
Inclua o texto secundário, placeholders e legendas nessa regra.
O erro comum deste passo: aceitar aquele cinza clarinho sobre branco no texto secundário, que "fica elegante" e não passa nem perto
- Contraste de componente e do anel de foco: 3:1
Botão, campo de formulário, ícone informativo e o próprio indicador de foco não são texto, e caem no critério 1.4.11 Non-text Contrast, nível AA
A régua é 3:1 contra as cores adjacentes
Componentes inativos (desabilitados) ficam isentos, beleza?
Bordas de input, ícones informativos, limites de botão e o anel de foco
devem ter no mínimo 3:1 de contraste contra as cores adjacentes (WCAG 1.4.11).
Componentes desabilitados estão isentos.
O erro comum deste passo: pedir só a cor do texto e terminar com uma borda de input praticamente invisível no fundo claro
- Ordem de foco e foco visível
Aqui entram dois critérios novos da 2.2 que quase ninguém pede
O 2.4.11 Focus Not Obscured (Minimum), nível AA, diz que ao receber foco pelo teclado, ao menos parte do componente precisa continuar visível
Traduzindo: barra fixa, banner de cookies e rodapé grudado não podem engolir o elemento focado
A versão AAA (2.4.12) é mais dura ainda: nenhuma parte do indicador de foco pode ficar escondida por conteúdo do autor
E tem o 2.4.13 Focus Appearance, também AAA, que exige contraste suficiente entre o estado com e sem foco e tamanho suficiente do indicador
A ordem de tabulação deve seguir a ordem visual e lógica da tela.
Todo elemento focável precisa de indicador de foco visível (nunca outline: none sem substituto).
O elemento focado não pode ficar totalmente escondido atrás de header fixo, banner ou rodapé fixo.
O erro comum deste passo: o clássico outline: none no CSS pra "limpar o visual", sem nada no lugar
- Alvo de toque: 24 por 24 pixels CSS
O critério 2.5.8 Target Size (Minimum) é novo na WCAG 2.2, nível AA, e pede 24 por 24 pixels CSS, ou espaçamento suficiente em relação aos alvos vizinhos
Se você quiser mirar mais alto, o nível AAA (2.5.5) pede 44 por 44 pixels CSS
Todo alvo clicável ou tocável deve ter no mínimo 24x24 pixels CSS,
ou espaçamento suficiente em relação aos alvos vizinhos (WCAG 2.5.8).
Isso vale para ícones, botões de fechar, paginação e itens de lista com ação.
O erro comum deste passo: o ícone de fechar de 16px no canto do modal, bonito no desktop e impossível no dedo
- Rótulo, alt e nome acessível
Esse é o passo que mais aparece nas estatísticas de falha
No WebAIM Million 2026, alt text ausente apareceu em 53,1% das home pages, rótulo de campo de formulário ausente em 51%, links vazios em 46,3%, botões vazios em 30,6% e idioma do documento ausente em 13,5%
Seis categorias (essas cinco mais o contraste baixo) concentram 96% dos erros detectados
Todo campo precisa de <label> associado (não só placeholder).
Toda imagem informativa precisa de alt descritivo; imagem decorativa vai com alt="".
Todo link e botão precisa de texto acessível, inclusive os que só têm ícone.
Defina o idioma no elemento raiz: <html lang="pt-BR">.
O erro comum deste passo: botão só com ícone SVG e zero nome acessível, que o leitor de tela anuncia como "botão" e ponto
E fecha o prompt com uma exigência que muda tudo: peça pro modelo devolver os valores usados, não só o código
Ao final, liste em tabela: cada par de cores usado e a razão de contraste calculada,
o tamanho em px de cada alvo clicável e onde o foco fica visível.
Assim você tem o que conferir, item por item
| Falha detectada (WebAIM Million 2026) | Home pages afetadas |
|---|---|
| Texto com contraste baixo | 83,9% |
| Alt text ausente | 53,1% |
| Rótulo de campo de formulário ausente | 51% |
| Links vazios | 46,3% |
| Botões vazios | 30,6% |
| Idioma do documento ausente | 13,5% |
Como conferir cada ponto depois, sem acreditar na resposta
A IA vai dizer que aplicou tudo
Muitas vezes aplicou mesmo, e é justamente por isso que vale conhecer os limites do modelo antes de tratar a resposta como laudo
Bora conferir na mão? Cada checagem aqui espelha uma exigência do bloco anterior
- Contraste de texto e de componente, no Chrome DevTools
Clique no elemento, abra o seletor de cor ao lado da declaração de cor e expanda a seção Contrast ratio
Ele mostra o resultado para os níveis AA e AAA, e ainda oferece o botão "Use suggested color" pra aplicar uma cor que passa
O erro comum deste passo: conferir só o título e esquecer do texto secundário, que é onde o cinza claro se esconde
- Varredura geral com o Lighthouse
Abra o DevTools, vá no painel Lighthouse, marque a categoria Accessibility e clique em Generate report
Lembrando: essa categoria roda sobre o axe-core, então é teste automatizado
- Ordem de foco, no Firefox
Abra o Accessibility Inspector do DevTools do Firefox e marque a caixa Show Tabbing Order
Ele sobrepõe na página um número em cada parada de tabulação, na ordem em que o teclado vai percorrer
O erro comum deste passo: achar que o overlay é dinâmico. Ele é um retrato do momento em que a caixa foi marcada: itens que entram na ordem depois (ao abrir um menu ou um modal, por exemplo) só aparecem relançando o Accessibility Inspector
- Foco visível e armadilha de teclado: só Tab e Shift+Tab
Esse teste é o mais barato de todos e o mais ignorado
Larga o mouse e percorre a tela inteira só com Tab e Shift+Tab
Você consegue ver onde está o foco em TODO momento? Consegue sair do modal sem mouse? Algum elemento sumiu atrás do header fixo?
- Leitura de tela com o NVDA
Abra a página com o NVDA rodando e escute
O link anuncia pra onde vai? O botão tem nome ou é só "botão"? O campo diz o que quer?
Se você ouvir "link" seco três vezes seguidas, achou os links vazios
O erro comum de todo este bloco: tratar nota 100 de acessibilidade no Lighthouse como página acessível
Nota 100 significa apenas que a página passou em todas as checagens automatizadas
Armadilha de teclado, alt text com texto realmente significativo e ordem de leitura lógica não entram nessa nota
Quando o pedido genérico falha e o específico salva
Tem situação de vibe coding em que "faça acessível" simplesmente não resolve, porque a decisão que quebra a acessibilidade é uma decisão estética
Se liga em três:
Tela com estado desabilitado e texto secundário em cinza. Sem número no pedido, o modelo escolhe o cinza pela estética, e o texto secundário nasce abaixo de 4,5:1. Aqui o detalhe fino ajuda: componente desabilitado é isento do 3:1, mas texto secundário ativo não é. Se você não separar os dois no prompt, a IA generaliza pro lado errado
Interface com modal ou menu suspenso. A ordem de foco muda depois que o componente abre, e é exatamente o caso que o overlay do Firefox não pega sozinho, porque ele é o retrato do momento. Peça nominalmente: foco vai pro modal ao abrir, volta pro gatilho ao fechar, e não vaza pro conteúdo de trás
Barra de navegação fixa no topo ou banner de consentimento. Tudo funciona no mouse, e aí o usuário tabula até um elemento que fica embaixo da barra. É o 2.4.11 na veia, e é invisível pra quem só testa clicando
E por que essas coisas escapam? Porque teste automatizado não cobre a acessibilidade inteira
Um estudo da Deque com a suíte axe encontrou que, em média, 57% (57,38%) dos problemas foram completamente cobertos por teste automatizado, numa base de mais de 13.000 páginas ou estados de página e quase 300.000 problemas
Ou seja: quase metade só aparece se alguém testar à mão
Próximo passo: transforme isso em instrução fixa
A diferença aqui não está no modelo, está no pedido
Acessibilidade entra quando é exigida com número, e sai calada quando você pede "design bonito e moderno"
Então o próximo passo prático é simples: guarda os cinco pontos como texto padrão do projeto, o mesmo bloco em todo pedido de tela, e para de reescrever isso do zero toda vez
Depois roda a dupla de conferência antes de considerar a tela pronta: Lighthouse pro que é automatizável, Tab e leitor de tela pro resto
Uma última pra deixar registrado: a WCAG 2.2 acrescentou 9 novos critérios de sucesso em relação à 2.1, e vale ler com calma justamente os que tocam foco e alvo de toque, porque são os que mais aparecem em interface gerada por IA
Faça o teste na sua última tela e me conta o que apareceu 😀
até o próximo post!
Perguntas frequentes
Qual é o contraste mínimo que a WCAG 2.2 exige para texto normal e para texto grande?
No nível AA, o critério 1.4.3 pede 4,5:1 para texto normal e 3:1 para texto grande. Texto grande é definido como 18pt ou maior, ou 14pt ou maior em negrito (font-weight 700 ou mais), o que dá cerca de 24px e cerca de 18,67px em negrito. Fora dessa faixa, a régua é sempre 4,5:1.
A IA garante contraste e foco acessíveis sem eu pedir nada específico?
Não. A IA entrega o que foi pedido, e o padrão da web que ela aprendeu já é problemático: o WebAIM Million 2026 achou contraste baixo em 83,9% de 1 milhão de home pages analisadas. Por isso o pedido precisa vir com número (4,5:1, 3:1, 24x24px), não com adjetivo como ‘cores acessíveis’.
Uma nota 100 de acessibilidade no Lighthouse significa que a tela está acessível?
Não, significa só que a página passou em todas as checagens automatizadas, que rodam sobre o motor axe-core. Um estudo da Deque com essa mesma suíte, em base de mais de 13.000 páginas e quase 300.000 problemas, mostrou que em média 57,38% dos problemas são cobertos por teste automatizado. Armadilha de teclado, alt text sem sentido e ordem de leitura ilógica não entram nessa nota.
Qual o tamanho mínimo de um botão ou ícone clicável pela WCAG 2.2?
O critério 2.5.8 Target Size (Minimum), novo na WCAG 2.2 e nível AA, pede 24 por 24 pixels CSS, ou espaçamento suficiente em relação aos alvos vizinhos. Quem quiser mirar mais alto pode seguir o nível AAA (2.5.5), que pede 44 por 44 pixels CSS.
Como testar a leitura de tela de uma interface gerada por IA sem gastar nada?
Dá para usar o NVDA, leitor de tela livre e de código aberto para Windows, criado e mantido pela NV Access desde 2006, com sintetizador de voz embutido e suporte a mais de 55 idiomas. Ele mostra na prática se botão sem nome acessível, imagem sem alt ou campo sem label vão soar como ‘botão’ e ponto para quem depende da leitura de tela.
Dá para ver a ordem de tabulação (foco pelo teclado) direto no navegador, sem instalar extensão?
Sim, no Firefox. O Accessibility Inspector do DevTools tem a caixa ‘Show Tabbing Order’, disponível desde o Firefox 84, que sobrepõe um número em cada parada de tabulação na ordem em que o teclado vai percorrer. Só um cuidado: esse overlay é um retrato do momento em que foi marcado, então itens que só aparecem depois, como os de um menu ou modal, exigem relançar o inspector.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
As diferenças de var, let e const
Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação A popularidade da automação de processos com o n8n está em alta, principalmente […]
