Checklist (prioritized)

Aligned with WCAG 2.2 AA / EU Accessibility requirements. Use this as a pre‑launch QA list.

Comprehensive checklist for content, design, code, and interactions.
Priority Area Rule Do Don’t
High Headings Exactly one <h1> per page; use h2–h6 in order. <h1>Mobilet – Parken & Tickets</h1> <h1>Start</h1><h1>Auch Überschrift</h1>
High Skip Links Hidden links to content, menu, footer at top of page. <a class="screen-reader-text" href="#maincontent">Zum Hauptinhalt springen</a> <!-- none -->
High Links & Buttons Clear text; avoid duplicate links to the same target inside one block. <a href="/preise">Preise ansehen</a> <a href="/preise" aria-label="Link zu Preise">Mehr</a>
High Images Informative images need alt; decorative alt="" or CSS background. <img src="qr.png" alt="Beispiel-QR-Code für Ticket"> <img src="qr.png" alt="Bild">
High Color & Focus Contrast ≥4.5:1 (text); visible keyboard focus on all controls. body{color:#111;background:#fff} :focus{outline:2px solid currentColor;} #aaa on #fff; button{outline:none}
High Forms Label each input; explain errors; associate help text. <label for="email">E‑Mail</label><input id="email" type="email"> <input placeholder="E‑Mail">
High Video & Audio All media must have captions; audio content needs transcript. Video mit synchronen Untertiteln <track kind="captions" src="subs.vtt" srclang="de" /> Video ohne Untertitel oder Transkript
High PDFs & Docs Use tagged PDF; headings, reading order, alt text, bookmarks. Export aus Word mit "Barrierefreiheitsprüfung bestanden" Gescanntes Bild-PDF ohne Text
High Error Prevention Confirm before submitting irreversible actions; allow review. "Bestellung prüfen" Seite vor finaler Zahlung Direkter Kauf ohne Bestätigungsseite
Medium Pattern Backgrounds Use solid overlay or remove pattern under text for legibility. .hero{background:linear-gradient(rgba(255,255,255,.9),rgba(255,255,255,.9)),url(bg.jpg);} Text directly on a noisy pattern
Medium Focus Order Logical tab sequence; avoid tabindex > 0. :focus{outline:2px solid currentColor;outline-offset:3px;} tabindex="5"
Medium Heading Length Short, descriptive h1 (≈3–6 words) matching page purpose. <h1>Mobilet: Parken & Tickets</h1> <h1>Willkommen auf unserer wunderschönen ...</h1>
Medium Language Attribute Set lang on <html> and for inline changes. <html lang="de">…</html> <html>…</html> ohne lang
Medium Reduced Motion Respect prefers-reduced-motion to limit animations. @media (prefers-reduced-motion: reduce){ *{animation:none;transition:none;} } Unabschaltbare Animationen
Medium Timing Allow users to extend or turn off time limits. "Sitzung verlängern" Button bei Timeout Automatischer Logout ohne Warnung
Low ARIA Prefer native HTML; only add ARIA where needed (no redundancy). <nav aria-label="Hauptnavigation">...</nav> <a aria-label="Link zu Preise" href="/preise">Preise</a>
Low New Windows Inform users when a link opens a new tab or file. <a href="file.pdf" target="_blank">PDF (öffnet in neuem Tab)</a> <a href="file.pdf" target="_blank">PDF</a>
Low Link Purpose (Context) Link text must be meaningful out of context. <a href="/kontakt">Kontakt aufnehmen</a> <a href="/kontakt">Hier</a>
Low Consistent Navigation Menu items should appear in the same order on every page. Hauptnavigation: Home – Produkte – Preise – Kontakt Unterschiedliche Menüreihenfolge

High Priority Examples — Do & Don’t

Skip Links

<a class="screen-reader-text" href="#maincontent">Zum Hauptinhalt springen</a>
<a class="screen-reader-text" href="#site-navigation">Zum Menü springen</a>
<a class="screen-reader-text" href="#site-footer">Zum Footer springen</a>

Images (alt text)

<img src="qr.png" alt="Beispiel-QR-Code für Ticket" />
<img src="linie.svg" alt="" role="presentation" /> <!-- decorative -->

Links & Buttons

<a href="/preise">Preise ansehen</a>
<button type="submit">Bezahlen</button>

Color Contrast — readable text vs low contrast

Color contrast: Do and Don't Comparison between low contrast gray text on gray background and high contrast text on white background with ratio labels. Wichtige Headline Grauer Text auf grauem Hintergrund. Kontrast ≈ 2.3:1 (fail). Contrast: 2.3:1 Don’t: Niedriger Kontrast WCAG AA verlangt mind. 4.5:1 für Fließtext. Wichtige Headline Dunkler Text auf hellem Hintergrund. Kontrast ≥ 7.0:1 (pass). Contrast: 7.1:1 Do: Hoher Kontrast Erfüllt AA/AAA – besser lesbar für alle.
Setzt klare, ausreichende Kontraste. Ziel: ≥ 4.5:1 für Text.

Image Alt Text — meaningful alt vs missing/wrong alt

Bild Alt-Text: Do and Don't Vergleich zwischen sinnvollem Alt-Text und fehlendem/falschem Alt-Text. Beschriftungen stehen unter den Bildflächen, damit nichts überläuft. Don’t Alt-Text fehlt oder ist generisch. <img src="team.jpg" alt=""> <img src="team.jpg" alt="Bild"> Screenreader melden “Grafik” ohne Inhalt. Do Beschreibender Alt-Text (funktional/informativ). <img src="team.jpg" alt="Team Mobilet vor Messestand"> Wenn dekorativ: <img alt="" role="presentation">
Alt-Text beschreibt Funktion/Information. Rein dekorative Bilder bekommen leeres alt.

Form Labels & Errors — proper association & clear errors

Formulare: Labels & Fehlermeldungen Vergleich eines Formulars ohne Labels und ohne Fehlerbindung mit einem Formular mit for/id-Labels und aria-describedby Fehlerhinweis. Don’t Name E‑Mail Senden

• Keine <label>-Elemente, nur Platzhalter.

• Fehlermeldung nicht mit dem Feld verbunden.

<input placeholder="E‑Mail"> <span>Ungültig</span>

Do Name E‑Mail * Fehler: Bitte gültige E‑Mail eingeben. Senden

• Sichtbare <label for> mit passender id.

• Fehler via aria-describedby an das Feld binden.

<label for="email">E‑Mail</label> <input id="email" aria-describedby="email-err">

Immer echte Labels verwenden, Fehler an Felder koppeln und ausreichend Abstand/Größe für Eingaben und Buttons einhalten.

How to use this page

  1. Open the target page in a new tab and run quick tests with WAVE / AudioEye / EXPERTE (links above).
  2. Keyboard test: Tab through the page — can you reach all links, buttons, and form fields? Is focus visible?
  3. Screen reader spot‑check (NVDA/VoiceOver): do headings, links, and images make sense?
  4. Fix High priority items first, then Medium, then Low.

Content Preflight

mini‑form (so nothing ships without basics)

Content Preflight (must‑do before publish)

Haken setzen = geprüft. Ziel: High first, dann Medium.

High



Medium
Low

Alt‑Text Kochbuch (schnell & sicher)

  • Informativ: Was sieht/man lernt man? “QR‑Code für Mobilet‑Ticket mit Preis 2,90 €.”
  • Funktional: Was macht das Bild? “Button: Ticket scannen” (wenn als Bild umgesetzt).
  • Dekorativ: alt="" und role="presentation" (keinen Text erfinden).
  • Logos: “Mobilet Logo” (oder leeres alt, wenn daneben der Name als Text steht).

Color Tokens — palette & contrast proof

These tokens are WCAG‑friendly defaults for mobilet. The right side shows typical text/background pairs with their contrast ratio and pass status.

Mobilet Farb‑Tokens mit Markenfarben: Do vs Don’t Vergleich zugänglicher, kontrastreicher Markenfarb‑Kombinationen mit problematischen Kombinationen. Labels im Chip werden gekürzt und laufen nicht über. Don’t — problematische Kontraste Text: #cccccc Hintergrund: #f6f6f6
Kontrast: Fail (zu gering)
Text: #cfdbe5 Hintergrund: #e4ebf1
Kontrast: Fail (zu gering)
Text: #094b82 Hintergrund: #053a66
Kontrast: Fail (zu gering)
Faustregel: Für Fließtext mindestens AA (≥ 4.5:1).
Do — zugängliche Marken‑Kombinationen Text: #555555 Hintergrund: #f6f6f6
Kontrast: Pass (AA)
Text: #ffffff Fläche: #094b82 (CTA)
Kontrast: Pass (AA/AAA)
Text: #ffffff Fläche: #be0005 (Hinweis/Alert)
Kontrast: Pass (AA/AAA)
Empfehlung: #555 auf #f6f6f6 für Fließtext; Weiß auf #094b82 oder #be0005 für Buttons/Alerts.
Verwendet nur Markenfarben in Kombinationen, die für Text klar lesbar sind. Labels kürzen sich mit … und laufen nie aus den Chips heraus.
Copy‑ready CSS tokens for developers
:root{
  --brand-gray-300:#cccccc;
  --brand-gray-50:#f6f6f6;
  --brand-text:#555555;
  --brand-blue:#094b82;
  --brand-blue-dark:#053a66;
  --brand-red:#be0005;
  --brand-red-dark:#8c0005;
  --brand-blue-100:#cfdbe5;
  --brand-blue-50:#e4ebf1;

  --ax-bg:#ffffff;
  --ax-text:#111111;
  --ax-surface:var(--brand-gray-50);
  --ax-primary:var(--brand-blue);
  --ax-primary-on:#ffffff;
}
body{background:var(--ax-bg);color:var(--ax-text)}
a{color:var(--ax-primary)}
.btn-primary{background:var(--ax-primary);color:var(--ax-primary-on)}

Pattern / Hero Overlay — keep text readable

Never place text directly on busy photos or patterns. Use a solid or high‑opacity scrim so contrast stays ≥ 4.5:1.

Hero/Pattern Overlay: Do and Don't Vergleich: Links Text direkt auf unruhigem Bild (zu wenig Kontrast), rechts mit solider Overlay/Scrim und gutem Kontrast. Don’t — Text direkt auf Muster/Foto Sommer‑Aktion Jetzt parken & sparen Kontrast: Fail Problem: Unruhiger Hintergrund + #555 auf hellem Blau → unter 4.5:1. Kein Scrim/Overlay, Text “flimmert”. Do — solide Overlay/Scrim + klarer Kontrast Sommer‑Aktion Jetzt parken & sparen Kontrast: Pass (AA/AAA)
  • Immer Scrim/Overlay (≥70% dunkel #053a66 oder ≥90% hell #f6f6f6).
  • Text auf Scrim: Weiß #ffffff auf #053a66/#094b82 oder #555 auf #f6f6f6.
  • Kein Text direkt auf Foto/Pattern. Kontrast ≥ 4.5:1 (Body), ≥ 3:1 (große Überschriften >= 24px/700).
Links: unleserlich durch Muster + zu wenig Kontrast. Rechts: Scrim/Overlay in Markenfarbe + klarer Kontrast → lesbar.
Dev helper — drop‑in CSS for hero overlays
/* Dark scrim in brand blue (preferred for white text) */
.hero--scrim-dark {
  position: relative;
  color: #fff; /* use white on dark scrim */
}
.hero--scrim-dark::before {
  content: "";
  position: absolute; inset: 0;
  background: rgba(5, 58, 102, 0.72); /* #053a66 @ 72% */
  pointer-events: none;
}

/* Light scrim (when you want dark text) */
.hero--scrim-light {
  position: relative;
  color: #555; /* dark text */
}
.hero--scrim-light::before {
  content: "";
  position: absolute; inset: 0;
  background: rgba(246, 246, 246, 0.92); /* #f6f6f6 @ 92% */
  pointer-events: none;
}

/* Safe text container inside hero */
.hero__inner {
  position: relative; /* sits above ::before scrim */
  max-width: 64rem;
  padding: clamp(16px, 4vw, 48px);
}

/* Quick contrast guardrails */
.hero--scrim-dark .btn-primary { background:#094b82; color:#fff; }
.hero--scrim-light .btn-primary { background:#094b82; color:#fff; }
Content rules (Marketing)
  • Kein Text in Bilder rendern. Headlines/CTAs immer als HTML.
  • Kurz & klar: H1 3–6 Wörter; Subline max. 80–100 Zeichen.
  • Buttons sichtbar: Weiß auf #094b82 oder #be0005 (AA/AAA).
  • Foto zu wild? Scrim‑Deckkraft erhöhen, bis der Kontrast‑Check (WAVE/EXPERTE) passt.

Video Captioning — micro‑workflow (EU AA / WCAG 2.2)

All videos must have captions; audio‑only needs a transcript. Prefer human‑reviewed captions (WebVTT). Avoid autoplay-without-sound, and always provide player controls.

Video captioning: Do and Don't Links: Autoplay, keine Untertitel, keine Steuerung. Rechts: Steuerung, geprüfte Untertitel (VTT), Transkript‑Link und klare Beschriftung. Don’t — Autoplay, keine Captions, keine Steuerung Kein track (Captions) Autoplay ohne Opt‑in Keine Player‑Controls
Fehlt: Untertitelspur (VTT), Transcript, Steuerung. Risiko für Nutzer & rechtlich.
Do — Controls, geprüfte Captions + Transcript [Musik] Jetzt Ticket in der App kaufen CC Untertitel (VTT) <track> default Controls sichtbar, kein Autoplay Transcript verlinkt & programmatisch gebunden
  1. Auto‑Captions generieren
  2. Human‑Review & Zeitcodes
  3. Export als .vtt
  4. Einbinden mit <track>
  5. Transcript bereitstellen
  6. QA mit WAVE/EXPERTE
Immer Untertitel (VTT) bereitstellen, Player‑Steuerung anzeigen, Transcript verlinken. Kein Autoplay ohne Nutzer‑Einwilligung.
Dev helper — minimal, standards‑based embed
<figure aria-labelledby="vid1-title" aria-describedby="vid1-desc">
  <figcaption id="vid1-title">Mobilet – Ticket kaufen in 30 Sekunden</figcaption>
  <video id="vid1" controls preload="metadata" width="100%" style="max-width:720px">
    <source src="/media/mobilet-demo.mp4" type="video/mp4">
    <track kind="captions" src="/media/mobilet-demo.de.vtt" srclang="de" label="Deutsch" default>
    <track kind="subtitles" src="/media/mobilet-demo.en.vtt" srclang="en" label="English">
    <!-- Optional: audio descriptions if available -->
    <!-- <track kind="descriptions" src="/media/mobilet-demo.desc.vtt" srclang="de" label="Audiodeskription"> -->
  </video>
  <p id="vid1-desc">
    Transcript: <a href="/media/mobilet-demo-transcript.html">Vollständiger Text</a>.
  </p>
</figure>
Marketing rules (quick)
  • Immer Captions. Sprache prüfen, Namen/Zahlen korrekt. Musik/Off‑Screen beschreiben (“[Musik]”, “[Applaus]”).
  • Autoplay vermeiden. Falls absolut nötig: muted, ohne Ton starten und Controls sichtbar lassen.
  • Transcript direkt unter dem Video verlinken (oder auf gleicher Seite einblenden).
  • Sprachen: mind. DE; EN wenn Video international genutzt wird.
  • QA: WAVE/EXPERTE scannen; kurz mit Screenreader testen (Untertitel werden angekündigt?).

Bad link text — instant red flags (and how to fix)

Link text: Do and Don't Links: Links mit vagen Texten (Hier/Mehr/Klicken Sie hier), Icon-only ohne Namen und doppelte “Mehr”-Links vs. klare, kontextreiche Linktexte mit Zielhinweisen. Don’t — vage, doppelt, ohne zugänglichen Namen
News: Neue Preise und Parkzonen in Ihrer Stadt
Hier Mehr Klicken Sie hier
Icon‑only ohne zugänglichen Namen
“Hier”, “Mehr”, “Weiterlesen” allein
Icon‑only Links ohne aria-label/title
Zwei “Mehr”-Links nebeneinander zum selben Ziel
Versteckter Kontext erst im umgebenden Text (Link steht allein nicht für sich)
Screenreader lesen Links oft als Liste. “Mehr”/“Hier” ohne Kontext ist nutzlos. Icon‑only braucht einen zugänglichen Namen.
Do — klare, kontextreiche Linktexte
News: Neue Preise und Parkzonen in Ihrer Stadt
Preise und Zonen ansehen Datenschutzerklärung (PDF, 120 KB)
Wenn neuer Tab: “(öffnet in neuem Tab)” angeben.
Linktext sagt Ziel oder Aktion (z. B. “Support kontaktieren”)
Icon‑Links: sichtbarer Text oder aria-label
“Weiterlesen” nur zusätzlich — Hauptlink bleibt aussagekräftig

HTML Beispiele:

<a href="/preise">Preise und Zonen ansehen</a>
<a href="/kontakt">Support kontaktieren</a>
<a href="/dse.pdf" target="_blank">Datenschutzerklärung (PDF, 120 KB, öffnet in neuem Tab)</a>
<a href="/konto" aria-label="Konto öffnen"><svg aria-hidden="true">…</svg></a>
Links müssen allein verständlich sein (Ziel/Aktion nennen). Icon‑Links brauchen einen zugänglichen Namen. Neue Tabs/Dateien ankündigen.

Hero Images with Text — Do & Don’t (4 examples)

Hero image overlays: Do and Don't Vier Beispiele: 1) Text direkt auf unruhigem Bild (Don’t). 2) Bild mit dunklem Verlauf-Overlay und weißem Text (Do). 3) Bild mit heller Textkarte (Do). 4) Bild mit eingebrannter Schrift (Don’t). Don’t — Text direkt auf unruhigem Bild Mobilet Tickets Jetzt sofort starten Kontrast: Fail (unter 3:1)

Unruhige Muster + kein Overlay ⇒ Text schwer lesbar (WCAG 1.4.3/1.4.11).

Do — Verlauf‑Overlay + Weiß (#fff) Mobilet Tickets Schnell. Einfach. Überall. Kontrast: Pass (≥ 3:1 / 4.5:1)

Dunkles Overlay sorgt für stabilen Kontrast. H1 bleibt HTML.

Do — Helle Textkarte auf Bild Mobilet Tickets In Sekunden kaufen Kontrast: Pass (AA)

“Card” schützt Text vor Bilddetails; immer finalen Kontrast prüfen.

Don’t — Bild mit eingebrannter Überschrift “JETZT TICKET KAUFEN” Bild enthält Text (1.4.5) Nicht skalierbar/übersetzbar

Keine “Images of Text”: Überschrift muss <h1> als echter Text sein.

Setzt immer Overlay (Verlauf oder Karte), haltet Kontrast‑Grenzen ein und verwendet echte HTML‑Überschriften anstatt eingebrannten Text im Bild.

Hero with Title + Button — Do & Don’t (4 examples)

Hero title on image with CTA button: Do and Don't Vier Beispiele: 1) Don’t: Text/CTA direkt auf unruhigem Bild mit schwachem Kontrast. 2) Do: Dunkles Overlay + echter Button. 3) Do: Helle “Card” mit Titel/CTA. 4) Don’t: Text & Button ins Bild eingebrannt. Don’t — Text/CTA direkt auf Bild (geringer Kontrast) Mobilet Tickets Parken & ÖPNV Jetzt kaufen Kontrast Text & Button: Fail Kein Fokus‑State

Text verschwindet im Bild. Button ist visuell schwach, Fokus nicht sichtbar. Verstößt gegen WCAG 1.4.3 (Kontrast) und 2.4.7 (Focus Visible).

Do — Dunkles Overlay + klarer Button Mobilet Tickets Schnell. Einfach. Überall. Jetzt kaufen Kontrast Text/CTA: Pass Fokus sichtbar

Überschrift bleibt echter Text. Button hat ausreichenden Kontrast (≥4.5:1) und klaren Fokus‑Ring. <button> oder <a role="button"> semantisch korrekt verwenden.

Do — Helle Textkarte auf Bild + CTA Mobilet Tickets In Sekunden kaufen Los Text auf Karte → Pass Zielgröße ≥ 44×44

Karte entkoppelt Text vom Bild. Button groß genug für Touch (≥44×44 px) und klar beschriftet.

Don’t — Überschrift & Button im Bild “eingebrannt” JETZT TICKET KAUFEN Los “Image of Text” (1.4.5) Button nicht fokussierbar

Text & Button müssen echte HTML‑Elemente sein (übersetzbar, skalierbar, fokusfähig). Keine eingebrannten Buttons in Bildern.

Regeln: Immer echtes HTML für Titel/CTA, Kontrast (≥4.5:1), sichtbarer Fokus, Zielgröße ≥44×44 px, und Overlay/Karte nutzen, wenn ein Foto dahinter liegt.