Skip to content

fix(style): Tailwind-Purge-Bug, Light-Mode-Kontrast + accent-Single-Source#161

Merged
gerfru merged 1 commit into
mainfrom
fix/styling-audit-p1-p4
Jun 8, 2026
Merged

fix(style): Tailwind-Purge-Bug, Light-Mode-Kontrast + accent-Single-Source#161
gerfru merged 1 commit into
mainfrom
fix/styling-audit-p1-p4

Conversation

@gerfru

@gerfru gerfru commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Kontext

Ergebnis des /dev:tool-style-Audits über das Frontend (Tailwind v3 standalone + CSS-Token-Layer). Vier lokale Befunde — ein echter Funktionsbug, eine Light-Mode-Kontrastlücke und zwei Single-Source-of-Truth-Cleanups. Behoben in Schweregrad-Reihenfolge.

Änderungen

🔴 P1 — Funktionsbug: dynamisch gebaute Tailwind-Klassen wurden gepurged

epilepsy.js renderRiskFlags baute Klassen per ${fc}-Interpolation (bg-${fc}-500/10 …). Der Tailwind-Content-Scanner sieht nur literale Tokens → bg-red-500/10, bg-slate-500/10, text-amber-400 u.a. fehlten in tailwind.min.cssrote (Hochrisiko-) und Fallback-Risiko-Flags rendern ohne Hintergrund/Farbe. Fix: statische FLAG_STYLE-Map mit vollen Klassenstrings, make tailwind-build.

🟠 P2 — Light-Mode-Kontrast (WCAG 1.4.11)

