// Shared functionality document.addEventListener('DOMContentLoaded', () => { // Scroll animations const animateOnScroll = () => { const elements = document.querySelectorAll('.scroll-animate'); elements.forEach(el => { const elTop = el.getBoundingClientRect().top; const isVisible = (elTop - window.innerHeight) < -100; if (isVisible && !el.classList.contains('animate-fade-in')) { el.classList.add('animate-fade-in'); } }); }; window.addEventListener('scroll', animateOnScroll); animateOnScroll(); // Run once on load // Theme switcher const themeToggle = document.getElementById('theme-toggle'); if (themeToggle) { themeToggle.addEventListener('click', () => { document.documentElement.classList.toggle('dark'); localStorage.setItem('theme', document.documentElement.classList.contains('dark') ? 'dark' : 'light'); }); } }); // API Client class AIForgeAPI { constructor() { this.baseUrl = 'https://api.aiforge.com/v1'; } async getTemplates(category) { const response = await fetch(`${this.baseUrl}/templates?category=${category}`); return response.json(); } async createProject(config) { const response = await fetch(`${this.baseUrl}/projects`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${localStorage.getItem('token')}` }, body: JSON.stringify(config) }); return response.json(); } }