Descrição da imagem: O martelo do juiz sobre uma secretária, com pessoas ao fundo, durante um processo judicial.
O que é alvo de queixas: um guia prático sobre os padrões de interface do utilizador subjacentes a 6 666 queixas de acessibilidade
O que é alvo de queixas: um guia prático sobre os padrões de interface do utilizador subjacentes a 6 666 queixas de acessibilidade
As queixas federais relativas à acessibilidade ao abrigo da Lei dos Americanos com Deficiência raramente alegam falhas inéditas. Alegam sempre as mesmas dezanove questões, repetidamente, com uma formulação praticamente idêntica. Trata-se de um catálogo, ponto por ponto, dos elementos da página, erros de código e escolhas de design que surgem com maior frequência — cada um deles baseado em citações textuais extraídas dos documentos das queixas subjacentes.
A parte anterior desta série analisou os litígios de uma perspetiva global: 8 788 processos federais nos EUA, quem os instaura, o grau de concentração dos advogados dos queixosos e a rapidez com que os processos são resolvidos. Essa visão é útil para as equipas jurídicas e financeiras. É menos útil para o programador, o designer ou o gestor de produto que tem de lançar a correção na segunda-feira de manhã.
Este guia adota uma perspetiva oposta. Parte da página e avança para o exterior. Cada entrada abaixo é um padrão específico de interface do utilizador — por vezes um único elemento, por vezes um fluxo — que um utilizador de leitor de ecrã, utilizador de teclado ou utilizador com baixa visão encontrou, não conseguiu utilizar e que acabou por fazer parte de um processo judicial federal. Para cada um, mostramos o que os queixosos escreveram efetivamente na queixa, com que frequência esse padrão aparece no conjunto de dados, por que motivo dá origem a litígios e como é a correção.
19 padrões · classificados por frequência nos registos de reclamações extraídos
As contagens refletem as entradas de questões categorizadas extraídas dos documentos de queixa do conjunto de dados do tribunal federal; um processo gera normalmente dezenas de entradas. Os padrões estão ordenados pelo total de questões registadas, e não pela frequência a nível de cada processo.
De onde vêm os dados
O catálogo baseia-se no mesmo conjunto de dados dos tribunais federais descrito na edição anterior: 8 788 processos relativos à acessibilidade de sítios Web ao abrigo do Título III da ADA, extraídos do PACER (o sistema de Acesso Público aos Registos Eletrónicos dos Tribunais do poder judicial federal), com 6 666 descrições de questões específicas extraídas dos documentos das queixas e classificadas em 27 categorias funcionais — navegação global, anúncios do leitor de ecrã, navegação por teclado, formulários, janelas modais, pagamentos, etc.
Todas as citações textuais nas entradas abaixo foram reproduzidas a partir dos excertos do processo, tal como constam na queixa subjacente, tendo sido sujeitas apenas a ligeiras correções editoriais para corrigir erros óbvios de OCR (por exemplo, «A nnounced» → «Announced») que surgiram quando os autos do tribunal foram digitalizados. O número de questões reflete o número de entradas categorizadas, e não o número de casos únicos — um único caso gera normalmente dezenas de entradas de questões que abrangem várias categorias. Sempre que útil, assinalamos o domínio relativo de um subpadrão dentro da sua categoria.
Os queixosos não estão a contestar erros de programação raros e difíceis de encontrar. Estão a contestar o mesmo processo de finalização de compra, o mesmo logótipo, o mesmo modal, o mesmo campo de formulário, em site após site após site.
Oito etapas organizadas desde a chegada até ao checkout. Os elementos da página onde a maioria dos casos tem origem não se encontram nas margens do site, mas sim ao longo do percurso de conversão — cabeçalho, pesquisa, produto, carrinho, checkout — exatamente onde a receita é gerada.
Navegação global e o menu «hambúrguer» sem rótulo
O cabeçalho é a primeira área interativa em todas as páginas, e o botão de menu horizontal é frequentemente a primeira coisa a que um utilizador que navega apenas pelo teclado acede. Quando esse botão é apresentado como um <div> se tiver uma imagem de fundo em CSS, não tiver um nome acessível ou expandir um menu que retém o foco ou não indica o seu estado de aberto/fechado, todo o site torna-se estruturalmente inoperável a partir do teclado antes mesmo de o utilizador ter acedido a qualquer conteúdo efetivo.
O link de salto é a falha associada. Um link que funciona "Skip to main content" O link de salto é uma correção de apenas cinco linhas, mas é também o indicador mais eficaz para determinar se uma equipa de desenvolvimento tem, de todo, a acessibilidade na sua lista de verificação. As reclamações referem frequentemente ambos os aspetos no mesmo parágrafo, porque a ausência ou o mau funcionamento de um link de salto é o sinal de alerta — se a equipa não implementou um link de salto, é quase certo que também não implementou os estados «aria-expanded».
Renderizar o gatilho do menu como um elemento real <button> com uma etiqueta de texto visível ou apenas para leitores de ecrã e um elemento gerido aria-expanded atributo. Indique um "Skip to main content" link que fica visível quando recebe o foco e fica dentro do <main> ponto de referência. Certifique-se de que o foco passa para o menu quando este se abre, volta para o elemento de ativação quando se fecha e que Esc fecha o menu.
Barra de pesquisa e sugestões de preenchimento automático
A pesquisa é implementada como um componente personalizado na maioria dos sites de grande dimensão — um campo de introdução de texto com supressão de repetições que envia um pedido a cada tecla pressionada e apresenta uma lista flutuante de sugestões dentro de um elemento posicionado de forma absoluta <div>. O campo de introdução de texto em si costuma funcionar bem. A lista de sugestões, por outro lado, quase nunca funciona. É apresentada fora do contexto DOM do campo de introdução, não tem role="listbox", não aria-activedescendant, e não há qualquer aviso da «live-region» quando os resultados aparecem. Um utilizador de um leitor de ecrã escreve, não ouve nada, carrega em Enter e obtém uma página de resultados que não sabia que estava à sua espera.
O mesmo padrão arquitetónico repete-se nos painéis de filtragem da pesquisa facetada e na própria lista de resultados: elementos que podem receber o foco do teclado, que estão visualmente presentes, mas nunca são anunciados. As reclamações sobre a pesquisa raramente dizem respeito à caixa de pesquisa; dizem respeito a tudo o que aparece depois de o utilizador escrever.
Utilize o padrão WAI-ARIA para caixas de seleção: role="combobox" na entrada com aria-expanded, aria-controls, e aria-activedescendant ligado a um role="listbox" de sugestões. Adicione uma área dinâmica que anuncie o número de resultados. Certifique-se de que a lista de sugestões é acessível com a tecla de seta para baixo, e não apenas com o rato.
Ficha do produto e a grelha PLP
A grelha PLP concentra vários anti-padrões num único ecrã. Cada mosaico é, normalmente, um cartão clicável com três ou quatro elementos interativos secundários — link de imagem, link de título, amostras de cor, botão de adição rápida —, todos integrados num outro link para a página do produto. O resultado são elementos interativos aninhados (um erro de HTML), texto de link redundante («Hero Dash Three Graphic Image Link» repetido quatro vezes) e amostras de cor criadas a partir de <div> elementos com manipuladores de clique, mas sem função nem nome.
A barra lateral de filtragem acrescenta uma segunda categoria de falha. As facetas de filtragem são normalmente listas de caixas de seleção, mas são criadas com elementos div e span personalizados, com um estilo que as faz parecer caixas de seleção, sendo que o verdadeiro <input> oculto fora do ecrã. Quando esse campo de entrada oculto perde a sua associação — através de uma regra CSS, de um manipulador de eventos JavaScript que ignora as pressões da tecla de espaço ou de um for atributo na etiqueta visível — o filtro passa a ser operável apenas com o rato.
Utilize uma âncora por mosaico com texto descritivo, em vez de três links por produto. Apresente as amostras de forma realista <button> elementos dentro de um role="radiogroup". Criar facetas de filtro com base em dados reais <input type="checkbox"> elementos associados <label> tags; aplicar estilo aos campos de entrada de forma visível, em vez de os ocultar. Avisar das alterações no filtro através de uma área interativa.
Detalhes do produto: botões de tamanho, quantidade e amostra
A página de detalhes do produto é onde um utilizador de leitor de ecrã tem de efetuar várias escolhas específicas na ordem correta: escolher uma cor, escolher um tamanho, definir a quantidade e, por fim, adicionar ao carrinho. Cada uma dessas opções é implementada no comércio eletrónico moderno como um widget personalizado — geralmente uma linha horizontal de <button>em forma de <div>Quanto aos tamanhos, blocos de cor criados a partir de divs com estilos CSS e um controlador numérico composto por dois botões com ícones que ladeiam um campo de entrada. Os botões de aumento e diminuição são normalmente fornecidos sem um nome acessível; as reclamações descrevem-nos como anunciado como «botão, botão» sem qualquer indicação do que fazem.
Os guias e tabelas de tamanhos constituem uma falha à parte: encontram-se quase sempre atrás de um link «Tabela de tamanhos» que abre uma janela modal, sendo que o próprio link muitas vezes não tem qualquer título, a janela modal frequentemente não apresenta um título e a tabela no seu interior muitas vezes não tem cabeçalhos nas linhas nem nas colunas.
Utilize controlos de formulário reais. As amostras de cor e os seletores de tamanho devem ser um role="radiogroup" de role="radio" botões (ou campos de opção com estilo invisível), cada um com um nome acessível como «Tamanho: Médio». O controlador de quantidade deve ser um campo numérico rotulado, acompanhado de botões de aumento/diminuição cujos nomes acessíveis incluam a ação e a quantidade atual. Envolva todo o bloco de seleção num fieldset com uma legenda.
«Adicionar ao carrinho» — o botão que não confirma
O botão «Adicionar ao carrinho» é o momento mais testado em qualquer funil de comércio eletrónico e um dos que apresenta falhas mais frequentes para os utilizadores de tecnologias de assistência. O padrão é mecânico: um visitante clica no botão, surge uma pequena janela de confirmação ou uma gaveta do mini-carrinho durante dois ou três segundos, e o ícone do carrinho atualiza um indicador de quantidade no cabeçalho. Os utilizadores com visão veem os três sinais. Os utilizadores de leitores de ecrã normalmente não recebem nenhum. A janela de confirmação é apresentada fora de qualquer área ativa, a gaveta aparece sem gestão de foco e a alteração na contagem do carrinho é apresentada como uma simples mutação do DOM que nenhum leitor de ecrã anunciará.
O resultado é um botão que, do ponto de vista do utilizador, não faz nada. O utilizador carrega nele, não ouve nada, presume que não funcionou e volta a carregar. Algumas reclamações referem que o utilizador carregou no botão cinco ou seis vezes antes de perceber que o carrinho tinha acumulado silenciosamente cinco ou seis artigos.
Envolva a região cart-status em aria-live="polite" e atualize o seu texto sempre que a adição for bem-sucedida. Se o design utilizar uma janela de confirmação, desloque o foco para a janela quando esta se abrir e volte a colocá-lo no botão original quando ela se fechar. Atualize o indicador da quantidade no carrinho com uma mensagem destinada exclusivamente a leitores de ecrã, como «1 artigo adicionado. Total do carrinho: 3 artigos.»
Controles apenas com ícones: o carrinho, o balão de conversa, a barra de redes sociais
Os controlos compostos apenas por ícones apresentam falhas de forma previsível: o conteúdo visível é um SVG ou um glifo de fonte de ícones, o conteúdo acessível está vazio e a leitura do leitor de ecrã resume-se à função estrutural do elemento, sem nome. O ícone do carrinho acaba por ser anunciado como «link» ou «colapsado»; a bolha de chat como «botão»; a linha de ícones sociais no rodapé como «link, link, link, link, link». O utilizador não tem como saber o que cada um deles faz.
Os ícones de carrinho apresentam falhas com mais frequência do que outros ícones por uma razão de natureza arquitetónica: muitas implementações apresentam a quantidade do carrinho no nome acessível do ícone (por exemplo, o ícone mostra «0» no interior do SVG), e o leitor de ecrã capta apenas o algarismo. As reclamações referem que o ícone do carrinho é anunciado como «3, link» ou «0, link», sem qualquer indicação de que «3» se refere a uma quantidade no carrinho de compras.
Todos os controlos que consistem apenas em ícones precisam de um nome acessível. Adicione um aria-label no botão ou inserir uma etiqueta de texto invisível no seu interior: "Shopping cart, 3 items". Evite incluir números no nome acessível do ícone sem contexto. No caso de ícones decorativos que aparecem ao lado de texto visível, utilize aria-hidden="true" clique no ícone e deixe que o texto funcione como etiqueta.
Checkout: o formulário que não pode ser preenchido
A página de finalização da compra concentra mais riscos de conformidade por pixel quadrado do que qualquer outra página de um site de comércio eletrónico, e o padrão de falhas é frequente. Listas suspensas de endereços apresentadas como personalizadas <div> componentes que ignoram a tecla de espaço. Os indicadores de campos obrigatórios são apresentados apenas como um asterisco vermelho, sem aria-required e sem qualquer associação programática. Mensagens de erro exibidas em texto vermelho abaixo do campo, sem aria-describedby ao associar o campo ao erro e não haver qualquer indicação na área ativa quando a validação falha. O utilizador preenche o formulário, clica em «Continuar», é redirecionado silenciosamente e não tem como saber quais os campos que falharam nem porquê.
A mesma descrição das reclamações repete-se em centenas de casos: a mensagem de erro não é anunciada, as mensagens de erro são vagas, não é possível introduzir os dados de faturação. Não se trata de erros isolados. Trata-se do comportamento padrão da maioria dos componentes de finalização de compra em lojas online, lançados sem um trabalho explícito de acessibilidade.
Use o verdadeiro <label> elementos associados às entradas por for/id. Indique os campos obrigatórios com aria-required="true" e indique o requisito através de texto visível, não apenas da cor. Em caso de falha na validação, apresente a mensagem de erro dentro do campo de entrada aria-describedby destino, indicar o campo com erro aria-invalid="true"e desloque o foco do teclado para o primeiro campo inválido. Inclua uma área de resumo de erros na parte superior do formulário com links de âncora para cada campo com erros.
Pagamento: o campo CVV que não tem título
O bloco de pagamento é invulgar porque é frequentemente apresentado através de um iframe incorporado de terceiros — Stripe Elements, Braintree Hosted Fields ou um componente integrado da Adyen. Dentro do iframe, o formulário do próprio fornecedor de serviços de pagamento costuma estar bem identificado. Mas no momento em que um site cria o seu próprio formulário de captura de cartão, ou envolve os campos incorporados num layout personalizado que substitui as etiquetas por marcadores de posição visuais, os quatro campos — número, data de validade, CVV, código postal — tornam-se uma linha de campos em branco para um leitor de ecrã.
O campo CVV é aquele que mais frequentemente é mal identificado, pois os designers costumam substituir o seu rótulo por um ícone de ponto de interrogação que abre uma dica explicando o que é o CVV. A dica não é o rótulo; o campo continua a precisar de um nome programático. Quando não o tem, o leitor de ecrã anuncia todo o bloco de pagamento como «editar, editar, editar, editar» e a transação é interrompida.
Se estiver a utilizar uma integração de campos hospedados por terceiros, siga as orientações de acessibilidade do fornecedor — a maioria disponibiliza um método documentado para rotular os campos a partir do exterior do iframe. Se estiver a criar um formulário de captura de cartão personalizado, cada campo de entrada precisa de um <label> elemento com uma etiqueta de texto visível, além de autocomplete="cc-number" / cc-exp" / cc-csc" atributos para que os gestores de palavras-passe e as tecnologias de assistência possam identificar os campos de acordo com a sua finalidade.
Página do carrinho: o controlador de quantidade e o botão «Remover» que falta
A página do carrinho repete a falha do controlador de quantidade da página de detalhes do produto (PDP), mas com consequências mais graves: um utilizador de leitor de ecrã que não consiga utilizar o controlador não consegue concluir a encomenda. O botão «Remover» é, por si só, um anti-padrão — trata-se normalmente de um pequeno ícone em forma de × ao lado de cada item da lista, muitas vezes sem texto visível, sem aria-label, e não há qualquer aviso quando a linha é removida. O utilizador clica no que pensa ser o botão de remoção, a linha desaparece e o leitor de ecrã permanece em silêncio. Não há forma de confirmar se a ação foi bem-sucedida.
Várias reclamações referem um problema semelhante: o total acumulado do carrinho atualiza-se dinamicamente quando as quantidades mudam ou os artigos são removidos, mas o novo total é apresentado como texto DOM normal fora de qualquer área dinâmica, pelo que o utilizador não faz ideia do valor que lhe será cobrado.
Cada item deve apresentar um botão de remoção identificado (por exemplo, "Remove Blue T-Shirt, size M, from cart"). Os controlos de seleção de quantidade devem indicar o seu valor atual como parte do nome acessível ou através de atualizações em tempo real associadas. O subtotal do carrinho deve estar dentro de um aria-live="polite" região, pelo que as alterações são anunciadas. Confirme as remoções através de uma funcionalidade de anulação.
Sete itens que não estão associados a uma etapa específica do funil. Trata-se de questões de infraestrutura — convenções ao nível da página, componentes globais, linha de base de conteúdo — e uma única falha neste contexto repete-se em todas as páginas onde o componente aparece.
O campo do formulário designado como «caixa de edição»
Esta é a categoria mais numerosa do conjunto de dados, pois é o problema cuja deteção implica o menor custo e cuja ignorância acarreta o maior custo. Um leitor de ecrã percorre o DOM, encontra um <input>, e lê o seu nome acessível — que calcula a partir de, por ordem: aria-labelledby, aria-label, uma empresa associada <label for>, o title atributo ou o marcador de posição. Se nenhum deles existir, o leitor de ecrã anuncia apenas a função: «caixa de edição» ou «edição, em branco». Essa frase, quase literalmente, repete-se em centenas de registos de reclamações.
A razão pela qual isto é tão comum é de natureza estrutural. Os sistemas de design modernos costumam apresentar texto de preenchimento dentro do campo de entrada como substituto do rótulo visível, e os programadores partem do princípio de que esse texto de preenchimento desempenha a função de rotulagem. Mas não é assim. O texto de preenchimento desaparece quando o utilizador começa a escrever, não deixa qualquer nome programático e torna o campo inutilizável para quem chegar a ele mais tarde no fluxo ou regressar a ele após um erro.
Cada controlo interativo recebe um rótulo visível, associado programaticamente. <label for="email">Email</label><input id="email" type="email"> é o padrão canónico. Os marcadores de lugar são indicações complementares, não substitutos. Para controlos em que um rótulo visível seja realmente indesejável (caixas de pesquisa, botões com ícones), utilize aria-label com texto descritivo — nunca com o marcador de posição duplicado.
A janela modal que não é anunciada nem tem o foco
A frase «não anunciado nem com foco» aparece literalmente em mais de 400 registos de reclamação e é uma das frases mais repetidas em todo o conjunto de dados. Descreve um modo de falha específico: surge um modal ou uma caixa de diálogo na página (muitas vezes automaticamente — inscrição na newsletter, verificação de idade, confirmação de localização), o conteúdo visível muda, mas o leitor de ecrã não recebe qualquer sinal de que algo tenha mudado. O foco permanece na página subjacente. O utilizador continua a navegar com a tecla Tab pelo que quer que estivesse por baixo do modal, sem se aperceber de todo que surgiu uma caixa de diálogo que bloqueia a visualização.
Este é o exemplo clássico de um modal que falha em todos os aspetos ao mesmo tempo: não role="dialog", não aria-modal="true", sem mudança programática de foco quando a janela está aberta, sem «foco preso» enquanto a janela está aberta, sem comportamento de fechar ao premir Esc, sem título anunciado. Como todas estas falhas ocorrem em conjunto, corrigir qualquer uma delas isoladamente não resolve o problema.
Utilize um padrão de caixa de diálogo estabelecido (a especificação WAI-ARIA Authoring Practices serve de referência). Ao abrir: desloque o foco para o primeiro elemento com foco dentro da caixa de diálogo, defina aria-modal="true" e role="dialog", atribua um título à caixa de diálogo com aria-labelledby apontando para o seu título. Enquanto estiver aberta: manter o foco dentro da caixa de diálogo. Ao fechar: devolver o foco ao elemento que a ativou. Respeitar a tecla Esc. Se a janela modal interromper um fluxo (por exemplo, reprodução automática ao carregar a página), ofereça ao utilizador um único mecanismo para a fechar definitivamente.
O indicador de focagem ausente
Os indicadores de foco são normalmente desativados deliberadamente por um programador ou designer que considerou o contorno padrão do navegador como ruído visual e escreveu *:focus { outline: none; } numa folha de estilo global. A página apresenta agora um aspeto mais limpo para um utilizador com visão normal que utilize o rato. Para um utilizador com visão normal que utilize o teclado — incluindo a maioria dos utilizadores com baixa visão, utilizadores com deficiências motoras e utilizadores que navegam sem rato — a página torna-se inutilizável. O utilizador pode premir a tecla Tab, mas não consegue ver onde se encontra.
Este é um dos poucos tipos de falha que é visível sem qualquer tecnologia de apoio. Um revisor de controlo de qualidade que percorra a página inicial uma vez, sem recorrer a outras ferramentas, irá detetá-la em menos de um minuto. O facto de as equipas de acessibilidade a encontrarem sistematicamente em sites alvo de litígio, enquanto a revisão interna a ignorou, é um dos sinais mais fiáveis no conjunto de dados de que o site não passou, de todo, nos testes de acessibilidade com teclado.
Nunca desative de forma generalizada :focus contornos sem substituição. Defina um estilo de foco visível — normalmente um contorno de 2 a 3 px com contraste suficiente em relação ao elemento e ao seu fundo — utilizando :focus-visible Assim, o indicador aparece durante a navegação pelo teclado, mas não quando se clica com o rato. Verifique isto em todos os componentes interativos, incluindo widgets personalizados, links dentro de cartões e elementos com tabindex.
Logótipo e imagens decorativas sem texto alternativo
O logótipo é a imagem mais visitada num site e uma das que mais frequentemente apresenta erros. Normalmente, está inserido num link que redireciona para a página inicial, mas a imagem é apresentada sem alt, não aria-label no link, sem texto circundante. O leitor de ecrã anuncia apenas “link”, sem qualquer informação sobre para onde leva. Multiplique isso por todas as páginas do site.
A categoria mais ampla — imagens sem texto alternativo — abrange banners, fotografias de produtos, ilustrações de destaque, ícones de redes sociais e o vasto catálogo de imagens de marketing que um site de comércio eletrónico típico disponibiliza. As reclamações nesta categoria citam frequentemente nomes de ficheiros de imagem específicos, indicando que o perito do queixoso realizou uma verificação automática que listou todas as imagens cujo alt O atributo estava em falta ou vazio, quando deveria ter sido descritivo.
Os logótipos devem incluir um texto alternativo que descreva o nome da empresa e, caso o logótipo tenha um link para algum site, o destino — alt="Acme Co. — homepage". As imagens decorativas recebem um atributo alt vazio (alt=""), o que as oculta deliberadamente das tecnologias de assistência. As imagens informativas devem ter um texto alternativo descritivo. Evite a geração automática de texto alternativo a partir de nomes de ficheiros ou de legendas geradas por IA sem revisão humana; os registos de reclamações citam repetidamente casos em que ferramentas de sobreposição descreveram o logótipo de uma empresa como «um sinal azul e amarelo».
Links vazios e «clique aqui» / «ler mais»
Os leitores de ecrã apresentam uma visualização em «lista de links», amplamente utilizada por utilizadores experientes para analisar uma página em segundos. Essa visualização mostra apenas o texto do link, separado do parágrafo em que se insere. Uma página em que cada resumo de blogue termina em «Ler mais» é apresentada nessa vista como quinze entradas idênticas. Uma página com cinco links vazios — <a href="..."></a>, o que é comum quando os ícones estão dentro de elementos de ligação sem qualquer texto alternativo — resulta em cinco espaços em branco.
A solução é bem conhecida, tal como a falha, e é por isso que este padrão continua a surgir nas reclamações — a sua persistência indica um processo de desenvolvimento sem um linter automatizado para o texto dos links e sem uma verificação manual com um leitor de ecrã.
Cada link deve ter um nome acessível que descreva o seu destino ou ação. Substitua frases genéricas por frases descritivas — «Ler mais» torna-se «Saiba mais sobre os resultados do terceiro trimestre». No caso de links que incluem apenas ícones, adicione texto oculto visualmente ou um aria-label. Execute uma verificação automática (Axe, Lighthouse, etc.) para detetar elementos vazios <a> elementos durante a IC.
Vídeo sem legendas nem transcrição
O vídeo surge em reclamações de duas formas. A primeira é a mais óbvia: um vídeo de marketing, uma demonstração de produto ou um vídeo explicativo é publicado sem legendas, transcrição ou qualquer alternativa textual — e um visitante surdo ou com deficiência auditiva não consegue aceder ao conteúdo. O segundo é mais subtil: um vídeo de destaque que é reproduzido automaticamente ao carregar a página, o que interfere com a saída do leitor de ecrã e viola os controlos de pausa/parar exigidos pelo nível AA das WCAG 2.2 (conforme SC 2.2.2 Pausar, Parar, Ocultar para conteúdo em movimento e SC 1.4.2 para qualquer áudio).
Algumas reclamações incluídas neste conjunto de dados afirmam que «a ausência de legendas nos vídeos do site constitui uma violação da ADA», apresentando esta afirmação como uma conclusão jurídica. A validade dessa interpretação varia consoante a jurisdição e as circunstâncias; o que é mais consistente é o facto de estes vídeos não cumprirem sistematicamente as diretrizes WCAG 2.2 AA, a norma que a maioria dos tribunais e acordos de resolução de litígios considera como o padrão de conformidade aplicável.
Forneça legendas sincronizadas para todos os vídeos pré-gravados com áudio. Forneça também uma transcrição em texto; as transcrições são úteis para utilizadores com dispositivos em silêncio, em ambientes com baixa largura de banda e para fins de indexação. Evite a reprodução automática; se a reprodução automática for necessária por motivos de design, forneça um comando de pausa/parar acessível imediatamente através do teclado. Para conteúdos apenas em vídeo (sem áudio), forneça uma descrição áudio ou uma alternativa em texto.
Formulários de login, registo e palavra-passe
O registo é o ponto de controlo de toda a experiência de autenticação. Quando o formulário falha, todas as páginas a seguir ficam inacessíveis, e as reclamações frequentemente tratam essa cadeia de falhas como um único obstáculo. O padrão é a mesma falha na identificação do formulário que a E·01, frequentemente combinada com três subfalhas específicas: um botão de alternância «Mostrar palavra-passe» implementado apenas como um ícone, sem nome e sem aviso de alteração de estado; um CAPTCHA que impede totalmente a utilização de leitores de ecrã; e erros embutidos («credenciais inválidas») que são apresentados no ecrã, mas não anunciados.
A caixa de seleção «lembrar-me» é uma falha secundária recorrente adicional: apresentada como um elemento com estilo <div>, com o real <input> oculta fora do ecrã, a caixa de seleção pode ser selecionada com o rato, mas não através do teclado ou de um leitor de ecrã. O utilizador não tem como ativar uma sessão persistente.
Use o verdadeiro <input>, <label>, e <button> elementos. Transforme o botão para mostrar/ocultar a palavra-passe num botão verdadeiro com um nome acessível que se atualize de acordo com o estado ("Show password" / "Hide password") e anunciar a alteração com aria-pressed. Disponibilizar uma alternativa acessível aos CAPTCHAs baseados em imagens (CAPTCHA de áudio ou — de preferência — substituir o CAPTCHA por uma autenticação baseada no risco ou pelas variantes acessíveis do hCaptcha).
Quatro exemplos que ilustram falhas na arquitetura, e não em qualquer interface de utilizador específica. Trata-se de decisões tomadas a um nível superior ao da página — organização dos títulos, compatibilidade com dispositivos móveis, dependências de terceiros — cujas consequências se propagam por todo o lado.
Estrutura da página: falta o H1, marcadores de navegação avariados, sem idioma
Os leitores de ecrã apresentam a página através de três modos de navegação: por título, por ponto de referência e por link. Uma página que seja publicada sem um <h1>, sem <main>, <nav>, e <footer> pontos de referência, e sem um lang="en" atributo no <html> elemento, eliminou simultaneamente esses três modos de navegação. Os utilizadores não têm como percorrer o conteúdo, não têm como saltar para o conteúdo e o leitor de ecrã não consegue carregar o motor de pronúncia adequado.
Trata-se de uma falha invulgarmente propagadora: a ausência de um único ponto de referência provoca uma cascata de falhas a jusante, uma vez que todas as estratégias de navegação dos leitores de ecrã que dependem desse ponto de referência deixam agora de funcionar. As falhas desta categoria costumam enumerar quatro ou cinco problemas estruturais específicos em conjunto, apresentados como prova de que o site carece de uma base semântica.
Cada página recebe uma e apenas uma <h1>, com subtítulos (<h2>, <h3>) aninhadas de forma lógica. Envolva as regiões em elementos de referência HTML5: <header>, <nav>, <main>, <aside>, <footer>. Definir lang na raiz <html> elemento. Valide com um verificador de esboço ou execute document.querySelectorAll('h1').length === 1 como um teste de verificação na integração contínua.
Barreiras exclusivas para dispositivos móveis
A maior parte do controlo de qualidade em matéria de acessibilidade é realizada em navegadores de computador com o NVDA ou o JAWS. As tecnologias de assistência móveis — o VoiceOver no iOS e o TalkBack no Android — apresentam uma renderização diferente do mesmo DOM, frequentemente com erros distintos. As reclamações utilizam repetidamente a abreviatura «SRU móvel» (utilizador de leitor de ecrã móvel) para assinalar falhas exclusivas da visualização móvel: um menu hambúrguer que funciona com o NVDA no computador, mas não reage no VoiceOver; um botão Apple Pay acessível num portátil, mas não na versão da página para iPhone; mensagens de erro que são anunciadas no computador, mas não no telemóvel.
Os dados sugerem que os réus cuja acessibilidade em computadores de secretária é, de resto, sólida continuam a ser alvo de processos judiciais devido a problemas específicos dos dispositivos móveis. A paridade móvel constitui, por si só, um critério de aprovação na auditoria.
Teste, no mínimo, com o VoiceOver no Safari para iOS e com o TalkBack no Chrome para Android, seguindo os mesmos fluxos que o controlo de qualidade para computador abrange. Preste especial atenção às interações baseadas em gestos, aos botões de pagamento nativos e à leitura dos campos de formulário quando estes recebem o foco. Se existir uma aplicação nativa, submeta-a à mesma verificação — as reclamações abrangem frequentemente tanto a versão web como a aplicação no âmbito do mesmo caso.
A própria sobreposição ou widget de acessibilidade
A sobreposição de acessibilidade é o único caso neste catálogo em que a falha não reside de todo no site subjacente — reside sim na suposta camada de correção que foi adicionada para a resolver. As reclamações nesta categoria descrevem dois problemas distintos. O primeiro é que as sobreposições não resolvem efetivamente as barreiras subjacentes, pelo que o utilizador se depara com os mesmos modais defeituosos, formulários mal rotulados e erros inesperados, independentemente da presença ou não do widget. O segundo é mais específico: as sobreposições por vezes introduzem novas falhas ao inserir rótulos incorretos, aplicar incorretamente funções ARIA ou interferir com a própria configuração de tecnologia de assistência do utilizador.
Um pormenor digno de nota: as queixas apresentadas em 2024 e 2025 referem cada vez mais o nome do fornecedor da sobreposição. Duas passagens específicas das queixas identificam a UserWay e a AccessiBe em termos inequívocos, e as recentes medidas da FTC criaram um risco explícito de que a adição de uma sobreposição constitua, por si só, prova de uma falha na implementação de medidas corretivas efetivas — em vez de uma defesa contra um processo judicial.
Considere as sobreposições como um indicador, e não como uma solução. Se já tiver uma implementada, planeie um plano de ação para uma correção efetiva que aborde o código subjacente, em vez de o mascarar. O caminho comprovado consiste numa combinação de: um scanner automatizado integrado na integração contínua (CI), uma auditoria manual em conformidade com as WCAG 2.2 AA, testes manuais com, pelo menos, um leitor de ecrã e navegação apenas por teclado, e controlo de qualidade contínuo da acessibilidade no processo de design e engenharia.
O que estes dezanove padrões têm em comum
O catálogo não é uma amostra aleatória. Ao ler os casos apresentados por ordem, surge repetidamente um pequeno número de padrões estruturais — padrões que explicam por que razão estas falhas específicas predominam, em vez de se centrarem na superfície em que aparecem.
-
Componentes JavaScript personalizados que substituem elementos HTML nativos
Todas as falhas mais citadas envolvem um
<div>fazer o trabalho de um<button>, um<label>, um<select>, ou um<dialog>. Quando se utiliza o elemento nativo, o problema é raro. Quando este é substituído — geralmente por motivos de design visual —, o problema ocorre com frequência. -
Faltam associações programáticas entre o conteúdo visível e o seu significado
O marcador de lugar é tratado como um rótulo. O asterisco é tratado como
aria-required. A moldura vermelha é interpretada como uma mensagem de erro. Os utilizadores com visão percebem as relações visualmente; os utilizadores de tecnologias de apoio só conseguem ver as relações que existem no DOM. -
Alterações de estado que não são anunciadas
Confirmações de adição ao carrinho, contagens de resultados de pesquisa, erros de validação, aberturas de janelas modais, atualizações do total do carrinho — cada mudança de estado dinâmica no catálogo tem, pelo menos, uma reclamação que a descreve como «silenciosa». As mensagens de estado e as regiões ativas são a parte mais subutilizada do conjunto de ferramentas WAI-ARIA.
-
As versões para dispositivos móveis e para computador diferem
O mesmo componente, criado uma vez com HTML semântico, funciona tanto no VoiceOver como no NVDA. O mesmo componente, criado com JavaScript personalizado, passa frequentemente nos testes de qualidade para leitores de ecrã em computadores, mas falha nos dispositivos móveis, porque a renderização dos leitores de ecrã móveis revela erros diferentes no mesmo código.
-
As reclamações seguem um modelo padrão, mas os erros subjacentes não são inventados
As frases-padrão das queixas aparecem textualmente em centenas de processos — mas as conclusões específicas a nível dos elementos em cada queixa são verificáveis e estão corretas. O facto de o escritório de advogados do queixoso utilizar um modelo padrão não significa que as questões subjacentes sejam inventadas; significa apenas que se está a aplicar o mesmo manual de estratégias contra os mesmos problemas recorrentes.
O que deve ser verificado em primeiro lugar se não tiver um programa de acessibilidade
O catálogo acima é exaustivo, mas não está ordenado por prioridade para triagem. Se uma equipa estiver a começar do zero e quiser saber quais os elementos a auditar antes do próximo lançamento, o conjunto de dados sugere uma ordem clara — baseada tanto na frequência como na presença ou ausência destes padrões nos registos reais de reclamações. A lista abaixo não substitui uma auditoria completa às WCAG 2.2 AA, mas abrange as falhas que se repetem na maior parte dos casos.
Nível 1 — Maior frequência, menor custo de reparação
- Navegue pela sua página inicial com o teclado. Consegue ver onde está o foco a cada passo? (E·03)
- Abra o código-fonte da página e verifique cada
<input>em todos os formulários há um verdadeiro<label>. (E·01) - Abra todas as janelas modais com um leitor de ecrã. O conteúdo é anunciado? O foco passa para essa janela? (E·05)
- Execute um scanner automatizado (por exemplo, DevTools, Lighthouse) nos seus cinco modelos mais utilizados. (E·04, E·09, E·10)
Nível 2 — Maior risco financeiro em caso de quebra
- Conclua todo o processo de checkout com um leitor de ecrã, incluindo um erro de validação provocado propositadamente. Os erros são anunciados? Os campos obrigatórios são anunciados? (E·11)
- Adicione um produto ao carrinho com um leitor de ecrã. Consegue ouvir que o carrinho foi atualizado? (E·18)
- Utilize a caixa de pesquisa e a função de preenchimento automático apenas com o teclado. Consegue aceder a uma sugestão e selecioná-la? (E·13)
- Verifique se todos os campos do formulário de pagamento têm um rótulo real e não um espaço reservado. (E·19)
Nível 3 — Fácil de ignorar nos testes em computadores de secretária
- Repita os passos 1 e 2 no Safari para iOS com o VoiceOver e no Chrome para Android com o TalkBack. (E·17)
- Se tiver uma sobreposição de acessibilidade implementada, planeie a sua remoção em conjunto com um plano de ação para a correção efetiva. (E·14)
- Verifique se todos os vídeos têm legendas e uma transcrição. (E·06)
A lista de itens que podem ser objeto de reclamação é curta, estável e visível na página inicial.
Os 19 padrões acima representam a esmagadora maioria das ocorrências registadas em 113 120 reclamações categorizadas, distribuídas por 8 788 processos federais. Não são novidade. Não são difíceis de encontrar. Trata-se do mesmo processo de checkout, do mesmo modal, do mesmo logótipo, do mesmo campo de formulário que surgiria em qualquer análise de trinta minutos do site, utilizando apenas o teclado e um leitor de ecrã.
A assimetria é o cerne da questão. Os advogados dos queixosos estão bem organizados, dispõem de recursos abundantes e analisam essa mesma lista com eficiência industrial — metade dos processos chega a acordo em menos de 100 dias. Os réus, no seu conjunto, repetem incessantemente os mesmos padrões, muitas vezes acrescentando um elemento superficial como uma suposta defesa.
O trabalho de colmatar essa assimetria não é de natureza jurídica. Trata-se de uma disciplina de engenharia e de conceção aplicada a uma lista conhecida e finita. Este artigo constitui essa lista.
Metodologia e dados: Os 19 anexos derivam de 113 120 descrições de problemas individuais, categorizadas em 27 grupos funcionais, extraídas dos documentos de queixa relativos a 8 788 processos federais sobre acessibilidade de sítios Web ao abrigo do Título III da ADA (registos PACER, 2007–abril de 2026). O número de problemas citados por anexo reflete as entradas categorizadas na folha relevante, e não casos únicos — um único caso gera normalmente dezenas de entradas. As citações textuais são reproduzidas tal como aparecem nos registos de queixa subjacentes, com apenas uma ligeira correção de artefactos de OCR.
Referências às WCAG:Os critérios de sucesso são citados nas WCAG 2.2 AA, a versão mais frequentemente considerada pelos tribunais federais dos EUA e nos acordos de resolução do Departamento de Justiça (DOJ) como a referência de conformidade aplicável. As WCAG 2.2 introduzem critérios de sucesso adicionais, mas ainda não constituem a norma de referência padrão nos litígios aqui analisados.
Avisos legais: Esteguia tem caráter informativo e não constitui aconselhamento jurídico. A questão de saber se um determinado padrão de interface do utilizador (UI) implica responsabilidade depende da jurisdição, da categoria de estabelecimento público do réu, do dano específico sofrido pelo queixoso e da forma como a questão foi apresentada no processo. Várias passagens citadas das queixas apresentam conclusões jurídicas (por exemplo, que a ausência de legendas «constitui uma violação da ADA») que devem ser interpretadas como alegações dos queixosos e não como jurisprudência estabelecida.