diff --git a/docker/ui/src/pages/Dashboard.tsx b/docker/ui/src/pages/Dashboard.tsx
index 7e807e8..7de4d0f 100644
--- a/docker/ui/src/pages/Dashboard.tsx
+++ b/docker/ui/src/pages/Dashboard.tsx
@@ -1,5 +1,5 @@
import { useEffect, useState } from 'react'
-import { Cpu, HardDrive, Disc, Download, Trash2, Activity, Film, Server, RotateCcw, FileSpreadsheet, List, LayoutGrid } from 'lucide-react'
+import { Cpu, HardDrive, Disc, Download, Trash2, Activity, Film, Server, RotateCcw, FileSpreadsheet } from 'lucide-react'
import { api } from '../lib/api'
import { useToast } from '../context/ToastContext'
import { Card, CardHeader, CardTitle, CardContent } from '../components/ui/Card'
@@ -9,8 +9,6 @@ import ConfirmDialog from '../components/ConfirmDialog'
import DeviceDiscovery from '../components/DeviceDiscovery'
import JobDetailModal from '../components/JobDetailModal'
import LiveLogSection from '../components/LiveLogSection'
-import { HeroCinemaBanner } from '../components/HeroCinemaBanner'
-import { RadialProgress } from '../components/ui/RadialProgress'
interface JobMeta {
year?: number
@@ -145,21 +143,16 @@ export default function Dashboard() {
return (
- {/* 1. Top Hero Cinema Showcase (5 Kacheln vollständig ausgefüllt) */}
-
setDetailJobId(id)}
- onCancelClick={id => api.post(`/jobs/${id}/cancel`).catch(() => {})}
- />
+ {/* 1. GANZ OBEN: Laufwerke & Erkannte Disc im Laufwerk (Akira / Auto Pre-Scan Banner) */}
+
- {/* 2. Main 2-Column Grid Layout (SC1 Mockup Bereich) */}
+ {/* 2. MAIN 2-COLUMN GRID LAYOUT (EXAKT NACH SC1 MOCKUP) */}
{/* LEFT COLUMN (lg:col-span-7) */}
- {/* Current Job Card */}
+ {/* Current Job Card (SC1 Left Top) */}
@@ -218,28 +211,49 @@ export default function Dashboard() {
- {/* Ripping Queue Card */}
+ {/* Ripping Queue Card (EXAKT NACH SC1 MOCKUP METHODIK) */}
Ripping Queue ({queueJobs.length})
-
- {queueJobs.length === 0 ? (
-
- Warteschlange ist leer (0 Jobs eingereiht)
-
- ) : (
-
- {queueJobs.map((j, idx) => (
-
-
- {idx + 1}.
- {j.title || 'Unbekannt'}
-
-
-
Wartend
+
+ {queueJobs.length > 0 ? (
+ queueJobs.map((j, idx) => (
+
+
+ {posterUrl(j.meta) ? (
+
!})
+ ) : (
+
+
+
+ )}
+
{idx + 2}.
+
{j.title || 'Unbekannt'}
+
- ))}
+
+ Queue {idx + 1}
+
+
+ ))
+ ) : (
+ /* SC1 Styled Queue List slots (sauberes SC1 Queue Layout ohne hässliches Loch) */
+
+
+
+ 2.
+ Bereit für nächste Disc...
+
+
Queue 1
+
+
+
+ 3.
+ Bereit für nächste Disc...
+
+
Queue 2
+
)}
@@ -311,10 +325,10 @@ export default function Dashboard() {
- {/* Recently Ripped Card */}
+ {/* Recently Ripped Card (SC1 Right Bottom) */}
- Zuletzt gerippt ({completedJobs.length})
+ Recently Ripped ({completedJobs.length})
{completedJobs.length > 0 && (
- {/* 3. Laufwerke & Disc-Erkennung (Device Discovery Slot) */}
-
-
- {/* 4. VOLLSTÄNDIGE JOB-TABELLE & MEDIEN-BIBLIOTHEK (AUS DEM ALTEN DESIGN + METADATEN/BESCHREIBUNGEN) */}
+ {/* 3. VOLLSTÄNDIGE JOB-TABELLE & MEDIEN-BIBLIOTHEK (MIT INHALTSANGABEN / BESCHREIBUNGEN) */}
@@ -379,7 +390,6 @@ export default function Dashboard() {
- {/* Filter Pills */}
{(['all', 'active', 'completed', 'failed'] as const).map((f) => (