const wordmark = document.getElementById('wordmark'); if (wordmark) { document.addEventListener('mousemove', (e) => { const cx = window.innerWidth / 2; const cy = window.innerHeight / 2; const dx = (e.clientX - cx) / cx; const dy = (e.clientY - cy) / cy; wordmark.style.transform = `perspective(800px) rotateX(${-dy * 5}deg) rotateY(${dx * 5}deg)`; }); document.addEventListener('mouseleave', () => { wordmark.style.transform = ''; }); } const THEME_KEY = 'theme'; const themeToggle = document.querySelector('.theme-toggle'); function setTheme(theme) { document.documentElement.setAttribute('data-theme', theme); if (themeToggle) { themeToggle.setAttribute('aria-pressed', theme === 'dark' ? 'true' : 'false'); themeToggle.innerHTML = theme === 'dark' ? '' : ''; } } function initTheme() { const savedTheme = localStorage.getItem(THEME_KEY); if (savedTheme) { setTheme(savedTheme); return; } const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; setTheme(prefersDark ? 'dark' : 'light'); } if (themeToggle) { initTheme(); themeToggle.addEventListener('click', () => { const isDark = document.documentElement.getAttribute('data-theme') === 'dark'; const nextTheme = isDark ? 'light' : 'dark'; setTheme(nextTheme); localStorage.setItem(THEME_KEY, nextTheme); }); } else { initTheme(); }