/** * FuZip - Thèmes (Dark Mode) * Option E du plan : Toggle dark/light mode */ /* ===== Thème sombre ===== */ [data-theme="dark"] { /* Couleurs principales (inchangées) */ --color-primary: #3b82f6; --color-primary-hover: #60a5fa; --color-primary-light: #1e3a8a; --color-secondary: #94a3b8; --color-secondary-hover: #cbd5e1; --color-success: #10b981; --color-warning: #f59e0b; --color-error: #ef4444; /* Couleurs neutres (inversées pour dark) */ --color-bg: #0f172a; --color-bg-secondary: #1e293b; --color-bg-tertiary: #334155; --color-text: #f1f5f9; --color-text-secondary: #cbd5e1; --color-text-muted: #94a3b8; --color-border: #334155; --color-border-hover: #475569; /* Ombres adaptées pour dark */ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -2px rgba(0, 0, 0, 0.4); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.6), 0 10px 10px -5px rgba(0, 0, 0, 0.5); } /* ===== Ajustements spécifiques dark mode ===== */ /* Drop zone dark */ [data-theme="dark"] .drop-zone { background-color: var(--color-bg-secondary); } [data-theme="dark"] .drop-zone:hover, [data-theme="dark"] .drop-zone.drag-over { background-color: var(--color-bg-tertiary); border-color: var(--color-primary); } /* Bouton browse dark */ [data-theme="dark"] .btn-browse { background-color: var(--color-bg-tertiary); color: var(--color-primary-hover); border-color: var(--color-primary); } [data-theme="dark"] .btn-browse:hover { background-color: var(--color-primary); color: white; } /* Input search dark */ [data-theme="dark"] .search-input { background-color: var(--color-bg-tertiary); border-color: var(--color-border); color: var(--color-text); } [data-theme="dark"] .search-input:focus { border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3); } /* Tree items dark */ [data-theme="dark"] .tree-item:hover { background-color: var(--color-bg-tertiary); } [data-theme="dark"] .tree-item.selected { background-color: rgba(59, 130, 246, 0.2); } [data-theme="dark"] .tree-item.search-match { background-color: rgba(245, 158, 11, 0.2); } /* Checkbox dark */ [data-theme="dark"] .tree-checkbox { background-color: var(--color-bg-tertiary); border-color: var(--color-border-hover); } [data-theme="dark"] .tree-checkbox:hover { border-color: var(--color-primary); } [data-theme="dark"] input[type="checkbox"]:checked + .tree-checkbox, [data-theme="dark"] .tree-checkbox.checked { background-color: var(--color-primary); border-color: var(--color-primary); } [data-theme="dark"] .tree-checkbox.indeterminate { background-color: rgba(59, 130, 246, 0.3); border-color: var(--color-primary); } /* Conflicts banner dark */ [data-theme="dark"] .conflicts-banner { background-color: rgba(245, 158, 11, 0.1); border-color: var(--color-warning); color: #fbbf24; } /* Modal dark */ [data-theme="dark"] .modal { background-color: rgba(0, 0, 0, 0.7); } [data-theme="dark"] .modal-content { background-color: var(--color-bg-secondary); } [data-theme="dark"] .preview-content { background-color: var(--color-bg-tertiary); color: var(--color-text); } /* Loading overlay dark */ [data-theme="dark"] .loading-overlay { background-color: rgba(0, 0, 0, 0.7); } /* Messages d'erreur/succès dark */ [data-theme="dark"] .error-message { background-color: rgba(239, 68, 68, 0.2); border-color: var(--color-error); color: #fca5a5; } [data-theme="dark"] .success-message { background-color: rgba(16, 185, 129, 0.2); border-color: var(--color-success); color: #6ee7b7; } /* Upload panel states dark */ [data-theme="dark"] .upload-panel.success { border-color: var(--color-success); background-color: rgba(16, 185, 129, 0.1); } [data-theme="dark"] .upload-panel.error { border-color: var(--color-error); background-color: rgba(239, 68, 68, 0.1); } /* Progress bar dark */ [data-theme="dark"] .progress-bar { background-color: var(--color-bg-tertiary); } /* Scrollbar dark */ [data-theme="dark"] .tree-content::-webkit-scrollbar-track { background: var(--color-bg); } [data-theme="dark"] .tree-content::-webkit-scrollbar-thumb { background: var(--color-border-hover); } [data-theme="dark"] .tree-content::-webkit-scrollbar-thumb:hover { background: var(--color-border); } /* ===== Transition smooth entre thèmes ===== */ body, .header, .upload-panel, .tree-panel, .footer, .drop-zone, .btn-icon, .search-input, .tree-item, .tree-checkbox, .modal-content, .preview-content { transition: background-color var(--transition-base), color var(--transition-base), border-color var(--transition-base); } /* ===== Preference système ===== */ /* Détecter automatiquement la préférence système */ @media (prefers-color-scheme: dark) { /* Par défaut, respecter la préférence système Mais l'utilisateur peut override avec le toggle */ body:not([data-theme]) { /* Les variables dark seront appliquées via JavaScript si aucun thème n'est explicitement défini */ } } /* ===== Accessibilité ===== */ /* Assurer un contraste suffisant en dark mode */ [data-theme="dark"] { /* Force le contraste minimum pour accessibilité */ color-scheme: dark; } [data-theme="light"] { color-scheme: light; } /* ===== Print styles ===== */ /* Forcer le thème clair pour l'impression */ @media print { body[data-theme] { --color-bg: white; --color-text: black; --color-border: #e5e7eb; } }