Barrierefreiheit

Barrierefreiheit

null-noise strebt WCAG 2.2 AA als technischen Zielstandard an. Die Standardoberfläche bleibt dabei der zugängliche Primärpfad.

Aktueller Status

null-noise ist eine private Referenz-App. Es gibt noch keine abgeschlossene formale Konformitätsprüfung und keine Behauptung vollständiger Konformität.

Prüfung und Umsetzung laufen iterativ. Gefundene Barrieren sollen in der normalen Oberfläche behoben werden, nicht in einem separaten Sondermodus.

Was bereits berücksichtigt wird

  • HTML-first mit nativen Links, Buttons, Formularfeldern und Disclosure-Elementen.
  • Tastaturbedienung und sichtbarer Fokus auf interaktiven Elementen.
  • Textliche Einordnung statt rein farblicher Codierung.
  • Reduzierte Bewegung über prefers-reduced-motion.
  • Ruhige Offenlegung von Zusatzinformationen statt flüchtiger Tooltips.
  • Reflow und mobile Nutzung als wiederkehrender Prüfpunkt.
  • Reduzierte kognitive Last durch kurze Texte, klare Gruppen und vorsichtige Formulierungen.

Wie geprüft wird

Das Projekt nutzt automatisierte Tests, manuelle Smoke-Tests und mobile Sichtprüfungen. Automatisierte Tests ersetzen keine manuelle Prüfung.

Automatisierte Tests im Projekt

  • npm run lint: ESLint mit Next-Regeln prüft unter anderem HTML-nahe React-Struktur, Link-/Bildmuster und auffällige Codefehler.
  • npm run build: Der Next.js-Produktionsbuild prüft Typen, Routing, Server-/Client-Grenzen, statische Seiten und die Manifest-/Offline-Routen.
  • npm run test:unit: Vitest prüft Datenlogik, Suchlogik, Evidence-Modell, lokale Titel, Merken/Gesehen-Helfer, Laufzeitkonfiguration und sichere Formulierungen.
  • npm run test:axe-core: Ein direkter axe-core-Lauf scannt Kernrouten wie Start, Suche, Suche mit Query, Detailseite, Offline-Seite sowie Info- und Rechtstexte.
  • npm run test:a11y: Playwright öffnet die App im Browser und kombiniert axe-Scans mit Bedienprüfungen für Tastatur, Fokus, Skiplinks, native Disclosure, mobile Navigation, Manifest und Reflow.
  • npx playwright test: Der vollständige Browserlauf umfasst die A11y-Checks plus weitere End-to-End-Prüfungen; externe TMDb-Live-Fallbacks laufen nur, wenn die nötige Umgebung verfügbar ist.

Technische WCAG-2.2-A/AA/AAA-Matrix

Der Gegencheck npm run test:wcag22-aaa erfasst alle 86 WCAG-2.2-A/AA/AAA-Erfolgskriterien in einer technischen Matrix. Im letzten lokalen Lauf waren 48 Kriterien automatisiert auf Pass geprüft; 0 Kriterien hatten einen automatischen Fail; 12 Kriterien bleiben manuell offen; 26 Kriterien waren im geprüften Feature-Scope nicht anwendbar. Das ist eine Regression-Absicherung, keine vollständige manuelle WCAG-Konformitätsbewertung und kein AAA-Konformitätsziel.

