{
 "url": "https://concellodemoana.org",
 "elementos_analizados": 1227,
 "resumen": {
  "alta": 4,
  "media": 3,
  "baja": 4
 },
 "hallazgos": [
  {
   "severidad": "alta",
   "criterio": "1.1.1 Contenido no textual",
   "hallazgo": "1 <img> sin atributo alt (ni siquiera alt=\"\").",
   "remediacion": "Añade alt a cada <img>: texto descriptivo si aporta información, alt=\"\" si es decorativa. En <input type=\"image\"> y <area> es igual de obligatorio.",
   "ejemplos": [
    "https://concellodemoana.org/wp-content/uploads/2019/11/icono-concello-botonera-20.png"
   ]
  },
  {
   "severidad": "alta",
   "criterio": "4.1.2 Nombre, función, valor",
   "hallazgo": "1 <input:submit> sin nombre accesible (sin texto, aria-label ni title).",
   "remediacion": "El nombre accesible llega del texto interno, aria-label, title o de una imagen interna con alt. Un control vacío es invisible para lectores de pantalla."
  },
  {
   "severidad": "alta",
   "criterio": "4.1.2 Nombre, función, valor",
   "hallazgo": "44 <a> sin nombre accesible (sin texto, aria-label ni title).",
   "remediacion": "El nombre accesible llega del texto interno, aria-label, title o de una imagen interna con alt. Un control vacío es invisible para lectores de pantalla."
  },
  {
   "severidad": "alta",
   "criterio": "3.3.2 Etiquetas o instrucciones",
   "hallazgo": "1 campos de formulario sin <label> asociado ni nombre accesible.",
   "remediacion": "Asocia <label for=\"id\"> al campo (o envuélvelo), o usa aria-label. Aplica a input, select y textarea.",
   "ejemplos": [
    "text name=s"
   ]
  },
  {
   "severidad": "media",
   "criterio": "2.4.3 Orden del foco",
   "hallazgo": "1 elementos con tabindex positivo (modifica el orden natural).",
   "remediacion": "Usa tabindex=\"0\" o elimina el atributo: el orden de tabulación debe seguir al DOM.",
   "ejemplos": [
    "a[tabindex=1]"
   ]
  },
  {
   "severidad": "media",
   "criterio": "1.3.1 Información y relaciones",
   "hallazgo": "No hay ningún <h1> en la página.",
   "remediacion": "Añade un único h1 que nombre la página."
  },
  {
   "severidad": "media",
   "criterio": "1.3.1 Información y relaciones",
   "hallazgo": "1 <table> sin celdas <th>.",
   "remediacion": "Marca encabezados de fila/columna con <th> (y scope) para que el lector asocie celdas."
  },
  {
   "severidad": "baja",
   "criterio": "1.3.1 Información y relaciones",
   "hallazgo": "Saltos de nivel en encabezados: h2→h4.",
   "remediacion": "No saltes niveles (h2→h4): rompe el esquema de navegación. Baja de uno en uno."
  },
  {
   "severidad": "baja",
   "criterio": "1.3.1 Información y relaciones",
   "hallazgo": "5 encabezados vacíos (<h*> sin texto).",
   "remediacion": "Elimina los encabezados vacíos o dales texto: aparecen como huecos en el índice del lector."
  },
  {
   "severidad": "baja",
   "criterio": "3.2.5 Cambio a petición",
   "hallazgo": "27 enlaces con target=\"_blank\" sin avisar de que abren ventana nueva.",
   "remediacion": "Añade aviso en texto (o title/aria-label): «(abre en ventana nueva)», o deja que la persona usuaria decida."
  },
  {
   "severidad": "baja",
   "criterio": "4.1.2 Nombre, función, valor",
   "hallazgo": "1 ids duplicados; pueden romper asociaciones label-for y aria-labelledby.",
   "remediacion": "Haz únicos los ids: los <label for> y aria-labelledby apuntan solo al primero."
  }
 ],
 "limites": "Automatización ≈ un tercio de WCAG: esto es un filtro exprés, no sustituye revisión manual (teclado, lector de pantalla, contraste real, refrán de auditoría)."
}
