Contrato a11y
Toda gráfica exige ariaLabel descriptivo; la raíz usa role=img con <title>. Cada forma lleva su propio <title> nativo (tooltip sin JS y lector de pantalla) más data-chart-tip para el portal.
Claves duplicadas permitidas (stableKey), ticks d3 por valor, clipPath con useId (multi-chart seguro).
Vacíos y táctil
Sin datos se renderiza ChartEmpty (título + descripción), nunca SVG roto. Los <title> nativos cubren táctil sin JS; el portal añade focus/touch cuando hay JS.
Consejo
Describe la conclusión en ariaLabel, no solo el tipo: “cae 20% en Feb” > “gráfica de barras”.