{"id":1189,"date":"2026-09-08T14:58:23","date_gmt":"2026-09-08T19:58:23","guid":{"rendered":"https:\/\/ugc.edu.co\/biblioteca\/?page_id=1189"},"modified":"2026-09-08T14:59:46","modified_gmt":"2026-09-08T19:59:46","slug":"laboratorio-de-busqueda","status":"publish","type":"page","link":"https:\/\/ugc.edu.co\/biblioteca\/recursos-ensenanza-aprendizaje\/documentos-de-apoyo\/laboratorio-de-busqueda\/","title":{"rendered":"Laboratorio de Busqueda"},"content":{"rendered":"<div>\n<p>    <!DOCTYPE html><br \/>\n<html lang=\"es\"><br \/>\n<head><br \/>\n    <!-- ============== CABECERA DEL DOCUMENTO (<head>) ============== --><br \/>\n    <meta charset=\"UTF-8\"><br \/>\n    <title>Gu\u00eda de navegaci\u00f3n web<\/title><br \/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><\/p>\n<p>    <!-- Dependencias externas --><br \/>\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@400;700;900&#038;display=swap\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/remixicon\/fonts\/remixicon.css\">\n<p>    <!-- Dependencias para Tour de Bienvenida (Shepherd.js) -->\n    <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/shepherd.js@10.0.1\/dist\/css\/shepherd.css\"\/>\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/shepherd.js@10.0.1\/dist\/js\/shepherd.min.js\"><\/script><\/p>\n<p>    <!-- Estilos CSS personalizados y unificados --><\/p>\n<style>\n        \/* =========================================\n           ESTILOS (SCOPE: #ugc-guide-app)\n           ========================================= *\/\n        #ugc-guide-app { \n            --bg-color: #ffffff;\n            --text-color: #0f172a;\n            --text-muted: #475569;\n            --header-bg: #ffffff;         \n            --border-color: #e2e8f0;\n            --card-bg: #f8fafc;\n            --card-border: #cbd5e1;\n            --primary-color: #4f46e5; \n            --icon-color: #334155;        \n            --icon-hover: #4f46e5;\n            --current-area-color: #fb7185;\n            --c-arq: #fb7185; --c-eco: #14b8a6; --c-law: #a78bfa; \n            --c-edu: #facc15; --c-multi: #06b6d4;\n            font-family: 'Roboto', sans-serif; \n            background-color: var(--bg-color); \n            color: var(--text-color); \n            position: relative;\n            min-height: 100vh;\n        }\n        #ugc-guide-app h1, #ugc-guide-app h2, #ugc-guide-app h3, \n        #ugc-guide-app h4, #ugc-guide-app p, #ugc-guide-app li, \n        #ugc-guide-app span, #ugc-guide-app label { color: var(--text-color); }<\/p>\n<p>        \/* HEADER *\/\n        #ugc-guide-app header { background-color: var(--header-bg) !important; border-bottom: 1px solid var(--border-color); box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05); }\n        #ugc-guide-app .nav-icon-btn { display:flex; align-items:center; justify-content:center; width:48px; height:48px; border-radius:8px; background:transparent; border:1px solid transparent; cursor:pointer; transition:all .2s; color:var(--icon-color) !important; font-size:1.5rem; }\n        #ugc-guide-app .nav-icon-btn:hover, #ugc-guide-app .nav-icon-btn.active-nav { background-color:#eff6ff; color:var(--icon-hover) !important; border-color:#bfdbfe; transform:scale(1.05); }\n        #ugc-guide-app .home-title-gradient { background:linear-gradient(to right,#4f46e5,#0891b2); -webkit-background-clip:text; background-clip:text; color:transparent !important; font-weight:900; }<\/p>\n<p>        \/* COMPONENTES *\/\n        #ugc-guide-app .glassmorphism { background:var(--card-bg); border:1px solid var(--card-border); box-shadow:0 4px 6px -1px rgba(0,0,0,0.05); transition:all .3s ease; }\n        #ugc-guide-app .main-menu-card:hover { transform:translateY(-5px); box-shadow:0 10px 15px -3px rgba(0,0,0,0.1); border-color:var(--primary-color); background:#ffffff; }\n        #ugc-guide-app .text-white-forced { color:#ffffff !important; }<\/p>\n<p>        \/* Bot\u00f3n Tour y Help *\/\n        #ugc-guide-app #tour-btn { color:#ffffff !important; }\n        #ugc-guide-app #tour-btn i, #ugc-guide-app #tour-btn span { color:#ffffff !important; }\n        #ugc-guide-app .help-circle-btn { width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-weight:bold; font-size:1.2rem; cursor:pointer; transition:transform .2s; box-shadow:0 4px 6px rgba(0,0,0,0.15); border:none; color:#ffffff !important; }\n        #ugc-guide-app .help-circle-btn:hover { transform:scale(1.1) rotate(10deg); }<\/p>\n<p>        \/* NAV FOOTER *\/\n        #ugc-guide-app .module-nav-footer { margin-top:3rem; padding:1.5rem; border-top:1px solid var(--border-color); display:flex; justify-content:space-between; align-items:center; background-color:#f8fafc; border-radius:.5rem; }\n        #ugc-guide-app .module-nav-btn { display:inline-flex; align-items:center; gap:.5rem; padding:.75rem 1.5rem; border-radius:.5rem; font-weight:700; color:var(--text-color); background:#fff; border:1px solid var(--border-color); transition:all .2s; cursor:pointer; box-shadow:0 2px 4px rgba(0,0,0,0.05); }\n        #ugc-guide-app .module-nav-btn:hover { background:var(--primary-color); color:#fff !important; border-color:var(--primary-color); }<\/p>\n<p>        \/* CHIPS *\/\n        #ugc-guide-app .chip { color:white !important; border-radius:9999px; padding:.25rem .75rem; font-weight:500; display:inline-block; margin:2px; cursor:pointer; }\n        #ugc-guide-app .chip.base { background:#16a34a; } \n        #ugc-guide-app .chip.chipOR { background:#3b82f6; } \n        #ugc-guide-app .chip.chipNOT { background:#ef4444; } \n        #ugc-guide-app .chip.chipSITE { background:#8b5cf6; }<\/p>\n<p>        \/* M2 SEARCHER BTNS *\/\n        #ugc-guide-app .m2-searcher-btn { cursor:pointer; transition:all .2s; background:white; color:var(--text-color); }\n        #ugc-guide-app .m2-searcher-btn:hover { transform:translateY(-1px); border-color:var(--primary-color); }\n        #ugc-guide-app .m2-searcher-btn.selected { border-color:var(--primary-color) !important; background:#eff6ff; box-shadow:0 0 0 2px rgba(79,70,229,0.2); }\n        #ugc-guide-app #m2-compat-warning { transition:all .3s ease; }<\/p>\n<p>        \/* Force white text on dark background elements *\/\n        #ugc-guide-app .text-white-forced,\n        #ugc-guide-app .text-white-forced *,\n        #ugc-guide-app .help-circle-btn,\n        #ugc-guide-app .help-circle-btn *,\n        #ugc-guide-app #m2-searchBtn,\n        #ugc-guide-app #m2-searchBtn *,\n        #ugc-guide-app #m2-addBtn,\n        #ugc-guide-app #m2-addBtn *,\n        #ugc-guide-app #m2-exampleBtn,\n        #ugc-guide-app #m2-exampleBtn *,\n        #ugc-guide-app #m2-resetBtn,\n        #ugc-guide-app #m2-resetBtn *,\n        #ugc-guide-app #m2-addSyn,\n        #ugc-guide-app #m2-addSyn *,\n        #ugc-guide-app #tour-btn,\n        #ugc-guide-app #tour-btn *,\n        #ugc-guide-app .module-nav-btn:hover,\n        #ugc-guide-app .module-nav-btn:hover *,\n        #ugc-guide-app [class*=\"bg-purple-600\"],\n        #ugc-guide-app [class*=\"bg-blue-600\"],\n        #ugc-guide-app [class*=\"bg-emerald-600\"],\n        #ugc-guide-app [class*=\"bg-red-600\"],\n        #ugc-guide-app [class*=\"bg-pink-5\"],\n        #ugc-guide-app [class*=\"bg-pink-6\"],\n        #ugc-guide-app [class*=\"bg-sky-5\"],\n        #ugc-guide-app [class*=\"bg-teal-6\"],\n        #ugc-guide-app [class*=\"bg-indigo-6\"],\n        #ugc-guide-app #reset,\n        #ugc-guide-app #reset * { \n            color: #ffffff !important; \n        }<\/p>\n<p>        \/* TABS M3 *\/\n        #ugc-guide-app .tab-btn { transition:all .3s ease; opacity:.6; border-bottom:3px solid transparent; padding-bottom:8px; color:var(--text-color); cursor:pointer; }\n        #ugc-guide-app .tab-btn:hover { opacity:1; color:var(--current-area-color); }\n        #ugc-guide-app .tab-btn.active { opacity:1; font-weight:bold; transform:scale(1.05); border-bottom-color:var(--current-area-color) !important; color:var(--current-area-color) !important; }<\/p>\n<p>        \/* M3 VISIT BTNS & ACORDEONES *\/\n        #ugc-guide-app .visit-btn { background-color:var(--current-area-color); color:#000 !important; font-weight:700; padding:.35rem 1rem; border-radius:9999px; font-size:.8rem; display:inline-flex; align-items:center; gap:.25rem; transition:transform .2s; text-decoration:none; border:none; cursor:pointer; }\n        #ugc-guide-app .visit-btn:hover { filter:brightness(1.1); transform:translateY(-2px); box-shadow:0 2px 5px rgba(0,0,0,0.1); }\n        #ugc-guide-app .portal-cta { cursor:pointer; border:none; color:#fff !important; background-color:var(--current-area-color); padding:.75rem 2rem; border-radius:9999px; font-weight:700; }\n        #ugc-guide-app .portal-cta:hover { filter:brightness(1.1); }\n        #ugc-guide-app .resource-card { background:#fff; border:1px solid #e2e8f0; transition:all .3s ease; }\n        #ugc-guide-app .resource-card:hover { transform:translateY(-5px); border-color:var(--current-area-color); }\n        #ugc-guide-app details.resource-category { border:1px solid var(--border-color); border-radius:.75rem; overflow:hidden; background:#fff; margin-bottom:1rem; }\n        #ugc-guide-app details.resource-category summary { cursor:pointer; padding:1rem; background:#f1f5f9; transition:background .2s; display:flex; justify-content:space-between; align-items:center; color:var(--text-color); font-weight:bold; }\n        #ugc-guide-app details.resource-category summary:hover { background:#e2e8f0; }\n        #ugc-guide-app details[open] summary { border-bottom:1px solid var(--border-color); }\n        #ugc-guide-app details.resource-category > div { padding:1.5rem; }<\/p>\n<p>        \/* M4 *\/\n        #ugc-guide-app #chap4 .tabH { margin-bottom:1.5rem; }\n        #ugc-guide-app #chap4 .tabH button { padding:.75rem 1.25rem; border-radius:.5rem; transition:.25s; font-weight:700; display:flex; gap:.35rem; align-items:center; color:var(--text-color); background:white; border:1px solid transparent; }\n        #ugc-guide-app #chap4 .tabH button.active { border:1px solid var(--primary-color); color:var(--primary-color); background:#eff6ff; }\n        #ugc-guide-app #chap4 .tabSect { display:none; }\n        #ugc-guide-app #chap4 .tabSect.active { display:block; animation:fadeIn .4s ease-in-out; }\n        #ugc-guide-app #chap4 .yn { padding:.4rem 1.2rem; border:1px solid #cbd5e1; border-radius:.5rem; font-size:.85rem; cursor:pointer; color:var(--text-color); background:white; font-weight:bold; }\n        #ugc-guide-app #chap4 .yn:hover { background:#f1f5f9; }\n        #ugc-guide-app #chap4 .yn.y { background:#dcfce7; border-color:#16a34a; color:#14532d; }\n        #ugc-guide-app #chap4 .yn.n { background:#fee2e2; border-color:#dc2626; color:#7f1d1d; }\n        #ugc-guide-app #chap4 .cbg { height:.6rem; border-radius:9999px; background:#e2e8f0; }<\/p>\n<p>        \/* MODULES *\/\n        #ugc-guide-app .module { display:none; }\n        #ugc-guide-app .module.active { display:block; animation:fadeIn .4s ease-in-out; }\n        @keyframes fadeIn { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:translateY(0)} }<\/p>\n<p>        \/* SHEPHERD *\/\n        .shepherd-element { border-radius:.75rem; border:1px solid var(--primary-color); box-shadow:0 8px 30px rgba(0,0,0,.15); background:#fff; z-index:9999; }\n        .shepherd-header { background:#f8fafc; padding:.8rem 1rem; border-bottom:1px solid #e2e8f0; }\n        .shepherd-text { padding:1.2rem 1.5rem; color:#0f172a; font-size:.95rem; line-height:1.6; }\n        .shepherd-footer { padding:0 1.5rem 1.5rem !important; display:flex !important; justify-content:flex-end !important; gap:.5rem !important; }\n        .shepherd-button { background:#2563eb !important; color:#f8fafc !important; font-weight:700 !important; border-radius:.5rem !important; padding:.6rem 1.2rem !important; border:none !important; cursor:pointer !important; }\n        .shepherd-button:hover { background:#1d4ed8 !important; }\n        .shepherd-button-secondary { background:#94a3b8 !important; color:white !important; }\n        .step-counter { font-size:.75rem; text-transform:uppercase; font-weight:900; color:#94a3b8; letter-spacing:.05em; display:block; margin-bottom:4px; }<\/p>\n<p>        \/* CREDITS *\/\n        #credits-footer { margin-top:4rem; padding-top:2rem; border-top:1px solid #f1f5f9; text-align:center; }\n        #credits-footer p { font-size:.7rem; color:#94a3b8; margin-bottom:.25rem; }<\/p>\n<p>        \/* PRINT *\/\n        @media print {\n            body * { visibility:hidden; }\n            #main-content, #main-content * { visibility:visible; }\n            #main-content { position:absolute; left:0; top:0; width:100%; padding:1rem; }\n            header, .tabH, .module:not(.active), .tabSect:not(.active), .no-print, .module-nav-footer { display:none !important; }\n        }\n    <\/style>\n<p><\/head><\/p>\n<p><body class=\"bg-slate-50 text-slate-900\"><\/p>\n<div id=\"ugc-guide-app\" class=\"max-w-7xl mx-auto my-4 shadow-xl bg-white rounded-xl overflow-hidden min-h-[90vh]\">\n<header class=\"sticky top-0 z-40 relative bg-white\">\n<div class=\"px-4 py-3 flex items-center justify-between shadow-sm\">\n<div class=\"flex items-center gap-2 sm:gap-6 mx-auto md:mx-0\">\n                    <button class=\"nav-icon-btn\" onclick=\"show('home')\" title=\"Inicio\" id=\"nav-home\"><i class=\"ri-home-4-fill\"><\/i><\/button><\/p>\n<div class=\"h-8 w-px bg-slate-200 hidden md:block\"><\/div>\n<nav id=\"main-nav-buttons\" class=\"flex gap-2\">\n                        <button class=\"nav-icon-btn\" onclick=\"show('chap1')\" title=\"1. Ecosistema\" id=\"nav-m1\"><i class=\"ri-compass-3-line\"><\/i><\/button><br \/>\n                        <button class=\"nav-icon-btn\" onclick=\"show('chap2')\" title=\"2. B\u00fasqueda\" id=\"nav-m2\"><i class=\"ri-equalizer-line\"><\/i><\/button><br \/>\n                        <button class=\"nav-icon-btn\" onclick=\"show('chap3')\" title=\"3. Fuentes\" id=\"nav-m3\"><i class=\"ri-book-2-line\"><\/i><\/button><br \/>\n                        <button class=\"nav-icon-btn\" onclick=\"show('chap4')\" title=\"4. Evaluaci\u00f3n\" id=\"nav-m4\"><i class=\"ri-shield-check-line\"><\/i><\/button><br \/>\n                    <\/nav>\n<\/p><\/div>\n<div id=\"header-title-container\" class=\"hidden lg:block text-center px-4\">\n<h1 class=\"text-xl home-title-gradient\">Gu\u00eda de Navegaci\u00f3n<\/h1>\n<\/p><\/div>\n<\/p><\/div>\n<div id=\"progress-bar\" class=\"absolute bottom-0 left-0 h-1 bg-gradient-to-r from-indigo-500 to-teal-400\" style=\"width: 0%; transition: width 0.4s ease-out;\"><\/div>\n<\/header>\n<p>    <main id=\"main-content\" class=\"flex-grow px-4 py-8 sm:py-12 relative z-10 max-w-7xl mx-auto w-full\"><\/p>\n<section id=\"home\" class=\"module active\">\n<div class=\"text-center mb-16 mt-8\">\n<h2 class=\"text-5xl font-black mb-6 text-slate-800\">Gu\u00eda de <span class=\"home-title-gradient\">navegaci\u00f3n web<\/span><\/h2>\n<p class=\"text-xl text-slate-600 max-w-3xl mx-auto leading-relaxed\">Domina la investigaci\u00f3n digital. Aprende a diferenciar herramientas, construye b\u00fasquedas avanzadas, accede a fuentes acad\u00e9micas oficiales y eval\u00faa la fiabilidad de la informaci\u00f3n.<\/p>\n<\/p><\/div>\n<div class=\"text-center mb-16\">\n                    <button id=\"tour-btn\" class=\"inline-flex items-center gap-3 px-8 py-4 rounded-xl bg-indigo-600 text-white-forced font-bold text-lg hover:brightness-110 transition-transform hover:scale-105 shadow-xl\"><i class=\"ri-rocket-line text-2xl\"><\/i><span>Iniciar tour de bienvenida<\/span><\/button>\n                <\/div>\n<div id=\"home-cards\" class=\"grid sm:grid-cols-2 lg:grid-cols-4 gap-8\">\n<div onclick=\"show('chap1')\" class=\"main-menu-card p-8 rounded-2xl glassmorphism flex flex-col items-center text-center cursor-pointer\"><i class=\"ri-compass-3-line text-6xl mb-6 text-indigo-500\"><\/i><\/p>\n<h3 class=\"font-bold text-xl text-slate-800\">1. Tu Ecosistema web<\/h3>\n<p class=\"text-slate-500 mt-3\">Navegadores vs Motores. Encuentra tu combinaci\u00f3n ideal.<\/p>\n<\/div>\n<div onclick=\"show('chap2')\" class=\"main-menu-card p-8 rounded-2xl glassmorphism flex flex-col items-center text-center cursor-pointer\"><i class=\"ri-equalizer-line text-6xl mb-6 text-teal-500\"><\/i><\/p>\n<h3 class=\"font-bold text-xl text-slate-800\">2. Laboratorio de B\u00fasqueda<\/h3>\n<p class=\"text-slate-500 mt-3\">Dise\u00f1a ecuaciones con operadores booleanos y filtros.<\/p>\n<\/div>\n<div onclick=\"show('chap3')\" class=\"main-menu-card p-8 rounded-2xl glassmorphism flex flex-col items-center text-center cursor-pointer\"><i class=\"ri-book-2-line text-6xl mb-6 text-emerald-500\"><\/i><\/p>\n<h3 class=\"font-bold text-xl text-slate-800\">3. Explorador de Fuentes<\/h3>\n<p class=\"text-slate-500 mt-3\">Bases de datos y portales oficiales por disciplina.<\/p>\n<\/div>\n<div onclick=\"show('chap4')\" class=\"main-menu-card p-8 rounded-2xl glassmorphism flex flex-col items-center text-center cursor-pointer\"><i class=\"ri-shield-check-line text-6xl mb-6 text-amber-500\"><\/i><\/p>\n<h3 class=\"font-bold text-xl text-slate-800\">4. Laboratorio Forense<\/h3>\n<p class=\"text-slate-500 mt-3\">Valida la fiabilidad con nuestro checklist interactivo.<\/p>\n<\/div><\/div>\n<div class=\"module-nav-footer\">\n<div><\/div>\n<p><button onclick=\"show('chap1')\" class=\"module-nav-btn group\">Comenzar M\u00f3dulo 1 <i class=\"ri-arrow-right-line group-hover:translate-x-1 transition-transform\"><\/i><\/button><\/div>\n<div id=\"credits-footer\">\n<p>\u00a9 2026 Equipo de Referencia.<\/p>\n<p>Juli\u00e1n Arturo Castillo-Vel\u00e1squez \u2022 Fabi\u00e1n Eduardo C\u00e1ceres \u2022 Laura Mar\u00eda Vega<\/p>\n<p>Alix Carol Torres \u2022 Francisco Felipe Cort\u00e9s<\/p>\n<\/div>\n<\/section>\n<section id=\"chap1\" class=\"module\"><\/section>\n<section id=\"chap2\" class=\"module\"><\/section>\n<section id=\"chap3\" class=\"module\"><\/section>\n<section id=\"chap4\" class=\"module\"><\/section>\n<p>    <\/main><\/p>\n<p>    <script>\n        \/\/ Funci\u00f3n global para manejar redirecciones externas y evitar problemas con CMS\n        window.openExternalLink = function(url) {\n            \/\/ Aseguramos que la URL tenga el protocolo completo\n            let finalUrl = url;\n            if (!url.startsWith('http:\/\/') && !url.startsWith('https:\/\/')) {\n                finalUrl = 'https:\/\/' + url;\n            }<\/p>\n<p>            \/\/ Creamos un elemento <a> invisible din\u00e1micamente y forzamos el clic\n            const a = document.createElement('a');\n            a.href = finalUrl;\n            a.target = '_blank';\n            a.rel = 'noopener noreferrer';<\/p>\n<p>            \/\/ Necesario en algunos navegadores\/entornos para que el click funcione\n            document.body.appendChild(a); \n            a.click();\n            document.body.removeChild(a);\n        };<\/p>\n<p>        \/\/ ============== L\u00d3GICA GENERAL ==============\n        const app = {\n            init() {\n                this.setupNavigation();\n                                this.setupWelcomeTour();\n                this.setupModuleTours();<\/p>\n<p>                m1.init(); \n                m2.init();<\/p>\n<p>                show('home');\n            },\n            setupNavigation() {\n                window.show = (id) => {\n                    document.querySelectorAll('.module').forEach(s => s.classList.remove('active'));\n                    const moduleElement = document.getElementById(id);<\/p>\n<p>                    \/\/ Update nav icons\n                    document.querySelectorAll('.nav-icon-btn').forEach(b => b.classList.remove('active-nav'));\n                    const navMap = {'home':'nav-home','chap1':'nav-m1','chap2':'nav-m2','chap3':'nav-m3','chap4':'nav-m4'};\n                    const activeBtn = document.getElementById(navMap[id]);\n                    if(activeBtn) activeBtn.classList.add('active-nav');\n                    if (moduleElement) moduleElement.classList.add('active');<\/p>\n<p>                    const headerTitle = document.getElementById('header-title-container');\n                    headerTitle?.classList.toggle('hidden', id === 'home');<\/p>\n<p>                    const progressMap = {'home': 20, 'chap1': 40, 'chap2': 60, 'chap3': 80, 'chap4': 100};\n                    const progressBar = document.getElementById('progress-bar');\n                    if(progressBar) progressBar.style.width = `${progressMap[id] || 0}%`;<\/p>\n<p>                    window.scrollTo({ top: 0, behavior: 'smooth' });<\/p>\n<p>                    if (id === 'chap3' && !m3.initialized) m3.init();\n                    if (id === 'chap4' && !m4.initialized) m4.init();\n                };\n            },\n            setupWelcomeTour() {\n                const tourBtn = document.getElementById('tour-btn');\n                if (tourBtn) tourBtn.addEventListener('click', () => this.startMainTour());\n            },\n            setupModuleTours() {\n                document.getElementById('main-content').addEventListener('click', (event) => {\n                    const tourButton = event.target.closest('button[id$=\"-tour-btn\"]');\n                    if (!tourButton) return;\n                    const tourMap = {\n                        'm1-tour-btn': this.startM1Tour, 'm2-tour-btn': this.startM2Tour,\n                        'm3-tour-btn': this.startM3Tour, 'm4-tour-btn': this.startM4Tour,\n                    };\n                    tourMap[tourButton.id]?.call(this);\n                });\n            },\n            getTourOptions() {\n                return { useModalOverlay: true, defaultStepOptions: { classes: 'shepherd-custom-class', scrollTo: { behavior: 'smooth', block: 'center' }, cancelIcon: { enabled: true } } };\n            },\n            startMainTour() {\n                const tour = new Shepherd.Tour(this.getTourOptions());\n                tour.addStep({ id: 'welcome', text: '\u00a1Bienvenido\/a! Este tour te mostrar\u00e1 c\u00f3mo navegar la gu\u00eda y encontrar ayuda en cada secci\u00f3n.', buttons: [{ text: 'Siguiente', action: tour.next }] });\n                tour.addStep({ id: 'nav-buttons', text: 'Usa estos botones para saltar directamente a cualquier m\u00f3dulo. \u00a1Son tu atajo principal!', attachTo: { element: '#main-nav-buttons', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });\n                tour.addStep({ id: 'module-cards', text: 'Aqu\u00ed tienes los 4 m\u00f3dulos. Cada uno es una herramienta interactiva para mejorar tus habilidades de b\u00fasqueda.', attachTo: { element: '#home-cards', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });\n                tour.addStep({ id: 'module-help', text: '<strong>\u00a1Importante!<\/strong> Dentro de cada m\u00f3dulo, ver\u00e1s un bot\u00f3n de ayuda como este <button class=\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-sky-600 text-white align-middle\"><i class=\"ri-question-line text-base\"><\/i><\/button>. \u00dasalo para obtener un tutorial espec\u00edfico de ese m\u00f3dulo.', buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: '\u00a1Entendido!', action: tour.complete }] });\n                tour.start();\n            },\n            startM1Tour() {\n                const tour = new Shepherd.Tour(this.getTourOptions());\n                tour.addStep({ id: 'm1_intro', text: 'Este m\u00f3dulo te ayuda a elegir las mejores herramientas. Primero, aprende la diferencia entre navegador (el veh\u00edculo) y motor de b\u00fasqueda (el mapa).', attachTo: { element: '#m1-card-1', on: 'bottom' }, buttons: [{ text: 'Siguiente', action: tour.next }] });\n                tour.addStep({ id: 'm1_wizard', text: 'Luego, usa este asistente interactivo para descubrir la combinaci\u00f3n perfecta de navegador y motor de b\u00fasqueda seg\u00fan lo que m\u00e1s te importa.', attachTo: { element: '#m1-card-2', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });\n                tour.addStep({ id: 'm1_directory', text: 'Finalmente, aqu\u00ed puedes explorar un directorio completo de todas las herramientas disponibles.', attachTo: { element: '#m1-card-3', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Finalizar', action: tour.complete }] });\n                tour.start();\n            },\n            startM2Tour() {\n            const tour = new Shepherd.Tour(this.getTourOptions());\n            const step3El = document.getElementById('m2-step3');\n            const step3WasHidden = step3El?.classList.contains('hidden');\n            tour.addStep({ id:'m2s1', text:'<b>Paso 1:<\/b> Elige d\u00f3nde buscar. Tienes 8 opciones: Recursos suscritos (EBSCO, Scopus), Web (Google, Bing, DuckDuckGo, Scholar) y Biblioteca impresa (Cat\u00e1logo UGC).', attachTo:{element:'#m2-step1',on:'bottom'}, buttons:[{text:'Siguiente',action:tour.next}] });\n            tour.addStep({ id:'m2s2', text:'<b>Paso 2:<\/b> Construye tu ecuaci\u00f3n. Escribe un t\u00e9rmino, elige operador y presiona \"A\u00f1adir bloque\". Con OR, acumula sin\u00f3nimos con \"+ Otra\".', attachTo:{element:'#m2-step2',on:'bottom'}, buttons:[{text:'Atr\u00e1s',action:tour.back, classes:'shepherd-button-secondary'},{text:'Siguiente',action:tour.next}] });\n            tour.addStep({ id:'m2s3', text:'<b>Paso 3:<\/b> Si elegiste un buscador Web, filtra por dominio, tipo de archivo, fuente o fechas. Este paso se oculta para Recursos suscritos y Biblioteca.', attachTo:{element:'#m2-step3',on:'top'}, when:{'before-show':()=>{if(step3El)step3El.classList.remove('hidden');}}, buttons:[{text:'Atr\u00e1s',action:tour.back, classes:'shepherd-button-secondary'},{text:'Siguiente',action:tour.next}] });\n            tour.addStep({ id:'m2s4', text:'<b>Paso 4:<\/b> Tu ecuaci\u00f3n final aparece aqu\u00ed. C\u00f3piala o l\u00e1nzala directamente en el buscador seleccionado.', attachTo:{element:'#m2-step4',on:'top'}, buttons:[{text:'Atr\u00e1s',action:tour.back, classes:'shepherd-button-secondary'},{text:'Finalizar',action:tour.complete}] });\n            const cleanup=()=>{if(step3WasHidden&&step3El)step3El.classList.add('hidden');};\n            tour.on('complete',cleanup); tour.on('cancel',cleanup);\n            tour.start();\n        },\nstartM3Tour() {\n                const tour = new Shepherd.Tour(this.getTourOptions());\n                tour.addStep({ id: 'm3_tabs', text: 'Selecciona tu \u00e1rea de conocimiento usando estas pesta\u00f1as para filtrar los recursos m\u00e1s relevantes.', attachTo: { element: '#tabs-m3', on: 'bottom' }, buttons: [{ text: 'Siguiente', action: tour.next }] });\n                tour.addStep({ id: 'm3_content', text: 'Los recursos aparecer\u00e1n aqu\u00ed, agrupados por categor\u00edas como \"Suscripci\u00f3n UGC\", \"Bases abiertas\" y \"Sitios oficiales\".', attachTo: { element: '#content-m3', on: 'top' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });\n                tour.addStep({ id: 'm3_details', text: 'Puedes hacer clic en el t\u00edtulo de cada categor\u00eda para expandirla o contraerla y encontrar lo que buscas m\u00e1s f\u00e1cilmente.', attachTo: { element: '#content-m3 details summary', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Finalizar', action: tour.complete }] });\n                tour.start();\n            },\n            startM4Tour() {\n                const tour = new Shepherd.Tour(this.getTourOptions());\n                const resultsBox = document.querySelector('#chap4 #box');<\/p>\n<p>                tour.addStep({ id: 'm4_tabs', text: 'Este laboratorio tiene 3 pesta\u00f1as: el evaluador interactivo, una gu\u00eda de criterios detallada y una lista de verificaci\u00f3n imprimible.', attachTo: { element: '#m4-tabs-area', on: 'bottom' }, buttons: [{ text: 'Siguiente', action: tour.next }] });\n                tour.addStep({ id: 'm4_evaluator', text: 'En el evaluador, responde \"S\u00ed\" o \"No\" a las preguntas sobre la fuente que est\u00e1s analizando.', attachTo: { element: '#qs', on: 'top' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });<\/p>\n<p>                tour.addStep({\n                    id: 'm4_results',\n                    text: 'Tus resultados aparecer\u00e1n aqu\u00ed en tiempo real, con un puntaje, un sem\u00e1foro de fiabilidad y recomendaciones personalizadas.',\n                    attachTo: { element: '#box', on: 'top' },\n                    buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Finalizar', action: tour.complete }],\n                    when: {\n                        'before-show': () => {\n                            if (resultsBox) resultsBox.hidden = false;\n                        }\n                    }\n                });<\/p>\n<p>                const cleanup = () => {\n                    if (resultsBox) {\n                        const hasResponded = Object.values(m4.state).some(arr => arr.some(v => v !== null));\n                        if (!hasResponded) {\n                            resultsBox.hidden = true;\n                        }\n                    }\n                };<\/p>\n<p>                tour.on('complete', cleanup);\n                tour.on('cancel', cleanup);<\/p>\n<p>                tour.start();\n            }\n        };<\/p>\n<p>        const m1 = {\n            htmlContent: `<\/p>\n<div class=\"flex justify-between items-center gap-4 mb-10\">\n<h2 class=\"text-2xl sm:text-3xl font-bold\"><span class=\"text-4xl mr-3 align-middle\"><\/span>M\u00f3dulo 1: tu ecosistema ideal<\/h2>\n<p><button id=\"m1-tour-btn\" class=\"help-circle-btn bg-indigo-600\" title=\"Ayuda del m\u00f3dulo\"><i class=\"ri-question-mark\"><\/i><\/button><\/div>\n<div class=\"space-y-12\">\n<div id=\"m1-card-1\" class=\"glassmorphism rounded-xl p-8\">\n<h3 class=\"text-xl font-semibold mb-4 text-center\">Navegador vs. motor de b\u00fasqueda: el veh\u00edculo y el mapa<\/h3>\n<p class=\"text-slate-600\">Para navegar por la vasta red de internet, necesitas dos herramientas que, aunque trabajan juntas, son fundamentalmente diferentes. Imagina que internet es una ciudad inmensa.<\/p>\n<ul class=\"list-disc list-inside mt-4 space-y-2\">\n<li>El <strong>navegador web<\/strong> (Chrome, Firefox, Safari) es tu <strong>veh\u00edculo <\/strong>. Es el software que instalas en tu dispositivo y que te permite 'conducir' por las calles de la ciudad, visitar direcciones (URLs) y ver el contenido de los edificios (p\u00e1ginas web).<\/li>\n<li>El <strong>motor de b\u00fasqueda<\/strong> (Google, DuckDuckGo, Perplexity) es tu <strong>mapa inteligente y GPS <\/strong>. No lo instalas, es un servicio que consultas para encontrar la ubicaci\u00f3n de algo espec\u00edfico que no conoces. Le dices \"busco bibliotecas\" y te da una lista de direcciones relevantes.<\/li>\n<\/ul>\n<\/div>\n<div id=\"m1-card-2\" class=\"glassmorphism rounded-xl p-8\">\n<h3 class=\"text-xl font-semibold mb-6 text-center\">Actividad pr\u00e1ctica: encuentra tu combo ideal<\/h3>\n<div id=\"wizard-content\"><\/div>\n<\/div>\n<div id=\"m1-card-3\" class=\"glassmorphism rounded-xl p-8\">\n<h3 class=\"text-xl font-semibold mb-6 text-center\">Directorio de buscadores web 2025<\/h3>\n<h4 class=\"text-lg font-bold mb-4 text-indigo-600\">Motores de b\u00fasqueda<\/h4>\n<div id=\"engines-directory\" class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\"><\/div>\n<h4 class=\"text-lg font-bold mt-8 mb-4 text-indigo-600\">Navegadores web<\/h4>\n<div id=\"browsers-directory\" class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\"><\/div>\n<\/div>\n<\/div>\n<div class=\"module-nav-footer\"><button onclick=\"show('home')\" class=\"module-nav-btn group\"><i class=\"ri-home-4-line mr-2\"><\/i> Inicio<\/button><button onclick=\"show('chap2')\" class=\"module-nav-btn group\">Siguiente: Laboratorio <i class=\"ri-arrow-right-line ml-2 group-hover:translate-x-1 transition-transform\"><\/i><\/button><\/div>\n<p>`,\n            engines: [{id:\"google\",name:\"Google\",icon:\"ri-google-fill\",desc:\"\u00cdndice mundial con IA Gemini y la mayor cobertura del mercado.\",link:\"https:\/\/google.com\"},{id:\"bing\",name:\"Microsoft Bing\",icon:\"ri-windows-fill\",desc:\"Integraci\u00f3n nativa con IA Copilot para respuestas multimodales.\",link:\"https:\/\/bing.com\"},{id:\"duckduckgo\",name:\"DuckDuckGo\",icon:\"ri-duckduckgo-fill\",desc:\"El est\u00e1ndar en privacidad: sin tracking ni perfilado de usuario.\",link:\"https:\/\/duckduckgo.com\"},{id:\"perplexity\",name:\"Perplexity AI\",icon:\"ri-compass-3-line\",desc:\"Un 'motor de respuestas' que usa IA para dar res\u00famenes directos con fuentes citadas.\",link:\"https:\/\/perplexity.ai\"},{id:\"brave_s\",name:\"Brave Search\",icon:\"ri-shield-star-line\",desc:\"\u00cdndice propio e independiente que ofrece resultados sin sesgos comerciales ni anuncios.\",link:\"https:\/\/search.brave.com\"},{id:\"kagi\",name:\"Kagi (pago)\",icon:\"ri-money-dollar-circle-line\",desc:\"Motor premium sin anuncios, con alta calidad y filtros personalizables (Lenses).\",link:\"https:\/\/kagi.com\"},{id:\"ecosia\",name:\"Ecosia\",icon:\"ri-seedling-line\",desc:\"Enfoque en sostenibilidad: tus b\u00fasquedas ayudan a plantar \u00e1rboles.\",link:\"https:\/\/www.ecosia.org\"},{id:\"yandex\",name:\"Yandex\",icon:\"ri-search-2-line\",desc:\"L\u00edder en Rusia y pa\u00edses de la CEI, con b\u00fasqueda regional avanzada.\",link:\"https:\/\/yandex.com\"},{id:\"baidu\",name:\"Baidu\",icon:\"ri-search-2-line\",desc:\"El motor dominante en China, con su propia IA (Ernie). Indispensable para contenido de esa regi\u00f3n.\",link:\"https:\/\/www.baidu.com\"},{id:\"startpage\",name:\"Startpage\",icon:\"ri-shield-keyhole-line\",desc:\"Ofrece los resultados de Google de forma an\u00f3nima, actuando como un proxy de privacidad.\",link:\"https:\/\/www.startpage.com\"},{id:\"you\",name:\"You.com\",icon:\"ri-robot-2-line\",desc:\"Combina varios modelos de IA y permite filtrar por plugins y fuentes avanzadas.\",link:\"https:\/\/you.com\"},{id:\"internetarchive\",name:\"Internet Archive\",icon:\"ri-archive-line\",desc:\"Busca en el historial de la web (Wayback Machine), no en la web viva.\",link:\"https:\/\/archive.org\/web\/\"}],\n            browsers: [{id:\"chrome\",name:\"Chrome\",icon:\"ri-chrome-fill\",desc:\"El m\u00e1s popular, con un ecosistema masivo de extensiones y gran rendimiento.\",link:\"https:\/\/google.com\/chrome\"},{id:\"firefox\",name:\"Firefox\",icon:\"ri-firefox-fill\",desc:\"El principal navegador de c\u00f3digo abierto, enfocado en la privacidad y la independencia.\",link:\"https:\/\/firefox.com\"},{id:\"safari\",name:\"Safari\",icon:\"ri-safari-fill\",desc:\"Optimizado para el ecosistema Apple, con una eficiencia energ\u00e9tica superior.\",link:\"https:\/\/www.apple.com\/safari\/\"},{id:\"edge\",name:\"Microsoft Edge\",icon:\"ri-edge-new-fill\",desc:\"Bajo consumo y con el asistente Copilot integrado en una barra lateral.\",link:\"https:\/\/microsoft.com\/edge\"},{id:\"brave_b\",name:\"Brave\",icon:\"ri-brave-fill\",desc:\"Bloquea anuncios y rastreadores de forma nativa, ofreciendo velocidad y seguridad por defecto.\",link:\"https:\/\/brave.com\"},{id:\"arc\",name:\"Arc\",icon:\"ri-sparkling-2-line\",desc:\"Reimagina la navegaci\u00f3n con una sidebar productiva, espacios de trabajo y su propia IA (Max).\",link:\"https:\/\/arc.net\"},{id:\"opera\",name:\"Opera\",icon:\"ri-opera-fill\",desc:\"Incluye el agente de IA Aria de forma gratuita y otras funciones integradas como VPN.\",link:\"https:\/\/www.opera.com\"},{id:\"vivaldi\",name:\"Vivaldi\",icon:\"ri-palette-line\",desc:\"Ofrece una personalizaci\u00f3n total de la interfaz, ideal para usuarios avanzados.\",link:\"https:\/\/vivaldi.com\"},{id:\"tor\",name:\"Tor Browser\",icon:\"ri-git-repository-private-line\",desc:\"M\u00e1ximo anonimato y evasi\u00f3n de censura. Esencial para el acceso sin restricciones.\",link:\"https:\/\/www.torproject.org\/\"},{id:\"duckduckgo_b\",name:\"DuckDuckGo Browser\",icon:\"ri-duckduckgo-fill\",desc:\"Ofrece protecci\u00f3n total de la privacidad por defecto, con un bot\u00f3n para borrar datos al instante.\",link:\"https:\/\/duckduckgo.com\/app\"},{id:\"samsung\",name:\"Samsung Internet\",icon:\"ri-smartphone-line\",desc:\"Optimizado para dispositivos Galaxy, con Modo Secreto y integraci\u00f3n con Bixby.\",link:\"https:\/\/www.samsung.com\/us\/apps\/samsung-internet\/\"},{id:\"operagx\",name:\"Opera GX\",icon:\"ri-gamepad-line\",desc:\"Dise\u00f1ado para gamers, con limitadores de CPU\/RAM y el modo de escritura de Aria.\",link:\"https:\/\/www.opera.com\/gx\"}],\n            wizardState: { currentStep: 0, userAnswers: {} },wizardSteps: [{ question: \"\u00bfCu\u00e1l es tu prioridad principal al navegar?\", key: 'priority', options: [ { text: \"M\u00e1xima privacidad y seguridad\", value: \"privacy\", icon: \"\" }, { text: \"Respuestas con IA y productividad\", value: \"ai\", icon: \"\" }, { text: \"Simplicidad y eficiencia general\", value: \"efficiency\", icon: \"\" }, { text: \"Acceso sin restricciones\", value: \"access\", icon: \"\" },] }],recommendations: { privacy: [{title:\"Opci\u00f3n ideal: fortaleza privada\",browserId:\"brave_b\",engineId:\"brave_s\",reason:\"Combo perfecto. El navegador bloquea todo por defecto y el motor tiene su propio \u00edndice sin sesgos comerciales. M\u00e1xima privacidad con buena velocidad.\"},{title:\"Alternativa: el est\u00e1ndar de la privacidad\",browserId:\"firefox\",engineId:\"duckduckgo\",reason:\"Una combinaci\u00f3n probada y respetada. Firefox, con sus contenedores y protecciones, junto a un motor que no te rastrea.\"},{title:\"Opci\u00f3n avanzada: resultados de Google an\u00f3nimos\",browserId:\"brave_b\",engineId:\"startpage\",reason:\"Obt\u00e9n la calidad de los resultados de Google, pero a trav\u00e9s de Startpage que elimina todos tus datos personales de la consulta.\"}], ai: [{title:\"Opci\u00f3n ideal: foco en respuestas\",browserId:\"arc\",engineId:\"perplexity\",reason:\"Arc te permite organizar tu investigaci\u00f3n en espacios de trabajo, mientras Perplexity te da respuestas directas con fuentes. El combo definitivo para la productividad acad\u00e9mica.\"},{title:\"Alternativa: ecosistema integrado\",browserId:\"edge\",engineId:\"bing\",reason:\"La IA de Copilot est\u00e1 integrada en todo el navegador Edge y en el motor Bing, creando una experiencia fluida para resumir, crear y buscar.\"},{title:\"Opci\u00f3n flexible: calidad premium\",browserId:\"vivaldi\",engineId:\"kagi\",reason:\"Combina el navegador m\u00e1s personalizable con el motor de b\u00fasqueda de m\u00e1s alta calidad. Kagi te permite filtrar y priorizar fuentes, ideal para usuarios exigentes.\"}], efficiency: [{title:\"Opci\u00f3n ideal: el est\u00e1ndar de oro\",browserId:\"chrome\",engineId:\"google\",reason:\"La combinaci\u00f3n m\u00e1s utilizada del mundo. Ofrece una sincronizaci\u00f3n perfecta y una experiencia familiar y r\u00e1pida para la mayor\u00eda de las tareas cotidianas.\"},{title:\"Alternativa: r\u00e1pido y ligero\",browserId:\"brave_b\",engineId:\"google\",reason:\"Usa el motor de b\u00fasqueda m\u00e1s completo, pero en un navegador que bloquea la publicidad y los scripts pesados, resultando en una navegaci\u00f3n mucho m\u00e1s r\u00e1pida.\"}], access: [{title:\"\u00danica opci\u00f3n fiable: la fortaleza an\u00f3nima\",browserId:\"tor\",engineId:\"duckduckgo\",reason:\"Para m\u00e1xima seguridad, anonimato y la capacidad de acceder a contenido bloqueado, Tor Browser es la herramienta est\u00e1ndar. Es m\u00e1s lento, pero insuperable en su misi\u00f3n.\"}] },\n            init: function() { document.getElementById('chap1').innerHTML = this.htmlContent; this.renderDirectories(); this.renderWizard(); },\n            renderDirectories: function() { const ed = document.getElementById('engines-directory'), bd = document.getElementById('browsers-directory'); if(ed) ed.innerHTML = this.engines.map(item => this.createCard(item)).join(''); if(bd) bd.innerHTML = this.browsers.map(item => this.createCard(item)).join(''); },\n            createCard: function(item) { return `<\/p>\n<div onclick=\"window.openExternalLink('${item.link}')\" class=\"directory-card block glassmorphism !rounded-lg p-4 hover:border-[var(--primary-color)] border-2 border-transparent cursor-pointer\">\n<h5 class=\"font-bold text-indigo-600 flex items-center gap-2\"><i class=\"${item.icon || 'ri-global-line'} text-xl\"><\/i><span>${item.name}<\/span><\/h5>\n<p class=\"text-sm text-slate-600 mt-1\">${item.desc}<\/p>\n<\/div>\n<p>`; },\n            renderWizard: function() {const wizardContainer = document.getElementById('wizard-content'); if (!wizardContainer) return; const step = this.wizardSteps[this.wizardState.currentStep]; if (!step) {const priority = this.wizardState.userAnswers.priority; const recs = this.recommendations[priority];let recsHtml = recs.map(rec => { const browser = this.browsers.find(b => b.id === rec.browserId); const engine = this.engines.find(e => e.id === rec.engineId); return `<\/p>\n<div class=\"recommendation-card border-l-4 border-[var(--primary-color)] pl-4 mb-6\">\n<h5 class=\"font-bold text-lg\">${rec.title}<\/h5>\n<div class=\"grid md:grid-cols-2 gap-4 mt-3\">\n<div onclick=\"window.openExternalLink('${browser.link}')\" class=\"directory-card block glassmorphism !rounded-lg p-3 hover:border-[var(--primary-color)] border-2 border-transparent cursor-pointer\">\n<p class=\"text-xs text-slate-500\">Navegador<\/p>\n<p class=\"font-bold flex items-center gap-2\"><i class=\"${browser.icon}\"><\/i> ${browser.name}<\/p>\n<\/div>\n<div onclick=\"window.openExternalLink('${engine.link}')\" class=\"directory-card block glassmorphism !rounded-lg p-3 hover:border-[var(--primary-color)] border-2 border-transparent cursor-pointer\">\n<p class=\"text-xs text-slate-500\">Motor<\/p>\n<p class=\"font-bold flex items-center gap-2\"><i class=\"${engine.icon}\"><\/i> ${engine.name}<\/p>\n<\/div>\n<\/div>\n<p class=\"mt-3 text-sm text-slate-600\">${rec.reason}<\/p>\n<\/div>\n<p>`; }).join('');wizardContainer.innerHTML = `<\/p>\n<div class=\"text-center fade-in\">\n<h4 class=\"text-xl font-bold mb-6 text-indigo-600\">Tus combinaciones recomendadas<\/h4>\n<div class=\"text-left\">${recsHtml}<\/div>\n<p><button onclick=\"m1.resetWizard()\" class=\"mt-6 px-4 py-2 bg-[var(--primary-color)] text-white rounded-lg nav-btn\">Empezar de nuevo<\/button><\/div>\n<p>`;return;} wizardContainer.innerHTML = `<\/p>\n<div class=\"wizard-step active text-center\">\n<h4 class=\"text-lg font-bold mb-6\">${step.question}<\/h4>\n<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">${step.options.map(opt => `<button onclick=\"m1.handleWizardChoice('${step.key}', '${opt.value}')\" class=\"wizard-option p-4 border-2 border-slate-200 rounded-lg text-left flex items-center hover:border-[var(--primary-color)] transition-colors\"><span class=\"text-3xl mr-4\">${opt.icon}<\/span><\/p>\n<div>\n<h5 class=\"font-bold\">${opt.text}<\/h5>\n<\/div>\n<p><\/button>`).join('')}<\/div>\n<\/div>\n<p>`;},\n            handleWizardChoice: function(key, value) { this.wizardState.userAnswers[key] = value; this.wizardState.currentStep++; this.renderWizard(); },\n            resetWizard: function() { this.wizardState.currentStep = 0; this.wizardState.userAnswers = {}; this.renderWizard(); }\n        };<\/p>\n<p>        const m2 = {\n            searchers: {\n                'academic-ebsco': { name:'Buscador de la Biblioteca', icon:'ri-building-4-line', type:'academia', buildUrl: q => `https:\/\/research-ebsco-com.bibliodigital.ugc.edu.co\/c\/72dcrf\/search\/results?q=${encodeURIComponent(q)}&type=0`, noFilters:true, noNOT:false },\n                'academic-scopus': { name:'Scopus', icon:'ri-bar-chart-box-line', type:'academia', buildUrl: q => { const eq=encodeURIComponent(q); return `https:\/\/www-scopus-com.bibliodigital.ugc.edu.co\/results\/results.uri?st1=${eq}&st2=&s=TITLE-ABS-KEY%28${eq}%29&limit=10&origin=searchbasic&sort=plf-f&src=s&sot=b&sdt=b`; }, noFilters:true, noNOT:false },\n                'web-google': { name:'Google', icon:'ri-google-fill', type:'web', buildUrl: q => `https:\/\/www.google.com\/search?q=${encodeURIComponent(q)}`, noFilters:false, noNOT:false },\n                'web-bing': { name:'Bing', icon:'ri-global-line', type:'web', buildUrl: q => `https:\/\/www.bing.com\/search?q=${encodeURIComponent(q)}`, noFilters:false, noNOT:false },\n                'web-duckduckgo': { name:'DuckDuckGo', icon:'ri-duckduckgo-fill', type:'web', buildUrl: q => `https:\/\/duckduckgo.com\/?q=${encodeURIComponent(q)}`, noFilters:false, noNOT:false },\n                'web-scholar': { name:'Scholar', icon:'ri-graduation-cap-line', type:'web', buildUrl: q => `https:\/\/scholar.google.com\/scholar?q=${encodeURIComponent(q)}`, noFilters:false, noNOT:false },\n                'library-koha': { name:'Cat\u00e1logo UGC', icon:'ri-book-line', type:'biblioteca', buildUrl: q => `http:\/\/biblioteca.ugc.edu.co\/cgi-bin\/koha\/opac-search.pl?q=${encodeURIComponent(q)}`, noFilters:true, noNOT:true }\n            },\n            examples: {\n                'academic-ebsco': [\n                    { blocks:[{txt:'(\"Tecnolog\u00eda de la informaci\u00f3n\" OR \"Information technology\")',op:''},{txt:'(\"Educaci\u00f3n superior\" OR \"Higher education\")',op:'AND'},{txt:'(\"Aprendizaje en l\u00ednea\" OR \"Online learning\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Cambio clim\u00e1tico\" OR \"Climate change\")',op:''},{txt:'(\"Agricultura sostenible\" OR \"Sustainable agriculture\")',op:'AND'},{txt:'(\"Seguridad alimentaria\" OR \"Food security\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Inteligencia artificial\" OR \"Artificial intelligence\")',op:''},{txt:'(\"Educaci\u00f3n\" OR \"Education\")',op:'AND'},{txt:'(\"Innovaci\u00f3n educativa\" OR \"Educational innovation\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Cultura digital\" OR \"Digital culture\")',op:''},{txt:'(\"Comunicaci\u00f3n digital\" OR \"Digital communication\")',op:'AND'},{txt:'(\"Medios sociales\" OR \"Social media\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Sostenibilidad\" OR \"Sustainability\")',op:''},{txt:'(\"Desarrollo sostenible\" OR \"Sustainable development\")',op:'AND'},{txt:'(\"Impacto ambiental\" OR \"Environmental impact\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} }\n                ],\n                'academic-scopus': [\n                    { blocks:[{txt:'(\"Transformaci\u00f3n digital\" OR \"Digital transformation\")',op:''},{txt:'(\"Gesti\u00f3n empresarial\" OR \"Business management\")',op:'AND'},{txt:'(\"Innovaci\u00f3n\" OR \"Innovation\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Econom\u00eda circular\" OR \"Circular economy\")',op:''},{txt:'(\"Gesti\u00f3n de residuos\" OR \"Waste management\")',op:'AND'},{txt:'(\"Reciclaje\" OR \"Recycling\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Salud mental\" OR \"Mental health\")',op:''},{txt:'(\"Adolescentes\" OR \"Adolescents\")',op:'AND'},{txt:'(\"Bienestar\" OR \"Well-being\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Gobernanza\" OR \"Governance\")',op:''},{txt:'(\"Transparencia\" OR \"Transparency\")',op:'AND'},{txt:'(\"Participaci\u00f3n ciudadana\" OR \"Citizen participation\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Biotecnolog\u00eda\" OR \"Biotechnology\")',op:''},{txt:'(\"Investigaci\u00f3n\" OR \"Research\")',op:'AND'},{txt:'(\"Aplicaciones cl\u00ednicas\" OR \"Clinical applications\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} }\n                ],\n                'web-google': [\n                    { blocks:[{txt:'\"Energ\u00eda renovable\"',op:''},{txt:'\"Cambio clim\u00e1tico\"',op:'AND'},{txt:'\"Pol\u00edticas ambientales\"',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Tecnolog\u00eda m\u00f3vil\"',op:''},{txt:'Aplicaciones',op:'AND'},{txt:'Desarrollo',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Equidad de g\u00e9nero\"',op:''},{txt:'Educaci\u00f3n',op:'AND'},{txt:'\"Derechos humanos\"',op:'AND'}], adv:{site:'.gov.co',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'Ciberseguridad',op:''},{txt:'Datos',op:'AND'},{txt:'Privacidad',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'Emprendimiento',op:''},{txt:'Innovaci\u00f3n',op:'AND'},{txt:'Startups',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} }\n                ],\n                'web-bing': [\n                    { blocks:[{txt:'\"Inteligencia artificial\"',op:''},{txt:'Educaci\u00f3n',op:'AND'},{txt:'Colombia',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Desarrollo sostenible\"',op:''},{txt:'Ciudades',op:'AND'},{txt:'Urbanismo',op:'AND'}], adv:{site:'.gov.co',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'Rob\u00f3tica',op:''},{txt:'Industria',op:'AND'},{txt:'Automatizaci\u00f3n',op:'AND'}], adv:{site:'.edu',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Salud p\u00fablica\"',op:''},{txt:'Prevenci\u00f3n',op:'AND'},{txt:'Epidemiolog\u00eda',op:'AND'}], adv:{site:'.gov',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Econom\u00eda digital\"',op:''},{txt:'Fintech',op:'AND'},{txt:'Inclusi\u00f3n',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} }\n                ],\n                'web-duckduckgo': [\n                    { blocks:[{txt:'\"Datos abiertos\"',op:''},{txt:'Gobierno',op:'AND'},{txt:'Transparencia',op:'AND'}], adv:{site:'.gov.co',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Privacidad digital\"',op:''},{txt:'Regulaci\u00f3n',op:'AND'},{txt:'Derechos',op:'AND'}], adv:{site:'.edu',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'Blockchain',op:''},{txt:'Contratos',op:'AND'},{txt:'Tecnolog\u00eda',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Cambio clim\u00e1tico\"',op:''},{txt:'Mitigaci\u00f3n',op:'AND'},{txt:'Adaptaci\u00f3n',op:'AND'}], adv:{site:'.gov',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Software libre\"',op:''},{txt:'Educaci\u00f3n',op:'AND'},{txt:'Acceso',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} }\n                ],\n                'web-scholar': [\n                    { blocks:[{txt:'(\"Aprendizaje autom\u00e1tico\" OR \"Machine learning\")',op:''},{txt:'(\"Procesamiento de lenguaje\" OR \"NLP\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Neurociencia\" OR \"Neuroscience\")',op:''},{txt:'(\"Cognici\u00f3n\" OR \"Cognition\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Dise\u00f1o urbano\"',op:''},{txt:'Sostenibilidad',op:'AND'},{txt:'Ciudades',op:'AND'}], adv:{site:'.edu',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Derecho ambiental\"',op:''},{txt:'Legislaci\u00f3n',op:'AND'},{txt:'Colombia',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'\"Pedagog\u00eda cr\u00edtica\"',op:''},{txt:'(\"Freire\" OR \"Educaci\u00f3n popular\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} }\n                ],\n                'library-koha': [\n                    { blocks:[{txt:'(\"Inteligencia artificial\" OR \"Artificial intelligence\")',op:''},{txt:'(\"Educaci\u00f3n\" OR \"Education\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Sostenibilidad\" OR \"Sustainability\")',op:''}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Tecnolog\u00eda\" OR \"Technology\")',op:''},{txt:'(\"Sociedad\" OR \"Society\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Innovaci\u00f3n\" OR \"Innovation\")',op:''}], adv:{site:'',file:'',source:'',after:'',before:''} },\n                    { blocks:[{txt:'(\"Cambio clim\u00e1tico\" OR \"Climate change\")',op:''},{txt:'(\"Ambiente\" OR \"Environment\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} }\n                ]\n            },\n            blocks: [], adv: { site:'', file:'', source:'', after:'', before:'' }, currentSearcher: null, exampleIndex: {}, synList: [],\n            htmlContent: `<\/p>\n<div class=\"flex justify-between items-center gap-4 mb-10\">\n<h2 class=\"text-3xl font-bold text-slate-800\"><span class=\"text-4xl mr-3 align-middle text-teal-500\">&#x1f6e0;&#xfe0f;<\/span>2. Laboratorio de B\u00fasqueda<\/h2>\n<p>    <button id=\"m2-tour-btn\" class=\"help-circle-btn bg-teal-600\" title=\"Ayuda del m\u00f3dulo\"><i class=\"ri-question-mark\"><\/i><\/button>\n<\/div>\n<div class=\"space-y-8\">\n<div id=\"m2-step1\" class=\"glassmorphism rounded-xl p-6 bg-white\">\n<h3 class=\"font-bold text-lg mb-1 flex items-center gap-2 text-slate-800\"><span class=\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-purple-600 text-white-forced text-xs font-bold\">1<\/span> \u00bfD\u00f3nde quieres buscar?<\/h3>\n<p class=\"text-sm text-slate-500 mb-4\">Selecciona el motor o base de datos. Puedes cambiar en cualquier momento sin perder tu ecuaci\u00f3n.<\/p>\n<div class=\"space-y-4\">\n<div>\n<p class=\"text-xs font-bold uppercase tracking-wider text-purple-500 mb-2\">Recursos suscritos<\/p>\n<div class=\"flex flex-wrap gap-2\" id=\"m2-btns-academia\"><\/div>\n<\/div>\n<div>\n<p class=\"text-xs font-bold uppercase tracking-wider text-blue-500 mb-2\">Web<\/p>\n<div class=\"flex flex-wrap gap-2\" id=\"m2-btns-web\"><\/div>\n<\/div>\n<div>\n<p class=\"text-xs font-bold uppercase tracking-wider text-amber-500 mb-2\">Biblioteca impresa<\/p>\n<div class=\"flex flex-wrap gap-2\" id=\"m2-btns-biblioteca\"><\/div>\n<\/div><\/div>\n<div id=\"m2-compat-warning\" class=\"hidden mt-3 text-sm bg-amber-50 border border-amber-200 rounded-lg p-3 text-slate-700\"><\/div>\n<\/p><\/div>\n<div id=\"m2-step2\" class=\"glassmorphism rounded-xl p-6 bg-white opacity-50 pointer-events-none transition-all duration-300\">\n<h3 class=\"font-bold text-lg mb-1 flex items-center gap-2 text-slate-800\"><span class=\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-blue-600 text-white-forced text-xs font-bold\">2<\/span> A\u00f1adir t\u00e9rminos<\/h3>\n<p class=\"text-sm text-slate-500 mb-4\">Escribe tu t\u00e9rmino, selecciona un operador y construye tu ecuaci\u00f3n paso a paso.<\/p>\n<div id=\"m2-builder-area\">\n<div class=\"grid md:grid-cols-5 gap-4 items-end\">\n<div class=\"md:col-span-3\"><label class=\"text-xs font-bold uppercase text-slate-500 mb-1 block\">T\u00e9rmino o frase<\/label><input id=\"m2-term\" placeholder=\"ej. Inteligencia Artificial\" class=\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-teal-500 outline-none text-slate-800\"><\/div>\n<div><label class=\"text-xs font-bold uppercase text-slate-500 mb-1 block\">Operador<\/label><select id=\"m2-oper\" class=\"w-full bg-white border border-slate-300 rounded-lg px-2 py-2 text-sm focus:ring-2 focus:ring-teal-500 outline-none text-slate-800\"><option value=\"AND\">AND (obligatorio)<\/option><option value=\"OR\">(OR) sin\u00f3nimos<\/option><option value=\"NOT\">\u2212 (excluir)<\/option><\/select><\/div>\n<div class=\"flex items-center gap-2 pt-3\"><input type=\"checkbox\" id=\"m2-exact\" class=\"h-5 w-5 text-teal-600 rounded border-slate-300 focus:ring-teal-500\"><label for=\"m2-exact\" class=\"text-sm font-medium text-slate-700\">Frase exacta<\/label><\/div>\n<\/p><\/div>\n<div id=\"m2-synArea\" class=\"hidden mt-3 p-3 bg-teal-50 rounded-lg border border-teal-100\"><label class=\"text-xs font-bold uppercase text-teal-700 mb-1 block\">Sin\u00f3nimos o traducciones<\/label><\/p>\n<div class=\"flex gap-2\"><input id=\"m2-syn\" placeholder=\"ej. IA, Artificial Intelligence\" class=\"flex-1 bg-white border border-teal-200 rounded px-3 py-1.5 text-sm text-slate-800\"><button id=\"m2-addSyn\" class=\"px-3 py-1.5 bg-blue-600 rounded text-white-forced text-sm font-semibold hover:bg-blue-700\">+ Otra<\/button><\/div>\n<div id=\"m2-synChips\" class=\"flex flex-wrap gap-1 mt-2\"><\/div>\n<\/div>\n<div id=\"m2-explain\" class=\"text-xs bg-slate-100 p-3 rounded-lg mt-3 text-slate-600 italic border-l-4 border-slate-400\"><\/div>\n<div class=\"flex flex-wrap gap-3 mt-4\">\n                <button id=\"m2-addBtn\" class=\"flex-1 min-w-[120px] bg-teal-600 py-2.5 rounded-lg hover:bg-teal-700 font-bold text-white-forced shadow-md\">A\u00f1adir bloque<\/button>\n                <button id=\"m2-exampleBtn\" class=\"flex-1 min-w-[120px] bg-sky-500 py-2.5 rounded-lg hover:bg-sky-600 font-bold text-white-forced shadow-md\">Ver ejemplo<\/button>\n                <button id=\"m2-resetBtn\" class=\"flex-1 min-w-[120px] bg-pink-500 py-2.5 rounded-lg hover:bg-pink-600 font-bold text-white-forced shadow-md\">Reiniciar<\/button>\n            <\/div>\n<\/p><\/div>\n<div class=\"mt-6\">\n<h4 class=\"font-bold text-sm text-slate-500 uppercase mb-2\">Bloques activos <span class=\"font-normal normal-case\">(clic para eliminar)<\/span><\/h4>\n<div id=\"m2-chipBox\" class=\"border-2 border-dashed border-slate-300 rounded-lg p-4 min-h-[60px] flex flex-wrap gap-2 text-sm items-center bg-slate-50\"><\/div>\n<\/div><\/div>\n<div id=\"m2-step3\" class=\"glassmorphism rounded-xl p-6 bg-white hidden transition-all duration-300\">\n<h3 class=\"font-bold text-lg mb-1 flex items-center gap-2 text-slate-800\"><span class=\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-emerald-600 text-white-forced text-xs font-bold\">3<\/span> Filtros avanzados<\/h3>\n<p class=\"text-sm text-slate-500 mb-4\">Filtra resultados por dominio, tipo de archivo, fuente o rango de fechas.<\/p>\n<div class=\"grid md:grid-cols-2 gap-4\">\n<div><label class=\"text-xs font-bold uppercase text-slate-500 mb-1 block\">Dominio (site:)<\/label><select id=\"m2-siteSel\" class=\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\"><option value=\"\">\u2014 sin filtro \u2014<\/option><option value=\".edu.co\">Educaci\u00f3n colombiana (.edu.co)<\/option><option value=\".gov.co\">Oficiales Colombia (.gov.co)<\/option><option value=\".gov\">Todos gobiernos (.gov)<\/option><option value=\".edu\">Educaci\u00f3n general (.edu)<\/option><option value=\"custom\">Otro (escribe\u2026)<\/option><\/select><input id=\"m2-siteCustom\" placeholder=\"ej. unesco.org\" class=\"w-full bg-white border border-slate-300 rounded-lg px-3 py-1.5 text-sm mt-2 hidden text-slate-800\"><\/div>\n<div><label class=\"text-xs font-bold uppercase text-slate-500 mb-1 block\">Tipo de archivo (filetype:)<\/label><select id=\"m2-fileSel\" class=\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\"><option value=\"\">Todos<\/option><option value=\"pdf\">PDF<\/option><option value=\"pptx\">PPTX<\/option><option value=\"xlsx\">XLSX<\/option><option value=\"csv\">CSV<\/option><\/select><\/div>\n<div><label class=\"text-xs font-bold uppercase text-slate-500 mb-1 block\">Fuente Google News (source:)<\/label><input id=\"m2-source\" placeholder=\"ej. bbc, eltiempo\" class=\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\"><\/div>\n<div class=\"flex gap-4\">\n<div class=\"flex-1\"><label class=\"text-xs font-bold uppercase text-slate-500 mb-1 block\">Despu\u00e9s de (YYYY)<\/label><input id=\"m2-after\" type=\"number\" min=\"1900\" max=\"2100\" placeholder=\"2022\" class=\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\"><\/div>\n<div class=\"flex-1\"><label class=\"text-xs font-bold uppercase text-slate-500 mb-1 block\">Antes de (YYYY)<\/label><input id=\"m2-before\" type=\"number\" min=\"1900\" max=\"2100\" placeholder=\"2024\" class=\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\"><\/div>\n<\/div>\n<\/div><\/div>\n<div id=\"m2-step4\" class=\"glassmorphism rounded-xl p-6 bg-white border-teal-100 border-2 opacity-50 pointer-events-none transition-all duration-300\">\n<h3 class=\"font-bold text-lg mb-1 flex items-center gap-2 text-slate-800\"><span class=\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-red-600 text-white-forced text-xs font-bold\">4<\/span> Ecuaci\u00f3n final<\/h3>\n<p class=\"text-sm text-slate-500 mb-3\">C\u00f3piala o l\u00e1nzala directamente en el buscador seleccionado.<\/p>\n<div id=\"m2-output-card\" class=\"border-2 border-teal-500 rounded-lg p-4 bg-slate-50 text-slate-900 font-mono text-lg shadow-inner min-h-[60px]\"><span id=\"m2-queryOut\" class=\"block break-words leading-relaxed\"><\/span><\/div>\n<div class=\"flex justify-center gap-3 mt-4\">\n            <button id=\"m2-copyBtn\" class=\"px-5 py-2 bg-white border border-slate-300 hover:bg-slate-100 rounded-lg text-slate-700 font-semibold flex items-center gap-2 shadow-sm\"><i class=\"ri-clipboard-line\"><\/i> Copiar<\/button>\n            <button id=\"m2-searchBtn\" onclick=\"if(this.dataset.url) window.openExternalLink(this.dataset.url)\" class=\"px-5 py-2 bg-teal-600 hover:bg-teal-700 rounded-lg text-white-forced font-semibold flex items-center gap-2 shadow-md cursor-pointer border-none\"><i class=\"ri-search-line\"><\/i> <span>Buscar<\/span><\/button>\n        <\/div>\n<\/p><\/div>\n<\/div>\n<div class=\"module-nav-footer\">\n    <button onclick=\"show('chap1')\" class=\"module-nav-btn group\"><i class=\"ri-arrow-left-line mr-2 group-hover:-translate-x-1 transition-transform\"><\/i> M\u00f3dulo 1<\/button>\n    <button onclick=\"show('chap3')\" class=\"module-nav-btn group\">Siguiente: Fuentes <i class=\"ri-arrow-right-line ml-2 group-hover:translate-x-1 transition-transform\"><\/i><\/button>\n<\/div>\n<p>`,\n            init: function() {\n                document.getElementById('chap2').innerHTML = this.htmlContent;\n                const $ = id => document.getElementById(id);\n                this.refs = {\n                    step1:$('m2-step1'), step2:$('m2-step2'), step3:$('m2-step3'), step4:$('m2-step4'),\n                    term:$('m2-term'), oper:$('m2-oper'), exact:$('m2-exact'),\n                    synArea:$('m2-synArea'), syn:$('m2-syn'), addSyn:$('m2-addSyn'), synChips:$('m2-synChips'),\n                    addBtn:$('m2-addBtn'), explan:$('m2-explain'),\n                    chipBox:$('m2-chipBox'), queryO:$('m2-queryOut'),\n                    copyBtn:$('m2-copyBtn'), searchBtn:$('m2-searchBtn'),\n                    siteSel:$('m2-siteSel'), siteCustom:$('m2-siteCustom'),\n                    fileSel:$('m2-fileSel'), source:$('m2-source'), after:$('m2-after'), before:$('m2-before'),\n                    exampleBtn:$('m2-exampleBtn'), resetBtn:$('m2-resetBtn'),\n                    compatWarn:$('m2-compat-warning')\n                };\n                this.tips = {\n                    AND:'<b>AND:<\/b> Asegura que el t\u00e9rmino <u>debe<\/u> aparecer en los resultados. Es el operador por defecto.',\n                    OR:'<b>(OR):<\/b> Busca el t\u00e9rmino principal <u>o cualquiera de los sin\u00f3nimos<\/u>. Se agrupan con par\u00e9ntesis.<br \/>Usa el campo de sin\u00f3nimos y presiona <b>+ Otra<\/b> para acumular, luego <b>A\u00f1adir bloque<\/b> para cerrar.',\n                    NOT:'<b>\u2212 (guion):<\/b> <u>Excluye<\/u> cualquier resultado que contenga este t\u00e9rmino. \u00datil para eliminar ruido.'\n                };\n                this.refs.explan.innerHTML = this.tips['AND'];\n                this.renderSearcherButtons();\n                this.addEventListeners();\n                var saved = localStorage.getItem('m2_state_v05');\n                if (saved) { try { var p = JSON.parse(saved); if (p.searcher && this.searchers[p.searcher]) { this.blocks = p.blocks || []; this.adv = p.adv || {site:''}; this.selectSearcher(p.searcher); } } catch(e) { localStorage.removeItem('m2_state_v05'); } }\n            },\n            renderSearcherButtons: function() {\n                var groups = { academia: document.getElementById('m2-btns-academia'), web: document.getElementById('m2-btns-web'), biblioteca: document.getElementById('m2-btns-biblioteca') };\n                var self = this;\n                Object.keys(this.searchers).forEach(function(id) {\n                    var s = self.searchers[id];\n                    var btn = document.createElement('button');\n                    btn.className = 'm2-searcher-btn px-4 py-2 rounded-lg border border-slate-300 flex items-center gap-2 text-sm font-medium';\n                    btn.dataset.id = id;\n                    btn.innerHTML = '<i class=\"'+s.icon+' text-lg\"><\/i> '+s.name;\n                    btn.onclick = function() { self.selectSearcher(id); };\n                    if (groups[s.type]) groups[s.type].appendChild(btn);\n                });\n            },\n            checkCompatibility: function(newId) {\n                var s = this.searchers[newId];\n                var issues = [];\n                if (s.noFilters && this.adv.site) {\n                    issues.push('El filtro <b>site:'+this.adv.site+'<\/b> no es soportado por <b>'+s.name+'<\/b>. Elimina el chip <code>site:<\/code>.');\n                }\n                if (s.noFilters && this.adv.file) {\n                    issues.push('El filtro <b>filetype:'+this.adv.file+'<\/b> no es soportado por <b>'+s.name+'<\/b>. Elimina el chip <code>filetype:<\/code>.');\n                }\n                if (s.noFilters && this.adv.source) {\n                    issues.push('El filtro <b>source:'+this.adv.source+'<\/b> no es soportado por <b>'+s.name+'<\/b>. Elimina el chip <code>source:<\/code>.');\n                }\n                if (s.noFilters && (this.adv.after || this.adv.before)) {\n                    issues.push('Los filtros de fecha (<b>after:\/before:<\/b>) no son soportados por <b>'+s.name+'<\/b>. Elimina esos chips.');\n                }\n                if (s.noNOT && this.blocks.some(function(b){return b.txt.startsWith('-');})) {\n                    issues.push('El operador <b>NOT (\u2212)<\/b> no es soportado por <b>'+s.name+'<\/b>. Elimina los bloques con guion (\u2212).');\n                }\n                return issues;\n            },\n            recheckCompat: function() {\n                if (!this.currentSearcher) return;\n                var issues = this.checkCompatibility(this.currentSearcher);\n                if (issues.length > 0) {\n                    this.refs.compatWarn.innerHTML = '<\/p>\n<div class=\"flex items-start gap-2\"><i class=\"ri-error-warning-line text-amber-400 text-xl shrink-0 mt-0.5\"><\/i><\/p>\n<div>\n<p class=\"font-semibold text-amber-400 mb-1\">Incompatibilidad detectada<\/p>\n<ul class=\"list-disc ml-4 space-y-1\">' + issues.map(function(i){return '<\/p>\n<li>'+i+'<\/li>\n<p>';}).join('') + '<\/ul>\n<\/div>\n<\/div>\n<p>';\n                    this.refs.compatWarn.classList.remove('hidden');\n                } else { this.refs.compatWarn.classList.add('hidden'); }\n            },\n            selectSearcher: function(id) {\n                var s = this.searchers[id];\n                this.currentSearcher = id;\n                this.recheckCompat();\n                \/\/ Visual\n                document.querySelectorAll('.m2-searcher-btn').forEach(function(b) {\n                    b.classList.toggle('selected', b.dataset.id === id);\n                });\n                \/\/ Enable steps\n                this.refs.step2.classList.remove('opacity-50','pointer-events-none');\n                this.refs.step4.classList.remove('opacity-50','pointer-events-none');\n                \/\/ Step 3\n                if (s.noFilters) {\n                    this.refs.step3.classList.add('hidden');\n                } else {\n                    this.refs.step3.classList.remove('hidden');\n                }\n                \/\/ NOT operator\n                var notOpt = this.refs.oper.querySelector('option[value=\"NOT\"]');\n                if (s.noNOT) {\n                    notOpt.disabled = true;\n                    notOpt.textContent = '\u2212 (excluir) \u2014 no disponible';\n                    if (this.refs.oper.value === 'NOT') { this.refs.oper.value = 'AND'; this.refs.explan.innerHTML = this.tips['AND']; }\n                } else {\n                    notOpt.disabled = false;\n                    notOpt.textContent = '\u2212 (excluir)';\n                }\n                \/\/ Search button label\n                this.refs.searchBtn.querySelector('span').textContent = 'Buscar en ' + s.name;\n                \/\/ Rebuild query with current blocks\n                this.buildQuery();\n                if (!this.exampleIndex[id]) this.exampleIndex[id] = 0;\n            },\n            addEventListeners: function() {\n                var self = this, refs = this.refs;\n                refs.oper.onchange = function() {\n                    var v = refs.oper.value;\n                    refs.explan.innerHTML = self.tips[v];\n                    refs.synArea.classList.toggle('hidden', v !== 'OR');\n                    if (v !== 'OR') { self.synList = []; refs.synChips.innerHTML = ''; }\n                };\n                refs.addSyn.onclick = function() {\n                    var val = refs.syn.value.trim(); if (!val) return;\n                    self.synList.push(val); refs.syn.value = '';\n                    self.renderSynChips(); refs.syn.focus();\n                };\n                refs.syn.onkeydown = function(e) { if (e.key === 'Enter') { e.preventDefault(); self.addBlock(); } };\n                refs.addBtn.onclick = function() { self.addBlock(); };\n                refs.term.onkeydown = function(e) { if (e.key === 'Enter') { e.preventDefault(); if (refs.oper.value === 'OR' && self.synList.length === 0 && !refs.syn.value.trim()) { refs.syn.focus(); } else { self.addBlock(); } } };\n                refs.siteSel.onchange = function(e) {\n                    refs.siteCustom.classList.toggle('hidden', e.target.value !== 'custom');\n                    self.adv.site = e.target.value === 'custom' ? '' : e.target.value;\n                    if (e.target.value === 'custom') refs.siteCustom.value = '';\n                    self.buildQuery();\n                };\n                refs.siteCustom.oninput = function(e) { self.adv.site = e.target.value.trim(); self.buildQuery(); };\n                refs.fileSel.onchange = function(e) { self.adv.file = e.target.value; self.buildQuery(); };\n                refs.source.oninput = function(e) { self.adv.source = e.target.value.trim(); self.buildQuery(); };\n                refs.after.oninput = function(e) { self.adv.after = e.target.value; self.buildQuery(); };\n                refs.before.oninput = function(e) { self.adv.before = e.target.value; self.buildQuery(); };\n                refs.copyBtn.onclick = function() {\n                    var text = refs.queryO.textContent; if (!text) return;\n                    navigator.clipboard.writeText(text).then(function() {\n                        refs.copyBtn.innerHTML = '<i class=\"ri-check-line\"><\/i> Copiado';\n                        setTimeout(function() { refs.copyBtn.innerHTML = '<i class=\"ri-clipboard-line\"><\/i> Copiar'; }, 1500);\n                    }).catch(function() {\n                        var ta = document.createElement('textarea'); ta.value = text; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta);\n                        refs.copyBtn.innerHTML = '<i class=\"ri-check-line\"><\/i> Copiado';\n                        setTimeout(function() { refs.copyBtn.innerHTML = '<i class=\"ri-clipboard-line\"><\/i> Copiar'; }, 1500);\n                    });\n                };\n                refs.exampleBtn.onclick = function() { self.loadExample(); };\n                refs.resetBtn.onclick = function() { self.resetState(); };\n            },\n            renderSynChips: function() {\n                var self = this;\n                this.refs.synChips.innerHTML = this.synList.map(function(s, i) {\n                    return '<span class=\"inline-flex items-center gap-1 px-2 py-0.5 bg-blue-600\/30 border border-blue-500\/50 rounded-full text-xs cursor-pointer hover:bg-red-600\/30\" data-idx=\"'+i+'\">'+s+' <i class=\"ri-close-line text-xs\"><\/i><\/span>';\n                }).join('');\n                this.refs.synChips.querySelectorAll('span').forEach(function(el) {\n                    el.onclick = function() { self.synList.splice(parseInt(el.dataset.idx), 1); self.renderSynChips(); };\n                });\n            },\n            q: function(t) { return t.includes(' ') && !t.startsWith('\"') ? '\"'+t+'\"' : t; },\n            addBlock: function() {\n                var t = this.refs.term.value.trim(); if (!t) return;\n                var first = !this.blocks.length, op = this.refs.oper.value;\n                if (op === 'OR') {\n                    t = this.refs.exact.checked ? '\"'+t+'\"' : this.q(t);<\/p>\n<p>                    \/\/ Capturar autom\u00e1ticamente cualquier texto pendiente en el campo de sin\u00f3nimos\n                    var pendingSyn = this.refs.syn.value.trim();\n                    var extraSyns = pendingSyn ? [this.q(pendingSyn)] : [];\n                    var allTerms = [t].concat(this.synList.map(this.q)).concat(extraSyns);<\/p>\n<p>                    if (allTerms.length < 2) { \n                        alert('Para (OR), a\u00f1ade o escribe al menos un sin\u00f3nimo.'); \n                        this.refs.syn.focus(); \n                        return; \n                    }\n                    this.blocks.push({ txt: '('+allTerms.join(' OR ')+')', op: first ? '' : 'AND' });\n                    this.synList = []; this.refs.synChips.innerHTML = '';\n                } else if (op === 'NOT') {\n                    this.blocks.push({ txt: '-'+t.replace(\/^\"+|\"+$\/g, ''), op: '' });\n                } else {\n                    t = this.refs.exact.checked ? '\"'+t+'\"' : this.q(t);\n                    this.blocks.push({ txt: t, op: first ? '' : 'AND' });\n                }\n                this.refs.term.value = ''; this.refs.syn.value = ''; this.refs.exact.checked = false;\n                this.refs.oper.value = 'AND'; this.refs.explan.innerHTML = this.tips['AND']; this.refs.synArea.classList.add('hidden');\n                this.buildQuery(); this.refs.term.focus();\n                this.recheckCompat();\n            },\n            buildQuery: function() {\n                if (!this.refs.chipBox) return;\n                var self = this;\n                this.refs.chipBox.innerHTML = '';\n                this.blocks.forEach(function(b, i) {\n                    var sp = document.createElement('span');\n                    sp.className = 'chip ' + (b.txt.startsWith('(') ? 'chipOR' : b.txt.startsWith('-') ? 'chipNOT' : 'base');\n                    sp.textContent = (b.op ? b.op + ' ' : '') + b.txt;\n                    sp.title = 'Clic para eliminar';\n                    sp.onclick = function() { self.blocks.splice(i, 1); self.buildQuery(); self.recheckCompat(); };\n                    self.refs.chipBox.appendChild(sp);\n                });\n                if (this.adv.site) {\n                    var sc = document.createElement('span');\n                    sc.className = 'chip chipSITE'; sc.textContent = 'site:'+this.adv.site; sc.title = 'Clic para eliminar filtro';\n                    sc.onclick = function() { self.adv.site = ''; self.updateAdvInputs(); self.buildQuery(); self.recheckCompat(); };\n                    this.refs.chipBox.appendChild(sc);\n                }\n                var advFilters = [\n                    {k:'file', prefix:'filetype:'}, {k:'source', prefix:'source:'},\n                    {k:'after', prefix:'after:'}, {k:'before', prefix:'before:'}\n                ];\n                advFilters.forEach(function(f) {\n                    if (self.adv[f.k]) {\n                        var ac = document.createElement('span');\n                        ac.className = 'chip chipSITE'; ac.textContent = f.prefix+self.adv[f.k]; ac.title = 'Clic para eliminar filtro';\n                        ac.onclick = function() { self.adv[f.k] = ''; self.updateAdvInputs(); self.buildQuery(); self.recheckCompat(); };\n                        self.refs.chipBox.appendChild(ac);\n                    }\n                });\n                var qStr = this.blocks.map(function(b) { return (b.op ? b.op+' ' : '') + b.txt; }).join(' ').trim();\n                var fullQ = qStr;\n                if (this.adv.site) fullQ += ' site:'+this.adv.site;\n                if (this.adv.file) fullQ += ' filetype:'+this.adv.file;\n                if (this.adv.source) fullQ += ' source:'+this.adv.source;\n                if (this.adv.after) fullQ += ' after:'+this.adv.after;\n                if (this.adv.before) fullQ += ' before:'+this.adv.before;\n                fullQ = fullQ.trim();\n                this.refs.queryO.textContent = fullQ;\n                if (this.currentSearcher) {\n                    this.refs.searchBtn.dataset.url = this.searchers[this.currentSearcher].buildUrl(fullQ);\n                }\n                if (this.currentSearcher) {\n                    localStorage.setItem('m2_state_v05', JSON.stringify({ searcher: this.currentSearcher, blocks: this.blocks, adv: this.adv }));\n                }\n            },\n            updateAdvInputs: function() {\n                if (['', '.edu.co', '.gov.co', '.gov', '.edu'].includes(this.adv.site)) {\n                    this.refs.siteSel.value = this.adv.site; this.refs.siteCustom.classList.add('hidden');\n                } else {\n                    this.refs.siteSel.value = 'custom'; this.refs.siteCustom.value = this.adv.site; this.refs.siteCustom.classList.remove('hidden');\n                }\n                this.refs.fileSel.value = this.adv.file || '';\n                this.refs.source.value = this.adv.source || '';\n                this.refs.after.value = this.adv.after || '';\n                this.refs.before.value = this.adv.before || '';\n            },\n            resetState: function() {\n                this.blocks = []; this.adv = { site:'', file:'', source:'', after:'', before:'' }; this.synList = []; this.refs.synChips.innerHTML = '';\n                localStorage.removeItem('m2_state_v05'); this.updateAdvInputs(); this.buildQuery();\n                if (this.currentSearcher) { this.refs.compatWarn.classList.add('hidden'); }\n            },\n            loadExample: function() {\n                if (!this.currentSearcher) { alert('Primero selecciona un buscador en el Paso 1.'); return; }\n                var exs = this.examples[this.currentSearcher];\n                if (!exs || exs.length === 0) return;\n                if (!this.exampleIndex[this.currentSearcher]) this.exampleIndex[this.currentSearcher] = 0;\n                var idx = this.exampleIndex[this.currentSearcher] % exs.length;\n                var ex = exs[idx];\n                this.blocks = JSON.parse(JSON.stringify(ex.blocks));\n                this.adv = JSON.parse(JSON.stringify(ex.adv));\n                this.updateAdvInputs(); this.buildQuery();\n                this.exampleIndex[this.currentSearcher] = idx + 1;\n                this.recheckCompat();\n            }\n        };\n        \n        const m3 = {\n            initialized: false,\n            htmlContent: `\n\n<div class=\"flex justify-between items-center gap-4 mb-10\">\n<h2 class=\"text-2xl sm:text-3xl font-bold\"><span class=\"text-4xl mr-3 align-middle\"><\/span>Explorador de fuentes<\/h2>\n<p><button id=\"m3-tour-btn\" class=\"help-circle-btn bg-emerald-600\" title=\"Ayuda del m\u00f3dulo\"><i class=\"ri-question-mark\"><\/i><\/button><\/div>\n<div class=\"glassmorphism rounded-xl p-6 md:p-8 space-y-8\">\n<div class=\"flex flex-wrap gap-x-6 gap-y-3 justify-center text-lg font-bold border-b border-slate-200 pb-4\" id=\"tabs-m3\"><button class=\"tab-btn\" data-area=\"arq\"> Arquitectura<\/button><button class=\"tab-btn\" data-area=\"eco\"> Econ\u00f3micas<\/button><button class=\"tab-btn\" data-area=\"law\"> Jur\u00eddicas<\/button><button class=\"tab-btn\" data-area=\"edu\"> Educaci\u00f3n<\/button><button class=\"tab-btn\" data-area=\"multi\"> Multidisciplinar<\/button><\/div>\n<div id=\"content-m3\" class=\"space-y-6\"><\/div>\n<\/div>\n<div class=\"module-nav-footer\"><button onclick=\"show('chap2')\" class=\"module-nav-btn group\"><i class=\"ri-arrow-left-line mr-2 group-hover:-translate-x-1 transition-transform\"><\/i> Laboratorio<\/button><button onclick=\"show('chap4')\" class=\"module-nav-btn group\">Siguiente: Evaluaci\u00f3n <i class=\"ri-arrow-right-line ml-2 group-hover:translate-x-1 transition-transform\"><\/i><\/button><\/div>\n<p>`,\n            area: \"arq\",\n            data: {\n                arq:{\n                    subs:[\n                        [\"AV Monograf\u00edas\", \"https:\/\/arquitecturaviva-com.bibliodigital.ugc.edu.co\/publicaciones\/av-monografias\"],\n                        [\"Arquitectura Viva\", \"https:\/\/arquitecturaviva-com.bibliodigital.ugc.edu.co\/publicaciones\/av\"],\n                        [\"AV Proyectos\", \"https:\/\/arquitecturaviva-com.bibliodigital.ugc.edu.co\/publicaciones\/av-proyectos\"],\n                        [\"Construdata\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.construdata.com\"],\n                        [\"Oc\u00e9ano Arquitectura \u2013 Architecture Open Library\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/www.architectureopenlibrary.com\/\"],\n                        [\"Art & Architecture Complete\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/search.ebscohost.com\/login.aspx?authtype=ip,uid&custid=s6279388&profile=ehost&defaultdb=vth&groupid=main\"]\n                    ],\n                    open:[[\"Structurae\",\"https:\/\/structurae.net\",\"Base de datos de estructuras y puentes con planos y fichas t\u00e9cnicas.\",\"ri-building-line\"],[\"ArchNet\",\"https:\/\/archnet.org\",\"Repositorio colaborativo sobre arquitectura isl\u00e1mica y patrimonio.\",\"ri-ancient-gate-line\"],[\"OATD\",\"https:\/\/oatd.org\",\"Motor de tesis doctorales y de maestr\u00eda OA.\",\"ri-graduation-cap-line\"],[\"BASE\",\"https:\/\/www.base-search.net\",\"\u00cdndice acad\u00e9mico multidisciplinar OA.\",\"ri-search-eye-line\"]],repo:[],gov:[[\"MinVivienda\",\"https:\/\/www.minvivienda.gov.co\",\"Normativa y estad\u00edsticas de vivienda y territorio.\",\"ri-government-line\"],[\"INVIAS\",\"https:\/\/www.invias.gov.co\",\"Datos y estudios de infraestructura vial.\",\"ri-road-map-line\"],[\"IGAC\",\"https:\/\/www.igac.gov.co\",\"Cartograf\u00eda, catastros y geograf\u00eda oficial.\",\"ri-map-2-line\"],[\"UPRA\",\"https:\/\/www.upra.gov.co\",\"Planeaci\u00f3n rural y uso de suelo.\",\"ri-plant-line\"],[\"ANI\",\"https:\/\/www.ani.gov.co\",\"Proyectos concesionados de infraestructura.\",\"ri-briefcase-4-line\"],[\"Supernotariado\",\"https:\/\/www.supernotariado.gov.co\",\"Informaci\u00f3n catastral y registros de propiedad.\",\"ri-file-text-line\"]]\n                },\n                eco:{\n                    subs:[\n                        [\"Business Source Ultimate\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/search.ebscohost.com\/login.aspx?authtype=ip,uid&custid=s6279388&profile=ehost&defaultdb=bsu&groupid=main\"],\n                        [\"Gesti\u00f3n Humana\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/www.gestionhumana.com\"],\n                        [\"Legiscomex\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.legiscomex.com\/\"]\n                    ],\n                    open:[[\"RePEc\",\"https:\/\/repec.org\",\"Trabajos acad\u00e9micos y series de documentos de econom\u00eda.\",\"ri-line-chart-line\"],[\"EconStor\",\"https:\/\/econstor.eu\",\"Repositorio alem\u00e1n de working papers y art\u00edculos de econom\u00eda.\",\"ri-line-chart-line\"],[\"IDEAS\",\"https:\/\/ideas.repec.org\",\"Metabuscador de la red RePEc.\",\"ri-search-eye-line\"],[\"DOAJ \u2013 Econom\u00eda\",\"https:\/\/doaj.org\",\"Revistas OA filtradas por categor\u00eda Econom\u00eda.\",\"ri-book-open-line\"],[\"SSRN\",\"https:\/\/www.ssrn.com\",\"Social Science Research Network: preprints en ciencias sociales.\",\"ri-group-line\"]],repo:[[\"Redalyc \u2013 Econom\u00eda\",\"https:\/\/www.redalyc.org\",\"Colecci\u00f3n latinoamericana de revistas OA en econom\u00eda.\",\"ri-earth-line\"],[\"SciELO \u2013 Ciencias Sociales\",\"https:\/\/www.scielo.org\",\"Revistas evaluadas con \u00e1rea econom\u00eda\/admin.\",\"ri-earth-line\"],[\"CLACSO\",\"https:\/\/clacso.org\",\"Libros y documentos de ciencias sociales latinoamericanas.\",\"ri-earth-line\"]],gov:[[\"Banco de la Rep\u00fablica\",\"https:\/\/www.banrep.gov.co\",\"Series estad\u00edsticas macroecon\u00f3micas de Colombia.\",\"ri-bank-line\"],[\"DANE\",\"https:\/\/www.dane.gov.co\",\"Censos, encuestas y microdatos oficiales.\",\"ri-bar-chart-box-line\"],[\"MinHacienda\",\"https:\/\/www.minhacienda.gov.co\",\"Pol\u00edtica fiscal y presupuestal.\",\"ri-government-line\"],[\"DIAN\",\"https:\/\/www.dian.gov.co\",\"Documentos tributarios y aduaneros.\",\"ri-file-shield-2-line\"],[\"Supersociedades\",\"https:\/\/www.supersociedades.gov.co\",\"Informaci\u00f3n empresarial y balances.\",\"ri-building-4-line\"],[\"SECOP\",\"https:\/\/www.colombiacompra.gov.co\",\"Contrataci\u00f3n p\u00fablica y datos de compras.\",\"ri-shopping-cart-line\"]]\n                },\n                law:{\n                    subs:[\n                        [\"Multilegis\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.multilegis.com\/ugc\/\"],\n                        [\"Tirant PRIME\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.tirantonline.com.co\/latam\/login.do?user=GRANCOLOMBIA&password=LATAM\"],\n                        [\"Vlex\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/vlex.com\/account\/login_ip\"]\n                    ],\n                    open:[[\"RedALyC\",\"https:\/\/www.redalyc.org\",\"Revistas OA de ciencias sociales y derecho.\",\"ri-earth-line\"],[\"SciELO\",\"https:\/\/www.scielo.org\",\"Colecci\u00f3n jur\u00eddica y de salud p\u00fablica.\",\"ri-earth-line\"],[\"CLACSO\",\"https:\/\/clacso.org\",\"Documentos y libros de pol\u00edticas p\u00fablicas.\",\"ri-earth-line\"]],repo:[[\"Repositorio Corte Constitucional\",\"https:\/\/www.corteconstitucional.gov.co\",\"Sentencias y jurisprudencia colombiana.\",\"ri-scales-3-line\"]],gov:[[\"Corte Constitucional\",\"https:\/\/www.corteconstitucional.gov.co\",\"Portal oficial del alto tribunal.\",\"ri-scales-3-line\"],[\"Consejo de Estado\",\"https:\/\/www.consejodeestado.gov.co\",\"Jurisprudencia contencioso-administrativa.\",\"ri-scales-3-line\"],[\"Rama Judicial\",\"https:\/\/www.ramajudicial.gov.co\",\"Consulta de procesos y expedientes.\",\"ri-folder-open-line\"],[\"MinJusticia\",\"https:\/\/www.minjusticia.gov.co\",\"Normativa y pol\u00edtica p\u00fablica sector justicia.\",\"ri-government-line\"],[\"Fiscal\u00eda\",\"https:\/\/www.fiscalia.gov.co\",\"Indicadores y boletines criminal\u00edsticos.\",\"ri-file-search-line\"],[\"Procuradur\u00eda\",\"https:\/\/www.procuradurial.gov.co\",\"Control disciplinario y fallos.\",\"ri-shield-user-line\"],[\"Defensor\u00eda\",\"https:\/\/www.defensoria.gov.co\",\"Informes de DD.HH. y alertas tempranas.\",\"ri-group-2-line\"]]\n                },\n                edu:{\n                    subs:[\n                        [\"Education Database\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/search.proquest.com\/education\/socialsciences\/fromDatabasesLayer?accountid=50439\"]\n                    ],\n                    open:[[\"ERIC\",\"https:\/\/eric.ed.gov\",\"\u00cdndice de literatura en educaci\u00f3n patrocinado por el US DoE.\",\"ri-graduation-cap-line\"],[\"E-Revistas\",\"https:\/\/e-revistas.csic.es\",\"Portal espa\u00f1ol de revistas OA en humanidades y educaci\u00f3n.\",\"ri-book-open-line\"],[\"Dialnet\",\"https:\/\/dialnet.unirioja.es\",\"Alertas bibliogr\u00e1ficas y tesis iberoamericanas.\",\"ri-earth-line\"]],repo:[],gov:[[\"MinEducaci\u00f3n\",\"https:\/\/www.mineducacion.gov.co\",\"Normativa y estad\u00edsticas del sector educativo.\",\"ri-government-line\"],[\"ICFES\",\"https:\/\/www.icfes.gov.co\",\"Resultados Saber y microdatos educativos.\",\"ri-file-chart-line\"],[\"SNIES\",\"https:\/\/snies.mineducacion.gov.co\",\"Datos de programas y matr\u00edculas HE.\",\"ri-database-2-line\"],[\"CNA\",\"https:\/\/www.cna.gov.co\",\"Acreditaci\u00f3n y calidad en educaci\u00f3n superior.\",\"ri-award-line\"],[\"Colombia Aprende\",\"https:\/\/www.colombiaaprende.edu.co\",\"Recursos did\u00e1cticos abiertos.\",\"ri-lightbulb-line\"],[\"Instituto Caro y Cuervo\",\"https:\/\/www.caroycuervo.gov.co\",\"Corpus y bases de lengua espa\u00f1ola.\",\"ri-translate-2\"]]\n                },\n                multi:{\n                    subs:[\n                        [\"Academic Research Complete\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/search.ebscohost.com\/login.aspx?authtype=ip,uid&custid=s6279388&groupid=main&profile=ehost&defaultdb=aph\"],\n                        [\"E-Collection (ICONTEC)\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/ecollection.icontec.org\/colacc.aspx?Q=E39433350DBD555ABAA9751100A60A21\"],\n                        [\"Environmental Studies (Gale)\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/infotrac.galegroup.com\/itweb\/ugc?db=GRNR\"],\n                        [\"JSTOR\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/www.jstor.org\"],\n                        [\"Oxford University Press\", \"https:\/\/academic-oup-com.bibliodigital.ugc.edu.co\/\"],\n                        [\"Nature\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.nature.com\/\"],\n                        [\"Sage Journals\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/journals.sagepub.com\/\"],\n                        [\"Science Direct\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/www.sciencedirect.com\/\"],\n                        [\"Scopus\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.scopus.com\/\"],\n                        [\"Springer Link\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/link.springer.com\/\"],\n                        [\"Taylor & Francis Journals\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.tandfonline.com\"],\n                        [\"Informe Acad\u00e9mico (Gale)\", \"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/infotrac.galegroup.com\/itweb\/ugc?db=IFME\"]\n                    ],\n                    open:[[\"CORE\",\"https:\/\/core.ac.uk\",\"Metabuscador de repositorios globales OA.\",\"ri-search-eye-line\"],[\"OpenAIRE\",\"https:\/\/openaire.eu\",\"Portal europeo de ciencia abierta y proyectos H2020.\",\"ri-search-eye-line\"],[\"PubMed Central\",\"https:\/\/www.ncbi.nlm.nih.gov\/pmc\",\"Art\u00edculos OA en biomedicina y salud.\",\"ri-health-book-line\"],[\"Zenodo\",\"https:\/\/zenodo.org\",\"Repositorio general de datos y publicaciones.\",\"ri-archive-drawer-line\"],[\"OpenDOAR\",\"https:\/\/v2.sherpa.ac.uk\/opendoar\",\"Directorio mundial de repositorios OA.\",\"ri-book-open-line\"],[\"WorldWideScience\",\"https:\/\/worldwidescience.org\",\"B\u00fasqueda federada en portales de I+D gubernamentales.\",\"ri-search-eye-line\"],[\"Biblioteca Digital Mundial\",\"https:\/\/wdl.org\",\"Manuscritos y mapas patrimoniales de la UNESCO.\",\"ri-bank-line\"],[\"Datos Abiertos Colombia\",\"https:\/\/datos.gov.co\",\"Portal oficial de datasets p\u00fablicos colombianos.\",\"ri-database-2-line\"]],repo:[[\"LA Referencia\",\"https:\/\/lareferencia.info\",\"Meta-repositorio de tesis y art\u00edculos LATAM.\",\"ri-earth-line\"],[\"BDCOL\",\"https:\/\/bdcol.renata.edu.co\",\"Agregador de repositorios universitarios colombianos.\",\"ri-community-line\"],[\"Latindex\",\"https:\/\/www.latindex.org\",\"Cat\u00e1logo descriptivo de revistas iberoamericanas.\",\"ri-earth-line\"],[\"RedALyC\",\"https:\/\/www.redalyc.org\",\"Revistas cient\u00edficas en acceso abierto.\",\"ri-earth-line\"],[\"SciELO\",\"https:\/\/www.scielo.org\",\"Biblioteca cient\u00edfica electr\u00f3nica regional.\",\"ri-earth-line\"]],gov:[[\"MinCiencias\",\"https:\/\/www.minciencias.gov.co\",\"Pol\u00edtica nacional de CTI y convocatorias.\",\"ri-government-line\"],[\"OCyT\",\"https:\/\/www.ocyt.gov.co\",\"Indicadores de ciencia y tecnolog\u00eda de Colombia.\",\"ri-line-chart-line\"],[\"SIB Colombia\",\"https:\/\/www.sibcolombia.net\",\"Datos abiertos de biodiversidad.\",\"ri-plant-line\"],[\"IDEAM\",\"https:\/\/www.ideam.gov.co\",\"Datos hidrometeorol\u00f3gicos y clim\u00e1ticos.\",\"ri-temp-cold-line\"],[\"Datos Abiertos\",\"https:\/\/datos.gov.co\",\"Portal de datasets del Estado.\",\"ri-database-2-line\"],[\"SINCHI\",\"https:\/\/www.sinchi.org.co\",\"Investigaci\u00f3n amaz\u00f3nica.\",\"ri-seedling-line\"],[\"Humboldt\",\"https:\/\/www.humboldt.org.co\",\"Biodiversidad e investigaci\u00f3n ambiental.\",\"ri-seedling-line\"],[\"MinCultura\",\"https:\/\/www.mincultura.gov.co\",\"Patrimonio cultural y estad\u00edsticas.\",\"ri-government-line\"],[\"Biblioteca Nacional\",\"https:\/\/www.bibliotecanacional.gov.co\",\"Colecciones digitales patrimoniales.\",\"ri-bank-line\"],[\"Archivo General\",\"https:\/\/www.archivogeneral.gov.co\",\"Fondo hist\u00f3rico y gu\u00edas de archivo.\",\"ri-archive-line\"],[\"ICANH\",\"https:\/\/www.icanh.gov.co\",\"Investigaci\u00f3n antropol\u00f3gica e hist\u00f3rica.\",\"ri-community-line\"],[\"Parques Nacionales\",\"https:\/\/www.parquesnacionales.gov.co\",\"Informaci\u00f3n de \u00e1reas protegidas.\",\"ri-map-pin-2-line\"]]\n                }\n            },\n            init: function() { this.initialized = true; document.getElementById('chap3').innerHTML = this.htmlContent; const tabs = document.querySelectorAll('#tabs-m3 .tab-btn'); if(!tabs.length) return; tabs.forEach(btn => btn.onclick = () => { this.area = btn.dataset.area; this.render(); }); this.render(); },\n            render: function() {\n                const appEl = document.getElementById('ugc-guide-app') || document.documentElement;\n                const currentData = this.data[this.area]; const contentDiv = document.getElementById('content-m3'); const areaColor = getComputedStyle(appEl).getPropertyValue(`--c-${this.area}`); appEl.style.setProperty('--current-area-color', areaColor.trim()); document.querySelectorAll('#tabs-m3 .tab-btn').forEach(btn => btn.classList.toggle('active', btn.dataset.area === this.area)); if (!currentData || !contentDiv) return;\n                const card = (title, url, txt, icon) => `<\/p>\n<div class=\"resource-card rounded-xl p-5 flex flex-col\">\n<div class=\"flex-grow\">\n<h4 class=\"font-bold text-lg flex items-center gap-2\" style=\"color: var(--current-area-color);\"><i class=\"${icon || 'ri-database-2-line'}\"><\/i><span>${title}<\/span><\/h4>\n<p class=\"text-sm text-slate-500 mt-1\">${txt}<\/p>\n<\/div>\n<p><button onclick=\"window.openExternalLink('${url}')\" class=\"self-start text-xs mt-4 px-3 py-1 rounded-full font-semibold transition-colors cursor-pointer border-none\" style=\"background-color: var(--current-area-color); color: #0f172a;\">Visitar sitio <i class=\"ri-external-link-line\"><\/i><\/button><\/div>\n<p>`;\n                const bloqueUGC = arr => {\n                    if (!arr || !arr.length) return \"\";\n                    return `<\/p>\n<details class=\"resource-category\" open>\n<summary><span class=\"font-bold text-xl flex items-center gap-3\"><i class=\"ri-vip-crown-fill\" style=\"color: var(--current-area-color);\"><\/i>Recursos de suscripci\u00f3n UGC<\/span><\/summary>\n<div>\n<div class=\"grid xl:grid-cols-3 lg:grid-cols-2 gap-4\">${arr.map(([name, url]) => card(name, url, 'Recurso disponible a trav\u00e9s del portal de la biblioteca.', 'ri-vip-crown-line')).join(\"\")}<\/div>\n<div class=\"text-center mt-8\"><button onclick=\"window.openExternalLink('https:\/\/www.ugc.edu.co\/biblioteca\/recursos-electronicos\/bases-de-datos')\" class=\"portal-cta inline-block px-8 py-3 rounded-full font-bold cursor-pointer\">Acceder al portal principal de recursos<\/button><\/div>\n<\/div>\n<\/details>\n<p>`;\n                };\n                const bloque = (icon, titulo, arr) => { if (!arr || arr.length === 0) return \"\"; return `<\/p>\n<details class=\"resource-category\">\n<summary><span class=\"font-bold text-xl flex items-center gap-3\"><i class=\"${icon}\" style=\"color: var(--current-area-color);\"><\/i>${titulo}<\/span><\/summary>\n<div>\n<div class=\"grid xl:grid-cols-3 lg:grid-cols-2 gap-4\">${arr.map(([t, u, d, i]) => card(t, u, d, i)).join(\"\")}<\/div>\n<\/div>\n<\/details>\n<p>`; };\n                contentDiv.innerHTML = [ bloqueUGC(currentData.subs), bloque(\"ri-global-line\", \"Bases abiertas (open access)\", currentData.open), bloque(\"ri-archive-drawer-line\", \"Repositorios y redes acad\u00e9micas\", currentData.repo), bloque(\"ri-government-line\", \"Sitios oficiales y gubernamentales\", currentData.gov) ].filter(Boolean).join('');\n            }\n        };<\/p>\n<p>        \/\/ ============== M\u00d3DULO 4 ==============\n        const m4 = {\n            initialized: false,\n            CRIT:[\n                {k:'auth', t:'Autoridad', icon:'ri-shield-star-line', qs:['El autor o la organizaci\u00f3n est\u00e1n claramente identificados.','Las credenciales del autor son relevantes para el tema.','Existe informaci\u00f3n de contacto verificable.'], longDesc:'Eval\u00faa qui\u00e9n es el responsable del contenido. \u00bfEs un experto en la materia, una instituci\u00f3n reconocida o un autor an\u00f3nimo? Busca credenciales, afiliaciones institucionales (.edu, .gov) e informaci\u00f3n de contacto. Una fuente con alta autoridad es transparente sobre su origen y autor\u00eda.'},\n                {k:'acc', t:'Precisi\u00f3n', icon:'ri-check-double-line', qs:['La informaci\u00f3n est\u00e1 respaldada por evidencias o referencias.','Est\u00e1 libre de errores ortogr\u00e1ficos o tipogr\u00e1ficos.'], longDesc:'Verifica que la informaci\u00f3n sea correcta y est\u00e9 respaldada por pruebas. \u00bfCitan sus fuentes? \u00bfLos datos son consistentes con otras fuentes fiables? Presta atenci\u00f3n a errores gramaticales o tipogr\u00e1ficos, ya que pueden indicar falta de rigor editorial.'},\n                {k:'bias', t:'Objetividad', icon:'ri-scales-3-line', qs:['Se distingue claramente entre hechos y opiniones.','El lenguaje es neutral y no emotivo.'], longDesc:'Analiza el prop\u00f3sito de la p\u00e1gina. \u00bfBusca informar, persuadir o vender? Una fuente objetiva presenta un punto de vista equilibrado, distingue entre hechos y opiniones, y utiliza un lenguaje neutral. Desconf\u00eda del contenido excesivamente emotivo o que solo presenta un lado de la historia.'},\n                {k:'cur', t:'Actualidad', icon:'ri-calendar-check-line', qs:['La fecha de publicaci\u00f3n es visible.','El contenido es lo suficientemente reciente.','Los enlaces externos funcionan correctamente.'], longDesc:'Comprueba la frescura de la informaci\u00f3n. \u00bfLa fecha de publicaci\u00f3n o \u00faltima actualizaci\u00f3n es visible y recente? En campos que cambian r\u00e1pidamente, como la ciencia o la tecnolog\u00eda, la actualidad es crucial. Aseg\u00farate de que los enlaces funcionen y el contenido no est\u00e9 obsoleto.'},\n                {k:'cov', t:'Cobertura', icon:'ri-artboard-2-line', qs:['Se incluyen referencias o enlaces adicionales.','Se declaran las limitaciones del contenido.'], longDesc:'Determina si la fuente aborda el tema con la profundidad necesaria. \u00bfEs una visi\u00f3n superficial o un an\u00e1lisis detallado? Una buena fuente explora el tema a fondo, reconoce sus propias limitaciones y a menudo proporciona enlaces o referencias para ampliar la informaci\u00f3n.'}\n            ],\n            htmlContent: `<\/p>\n<div class=\"flex justify-between items-center gap-4 mb-10\">\n<h2 class=\"text-2xl sm:text-3xl font-bold\"><span class=\"text-4xl mr-3 align-middle\">&#x1f50e;<\/span>Laboratorio forense<\/h2>\n<p><button id=\"m4-tour-btn\" class=\"help-circle-btn bg-amber-600\" title=\"Ayuda del m\u00f3dulo\"><i class=\"ri-question-mark\"><\/i><\/button><\/div>\n<div class=\"space-y-10\">\n<nav id=\"m4-tabs-area\" class=\"tabH flex flex-wrap gap-1 justify-center no-print\"><\/nav>\n<section id=\"eva\" class=\"tabSect active space-y-8\">\n<div class=\"m4-glass rounded-xl p-6\">\n<p class=\"text-sm leading-relaxed\">Usa esta herramienta para determinar la fiabilidad de una p\u00e1gina o recurso web que est\u00e9s consultando. Responde <b>S\u00ed<\/b> o <b>No<\/b> a cada pregunta y obt\u00e9n un puntaje en tiempo real. Tu progreso se guardar\u00e1 autom\u00e1ticamente.<br \/><button id=\"m4_example\" class=\"mt-4 text-sm font-bold text-[var(--m4-p)] hover:underline\">\u00bfNo sabes por d\u00f3nde empezar? Haz clic aqu\u00ed para ver un ejemplo.<\/button><\/p>\n<\/div>\n<div id=\"qs\" class=\"space-y-8\"><\/div>\n<div id=\"box\" class=\"m4-glass rounded-xl p-8 space-y-6\" hidden>\n<h2 class=\"text-center text-xl font-bold\">Resultados de la evaluaci\u00f3n<\/h2>\n<div class=\"flex flex-col items-center sm:flex-row sm:justify-center gap-8\"><svg width=\"140\" height=\"140\" viewBox=\"0 0 42 42\"><circle cx=\"21\" cy=\"21\" r=\"18\" stroke=\"#334155\" stroke-width=\"4\" fill=\"none\"\/><circle id=\"ring\" cx=\"21\" cy=\"21\" r=\"18\" stroke=\"url(#grad)\" stroke-width=\"4\" fill=\"none\" stroke-dasharray=\"113.1\" stroke-dashoffset=\"113.1\" transform=\"rotate(-90 21 21)\" style=\"transition: stroke-dashoffset 0.5s ease;\"\/><defs><linearGradient id=\"grad\" x1=\"1\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0%\"  stop-color=\"var(--m4-p)\"\/><stop offset=\"100%\" stop-color=\"var(--m4-s)\"\/><\/linearGradient><\/defs><text id=\"rtxt\" x=\"50%\" y=\"54%\" text-anchor=\"middle\" fill=\"var(--text-color)\" font-size=\"9\" font-weight=\"900\">0 \/ 12<\/text><\/svg><\/p>\n<div><span id=\"badge\" class=\"inline-block text-xs font-bold px-3 py-1 rounded-full bg-slate-700\">\u2014<\/span><\/p>\n<p id=\"btxt\" class=\"mt-2 text-sm text-slate-600\">\n<\/div>\n<\/div>\n<div id=\"bars\" class=\"grid grid-cols-2 lg:grid-cols-5 gap-x-4 gap-y-6 mt-8 text-center text-xs\"><\/div>\n<div class=\"mt-8\">\n<h3 class=\"font-semibold mb-2\">Recomendaciones<\/h3>\n<ul id=\"reco\" class=\"list-disc ml-6 text-sm space-y-2\"><\/ul>\n<\/div>\n<div class=\"text-center mt-6 flex justify-center gap-4 no-print\"><button id=\"reset\" class=\"px-6 py-2 rounded bg-pink-600 hover:brightness-110 text-sm font-semibold text-white\">Reiniciar<\/button><button type=\"button\" onclick=\"window.print()\" class=\"px-6 py-2 rounded bg-[var(--m4-p)] hover:brightness-110 text-sm font-semibold text-white\"><i class=\"ri-printer-line mr-2\"><\/i>Imprimir<\/button><\/div>\n<\/div>\n<\/section>\n<section id=\"gui\" class=\"tabSect space-y-6\">\n<div id=\"gui-content\" class=\"space-y-6\"><\/div>\n<div class=\"text-center mt-6 no-print\"><button type=\"button\" onclick=\"window.print()\" class=\"px-6 py-2 rounded bg-[var(--m4-p)] hover:brightness-110 text-sm font-semibold text-white\"><i class=\"ri-printer-line mr-2\"><\/i>Imprimir Gu\u00eda<\/button><\/div>\n<\/section>\n<section id=\"chk\" class=\"tabSect space-y-6\">\n<form id=\"chkForm\" class=\"space-y-6\"><\/form>\n<div class=\"text-center mt-6 flex justify-center gap-4 no-print\"><button type=\"button\" id=\"resetChecklist\" class=\"px-6 py-2 rounded bg-pink-600 hover:brightness-110 text-sm font-semibold text-white\">Borrar selecci\u00f3n<\/button><button type=\"button\" onclick=\"window.print()\" class=\"px-6 py-2 rounded bg-[var(--m4-p)] hover:brightness-110 text-sm font-semibold text-white\"><i class=\"ri-printer-line mr-2\"><\/i>Imprimir Lista<\/button><\/div>\n<\/section>\n<\/div>\n<div class=\"module-nav-footer\"><button onclick=\"show('chap3')\" class=\"module-nav-btn group\"><i class=\"ri-arrow-left-line mr-2 group-hover:-translate-x-1 transition-transform\"><\/i> Fuentes<\/button><button onclick=\"show('home')\" class=\"module-nav-btn group\"><i class=\"ri-home-4-line mr-2\"><\/i> Volver al Inicio<\/button><\/div>\n<p>`,\n            init: function() { if (this.initialized) return; this.initialized = true; const chap4Container = document.getElementById('chap4'); chap4Container.innerHTML = this.htmlContent; this.state = {}; this.buildUI(); const savedState = localStorage.getItem('m4_state'); if(savedState) { try { const parsedState = JSON.parse(savedState); Object.assign(this.state, parsedState); this.renderStateOnUI(this.state); this.calc(); } catch(e) { localStorage.removeItem('m4_state'); } } this.addEventListeners(chap4Container); },\n            addEventListeners: function(container) { container.addEventListener('click', e => { const button = e.target.closest('button'); if (!button) return; if (button.classList.contains('yn')) { const {v, k, i} = button.dataset; [...button.parentNode.children].forEach(b => b.classList.remove('y','n')); button.classList.add(v === '1' ? 'y' : 'n'); this.state[k][i] = v === '1' ? 1 : 0; this.calc(); } else if (button.closest('.tabH')) { container.querySelectorAll('.tabH button').forEach(x => x.classList.remove('active')); button.classList.add('active'); container.querySelectorAll('.tabSect').forEach(s => s.classList.remove('active')); container.querySelector('#' + button.dataset.tab).classList.add('active'); } else if (button.id === 'reset') { this.buildUI(); container.querySelector('#box').hidden = true; localStorage.removeItem('m4_state'); } else if (button.id === 'resetChecklist') { container.querySelector('#chkForm').querySelectorAll('input[type=\"checkbox\"]').forEach(cb => cb.checked = false); } else if (button.id === 'm4_example') { const exampleState = { auth: [1, 1, 0], acc: [1, 0], bias: [0, 1], cur: [1, 1, 1], cov: [1, 0] }; Object.assign(this.state, exampleState); this.renderStateOnUI(this.state); this.calc(); } }); },\n            buildUI: function() {\n                const container = document.getElementById('chap4'); if(!container) return;\n                const $ = q => container.querySelector(q);\n                const qs=$('#qs');qs.innerHTML='';\n                const chk=$('#chkForm');chk.innerHTML='';\n                const tabs=$('.tabH'); tabs.innerHTML='';\n                const gui=$('#gui-content'); gui.innerHTML='';\n                tabs.innerHTML += `<button data-tab=\"eva\" class=\"active\"><i class=\"ri-checkbox-circle-line\"><\/i> Evaluador<\/button><button data-tab=\"gui\"><i class=\"ri-lightbulb-flash-line\"><\/i> Gu\u00eda de criterios<\/button><button data-tab=\"chk\"><i class=\"ri-list-check-2\"><\/i> Lista de verificaci\u00f3n<\/button>`;\n                this.CRIT.forEach(c=>{\n                    this.state[c.k]=Array(c.qs.length).fill(null);\n                    let questionsHTML = c.qs.map((q,i)=> {\n                        let questionBlock = `<\/p>\n<div class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between my-2 py-2 border-b border-slate-200 last:border-b-0\">\n<p class=\"text-sm flex-1 mr-4\">${q}<\/p>\n<div class=\"flex gap-2 mt-2 sm:mt-0 shrink-0\"><button class=\"yn\" data-k=\"${c.k}\" data-i=\"${i}\" data-v=\"1\">S\u00ed<\/button><button class=\"yn\" data-k=\"${c.k}\" data-i=\"${i}\" data-v=\"0\">No<\/button><\/div>\n<\/div>\n<p>`;\n                        \/\/ === INICIO CAMBIO: A\u00f1adir hint para fecha en sitios oficiales ===\n                        if (c.k === 'cur' && i === 0) {\n                            questionBlock += `<\/p>\n<p class=\"text-xs text-slate-500 mt-1 pl-2 pr-4 italic\">Nota: Si la fuente es de un sitio oficial (ej. Gobierno, ONU) o una organizaci\u00f3n reconocida sin fecha expl\u00edcita, use el a\u00f1o de su consulta y marque \"S\u00ed\".<\/p>\n<p>`;\n                        }\n                        \/\/ === FIN CAMBIO ===\n                        return questionBlock;\n                    }).join('');\n                    qs.innerHTML+=`<\/p>\n<details class=\"m4-glass p-5 rounded-xl\" open>\n<summary class=\"font-bold text-lg cursor-pointer flex justify-between items-center\">${c.t}<i class=\"${c.icon} text-2xl text-[var(--primary-color)]\"><\/i><\/summary>\n<p>${questionsHTML}<\/details>\n<p>`;\n                    chk.innerHTML+=`<\/p>\n<fieldset class=\"m4-glass p-6 space-y-2 rounded-xl\">\n<legend class=\"font-bold text-lg mb-2\">${c.t}<\/legend>\n<p>${c.qs.map(q=>`<label class=\"flex gap-3 text-sm items-center\"><input type=\"checkbox\" class=\"h-4 w-4 rounded bg-slate-700 border-slate-300 text-[var(--m4-p)] focus:ring-[var(--m4-p)]\"> ${q}<\/label>`).join('')}<\/fieldset>\n<p>`;\n                    gui.innerHTML += `<\/p>\n<div class=\"m4-glass p-6 rounded-xl\">\n<div class=\"flex gap-4 items-start\"><i class=\"${c.icon} text-[var(--m4-p)] text-4xl shrink-0\"><\/i><\/p>\n<div>\n<h3 class=\"font-bold text-lg\">${c.t}<\/h3>\n<p class=\"text-sm text-slate-600 mt-1\">${c.longDesc}<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>`;\n                });\n                const bars=$('#bars');bars.innerHTML='';\n                this.CRIT.forEach(c=>{\n                    const maxScore = c.qs.length;\n                    bars.innerHTML+=`<\/p>\n<div>\n<p class=\"font-semibold mb-1\">${c.t}<\/p>\n<div class=\"cbg\">\n<div id=\"bar_${c.k}\" class=\"h-full bg-gradient-to-r from-[var(--m4-p)] to-[var(--m4-s)]\" style=\"width:0%; transition: width 0.5s ease;\"><\/div>\n<\/div>\n<p id=\"txt_${c.k}\" class=\"mt-1\">0\/${maxScore}<\/p>\n<\/div>\n<p>`;\n                });\n            },\n            calc: function(){\n                \/\/ === INICIO CAMBIO: L\u00f3gica de c\u00e1lculo completamente reescrita ===\n                const container = document.getElementById('chap4'); if(!container) return;\n                const $ = q => container.querySelector(q);<\/p>\n<p>                let totalYes = 0;\n                let responded = 0;<\/p>\n<p>                this.CRIT.forEach(c => {\n                    const answeredQuestions = this.state[c.k].filter(v => v !== null);\n                    responded += answeredQuestions.length;\n                    const score = answeredQuestions.reduce((a, b) => a + b, 0);\n                    totalYes += score;<\/p>\n<p>                    const maxScore = c.qs.length;\n                    $('#bar_' + c.k).style.width = (maxScore > 0 ? (score \/ maxScore) : 0) * 100 + '%';\n                    $('#txt_' + c.k).textContent = score + '\/' + maxScore;\n                });<\/p>\n<p>                \/\/ L\u00f3gica de niveles\n                let idx;\n                if (totalYes >= 10) idx = 3;      \/\/ Excelente\n                else if (totalYes >= 7) idx = 2; \/\/ Buena\n                else if (totalYes >= 4) idx = 1; \/\/ Dudosa\n                else idx = 0;                    \/\/ No Confiable<\/p>\n<p>                const SEM = ['&#x1f534; No Confiable', '&#x1f7e0; Dudosa', '&#x1f7e2; Buena', '&#x1f7e3; Excelente'];\n                const TXT = ['Evita usar esta fuente.', '\u00dasala con gran cautela.', 'Buena fiabilidad en general.', 'Excelente: alta autoridad y precisi\u00f3n.'];\n                let warningMessage = '';<\/p>\n<p>                \/\/ L\u00f3gica de criterios absolutos\n                const authorOk = this.state.auth[0] !== 0;\n                const dateOk = this.state.cur[0] !== 0;<\/p>\n<p>                if (!authorOk || !dateOk) {\n                    if (idx > 1) { \/\/ Si era 'Buena' o 'Excelente', se degrada a 'Dudosa'\n                        idx = 1;\n                    }\n                    warningMessage = `<\/p>\n<li><strong class=\"text-amber-400\">\u00a1Advertencia!<\/strong> Una fuente sin ${!authorOk ? '<strong>autor claro<\/strong>' : ''}${!authorOk && !dateOk ? ' ni ' : ''}${!dateOk ? '<strong>fecha de publicaci\u00f3n<\/strong>' : ''} es fundamentalmente poco fiable. Su calificaci\u00f3n ha sido ajustada.<\/li>\n<p>`;\n                }<\/p>\n<p>                $('#badge').textContent = SEM[idx];\n                $('#btxt').textContent = TXT[idx];<\/p>\n<p>                \/\/ Actualizar c\u00edrculo y puntaje\n                const totalQuestions = this.CRIT.reduce((sum, c) => sum + c.qs.length, 0);\n                $('#ring').style.strokeDashoffset = 113.1 - (totalYes \/ totalQuestions) * 113.1;\n                $('#rtxt').textContent = `${totalYes} \/ ${totalQuestions}`;<\/p>\n<p>                \/\/ Recomendaciones\n                const recoList = $('#reco');\n                recoList.innerHTML = warningMessage; \/\/ Inicia con el mensaje de advertencia si existe\n                this.CRIT.forEach(c => {\n                    if (this.state[c.k].some(v => v === 0)) {\n                        recoList.innerHTML += `<\/p>\n<li>Considera mejorar la <strong>${c.t}<\/strong>: ${c.longDesc.split('.')[0]}.<\/li>\n<p>`;\n                    }\n                });<\/p>\n<p>                if(responded > 0) {\n                    $('#box').hidden = false;\n                    localStorage.setItem('m4_state', JSON.stringify(this.state));\n                }\n                \/\/ === FIN CAMBIO ===\n            },\n            renderStateOnUI: function(currentState) {\n                const container = document.getElementById('chap4'); if(!container) return;\n                const $ = q => container.querySelector(q);\n                this.CRIT.forEach(c => {\n                    c.qs.forEach((q, i) => {\n                        const val = currentState[c.k] ? currentState[c.k][i] : null;\n                        if (val === null || val === undefined) return;\n                        const btnsContainer = $(`button[data-k=\"${c.k}\"][data-i=\"${i}\"]`)?.parentNode;\n                        if (!btnsContainer) return;\n                        const btns = btnsContainer.querySelectorAll('button.yn');\n                        btns.forEach(btn => {\n                            btn.classList.remove('y', 'n');\n                            if (parseInt(btn.dataset.v) === val) {\n                                btn.classList.add(val === 1 ? 'y' : 'n');\n                            }\n                        });\n                    });\n                });\n            }\n        };<\/p>\n<p>        \/\/ ============== INICIALIZACI\u00d3N ==============\n        app.init();\n    <\/script>\n    <\/div>\n<p><\/body><br \/>\n<\/html>\n<\/div>\n<p><!--more--><br \/>\n<!-- {\"type\":\"layout\",\"children\":[{\"type\":\"section\",\"props\":{\"image_position\":\"center-center\",\"padding_remove_horizontal\":false,\"style\":\"default\",\"title_breakpoint\":\"xl\",\"title_position\":\"top-left\",\"title_rotation\":\"left\",\"vertical_align\":\"middle\",\"width\":\"\"},\"children\":[{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"html\",\"props\":{\"attributes\":\"id=ugc-guide-app\\nclass=web-guide-container\",\"class\":\"web-guide-container\",\"content\":\"<!DOCTYPE html>\\n<html lang=\\\"es\\\">\\n<head>\\n    <!-- ============== CABECERA DEL DOCUMENTO (<head>) ============== -->\\n    <meta charset=\\\"UTF-8\\\">\\n    <title>Gu\u00eda de navegaci\u00f3n web<\/title>\\n    <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\">\\n    \\n    <!-- Dependencias externas -->\\n    <script src=\\\"https:\/\/cdn.tailwindcss.com\\\"><\/script>\\n    <link rel=\\\"preconnect\\\" href=\\\"https:\/\/fonts.googleapis.com\\\">\\n    <link rel=\\\"preconnect\\\" href=\\\"https:\/\/fonts.gstatic.com\\\" crossorigin>\\n    <link href=\\\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@400;700;900&#038;display=swap\\\" rel=\\\"stylesheet\\\">\\n    <link rel=\\\"stylesheet\\\" href=\\\"https:\/\/cdn.jsdelivr.net\/npm\/remixicon\/fonts\/remixicon.css\\\">\\n\\n    <!-- Dependencias para Tour de Bienvenida (Shepherd.js) -->\\n    <link rel=\\\"stylesheet\\\" href=\\\"https:\/\/cdn.jsdelivr.net\/npm\/shepherd.js@10.0.1\/dist\/css\/shepherd.css\\\"\/>\\n    <script src=\\\"https:\/\/cdn.jsdelivr.net\/npm\/shepherd.js@10.0.1\/dist\/js\/shepherd.min.js\\\"><\/script>\\n\\n    <!-- Estilos CSS personalizados y unificados -->\\n    <\/p>\n<style>\\n        \/* =========================================\\n           ESTILOS (SCOPE: #ugc-guide-app)\\n           ========================================= *\/\\n        #ugc-guide-app { \\n            --bg-color: #ffffff;\\n            --text-color: #0f172a;\\n            --text-muted: #475569;\\n            --header-bg: #ffffff;         \\n            --border-color: #e2e8f0;\\n            --card-bg: #f8fafc;\\n            --card-border: #cbd5e1;\\n            --primary-color: #4f46e5; \\n            --icon-color: #334155;        \\n            --icon-hover: #4f46e5;\\n            --current-area-color: #fb7185;\\n            --c-arq: #fb7185; --c-eco: #14b8a6; --c-law: #a78bfa; \\n            --c-edu: #facc15; --c-multi: #06b6d4;\\n            font-family: 'Roboto', sans-serif; \\n            background-color: var(--bg-color); \\n            color: var(--text-color); \\n            position: relative;\\n            min-height: 100vh;\\n        }\\n        #ugc-guide-app h1, #ugc-guide-app h2, #ugc-guide-app h3, \\n        #ugc-guide-app h4, #ugc-guide-app p, #ugc-guide-app li, \\n        #ugc-guide-app span, #ugc-guide-app label { color: var(--text-color); }\\n\\n        \/* HEADER *\/\\n        #ugc-guide-app header { background-color: var(--header-bg) !important; border-bottom: 1px solid var(--border-color); box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05); }\\n        #ugc-guide-app .nav-icon-btn { display:flex; align-items:center; justify-content:center; width:48px; height:48px; border-radius:8px; background:transparent; border:1px solid transparent; cursor:pointer; transition:all .2s; color:var(--icon-color) !important; font-size:1.5rem; }\\n        #ugc-guide-app .nav-icon-btn:hover, #ugc-guide-app .nav-icon-btn.active-nav { background-color:#eff6ff; color:var(--icon-hover) !important; border-color:#bfdbfe; transform:scale(1.05); }\\n        #ugc-guide-app .home-title-gradient { background:linear-gradient(to right,#4f46e5,#0891b2); -webkit-background-clip:text; background-clip:text; color:transparent !important; font-weight:900; }\\n\\n        \/* COMPONENTES *\/\\n        #ugc-guide-app .glassmorphism { background:var(--card-bg); border:1px solid var(--card-border); box-shadow:0 4px 6px -1px rgba(0,0,0,0.05); transition:all .3s ease; }\\n        #ugc-guide-app .main-menu-card:hover { transform:translateY(-5px); box-shadow:0 10px 15px -3px rgba(0,0,0,0.1); border-color:var(--primary-color); background:#ffffff; }\\n        #ugc-guide-app .text-white-forced { color:#ffffff !important; }\\n\\n        \/* Bot\u00f3n Tour y Help *\/\\n        #ugc-guide-app #tour-btn { color:#ffffff !important; }\\n        #ugc-guide-app #tour-btn i, #ugc-guide-app #tour-btn span { color:#ffffff !important; }\\n        #ugc-guide-app .help-circle-btn { width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-weight:bold; font-size:1.2rem; cursor:pointer; transition:transform .2s; box-shadow:0 4px 6px rgba(0,0,0,0.15); border:none; color:#ffffff !important; }\\n        #ugc-guide-app .help-circle-btn:hover { transform:scale(1.1) rotate(10deg); }\\n\\n        \/* NAV FOOTER *\/\\n        #ugc-guide-app .module-nav-footer { margin-top:3rem; padding:1.5rem; border-top:1px solid var(--border-color); display:flex; justify-content:space-between; align-items:center; background-color:#f8fafc; border-radius:.5rem; }\\n        #ugc-guide-app .module-nav-btn { display:inline-flex; align-items:center; gap:.5rem; padding:.75rem 1.5rem; border-radius:.5rem; font-weight:700; color:var(--text-color); background:#fff; border:1px solid var(--border-color); transition:all .2s; cursor:pointer; box-shadow:0 2px 4px rgba(0,0,0,0.05); }\\n        #ugc-guide-app .module-nav-btn:hover { background:var(--primary-color); color:#fff !important; border-color:var(--primary-color); }\\n\\n        \/* CHIPS *\/\\n        #ugc-guide-app .chip { color:white !important; border-radius:9999px; padding:.25rem .75rem; font-weight:500; display:inline-block; margin:2px; cursor:pointer; }\\n        #ugc-guide-app .chip.base { background:#16a34a; } \\n        #ugc-guide-app .chip.chipOR { background:#3b82f6; } \\n        #ugc-guide-app .chip.chipNOT { background:#ef4444; } \\n        #ugc-guide-app .chip.chipSITE { background:#8b5cf6; }\\n\\n        \/* M2 SEARCHER BTNS *\/\\n        #ugc-guide-app .m2-searcher-btn { cursor:pointer; transition:all .2s; background:white; color:var(--text-color); }\\n        #ugc-guide-app .m2-searcher-btn:hover { transform:translateY(-1px); border-color:var(--primary-color); }\\n        #ugc-guide-app .m2-searcher-btn.selected { border-color:var(--primary-color) !important; background:#eff6ff; box-shadow:0 0 0 2px rgba(79,70,229,0.2); }\\n        #ugc-guide-app #m2-compat-warning { transition:all .3s ease; }\\n\\n        \/* Force white text on dark background elements *\/\\n        #ugc-guide-app .text-white-forced,\\n        #ugc-guide-app .text-white-forced *,\\n        #ugc-guide-app .help-circle-btn,\\n        #ugc-guide-app .help-circle-btn *,\\n        #ugc-guide-app #m2-searchBtn,\\n        #ugc-guide-app #m2-searchBtn *,\\n        #ugc-guide-app #m2-addBtn,\\n        #ugc-guide-app #m2-addBtn *,\\n        #ugc-guide-app #m2-exampleBtn,\\n        #ugc-guide-app #m2-exampleBtn *,\\n        #ugc-guide-app #m2-resetBtn,\\n        #ugc-guide-app #m2-resetBtn *,\\n        #ugc-guide-app #m2-addSyn,\\n        #ugc-guide-app #m2-addSyn *,\\n        #ugc-guide-app #tour-btn,\\n        #ugc-guide-app #tour-btn *,\\n        #ugc-guide-app .module-nav-btn:hover,\\n        #ugc-guide-app .module-nav-btn:hover *,\\n        #ugc-guide-app [class*=\\\"bg-purple-600\\\"],\\n        #ugc-guide-app [class*=\\\"bg-blue-600\\\"],\\n        #ugc-guide-app [class*=\\\"bg-emerald-600\\\"],\\n        #ugc-guide-app [class*=\\\"bg-red-600\\\"],\\n        #ugc-guide-app [class*=\\\"bg-pink-5\\\"],\\n        #ugc-guide-app [class*=\\\"bg-pink-6\\\"],\\n        #ugc-guide-app [class*=\\\"bg-sky-5\\\"],\\n        #ugc-guide-app [class*=\\\"bg-teal-6\\\"],\\n        #ugc-guide-app [class*=\\\"bg-indigo-6\\\"],\\n        #ugc-guide-app #reset,\\n        #ugc-guide-app #reset * { \\n            color: #ffffff !important; \\n        }\\n\\n        \/* TABS M3 *\/\\n        #ugc-guide-app .tab-btn { transition:all .3s ease; opacity:.6; border-bottom:3px solid transparent; padding-bottom:8px; color:var(--text-color); cursor:pointer; }\\n        #ugc-guide-app .tab-btn:hover { opacity:1; color:var(--current-area-color); }\\n        #ugc-guide-app .tab-btn.active { opacity:1; font-weight:bold; transform:scale(1.05); border-bottom-color:var(--current-area-color) !important; color:var(--current-area-color) !important; }\\n\\n        \/* M3 VISIT BTNS & ACORDEONES *\/\\n        #ugc-guide-app .visit-btn { background-color:var(--current-area-color); color:#000 !important; font-weight:700; padding:.35rem 1rem; border-radius:9999px; font-size:.8rem; display:inline-flex; align-items:center; gap:.25rem; transition:transform .2s; text-decoration:none; border:none; cursor:pointer; }\\n        #ugc-guide-app .visit-btn:hover { filter:brightness(1.1); transform:translateY(-2px); box-shadow:0 2px 5px rgba(0,0,0,0.1); }\\n        #ugc-guide-app .portal-cta { cursor:pointer; border:none; color:#fff !important; background-color:var(--current-area-color); padding:.75rem 2rem; border-radius:9999px; font-weight:700; }\\n        #ugc-guide-app .portal-cta:hover { filter:brightness(1.1); }\\n        #ugc-guide-app .resource-card { background:#fff; border:1px solid #e2e8f0; transition:all .3s ease; }\\n        #ugc-guide-app .resource-card:hover { transform:translateY(-5px); border-color:var(--current-area-color); }\\n        #ugc-guide-app details.resource-category { border:1px solid var(--border-color); border-radius:.75rem; overflow:hidden; background:#fff; margin-bottom:1rem; }\\n        #ugc-guide-app details.resource-category summary { cursor:pointer; padding:1rem; background:#f1f5f9; transition:background .2s; display:flex; justify-content:space-between; align-items:center; color:var(--text-color); font-weight:bold; }\\n        #ugc-guide-app details.resource-category summary:hover { background:#e2e8f0; }\\n        #ugc-guide-app details[open] summary { border-bottom:1px solid var(--border-color); }\\n        #ugc-guide-app details.resource-category > div { padding:1.5rem; }\\n\\n        \/* M4 *\/\\n        #ugc-guide-app #chap4 .tabH { margin-bottom:1.5rem; }\\n        #ugc-guide-app #chap4 .tabH button { padding:.75rem 1.25rem; border-radius:.5rem; transition:.25s; font-weight:700; display:flex; gap:.35rem; align-items:center; color:var(--text-color); background:white; border:1px solid transparent; }\\n        #ugc-guide-app #chap4 .tabH button.active { border:1px solid var(--primary-color); color:var(--primary-color); background:#eff6ff; }\\n        #ugc-guide-app #chap4 .tabSect { display:none; }\\n        #ugc-guide-app #chap4 .tabSect.active { display:block; animation:fadeIn .4s ease-in-out; }\\n        #ugc-guide-app #chap4 .yn { padding:.4rem 1.2rem; border:1px solid #cbd5e1; border-radius:.5rem; font-size:.85rem; cursor:pointer; color:var(--text-color); background:white; font-weight:bold; }\\n        #ugc-guide-app #chap4 .yn:hover { background:#f1f5f9; }\\n        #ugc-guide-app #chap4 .yn.y { background:#dcfce7; border-color:#16a34a; color:#14532d; }\\n        #ugc-guide-app #chap4 .yn.n { background:#fee2e2; border-color:#dc2626; color:#7f1d1d; }\\n        #ugc-guide-app #chap4 .cbg { height:.6rem; border-radius:9999px; background:#e2e8f0; }\\n\\n        \/* MODULES *\/\\n        #ugc-guide-app .module { display:none; }\\n        #ugc-guide-app .module.active { display:block; animation:fadeIn .4s ease-in-out; }\\n        @keyframes fadeIn { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:translateY(0)} }\\n\\n        \/* SHEPHERD *\/\\n        .shepherd-element { border-radius:.75rem; border:1px solid var(--primary-color); box-shadow:0 8px 30px rgba(0,0,0,.15); background:#fff; z-index:9999; }\\n        .shepherd-header { background:#f8fafc; padding:.8rem 1rem; border-bottom:1px solid #e2e8f0; }\\n        .shepherd-text { padding:1.2rem 1.5rem; color:#0f172a; font-size:.95rem; line-height:1.6; }\\n        .shepherd-footer { padding:0 1.5rem 1.5rem !important; display:flex !important; justify-content:flex-end !important; gap:.5rem !important; }\\n        .shepherd-button { background:#2563eb !important; color:#f8fafc !important; font-weight:700 !important; border-radius:.5rem !important; padding:.6rem 1.2rem !important; border:none !important; cursor:pointer !important; }\\n        .shepherd-button:hover { background:#1d4ed8 !important; }\\n        .shepherd-button-secondary { background:#94a3b8 !important; color:white !important; }\\n        .step-counter { font-size:.75rem; text-transform:uppercase; font-weight:900; color:#94a3b8; letter-spacing:.05em; display:block; margin-bottom:4px; }\\n\\n        \/* CREDITS *\/\\n        #credits-footer { margin-top:4rem; padding-top:2rem; border-top:1px solid #f1f5f9; text-align:center; }\\n        #credits-footer p { font-size:.7rem; color:#94a3b8; margin-bottom:.25rem; }\\n\\n        \/* PRINT *\/\\n        @media print {\\n            body * { visibility:hidden; }\\n            #main-content, #main-content * { visibility:visible; }\\n            #main-content { position:absolute; left:0; top:0; width:100%; padding:1rem; }\\n            header, .tabH, .module:not(.active), .tabSect:not(.active), .no-print, .module-nav-footer { display:none !important; }\\n        }\\n    <\/style>\n<p>\\n<\/head>\\n\\n<body class=\\\"bg-slate-50 text-slate-900\\\">\\n    <\/p>\n<div id=\\\"ugc-guide-app\\\" class=\\\"max-w-7xl mx-auto my-4 shadow-xl bg-white rounded-xl overflow-hidden min-h-[90vh]\\\">\\n\\n    \\n    <\/p>\n<header class=\\\"sticky top-0 z-40 relative bg-white\\\">\\n            <\/p>\n<div class=\\\"px-4 py-3 flex items-center justify-between shadow-sm\\\">\\n                <\/p>\n<div class=\\\"flex items-center gap-2 sm:gap-6 mx-auto md:mx-0\\\">\\n                    <button class=\\\"nav-icon-btn\\\" onclick=\\\"show('home')\\\" title=\\\"Inicio\\\" id=\\\"nav-home\\\"><i class=\\\"ri-home-4-fill\\\"><\/i><\/button>\\n                    <\/p>\n<div class=\\\"h-8 w-px bg-slate-200 hidden md:block\\\"><\/div>\n<p>\\n                    <\/p>\n<nav id=\\\"main-nav-buttons\\\" class=\\\"flex gap-2\\\">\\n                        <button class=\\\"nav-icon-btn\\\" onclick=\\\"show('chap1')\\\" title=\\\"1. Ecosistema\\\" id=\\\"nav-m1\\\"><i class=\\\"ri-compass-3-line\\\"><\/i><\/button>\\n                        <button class=\\\"nav-icon-btn\\\" onclick=\\\"show('chap2')\\\" title=\\\"2. B\u00fasqueda\\\" id=\\\"nav-m2\\\"><i class=\\\"ri-equalizer-line\\\"><\/i><\/button>\\n                        <button class=\\\"nav-icon-btn\\\" onclick=\\\"show('chap3')\\\" title=\\\"3. Fuentes\\\" id=\\\"nav-m3\\\"><i class=\\\"ri-book-2-line\\\"><\/i><\/button>\\n                        <button class=\\\"nav-icon-btn\\\" onclick=\\\"show('chap4')\\\" title=\\\"4. Evaluaci\u00f3n\\\" id=\\\"nav-m4\\\"><i class=\\\"ri-shield-check-line\\\"><\/i><\/button>\\n                    <\/nav>\n<p>\\n                <\/p><\/div>\n<p>\\n                <\/p>\n<div id=\\\"header-title-container\\\" class=\\\"hidden lg:block text-center px-4\\\">\\n                     <\/p>\n<h1 class=\\\"text-xl home-title-gradient\\\">Gu\u00eda de Navegaci\u00f3n<\/h1>\n<p>\\n                <\/p><\/div>\n<p>\\n            <\/p><\/div>\n<p>\\n            <\/p>\n<div id=\\\"progress-bar\\\" class=\\\"absolute bottom-0 left-0 h-1 bg-gradient-to-r from-indigo-500 to-teal-400\\\" style=\\\"width: 0%; transition: width 0.4s ease-out;\\\"><\/div>\n<p>\\n        <\/header>\n<p>\\n\\n    <main id=\\\"main-content\\\" class=\\\"flex-grow px-4 py-8 sm:py-12 relative z-10 max-w-7xl mx-auto w-full\\\">\\n        \\n        <\/p>\n<section id=\\\"home\\\" class=\\\"module active\\\">\\n                <\/p>\n<div class=\\\"text-center mb-16 mt-8\\\">\\n                    <\/p>\n<h2 class=\\\"text-5xl font-black mb-6 text-slate-800\\\">Gu\u00eda de <span class=\\\"home-title-gradient\\\">navegaci\u00f3n web<\/span><\/h2>\n<p>\\n                    <\/p>\n<p class=\\\"text-xl text-slate-600 max-w-3xl mx-auto leading-relaxed\\\">Domina la investigaci\u00f3n digital. Aprende a diferenciar herramientas, construye b\u00fasquedas avanzadas, accede a fuentes acad\u00e9micas oficiales y eval\u00faa la fiabilidad de la informaci\u00f3n.<\/p>\n<p>\\n                <\/p><\/div>\n<p>\\n                <\/p>\n<div class=\\\"text-center mb-16\\\">\\n                    <button id=\\\"tour-btn\\\" class=\\\"inline-flex items-center gap-3 px-8 py-4 rounded-xl bg-indigo-600 text-white-forced font-bold text-lg hover:brightness-110 transition-transform hover:scale-105 shadow-xl\\\"><i class=\\\"ri-rocket-line text-2xl\\\"><\/i><span>Iniciar tour de bienvenida<\/span><\/button>\\n                <\/div>\n<p>\\n                <\/p>\n<div id=\\\"home-cards\\\" class=\\\"grid sm:grid-cols-2 lg:grid-cols-4 gap-8\\\">\\n                    <\/p>\n<div onclick=\\\"show('chap1')\\\" class=\\\"main-menu-card p-8 rounded-2xl glassmorphism flex flex-col items-center text-center cursor-pointer\\\"><i class=\\\"ri-compass-3-line text-6xl mb-6 text-indigo-500\\\"><\/i><\/p>\n<h3 class=\\\"font-bold text-xl text-slate-800\\\">1. Tu Ecosistema web<\/h3>\n<p class=\\\"text-slate-500 mt-3\\\">Navegadores vs Motores. Encuentra tu combinaci\u00f3n ideal.<\/p>\n<\/div>\n<p>\\n                    <\/p>\n<div onclick=\\\"show('chap2')\\\" class=\\\"main-menu-card p-8 rounded-2xl glassmorphism flex flex-col items-center text-center cursor-pointer\\\"><i class=\\\"ri-equalizer-line text-6xl mb-6 text-teal-500\\\"><\/i><\/p>\n<h3 class=\\\"font-bold text-xl text-slate-800\\\">2. Laboratorio de B\u00fasqueda<\/h3>\n<p class=\\\"text-slate-500 mt-3\\\">Dise\u00f1a ecuaciones con operadores booleanos y filtros.<\/p>\n<\/div>\n<p>\\n                    <\/p>\n<div onclick=\\\"show('chap3')\\\" class=\\\"main-menu-card p-8 rounded-2xl glassmorphism flex flex-col items-center text-center cursor-pointer\\\"><i class=\\\"ri-book-2-line text-6xl mb-6 text-emerald-500\\\"><\/i><\/p>\n<h3 class=\\\"font-bold text-xl text-slate-800\\\">3. Explorador de Fuentes<\/h3>\n<p class=\\\"text-slate-500 mt-3\\\">Bases de datos y portales oficiales por disciplina.<\/p>\n<\/div>\n<p>\\n                    <\/p>\n<div onclick=\\\"show('chap4')\\\" class=\\\"main-menu-card p-8 rounded-2xl glassmorphism flex flex-col items-center text-center cursor-pointer\\\"><i class=\\\"ri-shield-check-line text-6xl mb-6 text-amber-500\\\"><\/i><\/p>\n<h3 class=\\\"font-bold text-xl text-slate-800\\\">4. Laboratorio Forense<\/h3>\n<p class=\\\"text-slate-500 mt-3\\\">Valida la fiabilidad con nuestro checklist interactivo.<\/p>\n<\/div>\n<p>\\n                <\/p><\/div>\n<p>\\n                <\/p>\n<div class=\\\"module-nav-footer\\\">\n<div><\/div>\n<p><button onclick=\\\"show('chap1')\\\" class=\\\"module-nav-btn group\\\">Comenzar M\u00f3dulo 1 <i class=\\\"ri-arrow-right-line group-hover:translate-x-1 transition-transform\\\"><\/i><\/button><\/div>\n<p>\\n                <\/p>\n<div id=\\\"credits-footer\\\">\n<p>\u00a9 2026 Equipo de Referencia.<\/p>\n<p>Juli\u00e1n Arturo Castillo-Vel\u00e1squez \u2022 Fabi\u00e1n Eduardo C\u00e1ceres \u2022 Laura Mar\u00eda Vega<\/p>\n<p>Alix Carol Torres \u2022 Francisco Felipe Cort\u00e9s<\/p>\n<\/div>\n<p>\\n            <\/section>\n<p>\\n\\n        <\/p>\n<section id=\\\"chap1\\\" class=\\\"module\\\"><\/section>\n<p>\\n        <\/p>\n<section id=\\\"chap2\\\" class=\\\"module\\\"><\/section>\n<p>\\n        <\/p>\n<section id=\\\"chap3\\\" class=\\\"module\\\"><\/section>\n<p>\\n        <\/p>\n<section id=\\\"chap4\\\" class=\\\"module\\\"><\/section>\n<p>\\n    <\/main>\\n\\n    \\n\\n    <script>\\n        \/\/ Funci\u00f3n global para manejar redirecciones externas y evitar problemas con CMS\\n        window.openExternalLink = function(url) {\\n            \/\/ Aseguramos que la URL tenga el protocolo completo\\n            let finalUrl = url;\\n            if (!url.startsWith('http:\/\/') && !url.startsWith('https:\/\/')) {\\n                finalUrl = 'https:\/\/' + url;\\n            }\\n            \\n            \/\/ Creamos un elemento <a> invisible din\u00e1micamente y forzamos el clic\\n            const a = document.createElement('a');\\n            a.href = finalUrl;\\n            a.target = '_blank';\\n            a.rel = 'noopener noreferrer';\\n            \\n            \/\/ Necesario en algunos navegadores\/entornos para que el click funcione\\n            document.body.appendChild(a); \\n            a.click();\\n            document.body.removeChild(a);\\n        };\\n\\n        \/\/ ============== L\u00d3GICA GENERAL ==============\\n        const app = {\\n            init() {\\n                this.setupNavigation();\\n                                this.setupWelcomeTour();\\n                this.setupModuleTours();\\n                \\n                m1.init(); \\n                m2.init();\\n                \\n                show('home');\\n            },\\n            setupNavigation() {\\n                window.show = (id) => {\\n                    document.querySelectorAll('.module').forEach(s => s.classList.remove('active'));\\n                    const moduleElement = document.getElementById(id);\\n                    \\n                    \/\/ Update nav icons\\n                    document.querySelectorAll('.nav-icon-btn').forEach(b => b.classList.remove('active-nav'));\\n                    const navMap = {'home':'nav-home','chap1':'nav-m1','chap2':'nav-m2','chap3':'nav-m3','chap4':'nav-m4'};\\n                    const activeBtn = document.getElementById(navMap[id]);\\n                    if(activeBtn) activeBtn.classList.add('active-nav');\\n                    if (moduleElement) moduleElement.classList.add('active');\\n                    \\n                    const headerTitle = document.getElementById('header-title-container');\\n                    headerTitle?.classList.toggle('hidden', id === 'home');\\n\\n                    const progressMap = {'home': 20, 'chap1': 40, 'chap2': 60, 'chap3': 80, 'chap4': 100};\\n                    const progressBar = document.getElementById('progress-bar');\\n                    if(progressBar) progressBar.style.width = `${progressMap[id] || 0}%`;\\n\\n                    window.scrollTo({ top: 0, behavior: 'smooth' });\\n                    \\n                    if (id === 'chap3' && !m3.initialized) m3.init();\\n                    if (id === 'chap4' && !m4.initialized) m4.init();\\n                };\\n            },\\n            setupWelcomeTour() {\\n                const tourBtn = document.getElementById('tour-btn');\\n                if (tourBtn) tourBtn.addEventListener('click', () => this.startMainTour());\\n            },\\n            setupModuleTours() {\\n                document.getElementById('main-content').addEventListener('click', (event) => {\\n                    const tourButton = event.target.closest('button[id$=\\\"-tour-btn\\\"]');\\n                    if (!tourButton) return;\\n                    const tourMap = {\\n                        'm1-tour-btn': this.startM1Tour, 'm2-tour-btn': this.startM2Tour,\\n                        'm3-tour-btn': this.startM3Tour, 'm4-tour-btn': this.startM4Tour,\\n                    };\\n                    tourMap[tourButton.id]?.call(this);\\n                });\\n            },\\n            getTourOptions() {\\n                return { useModalOverlay: true, defaultStepOptions: { classes: 'shepherd-custom-class', scrollTo: { behavior: 'smooth', block: 'center' }, cancelIcon: { enabled: true } } };\\n            },\\n            startMainTour() {\\n                const tour = new Shepherd.Tour(this.getTourOptions());\\n                tour.addStep({ id: 'welcome', text: '\u00a1Bienvenido\/a! Este tour te mostrar\u00e1 c\u00f3mo navegar la gu\u00eda y encontrar ayuda en cada secci\u00f3n.', buttons: [{ text: 'Siguiente', action: tour.next }] });\\n                tour.addStep({ id: 'nav-buttons', text: 'Usa estos botones para saltar directamente a cualquier m\u00f3dulo. \u00a1Son tu atajo principal!', attachTo: { element: '#main-nav-buttons', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });\\n                tour.addStep({ id: 'module-cards', text: 'Aqu\u00ed tienes los 4 m\u00f3dulos. Cada uno es una herramienta interactiva para mejorar tus habilidades de b\u00fasqueda.', attachTo: { element: '#home-cards', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });\\n                tour.addStep({ id: 'module-help', text: '<strong>\u00a1Importante!<\/strong> Dentro de cada m\u00f3dulo, ver\u00e1s un bot\u00f3n de ayuda como este <button class=\\\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-sky-600 text-white align-middle\\\"><i class=\\\"ri-question-line text-base\\\"><\/i><\/button>. \u00dasalo para obtener un tutorial espec\u00edfico de ese m\u00f3dulo.', buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: '\u00a1Entendido!', action: tour.complete }] });\\n                tour.start();\\n            },\\n            startM1Tour() {\\n                const tour = new Shepherd.Tour(this.getTourOptions());\\n                tour.addStep({ id: 'm1_intro', text: 'Este m\u00f3dulo te ayuda a elegir las mejores herramientas. Primero, aprende la diferencia entre navegador (el veh\u00edculo) y motor de b\u00fasqueda (el mapa).', attachTo: { element: '#m1-card-1', on: 'bottom' }, buttons: [{ text: 'Siguiente', action: tour.next }] });\\n                tour.addStep({ id: 'm1_wizard', text: 'Luego, usa este asistente interactivo para descubrir la combinaci\u00f3n perfecta de navegador y motor de b\u00fasqueda seg\u00fan lo que m\u00e1s te importa.', attachTo: { element: '#m1-card-2', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });\\n                tour.addStep({ id: 'm1_directory', text: 'Finalmente, aqu\u00ed puedes explorar un directorio completo de todas las herramientas disponibles.', attachTo: { element: '#m1-card-3', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Finalizar', action: tour.complete }] });\\n                tour.start();\\n            },\\n            startM2Tour() {\\n            const tour = new Shepherd.Tour(this.getTourOptions());\\n            const step3El = document.getElementById('m2-step3');\\n            const step3WasHidden = step3El?.classList.contains('hidden');\\n            tour.addStep({ id:'m2s1', text:'<b>Paso 1:<\/b> Elige d\u00f3nde buscar. Tienes 8 opciones: Recursos suscritos (EBSCO, Scopus), Web (Google, Bing, DuckDuckGo, Scholar) y Biblioteca impresa (Cat\u00e1logo UGC).', attachTo:{element:'#m2-step1',on:'bottom'}, buttons:[{text:'Siguiente',action:tour.next}] });\\n            tour.addStep({ id:'m2s2', text:'<b>Paso 2:<\/b> Construye tu ecuaci\u00f3n. Escribe un t\u00e9rmino, elige operador y presiona \\\"A\u00f1adir bloque\\\". Con OR, acumula sin\u00f3nimos con \\\"+ Otra\\\".', attachTo:{element:'#m2-step2',on:'bottom'}, buttons:[{text:'Atr\u00e1s',action:tour.back, classes:'shepherd-button-secondary'},{text:'Siguiente',action:tour.next}] });\\n            tour.addStep({ id:'m2s3', text:'<b>Paso 3:<\/b> Si elegiste un buscador Web, filtra por dominio, tipo de archivo, fuente o fechas. Este paso se oculta para Recursos suscritos y Biblioteca.', attachTo:{element:'#m2-step3',on:'top'}, when:{'before-show':()=>{if(step3El)step3El.classList.remove('hidden');}}, buttons:[{text:'Atr\u00e1s',action:tour.back, classes:'shepherd-button-secondary'},{text:'Siguiente',action:tour.next}] });\\n            tour.addStep({ id:'m2s4', text:'<b>Paso 4:<\/b> Tu ecuaci\u00f3n final aparece aqu\u00ed. C\u00f3piala o l\u00e1nzala directamente en el buscador seleccionado.', attachTo:{element:'#m2-step4',on:'top'}, buttons:[{text:'Atr\u00e1s',action:tour.back, classes:'shepherd-button-secondary'},{text:'Finalizar',action:tour.complete}] });\\n            const cleanup=()=>{if(step3WasHidden&&step3El)step3El.classList.add('hidden');};\\n            tour.on('complete',cleanup); tour.on('cancel',cleanup);\\n            tour.start();\\n        },\\nstartM3Tour() {\\n                const tour = new Shepherd.Tour(this.getTourOptions());\\n                tour.addStep({ id: 'm3_tabs', text: 'Selecciona tu \u00e1rea de conocimiento usando estas pesta\u00f1as para filtrar los recursos m\u00e1s relevantes.', attachTo: { element: '#tabs-m3', on: 'bottom' }, buttons: [{ text: 'Siguiente', action: tour.next }] });\\n                tour.addStep({ id: 'm3_content', text: 'Los recursos aparecer\u00e1n aqu\u00ed, agrupados por categor\u00edas como \\\"Suscripci\u00f3n UGC\\\", \\\"Bases abiertas\\\" y \\\"Sitios oficiales\\\".', attachTo: { element: '#content-m3', on: 'top' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });\\n                tour.addStep({ id: 'm3_details', text: 'Puedes hacer clic en el t\u00edtulo de cada categor\u00eda para expandirla o contraerla y encontrar lo que buscas m\u00e1s f\u00e1cilmente.', attachTo: { element: '#content-m3 details summary', on: 'bottom' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Finalizar', action: tour.complete }] });\\n                tour.start();\\n            },\\n            startM4Tour() {\\n                const tour = new Shepherd.Tour(this.getTourOptions());\\n                const resultsBox = document.querySelector('#chap4 #box');\\n\\n                tour.addStep({ id: 'm4_tabs', text: 'Este laboratorio tiene 3 pesta\u00f1as: el evaluador interactivo, una gu\u00eda de criterios detallada y una lista de verificaci\u00f3n imprimible.', attachTo: { element: '#m4-tabs-area', on: 'bottom' }, buttons: [{ text: 'Siguiente', action: tour.next }] });\\n                tour.addStep({ id: 'm4_evaluator', text: 'En el evaluador, responde \\\"S\u00ed\\\" o \\\"No\\\" a las preguntas sobre la fuente que est\u00e1s analizando.', attachTo: { element: '#qs', on: 'top' }, buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Siguiente', action: tour.next }] });\\n                \\n                tour.addStep({\\n                    id: 'm4_results',\\n                    text: 'Tus resultados aparecer\u00e1n aqu\u00ed en tiempo real, con un puntaje, un sem\u00e1foro de fiabilidad y recomendaciones personalizadas.',\\n                    attachTo: { element: '#box', on: 'top' },\\n                    buttons: [{ text: 'Atr\u00e1s', action: tour.back }, { text: 'Finalizar', action: tour.complete }],\\n                    when: {\\n                        'before-show': () => {\\n                            if (resultsBox) resultsBox.hidden = false;\\n                        }\\n                    }\\n                });\\n\\n                const cleanup = () => {\\n                    if (resultsBox) {\\n                        const hasResponded = Object.values(m4.state).some(arr => arr.some(v => v !== null));\\n                        if (!hasResponded) {\\n                            resultsBox.hidden = true;\\n                        }\\n                    }\\n                };\\n\\n                tour.on('complete', cleanup);\\n                tour.on('cancel', cleanup);\\n\\n                tour.start();\\n            }\\n        };\\n        \\n        const m1 = {\\n            htmlContent: `<\/p>\n<div class=\\\"flex justify-between items-center gap-4 mb-10\\\">\n<h2 class=\\\"text-2xl sm:text-3xl font-bold\\\"><span class=\\\"text-4xl mr-3 align-middle\\\"><\/span>M\u00f3dulo 1: tu ecosistema ideal<\/h2>\n<p><button id=\\\"m1-tour-btn\\\" class=\\\"help-circle-btn bg-indigo-600\\\" title=\\\"Ayuda del m\u00f3dulo\\\"><i class=\\\"ri-question-mark\\\"><\/i><\/button><\/div>\n<div class=\\\"space-y-12\\\">\n<div id=\\\"m1-card-1\\\" class=\\\"glassmorphism rounded-xl p-8\\\">\n<h3 class=\\\"text-xl font-semibold mb-4 text-center\\\">Navegador vs. motor de b\u00fasqueda: el veh\u00edculo y el mapa<\/h3>\n<p class=\\\"text-slate-600\\\">Para navegar por la vasta red de internet, necesitas dos herramientas que, aunque trabajan juntas, son fundamentalmente diferentes. Imagina que internet es una ciudad inmensa.<\/p>\n<ul class=\\\"list-disc list-inside mt-4 space-y-2\\\">\n<li>El <strong>navegador web<\/strong> (Chrome, Firefox, Safari) es tu <strong>veh\u00edculo <\/strong>. Es el software que instalas en tu dispositivo y que te permite 'conducir' por las calles de la ciudad, visitar direcciones (URLs) y ver el contenido de los edificios (p\u00e1ginas web).<\/li>\n<li>El <strong>motor de b\u00fasqueda<\/strong> (Google, DuckDuckGo, Perplexity) es tu <strong>mapa inteligente y GPS <\/strong>. No lo instalas, es un servicio que consultas para encontrar la ubicaci\u00f3n de algo espec\u00edfico que no conoces. Le dices \\\"busco bibliotecas\\\" y te da una lista de direcciones relevantes.<\/li>\n<\/ul>\n<\/div>\n<div id=\\\"m1-card-2\\\" class=\\\"glassmorphism rounded-xl p-8\\\">\n<h3 class=\\\"text-xl font-semibold mb-6 text-center\\\">Actividad pr\u00e1ctica: encuentra tu combo ideal<\/h3>\n<div id=\\\"wizard-content\\\"><\/div>\n<\/div>\n<div id=\\\"m1-card-3\\\" class=\\\"glassmorphism rounded-xl p-8\\\">\n<h3 class=\\\"text-xl font-semibold mb-6 text-center\\\">Directorio de buscadores web 2025<\/h3>\n<h4 class=\\\"text-lg font-bold mb-4 text-indigo-600\\\">Motores de b\u00fasqueda<\/h4>\n<div id=\\\"engines-directory\\\" class=\\\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\\\"><\/div>\n<h4 class=\\\"text-lg font-bold mt-8 mb-4 text-indigo-600\\\">Navegadores web<\/h4>\n<div id=\\\"browsers-directory\\\" class=\\\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\\\"><\/div>\n<\/div>\n<\/div>\n<div class=\\\"module-nav-footer\\\"><button onclick=\\\"show('home')\\\" class=\\\"module-nav-btn group\\\"><i class=\\\"ri-home-4-line mr-2\\\"><\/i> Inicio<\/button><button onclick=\\\"show('chap2')\\\" class=\\\"module-nav-btn group\\\">Siguiente: Laboratorio <i class=\\\"ri-arrow-right-line ml-2 group-hover:translate-x-1 transition-transform\\\"><\/i><\/button><\/div>\n<p>`,\\n            engines: [{id:\\\"google\\\",name:\\\"Google\\\",icon:\\\"ri-google-fill\\\",desc:\\\"\u00cdndice mundial con IA Gemini y la mayor cobertura del mercado.\\\",link:\\\"https:\/\/google.com\\\"},{id:\\\"bing\\\",name:\\\"Microsoft Bing\\\",icon:\\\"ri-windows-fill\\\",desc:\\\"Integraci\u00f3n nativa con IA Copilot para respuestas multimodales.\\\",link:\\\"https:\/\/bing.com\\\"},{id:\\\"duckduckgo\\\",name:\\\"DuckDuckGo\\\",icon:\\\"ri-duckduckgo-fill\\\",desc:\\\"El est\u00e1ndar en privacidad: sin tracking ni perfilado de usuario.\\\",link:\\\"https:\/\/duckduckgo.com\\\"},{id:\\\"perplexity\\\",name:\\\"Perplexity AI\\\",icon:\\\"ri-compass-3-line\\\",desc:\\\"Un 'motor de respuestas' que usa IA para dar res\u00famenes directos con fuentes citadas.\\\",link:\\\"https:\/\/perplexity.ai\\\"},{id:\\\"brave_s\\\",name:\\\"Brave Search\\\",icon:\\\"ri-shield-star-line\\\",desc:\\\"\u00cdndice propio e independiente que ofrece resultados sin sesgos comerciales ni anuncios.\\\",link:\\\"https:\/\/search.brave.com\\\"},{id:\\\"kagi\\\",name:\\\"Kagi (pago)\\\",icon:\\\"ri-money-dollar-circle-line\\\",desc:\\\"Motor premium sin anuncios, con alta calidad y filtros personalizables (Lenses).\\\",link:\\\"https:\/\/kagi.com\\\"},{id:\\\"ecosia\\\",name:\\\"Ecosia\\\",icon:\\\"ri-seedling-line\\\",desc:\\\"Enfoque en sostenibilidad: tus b\u00fasquedas ayudan a plantar \u00e1rboles.\\\",link:\\\"https:\/\/www.ecosia.org\\\"},{id:\\\"yandex\\\",name:\\\"Yandex\\\",icon:\\\"ri-search-2-line\\\",desc:\\\"L\u00edder en Rusia y pa\u00edses de la CEI, con b\u00fasqueda regional avanzada.\\\",link:\\\"https:\/\/yandex.com\\\"},{id:\\\"baidu\\\",name:\\\"Baidu\\\",icon:\\\"ri-search-2-line\\\",desc:\\\"El motor dominante en China, con su propia IA (Ernie). Indispensable para contenido de esa regi\u00f3n.\\\",link:\\\"https:\/\/www.baidu.com\\\"},{id:\\\"startpage\\\",name:\\\"Startpage\\\",icon:\\\"ri-shield-keyhole-line\\\",desc:\\\"Ofrece los resultados de Google de forma an\u00f3nima, actuando como un proxy de privacidad.\\\",link:\\\"https:\/\/www.startpage.com\\\"},{id:\\\"you\\\",name:\\\"You.com\\\",icon:\\\"ri-robot-2-line\\\",desc:\\\"Combina varios modelos de IA y permite filtrar por plugins y fuentes avanzadas.\\\",link:\\\"https:\/\/you.com\\\"},{id:\\\"internetarchive\\\",name:\\\"Internet Archive\\\",icon:\\\"ri-archive-line\\\",desc:\\\"Busca en el historial de la web (Wayback Machine), no en la web viva.\\\",link:\\\"https:\/\/archive.org\/web\/\\\"}],\\n            browsers: [{id:\\\"chrome\\\",name:\\\"Chrome\\\",icon:\\\"ri-chrome-fill\\\",desc:\\\"El m\u00e1s popular, con un ecosistema masivo de extensiones y gran rendimiento.\\\",link:\\\"https:\/\/google.com\/chrome\\\"},{id:\\\"firefox\\\",name:\\\"Firefox\\\",icon:\\\"ri-firefox-fill\\\",desc:\\\"El principal navegador de c\u00f3digo abierto, enfocado en la privacidad y la independencia.\\\",link:\\\"https:\/\/firefox.com\\\"},{id:\\\"safari\\\",name:\\\"Safari\\\",icon:\\\"ri-safari-fill\\\",desc:\\\"Optimizado para el ecosistema Apple, con una eficiencia energ\u00e9tica superior.\\\",link:\\\"https:\/\/www.apple.com\/safari\/\\\"},{id:\\\"edge\\\",name:\\\"Microsoft Edge\\\",icon:\\\"ri-edge-new-fill\\\",desc:\\\"Bajo consumo y con el asistente Copilot integrado en una barra lateral.\\\",link:\\\"https:\/\/microsoft.com\/edge\\\"},{id:\\\"brave_b\\\",name:\\\"Brave\\\",icon:\\\"ri-brave-fill\\\",desc:\\\"Bloquea anuncios y rastreadores de forma nativa, ofreciendo velocidad y seguridad por defecto.\\\",link:\\\"https:\/\/brave.com\\\"},{id:\\\"arc\\\",name:\\\"Arc\\\",icon:\\\"ri-sparkling-2-line\\\",desc:\\\"Reimagina la navegaci\u00f3n con una sidebar productiva, espacios de trabajo y su propia IA (Max).\\\",link:\\\"https:\/\/arc.net\\\"},{id:\\\"opera\\\",name:\\\"Opera\\\",icon:\\\"ri-opera-fill\\\",desc:\\\"Incluye el agente de IA Aria de forma gratuita y otras funciones integradas como VPN.\\\",link:\\\"https:\/\/www.opera.com\\\"},{id:\\\"vivaldi\\\",name:\\\"Vivaldi\\\",icon:\\\"ri-palette-line\\\",desc:\\\"Ofrece una personalizaci\u00f3n total de la interfaz, ideal para usuarios avanzados.\\\",link:\\\"https:\/\/vivaldi.com\\\"},{id:\\\"tor\\\",name:\\\"Tor Browser\\\",icon:\\\"ri-git-repository-private-line\\\",desc:\\\"M\u00e1ximo anonimato y evasi\u00f3n de censura. Esencial para el acceso sin restricciones.\\\",link:\\\"https:\/\/www.torproject.org\/\\\"},{id:\\\"duckduckgo_b\\\",name:\\\"DuckDuckGo Browser\\\",icon:\\\"ri-duckduckgo-fill\\\",desc:\\\"Ofrece protecci\u00f3n total de la privacidad por defecto, con un bot\u00f3n para borrar datos al instante.\\\",link:\\\"https:\/\/duckduckgo.com\/app\\\"},{id:\\\"samsung\\\",name:\\\"Samsung Internet\\\",icon:\\\"ri-smartphone-line\\\",desc:\\\"Optimizado para dispositivos Galaxy, con Modo Secreto y integraci\u00f3n con Bixby.\\\",link:\\\"https:\/\/www.samsung.com\/us\/apps\/samsung-internet\/\\\"},{id:\\\"operagx\\\",name:\\\"Opera GX\\\",icon:\\\"ri-gamepad-line\\\",desc:\\\"Dise\u00f1ado para gamers, con limitadores de CPU\/RAM y el modo de escritura de Aria.\\\",link:\\\"https:\/\/www.opera.com\/gx\\\"}],\\n            wizardState: { currentStep: 0, userAnswers: {} },wizardSteps: [{ question: \\\"\u00bfCu\u00e1l es tu prioridad principal al navegar?\\\", key: 'priority', options: [ { text: \\\"M\u00e1xima privacidad y seguridad\\\", value: \\\"privacy\\\", icon: \\\"\\\" }, { text: \\\"Respuestas con IA y productividad\\\", value: \\\"ai\\\", icon: \\\"\\\" }, { text: \\\"Simplicidad y eficiencia general\\\", value: \\\"efficiency\\\", icon: \\\"\\\" }, { text: \\\"Acceso sin restricciones\\\", value: \\\"access\\\", icon: \\\"\\\" },] }],recommendations: { privacy: [{title:\\\"Opci\u00f3n ideal: fortaleza privada\\\",browserId:\\\"brave_b\\\",engineId:\\\"brave_s\\\",reason:\\\"Combo perfecto. El navegador bloquea todo por defecto y el motor tiene su propio \u00edndice sin sesgos comerciales. M\u00e1xima privacidad con buena velocidad.\\\"},{title:\\\"Alternativa: el est\u00e1ndar de la privacidad\\\",browserId:\\\"firefox\\\",engineId:\\\"duckduckgo\\\",reason:\\\"Una combinaci\u00f3n probada y respetada. Firefox, con sus contenedores y protecciones, junto a un motor que no te rastrea.\\\"},{title:\\\"Opci\u00f3n avanzada: resultados de Google an\u00f3nimos\\\",browserId:\\\"brave_b\\\",engineId:\\\"startpage\\\",reason:\\\"Obt\u00e9n la calidad de los resultados de Google, pero a trav\u00e9s de Startpage que elimina todos tus datos personales de la consulta.\\\"}], ai: [{title:\\\"Opci\u00f3n ideal: foco en respuestas\\\",browserId:\\\"arc\\\",engineId:\\\"perplexity\\\",reason:\\\"Arc te permite organizar tu investigaci\u00f3n en espacios de trabajo, mientras Perplexity te da respuestas directas con fuentes. El combo definitivo para la productividad acad\u00e9mica.\\\"},{title:\\\"Alternativa: ecosistema integrado\\\",browserId:\\\"edge\\\",engineId:\\\"bing\\\",reason:\\\"La IA de Copilot est\u00e1 integrada en todo el navegador Edge y en el motor Bing, creando una experiencia fluida para resumir, crear y buscar.\\\"},{title:\\\"Opci\u00f3n flexible: calidad premium\\\",browserId:\\\"vivaldi\\\",engineId:\\\"kagi\\\",reason:\\\"Combina el navegador m\u00e1s personalizable con el motor de b\u00fasqueda de m\u00e1s alta calidad. Kagi te permite filtrar y priorizar fuentes, ideal para usuarios exigentes.\\\"}], efficiency: [{title:\\\"Opci\u00f3n ideal: el est\u00e1ndar de oro\\\",browserId:\\\"chrome\\\",engineId:\\\"google\\\",reason:\\\"La combinaci\u00f3n m\u00e1s utilizada del mundo. Ofrece una sincronizaci\u00f3n perfecta y una experiencia familiar y r\u00e1pida para la mayor\u00eda de las tareas cotidianas.\\\"},{title:\\\"Alternativa: r\u00e1pido y ligero\\\",browserId:\\\"brave_b\\\",engineId:\\\"google\\\",reason:\\\"Usa el motor de b\u00fasqueda m\u00e1s completo, pero en un navegador que bloquea la publicidad y los scripts pesados, resultando en una navegaci\u00f3n mucho m\u00e1s r\u00e1pida.\\\"}], access: [{title:\\\"\u00danica opci\u00f3n fiable: la fortaleza an\u00f3nima\\\",browserId:\\\"tor\\\",engineId:\\\"duckduckgo\\\",reason:\\\"Para m\u00e1xima seguridad, anonimato y la capacidad de acceder a contenido bloqueado, Tor Browser es la herramienta est\u00e1ndar. Es m\u00e1s lento, pero insuperable en su misi\u00f3n.\\\"}] },\\n            init: function() { document.getElementById('chap1').innerHTML = this.htmlContent; this.renderDirectories(); this.renderWizard(); },\\n            renderDirectories: function() { const ed = document.getElementById('engines-directory'), bd = document.getElementById('browsers-directory'); if(ed) ed.innerHTML = this.engines.map(item => this.createCard(item)).join(''); if(bd) bd.innerHTML = this.browsers.map(item => this.createCard(item)).join(''); },\\n            createCard: function(item) { return `<\/p>\n<div onclick=\\\"window.openExternalLink('${item.link}')\\\" class=\\\"directory-card block glassmorphism !rounded-lg p-4 hover:border-[var(--primary-color)] border-2 border-transparent cursor-pointer\\\">\n<h5 class=\\\"font-bold text-indigo-600 flex items-center gap-2\\\"><i class=\\\"${item.icon || 'ri-global-line'} text-xl\\\"><\/i><span>${item.name}<\/span><\/h5>\n<p class=\\\"text-sm text-slate-600 mt-1\\\">${item.desc}<\/p>\n<\/div>\n<p>`; },\\n            renderWizard: function() {const wizardContainer = document.getElementById('wizard-content'); if (!wizardContainer) return; const step = this.wizardSteps[this.wizardState.currentStep]; if (!step) {const priority = this.wizardState.userAnswers.priority; const recs = this.recommendations[priority];let recsHtml = recs.map(rec => { const browser = this.browsers.find(b => b.id === rec.browserId); const engine = this.engines.find(e => e.id === rec.engineId); return `<\/p>\n<div class=\\\"recommendation-card border-l-4 border-[var(--primary-color)] pl-4 mb-6\\\">\n<h5 class=\\\"font-bold text-lg\\\">${rec.title}<\/h5>\n<div class=\\\"grid md:grid-cols-2 gap-4 mt-3\\\">\n<div onclick=\\\"window.openExternalLink('${browser.link}')\\\" class=\\\"directory-card block glassmorphism !rounded-lg p-3 hover:border-[var(--primary-color)] border-2 border-transparent cursor-pointer\\\">\n<p class=\\\"text-xs text-slate-500\\\">Navegador<\/p>\n<p class=\\\"font-bold flex items-center gap-2\\\"><i class=\\\"${browser.icon}\\\"><\/i> ${browser.name}<\/p>\n<\/div>\n<div onclick=\\\"window.openExternalLink('${engine.link}')\\\" class=\\\"directory-card block glassmorphism !rounded-lg p-3 hover:border-[var(--primary-color)] border-2 border-transparent cursor-pointer\\\">\n<p class=\\\"text-xs text-slate-500\\\">Motor<\/p>\n<p class=\\\"font-bold flex items-center gap-2\\\"><i class=\\\"${engine.icon}\\\"><\/i> ${engine.name}<\/p>\n<\/div>\n<\/div>\n<p class=\\\"mt-3 text-sm text-slate-600\\\">${rec.reason}<\/p>\n<\/div>\n<p>`; }).join('');wizardContainer.innerHTML = `<\/p>\n<div class=\\\"text-center fade-in\\\">\n<h4 class=\\\"text-xl font-bold mb-6 text-indigo-600\\\">Tus combinaciones recomendadas<\/h4>\n<div class=\\\"text-left\\\">${recsHtml}<\/div>\n<p><button onclick=\\\"m1.resetWizard()\\\" class=\\\"mt-6 px-4 py-2 bg-[var(--primary-color)] text-white rounded-lg nav-btn\\\">Empezar de nuevo<\/button><\/div>\n<p>`;return;} wizardContainer.innerHTML = `<\/p>\n<div class=\\\"wizard-step active text-center\\\">\n<h4 class=\\\"text-lg font-bold mb-6\\\">${step.question}<\/h4>\n<div class=\\\"grid grid-cols-1 md:grid-cols-2 gap-4\\\">${step.options.map(opt => `<button onclick=\\\"m1.handleWizardChoice('${step.key}', '${opt.value}')\\\" class=\\\"wizard-option p-4 border-2 border-slate-200 rounded-lg text-left flex items-center hover:border-[var(--primary-color)] transition-colors\\\"><span class=\\\"text-3xl mr-4\\\">${opt.icon}<\/span><\/p>\n<div>\n<h5 class=\\\"font-bold\\\">${opt.text}<\/h5>\n<\/div>\n<p><\/button>`).join('')}<\/div>\n<\/div>\n<p>`;},\\n            handleWizardChoice: function(key, value) { this.wizardState.userAnswers[key] = value; this.wizardState.currentStep++; this.renderWizard(); },\\n            resetWizard: function() { this.wizardState.currentStep = 0; this.wizardState.userAnswers = {}; this.renderWizard(); }\\n        };\\n        \\n        const m2 = {\\n            searchers: {\\n                'academic-ebsco': { name:'Buscador de la Biblioteca', icon:'ri-building-4-line', type:'academia', buildUrl: q => `https:\/\/research-ebsco-com.bibliodigital.ugc.edu.co\/c\/72dcrf\/search\/results?q=${encodeURIComponent(q)}&type=0`, noFilters:true, noNOT:false },\\n                'academic-scopus': { name:'Scopus', icon:'ri-bar-chart-box-line', type:'academia', buildUrl: q => { const eq=encodeURIComponent(q); return `https:\/\/www-scopus-com.bibliodigital.ugc.edu.co\/results\/results.uri?st1=${eq}&st2=&s=TITLE-ABS-KEY%28${eq}%29&limit=10&origin=searchbasic&sort=plf-f&src=s&sot=b&sdt=b`; }, noFilters:true, noNOT:false },\\n                'web-google': { name:'Google', icon:'ri-google-fill', type:'web', buildUrl: q => `https:\/\/www.google.com\/search?q=${encodeURIComponent(q)}`, noFilters:false, noNOT:false },\\n                'web-bing': { name:'Bing', icon:'ri-global-line', type:'web', buildUrl: q => `https:\/\/www.bing.com\/search?q=${encodeURIComponent(q)}`, noFilters:false, noNOT:false },\\n                'web-duckduckgo': { name:'DuckDuckGo', icon:'ri-duckduckgo-fill', type:'web', buildUrl: q => `https:\/\/duckduckgo.com\/?q=${encodeURIComponent(q)}`, noFilters:false, noNOT:false },\\n                'web-scholar': { name:'Scholar', icon:'ri-graduation-cap-line', type:'web', buildUrl: q => `https:\/\/scholar.google.com\/scholar?q=${encodeURIComponent(q)}`, noFilters:false, noNOT:false },\\n                'library-koha': { name:'Cat\u00e1logo UGC', icon:'ri-book-line', type:'biblioteca', buildUrl: q => `http:\/\/biblioteca.ugc.edu.co\/cgi-bin\/koha\/opac-search.pl?q=${encodeURIComponent(q)}`, noFilters:true, noNOT:true }\\n            },\\n            examples: {\\n                'academic-ebsco': [\\n                    { blocks:[{txt:'(\\\"Tecnolog\u00eda de la informaci\u00f3n\\\" OR \\\"Information technology\\\")',op:''},{txt:'(\\\"Educaci\u00f3n superior\\\" OR \\\"Higher education\\\")',op:'AND'},{txt:'(\\\"Aprendizaje en l\u00ednea\\\" OR \\\"Online learning\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Cambio clim\u00e1tico\\\" OR \\\"Climate change\\\")',op:''},{txt:'(\\\"Agricultura sostenible\\\" OR \\\"Sustainable agriculture\\\")',op:'AND'},{txt:'(\\\"Seguridad alimentaria\\\" OR \\\"Food security\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Inteligencia artificial\\\" OR \\\"Artificial intelligence\\\")',op:''},{txt:'(\\\"Educaci\u00f3n\\\" OR \\\"Education\\\")',op:'AND'},{txt:'(\\\"Innovaci\u00f3n educativa\\\" OR \\\"Educational innovation\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Cultura digital\\\" OR \\\"Digital culture\\\")',op:''},{txt:'(\\\"Comunicaci\u00f3n digital\\\" OR \\\"Digital communication\\\")',op:'AND'},{txt:'(\\\"Medios sociales\\\" OR \\\"Social media\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Sostenibilidad\\\" OR \\\"Sustainability\\\")',op:''},{txt:'(\\\"Desarrollo sostenible\\\" OR \\\"Sustainable development\\\")',op:'AND'},{txt:'(\\\"Impacto ambiental\\\" OR \\\"Environmental impact\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} }\\n                ],\\n                'academic-scopus': [\\n                    { blocks:[{txt:'(\\\"Transformaci\u00f3n digital\\\" OR \\\"Digital transformation\\\")',op:''},{txt:'(\\\"Gesti\u00f3n empresarial\\\" OR \\\"Business management\\\")',op:'AND'},{txt:'(\\\"Innovaci\u00f3n\\\" OR \\\"Innovation\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Econom\u00eda circular\\\" OR \\\"Circular economy\\\")',op:''},{txt:'(\\\"Gesti\u00f3n de residuos\\\" OR \\\"Waste management\\\")',op:'AND'},{txt:'(\\\"Reciclaje\\\" OR \\\"Recycling\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Salud mental\\\" OR \\\"Mental health\\\")',op:''},{txt:'(\\\"Adolescentes\\\" OR \\\"Adolescents\\\")',op:'AND'},{txt:'(\\\"Bienestar\\\" OR \\\"Well-being\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Gobernanza\\\" OR \\\"Governance\\\")',op:''},{txt:'(\\\"Transparencia\\\" OR \\\"Transparency\\\")',op:'AND'},{txt:'(\\\"Participaci\u00f3n ciudadana\\\" OR \\\"Citizen participation\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Biotecnolog\u00eda\\\" OR \\\"Biotechnology\\\")',op:''},{txt:'(\\\"Investigaci\u00f3n\\\" OR \\\"Research\\\")',op:'AND'},{txt:'(\\\"Aplicaciones cl\u00ednicas\\\" OR \\\"Clinical applications\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} }\\n                ],\\n                'web-google': [\\n                    { blocks:[{txt:'\\\"Energ\u00eda renovable\\\"',op:''},{txt:'\\\"Cambio clim\u00e1tico\\\"',op:'AND'},{txt:'\\\"Pol\u00edticas ambientales\\\"',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Tecnolog\u00eda m\u00f3vil\\\"',op:''},{txt:'Aplicaciones',op:'AND'},{txt:'Desarrollo',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Equidad de g\u00e9nero\\\"',op:''},{txt:'Educaci\u00f3n',op:'AND'},{txt:'\\\"Derechos humanos\\\"',op:'AND'}], adv:{site:'.gov.co',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'Ciberseguridad',op:''},{txt:'Datos',op:'AND'},{txt:'Privacidad',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'Emprendimiento',op:''},{txt:'Innovaci\u00f3n',op:'AND'},{txt:'Startups',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} }\\n                ],\\n                'web-bing': [\\n                    { blocks:[{txt:'\\\"Inteligencia artificial\\\"',op:''},{txt:'Educaci\u00f3n',op:'AND'},{txt:'Colombia',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Desarrollo sostenible\\\"',op:''},{txt:'Ciudades',op:'AND'},{txt:'Urbanismo',op:'AND'}], adv:{site:'.gov.co',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'Rob\u00f3tica',op:''},{txt:'Industria',op:'AND'},{txt:'Automatizaci\u00f3n',op:'AND'}], adv:{site:'.edu',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Salud p\u00fablica\\\"',op:''},{txt:'Prevenci\u00f3n',op:'AND'},{txt:'Epidemiolog\u00eda',op:'AND'}], adv:{site:'.gov',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Econom\u00eda digital\\\"',op:''},{txt:'Fintech',op:'AND'},{txt:'Inclusi\u00f3n',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} }\\n                ],\\n                'web-duckduckgo': [\\n                    { blocks:[{txt:'\\\"Datos abiertos\\\"',op:''},{txt:'Gobierno',op:'AND'},{txt:'Transparencia',op:'AND'}], adv:{site:'.gov.co',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Privacidad digital\\\"',op:''},{txt:'Regulaci\u00f3n',op:'AND'},{txt:'Derechos',op:'AND'}], adv:{site:'.edu',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'Blockchain',op:''},{txt:'Contratos',op:'AND'},{txt:'Tecnolog\u00eda',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Cambio clim\u00e1tico\\\"',op:''},{txt:'Mitigaci\u00f3n',op:'AND'},{txt:'Adaptaci\u00f3n',op:'AND'}], adv:{site:'.gov',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Software libre\\\"',op:''},{txt:'Educaci\u00f3n',op:'AND'},{txt:'Acceso',op:'AND'}], adv:{site:'.edu.co',file:'',source:'',after:'',before:''} }\\n                ],\\n                'web-scholar': [\\n                    { blocks:[{txt:'(\\\"Aprendizaje autom\u00e1tico\\\" OR \\\"Machine learning\\\")',op:''},{txt:'(\\\"Procesamiento de lenguaje\\\" OR \\\"NLP\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Neurociencia\\\" OR \\\"Neuroscience\\\")',op:''},{txt:'(\\\"Cognici\u00f3n\\\" OR \\\"Cognition\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Dise\u00f1o urbano\\\"',op:''},{txt:'Sostenibilidad',op:'AND'},{txt:'Ciudades',op:'AND'}], adv:{site:'.edu',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Derecho ambiental\\\"',op:''},{txt:'Legislaci\u00f3n',op:'AND'},{txt:'Colombia',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'\\\"Pedagog\u00eda cr\u00edtica\\\"',op:''},{txt:'(\\\"Freire\\\" OR \\\"Educaci\u00f3n popular\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} }\\n                ],\\n                'library-koha': [\\n                    { blocks:[{txt:'(\\\"Inteligencia artificial\\\" OR \\\"Artificial intelligence\\\")',op:''},{txt:'(\\\"Educaci\u00f3n\\\" OR \\\"Education\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Sostenibilidad\\\" OR \\\"Sustainability\\\")',op:''}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Tecnolog\u00eda\\\" OR \\\"Technology\\\")',op:''},{txt:'(\\\"Sociedad\\\" OR \\\"Society\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Innovaci\u00f3n\\\" OR \\\"Innovation\\\")',op:''}], adv:{site:'',file:'',source:'',after:'',before:''} },\\n                    { blocks:[{txt:'(\\\"Cambio clim\u00e1tico\\\" OR \\\"Climate change\\\")',op:''},{txt:'(\\\"Ambiente\\\" OR \\\"Environment\\\")',op:'AND'}], adv:{site:'',file:'',source:'',after:'',before:''} }\\n                ]\\n            },\\n            blocks: [], adv: { site:'', file:'', source:'', after:'', before:'' }, currentSearcher: null, exampleIndex: {}, synList: [],\\n            htmlContent: `\\n<\/p>\n<div class=\\\"flex justify-between items-center gap-4 mb-10\\\">\\n    <\/p>\n<h2 class=\\\"text-3xl font-bold text-slate-800\\\"><span class=\\\"text-4xl mr-3 align-middle text-teal-500\\\">&#x1f6e0;&#xfe0f;<\/span>2. Laboratorio de B\u00fasqueda<\/h2>\n<p>\\n    <button id=\\\"m2-tour-btn\\\" class=\\\"help-circle-btn bg-teal-600\\\" title=\\\"Ayuda del m\u00f3dulo\\\"><i class=\\\"ri-question-mark\\\"><\/i><\/button>\\n<\/div>\n<p>\\n<\/p>\n<div class=\\\"space-y-8\\\">\\n    <\/p>\n<div id=\\\"m2-step1\\\" class=\\\"glassmorphism rounded-xl p-6 bg-white\\\">\\n        <\/p>\n<h3 class=\\\"font-bold text-lg mb-1 flex items-center gap-2 text-slate-800\\\"><span class=\\\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-purple-600 text-white-forced text-xs font-bold\\\">1<\/span> \u00bfD\u00f3nde quieres buscar?<\/h3>\n<p>\\n        <\/p>\n<p class=\\\"text-sm text-slate-500 mb-4\\\">Selecciona el motor o base de datos. Puedes cambiar en cualquier momento sin perder tu ecuaci\u00f3n.<\/p>\n<p>\\n        <\/p>\n<div class=\\\"space-y-4\\\">\\n            <\/p>\n<div>\n<p class=\\\"text-xs font-bold uppercase tracking-wider text-purple-500 mb-2\\\">Recursos suscritos<\/p>\n<div class=\\\"flex flex-wrap gap-2\\\" id=\\\"m2-btns-academia\\\"><\/div>\n<\/div>\n<p>\\n            <\/p>\n<div>\n<p class=\\\"text-xs font-bold uppercase tracking-wider text-blue-500 mb-2\\\">Web<\/p>\n<div class=\\\"flex flex-wrap gap-2\\\" id=\\\"m2-btns-web\\\"><\/div>\n<\/div>\n<p>\\n            <\/p>\n<div>\n<p class=\\\"text-xs font-bold uppercase tracking-wider text-amber-500 mb-2\\\">Biblioteca impresa<\/p>\n<div class=\\\"flex flex-wrap gap-2\\\" id=\\\"m2-btns-biblioteca\\\"><\/div>\n<\/div>\n<p>\\n        <\/p><\/div>\n<p>\\n        <\/p>\n<div id=\\\"m2-compat-warning\\\" class=\\\"hidden mt-3 text-sm bg-amber-50 border border-amber-200 rounded-lg p-3 text-slate-700\\\"><\/div>\n<p>\\n    <\/p><\/div>\n<p>\\n    <\/p>\n<div id=\\\"m2-step2\\\" class=\\\"glassmorphism rounded-xl p-6 bg-white opacity-50 pointer-events-none transition-all duration-300\\\">\\n        <\/p>\n<h3 class=\\\"font-bold text-lg mb-1 flex items-center gap-2 text-slate-800\\\"><span class=\\\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-blue-600 text-white-forced text-xs font-bold\\\">2<\/span> A\u00f1adir t\u00e9rminos<\/h3>\n<p>\\n        <\/p>\n<p class=\\\"text-sm text-slate-500 mb-4\\\">Escribe tu t\u00e9rmino, selecciona un operador y construye tu ecuaci\u00f3n paso a paso.<\/p>\n<p>\\n        <\/p>\n<div id=\\\"m2-builder-area\\\">\\n            <\/p>\n<div class=\\\"grid md:grid-cols-5 gap-4 items-end\\\">\\n                <\/p>\n<div class=\\\"md:col-span-3\\\"><label class=\\\"text-xs font-bold uppercase text-slate-500 mb-1 block\\\">T\u00e9rmino o frase<\/label><input id=\\\"m2-term\\\" placeholder=\\\"ej. Inteligencia Artificial\\\" class=\\\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 focus:ring-2 focus:ring-teal-500 outline-none text-slate-800\\\"><\/div>\n<p>\\n                <\/p>\n<div><label class=\\\"text-xs font-bold uppercase text-slate-500 mb-1 block\\\">Operador<\/label><select id=\\\"m2-oper\\\" class=\\\"w-full bg-white border border-slate-300 rounded-lg px-2 py-2 text-sm focus:ring-2 focus:ring-teal-500 outline-none text-slate-800\\\"><option value=\\\"AND\\\">AND (obligatorio)<\/option><option value=\\\"OR\\\">(OR) sin\u00f3nimos<\/option><option value=\\\"NOT\\\">\u2212 (excluir)<\/option><\/select><\/div>\n<p>\\n                <\/p>\n<div class=\\\"flex items-center gap-2 pt-3\\\"><input type=\\\"checkbox\\\" id=\\\"m2-exact\\\" class=\\\"h-5 w-5 text-teal-600 rounded border-slate-300 focus:ring-teal-500\\\"><label for=\\\"m2-exact\\\" class=\\\"text-sm font-medium text-slate-700\\\">Frase exacta<\/label><\/div>\n<p>\\n            <\/p><\/div>\n<p>\\n            <\/p>\n<div id=\\\"m2-synArea\\\" class=\\\"hidden mt-3 p-3 bg-teal-50 rounded-lg border border-teal-100\\\"><label class=\\\"text-xs font-bold uppercase text-teal-700 mb-1 block\\\">Sin\u00f3nimos o traducciones<\/label><\/p>\n<div class=\\\"flex gap-2\\\"><input id=\\\"m2-syn\\\" placeholder=\\\"ej. IA, Artificial Intelligence\\\" class=\\\"flex-1 bg-white border border-teal-200 rounded px-3 py-1.5 text-sm text-slate-800\\\"><button id=\\\"m2-addSyn\\\" class=\\\"px-3 py-1.5 bg-blue-600 rounded text-white-forced text-sm font-semibold hover:bg-blue-700\\\">+ Otra<\/button><\/div>\n<div id=\\\"m2-synChips\\\" class=\\\"flex flex-wrap gap-1 mt-2\\\"><\/div>\n<\/div>\n<p>\\n            <\/p>\n<div id=\\\"m2-explain\\\" class=\\\"text-xs bg-slate-100 p-3 rounded-lg mt-3 text-slate-600 italic border-l-4 border-slate-400\\\"><\/div>\n<p>\\n            <\/p>\n<div class=\\\"flex flex-wrap gap-3 mt-4\\\">\\n                <button id=\\\"m2-addBtn\\\" class=\\\"flex-1 min-w-[120px] bg-teal-600 py-2.5 rounded-lg hover:bg-teal-700 font-bold text-white-forced shadow-md\\\">A\u00f1adir bloque<\/button>\\n                <button id=\\\"m2-exampleBtn\\\" class=\\\"flex-1 min-w-[120px] bg-sky-500 py-2.5 rounded-lg hover:bg-sky-600 font-bold text-white-forced shadow-md\\\">Ver ejemplo<\/button>\\n                <button id=\\\"m2-resetBtn\\\" class=\\\"flex-1 min-w-[120px] bg-pink-500 py-2.5 rounded-lg hover:bg-pink-600 font-bold text-white-forced shadow-md\\\">Reiniciar<\/button>\\n            <\/div>\n<p>\\n        <\/p><\/div>\n<p>\\n        <\/p>\n<div class=\\\"mt-6\\\">\n<h4 class=\\\"font-bold text-sm text-slate-500 uppercase mb-2\\\">Bloques activos <span class=\\\"font-normal normal-case\\\">(clic para eliminar)<\/span><\/h4>\n<div id=\\\"m2-chipBox\\\" class=\\\"border-2 border-dashed border-slate-300 rounded-lg p-4 min-h-[60px] flex flex-wrap gap-2 text-sm items-center bg-slate-50\\\"><\/div>\n<\/div>\n<p>\\n    <\/p><\/div>\n<p>\\n    <\/p>\n<div id=\\\"m2-step3\\\" class=\\\"glassmorphism rounded-xl p-6 bg-white hidden transition-all duration-300\\\">\\n        <\/p>\n<h3 class=\\\"font-bold text-lg mb-1 flex items-center gap-2 text-slate-800\\\"><span class=\\\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-emerald-600 text-white-forced text-xs font-bold\\\">3<\/span> Filtros avanzados<\/h3>\n<p>\\n        <\/p>\n<p class=\\\"text-sm text-slate-500 mb-4\\\">Filtra resultados por dominio, tipo de archivo, fuente o rango de fechas.<\/p>\n<p>\\n        <\/p>\n<div class=\\\"grid md:grid-cols-2 gap-4\\\">\n<div><label class=\\\"text-xs font-bold uppercase text-slate-500 mb-1 block\\\">Dominio (site:)<\/label><select id=\\\"m2-siteSel\\\" class=\\\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\\\"><option value=\\\"\\\">\u2014 sin filtro \u2014<\/option><option value=\\\".edu.co\\\">Educaci\u00f3n colombiana (.edu.co)<\/option><option value=\\\".gov.co\\\">Oficiales Colombia (.gov.co)<\/option><option value=\\\".gov\\\">Todos gobiernos (.gov)<\/option><option value=\\\".edu\\\">Educaci\u00f3n general (.edu)<\/option><option value=\\\"custom\\\">Otro (escribe\u2026)<\/option><\/select><input id=\\\"m2-siteCustom\\\" placeholder=\\\"ej. unesco.org\\\" class=\\\"w-full bg-white border border-slate-300 rounded-lg px-3 py-1.5 text-sm mt-2 hidden text-slate-800\\\"><\/div>\n<div><label class=\\\"text-xs font-bold uppercase text-slate-500 mb-1 block\\\">Tipo de archivo (filetype:)<\/label><select id=\\\"m2-fileSel\\\" class=\\\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\\\"><option value=\\\"\\\">Todos<\/option><option value=\\\"pdf\\\">PDF<\/option><option value=\\\"pptx\\\">PPTX<\/option><option value=\\\"xlsx\\\">XLSX<\/option><option value=\\\"csv\\\">CSV<\/option><\/select><\/div>\n<div><label class=\\\"text-xs font-bold uppercase text-slate-500 mb-1 block\\\">Fuente Google News (source:)<\/label><input id=\\\"m2-source\\\" placeholder=\\\"ej. bbc, eltiempo\\\" class=\\\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\\\"><\/div>\n<div class=\\\"flex gap-4\\\">\n<div class=\\\"flex-1\\\"><label class=\\\"text-xs font-bold uppercase text-slate-500 mb-1 block\\\">Despu\u00e9s de (YYYY)<\/label><input id=\\\"m2-after\\\" type=\\\"number\\\" min=\\\"1900\\\" max=\\\"2100\\\" placeholder=\\\"2022\\\" class=\\\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\\\"><\/div>\n<div class=\\\"flex-1\\\"><label class=\\\"text-xs font-bold uppercase text-slate-500 mb-1 block\\\">Antes de (YYYY)<\/label><input id=\\\"m2-before\\\" type=\\\"number\\\" min=\\\"1900\\\" max=\\\"2100\\\" placeholder=\\\"2024\\\" class=\\\"w-full bg-white border border-slate-300 rounded-lg px-3 py-2 text-sm text-slate-800\\\"><\/div>\n<\/div>\n<\/div>\n<p>\\n    <\/p><\/div>\n<p>\\n    <\/p>\n<div id=\\\"m2-step4\\\" class=\\\"glassmorphism rounded-xl p-6 bg-white border-teal-100 border-2 opacity-50 pointer-events-none transition-all duration-300\\\">\\n        <\/p>\n<h3 class=\\\"font-bold text-lg mb-1 flex items-center gap-2 text-slate-800\\\"><span class=\\\"inline-flex items-center justify-center w-7 h-7 rounded-full bg-red-600 text-white-forced text-xs font-bold\\\">4<\/span> Ecuaci\u00f3n final<\/h3>\n<p>\\n        <\/p>\n<p class=\\\"text-sm text-slate-500 mb-3\\\">C\u00f3piala o l\u00e1nzala directamente en el buscador seleccionado.<\/p>\n<p>\\n        <\/p>\n<div id=\\\"m2-output-card\\\" class=\\\"border-2 border-teal-500 rounded-lg p-4 bg-slate-50 text-slate-900 font-mono text-lg shadow-inner min-h-[60px]\\\"><span id=\\\"m2-queryOut\\\" class=\\\"block break-words leading-relaxed\\\"><\/span><\/div>\n<p>\\n        <\/p>\n<div class=\\\"flex justify-center gap-3 mt-4\\\">\\n            <button id=\\\"m2-copyBtn\\\" class=\\\"px-5 py-2 bg-white border border-slate-300 hover:bg-slate-100 rounded-lg text-slate-700 font-semibold flex items-center gap-2 shadow-sm\\\"><i class=\\\"ri-clipboard-line\\\"><\/i> Copiar<\/button>\\n            <button id=\\\"m2-searchBtn\\\" onclick=\\\"if(this.dataset.url) window.openExternalLink(this.dataset.url)\\\" class=\\\"px-5 py-2 bg-teal-600 hover:bg-teal-700 rounded-lg text-white-forced font-semibold flex items-center gap-2 shadow-md cursor-pointer border-none\\\"><i class=\\\"ri-search-line\\\"><\/i> <span>Buscar<\/span><\/button>\\n        <\/div>\n<p>\\n    <\/p><\/div>\n<p>\\n<\/p><\/div>\n<p>\\n<\/p>\n<div class=\\\"module-nav-footer\\\">\\n    <button onclick=\\\"show('chap1')\\\" class=\\\"module-nav-btn group\\\"><i class=\\\"ri-arrow-left-line mr-2 group-hover:-translate-x-1 transition-transform\\\"><\/i> M\u00f3dulo 1<\/button>\\n    <button onclick=\\\"show('chap3')\\\" class=\\\"module-nav-btn group\\\">Siguiente: Fuentes <i class=\\\"ri-arrow-right-line ml-2 group-hover:translate-x-1 transition-transform\\\"><\/i><\/button>\\n<\/div>\n<p>`,\\n            init: function() {\\n                document.getElementById('chap2').innerHTML = this.htmlContent;\\n                const $ = id => document.getElementById(id);\\n                this.refs = {\\n                    step1:$('m2-step1'), step2:$('m2-step2'), step3:$('m2-step3'), step4:$('m2-step4'),\\n                    term:$('m2-term'), oper:$('m2-oper'), exact:$('m2-exact'),\\n                    synArea:$('m2-synArea'), syn:$('m2-syn'), addSyn:$('m2-addSyn'), synChips:$('m2-synChips'),\\n                    addBtn:$('m2-addBtn'), explan:$('m2-explain'),\\n                    chipBox:$('m2-chipBox'), queryO:$('m2-queryOut'),\\n                    copyBtn:$('m2-copyBtn'), searchBtn:$('m2-searchBtn'),\\n                    siteSel:$('m2-siteSel'), siteCustom:$('m2-siteCustom'),\\n                    fileSel:$('m2-fileSel'), source:$('m2-source'), after:$('m2-after'), before:$('m2-before'),\\n                    exampleBtn:$('m2-exampleBtn'), resetBtn:$('m2-resetBtn'),\\n                    compatWarn:$('m2-compat-warning')\\n                };\\n                this.tips = {\\n                    AND:'<b>AND:<\/b> Asegura que el t\u00e9rmino <u>debe<\/u> aparecer en los resultados. Es el operador por defecto.',\\n                    OR:'<b>(OR):<\/b> Busca el t\u00e9rmino principal <u>o cualquiera de los sin\u00f3nimos<\/u>. Se agrupan con par\u00e9ntesis.<br \/>Usa el campo de sin\u00f3nimos y presiona <b>+ Otra<\/b> para acumular, luego <b>A\u00f1adir bloque<\/b> para cerrar.',\\n                    NOT:'<b>\u2212 (guion):<\/b> <u>Excluye<\/u> cualquier resultado que contenga este t\u00e9rmino. \u00datil para eliminar ruido.'\\n                };\\n                this.refs.explan.innerHTML = this.tips['AND'];\\n                this.renderSearcherButtons();\\n                this.addEventListeners();\\n                var saved = localStorage.getItem('m2_state_v05');\\n                if (saved) { try { var p = JSON.parse(saved); if (p.searcher && this.searchers[p.searcher]) { this.blocks = p.blocks || []; this.adv = p.adv || {site:''}; this.selectSearcher(p.searcher); } } catch(e) { localStorage.removeItem('m2_state_v05'); } }\\n            },\\n            renderSearcherButtons: function() {\\n                var groups = { academia: document.getElementById('m2-btns-academia'), web: document.getElementById('m2-btns-web'), biblioteca: document.getElementById('m2-btns-biblioteca') };\\n                var self = this;\\n                Object.keys(this.searchers).forEach(function(id) {\\n                    var s = self.searchers[id];\\n                    var btn = document.createElement('button');\\n                    btn.className = 'm2-searcher-btn px-4 py-2 rounded-lg border border-slate-300 flex items-center gap-2 text-sm font-medium';\\n                    btn.dataset.id = id;\\n                    btn.innerHTML = '<i class=\\\"'+s.icon+' text-lg\\\"><\/i> '+s.name;\\n                    btn.onclick = function() { self.selectSearcher(id); };\\n                    if (groups[s.type]) groups[s.type].appendChild(btn);\\n                });\\n            },\\n            checkCompatibility: function(newId) {\\n                var s = this.searchers[newId];\\n                var issues = [];\\n                if (s.noFilters && this.adv.site) {\\n                    issues.push('El filtro <b>site:'+this.adv.site+'<\/b> no es soportado por <b>'+s.name+'<\/b>. Elimina el chip <code>site:<\/code>.');\\n                }\\n                if (s.noFilters && this.adv.file) {\\n                    issues.push('El filtro <b>filetype:'+this.adv.file+'<\/b> no es soportado por <b>'+s.name+'<\/b>. Elimina el chip <code>filetype:<\/code>.');\\n                }\\n                if (s.noFilters && this.adv.source) {\\n                    issues.push('El filtro <b>source:'+this.adv.source+'<\/b> no es soportado por <b>'+s.name+'<\/b>. Elimina el chip <code>source:<\/code>.');\\n                }\\n                if (s.noFilters && (this.adv.after || this.adv.before)) {\\n                    issues.push('Los filtros de fecha (<b>after:\/before:<\/b>) no son soportados por <b>'+s.name+'<\/b>. Elimina esos chips.');\\n                }\\n                if (s.noNOT && this.blocks.some(function(b){return b.txt.startsWith('-');})) {\\n                    issues.push('El operador <b>NOT (\u2212)<\/b> no es soportado por <b>'+s.name+'<\/b>. Elimina los bloques con guion (\u2212).');\\n                }\\n                return issues;\\n            },\\n            recheckCompat: function() {\\n                if (!this.currentSearcher) return;\\n                var issues = this.checkCompatibility(this.currentSearcher);\\n                if (issues.length > 0) {\\n                    this.refs.compatWarn.innerHTML = '<\/p>\n<div class=\\\"flex items-start gap-2\\\"><i class=\\\"ri-error-warning-line text-amber-400 text-xl shrink-0 mt-0.5\\\"><\/i><\/p>\n<div>\n<p class=\\\"font-semibold text-amber-400 mb-1\\\">Incompatibilidad detectada<\/p>\n<ul class=\\\"list-disc ml-4 space-y-1\\\">' + issues.map(function(i){return '<\/p>\n<li>'+i+'<\/li>\n<p>';}).join('') + '<\/ul>\n<\/div>\n<\/div>\n<p>';\\n                    this.refs.compatWarn.classList.remove('hidden');\\n                } else { this.refs.compatWarn.classList.add('hidden'); }\\n            },\\n            selectSearcher: function(id) {\\n                var s = this.searchers[id];\\n                this.currentSearcher = id;\\n                this.recheckCompat();\\n                \/\/ Visual\\n                document.querySelectorAll('.m2-searcher-btn').forEach(function(b) {\\n                    b.classList.toggle('selected', b.dataset.id === id);\\n                });\\n                \/\/ Enable steps\\n                this.refs.step2.classList.remove('opacity-50','pointer-events-none');\\n                this.refs.step4.classList.remove('opacity-50','pointer-events-none');\\n                \/\/ Step 3\\n                if (s.noFilters) {\\n                    this.refs.step3.classList.add('hidden');\\n                } else {\\n                    this.refs.step3.classList.remove('hidden');\\n                }\\n                \/\/ NOT operator\\n                var notOpt = this.refs.oper.querySelector('option[value=\\\"NOT\\\"]');\\n                if (s.noNOT) {\\n                    notOpt.disabled = true;\\n                    notOpt.textContent = '\u2212 (excluir) \u2014 no disponible';\\n                    if (this.refs.oper.value === 'NOT') { this.refs.oper.value = 'AND'; this.refs.explan.innerHTML = this.tips['AND']; }\\n                } else {\\n                    notOpt.disabled = false;\\n                    notOpt.textContent = '\u2212 (excluir)';\\n                }\\n                \/\/ Search button label\\n                this.refs.searchBtn.querySelector('span').textContent = 'Buscar en ' + s.name;\\n                \/\/ Rebuild query with current blocks\\n                this.buildQuery();\\n                if (!this.exampleIndex[id]) this.exampleIndex[id] = 0;\\n            },\\n            addEventListeners: function() {\\n                var self = this, refs = this.refs;\\n                refs.oper.onchange = function() {\\n                    var v = refs.oper.value;\\n                    refs.explan.innerHTML = self.tips[v];\\n                    refs.synArea.classList.toggle('hidden', v !== 'OR');\\n                    if (v !== 'OR') { self.synList = []; refs.synChips.innerHTML = ''; }\\n                };\\n                refs.addSyn.onclick = function() {\\n                    var val = refs.syn.value.trim(); if (!val) return;\\n                    self.synList.push(val); refs.syn.value = '';\\n                    self.renderSynChips(); refs.syn.focus();\\n                };\\n                refs.syn.onkeydown = function(e) { if (e.key === 'Enter') { e.preventDefault(); self.addBlock(); } };\\n                refs.addBtn.onclick = function() { self.addBlock(); };\\n                refs.term.onkeydown = function(e) { if (e.key === 'Enter') { e.preventDefault(); if (refs.oper.value === 'OR' && self.synList.length === 0 && !refs.syn.value.trim()) { refs.syn.focus(); } else { self.addBlock(); } } };\\n                refs.siteSel.onchange = function(e) {\\n                    refs.siteCustom.classList.toggle('hidden', e.target.value !== 'custom');\\n                    self.adv.site = e.target.value === 'custom' ? '' : e.target.value;\\n                    if (e.target.value === 'custom') refs.siteCustom.value = '';\\n                    self.buildQuery();\\n                };\\n                refs.siteCustom.oninput = function(e) { self.adv.site = e.target.value.trim(); self.buildQuery(); };\\n                refs.fileSel.onchange = function(e) { self.adv.file = e.target.value; self.buildQuery(); };\\n                refs.source.oninput = function(e) { self.adv.source = e.target.value.trim(); self.buildQuery(); };\\n                refs.after.oninput = function(e) { self.adv.after = e.target.value; self.buildQuery(); };\\n                refs.before.oninput = function(e) { self.adv.before = e.target.value; self.buildQuery(); };\\n                refs.copyBtn.onclick = function() {\\n                    var text = refs.queryO.textContent; if (!text) return;\\n                    navigator.clipboard.writeText(text).then(function() {\\n                        refs.copyBtn.innerHTML = '<i class=\\\"ri-check-line\\\"><\/i> Copiado';\\n                        setTimeout(function() { refs.copyBtn.innerHTML = '<i class=\\\"ri-clipboard-line\\\"><\/i> Copiar'; }, 1500);\\n                    }).catch(function() {\\n                        var ta = document.createElement('textarea'); ta.value = text; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta);\\n                        refs.copyBtn.innerHTML = '<i class=\\\"ri-check-line\\\"><\/i> Copiado';\\n                        setTimeout(function() { refs.copyBtn.innerHTML = '<i class=\\\"ri-clipboard-line\\\"><\/i> Copiar'; }, 1500);\\n                    });\\n                };\\n                refs.exampleBtn.onclick = function() { self.loadExample(); };\\n                refs.resetBtn.onclick = function() { self.resetState(); };\\n            },\\n            renderSynChips: function() {\\n                var self = this;\\n                this.refs.synChips.innerHTML = this.synList.map(function(s, i) {\\n                    return '<span class=\\\"inline-flex items-center gap-1 px-2 py-0.5 bg-blue-600\/30 border border-blue-500\/50 rounded-full text-xs cursor-pointer hover:bg-red-600\/30\\\" data-idx=\\\"'+i+'\\\">'+s+' <i class=\\\"ri-close-line text-xs\\\"><\/i><\/span>';\\n                }).join('');\\n                this.refs.synChips.querySelectorAll('span').forEach(function(el) {\\n                    el.onclick = function() { self.synList.splice(parseInt(el.dataset.idx), 1); self.renderSynChips(); };\\n                });\\n            },\\n            q: function(t) { return t.includes(' ') && !t.startsWith('\\\"') ? '\\\"'+t+'\\\"' : t; },\\n            addBlock: function() {\\n                var t = this.refs.term.value.trim(); if (!t) return;\\n                var first = !this.blocks.length, op = this.refs.oper.value;\\n                if (op === 'OR') {\\n                    t = this.refs.exact.checked ? '\\\"'+t+'\\\"' : this.q(t);\\n                    \\n                    \/\/ Capturar autom\u00e1ticamente cualquier texto pendiente en el campo de sin\u00f3nimos\\n                    var pendingSyn = this.refs.syn.value.trim();\\n                    var extraSyns = pendingSyn ? [this.q(pendingSyn)] : [];\\n                    var allTerms = [t].concat(this.synList.map(this.q)).concat(extraSyns);\\n                    \\n                    if (allTerms.length < 2) { \\n                        alert('Para (OR), a\u00f1ade o escribe al menos un sin\u00f3nimo.'); \\n                        this.refs.syn.focus(); \\n                        return; \\n                    }\\n                    this.blocks.push({ txt: '('+allTerms.join(' OR ')+')', op: first ? '' : 'AND' });\\n                    this.synList = []; this.refs.synChips.innerHTML = '';\\n                } else if (op === 'NOT') {\\n                    this.blocks.push({ txt: '-'+t.replace(\/^\\\"+|\\\"+$\/g, ''), op: '' });\\n                } else {\\n                    t = this.refs.exact.checked ? '\\\"'+t+'\\\"' : this.q(t);\\n                    this.blocks.push({ txt: t, op: first ? '' : 'AND' });\\n                }\\n                this.refs.term.value = ''; this.refs.syn.value = ''; this.refs.exact.checked = false;\\n                this.refs.oper.value = 'AND'; this.refs.explan.innerHTML = this.tips['AND']; this.refs.synArea.classList.add('hidden');\\n                this.buildQuery(); this.refs.term.focus();\\n                this.recheckCompat();\\n            },\\n            buildQuery: function() {\\n                if (!this.refs.chipBox) return;\\n                var self = this;\\n                this.refs.chipBox.innerHTML = '';\\n                this.blocks.forEach(function(b, i) {\\n                    var sp = document.createElement('span');\\n                    sp.className = 'chip ' + (b.txt.startsWith('(') ? 'chipOR' : b.txt.startsWith('-') ? 'chipNOT' : 'base');\\n                    sp.textContent = (b.op ? b.op + ' ' : '') + b.txt;\\n                    sp.title = 'Clic para eliminar';\\n                    sp.onclick = function() { self.blocks.splice(i, 1); self.buildQuery(); self.recheckCompat(); };\\n                    self.refs.chipBox.appendChild(sp);\\n                });\\n                if (this.adv.site) {\\n                    var sc = document.createElement('span');\\n                    sc.className = 'chip chipSITE'; sc.textContent = 'site:'+this.adv.site; sc.title = 'Clic para eliminar filtro';\\n                    sc.onclick = function() { self.adv.site = ''; self.updateAdvInputs(); self.buildQuery(); self.recheckCompat(); };\\n                    this.refs.chipBox.appendChild(sc);\\n                }\\n                var advFilters = [\\n                    {k:'file', prefix:'filetype:'}, {k:'source', prefix:'source:'},\\n                    {k:'after', prefix:'after:'}, {k:'before', prefix:'before:'}\\n                ];\\n                advFilters.forEach(function(f) {\\n                    if (self.adv[f.k]) {\\n                        var ac = document.createElement('span');\\n                        ac.className = 'chip chipSITE'; ac.textContent = f.prefix+self.adv[f.k]; ac.title = 'Clic para eliminar filtro';\\n                        ac.onclick = function() { self.adv[f.k] = ''; self.updateAdvInputs(); self.buildQuery(); self.recheckCompat(); };\\n                        self.refs.chipBox.appendChild(ac);\\n                    }\\n                });\\n                var qStr = this.blocks.map(function(b) { return (b.op ? b.op+' ' : '') + b.txt; }).join(' ').trim();\\n                var fullQ = qStr;\\n                if (this.adv.site) fullQ += ' site:'+this.adv.site;\\n                if (this.adv.file) fullQ += ' filetype:'+this.adv.file;\\n                if (this.adv.source) fullQ += ' source:'+this.adv.source;\\n                if (this.adv.after) fullQ += ' after:'+this.adv.after;\\n                if (this.adv.before) fullQ += ' before:'+this.adv.before;\\n                fullQ = fullQ.trim();\\n                this.refs.queryO.textContent = fullQ;\\n                if (this.currentSearcher) {\\n                    this.refs.searchBtn.dataset.url = this.searchers[this.currentSearcher].buildUrl(fullQ);\\n                }\\n                if (this.currentSearcher) {\\n                    localStorage.setItem('m2_state_v05', JSON.stringify({ searcher: this.currentSearcher, blocks: this.blocks, adv: this.adv }));\\n                }\\n            },\\n            updateAdvInputs: function() {\\n                if (['', '.edu.co', '.gov.co', '.gov', '.edu'].includes(this.adv.site)) {\\n                    this.refs.siteSel.value = this.adv.site; this.refs.siteCustom.classList.add('hidden');\\n                } else {\\n                    this.refs.siteSel.value = 'custom'; this.refs.siteCustom.value = this.adv.site; this.refs.siteCustom.classList.remove('hidden');\\n                }\\n                this.refs.fileSel.value = this.adv.file || '';\\n                this.refs.source.value = this.adv.source || '';\\n                this.refs.after.value = this.adv.after || '';\\n                this.refs.before.value = this.adv.before || '';\\n            },\\n            resetState: function() {\\n                this.blocks = []; this.adv = { site:'', file:'', source:'', after:'', before:'' }; this.synList = []; this.refs.synChips.innerHTML = '';\\n                localStorage.removeItem('m2_state_v05'); this.updateAdvInputs(); this.buildQuery();\\n                if (this.currentSearcher) { this.refs.compatWarn.classList.add('hidden'); }\\n            },\\n            loadExample: function() {\\n                if (!this.currentSearcher) { alert('Primero selecciona un buscador en el Paso 1.'); return; }\\n                var exs = this.examples[this.currentSearcher];\\n                if (!exs || exs.length === 0) return;\\n                if (!this.exampleIndex[this.currentSearcher]) this.exampleIndex[this.currentSearcher] = 0;\\n                var idx = this.exampleIndex[this.currentSearcher] % exs.length;\\n                var ex = exs[idx];\\n                this.blocks = JSON.parse(JSON.stringify(ex.blocks));\\n                this.adv = JSON.parse(JSON.stringify(ex.adv));\\n                this.updateAdvInputs(); this.buildQuery();\\n                this.exampleIndex[this.currentSearcher] = idx + 1;\\n                this.recheckCompat();\\n            }\\n        };\\n        \\n        const m3 = {\\n            initialized: false,\\n            htmlContent: `\n\n<div class=\\\"flex justify-between items-center gap-4 mb-10\\\">\n<h2 class=\\\"text-2xl sm:text-3xl font-bold\\\"><span class=\\\"text-4xl mr-3 align-middle\\\"><\/span>Explorador de fuentes<\/h2>\n<p><button id=\\\"m3-tour-btn\\\" class=\\\"help-circle-btn bg-emerald-600\\\" title=\\\"Ayuda del m\u00f3dulo\\\"><i class=\\\"ri-question-mark\\\"><\/i><\/button><\/div>\n<div class=\\\"glassmorphism rounded-xl p-6 md:p-8 space-y-8\\\">\n<div class=\\\"flex flex-wrap gap-x-6 gap-y-3 justify-center text-lg font-bold border-b border-slate-200 pb-4\\\" id=\\\"tabs-m3\\\"><button class=\\\"tab-btn\\\" data-area=\\\"arq\\\"> Arquitectura<\/button><button class=\\\"tab-btn\\\" data-area=\\\"eco\\\"> Econ\u00f3micas<\/button><button class=\\\"tab-btn\\\" data-area=\\\"law\\\"> Jur\u00eddicas<\/button><button class=\\\"tab-btn\\\" data-area=\\\"edu\\\"> Educaci\u00f3n<\/button><button class=\\\"tab-btn\\\" data-area=\\\"multi\\\"> Multidisciplinar<\/button><\/div>\n<div id=\\\"content-m3\\\" class=\\\"space-y-6\\\"><\/div>\n<\/div>\n<div class=\\\"module-nav-footer\\\"><button onclick=\\\"show('chap2')\\\" class=\\\"module-nav-btn group\\\"><i class=\\\"ri-arrow-left-line mr-2 group-hover:-translate-x-1 transition-transform\\\"><\/i> Laboratorio<\/button><button onclick=\\\"show('chap4')\\\" class=\\\"module-nav-btn group\\\">Siguiente: Evaluaci\u00f3n <i class=\\\"ri-arrow-right-line ml-2 group-hover:translate-x-1 transition-transform\\\"><\/i><\/button><\/div>\n<p>`,\\n            area: \\\"arq\\\",\\n            data: {\\n                arq:{\\n                    subs:[\\n                        [\\\"AV Monograf\u00edas\\\", \\\"https:\/\/arquitecturaviva-com.bibliodigital.ugc.edu.co\/publicaciones\/av-monografias\\\"],\\n                        [\\\"Arquitectura Viva\\\", \\\"https:\/\/arquitecturaviva-com.bibliodigital.ugc.edu.co\/publicaciones\/av\\\"],\\n                        [\\\"AV Proyectos\\\", \\\"https:\/\/arquitecturaviva-com.bibliodigital.ugc.edu.co\/publicaciones\/av-proyectos\\\"],\\n                        [\\\"Construdata\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.construdata.com\\\"],\\n                        [\\\"Oc\u00e9ano Arquitectura \u2013 Architecture Open Library\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/www.architectureopenlibrary.com\/\\\"],\\n                        [\\\"Art & Architecture Complete\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/search.ebscohost.com\/login.aspx?authtype=ip,uid&custid=s6279388&profile=ehost&defaultdb=vth&groupid=main\\\"]\\n                    ],\\n                    open:[[\\\"Structurae\\\",\\\"https:\/\/structurae.net\\\",\\\"Base de datos de estructuras y puentes con planos y fichas t\u00e9cnicas.\\\",\\\"ri-building-line\\\"],[\\\"ArchNet\\\",\\\"https:\/\/archnet.org\\\",\\\"Repositorio colaborativo sobre arquitectura isl\u00e1mica y patrimonio.\\\",\\\"ri-ancient-gate-line\\\"],[\\\"OATD\\\",\\\"https:\/\/oatd.org\\\",\\\"Motor de tesis doctorales y de maestr\u00eda OA.\\\",\\\"ri-graduation-cap-line\\\"],[\\\"BASE\\\",\\\"https:\/\/www.base-search.net\\\",\\\"\u00cdndice acad\u00e9mico multidisciplinar OA.\\\",\\\"ri-search-eye-line\\\"]],repo:[],gov:[[\\\"MinVivienda\\\",\\\"https:\/\/www.minvivienda.gov.co\\\",\\\"Normativa y estad\u00edsticas de vivienda y territorio.\\\",\\\"ri-government-line\\\"],[\\\"INVIAS\\\",\\\"https:\/\/www.invias.gov.co\\\",\\\"Datos y estudios de infraestructura vial.\\\",\\\"ri-road-map-line\\\"],[\\\"IGAC\\\",\\\"https:\/\/www.igac.gov.co\\\",\\\"Cartograf\u00eda, catastros y geograf\u00eda oficial.\\\",\\\"ri-map-2-line\\\"],[\\\"UPRA\\\",\\\"https:\/\/www.upra.gov.co\\\",\\\"Planeaci\u00f3n rural y uso de suelo.\\\",\\\"ri-plant-line\\\"],[\\\"ANI\\\",\\\"https:\/\/www.ani.gov.co\\\",\\\"Proyectos concesionados de infraestructura.\\\",\\\"ri-briefcase-4-line\\\"],[\\\"Supernotariado\\\",\\\"https:\/\/www.supernotariado.gov.co\\\",\\\"Informaci\u00f3n catastral y registros de propiedad.\\\",\\\"ri-file-text-line\\\"]]\\n                },\\n                eco:{\\n                    subs:[\\n                        [\\\"Business Source Ultimate\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/search.ebscohost.com\/login.aspx?authtype=ip,uid&custid=s6279388&profile=ehost&defaultdb=bsu&groupid=main\\\"],\\n                        [\\\"Gesti\u00f3n Humana\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/www.gestionhumana.com\\\"],\\n                        [\\\"Legiscomex\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.legiscomex.com\/\\\"]\\n                    ],\\n                    open:[[\\\"RePEc\\\",\\\"https:\/\/repec.org\\\",\\\"Trabajos acad\u00e9micos y series de documentos de econom\u00eda.\\\",\\\"ri-line-chart-line\\\"],[\\\"EconStor\\\",\\\"https:\/\/econstor.eu\\\",\\\"Repositorio alem\u00e1n de working papers y art\u00edculos de econom\u00eda.\\\",\\\"ri-line-chart-line\\\"],[\\\"IDEAS\\\",\\\"https:\/\/ideas.repec.org\\\",\\\"Metabuscador de la red RePEc.\\\",\\\"ri-search-eye-line\\\"],[\\\"DOAJ \u2013 Econom\u00eda\\\",\\\"https:\/\/doaj.org\\\",\\\"Revistas OA filtradas por categor\u00eda Econom\u00eda.\\\",\\\"ri-book-open-line\\\"],[\\\"SSRN\\\",\\\"https:\/\/www.ssrn.com\\\",\\\"Social Science Research Network: preprints en ciencias sociales.\\\",\\\"ri-group-line\\\"]],repo:[[\\\"Redalyc \u2013 Econom\u00eda\\\",\\\"https:\/\/www.redalyc.org\\\",\\\"Colecci\u00f3n latinoamericana de revistas OA en econom\u00eda.\\\",\\\"ri-earth-line\\\"],[\\\"SciELO \u2013 Ciencias Sociales\\\",\\\"https:\/\/www.scielo.org\\\",\\\"Revistas evaluadas con \u00e1rea econom\u00eda\/admin.\\\",\\\"ri-earth-line\\\"],[\\\"CLACSO\\\",\\\"https:\/\/clacso.org\\\",\\\"Libros y documentos de ciencias sociales latinoamericanas.\\\",\\\"ri-earth-line\\\"]],gov:[[\\\"Banco de la Rep\u00fablica\\\",\\\"https:\/\/www.banrep.gov.co\\\",\\\"Series estad\u00edsticas macroecon\u00f3micas de Colombia.\\\",\\\"ri-bank-line\\\"],[\\\"DANE\\\",\\\"https:\/\/www.dane.gov.co\\\",\\\"Censos, encuestas y microdatos oficiales.\\\",\\\"ri-bar-chart-box-line\\\"],[\\\"MinHacienda\\\",\\\"https:\/\/www.minhacienda.gov.co\\\",\\\"Pol\u00edtica fiscal y presupuestal.\\\",\\\"ri-government-line\\\"],[\\\"DIAN\\\",\\\"https:\/\/www.dian.gov.co\\\",\\\"Documentos tributarios y aduaneros.\\\",\\\"ri-file-shield-2-line\\\"],[\\\"Supersociedades\\\",\\\"https:\/\/www.supersociedades.gov.co\\\",\\\"Informaci\u00f3n empresarial y balances.\\\",\\\"ri-building-4-line\\\"],[\\\"SECOP\\\",\\\"https:\/\/www.colombiacompra.gov.co\\\",\\\"Contrataci\u00f3n p\u00fablica y datos de compras.\\\",\\\"ri-shopping-cart-line\\\"]]\\n                },\\n                law:{\\n                    subs:[\\n                        [\\\"Multilegis\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.multilegis.com\/ugc\/\\\"],\\n                        [\\\"Tirant PRIME\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.tirantonline.com.co\/latam\/login.do?user=GRANCOLOMBIA&password=LATAM\\\"],\\n                        [\\\"Vlex\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/vlex.com\/account\/login_ip\\\"]\\n                    ],\\n                    open:[[\\\"RedALyC\\\",\\\"https:\/\/www.redalyc.org\\\",\\\"Revistas OA de ciencias sociales y derecho.\\\",\\\"ri-earth-line\\\"],[\\\"SciELO\\\",\\\"https:\/\/www.scielo.org\\\",\\\"Colecci\u00f3n jur\u00eddica y de salud p\u00fablica.\\\",\\\"ri-earth-line\\\"],[\\\"CLACSO\\\",\\\"https:\/\/clacso.org\\\",\\\"Documentos y libros de pol\u00edticas p\u00fablicas.\\\",\\\"ri-earth-line\\\"]],repo:[[\\\"Repositorio Corte Constitucional\\\",\\\"https:\/\/www.corteconstitucional.gov.co\\\",\\\"Sentencias y jurisprudencia colombiana.\\\",\\\"ri-scales-3-line\\\"]],gov:[[\\\"Corte Constitucional\\\",\\\"https:\/\/www.corteconstitucional.gov.co\\\",\\\"Portal oficial del alto tribunal.\\\",\\\"ri-scales-3-line\\\"],[\\\"Consejo de Estado\\\",\\\"https:\/\/www.consejodeestado.gov.co\\\",\\\"Jurisprudencia contencioso-administrativa.\\\",\\\"ri-scales-3-line\\\"],[\\\"Rama Judicial\\\",\\\"https:\/\/www.ramajudicial.gov.co\\\",\\\"Consulta de procesos y expedientes.\\\",\\\"ri-folder-open-line\\\"],[\\\"MinJusticia\\\",\\\"https:\/\/www.minjusticia.gov.co\\\",\\\"Normativa y pol\u00edtica p\u00fablica sector justicia.\\\",\\\"ri-government-line\\\"],[\\\"Fiscal\u00eda\\\",\\\"https:\/\/www.fiscalia.gov.co\\\",\\\"Indicadores y boletines criminal\u00edsticos.\\\",\\\"ri-file-search-line\\\"],[\\\"Procuradur\u00eda\\\",\\\"https:\/\/www.procuradurial.gov.co\\\",\\\"Control disciplinario y fallos.\\\",\\\"ri-shield-user-line\\\"],[\\\"Defensor\u00eda\\\",\\\"https:\/\/www.defensoria.gov.co\\\",\\\"Informes de DD.HH. y alertas tempranas.\\\",\\\"ri-group-2-line\\\"]]\\n                },\\n                edu:{\\n                    subs:[\\n                        [\\\"Education Database\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/search.proquest.com\/education\/socialsciences\/fromDatabasesLayer?accountid=50439\\\"]\\n                    ],\\n                    open:[[\\\"ERIC\\\",\\\"https:\/\/eric.ed.gov\\\",\\\"\u00cdndice de literatura en educaci\u00f3n patrocinado por el US DoE.\\\",\\\"ri-graduation-cap-line\\\"],[\\\"E-Revistas\\\",\\\"https:\/\/e-revistas.csic.es\\\",\\\"Portal espa\u00f1ol de revistas OA en humanidades y educaci\u00f3n.\\\",\\\"ri-book-open-line\\\"],[\\\"Dialnet\\\",\\\"https:\/\/dialnet.unirioja.es\\\",\\\"Alertas bibliogr\u00e1ficas y tesis iberoamericanas.\\\",\\\"ri-earth-line\\\"]],repo:[],gov:[[\\\"MinEducaci\u00f3n\\\",\\\"https:\/\/www.mineducacion.gov.co\\\",\\\"Normativa y estad\u00edsticas del sector educativo.\\\",\\\"ri-government-line\\\"],[\\\"ICFES\\\",\\\"https:\/\/www.icfes.gov.co\\\",\\\"Resultados Saber y microdatos educativos.\\\",\\\"ri-file-chart-line\\\"],[\\\"SNIES\\\",\\\"https:\/\/snies.mineducacion.gov.co\\\",\\\"Datos de programas y matr\u00edculas HE.\\\",\\\"ri-database-2-line\\\"],[\\\"CNA\\\",\\\"https:\/\/www.cna.gov.co\\\",\\\"Acreditaci\u00f3n y calidad en educaci\u00f3n superior.\\\",\\\"ri-award-line\\\"],[\\\"Colombia Aprende\\\",\\\"https:\/\/www.colombiaaprende.edu.co\\\",\\\"Recursos did\u00e1cticos abiertos.\\\",\\\"ri-lightbulb-line\\\"],[\\\"Instituto Caro y Cuervo\\\",\\\"https:\/\/www.caroycuervo.gov.co\\\",\\\"Corpus y bases de lengua espa\u00f1ola.\\\",\\\"ri-translate-2\\\"]]\\n                },\\n                multi:{\\n                    subs:[\\n                        [\\\"Academic Research Complete\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/search.ebscohost.com\/login.aspx?authtype=ip,uid&custid=s6279388&groupid=main&profile=ehost&defaultdb=aph\\\"],\\n                        [\\\"E-Collection (ICONTEC)\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/ecollection.icontec.org\/colacc.aspx?Q=E39433350DBD555ABAA9751100A60A21\\\"],\\n                        [\\\"Environmental Studies (Gale)\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/infotrac.galegroup.com\/itweb\/ugc?db=GRNR\\\"],\\n                        [\\\"JSTOR\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/www.jstor.org\\\"],\\n                        [\\\"Oxford University Press\\\", \\\"https:\/\/academic-oup-com.bibliodigital.ugc.edu.co\/\\\"],\\n                        [\\\"Nature\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.nature.com\/\\\"],\\n                        [\\\"Sage Journals\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/journals.sagepub.com\/\\\"],\\n                        [\\\"Science Direct\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=http:\/\/www.sciencedirect.com\/\\\"],\\n                        [\\\"Scopus\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.scopus.com\/\\\"],\\n                        [\\\"Springer Link\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/link.springer.com\/\\\"],\\n                        [\\\"Taylor & Francis Journals\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/www.tandfonline.com\\\"],\\n                        [\\\"Informe Acad\u00e9mico (Gale)\\\", \\\"https:\/\/bibliodigital.ugc.edu.co\/login?url=https:\/\/infotrac.galegroup.com\/itweb\/ugc?db=IFME\\\"]\\n                    ],\\n                    open:[[\\\"CORE\\\",\\\"https:\/\/core.ac.uk\\\",\\\"Metabuscador de repositorios globales OA.\\\",\\\"ri-search-eye-line\\\"],[\\\"OpenAIRE\\\",\\\"https:\/\/openaire.eu\\\",\\\"Portal europeo de ciencia abierta y proyectos H2020.\\\",\\\"ri-search-eye-line\\\"],[\\\"PubMed Central\\\",\\\"https:\/\/www.ncbi.nlm.nih.gov\/pmc\\\",\\\"Art\u00edculos OA en biomedicina y salud.\\\",\\\"ri-health-book-line\\\"],[\\\"Zenodo\\\",\\\"https:\/\/zenodo.org\\\",\\\"Repositorio general de datos y publicaciones.\\\",\\\"ri-archive-drawer-line\\\"],[\\\"OpenDOAR\\\",\\\"https:\/\/v2.sherpa.ac.uk\/opendoar\\\",\\\"Directorio mundial de repositorios OA.\\\",\\\"ri-book-open-line\\\"],[\\\"WorldWideScience\\\",\\\"https:\/\/worldwidescience.org\\\",\\\"B\u00fasqueda federada en portales de I+D gubernamentales.\\\",\\\"ri-search-eye-line\\\"],[\\\"Biblioteca Digital Mundial\\\",\\\"https:\/\/wdl.org\\\",\\\"Manuscritos y mapas patrimoniales de la UNESCO.\\\",\\\"ri-bank-line\\\"],[\\\"Datos Abiertos Colombia\\\",\\\"https:\/\/datos.gov.co\\\",\\\"Portal oficial de datasets p\u00fablicos colombianos.\\\",\\\"ri-database-2-line\\\"]],repo:[[\\\"LA Referencia\\\",\\\"https:\/\/lareferencia.info\\\",\\\"Meta-repositorio de tesis y art\u00edculos LATAM.\\\",\\\"ri-earth-line\\\"],[\\\"BDCOL\\\",\\\"https:\/\/bdcol.renata.edu.co\\\",\\\"Agregador de repositorios universitarios colombianos.\\\",\\\"ri-community-line\\\"],[\\\"Latindex\\\",\\\"https:\/\/www.latindex.org\\\",\\\"Cat\u00e1logo descriptivo de revistas iberoamericanas.\\\",\\\"ri-earth-line\\\"],[\\\"RedALyC\\\",\\\"https:\/\/www.redalyc.org\\\",\\\"Revistas cient\u00edficas en acceso abierto.\\\",\\\"ri-earth-line\\\"],[\\\"SciELO\\\",\\\"https:\/\/www.scielo.org\\\",\\\"Biblioteca cient\u00edfica electr\u00f3nica regional.\\\",\\\"ri-earth-line\\\"]],gov:[[\\\"MinCiencias\\\",\\\"https:\/\/www.minciencias.gov.co\\\",\\\"Pol\u00edtica nacional de CTI y convocatorias.\\\",\\\"ri-government-line\\\"],[\\\"OCyT\\\",\\\"https:\/\/www.ocyt.gov.co\\\",\\\"Indicadores de ciencia y tecnolog\u00eda de Colombia.\\\",\\\"ri-line-chart-line\\\"],[\\\"SIB Colombia\\\",\\\"https:\/\/www.sibcolombia.net\\\",\\\"Datos abiertos de biodiversidad.\\\",\\\"ri-plant-line\\\"],[\\\"IDEAM\\\",\\\"https:\/\/www.ideam.gov.co\\\",\\\"Datos hidrometeorol\u00f3gicos y clim\u00e1ticos.\\\",\\\"ri-temp-cold-line\\\"],[\\\"Datos Abiertos\\\",\\\"https:\/\/datos.gov.co\\\",\\\"Portal de datasets del Estado.\\\",\\\"ri-database-2-line\\\"],[\\\"SINCHI\\\",\\\"https:\/\/www.sinchi.org.co\\\",\\\"Investigaci\u00f3n amaz\u00f3nica.\\\",\\\"ri-seedling-line\\\"],[\\\"Humboldt\\\",\\\"https:\/\/www.humboldt.org.co\\\",\\\"Biodiversidad e investigaci\u00f3n ambiental.\\\",\\\"ri-seedling-line\\\"],[\\\"MinCultura\\\",\\\"https:\/\/www.mincultura.gov.co\\\",\\\"Patrimonio cultural y estad\u00edsticas.\\\",\\\"ri-government-line\\\"],[\\\"Biblioteca Nacional\\\",\\\"https:\/\/www.bibliotecanacional.gov.co\\\",\\\"Colecciones digitales patrimoniales.\\\",\\\"ri-bank-line\\\"],[\\\"Archivo General\\\",\\\"https:\/\/www.archivogeneral.gov.co\\\",\\\"Fondo hist\u00f3rico y gu\u00edas de archivo.\\\",\\\"ri-archive-line\\\"],[\\\"ICANH\\\",\\\"https:\/\/www.icanh.gov.co\\\",\\\"Investigaci\u00f3n antropol\u00f3gica e hist\u00f3rica.\\\",\\\"ri-community-line\\\"],[\\\"Parques Nacionales\\\",\\\"https:\/\/www.parquesnacionales.gov.co\\\",\\\"Informaci\u00f3n de \u00e1reas protegidas.\\\",\\\"ri-map-pin-2-line\\\"]]\\n                }\\n            },\\n            init: function() { this.initialized = true; document.getElementById('chap3').innerHTML = this.htmlContent; const tabs = document.querySelectorAll('#tabs-m3 .tab-btn'); if(!tabs.length) return; tabs.forEach(btn => btn.onclick = () => { this.area = btn.dataset.area; this.render(); }); this.render(); },\\n            render: function() {\\n                const appEl = document.getElementById('ugc-guide-app') || document.documentElement;\\n                const currentData = this.data[this.area]; const contentDiv = document.getElementById('content-m3'); const areaColor = getComputedStyle(appEl).getPropertyValue(`--c-${this.area}`); appEl.style.setProperty('--current-area-color', areaColor.trim()); document.querySelectorAll('#tabs-m3 .tab-btn').forEach(btn => btn.classList.toggle('active', btn.dataset.area === this.area)); if (!currentData || !contentDiv) return;\\n                const card = (title, url, txt, icon) => `<\/p>\n<div class=\\\"resource-card rounded-xl p-5 flex flex-col\\\">\n<div class=\\\"flex-grow\\\">\n<h4 class=\\\"font-bold text-lg flex items-center gap-2\\\" style=\\\"color: var(--current-area-color);\\\"><i class=\\\"${icon || 'ri-database-2-line'}\\\"><\/i><span>${title}<\/span><\/h4>\n<p class=\\\"text-sm text-slate-500 mt-1\\\">${txt}<\/p>\n<\/div>\n<p><button onclick=\\\"window.openExternalLink('${url}')\\\" class=\\\"self-start text-xs mt-4 px-3 py-1 rounded-full font-semibold transition-colors cursor-pointer border-none\\\" style=\\\"background-color: var(--current-area-color); color: #0f172a;\\\">Visitar sitio <i class=\\\"ri-external-link-line\\\"><\/i><\/button><\/div>\n<p>`;\\n                const bloqueUGC = arr => {\\n                    if (!arr || !arr.length) return \\\"\\\";\\n                    return `<\/p>\n<details class=\\\"resource-category\\\" open>\n<summary><span class=\\\"font-bold text-xl flex items-center gap-3\\\"><i class=\\\"ri-vip-crown-fill\\\" style=\\\"color: var(--current-area-color);\\\"><\/i>Recursos de suscripci\u00f3n UGC<\/span><\/summary>\n<div>\n<div class=\\\"grid xl:grid-cols-3 lg:grid-cols-2 gap-4\\\">${arr.map(([name, url]) => card(name, url, 'Recurso disponible a trav\u00e9s del portal de la biblioteca.', 'ri-vip-crown-line')).join(\\\"\\\")}<\/div>\n<div class=\\\"text-center mt-8\\\"><button onclick=\\\"window.openExternalLink('https:\/\/www.ugc.edu.co\/biblioteca\/recursos-electronicos\/bases-de-datos')\\\" class=\\\"portal-cta inline-block px-8 py-3 rounded-full font-bold cursor-pointer\\\">Acceder al portal principal de recursos<\/button><\/div>\n<\/div>\n<\/details>\n<p>`;\\n                };\\n                const bloque = (icon, titulo, arr) => { if (!arr || arr.length === 0) return \\\"\\\"; return `<\/p>\n<details class=\\\"resource-category\\\">\n<summary><span class=\\\"font-bold text-xl flex items-center gap-3\\\"><i class=\\\"${icon}\\\" style=\\\"color: var(--current-area-color);\\\"><\/i>${titulo}<\/span><\/summary>\n<div>\n<div class=\\\"grid xl:grid-cols-3 lg:grid-cols-2 gap-4\\\">${arr.map(([t, u, d, i]) => card(t, u, d, i)).join(\\\"\\\")}<\/div>\n<\/div>\n<\/details>\n<p>`; };\\n                contentDiv.innerHTML = [ bloqueUGC(currentData.subs), bloque(\\\"ri-global-line\\\", \\\"Bases abiertas (open access)\\\", currentData.open), bloque(\\\"ri-archive-drawer-line\\\", \\\"Repositorios y redes acad\u00e9micas\\\", currentData.repo), bloque(\\\"ri-government-line\\\", \\\"Sitios oficiales y gubernamentales\\\", currentData.gov) ].filter(Boolean).join('');\\n            }\\n        };\\n\\n        \/\/ ============== M\u00d3DULO 4 ==============\\n        const m4 = {\\n            initialized: false,\\n            CRIT:[\\n                {k:'auth', t:'Autoridad', icon:'ri-shield-star-line', qs:['El autor o la organizaci\u00f3n est\u00e1n claramente identificados.','Las credenciales del autor son relevantes para el tema.','Existe informaci\u00f3n de contacto verificable.'], longDesc:'Eval\u00faa qui\u00e9n es el responsable del contenido. \u00bfEs un experto en la materia, una instituci\u00f3n reconocida o un autor an\u00f3nimo? Busca credenciales, afiliaciones institucionales (.edu, .gov) e informaci\u00f3n de contacto. Una fuente con alta autoridad es transparente sobre su origen y autor\u00eda.'},\\n                {k:'acc', t:'Precisi\u00f3n', icon:'ri-check-double-line', qs:['La informaci\u00f3n est\u00e1 respaldada por evidencias o referencias.','Est\u00e1 libre de errores ortogr\u00e1ficos o tipogr\u00e1ficos.'], longDesc:'Verifica que la informaci\u00f3n sea correcta y est\u00e9 respaldada por pruebas. \u00bfCitan sus fuentes? \u00bfLos datos son consistentes con otras fuentes fiables? Presta atenci\u00f3n a errores gramaticales o tipogr\u00e1ficos, ya que pueden indicar falta de rigor editorial.'},\\n                {k:'bias', t:'Objetividad', icon:'ri-scales-3-line', qs:['Se distingue claramente entre hechos y opiniones.','El lenguaje es neutral y no emotivo.'], longDesc:'Analiza el prop\u00f3sito de la p\u00e1gina. \u00bfBusca informar, persuadir o vender? Una fuente objetiva presenta un punto de vista equilibrado, distingue entre hechos y opiniones, y utiliza un lenguaje neutral. Desconf\u00eda del contenido excesivamente emotivo o que solo presenta un lado de la historia.'},\\n                {k:'cur', t:'Actualidad', icon:'ri-calendar-check-line', qs:['La fecha de publicaci\u00f3n es visible.','El contenido es lo suficientemente reciente.','Los enlaces externos funcionan correctamente.'], longDesc:'Comprueba la frescura de la informaci\u00f3n. \u00bfLa fecha de publicaci\u00f3n o \u00faltima actualizaci\u00f3n es visible y recente? En campos que cambian r\u00e1pidamente, como la ciencia o la tecnolog\u00eda, la actualidad es crucial. Aseg\u00farate de que los enlaces funcionen y el contenido no est\u00e9 obsoleto.'},\\n                {k:'cov', t:'Cobertura', icon:'ri-artboard-2-line', qs:['Se incluyen referencias o enlaces adicionales.','Se declaran las limitaciones del contenido.'], longDesc:'Determina si la fuente aborda el tema con la profundidad necesaria. \u00bfEs una visi\u00f3n superficial o un an\u00e1lisis detallado? Una buena fuente explora el tema a fondo, reconoce sus propias limitaciones y a menudo proporciona enlaces o referencias para ampliar la informaci\u00f3n.'}\\n            ],\\n            htmlContent: `<\/p>\n<div class=\\\"flex justify-between items-center gap-4 mb-10\\\">\n<h2 class=\\\"text-2xl sm:text-3xl font-bold\\\"><span class=\\\"text-4xl mr-3 align-middle\\\">&#x1f50e;<\/span>Laboratorio forense<\/h2>\n<p><button id=\\\"m4-tour-btn\\\" class=\\\"help-circle-btn bg-amber-600\\\" title=\\\"Ayuda del m\u00f3dulo\\\"><i class=\\\"ri-question-mark\\\"><\/i><\/button><\/div>\n<div class=\\\"space-y-10\\\">\n<nav id=\\\"m4-tabs-area\\\" class=\\\"tabH flex flex-wrap gap-1 justify-center no-print\\\"><\/nav>\n<section id=\\\"eva\\\" class=\\\"tabSect active space-y-8\\\">\n<div class=\\\"m4-glass rounded-xl p-6\\\">\n<p class=\\\"text-sm leading-relaxed\\\">Usa esta herramienta para determinar la fiabilidad de una p\u00e1gina o recurso web que est\u00e9s consultando. Responde <b>S\u00ed<\/b> o <b>No<\/b> a cada pregunta y obt\u00e9n un puntaje en tiempo real. Tu progreso se guardar\u00e1 autom\u00e1ticamente.<br \/><button id=\\\"m4_example\\\" class=\\\"mt-4 text-sm font-bold text-[var(--m4-p)] hover:underline\\\">\u00bfNo sabes por d\u00f3nde empezar? Haz clic aqu\u00ed para ver un ejemplo.<\/button><\/p>\n<\/div>\n<div id=\\\"qs\\\" class=\\\"space-y-8\\\"><\/div>\n<div id=\\\"box\\\" class=\\\"m4-glass rounded-xl p-8 space-y-6\\\" hidden>\n<h2 class=\\\"text-center text-xl font-bold\\\">Resultados de la evaluaci\u00f3n<\/h2>\n<div class=\\\"flex flex-col items-center sm:flex-row sm:justify-center gap-8\\\"><svg width=\\\"140\\\" height=\\\"140\\\" viewBox=\\\"0 0 42 42\\\"><circle cx=\\\"21\\\" cy=\\\"21\\\" r=\\\"18\\\" stroke=\\\"#334155\\\" stroke-width=\\\"4\\\" fill=\\\"none\\\"\/><circle id=\\\"ring\\\" cx=\\\"21\\\" cy=\\\"21\\\" r=\\\"18\\\" stroke=\\\"url(#grad)\\\" stroke-width=\\\"4\\\" fill=\\\"none\\\" stroke-dasharray=\\\"113.1\\\" stroke-dashoffset=\\\"113.1\\\" transform=\\\"rotate(-90 21 21)\\\" style=\\\"transition: stroke-dashoffset 0.5s ease;\\\"\/><defs><linearGradient id=\\\"grad\\\" x1=\\\"1\\\" y1=\\\"0\\\" x2=\\\"0\\\" y2=\\\"1\\\"><stop offset=\\\"0%\\\"  stop-color=\\\"var(--m4-p)\\\"\/><stop offset=\\\"100%\\\" stop-color=\\\"var(--m4-s)\\\"\/><\/linearGradient><\/defs><text id=\\\"rtxt\\\" x=\\\"50%\\\" y=\\\"54%\\\" text-anchor=\\\"middle\\\" fill=\\\"var(--text-color)\\\" font-size=\\\"9\\\" font-weight=\\\"900\\\">0 \/ 12<\/text><\/svg><\/p>\n<div><span id=\\\"badge\\\" class=\\\"inline-block text-xs font-bold px-3 py-1 rounded-full bg-slate-700\\\">\u2014<\/span><\/p>\n<p id=\\\"btxt\\\" class=\\\"mt-2 text-sm text-slate-600\\\">\n<\/div>\n<\/div>\n<div id=\\\"bars\\\" class=\\\"grid grid-cols-2 lg:grid-cols-5 gap-x-4 gap-y-6 mt-8 text-center text-xs\\\"><\/div>\n<div class=\\\"mt-8\\\">\n<h3 class=\\\"font-semibold mb-2\\\">Recomendaciones<\/h3>\n<ul id=\\\"reco\\\" class=\\\"list-disc ml-6 text-sm space-y-2\\\"><\/ul>\n<\/div>\n<div class=\\\"text-center mt-6 flex justify-center gap-4 no-print\\\"><button id=\\\"reset\\\" class=\\\"px-6 py-2 rounded bg-pink-600 hover:brightness-110 text-sm font-semibold text-white\\\">Reiniciar<\/button><button type=\\\"button\\\" onclick=\\\"window.print()\\\" class=\\\"px-6 py-2 rounded bg-[var(--m4-p)] hover:brightness-110 text-sm font-semibold text-white\\\"><i class=\\\"ri-printer-line mr-2\\\"><\/i>Imprimir<\/button><\/div>\n<\/div>\n<\/section>\n<section id=\\\"gui\\\" class=\\\"tabSect space-y-6\\\">\n<div id=\\\"gui-content\\\" class=\\\"space-y-6\\\"><\/div>\n<div class=\\\"text-center mt-6 no-print\\\"><button type=\\\"button\\\" onclick=\\\"window.print()\\\" class=\\\"px-6 py-2 rounded bg-[var(--m4-p)] hover:brightness-110 text-sm font-semibold text-white\\\"><i class=\\\"ri-printer-line mr-2\\\"><\/i>Imprimir Gu\u00eda<\/button><\/div>\n<\/section>\n<section id=\\\"chk\\\" class=\\\"tabSect space-y-6\\\">\n<form id=\\\"chkForm\\\" class=\\\"space-y-6\\\"><\/form>\n<div class=\\\"text-center mt-6 flex justify-center gap-4 no-print\\\"><button type=\\\"button\\\" id=\\\"resetChecklist\\\" class=\\\"px-6 py-2 rounded bg-pink-600 hover:brightness-110 text-sm font-semibold text-white\\\">Borrar selecci\u00f3n<\/button><button type=\\\"button\\\" onclick=\\\"window.print()\\\" class=\\\"px-6 py-2 rounded bg-[var(--m4-p)] hover:brightness-110 text-sm font-semibold text-white\\\"><i class=\\\"ri-printer-line mr-2\\\"><\/i>Imprimir Lista<\/button><\/div>\n<\/section>\n<\/div>\n<div class=\\\"module-nav-footer\\\"><button onclick=\\\"show('chap3')\\\" class=\\\"module-nav-btn group\\\"><i class=\\\"ri-arrow-left-line mr-2 group-hover:-translate-x-1 transition-transform\\\"><\/i> Fuentes<\/button><button onclick=\\\"show('home')\\\" class=\\\"module-nav-btn group\\\"><i class=\\\"ri-home-4-line mr-2\\\"><\/i> Volver al Inicio<\/button><\/div>\n<p>`,\\n            init: function() { if (this.initialized) return; this.initialized = true; const chap4Container = document.getElementById('chap4'); chap4Container.innerHTML = this.htmlContent; this.state = {}; this.buildUI(); const savedState = localStorage.getItem('m4_state'); if(savedState) { try { const parsedState = JSON.parse(savedState); Object.assign(this.state, parsedState); this.renderStateOnUI(this.state); this.calc(); } catch(e) { localStorage.removeItem('m4_state'); } } this.addEventListeners(chap4Container); },\\n            addEventListeners: function(container) { container.addEventListener('click', e => { const button = e.target.closest('button'); if (!button) return; if (button.classList.contains('yn')) { const {v, k, i} = button.dataset; [...button.parentNode.children].forEach(b => b.classList.remove('y','n')); button.classList.add(v === '1' ? 'y' : 'n'); this.state[k][i] = v === '1' ? 1 : 0; this.calc(); } else if (button.closest('.tabH')) { container.querySelectorAll('.tabH button').forEach(x => x.classList.remove('active')); button.classList.add('active'); container.querySelectorAll('.tabSect').forEach(s => s.classList.remove('active')); container.querySelector('#' + button.dataset.tab).classList.add('active'); } else if (button.id === 'reset') { this.buildUI(); container.querySelector('#box').hidden = true; localStorage.removeItem('m4_state'); } else if (button.id === 'resetChecklist') { container.querySelector('#chkForm').querySelectorAll('input[type=\\\"checkbox\\\"]').forEach(cb => cb.checked = false); } else if (button.id === 'm4_example') { const exampleState = { auth: [1, 1, 0], acc: [1, 0], bias: [0, 1], cur: [1, 1, 1], cov: [1, 0] }; Object.assign(this.state, exampleState); this.renderStateOnUI(this.state); this.calc(); } }); },\\n            buildUI: function() {\\n                const container = document.getElementById('chap4'); if(!container) return;\\n                const $ = q => container.querySelector(q);\\n                const qs=$('#qs');qs.innerHTML='';\\n                const chk=$('#chkForm');chk.innerHTML='';\\n                const tabs=$('.tabH'); tabs.innerHTML='';\\n                const gui=$('#gui-content'); gui.innerHTML='';\\n                tabs.innerHTML += `<button data-tab=\\\"eva\\\" class=\\\"active\\\"><i class=\\\"ri-checkbox-circle-line\\\"><\/i> Evaluador<\/button><button data-tab=\\\"gui\\\"><i class=\\\"ri-lightbulb-flash-line\\\"><\/i> Gu\u00eda de criterios<\/button><button data-tab=\\\"chk\\\"><i class=\\\"ri-list-check-2\\\"><\/i> Lista de verificaci\u00f3n<\/button>`;\\n                this.CRIT.forEach(c=>{\\n                    this.state[c.k]=Array(c.qs.length).fill(null);\\n                    let questionsHTML = c.qs.map((q,i)=> {\\n                        let questionBlock = `<\/p>\n<div class=\\\"flex flex-col sm:flex-row sm:items-center sm:justify-between my-2 py-2 border-b border-slate-200 last:border-b-0\\\">\n<p class=\\\"text-sm flex-1 mr-4\\\">${q}<\/p>\n<div class=\\\"flex gap-2 mt-2 sm:mt-0 shrink-0\\\"><button class=\\\"yn\\\" data-k=\\\"${c.k}\\\" data-i=\\\"${i}\\\" data-v=\\\"1\\\">S\u00ed<\/button><button class=\\\"yn\\\" data-k=\\\"${c.k}\\\" data-i=\\\"${i}\\\" data-v=\\\"0\\\">No<\/button><\/div>\n<\/div>\n<p>`;\\n                        \/\/ === INICIO CAMBIO: A\u00f1adir hint para fecha en sitios oficiales ===\\n                        if (c.k === 'cur' && i === 0) {\\n                            questionBlock += `<\/p>\n<p class=\\\"text-xs text-slate-500 mt-1 pl-2 pr-4 italic\\\">Nota: Si la fuente es de un sitio oficial (ej. Gobierno, ONU) o una organizaci\u00f3n reconocida sin fecha expl\u00edcita, use el a\u00f1o de su consulta y marque \\\"S\u00ed\\\".<\/p>\n<p>`;\\n                        }\\n                        \/\/ === FIN CAMBIO ===\\n                        return questionBlock;\\n                    }).join('');\\n                    qs.innerHTML+=`<\/p>\n<details class=\\\"m4-glass p-5 rounded-xl\\\" open>\n<summary class=\\\"font-bold text-lg cursor-pointer flex justify-between items-center\\\">${c.t}<i class=\\\"${c.icon} text-2xl text-[var(--primary-color)]\\\"><\/i><\/summary>\n<p>${questionsHTML}<\/details>\n<p>`;\\n                    chk.innerHTML+=`<\/p>\n<fieldset class=\\\"m4-glass p-6 space-y-2 rounded-xl\\\">\n<legend class=\\\"font-bold text-lg mb-2\\\">${c.t}<\/legend>\n<p>${c.qs.map(q=>`<label class=\\\"flex gap-3 text-sm items-center\\\"><input type=\\\"checkbox\\\" class=\\\"h-4 w-4 rounded bg-slate-700 border-slate-300 text-[var(--m4-p)] focus:ring-[var(--m4-p)]\\\"> ${q}<\/label>`).join('')}<\/fieldset>\n<p>`;\\n                    gui.innerHTML += `<\/p>\n<div class=\\\"m4-glass p-6 rounded-xl\\\">\n<div class=\\\"flex gap-4 items-start\\\"><i class=\\\"${c.icon} text-[var(--m4-p)] text-4xl shrink-0\\\"><\/i><\/p>\n<div>\n<h3 class=\\\"font-bold text-lg\\\">${c.t}<\/h3>\n<p class=\\\"text-sm text-slate-600 mt-1\\\">${c.longDesc}<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>`;\\n                });\\n                const bars=$('#bars');bars.innerHTML='';\\n                this.CRIT.forEach(c=>{\\n                    const maxScore = c.qs.length;\\n                    bars.innerHTML+=`<\/p>\n<div>\n<p class=\\\"font-semibold mb-1\\\">${c.t}<\/p>\n<div class=\\\"cbg\\\">\n<div id=\\\"bar_${c.k}\\\" class=\\\"h-full bg-gradient-to-r from-[var(--m4-p)] to-[var(--m4-s)]\\\" style=\\\"width:0%; transition: width 0.5s ease;\\\"><\/div>\n<\/div>\n<p id=\\\"txt_${c.k}\\\" class=\\\"mt-1\\\">0\/${maxScore}<\/p>\n<\/div>\n<p>`;\\n                });\\n            },\\n            calc: function(){\\n                \/\/ === INICIO CAMBIO: L\u00f3gica de c\u00e1lculo completamente reescrita ===\\n                const container = document.getElementById('chap4'); if(!container) return;\\n                const $ = q => container.querySelector(q);\\n\\n                let totalYes = 0;\\n                let responded = 0;\\n                \\n                this.CRIT.forEach(c => {\\n                    const answeredQuestions = this.state[c.k].filter(v => v !== null);\\n                    responded += answeredQuestions.length;\\n                    const score = answeredQuestions.reduce((a, b) => a + b, 0);\\n                    totalYes += score;\\n                    \\n                    const maxScore = c.qs.length;\\n                    $('#bar_' + c.k).style.width = (maxScore > 0 ? (score \/ maxScore) : 0) * 100 + '%';\\n                    $('#txt_' + c.k).textContent = score + '\/' + maxScore;\\n                });\\n\\n                \/\/ L\u00f3gica de niveles\\n                let idx;\\n                if (totalYes >= 10) idx = 3;      \/\/ Excelente\\n                else if (totalYes >= 7) idx = 2; \/\/ Buena\\n                else if (totalYes >= 4) idx = 1; \/\/ Dudosa\\n                else idx = 0;                    \/\/ No Confiable\\n\\n                const SEM = ['&#x1f534; No Confiable', '&#x1f7e0; Dudosa', '&#x1f7e2; Buena', '&#x1f7e3; Excelente'];\\n                const TXT = ['Evita usar esta fuente.', '\u00dasala con gran cautela.', 'Buena fiabilidad en general.', 'Excelente: alta autoridad y precisi\u00f3n.'];\\n                let warningMessage = '';\\n\\n                \/\/ L\u00f3gica de criterios absolutos\\n                const authorOk = this.state.auth[0] !== 0;\\n                const dateOk = this.state.cur[0] !== 0;\\n\\n                if (!authorOk || !dateOk) {\\n                    if (idx > 1) { \/\/ Si era 'Buena' o 'Excelente', se degrada a 'Dudosa'\\n                        idx = 1;\\n                    }\\n                    warningMessage = `<\/p>\n<li><strong class=\\\"text-amber-400\\\">\u00a1Advertencia!<\/strong> Una fuente sin ${!authorOk ? '<strong>autor claro<\/strong>' : ''}${!authorOk && !dateOk ? ' ni ' : ''}${!dateOk ? '<strong>fecha de publicaci\u00f3n<\/strong>' : ''} es fundamentalmente poco fiable. Su calificaci\u00f3n ha sido ajustada.<\/li>\n<p>`;\\n                }\\n\\n                $('#badge').textContent = SEM[idx];\\n                $('#btxt').textContent = TXT[idx];\\n\\n                \/\/ Actualizar c\u00edrculo y puntaje\\n                const totalQuestions = this.CRIT.reduce((sum, c) => sum + c.qs.length, 0);\\n                $('#ring').style.strokeDashoffset = 113.1 - (totalYes \/ totalQuestions) * 113.1;\\n                $('#rtxt').textContent = `${totalYes} \/ ${totalQuestions}`;\\n\\n                \/\/ Recomendaciones\\n                const recoList = $('#reco');\\n                recoList.innerHTML = warningMessage; \/\/ Inicia con el mensaje de advertencia si existe\\n                this.CRIT.forEach(c => {\\n                    if (this.state[c.k].some(v => v === 0)) {\\n                        recoList.innerHTML += `<\/p>\n<li>Considera mejorar la <strong>${c.t}<\/strong>: ${c.longDesc.split('.')[0]}.<\/li>\n<p>`;\\n                    }\\n                });\\n                \\n                if(responded > 0) {\\n                    $('#box').hidden = false;\\n                    localStorage.setItem('m4_state', JSON.stringify(this.state));\\n                }\\n                \/\/ === FIN CAMBIO ===\\n            },\\n            renderStateOnUI: function(currentState) {\\n                const container = document.getElementById('chap4'); if(!container) return;\\n                const $ = q => container.querySelector(q);\\n                this.CRIT.forEach(c => {\\n                    c.qs.forEach((q, i) => {\\n                        const val = currentState[c.k] ? currentState[c.k][i] : null;\\n                        if (val === null || val === undefined) return;\\n                        const btnsContainer = $(`button[data-k=\\\"${c.k}\\\"][data-i=\\\"${i}\\\"]`)?.parentNode;\\n                        if (!btnsContainer) return;\\n                        const btns = btnsContainer.querySelectorAll('button.yn');\\n                        btns.forEach(btn => {\\n                            btn.classList.remove('y', 'n');\\n                            if (parseInt(btn.dataset.v) === val) {\\n                                btn.classList.add(val === 1 ? 'y' : 'n');\\n                            }\\n                        });\\n                    });\\n                });\\n            }\\n        };\\n\\n        \/\/ ============== INICIALIZACI\u00d3N ==============\\n        app.init();\\n    <\/script>\\n    <\/div>\n<p>\\n<\/body>\\n<\/html>\u00ab,\u00bbid\u00bb:\u00bbugc-guide-app\u00bb,\u00bbyooessentials_access_conditions\u00bb:[],\u00bbyooessentials_access_mode\u00bb:\u00bbAND\u00bb}}]}]}]}],\u00bbversion\u00bb:\u00bb5.0.43&#8243;} &#8211;><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gu\u00eda de navegaci\u00f3n web Gu\u00eda de Navegaci\u00f3n Gu\u00eda de navegaci\u00f3n web Domina la investigaci\u00f3n digital. Aprende a diferenciar herramientas, construye b\u00fasquedas avanzadas, accede a fuentes acad\u00e9micas oficiales y eval\u00faa la fiabilidad de la informaci\u00f3n. Iniciar tour de bienvenida 1. Tu Ecosistema web Navegadores vs Motores. Encuentra tu combinaci\u00f3n ideal. 2. Laboratorio de B\u00fasqueda Dise\u00f1a ecuaciones [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":960,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_joinchat":[],"footnotes":""},"class_list":["post-1189","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/ugc.edu.co\/biblioteca\/wp-json\/wp\/v2\/pages\/1189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ugc.edu.co\/biblioteca\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ugc.edu.co\/biblioteca\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ugc.edu.co\/biblioteca\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ugc.edu.co\/biblioteca\/wp-json\/wp\/v2\/comments?post=1189"}],"version-history":[{"count":4,"href":"https:\/\/ugc.edu.co\/biblioteca\/wp-json\/wp\/v2\/pages\/1189\/revisions"}],"predecessor-version":[{"id":1193,"href":"https:\/\/ugc.edu.co\/biblioteca\/wp-json\/wp\/v2\/pages\/1189\/revisions\/1193"}],"up":[{"embeddable":true,"href":"https:\/\/ugc.edu.co\/biblioteca\/wp-json\/wp\/v2\/pages\/960"}],"wp:attachment":[{"href":"https:\/\/ugc.edu.co\/biblioteca\/wp-json\/wp\/v2\/media?parent=1189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}