/* ============================================ CARGA DE INCLUDES (menu y footer) ============================================ */ async function loadInclude(selector, url) { try { const response = await fetch(url); if (!response.ok) throw new Error(`HTTP ${response.status}`); const html = await response.text(); const container = document.querySelector(selector); if (container) container.innerHTML = html; } catch (error) { console.error(`Error cargando ${url}:`, error); } } /* ============================================ SWITCH DE TEMA (claro por defecto) ============================================ */ function initTheme() { const savedTheme = localStorage.getItem('theme') || 'light'; document.documentElement.setAttribute('data-theme', savedTheme); } function toggleTheme() { const current = document.documentElement.getAttribute('data-theme') || 'light'; const next = current === 'dark' ? 'light' : 'dark'; document.documentElement.setAttribute('data-theme', next); localStorage.setItem('theme', next); } // Ejecutar al cargar la página document.addEventListener('DOMContentLoaded', () => { initTheme(); const themeBtn = document.querySelector('.theme-toggle'); if (themeBtn) { themeBtn.addEventListener('click', toggleTheme); } }); /* ============================================ CALCULAR ANCHO DEL SCROLLBAR ============================================ */ function getScrollbarWidth() { return window.innerWidth - document.documentElement.clientWidth; } function applyScrollbarCompensation() { const scrollbarWidth = getScrollbarWidth(); document.documentElement.style.setProperty('--scrollbar-width', `${scrollbarWidth}px`); } /* ============================================ MENÚ FULLSCREEN ============================================ */ function openMenu() { const menu = document.getElementById('fullscreen-menu'); const overlay = document.getElementById('menu-overlay'); const menuToggle = document.querySelector('.menu-toggle'); if (menu && overlay) { applyScrollbarCompensation(); menu.classList.add('is-open'); overlay.classList.add('is-open'); document.body.classList.add('menu-open'); menuToggle.setAttribute('aria-expanded', 'true'); } } function closeMenu() { const menu = document.getElementById('fullscreen-menu'); const overlay = document.getElementById('menu-overlay'); const menuToggle = document.querySelector('.menu-toggle'); if (menu && overlay) { menu.classList.remove('is-open'); overlay.classList.remove('is-open'); document.body.classList.remove('menu-open'); menuToggle.setAttribute('aria-expanded', 'false'); } } /* ============================================ ACORDEÓN DE SERVICIOS ============================================ */ function initServiciosAccordion() { const accordion = document.getElementById('servicios-accordion'); if (!accordion) { console.log('Acordeón no encontrado'); return; } const items = accordion.querySelectorAll('.servicio-item'); console.log('Items encontrados:', items.length); // Función para activar un item function activateItem(item) { if (item.classList.contains('is-active')) return; accordion.classList.add('has-active'); items.forEach(i => i.classList.remove('is-active')); item.classList.add('is-active'); } // Función para cerrar (volver al estado inicial) function closeAll() { accordion.classList.remove('has-active'); items.forEach(i => i.classList.remove('is-active')); } // Click en cada item para expandirlo items.forEach((item, index) => { console.log(`Agregando listener al item ${index}`); item.addEventListener('click', (e) => { console.log('Click en item:', index); // Si el click fue en el botón cerrar o en un botón CTA, no activar if (e.target.closest('.servicio-close')) { console.log('Click en cerrar'); return; } if (e.target.closest('.btn')) { console.log('Click en botón CTA'); return; } activateItem(item); }); }); // Click en los botones de cerrar const closeButtons = accordion.querySelectorAll('.servicio-close'); closeButtons.forEach((btn, index) => { console.log(`Agregando listener al botón cerrar ${index}`); btn.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); console.log('Botón cerrar clicked'); closeAll(); }); }); } /* ============================================ INICIALIZACIÓN ============================================ */ document.addEventListener('DOMContentLoaded', async () => { // Cargar menú y footer await Promise.all([ loadInclude('#menu-container', 'includes/menu.html'), loadInclude('#footer-container', 'includes/footer.html') ]); // Inicializar tema initTheme(); // Eventos del tema const themeBtn = document.querySelector('.theme-toggle'); if (themeBtn) themeBtn.addEventListener('click', toggleTheme); // Eventos del menú const menuToggle = document.querySelector('.menu-toggle'); const menuClose = document.querySelector('.menu-close'); const menuOverlay = document.getElementById('menu-overlay'); const menuLinks = document.querySelectorAll('.fullscreen-menu a'); if (menuToggle) menuToggle.addEventListener('click', openMenu); if (menuClose) menuClose.addEventListener('click', closeMenu); if (menuOverlay) menuOverlay.addEventListener('click', closeMenu); // Cerrar menú al hacer clic en un enlace menuLinks.forEach(link => { link.addEventListener('click', closeMenu); }); // Cerrar menú con tecla Escape document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeMenu(); }); // Año dinámico en el footer const yearEl = document.getElementById('current-year'); if (yearEl) yearEl.textContent = new Date().getFullYear(); initServiciosAccordion(); initNavbarAutoHide(); }); /* ============================================ DIAGNÓSTICO INTERACTIVO ============================================ */ function initDiagnostico() { // Elementos del DOM const bienvenida = document.getElementById('diagnostico-bienvenida'); const quiz = document.getElementById('diagnostico-quiz'); const resultado = document.getElementById('resultado-contenedor'); const btnComenzar = document.getElementById('btn-comenzar'); const contenedorPreguntas = document.getElementById('cuestionario-contenedor'); const barraCompletado = document.getElementById('progreso-completado'); const textoProgreso = document.getElementById('progreso-texto'); if (!bienvenida || !quiz || !resultado || !btnComenzar) return; // Banco de preguntas const preguntas = [ { id: 1, titulo: '¿En qué etapa se encuentra hoy tu negocio o proyecto?', opciones: [ { texto: 'Creando el proyecto desde cero o formalizando una idea reciente.', valor: 'inicio' }, { texto: 'Negocio activo, pero con una imagen visual que no refleja la calidad de lo que vendo.', valor: 'identidad' }, { texto: 'En pleno movimiento comercial, pero desbordados para contestar consultas a tiempo.', valor: 'automatizacion' }, { texto: 'Establecido y con ventas, pero con un techo de crecimiento que necesitamos romper con publicidad.', valor: 'paid' }, { texto: 'Empresa consolidada que busca liderazgo de mercado y delegar todo su marketing.', valor: 'corporativo' }, { texto: 'Emprendimiento personal que gestiono por mi cuenta y necesito resolver piezas puntuales.', valor: 'consultoria' } ] }, { id: 2, titulo: '¿Cuál es tu mayor desafío actual en marketing?', opciones: [ { texto: 'No tengo una identidad clara ni coherente en mis canales.', valor: 'identidad' }, { texto: 'Tengo redes pero no generan consultas ni ventas reales.', valor: 'redes' }, { texto: 'Mi sitio web está desactualizado o no convierte visitantes en clientes.', valor: 'web' }, { texto: 'No tengo tiempo ni equipo para producir contenido constante.', valor: 'contenido' }, { texto: 'Invierto en pauta pero no sé si estoy llegando a la audiencia correcta.', valor: 'paid' }, { texto: 'No tengo una estrategia clara y voy tomando decisiones sobre la marcha.', valor: 'consultoria' } ] }, { id: 3, titulo: '¿Qué objetivo prioritario tenés para los próximos 6 meses?', opciones: [ { texto: 'Lanzar mi marca con una identidad sólida y profesional.', valor: 'identidad' }, { texto: 'Construir una comunidad activa y fiel en redes sociales.', valor: 'redes' }, { texto: 'Tener un sitio web que venda por mí las 24 horas.', valor: 'web' }, { texto: 'Automatizar procesos para ganar tiempo y escalar.', valor: 'automatizacion' }, { texto: 'Escalar ventas con campañas de publicidad pagada.', valor: 'paid' }, { texto: 'Tener un partner estratégico que me acompañe en las decisiones.', valor: 'consultoria' } ] }, { id: 4, titulo: '¿Cómo describirías tu inversión actual en marketing?', opciones: [ { texto: 'Casi nula o muy básica, recién estoy empezando.', valor: 'inicio' }, { texto: 'Baja, hago algunas cosas por mi cuenta pero me falta estructura.', valor: 'identidad' }, { texto: 'Media, invierto en contenido pero no veo retorno claro.', valor: 'contenido' }, { texto: 'Media-alta, ya tengo equipo o freelancers pero falta dirección.', valor: 'consultoria' }, { texto: 'Alta, invierto en pauta y necesito maximizar el ROI.', valor: 'paid' }, { texto: 'Integral, busco una agencia que gestione todo 360°.', valor: 'corporativo' } ] } ]; // Mapeo de resultados según valor más frecuente const resultados = { inicio: { titulo: 'Plan Esencial', diagnostico: 'Estás en una etapa fundacional. Tu marca necesita bases sólidas antes de escalar.', solucion: 'Te recomendamos comenzar con un Plan Esencial: identidad visual básica, sitio web institucional y gestión inicial de redes. Es el punto de partida ideal para construir con estrategia desde el día uno.' }, identidad: { titulo: 'Construcción de Identidad Estratégica', diagnostico: 'Tu negocio tiene potencial, pero la percepción visual no está a la altura de lo que ofrecés.', solucion: 'Necesitás un trabajo de Branding integral: definir el ADN de tu marca, su posicionamiento y el camino para conectar con tu audiencia ideal de manera auténtica y memorable.' }, redes: { titulo: 'Comunidades que Convierten', diagnostico: 'Tenés presencia pero no estás generando el impacto ni la conexión que buscás.', solucion: 'Te recomendamos nuestro servicio de Gestión de Redes Sociales: creamos contenido de valor y gestionamos tus canales para construir una comunidad activa, fiel y comprometida con tu marca.' }, web: { titulo: 'Experiencias Digitales Impactantes', diagnostico: 'Tu sitio web no está cumpliendo su rol como herramienta de venta y conversión.', solucion: 'Necesitás un rediseño o desarrollo web estratégico: un sitio que no solo se vea bien, sino que genere resultados tangibles y convierta visitantes en clientes.' }, contenido: { titulo: 'Historias que Enamoran', diagnostico: 'Tenés el negocio andando pero te falta el contenido que conecte emocionalmente con tu audiencia.', solucion: 'Te recomendamos nuestro servicio de Producción de Contenido Audiovisual y Gráfico: contenido de alta calidad que cuente la historia de tu marca y cautive a tu audiencia.' }, automatizacion: { titulo: 'Automatización de Procesos', diagnostico: 'El crecimiento te está desbordando. Necesitás sistemas que trabajen por vos.', solucion: 'Necesitás automatizaciones inteligentes: flujos de WhatsApp, respuestas automáticas y sistemas que liberen tu tiempo para que te enfoques en lo estratégico.' }, paid: { titulo: 'Campañas que Escalan Resultados', diagnostico: 'Tenés producto y demanda, pero necesitás acelerar el crecimiento con inversión publicitaria inteligente.', solucion: 'Te recomendamos Paid Media en Meta, Google y LinkedIn: campañas gestionadas estratégicamente para maximizar tu ROI y alcanzar a los clientes correctos.' }, consultoria: { titulo: 'Asesoramiento Estratégico Integral', diagnostico: 'Tenés recursos y voluntad, pero te falta una brújula estratégica que alinee tus esfuerzos.', solucion: 'Necesitás una Consultoría de Marketing: te acompañamos en la toma de decisiones clave, optimizando tus recursos y alineando tu marketing con los objetivos de tu negocio.' }, corporativo: { titulo: 'Plan Corporativo 360°', diagnostico: 'Tu empresa está en un nivel donde necesitás un equipo dedicado que gestione todo de forma integral.', solucion: 'Te recomendamos el Plan Corporativo: dirección creativa y estratégica, branding integral, pauta multicanal, reportes con KPIs y un equipo dedicado exclusivamente a tu marca.' } }; // Estado let preguntaActual = 0; const respuestas = []; // Iniciar cuestionario btnComenzar.addEventListener('click', () => { bienvenida.style.display = 'none'; quiz.style.display = 'block'; resultado.style.display = 'none'; preguntaActual = 0; respuestas.length = 0; renderizarPregunta(); }); // Renderizar pregunta actual function renderizarPregunta() { const pregunta = preguntas[preguntaActual]; const progreso = ((preguntaActual) / preguntas.length) * 100; barraCompletado.style.width = `${progreso}%`; textoProgreso.textContent = `Pregunta ${preguntaActual + 1} de ${preguntas.length}`; let html = `
Según tus respuestas, esto es lo que más te conviene:
${resultadoData.diagnostico}