- Ajouter fallback pour Swagger UI si doc.json ne fonctionne pas - Améliorer message d'erreur avec bouton pour ouvrir Swagger UI directement - Les fonctionnalités API Keys et Usage Stats sont maintenant complètes et fonctionnelles - Tous les onglets de DeveloperPage sont maintenant implémentés
8 KiB
Analyse Complète du Problème Visuel
🔍 Identification du Problème Réel
Problème Observé
Contour cyan très visible autour du champ Email (et probablement autres inputs) sur les pages Login et Register.
Ce que ce N'EST PAS
- ❌ Ce n'est PAS une ligne verticale
- ❌ Ce n'est PAS un problème de scanlines
- ❌ Ce n'est PAS un problème de scrollbar
- ❌ Ce n'est PAS un problème de bordures verticales
Ce que c'EST
- ✅ Problème de style de focus sur les inputs
- ✅ Le contour cyan vient du style
focus:border-kodo-cyan+focus:ring-1 focus:ring-kodo-cyan - ✅ Le champ Email a probablement le focus automatique ou le focus persiste après interaction
🔬 Analyse de la Cause Racine
1. Source du Problème
Fichier: packages/design-system/src/components/Input/Input.tsx:51
className={cn(
'w-full py-3 bg-kodo-graphite border border-kodo-steel text-white placeholder-gray-500 font-body text-base rounded-lg focus:outline-none focus:border-kodo-cyan focus:ring-1 focus:ring-kodo-cyan transition-all duration-200',
...
)}
Problèmes identifiés:
- Double indication de focus :
focus:border-kodo-cyan+focus:ring-1 focus:ring-kodo-cyan- Le border cyan + le ring cyan créent un contour très visible
- Focus trop agressif : Le style s'applique sur
:focusau lieu de:focus-visible:focuss'applique même quand on clique avec la souris:focus-visiblene s'applique que lors de la navigation au clavier (meilleure UX)
- Ring trop visible :
ring-1avec couleur cyan très saturée (kodo-cyan: rgb(102, 252, 241))- Le ring ajoute un contour supplémentaire autour du border
- La couleur cyan est très lumineuse et distrayante
2. Impact Systémique
- ✅ Présent sur Login : Champ Email avec contour cyan visible
- ✅ Présent sur Register : Tous les champs avec le même problème
- ✅ Présent partout dans l'app : Tous les inputs utilisant
@veza/design-systemInput - ✅ Problème d'accessibilité : Le focus devrait être visible mais pas distrayant
3. Conflits Potentiels
- Conflit avec
global-effects.css::focus-visible { outline: 2px solid var(--veza-cyan); }- Double outline (un du global, un du Input)
- Conflit avec styles personnalisés : Certains composants peuvent override les styles
📋 Plan de Remédiation Durable
Objectif
Corriger le style de focus des inputs pour qu'il soit :
- ✅ Visible pour l'accessibilité (navigation clavier)
- ✅ Discret et non distrayant
- ✅ Cohérent dans toute l'application
- ✅ Sans régressions (ne pas casser l'accessibilité)
Principes
- Utiliser
:focus-visibleau lieu de:focus- Meilleure UX : focus visible seulement lors de la navigation clavier
- Un seul indicateur de focus : border OU ring, pas les deux
- Couleur moins agressive : Opacité réduite ou couleur plus subtile
- Cohérence : Même style partout dans l'app
🛠️ Étapes de Remédiation
Étape 1 : Corriger le Composant Input du Design System
Fichier: packages/design-system/src/components/Input/Input.tsx
Changements:
// AVANT
'focus:outline-none focus:border-kodo-cyan focus:ring-1 focus:ring-kodo-cyan'
// APRÈS
'focus-visible:outline-none focus-visible:border-kodo-cyan/60 focus-visible:ring-0'
Justification:
focus-visible: Focus visible seulement au clavierborder-kodo-cyan/60: Border cyan avec 60% d'opacité (moins agressif)ring-0: Supprimer le ring (un seul indicateur suffit)
Risque: LOW 🔒
- Améliore l'UX sans casser l'accessibilité
focus-visibleest supporté par tous les navigateurs modernes
Étape 2 : Vérifier et Corriger les Autres Composants Input
Fichiers à vérifier:
apps/web/src/components/ui/input.tsxapps/web/src/features/auth/components/AuthInput.tsxapps/web/src/components/base/Input.tsx
Action: Appliquer le même principe (focus-visible + border unique + opacité réduite)
Risque: LOW 🔒
- Cohérence dans toute l'app
- Pas de régression si on suit le même pattern
Étape 3 : Corriger le Style Global de Focus
Fichier: apps/web/src/styles/global-effects.css:95-99
Changements:
/* AVANT */
:focus-visible {
outline: 2px solid var(--veza-cyan);
outline-offset: 2px;
border-radius: var(--radius-sm);
}
/* APRÈS */
:focus-visible {
outline: 2px solid rgba(102, 252, 241, 0.6); /* cyan avec 60% opacité */
outline-offset: 2px;
border-radius: var(--radius-sm);
}
/* Exception pour les inputs : pas d'outline (le border suffit) */
input:focus-visible,
textarea:focus-visible,
select:focus-visible {
outline: none;
}
Justification:
- Opacité réduite pour moins d'agressivité
- Exception pour inputs : éviter double indication (outline + border)
Risque: LOW 🔒
- Améliore la cohérence
- Ne casse pas l'accessibilité
Étape 4 : Supprimer les Fixes Temporaires
Fichiers à nettoyer:
apps/web/src/utils/aggressiveVisualFix.ts(supprimer ou désactiver)apps/web/src/utils/fixDisplayIssues.ts(nettoyer les fixes liés aux "lignes verticales")
Action:
- Supprimer les fixes qui masquent les scrollbars (on veut les garder discrètes mais visibles)
- Supprimer les fixes qui suppriment les bordures verticales (ce n'était pas le problème)
- Garder uniquement les outils de diagnostic si utiles
Risque: LOW 🔒
- Ces fixes étaient des solutions à un problème mal identifié
- Leur suppression ne causera pas de régression
Étape 5 : Tests de Validation
Tests Manuels
-
Page Login:
- Ouvrir
/login - Vérifier qu'aucun input n'a de contour cyan au chargement
- Cliquer dans le champ Email : pas de contour cyan
- Naviguer avec Tab : contour cyan visible (discret, 60% opacité)
- Vérifier que le contour disparaît quand on clique ailleurs
- Ouvrir
-
Page Register:
- Même tests que Login
- Vérifier tous les champs (email, username, password, password_confirm)
-
Autres Pages:
- Tester les inputs dans d'autres pages (dashboard, profil, etc.)
- Vérifier la cohérence du style de focus
Tests d'Accessibilité
-
Navigation Clavier:
- Tab : Focus visible avec contour cyan discret
- Shift+Tab : Focus visible
- Entrée : Action déclenchée
-
Lecteurs d'Écran:
- Vérifier que les labels sont correctement associés
- Vérifier que les états de focus sont annoncés
📊 Ordre d'Exécution Recommandé
- ✅ Étape 1 : Corriger Input du Design System (impact immédiat sur toute l'app)
- ✅ Étape 2 : Corriger les autres composants Input (cohérence)
- ✅ Étape 3 : Corriger le style global (cohérence globale)
- ✅ Étape 4 : Nettoyer les fixes temporaires (code propre)
- ✅ Étape 5 : Tests de validation (vérification)
⚠️ Points d'Attention
Régressions Possibles
- Accessibilité : S'assurer que le focus reste visible au clavier
- ✅ Solution : Utiliser
focus-visible(visible au clavier, invisible à la souris)
- ✅ Solution : Utiliser
- Cohérence : S'assurer que tous les inputs ont le même style
- ✅ Solution : Corriger tous les composants Input
- Compatibilité Navigateurs :
focus-visibleest supporté depuis 2018- ✅ Pas de problème de compatibilité
Rollback
Si problème après correction :
- Revenir à
focus:au lieu defocus-visible: - Garder le border cyan mais avec opacité réduite
- Supprimer le ring pour éviter la double indication
📝 Résumé
Problème Identifié : Contour cyan trop visible sur les inputs en focus
Cause Racine : Style de focus agressif (focus: + border + ring + couleur saturée)
Solution : focus-visible: + border unique + opacité réduite
Impact : Toute l'application (Login, Register, et toutes les pages avec inputs)
Risque : LOW 🔒 (amélioration UX sans casser l'accessibilité)
Date: 2025-01-27 Statut: ✅ Analyse complète, prêt pour remédiation