Design system

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.

00 — Logo

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é.

meta.Surface claire
  • 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.
01 — Couleurs

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.

background / card
Variable CSS
--background, --card
Valeur
oklch(1 0 0)
Hex
#ffffff
Utilisation
bg-background, bg-card
foreground / ink
Variable CSS
--foreground, --ink
Valeur
oklch(0.1582 0.0072 258.37)
Hex
#0b0d10
Utilisation
text-foreground, bg-ink
muted-fg
Variable CSS
--muted-fg
Valeur
oklch(0.5092 0.0121 261.77)
Hex
#62666d
Utilisation
text-muted-foreground
faint
Variable CSS
--faint
Valeur
oklch(0.5492 0.0121 261.77)
Hex
#6d7179
Utilisation
text-faint, ::placeholder
line
Variable CSS
--line
Valeur
oklch(0.9302 0.004 106.48)
Hex
#e8e8e5
Utilisation
border-line, border-border
line-strong
Variable CSS
--line-strong
Valeur
oklch(0.89 0.0068 106.54)
Hex
#dbdbd6
Utilisation
border-line-strong, border-input
band / hover
Variable CSS
--band, --hover
Valeur
oklch(0.9845 0.0026 106.45)
Hex
#fafaf8
Utilisation
bg-band, hover:bg-hover
primary
Variable CSS
--primary
Valeur
oklch(0.7022 0.2004 45.1)
Hex
#ff6b00
Utilisation
bg-primary, text-primary, ring
primary-hover
Variable CSS
--primary-hover
Valeur
oklch(0.6516 0.1879 44.5)
Hex
#e85f00
Utilisation
hover:bg-primary-hover
primary-foreground
Variable CSS
--primary-foreground
Valeur
oklch(1 0 0)
Hex
#ffffff
Utilisation
text-primary-foreground
destructive
Variable CSS
--color-destructive
Valeur
oklch(0.577 0.245 27.325)
Hex
#e7000b
Utilisation
text-destructive
destructive-foreground
Variable CSS
--color-destructive-foreground
Valeur
oklch(0.985 0 0)
Hex
#fafafa
Utilisation
text-destructive-foreground
footer-bg
Variable CSS
--footer-bg
Valeur
oklch(0.1582 0.0072 258.37)
Hex
#0b0d10
Utilisation
bg-footer
footer-fg
Variable CSS
--footer-fg
Valeur
oklch(1 0 0)
Hex
#ffffff
Utilisation
text-footer-foreground
footer-muted
Variable CSS
--footer-muted
Valeur
oklch(0.7461 0.0128 259.82)
Hex
#a8adb5
Utilisation
text-footer-muted
footer-line
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);

03 — Typographie

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

Manrope 200font-weight: 200
Manrope 300font-weight: 300
Manrope 400font-weight: 400
Manrope 500font-weight: 500
Manrope 600font-weight: 600
Manrope 700font-weight: 700
Manrope 800font-weight: 800

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

h-display

Le digital qui rapporte.

  • clamp(52px, 4.9vw, 72px)
  • line-height 1.04
  • letter-spacing -0.045em
  • weight 700
  • ≤720px : 40px / 1.12
h-section

Ce que nous construisons

  • 46px
  • line-height 1.12
  • letter-spacing -0.035em
  • weight 700
  • ≤720px : 30px
kicker

01 — Fondations

  • IBM Plex Mono
  • 12px
  • letter-spacing 0.16em
  • uppercase
body

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.

04 — Rayons & espacements

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

radius-sm3px
radius / radius-md4px
radius-lg6px
radius-xl8px

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)
05 — Interaction & mouvement

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

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.

Demander un devis