// design system

elisa_
design

Référence visuelle et composants partagés — home, budget & recettes

v2.0Unified Design System
1 paletteBeige · Navy · Orange · Lime
2 policesSpace Mono · Inter
3 appsHome · Budget · Recettes

Couleurs

Scales complètes — chaque couleur déclinée de 50 (le plus clair) à 900 (le plus foncé).

Orange — accent primaire
50#FFF7F2
100#FFEEE5
200#FFD4B8
300#FFAA7A
400#FF7A42
500 ★#FF5500
600#D94800
700#B33C00
800#8C2F00
900#4D1A00
Navy — couleur principale
50#EEEEF6
100#D4D5EA
200#A9ABD5
300#7E81C0
400#5357AB
500#282D96
600#1C2070
700#111450
800 ★#0D1030
900#060818
Lime — accent secondaire
50#F8FFD6
100#EFFFAA
200#DFFF66
300#D2FF33
400 ★#C9FF00
500#A8D600
600#88AD00
700#668400
800#455A00
900#243000
Neutral — gris warm
50#FAF8F3
100#F0EDE4
200#E8E6DF
300#D4D1C8
400#BEBBB0
500 ★#9999AA
600#787788
700#585666
800#383744
900#181822
Sémantique — success · error
success-lt#E8FFCC
success#7DC500
success-dk#527F00
error-lt#FFE5E5
error#FF3B3B
error-dk#CC0000

Accessibilité des couleurs

Ratios de contraste WCAG 2.1 calculés pour chaque combinaison. AA = 4.5:1 (texte normal) · AA Large = 3:1 (texte ≥18px ou gras ≥14px, composants UI) · AAA = 7:1.

Texte → Fond
Background
#FAF8F3
Surface
#FFFFFF
Navy
#0D1030
Orange Lt
#FFEEE5
Navy #0D1030
17.45AAA
Aa
18.52AAA
Aa
1.00FAIL
16.42AAA
Aa
Orange #FF5500
3.02AA Large
Aa
3.21AA Large
Aa
5.78AA
Aa
2.84FAIL
Orange 600 #D94800
4.06AA Large
Aa
4.31AA Large
Aa
4.30AA Large
Aa
3.82AA Large
Orange 700 #B33C00
5.55AA
Aa
5.89AA
Aa
3.14AA Large
5.22AA
Aa
Lime #C9FF00
1.11FAIL
1.18FAIL
15.69AAA
Aa
1.05FAIL
Muted #9999AA
2.64FAIL
2.80FAIL
6.61AA
Aa
2.48FAIL
Success #7DC500
2.01FAIL
2.13FAIL
8.69AAA
Aa
1.89FAIL
Error #FF3B3B
3.33AA Large
Aa
3.53AA Large
Aa
5.24AA
Aa
3.13AA Large
Navy 500 #282D96
10.38AAA
Aa
11.02AAA
Aa
1.68FAIL
9.77AAA
Aa
Blanc #FFFFFF
1.06FAIL
1.00FAIL
18.52AAA
Aa
1.13FAIL
AAA≥ 7:1 — texte normal, tout usage
AA≥ 4.5:1 — texte normal minimum
AA Large≥ 3:1 — texte ≥18px, icônes, bordures actives
FAIL< 3:1 — ne pas utiliser

✓ Combinaisons validées

Texte principal Note: muted ≥18px seulement
Navy sur Background — 17.5:1 AAA
Usage : tout le texte principal
Texte sur carte Hint, date, métadonnées
Navy sur Surface — 18.5:1 AAA
Usage : texte dans les cartes blanches
Texte blanc 12 450,00 € // patrimoine
Blanc/Orange/Lime sur Navy
18.5 · 5.78 · 15.7 — AA à AAA
Lien important Texte d'erreur ou lien
Orange 700 sur Background — 5.55:1 AA
Utiliser #B33C00 pour du texte orange lisible

✕ Erreurs fréquentes à éviter

