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);
}
.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