/* === Basis === */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background-color: #0f0f0f; color: #e0e0e0; line-height: 1.5; } a { color: #90caf9; text-decoration: none; } a:hover { text-decoration: underline; } /* === Header === */ header { background-color: #1a1a1a; padding: 0.8rem 1.5rem; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #2a2a2a; position: sticky; top: 0; z-index: 100; } header h1 { font-size: 1.3rem; font-weight: 600; color: #fff; } nav { display: flex; gap: 0.5rem; } .nav-link { padding: 0.4rem 0.8rem; border-radius: 6px; color: #aaa; font-size: 0.85rem; transition: all 0.2s; } .nav-link:hover { color: #fff; background: #2a2a2a; text-decoration: none; } .nav-link.active { color: #fff; background: #333; } /* === Main === */ main { padding: 1.5rem; max-width: 1920px; margin: 0 auto; } h2 { font-size: 1.1rem; font-weight: 600; margin-bottom: 1rem; color: #fff; } /* === Sections === */ section { margin-bottom: 2rem; } /* === Video Cards (Aktive Konvertierungen) === */ .video-card { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 10px; padding: 1rem; margin-bottom: 0.8rem; transition: border-color 0.2s; } .video-card:hover { border-color: #444; } .video-card h3 { font-size: 0.9rem; font-weight: 500; margin-bottom: 0.6rem; color: #fff; text-align: center; } .video-card-values { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; margin-top: 0.8rem; } .video-card-values-items { text-align: center; font-size: 0.75rem; color: #aaa; } .video-card-values-items b { color: #ccc; } /* === Progress Bar === */ .progress-container { width: 100%; background: #252525; border-radius: 6px; height: 8px; overflow: hidden; margin-top: 0.5rem; } .progress-bar { height: 100%; width: 0%; background: linear-gradient(90deg, #4caf50, #00c853); border-radius: 6px; transition: width 0.4s ease; } .progress-text { font-size: 0.7rem; color: #888; text-align: right; margin-top: 0.2rem; } /* === Globaler Progress-Balken === */ .global-progress-container:empty { display: none; } .global-progress { background: #1a1a1a; padding: 0.3rem 1rem; border-bottom: 1px solid #333; font-size: 0.75rem; } .global-progress .progress-container { margin-top: 0.2rem; } .global-progress-info { display: flex; justify-content: space-between; align-items: center; } .global-progress-info .gp-label { font-weight: 600; color: #4caf50; } #gp-import .gp-label { color: #42a5f5; } #gp-import .progress-bar { background: linear-gradient(90deg, #1565c0, #42a5f5); } #gp-convert .gp-label { color: #ff9800; } #gp-convert .progress-bar { background: linear-gradient(90deg, #e65100, #ff9800); } /* === Queue === */ #queue { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 0.8rem; } .queue-card { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 10px; padding: 0.8rem; display: flex; flex-direction: column; } .queue-card h4 { font-size: 0.8rem; font-weight: 500; color: #ddd; margin-bottom: 0.5rem; word-break: break-all; } .queue-card-footer { display: flex; justify-content: space-between; align-items: center; margin-top: auto; padding-top: 0.5rem; } /* === Status Badges === */ .status-badge { display: inline-block; padding: 0.15rem 0.5rem; border-radius: 4px; font-size: 0.7rem; font-weight: 600; } .status-badge.ok { background: #1b5e20; color: #81c784; } .status-badge.warn { background: #e65100; color: #ffb74d; } .status-badge.error { background: #b71c1c; color: #ef9a9a; } .status-badge.active { background: #0d47a1; color: #90caf9; } .status-badge.queued { background: #333; color: #aaa; } .status-badge.info { background: #455a64; color: #b0bec5; } /* === Buttons === */ .btn-primary { background: #1976d2; color: #fff; border: none; padding: 0.5rem 1.2rem; border-radius: 6px; cursor: pointer; font-size: 0.85rem; transition: background 0.2s; } .btn-primary:hover { background: #1565c0; } .btn-secondary { background: #333; color: #ddd; border: 1px solid #444; padding: 0.5rem 1.2rem; border-radius: 6px; cursor: pointer; font-size: 0.85rem; } .btn-secondary:hover { background: #444; } .btn-danger { background: transparent; color: #ef5350; border: none; cursor: pointer; font-size: 0.8rem; padding: 0.2rem 0.5rem; border-radius: 4px; } .btn-danger:hover { background: #2a1a1a; } .btn-small { font-size: 0.7rem; padding: 0.2rem 0.4rem; } /* === Admin - Forms === */ .admin-section { margin-bottom: 2rem; } fieldset { border: 1px solid #2a2a2a; border-radius: 10px; padding: 1rem; margin-bottom: 1rem; background: #1a1a1a; } legend { font-size: 0.9rem; font-weight: 600; color: #90caf9; padding: 0 0.5rem; } .form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; } .form-group { display: flex; flex-direction: column; gap: 0.3rem; } .form-group label { font-size: 0.8rem; color: #aaa; } .form-group input[type="text"], .form-group input[type="number"], .form-group select { background: #252525; border: 1px solid #333; color: #e0e0e0; padding: 0.5rem; border-radius: 6px; font-size: 0.85rem; } .form-group input:focus, .form-group select:focus { outline: none; border-color: #1976d2; } .checkbox-group label { display: flex; align-items: center; gap: 0.5rem; font-size: 0.85rem; color: #ddd; cursor: pointer; } .checkbox-group input[type="checkbox"] { accent-color: #1976d2; width: 16px; height: 16px; } .form-actions { margin-top: 1rem; display: flex; gap: 0.5rem; } /* === Presets Grid === */ .presets-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 0.8rem; } .preset-card { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 10px; padding: 0.8rem; } .preset-card h3 { font-size: 0.85rem; margin-bottom: 0.5rem; color: #fff; } .preset-details { display: flex; flex-wrap: wrap; gap: 0.3rem; } .tag { display: inline-block; padding: 0.1rem 0.4rem; border-radius: 4px; font-size: 0.65rem; background: #252525; color: #aaa; border: 1px solid #333; } .tag.gpu { background: #1b5e20; color: #81c784; border-color: #2e7d32; } .tag.cpu { background: #0d47a1; color: #90caf9; border-color: #1565c0; } /* === Statistics === */ .stats-summary { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 0.8rem; margin-bottom: 1.5rem; } .stat-card { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 10px; padding: 1rem; text-align: center; } .stat-value { display: block; font-size: 1.5rem; font-weight: 700; color: #fff; } .stat-label { font-size: 0.75rem; color: #888; margin-top: 0.3rem; } /* === Data Table === */ .data-table { width: 100%; border-collapse: collapse; } .data-table th, .data-table td { padding: 0.6rem 0.8rem; text-align: left; font-size: 0.8rem; border-bottom: 1px solid #222; } .data-table th { background: #1a1a1a; color: #aaa; font-weight: 600; font-size: 0.75rem; text-transform: uppercase; } .data-table tr:hover { background: #1a1a1a; } .pagination { margin-top: 1rem; text-align: center; } /* === Toast === */ #toast-container { position: fixed; top: 4rem; right: 1rem; z-index: 1000; } .toast { padding: 0.7rem 1.2rem; border-radius: 8px; font-size: 0.85rem; margin-bottom: 0.5rem; opacity: 0; transform: translateX(20px); transition: opacity 0.3s ease, transform 0.3s ease; box-shadow: 0 4px 12px rgba(0,0,0,0.3); } .toast.show { opacity: 1; transform: translateX(0); } .toast-success { background: #1b5e20; color: #a5d6a7; border-left: 3px solid #4caf50; } .toast-error { background: #b71c1c; color: #ef9a9a; border-left: 3px solid #f44336; } .toast-info { background: #1565c0; color: #90caf9; border-left: 3px solid #2196f3; } @keyframes fadeIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; } } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } /* === Action Bar === */ .action-bar { display: flex; gap: 0.5rem; margin-bottom: 1rem; } /* === Modal === */ .modal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.7); display: flex; justify-content: center; align-items: center; z-index: 500; backdrop-filter: blur(4px); } .modal { background: #1a1a1a; border: 1px solid #333; border-radius: 12px; width: 90%; max-width: 800px; max-height: 85vh; display: flex; flex-direction: column; } .modal-small { max-width: 500px; } .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.2rem; border-bottom: 1px solid #2a2a2a; } .modal-header h2 { margin-bottom: 0; } .btn-close { background: none; border: none; color: #888; font-size: 1.5rem; cursor: pointer; padding: 0 0.3rem; line-height: 1; } .btn-close:hover { color: #fff; } .modal-breadcrumb { padding: 0.5rem 1.2rem; font-size: 0.8rem; color: #888; border-bottom: 1px solid #222; background: #151515; } .bc-item { color: #90caf9; cursor: pointer; } .bc-item:hover { text-decoration: underline; } .bc-sep { color: #555; } .modal-body { flex: 1; overflow-y: auto; padding: 0; } .modal-footer { display: flex; justify-content: space-between; align-items: center; padding: 0.8rem 1.2rem; border-top: 1px solid #2a2a2a; font-size: 0.8rem; color: #888; } .modal-footer div { display: flex; gap: 0.5rem; } /* === Filebrowser === */ .fb-item { display: flex; align-items: center; gap: 0.6rem; padding: 0.5rem 1.2rem; border-bottom: 1px solid #1f1f1f; font-size: 0.85rem; transition: background 0.15s; } .fb-item:hover { background: #222; } .fb-dir { cursor: pointer; } .fb-parent { color: #888; } .fb-check { flex-shrink: 0; } .fb-check input[type="checkbox"] { accent-color: #1976d2; width: 15px; height: 15px; cursor: pointer; } .fb-icon { font-size: 1.1rem; flex-shrink: 0; } .fb-name { flex: 1; word-break: break-all; } .fb-size { color: #888; font-size: 0.75rem; flex-shrink: 0; } .fb-badge { background: #0d47a1; color: #90caf9; padding: 0.1rem 0.4rem; border-radius: 4px; font-size: 0.65rem; flex-shrink: 0; } .fb-loading, .fb-error, .fb-empty { padding: 2rem; text-align: center; color: #888; } .fb-error { color: #ef5350; } /* === Upload === */ .upload-zone { border: 2px dashed #333; border-radius: 10px; padding: 2rem; text-align: center; margin: 1rem 1.2rem; transition: border-color 0.2s, background 0.2s; } .upload-zone:hover, .upload-zone.drag-over { border-color: #1976d2; background: #0d47a122; } .upload-zone p { color: #888; font-size: 0.9rem; } .upload-hint { font-size: 0.75rem; margin: 0.5rem 0; } .upload-btn { display: inline-block; cursor: pointer; margin-top: 0.3rem; } .upload-list { padding: 0 1.2rem; } .upload-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.4rem 0; border-bottom: 1px solid #222; font-size: 0.8rem; } .upload-item-name { flex: 1; word-break: break-all; color: #ddd; } .upload-item-size { color: #888; font-size: 0.75rem; } .upload-progress { padding: 0.8rem 1.2rem; } .upload-progress .progress-container { margin-top: 0; } .btn-primary:disabled, .btn-secondary:disabled { opacity: 0.5; cursor: not-allowed; } /* === Bibliothek === */ .library-section { margin-bottom: 2rem; } .library-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; } .library-actions { display: flex; gap: 0.5rem; } .library-stats { display: flex; gap: 1rem; margin-bottom: 1rem; flex-wrap: wrap; } .lib-stat { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 8px; padding: 0.5rem 1rem; text-align: center; min-width: 100px; } .lib-stat-value { display: block; font-size: 1.2rem; font-weight: 700; color: #fff; } .lib-stat-label { font-size: 0.7rem; color: #888; } .library-layout { display: grid; grid-template-columns: 220px 220px 1fr; gap: 1rem; } /* Pfad-Navigation (ganz links) */ .library-nav { display: block; background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 10px; padding: 0.8rem; position: sticky; top: 4rem; max-height: calc(100vh - 5rem); overflow-y: auto; } .library-nav h3 { font-size: 0.85rem; margin-bottom: 0.6rem; color: #fff; } .nav-path-item { display: flex; align-items: center; gap: 0.4rem; padding: 0.45rem 0.6rem; border-radius: 6px; cursor: pointer; font-size: 0.8rem; color: #aaa; transition: all 0.15s; margin-bottom: 0.2rem; border: 1px solid transparent; } .nav-path-item:hover { background: #252525; color: #ddd; } .nav-path-item.active { background: #1976d2; color: #fff; border-color: #1976d2; } .nav-path-icon { font-size: 0.9rem; flex-shrink: 0; } .nav-path-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; } .nav-path-count { font-size: 0.65rem; color: #666; flex-shrink: 0; } .nav-path-item.active .nav-path-count { color: rgba(255,255,255,0.7); } /* Filter-Sidebar */ .library-filters { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 10px; padding: 1rem; position: sticky; top: 4rem; max-height: calc(100vh - 5rem); overflow-y: auto; } .library-filters h3 { font-size: 0.9rem; margin-bottom: 0.8rem; color: #fff; } .filter-group { margin-bottom: 0.8rem; } .filter-group > label { font-size: 0.75rem; color: #aaa; display: block; margin-bottom: 0.2rem; } .filter-group input[type="text"], .filter-group select { width: 100%; background: #252525; border: 1px solid #333; color: #e0e0e0; padding: 0.35rem 0.5rem; border-radius: 5px; font-size: 0.8rem; } .filter-group input:focus, .filter-group select:focus { outline: none; border-color: #1976d2; } .filter-radios label, .filter-checks label { display: block; font-size: 0.8rem; color: #ccc; cursor: pointer; padding: 0.1rem 0; } .filter-radios input, .filter-checks input { accent-color: #1976d2; margin-right: 0.3rem; } /* Filter Presets */ .filter-presets select { margin-bottom: 0.4rem; } .preset-actions { display: flex; gap: 0.3rem; margin-top: 0.3rem; } .preset-actions button { flex: 1; font-size: 0.65rem; padding: 0.2rem 0.3rem; } .btn-block { width: 100%; } /* Fehlende Episoden Ansicht */ .missing-episodes-view { padding: 1rem; } .missing-episodes-view h3 { margin-bottom: 1rem; color: #f44336; } .missing-series-block { background: #1e1e1e; border-radius: 8px; margin-bottom: 1rem; overflow: hidden; } .missing-series-header { display: flex; align-items: center; gap: 1rem; padding: 0.8rem 1rem; background: #252525; border-bottom: 1px solid #333; } .missing-series-header h4 { flex: 1; margin: 0; font-size: 1rem; } .missing-poster { width: 40px; height: 60px; object-fit: cover; border-radius: 4px; } .missing-count { background: #f44336; color: #fff; padding: 0.2rem 0.5rem; border-radius: 4px; font-size: 0.75rem; font-weight: bold; } .missing-episodes-list { padding: 0.5rem 1rem; display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 0.4rem; } .missing-episode { display: flex; gap: 0.5rem; padding: 0.3rem 0.5rem; background: #2a2a2a; border-radius: 4px; font-size: 0.8rem; } .missing-episode .ep-num { color: #f44336; font-weight: bold; min-width: 60px; } .missing-episode .ep-name { color: #ccc; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .missing-pagination { text-align: center; padding: 1rem; color: #888; } .missing-pagination button { margin: 0 0.5rem; } /* Tabs */ .library-tabs { display: flex; gap: 0.3rem; margin-bottom: 1rem; border-bottom: 1px solid #2a2a2a; padding-bottom: 0.3rem; } .tab-btn { background: none; border: none; color: #888; font-size: 0.85rem; padding: 0.4rem 0.8rem; cursor: pointer; border-radius: 6px 6px 0 0; transition: all 0.2s; } .tab-btn:hover { color: #fff; } .tab-btn.active { color: #fff; background: #1a1a1a; border: 1px solid #2a2a2a; border-bottom-color: #0f0f0f; } /* Video-Tabelle */ .table-wrapper { overflow-x: auto; } .td-name { max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .td-audio .tag, .td-sub .tag { margin-right: 0.2rem; } .tag.codec { background: #0d47a1; color: #90caf9; border-color: #1565c0; } .tag.hdr { background: #4a148c; color: #ce93d8; border-color: #6a1b9a; } .tag.ok { background: #1b5e20; color: #81c784; border-color: #2e7d32; } .loading-msg { text-align: center; color: #666; padding: 2rem; font-size: 0.85rem; } /* Pagination */ .page-info { font-size: 0.8rem; color: #888; margin-right: 0.5rem; } /* Serien-Grid */ .series-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 0.8rem; } .series-card { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 10px; padding: 0.8rem; display: flex; gap: 0.8rem; cursor: pointer; transition: border-color 0.2s; } .series-card:hover { border-color: #444; } .series-poster { width: 60px; height: 90px; object-fit: cover; border-radius: 4px; flex-shrink: 0; } .series-poster-placeholder { width: 60px; height: 90px; background: #252525; border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: 0.6rem; color: #666; flex-shrink: 0; } .series-info { flex: 1; min-width: 0; } .series-info h4 { font-size: 0.85rem; color: #fff; margin-bottom: 0.3rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .series-meta { display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: center; font-size: 0.75rem; color: #aaa; } /* === Film-Grid === */ .movie-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 0.8rem; } .movie-card { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 10px; padding: 0.8rem; display: flex; gap: 0.8rem; cursor: pointer; transition: border-color 0.2s; } .movie-card:hover { border-color: #444; } .movie-poster { width: 80px; height: 120px; object-fit: cover; border-radius: 4px; flex-shrink: 0; } .movie-poster-placeholder { width: 80px; height: 120px; background: #252525; border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: 0.6rem; color: #666; flex-shrink: 0; } .movie-info { flex: 1; min-width: 0; } .movie-info h4 { font-size: 0.85rem; color: #fff; margin-bottom: 0.2rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .movie-genres { font-size: 0.7rem; color: #888; margin-bottom: 0.2rem; } .movie-overview { font-size: 0.75rem; color: #999; line-height: 1.3; margin-bottom: 0.3rem; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } .movie-meta { display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: center; font-size: 0.75rem; color: #aaa; } /* Film-Detail Modal */ .movie-detail-header { display: flex; gap: 1rem; margin-bottom: 1rem; } .movie-detail-poster { width: 140px; height: 210px; object-fit: cover; border-radius: 6px; flex-shrink: 0; } .movie-detail-info { flex: 1; } /* Serien-Detail Modal */ .series-detail-header { display: flex; gap: 1rem; margin-bottom: 1rem; } .series-detail-poster { width: 120px; height: 180px; object-fit: cover; border-radius: 6px; flex-shrink: 0; } .series-detail-info { flex: 1; } .series-overview { font-size: 0.85rem; color: #ccc; margin-bottom: 0.5rem; line-height: 1.4; } .series-detail-meta { display: flex; flex-wrap: wrap; gap: 0.3rem; } .season-details { margin-bottom: 0.5rem; border: 1px solid #2a2a2a; border-radius: 8px; overflow: hidden; } .season-details summary { background: #1a1a1a; padding: 0.6rem 0.8rem; cursor: pointer; font-size: 0.85rem; font-weight: 600; color: #fff; } .season-details summary:hover { background: #222; } .season-table { margin: 0; } .season-table th { background: #151515; } .row-missing { opacity: 0.6; } .row-missing td { color: #888; } .text-warn { color: #ffb74d; } .text-muted { color: #888; font-size: 0.8rem; } /* TVDB Modal */ .tvdb-results { max-height: 400px; overflow-y: auto; } .tvdb-result { display: flex; gap: 0.8rem; padding: 0.6rem; border-bottom: 1px solid #222; cursor: pointer; transition: background 0.15s; } .tvdb-result:hover { background: #222; } .tvdb-thumb { width: 45px; height: 65px; object-fit: cover; border-radius: 3px; flex-shrink: 0; } .tvdb-overview { font-size: 0.75rem; color: #888; margin-top: 0.2rem; } /* Duplikate */ .duplicates-list { max-height: 70vh; overflow-y: auto; } .duplicate-pair { display: flex; align-items: center; gap: 0.5rem; padding: 0.6rem; border-bottom: 1px solid #222; } .dupe-item { flex: 1; } .dupe-name { font-size: 0.8rem; color: #ddd; display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .dupe-vs { color: #666; font-size: 0.7rem; flex-shrink: 0; } /* Scan-Progress */ .scan-progress { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 8px; padding: 0.6rem 1rem; margin-bottom: 1rem; } .scan-status { font-size: 0.8rem; color: #aaa; display: block; margin-top: 0.3rem; } /* Pagination-Zeile mit Limit-Dropdown */ .pagination-row { display: flex; align-items: center; justify-content: space-between; margin-top: 0.5rem; gap: 1rem; } .page-limit { display: flex; align-items: center; gap: 0.4rem; font-size: 0.8rem; color: #888; } .page-limit select { background: #252525; color: #ddd; border: 1px solid #333; border-radius: 4px; padding: 0.2rem 0.4rem; font-size: 0.8rem; } /* Ordner-Ansicht */ .browser-breadcrumb { display: flex; align-items: center; flex-wrap: wrap; gap: 0.3rem; padding: 0.6rem 0; font-size: 0.85rem; border-bottom: 1px solid #2a2a2a; margin-bottom: 0.8rem; } .breadcrumb-link { color: #64b5f6; text-decoration: none; } .breadcrumb-link:hover { text-decoration: underline; } .breadcrumb-sep { color: #555; } .browser-folders { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 0.5rem; margin-bottom: 1rem; } .browser-folder { display: flex; align-items: center; gap: 0.6rem; background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 6px; padding: 0.6rem 0.8rem; cursor: pointer; transition: border-color 0.15s; } .browser-folder:hover { border-color: #444; background: #1e1e1e; } .folder-icon { font-size: 1.6rem; flex-shrink: 0; } .folder-info { display: flex; flex-direction: column; min-width: 0; } .folder-name { font-size: 0.85rem; font-weight: 600; color: #ddd; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .folder-meta { font-size: 0.75rem; color: #888; } .folder-main { display: flex; align-items: center; gap: 0.6rem; flex: 1; min-width: 0; cursor: pointer; } .btn-folder-delete { position: absolute; top: 0.4rem; right: 0.4rem; background: rgba(0,0,0,0.5); border: none; color: #888; padding: 0.35rem; border-radius: 4px; cursor: pointer; opacity: 0; transition: opacity 0.15s, color 0.15s, background 0.15s; display: flex; align-items: center; justify-content: center; } .browser-folder { position: relative; } .browser-folder:hover .btn-folder-delete { opacity: 1; } .btn-folder-delete:hover { color: #e74c3c; background: rgba(231, 76, 60, 0.2); } .browser-videos { margin-top: 0.5rem; } /* === Library-Sektionen (ein Bereich pro Scan-Pfad) === */ .lib-section { background: #161616; border: 1px solid #2a2a2a; border-radius: 10px; margin-bottom: 1.2rem; overflow: hidden; } .lib-section-header { display: flex; align-items: center; gap: 0.8rem; padding: 0.8rem 1rem; background: #1a1a1a; border-bottom: 1px solid #2a2a2a; flex-wrap: wrap; } .lib-section-header h3 { font-size: 1rem; font-weight: 600; color: #fff; margin: 0; } .lib-section-actions { margin-left: auto; display: flex; gap: 0.3rem; } .lib-section .library-tabs { margin: 0; padding: 0 0.8rem; border-bottom: 1px solid #222; background: #181818; } .lib-section .section-content { padding: 0.8rem 1rem; } /* Detail-Tabs im Serien-Modal */ .detail-tabs { display: flex; gap: 0; border-bottom: 1px solid #2a2a2a; background: #151515; } .detail-tab { background: none; border: none; color: #888; font-size: 0.85rem; padding: 0.6rem 1.2rem; cursor: pointer; border-bottom: 2px solid transparent; transition: all 0.2s; } .detail-tab:hover { color: #fff; } .detail-tab.active { color: #90caf9; border-bottom-color: #1976d2; } /* Modal-Header erweitert */ .modal-header-actions { display: flex; gap: 0.3rem; align-items: center; } /* Genres in Serien */ .series-genres-line { font-size: 0.75rem; color: #888; } .series-genres { font-size: 0.7rem; color: #888; margin-bottom: 0.2rem; } /* === Cast-Grid === */ .cast-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 0.8rem; } .cast-card { display: flex; gap: 0.6rem; background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 8px; padding: 0.6rem; align-items: center; } .cast-photo { width: 50px; height: 70px; object-fit: cover; border-radius: 4px; flex-shrink: 0; } .cast-photo-placeholder { width: 50px; height: 70px; background: #252525; border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; color: #555; flex-shrink: 0; } .cast-info { display: flex; flex-direction: column; gap: 0.1rem; min-width: 0; } .cast-info strong { font-size: 0.8rem; color: #ddd; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cast-info .text-muted { font-size: 0.7rem; } /* === Artwork-Galerie === */ .artwork-type-header { font-size: 0.9rem; font-weight: 600; color: #fff; margin: 1rem 0 0.5rem; padding-bottom: 0.3rem; border-bottom: 1px solid #2a2a2a; } .artwork-type-header:first-child { margin-top: 0; } .artwork-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 0.5rem; } .artwork-item { position: relative; border-radius: 6px; overflow: hidden; border: 1px solid #2a2a2a; transition: border-color 0.2s; } .artwork-item:hover { border-color: #1976d2; text-decoration: none; } .artwork-item img { width: 100%; height: auto; display: block; } .artwork-size { position: absolute; bottom: 4px; right: 4px; background: rgba(0,0,0,0.7); color: #aaa; font-size: 0.6rem; padding: 0.1rem 0.3rem; border-radius: 3px; } /* === Pfade-Verwaltung === */ .path-item { display: flex; justify-content: space-between; align-items: center; padding: 0.6rem; border-bottom: 1px solid #222; gap: 0.5rem; flex-wrap: wrap; } .path-info { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; min-width: 0; } .path-actions { display: flex; gap: 0.3rem; flex-shrink: 0; } /* === Clean-Modal === */ .clean-list { max-height: 60vh; overflow-y: auto; } .clean-list .data-table td { padding: 0.3rem 0.5rem; font-size: 0.75rem; } /* === Import-Modal === */ .import-browser-bar { display: flex; gap: 0.4rem; padding: 0.6rem 1rem; background: #181818; border-bottom: 1px solid #2a2a2a; align-items: center; } .import-browser { max-height: 45vh; overflow-y: auto; border-bottom: 1px solid #2a2a2a; } .import-browser .fb-breadcrumb { display: flex; align-items: center; flex-wrap: wrap; gap: 0.3rem; padding: 0.4rem 1rem; font-size: 0.8rem; background: #151515; border-bottom: 1px solid #222; position: sticky; top: 0; z-index: 1; } .import-browser .fb-breadcrumb a { color: #64b5f6; } .import-browser-folder { display: flex; align-items: center; gap: 0.6rem; padding: 0.45rem 1rem; font-size: 0.85rem; cursor: pointer; border-bottom: 1px solid #1a1a1a; transition: background 0.12s; } .import-browser-folder:hover { background: #1e1e1e; } .import-browser-folder.selected { background: #0d47a1; color: #fff; } .import-browser-folder .fb-icon { font-size: 1.1rem; flex-shrink: 0; } .import-browser-folder .fb-name { flex: 1; } .import-browser-folder .fb-meta { font-size: 0.7rem; color: #888; flex-shrink: 0; } .import-browser-folder.selected .fb-meta { color: rgba(255,255,255,0.7); } .import-setup-footer { display: flex; justify-content: space-between; align-items: center; padding: 0.6rem 1rem; background: #181818; gap: 1rem; flex-wrap: wrap; } .import-setup-opts { display: flex; gap: 0.4rem; align-items: center; font-size: 0.8rem; color: #aaa; } .import-setup-opts select { background: #252525; color: #ddd; border: 1px solid #333; border-radius: 5px; padding: 0.3rem 0.4rem; font-size: 0.8rem; } .import-setup-footer > div { display: flex; gap: 0.5rem; align-items: center; } .import-items-list { max-height: 55vh; overflow-y: auto; } .import-items-list .data-table td { padding: 0.3rem 0.5rem; font-size: 0.75rem; } .import-actions-cell { white-space: nowrap; display: flex; gap: 0.2rem; } .row-conflict { background: #2a1a10 !important; } .row-conflict:hover { background: #332010 !important; } .row-pending { background: #2a1020 !important; } .row-pending:hover { background: #331030 !important; } /* === Play-Button === */ .btn-play { background: #2a7a2a; color: #fff; border: none; border-radius: 4px; padding: 0.2rem 0.5rem; cursor: pointer; font-size: 0.8rem; } .btn-play:hover { background: #3a9a3a; } /* === Video-Player Modal === */ .player-overlay { z-index: 10000; background: rgba(0, 0, 0, 0.95); } .player-container { width: 95vw; max-width: 1400px; display: flex; flex-direction: column; } .player-header { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0.8rem; color: #fff; font-size: 0.9rem; } .player-header .btn-close { font-size: 1.5rem; color: #aaa; background: none; border: none; cursor: pointer; } .player-header .btn-close:hover { color: #fff; } #player-video { width: 100%; max-height: 85vh; background: #000; border-radius: 4px; } /* === TVDB Review-Modal === */ .tvdb-review-list { max-height: 70vh; overflow-y: auto; padding: 0.5rem; } .review-item { background: #1a1a1a; border: 1px solid #2a2a2a; border-radius: 8px; margin-bottom: 0.5rem; overflow: hidden; transition: opacity 0.3s; } .review-item-done { opacity: 0.5; border-color: #2e7d32; } .review-item-skipped { opacity: 0.35; border-color: #555; } .review-item-loading { opacity: 0.6; pointer-events: none; } .review-item-header { display: flex; align-items: center; gap: 0.5rem; padding: 0.6rem 0.8rem; background: #151515; flex-wrap: wrap; } .review-local-name { font-size: 0.95rem; color: #fff; } .review-skip-btn, .review-search-btn { margin-left: auto; font-size: 0.7rem !important; } .review-search-btn { margin-left: 0; } .tag-series { background: #1565c0; color: #fff; } .tag-movie { background: #6a1b9a; color: #fff; } .review-suggestions { display: flex; gap: 0.5rem; padding: 0.5rem 0.8rem; flex-wrap: wrap; } .review-suggestion { display: flex; gap: 0.5rem; background: #222; border: 1px solid #333; border-radius: 6px; padding: 0.5rem; cursor: pointer; flex: 1; min-width: 200px; max-width: 350px; transition: border-color 0.15s, background 0.15s; } .review-suggestion:hover { border-color: #64b5f6; background: #1a2a3a; } .review-poster { width: 50px; height: 75px; object-fit: cover; border-radius: 4px; flex-shrink: 0; } .review-poster-placeholder { width: 50px; height: 75px; background: #333; border-radius: 4px; display: flex; align-items: center; justify-content: center; color: #666; font-size: 1.2rem; flex-shrink: 0; } .review-suggestion-info { flex: 1; min-width: 0; } .review-suggestion-info strong { font-size: 0.85rem; color: #e0e0e0; display: block; } .review-overview { font-size: 0.7rem; color: #888; margin: 0.2rem 0 0; line-height: 1.3; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } .review-manual-search { display: flex; gap: 0.4rem; flex-wrap: wrap; align-items: flex-start; padding: 0.5rem 0; width: 100%; } .review-search-input { flex: 1; min-width: 200px; background: #252525; color: #ddd; border: 1px solid #444; border-radius: 5px; padding: 0.4rem 0.6rem; font-size: 0.8rem; } .review-search-results { display: flex; gap: 0.4rem; flex-wrap: wrap; width: 100%; margin-top: 0.3rem; } /* === Codec-Stats (Konvertierung) === */ .codec-stats { display: flex; flex-wrap: wrap; gap: 0.3rem; margin: 0.5rem 0; } .codec-stats .tag { font-size: 0.75rem; padding: 0.2rem 0.5rem; } /* === Benachrichtigungs-Glocke === */ .notification-bell { position: fixed; bottom: 20px; left: 20px; width: 48px; height: 48px; background: #2a2a2a; border: 1px solid #444; border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; color: #888; transition: all 0.2s ease; z-index: 1000; box-shadow: 0 2px 8px rgba(0,0,0,0.3); } .notification-bell:hover { background: #333; color: #fff; transform: scale(1.05); } .notification-bell.has-error { color: #ff6b6b; animation: bell-shake 0.5s ease; } @keyframes bell-shake { 0%, 100% { transform: rotate(0); } 25% { transform: rotate(-10deg); } 75% { transform: rotate(10deg); } } .notification-badge { position: absolute; top: -4px; right: -4px; background: #e74c3c; color: #fff; font-size: 0.65rem; font-weight: bold; min-width: 18px; height: 18px; border-radius: 9px; display: flex; align-items: center; justify-content: center; padding: 0 4px; } /* === Log-Panel === */ .notification-panel { position: fixed; bottom: 80px; left: 20px; width: 400px; max-height: 50vh; background: #1e1e1e; border: 1px solid #444; border-radius: 8px; display: flex; flex-direction: column; z-index: 1001; box-shadow: 0 4px 20px rgba(0,0,0,0.4); } .notification-header { display: flex; justify-content: space-between; align-items: center; padding: 0.6rem 0.8rem; border-bottom: 1px solid #333; font-weight: 500; color: #ddd; } .notification-header > div { display: flex; gap: 0.3rem; align-items: center; } .notification-list { flex: 1; overflow-y: auto; max-height: 45vh; } .notification-item { padding: 0.5rem 0.8rem; border-bottom: 1px solid #2a2a2a; font-size: 0.8rem; display: flex; gap: 0.5rem; align-items: flex-start; } .notification-item:hover { background: #252525; } .notification-item.error { background: rgba(231, 76, 60, 0.1); border-left: 3px solid #e74c3c; } .notification-item.warning { background: rgba(241, 196, 15, 0.1); border-left: 3px solid #f1c40f; } .notification-time { color: #666; font-size: 0.7rem; white-space: nowrap; min-width: 55px; } .notification-msg { color: #ccc; word-break: break-word; flex: 1; } .notification-item.error .notification-msg { color: #ff8a8a; } .notification-empty { padding: 2rem; text-align: center; color: #666; font-size: 0.85rem; } /* === Responsive === */ @media (max-width: 768px) { header { flex-direction: column; gap: 0.5rem; } nav { width: 100%; justify-content: center; } main { padding: 1rem; } .video-card-values { grid-template-columns: repeat(2, 1fr); } .form-grid { grid-template-columns: 1fr; } .stats-summary { grid-template-columns: repeat(2, 1fr); } .library-layout { grid-template-columns: 1fr; } .library-nav { position: static; max-height: none; } .library-filters { position: static; max-height: none; } .td-name { max-width: 150px; } .series-grid { grid-template-columns: 1fr; } .movie-grid { grid-template-columns: 1fr; } .cast-grid { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); } .artwork-gallery { grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); } .lib-section-header { flex-direction: column; align-items: flex-start; } }