Texte corps orange 500 Description en orange sur fond clair
3.02:1 FAIL pour texte normal
Orange #FF5500 ne passe qu'en ≥18px ou gras ≥14px
Titre en lime Texte lime sur fond clair
1.11:1 FAIL — invisible
Lime ne fonctionne QUE sur fond navy
Texte muted pour info Placeholder ou texte secondaire
2.64:1 FAIL — texte normal
Muted uniquement pour texte ≥18px décoratif
✓ Paiement validé Confirmation en vert success
2.01:1 FAIL
Success #7DC500 = fond coloré + texte navy, pas l'inverse

Guide rapide — quand utiliser chaque couleur

Orange #FF5500
✓ Fond de bouton, icône active, bordure active, texte ≥18px ✗ Texte corps normal sur fond clair — utiliser #B33C00 à la place
Lime #C9FF00
✓ Texte/icône sur fond navy uniquement (15.7:1) ✗ Jamais sur fond clair (1.1:1) — invisible
Muted #9999AA
✓ Métadonnées ≥18px, dates, placeholders visuels, labels décoratifs ✗ Texte informatif — 2.64:1, échoue WCAG AA
Success #7DC500
✓ Fond de tag/badge (texte navy dessus), icône sur fond navy, barre de progression ✗ Texte coloré sur fond clair — 2.01:1 FAIL
Error #FF3B3B
✓ Icône d'erreur, bordure de champ invalide, texte ≥18px ou gras (3.33 AA Large) ✗ Texte d'erreur corps 14px sur fond clair — utiliser un fond coloré clair + texte navy
Orange 700 #B33C00
✓ Texte orange lisible sur fond clair — 5.55:1 AA ✓ — utiliser pour les liens ou labels orange

Patterns accessibles pour les états colorés

✓ Budget OK
Fond success-lt + texte navy
AA ✓ lisible
✕ Erreur
Fond error-lt + texte navy
AA ✓ lisible
⚠ Attention
Fond orange-lt + texte orange-700
5.22:1 AA ✓
✓ Actif
Fond navy + texte lime
15.7:1 AAA ✓
− 42,00 €
Fond navy + texte orange
5.78:1 AA ✓

Typographie

Space Mono pour les titres, labels, valeurs numériques. Inter pour le corps de texte.

Display
Space Mono 700 / 48px
Titre H1
Space Mono 700 / 32px
Titre H2
Space Mono 700 / 22px
Titre H3
Space Mono 700 / 16px
Corps de texte — lecture normale, descriptions, instructions de recettes.
Inter 400 / 17px
Label medium, boutons, éléments interactifs
Inter 500 / 14px
12 450,00 €
Space Mono 700 / tabular-nums
// section label
Space Mono 400 / 11px / ls 0.15em

Espacement

Échelle de 7 niveaux.

xs — 4px
sm — 8px
md — 16px
lg — 24px
xl — 32px
2xl — 48px
3xl — 64px

Radius & Ombres

Radius

0px
sm8px
md12px
lg16px
xl20px
2xl24px
fullpill

Ombres

soft6%
card10%
float16%

Icônes

Bibliothèque Lucide — icônes utilisées dans les apps. Stroke-width 1.5 (repos) / 2.5 (actif). Hover sur une icône pour voir la couleur d'accentuation.

Navigation & structure
Receipt
Target
Wallet
Tag
Home
Dashboard
Sidebar
Menu
Actions
Plus
Pencil
Trash2
Search
Filter
ArrowUpDown
Download
ExternalLink
Copy
Share2
LogOut
Settings
Feedback & états
CircleCheck
Info
TriangleAlert
OctagonX
Loader2
X
XCircle
Check
Bell
BellOff
Navigation directionnelle
ChevronLeft
ChevronRight
ChevronUp
ChevronDown
ArrowLeft
ArrowRight
MoveUpRight
MoveDownLeft
Finance (recettes & budget)
TrendingUp
TrendingDown
Banknote
PiggyBank
BarChart3
CircleDollar
Utensils
ShoppingCart
BookOpen
Clock
Calendar
Star

Tailles

14px
16px
18px
★ défaut
22px
tab bar
28px
36px
48px
empty state

Stroke width — repos vs actif

stroke 1.5
repos / inactif
stroke 2.5
actif / sélectionné
stroke 1.5
stroke 2.5
stroke 1.5
stroke 2.5

Couleurs

Navy
défaut
Orange
actif / CTA
Lime
accent
Muted
inactif
Success
Error
Warning
orange-600

