Le design system META, en entier.
Cette page est la documentation vivante du système qui construit meta.lu. Tout ce que vous voyez ici est rendu avec les mêmes tokens que le reste du site : environ 80 % de neutres, 15 % de contraste noir et blanc, 5 % d'orange. Pas de dégradés, pas d'ombres lourdes, des rayons de 3 à 4 pixels.
80 % neutre
Blancs, gris et lignes fines portent la structure. Le neutre laisse le contenu respirer et vieillit bien.
15 % contraste
Noir profond et blanc pur pour les titres, les bandes et le pied de page. Le contraste crée la hiérarchie.
5 % orange
L'orange signale une action, un chiffre clé, un état actif. Rien d'autre. Rare, donc efficace.
Zéro effet
Aucun dégradé, aucune ombre portée marquée, rayons de 3 à 4 px. La géométrie fait le travail.
La marque verbale META
Le logo est typographique : Manrope 800, approche resserrée, un seul point orange. C'est exactement le même balisage que celui rendu par l'en-tête — jamais une image exportée, jamais redessiné.
- Sur fond clair, la marque utilise le token ink (foreground) et le point utilise primary.
- Sur fond sombre, la marque passe en blanc pur et le point garde le même orange.
- Conservez une zone de protection d'au moins une hauteur de lettre sur chaque côté.
- La marque n'est jamais étirée, pivotée, contournée ni ombrée.
- Aucune recolorisation en dehors de ces tokens ; le point orange ne disparaît jamais.
Tokens de couleur, mode clair
Chaque couleur du site provient d'une variable CSS définie dans src/styles.css et exposée à Tailwind via @theme inline. Aucune valeur codée en dur n'est autorisée dans les composants : c'est ce qui rend le mode sombre gratuit et les changements globaux instantanés.
- Variable CSS
- --background, --card
- Valeur
- oklch(1 0 0)
- Hex
- #ffffff
- Utilisation
- bg-background, bg-card
- Variable CSS
- --foreground, --ink
- Valeur
- oklch(0.1582 0.0072 258.37)
- Hex
- #0b0d10
- Utilisation
- text-foreground, bg-ink
- Variable CSS
- --muted-fg
- Valeur
- oklch(0.5092 0.0121 261.77)
- Hex
- #62666d
- Utilisation
- text-muted-foreground
- Variable CSS
- --faint
- Valeur
- oklch(0.5492 0.0121 261.77)
- Hex
- #6d7179
- Utilisation
- text-faint, ::placeholder
- Variable CSS
- --line
- Valeur
- oklch(0.9302 0.004 106.48)
- Hex
- #e8e8e5
- Utilisation
- border-line, border-border
- Variable CSS
- --line-strong
- Valeur
- oklch(0.89 0.0068 106.54)
- Hex
- #dbdbd6
- Utilisation
- border-line-strong, border-input
- Variable CSS
- --band, --hover
- Valeur
- oklch(0.9845 0.0026 106.45)
- Hex
- #fafaf8
- Utilisation
- bg-band, hover:bg-hover
- Variable CSS
- --primary
- Valeur
- oklch(0.7022 0.2004 45.1)
- Hex
- #ff6b00
- Utilisation
- bg-primary, text-primary, ring
- Variable CSS
- --primary-hover
- Valeur
- oklch(0.6516 0.1879 44.5)
- Hex
- #e85f00
- Utilisation
- hover:bg-primary-hover
- Variable CSS
- --primary-foreground
- Valeur
- oklch(1 0 0)
- Hex
- #ffffff
- Utilisation
- text-primary-foreground
- Variable CSS
- --color-destructive
- Valeur
- oklch(0.577 0.245 27.325)
- Hex
- #e7000b
- Utilisation
- text-destructive
- Variable CSS
- --color-destructive-foreground
- Valeur
- oklch(0.985 0 0)
- Hex
- #fafafa
- Utilisation
- text-destructive-foreground
- Variable CSS
- --footer-bg
- Valeur
- oklch(0.1582 0.0072 258.37)
- Hex
- #0b0d10
- Utilisation
- bg-footer
- Variable CSS
- --footer-fg
- Valeur
- oklch(1 0 0)
- Hex
- #ffffff
- Utilisation
- text-footer-foreground
- Variable CSS
- --footer-muted
- Valeur
- oklch(0.7461 0.0128 259.82)
- Hex
- #a8adb5
- Utilisation
- text-footer-muted
- Variable CSS
- --footer-line
- Valeur
- oklch(0.2799 0.0141 261.69)
- Hex
- #252930
- Utilisation
- border-footer-line
L'en-tête utilise --header-bg = color-mix(in oklab, background 86%, transparent) : un fond translucide qui reprend automatiquement la couleur de fond active, en clair comme en sombre.
--header-bg: color-mix(in oklab, var(--background) 86%, transparent);
Deux familles, aucune exception
Manrope (variable 200–800, auto-hébergée en woff2, repli Helvetica puis Arial) porte l'ensemble des textes. IBM Plex Mono (400 et 500) est réservée aux kickers, aux étiquettes et aux chiffres : elle signale une donnée, jamais une phrase.
Graisses Manrope
IBM Plex Mono
Kickers, étiquettes de formulaire, numéros de section et valeurs chiffrées. Deux graisses suffisent : 400 pour le texte, 500 pour l'accent.
IBM Plex Mono 400 — 0123456789
IBM Plex Mono 500 — 0123456789
Manrope
--font-sans: Manrope, Helvetica, Arial, sans-serif;
--font-mono: "IBM Plex Mono", ui-monospace, monospace;
font-display: swap; woff2, latin + latin-ext
Échelle typographique
Le digital qui rapporte.
- clamp(52px, 4.9vw, 72px)
- line-height 1.04
- letter-spacing -0.045em
- weight 700
- ≤720px : 40px / 1.12
Ce que nous construisons
- 46px
- line-height 1.12
- letter-spacing -0.035em
- weight 700
- ≤720px : 30px
01 — Fondations
- IBM Plex Mono
- 12px
- letter-spacing 0.16em
- uppercase
Un texte courant se lit en 16px avec une hauteur de ligne de 1.6 et la couleur muted-fg sur les paragraphes secondaires.
- 16px
- line-height 1.6
- Manrope 400
- text-muted-foreground
::selection utilise primary avec un texte blanc. Les placeholders de formulaire utilisent faint, jamais muted-fg.
Une géométrie stricte
Quatre rayons, un conteneur, une hauteur d'en-tête. Ces valeurs ne se négocient pas d'une page à l'autre : c'est ce qui donne au site sa régularité.
Rayons
Conteneur .sec
- max-width
- 1240px
- padding-inline
- 48px
- ≤ 1024px
- 32px
- ≤ 720px
- 20px
- margin-inline
- auto
En-tête
- --header-h
- 73px
- ≥ 1024px
- 85px
- position
- sticky
- scroll-padding-top
- var(--header-h)
Discret, prévisible, respectueux
Le mouvement sert la lecture, jamais le spectacle. Les transitions sont courtes, les états visibles, et tout s'efface si le visiteur demande moins d'animation.
Bouton principal
bg-primary → hover:bg-primary-hover, rayon 4px, texte primary-foreground, transition-colors.
Anneau de focus
:focus-visible affiche un contour de 2px en primary avec un décalage de 2px. Le focus souris n'affiche jamais d'anneau.
- Thème clair / sombre
- 0.25s sur background et color
- Cookie notice
- 200ms ease-in-out, sans rebond
- Défilement
- scroll-behavior: smooth
- prefers-reduced-motion
- 0.01ms, une itération, défilement direct
Pourquoi un design system strict change tout
Un design system n'est pas une coquetterie de designer. C'est une décision économique.
La cohérence construit la confiance. Un visiteur ne sait pas dire pourquoi un site inspire confiance, mais il le sent en trois secondes. Quand chaque page utilise le même orange, la même graisse de titre, le même rayon de bouton, le cerveau arrête de travailler et se concentre sur le contenu. À l'inverse, une page qui change de règles à chaque section envoie un signal simple : personne ne surveille les détails ici. Si le site est négligé, pourquoi le service ne le serait-il pas ?
Un token, c'est une décision prise une seule fois. Sans système, choisir un gris de texte se refait sur chaque page, chaque composant, chaque nouveau collaborateur. Vous vous retrouvez avec quarante gris presque identiques et personne pour trancher. Avec un système, muted-fg existe, il a une valeur, et la question ne revient plus. Le jour où la marque évolue, vous changez une ligne dans styles.css et l'ensemble du site suit — en clair, en sombre, sur toutes les langues.
Le développement va plus vite et la maintenance coûte moins cher. Construire une nouvelle page devient un assemblage : le conteneur .sec, un kicker, un titre h-section, une grille bordée en line, un bouton primary. Il n'y a rien à inventer, donc rien à réviser en revue. Sur la durée de vie d'un site, la maintenance dépasse largement le coût de la création initiale ; c'est là que le système se rembourse.
L'accessibilité est intégrée, pas ajoutée après coup. Les contrastes sont validés à la source : le texte principal atteint un ratio très élevé sur fond blanc, muted-fg reste au-dessus du seuil AA pour le texte courant. Les états de focus sont visibles et cohérents partout, l'anneau orange de 2px ne dépend jamais du composant. Et prefers-reduced-motion est respecté globalement, pas composant par composant. Une personne qui navigue au clavier ou qui souffre de troubles vestibulaires n'est pas un cas particulier à traiter plus tard.
La performance suit la même logique. Les polices sont auto-hébergées en woff2 avec des plages Unicode découpées et font-display: swap — aucune requête vers un serveur tiers, aucun texte invisible pendant le chargement. Deux familles, pas huit. Aucune bibliothèque de composants importée pour trois boutons. Le résultat se mesure : les pages s'affichent en moins d'une seconde, et cette rapidité est elle-même un argument de conversion.
Le mode sombre est offert par la structure. Comme aucun composant ne connaît de couleur en dur, passer en sombre revient à redéfinir huit variables. Pas de double maquette, pas de correctifs dispersés, pas de régression un mois plus tard. C'est exactement le genre de fonctionnalité qui coûte une fortune quand elle est bricolée, et presque rien quand le socle est propre.
Reste la discipline de la contrainte, la partie la plus difficile. Il est tentant d'ajouter un dégradé, une ombre, une seconde couleur d'accent. Chaque ajout paraît anodin et chacun retire un peu de force à l'ensemble. Cinq pour cent d'orange sur une page frappent ; de l'orange partout ne signale plus rien. Un système utile est un système qui dit non — c'est précisément sa valeur.
Nous appliquons ce standard à nos projets clients comme à notre propre site. Le résultat n'est pas un site plus joli dans l'absolu : c'est un site plus rapide à faire évoluer, moins cher à maintenir, plus accessible et plus crédible. Sur trois ans, la différence est comptable.
Envie du même standard pour votre site ?
Décrivez votre projet en trois étapes. Nous revenons vers vous sous un jour ouvré avec une première évaluation et un ordre de grandeur budgétaire.