/** * FuZip - Styles colonnes et upload * Colonnes unifiées (upload + tree), drop zones, progress bars */ /* ===== Colonnes Section ===== */ .columns-section { display: grid; grid-template-columns: 1fr 1fr; gap: var(--spacing-lg); flex: 1; min-height: 0; } /* ===== Colonne ===== */ .column { display: flex; flex-direction: column; background-color: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); min-height: 0; overflow: hidden; transition: all var(--transition-base); } .column.drag-over { border-color: var(--color-primary); background-color: var(--color-primary-light); box-shadow: 0 0 0 3px var(--color-primary-light); } /* ===== Header de colonne ===== */ .column-header { padding: var(--spacing-md) var(--spacing-lg); border-bottom: 1px solid var(--color-border); background-color: var(--color-bg-secondary); display: flex; align-items: center; gap: var(--spacing-md); flex-wrap: wrap; flex-shrink: 0; } .column-title { font-size: var(--font-size-lg); font-weight: 600; color: var(--color-text); margin: 0; flex-shrink: 0; } /* Info de colonne (fichier chargé) */ .column-info { display: flex; align-items: center; gap: var(--spacing-md); flex: 1; font-size: var(--font-size-sm); color: var(--color-text-secondary); } .info-file-name { font-weight: 600; color: var(--color-text); max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .info-separator { color: var(--color-text-muted); } .info-stat { font-weight: 500; color: var(--color-text); } /* ===== Body de colonne ===== */ .column-body { flex: 1; display: flex; flex-direction: column; position: relative; min-height: 0; overflow: hidden; } /* ===== Drop Zone ===== */ .drop-zone { flex: 1; border: 2px dashed var(--color-border); border-radius: var(--radius-md); padding: var(--spacing-2xl) var(--spacing-lg); margin: var(--spacing-lg); text-align: center; background-color: var(--color-bg-secondary); transition: all var(--transition-base); cursor: pointer; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--spacing-md); min-height: 250px; } .drop-zone:hover { border-color: var(--color-primary); background-color: var(--color-primary-light); } .drop-zone.drag-over { border-color: var(--color-primary); background-color: var(--color-primary-light); border-style: solid; transform: scale(1.02); } .drop-icon { width: 3rem; height: 3rem; color: var(--color-text-secondary); transition: color var(--transition-base); } .drop-zone:hover .drop-icon, .drop-zone.drag-over .drop-icon { color: var(--color-primary); } .drop-text { font-size: var(--font-size-lg); font-weight: 500; color: var(--color-text); } .drop-or { font-size: var(--font-size-sm); color: var(--color-text-secondary); text-transform: lowercase; } .btn-browse { padding: var(--spacing-sm) var(--spacing-xl); background-color: white; color: var(--color-primary); border: 1px solid var(--color-primary); border-radius: var(--radius-md); font-size: var(--font-size-base); font-weight: 500; cursor: pointer; transition: all var(--transition-fast); } .btn-browse:hover { background-color: var(--color-primary); color: white; } .file-input { display: none; } /* ===== Progress Bar ===== */ .upload-progress { display: flex; align-items: center; gap: var(--spacing-md); padding: var(--spacing-md); background-color: var(--color-bg-secondary); border-radius: var(--radius-md); margin: 0 var(--spacing-lg) var(--spacing-lg); position: absolute; bottom: 0; left: 0; right: 0; } .progress-bar { flex: 1; height: 0.5rem; background-color: var(--color-bg-tertiary); border-radius: var(--radius-xl); overflow: hidden; } .progress-fill { height: 100%; background: linear-gradient(90deg, var(--color-primary) 0%, var(--color-primary-hover) 100%); border-radius: var(--radius-xl); transition: width var(--transition-base); position: relative; overflow: hidden; } /* Animation de progression */ .progress-fill::after { content: ''; position: absolute; top: 0; left: 0; bottom: 0; right: 0; background: linear-gradient( 90deg, transparent, rgba(255, 255, 255, 0.3), transparent ); animation: shimmer 1.5s infinite; } @keyframes shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } .progress-text { font-size: var(--font-size-sm); font-weight: 600; color: var(--color-text-secondary); min-width: 3rem; text-align: right; } /* ===== Bouton changer ===== */ .btn-change-file { padding: var(--spacing-xs); background-color: transparent; color: var(--color-text-secondary); border: none; border-radius: 50%; cursor: pointer; transition: all var(--transition-fast); display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 2rem; height: 2rem; margin-left: auto; } .btn-change-file:hover { background-color: var(--color-bg-secondary); color: var(--color-primary); } .btn-change-file svg { width: 1.125rem; height: 1.125rem; } /* ===== État compact (fichier chargé) ===== */ .column-header.compact .column-title { display: none; } .column-header.compact .column-info { display: flex; } /* Quand pas compact, cache les infos */ .column-header:not(.compact) .column-info { display: none; } /* Cache la drop zone quand compact */ .column-header.compact ~ .column-body .drop-zone { display: none; } /* Affiche le tree-panel quand compact */ .column-header.compact ~ .column-body .tree-panel { display: flex; flex-direction: column; flex: 1; min-height: 0; } /* ===== États spéciaux ===== */ .column-header.uploading { pointer-events: none; opacity: 0.7; } .column-header.error { border-color: var(--color-error); } .column.error { background-color: rgba(239, 68, 68, 0.02); } /* ===== Responsive ===== */ @media (max-width: 768px) { .columns-section { grid-template-columns: 1fr; gap: var(--spacing-md); } .drop-zone { padding: var(--spacing-xl) var(--spacing-md); min-height: 200px; } .drop-icon { width: 2.5rem; height: 2.5rem; } .drop-text { font-size: var(--font-size-base); } .column-header { flex-direction: column; align-items: flex-start; } .column-info { width: 100%; flex-wrap: wrap; } .info-file-name { max-width: 100%; } }