+ |
+
+
+ Timezone
+
+ |
+
+ {appSettingsLoading ? (
+
+
+ Loading…
+
+ ) : (
+
+ setTzSearch(e.target.value)}
+ placeholder="Filter timezones…"
+ aria-label="Filter timezone list"
+ style={{
+ width: '100%',
+ padding: 'var(--space-2) var(--space-3)',
+ borderRadius: 'var(--radius-md)',
+ border: '1px solid var(--border)',
+ backgroundColor: 'var(--bg-main)',
+ color: 'var(--text-primary)',
+ fontSize: 'var(--font-size-sm)',
+ }}
+ />
+
+
+ )}
+ |
+
+ {/* Theme toggle */}
+
+ |
+ Theme
+ |
+
+
+
+
+
+ |
+
diff --git a/src/frontend/src/styles/theme.css b/src/frontend/src/styles/theme.css
index a7eb58e..ce232f1 100644
--- a/src/frontend/src/styles/theme.css
+++ b/src/frontend/src/styles/theme.css
@@ -97,3 +97,57 @@
--glass-bg: rgba(20, 22, 30, 0.6);
--glass-border: rgba(255, 255, 255, 0.08);
}
+
+/* ── Light Theme ── */
+[data-theme="light"] {
+ /* ── Backgrounds ── */
+ --bg-main: #f5f5f8;
+ --bg-sidebar: #ebedf2;
+ --bg-card: rgba(255, 255, 255, 0.9);
+ --bg-card-solid: #ffffff;
+ --bg-input: #ffffff;
+ --bg-hover: rgba(0, 0, 0, 0.04);
+ --bg-selected: rgba(0, 0, 0, 0.06);
+ --bg-header: #f0f1f5;
+ --bg-toolbar: #f0f1f5;
+ --bg-modal-overlay: rgba(0, 0, 0, 0.3);
+ --bg-glass: rgba(255, 255, 255, 0.7);
+
+ /* ── Accent ── */
+ --accent: #d14836;
+ --accent-hover: #c03c2b;
+ --accent-subtle: rgba(209, 72, 54, 0.08);
+ --accent-glow: rgba(209, 72, 54, 0.15);
+
+ /* ── Text ── */
+ --text-primary: #1a1c24;
+ --text-secondary: #5a5d6b;
+ --text-muted: #9397a5;
+ --text-inverse: #f5f5f8;
+ --text-link: #d14836;
+
+ /* ── Status colors ── */
+ --success: #1e8e3e;
+ --success-bg: rgba(30, 142, 62, 0.08);
+ --warning: #e37400;
+ --warning-bg: rgba(227, 116, 0, 0.08);
+ --danger: #d93025;
+ --danger-bg: rgba(217, 48, 37, 0.08);
+ --info: #d14836;
+ --info-bg: rgba(209, 72, 54, 0.08);
+
+ /* ── Borders ── */
+ --border: rgba(0, 0, 0, 0.08);
+ --border-light: rgba(0, 0, 0, 0.12);
+ --border-accent: rgba(209, 72, 54, 0.25);
+
+ /* ── Shadows ── */
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06);
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1);
+ --shadow-lg: 0 8px 30px rgba(0, 0, 0, 0.12);
+ --shadow-glow: 0 0 20px rgba(209, 72, 54, 0.1);
+
+ /* ── Glassmorphism ── */
+ --glass-bg: rgba(255, 255, 255, 0.7);
+ --glass-border: rgba(0, 0, 0, 0.06);
+}
diff --git a/src/server/routes/system.ts b/src/server/routes/system.ts
index c6e07b0..02db44a 100644
--- a/src/server/routes/system.ts
+++ b/src/server/routes/system.ts
@@ -18,6 +18,8 @@ import {
APP_CONCURRENT_DOWNLOADS,
APP_OUTPUT_TEMPLATE,
APP_NFO_ENABLED,
+ APP_TIMEZONE,
+ APP_THEME,
YTDLP_LAST_UPDATED,
} from '../../db/repositories/system-config-repository';
import { getYtDlpVersion, updateYtDlp } from '../../sources/yt-dlp';
@@ -118,13 +120,15 @@ export async function systemRoutes(fastify: FastifyInstance): Promise