'use client'; import { createContext, useContext, useState, useEffect, type ReactNode } from 'react'; type Theme = 'light' | 'dark' | 'system'; interface ThemeState { theme: Theme; setTheme: (t: Theme) => void; } const ThemeContext = createContext({ theme: 'system', setTheme: () => {}, }); export function useTheme() { return useContext(ThemeContext); } export function ThemeProvider({ children }: { children: ReactNode }) { const [theme, setThemeState] = useState('system'); useEffect(() => { const stored = localStorage.getItem('tracker_theme') as Theme | null; if (stored) setThemeState(stored); }, []); useEffect(() => { const root = document.documentElement; if (theme === 'dark') { root.classList.add('dark'); } else if (theme === 'light') { root.classList.remove('dark'); } else { const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; root.classList.toggle('dark', prefersDark); } }, [theme]); const setTheme = (t: Theme) => { setThemeState(t); localStorage.setItem('tracker_theme', t); }; return {children}; }