3.9 KiB
3.9 KiB
Sprint 9 — UI: engagement 2-col + global contrast pass
Base: sprint/8-c2 (sprint 8 not yet merged on origin/main, but its C2ConfigCard is the right pane).
Scope: frontend-only. No backend, no schema. No new features.
Decisions (locked)
- Engagement page : passer en 2 colonnes sur desktop (
lg:grid-cols-2),[engagement form | C2ConfigCard]. Mobile/tablet : stack vertical (comportement actuel). - Contraste global : le problème est que
canvas(page bg) etpaper(card bg) sont tous deux#ffffffen light mode. Les cartes ne ressortent que par leur hairline 1px → fatigue oculaire confirmée par l'utilisateur. - Fix retenu : tinter le canvas light d'un neutre froid très pâle.
paperreste blanc pur. Les cartes "lèvent" naturellement sans casser le brutalisme.- Proposition :
canvaslight#f3f5f8(gris-bleu très pâle, cohérent avec l'electric blue),paperlight#ffffff. - Dark mode inchangé (
canvas #111827/paper #1f2937déjà différenciés).
- Proposition :
- Pas de shadow, pas de radius. La brutalité reste intacte — seul le contraste de surface change.
- Hairline : à vérifier sur le nouveau canvas. Si nécessaire, passer
hairlinelight de la valeur actuelle à un poil plus sombre pour préserver la lisibilité du bord sur tinted canvas. Mais éviter si la lecture est déjà bonne.
Task A — EngagementFormPage 2-col
File : frontend/src/pages/EngagementFormPage.tsx
- Remplacer le wrapper
<div className="flex flex-col gap-xl max-w-2xl">par un container plus large + grid 2-col responsive. - Header reste en haut, full width.
- Body :
grid grid-cols-1 lg:grid-cols-2 gap-xlavec :- Col gauche :
<form>engagement (déjà encard-product). - Col droite :
<C2ConfigCard>(seulement quandediting && canEditEngagements).
- Col gauche :
- Si pas en edit (création) : col droite vide → garder la grid mais que la col gauche se déploie via
lg:col-span-2(pour pas avoir un vide à droite). Acceptable alternative :flex+max-w-2xlquand non-editing. - Pas de modif sur la logique de form, validation, mutations.
Task B — Contrast pass (tokens)
Files :
DESIGN.md§ Surface : mettre à jourcanvaslight =#f3f5f8, conserverpaperlight =#ffffff. Documenter dans la même section que "canvas tints lift paper cards in light mode without violating brutalism".- Token source de vérité (Tailwind config ou CSS vars). Localiser et appliquer la même MAJ. Probablement
frontend/tailwind.config.jsou unfrontend/src/styles/tokens.css/index.css. - Vérifier qu'aucun composant ne hardcode
#ffffffpour la page bg (devrait utiliserbg-canvas). - Tests CSS smoke :
bg-canvascontinue de matcher, dark mode inchangé.
Task C — Visual regression check
pnpm vitest runclean.pnpm tsc --noEmitclean.pnpm lintclean.- Screenshots avant/après (au moins) :
- EngagementsListPage (cards-on-canvas)
- EngagementDetailPage
- EngagementFormPage (edit, avec C2ConfigCard à droite)
- SimulationFormPage (déjà 2-col sprint 7, vérifier que le tinted canvas n'écrase pas)
- LoginPage
- Dark mode : passe rapide pour confirmer aucune régression.
Sequencing
- frontend-builder : Task A + B + C. Une seule passe, commits atomiques.
- design-reviewer : revue visuelle après merge des commits builder. Focus :
- Lecture confortable cards-on-tinted-canvas.
- Hairline encore visible.
- Dark mode inchangé.
- Pas de régression sur components qui pourraient ré-utiliser
bg-canvaspour autre chose (dropdowns, modals).
Definition of Done
- EngagementFormPage en édition : 2 colonnes desktop, stack mobile.
- Page bg différencié de card bg en light mode (eyes confort).
- Vitest + typecheck + lint verts.
- Design-reviewer APPROVED.
- Screenshots livrés ou écueil documenté.
- Commits conventional, branche
sprint/9-ui-contrast.