${lang === 'en' ? p.en : p.es}`).join(''); /* Barras de idioma */ const langBars = SHOW.languages ? `
${t('contact.sub')}
© ${PROFILE.year} ${PROFILE.name_full} ${PROFILE.links.github ? `${PROFILE.links.github.replace('https://', '')} ↗` : ''}`; } /* ──────────────────────────────────────────────────── ORQUESTADOR PRINCIPAL ──────────────────────────────────────────────────── */ function renderAll() { /* Metadatos de página */ document.getElementById('pageTitle').textContent = `${PROFILE.name_line1} ${PROFILE.name_line2} · Data Scientist`; document.getElementById('metaDesc').content = `${PROFILE.name_full} — Data Scientist & ML Engineer. Portafolio de proyectos de ciencia de datos, machine learning y analítica.`; renderNav(); renderHero(); renderStats(); renderProjectsShell(); /* crea el shell; luego renderPinned y loadExtraFromGitHub llenan los grids */ renderSkills(); renderExperience(); renderCertifications(); renderAbout(); renderContact(); renderFooter(); observeAll(); /* observa todos los .reveal que existan en este momento */ } function refreshContent() { /* Actualiza solo las partes que dependen del idioma, sin desmontar/remontar secciones (evita reflows grandes) */ renderNav(); renderHero(); renderStats(); renderProjectsShell(); renderSkills(); renderExperience(); renderCertifications(); renderAbout(); renderContact(); renderFooter(); observeAll(); renderPinned(); loadExtraFromGitHub(); } /* ──────────────────────────────────────────────────── CAMBIO DE IDIOMA ──────────────────────────────────────────────────── */ function applyLang(l) { lang = l; document.documentElement.lang = l; document.getElementById('btn-es').classList.toggle('active', l === 'es'); document.getElementById('btn-en').classList.toggle('active', l === 'en'); document.getElementById('btn-es').setAttribute('aria-pressed', l === 'es'); document.getElementById('btn-en').setAttribute('aria-pressed', l === 'en'); refreshContent(); } document.getElementById('btn-es').addEventListener('click', () => applyLang('es')); document.getElementById('btn-en').addEventListener('click', () => applyLang('en')); /* ──────────────────────────────────────────────────── INIT ──────────────────────────────────────────────────── */ function detectLang() { return (navigator.language || 'es').toLowerCase().startsWith('es') ? 'es' : 'en'; } lang = detectLang(); document.getElementById('btn-' + lang).classList.add('active'); document.getElementById('btn-' + lang).setAttribute('aria-pressed', 'true'); renderAll(); renderPinned(); loadExtraFromGitHub();