// hooks/theme.ts import { useState, useEffect, useCallback } from 'react'; type Theme = 'light' | 'dark'; const STORAGE_KEY = 'theme'; export function useTheme() { const [theme, setTheme] = useState(() => { const stored = typeof window !== 'undefined' ? localStorage.getItem(STORAGE_KEY) : null; if (stored === 'light' || stored === 'dark') { return stored; } if (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches) { return 'dark'; } return 'light'; }); useEffect(() => { const root = document.documentElement; root.setAttribute('data-theme', theme); root.classList.toggle('dark', theme === 'dark'); localStorage.setItem(STORAGE_KEY, theme); }, [theme]); const toggleTheme = useCallback(() => { setTheme(prev => (prev === 'dark' ? 'light' : 'dark')); }, []); return { theme, toggleTheme }; }