// Theme Context const ThemeContext = React.createContext({ theme: 'dark', toggleTheme: () => {} }); function ThemeProvider({ children }) { const [theme, setTheme] = React.useState(() => { try { return localStorage.getItem('ofuq.theme') || window.__OFUQ_THEME__ || 'dark'; } catch(e) { return 'dark'; } }); const toggleTheme = React.useCallback(() => { setTheme(prev => { const next = prev === 'dark' ? 'light' : 'dark'; try { localStorage.setItem('ofuq.theme', next); } catch(e) {} if (next === 'light') { document.documentElement.classList.add('light'); } else { document.documentElement.classList.remove('light'); } return next; }); }, []); // Sync on mount React.useEffect(() => { if (theme === 'light') { document.documentElement.classList.add('light'); } else { document.documentElement.classList.remove('light'); } }, []); return ( {children} ); } function useTheme() { return React.useContext(ThemeContext); } // Sun icon function SunIcon() { return ( ); } // Moon icon function MoonIcon() { return ( ); } // The toggle button component used in the header function ThemeToggle() { const { theme, toggleTheme } = useTheme(); const isLight = theme === 'light'; return ( ); } window.ThemeProvider = ThemeProvider; window.useTheme = useTheme; window.ThemeToggle = ThemeToggle;