{
 "url": "https://www.concellodeames.gal/",
 "modo": "rendered",
 "score": 22,
 "score_nota": "Puntuación ponderada: alta −12, media −6, baja −2 desde 100. Mide solo lo automatizable (≈1/3 de WCAG): sirve para seguir tendencias entre versiones, no como conformidad.",
 "elementos_interactivos": 424,
 "resumen": {
  "alta": 4,
  "media": 4,
  "baja": 3
 },
 "hallazgos": [
  {
   "severidad": "alta",
   "criterio": "1.4.3",
   "hallazgo": "12 zonas de texto con contraste insuficiente: rgb(8,137,70) vs rgb(255,255,255) = 4.49:1 ×103; rgb(255,255,255) vs rgb(8,137,70) = 4.49:1 ×2; rgb(8,137,70) vs rgb(242,242,242) = 4.01:1 ×1; rgb(115,115,115) vs rgb(242,242,242) = 4.24:1 ×1. (fg/fondo computados, con composición de transparencias).",
   "remediacion": "Sube el contraste a ≥4.5:1 (≥3:1 en texto grande). El fondo efectivo ya incluye superposiciones y transparencias; si hay imagen de fondo, verifica esa zona a mano.",
   "ejemplos": [
    "rgb(8,137,70) sobre rgb(255,255,255) → 4.49:1 (p. ej. #CybotCookiebotDialogNavDeclaration)",
    "rgb(255,255,255) sobre rgb(8,137,70) → 4.49:1 (p. ej. #CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll)",
    "rgb(8,137,70) sobre rgb(242,242,242) → 4.01:1 (p. ej. ul > li > a)",
    "rgb(115,115,115) sobre rgb(242,242,242) → 4.24:1 (p. ej. #enderezo)",
    "rgb(255,255,255) sobre rgb(128,128,128) → 3.95:1 (p. ej. div > div > span)",
    "rgb(119,119,119) sobre rgb(223,231,233) → 3.57:1 (p. ej. #luns)"
   ]
  },
  {
   "severidad": "alta",
   "criterio": "4.1.2 Nombre, función, valor",
   "hallazgo": "30 <control> 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.",
   "ejemplos": [
    "div > div#txt-size > a",
    "div > div > a",
    "div > div > a",
    "div > div > a",
    "div > div > a",
    "div > div > a"
   ]
  },
  {
   "severidad": "alta",
   "criterio": "1.1.1 Contenido no textual",
   "hallazgo": "11 <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://www.concellodeames.gal/sites/default/files/banner/imagenes/2019/03/ico_buscador_de_tramites.png",
    "https://www.concellodeames.gal/sites/default/files/banner/imagenes/2019/03/ico_tramites_abertos.png",
    "https://www.concellodeames.gal/sites/default/files/banner/imagenes/2019/03/ico_tramites_populares.png",
    "https://www.concellodeames.gal/sites/default/files/banner/imagenes/2019/03/ico_todos_os_tramites.png",
    "https://www.concellodeames.gal/sites/default/files/banner/imagenes/2019/03/ico_perfil_do_contratante.png",
    "https://www.concellodeames.gal/sites/default/files/banner/imagenes/2019/03/ico_sede_electronica.png"
   ]
  },
  {
   "severidad": "alta",
   "criterio": "4.1.2 Nombre, función, valor",
   "hallazgo": "2 elementos interactivos (<control>) con aria-hidden=\"true\": ocultos al lector pero siguen recibiendo foco.",
   "remediacion": "Quita aria-hidden del elemento enfocable, o añade tabindex=\"-1\" si debe quedar fuera de la interacción."
  },
  {
   "severidad": "media",
   "criterio": "2.5.8 Tamaño del objetivo (mínimo)",
   "hallazgo": "34 controles con área de toque menor de 24×24 px (WCAG 2.2, 2.5.8): div#skip-link > a (123×1), div > div#txt-size > a (50×17), div > div > a (25×19), div > div > a (25×19).",
   "remediacion": "Da a los controles al menos 24×24 px CSS (mejor 44×44) con padding o min-width/min-height. Excepciones: enlaces inline equivalentes y espaciado suficiente alrededor.",
   "ejemplos": [
    "div#skip-link > a (123×1px)",
    "div > div#txt-size > a (50×17px)",
    "div > div > a (25×19px)",
    "div > div > a (25×19px)",
    "div > div > a (25×19px)",
    "div > div > a (25×19px)"
   ]
  },
  {
   "severidad": "media",
   "criterio": "2.4.7 Foco visible",
   "hallazgo": "34 controles enfocables sin indicador de foco aparente (outline y box-shadow ausentes): #CybotCookiebotDialogPoweredbyCybot, #CybotCookiebotDialogNavDeclaration, #CybotCookiebotDialogNavDetails, #CybotCookiebotDialogNavAbout. Revisar.",
   "remediacion": "Asegura un indicador de foco visible: nunca outline:none sin sustituto; usa :focus-visible con outline ≥2px o borde/sombra contrastada (2.4.7).",
   "ejemplos": [
    "#CybotCookiebotDialogPoweredbyCybot",
    "#CybotCookiebotDialogNavDeclaration",
    "#CybotCookiebotDialogNavDetails",
    "#CybotCookiebotDialogNavAbout",
    "div#skip-link > a",
    "#logo"
   ]
  },
  {
   "severidad": "media",
   "criterio": "1.4.4 Cambio de tamaño del texto",
   "hallazgo": "El viewport limita el zoom (maximum-scale=1.0; se recomienda no limitar o ≥2).",
   "remediacion": "Elimina maximum-scale del viewport o déjalo en 2 o más, para que se pueda agrandar la letra (1.4.4)."
  },
  {
   "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": "baja",
   "criterio": "1.4.3",
   "hallazgo": "7 zonas de texto con imagen de fondo o sombra: no calculables, revisar.",
   "remediacion": "El contraste sobre imagen de fondo no es calculable aquí: usa a11y_contrast_image con una captura de esa región."
  },
  {
   "severidad": "baja",
   "criterio": "1.3.1 Información y relaciones",
   "hallazgo": "1 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": "51 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."
  }
 ],
 "limites": "Auditoría renderizada: heurística honesta, no sustituye lector de pantalla ni revisión manual. Contraste calculado sobre fondos computados; los casos con imagen de fondo se reportan como «revisar». 2.5.8 admite excepciones (inline equivalente, espaciado) que aquí se aproximan."
}
