Skip to content

Guide des Couleurs

Le système de couleurs est organisé en trois niveaux hiérarchiques : palettes brutes, tokens sémantiques et variables CSS. Cette architecture garantit cohérence, accessibilité et facilité de maintenance.

Architecture des couleurs

Niveaux hiérarchiques

Palettes brutes (foundations)

Tokens sémantiques (themes)

Variables CSS (runtime)
  1. Palettes brutes : Couleurs pures définies une seule fois
  2. Tokens sémantiques : Attribution de sens contextuel aux couleurs
  3. Variables CSS : Application dynamique selon le thème actif

Palettes de base

Primary (Bleu)

Couleur principale de la marque, utilisée pour les actions primaires et éléments clés.

NuanceHexUsage
50#eff6ffBackgrounds très légers
100#dbeafeBackgrounds légers
200#bfdbfeBorders subtiles
300#93c5fdHover states légers
400#60a5faLiens mode sombre
500#3b82f6Couleur principale
600#2563ebActions primaires
700#1d4ed8Hover primaire
800#1e40afActive states
900#1e3a8aLiens visités
950#172554Texte sur fond clair bleu

Contraste minimum : 600 sur blanc (4.5:1 - AA), 700 recommandé (7:1 - AAA)

Gray (Neutres)

Base pour textes, backgrounds et bordures. Contraste WCAG vérifié.

NuanceHexContraste sur blancUsage
50#f9fafb-Canvas light
100#f3f4f6-Backgrounds désactivés
200#e5e7eb-Borders subtiles
300#d1d5db-Borders par défaut
400#9ca3af4.6:1Texte désactivé (AA)
500#6b72804.7:1Texte tertiaire (AA)
600#4b55637.3:1Borders fortes (AAA)
700#3741519.3:1Texte secondaire (AAA)
800#1f293713.1:1Surface dark
900#11182716.8:1Texte principal (AAA)
950#03071219.4:1Canvas dark

Contraste WCAG

  • AA : 4.5:1 minimum (texte normal)
  • AAA : 7:1 recommandé (meilleure lisibilité)

Success (Vert)

Retours positifs, validation, succès d'opérations.

NuanceHexUsage
50#ecfdf5Background success léger
100#d1fae5Background success
500#10b981Icônes success dark
600#059669Texte success light
700#047857Hover success

Exemple : Notifications de succès, indicateurs de validation, badges actifs.

Warning (Ambre)

Avertissements, actions nécessitant attention.

NuanceHexUsage
50#fffbebBackground warning léger
100#fef3c7Background warning
500#f59e0bIcônes warning dark
600#d97706Texte warning light
700#b45309Hover warning

Exemple : Alertes non bloquantes, sections nécessitant attention, badges de mise à jour.

Error (Rouge)

Erreurs, actions destructives, états critiques.

NuanceHexUsage
50#fef2f2Background error léger
100#fee2e2Background error
500#ef4444Icônes error dark
600#dc2626Texte error light
700#b91c1cHover error

Exemple : Messages d'erreur, boutons de suppression, indicateurs d'échec.

Info (Cyan)

Information neutre, aide contextuelle.

NuanceHexUsage
50#ecfeffBackground info léger
100#cffafeBackground info
500#06b6d4Icônes info dark
600#0891b2Texte info light
700#0e7490Hover info

Exemple : Tooltips, messages informatifs, badges de documentation.

Palettes thématiques

Ocean

Ambiance maritime professionnelle avec dominante cyan et accents corail.

Couleurs clés :

  • Primary : #f97316 (Corail) - Contraste sur fond océan
  • Background : #e0f2fe (Bleu ciel)
  • Accent : #0891b2 (Cyan)

Cas d'usage : Applications de voyage, dashboards d'analyse, interfaces financières.

Forest

Inspiration naturelle avec verts et orange automne.

Couleurs clés :

  • Primary : #f97316 (Orange automne)
  • Background : #f7fee7 (Vert pâle)
  • Accent : #16a34a (Vert forêt)

Cas d'usage : Applications écologiques, santé/bien-être, éducation.

Sunset

Palette chaleureuse avec rose, violet et orange.

Couleurs clés :

  • Primary : #db2777 (Rose)
  • Background : #fff7ed (Pêche)
  • Accent : #a855f7 (Violet)

Cas d'usage : Applications créatives, réseaux sociaux, divertissement.

Utilisation des couleurs

Dans les composants

vue
<style scoped lang="scss">
.component {
  /* ❌ Éviter : Couleurs en dur */
  color: #111827;
  background: #ffffff;
  
  /* ✅ Recommandé : Variables CSS */
  color: var(--su-text-primary);
  background-color: var(--su-bg-surface);
}
</style>

Couleurs sémantiques

Utilisez toujours les tokens sémantiques plutôt que les couleurs brutes :

scss
// ❌ Mauvais
.button {
  background: #3b82f6;
}

// ✅ Bon
.button {
  background-color: var(--su-primary-default);
  
  &:hover {
    background-color: var(--su-primary-hover);
  }
}

États interactifs

Les couleurs d'états sont automatiquement gérées :

vue
<style scoped lang="scss">
.interactive-element {
  background-color: var(--su-bg-surface);
  
  &:hover {
    background-color: var(--su-bg-hover);
  }
  
  &:active {
    background-color: var(--su-bg-active);
  }
  
  &:disabled {
    background-color: var(--su-bg-disabled);
    color: var(--su-text-disabled);
  }
}
</style>

Accessibilité des couleurs

Contraste de texte

Le système garantit un contraste minimum selon WCAG 2.1 :

