// Theme toggle functionality document.addEventListener('DOMContentLoaded', () => { const themeToggle = document.getElementById('theme-toggle'); const html = document.documentElement; // Check for saved theme preference or use system preference const savedTheme = localStorage.getItem('theme') || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); html.classList.add(savedTheme); // Update toggle state if (themeToggle) { themeToggle.checked = savedTheme === 'dark'; } // Theme toggle event if (themeToggle) { themeToggle.addEventListener('change', () => { const newTheme = themeToggle.checked ? 'dark' : 'light'; html.classList.remove('light', 'dark'); html.classList.add(newTheme); localStorage.setItem('theme', newTheme); }); } // Initialize tooltips const tooltipTriggers = document.querySelectorAll('[data-tooltip]'); tooltipTriggers.forEach(el => { el.addEventListener('mouseenter', showTooltip); el.addEventListener('mouseleave', hideTooltip); }); }); function showTooltip(e) { const tooltipText = this.getAttribute('data-tooltip'); const tooltip = document.createElement('div'); tooltip.className = 'absolute z-50 px-3 py-2 text-sm text-white bg-gray-800 dark:bg-gray-700 rounded-md shadow-lg whitespace-nowrap'; tooltip.textContent = tooltipText; const rect = this.getBoundingClientRect(); tooltip.style.top = `${rect.top - 40}px`; tooltip.style.left = `${rect.left + rect.width / 2 - tooltip.offsetWidth / 2}px`; document.body.appendChild(tooltip); this.tooltip = tooltip; } function hideTooltip() { if (this.tooltip) { this.tooltip.remove(); this.tooltip = null; } }