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