export const THEME_STORAGE_KEY = 'nexus-theme'; export type ThemePreference = 'light' | 'dark' | 'system'; export type ResolvedTheme = 'light' | 'dark'; export function getSystemTheme(): ResolvedTheme { if (typeof window === 'undefined') return 'dark'; return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; } export function resolveTheme(preference: ThemePreference): ResolvedTheme { if (preference === 'system') return getSystemTheme(); return preference; } export function applyTheme(preference: ThemePreference) { const resolved = resolveTheme(preference); const root = document.documentElement; root.classList.toggle('dark', resolved === 'dark'); root.dataset.theme = resolved; root.style.colorScheme = resolved; } export function readStoredTheme(): ThemePreference { if (typeof window === 'undefined') return 'dark'; const stored = window.localStorage.getItem(THEME_STORAGE_KEY); if (stored === 'light' || stored === 'dark' || stored === 'system') return stored; return 'dark'; }