import { initParticles } from './particles.js'; import { initHeader } from './header.js'; const SERVICES = [ { id: 'chatbots', title: 'Chatbots & Assistentes', badge: 'Conversacional', description: 'Desenvolvemos interfaces conversacionais inteligentes que entendem contexto, mantêm histórico e oferecem respostas precisas.', features: ['Chatbots com RAG e assistentes virtuais', 'Bots para WhatsApp, Telegram e Discord', 'Memória de longo prazo e personalização', 'Multi-idiomas com tradução automática'], tags: ['RAG', 'Embeddings', 'Vector DB', 'Fine-tuning'], icon: '' }, { id: 'dashboards', title: 'Dashboards & Analytics', badge: 'BI', description: 'Transformamos seus dados em insights acionáveis com dashboards inteligentes, análises preditivas e relatórios automatizados.', features: ['Dashboards interativos e análise preditiva', 'Relatórios automatizados com alertas inteligentes', 'Visualizações customizadas e KPIs em tempo real', 'Integração com múltiplas fontes de dados'], tags: ['SQL', 'Metabase', 'Power BI'], icon: '' }, { id: 'aplicativos', title: 'Aplicativos', badge: 'Mobile & Web', description: 'Desenvolvemos aplicativos mobile e web sob medida, com foco em performance, usabilidade e integração nativa com IA.', features: ['Apps nativos e híbridos (iOS & Android)', 'Progressive Web Apps (PWA)', 'Interfaces responsivas e acessíveis', 'Integração com APIs e serviços de IA'], tags: ['React Native', 'Flutter', 'PWA', 'TypeScript'], icon: '' }, { id: 'integracoes', title: 'Integrações & APIs', badge: 'Enterprise', description: 'Conectamos IA aos seus sistemas existentes (CRM, ERP, e-commerce) através de APIs robustas e integrações enterprise-grade.', features: ['APIs RESTful e GraphQL para consumo de IA', 'Integrações com ERPs e plataformas de e-commerce', 'Autenticação segura e rate limiting', 'Documentação completa e SDKs'], tags: ['REST API', 'GraphQL', 'Webhooks', 'ETL'], icon: '' } ]; function renderServices() { const grid = document.querySelector('.services__grid'); if (!grid) return; SERVICES.forEach((service, i) => { const card = document.createElement('article'); card.className = 'service-card'; card.setAttribute('data-animate', ''); card.style.setProperty('--delay', `${i * 100}ms`); card.innerHTML = `
${service.icon}

${service.title}

${service.badge}

${service.description}

    ${service.features.map(f => `
  • ${f}
  • `).join('')}
${service.tags.map(t => `${t}`).join('')}
`; grid.appendChild(card); }); } document.addEventListener('DOMContentLoaded', () => { initParticles('particles', 15); initHeader(); renderServices(); document.getElementById('scrollDown')?.addEventListener('click', () => { document.getElementById('servicos')?.scrollIntoView({ behavior: 'smooth', block: 'start' }); }); document.getElementById('scrollUp')?.addEventListener('click', () => { document.getElementById('hero')?.scrollIntoView({ behavior: 'smooth', block: 'start' }); }); window.addEventListener('scroll', () => { const scrollDown = document.getElementById('scrollDown'); const scrollUp = document.getElementById('scrollUp'); const hero = document.getElementById('hero'); if (!hero) return; const scrollY = window.scrollY; const heroHeight = hero.offsetHeight; // Scroll Down Visibility (only at the very top) if (scrollDown) { if (scrollY < 20) { scrollDown.style.opacity = '0.8'; scrollDown.style.pointerEvents = 'auto'; } else { scrollDown.style.opacity = '0'; scrollDown.style.pointerEvents = 'none'; } } // Scroll Up Visibility (now handled by DOM position) if (scrollUp) { scrollUp.style.opacity = '0.8'; scrollUp.style.pointerEvents = 'auto'; } }, { passive: true }); document.querySelectorAll('a[href^="#"]').forEach(link => { link.addEventListener('click', (e) => { e.preventDefault(); const target = document.querySelector(link.getAttribute('href')); target?.scrollIntoView({ behavior: 'smooth' }); }); }); const animatedElements = document.querySelectorAll('[data-animate]'); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('animate-in'); observer.unobserve(entry.target); } }); }, { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }); animatedElements.forEach(el => observer.observe(el)); const hamburger = document.getElementById('menuToggle'); const mobileMenu = document.getElementById('mobileMenu'); hamburger?.addEventListener('click', () => { const isOpen = mobileMenu.classList.toggle('mobile-menu--open'); hamburger.classList.toggle('hamburger--active', isOpen); document.body.style.overflow = isOpen ? 'hidden' : ''; }); mobileMenu?.querySelectorAll('a').forEach(link => { link.addEventListener('click', () => { mobileMenu.classList.remove('mobile-menu--open'); hamburger.classList.remove('hamburger--active'); document.body.style.overflow = ''; }); }); });