Unifier des logiciels métiers en une plateforme
Une architecture par profils sur un socle de données commun, tenue par un design system gouverné.
- surfaces (non touchée)
- design system (touchée)
- modèle (touchée)
Système « Strates »
Le système de ce site, du token au template de page. Trois couleurs portent la page : le blanc pour lire, le bleu pour affirmer, le noir pour identifier. Deux familles de caractères : Archivo pour les titres, Schibsted Grotesk pour tout le reste.
Il est organisé en cinq niveaux, chacun construit avec le précédent. Les composants sont génériques : une card, un bouton, un tag, avec leurs variantes. Leur usage dans le site est décrit au niveau des organismes et des templates.
Chaque token et chaque composant de cette page existe aussi en Markdown et en JSON. Les tokens y suivent le format du W3C Design Tokens Community Group ; chaque composant y porte son niveau, son fichier, ses propriétés, ses règles d’usage et un exemple de code.
Valeurs et propriétés sont lues dans le code au moment de la publication. La documentation ne peut donc pas décrire un composant qui n’existe plus, ni omettre une propriété.
Écrits liés
Les décisions de base, nommées par rôle et jamais par valeur. Aucun composant n’utilise une couleur, une taille ou un spacing qui n’est pas un token.
Un seul mode, sans mode sombre : les sections noires jouent ce rôle dans la page. Les contrastes sont calculés selon WCAG 2.1.
| Token | Valeur | Usage |
|---|---|---|
--color-background-canvas | #ffffff | Fond de page. |
--color-background-brand | #1f2be0 | Colonne du hero, bloc Position, tags On, aplat de hover. |
--color-background-inverse | #0d0d0d | Barre d’identité, planche sombre, footer. |
--color-background-subtle | #f5f5f5 | Encart, cadre des figures, boîte flottante, hover des cards. |
--color-background-overlay | rgb(13 13 13 / 0.4) | Voile derrière une modal ouverte. |
--color-surface-inactive | #e7e7e7 | Tag Off. |
--color-surface-placeholder | #d4d4d4 | Emplacement d’un visuel pas encore livré (aperçu seulement). |
--color-text-primary | #0d0d0d | Titres et texte courant. 19,4:1 sur canvas. |
--color-text-secondary | #2a2a2a | Texte de second plan. 14,4:1 sur canvas. |
--color-text-muted | #737373 | Méta, légendes, libellés. 4,7:1 sur canvas. |
--color-text-supporting | #5c5c59 | Texte d’un tag Off. 5,4:1 sur surface/inactive. |
--color-text-inverse | #ffffff | Texte sur bleu ou sur noir. 8,5:1 sur brand, 19,4:1 sur inverse. |
--color-text-on-brand-secondary | #daddff | Texte secondaire sur bleu. 6,4:1 sur brand. |
--color-text-on-brand-muted | rgb(255 255 255 / 0.8) | Texte d’un tag On. 5,9:1 sur brand. |
--color-text-on-dark-muted | #9a9a9a | Texte secondaire sur noir. 6,9:1 sur inverse. |
--color-border-default | #e7e7e7 | Séparateurs discrets entre lignes et cards. Décoratif. |
--color-border-ink | #0d0d0d | Filet sous les titres, contour du bouton filet, boîte flottante. |
--color-border-white | #ffffff | Contour du bouton sur fond sombre. |
--color-border-on-dark | #333333 | Séparateurs sur noir. |
Neuf styles, mêmes noms que dans Figma. Les tailles sont fluides entre 375 et 1 440 px de large ; Body, UI, Caption et Label ne descendent jamais sous leur taille.
Rendre lisibles des systèmes complexes
.text-display · clamp(2.5rem, 1.972rem + 2.254vw, 4rem) / 0.9375 · Titre de page, accroche du hero, phrase du bloc Position, adresse e-mail.
Rendre lisibles des systèmes complexes
.text-heading-40 · clamp(1.75rem, 1.486rem + 1.127vw, 2.5rem) / 1 · Titres de section et de card L, titres de pilier.
Rendre lisibles des systèmes complexes
.text-heading-24 · clamp(1.25rem, 1.162rem + 0.376vw, 1.5rem) / 1 · Titres de card M, intertitres, tag L.
Rendre lisibles des systèmes complexes
.text-lead · clamp(1.1875rem, 1.121rem + 0.282vw, 1.375rem) / 1.3636 · Chapô, encarts, phrase de la colonne bleue.
Rendre lisibles des systèmes complexes
.text-body · 1.0625rem / 1.5294 · Texte courant.
Rendre lisibles des systèmes complexes
.text-body-strong · 1.0625rem / 1.5294 · Début de phrase appuyé.
Rendre lisibles des systèmes complexes
.text-ui · 0.9375rem / 1.3333 · Navigation, liens de suite, sommaire.
Rendre lisibles des systèmes complexes
.text-caption · 0.8125rem / 1.5385 · Méta, légendes, tags S.
Rendre lisibles des systèmes complexes
.text-label · 0.75rem / 1.1667 · Surtitres et libellés de section, en capitales.
Quatre font weights seulement. Le gras à 700 n’existe pas dans le système.
Archivo
Schibsted Grotesk
--font-weight-regular · 400 · Texte courant, Lead, Caption, Label.
Archivo
Schibsted Grotesk
--font-weight-medium · 500 · UI, Body Strong, mise en valeur (`strong`), titres des boîtes flottantes.
Archivo
Schibsted Grotesk
--font-weight-extrabold · 800 · Heading/40 et Heading/24.
Archivo
Schibsted Grotesk
--font-weight-black · 900 · Display.
Une seule échelle, nommée en pixels, sur une base de 4 px. Les paliers de 2 et 6 px servent aux réglages fins, comme le bandeau des tags.
--space-20.125rem--space-40.25rem--space-60.375rem--space-80.5rem--space-120.75rem--space-161rem--space-201.25rem--space-241.5rem--space-322rem--space-402.5rem--space-483rem--space-563.5rem--space-644rem--space-724.5rem--space-805rem--space-966rem--space-1127rem--space-1288remLes mesures qui structurent les pages.
| Token | Valeur | Usage |
|---|---|---|
--layout-max | 90rem | Largeur maximale du contenu (1 440 px). |
--layout-gutter | clamp(1.25rem, 0.458rem + 3.38vw, 3.5rem) | Marge latérale unique, de 20 à 56 px. |
--layout-nav-height | 5.375rem | Hauteur de la navigation (86 px). |
--layout-offset | 19rem | Retrait des cards dans les listes (304 px). |
--layout-strates-width | 16.25rem | Colonne des groupes de tags verticaux (260 px). |
--layout-section | 8.75rem | Haut des sections de l’accueil et du hero, page 404 (140 px). |
--layout-ecrit-tete | 16.5rem | Haut des pages d’écrit (264 px). |
--layout-page-tete | clamp(5rem, 0.6rem + 18.78vw, 17.5rem) | Haut des pages intérieures, de 80 à 280 px. |
Le mouvement n’existe que s’il révèle une structure. Avec prefers-reduced-motion, les durées passent à zéro et tout s’affiche dans son état final.
| Token | Valeur | Usage |
|---|---|---|
--motion-duration | 200ms | Hovers, aplats des boutons et de la navigation (200 ms). |
--motion-duration-long | 400ms | Balayage des cards, apparitions, figures de la méthode (400 ms). |
--motion-ease | cubic-bezier(0.2, 0, 0, 1) | Courbe commune à tous les mouvements. |
Les plus petits éléments d’interface, sans contenu métier. Ils n’utilisent que des tokens.
Bouton · src/components/atomes/Bouton.astro · Figma 2:493, 8:480
Déclenche une action ou mène à une page. Rendu en lien s’il a une adresse, en bouton sinon.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
variante | 'plein' | 'contour' | 'accent' | 'filet' | 'plein' | Apparence du bouton. |
taille | 'M' | 'S' | 'M' | M par défaut, S dans les boîtes flottantes. |
href | string | Adresse ; sans elle, le bouton est un élément button. |
principal : Libellé.<Bouton variante="plein" href="/travaux">Voir les travaux ↓</Bouton>
<Bouton variante="accent" taille="S" type="submit" value="copier">Copier</Bouton>Encart · src/components/atomes/Encart.astro
Isole un texte d’introduction sur un fond gris léger.
Chaque surface montre le même objet, tenu par les règles du design system, défini une seule fois dans le modèle. Seul l’usage change, selon qui le manipule, humain ou agent.
principal : Texte de l’encart.<Encart><p class="text-lead">Chapô du cas.</p></Encart>Etiquette · src/components/atomes/Etiquette.astro · Figma 2:494
Un bandeau de texte qui qualifie un contenu, par exemple une strate touchée ou une pratique.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
taille | 'S' | 'L' | 'S' | S (bandeau) ou L (titre). |
etat | boolean | true | On (vrai) ou Off (faux). |
etatTexte | string | Texte lu après le libellé, par exemple « touchée ». | |
balise | 'span' | 'h2' | 'h3' | 'h4' | 'span' | Élément rendu ; un niveau de titre quand le tag nomme un bloc. |
principal : Libellé.<Etiquette etat={false} etatTexte="non touchée">modèle</Etiquette>
<Etiquette taille="L" balise="h3">surfaces</Etiquette>Lien · src/components/atomes/Lien.astro
Un lien hors du texte courant, sans soulignement au repos, souligné au hover.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
href | string | obligatoire | Adresse. |
texte | string | Classe du style de texte, par exemple « text-ui ». |
principal : Libellé.<Lien texte="text-ui" href="/ecrits">← Tous les écrits</Lien>Des atomes assemblés en un élément qui a une fonction : une card, un header, un tooltip.
Carte · src/components/molecules/Carte.astro · Figma 2:489, 9:1600, 2:491
Présente un contenu en résumé, avec ou sans visuel, et mène à lui.
Une architecture par profils sur un socle de données commun, tenue par un design system gouverné.
Une architecture par profils sur un socle de données commun, tenue par un design system gouverné.
Un système bien conçu réduit l’effort nécessaire pour passer d’un besoin à une action, sans enlever les repères utiles.
Les endroits où l’on rencontre le produit. Je ne conçois pas un écran, mais la présence d’un même objet sur chacun d’eux.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
taille | 'L' | 'M' | 'M' | L ou M. |
apparence | 'ligne' | 'cadre' | 'ligne' | ligne (liste cliquable) ou cadre (bloc encadré). |
titre | string | obligatoire | Titre de la card. |
texte | string | obligatoire | Description ou thèse. |
meta | string | Ligne de méta en Caption, par exemple « entreprise · domaine ». | |
href | string | Adresse du contenu (apparence ligne). | |
visuel | { src?: ImageMetadata | string; alt: string; largeur?: number; hauteur?: number } | Image et son texte alternatif ; sans image, un aplat réserve la place en aperçu. | |
etiquettes | ItemEtiquette[] | Tags du Groupe de tags. | |
etiquettesLibelle | string | Nom de la liste de tags pour les technologies d’assistance. | |
retrait | boolean | Retrait de 304 px sur desktop. | |
titreEtiquette | boolean | false | Titre rendu en tag L (apparence cadre). |
niveau | 2 | 3 | 4 | 3 | Niveau du titre. |
lang | string | Langue du contenu, si elle diffère de celle de la page. |
<Carte taille="L" titre="…" texte="…" meta="Entreprise · domaine" href="/travaux/…"
visuel={{ src: image, alt: '…' }} etiquettes={etiquettesStrates(strates, ui)} etiquettesLibelle="Strates touchées" />
<Carte {...carteDEcrit(ecrit, locale, ui)} retrait={false} />EnTete · src/components/molecules/EnTete.astro · Figma 2:488
Ouvre une page ou une section par un titre en Display.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
titre | string | obligatoire | Texte du titre. |
niveau | 1 | 2 | 2 | 1 en tête de page, 2 dans une section. |
id | string | Identifiant du titre, pour aria-labelledby et les ancres. | |
espace | 'section' | 'page' | 'section' | section ou page. |
filet | boolean | true | Filet encre sous le titre. |
<EnTete titre="Travaux" niveau={1} espace="page" />Figure · src/components/molecules/Figure.astro · Figma 119:8515
Une illustration sur fond gris et sa légende, dans un cadre aux proportions fixes.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
src | string | obligatoire | Adresse de l’image, dans public/. |
legende | string | obligatoire | Légende en Caption. |
alt | string | '' | Texte alternatif ; vide si la légende suffit. |
ratio | string | '676 / 578' | Proportions du cadre. |
<Figure src="/images/methode/cadrer.svg" legende="Fig. 04 · Un parcours, ses moments et ses frictions" />GroupeEtiquettes · src/components/molecules/GroupeEtiquettes.astro
Une liste de tags S, chacun On ou Off.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
etiquettes | ItemEtiquette[] | obligatoire | Libellé, état et texte d’état de chaque tag. |
libelle | string | Nom de la liste pour les technologies d’assistance. | |
orientation | 'verticale' | 'horizontale' | 'verticale' | verticale ou horizontale. |
replier | 'mobile' | 'tablette' | Breakpoint sous lequel le groupe passe en ligne. |
<GroupeEtiquettes etiquettes={[{ libelle: 'surfaces', etat: true, etatTexte: 'touchée' }]}
libelle="Strates touchées" orientation="horizontale" replier="mobile" />Infobulle · src/components/molecules/Infobulle.astro · Figma 111:5507
Montre un texte avant une action, au hover et au focus clavier de son hôte.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
id | string | obligatoire | Identifiant, pour aria-describedby. |
titre | string | obligatoire | Titre de la boîte. |
alignement | 'debut' | 'fin' | 'debut' | Bord de l’hôte auquel elle s’aligne (desktop). |
principal : Texte montré.<div data-infobulle-hote style="position: relative">
<Bouton aria-describedby="apercu">Copier</Bouton>
<Infobulle id="apercu" titre="Ce texte sera copié">…</Infobulle>
</div>Modale · src/components/molecules/Modale.astro · Figma 111:5507
Une boîte de dialogue qui demande une confirmation.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
id | string | obligatoire | Identifiant ; le titre reçoit `<id>-titre`. |
titre | string | obligatoire | Titre de la boîte. |
principal : Texte montré.actions : Boutons, dont la valeur devient la valeur de retour de la modal.<Modale id="confirmation" titre="Ce texte sera copié">
…
<Fragment slot="actions">
<Bouton variante="accent" taille="S" type="submit" value="copier">Copier</Bouton>
<Bouton variante="filet" taille="S" type="submit" value="annuler">Annuler</Bouton>
</Fragment>
</Modale>Des molécules et des atomes assemblés pour une tâche du site : copier un lien, présenter un pilier de méthode, naviguer.
CopieLienIA · src/components/organismes/CopieLienIA.astro
Copie un prompt prêt à coller dans un assistant IA, avec l’adresse de la version agent du site.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
libelle | string | obligatoire | Libellé du bouton. |
confirmation | string | obligatoire | Message après la copie. |
echec | string | obligatoire | Message si la copie échoue. |
apercu | string | obligatoire | Titre du tooltip et de la modal. |
prompt | string | obligatoire | Texte copié ; {lien} y devient l’adresse de la version agent. |
confirmer | string | obligatoire | Action principale de la modal. |
annuler | string | obligatoire | Action secondaire de la modal. |
variante | 'plein' | 'contour' | 'plein' | Variante du bouton. |
alignement | 'debut' | 'fin' | 'debut' | Alignement du tooltip. |
emplacement | string | obligatoire | Emplacement, transmis à la mesure d’audience. |
<CopieLienIA {...textes} variante="contour" alignement="fin" emplacement="hero" />EmailCopiable · src/components/organismes/EmailCopiable.astro
L’adresse e-mail en grand, copiée en un clic.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
locale | Locale | obligatoire | Langue des textes. |
<EmailCopiable locale={locale} />PiedDePage · src/components/organismes/PiedDePage.astro · Figma 2:492
L’adresse e-mail en grand, la signature, les liens utiles et la localisation.
Présenté en place, en haut et en bas de cette page.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
locale | Locale | obligatoire | Langue des textes. |
avecEmail | boolean | true | Affiche l’adresse en grand. |
<PiedDePage locale={locale} avecEmail={false} />PilierDeMethode · src/components/organismes/PilierDeMethode.astro · Figma 2:490
Un temps de la méthode, sa phrase et ses pratiques.
Je pars des usages observés sur le terrain, puis je pose avec Product et Engineering les arbitrages qui fixeront les règles du produit.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
titre | string | obligatoire | Nom du pilier. |
description | string | obligatoire | Phrase du pilier. |
pratiques | string[] | obligatoire | Pratiques, en tags. |
niveau | 2 | 3 | 4 | 3 | Niveau du titre. |
<PilierDeMethode titre="Cadrer" description="…" pratiques={['Entretiens', 'Tests d’utilisabilité']} />Planche · src/components/organismes/Planche.astro · Figma 27:412
Un message de fin de page, un titre sur plusieurs lignes et des paragraphes.
Contenu passé en slot (sur la page Contact, l’adresse copiable)
| Propriété | Type | Défaut | Description |
|---|---|---|---|
libelle | string | Surtitre en Label. | |
titre | string[] | obligatoire | Titre, une ligne par entrée. |
texte | string[] | obligatoire | Paragraphes en Lead. |
sombre | boolean | false | Variante sombre. |
nom | string | Nom de la région. | |
niveau | 2 | 3 | 4 | 2 | Niveau du titre. |
principal : Contenu sous le texte (variante sombre).<Planche libelle={ui.planche.libelle} titre={ui.planche.titre} texte={ui.planche.texte} />
<Planche titre={…} texte={…} sombre><EmailCopiable locale={locale} /></Planche>Les structures de page. Chaque template sert les deux langues ; les pages ne font que lui passer la langue.
| Page | Description | Composé de |
|---|---|---|
Accueilsrc/gabarits/Accueil.astro | Hero, strates, travaux, position, méthode et écrits. | Bouton, Encart, Card, Header, Figure, Copier le lien IA, Pilier de méthode |
Cassrc/gabarits/Cas.astro | Une étude de cas, du résumé aux décisions et à leurs règles. | Encart, Lien, Header, Groupe de tags, Planche |
Contactsrc/gabarits/Contact.astro | Le message et l’adresse copiable, sur une planche sombre. | Header, E-mail copiable, Planche |
Ecritsrc/gabarits/Ecrit.astro | Un écrit, sa thèse, ses cas cités et ses écrits liés. | Encart, Lien, Card, Header, Planche |
ListeEcritssrc/gabarits/ListeEcrits.astro | Liste des écrits, en cards M. | Card, Header, Planche |
ListeTravauxsrc/gabarits/ListeTravaux.astro | Liste des cas, en cards L avec visuel. | Card, Header, Planche |
Parcourssrc/gabarits/Parcours.astro | Expériences et formation. | Bouton, Header, Groupe de tags, Planche |
Systemesrc/gabarits/Systeme.astro | Cette page. | Bouton, Encart, Tag, Lien, Card, Header, Figure, Groupe de tags, Tooltip, Modal, Copier le lien IA, E-mail copiable, Pilier de méthode, Planche |