Fondations
Fondations
Ce qui est commun à toute l’application et au site : le logo, les couleurs, la typographie, les espacements, la grille, les rayons, les ombres, les bordures, les icônes et le mouvement.
Logo
Le symbole sur trois fonds



| Fond | Version | Fichier |
|---|---|---|
| Clair | Couleur | ember-symbole.png |
| Sombre | Couleur | ember-symbole.png |
| Orange Ember | Blanche, une seule couleur | ember-symbole-blanc.png |
Assemblage : le composant EmberLogo
Aperçu vivant
Ember.
Ember.

| Taille | Symbole | Mot « Ember. » | Emploi |
|---|---|---|---|
sm | 32 px | font-satoshi text-xl font-bold text-neutral-900 | Header du site, rail de l’app |
md | 40 px | font-satoshi text-2xl font-bold text-neutral-900 | Modale d’inscription |
lg | 64 px | aucun | Pied de page (symbole seul) |
hero | 72 px | aucun | Accueil de l’app (symbole seul, 56 ou 72 px) |
Zone de protection et taille minimale
Zone de protection

x = la moitié de la hauteur du logo, de chaque côté.
Taille minimale
24 px de haut à l’écran
48 pxHauteur minimale : 24 px à l’écran, 8 mm à l’impression.
Usages
À faire

À faire : Poser le symbole sur un fond uni, en version couleur sur le clair et le sombre.

À faire : Utiliser la version blanche sur l’orange d’Ember.
À ne pas faire

À ne pas faire : Changer les couleurs du symbole.

À ne pas faire : Étirer ou écraser le symbole.

À ne pas faire : Ajouter une ombre ou un effet.

