Files
fuzip/assets/css/themes.css
Charles bd6d321ed7 Initial commit: FuZip - Application de fusion interactive de fichiers ZIP
- Backend PHP: architecture MVC avec API REST (upload, merge, preview, extract)
  - Frontend JavaScript: composants modulaires (arborescence, upload, themes, i18n)
  - Fonctionnalités: drag&drop, sélection exclusive, détection conflits, persistance état
  - Sécurité: validation stricte, isolation sessions, sanitization chemins
  - UI/UX: responsive, thèmes clair/sombre, multi-langue (FR/EN)
  - Documentation: README complet avec installation et utilisation
2026-01-12 03:29:01 +01:00

227 lines
5.7 KiB
CSS

/**
* 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;
}
}