Technischer Stand nach Level

  1. ATechnisch erreichtA-Kriterien ohne automatischen Fail und ohne manuell offene Matrixpunkte.
  2. AATechnisch erreichtA- und AA-Kriterien ohne automatischen Fail und ohne manuell offene Matrixpunkte.
  3. AAAAuto-Scan ohne Fail, manuell offenAAA hat aktuell keinen automatischen Axe-Fail mehr; manuell offene Kriterien bleiben.
  • ✅ Automatisch: Pass
  • ❌ Automatisch: Fail
  • ⚠️ Manuell offen
  • ℹ️ Automatisch: nicht anwendbar
  1. 1.1.1 Non-text Content (A)
    ✅ Automatisch: Pass
    Axe prüft Textalternativen; zusätzlich wird im DOM geprüft, ob sichtbare Bilder alt-Text, dekorativen Status oder einen versteckten Kontext haben.
  2. 1.2.1 Audio-only and Video-only (A)
    ℹ️ Automatisch: nicht anwendbar
    Die geprüften Routen enthalten keine Audio-, Video- oder Track-Elemente; das Kriterium ist im aktuellen Feature-Scope nicht anwendbar.
  3. 1.2.2 Captions (A)
    ℹ️ Automatisch: nicht anwendbar
    Die geprüften Routen enthalten keine aufgezeichneten Audio-/Video-Inhalte; Untertitel-Prüfung ist deshalb nicht anwendbar.
  4. 1.2.3 Audio Description or Media Alternative (A)
    ℹ️ Automatisch: nicht anwendbar
    Die geprüften Routen enthalten kein aufgezeichnetes Video; Audiodeskription oder Medienalternative ist hier nicht anwendbar.
  5. 1.2.4 Captions Live (AA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine Live-Audio- oder Live-Video-Inhalte auf den geprüften Routen.
  6. 1.2.5 Audio Description (AA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt kein aufgezeichnetes Video auf den geprüften Routen; Audiodeskription ist deshalb nicht anwendbar.
  7. 1.3.1 Info and Relationships (A)
    ✅ Automatisch: Pass
    Axe prüft Strukturregeln; zusätzlich werden Landmarken, genau ein main, genau ein h1, Überschriften, Listen, Tabellenstrukturen sowie das Kontaktformular mit nativen Labels, Hilfetexten und Fehlermeldungen geprüft.
  8. 1.3.2 Meaningful Sequence (A)
    ✅ Automatisch: Pass
    Playwright prüft DOM-Reihenfolge, Landmarken und Überschriften-Sichtbarkeit auf den Kernrouten; die Kontaktseite wird von Einführung über Datensparsamkeit bis Formular in dieser Reihenfolge geprüft.
  9. 1.3.3 Sensory Characteristics (A)
    ✅ Automatisch: Pass
    Quelltext und DOM werden auf Hinweise geprüft, die ausschließlich über Form, Position, Größe oder Farbe funktionieren würden.
  10. 1.3.4 Orientation (AA)
    ✅ Automatisch: Pass
    Die Kernrouten werden in schmalen und breiten Viewports geprüft; die Oberfläche erzwingt keine feste Portrait- oder Landscape-Nutzung.
  11. 1.3.5 Identify Input Purpose (AA)
    ✅ Automatisch: Pass
    Formularfelder werden auf erkennbare Namen, Labels und sinnvolle Autocomplete-/Input-Kontexte geprüft; die optionale Kontakt-E-Mail nutzt `type=email` sowie `autocomplete=email`.
  12. 1.4.1 Use of Color (A)
    ✅ Automatisch: Pass
    Axe prüft erkennbare Farbprobleme; zusätzlich werden aktive Zustände, Fokuszustände und textliche Labels gegen rein farbliche Codierung abgesichert.
  13. 1.4.2 Audio Control (A)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine automatisch abspielenden Audio- oder Medieninhalte.
  14. 1.4.3 Contrast Minimum (AA)
    ✅ Automatisch: Pass
    Axe prüft Textkontrast auf den gerenderten Kernrouten inklusive Kontaktformular; Fehler-, Hilfe- und Statusmeldungen verlassen sich nicht auf Opacity-Fades.
  15. 1.4.4 Resize Text (AA)
    ✅ Automatisch: Pass
    Die Routen werden bei 320 CSS-Pixeln und großen Viewports geprüft; Inhalte dürfen nicht horizontal ausbrechen oder unbedienbar werden.
  16. 1.4.5 Images of Text (AA)
    ✅ Automatisch: Pass
    DOM-Smoke prüft Bildzwecke; die Brand-Grafik ist dekorativ innerhalb eines benannten Startseiten-Links, wesentliche Information bleibt Text.
  17. 1.4.10 Reflow (AA)
    ✅ Automatisch: Pass
    Kernrouten inklusive `/kontakt` werden bei 320, 390 und 430 CSS-Pixeln auf horizontalen Overflow und erreichbare Inhalte geprüft.
  18. 1.4.11 Non-text Contrast (AA)
    ✅ Automatisch: Pass
    Axe und Computed-Style-Smokes prüfen Fokus-, Control-, Button-, Navigation- und Statuszustände; Kontaktfehler und Erfolgsmeldung haben zusätzlich sichtbare Rahmen und Text.
  19. 1.4.12 Text Spacing (AA)
    ✅ Automatisch: Pass
    Der Test injiziert erhöhte Zeilenhöhe, Zeichenabstand, Wortabstand und Absatzabstände und prüft danach auf horizontalen Overflow, auch auf dem Kontaktformular.
  20. 1.4.13 Content on Hover or Focus (AA)
    ✅ Automatisch: Pass
    DOM-Smoke prüft, dass keine Tooltip-/Popover-Pflichtinhalte vorhanden sind; Zusatzinformationen bleiben über native Disclosure-Muster erreichbar.
  21. 2.1.1 Keyboard (A)
    ✅ Automatisch: Pass
    Playwright tabbt durch interaktive Elemente, fokussiert Controls und prüft, dass sichtbare Bedienelemente per Tastatur erreichbar bleiben; das Kontaktformular nutzt native Eingabefelder und einen echten Submit-Button.
  22. 2.1.2 No Keyboard Trap (A)
    ✅ Automatisch: Pass
    Tab-Reihenfolge und fokussierbare Bereiche werden begrenzt geprüft; Mobile-Menü, Disclosure und Kontaktformular dürfen den Fokus nicht einschließen.
  23. 2.1.4 Character Key Shortcuts (A)
    ℹ️ Automatisch: nicht anwendbar
    Es wurden keine eigenen Einzelzeichen-Tastaturkürzel erkannt.
  24. 2.2.1 Timing Adjustable (A)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine Session-Timeouts, Meta-Refreshes oder zeitkritischen UI-Abläufe auf den geprüften Routen.
  25. 2.2.2 Pause, Stop, Hide (A)
    ✅ Automatisch: Pass
    Reduced-Motion wird emuliert; bewegte Zustände bleiben kurz, rein dekorativ und verdecken keine Information.
  26. 2.3.1 Three Flashes (A)
    ℹ️ Automatisch: nicht anwendbar
    DOM-Smoke prüft, dass keine Video-, Canvas-, Blink- oder Marquee-Inhalte vorhanden sind, die Flackern auslösen könnten.
  27. 2.4.1 Bypass Blocks (A)
    ✅ Automatisch: Pass
    Der Skip-Link zu main-content wird per Tastatur fokussiert, sichtbar gemacht und als Bypass vor der Navigation geprüft, auch bevor die Kontaktformular-Felder erreicht werden.
  28. 2.4.2 Page Titled (A)
    ✅ Automatisch: Pass
    Jede geprüfte Route muss einen nicht-leeren Dokumenttitel und die erwartete sichtbare Hauptüberschrift haben.
  29. 2.4.3 Focus Order (A)
    ✅ Automatisch: Pass
    Tab-Reihenfolge, Fokuslandung und sichtbarer Fokus werden auf bis zu 80 fokussierbaren Elementen pro Route geprüft; Kontaktfehler- und Erfolgsmeldungen werden nach Submit programmatisch fokussiert.
  30. 2.4.4 Link Purpose (A)
    ✅ Automatisch: Pass
    Alle sichtbaren Links müssen einen zugänglichen Namen haben; wiederholte Links werden auf verständliche Bezeichnungen geprüft.
  31. 2.4.5 Multiple Ways (AA)
    ✅ Automatisch: Pass
    Header- und Footer-Navigation werden auf wiederkehrende Linkziele geprüft: Start, Suche und Erklärung/Hilfe sind im Header erreichbar; Barrierefreiheit, Kontakt, Datenschutz und Impressum bleiben im Footer erreichbar.
  32. 2.4.6 Headings and Labels (AA)
    ✅ Automatisch: Pass
    Sichtbare Überschriften dürfen nicht leer sein; Kontaktformular, Buttons und Controls müssen verständliche sichtbare Labels wie `E-Mail für Antwort (optional)`, `Nachricht (Pflichtfeld)` und `Nachricht senden` haben.
  33. 2.4.7 Focus Visible (AA)
    ✅ Automatisch: Pass
    Für fokussierte Elemente wird ein sichtbarer Computed-Style geprüft: Outline, Box-Shadow, Border-Kontrast oder gleichwertige Fokusmarkierung; das umfasst Textarea und Statuszusammenfassungen.
  34. 2.4.11 Focus Not Obscured Minimum (AA)
    ✅ Automatisch: Pass
    Fokussierte Elemente werden in den Viewport gebracht und auf sichtbare Schnittmenge mit dem Viewport geprüft; Kontaktfelder und Submit-Button müssen sichtbar erreichbar bleiben.
  35. 2.5.1 Pointer Gestures (A)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine Multipoint- oder Pfadgesten-UI auf den geprüften Routen.
  36. 2.5.2 Pointer Cancellation (A)
    ✅ Automatisch: Pass
    Interaktionen nutzen native Links, Buttons und Formularcontrols; es wurden keine pointerdown-only-Aktivierungen erkannt.
  37. 2.5.3 Label in Name (A)
    ✅ Automatisch: Pass
    Wenn sichtbarer Text und aria-label zusammen vorkommen, muss der sichtbare Text im zugänglichen Namen enthalten bleiben; das Kontaktformular nutzt sichtbare Labels ohne abweichende aria-labels.
  38. 2.5.4 Motion Actuation (A)
    ℹ️ Automatisch: nicht anwendbar
    Es wurden keine Device-Motion-Handler oder bewegungsgesteuerten Aktionen erkannt.
  39. 2.5.7 Dragging Movements (AA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine Drag-and-Drop- oder draggable-UI auf den geprüften Routen.
  40. 2.5.8 Target Size Minimum (AA)
    ✅ Automatisch: Pass
    Fokussierbare Ziele werden auf mindestens 24px Breite/Höhe geprüft; Kontaktformularfelder und Submit-Button werden zusätzlich als konkrete Targets geprüft.
  41. 3.1.1 Language of Page (A)
    ✅ Automatisch: Pass
    Das html-lang-Attribut muss auf den geprüften Routen `de` sein.
  42. 3.1.2 Language of Parts (AA)
    ✅ Automatisch: Pass
    Lang-Attribute werden auf plausible Werte geprüft; fremdsprachige Pflichtbereiche sind im aktuellen Scope nicht vorhanden.
  43. 3.2.1 On Focus (A)
    ✅ Automatisch: Pass
    Fokus darf keine automatische Navigation oder unerwartete Zustandsänderung auslösen; Fokus-Smokes prüfen stabile Route, sichtbare Markierung und ruhige Kontaktformular-Fokuswechsel.
  44. 3.2.2 On Input (A)
    ✅ Automatisch: Pass
    Formularänderungen laufen über native Controls und explizite Submit-/Change-Flows; die Kontaktseite zeigt Fehler oder Erfolg erst nach bewusstem Submit.
  45. 3.2.3 Consistent Navigation (AA)
    ✅ Automatisch: Pass
    Die Reihenfolge und Wiederkehr der Header-/Footer-Navigation wird über Kernrouten geprüft; der Kontakt-Link bleibt im Footer konsistent erreichbar.
  46. 3.2.4 Consistent Identification (AA)
    ✅ Automatisch: Pass
    Wiederkehrende Links, Buttons und Controls werden auf konsistente Namen und Rollen geprüft; Kontakt bleibt als Footer-Link und Formularziel gleich benannt.
  47. 3.2.6 Consistent Help (A)
    ✅ Automatisch: Pass
    Hilfe-/Erklärungslinks und Kontakt bleiben konsistent erreichbar; relevante Hilfe-, Kontakt- und Legal-Routen werden als Kernrouten geprüft.
  48. 3.3.1 Error Identification (A)
    ✅ Automatisch: Pass
    Axe, Formular- und Status-Smokes prüfen, dass Kontakt-Fehlerzusammenfassung und Feldfehler textlich benannt, fokussierbar und nicht nur farblich codiert sind.
  49. 3.3.2 Labels or Instructions (A)
    ✅ Automatisch: Pass
    Formularfelder und Controls müssen Labels, sichtbare Anweisungen oder zugängliche Namen haben; Kontakt-Hilfetexte sind über `aria-describedby` mit den Feldern verbunden.
  50. 3.3.3 Error Suggestion (AA)
    ✅ Automatisch: Pass
    Kontakt-Fehlermeldungen geben konkrete Korrekturhinweise für leere/zu kurze Nachricht und ungültige E-Mail; Statusbereiche bleiben ruhig sichtbar.
  51. 3.3.4 Error Prevention Legal/Financial/Data (AA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine rechtlichen oder finanziellen Transaktionsformulare; das Kontaktformular speichert nicht dauerhaft, sendet erst nach explizitem Submit und verlangt nur die Nachricht als Pflichtfeld.
  52. 3.3.7 Redundant Entry (A)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keinen mehrstufigen Re-Entry-Flow; das Kontaktformular verlangt die Nachricht nur einmal und fragt eine optionale Antwortadresse nur einmal ab.
  53. 3.3.8 Accessible Authentication Minimum (AA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keinen Login- oder Authentifizierungsflow; die Kontaktseite nutzt keine Captcha-, Profil- oder Account-Hürde.
  54. 4.1.2 Name Role Value (A)
    ✅ Automatisch: Pass
    Axe und DOM-Smokes prüfen interaktive Namen, Rollen, Zustände wie aria-expanded und native Button-/Link-/Formularsemantik; Kontaktfelder bleiben native input/textarea/button-Controls.
  55. 4.1.3 Status Messages (AA)
    ✅ Automatisch: Pass
    Statusmeldungen und Live-Regionen werden auf role=status bzw. verständliche Aktualisierungstexte geprüft; Kontakt-Erfolg und Fehlerzusammenfassung werden für Screenreader erfassbar fokussiert bzw. gemeldet.
  56. 1.2.6 Sign Language (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine aufgezeichneten Video-/Audioinhalte auf den geprüften Routen; Gebärdensprache ist im aktuellen Feature-Scope nicht anwendbar.
  57. 1.2.7 Extended Audio Description (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt kein aufgezeichnetes Video auf den geprüften Routen; erweiterte Audiodeskription ist nicht anwendbar.
  58. 1.2.8 Media Alternative (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt kein aufgezeichnetes Video auf den geprüften Routen; eine Medienalternative ist hier nicht anwendbar.
  59. 1.2.9 Audio-only Live (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine Live-Audio-Inhalte auf den geprüften Routen.
  60. 1.3.6 Identify Purpose (AAA)
    ⚠️ Manuell offen
    Native Controls und Labels werden automatisch geprüft; ob alle UI-Zwecke nach AAA ausreichend programmatisch bestimmbar sind, bleibt manuell offen.
  61. 1.4.6 Contrast Enhanced (AAA)
    ✅ Automatisch: Pass
    Axe `wcag2aaa` prüft Enhanced Contrast auf den Kernrouten; die aktuellen Kontrast-Fundstellen wurden über dunklere Text-, Button- und Badge-Farben geschlossen.
  62. 1.4.7 Low or No Background Audio (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine Hintergrund-Audioinhalte.
  63. 1.4.8 Visual Presentation (AAA)
    ⚠️ Manuell offen
    Reflow und Text-Spacing werden automatisch geprüft; vollständige AAA-Bewertung zu Spaltenbreite, Blocksatz, Zeilenabstand und Nutzeranpassung bleibt manuell offen.
  64. 1.4.9 Images of Text No Exception (AAA)
    ✅ Automatisch: Pass
    Automatischer Bild-Smoke findet keine informativen Bilder von Text; Brand-Grafik ist dekorativ innerhalb eines benannten Links.
  65. 2.1.3 Keyboard No Exception (AAA)
    ✅ Automatisch: Pass
    Die geprüften Interaktionen nutzen native Links, Buttons und Formularcontrols; der Tastatur-Smoke findet keinen nicht per Tastatur erreichbaren Kernpfad.
  66. 2.2.3 No Timing (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine zeitabhängigen Aufgaben oder Timeouts auf den geprüften Routen.
  67. 2.2.4 Interruptions (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine automatisch einblendenden Unterbrechungen im geprüften Flow.
  68. 2.2.5 Re-authenticating (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine Authentifizierung und damit keine Re-Authentifizierung.
  69. 2.2.6 Timeouts (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keine Sitzungs-Timeouts im geprüften Scope.
  70. 2.3.2 Three Flashes (AAA)
    ℹ️ Automatisch: nicht anwendbar
    DOM-Smoke findet keine Video-, Canvas-, Blink- oder Marquee-Inhalte, die Flashing auslösen könnten.
  71. 2.3.3 Animation from Interactions (AAA)
    ✅ Automatisch: Pass
    Reduced-Motion wird emuliert; Interaktionsanimationen sind dekorativ, kurz und werden bei reduzierter Bewegung zurückgenommen.
  72. 2.4.8 Location (AAA)
    ⚠️ Manuell offen
    Dokumenttitel, h1 und aktive Navigation geben Orientierung; eine vollständige AAA-Bewertung der Standortinformation bleibt manuell offen.
  73. 2.4.9 Link Purpose Link Only (AAA)
    ✅ Automatisch: Pass
    Automatische Linknamen-Smokes prüfen, dass Links aus ihrem Namen heraus verständlich bleiben; Screenreader-Kontext bleibt manuell zu prüfen.
  74. 2.4.10 Section Headings (AAA)
    ✅ Automatisch: Pass
    Die Kernrouten werden auf genau ein h1 und nicht-leere Abschnittsüberschriften geprüft.
  75. 2.4.12 Focus Not Obscured Enhanced (AAA)
    ⚠️ Manuell offen
    Der aktuelle Smoke prüft sichtbare Fokuslage im Viewport; ob kein Teil des Fokusindikators verdeckt ist, bleibt als AAA-Enhanced-Detail manuell offen.
  76. 2.4.13 Focus Appearance (AAA)
    ⚠️ Manuell offen
    Fokus-Sichtbarkeit wird automatisch geprüft; die exakte AAA-Flächen-/Kontrastanforderung für Fokusindikatoren bleibt manuell offen.
  77. 2.5.5 Target Size Enhanced (AAA)
    ⚠️ Manuell offen
    AA-Mindestgröße wird automatisch geprüft; die strengere 44px-AAA-Zielgröße ist noch nicht als harter automatischer Gate umgesetzt.
  78. 2.5.6 Concurrent Input Mechanisms (AAA)
    ✅ Automatisch: Pass
    Die App beschränkt Eingabemodalitäten nicht; native Controls bleiben für Touch, Tastatur und Pointer nutzbar.
  79. 3.1.3 Unusual Words (AAA)
    ⚠️ Manuell offen
    Ungewöhnliche Begriffe, Produktwörter und externe Abkürzungen können nicht zuverlässig automatisch bewertet werden; redaktionelle Prüfung bleibt offen.
  80. 3.1.4 Abbreviations (AAA)
    ⚠️ Manuell offen
    Abkürzungen wie WCAG, TMDb oder PWA brauchen redaktionelle Bewertung; die automatische Matrix markiert das als manuell offen.
  81. 3.1.5 Reading Level (AAA)
    ⚠️ Manuell offen
    Leseniveau und ergänzende Erklärungen können nicht belastbar per Browser-Smoke bewertet werden; manuelle Textprüfung bleibt offen.
  82. 3.1.6 Pronunciation (AAA)
    ⚠️ Manuell offen
    Aussprachehilfen sind nicht automatisch bestimmbar; aktuell manuell offen, falls mehrdeutige Wörter fachlich relevant werden.
  83. 3.2.5 Change on Request (AAA)
    ✅ Automatisch: Pass
    Navigation und Zustandswechsel laufen über explizite Links, Buttons, Submit oder bewusste Auswahländerungen.
  84. 3.3.5 Help (AAA)
    ⚠️ Manuell offen
    Erklärung, Barrierefreiheit, Datenschutz, Impressum und Kontakt sind erreichbar; ob jede Aufgabe genug kontextuelle Hilfe hat, bleibt manuell offen.
  85. 3.3.6 Error Prevention All (AAA)
    ⚠️ Manuell offen
    Such- und Feedback-Flows haben ruhige Statusmeldungen; vollständige AAA-Bewertung für alle Eingaben bleibt manuell offen.
  86. 3.3.9 Accessible Authentication Enhanced (AAA)
    ℹ️ Automatisch: nicht anwendbar
    Es gibt keinen Authentifizierungsflow.

Was dabei im Hintergrund passiert

Playwright startet über die Projektkonfiguration lokal npm run dev auf 127.0.0.1:3000, sofern dort kein Server wiederverwendet wird. Danach steuert der Testbrowser echte Seiten an, wartet auf sichtbare Inhalte und führt Erwartungen gegen die gerenderte Oberfläche aus.

Die axe-Prüfungen laufen in zwei Varianten: einmal über @axe-core/playwright und zusätzlich als direkt in die Seite injiziertes axe-core. Die Ergebnisse werden im Testlauf als JSON-Anhang aufbereitet, damit Funde nicht nur als kurze Konsolenmeldung stehen bleiben.

Für Browserzustände werden echte Interaktionen genutzt: Eingaben in Suchfelder, Tastatur-Tab-Reihenfolge, Enter auf Skiplinks, Fokus nach Reload, Öffnen von summary-Elementen, mobile Menübedienung und kleine Viewports bis 320 CSS-Pixel.

Wie die Tests hergeleitet wurden

Die Tests sind aus den Produkt- und A11y-Leitplanken abgeleitet: HTML-first, Standardoberfläche als Primärpfad, keine rein farbliche Information, keine flüchtigen Tooltip-Pflichtwege, sichtbarer Fokus, Tastaturbedienung, kleine Viewports und verständliche Zustände.

Daraus wurden konkrete Prüfpfade gemacht: Startseite, Suche ohne Query, Suche mit Query, Detailseite, Offline-Seite, Erklärung, Barrierefreiheit, Kontakt, Datenschutz und Impressum. Jede Route prüft zuerst, ob die erwarteten Inhalte sichtbar sind; danach laufen Axe- oder Interaktionschecks auf der tatsächlich gerenderten Seite.

Zusätzlich prüfen Unit-Tests die fachliche Grundlage hinter der Oberfläche, damit sichtbare Texte nicht versehentlich zu Scores, Rankings, Scheinpräzision oder reduzierender Sprache kippen.

Bekannte Grenzen

  • Datenbasis und erste Einschätzungen bleiben unsicher.
  • Die manuelle Prüfung ist noch nicht vollständig abgeschlossen.
  • Screenreader- und Mobile-Prüfung werden weiter geschärft.
  • Externe Dienste und externe Websites sind nicht Teil dieser Seite.

Kontakt

Hinweise auf Barrieren oder unklare Bedienwege sind willkommen. Nutze dafür das Kontaktformular oder schreibe direkt an hallo@null-noise.de.