NiveauRatioUsage
AA (minimum)4.5:1Texte normal (16px+)
AA Large3:1Texte large (18px+ ou 14px bold)
AAA (recommandé)7:1Texte normal pour meilleure lisibilité
AAA Large4.5:1Texte large

Vérification du contraste

scss
// Texte principal : TOUJOURS AAA (7:1+)
.text-primary {
  color: var(--su-text-primary); // gray-900 sur blanc = 16.8:1 ✓
}

// Texte secondaire : AAA recommandé
.text-secondary {
  color: var(--su-text-secondary); // gray-700 sur blanc = 9.3:1 ✓
}

// Texte tertiaire : AA minimum
.text-tertiary {
  color: var(--su-text-tertiary); // gray-500 sur blanc = 4.7:1 ✓
}

Mode contraste élevé

En mode contraste élevé, les couleurs sont automatiquement renforcées :

scss
// Mode normal
[data-contrast="normal"] {
  --su-text-primary: #111827;
  --su-border-default: #d1d5db;
}

// Mode contraste élevé
[data-contrast="high"] {
  --su-text-primary: #000000; // Noir pur
  --su-border-default: #000000; // Bordures visibles partout
}

Ne jamais utiliser la couleur seule

Combinez toujours la couleur avec d'autres indicateurs visuels :

vue
<template>
  <!-- ❌ Mauvais : Couleur seule -->
  <span class="status-success">Actif</span>
  
  <!-- ✅ Bon : Couleur + icône + texte -->
  <span class="status-success">
    <IconCheck />
    <span>Actif</span>
  </span>
</template>

Transparence et overlays

Overlays recommandés

scss
// Overlay sombre (modales, dropdowns)
.overlay-dark {
  background-color: rgba(0, 0, 0, 0.5); // 50% noir
}

// Overlay clair (sur fond sombre)
.overlay-light {
  background-color: rgba(255, 255, 255, 0.1); // 10% blanc
}

// Utilisation avec variables
.modal-backdrop {
  background-color: var(--su-bg-overlay); // S'adapte au thème
}

Hover et focus states

scss
.button {
  background-color: var(--su-primary-default);
  
  // Hover : assombrir de 10%
  &:hover {
    background-color: color-mix(
      in srgb, 
      var(--su-primary-default) 90%, 
      black
    );
  }
  
  // Ou utiliser le token dédié
  &:hover {
    background-color: var(--su-primary-hover);
  }
}

Color-mix et manipulations

Éclaircir / Assombrir

scss
// Éclaircir de 20%
.lighter {
  background-color: color-mix(
    in srgb,
    var(--su-primary-default) 80%,
    white
  );
}

// Assombrir de 20%
.darker {
  background-color: color-mix(
    in srgb,
    var(--su-primary-default) 80%,
    black
  );
}

Opacité

scss
// Via rgba (si couleur hex)
.semi-transparent {
  background-color: rgba(59, 130, 246, 0.5); // 50% opacité
}

// Via color-mix
.semi-transparent-dynamic {
  background-color: color-mix(
    in srgb,
    var(--su-primary-default) 50%,
    transparent
  );
}

Bonnes pratiques

✅ À faire

  • Utiliser les variables CSS pour toutes les couleurs
  • Respecter les tokens sémantiques
  • Vérifier le contraste (minimum AA, recommandé AAA)
  • Tester en mode contraste élevé
  • Combiner couleur + forme + texte pour l'information

❌ À éviter

  • Couleurs en dur dans les composants
  • Couleurs brutes des palettes directement
  • Contraste insuffisant (< 4.5:1)
  • Information uniquement par la couleur
  • Trop de couleurs différentes (confusion visuelle)

Outils de développement

Extension navigateur

  • Stark : Vérification du contraste en temps réel
  • Colorblindly : Simulation des déficiences visuelles
  • WAVE : Audit d'accessibilité complet

En ligne

DevTools

javascript
// Dans la console du navigateur
const styles = getComputedStyle(document.documentElement);
const primary = styles.getPropertyValue('--su-primary-default');
console.log('Couleur primaire:', primary);

Exemples de palettes personnalisées

Palette corporate

scss
// themes/corporate/_tokens.scss
$theme-corporate: (
  'primary-default': #003d82,    // Bleu corporate
  'primary-hover': #002a5c,
  'primary-text': #ffffff,
  
  'secondary-default': #f5f5f5,
  'secondary-text': #003d82,
  
  'text-primary': #1a1a1a,
  'text-secondary': #4a4a4a,
  
  'bg-canvas': #fafafa,
  'bg-surface': #ffffff,
);

Palette gaming

scss
// themes/gaming/_tokens.scss
$theme-gaming: (
  'primary-default': #ff0080,    // Rose néon
  'primary-hover': #cc0066,
  'primary-text': #000000,
  
  'secondary-default': #00ff9f,  // Vert néon
  'secondary-text': #000000,
  
  'text-primary': #ffffff,
  'text-secondary': #b3b3b3,
  
  'bg-canvas': #0a0a0f,         // Presque noir
  'bg-surface': #16161f,
);

FAQ

Puis-je ajouter mes propres couleurs ?

Oui ! Créez un thème personnalisé avec vos couleurs. Voir Créer un thème personnalisé.

Comment tester l'accessibilité des couleurs ?

Utilisez les outils DevTools et les extensions navigateur mentionnés ci-dessus. Testez également en mode contraste élevé.

Les couleurs changent automatiquement avec le thème ?

Oui, si vous utilisez les variables CSS (var(--su-*)). Les couleurs en dur ne s'adapteront pas.

Quelle différence entre primary-600 et primary-default ?

primary-600 est une couleur brute de la palette. primary-default est un token sémantique qui peut pointer vers n'importe quelle couleur selon le thème actif.

Ressources

Publié sous licence MIT.