Composants Hesterio Page de référence interne — rien ici n'est branché sur des données réelles.

Bibliothèque de composants

Tout ce que définit css/shared.css, affiché en vrai, dans les deux thèmes. Cette page sert à deux choses : voir ce qui existe déjà avant d'inventer un énième bouton, et repérer d'un coup d'œil ce qui casse quand on touche au socle.

Elle n'est pas décorative. Le 15 août, la grille du planning est restée blanche en mode sombre pendant des semaines sans que personne le voie, parce qu'il fallait ouvrir le bon module au bon moment pour s'en apercevoir. Ici, tout est sur un seul écran.

Couleurs

Ces valeurs viennent de shared.css et changent avec le thème. Une couleur écrite en dur dans une page ne changera pas — c'est la source de tous les défauts de mode sombre corrigés ces derniers jours. Seules les variables dont la valeur ressemble vraiment à une couleur apparaissent ici (corrigé le 30/08 : --font et les tokens d'espacement/typo s'y affichaient auparavant avec une case vide, illisible).

Espacement

Tokens --sp-1 à --sp-10 posés le 30/08 (C1.1) : une échelle de référence pour le code à venir, reprenant les paliers déjà les plus utilisés dans le produit. L'existant ne s'en sert pas encore — décision d'Arthur, aucun retrofit prévu.

Typographie

Tokens --fs-xs à --fs-3xl posés le 30/08 (C1.1), avec un aperçu réel du texte à chaque taille.

Boutons

.btn, avec les variantes .pri (action principale) et .danger. Un seul bouton principal par écran.

Champs

Enveloppés dans .fl (champ avec libellé) ou .fi (champ seul). Le mode sombre est géré par color-scheme, y compris pour les éléments que le navigateur dessine lui-même.

Pastilles de statut

.ct pour les compteurs, .b-stat pour les statuts client. Chacune a son équivalent sombre, avec un contraste vérifié.

12Terminé
3En attente
1Bloqué
7Information
5Gold
2Platinum
1VIP
GOLD PLATINUM VIP OK Attention Erreur Info

Tableaux

Style hérité de shared.css. Les lignes typées du cardex (.r-gold, .r-plat…) ont leur propre profondeur en mode sombre — c'est la référence dont s'inspire tout le reste.

NomStatutChambreArrivée
MARTIN ClaireGOLD41217/08
DUPONT JeanPLATINUM22817/08
NGUYEN PaulVIP10518/08
ROSSI MarcoParti—02/08

En-tête et onglets

Gabarit commun aux modules : .mod-header puis .mod-tab. Toute page de module devrait partir de là plutôt que de refaire son en-tête.

Module d'exemple
AArthur

États vides et chargement

L'état vide est désormais un composant partagé — .es, construit par etatVide({icone, titre, texte, action, compact}). Avant, cinq classes différentes et une quinzaine de formulations, dont aucune ne disait quoi faire ensuite. Le titre dit ce qui manque, le texte dit pourquoi ou quoi faire. Sans action possible, on n'invente pas de bouton. Le squelette de chargement est lui aussi partagé : .sk, construit par squelette('texte'|'tableau', lignes, colonnes). Il doit avoir la même hauteur que le contenu réel, sinon on retrouve le saut qu'on voulait éviter — et son animation s'arrête si le système demande de réduire les animations.

Aucune arrivée aujourd'hui
Les arrivées apparaîtront ici dès l'import du cardex.
Aucune commande
Variante compacte, pour une cellule ou un panneau latéral.

Ce qu'il ne faut pas faire

Trois erreurs qui ont réellement coûté du temps cette semaine.

Une couleur écrite en dur
Ce bloc reste blanc en mode sombre. C'est ce qui rendait la grille du planning illisible.
Un contraste insuffisant
Texte blanc sur vert clair : 1,9:1, très en dessous du seuil de 4,5:1.
Une variable qui n'existe pas
La déclaration est purement ignorée. Sept cas trouvés dans le produit le 15/08.

Contrastes à arbitrer

Arbitré le 15/08 : on garde l'existant, colonne de gauche. Aucune des propositions n'est retenue. Le code couleur est connu des équipes et lisible en usage réel ; le seuil de 4,5:1 reste un objectif d'audit, pas une raison de changer ce qui marche. Ce tableau est conservé comme trace de la décision — et parce que la question reviendra le jour d'un audit d'accessibilité chez un grand compte.

Quatorze paires texte/fond passent sous le seuil de lisibilité de 4,5:1. Ce ne sont pas des régressions — elles existaient avant le chantier — mais elles ne passeraient pas un audit d'accessibilité, et les quatre premières sont réellement difficiles à lire.

