From 96bcbd13d77cdd98ff6c453ab18bceb2fbb96ffb Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Sat, 23 May 2026 16:17:47 +0200 Subject: [PATCH] =?UTF-8?q?Ember-Theme:=20warmer=20Amber-Akzent=20auf=20k?= =?UTF-8?q?=C3=BChlem=20Navy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Redesign-Entscheid des Users (siehe design-mockups/): Aurora-Flavor "Ember". Re-Skin der Dark+Light-Theme-Variablen + hartcodierte Cyan-Stellen: - --accent Cyan #38bdf8 -> Amber #f2942d, neue --accent-2 Koral #ff7a5c - Surfaces/Text/Muted leicht ins Warme verschoben (Warm-Kalt-Spannung: Amber-Signal auf kühlem Navy bleibt erhalten) - Download-Progress Cyan-Gradient -> Amber->Koral (3 Stellen) - Accent-Button + Border -> Amber - Speed-Chart (App.tsx Canvas) Akzent -> Amber - Grün (Entpacken/Online/Erfolg) bleibt semantisch unverändert Bewusst KEINE Glas-/Glow-/Gradient-Mesh-Effekte (User lehnt KI-Look ab) — nur die warme Farbwelt auf der bestehenden flachen Struktur. design-mockups/: 4 Erst-Richtungen + Aurora-Flavor-Switcher + Forge (Referenz). tasks/todo.md: Bug-/Feature-Analyse (3 parallele Subagents). Co-Authored-By: Claude Opus 4.7 --- design-mockups/aurora-flavors.html | 361 +++++++++++ design-mockups/aurora.html | 345 ++++++++++ design-mockups/command.html | 297 +++++++++ design-mockups/forge.html | 289 +++++++++ design-mockups/index.html | 95 +++ design-mockups/nebula.html | 333 ++++++++++ design-mockups/vellum.html | 298 +++++++++ src/renderer/App.tsx | 4 +- src/renderer/styles.css | 980 +++++++++++++++-------------- tasks/todo.md | 58 ++ 10 files changed, 2569 insertions(+), 491 deletions(-) create mode 100644 design-mockups/aurora-flavors.html create mode 100644 design-mockups/aurora.html create mode 100644 design-mockups/command.html create mode 100644 design-mockups/forge.html create mode 100644 design-mockups/index.html create mode 100644 design-mockups/nebula.html create mode 100644 design-mockups/vellum.html create mode 100644 tasks/todo.md diff --git a/design-mockups/aurora-flavors.html b/design-mockups/aurora-flavors.html new file mode 100644 index 0000000..6b11051 --- /dev/null +++ b/design-mockups/aurora-flavors.html @@ -0,0 +1,361 @@ + + + + + +Aurora Flavors — Real-Debrid-Downloader + + + + + + +
+ +
+ Aurora Flavor +
Teal
+
Indigo
+
Emerald
+
Ember
+
Ice
+ Klick zum Wechseln · Tasten 1–5 · Pakete ausklappbar +
+ + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Geschwindigkeit
48.2 MB/s
+
Verbleibend
02:14 min
+
Aktiv
8 / 24
+
+
+ + +
+
Downloads 5
+
Linksammler
+
Einstellungen
+
Verlauf
+
Statistiken
+
+ + +
+
Name
Geladen / Größe
Fortschritt
Hoster
Service
Priorität
Status
Tempo
+
+
+
+
Ugly.Americans.S02.COMPLETE.German.DL.720p.WEB-DL.h264-NERDS
10 Dateien · 14.2 GB
+
8.9 / 14.2 GB
+
63%
+
mega
+
Mega-Debrid
+
HOCH
+
↓ 6/10 läuft
+
48 MB/s
+
+
+
…h264-NERDS.part1.rar
2.0 / 2.0 GB
mega
✓ Fertig
+
…h264-NERDS.part2.rar
2.0 / 2.0 GB
mega
✓ Fertig
+
…h264-NERDS.part3.rar
1.4 / 2.0 GB
mega
↓ 70%
26 MB/s
+
…h264-NERDS.part4.rar
0.8 / 2.0 GB
mega
↓ 40%
22 MB/s
+
…h264-NERDS.part5.rar
0 / 1.1 GB
mega
Wartet
+
+
+
+
+
The.Bear.S03.German.DL.1080p.WEB.h264-WvF
8 Dateien · 11.6 GB
+
11.6 / 11.6 GB
+
Entpacken 82%
+
rapidgator
+
Real-Debrid
+
+
⚙ Entpacken
+
+
+
+
+
+
Dune.Part.Two.2024.German.DL.2160p.UHD.BluRay.x265-NERDS
1 Datei · 18.4 GB → Library
+
18.4 / 18.4 GB
+
100%
+
ddownload
+
AllDebrid
+
+
✓ Abgeschlossen
+
+
+
+
+
+
Shogun.S01E05.German.DL.1080p.WEB.h264-EDITION
Hoster nicht verfügbar · Link tot
+
0 / 2.4 GB
+
Fehler
+
uploaded
+
+
+
✗ Fehlgeschlagen
+
+
+
+
+
+
Severance.S02.COMPLETE.German.DL.1080p.ATVP.WEB.h265-NERDS
10 Dateien · 22.1 GB
+
0 / 22.1 GB
+
In Warteschlange
+
mega
+
Mega-Debrid
+
+
Wartet
+
+
+
+
+
+ + +
+
Läuft
+
Queue: 5 Pakete · 34 Dateien
+
Heute geladen: 147 GB
+
+
Gesamt-Fortschritt
62%
+
+
+ + + diff --git a/design-mockups/aurora.html b/design-mockups/aurora.html new file mode 100644 index 0000000..7481b7e --- /dev/null +++ b/design-mockups/aurora.html @@ -0,0 +1,345 @@ + + + + + +Aurora — Real-Debrid-Downloader Mockup + + + + + + +
+ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Geschwindigkeit
48.2 MB/s
+
Verbleibend
02:14 min
+
Aktiv
8 / 24
+
+
+ + +
+
+ + Downloads 5 +
+
Linksammler
+
Einstellungen
+
Verlauf
+
Statistiken
+
+ + +
+
+
Name
Geladen / Größe
Fortschritt
Hoster
Service
Priorität
Status
Tempo
+
+
+ + +
+
+
+ +
+
Ugly.Americans.S02.COMPLETE.German.DL.720p.WEB-DL.h264-NERDS
10 Dateien · 14.2 GB
+
+
8.9 / 14.2 GB
+
63%
+
mega
+
Mega-Debrid
+
HOCH
+
↓ 6/10 läuft
+
48 MB/s
+
+
+
…h264-NERDS.part1.rar
2.0 / 2.0 GB
mega
✓ Fertig
+
…h264-NERDS.part2.rar
2.0 / 2.0 GB
mega
✓ Fertig
+
…h264-NERDS.part3.rar
1.4 / 2.0 GB
mega
↓ 70%
26 MB/s
+
…h264-NERDS.part4.rar
0.8 / 2.0 GB
mega
↓ 40%
22 MB/s
+
…h264-NERDS.part5.rar
0 / 1.1 GB
mega
Wartet
+
+
+ + +
+
+
+ +
+
The.Bear.S03.German.DL.1080p.WEB.h264-WvF
8 Dateien · 11.6 GB
+
+
11.6 / 11.6 GB
+
Entpacken 82%
+
rapidgator
+
Real-Debrid
+
+
⚙ Entpacken
+
+
+
+ + +
+
+
+ +
+
Dune.Part.Two.2024.German.DL.2160p.UHD.BluRay.x265-NERDS
1 Datei · 18.4 GB → Library
+
+
18.4 / 18.4 GB
+
100%
+
ddownload
+
AllDebrid
+
+
✓ Abgeschlossen
+
+
+
+ + +
+
+
+ +
+
Shogun.S01E05.German.DL.1080p.WEB.h264-EDITION
Hoster nicht verfügbar · Link tot
+
+
0 / 2.4 GB
+
Fehler
+
uploaded
+
+
+
✗ Fehlgeschlagen
+
+
+
+ + +
+
+
+ +
+
Severance.S02.COMPLETE.German.DL.1080p.ATVP.WEB.h265-NERDS
10 Dateien · 22.1 GB
+
+
0 / 22.1 GB
+
In Warteschlange
+
mega
+
Mega-Debrid
+
+
Wartet
+
+
+
+ +
+
+ + +
+
Läuft
+
Queue: 5 Pakete · 34 Dateien
+
Heute geladen: 147 GB
+
+
Gesamt-Fortschritt
62%
+
+
+ + + diff --git a/design-mockups/command.html b/design-mockups/command.html new file mode 100644 index 0000000..b1ab721 --- /dev/null +++ b/design-mockups/command.html @@ -0,0 +1,297 @@ + + + + + +Command — Real-Debrid-Downloader Mockup + + + + + + +
+ +
+ +
+
+
+
+
+
+
+
+ +
+ +
+
rdd ::downloads
+
~/queue · 5 pkg
+
+
DL 48.2 MB/s
+
ETA 02:14
+
SLOTS 8/24
+
running
+
+ + +
+
START
+
PAUSE
+
STOP
+
+
SCHED
+
+
+
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NAMEGELADEN/GRÖSSEFORTSCHRITTHOSTERSERVICEPRIOSTATUSTEMPO
[S]
Ugly.Americans.S02.COMPLETE.German.DL.720p.WEB-DL.h264-NERDS
10 files · 14.2 GB
8.9/14.2 GB
63%
mega
Mega-Debrid
HIGH
● 6/10 DL
48 MB/s
…NERDS.part1.rar
2.0/2.0
100%
mega
✓ ok
…NERDS.part2.rar
2.0/2.0
100%
mega
✓ ok
…NERDS.part3.rar
1.4/2.0
70%
mega
● DL
26 MB/s
…NERDS.part4.rar
0.8/2.0
40%
mega
● DL
22 MB/s
…NERDS.part5.rar
0/1.1
0%
mega
queued
[S]
The.Bear.S03.German.DL.1080p.WEB.h264-WvF
8 files · 11.6 GB
11.6/11.6 GB
EXT 82%
rapidgator
Real-Debrid
⚙ entpacken
[M]
Dune.Part.Two.2024.German.DL.2160p.UHD.BluRay.x265-NERDS
1 file · 18.4 GB → library
18.4/18.4 GB
100%
ddownload
AllDebrid
✓ done
[!]
Shogun.S01E05.German.DL.1080p.WEB.h264-EDITION
hoster_unavailable · link tot
0/2.4 GB
ERR
uploaded
✗ failed
[S]
Severance.S02.COMPLETE.German.DL.1080p.ATVP.WEB.h265-NERDS
10 files · 22.1 GB
0/22.1 GB
0%
mega
Mega-Debrid
queued
+
+ + +
+
RUNNING
+
queue: 5 pkg / 34 files
+
today: 147 GB
+
disk: 1.54 TB free
+
+
total 62%
+
+
+
+ + + diff --git a/design-mockups/forge.html b/design-mockups/forge.html new file mode 100644 index 0000000..91698d7 --- /dev/null +++ b/design-mockups/forge.html @@ -0,0 +1,289 @@ + + + + + +Forge — Real-Debrid-Downloader + + + + + + +
+ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
Tempo
48.2 MB/s
+
Verbleibend
02:14
+
Aktiv
8/24
+
+
+ + +
+
Downloads 5
+
Linksammler
+
Einstellungen
+
Verlauf
+
Statistiken
+
+ + +
+
Name
Geladen / Größe
Fortschritt
Hoster
Service
Prio
Status
Tempo
+
+ +
+
+
Ugly.Americans.S02.COMPLETE.German.DL.720p.WEB-DL.h264-NERDS
10 Dateien · 14.2 GB
+
8.9 / 14.2 GB
+
63 %
+
mega
+
Mega-Debrid
+
HOCH
+
6/10 lädt
+
48 MB/s
+
+
+
…h264-NERDS.part1.rar
2.0 / 2.0
mega
fertig
+
…h264-NERDS.part2.rar
2.0 / 2.0
mega
fertig
+
…h264-NERDS.part3.rar
1.4 / 2.0
mega
70 %
26 MB/s
+
…h264-NERDS.part4.rar
0.8 / 2.0
mega
40 %
22 MB/s
+
…h264-NERDS.part5.rar
0 / 1.1
mega
wartet
+
+
+ +
+
+
The.Bear.S03.German.DL.1080p.WEB.h264-WvF
8 Dateien · 11.6 GB
+
11.6 / 11.6 GB
+
Entpacken 82 %
+
rapidgator
+
Real-Debrid
+
+
entpacken
+
+
+
+ +
+
+
Dune.Part.Two.2024.German.DL.2160p.UHD.BluRay.x265-NERDS
1 Datei · 18.4 GB → Library
+
18.4 / 18.4 GB
+
100 %
+
ddownload
+
AllDebrid
+
+
abgeschlossen
+
+
+
+ +
+
+
Shogun.S01E05.German.DL.1080p.WEB.h264-EDITION
Hoster nicht verfügbar · Link tot · kein Fallback
+
0 / 2.4 GB
+
Fehler
+
uploaded
+
+
+
fehler
+
+
+
+ +
+
+
Severance.S02.COMPLETE.German.DL.1080p.ATVP.WEB.h265-NERDS
10 Dateien · 22.1 GB
+
0 / 22.1 GB
+
Warteschlange
+
mega
+
Mega-Debrid
+
+
wartet
+
+
+
+ +
+
+ + +
+
LÄUFT
+
Queue: 5 Pakete · 34 Dateien
+
Heute: 147 GB
+
Platte: 1.54 TB frei
+
+
Gesamt
62 %
+
+
+ + + diff --git a/design-mockups/index.html b/design-mockups/index.html new file mode 100644 index 0000000..eb51a1d --- /dev/null +++ b/design-mockups/index.html @@ -0,0 +1,95 @@ + + + + + +Design-Varianten — Real-Debrid-Downloader + + + + + + +
+
Real-Debrid-Downloader · Redesign
+

