/** * Theme Toggle Functionality * Handles dark/light mode switching with system preference detection and localStorage persistence */ (function() { 'use strict'; // Get theme toggle button and icon elements const themeToggle = document.getElementById('theme-toggle'); const themeIcon = document.getElementById('theme-icon'); // Function to get system preference function getSystemPreference() { return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; } // Function to get stored theme or system preference function getTheme() { const stored = localStorage.getItem('theme'); if (stored === 'dark' || stored === 'light') { return stored; } return getSystemPreference(); } // Function to set theme function setTheme(theme) { const root = document.documentElement; if (theme === 'dark') { root.setAttribute('data-theme', 'dark'); localStorage.setItem('theme', 'dark'); if (themeIcon) { themeIcon.className = 'fa-solid fa-sun'; } } else { root.removeAttribute('data-theme'); localStorage.setItem('theme', 'light'); if (themeIcon) { themeIcon.className = 'fa-solid fa-moon'; } } } // Function to toggle theme function toggleTheme() { const currentTheme = document.documentElement.getAttribute('data-theme'); const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; setTheme(newTheme); } // Initialize theme on page load function initTheme() { const theme = getTheme(); setTheme(theme); } // Set initial theme immediately to prevent flash initTheme(); // Add click event listener to toggle button if (themeToggle) { themeToggle.addEventListener('click', toggleTheme); } // Listen for system preference changes if (window.matchMedia) { const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); mediaQuery.addEventListener('change', function(e) { // Only update if user hasn't manually set a preference if (!localStorage.getItem('theme')) { setTheme(e.matches ? 'dark' : 'light'); } }); } })();