- No saved preference → use prefers-color-scheme media query - User clicks toggle → save explicit preference to localStorage - Listen for system theme changes (OS-level toggle) when no explicit preference - applyTheme() helper to keep isDark ref and DOM in sync