@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap'); :root { --background: 0 0% 100%; --foreground: 222.2 84% 4.9%; --card: 0 0% 100%; --card-foreground: 222.2 84% 4.9%; --popover: 0 0% 100%; --popover-foreground: 222.2 84% 4.9%; --primary: 222.2 47.4% 11.2%; --primary-foreground: 210 40% 98%; --secondary: 210 40% 96.1%; --secondary-foreground: 222.2 47.4% 11.2%; --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; --accent: 210 40% 96.1%; --accent-foreground: 222.2 47.4% 11.2%; --destructive: 0 84.2% 60.2%; --destructive-foreground: 210 40% 98%; --border: 214.3 31.8% 91.4%; --input: 214.3 31.8% 91.4%; --ring: 222.2 84% 4.9%; --radius: 0.5rem; } .dark { --background: 222.2 84% 4.9%; --foreground: 210 40% 98%; --card: 222.2 84% 4.9%; --card-foreground: 210 40% 98%; --popover: 222.2 84% 4.9%; --popover-foreground: 210 40% 98%; --primary: 210 40% 98%; --primary-foreground: 222.2 47.4% 11.2%; --secondary: 217.2 32.6% 17.5%; --secondary-foreground: 210 40% 98%; --muted: 217.2 32.6% 17.5%; --muted-foreground: 215 20.2% 65.1%; --accent: 217.2 32.6% 17.5%; --accent-foreground: 210 40% 98%; --destructive: 0 62.8% 30.6%; --destructive-foreground: 210 40% 98%; --border: 217.2 32.6% 17.5%; --input: 217.2 32.6% 17.5%; --ring: 212.7 26.8% 83.9%; } body { font-family: 'Inter', sans-serif; background-color: hsl(var(--background)); color: hsl(var(--foreground)); transition: background-color 0.3s ease, color 0.3s ease; } .animate { animation: fadeIn 0.5s ease-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .container { max-width: 960px; margin: 0 auto; padding: 2rem; } .form-container { background-color: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: var(--radius); padding: 2rem; transition: all 0.3s ease; } .form-group { margin-bottom: 1rem; position: relative; } .form-control { width: 100%; padding: 0.75rem; border: 1px solid hsl(var(--border)); border-radius: var(--radius); background-color: hsl(var(--background)); color: hsl(var(--foreground)); transition: border-color 0.3s ease, box-shadow 0.3s ease; } .form-control:focus { outline: none; border-color: hsl(var(--ring)); box-shadow: 0 0 0 2px hsla(var(--ring), 0.2); } .btn { position: relative; display: inline-flex; align-items: center; justify-content: center; border-radius: var(--radius); font-weight: 500; transition: all 0.3s ease; cursor: pointer; padding: 0.75rem 1.5rem; overflow: hidden; } .btn:active { transform: scale(0.98); } .btn-primary { background-color: hsl(var(--primary)); color: hsl(var(--primary-foreground)); } .btn-primary:hover { opacity: 0.9; transform: translateY(-1px); } .btn-secondary { background-color: hsl(var(--secondary)); color: hsl(var(--secondary-foreground)); } .btn-secondary:hover { opacity: 0.9; } /* Animations de succès/échec */ @keyframes successShake { 0%, 100% { transform: translateX(0); background-color: #10B981; } 25% { transform: translateX(-2px); } 75% { transform: translateX(2px); } } @keyframes failShake { 0%, 100% { transform: translateX(0); background-color: #EF4444; } 20%, 60% { transform: translateX(-4px); } 40%, 80% { transform: translateX(4px); } } .success-animation { animation: successShake 0.5s ease; background-color: #10B981 !important; } .fail-animation { animation: failShake 0.5s ease; background-color: #EF4444 !important; } /* Points de chargement */ .loading-dots span { display: inline-block; animation: loadingDots 1.4s infinite; opacity: 0; margin-left: 2px; } .loading-dots span:nth-child(2) { animation-delay: 0.2s; } .loading-dots span:nth-child(3) { animation-delay: 0.4s; } @keyframes loadingDots { 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } } /* Écran de succès */ .success-circle { width: 80px; height: 80px; background: #10B981; border-radius: 50%; margin: 0 auto; display: flex; align-items: center; justify-content: center; color: white; animation: scaleIn 0.5s ease; } .animate-success { animation: fadeInUp 0.5s ease; } .loading-bar { height: 4px; width: 100%; background-color: hsl(var(--secondary)); border-radius: 2px; overflow: hidden; position: relative; margin-top: 1.5rem; } .loading-bar::after { content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 40%; background-color: #10B981; animation: loadingBar 1.5s infinite ease-in-out; border-radius: 2px; } @keyframes loadingBar { 0% { left: -40%; } 100% { left: 100%; } } @keyframes scaleIn { from { transform: scale(0); opacity: 0; } to { transform: scale(1); opacity: 1; } } @keyframes fadeInUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } @keyframes ripple { from { transform: translate(-50%, -50%) scale(0); opacity: 1; } to { transform: translate(-50%, -50%) scale(4); opacity: 0; } } /* Utilitaires */ .icon-spacing { margin-right: 0.5rem; } /* Thème switcher */ #authlogin-theme-switch { position: fixed; top: 1rem; right: 1rem; padding: 0.5rem; border-radius: 50%; background-color: hsl(var(--card)); border: 1px solid hsl(var(--border)); transition: transform 0.3s ease; z-index: 100; } #authlogin-theme-switch:hover { transform: rotate(30deg); } /* Classes additionnelles pour les textes */ .text-muted-foreground { color: hsl(var(--muted-foreground)); } h1 { transition: all 0.3s ease-in-out; }