* { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Roboto, system-ui, sans-serif; } body { background: linear-gradient(145deg, #f5f7fa 0%, #e9edf5 100%); min-height: 100vh; display: flex; flex-direction: column; align-items: stretch; /* ← CORRECTION ICI */ margin: 0; } /* ---------- BARRE HORIZONTALE TOUT EN HAUT ---------- */ .top-header-bar { width: 100%; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); border-bottom: 1px solid #eef2ff; position: sticky; top: 0; z-index: 100; backdrop-filter: blur(8px); background: rgba(255, 255, 255, 0.96); /* ← une seule déclaration */ } .top-bar-container { max-width: 1280px; margin: 0 auto; padding: 0.9rem 2rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem; } /* Section langue statique (sans JS) */ .static-lang { background: #f1f4f9; padding: 0.5rem 1.3rem; border-radius: 3rem; font-weight: 600; font-size: 0.9rem; color: #1e293b; display: inline-flex; align-items: center; gap: 0.6rem; letter-spacing: 0.2px; } .static-lang a { text-decoration: none; font-size: 23px; margin-right: 20px; } .main-alert { max-width: 1200px; width: 100%; padding: 2rem 0rem 0rem; align-self: center; /* Hauteur fixe pour réserver l’espace, même vide */ min-height: 90px; /* Ajustez selon la hauteur réelle de votre alerte */ } /* Quand l’alerte est absente ou vide, on cache son contenu mais on garde l’espace */ .main-alert:empty { visibility: hidden; /* optionnel : pour masquer complètement tout contenu fantôme */ } /* Conteneur principal (centré, avec marge supérieure) */ .main-container { max-width: 1200px; width: 100%; background: #ffffff; box-shadow: 0 25px 50px -10px rgba(0, 0, 0, 0.15); border-radius: 2.5rem; padding: 2rem 2rem 2.5rem; margin: 1rem 1rem; border: 1px solid rgba(255, 255, 255, 0.5); transition: all 0.2s ease; align-self: center; } .logo-area { display: flex; align-items: center; justify-content: center; gap: 0.5rem; margin-bottom: 1.5rem; } .logo-icon { font-size: 2.8rem; color: #ef4444; filter: drop-shadow(0 4px 6px rgba(239, 68, 68, 0.3)); } .logo-text { font-size: 2rem; font-weight: 700; background: linear-gradient(135deg, #1e293b, #4f46e5); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .url-section { background: #f8fafc; border-radius: 2rem; padding: 1.5rem; margin: 1.8rem 0 1.5rem; } .url-input-area { display: flex; flex-direction: column; gap: 0.8rem; } textarea { width: 100%; border: 1px solid #e2e8f0; border-radius: 1.2rem; padding: 1rem; font-size: 0.95rem; resize: vertical; min-height: 90px; background: white; outline: none; transition: 0.2s; } textarea:focus { border-color: #4f46e5; box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2); } .format-row { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; margin-top: 0.5rem; } select { padding: 0.7rem 1.2rem; border-radius: 2rem; border: 1px solid #d1d5db; background: white; font-weight: 500; cursor: pointer; outline: none; min-width: 180px; } .process-btn { background: #0f172a; border: none; color: white; font-weight: 700; padding: 0.8rem 2.2rem; border-radius: 3rem; font-size: 1rem; letter-spacing: 0.3px; display: flex; align-items: center; gap: 0.5rem; cursor: pointer; transition: 0.25s; box-shadow: 0 10px 20px -8px rgba(15, 23, 42, 0.4); margin-left: auto; } .process-btn:hover { background: #1e293b; transform: scale(1.02); } .process-btn:disabled { opacity: 0.7; cursor: not-allowed; } .user-avatar { width: 42px; height: 42px; border-radius: 50%; object-fit: cover; border: 2px solid #dee2e6; } .username { font-weight: 600; color: #333; } .video-list { margin-top: 2rem; display: flex; flex-direction: column; gap: 1rem; max-height: 400px; overflow-y: auto; padding-right: 0.3rem; } .video-item { background: white; border-radius: 1.2rem; padding: 1rem 1.2rem; box-shadow: 0 6px 18px rgba(0, 0, 0, 0.04); border: 1px solid #edf2f7; display: flex; flex-direction: column; gap: 0.6rem; } .video-header { display: flex; justify-content: space-between; align-items: center; } .video-name { font-weight: 600; color: #1e293b; word-break: break-word; } .progress-container { width: 100%; height: 8px; background: #e9eef3; border-radius: 20px; overflow: hidden; margin: 0.2rem 0; } .progress-fill { height: 100%; width: 0%; background: linear-gradient(90deg, #4f46e5, #818cf8); border-radius: 20px; transition: width 0.2s ease; } .progress-fill.error { background: #ef4444; } /* Styles pour la barre de progression en mode indéterminé */ .progress-container .progress-fill.indeterminate { width: 100%; background-image: linear-gradient(90deg, #4f46e5 0%, #818cf8 25%, #4f46e5 50%, #818cf8 75%, #4f46e5 100%); background-size: 200% 100%; animation: shimmer 1.5s infinite linear; } @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .status-area { display: flex; align-items: center; justify-content: space-between; gap: 1rem; } .status-text { font-size: 0.9rem; font-weight: 500; } .pending-text { color: #64748b; } .error-text { color: #dc2626; font-weight: 600; } .download-btn { background: #0f172a; color: white; border: none; padding: 0.4rem 1.2rem; border-radius: 2rem; font-weight: 600; font-size: 0.8rem; cursor: pointer; display: flex; align-items: center; gap: 0.3rem; transition: 0.2s; } .download-btn:hover { background: #334155; } /* RESPONSIVE : barre horizontale adaptative */ @media (max-width: 768px) { .top-bar-container { padding: 0.8rem 1rem; flex-direction: column; align-items: stretch; gap: 0.7rem; } .static-lang, .demo-status { justify-content: center; width: 100%; } .format-row { flex-direction: column; align-items: stretch; } .process-btn { margin-left: 0; justify-content: center; } .main-container { padding: 1.5rem; margin: 1rem; } .logo-text { font-size: 1.6rem; } } @media (max-width: 480px) { .top-bar-container { padding: 0.7rem 0.9rem; } .static-lang, .demo-status { font-size: 0.8rem; padding: 0.4rem 1rem; } }