À gauche l'existant, à droite ma proposition : même teinte, luminosité ajustée juste assez pour atteindre le seuil. Le fond ne change jamais, seul le texte bouge — vos équipes reconnaissent une case du planning à sa couleur de fond, pas à celle de sa lettre. Décision : aucune proposition retenue.

Ce que c'estAujourd'huiContrastePropositionContraste
Case du planning — type de poste
.pl-cell-v
backoffice.html
Exemple
#fff sur #7fcb92
1.9:1 Exemple
#474747 sur #7fcb92
4.8:1
Case du planning — type de poste
.pl-cell-b
backoffice.html
Exemple
#fff sur #e8a33d
2.2:1 Exemple
#424242 sur #e8a33d
4.7:1
Case du planning — type de poste
.pl-cell-p
backoffice.html
Exemple
#fff sur #7cabdd
2.4:1 Exemple
#e6e6e6 sur #7cabdd
1.9:1
Case du planning — type de poste
.pl-cell-n
backoffice.html
Exemple
#fff sur #c98fd6
2.5:1 Exemple
#e6e6e6 sur #c98fd6
2.0:1
Badge code d'accès (admin)
.badge-pin
admin.html
Exemple
#e65100 sur #fff3e0
3.5:1 Exemple
#c24400 sur #fff3e0
4.6:1
Ligne « Différence » du planning
.pl-diff-zero
backoffice.html
Exemple
#8a7b3c sur #f5f0da
3.7:1 Exemple
#786b34 sur #f5f0da
4.6:1
Badge de contrôle légal
.pl-badge-TBC
backoffice.html
Exemple
#a6740b sur #fdf1d6
3.7:1 Exemple
#8e6309 sur #fdf1d6
4.8:1
Pastille de statut Gold
.b-gold, .ct.gold
css/shared.css
Exemple
#9a7d0a sur #fef9e7
3.7:1 Exemple
#876d09 sur #fef9e7
4.7:1
Badge principal (gâteau)
.badge-principal
gateau.html
Exemple
#9a7d0a sur #fff8e6
3.7:1 Exemple
#876d09 sur #fff8e6
4.7:1
Ligne « Différence » du planning
.pl-diff-pos
backoffice.html
Exemple
#2e7d43 sur #dcf1e0
4.3:1 Exemple
#2b763f sur #dcf1e0
4.7:1
Badge GO
.go-badge
gateau.html
Exemple
#8a6a3a sur #f5ede0
4.3:1 Exemple
#836437 sur #f5ede0
4.7:1
Pastille avatar GO
.go-av
gateau.html
Exemple
#fff sur #8a7560
4.4:1 Exemple
#e6e6e6 sur #8a7560
3.5:1
Badge de contrôle légal
.pl-badge-OK
backoffice.html
Exemple
#2e7d43 sur #e2f5e6
4.5:1 Exemple
#2d7941 sur #e2f5e6
4.7:1
Badge de contrôle légal
.pl-badge-NOK
backoffice.html
Exemple
#c0392b sur #fde3e3
4.5:1 Exemple
#bc382a sur #fde3e3
4.6:1
Les quatre cases du planning (vert, orange, bleu, violet) sont le cas le plus visible : du texte blanc sur une couleur claire, entre 1,9 et 2,5:1. La lettre y est presque invisible. C'est aussi le seul endroit où je changerais volontiers le fond plutôt que le texte, mais c'est ton code couleur métier — je n'y touche pas sans ton accord.

Accessibilité

Trois défauts mesurés le 15 août : 32 éléments cliquables inatteignables au clavier, 38 boutons à icône seule sans libellé, et zéro règle de focus dans tout le produit. Le dernier était le plus grave : quelqu'un qui navigue au clavier ne voyait jamais où il se trouvait.

Focus clavier

Fais Tab jusqu'à ces boutons : un contour doré apparaît. À la souris, il n'apparaît pas — c'est :focus-visible et non :focus, ce qui permet de le rendre franchement visible sans gêner personne.

Ce qui est traité au socle

· les éléments portant un onclick deviennent focalisables et s'activent à Entrée ou Espace, y compris ceux créés après le chargement ;
· role="button" uniquement sur div et span — le poser sur un tr mentirait sur la nature de l'élément ;
· cibles de 44 px minimum, au doigt seulement : élargir à la souris casserait la densité des tableaux, qui est voulue ;
· un lien « Aller au contenu » en tête de page, invisible sauf au clavier.

npm run qa:socle vérifie mécaniquement ces trois erreurs sur l'ensemble du produit.