Aller au contenu

Design System - ProbatioVault Site

Tokens CSS et composants du site vitrine


Palette de couleurs

Couleurs principales

Variable Valeur Usage
--color-bleu-profond #0A2342 Headers, branding
--color-bleu-securite #185ADB CTAs, liens, accents
--color-bleu-clair #E9F1FF Backgrounds doux
--color-graphite #111827 Titres, texte principal
--color-gris-neutre #4B5563 Texte paragraphes
--color-gris-clair #D1D5DB Bordures

Couleurs sémantiques

:root {
  --color-success: #10B981;
  --color-warning: #F59E0B;
  --color-error: #EF4444;
  --color-info: #3B82F6;
}

Typographie

Polices

Police Usage Poids
Inter Corps de texte 400, 500, 600, 700
Space Grotesk Titres 600, 700

Échelle typographique

:root {
  --font-size-xs: 0.75rem;    /* 12px */
  --font-size-sm: 0.875rem;   /* 14px */
  --font-size-base: 1rem;     /* 16px */
  --font-size-lg: 1.125rem;   /* 18px */
  --font-size-xl: 1.25rem;    /* 20px */
  --font-size-2xl: 1.5rem;    /* 24px */
  --font-size-3xl: 1.875rem;  /* 30px */
  --font-size-4xl: 2.25rem;   /* 36px */
  --font-size-5xl: 3rem;      /* 48px */
  --font-size-6xl: 3.75rem;   /* 60px */
}

Line heights

:root {
  --line-height-tight: 1.2;   /* Titres */
  --line-height-normal: 1.5;  /* Défaut */
  --line-height-relaxed: 1.6; /* Corps de texte */
  --line-height-loose: 2;     /* Espacement large */
}

Espacement

Échelle

:root {
  --space-xs: 0.5rem;   /* 8px */
  --space-sm: 1rem;     /* 16px */
  --space-md: 1.5rem;   /* 24px */
  --space-lg: 2rem;     /* 32px */
  --space-xl: 3rem;     /* 48px */
  --space-2xl: 4rem;    /* 64px */
  --space-3xl: 6rem;    /* 96px */
}

Sections

.section {
  padding: var(--space-3xl) 0;
}

.section-sm {
  padding: var(--space-xl) 0;
}

Border Radius

:root {
  --radius-sm: 6px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 16px;
  --radius-2xl: 24px;
  --radius-full: 9999px;
}

Ombres

:root {
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
  --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);
  --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1);
}

Transitions

:root {
  --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
  --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
  --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
}

Breakpoints

/* Mobile first */
@media (min-width: 640px) { /* sm */ }
@media (min-width: 768px) { /* md */ }
@media (min-width: 1024px) { /* lg */ }
@media (min-width: 1280px) { /* xl */ }

Container

.container {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 var(--space-sm);
}

Composants

Boutons

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: 12px 24px;
  font-weight: 600;
  border-radius: var(--radius-md);
  transition: var(--transition-base);
  cursor: pointer;
}

.btn-primary {
  background: var(--color-bleu-securite);
  color: white;
}

.btn-primary:hover {
  background: #1248B5;
}

.btn-secondary {
  background: transparent;
  border: 2px solid var(--color-bleu-securite);
  color: var(--color-bleu-securite);
}

.btn-large {
  min-height: 56px;
  padding: 16px 32px;
  font-size: var(--font-size-lg);
}

Cartes

.card {
  background: white;
  border-radius: var(--radius-lg);
  padding: var(--space-lg);
  box-shadow: var(--shadow-md);
  transition: var(--transition-base);
}

.card:hover {
  box-shadow: var(--shadow-lg);
  transform: translateY(-2px);
}

Formulaires

.input {
  width: 100%;
  min-height: 48px;
  padding: 12px 16px;
  border: 1px solid var(--color-gris-clair);
  border-radius: var(--radius-md);
  font-size: var(--font-size-base);
  transition: var(--transition-fast);
}

.input:focus {
  outline: none;
  border-color: var(--color-bleu-securite);
  box-shadow: 0 0 0 3px rgba(24, 90, 219, 0.1);
}

Accessibilité (WCAG 2.1 AA)

Touch targets

/* Minimum 48x48px pour tous les éléments cliquables */
button, a, input[type="checkbox"], input[type="radio"] {
  min-width: 48px;
  min-height: 48px;
}

Focus visible

:focus-visible {
  outline: 3px solid var(--color-bleu-securite);
  outline-offset: 2px;
}

Contrastes

Combinaison Ratio Conformité
Graphite sur blanc 15.5:1 AAA
Gris neutre sur blanc 7.5:1 AAA
Bleu sécurité sur blanc 5.2:1 AA
Blanc sur bleu profond 12.8:1 AAA

Taille minimum texte

/* Minimum 13px pour tout le texte */
body {
  font-size: max(1rem, 13px);
}

small, .text-sm {
  font-size: max(0.875rem, 13px);
}

Icônes

Le site utilise des emojis Unicode pour les icônes, évitant ainsi toute dépendance externe :

Emoji Usage
🔒 Sécurité, chiffrement
🇫🇷 Souveraineté française
Validation, succès
📄 Documents
⏱️ Horodatage
🔗 Blockchain
💼 Business, B2B
🏠 Personnel

Utilisation

Import dans les composants Astro

---
// Component.astro
---
<style>
  @import '../styles/design-system.css';

  .my-component {
    color: var(--color-graphite);
    padding: var(--space-md);
    border-radius: var(--radius-lg);
  }
</style>

Classes utilitaires

<div class="container">
  <section class="section">
    <h2 class="text-center">Titre</h2>
    <div class="grid grid-3">
      <div class="card">...</div>
      <div class="card">...</div>
      <div class="card">...</div>
    </div>
  </section>
</div>

← Retour INDEX