TECH: Design tokens & thème global dark-first (refonte MudTheme + palette sémantique) #32
Labels
No labels
bug
chore
design
dx:ci
dx:database
dx:dotnet
dx:infra
dx:security
dx:tests
dx:ui
etape-1
etape-2
etape-3
etape-4
etape-5
etape-6
etape-7
feature
priority-high
priority-low
priority-medium
security
spec
tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nonobis/Heimdall#32
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🎯 Contexte
Heimdall est un poste de surveillance vidéo multi-sites : l'UI doit être lisible en continu, dans l'obscurité (salles de supervision) comme en bureau. La direction artistique cible : dark-first, aucune couleur pure (#000/#FFF), palette sémantique de monitoring (statuts, alertes, temps réel) — cohérente avec les dashboards de vidéosurveillance et les outils d'ops (PagerDuty, Grafana, Vectra).
📚 Référence spec (MASTER_SPECIFICATION.md v2.0)
Étape 5 — Phase 20 (Blazor UI Auth + Layout), Phase 21 (Dashboard) ;
docs/ui-pages.md→ « Navigation & Layout », « App Bar (top) ». Exigence transverse : accessibilité WCAG 2.2 (contrastes ≥ 4.5:1 texte).🔍 État actuel (vérifié dans le code)
MudThemedupliqué dansMainLayout.razor(L116-229) etMudBlazorLayout.razor(L16-84) → dérive garantie (les deux sont déjà légèrement différents).Black="#000000",White="#FFFFFF",AppbarBackground="#000000"→ noir/blanc purs interdits par la direction artistique (fatigue visuelle, halos, contraste HDR agressif).app.css: tokens partiels (--bg-*,--text-*,--border-*,--shadow-*) mais pas de tokens espacement (grille 4px) ni radius ; radius en dur partout (Style="border-radius: 12px;"répété dans les pages).Success #16A34A≈ 3.3:1,Warning #EA580C≈ 2.9:1 sur blanc — utilisées pour du texte (MudText Color="Color.Success"« en ligne », captions).SiteInstallPanel.razor(#0d1117,#c9d1d9) et validation (#22C55E,#EF4444).🧩 Découpage proposé
src/Heimdall.Web/Theme/HeimdallTheme.cs— thème unique partagé (PaletteLight + PaletteDark sémantiques, typo, radius, layout properties) ; supprimer les thèmes inline des 2 layouts.#0B1220-style bleu nuit, jamais#000; light : gris bleuté, jamais#FFF), accent principal (cyan/ambre « vigie »), statuts sémantiques vérifiés par calcul de contraste (documenter les ratios dans le ticket).--space-1..8(base 4px),--radius-sm/md/lg,--focus-ring, transitions ; remplacer les radius/shadow inline par les tokens.prefers-color-scheme(défaut) + toggle manuel (stocké en localStorage) — voir ticket navigation pour le toggle.MetricTile.ColorToCss/StatusChippour n'utiliser que des couleurs sémantiques.🧪 Critères d'acceptation
#000000/#FFFFFFpur dans les surfaces de texte (fond/texte), y compris palette darkMainLayoutetMudBlazorLayoutborder-radius/ombre en dur dans les pages (tokens uniquement)make testvert (tests bUnit existants non cassés)📁 Fichiers concernés (estimés)
src/Heimdall.Web/Theme/HeimdallTheme.cs(nouveau)src/Heimdall.Web/Components/Layout/MainLayout.razor,MudBlazorLayout.razorsrc/Heimdall.Web/wwwroot/app.csssrc/Heimdall.Web/Components/MetricTile.razor,Shared/StatusChip.razortests/Heimdall.Web.Tests/(tests thème/composants)Implémenté, build + tests Web verts (167), poussé. Commit:
3b3e74d(#32) /ce05faf(#42). Vérifié en réel.