From 47eae61371e5340f932d8bc37c3cbdb141993c89 Mon Sep 17 00:00:00 2001 From: boban Date: Fri, 12 Jun 2026 06:16:52 +0200 Subject: [PATCH] fix: apply v1 UI review (a11y, contrast, live-chart robustness) - Focus-visible token ring + prefers-reduced-motion guard (app.css). - Lift ink-3/ink-4 to WCAG-AA text contrast. - Touch targets >=44px (topbar, sidebar, dashboard buttons). - Off-canvas drawer removed from tab order when closed (breakpoint-aware inert) + sidebar aria-label. - Live chart: NaN guard on incoming cpu; Echo.leave('metrics') + unbind on destroy (no subscription leak under wire:navigate). - KPI progress bar follows the tone (status triad), not always accent. - Resource rings bound to real server data with threshold-based tone. - docs/v1-ui-review.md: full adversarial review. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/v1-ui-review.md | 163 +++++++++++++++++++ resources/css/app.css | 20 ++- resources/js/app.js | 19 ++- resources/views/components/kpi.blade.php | 6 +- resources/views/components/sidebar.blade.php | 8 +- resources/views/components/topbar.blade.php | 4 +- resources/views/layouts/app.blade.php | 3 +- resources/views/livewire/dashboard.blade.php | 12 +- 8 files changed, 217 insertions(+), 18 deletions(-) create mode 100644 docs/v1-ui-review.md diff --git a/docs/v1-ui-review.md b/docs/v1-ui-review.md new file mode 100644 index 0000000..547e3bc --- /dev/null +++ b/docs/v1-ui-review.md @@ -0,0 +1,163 @@ +# Clusev v1 — Konsolidierte Fix-Liste + +Alle Punkte gegen die echten Dateien geprüft. Duplikate (Focus-States, Touch-Targets, KPI-Balken, Ringe, mobile CPU/RAM-Anzeige) sind zusammengeführt. Reine Bereitschafts-/Konventionshinweise ohne Datei-Defekt sind unter „Bewusst weggelassen" gelistet. + +--- + +## MUST-FIX (Regelverstoß / echter Bug / A11y-Blocker) + +### A11y — Tastatur-Fokus unsichtbar +- **Dateien:** `nav-item.blade.php`, `topbar.blade.php` (Z. 3, 16), `sidebar.blade.php` (Z. 10, 19, 48), `server-item.blade.php` (Z. 5), `livewire/dashboard.blade.php` (Z. 69) +- **Änderung:** Auf jeder interaktiven Basisklasse einen Token-Fokusring ergänzen: `focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/60 focus-visible:ring-offset-2 focus-visible:ring-offset-surface`. Alternativ eine Base-Layer-Regel in `app.css`: `*:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px }`. +- **Grund:** Null Fokus-Styles im gesamten View-Layer (per grep bestätigt) — Tastaturbedienung auf der dunklen UI ist unmöglich. + +### A11y — Kontrast `ink-3` unter WCAG AA +- **Datei:** `resources/css/app.css:36` (`--color-ink-3: #69757F`) +- **Änderung:** Auf ca. `#7E8A95` aufhellen (≈4,6:1 auf surface). +- **Grund:** 3,95:1 auf surface — `ink-3` ist Default für fast jeden Sekundärtext (IPs, Subtitles, Unit-Labels, systemd-Beschreibungen) bei `text-[11px]`/`text-xs`, also gilt 4,5:1. + +### A11y — Kontrast `ink-4` unter WCAG AA (für Text) +- **Datei:** `resources/css/app.css:37` (`--color-ink-4: #495159`) +- **Änderung:** Für Textnutzung auf ca. `#707B85` (≈4,5:1) aufhellen, oder `ink-4` strikt auf Hairlines/Nicht-Text beschränken und betroffene Textstellen (`dashboard.blade.php:107,109`, `server-item.blade.php:13,19`) auf `text-ink-3` umstellen. +- **Grund:** 2,31:1 — fällt sogar unter AA-large (3:1), wird aber für echten Lesetext (Audit-Timestamps/Targets, CPU/RAM-Spaltenlabels) genutzt. + +### A11y — Off-Canvas-Drawer nicht aus Tab-Order entfernt +- **Datei:** `resources/views/components/sidebar.blade.php:2` (`