refactor: split modules and harden scraping workflows

This commit is contained in:
ShukeBta
2026-06-24 11:59:18 +08:00
parent efca3cbe69
commit 192f35d9fa
470 changed files with 47957 additions and 33839 deletions
+165 -4
View File
@@ -4,9 +4,71 @@
html, body, #root { height: 100%; }
:root {
--app-bg: #f9fafb;
--app-panel: #ffffff;
--app-panel-soft: #f9fafb;
--app-header-bg: rgba(255, 255, 255, 0.82);
--app-control-bg: rgba(249, 250, 251, 0.72);
--app-hover: #f3f4f6;
--app-active-bg: #111827;
--app-active-text: #ffffff;
--app-active-icon: #c9954a;
--app-command-bg: #111827;
--app-command-text: #ffffff;
--app-tooltip-bg: #111827;
--app-tooltip-text: #ffffff;
--app-brand-soft: rgba(255, 248, 231, 0.9);
--app-brand-text: #9a6a1e;
--app-brand-border: rgba(234, 214, 182, 0.9);
--app-brand-emphasis: rgba(201, 149, 74, 0.18);
--app-danger-soft: rgba(254, 242, 242, 0.9);
--app-text: #111827;
--app-subtle: #374151;
--app-muted: #6b7280;
--app-border: rgba(229, 231, 235, 0.82);
--app-shadow: rgba(17, 24, 39, 0.08);
--app-hero-bg: radial-gradient(circle at 80% 20%, rgba(212, 175, 55, 0.22), transparent 34%), linear-gradient(135deg, #fff7ed, #f8fafc 52%, #eef2ff);
--app-hero-overlay: linear-gradient(90deg, #ffffff 0%, rgba(255,255,255,0.96) 37%, rgba(255,255,255,0.62) 68%, rgba(255,255,255,0.2) 100%);
--app-hero-fade: linear-gradient(to top, #ffffff, transparent);
--app-poster-shell: #ffffff;
--app-poster-empty: linear-gradient(135deg, #f9fafb, #fff7ed);
}
:root[data-theme='dark'] {
--app-bg: #070a0f;
--app-panel: #0f141d;
--app-panel-soft: #111827;
--app-header-bg: rgba(15, 20, 29, 0.86);
--app-control-bg: rgba(17, 24, 39, 0.72);
--app-hover: #1f2937;
--app-active-bg: #1f2937;
--app-active-text: #f9fafb;
--app-active-icon: #e3b56d;
--app-command-bg: #f9fafb;
--app-command-text: #0b1018;
--app-tooltip-bg: #f9fafb;
--app-tooltip-text: #0b1018;
--app-brand-soft: rgba(201, 149, 74, 0.14);
--app-brand-text: #e3b56d;
--app-brand-border: rgba(201, 149, 74, 0.34);
--app-brand-emphasis: rgba(201, 149, 74, 0.18);
--app-danger-soft: rgba(127, 29, 29, 0.22);
--app-text: #f9fafb;
--app-subtle: #d1d5db;
--app-muted: #9ca3af;
--app-border: rgba(55, 65, 81, 0.82);
--app-shadow: rgba(0, 0, 0, 0.45);
--app-hero-bg: radial-gradient(circle at 78% 18%, rgba(201, 149, 74, 0.18), transparent 34%), linear-gradient(135deg, #0b1018, #101826 54%, #171f2d);
--app-hero-overlay: linear-gradient(90deg, rgba(7,10,15,0.98) 0%, rgba(15,20,29,0.92) 42%, rgba(15,20,29,0.62) 70%, rgba(15,20,29,0.24) 100%);
--app-hero-fade: linear-gradient(to top, #0f141d, transparent);
--app-poster-shell: #141b26;
--app-poster-empty: linear-gradient(135deg, #111827, #1f2937);
}
body {
background-color: #f9fafb; /* Premium Swiss Editorial Light/Slate Background */
color: #111827; /* Deep Graphite Charcoal Body Text */
background-color: var(--app-bg);
color: var(--app-text);
margin: 0;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
@@ -15,7 +77,7 @@ body {
/* ─── Selection ─── */
::selection {
background: rgba(201, 149, 74, 0.2);
color: #111827;
color: var(--app-text);
}
/* ─── Focus Ring ─── */
@@ -31,6 +93,77 @@ body {
::-webkit-scrollbar-thumb { background: #e5e7eb; border-radius: 999px; }
::-webkit-scrollbar-thumb:hover { background: #c9954a; }
:root[data-theme='dark'] ::-webkit-scrollbar-thumb { background: #374151; }
:root[data-theme='dark'] .bg-white,
:root[data-theme='dark'] .bg-gray-50,
:root[data-theme='dark'] .bg-gray-50\/50,
:root[data-theme='dark'] .bg-gray-50\/70,
:root[data-theme='dark'] .bg-white\/80,
:root[data-theme='dark'] .bg-white\/82,
:root[data-theme='dark'] .bg-white\/85 {
background-color: var(--app-panel) !important;
}
:root[data-theme='dark'] .bg-gray-100,
:root[data-theme='dark'] .bg-gray-100\/50 {
background-color: var(--app-hover) !important;
}
:root[data-theme='dark'] .bg-\[\#f9fafb\] {
background-color: var(--app-bg) !important;
}
:root[data-theme='dark'] .text-gray-900,
:root[data-theme='dark'] .text-gray-950,
:root[data-theme='dark'] .text-\[\#111827\],
:root[data-theme='dark'] .text-ink-600,
:root[data-theme='dark'] .text-ink-500,
:root[data-theme='dark'] .text-ink-400,
:root[data-theme='dark'] .text-ink-300,
:root[data-theme='dark'] .text-ink-200,
:root[data-theme='dark'] .text-ink-100 {
color: var(--app-text) !important;
}
:root[data-theme='dark'] .text-gray-700,
:root[data-theme='dark'] .text-gray-600,
:root[data-theme='dark'] .text-gray-500,
:root[data-theme='dark'] .text-ink-50,
:root[data-theme='dark'] .text-sand-500 {
color: var(--app-muted) !important;
}
:root[data-theme='dark'] .border-gray-100,
:root[data-theme='dark'] .border-gray-200,
:root[data-theme='dark'] .border-gray-200\/50,
:root[data-theme='dark'] .border-gray-200\/60,
:root[data-theme='dark'] .border-gray-200\/80,
:root[data-theme='dark'] .border-gray-200\/90,
:root[data-theme='dark'] .border-gray-300 {
border-color: var(--app-border) !important;
}
:root[data-theme='dark'] .shadow-xl,
:root[data-theme='dark'] .shadow-2xl,
:root[data-theme='dark'] .shadow-md,
:root[data-theme='dark'] .shadow-sm {
box-shadow: 0 18px 50px var(--app-shadow) !important;
}
:root[data-theme='dark'] input,
:root[data-theme='dark'] select,
:root[data-theme='dark'] textarea {
color: var(--app-text) !important;
background-color: var(--app-panel-soft) !important;
border-color: var(--app-border) !important;
}
:root[data-theme='dark'] input::placeholder,
:root[data-theme='dark'] textarea::placeholder {
color: #6b7280;
}
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
@@ -47,6 +180,10 @@ body {
}
@layer components {
.theme-hero-bg { background: var(--app-hero-bg); }
.theme-hero-overlay { background: var(--app-hero-overlay); }
.theme-hero-fade { background: var(--app-hero-fade); }
/* ── Unified Swiss-Editorial Cards ── */
.card {
@apply rounded-2xl bg-white border border-gray-200/80 shadow-[0_1px_3px_rgba(0,0,0,0.01),0_1px_2px_rgba(0,0,0,0.015)] p-4 sm:p-6;
@@ -130,4 +267,28 @@ body {
.neon-button { @apply btn-outline; }
.input-base { @apply input-field; }
.warm-divider { @apply divider; }
}
}
.episode-artwork-toggle {
background-color: var(--app-panel);
border-color: var(--app-border);
color: var(--app-subtle);
}
.episode-artwork-toggle--on,
.episode-artwork-toggle[data-state='on'] {
background-color: var(--app-brand-soft) !important;
border-color: var(--app-brand-border) !important;
color: var(--app-brand-text) !important;
}
.episode-artwork-toggle__icon,
.episode-artwork-toggle__state {
background-color: var(--app-panel-soft);
color: var(--app-muted);
}
.episode-artwork-toggle--on .episode-artwork-toggle__icon,
.episode-artwork-toggle--on .episode-artwork-toggle__state,
.episode-artwork-toggle[data-state='on'] .episode-artwork-toggle__icon,
.episode-artwork-toggle[data-state='on'] .episode-artwork-toggle__state {
background-color: var(--app-brand-emphasis) !important;
color: var(--app-brand-text) !important;
}