diff --git a/packages/react/src/html/ui/hooks/useTheme.mjs b/packages/react/src/html/ui/hooks/useTheme.mjs
index 3ed562d16..f7ee009a8 100644
--- a/packages/react/src/html/ui/hooks/useTheme.mjs
+++ b/packages/react/src/html/ui/hooks/useTheme.mjs
@@ -29,10 +29,14 @@ const applySystemTheme = () => applyTheme('system');
* @returns {['system'|'light'|'dark', (next: 'system'|'light'|'dark') => void]}
*/
export const useTheme = () => {
- // Read stored preference once on mount; default to 'system'.
- const [pref, setPref] = useState(() =>
- server ? 'system' : (localStorage.getItem('theme') ?? 'system')
- );
+ const [pref, setPref] = useState('system');
+
+ useEffect(() => {
+ const stored = localStorage.getItem('theme');
+ if (stored === 'light' || stored === 'dark') {
+ setPref(stored);
+ }
+ }, []);
// Apply theme on every preference change, and if 'system',
// also listen for OS-level color scheme changes.