7a85ec73ed
Restructure the theme architecture so 'light', 'dark', and 'system' are builtin themes with build-time colors (customizable by self-hosters), while 'black', 'pink', and future themes become presets that apply to a single 'custom' theme slot. Key changes: - Theme type is now 'light' | 'dark' | 'system' | 'custom' - builtinThemes (light/dark) and themePresets (black/pink/etc.) are separate maps in themes.ts - AppConfig gains optional customTheme (ThemeTokens) field - useTheme exposes applyCustomTheme(tokens) for applying presets - Custom theme tokens sync across devices via encrypted settings - Backward compat: legacy 'black'/'pink' values in localStorage and encrypted settings auto-migrate to custom + preset tokens - All UI surfaces updated: ThemeSelector, LeftSidebar dropdown, MobileDrawer cycle, and onboarding ThemeStep