Zum Hauptinhalt springen

UX- & Prozess-Review der App (Stand v0.144.1, 2026-09-25)

Zielgruppen: Business/Management (Kernaussage + Maßnahmenplan) · IT-Dev (Befunde mit Datei:Zeile). True North: Prüft, ob die App die drei Leitfragen verständlich, konsistent und intuitiv beantwortet — diese Runde als Wirksamkeits-Kontrolle über 12 Minor-Versionen (v0.116.1 → v0.128.0): halten die geprüften Kern-Muster (Overlay-Shell, Reiter-A11y, Token-Disziplin) nach dem großen „Akte" → „Mandant"- Rename (MED-D-277) und dem durchlaufenden Timer/Push-Umbau, und tragen die seither gebauten neuen Flächen (Onboarding-3-Schritte-Stepper · Ablage-Spiegel + „erwartete Dokumente"-Disclosure · Dentmarking- Gate · Kunden-Self-Service-Portal S1/S2 dormant) denselben Meisterwerk-Anspruch? Methode: Code-Re-Audit gegen die v0.116.1-Befunde (B36–B43) + Neu-Flächen-Sweep (silent-error- Swallowing, role="alert"-Abdeckung, Touch-Ziele, G-8-Labels vs. rohe Enums, Token-Disziplin, Overflow- Risiko, Theme-Konsistenz), jeweils mit Verdikt + Datei:Zeile. Bezugspunkt & Gültigkeit (MED-D-97): v0.128.0 · Commit (Commit wird beim Merge gestempelt) · 2026-09-12. Löst das v0.116.1-Audit (MED-D-259) ab. Dessen Backlog MED-OP-UX-11 (B36–B40) ist überwiegend offen (nur B39 im Zuge des MED-D-277-Renames geschlossen) und wird unverändert weitergetragen; MED-OP-UX-12 (B41–B43): B41 erledigt (MED-D-261 Token-Fix), B42/B43 offen → weitergetragen. Neu abgeleitet: B44–B45 → MED-OP-UX-13. Nächster App-Audit gemäß Stale-Regel (agents.md §6.7: ≥10 Minor-Versionen oder >90 Tage).


E. Einfachheits-Audit v0.144.1 (2026-09-25, MED-D-326) — Linse „ältere / wenig IT-affine Nutzer"​

Zielgruppen: Business/Management (Kernaussage + Maßnahmen) · IT-Dev (Belege Datei:Zeile) · Customer Service. Bezugspunkt: v0.144.1 · Commit 2e57381 · 2026-09-25. Frage (Nutzer): „Die Benutzerführung intern als auch für Kunden soll absolut trivial sein, sodass sich auch ältere oder weniger IT-affine Menschen darin zurechtfinden." Methode: App lokal gestartet (Full-Stack-Worker, Testdaten), Screenshots Desktop 1366 px

  • Mobil 390 px, dazu Code-Sichtung aller Staff- und Kundenflächen. IDs sind audit-lokal (U-/K-/I-/M-).

E.1 Kernaussage​

Nicht trivial — weder intern noch für Kunden. Die Oberfläche ist technisch sauber, aber entlang des Datenmodells statt entlang der Aufgabe gebaut: zu viele gleichzeitige Bedienelemente/Status, zu viele Wege für dieselbe Aufgabe, Fachjargon/interne IDs sichtbar, zu kleine/blasse Schrift. Kunden erhalten viele verschiedene Links, aber keinen Ansprechpartner mit Namen/Telefon. Die bisherigen Audits (A11y/Tokens) maßen Konsistenz — diese Linse misst kognitive Last, und dort liegt der größere Hebel.

E.2 Harte Fehler (in derselben Runde behoben → MED-D-329)​

IDBefundBelegStatus
U-01/portal zeigte Kunden die interne Staff-Kopfzeile (Cockpit/Verwaltung/Build/Theme) und rief Staff-Endpunkteapp.component.ts istOeffentlich ohne /portal✅ MED-D-329
U-02Korrektur-Mail kam nie an: empfaenger: null → Mail-Adapter überspringt still; Link relativformular-vorgang-service.ts (Sichtung abschließen), cloudflare-email.ts✅ MED-D-329
U-03Primary-Button-Kontrast 2,4:1 (Weiß auf #76b82a, WCAG AA verlangt 4,5:1)styles.css button.primary/.mw-btn.primary✅ MED-D-329
U-04Kundenstrecken unbedingt dunkel, Portal hell (B44)app.component.ts, styles.css :root✅ MED-D-329

E.3 Kundenseite (→ MED-OP-UX-15)​

IDBefund
K-01✅ MED-D-332 — Kein Ansprechpartner (Name/Telefon), kein Impressum-/Datenschutz-Link auf den Kundenseiten; einzige System-Mail an Kunden ist der Portal-Anmelde-Link (nackter Link, 15 min, no-reply@).
K-02✅ MED-D-333 (Portal = eine To-do-Liste; Formular-Einladungen versenden weiter die Mitarbeitenden) — Bis zu 5+ verschiedene Links je Kunde (Onboarding, je Formular, Fragebogen, je Upload, Portal) + DocuSign; Portal ist nicht die eine To-do-Liste (Formulare nicht öffenbar, interne Items sichtbar, Dokumente doppelt).
K-03✅ MED-D-332 — Jargon: „Die Dexpansionsberater", „Nice-to-have", „Bot-Schutz-Prüfung", „Prüfsumme", „Fertigstellungsgrad", „technischer Status 0", „Mandantennummer", DSGVO-Artikelzitate, rohe Kategorien „(stammdatum)".
K-04✅ MED-D-332 — Deaktivierte Absende-Buttons ohne Begründung; Fehler nur unten, nicht am Feld.
K-05✅ MED-D-332 — Datum als nativer Browser-Picker (Format folgt der Browser-Sprache); IBAN/PLZ/Telefon ohne Formatbeispiel/Zifferntastatur; „weiß ich nicht"/„wird nachgeliefert" unter jedem Feld.
K-06✅ MED-D-333 — Fragebogen: 111 Fragen auf einer Seite.
K-07✅ MED-D-332 — Upload: keine Kamera-Option, ungestylter Datei-Button, Limits erst nach der Liste; separate Upload-Seite off-brand.
K-08✅ MED-D-333 (Keep-alive bei Aktivität) — Portal-Sitzung endet nach 30 min Leerlauf → Eingetipptes geht verloren.
K-09✅ MED-D-332 — Schrift vielfach 10–13 px (Labels/Hinweise).
K-10✅ MED-D-331 — Die weiche SLA-Erinnerung an Kunden (formular-vorgaenge-service.ts) hat ebenfalls empfaenger: null → erreicht den Kunden nicht (analog U-02, nicht in dieser Runde behoben).

E.4 Interne Seite (→ MED-OP-UX-16)​

IDBefund
I-01Startseite zeigt nicht, was heute fällig/überfällig ist (nur Mandantenliste); „Jetzt dran" liegt versteckt unter „Fokus". → M-03 (MED-D-328)
I-02✅ MED-D-335 — Mandantenseite überladen: ~30 feste Bedienelemente, >12 Status-Anzeigearten, Lifecycle 3× sichtbar, „Schritt 2 von 5" + „Phase stammdaten", 6 Reiter (letzter abgeschnitten).
I-03Zeiterfassung startet beim bloßen Öffnen eines Mandanten; Verlassen erzwingt ein Entscheidungs-Modal. → M-07 (MED-D-328)
I-04✅ MED-D-335 + MED-D-337 — ≥4 Wege "Dokument anfordern" (keiner versendet in-App), ≥6 Einstiege "Unterschrift" (einer umgeht den Assistenten).
I-05✅ MED-D-334 — Interne IDs/Technik sichtbar: „MED-D-195", „MED-KB-5", „G-4", „OP-SIGN-1", „Ablage (R2) provisionieren", „AcroForm", „Weltmodell-Attribut", „eIDAS-Niveau/Rechtsmatrix", „Tagestakt/Bahnen/Brennt/aktenreif".
I-06Begriffe uneinheitlich: Mandant/Mandat (1 Buchstabe Unterschied; Leitstand zählt Mandanten als „Mandate"), Wiedervorlage/Aufgabe/Frist, signiert/Unterschrift. → Begriffsentscheidung MED-D-326
I-07✅ MED-D-335 — Schrift meist ≤12,8 px (bis ~9 px), graue Versal-Überschriften, Klickflächen 16–24 px.
I-08Einzeltasten-Kürzel im Fokus (E/S/A) handeln bei versehentlichem Tastendruck; Swipe; Tooltip-only-Erklärungen; Icon-only-Buttons. → Kürzel: M-07 (MED-D-328)
I-09✅ MED-D-334 — Cockpit-Kopfzeile bei 1366 px zu breit (horizontales Scrollen); Build/Version für Büro sichtbar; toter Knopf „Suchen / Springen (bald verfügbar)".
I-10✅ MED-D-334 — Fehlermeldungen „… fehlgeschlagen." ohne Ursache/nächsten Schritt.
I-11✅ MED-D-334 — Zuweisen einer Wiedervorlage per freier E-Mail-Eingabe statt Personenauswahl.

E.5 Maßnahmen (nach Wirkung)​

IDMaßnahmeAufwandStatus
M-01U-01…U-04 behebenklein✅ MED-D-329
M-02Ein Einstieg für Kunden: Portal = einzige To-do-Liste mit „Jetzt erledigen"; App versendet Einladungen selbst, mit Name + Telefon des Beratersmitteloffen (MED-OP-UX-15)
M-03Startseite = „Heute": überfällig + heute fällig zuerst, darunter Mandantenlisteklein–mittel✅ MED-D-328
M-04Mandantenseite verschlanken: ein „Nächster Schritt"-Button, ein Status, Rest per „Mehr"; je Aufgabe ein Weggroßoffen (MED-OP-UX-16)
M-05Sprach-Durchgang: interne IDs/Technik raus; Begriffe „Kunde" + „Mandat" (MED-D-326)mittelBegriffe ✅ MED-D-330; interne IDs/Technik offen (MED-OP-UX-16)
M-06Senioren-Typografie: Grundschrift ≥16 px, nichts <14 px, Klickflächen ≥44 px, Kundenseiten hellmitteloffen (MED-OP-UX-15/16)
M-07Timer nicht automatisch starten; Einzeltasten-Kürzel standardmäßig ausklein✅ MED-D-328
M-08Nutzertest mit 3–5 älteren Nutzern je Rolle (Aufgaben laut denken, Zeit/Fehler messen)kleinoffen (MED-OP-UX-15/16)

0. Refresh v0.138.0 (2026-09-23, MED-OP-REVIEW-1) — Delta-Audit v0.128.0 → v0.138.0​

Kernaussage des Refreshs: kein UX-Regress; die seit v0.128.0 gebauten Flächen tragen den Meisterwerk-Anspruch, ein einziger neuer Kleinbefund (B46). Geprüft wurden die neuen/geänderten sichtbaren Flächen der Slices MED-D-304…311: Kunden-Portal-Client (/portal, portal-public.component.ts), Staff-Magic-Link-Login (/anmelden, staff-login.component.ts), der neue „Kundenportal"-Abschnitt in der Akte (mandant-einladungen.component.ts) und das Turnstile-Widget am Portal-Login (MED-D-311).

PrüfpunktVerdikt
Chrome-lose Kundenflächen (/portal, /anmelden) nutzen dieselbe .md-pub-Handschrift wie die 4 Public-Strecken (reuse md-pub-kopf/-fuss, ladeFehlerAuswerten)✅ konsistent, kein Sonderweg
Ehrliche Zustände statt stiller Fehler: Portal dormant/link_gesendet/link_ungueltig; Staff dormant/eingeloggt; 429/bot_check verständlich gemeldet; role="alert"/role="status" gesetzt✅ (True North #1 „ehrlich, wo steht der Kunde")
Akte „Kundenportal"-Abschnitt: E-Mail vorbelegt aus Kontakt, role="status"-Bestätigung, 409 „besteht bereits" wird als Erfolg erklärt (kein roher Fehler)✅
Bot-Schutz-Widget deaktiviert den Absende-Button bis Token vorliegt (gleiches Muster wie Lead-Strecke)✅
G-8/G-3-Labels statt roher Enums (Dokument-/Vorgang-Status über DOKUMENT_STATUS_LABEL/vorgangPill*)✅
B46 (neu, niedrig): portal-public.component schluckt den Fehler von GET /portal/config still (error: () => {}) → bei Config-Ausfall erscheint das Turnstile-Widget kommentarlos nicht; der Rate-Limiter schützt weiter, aber ein Hinweis fehlt🟡 → MED-OP-UX-13

Altbacklog weitergetragen (unverändert): MED-OP-UX-11 (B36–B40, B42/B43), MED-OP-UX-13 (B44–B45) + neu B46. Der detaillierte Vollaudit unten bleibt als Bezugsrunde v0.128.0 stehen (Historie in-file; git trägt den Vorstand).


1. Kernaussage​

Der Design-System-Kern und die drei neuen Flächen (Onboarding-Stepper, Ablage-Spiegel, Dentmarking-Gate) tragen den Meisterwerk-Anspruch ohne Regress; neu sind nur zwei kleine Befunde — die öffentlichen Kundenstrecken rendern unbedingt dunkel obwohl der Code sie „faktisch hell" nennt (B44), und ein Undo-Fehler wird still geschluckt (B45) — während der A11y-/Ehrlichkeits-Altbacklog (B36–B40, B42/B43) offen bleibt. Der geprüfte Design-System-Kern hält ohne Regress, auch durch den umfangreichen „Akte" → „Mandant"-Rename (MED-D-277): die geteilte overlay-shell (vormals akte-overlay) mit Scrim/ESC/Fokus-Falle/role="dialog"/ aria-modal und die Reiter-Roving-tabindex-Navigation sind intakt. Die drei neuen sichtbaren Flächen sind sauber gebaut:

  • Onboarding-3-Schritte-Stepper (MED-D-285) — ehrliche Schritt-Semantik (<ol> + aria-current="step"), jeder Fehler-Kanal role="alert" (onboarding-public.component.ts:94/:170), der „wo fehlt was?"-Report ist rein abgeleitet (G-2, keine neue Wahrheit): fehlende Pflicht getrennt von offenen optionalen Angaben, Fehlschläge landen im roten Kanal statt im neutralen „gespeichert"-Hinweis (:360-369). Beantwortet True North #1 direkter.
  • Ablage-Spiegel + „erwartete Dokumente"-Disclosure (MED-D-288) — abgelegt/erwartet sauber über nextcloudPfad getrennt (mandant-detail.component.ts:615/:685), Ladefehler role="alert" (:609), ehrlicher Empty-State — kein Onboarding-Platzhalter maskiert sich mehr als abgelegtes Dokument.
  • Dentmarking-Gate (MED-D-287) — vorbildlich fail-open: der Block bleibt bei Ladefehler sichtbar (mandant-detail.component.ts:588, praxen().length === 0 && !nebendatenFehler()), damit das Werkzeug bei gescheitertem Praxen-Load erreichbar bleibt — genau das Gegenmuster zur Falsch-Leere.

Was von der glatten Note trennt, sitzt in zwei neuen Kleinbefunden — plus dem überwiegend unveränderten Vor-Backlog:

  • Theme-Intent-Drift auf den Kundenstrecken (B44, niedrig-mittel; NEU): app.component.ts:160 überspringt auf öffentlichen Routen bewusst das Setzen von data-theme; das World-2-Token-Set hat aber im blanken :root Dunkel-Werte (styles.css:472), und .md-pub.mw-scope zieht --bg/--text/--panel daraus (:244-246). Ergebnis: alle vier öffentlichen Strecken rendern unbedingt dunkel — auch für einen Kunden mit Hell-Betriebssystem —, denn ohne data-theme greift weder die [data-theme='light']- noch die prefers-color-scheme-Regel. Das ist in sich konsistent (Dunkel-Text auf Dunkel-Grund, kein Kontrastbruch), widerspricht aber dem ausdrücklichen Code-Intent „Kundenseiten bleiben faktisch hell" (styles.css:45, app.component.ts:162) und macht B36 (Badge-Kontrast „v. a. Dark") zum Default statt zum Randfall.
  • Still geschluckter Undo-Fehler (B45, niedrig; NEU): die „Rückgängig"-Aktion der Bankkonto-Archivierung verwirft ihren Fehler still (mandant-detail.component.ts:1904, error: () => {}) — schlägt das Zurücksetzen fehl, ist der Toast weg und der Nutzer erfährt nicht, dass das Konto archiviert bleibt (B40-Klasse auf einer Sekundäraktion).
  • Der A11y-/Ehrlichkeits-Vor-Backlog ist überwiegend offen: B36 (Badge-Kontrast), B37 (Touch-Ziel „übernehmen"), B38 (Tabs ohne aria-controls/role=tabpanel), B40 (Cockpit-Wiedervorlagen still) sowie B42 (Rücklauf-Falsch-Leere) und B43 (<24-px-Ziel) unverändert. Positiv: B39 (zwei role=alert-Lücken) ist im Zuge des MED-D-277-Renames geschlossen; B41 (undefinierte Feld-Editor-Tokens) ist per MED-D-261 gefixt.

Bewertung je Dimension (10 = Meisterwerk; ↑/↓ ggü. v0.116.1):

Dimensionv0.116.1v0.128.0Begründung (Kurzform)
Informationsarchitektur & Prozessführung (intern)99Neue Flächen (Onboarding-Stepper, Ablage-Spiegel, Dentmarking-Gate) sauber strukturiert; die 5-Reiter-IA + Overlay-Shell überleben den Rename ohne IA-Verlust
Verlässlichkeit des Feedbacks88Onboarding-Stepper + Ablage melden ehrlich (role=alert, ehrliche Empty-States), Dentmarking-Gate fail-open; aber: neu erkannter still-geschluckter Undo (B45) + Alt-Rest B40 (Cockpit-Wiedervorlagen) + B42 (Rücklauf-Falsch-Leere)
Selbsterklärbarkeit / eine Sprache (G-3/G-8)99,5zentrale Label-Maps halten; der „Akte" → „Mandant"-Rename (MED-D-277/278) vereinheitlicht die sichtbare Sprache über UI und Doku — ein Begriff statt zwei
Kundenstrecken (öffentlich)8,58Onboarding-Stepper ist ein echter UX-Gewinn; aber: die Theme-Intent-Drift (B44 — unbedingt Dunkel trotz „faktisch hell") + B36 (Badge-Kontrast) + B37 (16-px-Ziel) drücken
Konsistenz Design/Interaktion7,58Erholung: B41-Token-Regress gefixt (MED-D-261); neue Flächen nutzen ausschließlich World-2-Tokens, kein eingeschleuster Hex — Token-Disziplin wieder makellos
Mobile & Erreichbarkeit88Onboarding-Stepper kollabiert sauber (Schritt-Labels ellipsis, min-width:0); Rest-Risiko: B37/B43 (<24-px-Ziele) unverändert
Barrierefreiheit88Overlay-Dialog-Semantik + Roving-tabindex intakt; B39 geschlossen; aber: B38 (aria-controls) + B36 (jetzt Default-Dark, B44) + B40 unverändert offen

2. Was gehalten wurde (bewahren)​

Belegt im Code-Re-Audit + Neu-Flächen-Sweep (Datei:Zeile):

  • Design-System-Kern ohne Regress (durch den MED-D-277-Rename hindurch):
    • Geteilte Overlay-Shell overlay-shell.component.ts (vormals akte-overlay) — role="dialog", aria-modal, Scrim-Close, Initial-Fokus, Fokus-Falle (Tab-Wrap), Fokus-Rückgabe, ESC nur bei Fokus im Panel; von allen Overlay-Konsumenten korrekt genutzt (Rücklauf-Overlay mandant-detail.component.ts:1063, Mandat-Overlay, Neuer-Mandant, Zeitbuchung).
    • Reiter-A11y (mandant-detail.component.ts:276-278) — role="tablist" + role="tab" + aria-selected
      • Roving-tabindex + registerTaste() (Pfeil/Pos1/Ende) intakt.
  • B39 geschlossen (Alt-MED-OP-UX-11): die zwei vormaligen role=alert-Lücken tragen jetzt die Rolle — mandant-druckansicht.component.ts:86/:309 (primärer Ladefehler + Audit-Verlauf) und mandant-meetings.component.ts:53 (Gesprächsnotizen-Ladefehler mit Retry).
  • B41 geschlossen (Alt-MED-OP-UX-12): der Feld-Editor nutzt keine undefinierten --fg/--gruen mehr (MED-D-261, reine CSS-Token-Korrektur) — die World-2-Tokens --text/--mut/--green sind kanonisch in styles.css:472-520 definiert und werden durchgängig genutzt.
  • Neue Flächen überwiegend sauber:
    • Onboarding-Stepper (onboarding-public.component.ts): aria-current="step" (:59), Fehler-Kanal role="alert" (:94/:170), abgeleiteter Lücken-Report (:260-264), Fehlschlag-Ehrlichkeit im roten Kanal statt im „gespeichert"-Hinweis (:360-369), Turnstile-Container per [hidden] schon im DOM (:146, CodeRabbit #322).
    • Ablage-Spiegel (mandant-detail.component.ts): abgelegt/erwartet über nextcloudPfad getrennt (:615/:685), erwartete in <details class="md-erwartet"> mit erhaltenen Intake-Aktionen (:686-689), Ladefehler role="alert" (:609).
    • Dentmarking-Gate (mandant-detail.component.ts:588): fail-open bei Praxen-Ladefehler — der Kommentar (:585-587) dokumentiert die Absicht explizit.
    • Kunden-Self-Service-Portal S1/S2 (MED-D-282/283): dormant/flag-gated (PORTAL_AKTIV), keine öffentliche Fläche in Prod — Golden Rule gewahrt, kein UX-Belang bis S3.

3. Verbliebene & neue Befunde​

3.1 Unverändert offen aus v0.116.1 (MED-OP-UX-11, B36–B40) — überwiegend kein Fix​

#BefundBeleg (v0.128.0 verifiziert)Status
B36Fragebogen-Badge weiß-auf-Farbe unter WCAG-AA (durch B44 jetzt Default-Dark)fragebogen-public.component.ts:190-193 (color:#fff auf --amber/--mut)offen
B37<16-px-Touch-Ziel „übernehmen"/„→ zu den Angaben" auf der Onboarding-Streckeonboarding-public.component.ts:188 (.md-ob-uebernehmen, padding:0.05rem 0.5rem ≈ 13 px), genutzt :88/:151offen
B38Reiter role="tab" ohne aria-controls; Ziel-Sektionen ohne role="tabpanel"mandant-detail.component.ts:278 (kein aria-controls), Panels z. B. :588 ([hidden] ohne role=tabpanel)offen
B392 role="alert"-Restlückenmandant-druckansicht.component.ts:86 · mandant-meetings.component.ts:53 — beide tragen jetzt role=alertgeschlossen
B40cockpit#meineWiedervorlagen() scheitert still → Falsch-Leere/Aktionsverlustcockpit.component.ts:987 (error: () => {})offen

3.2 Status MED-OP-UX-12 (B41–B43)​

#BefundBeleg (v0.128.0 verifiziert)Status
B41Feld-Editor undefinierte Tokens → unsichtbarer Text im Light-ThemeMED-D-261 (Token-Fix); World-2-Tokens styles.css:472-520 kanonischgeschlossen
B42Rücklauf-Prüfung zeigt bei Load-Fehler eine Falsch-Leere „nichts zu prüfen"mandant-detail.component.ts:1069-1070 (beruhigende Leer-Meldung) vs. :1090 (dokFehler-role=alert sitzt nur im gefüllten @else-Zweig; oeffneRuecklauf-Fehler → leer → Alert rendert nicht)offen
B43„Rücklauf prüfen"-Button unter 24-px-Touch-Zielmandant-detail.component.ts (interner Prüfen-Button, padding:4px 10px; font-size:0.8rem)offen

3.3 Neue Befunde (der nächste Backlog → MED-OP-UX-13)​

B44 — Öffentliche Kundenstrecken rendern unbedingt Dark trotz „faktisch hell"-Intent (niedrig-mittel; Theme-Konsistenz + Kommentar-Drift; NEU)​

app.component.ts:160 gibt auf öffentlichen Routen (istOeffentlich, :120-125) vor dem Theme-Effekt zurück → document.documentElement bekommt kein data-theme. Das World-2-Token-Set definiert seine Werte aber auf dem blanken :root dunkel (styles.css:472 :root, :root[data-theme='dark'] → --bg:#0d1210, --text:#e7ece8); Hell greift nur über :root[data-theme='light'] (:489) oder @media (prefers-color-scheme: light) { :root[data-theme='system'] } (:506) — beides braucht das nie gesetzte Attribut. .md-pub.mw-scope { background: var(--bg) } (:244) + .mw-scope { color: var(--text) } ziehen daraus → alle vier öffentlichen Strecken (Onboarding/Formular/Fragebogen/Lead) rendern unbedingt dunkel, auch für Hell-OS-Kunden, und honorieren prefers-color-scheme nicht. In sich konsistent (kein Kontrastbruch), aber der ausdrückliche Code-Intent „Kundenseiten bleiben faktisch hell / unangetastet" (styles.css:45, app.component.ts:162) ist damit irreführend, und B36 (Badge-Kontrast „v. a. Dark") wird zum Default. Fix (Entscheidung nötig): entweder öffentliche Routen bewusst auf hell festlegen (data-theme='light' beim Betreten setzen) oder prefers-color-scheme ehrlich honorieren + die beiden Kommentare korrigieren.

B45 — Undo der Bankkonto-Archivierung schluckt Fehler still (niedrig; True North #2, B40-Klasse auf Sekundäraktion; NEU)​

mandant-detail.component.ts:1904 — die „Rückgängig"-Aktion des Archivierungs-Toasts (bankkontoAendern(..., { pruefstatus: k.pruefstatus })) hat error: () => {}. Schlägt das Zurücksetzen fehl, verschwindet der Toast und der Nutzer erfährt nicht, dass das Konto archiviert bleibt — der optische Aktionsvollzug täuscht Erfolg vor. Fix: Fehler-Toast bei fehlgeschlagenem Undo (this.toast.fehler(...)), wie es die Primäraktion bankArchivieren bereits tut (:1907).

Weitere Kleinbeobachtungen (nicht als Befund gezählt): die Cockpit-Timer-Leseloops (cockpit.component.ts:946/:947) schlucken Fehler still — dort akzeptabel (reine UI-Uhr, Quelle bleibt aktiverTimer()); die Onboarding-Schritt- Labels kürzen bei ≤360 px via ellipsis (onboarding-public.component.ts:196) — bewusst, kein Overflow.

B35 — Carry-over, bewusst zurückgestellt (bekannt/akzeptiert, kein Regress)​

Unverändert: einige Modal-Dialoge mit eigener Fokus-Falle außerhalb der Overlay-Shell; Pill-Render- Vereinheitlichung; Einzelwert-Inline-Styles.


4. Maßnahmenplan​

Drei Wellen, klar priorisiert:

  1. MED-OP-UX-13 (neu) — die zwei neuen Kleinbefunde. Reihenfolge: B44 (Theme-Entscheidung Kundenstrecken — der Fix schärft zugleich B36, weil er entscheidet, ob Hell der Default wird → dann entschärft sich der Badge-Kontrast) → B45 (Undo-Fehler-Toast, 1-Zeilen-Fix). Beide niedrig, keine Blocker.
  2. MED-OP-UX-12 (Rest offen) — B42 (Rücklauf-Falsch-Leere, True North #2: eigenes ruecklaufFehler-Signal, in allen Zweigen mit role=alert rendern) → B43 (min-height:24px).
  3. MED-OP-UX-11 (überwiegend offen) — die A11y-/Ehrlichkeits-Restmeile (B36 → B37 → B38 → B40): Badge- Kontrast (mit B44 verzahnt) → 16-px-Ziel → Tabs-aria-controls/role=tabpanel → Cockpit-Falsch-Leere. Über 12 Minor unberührt geblieben — bewusst nachziehen.

B35/Carry-over bleibt bewusst offen (kein Regress).


*Dieses Audit ist ein Zeitdokument (MED-OP-REVIEW-1 / agents.md §6.7): Bezugspunkt v0.128.0 · Commit (Commit wird beim Merge gestempelt) · 2026-09-12. Befunde werden als MED-OP-UX-11 (Carry-over B36–B38/B40)

  • MED-OP-UX-12 (Rest B42/B43) + MED-OP-UX-13 (neu B44/B45) in den Backlog überführt, nicht im Audit abgearbeitet. Keine Versionsänderung durch diesen Refresh.*