Vier Design-Richtungen

+
Jede Variante zeigt denselben Downloads-Screen mit identischen Daten — so vergleichst du fair. Klick auf eine Vorschau, um sie in voller Größe zu öffnen. Sag mir danach welche Richtung (oder welche Mischung) dir gefällt.
+
+ +
+
+
+
01
Aurora
Verfeinerte Dark-Evolution
+ Öffnen ↗ +
+
+
Premium & vertraut. Baut auf deinem aktuellen Cyan-Dark auf, aber edler: Glas-Effekt, Aurora-Verlauf, weiche Glows, klarere Status-Badges, Bricolage-Grotesque-Typo. Geringstes Risiko — alles bleibt erkennbar, wirkt nur hochwertiger.
+
+ +
+
+
02
Command
Terminal / Ops-Dashboard
+ Öffnen ↗ +
+
+
Maximale Dichte für Power-User. Linke Icon-Leiste, Monospace, Grid-Linien, segmentierte Block-Progress-Bars, Status-LEDs, scharfe Kanten. Wirkt wie ein NOC/Server-Tool — viel Info auf einen Blick.
+
+ +
+
+
03
Vellum
Light Editorial
+ Öffnen ↗ +
+
+
Mutige helle Alternative. Warmes Papier, Serif-Display (Fraunces), großzügige Abstände, dezente Teal-Akzente. Hebt sich von jedem anderen Downloader ab (die sind alle dunkel). Ruhig, edel, „App-Store-Premium".
+
+ +
+
+
04
Nebula
Neon / Synthwave
+ Öffnen ↗ +
+
+
Auffällig & vibrant. Tiefes Violett-Schwarz, Magenta-Cyan-Verläufe, glühende Progress-Bars, Unbounded-Display-Font, animierte Akzente. Für wenn's knallen soll.
+
+
+ +
+ Hinweis: Die Vorschauen sind live (skaliert auf 50%). Pakete sind anklickbar/ausklappbar wenn du sie in voller Größe öffnest.  ·  + Alle vier nutzen dieselbe Spaltenstruktur (Name · Geladen/Größe · Fortschritt · Hoster · Service · Priorität · Status · Tempo) und Beispieldaten (Ugly Americans S02 lädt, The Bear entpackt, Dune fertig, Shōgun Fehler, Severance wartet). +
+ + diff --git a/design-mockups/nebula.html b/design-mockups/nebula.html new file mode 100644 index 0000000..7a4dac5 --- /dev/null +++ b/design-mockups/nebula.html @@ -0,0 +1,333 @@ + + + + + +Nebula — Real-Debrid-Downloader Mockup + + + + + + +
+ +
+
+
+
DEBRID DOWNLOADER
v1.7.156 · nebula
+
+ +
+
4 Provider aktiv · Mega-Debrid bereit
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tempo
48.2 MB/s
+
Verbleibend
02:14
+
Aktiv
8/24
+
+
+ + +
+
Downloads 5
+
Linksammler
+
Einstellungen
+
Verlauf
+
Statistiken
+
+ + +
+
+
NAME
GELADEN / GRÖSSE
FORTSCHRITT
HOSTER
SERVICE
PRIO
STATUS
TEMPO
+
+
+ + +
+
+
+ +
+
Ugly.Americans.S02.COMPLETE.German.DL.720p.WEB-DL.h264-NERDS
10 Dateien · 14.2 GB
+
+
8.9 / 14.2 GB
+
63%
+
mega
+
Mega-Debrid
+
HIGH
+
◢ 6/10
+
48 MB/s
+
+
+
…NERDS.part1.rar
2.0/2.0
mega
+
…NERDS.part2.rar
2.0/2.0
mega
+
…NERDS.part3.rar
1.4/2.0
mega
◢ 70%
26 MB/s
+
…NERDS.part4.rar
0.8/2.0
mega
◢ 40%
22 MB/s
+
…NERDS.part5.rar
0/1.1
mega
Wartet
+
+
+ + +
+
+
+ +
+
The.Bear.S03.German.DL.1080p.WEB.h264-WvF
8 Dateien · 11.6 GB
+
+
11.6 / 11.6 GB
+
ENTPACKEN 82%
+
rapidgator
+
Real-Debrid
+
+
⚙ Entpacken
+
+
+
+ + +
+
+
+ +
+
Dune.Part.Two.2024.German.DL.2160p.UHD.BluRay.x265-NERDS
1 Datei · 18.4 GB → Library
+
+
18.4 / 18.4 GB
+
100%
+
ddownload
+
AllDebrid
+
+
✓ Fertig
+
+
+
+ + +
+
+
+ +
+
Shogun.S01E05.German.DL.1080p.WEB.h264-EDITION
Hoster nicht verfügbar · Link tot
+
+
0 / 2.4 GB
+
FEHLER
+
uploaded
+
+
+
✗ Fehler
+
+
+
+ + +
+
+
+ +
+
Severance.S02.COMPLETE.German.DL.1080p.ATVP.WEB.h265-NERDS
10 Dateien · 22.1 GB
+
+
0 / 22.1 GB
+
WARTESCHLANGE
+
mega
+
Mega-Debrid
+
+
Wartet
+
+
+
+ +
+
+ + +
+
Läuft
+
Queue: 5 Pakete · 34 Dateien
+
Heute: 147 GB
+
+
Gesamt
62%
+
+
+ + + diff --git a/design-mockups/vellum.html b/design-mockups/vellum.html new file mode 100644 index 0000000..d110c57 --- /dev/null +++ b/design-mockups/vellum.html @@ -0,0 +1,298 @@ + + + + + +Vellum — Real-Debrid-Downloader Mockup + + + + + + +
+ +
+
+
D
+
+
Debrid Downloader
+
Vellum Edition · v1.7.156
+
+
+
+ +
+ + +
+
+ + + +
+
+
Zeitplan
+
Hoch
+
Runter
+
+
+
+
Tempo
48.2 MB/s
+
Verbleibend
02:14
+
Aktiv
8 / 24
+
+
+ + +
+
+
Paket
Geladen / Größe
Fortschritt
Hoster
Service
Status
Tempo
+
+
+ + +
+
+
+ +
1
+
Ugly Americans · Staffel 2
Ugly.Americans.S02.COMPLETE.German.DL.720p.WEB-DL.h264-NERDS · 10 Dateien · 14.2 GB
+
+
8.9 / 14.2 GB
+
63%
+
mega
+
Mega-Debrid
+
Lädt · 6/10
+
48 MB/s
+
+
+
…h264-NERDS.part1.rar
2.0 / 2.0
mega
Fertig
+
…h264-NERDS.part2.rar
2.0 / 2.0
mega
Fertig
+
…h264-NERDS.part3.rar
1.4 / 2.0
mega
70%
26 MB/s
+
…h264-NERDS.part4.rar
0.8 / 2.0
mega
40%
22 MB/s
+
…h264-NERDS.part5.rar
0 / 1.1
mega
Wartet
+
+
+ + +
+
+
+ +
2
+
The Bear · Staffel 3
The.Bear.S03.German.DL.1080p.WEB.h264-WvF · 8 Dateien · 11.6 GB
+
+
11.6 / 11.6 GB
+
82%
+
rapidgator
+
Real-Debrid
+
Entpacken
+
+
+
+ + +
+
+
+ +
3
+
Dune · Part Two
Dune.Part.Two.2024.German.DL.2160p.UHD.BluRay.x265-NERDS · in Library übernommen
+
+
18.4 / 18.4 GB
+
100%
+
ddownload
+
AllDebrid
+
Abgeschlossen
+
+
+
+ + +
+
+
+ +
!
+
Shōgun · S01E05
Hoster nicht verfügbar — Link tot, kein Fallback erfolgreich
+
+
0 / 2.4 GB
+
+
uploaded
+
+
Fehlgeschlagen
+
+
+
+ + +
+
+
+ +
5
+
Severance · Staffel 2
Severance.S02.COMPLETE.German.DL.1080p.ATVP.WEB.h265-NERDS · 10 Dateien · 22.1 GB
+
+
0 / 22.1 GB
+
0%
+
mega
+
Mega-Debrid
+
Wartet
+
+
+
+ +
+
+ + + +
+ + + diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index b7bfb21..a19535e 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -1227,8 +1227,8 @@ const BandwidthChart = memo(function BandwidthChart({ items, running, paused, sp const isDark = document.documentElement.getAttribute("data-theme") !== "light"; const gridColor = isDark ? "rgba(35, 57, 84, 0.5)" : "rgba(199, 213, 234, 0.5)"; const textColor = isDark ? "#90a4bf" : "#4e6482"; - const accentColor = isDark ? "#38bdf8" : "#1168d9"; - const fillColor = isDark ? "rgba(56, 189, 248, 0.15)" : "rgba(17, 104, 217, 0.15)"; + const accentColor = isDark ? "#f2942d" : "#c2701a"; + const fillColor = isDark ? "rgba(242, 148, 45, 0.15)" : "rgba(194, 112, 26, 0.15)"; const history = speedHistoryRef.current; const now = Date.now(); diff --git a/src/renderer/styles.css b/src/renderer/styles.css index 14fd387..a9c11c0 100644 --- a/src/renderer/styles.css +++ b/src/renderer/styles.css @@ -1,15 +1,16 @@ :root { font-family: "Manrope", "Segoe UI Variable", "Segoe UI", sans-serif; - --bg: #040912; - --bg-glow: #10203b; - --surface: #0b1424; - --card: #101d31; - --field: #081120; - --border: #233954; - --text: #e2e8f0; - --muted: #90a4bf; - --accent: #38bdf8; - --danger: #f43f5e; + --bg: #050810; + --bg-glow: #1e1730; + --surface: #0c1322; + --card: #12192c; + --field: #090f1c; + --border: #283447; + --text: #ece6dd; + --muted: #a59c8e; + --accent: #f2942d; + --accent-2: #ff7a5c; + --danger: #f4564b; --button-bg: #0d1a2c; --button-bg-hover: #12243d; --tab-bg: #0b1321; @@ -33,8 +34,9 @@ --field: #ffffff; --border: #c7d5ea; --text: #0f223d; - --muted: #4e6482; - --accent: #1168d9; + --muted: #6b6052; + --accent: #c2701a; + --accent-2: #d9542b; --danger: #c0392b; --button-bg: #f3f7ff; --button-bg-hover: #e6efff; @@ -472,30 +474,30 @@ body, } .btn.accent { - background: linear-gradient(180deg, #56d6ff, #33b9f4); - color: #07111c; - border-color: #41c6f9; + background: linear-gradient(180deg, #f9a948, #e9881f); + color: #1c1206; + border-color: #f0982f; } -.btn.danger { - border-color: rgba(244, 63, 94, 0.7); - color: #fda4af; -} - -.btn.success { - border-color: rgba(74, 222, 128, 0.7); - color: #86efac; -} - -:root[data-theme="light"] .btn.danger { - border-color: color-mix(in srgb, var(--danger) 60%, transparent); - color: var(--danger); -} - -:root[data-theme="light"] .btn.success { - border-color: color-mix(in srgb, #16a34a 60%, transparent); - color: #15803d; -} +.btn.danger { + border-color: rgba(244, 63, 94, 0.7); + color: #fda4af; +} + +.btn.success { + border-color: rgba(74, 222, 128, 0.7); + color: #86efac; +} + +:root[data-theme="light"] .btn.danger { + border-color: color-mix(in srgb, var(--danger) 60%, transparent); + color: var(--danger); +} + +:root[data-theme="light"] .btn.success { + border-color: color-mix(in srgb, #16a34a 60%, transparent); + color: #15803d; +} .btn.btn-active { border-color: var(--accent); @@ -753,7 +755,7 @@ body, top: 0; left: 0; height: 100%; - background: linear-gradient(90deg, #3bc9ff, #22d3ee); + background: linear-gradient(90deg, #f2942d, #ff7a5c); border-radius: 4px; transition: width 0.15s ease; } @@ -1202,32 +1204,32 @@ body, font-size: 13px; } -.account-table { - display: grid; - gap: 8px; - --account-col-service: 220px; - --account-col-mode: 96px; - --account-col-status: 300px; - --account-col-info: 220px; - --account-col-secret: 180px; - --account-col-actions: 560px; - width: 100%; -} - -.account-table-head, -.account-row { - display: grid; - grid-template-columns: - minmax(130px, var(--account-col-service)) - minmax(72px, var(--account-col-mode)) - minmax(140px, var(--account-col-status)) - minmax(160px, var(--account-col-info)) - minmax(180px, var(--account-col-secret)) - minmax(420px, var(--account-col-actions)); - gap: 10px; - align-items: center; - width: 100%; -} +.account-table { + display: grid; + gap: 8px; + --account-col-service: 220px; + --account-col-mode: 96px; + --account-col-status: 300px; + --account-col-info: 220px; + --account-col-secret: 180px; + --account-col-actions: 560px; + width: 100%; +} + +.account-table-head, +.account-row { + display: grid; + grid-template-columns: + minmax(130px, var(--account-col-service)) + minmax(72px, var(--account-col-mode)) + minmax(140px, var(--account-col-status)) + minmax(160px, var(--account-col-info)) + minmax(180px, var(--account-col-secret)) + minmax(420px, var(--account-col-actions)); + gap: 10px; + align-items: center; + width: 100%; +} .account-table-head { padding: 6px 12px; @@ -1239,12 +1241,12 @@ body, align-items: center; } -.account-table-head > *:nth-child(n+2) { - border-left: 2px solid color-mix(in srgb, var(--border) 60%, transparent); - padding-left: 10px; - padding-right: 10px; - box-sizing: border-box; -} +.account-table-head > *:nth-child(n+2) { + border-left: 2px solid color-mix(in srgb, var(--border) 60%, transparent); + padding-left: 10px; + padding-right: 10px; + box-sizing: border-box; +} .account-header-cell { position: relative; @@ -1303,16 +1305,16 @@ body, justify-content: center; } -.account-row > .account-cell:nth-child(n+2) { - border-left: 2px solid color-mix(in srgb, var(--border) 60%, transparent); - padding-left: 10px; - padding-right: 10px; - box-sizing: border-box; -} +.account-row > .account-cell:nth-child(n+2) { + border-left: 2px solid color-mix(in srgb, var(--border) 60%, transparent); + padding-left: 10px; + padding-right: 10px; + box-sizing: border-box; +} -.account-row > .account-cell.account-row-actions { - justify-content: center; -} +.account-row > .account-cell.account-row-actions { + justify-content: center; +} .account-service-cell { display: grid; @@ -1321,29 +1323,29 @@ body, align-content: center; } -.account-status-cell { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: center; - gap: 4px 8px; -} +.account-status-cell { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + gap: 4px 8px; +} -.account-info-cell { - display: flex; - align-items: center; - justify-content: center; - min-width: 0; -} - -.account-usage-stack { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 4px; - min-width: 0; -} +.account-info-cell { + display: flex; + align-items: center; + justify-content: center; + min-width: 0; +} + +.account-usage-stack { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 4px; + min-width: 0; +} .account-service-cell strong { font-size: 14px; @@ -1355,18 +1357,18 @@ body, line-height: 1.4; } -.account-note { - display: block; - width: 100%; - color: var(--muted); - font-size: 11px; - max-width: 100%; - min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - text-align: center; -} +.account-note { + display: block; + width: 100%; + color: var(--muted); + font-size: 11px; + max-width: 100%; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-align: center; +} .account-usage-stats { display: flex; @@ -1383,15 +1385,15 @@ body, margin-right: 4px; } -.account-usage-stats.warning { - color: color-mix(in srgb, #f59e0b 78%, white 8%); -} - -.account-usage-total { - color: var(--muted); - font-size: 11px; - white-space: nowrap; -} +.account-usage-stats.warning { + color: color-mix(in srgb, #f59e0b 78%, white 8%); +} + +.account-usage-total { + color: var(--muted); + font-size: 11px; + white-space: nowrap; +} .account-mode-pill, .account-status-pill { @@ -1453,57 +1455,57 @@ body, white-space: nowrap; } -.account-row-actions { - display: flex; - justify-content: center; - align-items: center; - gap: 6px; - flex-wrap: nowrap; - align-content: center; - text-align: center; - padding-left: 10px; - padding-right: 10px; - min-width: 0; - overflow: hidden; -} +.account-row-actions { + display: flex; + justify-content: center; + align-items: center; + gap: 6px; + flex-wrap: nowrap; + align-content: center; + text-align: center; + padding-left: 10px; + padding-right: 10px; + min-width: 0; + overflow: hidden; +} -.account-row-actions .btn { - padding: 5px 8px; - font-size: 11px; - white-space: nowrap; - min-width: 82px; - justify-content: center; -} +.account-row-actions .btn { + padding: 5px 8px; + font-size: 11px; + white-space: nowrap; + min-width: 82px; + justify-content: center; +} .account-row-disabled { opacity: 0.65; } -.account-row-disabled .account-row-actions { - opacity: 1; -} - -.account-display-actions { - display: flex; - justify-content: flex-end; - margin: -2px 0 10px; -} - - -.key-stats-popup { - width: min(1360px, calc(100vw - 20px)); - max-width: min(1360px, calc(100vw - 20px)); - max-height: calc(100vh - 24px); - overflow: hidden; - display: flex; - flex-direction: column; - gap: 12px; -} - -.modal-card.key-stats-popup { - width: min(1360px, calc(100vw - 20px)); - max-width: min(1360px, calc(100vw - 20px)); -} +.account-row-disabled .account-row-actions { + opacity: 1; +} + +.account-display-actions { + display: flex; + justify-content: flex-end; + margin: -2px 0 10px; +} + + +.key-stats-popup { + width: min(1360px, calc(100vw - 20px)); + max-width: min(1360px, calc(100vw - 20px)); + max-height: calc(100vh - 24px); + overflow: hidden; + display: flex; + flex-direction: column; + gap: 12px; +} + +.modal-card.key-stats-popup { + width: min(1360px, calc(100vw - 20px)); + max-width: min(1360px, calc(100vw - 20px)); +} .key-stats-popup-header { display: flex; @@ -1527,10 +1529,10 @@ body, color: #f59e0b; } -.key-stats-popup .account-subkey-table { - overflow-y: auto; - max-height: calc(100vh - 140px); -} +.key-stats-popup .account-subkey-table { + overflow-y: auto; + max-height: calc(100vh - 140px); +} .account-subkey-table { margin-top: 6px; @@ -1540,14 +1542,14 @@ body, font-size: 11px; } -.account-subkey-table-head, -.account-subkey-table-row { - display: grid; - grid-template-columns: 24px minmax(340px, 1fr) 72px 96px 180px 110px 168px; - align-items: center; - padding: 3px 8px; - gap: 10px; -} +.account-subkey-table-head, +.account-subkey-table-row { + display: grid; + grid-template-columns: 24px minmax(340px, 1fr) 72px 96px 180px 110px 168px; + align-items: center; + padding: 3px 8px; + gap: 10px; +} .account-subkey-table-head { background: color-mix(in srgb, var(--field) 90%, transparent); @@ -1560,19 +1562,19 @@ body, padding: 4px 8px; } -.account-subkey-table-head .col-usage, -.account-subkey-table-head .col-limit, -.account-subkey-table-head .col-status, -.account-subkey-table-head .col-traffic, -.account-subkey-table-head .col-links, -.account-subkey-table-row .col-usage, -.account-subkey-table-row .col-limit, -.account-subkey-table-row .col-status, -.account-subkey-table-row .col-traffic, -.account-subkey-table-row .col-links { - text-align: right; - justify-self: center; -} +.account-subkey-table-head .col-usage, +.account-subkey-table-head .col-limit, +.account-subkey-table-head .col-status, +.account-subkey-table-head .col-traffic, +.account-subkey-table-head .col-links, +.account-subkey-table-row .col-usage, +.account-subkey-table-row .col-limit, +.account-subkey-table-row .col-status, +.account-subkey-table-row .col-traffic, +.account-subkey-table-row .col-links { + text-align: right; + justify-self: center; +} .account-subkey-table-row { border-bottom: 1px solid color-mix(in srgb, var(--border) 30%, transparent); @@ -1582,96 +1584,96 @@ body, border-bottom: none; } -.account-subkey-table-row.warning { - background: color-mix(in srgb, #f59e0b 8%, transparent); -} - -.account-subkey-table-row.disabled { - background: color-mix(in srgb, var(--field) 45%, transparent); -} +.account-subkey-table-row.warning { + background: color-mix(in srgb, #f59e0b 8%, transparent); +} + +.account-subkey-table-row.disabled { + background: color-mix(in srgb, var(--field) 45%, transparent); +} .account-subkey-table-row .col-key { font-weight: 600; color: var(--muted); } -.account-subkey-table-row .col-masked { - font-family: "JetBrains Mono", "Consolas", monospace; - color: var(--muted); - overflow: hidden; - text-overflow: ellipsis; +.account-subkey-table-row .col-masked { + font-family: "JetBrains Mono", "Consolas", monospace; + color: var(--muted); + overflow: hidden; + text-overflow: ellipsis; white-space: nowrap; - min-width: 0; -} - -.account-subkey-table-row .col-masked.link-popup-click { - display: block; -} + min-width: 0; +} -.account-subkey-table-row .col-usage { - text-align: center; -} - -.account-subkey-table-row .col-limit { - text-align: center; - color: var(--muted); -} - -.account-subkey-table-row .col-status { - text-align: center; -} - -.account-subkey-table-row .col-traffic, -.account-subkey-table-row .col-links { - text-align: center; - color: var(--muted); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.account-subkey-table-row .col-action { - display: flex; - justify-content: flex-end; - gap: 6px; -} +.account-subkey-table-row .col-masked.link-popup-click { + display: block; +} -.account-subkey-table-row .col-action .btn { - padding: 1px 6px; - font-size: 10px; -} - -.status-pill { - display: inline-flex; - align-items: center; - justify-content: center; - min-width: 88px; - padding: 2px 8px; - border-radius: 999px; - font-size: 10px; - font-weight: 600; - letter-spacing: 0.02em; -} - -.status-pill-ok { - color: #166534; - background: color-mix(in srgb, #22c55e 16%, transparent); -} - -.status-pill-warn { - color: #92400e; - background: color-mix(in srgb, #f59e0b 18%, transparent); -} - -.status-pill-bad { - color: #991b1b; - background: color-mix(in srgb, #ef4444 14%, transparent); -} - -.status-pill-muted { - color: var(--muted); - background: color-mix(in srgb, var(--field) 80%, transparent); -} +.account-subkey-table-row .col-usage { + text-align: center; +} + +.account-subkey-table-row .col-limit { + text-align: center; + color: var(--muted); +} + +.account-subkey-table-row .col-status { + text-align: center; +} + +.account-subkey-table-row .col-traffic, +.account-subkey-table-row .col-links { + text-align: center; + color: var(--muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.account-subkey-table-row .col-action { + display: flex; + justify-content: flex-end; + gap: 6px; +} + +.account-subkey-table-row .col-action .btn { + padding: 1px 6px; + font-size: 10px; +} + +.status-pill { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 88px; + padding: 2px 8px; + border-radius: 999px; + font-size: 10px; + font-weight: 600; + letter-spacing: 0.02em; +} + +.status-pill-ok { + color: #166534; + background: color-mix(in srgb, #22c55e 16%, transparent); +} + +.status-pill-warn { + color: #92400e; + background: color-mix(in srgb, #f59e0b 18%, transparent); +} + +.status-pill-bad { + color: #991b1b; + background: color-mix(in srgb, #ef4444 14%, transparent); +} + +.status-pill-muted { + color: var(--muted); + background: color-mix(in srgb, var(--field) 80%, transparent); +} .btn-sm { padding: 3px 8px; @@ -1748,28 +1750,28 @@ body, margin-bottom: 10px; } -.provider-order-row { - display: flex; - align-items: center; - gap: 10px; - padding: 7px 10px; - border-radius: 8px; - background: rgba(255, 255, 255, 0.04); - border: 1px solid var(--border); - cursor: grab; - transition: border-color 0.12s ease, background 0.12s ease, transform 0.12s ease; -} - -.provider-order-row.dragging { - opacity: 0.6; - cursor: grabbing; -} - -.provider-order-row.drag-target { - border-color: color-mix(in srgb, var(--accent) 65%, var(--border)); - background: color-mix(in srgb, var(--accent) 10%, rgba(255, 255, 255, 0.04)); - transform: translateY(-1px); -} +.provider-order-row { + display: flex; + align-items: center; + gap: 10px; + padding: 7px 10px; + border-radius: 8px; + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--border); + cursor: grab; + transition: border-color 0.12s ease, background 0.12s ease, transform 0.12s ease; +} + +.provider-order-row.dragging { + opacity: 0.6; + cursor: grabbing; +} + +.provider-order-row.drag-target { + border-color: color-mix(in srgb, var(--accent) 65%, var(--border)); + background: color-mix(in srgb, var(--accent) 10%, rgba(255, 255, 255, 0.04)); + transform: translateY(-1px); +} .provider-order-num { font-size: 0.8rem; @@ -2108,26 +2110,26 @@ body, padding: 6px 10px; } -.queue-package-card { - border: 0; - border-radius: 0; - background: transparent; - padding: 0; - box-shadow: none; - border-bottom: 1px solid color-mix(in srgb, var(--border) 54%, transparent); -} - -.queue-package-card.pkg-stripe-a { - background: color-mix(in srgb, var(--surface) 18%, transparent); -} - -.queue-package-card.pkg-stripe-b { - background: color-mix(in srgb, var(--card) 24%, transparent); -} - -.queue-package-card:hover { - background: color-mix(in srgb, var(--accent) 3%, transparent); -} +.queue-package-card { + border: 0; + border-radius: 0; + background: transparent; + padding: 0; + box-shadow: none; + border-bottom: 1px solid color-mix(in srgb, var(--border) 54%, transparent); +} + +.queue-package-card.pkg-stripe-a { + background: color-mix(in srgb, var(--surface) 18%, transparent); +} + +.queue-package-card.pkg-stripe-b { + background: color-mix(in srgb, var(--card) 24%, transparent); +} + +.queue-package-card:hover { + background: color-mix(in srgb, var(--accent) 3%, transparent); +} .package-card[draggable="true"] { cursor: grab; @@ -2268,7 +2270,7 @@ body, .progress-dl { height: 100%; - background: linear-gradient(90deg, #3bc9ff, #22d3ee); + background: linear-gradient(90deg, #f2942d, #ff7a5c); } .progress-ex { @@ -2277,38 +2279,38 @@ body, } /* History Tab */ -.history-view { - display: flex; - flex-direction: column; - gap: 6px; - height: 100%; - min-height: 0; - overflow: auto; - padding-right: 2px; -} - -.history-toolbar { - display: flex; - align-items: center; - flex-wrap: wrap; - justify-content: space-between; - gap: 12px; - padding: 5px 12px; - background: var(--card); - border: 1px solid var(--border); - border-radius: 8px; - font-size: 12px; - font-weight: 700; - color: var(--muted); -} - -.history-toolbar-actions { - display: flex; - align-items: center; - justify-content: flex-end; - gap: 8px; - margin-left: auto; -} +.history-view { + display: flex; + flex-direction: column; + gap: 6px; + height: 100%; + min-height: 0; + overflow: auto; + padding-right: 2px; +} + +.history-toolbar { + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: space-between; + gap: 12px; + padding: 5px 12px; + background: var(--card); + border: 1px solid var(--border); + border-radius: 8px; + font-size: 12px; + font-weight: 700; + color: var(--muted); +} + +.history-toolbar-actions { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 8px; + margin-left: auto; +} .history-card { cursor: default; @@ -2528,113 +2530,113 @@ td { min-height: 0; } -.stats-overview { - grid-column: span 2; -} - -.stats-actions { - display: flex; - flex-wrap: wrap; - gap: 10px; - margin-top: 10px; -} - -.stats-sections { - display: flex; - flex-direction: column; - gap: 14px; - margin-top: 14px; -} - -.stats-section { - display: flex; - flex-direction: column; - gap: 10px; -} - -.stats-section-title { - color: var(--muted); - font-size: 11px; - font-weight: 700; - letter-spacing: 0.12em; - text-transform: uppercase; -} - -.stats-grid { - display: grid; - grid-template-columns: repeat(6, minmax(0, 1fr)); - gap: 12px; -} - -.stat-item { - display: flex; - flex-direction: column; - justify-content: space-between; - gap: 12px; - min-height: 96px; - min-width: 0; - padding: 12px 14px; - background: var(--field); - border-radius: 10px; - border: 1px solid var(--border); - text-align: left; -} - -.stat-button { - width: 100%; - font: inherit; - color: inherit; - appearance: none; - cursor: default; -} - -.stat-top { - display: flex; - flex-direction: column; - gap: 3px; - min-width: 0; -} - -.stat-eyebrow { - color: var(--muted); - font-size: 10px; - font-weight: 700; - letter-spacing: 0.1em; - text-transform: uppercase; -} - -.stat-item.stat-item-clickable { - cursor: pointer; - transition: border-color 0.15s, transform 0.15s ease; -} -.stat-item.stat-item-clickable:hover { - border-color: var(--danger, #e05555); - transform: translateY(-1px); -} - -.stat-label { - color: var(--text); - font-size: 14px; - font-weight: 600; - line-height: 1.25; -} - -.stat-value { - font-size: clamp(22px, 1.35vw, 30px); - font-weight: 700; - font-variant-numeric: tabular-nums; - line-height: 1.1; - overflow-wrap: anywhere; -} - -.stat-value.stat-value-compact { - font-size: clamp(18px, 1.05vw, 24px); - line-height: 1.2; -} - -.stat-value.danger { - color: var(--danger); -} +.stats-overview { + grid-column: span 2; +} + +.stats-actions { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin-top: 10px; +} + +.stats-sections { + display: flex; + flex-direction: column; + gap: 14px; + margin-top: 14px; +} + +.stats-section { + display: flex; + flex-direction: column; + gap: 10px; +} + +.stats-section-title { + color: var(--muted); + font-size: 11px; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +.stats-grid { + display: grid; + grid-template-columns: repeat(6, minmax(0, 1fr)); + gap: 12px; +} + +.stat-item { + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 12px; + min-height: 96px; + min-width: 0; + padding: 12px 14px; + background: var(--field); + border-radius: 10px; + border: 1px solid var(--border); + text-align: left; +} + +.stat-button { + width: 100%; + font: inherit; + color: inherit; + appearance: none; + cursor: default; +} + +.stat-top { + display: flex; + flex-direction: column; + gap: 3px; + min-width: 0; +} + +.stat-eyebrow { + color: var(--muted); + font-size: 10px; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.stat-item.stat-item-clickable { + cursor: pointer; + transition: border-color 0.15s, transform 0.15s ease; +} +.stat-item.stat-item-clickable:hover { + border-color: var(--danger, #e05555); + transform: translateY(-1px); +} + +.stat-label { + color: var(--text); + font-size: 14px; + font-weight: 600; + line-height: 1.25; +} + +.stat-value { + font-size: clamp(22px, 1.35vw, 30px); + font-weight: 700; + font-variant-numeric: tabular-nums; + line-height: 1.1; + overflow-wrap: anywhere; +} + +.stat-value.stat-value-compact { + font-size: clamp(18px, 1.05vw, 24px); + line-height: 1.2; +} + +.stat-value.danger { + color: var(--danger); +} .stats-chart-card { min-height: 280px; @@ -2709,7 +2711,7 @@ td { } .bar-fill.completed { - background: linear-gradient(90deg, #3bc9ff, #22d3ee); + background: linear-gradient(90deg, #f2942d, #ff7a5c); } .provider-detail { @@ -2725,42 +2727,42 @@ td { font-size: 13px; } -@media (max-width: 1680px) { - .stats-grid { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } -} - -@media (max-width: 1100px) { - .statistics-view { - grid-template-columns: 1fr; - grid-template-rows: auto auto auto; - } - - .stats-overview { - grid-column: span 1; - } - - .stats-grid { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } -} - -@media (max-width: 760px) { - .stats-grid { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .stat-item { - min-height: 88px; - } -} - -@media (max-width: 520px) { - .stats-grid { - grid-template-columns: 1fr; - } -} +@media (max-width: 1680px) { + .stats-grid { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } +} + +@media (max-width: 1100px) { + .statistics-view { + grid-template-columns: 1fr; + grid-template-rows: auto auto auto; + } + + .stats-overview { + grid-column: span 1; + } + + .stats-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } +} + +@media (max-width: 760px) { + .stats-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .stat-item { + min-height: 88px; + } +} + +@media (max-width: 520px) { + .stats-grid { + grid-template-columns: 1fr; + } +} .schedule-row { display: grid; diff --git a/tasks/todo.md b/tasks/todo.md new file mode 100644 index 0000000..efafff3 --- /dev/null +++ b/tasks/todo.md @@ -0,0 +1,58 @@ +# Real-Debrid-Downloader — Analyse & Verbesserungen (2026-05-23) + +Tiefe Analyse via 3 parallele Subagents (Bugs / Features / UI) + 4 Design-Mockups. + +--- + +## A. BUGS / ROBUSTHEIT (verifiziert gegen Quellcode) + +Roter Faden: Die **Deferred-Post-Processing-Pipeline** (eingeführt um den Extract-Slot schnell freizugeben) ist nur halb ins Abbruch-/Lifecycle-Management integriert. Genau der Bereich des v1.7.156-Fixes. + +### HOCH +- [ ] **H1 — Globaler Stop/Shutdown bricht Deferred-Post-Processing nicht ab.** `abortPostProcessing` (download-manager.ts:7053) iteriert nur über `packagePostProcessAbortControllers`, nie über `packageDeferredPostProcessAbortControllers`. Bei Stop/Shutdown/clearAll laufen MKV-Move/Archiv-Cleanup/Rename weiter, während synchron persistiert wird → FS-Zustand ≠ Session-State (halb verschobene Datei, halb gelöschtes Archiv). +- [ ] **H2 — Hybrid-Post-Extract feuert MKV-Collection/Rename als losgelöstes Promise** (download-manager.ts:11334). In keiner Tracking-Map, kein `shouldAbort`. Cancel/Reset während Hybrid-Collect → Dateien werden trotzdem verschoben/gelöscht. +- [ ] **H3 — 0-Byte-Datei wird als vollständig akzeptiert** wenn keine Größeninfo (download-completion.ts:129, source "stream-end"). Hoster antwortet HTTP 200 ohne Content-Length + schließt sofort → Item "Fertig" mit leerer Datei, kein Auto-Redownload. + +### MITTEL +- [ ] **M1 — Deferred-Post-Extraction nicht in `packagePostProcessTasks`** (download-manager.ts:11974). Scheduler-Abschluss (8154) + finishRun (12310) sehen Deferred-Tasks nicht → Run-Ende/Summary feuert während noch Dateien verschoben werden, State-Reset mitten in FS-Arbeit. +- [ ] **M2 — `blockAllPersistence` wird nach Backup-Import nie zurückgesetzt** (app-controller.ts:678). Weiterarbeiten ohne Neustart → `persistSoon` ist dauerhaft No-Op → bei hartem Crash alle Änderungen weg. +- [ ] **M3 — `cancelPendingAsyncSaves` wartet nicht auf laufenden Async-Save** (storage.ts:1064). I/O-Overlap beim Import (Datenintegrität durch Generation-Guard geschützt, nur Robustheit). + +### NIEDRIG +- [ ] **N1 — Toter Code in `findReadyArchiveSets`** (download-manager.ts:10847). Unbedingtes `ready.add+continue` macht strengeren Disk-Fallback-Block (untracked-pending-Schutz) unerreichbar. + +**Empfehlung:** H1 + H2 + M1 zusammen fixen (eine kohärente Härtung der Deferred-Pipeline). H3 ist klein & unabhängig. M2 trivial. + +--- + +## B. FEATURES / UX-GAPS (nach Mehrwert/Aufwand) + +App läuft headless auf Windows-Server → Nutzer sitzt nicht davor. Größte Lücke: keine Benachrichtigungen. + +1. [ ] **Webhook/Push-Benachrichtigungen** (Discord/Telegram/ntfy) — S–M. Bei Paket fertig/Fehler/Quota/Provider-down aufs Handy. Neuer `notifier.ts`, Hooks an Completion-Punkten. **Höchster ROI.** +2. [ ] **Fernsteuerung über bestehenden Debug-Server** (POST-Endpunkte) — S–M. Server hat schon HTTP + Token-Auth, aber nur GET. POST `/control/add-links`, `/start`, `/stop` → vom Handy steuern. +3. [ ] **URL-Duplikat-Erkennung beim Hinzufügen** — S. History-`urls` existiert, wird aber nie geprüft → versehentliche Re-Downloads verschwenden Quota. Warnen: "3 Links bereits geladen". +4. [ ] **Vereinheitlichter Pre-Flight-Check + Bulk-Skip toter Links** — M. Vor Start Größe/Name/Online für ganze Queue, "alle offline überspringen"-Button. +5. [ ] **Speicherplatz-Vorabprüfung vor Start** — S. Aktuell keine Free-Space-Prüfung → Abbruch mitten im Download bei voller Platte. +6. [ ] **Konsolidierte Fehler-Ansicht** — M. Alle fehlgeschlagenen Items flach + Fehlertext + "alle erneut versuchen". +7. [ ] **Per-Provider-Statistik** — M. Rohdaten (`providerTotalUsageBytes`) existieren, werden nur nicht dargestellt. Welches Abo lohnt sich? +8. [ ] **Auto-Retry fehlgeschlagener Pakete nach Wartezeit** — S–M. Quota/Cooldown-Fails am nächsten Tag automatisch neu versuchen. +9. [ ] **Plex/Jellyfin Library-Refresh nach MKV-Move** — S. Neue Folgen sofort sichtbar. Gleicher Hook wie #1. +10. [ ] **Watch-Folder für DLC/Link-Auto-Import** — M. Ordner überwachen → automatisch importieren+starten. + +--- + +## C. DESIGN-MOCKUPS + +4 Varianten in `design-mockups/` (index.html = Vergleich): +1. **Aurora** — verfeinerte Dark-Evolution (premium, vertraut, geringstes Risiko) +2. **Command** — Terminal/Ops-Dashboard (max. Dichte, Monospace, Status-LEDs) +3. **Vellum** — Light Editorial (warmes Papier, Serif, mutige helle Alternative) +4. **Nebula** — Neon/Synthwave (Magenta-Cyan-Glow, auffällig) + +→ Nutzer wählt Richtung (oder Mischung). + +--- + +## REVIEW / ERGEBNISSE +(wird nach Umsetzung gefüllt)