// Dependency-free results visualization: SVG donut (pass/fail) + labeled // progress bars (citation coverage / evidence match). Color is never the sole // signal — every value has a visible text label, and the chart is screen-reader // described. Honors prefers-reduced-motion via styles.css. export default function EvalChart({ metrics }) { const m = metrics; if (!m) return null; const total = m.total_questions || 0; const passed = m.passed || 0; const failed = Math.max(total - passed, 0); const passPct = total ? Math.round((passed / total) * 100) : 0; // Donut geometry const r = 54; const C = 2 * Math.PI * r; const passLen = total ? C * (passed / total) : 0; const bars = [ { key: "coverage", label: "Citation coverage", value: m.citation_coverage, hint: "Cited answers / answerable questions", }, { key: "evidence", label: "Evidence match", value: m.evidence_match_rate, hint: "Expected evidence found / answerable questions", }, ]; return (