diff --git a/lib/svg/sanitizer.accessibility.test.ts b/lib/svg/sanitizer.accessibility.test.ts
new file mode 100644
index 000000000..2383d510d
--- /dev/null
+++ b/lib/svg/sanitizer.accessibility.test.ts
@@ -0,0 +1,115 @@
+import { describe, it, expect } from 'vitest';
+import {
+ sanitizeHexColor,
+ sanitizeFont,
+ sanitizeRadius,
+ isValidHex,
+ sanitizeGoogleFontUrl,
+} from './sanitizer';
+
+describe('Accessibility Standards & Screen Reader Aria Compliance', () => {
+ describe('role and aria-labelledby attribute value preservation', () => {
+ it('preserves a valid hex color used as a fill in a role="img" SVG element', () => {
+ // SVG:
+ // The fill value passes through sanitizeHexColor — it must come out intact
+ expect(sanitizeHexColor('4a90e2', '000000')).toBe('4a90e2');
+ });
+
+ it('preserves accent color used in aria-labelledby-referenced title element', () => {
+ // SVG:
Contribution chart
+ expect(sanitizeHexColor('58a6ff', '000000')).toBe('58a6ff');
+ });
+
+ it('returns fallback and does not propagate injection into aria attribute values', () => {
+ // Malicious input that would break aria-labelledby="" in SVG markup
+ expect(sanitizeHexColor('">