Design system
Les jetons, les composants et les règles qui font l’apparence de ce site. Cette page est produite depuis le code : ce qu’elle montre est ce que le site utilise.
Une charte neutre et sobre, faite pour une institution : une seule famille de caractères, une palette courte à fort contraste, des espacements sur une échelle fixe, un thème clair et un thème sombre, et des composants qui se pilotent au clavier et s’annoncent aux lecteurs d’écran.
Couleurs
Chaque couleur est un jeton nommé par son rôle, jamais par sa teinte. Les textes sur fond atteignent au moins 4,5:1 de contraste (RGAA 3.2) dans les deux thèmes ; la couleur de focus est distincte de l’accent pour rester visible sur un bouton accentué.
Thème clair
canvas#F6F5F2surface#FFFFFFsurface-alt#ECEEF1border#D3D8DEink#1A1F26muted#525C66accent#1F4E79accent-text#FFFFFFaccent-soft#E1EAF3accent-strong#163A5Bsuccess#1F6B45success-soft#DDF0E4warning#7A4F00warning-soft#FBECC8danger#A52A21danger-soft#F8DDDAscrim#1A1F26B3focus#B4520A
Thème sombre
canvas#0F1317surface#171C22surface-alt#1F262Eborder#333D47ink#EDF1F4muted#A8B2BCaccent#8FBBE8accent-text#0C1A28accent-soft#1C2E42accent-strong#B7D4F2success#86CBA1success-soft#173627warning#EBBE6Awarning-soft#3D2F10danger#F09A92danger-soft#44201Dscrim#0F1317CCfocus#F0A75C
Accents des mini-sites
Un mini-site change quatre jetons d’accent et rien d’autre : la médiathèque est verte, le centre culturel prune, le reste de la charte est partagé.
- vert#2F6B4F / #8CCBA6
- prune#6B3A6B / #D1A3D1
Typographie
Inter, police variable libre (SIL OFL), auto-hébergée en un seul fichier de 48 Ko. Les tailles suivent une échelle de neuf pas ; l’interlignage se resserre avec la taille.
Un titre d’accueil en corps 48
Un titre de page en corps 38
Un intertitre en corps 30
Un sous-titre en corps 24
Un chapô en corps 18, qui introduit une page et se lit sans effort sur deux ou trois lignes.
Le texte courant en corps 16, avec un interlignage de 1,55 et des lignes de 70 caractères au plus.
Une légende ou une date en corps 14
Un surtitre en capitales
| Jeton | Valeur |
|---|---|
| type-xs | 12px |
| type-sm | 14px |
| type-base | 16px |
| type-md | 18px |
| type-lg | 20px |
| type-xl | 24px |
| type-2xl | 30px |
| type-3xl | 38px |
| type-display | 48px |
| leading-tight | 1.15 |
| leading-snug | 1.3 |
| leading-normal | 1.55 |
| leading-relaxed | 1.7 |
Espacements
Huit pas, de 2 à 96 pixels. Aucune marge n’est écrite en dur : une garde du dépôt refuse une valeur hors de l’échelle.
space-2xs2pxspace-xs4pxspace-sm8pxspace-md16pxspace-lg24pxspace-xl40pxspace-2xl64pxspace-3xl96px
Rayons
radius-xs2pxradius-sm4pxradius-md8pxradius-lg12pxradius-xl20pxradius-pill999px
Élévations
- shadow-elevation-sm
- shadow-elevation-md
- shadow-elevation-lg
Largeurs et hauteurs
layout-form28remlayout-narrow38remlayout-prose46remlayout-content60remlayout-page76remcontrol-xs20pxcontrol-sm32pxcontrol-md44pxcontrol-lg52px
Composants
Construits sur React Aria Components : rôles, états et navigation clavier viennent de la bibliothèque, l’habillage vient des jetons. Chaque composant est testé pour son comportement accessible.
Boutons
Étiquettes
Icônes
Champs
Messages
Information
Le message explique ce qui s’est passé et ce qu’il faut faire.
Succès
Le message explique ce qui s’est passé et ce qu’il faut faire.
Attention
Le message explique ce qui s’est passé et ce qu’il faut faire.
Erreur
Le message explique ce qui s’est passé et ce qu’il faut faire.
Dialogue
Onglets
Les flèches changent d’onglet ; le panneau reçoit le focus.
États
- Focus : un contour de deux pixels, couleur de focus, décalé du composant, sur tout élément interactif.
- Erreur : le champ est marqué invalide, le message est lié au champ et annoncé.
- Vide : une liste sans résultat le dit en toutes lettres et propose une sortie.
- Chargement : les pages sont rendues côté serveur, complètes ; il n’y a pas d’état de chargement à masquer.
Sources et licences
Inter (SIL Open Font License 1.1), React Aria Components (Apache 2.0), Tailwind CSS (MIT), icônes Lucide (ISC). Les jetons sont dans packages/ui/src/tokens.ts du dépôt.