// Dark Mode Toggle function toggleDarkMode() { const body = document.documentElement; const isDark = body.getAttribute('data-theme') === 'dark'; const toggle = document.getElementById('darkModeToggle'); if (isDark) { body.removeAttribute('data-theme'); localStorage.setItem('theme', 'light'); toggle.innerHTML = ''; } else { body.setAttribute('data-theme', 'dark'); localStorage.setItem('theme', 'dark'); toggle.innerHTML = ''; } } // Load saved theme preference function loadTheme() { const savedTheme = localStorage.getItem('theme'); const toggle = document.getElementById('darkModeToggle'); if (savedTheme === 'dark') { document.documentElement.setAttribute('data-theme', 'dark'); if (toggle) { toggle.innerHTML = ''; } } } // Sidebar toggle for mobile function toggleSidebar() { const sidebar = document.getElementById('sidebar'); sidebar.classList.toggle('open'); } // Close sidebar when clicking outside on mobile document.addEventListener('click', function(event) { const sidebar = document.getElementById('sidebar'); const toggle = document.getElementById('sidebarToggle'); if (window.innerWidth <= 768) { if (!sidebar.contains(event.target) && !toggle.contains(event.target)) { sidebar.classList.remove('open'); } } }); // Auto-dismiss flash messages document.addEventListener('DOMContentLoaded', function() { // Load theme preference loadTheme(); const alerts = document.querySelectorAll('.alert-dismissible'); alerts.forEach(function(alert) { setTimeout(function() { if (alert.parentElement) { alert.style.opacity = '0'; alert.style.transition = 'opacity 0.3s ease'; setTimeout(function() { if (alert.parentElement) { alert.remove(); } }, 300); } }, 5000); }); }); // Confirm delete actions document.querySelectorAll('[data-confirm]').forEach(function(el) { el.addEventListener('click', function(e) { if (!confirm(this.getAttribute('data-confirm'))) { e.preventDefault(); } }); });