Evidencia: lo que las pruebas demuestran
Todas las pruebas pasan. Esto demuestra lo que el widget hace por sí mismo; no sustituye a las pruebas con personas usuarias ni a una auditoría de tercero, que están en curso.
Por criterio
| Criterio o norma | Lo respaldan |
|---|---|
| CAA | ✓ prueba_pictogramas.js ✓ prueba_pictogramas2.js |
| CDPD art. 21 | ✓ prueba_ayuda_voz.js |
| COGA | ✓ prueba_familias36.js ✓ prueba_facil.js ✓ prueba_maximo.js ✓ prueba_entender.js |
| EN 301 549 | ✓ prueba_monitor.js ✓ prueba_acr_panel.js |
| EN 301 549 11.5 | ✓ prueba_teclado_fisico.js ✓ prueba_aislamiento.js ✓ prueba_barrido.js ✓ prueba_barrido2.js ✓ prueba_voz.js ✓ prueba_pictogramas2.js ✓ prueba_lector.js ✓ prueba_familias36.js ✓ prueba_familia3_widget.js ✓ prueba_gestos.js ✓ prueba_bordes.js ✓ prueba_elegir.js ✓ prueba_seguir_camara.js ✓ prueba_temblor.js ✓ prueba_mascarilla.js ✓ prueba_alcance.js ✓ prueba_personalizar.js |
| EN 301 549 11.5.2.3 | ✓ prueba_apartarse.js |
| EN 301 549 11.7 | ✓ prueba_sistema.js ✓ prueba_perfil_enlace.js ✓ prueba_botones.js ✓ prueba_idiomas2.js ✓ prueba_cargador.js ✓ prueba_idiomas_demo.js |
| EN 301 549 12.2 | ✓ prueba_botones.js |
| EN 301 549 5.1.3.2 | ✓ prueba_apartarse.js ✓ prueba_teclas_reenviadas.js |
| EN 301 549 7.2 | ✓ prueba_amplificar.js |
| Estatuto Tributario art. 616-1 | ✓ prueba_factura.js |
| Evidencia de uso | ✓ prueba_evidencia.js |
| ISO 24495-1 | ✓ prueba_entender.js |
| ISO 24751 | ✓ prueba_pictogramas.js ✓ prueba_pictogramas2.js |
| ISO 9241-171 §9 | ✓ prueba_barrido.js ✓ prueba_barrido2.js ✓ prueba_familia3_widget.js ✓ prueba_elegir.js ✓ prueba_alcance.js |
| ITI VPAT 2.5 | ✓ prueba_monitor.js |
| ITU-R BT.1702 | ✓ prueba_destellos.js |
| Integración | ✓ prueba_sdk.js |
| Ley 1480 de 2011 | ✓ prueba_pagos.js ✓ prueba_describir.js ✓ prueba_asistente_nube.js |
| Ley 1480 de 2011 (publicidad engañosa) | ✓ prueba_promesas.js |
| Ley 1480/2011 | ✓ prueba_privacidad.js |
| Ley 1581 de 2012 | ✓ prueba_correo.js ✓ prueba_plugins.js ✓ prueba_pagos.js ✓ prueba_describir.js ✓ prueba_asistente_nube.js ✓ prueba_clave.js ✓ prueba_planes.js ✓ prueba_informe_arreglos.js ✓ prueba_ia_alojada.js |
| Ley 1581/2012 | ✓ prueba_evidencia.js ✓ prueba_ayuda_voz.js |
| Ley 1581/2012 art. 5 | ✓ prueba_privacidad.js ✓ prueba_seguir_camara.js |
| Ley 1618/2013 art. 16 | ✓ prueba_amplificar.js |
| Ley 1680/2013 | ✓ prueba_pdf.js |
| Ley 1712/2014 art. 8 | ✓ prueba_cc1519.js |
| PDF/UA | ✓ prueba_documentos.mjs |
| Rendimiento | ✓ prueba_rendimiento.js ✓ prueba_cargador.js |
| Res. 1519 Anexo 1 | ✓ prueba_landing.js ✓ prueba_auditar.js ✓ prueba_monitor.js |
| Res. 1519 Anexo 1 cap. 3 | ✓ prueba_documentos.mjs ✓ prueba_pdf.js |
| Res. 1519 CC1 | ✓ prueba_auditar.js ✓ prueba_arreglos.js ✓ prueba_atajo_imagenes.js |
| Res. 1519 CC10 | ✓ prueba_arreglos.js |
| Res. 1519 CC13 | ✓ prueba_aislamiento.js |
| Res. 1519 CC17 | ✓ prueba_arreglos.js |
| Res. 1519 CC19 | ✓ prueba_auditar.js |
| Res. 1519 CC2 | ✓ prueba_auditiva.js |
| Res. 1519 CC24 | ✓ prueba_arreglos.js |
| Res. 1519 CC25 | ✓ prueba_formularios.js ✓ prueba_situaciones.js |
| Res. 1519 CC26 | ✓ prueba_arreglos.js |
| Res. 1519 CC27 | ✓ prueba_arreglos.js |
| Res. 1519 CC29 | ✓ prueba_auditar.js |
| Res. 1519 CC5 | ✓ prueba_axe.js ✓ prueba_daltonismo.js |
| Res. 1519 de 2020 | ✓ prueba_promesas.js |
| Res. 1519 de 2020 Anexo 1 | ✓ prueba_comprador.js ✓ prueba_escanear.js ✓ prueba_declaracion.js ✓ prueba_informe_arreglos.js ✓ prueba_acr_panel.js |
| Res. 1519/2020 Anexo 1 (CC1 a CC32) | ✓ prueba_cc1519.js |
| Res. 2893 Anexo 1 4.3.2 b | ✓ prueba_idiomas2.js ✓ prueba_idiomas_demo.js ✓ prueba_ia_alojada.js |
| Res. 2893 de 2020 | ✓ prueba_declaracion.js ✓ prueba_precios.js |
| Res. 2893 de 2020 Anexo 1 4.3.2 b | ✓ prueba_traducir.js |
| Res. MinTIC 2893 de 2020, Anexo 1, 4.3.2 b | ✓ prueba_otro_idioma.js |
| Robustez | ✓ prueba_navegadores.js ✓ prueba_robustez.js |
| WCAG 1.1.1 | ✓ prueba_documentos.mjs ✓ prueba_arreglos.js ✓ prueba_atajo_imagenes.js ✓ prueba_describir.js |
| WCAG 1.2.2 | ✓ prueba_auditiva.js |
| WCAG 1.2.4 | ✓ prueba_atajo_imagenes.js |
| WCAG 1.2.8 | ✓ prueba_aaa.js |
| WCAG 1.3.1 | ✓ prueba_aria.js ✓ prueba_lector.js ✓ prueba_arreglos.js ✓ prueba_precios.js |
| WCAG 1.3.3 | ✓ prueba_auditiva.js |
| WCAG 1.4.1 | ✓ prueba_daltonismo.js |
| WCAG 1.4.10 | ✓ prueba_posicion.js |
| WCAG 1.4.11 | ✓ prueba_axe.js |
| WCAG 1.4.12 | ✓ prueba_familias.js |
| WCAG 1.4.13 | ✓ prueba_botones.js |
| WCAG 1.4.2 | ✓ prueba_auditiva.js ✓ prueba_maximo.js ✓ prueba_familias.js |
| WCAG 1.4.3 | ✓ prueba_axe.js ✓ prueba_daltonismo.js ✓ prueba_botones.js |
| WCAG 1.4.4 | ✓ prueba_posicion.js ✓ prueba_arreglos.js ✓ prueba_familias.js ✓ prueba_pdf.js |
| WCAG 1.4.6 | ✓ prueba_aaa.js ✓ prueba_correo.js |
| WCAG 1.4.7 | ✓ prueba_amplificar.js |
| WCAG 1.4.8 | ✓ prueba_familias.js ✓ prueba_aaa.js |
| WCAG 2.1 AA | ✓ prueba_landing.js ✓ prueba_cc1519.js ✓ prueba_monitor.js ✓ prueba_escanear.js |
| WCAG 2.1.1 | ✓ prueba_teclado_fisico.js ✓ prueba_seguir_camara.js ✓ prueba_situaciones.js ✓ prueba_atajo_imagenes.js |
| WCAG 2.1.2 | ✓ prueba_teclado_fisico.js |
| WCAG 2.2.1 | ✓ prueba_barrido2.js ✓ prueba_auditar.js |
| WCAG 2.2.2 | ✓ prueba_destellos.js |
| WCAG 2.3.1 | ✓ prueba_destellos.js ✓ prueba_ayuda_voz.js |
| WCAG 2.3.2 | ✓ prueba_destellos.js |
| WCAG 2.4.1 | ✓ prueba_lector.js ✓ prueba_arreglos.js ✓ prueba_botones.js |
| WCAG 2.4.10 | ✓ prueba_botones.js |
| WCAG 2.4.3 | ✓ prueba_comprador.js ✓ prueba_panel.js ✓ prueba_personalizar.js |
| WCAG 2.4.4 | ✓ prueba_arreglos.js |
| WCAG 2.4.6 | ✓ prueba_botones.js |
| WCAG 2.4.7 | ✓ prueba_sistema.js ✓ prueba_arreglos.js ✓ prueba_familias.js |
| WCAG 2.4.8 | ✓ prueba_facil.js ✓ prueba_aaa.js |
| WCAG 2.5.1 | ✓ prueba_barrido2.js ✓ prueba_voz.js ✓ prueba_gestos.js ✓ prueba_bordes.js ✓ prueba_elegir.js ✓ prueba_mascarilla.js ✓ prueba_alcance.js |
| WCAG 2.5.2 | ✓ prueba_temblor.js |
| WCAG 2.5.5 | ✓ prueba_elegir.js ✓ prueba_aaa.js ✓ prueba_otro_idioma.js |
| WCAG 2.5.8 | ✓ prueba_temblor.js |
| WCAG 3.1.1 | ✓ prueba_sistema.js ✓ prueba_idiomas.js ✓ prueba_arreglos.js ✓ prueba_idiomas2.js ✓ prueba_traducir.js ✓ prueba_declaracion.js ✓ prueba_idiomas_demo.js ✓ prueba_otro_idioma.js |
| WCAG 3.1.2 | ✓ prueba_idiomas.js ✓ prueba_traducir.js ✓ prueba_idiomas_demo.js |
| WCAG 3.1.3 | ✓ prueba_familias.js |
| WCAG 3.1.4 | ✓ prueba_aaa.js |
| WCAG 3.1.5 | ✓ prueba_familias36.js ✓ prueba_facil.js ✓ prueba_aaa.js ✓ prueba_entender.js ✓ prueba_ia_alojada.js |
| WCAG 3.2.5 | ✓ prueba_gestos.js |
| WCAG 3.3.1 | ✓ prueba_formularios.js |
| WCAG 3.3.2 | ✓ prueba_elegir.js ✓ prueba_arreglos.js ✓ prueba_entender.js ✓ prueba_situaciones.js |
| WCAG 3.3.3 | ✓ prueba_formularios.js |
| WCAG 3.3.4 | ✓ prueba_pagos.js |
| WCAG 3.3.5 | ✓ prueba_comprador.js |
| WCAG 3.3.6 | ✓ prueba_aaa.js |
| WCAG 3.3.7 | ✓ prueba_formularios.js |
| WCAG 3.3.8 | ✓ prueba_formularios.js |
| WCAG 4.1.2 | ✓ prueba_aria.js ✓ prueba_lector.js ✓ prueba_arreglos.js ✓ prueba_situaciones.js ✓ prueba_plugins.js ✓ prueba_clave.js ✓ prueba_panel.js ✓ prueba_personalizar.js ✓ prueba_apartarse.js ✓ prueba_teclas_reenviadas.js |
| WCAG 4.1.3 | ✓ prueba_aria.js ✓ prueba_lector.js |
Por prueba
✓ prueba_posicion.js · 18 comprobaciones · 10 s
Con cada ajuste guardado (modo oscuro, contraste, lupa, texto 200 %…) el botón y el panel siguen en pantalla y la cabecera fija del sitio no se mueve.
WCAG 1.4.10WCAG 1.4.4
- sin ajustes
- oscuro
- contraste
- oscuro + contraste
- calma
- daltonismo protan
- oscuro + daltonismo
- texto 200 %
- enlaces
- animaciones
- dislexia
- sin imágenes
- máscara
- guía
- modo fácil
- lupa de pantalla ×2
- todo a la vez
- interruptor de modo oscuro en vivo y tras recargar
✓ prueba_teclado_fisico.js · 14 comprobaciones · 2 s
Tab llega a todas las teclas y frases; Intro y Espacio las pulsan; el lector básico no captura las teclas de los controles del sitio.
WCAG 2.1.1WCAG 2.1.2EN 301 549 11.5
- ninguna tecla con tabindex=-1
- con Tab se llega al teclado en pantalla
- se llega a la tecla q
- Intro sobre q escribe en el campo
- el foco se queda en la tecla
- Espacio también pulsa la tecla
- tras Mayús el teclado se redibuja y el foco sigue en Mayús
- las frases están en el teclado y son tabulables
- Intro sobre una frase la dice
- lector básico activado
- Espacio e Intro activan un botón real de la página
- Espacio marca una casilla real
- flecha abajo en un desplegable cambia la opción, no mueve el lector
- flecha abajo sin control enfocado mueve el lector
✓ prueba_aria.js · 11 comprobaciones · 1 s
Pestañas con el patrón Tabs, −/+ con etiqueta y valor, avisos en región live, calibración modal.
WCAG 4.1.2WCAG 4.1.3WCAG 1.3.1
- una sola pestaña tabulable y todas con aria-controls válido
- la tabulable es la seleccionada
- flecha derecha cambia de pestaña, la selecciona y muestra su panel
- Fin e Inicio van a los extremos
- flecha izquierda da la vuelta
- −/+ dicen qué cambian y describen el valor
- el nombre de la voz es una región live
- hay una región live oculta visualmente para los avisos
- el aviso del clic llega a la región live
- la región de estado no se toca si el texto no cambia
- la calibración es un diálogo modal con nombre
✓ prueba_privacidad.js · 11 comprobaciones · 8 s
Consentimiento antes de la primera cámara, avisos de la voz, «Acerca de» honesto, «Restablecer todo» borra todo.
Ley 1581/2012 art. 5Ley 1480/2011
- la primera activación muestra el consentimiento sin tocar la cámara
- el consentimiento habla de dato biométrico y enlaza a la política
- el foco va al botón de aceptar
- «Ahora no» cierra el aviso y no guarda nada
- «Acepto» guarda fecha y versión del consentimiento
- tras aceptar sí se intenta activar la cámara
- con el consentimiento guardado no se vuelve a pedir
- el dictado avisa de que la voz va a Google o Microsoft
- las órdenes por voz avisan igual
- «Acerca de» ya no promete «todo en tu navegador» y enlaza la política
- «Restablecer» borra el consentimiento guardado
✓ prueba_axe.js · 20 comprobaciones · 4 s
axe-core WCAG 2.1/2.2 AA sobre cada pestaña, el teclado, las frases y el modo fácil, más contraste calculado a mano.
WCAG 1.4.3WCAG 1.4.11Res. 1519 CC5
- vista sencilla con una opción puesta: 0 regla(s) incumplida(s), 0 elemento(s), 679 revisados
- pestaña inicio: 0 regla(s) incumplida(s), 0 elemento(s), 765 revisados
- pestaña ver: 0 regla(s) incumplida(s), 0 elemento(s), 1087 revisados
- pestaña oir: 0 regla(s) incumplida(s), 0 elemento(s), 1051 revisados
- pestaña cara: 0 regla(s) incumplida(s), 0 elemento(s), 810 revisados
- pestaña clics: 0 regla(s) incumplida(s), 0 elemento(s), 1981 revisados
- pestaña escribir: 0 regla(s) incumplida(s), 0 elemento(s), 716 revisados
- pestaña mas: 0 regla(s) incumplida(s), 0 elemento(s), 727 revisados
- teclado en pantalla: 0 regla(s) incumplida(s), 0 elemento(s), 629 revisados
- teclado, capa Frases: 0 regla(s) incumplida(s), 0 elemento(s), 629 revisados
- modo fácil: 0 regla(s) incumplida(s), 0 elemento(s), 505 revisados
- Pausar: texto sobre fondo: 7.86:1
- interruptor apagado sobre el panel: 3.13:1
- interruptor encendido sobre el panel: 7.86:1
- borde de los botones − / +: 3.13:1
- borde de las opciones: 8.24:1
- foco del botón flotante
- texto del aviso de estado: 8.71:1
- borde de las teclas sobre el teclado: 3.20:1
- texto de las teclas: 16.34:1
✓ prueba_aislamiento.js · 12 comprobaciones · 1 s
Estilos agresivos del sitio no alteran el widget (shadow root) y funciona con CSP estricta con nonce.
EN 301 549 11.5Res. 1519 CC13
- el widget carga con CSP estricta
- sin errores JS
- sin violaciones de CSP al cargar
- las piezas del widget están en un shadow root
- los <style> del documento llevan el nonce
- los <style> del shadow root llevan el nonce
- el botón flotante conserva tamaño y forma pese a button{all:unset}
- el interruptor conserva su color y tamaño
- los textos del panel no heredan los 40 px rojos del sitio
- el botón del sitio sigue con sus estilos
- modo oscuro: la página se invierte y el panel se des-invierte dentro del shadow root
- sin violaciones de CSP al abrir panel, modo oscuro y teclado
✓ prueba_destellos.js · 27 comprobaciones · 34 s
Frenar destellos (epilepsia fotosensible): mira los <video> y <canvas> a unas 30 muestras por segundo y frena, oscurece y pausa lo que destella más de 3 veces por segundo en más del 25 % de un campo de 10° (341 × 256 px a 1024 × 768), o en rojo saturado, en unos 430-470 ms desde que empieza (lo que tardan en llegar 4 cambios a 5 Hz); no frena 2 Hz, 3 Hz, lo pequeño ni una escena suave en movimiento; vídeo de captureStream pausado y reanudable, animaciones CSS rápidas paradas, «Más estricta», aviso cuando el navegador no deja leer un vídeo de otro sitio, y en la ayuda que reduce el riesgo y no lo elimina.
WCAG 2.3.1WCAG 2.3.2WCAG 2.2.2ITU-R BT.1702
- 5 Hz blanco y negro, 640 × 360: se frena como destello general
- queda oscuro y borroso, con el aviso «Destello frenado. Puedes reanudarlo.» y su botón
- la región viva lo dice
- tarda 440 ms desde que empieza a destellar
- el botón «Reanudar» mide al menos 44 × 44 px
- «Reanudar» lo devuelve como estaba y ya no lo vuelve a frenar
- sin errores de JavaScript
- 2 Hz: no se frena
- analiza unas 30 muestras por segundo
- 5 Hz pero pequeño (120 × 90 px, menos del 25 % del campo de 10°): no se frena
- escena suave que se mueve
- rojo saturado a 4 Hz con la misma luminancia que el gris: se frena como destello rojo
- 3 Hz según la norma: no se frena
- 3 Hz en «Más estricta»: se frena
- 160 × 100 px a 5 Hz: pasa del 10 % del campo de 10° (8.730 px²), se frena en «Más estricta»
- el mismo 160 × 100 px según la norma (menos del 25 %, 21.824 px²): no se frena
- vídeo de canvas.captureStream() a 5 Hz: se pausa, se oscurece y ofrece reanudar
- «Reanudar» vuelve a poner el vídeo, sin oscurecer
- animación CSS grande a 5 Hz: parada; la lenta
- y lo dice
- al apagar «Frenar destellos» la animación vuelve como estaba
- canvas que el navegador no deja leer, norma: avisa de que no se puede analizar y no lo toca
- canvas que el navegador no deja leer, estricta: avisa de que no se puede analizar y lo atenúa
- «La pantalla me marea» enciende «Frenar destellos» y lo dice; al quitarla vuelve a como estaba
- sale en «Lo que tienes activado»
- la ayuda dice que reduce el riesgo y no lo elimina, y remite al médico; hay «Cuándo frenar»
- ningún texto del widget promete evitar las crisis
✓ prueba_daltonismo.js · 60 comprobaciones · 10 s
Daltonismo: filtros SVG reales; matrices de Machado (2009) por gravedad contra los valores publicados y corrección de Fidaner igual que la aplicación, con «Cuánto te cuesta»; ΔE2000 contra Sharma (2005); «¿Qué color es?» (fondo, letra, imagen, relleno SVG); «Prueba tus colores» detecta cada tipo e intensidad con respuestas simuladas, con teclado y con el puntero de la cara, y dice que es orientativa; resaltar un color y tramas reversibles sobre una gráfica SVG; modo sin colores y brillo; avisos de pares de colores confundibles en Winclus Audit y el Monitor.
WCAG 1.4.1WCAG 1.4.3Res. 1519 CC5
- los cinco filtros
- el filtro protan se aplica y cambia el rojo de la página
- el filtro deutan se aplica y cambia el rojo de la página
- el filtro tritan se aplica y cambia el rojo de la página
- el filtro gris se aplica y cambia el rojo de la página
- «Ninguna» devuelve los colores originales
- las matrices por gravedad coinciden con los valores publicados por Machado
- en las 33 matrices
- entre dos pasos se interpola (0,55 es la media de 0,5 y 0,6) y la gravedad 0 es la visión habitual
- la corrección de Fidaner da la misma matriz que la aplicación
- con el rojo y el verde al 100 % es la corrección que el widget ya tenía
- «Cuánto te cuesta» con −/+ cambia la matriz del filtro, se guarda y dice «un poco … no lo distingo nada»
- ΔE2000 coincide con los pares de prueba de Sharma, Wu y Dalal
- el panel de clientes («Ver mi sitio como lo ve…») y el Monitor usan la misma tabla de Machado que el widget
- colores conocidos nombrados bien en español: verde oliva, rojo oscuro, gris claro
- un color entre dos nombres también tiene nombre
- y en inglés
- los demás idiomas dicen el tono básico
- el diccionario propio tiene los 154 nombres de la aplicación
- al tocar un recuadro verde oliva lo dice en el globo y en voz alta
- sobre un texto dice el color de la letra y el del fondo
- sobre una imagen lee el píxel con canvas
- sobre una barra de una gráfica SVG dice el color del relleno
- con «¿Qué color es?» puesto, tocar un enlace dice su color y no lo abre
- con el puntero de la cara el gesto de clic también dice el color
- al quitarlo se apaga y el globo desaparece
- la prueba avisa de entrada que es orientativa y no médica: no sustituye a un examen con un especialista
- son 12 láminas propias
- quien no distingue el rojo
- el resultado lo dice con palabras sencillas y repite el aviso
- quien no distingue el verde, respondiendo con el teclado
- quien no distingue el azul, con formas en vez de números y una respuesta con el puntero de la cara: detecta el azul
- protanomalía de gravedad 0,8: detecta el rojo con una intensidad aproximada entre 60 y 100 %
- deuteranomalía de gravedad 0,7: detecta el verde con una intensidad aproximada entre 50 y 90 %
- quien ve todos los colores: «ninguna dificultad» y no cambia nada
- la prueba es un diálogo modal: Tab no sale de él y Escape la cierra
- «Resaltar un color: Verde» deja en color la barra verde y pone en gris la roja y la azul
- con «Rojo» es al revés: la roja en color y la verde en gris
- «Ninguno» devuelve los colores tal cual
- «Tramas en vez de colores»: cada color lleva una trama distinta, la misma en la barra y en su leyenda, y el eje gris no se toca
- avisa de que a la gráfica en canvas no se le pueden poner tramas
- las tramas se ven en la gráfica
- una barra que la gráfica dibuja después también recibe su trama
- al quitar las tramas la gráfica queda exactamente como estaba
- «No veo ningún color»: todo en gris y el fondo blanco pasa a gris oscuro
- con él, el cursor grande y el foco con un marco grueso
- el brillo de la página se baja con −
- al quitarlo, la página vuelve a verse igual que antes
- «Confundo los colores» enseña «Tus colores» en Inicio
- y al quitarla deja todo como estaba, también las tramas que se pusieron después
- cada control de «Tus colores» lleva su ayuda debajo
- sin jerga en el panel: nada de «protanopia» ni «acromatopsia»
- sin errores de JavaScript
- letra roja sobre fondo verde: se avisa para quien no distingue el rojo y el verde
- rojo oscuro sobre blanco no se avisa
- enlace sin subrayar que solo se distingue por el color: avisado; el subrayado, no
- dos puntos de estado
- los tres avisos salen con su explicación y el umbral
- Winclus Audit
- el resumen del Monitor guarda la explicación para el panel de clientes
✓ prueba_landing.js · 230 comprobaciones · 23 s
winclus.com (portada, privacidad, accesibilidad, integrar, comparar) pasa axe a 1280 y 390 px y carga su propio widget.
Res. 1519 Anexo 1WCAG 2.1 AA
- / a 1280 px: axe sin incumplimientos
- / a 1280 px: carga el widget
- / a 1280 px: enlaza las otras páginas legales
- / a 1280 px: sin scroll horizontal
- / a 1280 px: sin errores JS
- /privacidad.html a 1280 px: axe sin incumplimientos
- /privacidad.html a 1280 px: carga el widget
- /privacidad.html a 1280 px: enlaza las otras páginas legales
- /privacidad.html a 1280 px: sin scroll horizontal
- /privacidad.html a 1280 px: sin errores JS
- /accesibilidad.html a 1280 px: axe sin incumplimientos
- /accesibilidad.html a 1280 px: carga el widget
- /accesibilidad.html a 1280 px: enlaza las otras páginas legales
- /accesibilidad.html a 1280 px: sin scroll horizontal
- /accesibilidad.html a 1280 px: sin errores JS
- /integrar.html a 1280 px: axe sin incumplimientos
- /integrar.html a 1280 px: carga el widget
- /integrar.html a 1280 px: enlaza las otras páginas legales
- /integrar.html a 1280 px: sin scroll horizontal
- /integrar.html a 1280 px: sin errores JS
- /comparar.html a 1280 px: axe sin incumplimientos
- /comparar.html a 1280 px: carga el widget
- /comparar.html a 1280 px: enlaza las otras páginas legales
- /comparar.html a 1280 px: sin scroll horizontal
- /comparar.html a 1280 px: sin errores JS
- /demo.html a 1280 px: axe sin incumplimientos
- /demo.html a 1280 px: carga el widget
- /demo.html a 1280 px: enlaza las otras páginas legales
- /demo.html a 1280 px: sin scroll horizontal
- /demo.html a 1280 px: sin errores JS
- /evidencia.html a 1280 px: axe sin incumplimientos
- /evidencia.html a 1280 px: carga el widget
- /evidencia.html a 1280 px: enlaza las otras páginas legales
- /evidencia.html a 1280 px: sin scroll horizontal
- /evidencia.html a 1280 px: sin errores JS
- /presentacion.html a 1280 px: axe sin incumplimientos
- /presentacion.html a 1280 px: carga el widget
- /presentacion.html a 1280 px: enlaza las otras páginas legales
- /presentacion.html a 1280 px: sin scroll horizontal
- /presentacion.html a 1280 px: sin errores JS
- /una-pagina.html a 1280 px: axe sin incumplimientos
- /una-pagina.html a 1280 px: carga el widget
- /una-pagina.html a 1280 px: enlaza las otras páginas legales
- /una-pagina.html a 1280 px: sin scroll horizontal
- /una-pagina.html a 1280 px: sin errores JS
- /guia.html a 1280 px: axe sin incumplimientos
- /guia.html a 1280 px: carga el widget
- /guia.html a 1280 px: enlaza las otras páginas legales
- /guia.html a 1280 px: sin scroll horizontal
- /guia.html a 1280 px: sin errores JS
- /guion-prueba.html a 1280 px: axe sin incumplimientos
- /guion-prueba.html a 1280 px: carga el widget
- /guion-prueba.html a 1280 px: enlaza las otras páginas legales
- /guion-prueba.html a 1280 px: sin scroll horizontal
- /guion-prueba.html a 1280 px: sin errores JS
- /manual.html a 1280 px: axe sin incumplimientos
- /manual.html a 1280 px: carga el widget
- /manual.html a 1280 px: enlaza las otras páginas legales
- /manual.html a 1280 px: sin scroll horizontal
- /manual.html a 1280 px: sin errores JS
- /cumplimiento.html a 1280 px: axe sin incumplimientos
- /cumplimiento.html a 1280 px: carga el widget
- /cumplimiento.html a 1280 px: enlaza las otras páginas legales
- /cumplimiento.html a 1280 px: sin scroll horizontal
- /cumplimiento.html a 1280 px: sin errores JS
- /mapa-del-sitio.html a 1280 px: axe sin incumplimientos
- /mapa-del-sitio.html a 1280 px: carga el widget
- /mapa-del-sitio.html a 1280 px: enlaza las otras páginas legales
- /mapa-del-sitio.html a 1280 px: sin scroll horizontal
- /mapa-del-sitio.html a 1280 px: sin errores JS
- /idiomas.html a 1280 px: axe sin incumplimientos
- /idiomas.html a 1280 px: carga el widget
- /idiomas.html a 1280 px: enlaza las otras páginas legales
- /idiomas.html a 1280 px: sin scroll horizontal
- /idiomas.html a 1280 px: sin errores JS
- /precios.html a 1280 px: axe sin incumplimientos
- /precios.html a 1280 px: carga el widget
- /precios.html a 1280 px: enlaza las otras páginas legales
- /precios.html a 1280 px: sin scroll horizontal
- /precios.html a 1280 px: sin errores JS
- /declaracion.html a 1280 px: axe sin incumplimientos
- /declaracion.html a 1280 px: carga el widget
- /declaracion.html a 1280 px: enlaza las otras páginas legales
- /declaracion.html a 1280 px: sin scroll horizontal
- /declaracion.html a 1280 px: sin errores JS
- /escanear.html a 1280 px: axe sin incumplimientos
- /escanear.html a 1280 px: carga el widget
- /escanear.html a 1280 px: enlaza las otras páginas legales
- /escanear.html a 1280 px: sin scroll horizontal
- /escanear.html a 1280 px: sin errores JS
- /panel.html a 1280 px: axe sin incumplimientos
- /panel.html a 1280 px: carga el widget
- /panel.html a 1280 px: enlaza las otras páginas legales
- /panel.html a 1280 px: sin scroll horizontal
- /panel.html a 1280 px: sin errores JS
- /novedades.html a 1280 px: axe sin incumplimientos
- /novedades.html a 1280 px: carga el widget
- /novedades.html a 1280 px: enlaza las otras páginas legales
- /novedades.html a 1280 px: sin scroll horizontal
- /novedades.html a 1280 px: sin errores JS
- /estado.html a 1280 px: axe sin incumplimientos
- /estado.html a 1280 px: carga el widget
- /estado.html a 1280 px: enlaza las otras páginas legales
- /estado.html a 1280 px: sin scroll horizontal
- /estado.html a 1280 px: sin errores JS
- /informe.html a 1280 px: axe sin incumplimientos
- /informe.html a 1280 px: carga el widget
- /informe.html a 1280 px: enlaza las otras páginas legales
- /informe.html a 1280 px: sin scroll horizontal
- /informe.html a 1280 px: sin errores JS
- /comprobante.html a 1280 px: axe sin incumplimientos
- /comprobante.html a 1280 px: carga el widget
- /comprobante.html a 1280 px: enlaza las otras páginas legales
- /comprobante.html a 1280 px: sin scroll horizontal
- /comprobante.html a 1280 px: sin errores JS
- / a 390 px: axe sin incumplimientos
- / a 390 px: carga el widget
- / a 390 px: enlaza las otras páginas legales
- / a 390 px: sin scroll horizontal
- / a 390 px: sin errores JS
- /privacidad.html a 390 px: axe sin incumplimientos
- /privacidad.html a 390 px: carga el widget
- /privacidad.html a 390 px: enlaza las otras páginas legales
- /privacidad.html a 390 px: sin scroll horizontal
- /privacidad.html a 390 px: sin errores JS
- /accesibilidad.html a 390 px: axe sin incumplimientos
- /accesibilidad.html a 390 px: carga el widget
- /accesibilidad.html a 390 px: enlaza las otras páginas legales
- /accesibilidad.html a 390 px: sin scroll horizontal
- /accesibilidad.html a 390 px: sin errores JS
- /integrar.html a 390 px: axe sin incumplimientos
- /integrar.html a 390 px: carga el widget
- /integrar.html a 390 px: enlaza las otras páginas legales
- /integrar.html a 390 px: sin scroll horizontal
- /integrar.html a 390 px: sin errores JS
- /comparar.html a 390 px: axe sin incumplimientos
- /comparar.html a 390 px: carga el widget
- /comparar.html a 390 px: enlaza las otras páginas legales
- /comparar.html a 390 px: sin scroll horizontal
- /comparar.html a 390 px: sin errores JS
- /demo.html a 390 px: axe sin incumplimientos
- /demo.html a 390 px: carga el widget
- /demo.html a 390 px: enlaza las otras páginas legales
- /demo.html a 390 px: sin scroll horizontal
- /demo.html a 390 px: sin errores JS
- /evidencia.html a 390 px: axe sin incumplimientos
- /evidencia.html a 390 px: carga el widget
- /evidencia.html a 390 px: enlaza las otras páginas legales
- /evidencia.html a 390 px: sin scroll horizontal
- /evidencia.html a 390 px: sin errores JS
- /presentacion.html a 390 px: axe sin incumplimientos
- /presentacion.html a 390 px: carga el widget
- /presentacion.html a 390 px: enlaza las otras páginas legales
- /presentacion.html a 390 px: sin scroll horizontal
- /presentacion.html a 390 px: sin errores JS
- /una-pagina.html a 390 px: axe sin incumplimientos
- /una-pagina.html a 390 px: carga el widget
- /una-pagina.html a 390 px: enlaza las otras páginas legales
- /una-pagina.html a 390 px: sin scroll horizontal
- /una-pagina.html a 390 px: sin errores JS
- /guia.html a 390 px: axe sin incumplimientos
- /guia.html a 390 px: carga el widget
- /guia.html a 390 px: enlaza las otras páginas legales
- /guia.html a 390 px: sin scroll horizontal
- /guia.html a 390 px: sin errores JS
- /guion-prueba.html a 390 px: axe sin incumplimientos
- /guion-prueba.html a 390 px: carga el widget
- /guion-prueba.html a 390 px: enlaza las otras páginas legales
- /guion-prueba.html a 390 px: sin scroll horizontal
- /guion-prueba.html a 390 px: sin errores JS
- /manual.html a 390 px: axe sin incumplimientos
- /manual.html a 390 px: carga el widget
- /manual.html a 390 px: enlaza las otras páginas legales
- /manual.html a 390 px: sin scroll horizontal
- /manual.html a 390 px: sin errores JS
- /cumplimiento.html a 390 px: axe sin incumplimientos
- /cumplimiento.html a 390 px: carga el widget
- /cumplimiento.html a 390 px: enlaza las otras páginas legales
- /cumplimiento.html a 390 px: sin scroll horizontal
- /cumplimiento.html a 390 px: sin errores JS
- /mapa-del-sitio.html a 390 px: axe sin incumplimientos
- /mapa-del-sitio.html a 390 px: carga el widget
- /mapa-del-sitio.html a 390 px: enlaza las otras páginas legales
- /mapa-del-sitio.html a 390 px: sin scroll horizontal
- /mapa-del-sitio.html a 390 px: sin errores JS
- /idiomas.html a 390 px: axe sin incumplimientos
- /idiomas.html a 390 px: carga el widget
- /idiomas.html a 390 px: enlaza las otras páginas legales
- /idiomas.html a 390 px: sin scroll horizontal
- /idiomas.html a 390 px: sin errores JS
- /precios.html a 390 px: axe sin incumplimientos
- /precios.html a 390 px: carga el widget
- /precios.html a 390 px: enlaza las otras páginas legales
- /precios.html a 390 px: sin scroll horizontal
- /precios.html a 390 px: sin errores JS
- /declaracion.html a 390 px: axe sin incumplimientos
- /declaracion.html a 390 px: carga el widget
- /declaracion.html a 390 px: enlaza las otras páginas legales
- /declaracion.html a 390 px: sin scroll horizontal
- /declaracion.html a 390 px: sin errores JS
- /escanear.html a 390 px: axe sin incumplimientos
- /escanear.html a 390 px: carga el widget
- /escanear.html a 390 px: enlaza las otras páginas legales
- /escanear.html a 390 px: sin scroll horizontal
- /escanear.html a 390 px: sin errores JS
- /panel.html a 390 px: axe sin incumplimientos
- /panel.html a 390 px: carga el widget
- /panel.html a 390 px: enlaza las otras páginas legales
- /panel.html a 390 px: sin scroll horizontal
- /panel.html a 390 px: sin errores JS
- /novedades.html a 390 px: axe sin incumplimientos
- /novedades.html a 390 px: carga el widget
- /novedades.html a 390 px: enlaza las otras páginas legales
- /novedades.html a 390 px: sin scroll horizontal
- /novedades.html a 390 px: sin errores JS
- /estado.html a 390 px: axe sin incumplimientos
- /estado.html a 390 px: carga el widget
- /estado.html a 390 px: enlaza las otras páginas legales
- /estado.html a 390 px: sin scroll horizontal
- /estado.html a 390 px: sin errores JS
- /informe.html a 390 px: axe sin incumplimientos
- /informe.html a 390 px: carga el widget
- /informe.html a 390 px: enlaza las otras páginas legales
- /informe.html a 390 px: sin scroll horizontal
- /informe.html a 390 px: sin errores JS
- /comprobante.html a 390 px: axe sin incumplimientos
- /comprobante.html a 390 px: carga el widget
- /comprobante.html a 390 px: enlaza las otras páginas legales
- /comprobante.html a 390 px: sin scroll horizontal
- /comprobante.html a 390 px: sin errores JS
✓ prueba_sistema.js · 8 comprobaciones · 1 s
Respeta prefers-reduced-motion y prefers-contrast, lee la página en su idioma, cursor grande.
EN 301 549 11.7WCAG 3.1.1WCAG 2.4.7
- prefers-reduced-motion activa pausar animaciones y modo calma
- prefers-contrast: more activa el alto contraste
- si la persona los apagó en el widget, el sistema no los vuelve a encender
- sin preferencias del sistema no se activa nada
- página en español: se lee en español
- página en inglés: el contenido y el panel se leen en inglés
- cursor grande: cursor SVG en la página, los enlaces y el widget, y queda guardado
- al apagarlo vuelve el cursor normal
✓ prueba_barrido.js · 13 comprobaciones · 9 s
Barrido con un solo pulsador: página, teclado por filas y teclas, Escape pausa, el gesto de la cara es la señal.
EN 301 549 11.5ISO 9241-171 §9
- el barrido recorre el botón del widget, el enlace y el botón de la página
- va diciendo en voz alta lo marcado
- la señal (Espacio) activa el botón marcado
- la señal sobre un campo abre el teclado en pantalla
- con el teclado abierto se marcan filas
- la señal sobre la fila pasa a barrer sus teclas desde la primera
- y avanza tecla a tecla
- la señal sobre una tecla la escribe en el campo
- tras escribir vuelve al barrido por filas
- Escape pausa el barrido
- otro Escape lo reanuda
- Winclus.clic()
- apagar el barrido quita las marcas
✓ prueba_barrido2.js · 25 comprobaciones · 114 s
Barrido con dos pulsadores, por zonas, punto de barrido para tocar cualquier sitio, menú de acciones (clic largo, arrastrar, leer, escribir) y aceleración (familia 5).
EN 301 549 11.5WCAG 2.2.1WCAG 2.5.1ISO 9241-171 §9
- con dos pulsadores el marco no se mueve solo
- Espacio
- Intro
- aparece en «Lo que tienes activado»
- con «Barrer por zonas» el marco recorre las zonas
- cada zona se dice en voz alta
- al elegir la zona «pie» se barren solo sus dos enlaces
- dos vueltas sin elegir y vuelve a las zonas
- con «Poder tocar cualquier punto» aparece el botón «Cualquier punto»
- al elegirlo baja una línea horizontal
- la señal la fija y cruza una vertical
- la segunda señal hace clic en ese punto
- y el barrido sigue después
- al elegir un botón sale el menú de acciones en vez del clic
- «Leer» lo lee en voz alta y cierra el menú
- «Clic largo» mantiene pulsado unos 0,7 s y luego hace clic
- Escape cierra el menú sin pausar el barrido
- en un campo la primera acción es «Escribir»
- «Arrastrar» pulsa sobre el elemento y abre el punto de barrido para soltar
- y suelta
- con «Acelerar solo» arranca en el tiempo puesto
- cada acierto baja el tiempo
- una vuelta entera sin elegir lo sube
- nunca baja de la mitad del ajuste
- sin errores JS
✓ prueba_auditiva.js · 10 comprobaciones · 8 s
Aviso visual de sonido, subtítulos mostrados y agrandados, subtítulos en vivo, Centro de Relevo y diccionario LSC.
WCAG 1.2.2WCAG 1.3.3WCAG 1.4.2Res. 1519 CC2
- un audio de la página muestra el aviso con su nombre
- un audio creado por código
- con el aviso apagado no aparece nada
- se muestra la pista de subtítulos del idioma de la página y se apaga la otra
- hay regla ::cue en el documento (subtítulos grandes con fondo) y la clase está puesta
- la barra de subtítulos en vivo muestra lo reconocido en letra grande
- al parar, la barra desaparece
- la sección avisa de que la voz va a Google o Microsoft
- hay botones al Centro de Relevo y al diccionario de LSC
- el diccionario abre educativo.insor.gov.co en otra pestaña
✓ prueba_voz.js · 12 comprobaciones · 7 s
«Números» y «clic 12», dictado con confirmación.
EN 301 549 11.5WCAG 2.5.1
- «números» pone etiquetas 1, 2, 3… sobre lo que se puede pulsar
- «clic 2» pulsa el botón que lleva el 2
- tras pulsar, los números se quitan
- «escribe en cinco»
- «quita los números» los quita
- lo dictado se muestra para confirmar y aún no se escribe
- otra frase sustituye a la pendiente
- «sí» escribe la frase pendiente en el campo
- «no» descarta la frase pendiente
- el botón «Escribir» también confirma
- sin confirmación se escribe directamente
- sin errores JS
✓ prueba_formularios.js · 12 comprobaciones · 2 s
«Campo N de M», errores en lenguaje claro con foco, pegar siempre permitido.
WCAG 3.3.1WCAG 3.3.3WCAG 3.3.7WCAG 3.3.8Res. 1519 CC25
- al entrar en un campo dice cuál es, cuántos hay y si es obligatorio
- los desplegables también cuentan
- al enviar con errores los cuenta
- explica el mínimo de caracteres con lo que llevas
- explica el campo vacío obligatorio
- usa el title del sitio para el patrón
- el foco va al primer campo con error
- explica un correo mal escrito
- aria-invalid del sitio se anuncia con su explicación
- se puede pegar en un campo con onpaste="return false"
- se puede pegar aunque un manejador del sitio haga preventDefault
- con la ayuda apagada el sitio vuelve a mandar
✓ prueba_perfil_enlace.js · 5 comprobaciones · 1 s
El perfil viaja en un enlace sin cuentas ni servidores y un enlace roto no rompe nada.
EN 301 549 11.7
- el botón copia un enlace con #winclus=…
- en un navegador limpio se importan los ajustes y quedan guardados
- las frases también viajan
- el enlace se limpia y los ajustes se aplican
- un enlace roto avisa y no rompe nada
✓ prueba_pictogramas.js · 12 comprobaciones · 7 s
Tablero ARASAAC: frase con voz, predicción aprendida, frases guardadas, barrido dentro.
ISO 24751CAA
- el tablero se abre con categorías y pictogramas
- de fábrica, los dibujos son de Mulberry y OpenMoji
- todos los dibujos de la categoría cargan
- tras «quiero» sugiere agua, comer…
- cada pictograma se dice al tocarlo y forma la frase
- «Decir» dice la frase entera
- «Enviar por WhatsApp» y «Enviar por correo» abren la frase lista para mandar
- la predicción aprende del uso: «agua» pasa a ser la primera
- «Guardar frase» la pone en «Mis frases» y en las frases del teclado
- con el tablero abierto, el barrido recorre sus botones
- con «Dibujos: ARASAAC» los pictogramas son de ARASAAC y se atribuye su licencia no comercial
- sin errores JS
✓ prueba_pictogramas2.js · 29 comprobaciones · 7 s
CAA (familia 4): vocabulario nuclear por colores, frases con el verbo conjugado y género, historial, búsqueda en ARASAAC, tableros propios con fotos compartibles por archivo y enlace, tablero con dos pulsadores y con el puntero facial.
ISO 24751CAAEN 301 549 11.5
- el tablero tiene cinco vistas: Temas, Palabras, Todas
- «Palabras»: ocho grupos gramaticales con color
- el vocabulario nuclear tiene más de 300 palabras
- Winclus.pulir() conjuga el primer verbo según el sujeto y concuerda los adjetivos
- con «Cuando hablo de mí: en femenino», «contento» pasa a «contenta» y «triste» no cambia
- en la tira de la frase se ve cómo se dirá
- «Decir» dice la frase bien dicha
- con «Frases bien dichas» apagado se dice tal cual
- sin frase, salen primero las frases más dichas
- tocar una frase del historial la dice
- «Buscar» pide a ARASAAC y muestra los dibujos encontrados
- un dibujo encontrado se añade a la frase
- «Míos» explica cómo empezar cuando no hay tableros
- «Añadir dibujo de ARASAAC» lleva al buscador en modo añadir
- el tablero «Mi casa» tiene la palabra y el dibujo de ARASAAC, y se guarda
- una foto se reduce y se guarda dentro del tablero como JPEG pequeño
- los dibujos del tablero propio se usan en la frase
- «Quitar dibujos» y tocar uno lo quita
- «Compartir tablero» guarda un archivo .tablero.json
- un enlace con tablero lo carga en otro navegador y el enlace se limpia
- el archivo de perfil .winclus incluye los tableros propios
- con dos pulsadores, Espacio recorre el tablero e Intro elige el dibujo
- el clic del puntero facial
- en «Mi casa» se añade una carpeta que lleva a «Comida»
- tocar la carpeta abre «Comida»
- «Volver» regresa a «Mi casa»
- la carpeta se guarda con su destino
- de fábrica «Buscar» busca en los dibujos de Winclus sin salir de la página
- sin errores JS
✓ prueba_lector.js · 30 comprobaciones · 9 s
Lector de pantalla completo dentro de la página (familia 2): zonas, tablas celda a celda con cabeceras, listas, casillas, encabezados por nivel, letra a letra y palabra a palabra, deletrear, lectura continua, buscar, modo formulario, roles y estados, regiones vivas, verbosidad y tono.
WCAG 1.3.1WCAG 4.1.2WCAG 4.1.3WCAG 2.4.1EN 301 549 11.5
- al activarse dice cuántos encabezados, enlaces y zonas hay
- d va a la primera zona y dice su nombre y cuántos elementos tiene
- d avanza por las zonas
- t va a la tabla y dice su título, filas y columnas
- Ctrl+Alt+flechas van por las celdas diciendo fila, columna y cabeceras
- en el borde de la tabla lo dice
- a va a la lista y dice cuántos elementos tiene
- c va a la casilla y dice su estado, que es obligatoria y su descripción
- Intro la marca y se lee el nuevo estado
- 1 a 6 van al encabezado de ese nivel
- un botón con aria-expanded se anuncia como contraído
- y tras pulsarlo, expandido
- un campo con aria-invalid se anuncia como no válido
- en un campo, Escape sale del modo formulario
- un botón desactivado se anuncia como no disponible
- flecha abajo llega al párrafo
- ← → leen letra a letra y nombran los signos
- Ctrl+← → leen palabra a palabra
- s deletrea la palabra actual
- Inicio va al principio
- r lee todo desde aquí, bloque a bloque, y el resaltado sigue a la voz
- Escape para la lectura continua
- Ctrl+F abre el buscador del lector con el foco en la caja
- Intro busca sin acentos ni mayúsculas y lleva al bloque
- Escape cierra el buscador
- lo que cambia en aria-live y en las alertas se dice solo
- tres niveles de verbosidad: mucho, normal y poco
- «Tono de la voz» cambia el tono
- el panel tiene «Cuánto explica el lector» y «Tono de la voz»
- sin errores JS
✓ prueba_familias36.js · 11 comprobaciones · 6 s
Guiños e inclinación de la cabeza como gestos asignables (familia 3); colores por tipo de palabra, resumen en tres frases y preguntas de comprobación en la lectura fácil (familia 6).
WCAG 3.1.5COGAEN 301 549 11.5
- el guiño es un ojo cerrado con el otro abierto; un parpadeo de los dos ojos no cuenta
- la inclinación de la cabeza sale del ángulo entre los ojos, a cada lado, y sin cara vale 0
- los cuatro gestos nuevos se asignan en la pestaña Clics
- el gesto nuevo admite una acción
- Winclus.tipoPalabra() distingue nombres
- «Tipos de palabra» colorea nombres, acciones y cualidades en la lectura limpia, con leyenda y sin cambiar el texto
- volver a pulsarlo quita los colores y la leyenda
- «Explicar en fácil» añade «En tres frases» y preguntas con una palabra tapada
- «Ver respuesta» enseña la palabra
- el resumen elige las tres frases con más palabras de peso y las deja en su orden
- sin errores JS
✓ prueba_familia3_widget.js · 11 comprobaciones · 1 s
Calibración ocular de 9, 13 o 25 puntos con compensación de cabeza medida, puntero de otro rastreador con clics por cámara y enlace a NVDA (familia 3 en el widget).
EN 301 549 11.5ISO 9241-171 §9
- la calibración tiene 9, 13 o 25 puntos distintos según «Rápida», «Normal» o «Completa»
- el panel tiene las opciones de calibración y «Otro aparato mueve el puntero»
- el botón de calibrar dice cuánto tarda según el modo
- el modelo ocular se ajusta a los 13 puntos
- la compensación de cabeza se aprende mirando al centro y mide su mejora
- con la cabeza desplazada, sin compensar el puntero se va y con ella vuelve al centro
- si mover la cabeza no explica el error, la compensación no se guarda
- sin cámara activa, el ratón no toca el puntero virtual
- «Otro aparato mueve el puntero» se enciende, se guarda y se apaga desde el panel
- en Windows, el lector ofrece descargar NVDA
- sin errores JS
✓ prueba_gestos.js · 10 comprobaciones · 0 s
Los gestos de la cara no se disparan al hablar o bostezar: la rueda por gesto tarda en arrancar y empieza despacio, se explica la primera vez y se pueden apagar todos sin perder el clic.
EN 301 549 11.5WCAG 2.5.1WCAG 3.2.5
- abrir la boca menos de medio segundo
- medio segundo largo, tampoco
- un segundo con la boca abierta empieza a bajar, y despacio
- cuanto más se mantiene, más baja
- la primera vez explica por qué se mueve y cómo apagarlo
- y lo pone también en la etiqueta del puntero
- con «Usar los gestos de la cara» apagado, la boca ya no mueve la página
- pero si haces clic con la boca, el clic sigue funcionando con los gestos apagados
- el interruptor está en la pestaña Clics y viene encendido
- sin errores JS
✓ prueba_bordes.js · 13 comprobaciones · 1 s
Bajar y subir la página llevando el puntero de la cara o los ojos al borde de la pantalla, con aviso en pantalla y voz.
EN 301 549 11.5WCAG 2.5.1
- pasar por el borde menos de 0,35 s no mueve la página
- el puntero pegado al borde de abajo baja la página y sale la banda «Bajando»
- la primera vez lo dice con voz
- menos pegado al borde baja más despacio
- al apartar el puntero del borde se para y la banda desaparece
- en el borde de arriba sube
- con «Bajar y subir llevando el puntero al borde» apagado no pasa nada
- el interruptor está en la pestaña Cara, encendido por defecto, y el texto de la cámara explica cómo bajar
- la franja es el 12 % de la altura
- la franja empieza dentro de lo que alcanza la mirada calibrada
- a 90 px del borde ya baja
- las señales «▼ Bajar» y «▲ Subir» existen y están ocultas sin cámara
- sin errores JS
✓ prueba_elegir.js · 37 comprobaciones · 1 s
Elegir con los ojos sin tener que acertar: cuando hay varias cosas cerca del puntero se pregunta cuál (con su nombre y qué es), los desplegables enseñan todas sus opciones de una vez, se marca lo que se va a pulsar, el puntero llega a los bordes de la pantalla y, si el gesto de clic no sale, se ofrece otro.
WCAG 2.5.1WCAG 2.5.5WCAG 3.3.2EN 301 549 11.5ISO 9241-171 §9
- con dos enlaces cerca, sale la lista «¿Cuál de estos?»
- la lista trae los enlaces por su nombre y el más cercano va primero
- cada opción dice qué es
- mientras se elige no se ha pulsado nada todavía
- al elegir «Cancelar» se pulsa ese enlace y no el otro
- la lista se cierra al elegir
- con una sola cosa cerca no se pregunta: se va a ella
- el clic acaba en el botón aunque el puntero cayera fuera
- en un sitio sin nada pulsable no sale lista ni se pulsa nada por inercia
- al pulsar el desplegable sale su lista con la etiqueta del campo
- están TODAS las opciones, no solo la siguiente
- elegir Cartagena deja ese valor y dispara «change» una sola vez
- el desplegable queda en la opción elegida
- y se dice en voz alta lo que se eligió
- entre «Ciudad»
- lo que hay bajo el puntero se marca con un marco
- al irse el puntero, la marca desaparece
- con «Preguntar cuál» apagado no sale la lista
- candidatosCerca encuentra los enlaces pegados
- la lista está abierta
- Escape la cierra sin pulsar nada
- mirar al centro sigue siendo el centro
- lo que la calibración deja en el 92 % llega ahora al borde
- y no se sale de la pantalla
- con el ajuste apagado, el puntero se queda donde se quedaba
- tras un rato moviendo el puntero sin pulsar, Winclus lo pregunta
- ofrece las otras formas de pulsar, no la que ya está puesta
- al elegirla, el clic pasa a ser quedarse quieto
- y no vuelve a preguntar en la misma sesión
- de fábrica, el menú pide 1,2 s con los ojos cerrados
- si tus clics duran ~1 s, el menú se aparta solo por encima de eso
- con «Abrir el menú cerrando los ojos» apagado, no se abre nunca
- y si pides 2,5 s, se respeta
- tras abrirse dos veces sin elegir nada, pregunta si se abre sin querer
- ofrece apagarlo o pedir más tiempo
- al elegir «más tiempo», el menú pasa a pedir 2,5 s
- sin errores JS en toda la prueba
✓ prueba_seguir_camara.js · 11 comprobaciones · 42 s
La cámara sigue encendida al pasar de una página a otra: quien no tiene manos no pierde el control a cada enlace. Se reanuda solo con consentimiento, permiso del navegador ya concedido y la cámara encendida al salir; lo dice en pantalla y en voz; apagarla a mano, el interruptor o «Restablecer todo» lo impiden.
WCAG 2.1.1EN 301 549 11.5Ley 1581/2012 art. 5
- al entrar por primera vez la cámara no se enciende sola
- tras seguir un enlace, la cámara vuelve a encenderse sola
- y se ve en pantalla «Cámara encendida otra vez, como la dejaste.»
- y lo dice en voz alta, con cómo apagarla
- al recargar la página, también
- si la apagas con «Apagar cámara», la página siguiente no la enciende
- con el interruptor apagado, la cámara no se reanuda
- «Restablecer todo» borra el recuerdo de la cámara
- sin el consentimiento de Winclus no se enciende sola
- si el navegador no ha concedido ya el permiso, no se enciende ni se pregunta
- sin errores de JavaScript
✓ prueba_facil.js · 19 comprobaciones · 7 s
«Explicar en fácil» por reglas y con IA, resaltado palabra a palabra, «¿Dónde estoy?».
WCAG 3.1.5WCAG 2.4.8COGA
- «¿Dónde estoy?» dice título, ruta, encabezados y avance
- hay resumen: de qué va y lo más importante
- la jerga se cambia por palabras corrientes
- las palabras cambiadas llevan el término original y su explicación
- no quedan frases de más de 30 palabras
- las listas de requisitos se mantienen como pasos y con palabras claras
- el botón pasa a «Ver el original»
- al cambiar palabras, el artículo y la preposición concuerdan
- la versión por reglas lleva la revisión con las pautas y no pierde datos
- y dice que no la revisaron personas
- «Ver el original» devuelve el texto tal cual
- al leer, la palabra que suena se resalta
- se envía el texto de la página al servicio configurado
- se muestra la explicación del servicio con aviso de IA (Resumen
- arreglos seguros en lo que dice la IA: porcentaje, romano y abreviaturas
- la revisión avisa
- marca las frases con avisos y no las que están bien
- si el servicio falla, se usan las reglas
- sin errores JS
✓ prueba_auditar.js · 17 comprobaciones · 17 s
Winclus Audit: informe por criterio de la Res. 1519 (cada hallazgo con su número y nombre oficial) y borrador de declaración; detecta CAPTCHA con desafío o de imagen y sesiones que caducan sin aviso, y no confunde los invisibles ni los temporizadores inofensivos.
Res. 1519 Anexo 1Res. 1519 CC1Res. 1519 CC19Res. 1519 CC29WCAG 2.2.1
- el escáner termina bien
- genera informe.html, declaracion.html y resultados.json
- genera el informe de conformidad (ACR, plantilla VPAT 2.5) en HTML y Markdown con los tres estados
- la portada de winclus.com sale limpia
- la página mala cae en alt, título, idioma, etiqueta y contraste
- las comprobaciones de la Res. 1519 detectan vídeo sin subtítulos, sin declaración y sin «ir al contenido»
- el informe agrupa por criterio de la Res. 1519 y avisa de sus límites
- cada CC lleva el nombre que tiene en el Anexo 1 de la Resolución 1519
- cada hallazgo lleva el número y el nombre oficial de su criterio
- un CAPTCHA con casilla se marca como barrera seria en CC1 y dice cómo quitarlo
- un CAPTCHA de imagen con letras se marca como crítico en CC29
- un temporizador que cierra la sesión a los 15 min se marca en CC19 con lo que exige la WCAG 2.2.1
- un CAPTCHA invisible solo se señala para revisar, y un temporizador que no cierra nada no se marca
- un reCAPTCHA con casilla dibujado desde JavaScript
- la portada de winclus.com no da falsos positivos de CAPTCHA ni de tiempo
- la revisión manual pide probar un trámite completo
- el borrador de declaración lleva la entidad, la norma, el estado y los huecos por rellenar
✓ prueba_cc1519.js · 26 comprobaciones · 8 s
Verificación de winclus.com contra los 32 criterios de cumplimiento del Anexo 1 de la Resolución 1519 de 2020, uno por uno y con la numeración del anexo: alternativas, vídeos, ampliación, contraste, identificación coherente, estructura, tablas y listas, saltar bloques, marcado, múltiples vías, navegación coherente, orden, tabulación, foco, audio automático, tiempos, movimiento, refresco, títulos, campos, enlaces, idioma, codificación y teclado. Lo que ninguna máquina puede juzgar se marca como revisión humana en vez de darlo por bueno.
Res. 1519/2020 Anexo 1 (CC1 a CC32)WCAG 2.1 AALey 1712/2014 art. 8
- CC1 Alternativa texto para elementos no textuales
- CC2 Complemento para vídeos o multimedia
- CC3 Guion para solo vídeo y solo audio
- CC4 Textos e imágenes ampliables y en tamaños adecuados
- CC5 Contraste de color suficiente
- CC7 Identificación coherente
- CC8 Todo documento y página organizado en secciones
- CC9 Contenedores como tablas y listas usados correctamente
- CC10 Permitir saltar bloques que se repiten
- CC11 Lenguaje de marcado bien utilizado
- CC12 Permitir encontrar las páginas por múltiples vías
- CC13 Navegación coherente
- CC14 Orden adecuado de los contenidos si es significativo
- CC16 Orden adecuado de los elementos al navegar con tabulación
- CC17 Foco visible al navegar con tabulación
- CC18 No utilizar audio automático
- CC20 Permitir control de contenidos con movimiento y parpadeo
- CC21 No generar actualización automática de páginas
- CC22 No generar cambios automáticos al recibir el foco o entradas
- CC23 Utilice textos adecuados en títulos, páginas y secciones
- CC24 Utilice nombres e indicaciones claras en campos de formulario
- CC26 Enlaces adecuados
- CC27 Idioma
- CC31 Desde una letra hasta un elemento complejo utilizable
- CC32 Manejable por teclado
- JS Sin errores de JavaScript en ninguna página
✓ prueba_documentos.mjs · 21 comprobaciones · 0 s
Capítulo 3.3 del Anexo 1 (documentos PDF): los PDF de winclus.com están etiquetados, con idioma, título, encabezados sin saltos, listas, texto alternativo en todas las figuras, texto real, índice y sin restricciones para lectores de pantalla.
Res. 1519 Anexo 1 cap. 3PDF/UAWCAG 1.1.1
- winclus.com publica 2 PDF: guia-winclus.pdf, manual-winclus.pdf
- guia-winclus.pdf: etiquetado
- guia-winclus.pdf: idioma principal declarado
- guia-winclus.pdf: título del documento en sus propiedades
- guia-winclus.pdf: estructura por encabezados, con un solo H1 y sin saltar niveles
- guia-winclus.pdf: las listas están etiquetadas como listas con sus elementos
- guia-winclus.pdf: todas las figuras tienen texto alternativo
- guia-winclus.pdf: el texto es texto de verdad, no una imagen escaneada
- guia-winclus.pdf: índice navegable
- guia-winclus.pdf: la seguridad no impide la lectura con lectores de pantalla
- guia-winclus.pdf: los campos de formulario están identificados
- manual-winclus.pdf: etiquetado
- manual-winclus.pdf: idioma principal declarado
- manual-winclus.pdf: título del documento en sus propiedades
- manual-winclus.pdf: estructura por encabezados, con un solo H1 y sin saltar niveles
- manual-winclus.pdf: las listas están etiquetadas como listas con sus elementos
- manual-winclus.pdf: todas las figuras tienen texto alternativo
- manual-winclus.pdf: el texto es texto de verdad, no una imagen escaneada
- manual-winclus.pdf: índice navegable
- manual-winclus.pdf: la seguridad no impide la lectura con lectores de pantalla
- manual-winclus.pdf: los campos de formulario están identificados
✓ prueba_sdk.js · 11 comprobaciones · 1 s
Web component, guía de integración, plugin de WordPress y módulo de Drupal.
Integración
- <winclus-widget> carga widget.js del mismo origen
- los atributos pasan como data-*
- posicion="izquierda" pone el botón a la izquierda
- camara="no" y relevo="no" se aplican
- sin errores JS
- la guía de integración cubre versión fija, CSP, web component, WordPress, Drupal, GOV.CO, IA y Winclus Audit
- el plugin de WordPress tiene cabecera, encola el script con data-* y ajustes
- el módulo de Drupal pone el panel en todas las páginas y tiene pantalla de ajustes
- la primera línea que da integrar.html es widget.js
- Drupal carga por defecto widget.js
- WordPress trae por defecto «Siempre la última»
✓ prueba_idiomas.js · 8 comprobaciones · 1 s
Panel en inglés en páginas en inglés, data-ui, idiomas añadidos por el sitio.
WCAG 3.1.1WCAG 3.1.2
- en una página en inglés el panel sale en inglés
- el modo fácil también
- los avisos se traducen
- la voz del panel habla en inglés con voz en inglés
- data-ui="es" fuerza el español
- un idioma añadido con WinclusIdiomas se usa, y lo no traducido queda en español
- sin diccionario para el idioma de la página, el panel sale en español
- sin errores JS
✓ prueba_maximo.js · 13 comprobaciones · 2 s
Limitador de volumen, voz neuronal preferida, asistente «¿Qué quieres hacer?», transcribir un medio.
WCAG 1.4.2COGA
- ningún medio pasa del volumen máximo
- sin voz elegida, usa la neuronal de es-CO
- el panel muestra la voz neuronal como actual
- la caja «¿Qué quieres hacer?» está en el modo fácil y en la pestaña Inicio
- «no veo bien» agranda el texto y sube el contraste
- «no oigo» activa avisos y subtítulos
- «solo puedo pulsar un botón» activa el barrido
- «no puedo hablar» abre los pictogramas
- «quiero contactarlos» pulsa el enlace de contacto de la página
- lo que no sabe, lo dice y da ejemplos
- una orden por voz que no es orden va al asistente
- «Transcribir» abre los subtítulos en vivo, arranca el reconocedor y quita el silencio al medio
- sin errores JS
✓ prueba_evidencia.js · 10 comprobaciones · 16 s
La demostración pública pasa axe; las cifras de uso se cuentan en local, el resumen no lleva datos personales y solo se envían al sitio si la persona lo activa.
Ley 1581/2012Evidencia de uso
- demo.html pasa axe
- la demo tiene los siete pasos
- en la demo el error del formulario se explica en lenguaje claro
- las cifras de uso se cuentan en local
- el resumen copiado solo lleva cifras, sin datos personales (· 1 errores de formulario explicados )
- sin data-metricas no existe siquiera el interruptor de compartir
- sin activar el interruptor no se envía nada aunque pasen los 5 s iniciales
- al activarlo se envían solo sitio, versión, fecha de inicio, cifras y qué opciones del panel se tocan
- no se vuelve a enviar hasta pasada una semana
- sin errores JS
✓ prueba_navegadores.js · 21 comprobaciones · 33 s
En Chromium, Firefox y WebKit: sin síntesis ni reconocimiento de voz, localStorage bloqueado, sin portapapeles, página sin <main>, DOM reemplazado (SPA), script cargado dos veces, móvil.
Robustez
- chromium: recorrido básico
- chromium: sin speechSynthesis ni SpeechRecognition
- chromium: localStorage bloqueado
- chromium: sin clipboard ni vibrate
- chromium: página sin <main> ni encabezados y DOM reemplazado
- chromium: script cargado dos veces
- chromium: móvil 360 px con touch
- firefox: recorrido básico
- firefox: sin speechSynthesis ni SpeechRecognition
- firefox: localStorage bloqueado
- firefox: sin clipboard ni vibrate
- firefox: página sin <main> ni encabezados y DOM reemplazado
- firefox: script cargado dos veces
- firefox: móvil 360 px con touch
- webkit: recorrido básico
- webkit: sin speechSynthesis ni SpeechRecognition
- webkit: localStorage bloqueado
- webkit: sin clipboard ni vibrate
- webkit: página sin <main> ni encabezados y DOM reemplazado
- webkit: script cargado dos veces
- webkit: móvil 360 px con touch
✓ prueba_robustez.js · 16 comprobaciones · 10 s
Regresión de la revisión de código: consentimiento sin localStorage, CSS móvil, voz por trozos, glosario sin HTML anidado, barrido sin lista rancia, perfiles con tipos inválidos, contraseñas protegidas, un solo reconocedor de voz.
Robustez
- sin lookbehind en ninguna regex
- sin localStorage, «Acepto» no vuelve a pedir el consentimiento y sigue con la cámara
- a 375 px el panel cabe en pantalla y aplica las reglas de móvil
- un texto largo se dice por trozos encadenados
- «leer lo que se pulsa» lee un <li>
- lo escrito en un campo de contraseña no se muestra, no se aprende ni se lee
- arrancar las órdenes por voz para el dictado
- un clic por gesto sobre un <select> vacío no lanza error
- el evento paste sigue llegando al manejador del sitio
- un perfil con tipos inválidos, abierto estando ya en la página, se aplica sin dejar NaN ni cadenas
- el barrido va a un ritmo normal aunque el perfil trajera barrido_ms roto
- la voz sigue funcionando con voz_velocidad inválida
- tras cerrar el panel el barrido no marca controles ocultos del panel
- «deberá» y «obligatorio» no generan HTML anidado ni texto roto
- la corrección de color sigue funcionando aunque el sitio reemplace <body>
- sin errores JS en toda la sesión
✓ prueba_rendimiento.js · 4 comprobaciones · 14 s
La inferencia de la cara va a la tasa de la cámara; modo ahorro a 15/s.
Rendimiento
- el navegador avisa de cada cuadro nuevo
- no se infiere más veces que cuadros entrega la cámara
- en modo ahorro se infiere unas 15 veces por segundo
- hay interruptor «Gastar menos batería» (modo ahorro) en el panel
✓ prueba_arreglos.js · 32 comprobaciones · 7 s
Arreglos al vuelo para todas las ayudas técnicas: lang, alt a partir de lo que ya dice la página (nunca inventado), nombres de botones y enlaces con solo un icono, enlaces «aquí» con su contexto, etiquetas de campos, «Saltar al contenido», zona principal, foco visible, zoom permitido, títulos de iframes, cabeceras de tablas y controles en medios que arrancan solos; lo que no se puede arreglar sin riesgo se anota para quien mantiene el sitio; axe encuentra menos de la mitad de incumplimientos.
WCAG 1.1.1WCAG 1.3.1WCAG 1.4.4WCAG 2.4.1WCAG 2.4.4WCAG 2.4.7WCAG 3.1.1WCAG 3.3.2WCAG 4.1.2Res. 1519 CC1Res. 1519 CC10Res. 1519 CC17Res. 1519 CC24Res. 1519 CC26Res. 1519 CC27
- <html> sin lang recibe el idioma del sitio
- el viewport deja ampliar con los dedos
- la zona del contenido se marca como principal
- hay un enlace «Saltar al contenido» al principio que lleva a la zona principal
- el foco vuelve a verse cuando el sitio lo quita con outline:none
- el logo del enlace de inicio recibe alt por el destino del enlace
- una imagen sin alt recibe el nombre del archivo, marcado como provisional
- una imagen sin ninguna pista NO recibe un alt inventado: queda para una persona
- un espaciador de 1×1 se marca decorativo
- el title y el pie de foto pasan a alt
- el enlace «aquí» recibe el texto del párrafo que lo rodea
- el enlace «Leer más» recibe el texto del párrafo
- un enlace a un PDF dice que abre un PDF
- los enlaces que solo llevan un icono reciben nombre por el destino o el icono
- los botones con solo un icono reciben nombre; los que ya tienen texto no se tocan
- los campos sin etiqueta reciben nombre por placeholder, texto de al lado, tipo o name
- el iframe sin título recibe uno por su origen
- la primera fila de una tabla sin <th> se anuncia como cabecera
- un vídeo que arranca solo sin controles recibe controles
- lo que no se puede arreglar sin riesgo queda anotado para quien mantiene el sitio
- la lista para quien mantiene el sitio lleva los arreglos, sus selectores y lo pendiente
- lo que aparece después de cargar también se arregla
- la pestaña Más dice cuántos arreglos hizo, los lista y deja copiarlos
- con data-arreglos="no" el sitio queda tal cual
- axe encuentra menos de la mitad de incumplimientos con los arreglos puestos
- sitio público
- el HTML de la página queda idéntico al de sin arreglos
- la lista para quien mantiene el sitio dice qué falta en el código
- el panel lo explica
- en un dominio .gov.co va en «informe» sin pedirlo
- un sitio público que pide data-arreglos="si" los tiene
- sin errores de JavaScript
✓ prueba_monitor.js · 15 comprobaciones · 36 s
Winclus Monitor: vigilancia continua del sitio con historial, panel, informes con ACR y avisos por webhook cuando aparece una barrera nueva, una página deja de responder, el widget desaparece o se pierde la declaración; páginas del sitemap.
Res. 1519 Anexo 1WCAG 2.1 AAITI VPAT 2.5EN 301 549
- la primera ejecución termina bien
- la portada sale limpia, con widget y con enlace a la declaración
- primera vez: historial de una entrada, sin avisos y sin llamar al webhook
- guarda el informe completo de la ejecución con declaración y ACR
- el ACR sigue la plantilla VPAT 2.5 con los 55 criterios A y AA, la cláusula de la EN 301 549 y sin marcar «Cumple» a secas
- ningún criterio sale como «Cumple» sin la coletilla de evaluación automática
- la segunda ejecución termina bien
- las páginas del sitemap se suman a la lista y las imágenes se ignoran
- la página con barreras se resume por problema, con los de axe y los de la Res. 1519
- avisa de la página nueva con sus problemas y el historial crece
- el webhook recibe el aviso con asunto, lista y entidad
- el panel muestra entidad, avisos, páginas, evolución y enlaces a los informes
- el panel marca en rojo la página sin widget o sin declaración
- sin cambios no hay avisos ni webhook, y el historial sigue creciendo
- avisa de las páginas que salen de la lista y de las que no responden
✓ prueba_botones.js · 28 comprobaciones · 8 s
0.8.0: ocultar imágenes, saturación por grados, estructura de la página (títulos, zonas, enlaces), información al pasar, contraste inteligente (solo los textos que no llegan a 4,5:1, con la lista para el sitio), botón a la izquierda, panel grande y «Avisar de una barrera» por correo o POST.
WCAG 1.4.3WCAG 1.4.13WCAG 2.4.1WCAG 2.4.6WCAG 2.4.10EN 301 549 11.7EN 301 549 12.2
- «Ocultar imágenes» esconde las imágenes del todo y lo dice en «Lo que tienes activado»
- la saturación baja por grados y se aplica como filtro a toda la página
- al volver a 100 no queda ningún filtro
- la estructura lista los títulos con su nivel y sangría
- la pestaña Zonas lista cabecera, menú, contenido, secciones con nombre y pie
- la pestaña Enlaces lista los enlaces de la página
- tocar un título cierra la lista y lleva el foco allí
- al pasar por un botón con solo un icono se ve su aria-label en grande
- muestra el alt de las imágenes y el title de las abreviaturas, y nada donde no hay
- también al llegar con el teclado
- Escape lo quita
- el texto flojo sobre blanco pasa a negro y el flojo sobre oscuro a blanco
- el texto grande que llega a 3:1, el que va sobre una foto y el que ya contrasta no se tocan
- la lista para el sitio anota los textos con poco contraste y su ratio
- el texto que llega después también se contrasta
- al apagarlo vuelven los colores del sitio
- «Izquierda» pasa el botón y el panel al lado izquierdo
- «Panel grande» agranda el panel
- sin texto no se envía nada y se pide escribirlo
- con un enlace de correo de accesibilidad en la página, se abre un correo con la barrera, la página y la versión
- con data-contacto a una URL, el aviso llega por POST con la página, el texto, el navegador y las ayudas activas
- un clic fuera del panel lo cierra
- un clic dentro del panel no lo cierra
- también con el clic del puntero facial fuera del panel
- con el barrido por clic del ratón, el clic es señal y no cierra el panel
- la lista de estructura pasa axe
- la pestaña Más con las secciones nuevas pasa axe
- sin errores de JavaScript
✓ prueba_idiomas2.js · 596 comprobaciones · 16 s
El panel en 99 idiomas con archivo (de portugués a quechua), chino tradicional por la región de la página, pastún de derecha a izquierda: diccionarios completos (889 frases), traídos por el cargador según el idioma de la página, sin que se cuele español; data-ui manda sobre lang.
WCAG 3.1.1EN 301 549 11.7Res. 2893 Anexo 1 4.3.2 b
- idiomas/af.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ak.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/am.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ar.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/as.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ay.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/az.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/be.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/bg.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/bn.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/bs.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ca.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ceb.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/cs.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/cy.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/da.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/de.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/el.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/et.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/eu.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/fa.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/fi.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/fr.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ga.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/gl.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/gn.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/gu.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ha.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/he.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/hi.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/hr.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ht.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/hu.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/hy.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/id.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ig.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/is.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/it.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ja.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ka.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/kk.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/km.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/kn.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ko.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ku.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ky.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/lb.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ln.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/lo.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/lt.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/lv.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/mg.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/mk.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ml.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/mn.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/mr.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ms.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/mt.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/my.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/nb.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ne.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/nl.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/om.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/or.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/pa.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/pl.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ps.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/pt.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/qu.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ro.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ru.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/rw.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/si.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/sk.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/sl.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/sn.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/so.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/sq.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/sr.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/sv.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/sw.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ta.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/te.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/tg.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/th.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ti.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/tk.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/tl.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/tr.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/uk.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/ur.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/uz.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/vi.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/wo.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/xh.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/yo.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/zh.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/zh-hant.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- idiomas/zu.json cubre las 1045 claves del panel, sin huecos ni claves sin traducir
- af: el cargador trae idiomas/af.json y el panel se marca con ese idioma
- af: los títulos del panel salen traducidos
- af: no se cuela español en nombres, ayudas, intros ni situaciones
- af: sin errores de JavaScript
- af: el panel va de izquierda a derecha
- ak: el cargador trae idiomas/ak.json y el panel se marca con ese idioma
- ak: los títulos del panel salen traducidos
- ak: no se cuela español en nombres, ayudas, intros ni situaciones
- ak: sin errores de JavaScript
- ak: el panel va de izquierda a derecha
- am: el cargador trae idiomas/am.json y el panel se marca con ese idioma
- am: los títulos del panel salen traducidos
- am: no se cuela español en nombres, ayudas, intros ni situaciones
- am: sin errores de JavaScript
- am: el panel va de izquierda a derecha
- ar: el cargador trae idiomas/ar.json y el panel se marca con ese idioma
- ar: los títulos del panel salen traducidos
- ar: no se cuela español en nombres, ayudas, intros ni situaciones
- ar: sin errores de JavaScript
- ar: el panel se voltea de derecha a izquierda
- as: el cargador trae idiomas/as.json y el panel se marca con ese idioma
- as: los títulos del panel salen traducidos
- as: no se cuela español en nombres, ayudas, intros ni situaciones
- as: sin errores de JavaScript
- as: el panel va de izquierda a derecha
- ay: el cargador trae idiomas/ay.json y el panel se marca con ese idioma
- ay: los títulos del panel salen traducidos
- ay: no se cuela español en nombres, ayudas, intros ni situaciones
- ay: sin errores de JavaScript
- ay: el panel va de izquierda a derecha
- az: el cargador trae idiomas/az.json y el panel se marca con ese idioma
- az: los títulos del panel salen traducidos
- az: no se cuela español en nombres, ayudas, intros ni situaciones
- az: sin errores de JavaScript
- az: el panel va de izquierda a derecha
- be: el cargador trae idiomas/be.json y el panel se marca con ese idioma
- be: los títulos del panel salen traducidos
- be: no se cuela español en nombres, ayudas, intros ni situaciones
- be: sin errores de JavaScript
- be: el panel va de izquierda a derecha
- bg: el cargador trae idiomas/bg.json y el panel se marca con ese idioma
- bg: los títulos del panel salen traducidos
- bg: no se cuela español en nombres, ayudas, intros ni situaciones
- bg: sin errores de JavaScript
- bg: el panel va de izquierda a derecha
- bn: el cargador trae idiomas/bn.json y el panel se marca con ese idioma
- bn: los títulos del panel salen traducidos
- bn: no se cuela español en nombres, ayudas, intros ni situaciones
- bn: sin errores de JavaScript
- bn: el panel va de izquierda a derecha
- bs: el cargador trae idiomas/bs.json y el panel se marca con ese idioma
- bs: los títulos del panel salen traducidos
- bs: no se cuela español en nombres, ayudas, intros ni situaciones
- bs: sin errores de JavaScript
- bs: el panel va de izquierda a derecha
- ca: el cargador trae idiomas/ca.json y el panel se marca con ese idioma
- ca: los títulos del panel salen traducidos
- ca: no se cuela español en nombres, ayudas, intros ni situaciones
- ca: sin errores de JavaScript
- ca: el panel va de izquierda a derecha
- ceb: el cargador trae idiomas/ceb.json y el panel se marca con ese idioma
- ceb: los títulos del panel salen traducidos
- ceb: no se cuela español en nombres, ayudas, intros ni situaciones
- ceb: sin errores de JavaScript
- ceb: el panel va de izquierda a derecha
- cs: el cargador trae idiomas/cs.json y el panel se marca con ese idioma
- cs: los títulos del panel salen traducidos
- cs: no se cuela español en nombres, ayudas, intros ni situaciones
- cs: sin errores de JavaScript
- cs: el panel va de izquierda a derecha
- cy: el cargador trae idiomas/cy.json y el panel se marca con ese idioma
- cy: los títulos del panel salen traducidos
- cy: no se cuela español en nombres, ayudas, intros ni situaciones
- cy: sin errores de JavaScript
- cy: el panel va de izquierda a derecha
- da: el cargador trae idiomas/da.json y el panel se marca con ese idioma
- da: los títulos del panel salen traducidos
- da: no se cuela español en nombres, ayudas, intros ni situaciones
- da: sin errores de JavaScript
- da: el panel va de izquierda a derecha
- de: el cargador trae idiomas/de.json y el panel se marca con ese idioma
- de: los títulos del panel salen traducidos
- de: no se cuela español en nombres, ayudas, intros ni situaciones
- de: sin errores de JavaScript
- de: el panel va de izquierda a derecha
- el: el cargador trae idiomas/el.json y el panel se marca con ese idioma
- el: los títulos del panel salen traducidos
- el: no se cuela español en nombres, ayudas, intros ni situaciones
- el: sin errores de JavaScript
- el: el panel va de izquierda a derecha
- et: el cargador trae idiomas/et.json y el panel se marca con ese idioma
- et: los títulos del panel salen traducidos
- et: no se cuela español en nombres, ayudas, intros ni situaciones
- et: sin errores de JavaScript
- et: el panel va de izquierda a derecha
- eu: el cargador trae idiomas/eu.json y el panel se marca con ese idioma
- eu: los títulos del panel salen traducidos
- eu: no se cuela español en nombres, ayudas, intros ni situaciones
- eu: sin errores de JavaScript
- eu: el panel va de izquierda a derecha
- fa: el cargador trae idiomas/fa.json y el panel se marca con ese idioma
- fa: los títulos del panel salen traducidos
- fa: no se cuela español en nombres, ayudas, intros ni situaciones
- fa: sin errores de JavaScript
- fa: el panel se voltea de derecha a izquierda
- fi: el cargador trae idiomas/fi.json y el panel se marca con ese idioma
- fi: los títulos del panel salen traducidos
- fi: no se cuela español en nombres, ayudas, intros ni situaciones
- fi: sin errores de JavaScript
- fi: el panel va de izquierda a derecha
- fr: el cargador trae idiomas/fr.json y el panel se marca con ese idioma
- fr: los títulos del panel salen traducidos
- fr: no se cuela español en nombres, ayudas, intros ni situaciones
- fr: sin errores de JavaScript
- fr: el panel va de izquierda a derecha
- ga: el cargador trae idiomas/ga.json y el panel se marca con ese idioma
- ga: los títulos del panel salen traducidos
- ga: no se cuela español en nombres, ayudas, intros ni situaciones
- ga: sin errores de JavaScript
- ga: el panel va de izquierda a derecha
- gl: el cargador trae idiomas/gl.json y el panel se marca con ese idioma
- gl: los títulos del panel salen traducidos
- gl: no se cuela español en nombres, ayudas, intros ni situaciones
- gl: sin errores de JavaScript
- gl: el panel va de izquierda a derecha
- gn: el cargador trae idiomas/gn.json y el panel se marca con ese idioma
- gn: los títulos del panel salen traducidos
- gn: no se cuela español en nombres, ayudas, intros ni situaciones
- gn: sin errores de JavaScript
- gn: el panel va de izquierda a derecha
- gu: el cargador trae idiomas/gu.json y el panel se marca con ese idioma
- gu: los títulos del panel salen traducidos
- gu: no se cuela español en nombres, ayudas, intros ni situaciones
- gu: sin errores de JavaScript
- gu: el panel va de izquierda a derecha
- ha: el cargador trae idiomas/ha.json y el panel se marca con ese idioma
- ha: los títulos del panel salen traducidos
- ha: no se cuela español en nombres, ayudas, intros ni situaciones
- ha: sin errores de JavaScript
- ha: el panel va de izquierda a derecha
- he: el cargador trae idiomas/he.json y el panel se marca con ese idioma
- he: los títulos del panel salen traducidos
- he: no se cuela español en nombres, ayudas, intros ni situaciones
- he: sin errores de JavaScript
- he: el panel se voltea de derecha a izquierda
- hi: el cargador trae idiomas/hi.json y el panel se marca con ese idioma
- hi: los títulos del panel salen traducidos
- hi: no se cuela español en nombres, ayudas, intros ni situaciones
- hi: sin errores de JavaScript
- hi: el panel va de izquierda a derecha
- hr: el cargador trae idiomas/hr.json y el panel se marca con ese idioma
- hr: los títulos del panel salen traducidos
- hr: no se cuela español en nombres, ayudas, intros ni situaciones
- hr: sin errores de JavaScript
- hr: el panel va de izquierda a derecha
- ht: el cargador trae idiomas/ht.json y el panel se marca con ese idioma
- ht: los títulos del panel salen traducidos
- ht: no se cuela español en nombres, ayudas, intros ni situaciones
- ht: sin errores de JavaScript
- ht: el panel va de izquierda a derecha
- hu: el cargador trae idiomas/hu.json y el panel se marca con ese idioma
- hu: los títulos del panel salen traducidos
- hu: no se cuela español en nombres, ayudas, intros ni situaciones
- hu: sin errores de JavaScript
- hu: el panel va de izquierda a derecha
- hy: el cargador trae idiomas/hy.json y el panel se marca con ese idioma
- hy: los títulos del panel salen traducidos
- hy: no se cuela español en nombres, ayudas, intros ni situaciones
- hy: sin errores de JavaScript
- hy: el panel va de izquierda a derecha
- id: el cargador trae idiomas/id.json y el panel se marca con ese idioma
- id: los títulos del panel salen traducidos
- id: no se cuela español en nombres, ayudas, intros ni situaciones
- id: sin errores de JavaScript
- id: el panel va de izquierda a derecha
- ig: el cargador trae idiomas/ig.json y el panel se marca con ese idioma
- ig: los títulos del panel salen traducidos
- ig: no se cuela español en nombres, ayudas, intros ni situaciones
- ig: sin errores de JavaScript
- ig: el panel va de izquierda a derecha
- is: el cargador trae idiomas/is.json y el panel se marca con ese idioma
- is: los títulos del panel salen traducidos
- is: no se cuela español en nombres, ayudas, intros ni situaciones
- is: sin errores de JavaScript
- is: el panel va de izquierda a derecha
- it: el cargador trae idiomas/it.json y el panel se marca con ese idioma
- it: los títulos del panel salen traducidos
- it: no se cuela español en nombres, ayudas, intros ni situaciones
- it: sin errores de JavaScript
- it: el panel va de izquierda a derecha
- ja: el cargador trae idiomas/ja.json y el panel se marca con ese idioma
- ja: los títulos del panel salen traducidos
- ja: no se cuela español en nombres, ayudas, intros ni situaciones
- ja: sin errores de JavaScript
- ja: el panel va de izquierda a derecha
- ka: el cargador trae idiomas/ka.json y el panel se marca con ese idioma
- ka: los títulos del panel salen traducidos
- ka: no se cuela español en nombres, ayudas, intros ni situaciones
- ka: sin errores de JavaScript
- ka: el panel va de izquierda a derecha
- kk: el cargador trae idiomas/kk.json y el panel se marca con ese idioma
- kk: los títulos del panel salen traducidos
- kk: no se cuela español en nombres, ayudas, intros ni situaciones
- kk: sin errores de JavaScript
- kk: el panel va de izquierda a derecha
- km: el cargador trae idiomas/km.json y el panel se marca con ese idioma
- km: los títulos del panel salen traducidos
- km: no se cuela español en nombres, ayudas, intros ni situaciones
- km: sin errores de JavaScript
- km: el panel va de izquierda a derecha
- kn: el cargador trae idiomas/kn.json y el panel se marca con ese idioma
- kn: los títulos del panel salen traducidos
- kn: no se cuela español en nombres, ayudas, intros ni situaciones
- kn: sin errores de JavaScript
- kn: el panel va de izquierda a derecha
- ko: el cargador trae idiomas/ko.json y el panel se marca con ese idioma
- ko: los títulos del panel salen traducidos
- ko: no se cuela español en nombres, ayudas, intros ni situaciones
- ko: sin errores de JavaScript
- ko: el panel va de izquierda a derecha
- ku: el cargador trae idiomas/ku.json y el panel se marca con ese idioma
- ku: los títulos del panel salen traducidos
- ku: no se cuela español en nombres, ayudas, intros ni situaciones
- ku: sin errores de JavaScript
- ku: el panel va de izquierda a derecha
- ky: el cargador trae idiomas/ky.json y el panel se marca con ese idioma
- ky: los títulos del panel salen traducidos
- ky: no se cuela español en nombres, ayudas, intros ni situaciones
- ky: sin errores de JavaScript
- ky: el panel va de izquierda a derecha
- lb: el cargador trae idiomas/lb.json y el panel se marca con ese idioma
- lb: los títulos del panel salen traducidos
- lb: no se cuela español en nombres, ayudas, intros ni situaciones
- lb: sin errores de JavaScript
- lb: el panel va de izquierda a derecha
- ln: el cargador trae idiomas/ln.json y el panel se marca con ese idioma
- ln: los títulos del panel salen traducidos
- ln: no se cuela español en nombres, ayudas, intros ni situaciones
- ln: sin errores de JavaScript
- ln: el panel va de izquierda a derecha
- lo: el cargador trae idiomas/lo.json y el panel se marca con ese idioma
- lo: los títulos del panel salen traducidos
- lo: no se cuela español en nombres, ayudas, intros ni situaciones
- lo: sin errores de JavaScript
- lo: el panel va de izquierda a derecha
- lt: el cargador trae idiomas/lt.json y el panel se marca con ese idioma
- lt: los títulos del panel salen traducidos
- lt: no se cuela español en nombres, ayudas, intros ni situaciones
- lt: sin errores de JavaScript
- lt: el panel va de izquierda a derecha
- lv: el cargador trae idiomas/lv.json y el panel se marca con ese idioma
- lv: los títulos del panel salen traducidos
- lv: no se cuela español en nombres, ayudas, intros ni situaciones
- lv: sin errores de JavaScript
- lv: el panel va de izquierda a derecha
- mg: el cargador trae idiomas/mg.json y el panel se marca con ese idioma
- mg: los títulos del panel salen traducidos
- mg: no se cuela español en nombres, ayudas, intros ni situaciones
- mg: sin errores de JavaScript
- mg: el panel va de izquierda a derecha
- mk: el cargador trae idiomas/mk.json y el panel se marca con ese idioma
- mk: los títulos del panel salen traducidos
- mk: no se cuela español en nombres, ayudas, intros ni situaciones
- mk: sin errores de JavaScript
- mk: el panel va de izquierda a derecha
- ml: el cargador trae idiomas/ml.json y el panel se marca con ese idioma
- ml: los títulos del panel salen traducidos
- ml: no se cuela español en nombres, ayudas, intros ni situaciones
- ml: sin errores de JavaScript
- ml: el panel va de izquierda a derecha
- mn: el cargador trae idiomas/mn.json y el panel se marca con ese idioma
- mn: los títulos del panel salen traducidos
- mn: no se cuela español en nombres, ayudas, intros ni situaciones
- mn: sin errores de JavaScript
- mn: el panel va de izquierda a derecha
- mr: el cargador trae idiomas/mr.json y el panel se marca con ese idioma
- mr: los títulos del panel salen traducidos
- mr: no se cuela español en nombres, ayudas, intros ni situaciones
- mr: sin errores de JavaScript
- mr: el panel va de izquierda a derecha
- ms: el cargador trae idiomas/ms.json y el panel se marca con ese idioma
- ms: los títulos del panel salen traducidos
- ms: no se cuela español en nombres, ayudas, intros ni situaciones
- ms: sin errores de JavaScript
- ms: el panel va de izquierda a derecha
- mt: el cargador trae idiomas/mt.json y el panel se marca con ese idioma
- mt: los títulos del panel salen traducidos
- mt: no se cuela español en nombres, ayudas, intros ni situaciones
- mt: sin errores de JavaScript
- mt: el panel va de izquierda a derecha
- my: el cargador trae idiomas/my.json y el panel se marca con ese idioma
- my: los títulos del panel salen traducidos
- my: no se cuela español en nombres, ayudas, intros ni situaciones
- my: sin errores de JavaScript
- my: el panel va de izquierda a derecha
- nb: el cargador trae idiomas/nb.json y el panel se marca con ese idioma
- nb: los títulos del panel salen traducidos
- nb: no se cuela español en nombres, ayudas, intros ni situaciones
- nb: sin errores de JavaScript
- nb: el panel va de izquierda a derecha
- ne: el cargador trae idiomas/ne.json y el panel se marca con ese idioma
- ne: los títulos del panel salen traducidos
- ne: no se cuela español en nombres, ayudas, intros ni situaciones
- ne: sin errores de JavaScript
- ne: el panel va de izquierda a derecha
- nl: el cargador trae idiomas/nl.json y el panel se marca con ese idioma
- nl: los títulos del panel salen traducidos
- nl: no se cuela español en nombres, ayudas, intros ni situaciones
- nl: sin errores de JavaScript
- nl: el panel va de izquierda a derecha
- om: el cargador trae idiomas/om.json y el panel se marca con ese idioma
- om: los títulos del panel salen traducidos
- om: no se cuela español en nombres, ayudas, intros ni situaciones
- om: sin errores de JavaScript
- om: el panel va de izquierda a derecha
- or: el cargador trae idiomas/or.json y el panel se marca con ese idioma
- or: los títulos del panel salen traducidos
- or: no se cuela español en nombres, ayudas, intros ni situaciones
- or: sin errores de JavaScript
- or: el panel va de izquierda a derecha
- pa: el cargador trae idiomas/pa.json y el panel se marca con ese idioma
- pa: los títulos del panel salen traducidos
- pa: no se cuela español en nombres, ayudas, intros ni situaciones
- pa: sin errores de JavaScript
- pa: el panel va de izquierda a derecha
- pl: el cargador trae idiomas/pl.json y el panel se marca con ese idioma
- pl: los títulos del panel salen traducidos
- pl: no se cuela español en nombres, ayudas, intros ni situaciones
- pl: sin errores de JavaScript
- pl: el panel va de izquierda a derecha
- ps: el cargador trae idiomas/ps.json y el panel se marca con ese idioma
- ps: los títulos del panel salen traducidos
- ps: no se cuela español en nombres, ayudas, intros ni situaciones
- ps: sin errores de JavaScript
- ps: el panel se voltea de derecha a izquierda
- pt: el cargador trae idiomas/pt.json y el panel se marca con ese idioma
- pt: los títulos del panel salen traducidos
- pt: no se cuela español en nombres, ayudas, intros ni situaciones
- pt: sin errores de JavaScript
- pt: el panel va de izquierda a derecha
- qu: el cargador trae idiomas/qu.json y el panel se marca con ese idioma
- qu: los títulos del panel salen traducidos
- qu: no se cuela español en nombres, ayudas, intros ni situaciones
- qu: sin errores de JavaScript
- qu: el panel va de izquierda a derecha
- ro: el cargador trae idiomas/ro.json y el panel se marca con ese idioma
- ro: los títulos del panel salen traducidos
- ro: no se cuela español en nombres, ayudas, intros ni situaciones
- ro: sin errores de JavaScript
- ro: el panel va de izquierda a derecha
- ru: el cargador trae idiomas/ru.json y el panel se marca con ese idioma
- ru: los títulos del panel salen traducidos
- ru: no se cuela español en nombres, ayudas, intros ni situaciones
- ru: sin errores de JavaScript
- ru: el panel va de izquierda a derecha
- rw: el cargador trae idiomas/rw.json y el panel se marca con ese idioma
- rw: los títulos del panel salen traducidos
- rw: no se cuela español en nombres, ayudas, intros ni situaciones
- rw: sin errores de JavaScript
- rw: el panel va de izquierda a derecha
- si: el cargador trae idiomas/si.json y el panel se marca con ese idioma
- si: los títulos del panel salen traducidos
- si: no se cuela español en nombres, ayudas, intros ni situaciones
- si: sin errores de JavaScript
- si: el panel va de izquierda a derecha
- sk: el cargador trae idiomas/sk.json y el panel se marca con ese idioma
- sk: los títulos del panel salen traducidos
- sk: no se cuela español en nombres, ayudas, intros ni situaciones
- sk: sin errores de JavaScript
- sk: el panel va de izquierda a derecha
- sl: el cargador trae idiomas/sl.json y el panel se marca con ese idioma
- sl: los títulos del panel salen traducidos
- sl: no se cuela español en nombres, ayudas, intros ni situaciones
- sl: sin errores de JavaScript
- sl: el panel va de izquierda a derecha
- sn: el cargador trae idiomas/sn.json y el panel se marca con ese idioma
- sn: los títulos del panel salen traducidos
- sn: no se cuela español en nombres, ayudas, intros ni situaciones
- sn: sin errores de JavaScript
- sn: el panel va de izquierda a derecha
- so: el cargador trae idiomas/so.json y el panel se marca con ese idioma
- so: los títulos del panel salen traducidos
- so: no se cuela español en nombres, ayudas, intros ni situaciones
- so: sin errores de JavaScript
- so: el panel va de izquierda a derecha
- sq: el cargador trae idiomas/sq.json y el panel se marca con ese idioma
- sq: los títulos del panel salen traducidos
- sq: no se cuela español en nombres, ayudas, intros ni situaciones
- sq: sin errores de JavaScript
- sq: el panel va de izquierda a derecha
- sr: el cargador trae idiomas/sr.json y el panel se marca con ese idioma
- sr: los títulos del panel salen traducidos
- sr: no se cuela español en nombres, ayudas, intros ni situaciones
- sr: sin errores de JavaScript
- sr: el panel va de izquierda a derecha
- sv: el cargador trae idiomas/sv.json y el panel se marca con ese idioma
- sv: los títulos del panel salen traducidos
- sv: no se cuela español en nombres, ayudas, intros ni situaciones
- sv: sin errores de JavaScript
- sv: el panel va de izquierda a derecha
- sw: el cargador trae idiomas/sw.json y el panel se marca con ese idioma
- sw: los títulos del panel salen traducidos
- sw: no se cuela español en nombres, ayudas, intros ni situaciones
- sw: sin errores de JavaScript
- sw: el panel va de izquierda a derecha
- ta: el cargador trae idiomas/ta.json y el panel se marca con ese idioma
- ta: los títulos del panel salen traducidos
- ta: no se cuela español en nombres, ayudas, intros ni situaciones
- ta: sin errores de JavaScript
- ta: el panel va de izquierda a derecha
- te: el cargador trae idiomas/te.json y el panel se marca con ese idioma
- te: los títulos del panel salen traducidos
- te: no se cuela español en nombres, ayudas, intros ni situaciones
- te: sin errores de JavaScript
- te: el panel va de izquierda a derecha
- tg: el cargador trae idiomas/tg.json y el panel se marca con ese idioma
- tg: los títulos del panel salen traducidos
- tg: no se cuela español en nombres, ayudas, intros ni situaciones
- tg: sin errores de JavaScript
- tg: el panel va de izquierda a derecha
- th: el cargador trae idiomas/th.json y el panel se marca con ese idioma
- th: los títulos del panel salen traducidos
- th: no se cuela español en nombres, ayudas, intros ni situaciones
- th: sin errores de JavaScript
- th: el panel va de izquierda a derecha
- ti: el cargador trae idiomas/ti.json y el panel se marca con ese idioma
- ti: los títulos del panel salen traducidos
- ti: no se cuela español en nombres, ayudas, intros ni situaciones
- ti: sin errores de JavaScript
- ti: el panel va de izquierda a derecha
- tk: el cargador trae idiomas/tk.json y el panel se marca con ese idioma
- tk: los títulos del panel salen traducidos
- tk: no se cuela español en nombres, ayudas, intros ni situaciones
- tk: sin errores de JavaScript
- tk: el panel va de izquierda a derecha
- tl: el cargador trae idiomas/tl.json y el panel se marca con ese idioma
- tl: los títulos del panel salen traducidos
- tl: no se cuela español en nombres, ayudas, intros ni situaciones
- tl: sin errores de JavaScript
- tl: el panel va de izquierda a derecha
- tr: el cargador trae idiomas/tr.json y el panel se marca con ese idioma
- tr: los títulos del panel salen traducidos
- tr: no se cuela español en nombres, ayudas, intros ni situaciones
- tr: sin errores de JavaScript
- tr: el panel va de izquierda a derecha
- uk: el cargador trae idiomas/uk.json y el panel se marca con ese idioma
- uk: los títulos del panel salen traducidos
- uk: no se cuela español en nombres, ayudas, intros ni situaciones
- uk: sin errores de JavaScript
- uk: el panel va de izquierda a derecha
- ur: el cargador trae idiomas/ur.json y el panel se marca con ese idioma
- ur: los títulos del panel salen traducidos
- ur: no se cuela español en nombres, ayudas, intros ni situaciones
- ur: sin errores de JavaScript
- ur: el panel se voltea de derecha a izquierda
- uz: el cargador trae idiomas/uz.json y el panel se marca con ese idioma
- uz: los títulos del panel salen traducidos
- uz: no se cuela español en nombres, ayudas, intros ni situaciones
- uz: sin errores de JavaScript
- uz: el panel va de izquierda a derecha
- vi: el cargador trae idiomas/vi.json y el panel se marca con ese idioma
- vi: los títulos del panel salen traducidos
- vi: no se cuela español en nombres, ayudas, intros ni situaciones
- vi: sin errores de JavaScript
- vi: el panel va de izquierda a derecha
- wo: el cargador trae idiomas/wo.json y el panel se marca con ese idioma
- wo: los títulos del panel salen traducidos
- wo: no se cuela español en nombres, ayudas, intros ni situaciones
- wo: sin errores de JavaScript
- wo: el panel va de izquierda a derecha
- xh: el cargador trae idiomas/xh.json y el panel se marca con ese idioma
- xh: los títulos del panel salen traducidos
- xh: no se cuela español en nombres, ayudas, intros ni situaciones
- xh: sin errores de JavaScript
- xh: el panel va de izquierda a derecha
- yo: el cargador trae idiomas/yo.json y el panel se marca con ese idioma
- yo: los títulos del panel salen traducidos
- yo: no se cuela español en nombres, ayudas, intros ni situaciones
- yo: sin errores de JavaScript
- yo: el panel va de izquierda a derecha
- zh: el cargador trae idiomas/zh.json y el panel se marca con ese idioma
- zh: los títulos del panel salen traducidos
- zh: no se cuela español en nombres, ayudas, intros ni situaciones
- zh: sin errores de JavaScript
- zh: el panel va de izquierda a derecha
- zh-hant: el cargador trae idiomas/zh-hant.json y el panel se marca con ese idioma
- zh-hant: los títulos del panel salen traducidos
- zh-hant: no se cuela español en nombres, ayudas, intros ni situaciones
- zh-hant: sin errores de JavaScript
- zh-hant: el panel va de izquierda a derecha
- zu: el cargador trae idiomas/zu.json y el panel se marca con ese idioma
- zu: los títulos del panel salen traducidos
- zu: no se cuela español en nombres, ayudas, intros ni situaciones
- zu: sin errores de JavaScript
- zu: el panel va de izquierda a derecha
- data-ui="it" manda sobre lang="de"
- un idioma sin diccionario
✓ prueba_cargador.js · 12 comprobaciones · 2 s
Cargador ligero: widget.js pesa unos 3 KB y trae el widget minificado cuando la página ya se pintó, o antes si la persona ya lo usa; pasa data-* y nonce, Alt+Mayús+W lo pide, y cargarlo dos veces no duplica nada.
RendimientoEN 301 549 11.7
- el cargador pesa menos de 6 KB
- cargador, código legible y minificado llevan la misma versión
- el minificado conserva la licencia y dice dónde está el código legible
- el minificado pesa al menos un 25 % menos que el legible
- en DOMContentLoaded solo está el cargador; el widget todavía no
- después de cargar la página llega winclus-widget.min.js del mismo origen y monta el botón
- quien ya usa Winclus no espera: el widget se pide antes de «load» y aplica sus ajustes
- Alt+Mayús+W antes de que llegue el widget lo pide y abre el panel cuando llega
- los atributos data-* y el nonce del <script> pasan al widget completo
- con CSP estricta con nonce no hay violaciones al cargar en dos pasos
- cargar widget.js dos veces no duplica el widget
- sin errores de JavaScript
✓ prueba_familias.js · 27 comprobaciones · 6 s
Paridad con los overlays (familia 1): tipo de letra legible y para dislexia, espacio entre renglones, texto a la izquierda, zoom de toda la página, títulos y foco resaltados, silenciar la página y diccionario al tocar una palabra (glosario del sitio, ARASAAC con dibujo, Wikcionario); sílabas coloreadas en la lectura limpia (familia 6). Aplicados a la página, guardados y reversibles.
WCAG 1.4.8WCAG 1.4.12WCAG 1.4.4WCAG 2.4.7WCAG 1.4.2WCAG 3.1.3
- «Legible» pone Verdana en la página, no en el panel, y se guarda
- «Para dislexia» pide OpenDyslexic desde winclus.com/fuentes
- las fuentes OpenDyslexic (regular y negrita) están en web/fuentes con su licencia OFL
- «Espacio entre renglones» al 150 % da interlineado 1,5 en la página
- «Texto alineado a la izquierda» quita el justificado
- «Zoom de toda la página» al 150 % escala el <body> y el widget sigue dentro de la pantalla
- «Resaltar títulos» pone fondo y borde a los h1–h4 de la página y «Resaltar dónde estás» un marco de 5 px al foco
- «Silenciar la página» silencia lo que hay, lo que arranca después y lo que alguien vuelve a activar
- al apagarlo vuelve el sonido solo a lo que silenció Winclus
- tocar una palabra abre su definición; primero manda el glosario del sitio
- con los dibujos de fábrica, el dibujo es de Mulberry, sin llamar a ARASAAC, y el crédito lo dice
- si el sitio no la tiene, ARASAAC da el significado y el dibujo
- sin dibujo exacto en ARASAAC, la definición viene de Wikcionario
- la ventanita queda dentro de la pantalla, es un diálogo y sus botones miden 44 px
- Escape cierra la definición
- tocar un botón o un enlace no abre el diccionario: siguen funcionando como siempre
- Winclus.definir() usa también el glosario de trámites del widget
- el clic del puntero facial también abre el diccionario
- Winclus.silabear() separa 20 palabras según las reglas del español
- «Sílabas» en la lectura limpia colorea cada sílaba alternando dos colores sin cambiar el texto
- el diccionario también funciona dentro de la lectura limpia, con las sílabas puestas
- volver a pulsar «Sílabas» las quita
- al cerrar la lectura limpia se cierra también la definición que estaba abierta
- «Lo que tienes activado» lista los siete ajustes nuevos
- «Apagar todo lo activado» los quita
- al recargar se aplican los ajustes guardados
- sin errores JS
✓ prueba_aaa.js · 18 comprobaciones · 8 s
Nivel AAA: reglas AAA de axe en el panel y en las 15 páginas, contraste 7:1, objetivos de 44×44, confirmación antes de borrar, colores propios y modo dislexia, glosario, migas de pan, lectura fácil y transcripciones.
WCAG 1.4.6WCAG 1.4.8WCAG 2.5.5WCAG 3.3.6WCAG 3.1.4WCAG 3.1.5WCAG 2.4.8WCAG 1.2.8
- reglas AAA de axe sobre el panel: sin violaciones
- 1.4.6: todo el texto del panel tiene contraste 7:1
- 2.5.5: todos los controles del panel miden al menos 44×44
- «Restablecer todo» no borra a la primera: pregunta, con el foco en «No»
- «No» deja todo como estaba y devuelve el foco al botón
- «Sí, borrar» sí restablece
- los otros tres botones que borran también preguntan
- «Amarillo sobre negro» cambia texto y fondo de toda la página
- «Los que yo elija» muestra los selectores y aplica y guarda el color
- modo dislexia: interlineado 1,5, párrafos a 1,5 veces el interlineado, sin justificar, renglón ≤ 80 caracteres
- reglas AAA de axe sobre las 27 páginas del sitio (contraste 7:1 incluido): sin violaciones
- 2.5.5: enlaces y botones del sitio que no van en línea miden al menos 44 px
- 3.1.4: el glosario está enlazado desde el pie de todas las páginas
- 2.4.8: las páginas interiores llevan migas de pan con aria-current
- 3.1.4: el glosario explica las siglas usadas en el sitio
- 3.1.5: las páginas técnicas y legales empiezan con «En pocas palabras»
- 1.2.8: los cuatro vídeos de la demostración llevan transcripción en texto
- sin errores JS
✓ prueba_entender.js · 28 comprobaciones · 1 s
El panel se entiende sin manual: Inicio con «¿Qué te cuesta?», «Lo que tienes activado» y «Apagar todo», ayuda en palabras corrientes bajo cada opción, ajustes finos plegados, sin jerga, todo traducido.
WCAG 3.1.5WCAG 3.3.2COGAISO 24495-1
- al abrir por primera vez se ve la pestaña Inicio
- hay trece botones por situación
- la caja «¿Qué quieres hacer?» está en Inicio
- sin nada activado lo dice y no ofrece «Apagar todo»
- «Veo poco» agranda el texto y pone contraste
- en Inicio queda escrito qué se ha hecho
- «Lo que tienes activado» lo lista en palabras corrientes y aparece «Apagar todo»
- se pueden sumar situaciones
- «Apagar todo lo activado» deja la página como siempre
- todos los interruptores
- todos los −/+
- cada sección dice para quién es
- hay bloques «Ajustes finos» y todos empiezan cerrados
- los ajustes técnicos
- lo esencial
- ningún nombre visible usa jerga
- los colores y los modos de ojos se nombran como lo diría la persona
- siete pestañas
- en una página en inglés todo el panel (nombres, ayudas, intros, situaciones) sale en inglés
- Inicio en inglés: Start, «I can't see well», «Nothing yet»
- la primera vez la voz dice qué hacer, los botones de situación laten y se abre Inicio
- la bienvenida solo suena la primera vez
- cada situación lleva un icono decorativo
- «Explícame esta página en fácil» abre la lectura limpia desde Inicio
- «Léemelo» en cada sección lee nombre, estado y ayuda de cada opción
- con el barrido a 2 s o más, los interruptores del panel se anuncian con su ayuda
- se cuenta qué se toca del panel
- sin errores JS
✓ prueba_situaciones.js · 24 comprobaciones · 5 s
«¿Qué te cuesta?» se pone y se quita: diez opciones (también «No veo» y «Confundo los colores») que encienden lo que dicen, quedan marcadas con ✓ y al tocarlas otra vez dejan todo como estaba antes; el permiso de la cámara sale en Inicio; el panel se abre sencillo y «Ver más opciones» enseña las pestañas.
WCAG 3.3.2WCAG 4.1.2WCAG 2.1.1Res. 1519 CC25
- el panel se abre en la vista sencilla: sin pestañas, con «Ver más opciones» y «Volver a como estaba» fijos abajo
- hay 13 opciones, con «Me distraigo fácil», «Uso solo el teclado» y «Me pierdo en la página»
- «Veo poco» pone contraste
- al tocarla otra vez se quita y deja la letra en 200 %, como estaba antes
- «No veo» enciende el lector de la página, y al tocarla otra vez se quita
- «Confundo los colores» corrige los colores y subraya los enlaces, y al tocarla otra vez se quita
- «No oigo bien» pone avisos en pantalla y subtítulos grandes, y al tocarla otra vez se quita
- «Solo puedo pulsar un botón» enciende el barrido, y al tocarla otra vez se quita
- «La pantalla me marea» pone el modo calma, y al tocarla otra vez se quita
- «No puedo hablar» abre el tablero de dibujos, y al tocarla otra vez se quita
- «Me cuesta leer o entender» abre la página en fácil, y al tocarla otra vez se quita
- «Me cuesta escribir» abre el teclado en pantalla, y al tocarla otra vez se quita
- «Quitar», en el pie, deshace la última opción
- se pueden sumar varias y al volver a la página siguen marcadas
- «Volver a como estaba» quita todas y lo dice
- si se apaga a mano lo que puso una opción, deja de estar marcada
- «No puedo usar el ratón» enseña el permiso de la cámara en Inicio, con el foco en «Acepto»
- «Ahora no» cierra el permiso, no marca la opción y devuelve el foco a ella
- «Ver más opciones» enseña las pestañas y lleva a Ver
- «Volver a lo sencillo» esconde las pestañas y vuelve a «¿Qué te cuesta?»
- escribir «soy ciego» en la caja enciende «No veo» y lo marca
- «no veo bien» es «Veo poco», no «No veo»
- con el teclado: Intro sobre una opción la pone
- sin errores de JavaScript
✓ prueba_amplificar.js · 10 comprobaciones · 19 s
Para la hipoacusia: subir el volumen por encima de lo normal (medido: 3 veces al 300 %, con limitador para que no se rompa) y «Voz más clara» (quita graves, realza la voz); los audios de otro sitio sin permiso no se tocan, porque sonarían en silencio.
WCAG 1.4.7EN 301 549 7.2Ley 1618/2013 art. 16
- el audio pasa por la cadena de Winclus y suena
- al 300 % sale unas tres veces más fuerte
- al 400 % con un sonido fuerte, el limitador impide que se rompa
- «Voz más clara» quita los graves
- y realza la voz
- un audio de otro sitio sin CORS no se toca, sigue sonando y se avisa de que no se puede subir
- en la pestaña Oír están «Subir el volumen por encima de lo normal» y «Voz más clara», con su ayuda
- «Lo que tienes activado» lo dice
- «Volver a como estaba» lo quita
- sin errores de JavaScript
✓ prueba_temblor.js · 12 comprobaciones · 6 s
Temblor con el ratón de siempre: el clic que cae al lado de un botón lo pulsa (o pregunta cuál), el segundo clic sin querer no cuenta; nunca toca un clic que ya cae en algo pulsable.
WCAG 2.5.8WCAG 2.5.2EN 301 549 11.5
- con la ayuda apagada, un clic al lado del botón no lo pulsa
- con la ayuda encendida, un clic que cae 15 px al lado de «Pagar» pulsa «Pagar»
- si cae entre dos botones, pregunta «¿Cuál de estos?» y no pulsa ninguno
- y al elegir «Borrar» pulsa «Borrar»
- dos clics seguidos sin querer sobre «Pagar» cuentan como uno
- pasado el tiempo, el siguiente clic sí cuenta
- un clic lejos de todo no pulsa nada ni pregunta
- un clic en algo que la página ya hace pulsable
- dos clics de la página (no del ratón) cuentan los dos: solo se filtra el ratón real
- decir «me tiembla la mano» en la caja lo enciende
- el interruptor está en la pestaña Clics, con su ayuda
- sin errores de JavaScript
✓ prueba_ayuda_voz.js · 13 comprobaciones · 10 s
ELA avanzada: «Pedir ayuda» en toda la pantalla sin destellos, que para cualquier tecla o gesto; «Mis frases con mi voz»: la frase grabada suena con la voz de la persona en vez de la sintética, se guarda solo en el navegador y se borra.
WCAG 2.3.1CDPD art. 21Ley 1581/2012
- «Pedir ayuda a quien esté cerca» pone el aviso en toda la pantalla
- el aviso no destella: el color no cambia
- y la voz dice «Necesito ayuda»
- cualquier tecla lo para
- el gesto de clic de la cámara también lo para
- decir «socorro» en la caja también pide ayuda
- se graba «Tengo sed» con el micrófono y sale en la lista
- al decir «tengo sed» suena la grabación con su voz, no la voz sintética
- una frase sin grabar sigue con la voz sintética
- la grabación sigue al volver a la página
- «Borrar» la quita
- «Restablecer todo» borra también las frases con su voz
- sin errores de JavaScript
✓ prueba_atajo_imagenes.js · 14 comprobaciones · 2 s
Alt+Mayúsculas+W abre el panel desde cualquier sitio; las imágenes sin texto alternativo se dicen como tales, con la mejor pista de la página y sin inventar, o con la descripción del servicio del sitio (data-describir); la transcripción de los subtítulos en vivo se guarda en un archivo con la hora de cada frase.
WCAG 2.1.1WCAG 1.1.1Res. 1519 CC1WCAG 1.2.4
- Alt+Mayúsculas+W abre el panel con el foco en la primera opción
- y otra vez lo cierra
- con alt: dice el alt
- con alt vacío: «Imagen decorativa»
- sin alt dentro de una figura: dice que el sitio no la describió y da el pie de foto como pista
- sin alt dentro de un enlace: la pista es el texto del enlace
- sin alt ni texto cerca: la pista sale del nombre del archivo
- si el nombre del archivo no dice nada
- con data-describir, se pide la descripción al servicio del sitio
- y cuando responde, el lector dice esa descripción
- la descripción se guarda: no se vuelve a pedir
- «Guardar lo escrito» aparece cuando hay subtítulos que guardar
- se descarga un .txt con cada frase y su hora
- sin errores de JavaScript
✓ prueba_pdf.js · 8 comprobaciones · 5 s
Los PDF del mismo sitio se abren en la lectura limpia con su texto y su título (pdf.js desde winclus.com); los de otro sitio, como siempre; un PDF escaneado se dice que no tiene texto.
Res. 1519 Anexo 1 cap. 3WCAG 1.4.4Ley 1680/2013
- con el interruptor apagado, el enlace al PDF hace lo de siempre
- con el interruptor, el enlace a un PDF del sitio no navega
- el PDF se abre en la lectura limpia con su título y su texto
- con las herramientas de siempre: leer en voz alta y explicar en fácil
- un PDF de otro sitio se abre como siempre
- un PDF escaneado
- el interruptor está en la pestaña Ver con su ayuda, y «quiero leer los pdf» lo enciende
- sin errores de JavaScript
✓ prueba_mascarilla.js · 5 comprobaciones · 37 s
ELA con ventilación: con una mascarilla oronasal (simulada sobre una cara real) se detecta la cara, el puntero sigue a la cabeza y el parpadeo da la misma señal que sin ella.
EN 301 549 11.5WCAG 2.5.1
- sin mascarilla: cara detectada, puntero al centro y a los dos lados, parpadeo con señal
- con la mascarilla puesta desde el inicio: se detecta la cara, el puntero reposa al centro y sigue a la cabeza a los dos lados
- con la mascarilla puesta desde el inicio: el parpadeo da la misma señal que sin mascarilla
- con la mascarilla puesta después: se detecta la cara, el puntero reposa al centro y sigue a la cabeza a los dos lados
- con la mascarilla puesta después: el parpadeo da la misma señal que sin mascarilla
✓ prueba_alcance.js · 6 comprobaciones · 39 s
ELA que avanza y cansancio: «Ajustar el puntero a lo que puedo mover» mide el movimiento de cabeza que queda y lo hace cruzar la pantalla; si ni al máximo alcanza, propone los ojos o un pulsador.
EN 301 549 11.5WCAG 2.5.1ISO 9241-171 §9
- sin cámara, dice que primero hay que activarla
- con poco movimiento, la medición sube la velocidad
- y ese mismo movimiento pequeño pasa a cruzar la pantalla
- con movimiento mínimo, pone el máximo y propone los ojos o un pulsador
- elegir «Con un pulsador» enciende el barrido
- sin errores de JavaScript
✓ prueba_correo.js · 20 comprobaciones · 1 s
Correo propio: alertas del monitor y avisos de solicitudes con HTML accesible (axe AAA, contraste 7:1) y texto plano, lo del sitio escapado, envío con Resend (simulado: llave, remitente, destinatarios válidos, errores), plantillas de acceso de Supabase en español y el correo conectado al monitor, al workflow y al panel.
WCAG 1.4.6Ley 1581 de 2012
- asunto claro: cuántos avisos y de qué sitio
- HTML con idioma, título y rol de artículo
- lo que viene del sitio se escapa: no se puede inyectar HTML en el correo
- versión en texto plano con todos los avisos, las cifras y el enlace al panel
- explica cómo dejar de recibirlo y da el enlace escrito por si el botón no funciona
- con muchos avisos, pone 20 y remite al panel
- aviso al equipo con los datos de la solicitud
- correo «alerta del monitor» sin incumplimientos de axe, contraste 7:1 incluido
- correo «aviso de solicitudes» sin incumplimientos de axe, contraste 7:1 incluido
- correo «enlace de acceso» sin incumplimientos de axe, contraste 7:1 incluido
- plantilla enlace-acceso.html con el enlace de Supabase (botón y texto) y en español
- plantilla confirmar-cuenta.html con el enlace de Supabase (botón y texto) y en español
- plantilla cambio-correo.html con el enlace de Supabase (botón y texto) y en español
- sin RESEND_API_KEY no envía y lo dice
- envía a Resend con la llave, remitente, HTML y texto, y descarta direcciones no válidas
- sin destinatarios válidos no llama a Resend
- si Resend rechaza, lo informa sin romperse
- el monitor manda la alerta al correo elegido o, si no hay, al de la cuenta
- aviso diario de solicitudes al equipo y secretos en el workflow
- el panel deja elegir el correo de las alertas
✓ prueba_plugins.js · 25 comprobaciones · 4 s
Plugins para WordPress, Drupal, Joomla y PrestaShop listos para las tiendas: versión fija y hash de integridad iguales a los publicados, licencia GPL, clave del sitio, sintaxis PHP, el plugin de WordPress ejecutado con WordPress simulado (etiqueta, opciones y saneado contra inyección), ficha readme.txt con servicios externos y sin promesas, y traducciones al español completas.
WCAG 4.1.2Ley 1581 de 2012
- WordPress: la versión fija es la 0.8.6 y su hash es el de web/widget-0.8.6.js
- Drupal: la versión fija es la 0.8.6 y su hash es el de web/widget-0.8.6.js
- Joomla: la versión fija es la 0.8.6 y su hash es el de web/widget-0.8.6.js
- PrestaShop: la versión fija es la 0.8.6 y su hash es el de web/widget-0.8.6.js
- WordPress: versión del plugin = Stable tag del readme = 0.8.6
- Joomla y PrestaShop llevan la versión 0.8.6
- los cuatro plugins con licencia GPL 2 o posterior
- los cuatro permiten poner la clave del sitio
- sintaxis PHP correcta en los 6 archivos
- WordPress: la etiqueta lleva async, la clave, las opciones y, en versión fija, el hash correcto
- WordPress: no toca los scripts de otros plugins
- WordPress: sin ajustes, la línea de siempre
- WordPress: los ajustes se sanean
- readme.txt con todas las cabeceras que pide WordPress.org
- como mucho 5 etiquetas y descripción corta de 150 caracteres o menos
- secciones Description, Installation, FAQ, External services, Screenshots y Changelog
- la sección de servicios externos dice qué se conecta, qué se envía y enlaza términos y privacidad
- hay icono, banner y una captura por cada pie de foto del readme
- el readme no promete cumplimiento ni protección legal
- el readme dice explícitamente lo que Winclus no es
- WordPress: winclus-es_ES.mo al día con las 29 frases
- WordPress: también en español de Colombia y de México
- Drupal: translations/es.po con las 31 frases
- Joomla: cada texto del formulario existe en inglés y en español
- Joomla: con servidor de actualizaciones
✓ prueba_pagos.js · 30 comprobaciones · 6 s
Cobro de los planes con Wompi: precios con IVA iguales a los publicados, firma de integridad del checkout, eventos de Wompi verificados por firma (los falsos se rechazan), plan activado una sola vez aunque el aviso se repita, montos que no cuadran ignorados; en el panel, pago con la sesión, vuelta de Wompi, cotización u orden de compra para entidades públicas, historial y comprobante que aclara que no es factura electrónica; en la base, nadie puede alargarse el plan.
Ley 1480 de 2011Ley 1581 de 2012WCAG 3.3.4
- Entidad anual: $2.400.000 + IVA $456.000 = $2.856.000
- mensual con el 17 % más, redondeado a miles
- plan o periodo no válido: sin precio
- los precios del servidor son los de winclus.com/precios
- firma de integridad = SHA256(referencia + centavos + moneda + secreto)
- URL del Web Checkout con llave, monto, referencia, firma, regreso y correo
- referencias únicas y legibles
- un evento bien firmado se acepta
- firma equivocada, monto cambiado o evento sin firma: se rechaza
- vigencia: un año o un mes desde hoy
- renovar antes de vencer suma al vencimiento; si ya venció, cuenta desde hoy
- pago aprobado: la cuenta pasa a Entidad hasta el 23-sep-2027
- el mismo evento repetido no suma otro año
- evento con firma falsa: 401 y nada cambia
- monto distinto al del pago: se ignora
- pago rechazado: queda RECHAZADO y el plan no cambia
- GET /api/pago: precios con IVA y aviso de que el pago no está activo
- GET /api/pago dice la versión de los términos, la misma que la página de términos
- POST sin Wompi configurado: 503 y ofrece la cotización
- en la base, cada cuenta solo cambia su nombre y solo lee sus pagos; los pagos los escribe el servidor
- sin Wompi: se ven los precios con IVA, los botones están apagados y ofrece la cotización
- entidad pública: la solicitud de compra
- sin errores JS
- sin marcar «acepto los términos» no se paga: lo dice y lleva a la casilla
- con la casilla marcada, «Pagar Entidad anual» pide el pago con la sesión y la versión de los términos, y lleva al checkout de Wompi
- al volver de Wompi: «Pago aprobado», el plan con su vigencia y la dirección limpia
- historial con el pago aprobado, su comprobante y la solicitud en trámite
- comprobante con valores, IVA, medio de pago y la aclaración de que no es factura electrónica
- sin errores JS
- axe sin incumplimientos en el panel con la sección de pagos abierta
✓ prueba_describir.js · 38 comprobaciones · 7 s
Descripción de imágenes con IA (complemento de pago): solo con el complemento vigente, solo imágenes del propio sitio o de su CDN, una descripción por imagen guardada (no se paga dos veces), cupo del mes, a la IA se le pide no inventar ni reconocer caras y el texto de la página va como dato; el lector la anuncia como «Descripción automática» y no la pone como alt hasta que la entidad la aprueba en el panel, donde se corrige, aprueba, rechaza y descarga para pasarla al código. Claude simulado, sin red.
WCAG 1.1.1Ley 1581 de 2012Ley 1480 de 2011
- activo solo con plan de pago y el complemento vigente
- solo imágenes del dominio del sitio, sus subdominios o su CDN declarado
- SVG y formatos raros no se mandan a la IA
- el cupo cuenta desde el día 1 del mes
- la respuesta se limpia
- a la IA: no inventar, no reconocer caras, el texto de la página es dato
- clave desconocida: 404
- sitio sin el complemento: 402 y no se llama a la IA
- imagen de otro sitio: 403
- SVG: 415
- sin clave de la IA en el servidor: 503 y no se guarda nada
- con todo en orden: describe y responde como «automática», sin aprobar
- a Claude: la imagen por su URL
- se guarda una fila por imagen: automática, con el original de la IA
- la misma imagen otra vez: sale de lo guardado, sin volver a pagar a la IA
- aprobada y corregida en el panel: sale la corrección, ya no «automática»
- rechazada: no se dice nada
- imagen del CDN declarado: se acepta; la IA la ve decorativa y no se dice nada
- si la IA no puede abrir la imagen: 422 y no se guarda
- cupo del mes agotado: 429 sin llamar a la IA
- con DESCRIBIR_MODELO se puede usar otro modelo
- precio: $960.000 al año o $94.000 al mes, más IVA
- winclus.com/precios publica el mismo precio, el cupo y que se anuncia como automática
- pagar el complemento lo activa un año y no toca el plan
- en la base: la entidad solo revisa (texto, estado); las descripciones y el complemento los escribe el servidor
- automática: el lector dice «Descripción automática: …» y NO la pone como alt
- aprobada por la entidad: se dice sin aviso y se pone como alt para todos los lectores
- sin descripción
- «Descripción automática» está en los 99 diccionarios del panel
- sin errores JS en el widget
- «Tu plan»: el complemento aparte, activo con su vigencia y para renovar; los planes siguen siendo 4
- pestaña «Imágenes»: por defecto lo que falta revisar; el interruptor listo para activarlo
- activar: el sitio apunta al servicio de Winclus con su clave, guarda el CDN limpio y no pierde la marca
- aprobar con corrección: manda solo texto, estado y fecha de revisión
- guardar «Panel con tu marca» después no borra lo de imágenes
- descargar la lista: CSV con imagen y alt para pasarlo al código
- axe sin incumplimientos en la pestaña «Imágenes»
- sin errores JS en el panel
✓ prueba_asistente_nube.js · 17 comprobaciones · 1 s
Asistente de voz de la app en la nube: la app pregunta a winclus.com y el servidor usa Claude con sus propias instrucciones y herramientas (las mismas de la app, nunca las de quien llama), con licencia, cupo del mes y tope por equipo; sin clave responde 503 sin gastar cupo; no guarda lo que se pide ni la pantalla y la política de privacidad lo explica. Claude simulado, sin red.
Ley 1581 de 2012Ley 1480 de 2011
- el servidor usa las mismas instrucciones y herramientas que la app
- sin clave de licencia: 401
- sin identificador de equipo: 400
- conversación: empieza por la persona, sin mensajes de sistema, sin imágenes sueltas, 60 mensajes y 120 KB como mucho
- sin clave de Claude en el servidor: 503 y no gasta cupo
- licencia desconocida: 401 sin llamar a Claude
- licencia vencida o apagada: 402
- tope diario del equipo: 429 y lo dice claro
- devuelve lo que decidió Claude tal cual (con el razonamiento firmado, que la app reenvía) y el uso del cupo
- cuenta un paso contra la licencia y el equipo
- a Claude van las instrucciones y herramientas del servidor, no las que mandó la app
- la conversación pasa igual, con esfuerzo bajo y respaldo si Claude se niega
- «Leer la pantalla»: describe la pantalla (con la captura) sin herramientas
- una captura demasiado grande se rechaza
- si Claude está saturado, lo dice
- en la base: solo el servidor cuenta el uso y no hay columnas para lo que se pidió ni la pantalla
- winclus.com/privacidad explica el asistente en la nube
✓ prueba_comprador.js · 27 comprobaciones · 6 s
Lo que espera quien compra: novedades con RSS al día con la versión, estado del servicio comprobado en vivo con registro de incidentes, informe del sitio listo para PDF (por criterio de la Res. 1519, evolución, capturas, uso y lo que el informe no es) con CSV, y en el panel de cliente primeros pasos que se marcan solos, ayuda en cada pestaña y aviso de novedades.
Res. 1519 de 2020 Anexo 1WCAG 2.4.3WCAG 3.3.5
- la última novedad es la versión actual del widget
- cada entrada tiene versión, fecha, título y puntos, de la más nueva a la más vieja
- novedades.html y novedades.xml están al día con el JSON
- la página anuncia el RSS
- el RSS es XML válido con una entrada por versión
- con todo en pie: «Todo funciona», 5 en verde y el panel de cliente como «todavía no disponible»
- muestra el registro de incidentes con su causa y solución
- si el widget no responde, el estado general lo dice en rojo
- estado: sin errores JS
- informe sin sitio: pide abrirlo desde el panel
- informe sin sesión: pide entrar en el panel
- portada y resumen con la entidad y las cifras de la última revisión
- barreras agrupadas por criterio del Anexo 1, de más a menos
- evolución de las revisiones y detalle por página con capturas
- uso de los últimos 30 días
- el informe dice lo que no es: no certifica ni declara conformidad
- «Guardar en PDF» abre la impresión del navegador
- al imprimir se ocultan cabecera, botones y pie
- CSV con una fila por barrera
- informe: sin errores JS
- el panel avisa de la versión nueva con enlace a su novedad
- primeros pasos se marcan solos: 4 de 5, falta la declaración en todas las páginas
- botón «Informe del sitio en PDF» con el sitio
- cada pestaña del sitio tiene su «¿Cómo se usa esta pestaña?»
- tras abrir la novedad, el aviso ya no vuelve a salir
- panel: sin errores JS
- axe sin incumplimientos en el panel con primeros pasos y ayudas
✓ prueba_promesas.js · 37 comprobaciones · 0 s
Ninguna página de winclus.com, ni el widget, ni el panel, promete cumplimiento total, protección contra demandas o tutelas, certificación ni sello (lo que sancionó la FTC a accessiBe y lo que se demanda a UserWay); y las páginas donde se vende dicen explícitamente que un sitio cumple cuando su propio código cumple.
Ley 1480 de 2011 (publicidad engañosa)Res. 1519 de 2020
- accesibilidad.html: sin promesas de cumplimiento, protección legal ni certificación
- comparar.html: sin promesas de cumplimiento, protección legal ni certificación
- comprobante.html: sin promesas de cumplimiento, protección legal ni certificación
- cumplimiento.html: sin promesas de cumplimiento, protección legal ni certificación
- declaracion.html: sin promesas de cumplimiento, protección legal ni certificación
- demo.html: sin promesas de cumplimiento, protección legal ni certificación
- escanear.html: sin promesas de cumplimiento, protección legal ni certificación
- estado.html: sin promesas de cumplimiento, protección legal ni certificación
- glosario.html: sin promesas de cumplimiento, protección legal ni certificación
- guia.html: sin promesas de cumplimiento, protección legal ni certificación
- guion-prueba.html: sin promesas de cumplimiento, protección legal ni certificación
- idiomas.html: sin promesas de cumplimiento, protección legal ni certificación
- index.html: sin promesas de cumplimiento, protección legal ni certificación
- informe.html: sin promesas de cumplimiento, protección legal ni certificación
- integrar.html: sin promesas de cumplimiento, protección legal ni certificación
- manual.html: sin promesas de cumplimiento, protección legal ni certificación
- mapa-del-sitio.html: sin promesas de cumplimiento, protección legal ni certificación
- novedades.html: sin promesas de cumplimiento, protección legal ni certificación
- panel.html: sin promesas de cumplimiento, protección legal ni certificación
- plataformas.html: sin promesas de cumplimiento, protección legal ni certificación
- precios.html: sin promesas de cumplimiento, protección legal ni certificación
- presentacion.html: sin promesas de cumplimiento, protección legal ni certificación
- privacidad.html: sin promesas de cumplimiento, protección legal ni certificación
- seguridad.html: sin promesas de cumplimiento, protección legal ni certificación
- terminos.html: sin promesas de cumplimiento, protección legal ni certificación
- una-pagina.html: sin promesas de cumplimiento, protección legal ni certificación
- winclus-widget.js: sin promesas en los textos
- panel.html: sin promesas en los textos
- declaracion.html: sin promesas en los textos
- precios.html dice explícitamente que Winclus no hace cumplir la norma por el sitio
- accesibilidad.html dice explícitamente que Winclus no hace cumplir la norma por el sitio
- cumplimiento.html dice explícitamente que Winclus no hace cumplir la norma por el sitio
- integrar.html dice explícitamente que Winclus no hace cumplir la norma por el sitio
- winclus-widget.js: ningún texto promete un diagnóstico médico
- «Prueba tus colores» dice que es orientativa, no médica, y que no sustituye a un examen con un especialista
- «Frenar destellos» dice que reduce el riesgo y no lo elimina, y remite al médico
- winclus-widget.js: ningún texto promete evitar las crisis por destellos
✓ prueba_traducir.js · 11 comprobaciones · 2 s
Traducción automática del contenido (0.8.2, data-traducir): «Otro idioma» ofrece «Traducir esta página» a 100 idiomas con el servicio de traducción del sitio (texto, alt, placeholder, title y aria-label, en lotes), cambia el lang de la página, no toca el panel de Winclus ni el código, «Volver al idioma original» restaura todo, y si el servicio falla la página queda como estaba; sin data-traducir no sale la opción ni se manda nada.
Res. 2893 de 2020 Anexo 1 4.3.2 bWCAG 3.1.1WCAG 3.1.2
- con data-traducir, «Otro idioma» ofrece «Traducir esta página» con un desplegable de idiomas
- 100 idiomas de destino, sin el propio de la página
- traduce los textos de la página y cambia el lang a «en»
- traduce alt y placeholder
- respeta translate="no", el código y el panel de Winclus
- manda lotes de hasta 60 textos con de/a
- tras traducir ofrece «Volver al idioma original»
- «Volver al idioma original» restaura textos, atributos y lang
- sin errores JS
- si el servicio falla, la página queda como estaba y no hay errores
- sin data-traducir no sale la opción, se explica el navegador y no se manda nada
✓ prueba_clave.js · 11 comprobaciones · 2 s
Clave de sitio (0.8.2, data-clave): el cargador pide la configuración del panel a winclus.com/api/config y la pasa al widget (logo, nombre, pestañas ocultas), lo escrito en la línea manda, sin respuesta el panel sale igual, y al salir de la página el widget manda a /api/uso solo números (panel abierto y opciones tocadas) sin identificadores; sin clave no manda nada.
Ley 1581 de 2012WCAG 4.1.2
- el cargador pide /api/config con la clave
- la configuración llega al widget: nombre, logo y pestañas ocultas
- el color del botón viene de la configuración
- «Acerca de» dice que el sitio recibe cifras de uso anónimas
- al ocultarse la página manda un POST a /api/uso con la clave
- el cuerpo lleva solo números por opción y la versión: ni la página ni identificadores
- ningún dato personal en lo enviado
- data-nombre escrito en la línea manda sobre el del servidor
- sin respuesta de /api/config el panel sale como siempre y sin esperar mucho
- sin data-clave no se pide configuración ni se manda uso, y «Acerca de» no lo menciona
- una clave con caracteres no permitidos no se usa
✓ prueba_escanear.js · 11 comprobaciones · 13 s
Escáner en línea (winclus.com/escanear y /api/escanear): rechaza direcciones privadas o sin https, analiza una página con barreras en el Chromium del servidor (axe-core y comprobaciones de la Res. 1519), devuelve gravedad, criterio del Anexo 1 y puntaje, y la página pinta el resultado, lo descarga como informe y explica los errores.
Res. 1519 de 2020 Anexo 1WCAG 2.1 AA
- urlValida: solo http(s) públicas, nada privado ni local
- escanea pagina-arreglos.html: muchas barreras, puntaje entre 0 y 100
- cada problema lleva criterio del Anexo 1, gravedad, texto y cuántos
- comprobaciones de la 1519: sin declaración, sin «Ir al contenido», sin Winclus
- la portada de winclus.com: con Winclus, declaración y salto, puntaje alto
- una página caída se informa como error, no como página sin barreras
- sin https:// la página lo añade antes de pedir
- pinta puntaje, barreras, comprobaciones y cifras
- las barreras salen de más a menos graves
- descarga el informe en HTML con las barreras
- el error de la API se muestra y no hay errores JS
✓ prueba_panel.js · 7 comprobaciones · 2 s
Panel de cliente (winclus.com/panel): sin servidor configurado lo dice; con servidor pide el correo para el enlace de acceso; las pestañas del sitio siguen el patrón Tabs; los límites por plan coinciden con el esquema SQL; axe sin incumplimientos.
WCAG 2.4.3WCAG 4.1.2
- los límites por plan del panel coinciden con los del esquema SQL
- el esquema activa la seguridad por filas en todas las tablas
- sin servidor configurado lo dice y no muestra el acceso
- pide el enlace de acceso al correo
- sin errores JS al entrar
- siete pestañas
- axe sin incumplimientos en el panel
✓ prueba_personalizar.js · 11 comprobaciones · 7 s
Panel con la marca del sitio (0.8.2): data-logo y data-nombre en la cabecera («… con Winclus» traducido), data-ocultar quita pestañas (botón oculto, flechas del teclado las saltan, «¿Qué te cuesta?» no lleva a ellas) e Inicio y Más salen siempre; sin atributos el panel es el de siempre.
WCAG 2.4.3WCAG 4.1.2EN 301 549 11.5
- sin atributos: cabecera «Winclus», logo de Winclus y siete pestañas
- data-logo y data-nombre: el logo de la entidad y «Alcaldía de Prueba · con Winclus» en la cabecera
- el logo del sitio es decorativo (alt vacío): el nombre ya lo dice
- en inglés la cabecera dice «with Winclus»
- data-ocultar="cara, escribir": cinco pestañas visibles y esas dos ocultas
- pulsar la pestaña oculta
- flecha derecha desde Clics salta Escribir y va a Más
- flecha izquierda dos veces: Clics y luego Oír, sin pasar por Cara
- elegir «No puedo usar el ratón» con Cara oculta no abre la pestaña oculta ni da error
- «¿Qué te cuesta?» sigue con sus opciones
- data-ocultar="inicio,mas,ver": Inicio y Más salen igual, Ver se oculta
✓ prueba_declaracion.js · 16 comprobaciones · 5 s
Generador de declaración de accesibilidad (winclus.com/declaracion): la vista previa cambia al escribir, cita la Ley 1618, la Res. 1519 y la 2893 para entidades públicas (y NTC 5854 y WCAG para privadas), lista las excepciones, no descarga sin los datos mínimos, el archivo descargado es HTML válido con lang=es y lo escrito vuelve al recargar.
Res. 1519 de 2020 Anexo 1Res. 2893 de 2020WCAG 3.1.1
- vacío: la vista previa ya muestra la estructura con los huecos marcados
- sin datos no descarga y dice qué falta
- entidad pública: cita la Ley 1618, la Res. 1519, la 2893, la NTC 5854 y la Ley 1581
- estado parcial con las dos excepciones listadas
- cómo se comprobó: automática y manual, con la fecha en letras
- canal de avisos con correo, teléfono por Centro de Relevo, plazo y derecho de petición
- explica las ayudas de Winclus
- empresa privada: WCAG y NTC 5854, sin la Res. 1519 ni la Procuraduría
- estado «totalmente conforme»
- sin Winclus no se explica el panel
- descarga declaracion.html con lang=es, título, main y h1
- el archivo se analiza sin errores y tiene al menos seis secciones
- lo escrito vuelve al recargar
- «Empezar de nuevo» vacía el formulario
- axe sin incumplimientos en el generador
- sin errores JS
✓ prueba_precios.js · 18 comprobaciones · 1 s
Página de precios (winclus.com/precios): cuatro planes con precio y lo que incluye, el plan gratis con el panel completo, tabla frente a UserWay con la cifra de pruebas al día, preguntas plegables accesibles y sin cobro por visitas en ningún plan.
Res. 2893 de 2020WCAG 1.3.1
- la cifra de pruebas la actualiza evidencia.js
- index.html enlaza href="precios"
- mapa-del-sitio.html enlaza href="precios"
- sitemap.xml enlaza winclus.com/precios<
- index.html enlaza href="declaracion"
- mapa-del-sitio.html enlaza href="declaracion"
- sitemap.xml enlaza winclus.com/declaracion<
- cuatro planes: Gratis, Entidad, Entidad Plus y A medida
- el plan gratis: $0, sin límite de visitas, con el panel completo
- Entidad $2.400.000, Entidad Plus $5.900.000, A medida con cotización
- cada plan lista al menos cinco cosas y tiene botón con destino
- tabla frente a UserWay con al menos 12 condiciones y la fecha en que se leyó su página
- dice que no hay cobro por visitas
- precios sin IVA y contratación por SECOP
- preguntas plegables y asistencia jurídica en derecho colombiano
- servicios sueltos: auditoría manual, formación y pruebas con personas
- una pregunta se abre con Intro desde el teclado
- sin errores JS
✓ prueba_idiomas_demo.js · 16 comprobaciones · 6 s
Página «El panel en 101 idiomas» (winclus.com/idiomas): un selector con cada idioma en su propia lengua; al elegir uno el panel se abre solo en ese idioma (japonés, árabe volteado, inglés, portugués), el elegido queda marcado y la línea de instalación lo lleva; un código inexistente cae a español.
WCAG 3.1.1WCAG 3.1.2EN 301 549 11.7Res. 2893 Anexo 1 4.3.2 b
- la página lista los 101 idiomas: es, en y los 16 con archivo
- index.html enlaza a la página de idiomas
- integrar.html enlaza a la página de idiomas
- mapa-del-sitio.html enlaza a la página de idiomas
- sitemap.xml enlaza a la página de idiomas
- idiomas.html carga sin errores de JavaScript
- sin elegir nada el panel se abre solo y sale en español
- el español queda marcado y la línea de instalación no lleva data-ui
- 101 botones, cada uno con su nombre en su lengua y su lang
- la página sigue declarando lang=es
- ?ui=ja: el panel se abre en japonés
- el japonés queda marcado, el aviso y el título lo dicen y la línea lleva data-ui="ja"
- ?ui=ar: el panel sale en árabe y volteado
- ?ui=en: el panel sale en inglés
- ?ui=xx
- pulsar «Português» recarga con ?ui=pt y el panel sale en portugués
✓ prueba_otro_idioma.js · 13 comprobaciones · 9 s
Cambiar el idioma desde la barra de accesibilidad (Res. MinTIC 2893 de 2020, Anexo 1, 4.3.2 b): «Otro idioma» se ve al abrir el panel y lleva a las versiones del sitio en otros idiomas (hreflang, selector con lang o data-idiomas); si no hay, explica cómo traducir con el navegador sin enviar la página a nadie.
Res. MinTIC 2893 de 2020, Anexo 1, 4.3.2 bWCAG 3.1.1WCAG 2.5.5
- «Otro idioma» se ve nada más abrir el panel sencillo, con 44 px de alto
- con hreflang: un botón por idioma, sin el propio ni x-default ni el inglés repetido
- la dirección se resuelve contra la página
- el botón dice si la lista está abierta
- pulsar el idioma lleva a esa versión del sitio
- un selector <a lang> con el nombre del idioma cuenta; el enlace a un artículo en inglés, no
- data-idiomas del script también cuenta
- sin otras versiones, explica cómo traducir con Chrome, Edge, Safari y Firefox
- y no envía la página a ningún servicio de traducción
- la pestaña Ver tiene la sección «Idioma de la página»
- decir «quiero la página en inglés» abre la lista y dice qué idiomas hay
- con el panel en inglés, el botón dice «Another language»
- sin errores de JavaScript
✓ prueba_planes.js · 19 comprobaciones · 2 s
Planes vigentes (28-sep-2026): la marca de la entidad y las estadísticas solo con plan de pago vigente; cada cuenta nueva prueba el plan Entidad 30 días una sola vez; la tarea diaria vence los planes y solo la llama la propia tarea; el rol «Solo ver» del equipo no cambia nada, ni en la base ni en el panel.
Ley 1581 de 2012
- plan gratis: sin logo, nombre ni color de la entidad; lo funcional
- plan Entidad vigente
- plan Entidad vencido
- plan por contrato
- sin CRON_SECRET configurado, /api/vencer no hace nada
- con otro secreto: 401 y no vence nada
- la tarea de Vercel con su secreto vence los planes
- vercel.json programa /api/vencer una vez al día
- cuenta nueva: plan Entidad 30 días gratis, una sola vez por correo y no para quien fue invitada a un equipo
- las estadísticas de uso solo se guardan con plan de pago vigente
- al vencer, la prueba también termina
- rol «Solo ver»: la base no le deja cambiar el sitio, el monitor ni las descripciones
- servidor/parche_planes.sql es lo mismo que el final de esquema.sql
- al pagar, la cuenta deja de estar en prueba
- en prueba: el panel dice hasta cuándo es gratis y que no se cobra nada
- sin errores JS
- rol «Solo ver»: el panel lo dice y los formularios del sitio quedan apagados
- al invitar se elige qué puede hacer cada persona
- sin errores JS
✓ prueba_informe_arreglos.js · 15 comprobaciones · 23 s
Informe de arreglos en el panel de cliente: con la clave del sitio, el widget manda una vez al día por página lo que arregló al vuelo y lo que falta, solo con la ruta (sin consulta ni ancla, que pueden llevar datos de la persona); el servidor lo guarda solo con plan de pago y con topes; la pestaña «Arreglos» lo muestra por página, lo descarga en CSV y deja quitar lo que ya se pasó al código.
Res. 1519 de 2020 Anexo 1Ley 1581 de 2012
- la API guarda arreglos y pendientes con la ruta sin «?» ni «#»
- lo que llega se recorta (80 por lista, textos cortos): nadie llena la base desde una clave pública
- ruta que no empieza por «/»: 400
- clave no válida: 400
- sitio sin plan de pago: 402 y no se guarda
- en la base: solo con plan vigente, tope de 5 000 filas por sitio, y quitar solo quien puede cambiar el sitio
- con clave, el widget manda el informe de la página a los 5 s, con la ruta sin «?» ni «#»
- el informe no lleva nada de quien visita
- la misma página el mismo día no se vuelve a mandar desde este navegador
- sin errores JS en el widget
- sin clave de sitio no se manda ningún informe
- pestaña «Arreglos»: resumen y la lista por página
- la lista se descarga en CSV
- «Ya lo pasamos al código» quita esa página de la lista
- sin errores JS en el panel
✓ prueba_ia_alojada.js · 24 comprobaciones · 0 s
Traducción y lectura fácil con la IA de Winclus para sitios con plan de pago, sin que la entidad monte nada: solo con plan vigente y apagables en el panel, con cupo mensual y caché (lo repetido no se paga), el texto de la página va como datos, claude-opus-5 con respaldo si declina, y si falla el widget usa sus reglas.
WCAG 3.1.5Res. 2893 Anexo 1 4.3.2 bLey 1581 de 2012
- modelo por defecto: claude-opus-5
- traduce en el mismo orden, respeta los espacios de los bordes y no manda repetidos ni vacíos
- una sola llamada a claude-opus-5, con respaldo del servidor si declina, salida JSON y esfuerzo bajo
- el texto de la página va como datos, con la advertencia contra órdenes escondidas
- se cuenta lo enviado para el cupo y se guarda en la caché
- lo ya traducido sale de la caché: no se vuelve a pagar
- plan gratis: 402, sin llamar a la IA
- la entidad la apagó en el panel: 403
- idioma no válido o demasiados textos: 400
- si la traducción llega incompleta: 502 y no se guarda nada
- cupo del mes agotado: 429 sin llamar a la IA
- sin la clave de Anthropic en el servidor: 503
- explica en lectura fácil con títulos «# » y sin negritas, conservando las fechas (# De qué trata esta página
- pide lectura fácil con las pautas UNE 153101, sin perder fechas, plazos ni cantidades
- la misma página explicada otra vez sale de la caché
- plan gratis: 402
- si toda la cadena de modelos declina: 502 y el widget usa sus reglas
- con plan de pago, /api/config da al widget la traducción y la lectura fácil de Winclus
- plan gratis: no se anuncian
- apagadas en el panel: no se anuncian
- si la entidad tiene su propio traductor, se respeta el suyo
- la base tiene la caché y el cupo
- el panel deja apagar la IA de Winclus en cada sitio
- la política de privacidad dice qué texto sale y a quién
✓ prueba_acr_panel.js · 8 comprobaciones · 3 s
Informe de conformidad (ACR, plantilla VPAT 2.5 en español) en el panel: el monitor alojado lo genera en cada revisión de los planes de pago y el panel descarga el de la última, recordando que es una autoevaluación asistida que se completa y se firma; sin plan lo explica.
Res. 1519 de 2020 Anexo 1EN 301 549
- el monitor alojado genera el ACR de cada revisión solo para planes vigentes, y sin la columna guarda la revisión igual
- el ACR se genera con los resultados, nombra a la entidad y dice que no certifica
- la base guarda el ACR en la ejecución (parche_acr.sql); lo protegen las reglas de acceso del sitio
- la lista de revisiones no trae los informes
- «Informe de conformidad
- al bajarlo recuerda que es una autoevaluación que hay que completar y firmar
- sin errores JS
- sin plan de pago no hay ACR y el panel lo explica
✓ prueba_factura.js · 16 comprobaciones · 0 s
Factura electrónica ante la DIAN con Alegra al aprobarse un pago: crea o reutiliza el cliente, emite la factura con firma DIAN (CUFE) por el valor sin IVA más el IVA, nunca bloquea la activación del plan ni factura dos veces el mismo pago, y si faltan datos o Alegra falla lo anota; el panel pide los datos de facturación y el comprobante muestra la factura.
Estatuto Tributario art. 616-1
- dígito de verificación del NIT con el algoritmo de la DIAN
- los datos de la factura se validan
- con las variables de Alegra, la facturación queda activa
- busca el cliente por su identificación, con autenticación básica de Alegra
- si no existe lo crea: NIT con dígito, persona jurídica, no responsable de IVA
- la factura va con firma DIAN, la numeración, el producto del plan, el valor sin IVA y el IVA
- devuelve el número de factura y el CUFE
- si el cliente ya existe en Alegra, lo reutiliza
- pago aprobado: el plan se activa y queda la factura electrónica con su CUFE
- el mismo evento repetido no factura dos veces
- sin datos de facturación: el plan se activa igual y el pago queda anotado para facturarlo
- si Alegra falla: el plan se activa igual y el error queda en el pago
- con la facturación activa, el servidor no cobra sin los datos para la factura
- el panel pide los datos de facturación (con consumidor final) antes de pagar
- el comprobante muestra el número de la factura electrónica y su CUFE
- la base guarda los datos y la factura (parche_factura.sql); cada cuenta solo cambia su nombre y sus datos de facturación
✓ prueba_apartarse.js · 28 comprobaciones · 45 s
Winclus no estorba a quien usa lector de pantalla (NVDA, JAWS): empieza dormido y fuera del árbol de accesibilidad hasta ver un movimiento real del ratón; si un lector activa un control por UI Automation, mueve el foco sin tecla o pulsa Intro sobre lo que él enfocó (JAWS), se aparta, deshace sus arreglos y lo recuerda en la página siguiente; ratón, teclado, envío de formularios y el foco que pone la propia página no lo apartan.
WCAG 4.1.2EN 301 549 5.1.3.2EN 301 549 11.5.2.3
- al cargar, Winclus arregla la página
- con el ratón (5 clics) no se aparta
- con el teclado (Tab e Intro) no se aparta
- los clics y el foco que pone el código de la página no lo apartan
- Windows pulsa el enlace «Ayuda» por UI Automation
- Winclus se aparta con la primera pulsación del lector
- deshace todos sus arreglos: la página queda como la hizo su autor
- solo queda, a la vista, el botón pequeño «en pausa»
- lo dice por la región live
- el botón que queda tiene un nombre claro
- en la página siguiente empieza apartado y sin tocar nada
- al pulsar el botón vuelve todo: arreglos y botón de Winclus
- después de reactivarlo la persona, ya no se vuelve a apartar solo
- con data-apartarse="no" no se aparta
- saltos de foco sin tecla ni ratón
- el foco que pone el código de la página, seguido de Intro, no lo aparta
- Intro en un campo (envía el formulario con su botón) no lo aparta
- como JAWS
- empieza dormido: oculto al lector
- en el árbol de accesibilidad del navegador (lo que leen NVDA y JAWS) no hay nada de Winclus
- con el teclado
- un movimiento suelto sin desplazamiento real no lo despierta
- al mover el ratón de verdad despierta: vuelve al árbol, al Tab y arregla la página
- Alt+Mayús+W lo despierta y abre el panel
- quien ya usa Winclus
- si un lector activa algo, se aparta y el botón «en pausa» tampoco existe para el lector
- Alt+Mayús+W lo reactiva estando apartado
- sin errores de JavaScript
✓ prueba_teclas_reenviadas.js · 8 comprobaciones · 33 s
Con teclas reales de Windows: las que JAWS reenvía (bajada y subida en unos 5 ms) apartan a Winclus aunque la persona haya movido el ratón; las de un dedo (50-150 ms) y las letras que escribe un gestor de contraseñas no lo apartan.
WCAG 4.1.2EN 301 549 5.1.3.2
- Chrome al frente para recibir las teclas
- con ratón y teclado de una persona despierta y no se aparta
- Chrome al frente para recibir las teclas
- con Tab reenviados
- Chrome al frente para recibir las teclas
- Chrome al frente para recibir las teclas
- letras y Tab reenviados
- sin errores de JavaScript