{
 "url": "https://www.ribeira.gal/",
 "modo": "rendered",
 "score": 52,
 "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": 252,
 "resumen": {
  "alta": 2,
  "media": 3,
  "baja": 3
 },
 "hallazgos": [
  {
   "severidad": "alta",
   "criterio": "1.4.3",
   "hallazgo": "10 zonas de texto con contraste insuficiente: rgb(148,148,148) vs rgb(239,239,239) = 2.64:1 ×3; rgb(148,148,148) vs rgb(239,239,239) = 2.64:1 (grande) ×1; rgb(237,28,36) vs rgb(239,239,239) = 3.81:1 ×1; rgb(29,123,185) vs rgb(239,239,239) = 3.98: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(148,148,148) sobre rgb(239,239,239) → 2.64:1 (p. ej. div#services > div > span)",
    "rgb(148,148,148) sobre rgb(239,239,239) → 2.64:1 (p. ej. div#services > div > span)",
    "rgb(237,28,36) sobre rgb(239,239,239) → 3.81:1 (p. ej. span > span > span)",
    "rgb(29,123,185) sobre rgb(239,239,239) → 3.98:1 (p. ej. span > span > span)",
    "rgb(141,141,140) sobre rgb(255,255,255) → 3.32:1 (p. ej. span > span#share-775553 > span)",
    "rgb(139,139,139) sobre rgb(247,248,249) → 3.2:1 (p. ej. div > span > span)"
   ]
  },
  {
   "severidad": "alta",
   "criterio": "4.1.2 Nombre, función, valor",
   "hallazgo": "22 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": "10 controles con área de toque menor de 24×24 px (WCAG 2.2, 2.5.8): div > span > a (498×17), div > span > a (498×17), div > span > a (498×17), div > span > a (498×17).",
   "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 > span > a (498×17px)",
    "div > span > a (498×17px)",
    "div > span > a (498×17px)",
    "div > span > a (498×17px)",
    "div > span > a (498×17px)",
    "div > span > a (498×17px)"
   ]
  },
  {
   "severidad": "media",
   "criterio": "2.4.7 Foco visible",
   "hallazgo": "2 controles enfocables sin indicador de foco aparente (outline y box-shadow ausentes): div > div > button, div > div > button. 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": [
    "div > div > button",
    "div > div > button"
   ]
  },
  {
   "severidad": "media",
   "criterio": "2.4.3 Orden del foco",
   "hallazgo": "4 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": [
    "#yui_patched_v3_18_1_1_1788746231368_258",
    "div#calendaryui_patched_v3_18_1_1_1788746231368_262 > div > a",
    "div#calendaryui_patched_v3_18_1_1_1788746231368_262 > div > a",
    "#calendaryui_patched_v3_18_1_1_1788746231368_262_pane_0"
   ]
  },
  {
   "severidad": "baja",
   "criterio": "1.4.3",
   "hallazgo": "18 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": "4.1.2 Nombre, función, valor",
   "hallazgo": "6 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": "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."
}
