diff --git a/web/src/components/layout/header.tsx b/web/src/components/layout/header.tsx index dd724d198..87da60301 100644 --- a/web/src/components/layout/header.tsx +++ b/web/src/components/layout/header.tsx @@ -4,7 +4,7 @@ import Link from "next/link"; import { usePathname } from "next/navigation"; import { useTranslations, useLocale } from "@/lib/i18n"; import { Github, Menu, X, Sun, Moon } from "lucide-react"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import { cn } from "@/lib/utils"; const NAV_ITEMS = [ @@ -24,14 +24,14 @@ export function Header() { const pathname = usePathname(); const locale = useLocale(); const [mobileOpen, setMobileOpen] = useState(false); - const [dark, setDark] = useState(() => { - if (typeof window !== "undefined") { - const stored = localStorage.getItem("theme"); - if (stored) return stored === "dark"; - return window.matchMedia("(prefers-color-scheme: dark)").matches; - } - return false; - }); + const [dark, setDark] = useState(false); + + useEffect(() => { + const stored = localStorage.getItem("theme"); + const isDark = stored ? stored === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches; + setDark(isDark); + document.documentElement.classList.toggle("dark", isDark); + }, []); function toggleDark() { const next = !dark;