diff --git a/app/components/layout/Header.vue b/app/components/layout/Header.vue
index 369b29ea..45dd38cd 100644
--- a/app/components/layout/Header.vue
+++ b/app/components/layout/Header.vue
@@ -1,4 +1,6 @@
+
+
+
+
diff --git a/app/composables/useTheme.ts b/app/composables/useTheme.ts
new file mode 100644
index 00000000..f028d4c6
--- /dev/null
+++ b/app/composables/useTheme.ts
@@ -0,0 +1,31 @@
+import { ref, watchEffect } from 'vue'
+
+const THEME_KEY = 'theme-mode'
+
+export function useTheme() {
+ const theme = ref<'light' | 'dark'>(getInitialTheme())
+
+ function getInitialTheme() {
+ if (typeof window === 'undefined') return 'light'
+ const persisted = localStorage.getItem(THEME_KEY)
+ if (persisted === 'dark' || persisted === 'light') return persisted
+ // fallback: system preference
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
+ }
+
+ function setTheme(newTheme: 'light' | 'dark') {
+ theme.value = newTheme
+ localStorage.setItem(THEME_KEY, newTheme)
+ document.documentElement.classList.toggle('dark', newTheme === 'dark')
+ }
+
+ function toggleTheme() {
+ setTheme(theme.value === 'dark' ? 'light' : 'dark')
+ }
+
+ watchEffect(() => {
+ setTheme(theme.value)
+ })
+
+ return { theme, toggleTheme }
+}