export type Theme = "light" | "dark" | "system"; function storage(): Storage | null { if (typeof globalThis === "undefined" || !("localStorage" in globalThis)) return null; const candidate = globalThis.localStorage; if (!candidate || typeof candidate.getItem !== "function" || typeof candidate.setItem !== "function") return null; return candidate; } export function getTheme(): Theme { return (storage()?.getItem("theme") as Theme) || "system"; } export function setTheme(theme: Theme) { storage()?.setItem("theme", theme); applyTheme(theme); } export function applyTheme(theme: Theme) { const prefersDark = typeof globalThis !== "undefined" && typeof globalThis.matchMedia === "function" && globalThis.matchMedia("(prefers-color-scheme: dark)").matches; const isDark = theme === "dark" || (theme === "system" && prefersDark); document.documentElement.classList.toggle("dark", isDark); }