# Xpeditis Design System ## 📐 Charte Graphique Ce document définit la charte graphique officielle de Xpeditis pour assurer la cohérence visuelle de l'application. --- ## 🎨 Palette de Couleurs ### Couleurs Principales | Nom | Hex | RGB | Usage | |-----|-----|-----|-------| | **Navy Blue** | `#10183A` | `rgb(16, 24, 58)` | Couleur principale, headers, textes importants | | **Turquoise** | `#34CCCD` | `rgb(52, 204, 205)` | Couleur d'accent, CTAs, liens, highlights | | **Green** | `#067224` | `rgb(6, 114, 36)` | Success states, confirmations, statuts positifs | | **Light Gray** | `#F2F2F2` | `rgb(242, 242, 242)` | Backgrounds, sections, cards | | **White** | `#FFFFFF` | `rgb(255, 255, 255)` | Backgrounds principaux, texte sur foncé | ### Couleurs Sémantiques (Dérivées) ```css /* Success */ --color-success: #067224; --color-success-light: #08a131; --color-success-dark: #044f19; /* Info (Turquoise) */ --color-info: #34CCCD; --color-info-light: #5dd9da; --color-info-dark: #2a9fa0; /* Warning */ --color-warning: #f59e0b; --color-warning-light: #fbbf24; --color-warning-dark: #d97706; /* Error */ --color-error: #dc2626; --color-error-light: #ef4444; --color-error-dark: #b91c1c; /* Neutral (Navy Blue based) */ --color-neutral-900: #10183A; --color-neutral-800: #1e2859; --color-neutral-700: #2c3978; --color-neutral-600: #3a4a97; --color-neutral-500: #5a6bb8; --color-neutral-400: #8590c9; --color-neutral-300: #b0b6da; --color-neutral-200: #dadbeb; --color-neutral-100: #edeef5; --color-neutral-50: #f8f9fc; ``` --- ## 🔤 Typographie ### Polices Principales #### **Manrope** - Titres et Headers - **Usage**: Titres (H1-H6), labels importants, navigation - **Poids disponibles**: 200 (ExtraLight), 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold), 700 (Bold), 800 (ExtraBold) - **Caractéristiques**: Police moderne, géométrique, excellent lisibilité #### **Montserrat** - Corps de texte - **Usage**: Paragraphes, corps de texte, descriptions, formulaires - **Poids disponibles**: 100 (Thin), 200 (ExtraLight), 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold), 700 (Bold), 800 (ExtraBold), 900 (Black) - **Caractéristiques**: Police sans-serif classique, très lisible, polyvalente ### Hiérarchie Typographique ```css /* Display - Manrope */ .text-display-lg { font-family: 'Manrope', sans-serif; font-size: 4.5rem; /* 72px */ font-weight: 800; line-height: 1.1; letter-spacing: -0.02em; } .text-display-md { font-family: 'Manrope', sans-serif; font-size: 3.75rem; /* 60px */ font-weight: 700; line-height: 1.15; letter-spacing: -0.02em; } .text-display-sm { font-family: 'Manrope', sans-serif; font-size: 3rem; /* 48px */ font-weight: 700; line-height: 1.2; letter-spacing: -0.01em; } /* Headings - Manrope */ .text-h1 { font-family: 'Manrope', sans-serif; font-size: 2.5rem; /* 40px */ font-weight: 700; line-height: 1.25; } .text-h2 { font-family: 'Manrope', sans-serif; font-size: 2rem; /* 32px */ font-weight: 600; line-height: 1.3; } .text-h3 { font-family: 'Manrope', sans-serif; font-size: 1.5rem; /* 24px */ font-weight: 600; line-height: 1.35; } .text-h4 { font-family: 'Manrope', sans-serif; font-size: 1.25rem; /* 20px */ font-weight: 600; line-height: 1.4; } .text-h5 { font-family: 'Manrope', sans-serif; font-size: 1.125rem; /* 18px */ font-weight: 500; line-height: 1.45; } .text-h6 { font-family: 'Manrope', sans-serif; font-size: 1rem; /* 16px */ font-weight: 500; line-height: 1.5; } /* Body - Montserrat */ .text-body-lg { font-family: 'Montserrat', sans-serif; font-size: 1.125rem; /* 18px */ font-weight: 400; line-height: 1.6; } .text-body { font-family: 'Montserrat', sans-serif; font-size: 1rem; /* 16px */ font-weight: 400; line-height: 1.6; } .text-body-sm { font-family: 'Montserrat', sans-serif; font-size: 0.875rem; /* 14px */ font-weight: 400; line-height: 1.55; } .text-body-xs { font-family: 'Montserrat', sans-serif; font-size: 0.75rem; /* 12px */ font-weight: 400; line-height: 1.5; } /* Labels and UI - Montserrat */ .text-label-lg { font-family: 'Montserrat', sans-serif; font-size: 0.875rem; /* 14px */ font-weight: 600; line-height: 1.4; text-transform: uppercase; letter-spacing: 0.05em; } .text-label { font-family: 'Montserrat', sans-serif; font-size: 0.75rem; /* 12px */ font-weight: 600; line-height: 1.4; text-transform: uppercase; letter-spacing: 0.05em; } .text-label-sm { font-family: 'Montserrat', sans-serif; font-size: 0.6875rem; /* 11px */ font-weight: 600; line-height: 1.4; text-transform: uppercase; letter-spacing: 0.05em; } ``` --- ## 🎯 Guidelines d'Utilisation ### Couleurs #### Navy Blue (#10183A) ✅ **À utiliser pour:** - Headers et navigation principale - Titres importants (H1, H2) - Texte sur fond clair - Éléments de structure principale ❌ **À éviter:** - Texte de petite taille (< 14px) - Arrière-plans étendus (trop sombre) #### Turquoise (#34CCCD) ✅ **À utiliser pour:** - Boutons CTA principaux - Liens et éléments interactifs - Highlights et badges - Icônes d'action - Progress indicators ❌ **À éviter:** - Texte long (fatigue visuelle) - Messages d'erreur ou d'alerte #### Green (#067224) ✅ **À utiliser pour:** - Confirmations et success states - Statuts "Confirmed", "Delivered" - Badges de statut positif - Icônes de validation ❌ **À éviter:** - Éléments neutres - CTAs principaux (réservé à turquoise) #### Light Gray (#F2F2F2) ✅ **À utiliser pour:** - Backgrounds de sections - Cards et containers - Séparateurs subtils - Inputs désactivés ❌ **À éviter:** - Texte principal - Éléments nécessitant contraste élevé ### Typographie #### Quand utiliser Manrope - **Tous les titres** (H1-H6) - **Navigation** (menu items) - **Boutons** (button labels) - **Table headers** - **Dashboard KPI numbers** - **Logos et branding** #### Quand utiliser Montserrat - **Tout le corps de texte** - **Descriptions** - **Labels de formulaires** - **Messages d'aide** - **Placeholders** - **Table body content** - **Tooltips** --- ## 📦 Intégration dans le Projet ### 1. Tailwind CSS Configuration Modifier [tailwind.config.ts](tailwind.config.ts): ```typescript import type { Config } from 'tailwindcss'; const config: Config = { content: [ './src/pages/**/*.{js,ts,jsx,tsx,mdx}', './src/components/**/*.{js,ts,jsx,tsx,mdx}', './src/app/**/*.{js,ts,jsx,tsx,mdx}', ], theme: { extend: { colors: { // Primary colors primary: { DEFAULT: '#10183A', navy: '#10183A', }, accent: { DEFAULT: '#34CCCD', turquoise: '#34CCCD', }, success: { DEFAULT: '#067224', light: '#08a131', dark: '#044f19', }, // Neutral scale (Navy-based) neutral: { 50: '#f8f9fc', 100: '#edeef5', 200: '#dadbeb', 300: '#b0b6da', 400: '#8590c9', 500: '#5a6bb8', 600: '#3a4a97', 700: '#2c3978', 800: '#1e2859', 900: '#10183A', }, background: { DEFAULT: '#FFFFFF', secondary: '#F2F2F2', }, }, fontFamily: { manrope: ['Manrope', 'sans-serif'], montserrat: ['Montserrat', 'sans-serif'], // Aliases for semantic usage heading: ['Manrope', 'sans-serif'], body: ['Montserrat', 'sans-serif'], }, fontSize: { // Display sizes 'display-lg': ['4.5rem', { lineHeight: '1.1', letterSpacing: '-0.02em', fontWeight: '800' }], 'display-md': ['3.75rem', { lineHeight: '1.15', letterSpacing: '-0.02em', fontWeight: '700' }], 'display-sm': ['3rem', { lineHeight: '1.2', letterSpacing: '-0.01em', fontWeight: '700' }], // Heading sizes 'h1': ['2.5rem', { lineHeight: '1.25', fontWeight: '700' }], 'h2': ['2rem', { lineHeight: '1.3', fontWeight: '600' }], 'h3': ['1.5rem', { lineHeight: '1.35', fontWeight: '600' }], 'h4': ['1.25rem', { lineHeight: '1.4', fontWeight: '600' }], 'h5': ['1.125rem', { lineHeight: '1.45', fontWeight: '500' }], 'h6': ['1rem', { lineHeight: '1.5', fontWeight: '500' }], // Body sizes 'body-lg': ['1.125rem', { lineHeight: '1.6', fontWeight: '400' }], 'body': ['1rem', { lineHeight: '1.6', fontWeight: '400' }], 'body-sm': ['0.875rem', { lineHeight: '1.55', fontWeight: '400' }], 'body-xs': ['0.75rem', { lineHeight: '1.5', fontWeight: '400' }], // Label sizes 'label-lg': ['0.875rem', { lineHeight: '1.4', fontWeight: '600', letterSpacing: '0.05em' }], 'label': ['0.75rem', { lineHeight: '1.4', fontWeight: '600', letterSpacing: '0.05em' }], 'label-sm': ['0.6875rem', { lineHeight: '1.4', fontWeight: '600', letterSpacing: '0.05em' }], }, }, }, plugins: [], }; export default config; ``` ### 2. Google Fonts Integration Modifier [app/layout.tsx](app/layout.tsx): ```typescript import { Manrope, Montserrat } from 'next/font/google'; const manrope = Manrope({ subsets: ['latin'], weight: ['200', '300', '400', '500', '600', '700', '800'], variable: '--font-manrope', display: 'swap', }); const montserrat = Montserrat({ subsets: ['latin'], weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900'], variable: '--font-montserrat', display: 'swap', }); export default function RootLayout({ children, }: { children: React.ReactNode; }) { return ( {children} ); } ``` ### 3. Global CSS (app/globals.css) ```css @tailwind base; @tailwind components; @tailwind utilities; @layer base { /* Set default font to Montserrat */ body { @apply font-montserrat; } /* Apply Manrope to all headings */ h1, h2, h3, h4, h5, h6 { @apply font-manrope; } h1 { @apply text-h1 text-primary-navy; } h2 { @apply text-h2 text-primary-navy; } h3 { @apply text-h3 text-neutral-800; } h4 { @apply text-h4 text-neutral-800; } h5 { @apply text-h5 text-neutral-700; } h6 { @apply text-h6 text-neutral-700; } } @layer components { /* Button styles */ .btn-primary { @apply bg-accent-turquoise text-white font-manrope font-semibold px-6 py-3 rounded-lg hover:bg-accent-turquoise/90 transition-colors; } .btn-secondary { @apply bg-primary-navy text-white font-manrope font-semibold px-6 py-3 rounded-lg hover:bg-neutral-800 transition-colors; } .btn-success { @apply bg-success text-white font-manrope font-semibold px-6 py-3 rounded-lg hover:bg-success-dark transition-colors; } /* Card styles */ .card { @apply bg-white rounded-lg shadow-md p-6; } .card-header { @apply font-manrope font-semibold text-h4 text-primary-navy mb-4; } /* Badge styles */ .badge { @apply inline-flex items-center px-3 py-1 rounded-full text-label font-montserrat; } .badge-success { @apply badge bg-success/10 text-success; } .badge-info { @apply badge bg-accent-turquoise/10 text-accent-turquoise; } /* Link styles */ .link { @apply text-accent-turquoise hover:text-accent-turquoise/80 transition-colors underline-offset-2 hover:underline; } } ``` --- ## 🎨 Exemples d'Utilisation ### Exemple 1: Header Component ```tsx export function Header() { return (

Xpeditis

); } ``` ### Exemple 2: Card with Typography ```tsx export function BookingCard() { return (

Booking Details

WCM-2024-ABC123

CONFIRMED

Maritime freight from Le Havre to Shanghai. Container type: 20FT.

); } ``` ### Exemple 3: Hero Section ```tsx export function Hero() { return (

Maritime Freight Made Simple

Book, track, and manage your LCL shipments with real-time rates from the world's leading shipping lines.

); } ``` --- ## 📊 Accessibilité ### Contraste des Couleurs (WCAG AA Compliance) | Combinaison | Ratio | Conforme | |-------------|-------|----------| | Navy (#10183A) sur White (#FFFFFF) | 14.2:1 | ✅ AAA | | Turquoise (#34CCCD) sur White (#FFFFFF) | 2.8:1 | ⚠️ AA Large | | Turquoise (#34CCCD) sur Navy (#10183A) | 5.1:1 | ✅ AA | | Green (#067224) sur White (#FFFFFF) | 6.8:1 | ✅ AA | | Navy (#10183A) sur Light Gray (#F2F2F2) | 13.5:1 | ✅ AAA | **Recommandations:** - Utiliser Turquoise uniquement pour les éléments interactifs (boutons, liens) ou texte large (≥18px) - Préférer Navy Blue pour le texte principal - Éviter Green pour le texte de petite taille sur fond blanc ### Taille Minimale des Polices - **Texte principal**: 16px (1rem) minimum - **Texte secondaire**: 14px (0.875rem) minimum - **Labels/Captions**: 12px (0.75rem) minimum --- ## 🚀 Checklist d'Implémentation - [ ] Installer les polices Google Fonts (Manrope + Montserrat) - [ ] Configurer Tailwind avec les couleurs custom - [ ] Configurer Tailwind avec les font families - [ ] Ajouter les classes CSS globales - [ ] Créer des composants Button avec les styles - [ ] Créer des composants Card avec les styles - [ ] Créer des composants Badge avec les styles - [ ] Tester l'accessibilité des contrastes - [ ] Documenter les composants dans Storybook (optionnel) --- ## 📚 Ressources - [Manrope sur Google Fonts](https://fonts.google.com/specimen/Manrope) - [Montserrat sur Google Fonts](https://fonts.google.com/specimen/Montserrat) - [Tailwind CSS Documentation](https://tailwindcss.com/docs) - [WCAG Contrast Checker](https://webaim.org/resources/contrastchecker/)