À ne pas faire : Le poser sur un fond chargé ou une photo.
Fichiers
| Fichier | Contenu |
|---|---|
ember-symbole.png | Symbole en couleur, 622 × 571 px, fond transparent |
ember-symbole-blanc.png | Symbole blanc, 622 × 571 px, fond transparent |
ember-kit-media.zip | Les deux symboles, la palette (texte, JSON, CSS) et les textes de présentation |
| Icônes d’application | icon-192.png, icon.png (512), icon-1024.png, apple-icon.png, favicon-root.ico |
| Images de partage | og-brand-fr.png, og-brand-en.png |
Couleurs de marque
ember de 50 à 950, la même dans l’application et sur le site. Cliquez sur une couleur pour copier sa valeur.ember-50
#fff9f5 · RVB 255 249 245
Fonds de pastilles, icône de carte, état sélectionné
ember-100
#fff2e8 · RVB 255 242 232
Fond du plan mis en avant, halo de travail
ember-200
#ffe4d1 · RVB 255 228 209
Bordures de puces
ember-300
#ffcfa3 · RVB 255 207 163
Survol de bordure
ember-400
#ffb374 · RVB 255 179 116
Bordure de glisser-déposer
ember-500
#ff8c42 · RVB 255 140 66
Orange du logo : gros boutons, soulignement actif du menu, frise, pastilles, couleur du thème
ember-600
#f97316 · RVB 249 115 22
Survol des gros boutons
ember-700
#ea580c · RVB 234 88 12
Petits boutons (12 px et moins), anneau de focus
ember-800
#c2410c · RVB 194 65 12
Survol des petits boutons, texte orange, puces
ember-900
#9a3412 · RVB 154 52 18
Survol du texte orange
ember-950
#7c2d12 · RVB 124 45 18
Texte orange très foncé
Emploi de l’orange
| Rôle | Classes |
|---|---|
| Gros bouton (texte de 14 px et plus) | bg-ember-500 text-white hover:bg-ember-600 |
| Petit bouton (texte de 13 px et moins) | bg-ember-700 text-white hover:bg-ember-800 |
| Texte orange | text-ember-800, survol text-ember-900 |
| Fond d’un bouton | ember-500 pour un gros, ember-700 pour un petit, texte blanc, jamais ember-800 au repos |
| Puce orange | border-ember-200 bg-ember-50 text-ember-800 |
| Orange sans texte | logo, frise, pastilles, jauges, soulignement de menu : ember-500 |
| Anneau de focus | ring-2 ring-ember-700 ring-offset-2 |
ember-800 et ember-900.Dégradés
bg-gradient-orange
#ff8c42, #f97316, #ea580c
bg-gradient-orange-light
#fff9f5, #ffe4d1, #ffcfa3
bg-gradient-dark
#1c1917, #292524, #44403c
bg-gradient-subtle
#fafaf9, #f5f5f4, #fff9f5
Mode sombre de l’app
| Token | Clair | Sombre |
|---|---|---|
| ember-50 | #fff9f5 | rgb(43 29 19) |
| ember-100 | #fff2e8 | rgb(58 38 21) |
| ember-200 | #ffe4d1 | rgb(87 54 26) |
Le mode sombre ne redéfinit que les fonds, bordures, anneaux et dégradés de ces trois teintes. Les oranges de 300 à 950 et les textes ne changent pas. Le site n’a pas de mode sombre : sa surface de marque est claire.
Neutres
neutral est le seul gris : un gris chaud, de 50 à 950. Aucun gris froid ne se mêle à lui.neutral-50
#fafaf9 · RVB 250 250 249
Fond du composeur, cadres du chat, sections calmes du site
neutral-100
#f5f5f4 · RVB 245 245 244
Bulle utilisateur, piste des segmentés, survols
neutral-200
#e7e5e4 · RVB 231 229 228
Bordure standard
neutral-300
#d6d3d1 · RVB 214 211 209
Bordure de bouton secondaire, cadre des blocs de code
neutral-400
#a8a29e · RVB 168 162 158
Texte indicatif (placeholder) seulement
neutral-500
#78716c · RVB 120 113 108
Légendes, icônes au repos
neutral-600
#57534e · RVB 87 83 78
Texte secondaire, segment au repos
neutral-700
#44403c · RVB 68 64 60
Liens de navigation, texte de bouton neutre
neutral-800
#292524 · RVB 41 37 36
Texte du chat, bulles
neutral-900
#1c1917 · RVB 28 25 23
Titres et texte principal
neutral-950
#0c0a09 · RVB 12 10 9
Titres très contrastés, bouton noir
Valeurs du mode sombre de l’app
| Token | Clair | Sombre, texte | Sombre, fond |
|---|---|---|---|
| neutral-50 | #fafaf9 | #1c1c1c | #1c1c1c |
| neutral-100 | #f5f5f4 | #2e2e2e | #2e2e2e |
| neutral-200 | #e7e5e4 | #3a3a3a | #3a3a3a |
| neutral-300 | #d6d3d1 | #4a4a4a | #4a4a4a |
| neutral-400 | #a8a29e | #8f8f8f | #5a5a5a |
| neutral-500 | #78716c | #a3a3a3 | #6b6b6b |
| neutral-600 | #57534e | #bdbdbd | #4a4a4a |
| neutral-700 | #44403c | #d4d4d4 | #3a3a3a |
| neutral-800 | #292524 | #e5e5e5 | #2a2a2a |
| neutral-900 | #1c1917 | #f2f2f2 | #0f0f0f |
| neutral-950 | #0c0a09 | #fafafa | #0a0a0a |
| Surface sombre | Valeur | Note |
|---|---|---|
| Page | #141414 | Texte #f2f2f2 ; un gris très sombre, jamais noir profond |
| Coquille (rail, barre) | #1a1a1a | data-theme-dark="shell" |
| Panneaux, cartes, menus, composeur | #262626 | Fond blanc réécrit, avec variantes de 95 % à 60 % |
| Bordure | #3a3a3a | |
| Texte de prose | #d4d4d4 · #f2f2f2 · #a3a3a3 | Corps, titres, légendes ; filets #3a3a3a |
Couleurs d’état
Les quatre jeux
Succès success
success-50
#ecfdf5 · RVB 236 253 245
success-200
#a7f3d0 · RVB 167 243 208
success-500
#10b981 · RVB 16 185 129
success-700
#047857 · RVB 4 120 87
success-800
#065f46 · RVB 6 95 70
Alerte warning
warning-50
#fffbeb · RVB 255 251 235
warning-200
#fde68a · RVB 253 230 138
warning-500
#f59e0b · RVB 245 158 11
warning-700
#b45309 · RVB 180 83 9
warning-800
#92400e · RVB 146 64 14
Erreur danger
danger-50
#fef2f2 · RVB 254 242 242
danger-200
#fecaca · RVB 254 202 202
danger-500
#ef4444 · RVB 239 68 68
danger-700
#b91c1c · RVB 185 28 28
danger-800
#991b1b · RVB 153 27 27
Information info
info-50
#f0f9ff · RVB 240 249 255
info-200
#bae6fd · RVB 186 230 253
info-500
#0ea5e9 · RVB 14 165 233
info-700
#0369a1 · RVB 3 105 161
info-800
#075985 · RVB 7 89 133
Emploi
Succès
Texte success-800, fond success-50, bordure success-200.
7,29:1 · AAA
Alerte
Texte warning-800, fond warning-50, bordure warning-200.
6,84:1 · AA
Erreur
Texte danger-800, fond danger-50, bordure danger-200.
7,60:1 · AAA
Information
Texte info-800, fond info-50, bordure info-200.
7,09:1 · AAA
| Emploi | Classes |
|---|---|
| Message (alerte, bandeau) | rounded-xl border border-{rôle}-200 bg-{rôle}-50 px-4 py-3 text-{rôle}-800 |
| Texte seul sur blanc | text-{rôle}-700 |
| Point ou icône de statut | bg-{rôle}-500 ou text-{rôle}-500 |
| Erreur de champ | border-danger-700, message text-sm text-danger-700 avec role="alert" |
| Bouton destructif | bg-danger-700 text-white hover:bg-danger-800 |
| Statuts de module | disponible success-500, accès limité warning-500, aperçu neutral-400, prévu neutral-300 |
| Mode sombre de l’app | positif #6ee7b7, négatif #fda4af |
Contrastes mesurés
Texte blanc sur les oranges (boutons)
| Aperçu | Couple | Ratio | Niveau | Emploi |
|---|---|---|---|---|
| white #ffffff sur ember-500 #ff8c42 | 2,31:1 | charte | Gros bouton | |
| white #ffffff sur ember-600 #f97316 | 2,80:1 | charte | Survol du gros bouton | |
| white #ffffff sur ember-700 #ea580c | 3,56:1 | charte | Petit bouton | |
| white #ffffff sur ember-800 #c2410c | 5,18:1 | AA | Survol du petit bouton |
Orange utilisé comme texte
| Aperçu | Couple | Ratio | Niveau | Emploi |
|---|---|---|---|---|
| ember-800 #c2410c sur white #ffffff | 5,18:1 | AA | Texte orange de référence | |
| ember-800 #c2410c sur ember-50 #fff9f5 | 4,96:1 | AA | Puce orange | |
| ember-800 #c2410c sur ember-100 #fff2e8 | 4,71:1 | AA | Plan mis en avant | |
| ember-900 #9a3412 sur white #ffffff | 7,31:1 | AAA | Survol du texte orange | |
| ember-700 #ea580c sur white #ffffff | 3,56:1 | gros texte | Anneau de focus (indicateur, 3:1 requis) |
Neutres
| Aperçu | Couple | Ratio | Niveau | Emploi |
|---|---|---|---|---|
| neutral-900 #1c1917 sur white #ffffff | 17,49:1 | AAA | Titres et texte principal | |
| neutral-800 #292524 sur white #ffffff | 15,17:1 | AAA | Texte du chat | |
| neutral-800 #292524 sur neutral-50 #fafaf9 | 14,52:1 | AAA | Cadres du chat | |
| neutral-700 #44403c sur white #ffffff | 10,27:1 | AAA | Liens de navigation | |
| neutral-600 #57534e sur white #ffffff | 7,63:1 | AAA | Texte secondaire | |
| neutral-600 #57534e sur neutral-100 #f5f5f4 | 6,99:1 | AA | Segment au repos | |
| neutral-500 #78716c sur white #ffffff | 4,80:1 | AA | Légendes, icônes au repos | |
| neutral-500 #78716c sur neutral-50 #fafaf9 | 4,59:1 | AA | Légendes sur cadre calme | |
| neutral-400 #a8a29e sur white #ffffff | 2,52:1 | échec | Texte indicatif (placeholder) seulement | |
| white #ffffff sur neutral-900 #1c1917 | 17,49:1 | AAA | Bouton noir |
Couleurs d’état
| Aperçu | Couple | Ratio | Niveau | Emploi |
|---|---|---|---|---|
| success-800 #065f46 sur success-50 #ecfdf5 | 7,29:1 | AAA | Message de succès | |
| success-700 #047857 sur white #ffffff | 5,48:1 | AA | Texte de succès | |
| warning-800 #92400e sur warning-50 #fffbeb | 6,84:1 | AA | Message d’alerte | |
| warning-700 #b45309 sur white #ffffff | 5,02:1 | AA | Texte d’alerte | |
| danger-800 #991b1b sur danger-50 #fef2f2 | 7,60:1 | AAA | Message d’erreur | |
| danger-700 #b91c1c sur white #ffffff | 6,47:1 | AA | Texte d’erreur | |
| info-800 #075985 sur info-50 #f0f9ff | 7,09:1 | AAA | Message d’information | |
| info-700 #0369a1 sur white #ffffff | 5,93:1 | AA | Texte d’information | |
| white #ffffff sur danger-700 #b91c1c | 6,47:1 | AA | Bouton destructif |
Mode sombre de l’app
| Aperçu | Couple | Ratio | Niveau | Emploi |
|---|---|---|---|---|
| #f2f2f2 sur #141414 | 16,46:1 | AAA | Texte sur la page | |
| #f2f2f2 sur #262626 | 13,52:1 | AAA | Texte sur un panneau | |
| #d4d4d4 sur #262626 | 10,21:1 | AAA | Texte de prose | |
| #bdbdbd sur #262626 | 8,06:1 | AAA | neutral-600 sombre | |
| #a3a3a3 sur #141414 | 7,30:1 | AAA | neutral-500 sombre sur la page | |
| #a3a3a3 sur #262626 | 6,00:1 | AA | neutral-500 sombre sur un panneau | |
| ember-500 #ff8c42 sur #262626 | 6,54:1 | AA | Orange en texte sur panneau sombre | |
| #6ee7b7 sur #262626 | 9,93:1 | AAA | Succès sombre | |
| #fda4af sur #262626 | 8,00:1 | AAA | Erreur sombre |
Typographie
Aa
Satoshi
Logo et titres
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 & ? ! €
Classe
font-satoshi. Fichiers locaux en woff2 (graisses 500 et 700) et otf ; la graisse 700 est préchargée. Graisses utilisées : Bold 700 et Medium 500.Aa
Inter
Interface et texte courant
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 & ? ! €
Classe
font-sans, chargée parnext/fontdans les deux produits (variable--font-inter,display: swap). Graisses utilisées : Regular 400, Medium 500, Semibold 600.
| Famille | Rôle | Classe | Graisses |
|---|---|---|---|
| Satoshi | Logo, titres | font-satoshi | 500, 700 |
| Inter | Interface, texte | font-sans | 400, 500, 600 |
| Mono | Code | font-mono | 400, 500 |
Échelle du site
site-container.ts et testée. Chaque échantillon ci-dessous utilise la constante réelle : redimensionnez la fenêtre pour voir le passage du téléphone au bureau.H1 des pages
Financez, créez, prospectez.
- Téléphone
- 40 px
- Bureau
- 56 px (md)
- Graisse
- Satoshi 700
- Interligne
- 1,04 puis 1,02
- Approche
- -0,02em
max-w-[900px]
H1 Produit, Solutions, Tarifs
Financez, créez, prospectez.
- Téléphone
- 40 px
- Bureau
- 64 px
- Graisse
- Satoshi 700
- Interligne
- 1,04 puis 1,02
- Approche
- -0,02em
H2 de section
Financez, créez, prospectez.
- Téléphone
- 32 px
- Bureau
- 44 px
- Graisse
- Satoshi 700
- Interligne
- 1,08
- Approche
- -0,02em
H3 (cartes, questions)
Financez, créez, prospectez.
- Téléphone
- 24 px
- Bureau
- 28 px
- Graisse
- Satoshi 700
- Interligne
- 1,2
- Approche
- -0,02em
Titre de carte module
Financez, créez, prospectez.
- Téléphone
- 20 px
- Bureau
- 20 px
- Graisse
- Satoshi 700
Prix (Tarifs)
0 €
- Téléphone
- 56 px
- Bureau
- 56 px
- Graisse
- Satoshi 700
- Interligne
- 1
- Approche
- -0,045em, chiffres tabulaires
Sous-titre de haut de page
Dites ce qui bloque, Ember s’en charge.
- Téléphone
- 17 px
- Bureau
- 20 px
- Graisse
- 400
- Interligne
- 1,5
- Approche
- neutral-600
Chapeau de page interne
Une page interne commence par un chapeau court.
- Téléphone
- 17 px
- Bureau
- 20 px
- Graisse
- 400
- Interligne
- 1,6
- Approche
- neutral-600, max-w-[720px]
Question de FAQ
Combien de temps dure le live ?
- Téléphone
- 18 px
- Bureau
- 18 px
- Graisse
- Satoshi 500
- Interligne
- 28 px
Réponse de FAQ
Une heure, et pas une minute de théorie.
- Téléphone
- 16 px
- Bureau
- 16 px
- Graisse
- 400
- Interligne
- 1,65
- Approche
- neutral-600
Lien de navigation
Solutions
- Bureau
- 15 px
- Graisse
- 500
- Approche
- neutral-700
Entrée de méga-menu
Finance ta croissance
Un dossier de financement sourcé.
- Bureau
- titre 15 px, texte 13 px
- Graisse
- Satoshi 500
- Interligne
- 24 / 20 px
Surtitre (menu, colonnes)
Ressources
- Téléphone
- 11 px
- Bureau
- 11 px
- Graisse
- 600, majuscules
- Interligne
- 20 px
- Approche
- +0,12em, neutral-500
Référence de tous les surtitres
Bouton
Commencer gratuitement
- Téléphone
- 16 px (hérité) ou 15 px
- Graisse
- 600
Lien du pied de page
Questions fréquentes
- Téléphone
- 15 px
- Graisse
- 400
- Interligne
- 24 px
- Approche
- neutral-600
Mentions légales
Conditions d’utilisation
- Téléphone
- 12 px
- Graisse
- 400
- Approche
- neutral-500
Le H1 de l’accueil fait 40 px, 56 px dès md et 64 px dès lg, centré dès md, max-w-[900px]. Les pages contrôlées à 768 px gardent l’échelle téléphone jusqu’à 1 024 px grâce à SITE_H1_TABLET_OVERRIDE et SITE_H2_TABLET_OVERRIDE.
Règles de mise en forme du texte
- Pas de mot orphelin :
h1àh4entext-wrap: balanceethyphens: manual,petlientext-wrap: pretty(#2573). Utilitaire.text-balance, aussi disponible dans l’app. - Lissage :
-webkit-font-smoothing: antialiaseddans les deux apps. - Titres en deux temps (pages Solutions) : le public sur sa ligne, la promesse dessous, espaces insécables avant « : » et entre les deux premiers mots.
- Émphase Markdown : italique ; les citations n’ajoutent aucun guillemet.
Échelle de l’interface
| Rôle | Taille | Aperçu | Classes |
|---|---|---|---|
| Surtitre, libellé de colonne | 11 px | Ressources | text-[11px] font-semibold uppercase tracking-[0.12em] text-neutral-500 |
| Légende, puce, petit bouton | 12 px | Modifié hier | text-xs |
| Texte dense : tableau, en-tête d’email, menu | 13 px | Objet : rendez-vous | text-[13px] |
| Interface (défaut), bouton | 14 px | Enregistrer | text-sm |
| Messages, liens de navigation et de pied de page | 15 px | Voici le plan proposé pour votre décision. | text-[15px] leading-relaxed |
| Corps, champs sur téléphone | 16 px | Rédigez un one-pager | text-base |
| Question de FAQ | 18 px | Combien de temps dure le live ? | font-satoshi text-[18px] font-medium |
| Titre de carte, de modale, de section d’écran | 20 px | Nouveau dossier | font-satoshi text-xl font-bold |
| Titre d’écran | 24 puis 30 px | Second Cerveau | font-satoshi text-2xl font-bold md:text-[30px] |
| Titre d’accueil de l’app | 30 px | Que construit-on ensemble ? | font-satoshi text-3xl font-bold tracking-tight |
| Code | 13 px, interligne 1,6 | const total = 12; | font-mono text-[13px] leading-[1.6] |
SITE_H1, SITE_H2, SITE_H3. Surtitres : un seul interlettrage, tracking-[0.12em]. Titres : tracking-[-0.02em]. Tailles interdites : 8, 9, 10 px et demi-pixels.Espacements
1 = 4 px, 2 = 8 px, 4 = 16 px, 16 = 64 px.L’échelle
- p-14 px
- p-28 px
- p-312 px
- p-416 px
- p-624 px
- p-832 px
- p-1248 px
- p-1664 px
- p-28112 px
h-[18px] w-[18px].Gouttières
SITE_CONTAINER = mx-auto w-full max-w-[1280px] px-4 sm:px-6 lg:px-12 : 16 px sur téléphone, 24 px sur tablette, 48 px sur bureau.Téléphone
< 640 px
Tablette
640 à 1023 px
Bureau
≥ 1024 px
Rythme vertical des sections
SITE_SECTION_Y = 'py-16 md:py-28' : 64 px sur téléphone, 112 px dès 768 px, pour toute section de page publique. Haut de page : pt-14 md:pt-20.Aperçu à l’échelle : marge haute et basse d’une section
Marges intérieures
Aperçu vivant, marges cotées
Carte du site, téléphone : p-6
Carte du site, bureau : md:p-8
Carte de tarif : p-5 sm:p-6
Carte de l’app : p-4
Alerte : px-4 py-3
| Surface | Marge |
|---|---|
| Site : carte | p-6 md:p-8 |
| Site : carte de tarif | p-5 sm:p-6 |
| Site : carte de choix | p-5 |
| Site : colonne du méga-menu | p-6 |
| App : carte | p-4 (p-3 pour une carte dense) |
| App : alerte | px-4 py-3 |
| App : composeur | ligne px-2.5 py-2 gap-1.5 ; cadre px-4 md:px-8 pt-3 |
Écran de l’app
| Élément | Valeur |
|---|---|
| Marges de l’écran | px-4 md:px-8 |
| Écart entre blocs | space-y-6 (24 px) |
| Intérieur d’une carte | p-4 (16 px) |
| Titre de page | font-satoshi text-2xl font-bold md:text-[30px] |
| Titre de section | font-satoshi text-xl font-bold |
Grille et points de rupture
Points de rupture
À l’échelle
| Seuil | Emploi |
|---|---|
xs | Petits téléphones (app) |
sm | Gouttière de 24 px, boutons de haut de page à leur taille |
md | Une colonne devient deux, titres de section de 44 px |
lg | Seuil bureau : menu complet du header, rail de l’app déplié, cibles compactes |
xl | Grille de tarifs à quatre colonnes |
2xl | Grands écrans |
Règle mobile
| Sujet | Téléphone (< 640) | Tablette (640 à 1023) | Bureau (≥ 1024) |
|---|---|---|---|
| Gouttière | 16 px | 24 px | 48 px |
| H1 | 40 px | 40 px | 56 à 64 px |
| H2 | 32 px | 32 px | 40 à 44 px |
| H3 | 24 px | 24 px | 28 px |
| Rythme entre sections | 64 px | 64 px | 112 px |
| Bouton principal d’un haut de page | pleine largeur (w-full sm:w-auto) | à sa taille | à sa taille |
| Cibles tactiles | 44 px | 44 px | 40 px au moins |
- Menu complet du header à partir de 1 024 px ; en dessous, menu mobile plein écran.
- Grilles de cartes en une colonne sous 768 px ; aucune image coupée.
Conteneurs et largeurs de lecture
Conteneur du site, 1 280 px au plus
| Où | Valeur |
|---|---|
| Contenu du site | SITE_CONTAINER : 1 184 px utiles |
| Sections pleine largeur au-delà de 1 920 px | SITE_CONTAINER_WIDE : max-w-[1440px] |
| Texte long, chapeaux, réponses | max-w-[680px] |
| Titres | max-w-[900px] |
| Fil de conversation et composeur (app) | max-w-3xl |
| Bulles (app) | 85 % (utilisateur), 92 % (assistant) |
| Grille de tarifs | md:grid-cols-2 xl:grid-cols-4 |
| Pied de page | md:grid grid-cols-4 gap-8 |
Rayons
rounded
4 px
Code en ligne
rounded-lg
8 px
Petits contrôles, entrées de menu, bouton burger
rounded-xl
12 px
Boutons, champs, cartes de l’app, pastilles d’icône
rounded-2xl
16 px
Fenêtres, menus flottants, états vides
rounded-3xl
24 px
Cartes du site, composeur, panneaux
rounded-full
plein
Puces, boutons icône ronds, segmentés
rounded-[calc(1.5rem-1px)]. Tout bouton rectangulaire est en rounded-xl ; rounded-full est réservé aux boutons icône ronds, aux puces et aux segmentés.Ombres et élévations
Les niveaux
- 0
À plat
none
Boutons, cartes, puces, segmentés, bandeau cookies
- 1
shadow-menu
0 8px 24px rgba(0,0,0,0.06)
Menus, popovers, toasts
- 2
shadow-modal
0 18px 48px rgba(41,37,36,0.08)
Fenêtres, feuilles mobiles, visionneuses
- 3
shadow-footer
0 20px 60px rgba(88,48,20,0.12)
Carte du pied de page du site
Jetons
Le curseur actif d’un segmenté est border border-neutral-200 bg-white, sans ombre. La dictée active porte ring-4 ring-danger-500/20.
Bordures
Carte
border border-neutral-200
1 px neutral-200 ; survol ember-500 (site) ou neutral-300 (app)
Champ
border border-neutral-200
1 px neutral-200 ; focus ember-700
Bouton secondaire
border border-neutral-300
1 px neutral-300
État vide
border-dashed border-neutral-300
Tirets de 1 px
Onglet souligné
border-b-2 border-ember-500
Actif : 2 px ember-500
Sélection
border-2 border-ember-500
Plan mis en avant : 2 px ember-500
Header du site : bordure basse transparente, puis neutral-200 après 24 px de défilement. Mode sombre : la bordure claire devient #3a3a3a. Aucune bordure orange pâle.
Icônes
lucide-react, au trait de 2, avec la syntaxe h-* w-*. Les icônes de marque (LinkedIn, X, YouTube) sont des composants dédiés.Les plus utilisées
- Loader2
- X
- Check
- Sparkles
- FileText
- ArrowRight
- ChevronDown
- Plus
- Minus
- ArrowUp
- ArrowDown
- Square
- Search
- Globe
- Menu
- Sun
- Moon
- CheckCircle2
Tailles
Aperçu vivant, tailles réelles
| Taille | Classes | Emploi |
|---|---|---|
| 12 px | h-3 w-3 | Icônes de puce, spinner de pièce jointe |
| 14 px | h-3.5 w-3.5 | Dans un texte de 12 px, chevron de langue |
| 16 px | h-4 w-4 | Taille par défaut : boutons, menus, composeur |
| 18 px | h-[18px] w-[18px] | Rail de l’app, fonctionnalités des tarifs |
| 20 px | h-5 w-5 | Boutons icône de 44 px, burger, fermeture, réseaux, icône de carte |
Trait
Aperçu vivant, trait de 2
Le trait est celui de lucide par défaut : 2. Aucun strokeWidth explicite.
Pastille d’icône
Aperçu vivant
h-11 w-11 rounded-xl bg-ember-50 text-ember-800 + icône 20 px
h-9 w-9 rounded-lg bg-neutral-50 text-ember-800 + icône 16 px
Mouvement
Démos rejouables
Durées
Même distance, même courbe : seule la durée change.
Cascade
Pas de 40 ms, plafond de 240 ms, montée de 6 px en 280 ms (motion-fade-up).
Survol et appui d’un bouton rempli
Au survol : montée de 2 px et agrandissement de 1,02 en 280 ms. À l’appui : 0,98 en 150 ms. Jamais d’ombre. Approchez le pointeur ou appuyez.
--motion-lift-y: -2px · --motion-lift-scale: 1.02 · --motion-press-scale: 0.98
Jetons
Classes Tailwind
duration-fast duration-base ease-motion motion-reduce:transition-noneGabarits de mouvement
| Gabarit | Effet |
|---|---|
.transition-interactive | Couleur, fond, bordure, transform, opacité, filtre en --motion-fast |
.hover-lift | Boutons remplis : au survol d’un pointeur réel, translateY(-2px) scale(1.02) en 280 ms ; à l’appui scale(0.98) en 150 ms ; jamais d’ombre ; exclu si désactivé |
.motion-fade-up | Entrée avec montée de 6 px |
.motion-reveal-word | Mot à mot : 8 px et flou de 6 px |
.motion-dialog-in | Fenêtre : échelle 0,97 |
.motion-sheet-in | Feuille mobile : 12 px |
.motion-pop-in | Menu : 150 ms |
.motion-backdrop-in | Voile |
.motion-brand-in | Entrée du logo : 360 ms |
.motion-delayed-in | Fondu après 300 ms : chargement discret |
.motion-curtain | Dépliage en hauteur, de 0fr à 1fr |
| Site | chevron qui pivote, soulignement glissant du menu, accordéons grid-rows, curseur du segmenté : tous en 280 ms ; méga-menu : ouverture après 120 ms, fermeture après 200 ms |
Surbrillance des CTA
| Élément | Valeur |
|---|---|
| Classe | ember-primary-cta-highlight |
| Reflet | Bande de 42 %, dégradé blanc à 100° (pic 68 %), skewX(-18°). Traverse entre 4 % et 20 % d’une boucle de 4 s ease-in-out, opacité max 0,88 |
| Halo | inset 0 0 13px rgb(255 255 255 / 48 %), opacité de 0,18 à 0,52 en 2,5 s |
| Désactivé | Animation coupée |
| Mouvement réduit | Reflet figé (largeur 100 %, opacité 0,12), halo à 0,24 |
| Boutons concernés | Trois seulement : « Commencer gratuitement » du header, « Choisir Pro » et « Composer mon équipe » |
Réduction du mouvement
- Toutes les entrées sont coupées, les transitions passent à 0,01 ms, aucun déplacement au survol ni à l’appui. Le mode incognito garde un fondu de 200 ms, les confettis sont masqués, les diapositives passent en fondu de 120 ms.
motion-reduce:transition-nonedans toutes les classes de transition ; reflet des CTA figé ;motion-safe:animate-hero-rise.scroll-behavior: smoothsurhtml.