Hartcodierte dunkel-getunte borderColor-Hex (#94a3b8, #86efac) in metrics-energy/garmin/readiness umgingen die theme-aware C-Palette aus colors.js → Referenzlinien im Light-Mode unter der Kontrastgrenze. Fix: C.muted / C.green.

🟡 P3 — accent Single Source of Truth

accent: #10b981 war 3× definiert, die Tailwind-accent-Utility 0× genutzt. Totes static/tailwind-config.js (nirgends referenziert) gelöscht + colors.accent aus tailwind.config.js entfernt. --accent-Token bleibt einzige Quelle.

🟡 P4 — !important-Cluster

!important auf .sub-green/amber/red entfernt; Regeln auf gleiche Spezifität wie .hero-vital-derived gescopt (Quellreihenfolge entscheidet).

Verifikation

  • make tailwind-build — vormals fehlende Klassen jetzt kompiliert
  • npm test188/188 JS-Tests grün (inkl. colors.test.js)
  • Biome (js-lint-Gate) clean
  • Visuell bestätigt in beiden Themes: Epilepsie-Flags getönt, Light-Mode-Referenzlinien sichtbar, Sub-Badges kein Regress

🤖 Generated with Claude Code

…ource

Styling-Audit (/dev:tool-style) — 4 Befunde behoben:

P1 (Bug): epilepsy.js renderRiskFlags baute Tailwind-Klassen per
  ${fc}-Interpolation → Content-Scanner sieht nur literale Tokens,
  bg-red-500/10, bg-slate-500/10, text-amber-400 u.a. wurden gepurged
  → rote/Fallback-Risiko-Flags rendern unstyled. Statische FLAG_STYLE-Map
  mit vollen Klassenstrings; tailwind.min.css neu gebaut.

P2 (A11y/WCAG 1.4.11): hartcodierte dunkel-getunte borderColor-Hex
  (#94a3b8, #86efac) in metrics-energy/garmin/readiness umgingen die
  theme-aware C-Palette → Light-Mode-Referenzlinien unter Kontrastgrenze.
  → C.muted / C.green.

P3 (Single Source of Truth): accent war 3x definiert, Tailwind-accent-
  Utility 0x genutzt. Totes static/tailwind-config.js (unreferenziert)
  gelöscht + colors.accent aus tailwind.config.js entfernt; --accent-Token
  bleibt einzige Quelle.

P4: !important-Cluster (6x) auf .sub-green/amber/red entfernt, Regeln auf
  gleiche Spezifität wie .hero-vital-derived gescopt (Quellreihenfolge gewinnt).

Verifiziert: make tailwind-build, 188/188 JS-Tests, Biome clean,
visuell in beiden Themes (Epilepsie-Flags, Light-Mode-Charts, Sub-Badges).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@gerfru gerfru merged commit ae043c8 into main Jun 8, 2026
10 checks passed
@gerfru gerfru deleted the fix/styling-audit-p1-p4 branch June 8, 2026 14:14
gerfru added a commit that referenced this pull request Jun 8, 2026
…ft) (#163)

Dritter Styling-Review-Schritt (nach #161 Audit, #162 Motion). Ersetzt den
"blank-then-pop"-Flash: #bento-hero zeigte <p>Lade…</p> (kollabiert) und
expandierte schlagartig — echter Layout-Shift.

- Skeleton-Primitive in style.css (.skeleton, .skel-box/-circle/-line/-tile)
  mit Pulse; nutzt --surface-2/--radius-sm (theme-aware gratis).
- Hero- + Aktivitäten-Skeleton im Template spiegeln das finale Layout über
  dieselben .hero-grid-Klassen → null Shift (NN/g). Ersetzt automatisch beim
  ersten buildHeroCard()/renderActivitiesTable() (innerHTML-Overwrite), kein JS.
- 300-ms-Regel CSS-only: .skeleton opacity:0 + animation-delay:300ms → bei
  schnellem fetch kein Flash. Reduced-Motion via Gate A (#162) automatisch;
  Platzhalter aria-hidden.
- Chart-Karten bewusst ausgenommen (.chart-wrap reserviert Höhe, kein Shift).

Tests: deterministischer pytest-Template-Test (test_pages.py). Doku:
design-decisions.md um Motion (#162 nachgeholt) + Skeleton-Abschnitt erweitert.

Verifiziert: pytest 27/27, JS 188/188.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
gerfru added a commit that referenced this pull request Jun 12, 2026
…ource (#161)

Styling-Audit (/dev:tool-style) — 4 Befunde behoben:

P1 (Bug): epilepsy.js renderRiskFlags baute Tailwind-Klassen per
  ${fc}-Interpolation → Content-Scanner sieht nur literale Tokens,
  bg-red-500/10, bg-slate-500/10, text-amber-400 u.a. wurden gepurged
  → rote/Fallback-Risiko-Flags rendern unstyled. Statische FLAG_STYLE-Map
  mit vollen Klassenstrings; tailwind.min.css neu gebaut.

P2 (A11y/WCAG 1.4.11): hartcodierte dunkel-getunte borderColor-Hex
  (#94a3b8, #86efac) in metrics-energy/garmin/readiness umgingen die
  theme-aware C-Palette → Light-Mode-Referenzlinien unter Kontrastgrenze.
  → C.muted / C.green.

P3 (Single Source of Truth): accent war 3x definiert, Tailwind-accent-
  Utility 0x genutzt. Totes static/tailwind-config.js (unreferenziert)
  gelöscht + colors.accent aus tailwind.config.js entfernt; --accent-Token
  bleibt einzige Quelle.

P4: !important-Cluster (6x) auf .sub-green/amber/red entfernt, Regeln auf
  gleiche Spezifität wie .hero-vital-derived gescopt (Quellreihenfolge gewinnt).

Verifiziert: make tailwind-build, 188/188 JS-Tests, Biome clean,
visuell in beiden Themes (Epilepsie-Flags, Light-Mode-Charts, Sub-Badges).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
gerfru added a commit that referenced this pull request Jun 12, 2026
…ft) (#163)

Dritter Styling-Review-Schritt (nach #161 Audit, #162 Motion). Ersetzt den
"blank-then-pop"-Flash: #bento-hero zeigte <p>Lade…</p> (kollabiert) und
expandierte schlagartig — echter Layout-Shift.

- Skeleton-Primitive in style.css (.skeleton, .skel-box/-circle/-line/-tile)
  mit Pulse; nutzt --surface-2/--radius-sm (theme-aware gratis).
- Hero- + Aktivitäten-Skeleton im Template spiegeln das finale Layout über
  dieselben .hero-grid-Klassen → null Shift (NN/g). Ersetzt automatisch beim
  ersten buildHeroCard()/renderActivitiesTable() (innerHTML-Overwrite), kein JS.
- 300-ms-Regel CSS-only: .skeleton opacity:0 + animation-delay:300ms → bei
  schnellem fetch kein Flash. Reduced-Motion via Gate A (#162) automatisch;
  Platzhalter aria-hidden.
- Chart-Karten bewusst ausgenommen (.chart-wrap reserviert Höhe, kein Shift).

Tests: deterministischer pytest-Template-Test (test_pages.py). Doku:
design-decisions.md um Motion (#162 nachgeholt) + Skeleton-Abschnitt erweitert.

Verifiziert: pytest 27/27, JS 188/188.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant