577 lines
12 KiB
CSS
577 lines
12 KiB
CSS
/**
|
|
* NOTYTEX DESIGN SYSTEM
|
|
* Système de design unifié pour l'application
|
|
*/
|
|
|
|
/* ========================================
|
|
DESIGN TOKENS
|
|
======================================== */
|
|
|
|
:root {
|
|
/* Couleurs primaires */
|
|
--color-primary-50: #eff6ff;
|
|
--color-primary-100: #dbeafe;
|
|
--color-primary-500: #3b82f6;
|
|
--color-primary-600: #2563eb;
|
|
--color-primary-700: #1d4ed8;
|
|
--color-primary-800: #1e40af;
|
|
|
|
/* Couleurs fonctionnelles */
|
|
--color-success-50: #ecfdf5;
|
|
--color-success-100: #d1fae5;
|
|
--color-success-500: #10b981;
|
|
--color-success-600: #059669;
|
|
--color-success-700: #047857;
|
|
|
|
--color-warning-50: #fffbeb;
|
|
--color-warning-100: #fef3c7;
|
|
--color-warning-500: #f59e0b;
|
|
--color-warning-600: #d97706;
|
|
--color-warning-700: #b45309;
|
|
|
|
--color-danger-50: #fef2f2;
|
|
--color-danger-100: #fee2e2;
|
|
--color-danger-500: #ef4444;
|
|
--color-danger-600: #dc2626;
|
|
--color-danger-700: #b91c1c;
|
|
|
|
/* Couleurs neutres */
|
|
--color-gray-50: #f9fafb;
|
|
--color-gray-100: #f3f4f6;
|
|
--color-gray-200: #e5e7eb;
|
|
--color-gray-300: #d1d5db;
|
|
--color-gray-400: #9ca3af;
|
|
--color-gray-500: #6b7280;
|
|
--color-gray-600: #4b5563;
|
|
--color-gray-700: #374151;
|
|
--color-gray-800: #1f2937;
|
|
--color-gray-900: #111827;
|
|
|
|
/* Gradients standardisés */
|
|
--gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
--gradient-secondary: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
|
--gradient-success: linear-gradient(135deg, #11998e 0%, #38ef7d 100%);
|
|
--gradient-warning: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%);
|
|
--gradient-purple-blue: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
--gradient-green: linear-gradient(135deg, #11998e 0%, #38ef7d 100%);
|
|
--gradient-blue: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
|
|
|
|
/* Espacements */
|
|
--space-xs: 0.25rem; /* 4px */
|
|
--space-sm: 0.5rem; /* 8px */
|
|
--space-md: 1rem; /* 16px */
|
|
--space-lg: 1.5rem; /* 24px */
|
|
--space-xl: 2rem; /* 32px */
|
|
--space-2xl: 3rem; /* 48px */
|
|
|
|
/* Tailles de police */
|
|
--text-xs: 0.75rem; /* 12px */
|
|
--text-sm: 0.875rem; /* 14px */
|
|
--text-base: 1rem; /* 16px */
|
|
--text-lg: 1.125rem; /* 18px */
|
|
--text-xl: 1.25rem; /* 20px */
|
|
--text-2xl: 1.5rem; /* 24px */
|
|
--text-3xl: 1.875rem; /* 30px */
|
|
--text-4xl: 2.25rem; /* 36px */
|
|
|
|
/* Rayons de bordure */
|
|
--radius-sm: 0.125rem; /* 2px */
|
|
--radius-md: 0.375rem; /* 6px */
|
|
--radius-lg: 0.5rem; /* 8px */
|
|
--radius-xl: 0.75rem; /* 12px */
|
|
--radius-2xl: 1rem; /* 16px */
|
|
--radius-full: 9999px;
|
|
|
|
/* Ombres */
|
|
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
|
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
|
|
/* Transitions */
|
|
--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
--transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
--transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
}
|
|
|
|
/* ========================================
|
|
CLASSES UTILITAIRES PERSONNALISÉES
|
|
======================================== */
|
|
|
|
/* Focus visible amélioré */
|
|
.focus-ring {
|
|
@apply focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500;
|
|
}
|
|
|
|
/* Layout utilitaires uniformes */
|
|
.container-responsive {
|
|
@apply max-w-7xl mx-auto px-4 py-8;
|
|
}
|
|
|
|
.container-narrow {
|
|
@apply max-w-4xl mx-auto px-4 py-6;
|
|
}
|
|
|
|
.container-wide {
|
|
@apply max-w-full mx-auto px-6 py-8;
|
|
}
|
|
|
|
/* Spacing système unifié */
|
|
.space-section {
|
|
@apply space-y-8;
|
|
}
|
|
|
|
.space-elements {
|
|
@apply space-y-6;
|
|
}
|
|
|
|
.space-items {
|
|
@apply space-y-4;
|
|
}
|
|
|
|
.space-tight {
|
|
@apply space-y-3;
|
|
}
|
|
|
|
.space-compact {
|
|
@apply space-y-2;
|
|
}
|
|
|
|
/* Tailles de texte système */
|
|
.text-display {
|
|
@apply text-4xl font-bold leading-tight;
|
|
}
|
|
|
|
.text-heading {
|
|
@apply text-2xl font-bold leading-snug;
|
|
}
|
|
|
|
.text-subheading {
|
|
@apply text-xl font-semibold leading-normal;
|
|
}
|
|
|
|
.text-body {
|
|
@apply text-base leading-relaxed;
|
|
}
|
|
|
|
.text-caption {
|
|
@apply text-sm text-gray-600 leading-normal;
|
|
}
|
|
|
|
.text-micro {
|
|
@apply text-xs text-gray-500 leading-tight;
|
|
}
|
|
|
|
/* Gradients réutilisables */
|
|
.bg-gradient-primary {
|
|
background: var(--gradient-primary);
|
|
}
|
|
|
|
.bg-gradient-success {
|
|
background: var(--gradient-success);
|
|
}
|
|
|
|
.bg-gradient-purple-blue {
|
|
background: var(--gradient-purple-blue);
|
|
}
|
|
|
|
/* Animation hover pour les cartes */
|
|
.card-hover {
|
|
@apply transition-all duration-300 hover:shadow-xl hover:scale-105;
|
|
}
|
|
|
|
/* Boutons avec styles cohérents */
|
|
.btn-base {
|
|
@apply inline-flex items-center justify-center font-semibold rounded-xl transition-all duration-300 focus-ring;
|
|
}
|
|
|
|
.btn-sm {
|
|
@apply btn-base px-3 py-2 text-sm;
|
|
}
|
|
|
|
.btn-md {
|
|
@apply btn-base px-4 py-2 text-base;
|
|
}
|
|
|
|
.btn-lg {
|
|
@apply btn-base px-6 py-3 text-lg;
|
|
}
|
|
|
|
.btn-primary {
|
|
@apply btn-base bg-blue-600 text-white hover:bg-blue-700;
|
|
}
|
|
|
|
.btn-success {
|
|
@apply btn-base bg-green-600 text-white hover:bg-green-700;
|
|
}
|
|
|
|
.btn-warning {
|
|
@apply btn-base bg-orange-600 text-white hover:bg-orange-700;
|
|
}
|
|
|
|
.btn-danger {
|
|
@apply btn-base bg-red-600 text-white hover:bg-red-700;
|
|
}
|
|
|
|
.btn-outline {
|
|
@apply btn-base bg-transparent border-2 border-gray-300 text-gray-700 hover:bg-gray-50;
|
|
}
|
|
|
|
/* États de progression standardisés */
|
|
.progress-not-started {
|
|
@apply bg-red-100 text-red-800 border border-red-200;
|
|
}
|
|
|
|
.progress-in-progress {
|
|
@apply bg-orange-100 text-orange-800 border border-orange-200;
|
|
}
|
|
|
|
.progress-completed {
|
|
@apply bg-green-100 text-green-800 border border-green-200;
|
|
}
|
|
|
|
/* Indicateurs visuels */
|
|
.indicator-badge {
|
|
@apply inline-flex items-center px-2 py-1 rounded-full text-xs font-medium;
|
|
}
|
|
|
|
/* ========================================
|
|
COMPOSANTS SPÉCIALISÉS
|
|
======================================== */
|
|
|
|
/* Hero sections */
|
|
.hero-section {
|
|
@apply bg-gradient-to-r text-white rounded-xl p-8 shadow-lg;
|
|
}
|
|
|
|
/* Cards uniformes */
|
|
.card {
|
|
@apply bg-white rounded-xl shadow-lg overflow-hidden;
|
|
}
|
|
|
|
.card-header {
|
|
@apply px-6 py-4 border-b border-gray-200 flex items-center justify-between;
|
|
}
|
|
|
|
.card-body {
|
|
@apply p-6;
|
|
}
|
|
|
|
.card-footer {
|
|
@apply px-6 py-4 border-t border-gray-200 bg-gray-50;
|
|
}
|
|
|
|
/* Grilles de statistiques */
|
|
.stats-grid {
|
|
@apply grid grid-cols-1 md:grid-cols-3 gap-6;
|
|
}
|
|
|
|
.stat-card {
|
|
@apply block bg-white rounded-lg shadow hover:shadow-lg transition-all duration-300 p-6 transform hover:scale-105 group;
|
|
}
|
|
|
|
/* Grilles système uniformes */
|
|
.grid-responsive {
|
|
@apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6;
|
|
}
|
|
|
|
.grid-actions {
|
|
@apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4;
|
|
}
|
|
|
|
.grid-cards {
|
|
@apply grid grid-cols-1 lg:grid-cols-2 gap-6;
|
|
}
|
|
|
|
.grid-list {
|
|
@apply grid grid-cols-1 gap-4;
|
|
}
|
|
|
|
/* Layouts de page standardisés */
|
|
.page-layout {
|
|
@apply min-h-screen bg-gray-100;
|
|
}
|
|
|
|
.page-content {
|
|
@apply container-responsive space-section;
|
|
}
|
|
|
|
.page-section {
|
|
@apply bg-white rounded-xl shadow-lg overflow-hidden;
|
|
}
|
|
|
|
.page-header {
|
|
@apply px-6 py-4 border-b border-gray-200 flex items-center justify-between;
|
|
}
|
|
|
|
.page-body {
|
|
@apply p-6;
|
|
}
|
|
|
|
.page-footer {
|
|
@apply px-6 py-4 border-t border-gray-200 bg-gray-50;
|
|
}
|
|
|
|
/* Filtres */
|
|
.filter-section {
|
|
@apply bg-white rounded-lg shadow p-6;
|
|
}
|
|
|
|
.filter-control {
|
|
@apply border border-gray-300 rounded-md px-3 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-transparent;
|
|
}
|
|
|
|
/* Actions grids */
|
|
.action-grid {
|
|
@apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4;
|
|
}
|
|
|
|
.action-card {
|
|
@apply group rounded-xl p-6 transition-all duration-300 transform hover:scale-105 shadow-lg hover:shadow-xl text-white;
|
|
}
|
|
|
|
/* ========================================
|
|
ANIMATIONS ET EFFETS
|
|
======================================== */
|
|
|
|
/* Animations d'apparition standardisées */
|
|
@keyframes fadeInUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes fadeInLeft {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(-20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes fadeInRight {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes scaleIn {
|
|
from {
|
|
opacity: 0;
|
|
transform: scale(0.9);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
/* Classes d'animation standardisées */
|
|
.fade-in-up {
|
|
animation: fadeInUp 0.5s ease-out;
|
|
}
|
|
|
|
.fade-in-left {
|
|
animation: fadeInLeft 0.4s ease-out;
|
|
}
|
|
|
|
.fade-in-right {
|
|
animation: fadeInRight 0.4s ease-out;
|
|
}
|
|
|
|
.scale-in {
|
|
animation: scaleIn 0.3s ease-out;
|
|
}
|
|
|
|
/* Animations au scroll */
|
|
.animate-on-scroll {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
transition: all 0.6s ease-out;
|
|
}
|
|
|
|
.animate-on-scroll.in-view {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
|
|
/* Micro-interactions */
|
|
.hover-lift {
|
|
transition: all var(--transition-normal);
|
|
}
|
|
|
|
.hover-lift:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
|
|
.hover-scale {
|
|
transition: transform var(--transition-normal);
|
|
}
|
|
|
|
.hover-scale:hover {
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
/* Animation des messages flash */
|
|
@keyframes slideDown {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(-10px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
.flash-message {
|
|
animation: slideDown 0.3s ease-out;
|
|
}
|
|
|
|
/* Effet de pulsation pour les éléments en attente */
|
|
@keyframes pulse {
|
|
0%, 100% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0.7;
|
|
}
|
|
}
|
|
|
|
.pulse-animation {
|
|
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
|
}
|
|
|
|
/* Rotation pour les indicateurs de chargement */
|
|
@keyframes spin {
|
|
from {
|
|
transform: rotate(0deg);
|
|
}
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
.spin-animation {
|
|
animation: spin 1s linear infinite;
|
|
}
|
|
|
|
/* ========================================
|
|
RESPONSIVE DESIGN
|
|
======================================== */
|
|
|
|
/* Masquer/afficher selon la taille d'écran */
|
|
@media (max-width: 768px) {
|
|
.hide-mobile {
|
|
display: none;
|
|
}
|
|
|
|
.show-mobile {
|
|
display: block;
|
|
}
|
|
|
|
/* Ajustements pour mobile */
|
|
.hero-section {
|
|
@apply p-6;
|
|
}
|
|
|
|
.hero-section h1 {
|
|
@apply text-2xl;
|
|
}
|
|
|
|
.action-grid {
|
|
@apply grid-cols-1 gap-3;
|
|
}
|
|
|
|
.stats-grid {
|
|
@apply grid-cols-1 gap-4;
|
|
}
|
|
}
|
|
|
|
@media (min-width: 769px) {
|
|
.hide-desktop {
|
|
display: none;
|
|
}
|
|
|
|
.show-desktop {
|
|
display: block;
|
|
}
|
|
}
|
|
|
|
/* ========================================
|
|
ACCESSIBILITÉ
|
|
======================================== */
|
|
|
|
/* Skip links */
|
|
.skip-link {
|
|
position: absolute;
|
|
top: -40px;
|
|
left: 6px;
|
|
background: var(--color-gray-900);
|
|
color: white;
|
|
padding: 8px;
|
|
text-decoration: none;
|
|
z-index: 1000;
|
|
border-radius: var(--radius-md);
|
|
}
|
|
|
|
.skip-link:focus {
|
|
top: 6px;
|
|
}
|
|
|
|
/* Contraste élevé */
|
|
@media (prefers-contrast: high) {
|
|
:root {
|
|
--color-gray-600: #000000;
|
|
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.card {
|
|
@apply border-2 border-gray-800;
|
|
}
|
|
}
|
|
|
|
/* Réduction de mouvement */
|
|
@media (prefers-reduced-motion: reduce) {
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
animation-duration: 0.01ms !important;
|
|
animation-iteration-count: 1 !important;
|
|
transition-duration: 0.01ms !important;
|
|
}
|
|
}
|
|
|
|
/* Focus visible pour la navigation au clavier */
|
|
.focus-visible {
|
|
outline: 2px solid var(--color-primary-500);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
/* ========================================
|
|
DARK MODE (préparation future)
|
|
======================================== */
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
:root {
|
|
--color-gray-50: #1f2937;
|
|
--color-gray-100: #374151;
|
|
--color-gray-900: #f9fafb;
|
|
}
|
|
|
|
/* Note: Le dark mode sera implémenté dans une future phase */
|
|
} |