diff --git a/apps/web/src/components/theme-toggle.tsx b/apps/web/src/components/theme-toggle.tsx
index 8302a19c6..b1a5bfc45 100644
--- a/apps/web/src/components/theme-toggle.tsx
+++ b/apps/web/src/components/theme-toggle.tsx
@@ -1,25 +1,43 @@
-"use client";
-
-import { Button } from "./ui/button";
-import { Sun, Moon } from "lucide-react";
-import { useTheme } from "next-themes";
-
-interface ThemeToggleProps {
- className?: string;
-}
-
-export function ThemeToggle({ className }: ThemeToggleProps) {
- const { theme, setTheme } = useTheme();
-
- return (
-
- );
-}
+"use client";
+
+import { useState, useEffect } from "react";
+import { Button } from "./ui/button";
+import { Sun, Moon } from "lucide-react";
+import { useTheme } from "next-themes";
+
+interface ThemeToggleProps {
+ className?: string;
+}
+
+export function ThemeToggle({ className }: ThemeToggleProps) {
+ const { resolvedTheme, setTheme } = useTheme();
+ const [mounted, setMounted] = useState(false);
+
+ useEffect(() => setMounted(true), []);
+
+ if (!mounted) {
+ return null; // prevents hydration mismatch
+ }
+
+ const isDark = resolvedTheme === "dark";
+
+ return (
+
+ );
+}