// Animaciones de scroll para timeline items document.addEventListener("DOMContentLoaded",() => {const timelineItems = document.querySelectorAll(".timeline-item"); const observer = new IntersectionObserver((entries) => {entries.forEach(entry => {if (entry.isIntersecting) {entry.target.classList.add("is-visible"); observer.unobserve(entry.target);}});},{threshold: .1}); timelineItems.forEach(item => {observer.observe(item);}); // Efecto de rotación del título al hacer scroll const heroMain = document.querySelector(".hero-main"); const heroSecondary = document.querySelector(".hero-secondary"); if (heroMain && heroSecondary) {window.addEventListener("scroll",() => {const scrollY = window.scrollY; const rotation = Math.min(scrollY / 20,15); document.documentElement.style.setProperty("--scroll-rotation",`${rotation}`);});} // Sistema de traducción const translations = {es: {"hero-main": "Soluciones digitales","hero-secondary": "para un mundo dinámico","journey-title": "Mi Proceso de Transformación","journey-step1-title": "🔍 Entiendo","journey-step1-desc": "Mapeo procesos reales, detecto cuellos de botella y encuentro oportunidades de digitalización. No diseño soluciones sin entender primero el problema real.","journey-step2-title": "🎨 Diseño","journey-step2-desc": "Creo interfaces intuitivas que se adaptan al flujo de trabajo real de los usuarios. El diseño no es decoración, es arquitectura de la experiencia.","journey-step3-title": "⚙️ Ejecuto","journey-step3-desc": "Desarrollo soluciones robustas, escalables y listas para producción con stack moderno: React, TypeScript, Supabase y PostgreSQL. Del prototipo al producto funcional.","services-title": "Expertise","services-subtitle": "De la idea al despliegue","service-fullstack-title": "Desarrollo Fullstack a Medida","service-fullstack-desc": "Arquitecturas modernas y escalables con React, Node, Supabase y PostgreSQL. Soluciones llave en mano diseñadas específicamente para las reglas de tu industria.","service-ux-title": "Consultoría UX y Diagnóstico","service-ux-desc": "Utilizo metodologías de Design Thinking para mapear procesos reales y encontrar oportunidades de digitalización.","service-digital-title": "Digitalización de Procesos","service-digital-desc": "Transformación de flujos de trabajo análogos en ecosistemas digitales inmutables. Especialidad en integridad de datos.","case-title": "Proyectos Desplegados","case-company": "Importadora D&R","case-tagline": "Del caos al orden: Solución ERP que eliminó los descuadres de inventario","case-precision": "Precisión","case-efficiency": "Eficiencia","case-load": "Carga","case-cta": "Ver Proyecto Desplegado","case-company2": "MenuClick","case-tagline2": "De perder márgenes a vender directo: E-commerce sin comisiones para negocios locales","case-speed": "Velocidad","case-commission": "Comisiones","case-automation": "Automatización","case-cta2": "Ver Proyecto Desplegado","advantage-title": "¿Por Qué Trabajar Conmigo?","advantage-title-full": "💪 Mi background es mi superpoder","contact-main-title": "Hablemos","contact-description": "No solo diseño. Resuelvo problemas. Con la lógica de un gestor y la empatía de un profesor. Hablemos de tu próximo proyecto.","contact-email-button": "Email","contact-linkedin-button": "LinkedIn","contact-title": "¿Listo para Digitalizar tu Operación?","contact-subtitle": "Conversemos sobre cómo transformar tus procesos en soluciones digitales robustas","contact-cta": "Contactar por LinkedIn"},en: {"hero-main": "Digital solutions","hero-secondary": "for a dynamic world","journey-title": "My Transformation Process","journey-step1-title": "🔍 Understand","journey-step1-desc": "I map real processes, detect bottlenecks and find digitalization opportunities. I don't design solutions without first understanding the real problem.","journey-step2-title": "🎨 Design","journey-step2-desc": "I create intuitive interfaces that adapt to users' real workflow. Design is not decoration, it's experience architecture.","journey-step3-title": "⚙️ Execute","journey-step3-desc": "I develop robust, scalable, production-ready solutions with modern stack: React, TypeScript, Supabase and PostgreSQL. From prototype to functional product.","services-title": "Expertise","services-subtitle": "From idea to deployment","service-fullstack-title": "Custom Fullstack Development","service-fullstack-desc": "Modern and scalable architectures with React, Node, Supabase and PostgreSQL. Turnkey solutions designed specifically for your industry rules.","service-ux-title": "UX Consulting & Diagnosis","service-ux-desc": "I use Design Thinking methodologies to map real processes and find digitalization opportunities.","service-digital-title": "Process Digitalization","service-digital-desc": "Transformation of analog workflows into immutable digital ecosystems. Specialty in data integrity.","case-title": "Deployed Projects","case-company": "Importadora D&R","case-tagline": "From chaos to order: ERP solution that eliminated inventory discrepancies","case-precision": "Precision","case-efficiency": "Efficiency","case-load": "Load","case-cta": "View Deployed Project","case-company2": "MenuClick","case-tagline2": "From losing margins to selling direct: Commission-free e-commerce for local businesses","case-speed": "Speed","case-commission": "Commissions","case-automation": "Automation","case-cta2": "View Deployed Project","advantage-title": "Why Work With Me?","advantage-title-full": "💪 My background is my superpower","contact-main-title": "Let's Talk","contact-description": "I don't just design. I solve problems. With the logic of a manager and the empathy of a teacher. Let's talk about your next project.","contact-email-button": "Email","contact-linkedin-button": "LinkedIn","contact-title": "Ready to Digitalize Your Operation?","contact-subtitle": "Let's talk about how to transform your processes into robust digital solutions","contact-cta": "Contact via LinkedIn"}}; function applyTranslations(locale: string) {const t = translations[locale as "es" | "en"] || translations.es; // Aplicar traducciones a elementos con data-i18n document.querySelectorAll("[data-i18n]").forEach(element => {const key = element.getAttribute("data-i18n"); if (key && t[key as keyof typeof t]) {// Si el elemento tiene hijos (como strong),usar textContent // De lo contrario,preservar la estructura HTML si existe if (element.children.length === 0) {element.textContent = t[key as keyof typeof t];} else {// Para elementos con estructura HTML,reemplazar solo el texto principal const textNodes = Array.from(element.childNodes).filter(node => node.nodeType === 3); if (textNodes.length > 0) {element.textContent = t[key as keyof typeof t];}}}});} // Aplicar traducciones al cargar const savedLocale = localStorage.getItem("locale") || "es"; applyTranslations(savedLocale); // Escuchar cambios de idioma window.addEventListener("localeChanged",(event: Event) => {const customEvent = event as CustomEvent<string>; applyTranslations(customEvent.detail);}); // Event listener para el botón de contacto const contactButton = document.getElementById("contact-button"); if (contactButton) {contactButton.addEventListener("click",(e) => {e.preventDefault(); window.dispatchEvent(new CustomEvent("openChat",{detail: {type: "contact"}}));});}}); </script> </Layout>{}.journey-section[data-astro-cid-j7pv25f6] h2[data-astro-cid-j7pv25f6]{word-wrap:break-word;overflow-wrap:break-word;hyphens:auto;max-width:100%}@media(max-width:640px){.journey-section[data-astro-cid-j7pv25f6] h2[data-astro-cid-j7pv25f6]{font-size:clamp(1.5rem,5vw,1.875rem);padding:0 .5rem}.case-study-title[data-astro-cid-j7pv25f6]{font-size:clamp(1.5rem,6vw,1.875rem)!important;padding:0 .5rem;word-wrap:break-word;overflow-wrap:break-word}.advantage-title[data-astro-cid-j7pv25f6]{font-size:clamp(1.5rem,6vw,2rem)!important;padding:0 .5rem;word-wrap:break-word;overflow-wrap:break-word}.contact-title[data-astro-cid-j7pv25f6]{font-size:clamp(1.5rem,6vw,1.875rem)!important;padding:0 .5rem;word-wrap:break-word;overflow-wrap:break-word}}
