export type ThemeMode = "light" | "dark"; export const THEME_STORAGE_KEY = "xunlou-theme"; export function isThemeMode(value: string | null | undefined): value is ThemeMode { return value === "light" || value === "dark"; } export function readStoredTheme(): ThemeMode | null { if (typeof window === "undefined") return null; try { const stored = localStorage.getItem(THEME_STORAGE_KEY); return isThemeMode(stored) ? stored : null; } catch { return null; } } export function applyTheme(mode: ThemeMode) { document.documentElement.setAttribute("data-theme", mode); document.documentElement.style.colorScheme = mode; } export function persistTheme(mode: ThemeMode) { try { localStorage.setItem(THEME_STORAGE_KEY, mode); } catch { /* ignore quota / private mode */ } applyTheme(mode); } export const DEFAULT_THEME: ThemeMode = "light";