// Theme cycle: dark → light → forest → coffee (function() { const themes = ['dark', 'light', 'forest', 'coffee']; const icons = { dark: '🌙', light: '☀️', forest: '🌿', coffee: '☕' }; function getStored() { try { return localStorage.getItem('kp-theme'); } catch(e) { return null; } } function setStored(theme) { try { localStorage.setItem('kp-theme', theme); } catch(e) {} } function applyTheme(theme) { document.documentElement.setAttribute('data-theme', theme); setStored(theme); var btn = document.getElementById('theme-toggle'); if (btn) btn.textContent = icons[theme] || '🌙'; } // Init: stored preference, then data-theme attr, then default dark var stored = getStored(); var current = stored || document.documentElement.getAttribute('data-theme') || 'dark'; if (themes.indexOf(current) === -1) current = 'dark'; applyTheme(current); // Toggle document.getElementById('theme-toggle').addEventListener('click', function() { var idx = themes.indexOf(document.documentElement.getAttribute('data-theme')); var next = themes[(idx < 0 ? 0 : idx + 1) % themes.length]; applyTheme(next); }); })(); // Mobile nav toggle document.getElementById('nav-toggle').addEventListener('click', function() { var menu = document.getElementById('nav-menu'); this.classList.toggle('is-active'); menu.classList.toggle('is-active'); }); // Contact form (placeholder) var form = document.getElementById('contact-form'); if (form) { form.addEventListener('submit', function(e) { e.preventDefault(); var status = document.getElementById('form-status'); status.style.display = 'block'; form.querySelector('button[type="submit"]').disabled = true; }); }