| | |
| | 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'); |
| | } |
| | }); |