|
|
|
|
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
feather.replace(); |
|
|
|
|
|
|
|
|
const observerOptions = { |
|
|
root: null, |
|
|
rootMargin: '0px', |
|
|
threshold: 0.1 |
|
|
}; |
|
|
|
|
|
const observer = new IntersectionObserver((entries) => { |
|
|
entries.forEach(entry => { |
|
|
if (entry.isIntersecting) { |
|
|
entry.target.classList.add('animate-fade-in'); |
|
|
} |
|
|
}); |
|
|
}, observerOptions); |
|
|
|
|
|
|
|
|
document.querySelectorAll('.feature-card').forEach(card => { |
|
|
card.classList.add('opacity-0'); |
|
|
observer.observe(card); |
|
|
}); |
|
|
|
|
|
|
|
|
const mobileMenuButton = document.querySelector('header button'); |
|
|
const navMenu = document.querySelector('header nav'); |
|
|
|
|
|
if (mobileMenuButton && navMenu) { |
|
|
mobileMenuButton.addEventListener('click', () => { |
|
|
navMenu.classList.toggle('hidden'); |
|
|
navMenu.classList.toggle('flex'); |
|
|
navMenu.classList.toggle('absolute'); |
|
|
navMenu.classList.toggle('top-16'); |
|
|
navMenu.classList.toggle('left-0'); |
|
|
navMenu.classList.toggle('w-full'); |
|
|
navMenu.classList.toggle('bg-gray-800'); |
|
|
navMenu.classList.toggle('py-4'); |
|
|
navMenu.classList.toggle('px-6'); |
|
|
}); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
function toggleTheme() { |
|
|
const html = document.documentElement; |
|
|
if (html.classList.contains('dark')) { |
|
|
html.classList.remove('dark'); |
|
|
localStorage.theme = 'light'; |
|
|
} else { |
|
|
html.classList.add('dark'); |
|
|
localStorage.theme = 'dark'; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', () => { |
|
|
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { |
|
|
document.documentElement.classList.add('dark'); |
|
|
} else { |
|
|
document.documentElement.classList.remove('dark'); |
|
|
} |
|
|
}); |