Sur fond sombre

blanc · blanc/30% · orange · lime

Icônes dans les boutons

Icône avec badge

3
12

Boutons

Matrice complète : type × couleur × état × taille × icône.

Couleur Filled Outlined Ghost
Orange
Navy
Lime
Error
Success
Muted

États — Orange filled comme référence

Default bg #FF5500 · text #fff
Hover bg #D94800 · translateY(-2px) · shadow
Active bg #B33C00 · scale(0.97)
Focus outline 3px rgba(255,85,0,0.4) · offset 2px
Disabled bg border · color muted · opacity 0.7 · cursor not-allowed
Loading spinner centré · text transparent · pointer-events none

Tailles

XS 4px 10px · r-6px · 11px
SM 6px 12px · r-sm · 12px
MD ★ 9px 18px · r-md · 14px — défaut
LG 12px 24px · r-lg · 15px
XL 14px 32px · r-xl · 17px

Boutons avec icônes

Icône gauche
Icône droite
Icon-only SM
Icon-only MD
Icon-only LG (FAB)

Champs de saisie

Focus → bordure orange
Format invalide
État succès
Toggle
Checkbox
Notifications push activées
Épingler au dashboard

Cartes

4 patterns communs aux 3 apps.

Stat card — home

// mémoire
67%

Hero dark — budget

// patrimoine total
12 450,00 €

Recipe card — recettes

Poulet rôti au citron
⏱ 45 min
Volaille Four +2

Budget progress card

🛒 Courses58%
il reste 42,00 €
⚠ 🍔 Restau88%
il reste 6,00 €
⚠ 🎮 Loisirs102%
−2,00 € au-dessus du plafond

Tags & Badges

Tags Orange Navy Lime Muted Succès Erreur
Badges 3 7 !

Feedback & États

Alertes

InformationMise à jour disponible.
SuccèsTransaction enregistrée.
AttentionBudget à 88%.
ErreurMot de passe incorrect.

Progress bars

CPU42%
Mémoire67%
Disque23%

État vide

🧾
Aucune transaction

Commence par ajouter ta première dépense.

FAB + Bottom sheet

zone de contenu

// ajouter une transaction

Motion

Hover sur les cartes pour voir l'effet spring.

Springcubic-bezier(.34,1.56,.64,1) 0.4s
LifttranslateY(-4px) scale(1.04) 0.18s
Colorbackground, color 0.15s ease
Progresswidth 0.6s ease

✓ À faire

  • Animer uniquement les changements d'état
  • Utiliser easing cubic-bezier springy
  • Animer transform et opacity
  • Respecter prefers-reduced-motion

✗ À éviter

  • Animer width, height, top, left
  • Animations en boucle décorative
  • Durées > 500ms sur les micro-interactions
  • Effets sans sens fonctionnel

Tokens CSS

Variables à copier dans vos fichiers CSS ou tokens.js.

/* Couleurs */
--bg:       #FAF8F3;
--surface:  #FFFFFF;
--navy:     #0D1030;
--orange:   #FF5500;
--lime:     #C9FF00;
--orange-lt:#FFEEE5;
--muted:    #9999AA;
--border:   #E8E6DF;
--success:  #7DC500;
--error:    #FF3B3B;

/* Typographie */
--mono: 'Space Mono', monospace;
--sans: 'Inter', sans-serif;
/* Spacing */
--sp-xs:  4px;
--sp-sm:  8px;
--sp-md:  16px;
--sp-lg:  24px;
--sp-xl:  32px;
--sp-2xl: 48px;
--sp-3xl: 64px;

/* Radius */
--r-sm:   8px;
--r-md:   12px;
--r-lg:   16px;
--r-xl:   20px;
--r-2xl:  24px;
--r-full: 9999px;

/* Shadows */
--sh-soft:
  0 2px 8px rgba(13,16,48,.06);
--sh-card:
  0 4px 20px rgba(13,16,48,.10);
--sh-float:
  0 8px 32px rgba(13,16,48,.16);

/* Easing */
/* Spring: cubic-bezier(.34,1.56,.64,1) */
/* Smooth: cubic-bezier(.4,0,.2,1)      */