diff --git a/superset-frontend/docs/ACCEPTANCE_CHECKLIST.md b/superset-frontend/docs/ACCEPTANCE_CHECKLIST.md
new file mode 100644
index 000000000000..b17e3e747a93
--- /dev/null
+++ b/superset-frontend/docs/ACCEPTANCE_CHECKLIST.md
@@ -0,0 +1,182 @@
+# Abnahme-Checkliste -- Apache Superset WCAG 2.1 Barrierefreiheit
+
+| Feld | Wert |
+|---------------------|-------------------------------------------------------|
+| Version | Branch `fix/a11y-improvements-v3` |
+| Pruefungsdatum | ___________________ |
+| Pruefer (Name) | ___________________ |
+| Pruefer (Rolle) | ___________________ |
+| Superset-Version | ___________________ |
+| Browser | ___________________ |
+| Betriebssystem | ___________________ |
+
+---
+
+## A. Abnahme-Kriterien -- WCAG 2.1 Erfolgskriterien
+
+### Level A (4 Kriterien)
+
+| Nr | WCAG | Kriterium | Level | Bestanden | Nicht bestanden | Maengel (Verweis) | Anmerkungen |
+|----|--------|---------------------------------|-------|-----------|-----------------|-------------------|-------------|
+| 1 | 1.1.1 | Nicht-Text-Inhalte | A | [ ] | [ ] | | |
+| 2 | 1.3.3 | Sensorische Eigenschaften | A | [ ] | [ ] | | |
+| 3 | 1.4.1 | Verwendung von Farbe | A | [ ] | [ ] | | |
+| 4 | 3.3.1 | Fehlererkennung | A | [ ] | [ ] | | |
+
+### Level AA (11 Kriterien)
+
+| Nr | WCAG | Kriterium | Level | Bestanden | Nicht bestanden | Maengel (Verweis) | Anmerkungen |
+|----|--------|---------------------------------|-------|-----------|-----------------|-------------------|-------------|
+| 5 | 1.3.5 | Eingabezweck bestimmen | AA | [ ] | [ ] | | |
+| 6 | 1.4.4 | Textgroessenanpassung | AA | [ ] | [ ] | | |
+| 7 | 1.4.5 | Bilder von Text | AA | [ ] | [ ] | | |
+| 8 | 1.4.10 | Umfliessen (Reflow) | AA | [ ] | [ ] | | |
+| 9 | 1.4.11 | Nicht-Text-Kontrast | AA | [ ] | [ ] | | |
+| 10 | 1.4.13 | Inhalt bei Hover oder Fokus | AA | [ ] | [ ] | | |
+| 11 | 2.4.6 | Ueberschriften und Labels | AA | [ ] | [ ] | | |
+| 12 | 2.4.7 | Sichtbarer Fokus | AA | [ ] | [ ] | | |
+| 13 | 3.1.2 | Sprache von Teilen | AA | [ ] | [ ] | | |
+| 14 | 3.2.3 | Konsistente Navigation | AA | [ ] | [ ] | | |
+| 15 | 3.3.3 | Fehlervorschlaege | AA | [ ] | [ ] | | |
+
+**Zusammenfassung Level A:** ____/4 bestanden
+**Zusammenfassung Level AA:** ____/11 bestanden
+**Gesamt:** ____/15 bestanden
+
+---
+
+## B. Automatisierte Tests
+
+| Nr | Testbereich | Werkzeug | Bestanden | Nicht bestanden | Anmerkungen |
+|----|------------------------------|-------------|-----------|-----------------|-------------|
+| 1 | Axe-Core WCAG-Scan | jest-axe | [ ] | [ ] | |
+| 2 | Jest Unit Tests (A11y) | Jest | [ ] | [ ] | |
+| 3 | Regressionstests | Jest | [ ] | [ ] | |
+| 4 | Chrome Cross-Browser | Manuell | [ ] | [ ] | |
+| 5 | Firefox Cross-Browser | Manuell | [ ] | [ ] | |
+| 6 | Safari Cross-Browser | Manuell | [ ] | [ ] | |
+| 7 | Edge Cross-Browser | Manuell | [ ] | [ ] | |
+
+---
+
+## C. Screenreader-Tests
+
+| Nr | Kombination | Getestet | Bestanden | Nicht bestanden | Anmerkungen |
+|----|------------------------|----------|-----------|-----------------|-------------|
+| 1 | NVDA + Chrome | [ ] | [ ] | [ ] | |
+| 2 | NVDA + Firefox | [ ] | [ ] | [ ] | |
+| 3 | VoiceOver + Safari | [ ] | [ ] | [ ] | |
+
+### Screenreader-Pruefpunkte (pro Kombination)
+
+| Pruefpunkt | NVDA+Chrome | NVDA+Firefox | VO+Safari |
+|-------------------------------------------|-------------|--------------|-----------|
+| Seitenstruktur wird korrekt vorgelesen | [ ] | [ ] | [ ] |
+| Ueberschriften-Hierarchie erkennbar | [ ] | [ ] | [ ] |
+| Formular-Labels werden vorgelesen | [ ] | [ ] | [ ] |
+| Fehlermeldungen werden angekundigt | [ ] | [ ] | [ ] |
+| Navigation als Landmark erkannt | [ ] | [ ] | [ ] |
+| Chart-Beschreibungen vorhanden | [ ] | [ ] | [ ] |
+| Status-Informationen vorgelesen | [ ] | [ ] | [ ] |
+| Modale Dialoge korrekt angekundigt | [ ] | [ ] | [ ] |
+
+---
+
+## D. Dokumentation
+
+| Nr | Dokument | Vorhanden | Vollstaendig | Anmerkungen |
+|----|-------------------------------|-----------|--------------|-------------|
+| 1 | Betriebsbereitschaftserklaerung (`DEPLOYMENT_READY.md`) | [ ] | [ ] | |
+| 2 | Quellcode-Dokumentation (inline JSDoc/Kommentare) | [ ] | [ ] | |
+| 3 | Screenreader-Testprotokoll (`screenreader-test-protocol.md`) | [ ] | [ ] | |
+| 4 | Cross-Browser-Matrix (`cross-browser-test-matrix.md`) | [ ] | [ ] | |
+| 5 | Automatisierter Testbericht (`a11y-test-report.md`) | [ ] | [ ] | |
+| 6 | Funktionspruefungs-Leitfaden (`FUNCTIONAL_TEST_GUIDE.md`) | [ ] | [ ] | |
+| 7 | Diese Abnahme-Checkliste (`ACCEPTANCE_CHECKLIST.md`) | [ ] | [ ] | |
+
+---
+
+## E. Gesamtergebnis
+
+| Nr | Kriterium | Erfuellt |
+|----|--------------------------------------------------------------|----------|
+| 1 | Alle 15 WCAG 2.1 Kriterien bestanden | [ ] |
+| 2 | Keine kritischen Maengel offen | [ ] |
+| 3 | Keine schwerwiegenden Maengel offen | [ ] |
+| 4 | Automatisierte Tests bestanden | [ ] |
+| 5 | Screenreader-Tests bestanden (mind. 1 Kombination) | [ ] |
+| 6 | Cross-Browser-Tests bestanden (mind. 2 Browser) | [ ] |
+| 7 | Dokumentation vollstaendig | [ ] |
+| 8 | **Abnahme erteilt** | [ ] |
+
+### Entscheidung
+
+- [ ] **Abnahme erteilt** -- Alle Kriterien erfuellt, keine offenen kritischen/schwerwiegenden Maengel
+- [ ] **Abnahme mit Auflagen** -- Geringfuegige Maengel vorhanden, Nachbesserungsfrist vereinbart
+- [ ] **Abnahme verweigert** -- Kritische oder schwerwiegende Maengel vorhanden
+
+Begruendung (bei Auflagen oder Verweigerung):
+
+> ___________________________________________________________________________
+> ___________________________________________________________________________
+> ___________________________________________________________________________
+
+---
+
+## F. Unterschriften
+
+### Auftraggeber
+
+| Feld | Eintrag |
+|----------------|---------------------------|
+| Name | _________________________ |
+| Rolle | _________________________ |
+| Organisation | _________________________ |
+| Datum | _________________________ |
+| Unterschrift | _________________________ |
+
+### Auftragnehmer
+
+| Feld | Eintrag |
+|----------------|---------------------------|
+| Name | _________________________ |
+| Rolle | _________________________ |
+| Organisation | Aitema GmbH i.G. |
+| Datum | _________________________ |
+| Unterschrift | _________________________ |
+
+---
+
+## G. Maengelliste
+
+| Nr | WCAG | Beschreibung | Schweregrad | Gefunden am | Status | Behoben am | Nachtest bestanden |
+|----|-------|-------------|-------------|-------------|--------|------------|-------------------|
+| 1 | | | | | | | [ ] |
+| 2 | | | | | | | [ ] |
+| 3 | | | | | | | [ ] |
+| 4 | | | | | | | [ ] |
+| 5 | | | | | | | [ ] |
+| 6 | | | | | | | [ ] |
+| 7 | | | | | | | [ ] |
+| 8 | | | | | | | [ ] |
+| 9 | | | | | | | [ ] |
+| 10 | | | | | | | [ ] |
+
+### Schweregrad-Legende
+
+| Schweregrad | Definition |
+|------------------|-----------|
+| **Kritisch** | WCAG-Kriterium komplett nicht erfuellt, Nutzung fuer Betroffene unmoeglich |
+| **Schwerwiegend** | WCAG-Kriterium teilweise nicht erfuellt, Nutzung stark eingeschraenkt |
+| **Geringfuegig** | Kosmetische Abweichung, Nutzung moeglich aber nicht optimal |
+| **Hinweis** | Verbesserungsvorschlag, kein WCAG-Verstoss |
+
+### Maengel-Status-Legende
+
+| Status | Bedeutung |
+|-----------------|-----------|
+| **Offen** | Mangel identifiziert, noch nicht behoben |
+| **In Arbeit** | Auftragnehmer arbeitet an Behebung |
+| **Behoben** | Auftragnehmer meldet Behebung, Nachtest ausstehend |
+| **Abgeschlossen** | Nachtest bestanden, Mangel ist behoben |
+| **Zurueckgestellt** | Einvernehmlich auf spaeteres Release verschoben |
diff --git a/superset-frontend/docs/ACCESSIBILITY.md b/superset-frontend/docs/ACCESSIBILITY.md
new file mode 100644
index 000000000000..9eeb16644b49
--- /dev/null
+++ b/superset-frontend/docs/ACCESSIBILITY.md
@@ -0,0 +1,508 @@
+# Accessibility Developer Guide
+
+> Apache Superset — WCAG 2.1 AA Compliance Patterns
+>
+> This guide documents the accessibility patterns used in this codebase.
+> Follow these patterns when creating or modifying components.
+
+---
+
+## A. Overview
+
+Apache Superset targets **WCAG 2.1 Level AA** compliance. This project addresses 15 specific success criteria across four areas:
+
+| Area | Criteria Count | Level |
+|------|---------------|-------|
+| Level A Core | 5 | A |
+| Visual Presentation | 4 | AA |
+| Interaction | 7 | AA |
+| Infrastructure | 2 targets | n/a |
+
+For the full mapping of criteria to files and commits, see [WCAG_COMPLIANCE_MATRIX.md](./WCAG_COMPLIANCE_MATRIX.md).
+
+---
+
+## B. Architecture Patterns
+
+### 1. Accessible Icons
+
+**WCAG 1.1.1 — Non-text Content**
+
+Icons in Superset fall into two categories: **functional** (convey meaning or are clickable) and **decorative** (purely visual, next to text labels).
+
+#### Functional Icons (need accessible name)
+
+```tsx
+// Icon button with aria-label — user hears "Fullscreen"
+
+```
+
+#### Decorative Icons (hidden from screen readers)
+
+```tsx
+// Icon next to visible text — screen reader skips the icon
+
+{t('Save')}
+```
+
+#### How BaseIcon handles this automatically
+
+The `BaseIcon` component in `superset-ui-core` detects `aria-hidden` and adjusts behavior:
+
+```tsx
+// From BaseIcon.tsx
+const isDecorative = rest?.['aria-hidden'] === true || rest?.['aria-hidden'] === 'true';
+const whatRole = isDecorative ? 'presentation' : (rest?.onClick ? 'button' : 'img');
+const ariaLabel = isDecorative ? undefined : genAriaLabel(fileName || '');
+```
+
+**Rule:** If the icon is next to a visible text label, add `aria-hidden="true"`. If the icon is the only content of a button or link, ensure the parent has an `aria-label`.
+
+---
+
+### 2. Toggle States
+
+**WCAG 1.3.3 — Sensory Characteristics**
+
+Toggle buttons must expose their state programmatically, not just visually.
+
+#### aria-pressed for on/off toggles
+
+```tsx
+// Dashboard edit mode toggle
+
+```
+
+#### aria-expanded for collapsible sections
+
+```tsx
+// Filter bar collapse/expand
+
+```
+
+**Rule:** Use `aria-pressed` for toggles (on/off). Use `aria-expanded` for sections that show/hide content. Always include a descriptive `aria-label`.
+
+---
+
+### 3. Color-Independent Indicators
+
+**WCAG 1.4.1 — Use of Color**
+
+Never use color as the sole means of conveying information. Always provide a secondary indicator.
+
+#### Distinct shapes per status
+
+```tsx
+// AlertStatusIcon — each status has a unique icon shape
+const iconConfig = {
+ Success: , // checkmark circle
+ Error: , // X circle
+ Working: , // spinner
+ Noop: , // clock
+ Grace: , // exclamation
+};
+```
+
+#### Text prefixes for error states
+
+```tsx
+// Error message with text prefix, not just red color
+
+ {t('Error:')} {errorMessage}
+
+```
+
+**Rule:** Status indicators need both color AND shape/text. Error messages need an "Error:" prefix or icon in addition to color.
+
+---
+
+### 4. Form Error Handling
+
+**WCAG 3.3.1 — Error Identification, WCAG 3.3.3 — Error Suggestion**
+
+Form errors must be programmatically linked to their inputs and include helpful correction hints.
+
+#### Linking errors to inputs
+
+```tsx
+// TextControl with aria-invalid and aria-describedby
+
+{hasErrors && (
+
+ {validationErrors.join(', ')}
+
+)}
+```
+
+#### Error containers with role="alert"
+
+```tsx
+// Alert component with ARIA live region
+
+```
+
+#### Error messages with correction hints (WCAG 3.3.3)
+
+```tsx
+// Bad: generic error
+"Invalid input"
+
+// Good: error with suggestion
+"Password must be at least 8 characters. Include letters and numbers."
+"Email format: name@example.com"
+"SSH port must be a number between 1 and 65535 (e.g. 22)"
+```
+
+**Rules:**
+- Every validated input needs `aria-invalid` (true when error present, undefined otherwise)
+- Every error message element needs an `id` matching the input's `aria-describedby`
+- Error containers use `role="alert"` with `aria-atomic="true"`
+- Use `aria-live="assertive"` for errors, `"polite"` for warnings/info/success
+- Error text must suggest how to fix the problem
+
+---
+
+### 5. Text Sizing
+
+**WCAG 1.4.4 — Resize Text**
+
+Text must remain readable and functional at 200% zoom without loss of content.
+
+#### Use theme tokens instead of hardcoded pixels
+
+```tsx
+// Bad: hardcoded pixel size
+font-size: 12px;
+height: 24px;
+line-height: 18px;
+
+// Good: theme tokens and flexible sizing
+font-size: ${theme.fontSizeSM}px; // resolves to 12px but scales with theme
+min-height: 24px; // min instead of fixed
+line-height: 1.5; // unitless — scales with font-size
+```
+
+#### Available theme tokens
+
+| Token | Default | Use for |
+|-------|---------|---------|
+| `theme.fontSizeSM` | 12 | Small/secondary text |
+| `theme.fontSize` | 14 | Body text (default) |
+| `theme.fontSizeLG` | 16 | Emphasized text |
+| `theme.fontSizeXL` | 22 | Headings, large icons |
+
+**Rules:**
+- Never use hardcoded `font-size` in pixels — use theme tokens
+- Use `min-height` instead of `height` for text containers
+- Use unitless `line-height` values (1, 1.2, 1.5) — they scale with font-size
+- Ensure containers use `flex-wrap` to accommodate text expansion at zoom
+
+---
+
+### 6. Accessible Charts (ECharts)
+
+**WCAG 1.4.5 — Images of Text, WCAG 1.1.1 — Non-text Content**
+
+Charts use SVGRenderer for accessible text and the ECharts aria module for screen reader descriptions.
+
+#### SVGRenderer for text accessibility
+
+```tsx
+// Echart.tsx — SVGRenderer instead of CanvasRenderer
+import { SVGRenderer } from 'echarts/renderers';
+import { AriaComponent } from 'echarts/components';
+
+use([
+ SVGRenderer, // Text renders as real DOM elements, not canvas pixels
+ AriaComponent, // Generates data descriptions for screen readers
+ BarChart,
+ // ... other chart types
+]);
+```
+
+#### ECharts aria module for data descriptions
+
+```tsx
+// Automatically generates screen-reader descriptions from chart data
+const ariaOptions = {
+ aria: {
+ enabled: true,
+ decal: { show: false }, // visual patterns handled separately
+ label: {
+ enabled: true,
+ description: echartOptions.title?.text || 'Chart data',
+ },
+ },
+};
+```
+
+#### Chart container accessibility
+
+```tsx
+// Chart component wraps visualization with role and label
+
+ {/* ECharts renders here */}
+
+```
+
+**Rules:**
+- Always use `SVGRenderer` (never `CanvasRenderer`) for new chart plugins
+- Include `AriaComponent` in the `use()` registration
+- Chart containers need `role="img"` and `aria-label`
+- Provide a meaningful `aria.label.description` from chart title
+
+---
+
+### 7. Responsive Layout (Reflow)
+
+**WCAG 1.4.10 — Reflow**
+
+Content must reflow without horizontal scrolling at 320px viewport width (equivalent to 400% zoom at 1280px).
+
+#### Media query pattern
+
+```css
+/* Dashboard filter sidebar — collapses at narrow viewports */
+@media (max-width: 768px) {
+ display: none;
+}
+
+/* Dashboard content — takes full width when sidebar collapses */
+@media (max-width: 768px) {
+ max-width: 100vw;
+}
+```
+
+#### Navigation wrapping
+
+```css
+/* SubMenu items wrap at narrow viewports */
+@media (max-width: 480px) {
+ flex-wrap: wrap;
+}
+```
+
+#### Modals at narrow viewports
+
+```css
+/* Modals go full-width on small screens */
+@media (max-width: 768px) {
+ .ant-modal {
+ max-width: 100vw;
+ margin: 0;
+ }
+}
+```
+
+**Rules:**
+- Test at 320px viewport width — no horizontal scrollbar
+- Sidebar navigation should collapse or stack above content
+- Modals should go full-width on narrow screens
+- Use `flex-wrap: wrap` for navigation items and toolbars
+- Never set a fixed `width` that would cause overflow — use `max-width` with `100%` or `100vw`
+
+---
+
+### 8. Focus Management
+
+**WCAG 2.4.7 — Focus Visible, WCAG 1.4.11 — Non-text Contrast**
+
+Every interactive element must have a visible focus indicator with at least 3:1 contrast ratio.
+
+#### Global baseline (already applied)
+
+```tsx
+// GlobalStyles.tsx — applies to all interactive elements
+*:focus-visible {
+ outline: 2px solid ${theme.colorPrimary};
+ outline-offset: 2px;
+}
+```
+
+#### Component-level override when needed
+
+```tsx
+// When the global outline doesn't work well (e.g., on dark backgrounds)
+const FocusableItem = styled.div`
+ &:focus-visible {
+ box-shadow: 0 0 0 2px ${theme.colorPrimary};
+ outline: none;
+ }
+`;
+```
+
+#### Never remove focus indicators
+
+```tsx
+// Bad: removes focus indicator entirely
+outline: none;
+
+// Good: transparent outline that :focus-visible overrides
+outline: 2px solid transparent;
+```
+
+**Rules:**
+- Never add `outline: none` without a replacement focus style
+- Use `:focus-visible` (not `:focus`) to avoid showing focus rings on mouse click
+- Focus indicators need at least 3:1 contrast against the background
+- The global `*:focus-visible` in GlobalStyles provides a baseline — override per component only when necessary
+
+---
+
+### 9. Navigation Consistency
+
+**WCAG 3.2.3 — Consistent Navigation, WCAG 3.1.2 — Language of Parts**
+
+Navigation landmarks must be labeled and the page language must be set programmatically.
+
+#### Labeled navigation landmarks
+
+```tsx
+// Primary navigation — always has the same aria-label
+
+
+// Secondary page navigation
+
+```
+
+#### Document language
+
+```tsx
+// App.tsx — set from bootstrapData locale
+useEffect(() => {
+ const locale = bootstrapData?.common?.locale || 'en';
+ document.documentElement.lang = locale;
+}, [bootstrapData]);
+```
+
+**Rules:**
+- Every `