/* ============ Dateimanager / Browser Styles ============ */ /* Browser App Layout */ .browser-app { display: flex; flex-direction: column; height: 100vh; overflow: hidden; } .browser-app .header { flex-shrink: 0; } .back-link { color: var(--text-secondary); text-decoration: none; font-size: 0.875rem; margin-right: 1rem; } .back-link:hover { color: var(--primary); } /* ============ Toolbar ============ */ .toolbar { display: flex; align-items: center; gap: 1rem; padding: 0.5rem 1rem; background: var(--bg-secondary); border-bottom: 1px solid var(--border); flex-shrink: 0; } .toolbar-left { display: flex; gap: 0.25rem; } .toolbar-right { margin-left: auto; display: flex; align-items: center; gap: 0.5rem; } .file-count { font-size: 0.8rem; color: var(--text-secondary); } /* ============ Breadcrumb ============ */ .breadcrumb-bar { flex: 1; overflow-x: auto; white-space: nowrap; } .breadcrumb { display: flex; align-items: center; gap: 0.25rem; font-size: 0.8rem; font-family: monospace; } .breadcrumb-item { color: var(--text-secondary); cursor: pointer; padding: 0.25rem 0.5rem; border-radius: 4px; } .breadcrumb-item:hover { background: var(--bg); color: var(--primary); } .breadcrumb-separator { color: var(--text-secondary); } .breadcrumb-current { color: var(--text); font-weight: 500; } /* ============ Browser Main (3-Panel Layout) ============ */ .browser-main { display: flex; flex: 1; overflow: hidden; position: relative; } /* Vertikaler Modus */ .browser-main.vertical { flex-direction: column; } .pane { display: flex; flex-direction: column; background: var(--bg); overflow: hidden; } /* Panel ausgeblendet */ .pane.hidden-panel { display: none !important; } .pane-header { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0.75rem; background: var(--bg-secondary); border-bottom: 1px solid var(--border); font-size: 0.85rem; font-weight: 500; flex-shrink: 0; } .pane-toolbar { display: flex; gap: 0.25rem; } /* Panel 1: Ordner-Baum */ .pane-tree { width: 220px; min-width: 150px; max-width: 400px; border-right: 1px solid var(--border); } /* Panel 2: Dateiliste */ .pane-list { width: 300px; min-width: 200px; max-width: 600px; border-right: 1px solid var(--border); } /* Wenn Preview ausgeblendet: Dateiliste expandiert */ .pane-list.expanded { flex: 1; max-width: none; border-right: none; } /* Panel 3: Vorschau */ .pane-preview { flex: 1; min-width: 300px; } /* ============ Resize Handles ============ */ .resize-handle { flex-shrink: 0; background: transparent; position: relative; z-index: 10; } /* Horizontaler Modus: Vertikale Handles (Breite ändern) */ .browser-main:not(.vertical) .resize-handle { width: 6px; cursor: col-resize; } /* Vertikaler Modus: Horizontale Handles (Höhe ändern) */ .browser-main.vertical .resize-handle { height: 6px; width: 100%; cursor: row-resize; } .resize-handle:hover { background: var(--primary); opacity: 0.5; } .resize-handle.active { background: var(--primary); opacity: 1; } /* ============ Folder Tree (Baumstruktur) ============ */ .folder-tree { flex: 1; overflow-y: auto; overflow-x: hidden; padding: 0.25rem 0; } .tree-item { display: flex; align-items: center; gap: 0.25rem; padding: 0.35rem 0.5rem; cursor: pointer; font-size: 0.8rem; white-space: nowrap; border-left: 3px solid transparent; } .tree-item:hover { background: var(--bg-tertiary); } .tree-item.active { background: var(--primary); color: white; border-left-color: var(--primary); } .tree-item.active:hover { background: var(--primary); } .tree-toggle { width: 16px; flex-shrink: 0; font-size: 0.65rem; color: var(--text-secondary); text-align: center; } .tree-item.active .tree-toggle { color: rgba(255, 255, 255, 0.7); } .tree-icon { font-size: 0.9rem; flex-shrink: 0; } .tree-name { overflow: hidden; text-overflow: ellipsis; } /* ============ File List ============ */ .file-list { flex: 1; overflow-y: auto; padding: 0.25rem; } .file-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 0.75rem; border-radius: var(--radius); cursor: pointer; font-size: 0.8rem; transition: background 0.1s; } .file-item:hover { background: var(--bg-tertiary); } .file-item.selected { background: var(--primary); color: white; } .file-item.folder { color: var(--text-secondary); } .file-item.folder:hover { color: var(--text); } .file-item .file-icon { font-size: 1.1rem; flex-shrink: 0; } .file-item .file-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .file-item .file-size { font-size: 0.7rem; color: var(--text-secondary); flex-shrink: 0; } .file-item.selected .file-size { color: rgba(255, 255, 255, 0.7); } .file-item.drop-target { background: var(--primary); color: white; outline: 2px dashed white; outline-offset: -2px; } /* ============ File Info Bar ============ */ .file-info { padding: 0.75rem 1rem; background: var(--bg-secondary); border-bottom: 1px solid var(--border); flex-shrink: 0; } .file-info-name { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.5rem; } .file-info-name #preview-filename { font-weight: 500; font-size: 0.9rem; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .file-info-name .file-size { font-size: 0.75rem; color: var(--text-secondary); background: var(--bg-tertiary); padding: 0.125rem 0.5rem; border-radius: 4px; } .file-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; } /* ============ Preview Container ============ */ .preview-container { flex: 1; overflow: auto; display: flex; align-items: center; justify-content: center; background: var(--bg-tertiary); padding: 1rem; } .preview-placeholder { text-align: center; color: var(--text-secondary); font-size: 0.9rem; } .preview-placeholder span { display: block; margin-top: 0.5rem; } /* PDF Preview */ .preview-pdf { width: 100%; height: 100%; border: none; background: white; } /* Image Preview */ .preview-image { max-width: 100%; max-height: 100%; object-fit: contain; border-radius: var(--radius); box-shadow: var(--shadow); } /* Text Preview */ .preview-text { width: 100%; height: 100%; background: var(--bg); color: var(--text); padding: 1rem; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.8rem; overflow: auto; border-radius: var(--radius); white-space: pre-wrap; word-wrap: break-word; } /* No Preview Available */ .preview-unavailable { text-align: center; padding: 2rem; } .preview-unavailable .file-type-icon { font-size: 4rem; margin-bottom: 1rem; } .preview-unavailable p { color: var(--text-secondary); margin-bottom: 1rem; } /* ============ Preview Window Button ============ */ #btn-open-preview { margin-right: 0.5rem; } #btn-open-preview.active { background: var(--success); color: white; border-color: var(--success); } #btn-show-preview { background: var(--warning); color: white; border-color: var(--warning); } /* ============ Toast Notifications ============ */ .toast-container { position: fixed; bottom: 1rem; right: 1rem; z-index: 3000; display: flex; flex-direction: column; gap: 0.5rem; } .toast { padding: 0.75rem 1rem; border-radius: var(--radius); background: var(--bg-secondary); color: var(--text); box-shadow: var(--shadow); animation: slideIn 0.3s ease; max-width: 350px; } .toast.success { border-left: 4px solid var(--success); } .toast.error { border-left: 4px solid var(--danger); } .toast.warning { border-left: 4px solid var(--warning); } .toast.info { border-left: 4px solid var(--primary); } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } /* ============ Modal Adjustments ============ */ .modal-small { max-width: 400px; } .delete-warning { background: var(--bg-tertiary); padding: 0.75rem; border-radius: var(--radius); font-family: monospace; font-size: 0.85rem; word-break: break-all; margin: 0.75rem 0; } .delete-hint { color: var(--danger); font-size: 0.8rem; } /* ============ Context Menu ============ */ .context-menu { position: fixed; background: var(--bg-secondary); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); z-index: 2000; min-width: 150px; } .context-menu-item { padding: 0.5rem 1rem; cursor: pointer; font-size: 0.85rem; display: flex; align-items: center; gap: 0.5rem; } .context-menu-item:hover { background: var(--bg-tertiary); } .context-menu-item.danger { color: var(--danger); } .context-menu-separator { height: 1px; background: var(--border); margin: 0.25rem 0; } /* ============ Empty State ============ */ .empty-state { color: var(--text-secondary); font-size: 0.85rem; text-align: center; padding: 1rem; } /* ============ Responsive / Vertikales Layout ============ */ @media (max-width: 1000px) { .browser-main { flex-direction: column; } .browser-main .pane-tree { width: 100% !important; max-width: none; height: 150px; min-height: 80px; border-right: none; border-bottom: 1px solid var(--border); } .browser-main .pane-list { width: 100% !important; max-width: none; height: 200px; min-height: 100px; border-right: none; border-bottom: 1px solid var(--border); } .browser-main .pane-preview { min-width: auto; min-height: 150px; flex: 1; } /* Resize Handles im vertikalen Modus */ .browser-main .resize-handle { width: 100%; height: 8px; cursor: row-resize; } } /* ============ Loading State ============ */ .loading-spinner { display: inline-block; width: 20px; height: 20px; border: 2px solid var(--border); border-top-color: var(--primary); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } }