Estándares
Atlas apunta a cumplir WCAG 2.1 nivel AA. Este es el estándar que la mayoría de jurisdicciones (EU, US, MX) exigen para servicios digitales. Documento qué criterios cubren los wireframes actuales, dónde hay gaps y cómo verificarlos.
Criterios de éxito en uso
- 1.4.3 Contraste mínimo · 4.5:1 texto normal, 3:1 texto grande (≥18pt o ≥14pt bold).
- 1.4.11 Contraste de no-texto · 3:1 para componentes UI y gráficos esenciales (border-color, focus rings, icons).
- 2.1.1 Teclado · toda funcionalidad accesible vía teclado.
- 2.4.7 Focus visible · indicador de foco visible para cualquier elemento focusable.
- 2.5.5 Tamaño objetivo (AAA opcional) · áreas táctiles ≥44×44 px.
- 4.1.2 Nombre, rol, valor · controles personalizados con ARIA correcta.
- 2.3.3 Animación por interacción · respetar
prefers-reduced-motion.
Tabla de contrastes · en vivo
Ratios computados en tiempo real desde los tokens activos.
Alterna el tema con el toggle del header — la tabla
recalcula. Fórmula WCAG: (L1 + 0.05) / (L2 + 0.05)
con luminancia relativa sRGB.
| Foreground | Background | Uso | Ratio | AA texto | AA grande |
|---|
Focus visible
Todo elemento focusable muestra un indicador claro de foco.
Implementamos con :focus-visible + --shadow-focus
(4px ring brand al 15% alpha). Esto solo se muestra en
navegación por teclado — clicks con mouse no disparan el
ring, evitando ruido visual.
Demo · estados forzados
Tabula con Tab sobre estos elementos para ver el focus real. Los de la columna derecha tienen el estado aplicado a la fuerza para visualizarlo siempre.
Patrones ARIA
Catálogo de atributos ARIA usados en los wireframes y dónde se aplican. ARIA = Accessible Rich Internet Applications, atributos HTML que comunican rol y estado a tecnologías asistivas.
aria-checked.
email, current-password,
new-password, one-time-code,
name. Ayuda a managers de contraseñas y a
autofill nativo del navegador.
Navegación por teclado
Toda interacción debe ser posible sin mouse. Estándar de teclas mantenido a lo largo del sistema.
| Tecla | Acción |
|---|---|
| Tab | Avanza al siguiente elemento focusable. Orden visual = orden DOM. |
| Shift + Tab | Retrocede al elemento anterior. |
| Enter | Activa botones, envía formularios, sigue links. |
| Space | Activa botones y toggleas checkboxes / chips. |
| Esc | Cierra modales / drawers (pendiente · sin modales en wireframes aún). |
| ← → | Navega entre items en radiogroup (mood selector), week-pills, OTP cells. |
| ⌘ K / Ctrl K | Abre búsqueda global (atajo visible en biblioteca y diario). |
Reducción de movimiento
Usuarios con vestibular disorders (trastornos
vestibulares — sensibilidad al movimiento que produce mareo)
configuran su sistema con prefers-reduced-motion: reduce.
Debemos respetar esa preferencia desactivando animaciones no
esenciales.
Propuesta · agregar a tokens.css
Una regla global que neutraliza transiciones y animaciones cuando el usuario lo pide. Se agrega al final de tokens.css para que actúe sobre cualquier componente.
Excepciones permitidas
Algunas animaciones comunican información (indicadores en vivo): el pulse del eyebrow en active-protocol, el blink del timer OTP, el dot pulsante del recovery status. Estas podrían bajar a una versión fade en lugar de eliminarse completamente — preservan el mensaje sin causar mareo.
Lectores de pantalla
Convenciones para que el contenido sea legible por NVDA, JAWS, VoiceOver, TalkBack.
- HTML semántico · usar
<header>,<nav>,<main>,<section>,<article>en vez de<div>cuando aplique. Implementado a lo largo de todos los wireframes. - Jerarquía de headings · un solo
<h1>por página, anidamiento lógico hacia abajo. - .sr-only · clase utilitaria para texto visible solo a lectores (cuando el contexto visual ya es claro pero la semántica necesita una etiqueta). Definida en
components.css. - Etiquetas vinculadas a inputs · usar
<label for="…">+idmatching, no solo placeholders. - Idioma ·
<html lang="es-MX">activa pronunciación correcta en lectores. - Tabla de contenidos · en design-system y accessibility, el sidebar TOC permite saltar a secciones sin tabular por todo.
Gaps conocidos · TODOs para implementación
Cosas detectadas durante el diseño que NO están cubiertas en los wireframes pero deben atenderse al implementar. Lista honesta — el design system no es perfecto, es un punto de partida sólido.
aria-live="polite" para
anunciarse al lector sin interrumpir.
Esc debe cerrar.
.field__error
necesita un id y el input correspondiente
debe llevarlo en aria-describedby.
tokens.css.