{"id":646,"date":"2026-04-21T14:31:08","date_gmt":"2026-04-21T18:31:08","guid":{"rendered":"https:\/\/blamiss.com\/?page_id=646"},"modified":"2026-07-15T13:25:18","modified_gmt":"2026-07-15T17:25:18","slug":"646-2","status":"publish","type":"page","link":"https:\/\/blamiss.com\/","title":{"rendered":"CIBERSEGURIDAD"},"content":{"rendered":"<p>[et_pb_section fb_built=\"1&#8243; _builder_version=\"4.27.5&#8243; _module_preset=\"default\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.5&#8243; _module_preset=\"default\" hover_enabled=\"0&#8243; global_colors_info=\"{}\" sticky_enabled=\"0&#8243;][et_pb_column type=\"4_4&#8243; _builder_version=\"4.27.5&#8243; _module_preset=\"default\" global_colors_info=\"{}\"][et_pb_gallery gallery_ids=\"640&#8243; fullwidth=\"on\" _builder_version=\"4.27.5&#8243; _module_preset=\"default\" global_colors_info=\"{}\"][\/et_pb_gallery][et_pb_code _builder_version=\"4.27.5&#8243; _module_preset=\"default\" hover_enabled=\"0&#8243; global_colors_info=\"{}\" sticky_enabled=\"0&#8243;]<!DOCTYPE html><!-- [et_pb_line_break_holder] --><html lang=\"es\"><!-- [et_pb_line_break_holder] --><head><!-- [et_pb_line_break_holder] -->    <meta charset=\"UTF-8\"><!-- [et_pb_line_break_holder] -->    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><!-- [et_pb_line_break_holder] -->    <title>Alumnos Maestr\u00eda Ciberseguridad &#8211; Hacking Challenge<\/title><!-- [et_pb_line_break_holder] -->    <!-- Efectos de Confeti \ud83c\udf89 --><!-- [et_pb_line_break_holder] -->    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/canvas-confetti@1.6.0\/dist\/confetti.browser.min.js\"><\/script><!-- [et_pb_line_break_holder] -->    <\/p>\n<style><!-- [et_pb_line_break_holder] -->        :root {<!-- [et_pb_line_break_holder] -->            --primary: #1e40af;<!-- [et_pb_line_break_holder] -->            --primary-dark: #1e3a8a;<!-- [et_pb_line_break_holder] -->            --primary-light: #eff6ff;<!-- [et_pb_line_break_holder] -->            --bg: #f8fafc;<!-- [et_pb_line_break_holder] -->            --card-bg: #ffffff;<!-- [et_pb_line_break_holder] -->            --text: #0f172a;<!-- [et_pb_line_break_holder] -->            --text-secondary: #475569;<!-- [et_pb_line_break_holder] -->            --border: #e2e8f0;<!-- [et_pb_line_break_holder] -->            --correct: #10b981;<!-- [et_pb_line_break_holder] -->            --correct-bg: #ecfdf5;<!-- [et_pb_line_break_holder] -->            --correct-text: #065f46;<!-- [et_pb_line_break_holder] -->            --incorrect: #ef4444;<!-- [et_pb_line_break_holder] -->            --incorrect-bg: #fef2f2;<!-- [et_pb_line_break_holder] -->            --incorrect-text: #991b1b;<!-- [et_pb_line_break_holder] -->            --warning: #f59e0b;<!-- [et_pb_line_break_holder] -->            --warning-bg: #fffbeb;<!-- [et_pb_line_break_holder] -->            --warning-text: #78350f;<!-- [et_pb_line_break_holder] -->            --slot-bg: #f1f5f9;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .wp-sim-body {<!-- [et_pb_line_break_holder] -->            font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;<!-- [et_pb_line_break_holder] -->            background-color: var(--bg);<!-- [et_pb_line_break_holder] -->            color: var(--text);<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->            line-height: 1.6;<!-- [et_pb_line_break_holder] -->            -webkit-tap-highlight-color: transparent;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* --- PANTALLA DE LOGEO INICIAL --- *\/<!-- [et_pb_line_break_holder] -->        .login-overlay {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            top: 0; left: 0; width: 100%; height: 100%;<!-- [et_pb_line_break_holder] -->            background: #0f172a;<!-- [et_pb_line_break_holder] -->            z-index: 10000;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            padding: 20px;<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .login-card {<!-- [et_pb_line_break_holder] -->            background: #020617;<!-- [et_pb_line_break_holder] -->            border: 2px solid var(--primary);<!-- [et_pb_line_break_holder] -->            padding: 30px;<!-- [et_pb_line_break_holder] -->            border-radius: 16px;<!-- [et_pb_line_break_holder] -->            max-width: 400px;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 10px 25px rgba(30, 58, 138, 0.5);<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .login-input {<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            padding: 12px;<!-- [et_pb_line_break_holder] -->            margin: 15px 0;<!-- [et_pb_line_break_holder] -->            border-radius: 8px;<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border);<!-- [et_pb_line_break_holder] -->            background: #0f172a;<!-- [et_pb_line_break_holder] -->            color: #34d399;<!-- [et_pb_line_break_holder] -->            font-family: monospace;<!-- [et_pb_line_break_holder] -->            font-size: 16px;<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            outline: none;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .login-input:focus {<!-- [et_pb_line_break_holder] -->            border-color: #34d399;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 10px rgba(52, 211, 153, 0.3);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .progress-bar-container {<!-- [et_pb_line_break_holder] -->            position: sticky;<!-- [et_pb_line_break_holder] -->            top: 0;<!-- [et_pb_line_break_holder] -->            background-color: white;<!-- [et_pb_line_break_holder] -->            border-bottom: 2px solid var(--border);<!-- [et_pb_line_break_holder] -->            padding: 12px 20px;<!-- [et_pb_line_break_holder] -->            z-index: 1000;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .progress-flex {<!-- [et_pb_line_break_holder] -->            max-width: 1000px;<!-- [et_pb_line_break_holder] -->            margin: 0 auto;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: space-between;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 10px;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* --- ESTILOS BLOQUE DE PERFIL ARRIBA --- *\/<!-- [et_pb_line_break_holder] -->        .user-profile-block {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 10px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .profile-avatar {<!-- [et_pb_line_break_holder] -->            width: 36px;<!-- [et_pb_line_break_holder] -->            height: 36px;<!-- [et_pb_line_break_holder] -->            border-radius: 50%;<!-- [et_pb_line_break_holder] -->            object-fit: cover;<!-- [et_pb_line_break_holder] -->            border: 2px solid var(--primary);<!-- [et_pb_line_break_holder] -->            box-shadow: 0 2px 4px rgba(0,0,0,0.1);<!-- [et_pb_line_break_holder] -->            flex-shrink: 0;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .progress-title {<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: var(--primary-dark);<!-- [et_pb_line_break_holder] -->            font-size: 16px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stats-group {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 10px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .score-badge {<!-- [et_pb_line_break_holder] -->            background-color: var(--primary-light);<!-- [et_pb_line_break_holder] -->            color: var(--primary-dark);<!-- [et_pb_line_break_holder] -->            padding: 6px 18px;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            font-weight: 800;<!-- [et_pb_line_break_holder] -->            font-size: 15px;<!-- [et_pb_line_break_holder] -->            box-shadow: inset 0 2px 4px rgba(0,0,0,0.05);<!-- [et_pb_line_break_holder] -->            white-space: nowrap;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .streak-badge {<!-- [et_pb_line_break_holder] -->            background-color: #fff7ed;<!-- [et_pb_line_break_holder] -->            color: #c2410c;<!-- [et_pb_line_break_holder] -->            border: 1px solid #fed7aa;<!-- [et_pb_line_break_holder] -->            padding: 6px 14px;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            font-weight: 800;<!-- [et_pb_line_break_holder] -->            font-size: 15px;<!-- [et_pb_line_break_holder] -->            display: none;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 4px;<!-- [et_pb_line_break_holder] -->            animation: pulse 1.5s infinite;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .rank-badge {<!-- [et_pb_line_break_holder] -->            background-color: #f1f5f9;<!-- [et_pb_line_break_holder] -->            color: #475569;<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border);<!-- [et_pb_line_break_holder] -->            padding: 6px 14px;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            font-size: 14px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .progress-wrapper {<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            max-width: 1000px;<!-- [et_pb_line_break_holder] -->            margin: 8px auto 0 auto;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .ui-progress-bar {<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            height: 8px;<!-- [et_pb_line_break_holder] -->            background-color: var(--border);<!-- [et_pb_line_break_holder] -->            border-radius: 4px;<!-- [et_pb_line_break_holder] -->            overflow: hidden;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .ui-progress-fill {<!-- [et_pb_line_break_holder] -->            height: 100%;<!-- [et_pb_line_break_holder] -->            width: 0%;<!-- [et_pb_line_break_holder] -->            background: linear-gradient(90deg, #3b82f6, #10b981);<!-- [et_pb_line_break_holder] -->            transition: width 0.4s ease;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container {<!-- [et_pb_line_break_holder] -->            max-width: 1000px;<!-- [et_pb_line_break_holder] -->            margin: 30px auto;<!-- [et_pb_line_break_holder] -->            padding: 0 20px 100px 20px;<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        header {<!-- [et_pb_line_break_holder] -->            background: linear-gradient(135deg, #0f172a, #1e3a8a);<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            padding: 40px;<!-- [et_pb_line_break_holder] -->            border-radius: 16px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 40px;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 10px 20px -3px rgba(30, 58, 138, 0.3);<!-- [et_pb_line_break_holder] -->            border: 1px solid #1e40af;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        header h1 { margin: 0; font-size: 28px; font-weight: 800; }<!-- [et_pb_line_break_holder] -->        header p { margin: 10px 0 0 0; opacity: 0.9; font-size: 16px; font-weight: 500; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .section-header {<!-- [et_pb_line_break_holder] -->            background-color: var(--primary-light);<!-- [et_pb_line_break_holder] -->            border-left: 6px solid var(--primary-dark);<!-- [et_pb_line_break_holder] -->            color: var(--primary-dark);<!-- [et_pb_line_break_holder] -->            padding: 15px 20px;<!-- [et_pb_line_break_holder] -->            font-size: 19px;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            margin: 45px 0 20px 0;<!-- [et_pb_line_break_holder] -->            border-radius: 0 10px 10px 0;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .card {<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border);<!-- [et_pb_line_break_holder] -->            border-radius: 12px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->            padding: 25px;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 4px 6px -1px rgba(0,0,0,0.01);<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->            transition: all 0.3s ease;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .card.answered-correctly {<!-- [et_pb_line_break_holder] -->            border-color: var(--correct);<!-- [et_pb_line_break_holder] -->            background-color: var(--correct-bg);<!-- [et_pb_line_break_holder] -->            transform: translateY(-2px);<!-- [et_pb_line_break_holder] -->            box-shadow: 0 8px 16px -4px rgba(16, 185, 129, 0.2);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .question-text {<!-- [et_pb_line_break_holder] -->            font-size: 16px;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            margin-bottom: 18px;<!-- [et_pb_line_break_holder] -->            color: #0f172a;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* --- ESTILOS SOPA DE LETRAS OPTIMIZADA --- *\/<!-- [et_pb_line_break_holder] -->        .wordsearch-container {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            flex-direction: column;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 20px;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .wordsearch-grid {<!-- [et_pb_line_break_holder] -->            display: grid;<!-- [et_pb_line_break_holder] -->            grid-template-columns: repeat(9, minmax(0, 1fr));<!-- [et_pb_line_break_holder] -->            gap: 6px;<!-- [et_pb_line_break_holder] -->            max-width: 360px;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            background: #f1f5f9;<!-- [et_pb_line_break_holder] -->            padding: 10px;<!-- [et_pb_line_break_holder] -->            border-radius: 12px;<!-- [et_pb_line_break_holder] -->            border: 2px solid var(--border);<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->            margin: 0 auto;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .grid-cell {<!-- [et_pb_line_break_holder] -->            aspect-ratio: 1;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            font-weight: 800;<!-- [et_pb_line_break_holder] -->            font-size: 16px;<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            border-radius: 6px;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            user-select: none;<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border);<!-- [et_pb_line_break_holder] -->            transition: all 0.2s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .grid-cell:hover {<!-- [et_pb_line_break_holder] -->            background: var(--primary-light);<!-- [et_pb_line_break_holder] -->            border-color: var(--primary);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .grid-cell.selected {<!-- [et_pb_line_break_holder] -->            background: var(--warning-bg);<!-- [et_pb_line_break_holder] -->            border-color: var(--warning);<!-- [et_pb_line_break_holder] -->            color: var(--warning-text);<!-- [et_pb_line_break_holder] -->            animation: pulse 1s infinite;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .grid-cell.found {<!-- [et_pb_line_break_holder] -->            background: var(--correct-bg);<!-- [et_pb_line_break_holder] -->            border-color: var(--correct);<!-- [et_pb_line_break_holder] -->            color: var(--correct-text);<!-- [et_pb_line_break_holder] -->            cursor: default;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .word-list {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            flex-direction: column;<!-- [et_pb_line_break_holder] -->            gap: 12px;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            max-width: 650px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .word-item {<!-- [et_pb_line_break_holder] -->            background: #f1f5f9;<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border);<!-- [et_pb_line_break_holder] -->            padding: 14px 18px;<!-- [et_pb_line_break_holder] -->            border-radius: 10px;<!-- [et_pb_line_break_holder] -->            font-size: 14px;<!-- [et_pb_line_break_holder] -->            color: var(--text-secondary);<!-- [et_pb_line_break_holder] -->            transition: all 0.3s ease;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: space-between;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .word-item-text {<!-- [et_pb_line_break_holder] -->            flex: 1;<!-- [et_pb_line_break_holder] -->            line-height: 1.5;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .word-item.found {<!-- [et_pb_line_break_holder] -->            background: var(--correct-bg);<!-- [et_pb_line_break_holder] -->            border-color: var(--correct);<!-- [et_pb_line_break_holder] -->            color: var(--correct-text);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .blank-field {<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            font-family: monospace;<!-- [et_pb_line_break_holder] -->            border-bottom: 2px dashed #94a3b8;<!-- [et_pb_line_break_holder] -->            padding: 0 5px;<!-- [et_pb_line_break_holder] -->            font-weight: bold;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* --- STYLES FOR DRAG & DROP --- *\/<!-- [et_pb_line_break_holder] -->        .drag-container { display: flex; flex-direction: column; gap: 20px; }<!-- [et_pb_line_break_holder] -->        .words-bank {<!-- [et_pb_line_break_holder] -->            display: flex; flex-wrap: wrap; gap: 10px; padding: 18px;<!-- [et_pb_line_break_holder] -->            background: #f1f5f9; border-radius: 10px; min-height: 60px;<!-- [et_pb_line_break_holder] -->            border: 2px dashed var(--primary); align-items: center; justify-content: center;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .draggable-word {<!-- [et_pb_line_break_holder] -->            background: var(--primary-dark); color: white; padding: 8px 16px;<!-- [et_pb_line_break_holder] -->            border-radius: 20px; font-weight: bold; cursor: pointer;<!-- [et_pb_line_break_holder] -->            user-select: none; transition: all 0.2s; box-shadow: 0 2px 4px rgba(0,0,0,0.1);<!-- [et_pb_line_break_holder] -->            font-size: 14px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .draggable-word:hover { background-color: var(--primary); }<!-- [et_pb_line_break_holder] -->        .slots-container { display: flex; flex-direction: column; gap: 12px; }<!-- [et_pb_line_break_holder] -->        .slot-row {<!-- [et_pb_line_break_holder] -->            display: flex; align-items: center; background: var(--slot-bg);<!-- [et_pb_line_break_holder] -->            padding: 12px; border-radius: 8px; border: 1px solid var(--border); gap: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .slot-desc { flex: 1; font-size: 14px; font-weight: 500; color: var(--text-secondary); }<!-- [et_pb_line_break_holder] -->        .drop-zone {<!-- [et_pb_line_break_holder] -->            width: 175px; height: 44px; border: 2px dashed #94a3b8; border-radius: 22px;<!-- [et_pb_line_break_holder] -->            display: flex; align-items: center; justify-content: center; background: white;<!-- [et_pb_line_break_holder] -->            transition: all 0.2s; cursor: pointer; flex-shrink: 0;<!-- [et_pb_line_break_holder] -->            font-size: 13px; font-weight: bold; text-align: center;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .drop-zone.filled { border: 2px solid var(--primary-dark); background: transparent; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* --- OVERLAY DE COMPLETADO \/ TERMINAL HACKING --- *\/<!-- [et_pb_line_break_holder] -->        .completion-overlay {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            top: 0; left: 0; width: 100%; height: 100%;<!-- [et_pb_line_break_holder] -->            background: rgba(15, 23, 42, 0.96);<!-- [et_pb_line_break_holder] -->            z-index: 9999;<!-- [et_pb_line_break_holder] -->            display: none;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            padding: 20px;<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->            backdrop-filter: blur(10px);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .completion-modal {<!-- [et_pb_line_break_holder] -->            background: #020617;<!-- [et_pb_line_break_holder] -->            border: 2px solid #10b981;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 30px rgba(16, 185, 129, 0.4);<!-- [et_pb_line_break_holder] -->            border-radius: 16px;<!-- [et_pb_line_break_holder] -->            max-width: 700px;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            padding: 25px;<!-- [et_pb_line_break_holder] -->            color: #10b981;<!-- [et_pb_line_break_holder] -->            font-family: 'Courier New', Courier, monospace;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            max-height: 95vh;<!-- [et_pb_line_break_holder] -->            overflow-y: auto;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .terminal-text {<!-- [et_pb_line_break_holder] -->            text-align: left;<!-- [et_pb_line_break_holder] -->            background: #090d16;<!-- [et_pb_line_break_holder] -->            border: 1px solid #1e293b;<!-- [et_pb_line_break_holder] -->            padding: 12px;<!-- [et_pb_line_break_holder] -->            border-radius: 8px;<!-- [et_pb_line_break_holder] -->            margin: 15px 0;<!-- [et_pb_line_break_holder] -->            font-size: 13px;<!-- [et_pb_line_break_holder] -->            line-height: 1.5;<!-- [et_pb_line_break_holder] -->            max-height: 120px;<!-- [et_pb_line_break_holder] -->            overflow-y: auto;<!-- [et_pb_line_break_holder] -->            color: #34d399;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* --- TABLA DE L\u00cdDERES GLOBAL EN TIEMPO REAL --- *\/<!-- [et_pb_line_break_holder] -->        .table-wrapper {<!-- [et_pb_line_break_holder] -->            overflow-x: auto;<!-- [et_pb_line_break_holder] -->            margin-top: 15px;<!-- [et_pb_line_break_holder] -->            border: 1px solid #1e293b;<!-- [et_pb_line_break_holder] -->            border-radius: 8px;<!-- [et_pb_line_break_holder] -->            background: #090d16;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .history-table {<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            border-collapse: collapse;<!-- [et_pb_line_break_holder] -->            font-family: sans-serif;<!-- [et_pb_line_break_holder] -->            font-size: 13px;<!-- [et_pb_line_break_holder] -->            color: #cbd5e1;<!-- [et_pb_line_break_holder] -->            text-align: left;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .history-table th {<!-- [et_pb_line_break_holder] -->            background: #1e293b;<!-- [et_pb_line_break_holder] -->            color: #34d399;<!-- [et_pb_line_break_holder] -->            padding: 10px;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        .history-table td {<!-- [et_pb_line_break_holder] -->            padding: 10px;<!-- [et_pb_line_break_holder] -->            border-bottom: 1px solid #1e293b;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .blink { animation: blinker 1s linear infinite; }<!-- [et_pb_line_break_holder] -->        @keyframes blinker { 50% { opacity: 0; } }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 640px) {<!-- [et_pb_line_break_holder] -->            .progress-bar-container { padding: 10px 12px; }<!-- [et_pb_line_break_holder] -->            .progress-title { font-size: 12.5px; max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }<!-- [et_pb_line_break_holder] -->            .profile-avatar { width: 28px; height: 28px; }<!-- [et_pb_line_break_holder] -->            .container { padding: 0 12px 80px 12px; margin: 15px auto; }<!-- [et_pb_line_break_holder] -->            header { padding: 25px 15px; border-radius: 12px; }<!-- [et_pb_line_break_holder] -->            header h1 { font-size: 20px; }<!-- [et_pb_line_break_holder] -->            .wordsearch-grid { grid-template-columns: repeat(9, minmax(0, 1fr)); gap: 4px; padding: 6px; max-width: 295px; margin: 0 auto !important; }<!-- [et_pb_line_break_holder] -->            .grid-cell { font-size: 12px; }<!-- [et_pb_line_break_holder] -->            .word-item { flex-direction: column; align-items: stretch; gap: 10px; }<!-- [et_pb_line_break_holder] -->            .slot-row { flex-direction: column; align-items: stretch; gap: 10px; }<!-- [et_pb_line_break_holder] -->            .drop-zone { width: 100%; height: 46px; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style>\n<p><!-- [et_pb_line_break_holder] --><\/head><!-- [et_pb_line_break_holder] --><body data-rsssl=1 class=\"wp-sim-body\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div id=\"login-overlay\" class=\"login-overlay\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"login-card\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h2 style=\"color: #34d399; margin-top:0;\">\ud83d\udd10 IDENTIFICATION<\/h2>\n<p><!-- [et_pb_line_break_holder] -->        <pee style=\"font-size: 14px; color: #94a3b8;\">Introduce tu nombre para sincronizar tu puntaje en el Servidor Global.<\/pee><!-- [et_pb_line_break_holder] -->        <input type=\"text\" id=\"username-input\" class=\"login-input\" placeholder=\"Tu Nombre o Alias...\" autocomplete=\"off\"><!-- [et_pb_line_break_holder] -->        <button class=\"btn-check\" style=\"background: var(--primary); width:100%; padding:12px;\" onclick=\"submitLogin()\">Iniciar Auditor\u00eda Global<\/button><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"progress-bar-container\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"progress-flex\"><!-- [et_pb_line_break_holder] -->        <!-- Bloque de Perfil con foto din\u00e1mica arriba \ud83d\udcf7 --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"user-profile-block\"><!-- [et_pb_line_break_holder] -->            <img decoding=\"async\" src=\"https:\/\/blamiss.com\/wp-content\/uploads\/2026\/04\/listo.jpg\" alt=\"Avatar\" class=\"profile-avatar\"><!-- [et_pb_line_break_holder] -->            <span class=\"progress-title\" id=\"bootcamp-user-title\">Hacking Bootcamp<\/span><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"stats-group\"><!-- [et_pb_line_break_holder] -->            <span class=\"streak-badge\" id=\"streak-display\">\ud83d\udd25 Racha: 0<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"rank-badge\" id=\"rank-display\">Script Kiddie \ud83d\udc23<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"score-badge\" id=\"score-display\">Puntos: 0 \/ 24<\/span><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"progress-wrapper\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"ui-progress-bar\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"ui-progress-fill\" id=\"progress-fill\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"container\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<header><!-- [et_pb_line_break_holder] -->        <\/p>\n<h1>Alumnos Maestr\u00eda Ciberseguridad<\/h1>\n<p><!-- [et_pb_line_break_holder] -->        <pee>Security Hub &#8211; Sistemas, Aplicaciones y Datos Masivos<\/pee><!-- [et_pb_line_break_holder] -->    <\/header>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div id=\"drag-drop-zone\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div id=\"sopa-zone\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div id=\"drag-drop-zone-2\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div id=\"dropdown-zone\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div id=\"multiple-choice-zone\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div id=\"completion-overlay\" class=\"completion-overlay\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"completion-modal\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h2 style=\"color: #10b981; font-weight: 800; margin-top: 0;\">\ud83d\udd13 \u00a1SISTEMA HACKEADO CON \u00c9XITO!<\/h2>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<h3 style=\"color: #60a5fa;\" id=\"welcome-success-text\">Has completado el simulador<\/h3>\n<p><!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"terminal-text\" id=\"terminal-output\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style=\"background: #0f172a; padding: 15px; border: 1px solid #1e40af; margin-bottom: 15px; text-align: left;\"><!-- [et_pb_line_break_holder] -->            <pee style=\"margin: 0; font-weight: bold; color: #60a5fa;\">\ud83d\udccb REPORT STATUS:<\/pee><!-- [et_pb_line_break_holder] -->            <pee style=\"margin: 5px 0; color: #cbd5e1;\">Total de Errores: <strong id=\"modal-errors-count\" style=\"color: #f87171;\">0<\/strong><\/pee><!-- [et_pb_line_break_holder] -->            <pee id=\"modal-advice\" style=\"margin: 10px 0 0 0; color: #e2e8f0; font-size: 13.5px;\"><\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        <\/p>\n<div style=\"text-align:left; margin-bottom: 15px;\"><!-- [et_pb_line_break_holder] -->            <span style=\"color: #34d399; font-weight: bold; font-size:14px;\">\ud83d\udcca LEADERBOARD GLOBAL (Servidor en la Nube):<\/span><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"table-wrapper\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<table class=\"history-table\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<thead><!-- [et_pb_line_break_holder] -->                        <\/p>\n<tr><!-- [et_pb_line_break_holder] -->                            <\/p>\n<th>Hacker<\/th>\n<p><!-- [et_pb_line_break_holder] -->                            <\/p>\n<th>Puntos<\/th>\n<p><!-- [et_pb_line_break_holder] -->                            <\/p>\n<th>Errores<\/th>\n<p><!-- [et_pb_line_break_holder] -->                            <\/p>\n<th>Rango<\/th>\n<p><!-- [et_pb_line_break_holder] -->                        <\/tr>\n<p><!-- [et_pb_line_break_holder] -->                    <\/thead>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<tbody id=\"history-table-body\"><!-- [et_pb_line_break_holder] -->                        <\/p>\n<tr>\n<td colspan=\"4\" style=\"text-align:center;\">Cargando base de datos central&#8230;<\/td>\n<\/tr>\n<p><!-- [et_pb_line_break_holder] -->                    <\/tbody>\n<p><!-- [et_pb_line_break_holder] -->                <\/table>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <pee class=\"blink\" style=\"color: #f59e0b; font-weight: bold; font-size: 12px;\">\ud83d\udea8 AVISO: Se requiere refrescar el entorno para una nueva sesi\u00f3n.<\/pee><!-- [et_pb_line_break_holder] -->        <button class=\"btn-check\" style=\"background: #10b981; width: 100%; padding: 12px 20px;\" onclick=\"window.location.reload();\">\ud83d\udd04 Actualizar P\u00e1gina Web<\/button><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->    const GOOGLE_SCRIPT_URL = \"https:\/\/script.google.com\/macros\/s\/AKfycbzkddiGJwKqG9oG_uka3meE5AluSpOZEmqJlgAomLNeQ5F_O3N1vj1EKx468x6xPPQW\/exec\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const masterQuestionPool = [<!-- [et_pb_line_break_holder] -->        \/\/ ELEMENTOS DE ARRASTRE (DRAG)<!-- [et_pb_line_break_holder] -->        { id: 1, type: \"drag\", mod: \"1- Windows Server\", token: \"CREDENTIAL\", text: \"Caracter\u00edstica que utiliza Virtual Secure Mode (VSM) para proteger identidades de ataques Pass-the-Hash.\" },<!-- [et_pb_line_break_holder] -->        { id: 2, type: \"drag\", mod: \"1- Windows Server\", token: \"CLARA\", text: \"Herramienta del CCN-CERT para auditar el endurecimiento en Windows frente al ENS.\" },<!-- [et_pb_line_break_holder] -->        { id: 11, type: \"drag\", mod: \"2- Seguridad Web\", token: \"TRACE\", text: \"M\u00e9todo HTTP peligroso que permite evadir cookies HTTPOnly mediante Cross-Site Tracing (XST).\" },<!-- [et_pb_line_break_holder] -->        { id: 12, type: \"drag\", mod: \"2- Seguridad Web\", token: \"WAF\", text: \"Dispositivo que filtra y bloquea tr\u00e1fico web malicioso a nivel de capa de aplicaci\u00f3n (Capa 7).\" },<!-- [et_pb_line_break_holder] -->        { id: 21, type: \"drag\", mod: \"3- OWASP 2021\", token: \"PATH_TRAVERSAL\", text: \"Defecto donde se introducen secuencias de escape de directorios (..\/) para acceder a archivos locales del host.\" },<!-- [et_pb_line_break_holder] -->        { id: 31, type: \"drag\", mod: \"4- Autenticaci\u00f3n\", token: \"OAUTH\", text: \"Est\u00e1ndar industrial ampliamente utilizado con el fin de delegar flujos de autorizaci\u00f3n estructurados entre aplicaciones.\" },<!-- [et_pb_line_break_holder] -->        { id: 41, type: \"drag\", mod: \"5- Gesti\u00f3n Sesi\u00f3n\", token: \"SESSION_ID\", text: \"Elemento cr\u00edtico emitido tras un login correcto para poder asociar y relacionar las peticiones posteriores de un usuario.\" },<!-- [et_pb_line_break_holder] -->        { id: 51, type: \"drag\", mod: \"6- Desarrollo Seguro\", token: \"HADOOP\", text: \"Ecosistema\/Framework distribuido de c\u00f3digo abierto emblem\u00e1tico en el almacenamiento y an\u00e1lisis de Big Data masivo.\" },<!-- [et_pb_line_break_holder] -->        { id: 61, type: \"drag\", mod: \"7- Metodolog\u00edas Auditor\u00eda\", token: \"TLS\", text: \"Protocolo criptogr\u00e1fico est\u00e1ndar mandatorio para salvaguardar la confidencialidad de la informaci\u00f3n en tr\u00e1nsito.\" },<!-- [et_pb_line_break_holder] -->        { id: 71, type: \"drag\", mod: \"8- Producci\u00f3n\", token: \"ARM\", text: \"Componente de Azure encargado de recibir, autenticar y aprobar las solicitudes operativas de APIs o SDKs.\" },<!-- [et_pb_line_break_holder] -->        { id: 81, type: \"drag\", mod: \"9- Nube Azure\", token: \"RBAC\", text: \"Control de acceso basado en roles utilizado in Azure para aplicar restricciones y gobernanza granular sobre recursos.\" },<!-- [et_pb_line_break_holder] -->        { id: 91, type: \"drag\", mod: \"10- Big Data\", token: \"KNOX\", text: \"REST API Gateway perimetral que centraliza la autenticaci\u00f3n y los accesos sobre entornos Hadoop.\" },<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ DESPLEGABLES (DROPDOWN)<!-- [et_pb_line_break_holder] -->        { id: 3, type: \"dropdown\", mod: \"1- Windows Server\", text: \"Dentro del despliegue de Unidades Organizativas (OU) en Active Directory, las pol\u00edticas de complejidad de contrase\u00f1as se deben configurar a\", correct: \"dominio\", options: { dominio: \"Nivel de Dominio\", rol: \"Nivel de Rol\", app: \"Nivel de Aplicaci\u00f3n\" } },<!-- [et_pb_line_break_holder] -->        { id: 13, type: \"dropdown\", mod: \"2- Seguridad Web\", text: \"Las siglas RIA en el contexto de las arquitecturas modernas de aplicaciones enriquecidas de Internet se vinculan directamente a tecnolog\u00edas como\", correct: \"ajax\", options: { ajax: \"AJAX\", soap: \"SOAP\", flash: \"Flash legados\" } },<!-- [et_pb_line_break_holder] -->        { id: 22, type: \"dropdown\", mod: \"3- OWASP 2021\", text: \"Los fallos arquitect\u00f3nicos que corresponden a errores nativos de dise\u00f1o y no se solucionan con parches simples pertenecen a\", correct: \"design\", options: { design: \"A04:2021-Insecure Design\", configuration: \"A05:2021-Security Misconfiguration\" } },<!-- [et_pb_line_break_holder] -->        { id: 32, type: \"dropdown\", mod: \"4- Autenticaci\u00f3n\", text: \"Para neutralizar ataques automatizados de diccionario dirigidos a adivinar credenciales en el login, es una pr\u00e1ctica recomendada implementar\", correct: \"captcha\", options: { captcha: \"Retos CAPTCHA\", tls: \"Cifrado TLS\", hsts: \"Pol\u00edticas HSTS\" } },<!-- [et_pb_line_break_holder] -->        { id: 42, type: \"dropdown\", mod: \"5- Gesti\u00f3n Sesi\u00f3n\", text: \"Para contrarrestar el secuestro de sesiones l\u00f3gicas por parte de scripts maliciosos, se debe configurar estrictamente el flag\", correct: \"httponly\", options: { httponly: \"HTTPOnly\", secure: \"Secure\", samesite: \"SameSite\" } },<!-- [et_pb_line_break_holder] -->        { id: 52, type: \"dropdown\", mod: \"6- Desarrollo Seguro\", text: \"El patr\u00f3n arquitect\u00f3nico utilizado com\u00fanmente para estructurar de forma l\u00f3gica y modular el c\u00f3digo dividi\u00e9ndolo en tres capas se conoce como\", correct: \"mvc\", options: { mvc: \"MVC (Modelo-Vista-Controlador)\", micro: \"Microservicios\", soap: \"SOA\" } },<!-- [et_pb_line_break_holder] -->        { id: 62, type: \"dropdown\", mod: \"7- Metodolog\u00edas Auditor\u00eda\", text: \"Las herramientas semiautom\u00e1ticas de an\u00e1lisis est\u00e1tico (SAST) revisan el c\u00f3digo fuente simulando pruebas anal\u00edticas de\", correct: \"blanca\", options: { blanca: \"Caja Blanca\", negra: \"Caja Negra\" } },<!-- [et_pb_line_break_holder] -->        { id: 72, type: \"dropdown\", mod: \"8- Producci\u00f3n\", text: \"Para la captura centralizada de alertas y logs de seguridad en la monitorizaci\u00f3n continua de producci\u00f3n se usan\", correct: \"siem\", options: { siem: \"Sistemas SIEM\", sast: \"Analizadores est\u00e1ticos\" } },<!-- [et_pb_line_break_holder] -->        { id: 82, type: \"dropdown\", mod: \"9- Nube Azure\", text: \"Para administrar la gobernanza en varias suscripciones de Azure, se debe utilizar el concepto de\", correct: \"admin\", options: { admin: \"Grupos de administraci\u00f3n\", recursos: \"Grupos de recursos\" } },<!-- [et_pb_line_break_holder] -->        { id: 92, type: \"dropdown\", mod: \"10- Big Data\", text: \"Para registrar y revisar eventos detallados de accesos minuciosos directamente sobre los campos de datos, se implementan\", correct: \"granulares\", options: { granulares: \"Auditor\u00edas granulares\", perimetrales: \"Reglas perimetrales\" } },<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ OPCI\u00d3N M\u00daLTIPLE (MC) -> BANCO EXTENDIDO RESTAURADO REQUERIDO \ud83c\udf89<!-- [et_pb_line_break_holder] -->        { id: 4, type: \"mc\", mod: \"1- Windows Server\", q: \"La herramienta Policy Analyzer, incluida dentro del Microsoft Security Compliance Toolkit (SCT), se utiliza principalmente para analizar y comparar conjuntos de directivas de grupo (GPO) con el fin de identificar conflictos o redundancias.\", opts: { A: \"Verdadero.\", B: \"Falso.\" }, ans: \"A\", exp: \"Policy Analyzer permite comparar colecciones de GPOs para identificar discrepancies o redundancias de manera clara.\" },<!-- [et_pb_line_break_holder] -->        { id: 5, type: \"mc\", mod: \"1- Windows Server\", q: \"En la implementaci\u00f3n de la arquitectura de seguridad en Windows Server 2022, el protocolo TLS 1.3 y Secure DNS vienen deshabilitados por defecto por razones de compatibilidad con sistemas legados.\", opts: { A: \"Verdadero.\", B: \"Falso.\" }, ans: \"B\", exp: \"Falso. Windows Server 2022 trae activados nativamente por defecto tanto TLS 1.3 como DoH para robustecer el entorno corporativo.\" },<!-- [et_pb_line_break_holder] -->        { id: 6, type: \"mc\", mod: \"1- Windows Server\", q: \"Las directivas de seguridad Kerberos forman parte de los recursos fundamentales listados para profundizar en el aseguramiento del entorno Windows.\", opts: { A: \"Verdadero.\", B: \"Falso.\" }, ans: \"A\", exp: \"Verdadero. Mitigar ataques como Golden Ticket exige el endurecimiento estricto del protocolo Kerberos en Active Directory.\" },<!-- [et_pb_line_break_holder] -->        { id: 7, type: \"mc\", mod: \"1- Windows Server\", q: \"\u00bfQu\u00e9 caracter\u00edstica de seguridad utiliza el Virtual Secure Mode (VSM) para proteger los secretos del sistema frente a ataques de volcado de memoria?\", opts: { A: \"Windows Defender ATP\", B: \"Credential Guard\", C: \"Just Enough Administration (JEA)\" }, ans: \"B\", exp: \"Credential Guard a\u00edsla los secretos de identidad (procesos LSASS) dentro de un contenedor VSM protegido por hipervisor.\" },<!-- [et_pb_line_break_holder] -->        { id: 8, type: \"mc\", mod: \"1- Windows Server\", q: \"\u00bfQu\u00e9 soluci\u00f3n del ecosistema de Microsoft permite limitar los privilegios de administraci\u00f3n en PowerShell mediante endpoints restringidos?\", opts: { A: \"AppLocker\", B: \"Just Enough Administration (JEA)\", C: \"SCT Toolkit\" }, ans: \"B\", exp: \"JEA es una tecnolog\u00eda basada en RBAC para PowerShell que restringe los comandos ejecutables por un usuario espec\u00edfico.\" },<!-- [et_pb_line_break_holder] -->        { id: 9, type: \"mc\", mod: \"1- Windows Server\", q: \"El conjunto de herramientas que facilita el manejo de las plantillas de seguridad tanto para Windows Server como para Windows 10 se denomina Microsoft Security Compliance Toolkit.\", opts: { A: \"Verdadero.\", B: \"Falso.\" }, ans: \"A\", exp: \"Verdadero. El SCT unifica las herramientas necesarias para analizar, comparar y desplegar plantillas de endurecimiento recomendadas por Microsoft.\" },<!-- [et_pb_line_break_holder] -->        { id: 10, type: \"mc\", mod: \"1- Windows Server\", q: \"\u00bfCu\u00e1l de las siguientes es una de las versiones de Windows Server analizadas en el documento para revisar sus novedades de seguridad?\", opts: { A: \"Windows Server 2003\", B: \"Windows Server 2008\", C: \"Windows Server 2016\" }, ans: \"C\", exp: \"Windows Server 2016 introdujo protecciones fundamentales basadas en virtualizaci\u00f3n (VSM) y el aislamiento de Credential Guard.\" },<!-- [et_pb_line_break_holder] -->        { id: 14, type: \"mc\", mod: \"2- Seguridad Web\", q: \"\u00bfCu\u00e1l es uno de los objetivos principales al estudiar la seguridad en las aplicaciones online y web?\", opts: { A: \"Aprender a realizar particiones de disco f\u00edsico.\", B: \"Conocer las medidas necesarias para mitigar ataques una vez desplegadas online.\", C: \"Dise\u00f1ar hardware criptogr\u00e1fico basado en TPM 2.0.\" }, ans: \"B\", exp: \"El foco principal radica en robustecer el software para resistir ataques externos al exponer los servicios en Internet.\" },<!-- [et_pb_line_break_holder] -->        { id: 15, type: \"mc\", mod: \"2- Seguridad Web\", q: \"El uso del m\u00e9todo GET en los formularios web garantiza la confidencialidad de los datos sensibles de los usuarios, ya que estos viajan cifrados dentro del cuerpo de la petici\u00f3n HTTP.\", opts: { A: \"Verdadero.\", B: \"Falso.\" }, ans: \"B\", exp: \"Falso. El m\u00e9todo GET expone los par\u00e1metros directamente en la barra de direcciones de la URL (Query String), comprometiendo la confidencialidad.\" },<!-- [et_pb_line_break_holder] -->        { id: 16, type: \"mc\", mod: \"2- Seguridad Web\", q: \"\u00bfQu\u00e9 m\u00e9todo del protocolo HTTP presenta un riesgo severo de seguridad debido a que permite a un atacante saltarse las protecciones de las cookies configuradas como HTTPOnly?\", opts: { A: \"GET\", B: \"TRACE\", C: \"POST\" }, ans: \"B\", exp: \"El m\u00e9todo TRACE activa Cross-Site Tracing (XST), reflejando las cabeceras HTTP de la petici\u00f3n (incluyendo cookies) directo en el cuerpo de la respuesta.\" },<!-- [et_pb_line_break_holder] -->        { id: 17, type: \"mc\", mod: \"2- Seguridad Web\", q: \"La monitorizaci\u00f3n continua constituye uno de los pilares fundamentales para garantizar la seguridad de las aplicaciones desplegadas online.\", opts: { A: \"Verdadero.\", B: \"Falso.\" }, ans: \"A\", exp: \"La visibilidad en tiempo de producci\u00f3n permite reaccionar velozmente e identificar incidentes activos antes de que causen da\u00f1os graves.\" },<!-- [et_pb_line_break_holder] -->        { id: 18, type: \"mc\", mod: \"2- Seguridad Web\", q: \"Un Firewall de Inspecci\u00f3n de Estado (Stateful) se diferencia del filtro de paquetes cl\u00e1sico porque:\", opts: { A: \"Mantiene un registro de las conexiones activas y eval\u00faa el contexto de los paquetes de red.\", B: \"Solo examina de manera aislada direcciones IP de origen.\", C: \"Se ejecuta \u00fanicamente en la capa f\u00edsica para evitar congestiones de hardware.\" }, ans: \"A\", exp: \"El firewall de estado guarda memoria (state table) del canal establecido para autorizar los flujos posteriores de la misma conexi\u00f3n.\" },<!-- [et_pb_line_break_holder] -->        { id: 19, type: \"mc\", mod: \"2- Seguridad Web\", q: \"Un sistema IDS tiene la facultad de bloquear de manera activa las conexiones sospechosas por s\u00ed mismo en tiempo real.\", opts: { A: \"Verdadero.\", B: \"Falso.\" }, ans: \"B\", exp: \"Es falso. El IDS solo detecta e informa. La capacidad de bloqueo activo en tiempo real recae en un sistema IPS.\" },<!-- [et_pb_line_break_holder] -->        { id: 20, type: \"mc\", mod: \"2- Seguridad Web\", q: \"Las reglas en un cortafuegos se procesan secuencialmente de abajo hacia arriba.\", opts: { A: \"Verdadero.\", B: \"Falso.\" }, ans: \"B\", exp: \"Falso. Se analizan de arriba hacia abajo (Top-Down). Al coincidir con la primera regla compatible (First-Match), el cortafuegos deja de buscar.\" }<!-- [et_pb_line_break_holder] -->    ];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const sopaPool = [<!-- [et_pb_line_break_holder] -->        { word: \"OAUTH\", hint: \"Est\u00e1ndar industrial utilizado con el fin de delegar flujos de autorizaci\u00f3n federada entre servicios de terceros: ______.\" },<!-- [et_pb_line_break_holder] -->        { word: \"RBAC\", hint: \"Modelo de control de acceso utilizado en Azure para aplicar restricciones y gobernanza granular sobre recursos: ______.\" },<!-- [et_pb_line_break_holder] -->        { word: \"WAF\", hint: \"Dispositivo de seguridad perimetral que filtra, monitoriza y bloquea el tr\u00e1fico web malicioso a nivel de capa de aplicaci\u00f3n (Capa 7): ______.\" },<!-- [et_pb_line_break_holder] -->        { word: \"TLS\", hint: \"Protocolo criptogr\u00e1fico est\u00e1ndar encargado de garantizar la confidencialidad de la informaci\u00f3n en tr\u00e1nsito: ______.\" },<!-- [et_pb_line_break_holder] -->        { word: \"SIEM\", hint: \"Sistema centralizado para la captura de alertas, logs de auditor\u00eda y monitorizaci\u00f3n de incidentes en producci\u00f3n: ______.\" },<!-- [et_pb_line_break_holder] -->        { word: \"XSS\", hint: \"Vulnerabilidad web basada en la inyecci\u00f3n de scripts maliciosos del lado del cliente en el navegador de los usuarios: ______.\" },<!-- [et_pb_line_break_holder] -->        { word: \"IDOR\", hint: \"Fallo de control de acceso donde la aplicaci\u00f3n expone un identificador de objeto directo en la URL de forma insegura: ______.\" },<!-- [et_pb_line_break_holder] -->        { word: \"XXE\", hint: \"Vulnerabilidad donde un analizador procesa entradas maliciosas que hacen referencia a entidades externas XML: ______.\" }<!-- [et_pb_line_break_holder] -->    ];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let activeUsername = \"Hacker An\u00f3nimo\"; <!-- [et_pb_line_break_holder] -->    let currentlySelectedWord = null;<!-- [et_pb_line_break_holder] -->    let globalScore = 0;<!-- [et_pb_line_break_holder] -->    let answeredQuestionsCount = 0; <!-- [et_pb_line_break_holder] -->    let currentStreak = 0;<!-- [et_pb_line_break_holder] -->    let totalErrors = 0; <!-- [et_pb_line_break_holder] -->    let wsStartCell = null;<!-- [et_pb_line_break_holder] -->    let dynamicGrid = [];<!-- [et_pb_line_break_holder] -->    let activeSopaWords = {};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function submitLogin() {<!-- [et_pb_line_break_holder] -->        const input = document.getElementById(\"username-input\");<!-- [et_pb_line_break_holder] -->        if (input && input.value.trim() !== \"\") { activeUsername = input.value.trim(); }<!-- [et_pb_line_break_holder] -->        document.getElementById(\"login-overlay\").style.display = \"none\";<!-- [et_pb_line_break_holder] -->        document.getElementById(\"bootcamp-user-title\").innerText = activeUsername;<!-- [et_pb_line_break_holder] -->        initializeRandomQuiz();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function updateScoreDisplay() {<!-- [et_pb_line_break_holder] -->        const scoreDisplay = document.getElementById(\"score-display\");<!-- [et_pb_line_break_holder] -->        if (scoreDisplay) scoreDisplay.innerText = `Puntos: ${globalScore} \/ 24`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const progressFill = document.getElementById(\"progress-fill\");<!-- [et_pb_line_break_holder] -->        if (progressFill) {<!-- [et_pb_line_break_holder] -->            const percentage = Math.min((answeredQuestionsCount \/ 24) * 100, 100);<!-- [et_pb_line_break_holder] -->            progressFill.style.width = `${percentage}%`;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const rankDisplay = document.getElementById(\"rank-display\");<!-- [et_pb_line_break_holder] -->        if (rankDisplay) {<!-- [et_pb_line_break_holder] -->            if (globalScore < 6) rankDisplay.innerText = \"Script Kiddie \ud83d\udc23\";<!-- [et_pb_line_break_holder] -->            else if (globalScore < 12) rankDisplay.innerText = \"Pentester Junior \ud83d\udd0d\";<!-- [et_pb_line_break_holder] -->            else if (globalScore < 18) rankDisplay.innerText = \"Security Analyst \ud83d\udee1\ufe0f\";<!-- [et_pb_line_break_holder] -->            else if (globalScore < 23) rankDisplay.innerText = \"Hacker \u00c9tico Elite \ud83d\udcbb\";<!-- [et_pb_line_break_holder] -->            else rankDisplay.innerText = \"CISO Supremo \ud83d\udc51\";<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const streakDisplay = document.getElementById(\"streak-display\");<!-- [et_pb_line_break_holder] -->        if (streakDisplay) {<!-- [et_pb_line_break_holder] -->            if (currentStreak > 1) {<!-- [et_pb_line_break_holder] -->                streakDisplay.innerText = `\ud83d\udd25 Racha: ${currentStreak}`;<!-- [et_pb_line_break_holder] -->                streakDisplay.style.display = \"inline-flex\";<!-- [et_pb_line_break_holder] -->            } else {<!-- [et_pb_line_break_holder] -->                streakDisplay.style.display = \"none\";<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        if (answeredQuestionsCount >= 24) {<!-- [et_pb_line_break_holder] -->            setTimeout(triggerGameCompletion, 1000);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function triggerCelebration() {<!-- [et_pb_line_break_holder] -->        confetti({ particleCount: 100, spread: 70, origin: { y: 0.8 } });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function triggerGameCompletion() {<!-- [et_pb_line_break_holder] -->        for(let i = 0; i < 3; i++) { setTimeout(triggerCelebration, i * 450); }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const overlay = document.getElementById(\"completion-overlay\");<!-- [et_pb_line_break_holder] -->        overlay.style.display = \"flex\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        document.getElementById(\"welcome-success-text\").innerText = `\u00a1Lo lograste, ${activeUsername}! :)`;<!-- [et_pb_line_break_holder] -->        document.getElementById(\"modal-errors-count\").innerText = totalErrors;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const finalRank = document.getElementById(\"rank-display\").innerText;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        let adviceText = \"\";<!-- [et_pb_line_break_holder] -->        if (totalErrors === 0) {<!-- [et_pb_line_break_holder] -->            adviceText = \"\ud83c\udfc6 \u00a1ACCESO PERFECTO, CISO SUPREMO! Tu precisi\u00f3n es quir\u00fargica. Has neutralizado todos los vectores de ataque y resuelto la sopa de letras sin activar una sola alerta en el SIEM. Tu nivel de auditor\u00eda es legendario. \u00a1Sigue liderando la vanguardia de la ciberseguridad corporativa de forma impecable! \ud83d\udee1\ufe0f\";<!-- [et_pb_line_break_holder] -->        } else if (totalErrors === 1) {<!-- [et_pb_line_break_holder] -->            adviceText = \"\u26a1 \u00a1CASI PERFECTO! Solo registramos 1 error menor en tu bit\u00e1cora de hackeo. Un solo desliz de configuraci\u00f3n l\u00f3gica separa tu reporte de la excelencia absoluta. Revisa con calma ese emparejamiento o celda donde tuviste dudas; \u00a1el pr\u00f3ximo escaneo de vulnerabilidades ser\u00e1 completamente limpio! \ud83d\udd0d\";<!-- [et_pb_line_break_holder] -->        } else if (totalErrors === 2) {<!-- [et_pb_line_break_holder] -->            adviceText = \"\ud83d\udd75\ufe0f \u00a1OPERACI\u00d3N DE ALTO NIVEL! Tuviste exactamente 2 fallos t\u00e1cticos durante la auditor\u00eda. Tu firma digital es limpia y tu racha demuestra un gran entendimiento t\u00e9cnico de los entornos. Ajusta la precisi\u00f3n en los flags de mitigaci\u00f3n de la red y estar\u00e1s listo para unirte al Red Team elite. \ud83d\udcbb\";<!-- [et_pb_line_break_holder] -->        } else if (totalErrors === 3) {<!-- [et_pb_line_break_holder] -->            adviceText = \"\ud83d\udee1\ufe0f \u00a1COMPROMISO EXITOSO! Acumulaste 3 alertas de desconfiguraci\u00f3n. El WAF detect\u00f3 un poco de ruido menor en tu tr\u00e1fico web, pero lograste el bypass final con \u00e9xito. Refuerza tus conocimientos sobre el control de acceso de tokens OAuth 2.0 y el manejo seguro del Active Directory corporativo. \u2699\ufe0f\";<!-- [et_pb_line_break_holder] -->        } else if (totalErrors === 4) {<!-- [et_pb_line_break_holder] -->            adviceText = \"\ud83d\udcca \u00a1BUEN RENDIMIENTO! Registramos 4 vulnerabilidades l\u00f3gicas en tu despliegue. Tu base es buena, pero esos 4 deslices indican que debes prestar m\u00e1s atenci\u00f3n a las cabeceras HTTP de seguridad avanzada (como HSTS o nosniff). \u00a1Asegura los sockets del servidor y vuelve a compilar! \ud83e\udde0\";<!-- [et_pb_line_break_holder] -->        } else if (totalErrors === 5) {<!-- [et_pb_line_break_holder] -->            adviceText = \"\u26a0\ufe0f ALERTA DE CONFIGURACI\u00d3N MEDIANA: Tuviste 5 fallos l\u00f3gicos en tu auditor\u00eda. Est\u00e1s logrando mitigar los riesgos globales, pero dejas demasiadas huellas residuales en los logs de producci\u00f3n. Te sugerimos revisar con detenimiento las metodolog\u00edas SAST\/DAST y el gobierno de datos masivos. \ud83d\udcd6\";<!-- [et_pb_line_break_holder] -->        } else if (totalErrors === 6) {<!-- [et_pb_line_break_holder] -->            adviceText = \"\ud83d\udea8 ALERTA DE RIESGO ELEVADO: Tu bit\u00e1cora marc\u00f3 6 errores en total. El per\u00edmetro digital simulado se est\u00e1 debilitando debido a ataques cruzados mal contenidos. Ponle foco inmediato a las contramedidas de inyecci\u00f3n SQL y a la protecci\u00f3n criptogr\u00e1fica en la nube de Azure antes del pr\u00f3ximo test. \ud83d\udee0\ufe0f\";<!-- [et_pb_line_break_holder] -->        } else if (totalErrors === 7) {<!-- [et_pb_line_break_holder] -->            adviceText = \"\ud83d\udca5 \u00a1PER\u00cdMETRO COMPROMETIDO! Acumulaste 7 fallos en los firewalls l\u00f3gicos. Lograste completar los desaf\u00edos, pero a un costo operativo de red muy alto. Dedica unos minutos a estudiar el cat\u00e1logo de fallos arquitect\u00f3nicos de dise\u00f1o (Insecure Design) de la gu\u00eda internacional OWASP Top 10. \ud83e\uddd7\";<!-- [et_pb_line_break_holder] -->        } else if (totalErrors >= 8 && totalErrors <= 12) {<!-- [et_pb_line_break_holder] -->            adviceText = \"\ud83d\uded1 \u00a1INTRUSI\u00d3N DETECTADA CON ALTO RUIDO! Registraste un total de \" + totalErrors + \" errores de red. Est\u00e1s confundiendo conceptos clave de blindaje perimetral y mitigaciones de sesiones. La teor\u00eda del ciclo SSDLC y el cifrado de datos en tr\u00e1nsito necesitan un repaso proactivo inmediato. \u00a1A acotar esos buffers! \ud83d\udcda\";<!-- [et_pb_line_break_holder] -->        } else {<!-- [et_pb_line_break_holder] -->            adviceText = \"\u2623\ufe0f \u00a1CRITICAL BREACH \/ FUGA DE DATOS SEVERA! Tu nivel operativo registr\u00f3 \" + totalErrors + \" fallos graves. El IDS corporativo bloque\u00f3 m\u00faltiples peticiones tuyas por inundaci\u00f3n err\u00f3nea (SYN Flood). Necesitas volver a las bases l\u00f3gicas de Kerberos, WAF, y la anatom\u00eda de inyecciones. \u00a1Dale al bot\u00f3n inferior y limpia tu terminal! \ud83d\udd04\";<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        document.getElementById(\"modal-advice\").innerText = adviceText;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        if (GOOGLE_SCRIPT_URL !== \"\") {<!-- [et_pb_line_break_holder] -->            const formData = new FormData();<!-- [et_pb_line_break_holder] -->            formData.append(\"name\", activeUsername);<!-- [et_pb_line_break_holder] -->            formData.append(\"score\", globalScore);<!-- [et_pb_line_break_holder] -->            formData.append(\"errors\", totalErrors);<!-- [et_pb_line_break_holder] -->            formData.append(\"rank\", finalRank);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            fetch(GOOGLE_SCRIPT_URL, { method: \"POST\", body: formData })<!-- [et_pb_line_break_holder] -->                .then(res => res.json())<!-- [et_pb_line_break_holder] -->                .then(data => { loadGlobalLeaderboard(data); })<!-- [et_pb_line_break_holder] -->                .catch(err => { console.error(\"Error conectando con la nube:\", err); loadLocalFallback(); });<!-- [et_pb_line_break_holder] -->        } else {<!-- [et_pb_line_break_holder] -->            loadLocalFallback();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const terminal = document.getElementById(\"terminal-output\");<!-- [et_pb_line_break_holder] -->        terminal.innerHTML = \"\";<!-- [et_pb_line_break_holder] -->        const logs = [<!-- [et_pb_line_break_holder] -->            `[+] TRANSACTION SECURED FOR USER: ${activeUsername.toUpperCase()}`,<!-- [et_pb_line_break_holder] -->            \"[+] SYNCING SCORE DATA WITH REGIONAL SERVERS...\",<!-- [et_pb_line_break_holder] -->            \"[+] LEADERBOARD STREAM UPDATED IN REAL-TIME.\",<!-- [et_pb_line_break_holder] -->            \"[+] STATUS: SECURITY CHALLENGE COMPLETED COMPLIANT.\"<!-- [et_pb_line_break_holder] -->        ];<!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        let lineIndex = 0;<!-- [et_pb_line_break_holder] -->        function typeLogLine() {<!-- [et_pb_line_break_holder] -->            if (lineIndex < logs.length) {<!-- [et_pb_line_break_holder] -->                const p = document.createElement(\"p\");<!-- [et_pb_line_break_holder] -->                p.style.margin = \"4px 0\"; p.style.fontSize = \"13px\";<!-- [et_pb_line_break_holder] -->                p.innerText = logs[lineIndex]; terminal.appendChild(p);<!-- [et_pb_line_break_holder] -->                terminal.scrollTop = terminal.scrollHeight; lineIndex++;<!-- [et_pb_line_break_holder] -->                setTimeout(typeLogLine, 400);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        typeLogLine();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function loadGlobalLeaderboard(recordsArray) {<!-- [et_pb_line_break_holder] -->        const tableBody = document.getElementById(\"history-table-body\");<!-- [et_pb_line_break_holder] -->        tableBody.innerHTML = \"\";<!-- [et_pb_line_break_holder] -->        recordsArray.reverse().forEach(record => {<!-- [et_pb_line_break_holder] -->            const tr = document.createElement(\"tr\");<!-- [et_pb_line_break_holder] -->            tr.innerHTML = `<!-- [et_pb_line_break_holder] -->                <\/p>\n<td><strong>${record.name}<\/strong><\/td>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<td style=\"color:#60a5fa;\">${record.score} \/ 24<\/td>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<td style=\"color:#f87171;\">${record.errors}<\/td>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<td>${record.rank}<\/td>\n<p><!-- [et_pb_line_break_holder] -->            `;<!-- [et_pb_line_break_holder] -->            tableBody.appendChild(tr);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function loadLocalFallback() {<!-- [et_pb_line_break_holder] -->        let currentHistory = JSON.parse(localStorage.getItem(\"hacking_leaderboard\")) || [];<!-- [et_pb_line_break_holder] -->        const finalRank = document.getElementById(\"rank-display\").innerText;<!-- [et_pb_line_break_holder] -->        currentHistory.push({ name: activeUsername, score: globalScore, errors: totalErrors, rank: finalRank });<!-- [et_pb_line_break_holder] -->        localStorage.setItem(\"hacking_leaderboard\", JSON.stringify(currentHistory));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const tableBody = document.getElementById(\"history-table-body\");<!-- [et_pb_line_break_holder] -->        tableBody.innerHTML = \"\";<!-- [et_pb_line_break_holder] -->        currentHistory.reverse().forEach(record => {<!-- [et_pb_line_break_holder] -->            const tr = document.createElement(\"tr\");<!-- [et_pb_line_break_holder] -->            tr.innerHTML = `<\/p>\n<td><strong>${record.name} (Local)<\/strong><\/td>\n<td style=\"color:#60a5fa;\">${record.score} \/ 24<\/td>\n<td style=\"color:#f87171;\">${record.errors}<\/td>\n<td>${record.rank}<\/td>\n<p>`;<!-- [et_pb_line_break_holder] -->            tableBody.appendChild(tr);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function generateRandomSopa(words) {<!-- [et_pb_line_break_holder] -->        let grid = Array(9).fill(null).map(() => Array(9).fill(\"\"));<!-- [et_pb_line_break_holder] -->        words.forEach(word => {<!-- [et_pb_line_break_holder] -->            let placed = false; let attempts = 0;<!-- [et_pb_line_break_holder] -->            while (!placed && attempts < 150) {<!-- [et_pb_line_break_holder] -->                let dir = Math.floor(Math.random() * 3); let startRow = Math.floor(Math.random() * 9); let startCol = Math.floor(Math.random() * 9);<!-- [et_pb_line_break_holder] -->                let canPlace = true; let coords = [];<!-- [et_pb_line_break_holder] -->                for (let i = 0; i < word.length; i++) {<!-- [et_pb_line_break_holder] -->                    let r = startRow + (dir === 1 || dir === 2 ? i : 0); let c = startCol + (dir === 0 || dir === 2 ? i : 0);<!-- [et_pb_line_break_holder] -->                    if (r >= 9 || c >= 9) { canPlace = false; break; }<!-- [et_pb_line_break_holder] -->                    if (grid[r][c] !== \"\" && grid[r][c] !== word[i]) { canPlace = false; break; }<!-- [et_pb_line_break_holder] -->                    coords.push({r, c});<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->                if (canPlace) { coords.forEach((coord, idx) => { grid[coord.r][coord.c] = word[idx]; }); placed = true; }<!-- [et_pb_line_break_holder] -->                attempts++;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";<!-- [et_pb_line_break_holder] -->        for (let r = 0; r < 9; r++) { for (let c = 0; c < 9; c++) { if (grid[r][c] === \"\") { grid[r][c] = alphabet[Math.floor(Math.random() * alphabet.length)]; } } }<!-- [et_pb_line_break_holder] -->        return grid;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function handleWordClick(event, wordElem, bankId) {<!-- [et_pb_line_break_holder] -->        const bank = document.getElementById(bankId); if (bank && bank.classList.contains('locked')) return; event.stopPropagation();<!-- [et_pb_line_break_holder] -->        const originalBankId = wordElem.getAttribute('data-bank');<!-- [et_pb_line_break_holder] -->        if (wordElem.parentElement.id === originalBankId) {<!-- [et_pb_line_break_holder] -->            if (currentlySelectedWord) currentlySelectedWord.classList.remove('selected-word');<!-- [et_pb_line_break_holder] -->            currentlySelectedWord = wordElem; wordElem.classList.add('selected-word');<!-- [et_pb_line_break_holder] -->        } else {<!-- [et_pb_line_break_holder] -->            const parentZone = wordElem.parentElement; document.getElementById(originalBankId).appendChild(wordElem);<!-- [et_pb_line_break_holder] -->            parentZone.classList.remove('filled'); parentZone.style.borderColor = '#94a3b8'; wordElem.style.background = 'var(--primary-dark)';<!-- [et_pb_line_break_holder] -->            if (currentlySelectedWord === wordElem) { wordElem.classList.remove('selected-word'); currentlySelectedWord = null; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function handleZonePlace(zoneElem, allowedBankId) {<!-- [et_pb_line_break_holder] -->        if (!currentlySelectedWord) return; if (currentlySelectedWord.getAttribute('data-bank') !== allowedBankId) return;<!-- [et_pb_line_break_holder] -->        if (zoneElem.children.length > 0) {<!-- [et_pb_line_break_holder] -->            let existingWord = zoneElem.children[0]; const originalBank = existingWord.getAttribute('data-bank');<!-- [et_pb_line_break_holder] -->            document.getElementById(originalBank).appendChild(existingWord); existingWord.style.background = 'var(--primary-dark)';<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        zoneElem.appendChild(currentlySelectedWord); currentlySelectedWord.classList.remove('selected-word'); currentlySelectedWord = null;<!-- [et_pb_line_break_holder] -->        zoneElem.classList.add('filled'); zoneElem.style.borderColor = 'var(--primary-dark)';<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function renderDragLevel(questions) {<!-- [et_pb_line_break_holder] -->        const zone = document.getElementById(\"drag-drop-zone\");<!-- [et_pb_line_break_holder] -->        zone.innerHTML = `<!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"section-header\">Nivel 1: Conceptos Clave (Arrastre Click & Place)<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"card\" id=\"drag-game-container-1\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"question-text\">Instrucciones: Selecciona un concepto azul y haz clic en su recuadro correspondiente para unirlos l\u00f3gicamente.<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"drag-container\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"words-bank\" id=\"wp-bank-container\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"slots-container\" id=\"wp-slots-container\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                <button class=\"btn-check\" id=\"btn-validate-drag-1\">Validar Auditor\u00eda Nivel 1<\/button><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"feedback\" id=\"drag-feedback-box-1\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->        `;<!-- [et_pb_line_break_holder] -->        const bankContainer = document.getElementById(\"wp-bank-container\"); const slotsContainer = document.getElementById(\"wp-slots-container\");<!-- [et_pb_line_break_holder] -->        questions.forEach(q => {<!-- [et_pb_line_break_holder] -->            const word = document.createElement(\"div\"); word.className = \"draggable-word\"; word.innerText = q.token;<!-- [et_pb_line_break_holder] -->            word.setAttribute(\"data-val\", q.token); word.setAttribute(\"data-bank\", \"wp-bank-container\");<!-- [et_pb_line_break_holder] -->            word.onclick = (e) => handleWordClick(e, word, \"wp-bank-container\"); bankContainer.appendChild(word);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        questions.forEach((q, idx) => {<!-- [et_pb_line_break_holder] -->            const row = document.createElement(\"div\"); row.className = \"slot-row\";<!-- [et_pb_line_break_holder] -->            row.innerHTML = `<\/p>\n<div class=\"drop-zone\" id=\"dz-1-${idx}\" data-ans=\"${q.token}\" onclick=\"handleZonePlace(this, 'wp-bank-container')\"><\/div>\n<div class=\"slot-desc\">${q.text}<\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->            slotsContainer.appendChild(row);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        document.getElementById(\"btn-validate-drag-1\").onclick = () => validateDragLevel1();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function validateDragLevel1() {<!-- [et_pb_line_break_holder] -->        const bank = document.getElementById(\"wp-bank-container\"); const zones = document.querySelectorAll(\"#drag-game-container-1 .drop-zone\"); const feedback = document.getElementById(\"drag-feedback-box-1\");<!-- [et_pb_line_break_holder] -->        let allFilled = true, allCorrect = true;<!-- [et_pb_line_break_holder] -->        zones.forEach(zone => {<!-- [et_pb_line_break_holder] -->            if (zone.children.length === 0) { allFilled = false; }<!-- [et_pb_line_break_holder] -->            else {<!-- [et_pb_line_break_holder] -->                let placedVal = zone.children[0].getAttribute('data-val'); let correctVal = zone.getAttribute('data-ans');<!-- [et_pb_line_break_holder] -->                if (placedVal !== correctVal) { allCorrect = false; zone.style.borderColor = 'var(--incorrect)'; zone.children[0].style.background = 'var(--incorrect)'; }<!-- [et_pb_line_break_holder] -->                else { zone.style.borderColor = 'var(--correct)'; zone.children[0].style.background = 'var(--correct)'; }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        feedback.style.display = 'block';<!-- [et_pb_line_break_holder] -->        if (!allFilled) { feedback.className = \"feedback incorrect\"; feedback.innerText = \"\u26a0\ufe0f Quedan espacios vac\u00edos.\"; currentStreak = 0; totalErrors++; updateScoreDisplay(); }<!-- [et_pb_line_break_holder] -->        else if (!allCorrect) { feedback.className = \"feedback incorrect\"; feedback.innerText = \"\u274c Emparejamientos err\u00f3neos.\"; currentStreak = 0; totalErrors++; updateScoreDisplay(); }<!-- [et_pb_line_break_holder] -->        else {<!-- [et_pb_line_break_holder] -->            feedback.className = \"feedback correct\"; feedback.innerText = \"\u2705 Nivel 1 superado perfectamente (+4 puntos).\";<!-- [et_pb_line_break_holder] -->            bank.classList.add('locked'); zones.forEach(zone => { zone.onclick = null; zone.children[0].onclick = null; });<!-- [et_pb_line_break_holder] -->            document.getElementById(\"btn-validate-drag-1\").style.display = 'none';<!-- [et_pb_line_break_holder] -->            globalScore += 4; answeredQuestionsCount += 4; currentStreak += 4; triggerCelebration(); updateScoreDisplay();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function renderSopaLevel() {<!-- [et_pb_line_break_holder] -->        const zone = document.getElementById(\"sopa-zone\");<!-- [et_pb_line_break_holder] -->        zone.innerHTML = `<!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"section-header\">Nivel 2: Sopa de Letras Hacking & Completa la Definici\u00f3n<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"card\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"question-text\">Instrucciones: Si no conoces la respuesta, usa el bot\u00f3n de asistencia para revelar el objetivo. Luego, haz clic en la <strong>letra inicial<\/strong> y <strong>final<\/strong> en la sopa de letras.<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"wordsearch-container\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"wordsearch-grid\" id=\"ws-grid\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"word-list\" id=\"ws-words-list\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"feedback\" id=\"sopa-feedback\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->        `;<!-- [et_pb_line_break_holder] -->        const gridElem = document.getElementById(\"ws-grid\");<!-- [et_pb_line_break_holder] -->        for (let r = 0; r < 9; r++) {<!-- [et_pb_line_break_holder] -->            for (let c = 0; c < 9; c++) {<!-- [et_pb_line_break_holder] -->                const cell = document.createElement(\"div\"); cell.className = \"grid-cell\"; cell.innerText = dynamicGrid[r][c]; cell.id = `cell-${r}-${c}`;<!-- [et_pb_line_break_holder] -->                cell.onclick = () => handleCellClick(r, c, cell); gridElem.appendChild(cell);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        const listElem = document.getElementById(\"ws-words-list\");<!-- [et_pb_line_break_holder] -->        Object.keys(activeSopaWords).forEach(word => {<!-- [et_pb_line_break_holder] -->            const item = document.createElement(\"div\"); item.className = \"word-item\"; item.id = `word-item-${word}`;<!-- [et_pb_line_break_holder] -->            const hintText = activeSopaWords[word].hint; const parts = hintText.split(\"______\");<!-- [et_pb_line_break_holder] -->            item.innerHTML = `<\/p>\n<div class=\"word-item-text\">\ud83d\udee1\ufe0f ${parts[0]}<strong class=\"blank-field\" id=\"blank-${word}\">[ ______ ]<\/strong>${parts[1] || \"\"}<\/div>\n<p><button id=\"hint-btn-${word}\" class=\"opt-btn\" style=\"display:inline-flex; width:auto; padding:6px 12px; font-size:12px; background:var(--warning-bg); border:1px solid var(--warning); color:var(--warning-text); border-radius:6px; cursor:pointer; font-weight:700; white-space:nowrap; margin-top:5px;\" onclick=\"revealSopaHint('${word}')\">\ud83d\udca1 Revelar Palabra<\/button>`;<!-- [et_pb_line_break_holder] -->            listElem.appendChild(item);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    window.revealSopaHint = function(word) {<!-- [et_pb_line_break_holder] -->        const blankEl = document.getElementById(`blank-${word}`); const btnEl = document.getElementById(`hint-btn-${word}`);<!-- [et_pb_line_break_holder] -->        if (blankEl && !activeSopaWords[word].found) { blankEl.innerText = `[ BUSCA: ${word} ]`; blankEl.style.color = \"var(--warning-text)\"; if (btnEl) btnEl.style.display = \"none\"; }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function handleCellClick(row, col, cellElem) {<!-- [et_pb_line_break_holder] -->        if (cellElem.classList.contains('found')) return;<!-- [et_pb_line_break_holder] -->        if (!wsStartCell) { wsStartCell = { row, col, elem: cellElem }; cellElem.classList.add('selected'); }<!-- [et_pb_line_break_holder] -->        else {<!-- [et_pb_line_break_holder] -->            const start = wsStartCell; const end = { row, col, elem: cellElem }; start.elem.classList.remove('selected'); wsStartCell = null;<!-- [et_pb_line_break_holder] -->            const rDiff = end.row - start.row; const cDiff = end.col - start.col; const rDist = Math.abs(rDiff); const cDist = Math.abs(cDiff);<!-- [et_pb_line_break_holder] -->            let isValidLine = false; let stepR = 0; let stepC = 0; let stepsCount = 0;<!-- [et_pb_line_break_holder] -->            if (rDist === 0) { isValidLine = true; stepC = cDiff > 0 ? 1 : -1; stepsCount = cDist; }<!-- [et_pb_line_break_holder] -->            else if (cDist === 0) { isValidLine = true; stepR = rDiff > 0 ? 1 : -1; stepsCount = rDist; }<!-- [et_pb_line_break_holder] -->            else if (rDist === cDist) { isValidLine = true; stepR = rDiff > 0 ? 1 : -1; stepC = cDiff > 0 ? 1 : -1; stepsCount = rDist; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            if (isValidLine) {<!-- [et_pb_line_break_holder] -->                const coords = []; let wordStr = \"\";<!-- [et_pb_line_break_holder] -->                for (let i = 0; i <= stepsCount; i++) {<!-- [et_pb_line_break_holder] -->                    const currR = start.row + (i * stepR); const currC = start.col + (i * stepC);<!-- [et_pb_line_break_holder] -->                    coords.push({ row: currR, col: currC }); wordStr += dynamicGrid[currR][currC];<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->                const reversedWordStr = wordStr.split('').reverse().join(''); let matchedWord = null;<!-- [et_pb_line_break_holder] -->                if (activeSopaWords[wordStr] && !activeSopaWords[wordStr].found) matchedWord = wordStr;<!-- [et_pb_line_break_holder] -->                else if (activeSopaWords[reversedWordStr] && !activeSopaWords[reversedWordStr].found) matchedWord = reversedWordStr;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                if (matchedWord) {<!-- [et_pb_line_break_holder] -->                    activeSopaWords[matchedWord].found = true;<!-- [et_pb_line_break_holder] -->                    coords.forEach(coord => { const el = document.getElementById(`cell-${coord.row}-${coord.col}`); if (el) el.classList.add('found'); });<!-- [et_pb_line_break_holder] -->                    const blankEl = document.getElementById(`blank-${matchedWord}`); if (blankEl) { blankEl.innerText = matchedWord; blankEl.style.color = \"var(--correct-text)\"; blankEl.style.borderBottom = \"none\"; }<!-- [et_pb_line_break_holder] -->                    const itemEl = document.getElementById(`word-item-${matchedWord}`); if (itemEl) itemEl.classList.add('found');<!-- [et_pb_line_break_holder] -->                    const btnEl = document.getElementById(`hint-btn-${matchedWord}`); if (btnEl) btnEl.style.display = \"none\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    globalScore += 1; answeredQuestionsCount += 1; currentStreak += 1; triggerCelebration(); updateScoreDisplay();<!-- [et_pb_line_break_holder] -->                    if (Object.keys(activeSopaWords).every(k => activeSopaWords[k].found)) {<!-- [et_pb_line_break_holder] -->                        const feedback = document.getElementById(\"sopa-feedback\"); feedback.className = \"feedback correct\"; feedback.style.display = \"block\";<!-- [et_pb_line_break_holder] -->                        feedback.innerText = \"\ud83c\udf89 Sopa de letras descifrada completamente (+4 puntos).\";<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                } else { flashError(start.elem, end.elem); }<!-- [et_pb_line_break_holder] -->            } else { flashError(start.elem, end.elem); }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function flashError(el1, el2) {<!-- [et_pb_line_break_holder] -->        el1.style.borderColor = 'var(--incorrect)'; el2.style.borderColor = 'var(--incorrect)';<!-- [et_pb_line_break_holder] -->        setTimeout(() => { if (!el1.classList.contains('found')) el1.style.borderColor = ''; if (!el2.classList.contains('found')) el2.style.borderColor = ''; }, 500);<!-- [et_pb_line_break_holder] -->        currentStreak = 0; totalErrors++; updateScoreDisplay();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function renderDragLevel2(questions) {<!-- [et_pb_line_break_holder] -->        const zone = document.getElementById(\"drag-drop-zone-2\");<!-- [et_pb_line_break_holder] -->        zone.innerHTML = `<!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"section-header\">Nivel 3: Mitigaci\u00f3n de Amenazas (Auditor\u00eda vs. Vectores de Riesgo)<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"card\" id=\"drag-game-container-2\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"question-text\">Instrucciones: Selecciona una <strong>Contramedida de Seguridad<\/strong> (etiqueta azul) y haz clic en el <strong>Vector de Riesgo Evaluado<\/strong> (recuadro dashed) para neutralizarlo.<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"drag-container\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"words-bank\" id=\"child-bank-container\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"slots-container\" id=\"parent-slots-container\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                <button class=\"btn-check\" id=\"btn-validate-drag-2\">Verificar Blindaje Tecnol\u00f3gico<\/button><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"feedback\" id=\"drag-feedback-box-2\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->        `;<!-- [et_pb_line_break_holder] -->        const bankContainer = document.getElementById(\"child-bank-container\"); const slotsContainer = document.getElementById(\"parent-slots-container\");<!-- [et_pb_line_break_holder] -->        questions.forEach(q => {<!-- [et_pb_line_break_holder] -->            const word = document.createElement(\"div\"); word.className = \"draggable-word\"; word.innerText = q.token;<!-- [et_pb_line_break_holder] -->            word.setAttribute(\"data-val\", q.token); word.setAttribute(\"data-bank\", \"child-bank-container\");<!-- [et_pb_line_break_holder] -->            word.onclick = (e) => handleWordClick(e, word, \"child-bank-container\"); bankContainer.appendChild(word);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        questions.forEach((q, idx) => {<!-- [et_pb_line_break_holder] -->            const row = document.createElement(\"div\"); row.className = \"slot-row\";<!-- [et_pb_line_break_holder] -->            row.innerHTML = `<\/p>\n<div class=\"drop-zone\" id=\"dz-2-${idx}\" data-ans=\"${q.token}\" onclick=\"handleZonePlace(this, 'child-bank-container')\"><\/div>\n<div class=\"slot-desc\">\ud83d\udee1\ufe0f <strong>Vector de Riesgo Evaluado:<\/strong> ${q.text}<\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->            slotsContainer.appendChild(row);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        document.getElementById(\"btn-validate-drag-2\").onclick = () => validateDragLevel2();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function validateDragLevel2() {<!-- [et_pb_line_break_holder] -->        const bank = document.getElementById(\"child-bank-container\"); const zones = document.querySelectorAll(\"#drag-game-container-2 .drop-zone\"); const feedback = document.getElementById(\"drag-feedback-box-2\");<!-- [et_pb_line_break_holder] -->        let allFilled = true, allCorrect = true;<!-- [et_pb_line_break_holder] -->        zones.forEach(zone => {<!-- [et_pb_line_break_holder] -->            if (zone.children.length === 0) { allFilled = false; }<!-- [et_pb_line_break_holder] -->            else {<!-- [et_pb_line_break_holder] -->                let placedVal = zone.children[0].getAttribute('data-val'); let correctVal = zone.getAttribute('data-ans');<!-- [et_pb_line_break_holder] -->                if (placedVal !== correctVal) { allCorrect = false; zone.style.borderColor = 'var(--incorrect)'; zone.children[0].style.background = 'var(--incorrect)'; }<!-- [et_pb_line_break_holder] -->                else { zone.style.borderColor = 'var(--correct)'; zone.children[0].style.background = 'var(--correct)'; }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        feedback.style.display = 'block';<!-- [et_pb_line_break_holder] -->        if (!allFilled) { feedback.className = \"feedback incorrect\"; feedback.innerText = \"\u26a0\ufe0f Quedan vectores de riesgo desprotegidos.\"; currentStreak = 0; totalErrors++; updateScoreDisplay(); }<!-- [et_pb_line_break_holder] -->        else if (!allCorrect) { feedback.className = \"feedback incorrect\"; feedback.innerText = \"\u274c Errores en las mitigaciones.\"; currentStreak = 0; totalErrors++; updateScoreDisplay(); }<!-- [et_pb_line_break_holder] -->        else {<!-- [et_pb_line_break_holder] -->            feedback.className = \"feedback correct\"; feedback.innerText = \"\u2705 \u00a1Aseguramiento Exitoso! Todos los vectores de ataque han sido mitigados.\";<!-- [et_pb_line_break_holder] -->            bank.classList.add('locked'); zones.forEach(zone => { zone.onclick = null; zone.children[0].onclick = null; });<!-- [et_pb_line_break_holder] -->            document.getElementById(\"btn-validate-drag-2\").style.display = 'none';<!-- [et_pb_line_break_holder] -->            globalScore += 4; answeredQuestionsCount += 4; currentStreak += 4; triggerCelebration(); updateScoreDisplay();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function renderDropdownLevel(questions) {<!-- [et_pb_line_break_holder] -->        const zone = document.getElementById(\"dropdown-zone\");<!-- [et_pb_line_break_holder] -->        zone.innerHTML = `<\/p>\n<div class=\"section-header\">Nivel 4: Despliegues de Infraestructura (Completar Desplegables)<\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->        questions.forEach((q, idx) => {<!-- [et_pb_line_break_holder] -->            let card = document.createElement(\"div\"); card.className = \"card\"; card.id = `drop-card-${idx}`;<!-- [et_pb_line_break_holder] -->            let selectHTML = `<select class=\"game-select\" id=\"g-sel-${idx}\"><option value=\"\">-- Elige --<\/option>`;<!-- [et_pb_line_break_holder] -->            Object.keys(q.options).forEach(key => { selectHTML += `<option value=\"${key}\">${q.options[key]}<\/option>`; }); selectHTML += `<\/select>`;<!-- [et_pb_line_break_holder] -->            card.innerHTML = `<\/p>\n<div class=\"question-text\">Escenario ${idx + 1} (${q.mod})<\/div>\n<div class=\"dropdown-text\">${q.text} ${selectHTML}.<\/div>\n<p><button class=\"btn-check\" id=\"btn-val-drop-${idx}\">Verificar Escenario<\/button><\/p>\n<div class=\"feedback\" id=\"drop-feed-${idx}\"><\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->            zone.appendChild(card);<!-- [et_pb_line_break_holder] -->            document.getElementById(`btn-val-drop-${idx}`).onclick = () => {<!-- [et_pb_line_break_holder] -->                const selectElement = document.getElementById(`g-sel-${idx}`); const fb = document.getElementById(`drop-feed-${idx}`);<!-- [et_pb_line_break_holder] -->                if (!selectElement.value) { fb.className = \"feedback incorrect\"; fb.innerText = \"\u26a0\ufe0f Selecciona una opci\u00f3n.\"; fb.style.display = \"block\"; return; }<!-- [et_pb_line_break_holder] -->                if (selectElement.value === q.correct) {<!-- [et_pb_line_break_holder] -->                    selectElement.className = \"game-select success\"; fb.className = \"feedback correct\"; fb.innerText = \"\u2705 Respuesta correcta (+1 punto).\";<!-- [et_pb_line_break_holder] -->                    document.getElementById(`btn-val-drop-${idx}`).style.display = \"none\";<!-- [et_pb_line_break_holder] -->                    globalScore += 1; answeredQuestionsCount += 1; currentStreak += 1; triggerCelebration(); updateScoreDisplay();<!-- [et_pb_line_break_holder] -->                } else {<!-- [et_pb_line_break_holder] -->                    selectElement.className = \"game-select error\"; fb.className = \"feedback incorrect\"; fb.innerText = \"\u274c Incorrecto.\";<!-- [et_pb_line_break_holder] -->                    currentStreak = 0; totalErrors++; updateScoreDisplay();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            };<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function renderMCLevel(questions) {<!-- [et_pb_line_break_holder] -->        const container = document.getElementById(\"multiple-choice-zone\");<!-- [et_pb_line_break_holder] -->        container.innerHTML = `<\/p>\n<div class=\"section-header\">Nivel 5: Cuestionario Elite de Ciberseguridad (Opci\u00f3n M\u00faltiple)<\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->        questions.forEach((item, index) => {<!-- [et_pb_line_break_holder] -->            let card = document.createElement('div'); card.className = 'card'; card.innerHTML = `<\/p>\n<div class=\"question-text\">${index + 1}. [${item.mod}] ${item.q}<\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->            let optsDiv = document.createElement('div'); optsDiv.className = 'options-container';<!-- [et_pb_line_break_holder] -->            Object.keys(item.opts).forEach(key => {<!-- [et_pb_line_break_holder] -->                let btn = document.createElement('button'); btn.className = 'opt-btn'; btn.innerHTML = `<span class=\"option-letter\">${key}<\/span> <span>${item.opts[key]}<\/span>`;<!-- [et_pb_line_break_holder] -->                btn.onclick = function() {<!-- [et_pb_line_break_holder] -->                    if (card.classList.contains('locked')) return;<!-- [et_pb_line_break_holder] -->                    let fb = card.querySelector('.feedback') || document.createElement('div'); fb.className = 'feedback'; card.appendChild(fb);<!-- [et_pb_line_break_holder] -->                    if (key === item.ans) {<!-- [et_pb_line_break_holder] -->                        btn.className = 'opt-btn correct-ans'; fb.className = 'feedback correct'; fb.innerHTML = `\u2705 <strong>\u00a1Respuesta Correcta!<\/strong> ${item.exp}`;<!-- [et_pb_line_break_holder] -->                        card.classList.add('answered-correctly', 'locked');<!-- [et_pb_line_break_holder] -->                        Array.from(optsDiv.children).forEach(b => { if (b !== btn) b.classList.add('disabled'); });<!-- [et_pb_line_break_holder] -->                        globalScore += 1; answeredQuestionsCount += 1; currentStreak += 1; triggerCelebration(); updateScoreDisplay();<!-- [et_pb_line_break_holder] -->                    } else {<!-- [et_pb_line_break_holder] -->                        btn.className = 'opt-btn incorrect-ans'; fb.className = 'feedback incorrect'; fb.innerHTML = `\u274c <strong>Incorrecto.<\/strong>`;<!-- [et_pb_line_break_holder] -->                        currentStreak = 0; totalErrors++; updateScoreDisplay();<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                };<!-- [et_pb_line_break_holder] -->                optsDiv.appendChild(btn);<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            card.appendChild(optsDiv); container.appendChild(card);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ --- ENGIN DE INICIALIZACI\u00d3N ---<!-- [et_pb_line_break_holder] -->    function initializeRandomQuiz() {<!-- [et_pb_line_break_holder] -->        const dragPool = masterQuestionPool.filter(q => q.type === \"drag\");<!-- [et_pb_line_break_holder] -->        const dropPool = masterQuestionPool.filter(q => q.type === \"dropdown\");<!-- [et_pb_line_break_holder] -->        const mcPool = masterQuestionPool.filter(q => q.type === \"mc\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        shuffleArray(dragPool); shuffleArray(dropPool); shuffleArray(mcPool);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const selectedDrag1 = dragPool.slice(0, 4);<!-- [et_pb_line_break_holder] -->        shuffleArray(sopaPool);<!-- [et_pb_line_break_holder] -->        const selectedSopa = sopaPool.slice(0, 4);<!-- [et_pb_line_break_holder] -->        activeSopaWords = {};<!-- [et_pb_line_break_holder] -->        selectedSopa.forEach(item => { activeSopaWords[item.word] = { found: false, hint: item.hint }; });<!-- [et_pb_line_break_holder] -->        dynamicGrid = generateRandomSopa(selectedSopa.map(x => x.word));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const selectedDrag2 = dragPool.slice(4, 8);<!-- [et_pb_line_break_holder] -->        const selectedDrop = dropPool.slice(0, 4);<!-- [et_pb_line_break_holder] -->        const selectedMC = mcPool.slice(0, 8);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        renderDragLevel(selectedDrag1);<!-- [et_pb_line_break_holder] -->        renderSopaLevel();<!-- [et_pb_line_break_holder] -->        renderDragLevel2(selectedDrag2);<!-- [et_pb_line_break_holder] -->        renderDropdownLevel(selectedDrop);<!-- [et_pb_line_break_holder] -->        renderMCLevel(selectedMC);<!-- [et_pb_line_break_holder] -->        updateScoreDisplay();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    function shuffleArray(array) {<!-- [et_pb_line_break_holder] -->        for (let i = array.length - 1; i > 0; i--) {<!-- [et_pb_line_break_holder] -->            const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]];<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        return array;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/body><!-- [et_pb_line_break_holder] --><\/html>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":641,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-646","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/blamiss.com\/index.php\/wp-json\/wp\/v2\/pages\/646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blamiss.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blamiss.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blamiss.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blamiss.com\/index.php\/wp-json\/wp\/v2\/comments?post=646"}],"version-history":[{"count":28,"href":"https:\/\/blamiss.com\/index.php\/wp-json\/wp\/v2\/pages\/646\/revisions"}],"predecessor-version":[{"id":695,"href":"https:\/\/blamiss.com\/index.php\/wp-json\/wp\/v2\/pages\/646\/revisions\/695"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blamiss.com\/index.php\/wp-json\/wp\/v2\/media\/641"}],"wp:attachment":[{"href":"https:\/\/blamiss.com\/index.php\/wp-json\/wp\/v2\/media?parent=646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}