{"id":101178,"date":"2026-09-18T09:30:28","date_gmt":"2026-09-18T14:30:28","guid":{"rendered":"https:\/\/uninavarra.edu.co\/?page_id=101178"},"modified":"2026-09-18T17:11:07","modified_gmt":"2026-09-18T22:11:07","slug":"cifras-proyeccion-social-y-extension","status":"publish","type":"page","link":"https:\/\/uninavarra.edu.co\/en\/cifras-proyeccion-social-y-extension\/","title":{"rendered":"SOCIAL PROJECTION AND OUTREACH"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><div class=\"wpb-container \"><div class=\"container\"><div class=\"vc_row wpb_row vc_row-fluid row \"><div class=\"col-sm-12  vc_\">\n\t\t<div class=\"wpb_wrapper \">\n\t\t\t\n\t<div class=\"wpb_raw_code wpb_raw_html wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Source+Serif+4:wght@500;600&display=swap');\n.ups-wrap{--ups-strong:#33475B;--ups-strong-dark:#243444;--ups-title:#20b49c;--ups-ink:#1c2430;--ups-muted:#5d6673;--ups-line:#e3e6ea;--ups-soft:#f5f6f8;--ups-track:#e8ecf0;max-width:1120px;margin:0 auto;padding:8px 0 16px;color:var(--ups-ink);font-family:inherit;font-size:18px;line-height:1.6;box-sizing:border-box}\n.ups-wrap *,.ups-wrap *::before,.ups-wrap *::after{box-sizing:border-box}\n.ups-wrap .ups-section{margin:0 0 64px}\n.ups-wrap .ups-section:last-of-type{margin-bottom:0}\n.ups-wrap .ups-head{margin:0 0 26px;padding-left:16px;border-left:3px solid var(--ups-strong)}\n.ups-wrap .ups-title{font-family:'Source Serif 4',Georgia,'Times New Roman',serif !important;font-size:36px !important;line-height:1.2 !important;font-weight:600 !important;margin:0 0 8px;padding:0;color:var(--ups-title) !important;letter-spacing:0;text-transform:none}\n.ups-wrap .ups-lead{margin:0;padding:0;color:var(--ups-muted) !important;font-size:20px !important;line-height:1.5 !important;max-width:66ch}\n.ups-wrap .ups-name{font-family:'Source Serif 4',Georgia,'Times New Roman',serif !important;font-size:26px !important;line-height:1.25 !important;font-weight:600 !important;margin:0;padding:0;color:var(--ups-title) !important;text-transform:none;letter-spacing:0}\n.ups-wrap .ups-sub{margin:0;padding:0;font-size:16px !important;line-height:1.4 !important;color:var(--ups-muted) !important}\n\/* Barras horizontales *\/\n.ups-wrap .ups-row{display:flex;flex-direction:column;gap:8px}\n.ups-wrap .ups-row-top{display:flex;justify-content:space-between;align-items:baseline;gap:12px}\n.ups-wrap .ups-label{font-size:18px;line-height:1.35;color:var(--ups-ink);font-weight:500}\n.ups-wrap .ups-val{font-size:20px;font-weight:600;color:var(--ups-strong);font-variant-numeric:tabular-nums;white-space:nowrap}\n.ups-wrap .ups-track{height:12px;background:var(--ups-track);border-radius:3px;overflow:hidden;width:100%}\n.ups-wrap .ups-fill{display:block;height:100%;width:var(--w);min-width:4px;background:var(--ups-strong);border-radius:3px}\n.ups-wrap.ups-js .ups-reveal .ups-fill{width:0;transition:width .9s cubic-bezier(.2,.7,.2,1);transition-delay:calc(var(--i,0) * 80ms)}\n.ups-wrap.ups-js .ups-reveal.ups-in .ups-fill{width:var(--w)}\n\/* KPI *\/\n.ups-wrap .ups-grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}\n.ups-wrap .ups-kpi{background:#fff;border:1px solid var(--ups-line);border-radius:6px;padding:26px;display:flex;flex-direction:column;gap:8px}\n.ups-wrap .ups-kpi .ups-icon{margin-bottom:8px}\n.ups-wrap .ups-kpi .ups-track{margin-top:auto}\n.ups-wrap .ups-kpi p{margin:0;padding:0}\n.ups-wrap .ups-kpi-label{font-size:18px !important;color:var(--ups-muted) !important}\n.ups-wrap .ups-kpi-val{font-family:'Source Serif 4',Georgia,serif;font-size:56px !important;line-height:1.05 !important;font-weight:600;color:var(--ups-strong) !important}\n\/* Paneles de graficas *\/\n.ups-wrap .ups-panel{background:#fff;border:1px solid var(--ups-line);border-radius:6px;padding:28px;margin-top:20px;display:flex;flex-direction:column;gap:20px}\n.ups-wrap .ups-panel-head{display:flex;align-items:flex-start;gap:16px}\n.ups-wrap .ups-icon{width:60px;height:60px;flex:none;display:grid;place-items:center;border-radius:6px;background:var(--ups-soft);color:var(--ups-strong);overflow:hidden}\n.ups-wrap .ups-icon svg{width:30px;height:30px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}\n.ups-wrap .ups-icon img{width:100%;height:100%;object-fit:contain;padding:8px;display:block;margin:0;border-radius:0}\n.ups-wrap .ups-body{display:flex;flex-direction:column;gap:4px;min-width:0}\n.ups-wrap .ups-chips{display:flex;flex-wrap:wrap;gap:10px}\n.ups-wrap button.ups-chip{display:inline-flex !important;align-items:center;gap:8px;margin:0 !important;padding:8px 14px !important;min-width:0 !important;background:#fff !important;color:var(--ups-ink) !important;border:1px solid #c9cfd6 !important;border-radius:4px !important;box-shadow:none !important;font-family:inherit !important;font-size:16px !important;font-weight:500 !important;line-height:1.3 !important;text-transform:none !important;letter-spacing:0 !important;cursor:pointer;transition:border-color .2s ease,background .2s ease}\n.ups-wrap button.ups-chip:hover{border-color:var(--ups-strong) !important}\n.ups-wrap button.ups-chip[aria-pressed=\"true\"]{background:var(--ups-soft) !important;border-color:var(--ups-strong) !important;font-weight:600 !important}\n.ups-wrap button.ups-chip:focus-visible{outline:2px solid var(--ups-strong);outline-offset:2px}\n.ups-wrap .ups-dot{width:12px;height:12px;border-radius:3px;border:2px solid var(--c);background:transparent;flex:none}\n.ups-wrap button.ups-chip[aria-pressed=\"true\"] .ups-dot{background:var(--c)}\n.ups-wrap .ups-hintline{margin:0;padding:0;font-size:16px !important;color:var(--ups-muted) !important}\n\/* Grafica *\/\n.ups-wrap .ups-chart{position:relative;width:100%;min-height:120px}\n.ups-wrap .ups-chart svg{display:block;width:100%;height:auto;overflow:visible}\n.ups-wrap .ups-empty{margin:0;padding:40px 0;text-align:center;font-size:18px !important;color:var(--ups-muted) !important}\n.ups-wrap .ups-tick{font-size:15px !important;fill:var(--ups-muted);font-family:inherit}\n.ups-wrap .ups-xl{font-size:16px !important;fill:var(--ups-ink);font-family:inherit}\n.ups-wrap .ups-vlabel{font-size:15px !important;font-weight:600;fill:var(--ups-strong);font-family:inherit}\n.ups-wrap .ups-gl{stroke:var(--ups-line);stroke-width:1}\n.ups-wrap .ups-axis{stroke:#b8c0c9;stroke-width:1}\n.ups-wrap .ups-bar{transform-box:fill-box;transform-origin:50% 100%;transform:scaleY(0);transition:transform .8s cubic-bezier(.2,.7,.2,1);transition-delay:calc(var(--i,0) * 45ms)}\n.ups-wrap .ups-in .ups-bar{transform:scaleY(1)}\n.ups-wrap .ups-line{fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 1.1s ease}\n.ups-wrap .ups-in .ups-line{stroke-dashoffset:0}\n.ups-wrap .ups-pt{opacity:0;transition:opacity .4s ease .9s}\n.ups-wrap .ups-in .ups-pt{opacity:1}\n.ups-wrap .ups-hit{cursor:pointer;outline:none}\n.ups-wrap .ups-bar.ups-hit:hover,.ups-wrap .ups-bar.ups-hit:focus{opacity:.82}\n.ups-wrap .ups-pt.ups-hit:focus,.ups-wrap .ups-pt.ups-hit:hover{stroke-width:3.5}\n.ups-wrap .ups-hitarea{fill:transparent;cursor:pointer;outline:none}\n.ups-wrap .ups-tip{position:absolute;z-index:5;pointer-events:none;white-space:nowrap;background:var(--ups-strong);color:#fff;border-radius:4px;padding:8px 12px;font-size:15px;line-height:1.35;max-width:260px;opacity:0;transition:opacity .15s ease;transform:translate(-50%,-100%)}\n.ups-wrap .ups-tip.ups-on{opacity:1}\n.ups-wrap .ups-tip b{display:block;font-size:18px;font-weight:600}\n\/* Detalle *\/\n.ups-wrap details.ups-details{border-top:1px solid var(--ups-line);padding-top:16px}\n.ups-wrap details.ups-details summary{cursor:pointer;font-size:17px !important;font-weight:600 !important;color:var(--ups-strong) !important;padding:4px 0}\n.ups-wrap .ups-table-wrap{margin-top:14px;overflow-x:auto;border:1px solid var(--ups-line);border-radius:6px}\n.ups-wrap table.ups-table{border-collapse:collapse;width:100%;margin:0;font-size:16px !important;background:#fff}\n.ups-wrap table.ups-table th,.ups-wrap table.ups-table td{padding:10px 14px;border:0;border-bottom:1px solid var(--ups-line);text-align:right;white-space:nowrap;font-size:16px !important;color:var(--ups-ink);background:#fff;font-variant-numeric:tabular-nums}\n.ups-wrap table.ups-table th{background:var(--ups-soft);color:var(--ups-strong);font-weight:600}\n.ups-wrap table.ups-table th:first-child,.ups-wrap table.ups-table td:first-child{text-align:left;position:sticky;left:0;min-width:200px;white-space:normal}\n.ups-wrap table.ups-table tr:last-child td{border-bottom:0;font-weight:600;color:var(--ups-strong)}\n@media (max-width:900px){\n}\n@media (max-width:680px){\n.ups-wrap .ups-grid-3{grid-template-columns:minmax(0,1fr)}\n.ups-wrap .ups-section{margin-bottom:48px}\n.ups-wrap .ups-title{font-size:29px !important}\n.ups-wrap .ups-lead{font-size:18px !important}\n.ups-wrap .ups-name{font-size:24px !important}\n.ups-wrap .ups-panel{padding:22px}\n.ups-wrap .ups-kpi-val{font-size:48px !important}\n}\n@media (max-width:420px){\n.ups-wrap .ups-grid-3{grid-template-columns:minmax(0,1fr)}\n}\n@media (prefers-reduced-motion:reduce){\n.ups-wrap .ups-bar,.ups-wrap .ups-line,.ups-wrap .ups-pt,.ups-wrap.ups-js .ups-reveal .ups-fill{transition:none !important}\n}\n.ups-wrap .ups-area{opacity:0;transition:opacity .9s ease .35s}\n.ups-wrap .ups-in .ups-area{opacity:1}\n.ups-wrap .ups-slabel{font-size:15px !important;font-weight:600;font-family:inherit;pointer-events:none}\n@media (prefers-reduced-motion:reduce){\n.ups-wrap .ups-area{transition:none !important}\n}\n\/* Layout *\/\n.ups-wrap .ups-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:20px}\n.ups-wrap .ups-grid-2 .ups-panel{margin-top:0}\n.ups-wrap .ups-tabs{margin-bottom:6px}\n.ups-wrap .ups-eje-title{margin:26px 0 16px !important}\n.ups-wrap .ups-bars{display:flex;flex-direction:column;gap:18px}\n\/* Etiquetas *\/\n.ups-wrap .ups-badge{display:inline-block;margin-left:6px;padding:2px 9px;border-radius:999px;background:#fff;border:1px solid #c9cfd6;font-size:13px !important;font-weight:600 !important;color:var(--ups-muted);line-height:1.4;vertical-align:middle;letter-spacing:0}\n.ups-wrap .ups-pill{display:inline-block;margin-left:8px;padding:2px 10px;background:var(--ups-soft);border:1px solid var(--ups-line);border-radius:999px;font-size:14px;font-weight:600;color:var(--ups-strong);line-height:1.4;vertical-align:middle}\n\/* Espacio de referencia \/ proximamente *\/\n.ups-wrap p.ups-soon{display:flex;flex-direction:column;align-items:center;gap:12px;padding:56px 24px;border:2px dashed #c9cfd6;border-radius:6px;background:var(--ups-soft)}\n.ups-wrap .ups-soon-box{padding:40px 24px}\n\/* Cifras *\/\n.ups-wrap .ups-strip{display:flex;flex-wrap:wrap;gap:14px;margin-top:6px;padding-top:22px;border-top:1px solid var(--ups-line)}\n.ups-wrap .ups-tile{flex:1 1 170px;display:flex;flex-direction:column;gap:2px;padding:16px 18px;background:var(--ups-soft);border-radius:6px}\n.ups-wrap .ups-tile-num{font-family:'Source Serif 4',Georgia,serif;font-size:36px;line-height:1.1;font-weight:600;color:var(--ups-strong);font-variant-numeric:tabular-nums}\n.ups-wrap .ups-tile-lbl{font-size:16px;line-height:1.35;color:var(--ups-muted)}\n@media (max-width:900px){\n.ups-wrap .ups-grid-2{grid-template-columns:minmax(0,1fr)}\n}\n@media (max-width:680px){\n.ups-wrap .ups-tile-num{font-size:30px}\n.ups-wrap .ups-eje-title{margin:20px 0 14px !important}\n}\n<\/style>\n<div class=\"ups-wrap\">\n<!-- ============ 1. EJES DE PROYECCI\u00d3N SOCIAL ============ -->\n<section class=\"ups-section\">\n<div class=\"ups-head\">\n<h2 class=\"ups-title\">Ejes de proyecci\u00f3n social<\/h2>\n<p class=\"ups-lead\">Proyectos, poblaci\u00f3n beneficiada y voluntarios por eje.<\/p>\n<\/div>\n<div class=\"ups-chips ups-tabs\" role=\"group\" aria-label=\"Ejes de proyecci\u00f3n social\"><\/div>\n<div data-eje-msg><\/div>\n<div data-eje>\n<h3 class=\"ups-name ups-eje-title\"><\/h3>\n<!-- ICONOS de las tarjetas: reemplaza cada <svg> por <img decoding=\"async\" src=\"URL\" alt=\"\"> -->\n<div class=\"ups-grid-3\">\n<div class=\"ups-kpi ups-reveal\" data-kpi=\"formulados\">\n<div class=\"ups-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"18\" cy=\"18\" r=\"3\"\/><circle cx=\"6\" cy=\"6\" r=\"3\"\/><path d=\"M6 21V9a9 9 0 0 0 9 9\"\/><\/svg><\/div>\n<p class=\"ups-kpi-label\">Proyectos formulados<\/p>\n<p class=\"ups-kpi-val\"><span class=\"ups-kpi-n\">\u2014<\/span><\/p>\n<\/div>\n<div class=\"ups-kpi ups-reveal\" data-kpi=\"beneficiados\">\n<div class=\"ups-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"\/><\/svg><\/div>\n<p class=\"ups-kpi-label\">Beneficiados<\/p>\n<p class=\"ups-kpi-val\"><span class=\"ups-kpi-n\">\u2014<\/span><\/p>\n<\/div>\n<div class=\"ups-kpi ups-reveal\" data-kpi=\"voluntarios\">\n<div class=\"ups-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"\/><\/svg><\/div>\n<p class=\"ups-kpi-label\">Voluntarios participantes<\/p>\n<p class=\"ups-kpi-val\"><span class=\"ups-kpi-n\">\u2014<\/span><\/p>\n<\/div>\n<\/div>\n<div class=\"ups-grid-2\">\n<div class=\"ups-panel ups-reveal\" data-chart=\"poblacion\" data-alt=\"Gr\u00e1fica de l\u00ednea: poblaci\u00f3n beneficiada por a\u00f1o\">\n<div class=\"ups-panel-head\">\n<div class=\"ups-icon\">\n<!-- ICONO: reemplaza el <svg> por <img decoding=\"async\" src=\"URL\" alt=\"\"> -->\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M23 6l-9.5 9.5-5-5L1 18\"\/><path d=\"M17 6h6v6\"\/><\/svg>\n<\/div>\n<div class=\"ups-body\">\n<h3 class=\"ups-name\">Poblaci\u00f3n beneficiada<\/h3>\n<p class=\"ups-sub\">Personas beneficiadas por a\u00f1o.<\/p>\n<\/div>\n<\/div>\n<div class=\"ups-chips\" role=\"group\" aria-label=\"Series a mostrar\"><\/div>\n<div class=\"ups-chart\"><p class=\"ups-empty\">Cargando datos\u2026<\/p><\/div>\n<\/div>\n<div class=\"ups-panel ups-reveal\" data-chart=\"proyectos\" data-alt=\"Gr\u00e1fica de barras verticales: proyectos ejecutados por a\u00f1o\">\n<div class=\"ups-panel-head\">\n<div class=\"ups-icon\">\n<!-- ICONO: reemplaza el <svg> por <img decoding=\"async\" src=\"URL\" alt=\"\"> -->\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M18 20V10\"\/><path d=\"M12 20V4\"\/><path d=\"M6 20v-6\"\/><\/svg>\n<\/div>\n<div class=\"ups-body\">\n<h3 class=\"ups-name\">Proyectos ejecutados<\/h3>\n<p class=\"ups-sub\">Proyectos ejecutados por a\u00f1o.<\/p>\n<\/div>\n<\/div>\n<div class=\"ups-chips\" role=\"group\" aria-label=\"Series a mostrar\"><\/div>\n<div class=\"ups-chart\"><p class=\"ups-empty\">Cargando datos\u2026<\/p><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div data-eje-soon style=\"display:none\">\n<p class=\"ups-empty ups-soon\"><span class=\"ups-badge\">Pr\u00f3ximamente<\/span>Muy pronto encontrar\u00e1s aqu\u00ed las cifras de este eje.<\/p>\n<\/div>\n<\/section>\n<!-- ============ 2. CIFRAS SNIES ============ -->\n<section class=\"ups-section\">\n<div class=\"ups-head\">\n<h2 class=\"ups-title\">Cifras SNIES<\/h2>\n<\/div>\n<div class=\"ups-panel ups-reveal\" data-chart=\"snies\" data-alt=\"Gr\u00e1fica de barras verticales: actividades de proyecci\u00f3n social por periodo\" data-soon=\"1\" data-empty=\"Aqu\u00ed se mostrar\u00e1 la gr\u00e1fica de actividades de proyecci\u00f3n social por periodo.\">\n<div class=\"ups-panel-head\">\n<div class=\"ups-icon\">\n<!-- ICONO: reemplaza el <svg> por <img decoding=\"async\" src=\"URL\" alt=\"\"> -->\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M2 12h20\"\/><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\/><\/svg>\n<\/div>\n<div class=\"ups-body\">\n<h3 class=\"ups-name\">Actividades de proyecci\u00f3n social por periodo<\/h3>\n<p class=\"ups-sub\">Actividades reportadas por periodo.<\/p>\n<\/div>\n<\/div>\n<div class=\"ups-chips\" role=\"group\" aria-label=\"Series a mostrar\"><\/div>\n<div class=\"ups-chart\"><p class=\"ups-empty\">Cargando datos\u2026<\/p><\/div>\n<\/div>\n<\/section>\n<!-- ============ 3. EVENTOS DE EXTENSI\u00d3N ============ -->\n<section class=\"ups-section\">\n<div class=\"ups-head\">\n<h2 class=\"ups-title\">Eventos de extensi\u00f3n<\/h2>\n<\/div>\n<div class=\"ups-panel ups-reveal\" data-events>\n<div class=\"ups-panel-head\">\n<div class=\"ups-icon\">\n<!-- ICONO: reemplaza el <svg> por <img decoding=\"async\" src=\"URL\" alt=\"\"> -->\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><path d=\"M16 2v4\"\/><path d=\"M8 2v4\"\/><path d=\"M3 10h18\"\/><\/svg>\n<\/div>\n<div class=\"ups-body\">\n<h3 class=\"ups-name\">Participantes por evento y periodo<\/h3>\n<p class=\"ups-sub\">N\u00famero de participantes de cada evento. Filtra por periodo.<\/p>\n<\/div>\n<\/div>\n<div class=\"ups-chips\" role=\"group\" aria-label=\"Periodo\"><\/div>\n<div class=\"ups-bars\"><p class=\"ups-empty\">Cargando datos\u2026<\/p><\/div>\n<div class=\"ups-strip\" style=\"display:none\"><\/div>\n<\/div>\n<\/section>\n<\/div>\n<script>\n(function () {\n  var root = document.querySelector('.ups-wrap');\n  if (!root) { return; }\n  root.className += ' ups-js';\n  var API_KEY = 'AIzaSyBnk4I7IbLq1GV4wVuIypF6lAXijdVknSw';\n  \/* Hoja \"Cifras proyeccion social\": una pestana por eje (KPI en A1:B4 y tabla A\u00d1O \/ POBLACION BENEFICIADA \/ PROYECTOS EJECUTADOS desde la fila 6)\n     mas las pestanas snies_proyeccion y eventos_extension. EJES_TABS vacio = todas las pestanas de eje, en su orden. *\/\n  var EJES_SHEET_ID = '1Avp_1WGgfZ3h7yLCmyPVGzKhYtZS2Wd1ibOZfWO8-wQ';\n  var EJES_TABS = [];\n  var NO_EJE = { sniesproyeccion: 1, eventosextension: 1, leeme: 1 };\n  var ALIAS = { rsu: 'RSU \u2013 Responsabilidad Social Universitaria' };\n  var BASE = 'https:\/\/sheets.googleapis.com\/v4\/spreadsheets\/';\n  var TOTAL_COLOR = '#33475B';\n  var PAL = ['#33475B', '#20b49c', '#b9c5d1', '#e0a458', '#7f97ad', '#b5523b'];\n  var TXT = ['#ffffff', '#1c2430', '#1c2430', '#1c2430', '#ffffff', '#ffffff'];\n  \/* ---------- utilidades ---------- *\/\n  function toNum(v) {\n    if (typeof v === 'number') { return v; }\n    if (v === undefined || v === null || v === '') { return null; }\n    var s = String(v).replace(\/[^\\d,.\\-]\/g, '');\n    if (s.indexOf(',') > -1) { s = s.replace(\/\\.\/g, '').replace(',', '.'); }\n    else if ((s.match(\/\\.\/g) || []).length > 1) { s = s.replace(\/\\.\/g, ''); }\n    var n = parseFloat(s);\n    return isNaN(n) ? null : n;\n  }\n  function fmt(n) {\n    var neg = n < 0, a = Math.abs(n);\n    var s = (Math.floor(a) === a) ? String(a) : a.toFixed(2);\n    var p = s.split('.');\n    p[0] = p[0].replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, '.');\n    return (neg ? '-' : '') + p.join(',');\n  }\n  function esc(s) {\n    return String(s).replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;').replace(\/\"\/g, '&quot;');\n  }\n  function rowsOf(vr) {\n    var v = (vr && vr.values) || [];\n    if (v.length < 2) { return []; }\n    var h = [], out = [], r, c, o;\n    for (c = 0; c < v[0].length; c++) { h.push(String(v[0][c]).trim()); }\n    for (r = 1; r < v.length; r++) {\n      o = {};\n      for (c = 0; c < h.length; c++) { o[h[c]] = v[r][c]; }\n      out.push(o);\n    }\n    return out;\n  }\n  function setW(el, pct) { if (el) { el.style.setProperty('--w', Math.max(0, Math.min(100, pct)).toFixed(2) + '%'); } }\n  function hasIn(el) { return \/ ups-in( |$)\/.test(' ' + el.className + ' ') ; }\n  function addIn(el) { if (!hasIn(el)) { el.className += ' ups-in'; } }\n  function delIn(el) { el.className = (' ' + el.className + ' ').replace(\/ ups-in \/g, ' ').replace(\/^\\s+|\\s+$\/g, ''); }\n  \/* ---------- animacion al entrar en pantalla ---------- *\/\n  var reveals = root.querySelectorAll('.ups-reveal'), i;\n  var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  if (!('IntersectionObserver' in window) || reduce) {\n    for (i = 0; i < reveals.length; i++) { addIn(reveals[i]); }\n  } else {\n    var io = new IntersectionObserver(function (entries) {\n      for (var n = 0; n < entries.length; n++) {\n        if (entries[n].isIntersecting) { addIn(entries[n].target); io.unobserve(entries[n].target); }\n      }\n    }, { threshold: 0.15 });\n    for (i = 0; i < reveals.length; i++) { io.observe(reveals[i]); }\n  }\n  \/* ---------- 2. Estudiantes y graduados (pestana estudiantes_graduados) ---------- *\/\n  function buildModel(rows, kind) {\n    var periods = [], programs = [], vals = [], seenP = {}, seenG = {}, r, o, t, per, prog, v, pi, k;\n    for (r = 0; r < rows.length; r++) {\n      o = rows[r];\n      t = String(o.tipo === undefined ? '' : o.tipo).toLowerCase().replace(\/[^a-z]\/g, '');\n      if (t.indexOf(kind) !== 0) { continue; }\n      per = (o.periodo === undefined || o.periodo === null) ? '' : String(o.periodo).trim();\n      prog = (o.programa === undefined || o.programa === null) ? '' : String(o.programa).trim();\n      v = toNum(o.cifra);\n      if (!per || !prog || v === null) { continue; }\n      if (!seenP['p' + per]) { seenP['p' + per] = true; periods.push(per); }\n      if (seenG['g' + prog] === undefined) { seenG['g' + prog] = programs.length; programs.push(prog); vals.push({}); }\n      pi = seenG['g' + prog];\n      k = 'p' + per;\n      vals[pi][k] = (vals[pi][k] || 0) + v;\n    }\n    periods.sort(function (a, b) { return a.localeCompare(b, undefined, { numeric: true }); });\n    var total = {}, p2, s, any;\n    for (r = 0; r < periods.length; r++) {\n      s = 0; any = false;\n      for (p2 = 0; p2 < programs.length; p2++) {\n        v = vals[p2]['p' + periods[r]];\n        if (v !== undefined) { s += v; any = true; }\n      }\n      if (any) { total['p' + periods[r]] = s; }\n    }\n    return { periods: periods, programs: programs, vals: vals, total: total };\n  }\n  function get(obj, per) { var v = obj['p' + per]; return v === undefined ? null : v; }\n  function niceScale(mx) {\n    if (mx <= 0) { return { top: 4, step: 1 }; }\n    var raw = mx \/ 4, e = Math.pow(10, Math.floor(Math.log(raw) \/ Math.LN10)), f = raw \/ e;\n    var nf = f <= 1 ? 1 : f <= 2 ? 2 : f <= 5 ? 5 : 10;\n    var step = Math.max(1, nf * e);\n    return { top: Math.ceil(mx \/ step) * step, step: step };\n  }\n  function Chart(panel, type, opts) {\n    opts = opts || {};\n    var el = panel.querySelector('.ups-chart'), chipsEl = panel.querySelector('.ups-chips');\n    var tip = document.createElement('div'); tip.className = 'ups-tip'; tip.setAttribute('role', 'status');\n    var model = null, useTotal = true, sel = [], lastW = 0;\n    function series() {\n      var list = [], j;\n      if (opts.only) { return [{ name: opts.label || 'Total', color: opts.color || TOTAL_COLOR, text: '#ffffff', obj: model.total }]; }\n      if (useTotal) { list.push({ name: 'Total', color: TOTAL_COLOR, obj: model.total }); }\n      for (j = 0; j < model.programs.length; j++) {\n        if (sel[j]) { list.push({ name: model.programs[j], color: PAL[j % PAL.length], text: TXT[j % TXT.length], obj: model.vals[j] }); }\n      }\n      return list;\n    }\n    function draw(animate) {\n      if (!model || !model.periods.length) { return; }\n      var list = series(), P = model.periods, n = P.length, m = list.length, a, b, s, v;\n      var W = Math.max(280, el.clientWidth), H = W < 520 ? 300 : 360, mx = 0;\n      if (type === 'stack') {\n        for (b = 0; b < n; b++) {\n          s = 0;\n          for (a = 0; a < m; a++) { v = get(list[a].obj, P[b]); if (v !== null) { s += v; } }\n          if (s > mx) { mx = s; }\n        }\n      } else {\n        for (a = 0; a < m; a++) { for (b = 0; b < n; b++) { v = get(list[a].obj, P[b]); if (v !== null && v > mx) { mx = v; } } }\n      }\n      var sc = niceScale(mx);\n      var left = Math.max(46, 22 + fmt(sc.top).length * 9), right = 14, top = 32, bottom = 48;\n      var pw = W - left - right, ph = H - top - bottom, out = [];\n      out.push('<svg viewBox=\"0 0 ' + W + ' ' + H + '\" width=\"' + W + '\" height=\"' + H + '\" role=\"img\" aria-label=\"' + esc(panel.getAttribute('data-alt') || 'Gr\u00e1fica') + '\">');\n      var tv, y;\n      for (tv = 0; tv <= sc.top + 0.0001; tv += sc.step) {\n        y = top + ph - (tv \/ sc.top) * ph;\n        out.push('<line class=\"' + (tv === 0 ? 'ups-axis' : 'ups-gl') + '\" x1=\"' + left + '\" x2=\"' + (W - right) + '\" y1=\"' + y.toFixed(1) + '\" y2=\"' + y.toFixed(1) + '\"\/>');\n        out.push('<text class=\"ups-tick\" x=\"' + (left - 10) + '\" y=\"' + (y + 5).toFixed(1) + '\" text-anchor=\"end\">' + fmt(tv) + '<\/text>');\n      }\n      var gw = pw \/ n, maxLen = 0, k, x, lblW = fmt(mx).length * 9 + 8;\n      for (b = 0; b < n; b++) { if (P[b].length > maxLen) { maxLen = P[b].length; } }\n      var every = Math.max(1, Math.ceil((maxLen * 9 + 14) \/ gw));\n      for (b = 0; b < n; b++) {\n        if (b % every === 0) {\n          x = left + gw * (b + 0.5);\n          out.push('<text class=\"ups-xl\" x=\"' + x.toFixed(1) + '\" y=\"' + (top + ph + 30) + '\" text-anchor=\"middle\">' + esc(P[b]) + '<\/text>');\n        }\n      }\n      if (type === 'bars') {\n        var gap = 4, bw = Math.min(56, (gw * 0.74 - (m - 1) * gap) \/ m);\n        if (bw < 3) { bw = 3; }\n        var gwid = m * bw + (m - 1) * gap;\n        var labelsOk = (m === 1) ? gw >= lblW : bw >= lblW - 2;\n        for (b = 0; b < n; b++) {\n          for (a = 0; a < m; a++) {\n            v = get(list[a].obj, P[b]);\n            if (v === null) { continue; }\n            var h = (v \/ sc.top) * ph, bx = left + b * gw + (gw - gwid) \/ 2 + a * (bw + gap), by = top + ph - h;\n            out.push('<rect class=\"ups-bar ups-hit\" tabindex=\"0\" x=\"' + bx.toFixed(1) + '\" y=\"' + by.toFixed(1) + '\" width=\"' + bw.toFixed(1) + '\" height=\"' + Math.max(h, 0).toFixed(1) + '\" rx=\"2\" fill=\"' + list[a].color + '\" style=\"--i:' + b + '\" data-v=\"' + esc(fmt(v)) + '\" data-t=\"' + esc(P[b] + ' \u00b7 ' + list[a].name) + '\" aria-label=\"' + esc(P[b] + ', ' + list[a].name + ': ' + fmt(v)) + '\"\/>');\n            if (m === 1 || labelsOk) {\n              out.push('<text class=\"ups-vlabel ups-pt\" x=\"' + (bx + bw \/ 2).toFixed(1) + '\" y=\"' + (by - 8).toFixed(1) + '\" text-anchor=\"middle\">' + fmt(v) + '<\/text>');\n            }\n          }\n        }\n      } else if (type === 'stack') {\n        var sbw = Math.min(64, gw * 0.72);\n        for (b = 0; b < n; b++) {\n          var acc = 0, sx = left + gw * b + (gw - sbw) \/ 2;\n          for (a = 0; a < m; a++) {\n            v = get(list[a].obj, P[b]);\n            if (v === null) { continue; }\n            var sh = (v \/ sc.top) * ph, sy = top + ph - ((acc + v) \/ sc.top) * ph;\n            acc += v;\n            out.push('<rect class=\"ups-bar ups-hit\" tabindex=\"0\" x=\"' + sx.toFixed(1) + '\" y=\"' + sy.toFixed(1) + '\" width=\"' + sbw.toFixed(1) + '\" height=\"' + Math.max(sh, 0).toFixed(1) + '\" fill=\"' + list[a].color + '\" stroke=\"#fff\" stroke-width=\"1.5\" style=\"--i:' + b + '\" data-v=\"' + esc(fmt(v)) + '\" data-t=\"' + esc(P[b] + ' \u00b7 ' + list[a].name) + '\" aria-label=\"' + esc(P[b] + ', ' + list[a].name + ': ' + fmt(v)) + '\"\/>');\n            if (sh >= 22 && sbw >= fmt(v).length * 9 + 8) {\n              out.push('<text class=\"ups-slabel ups-pt\" x=\"' + (sx + sbw \/ 2).toFixed(1) + '\" y=\"' + (sy + sh \/ 2 + 5).toFixed(1) + '\" text-anchor=\"middle\" fill=\"' + list[a].text + '\">' + fmt(v) + '<\/text>');\n            }\n          }\n        }\n      } else {\n        for (a = 0; a < m; a++) {\n          var d = '', pen = false, pts = [];\n          for (b = 0; b < n; b++) {\n            v = get(list[a].obj, P[b]);\n            if (v === null) { pen = false; continue; }\n            var px = left + gw * (b + 0.5), py = top + ph - (v \/ sc.top) * ph;\n            d += (pen ? 'L' : 'M') + px.toFixed(1) + ' ' + py.toFixed(1) + ' ';\n            pen = true;\n            pts.push({ x: px, y: py, v: v, per: P[b], b: b });\n          }\n          if (opts.area && pts.length > 1) {\n            var base0 = top + ph, run = [], r2, ad;\n            for (k = 0; k <= pts.length; k++) {\n              if (k < pts.length && (!run.length || pts[k].b === run[run.length - 1].b + 1)) { run.push(pts[k]); continue; }\n              if (run.length > 1) {\n                ad = 'M' + run[0].x.toFixed(1) + ' ' + base0 + ' ';\n                for (r2 = 0; r2 < run.length; r2++) { ad += 'L' + run[r2].x.toFixed(1) + ' ' + run[r2].y.toFixed(1) + ' '; }\n                ad += 'L' + run[run.length - 1].x.toFixed(1) + ' ' + base0 + ' Z';\n                out.push('<path class=\"ups-area\" d=\"' + ad + '\" fill=\"' + list[a].color + '\" fill-opacity=\"0.13\"\/>');\n              }\n              run = k < pts.length ? [pts[k]] : [];\n            }\n          }\n          out.push('<path class=\"ups-line\" pathLength=\"1\" d=\"' + d + '\" stroke=\"' + list[a].color + '\"\/>');\n          for (k = 0; k < pts.length; k++) {\n            out.push('<circle class=\"ups-hitarea\" cx=\"' + pts[k].x.toFixed(1) + '\" cy=\"' + pts[k].y.toFixed(1) + '\" r=\"16\" data-v=\"' + esc(fmt(pts[k].v)) + '\" data-t=\"' + esc(pts[k].per + ' \u00b7 ' + list[a].name) + '\"\/>');\n            out.push('<circle class=\"ups-pt ups-hit\" tabindex=\"0\" cx=\"' + pts[k].x.toFixed(1) + '\" cy=\"' + pts[k].y.toFixed(1) + '\" r=\"5\" fill=\"#fff\" stroke=\"' + list[a].color + '\" stroke-width=\"2.5\" data-v=\"' + esc(fmt(pts[k].v)) + '\" data-t=\"' + esc(pts[k].per + ' \u00b7 ' + list[a].name) + '\" aria-label=\"' + esc(pts[k].per + ', ' + list[a].name + ': ' + fmt(pts[k].v)) + '\"\/>');\n            if (m === 1 && gw >= lblW) {\n              var valley = (k > 0 || k < pts.length - 1) && (k === 0 || pts[k].v < pts[k - 1].v) && (k === pts.length - 1 || pts[k].v < pts[k + 1].v);\n              var ly = (valley && pts[k].y + 26 < top + ph - 6) ? pts[k].y + 26 : pts[k].y - 14;\n              out.push('<text class=\"ups-vlabel ups-pt\" x=\"' + pts[k].x.toFixed(1) + '\" y=\"' + ly.toFixed(1) + '\" text-anchor=\"middle\">' + fmt(pts[k].v) + '<\/text>');\n            }\n          }\n        }\n      }\n      out.push('<\/svg>');\n      var wasIn = hasIn(panel);\n      if (animate && wasIn) { delIn(panel); }\n      el.innerHTML = out.join('');\n      el.appendChild(tip);\n      lastW = el.clientWidth;\n      if (animate && wasIn) {\n        void el.offsetWidth;\n        window.requestAnimationFrame(function () { addIn(panel); });\n      }\n    }\n    function drawChips() {\n      var h = [], j;\n      if (!opts.stack && !opts.only) {\n        h.push('<button type=\"button\" class=\"ups-chip\" data-i=\"-1\" aria-pressed=\"' + (useTotal ? 'true' : 'false') + '\"><span class=\"ups-dot\" style=\"--c:' + TOTAL_COLOR + '\"><\/span>Total<\/button>');\n      }\n      for (j = 0; j < model.programs.length; j++) {\n        h.push('<button type=\"button\" class=\"ups-chip\" data-i=\"' + j + '\" aria-pressed=\"' + (sel[j] ? 'true' : 'false') + '\"><span class=\"ups-dot\" style=\"--c:' + PAL[j % PAL.length] + '\"><\/span>' + esc(model.programs[j]) + '<\/button>');\n      }\n      chipsEl.innerHTML = h.join('');\n    }\n    function buildTable() {\n      var host = panel.querySelector('.ups-table-wrap');\n      if (!host) { return; }\n      var P = model.periods, h = ['<table class=\"ups-table\"><thead><tr><th>' + esc(panel.getAttribute('data-rowlabel') || 'Programa') + '<\/th>'], a, b, v;\n      for (b = 0; b < P.length; b++) { h.push('<th>' + esc(P[b]) + '<\/th>'); }\n      h.push('<\/tr><\/thead><tbody>');\n      for (a = 0; a < model.programs.length; a++) {\n        h.push('<tr><td>' + esc(model.programs[a]) + '<\/td>');\n        for (b = 0; b < P.length; b++) { v = get(model.vals[a], P[b]); h.push('<td>' + (v === null ? '\u2014' : fmt(v)) + '<\/td>'); }\n        h.push('<\/tr>');\n      }\n      h.push('<tr><td>Total<\/td>');\n      for (b = 0; b < P.length; b++) { v = get(model.total, P[b]); h.push('<td>' + (v === null ? '\u2014' : fmt(v)) + '<\/td>'); }\n      h.push('<\/tr><\/tbody><\/table>');\n      host.innerHTML = h.join('');\n    }\n    function showTip(t) {\n      var cr = el.getBoundingClientRect(), r = t.getBoundingClientRect();\n      tip.innerHTML = '<b>' + t.getAttribute('data-v') + '<\/b>' + t.getAttribute('data-t');\n      tip.className = 'ups-tip ups-on';\n      var w = tip.offsetWidth, x = r.left + r.width \/ 2 - cr.left;\n      x = Math.max(w \/ 2, Math.min(cr.width - w \/ 2, x));\n      tip.style.left = x + 'px';\n      tip.style.top = (r.top - cr.top - 8) + 'px';\n    }\n    function hideTip() { tip.className = 'ups-tip'; }\n    function hitOf(e) {\n      var t = e.target;\n      return t && t.getAttribute && t.getAttribute('data-t') ? t : null;\n    }\n    el.addEventListener('mouseover', function (e) { var t = hitOf(e); if (t) { showTip(t); } });\n    el.addEventListener('mouseout', function (e) { if (hitOf(e)) { hideTip(); } });\n    el.addEventListener('focusin', function (e) { var t = hitOf(e); if (t) { showTip(t); } });\n    el.addEventListener('focusout', hideTip);\n    el.addEventListener('click', function (e) { var t = hitOf(e); if (t) { showTip(t); } else { hideTip(); } });\n    chipsEl.addEventListener('click', function (e) {\n      var btn = e.target;\n      while (btn && btn !== chipsEl && !(btn.getAttribute && btn.getAttribute('data-i') !== null)) { btn = btn.parentNode; }\n      if (!btn || btn === chipsEl) { return; }\n      var j = parseInt(btn.getAttribute('data-i'), 10), count = useTotal ? 1 : 0, q;\n      for (q = 0; q < sel.length; q++) { if (sel[q]) { count++; } }\n      if (j === -1) { if (useTotal && count === 1) { return; } useTotal = !useTotal; }\n      else { if (sel[j] && count === 1) { return; } sel[j] = !sel[j]; }\n      drawChips(); hideTip(); draw(true);\n    });\n    function onResize() {\n      if (model && Math.abs(el.clientWidth - lastW) > 1) { hideTip(); draw(false); }\n    }\n    if (window.ResizeObserver) { new ResizeObserver(onResize).observe(el); }\n    else { window.addEventListener('resize', onResize); }\n    this.setModel = function (mdl, animate) {\n      var q;\n      model = mdl; sel = []; useTotal = true;\n      if (!model.periods.length) {\n        var soon = panel.getAttribute('data-soon');\n        el.innerHTML = '<p class=\"ups-empty' + (soon ? ' ups-soon' : '') + '\">' + (soon ? '<span class=\"ups-badge\">Pr\u00f3ximamente<\/span>' : '') + esc(panel.getAttribute('data-empty') || 'A\u00fan no hay datos disponibles.') + '<\/p>';\n        chipsEl.innerHTML = '';\n        var det0 = panel.querySelector('details'); if (det0) { det0.style.display = 'none'; }\n        return;\n      }\n      if (opts.all || opts.only) {\n        useTotal = !!opts.only;\n        for (q = 0; q < model.programs.length; q++) { sel.push(true); }\n      }\n      var single = model.programs.length <= 1 || !!opts.only, det = panel.querySelector('details');\n      chipsEl.style.display = single ? 'none' : '';\n      if (det) { det.style.display = single ? 'none' : ''; }\n      drawChips(); buildTable(); draw(!!animate);\n    };\n    this.fail = function () {\n      el.innerHTML = '<p class=\"ups-empty\">No fue posible cargar los datos en este momento.<\/p>';\n      chipsEl.innerHTML = '';\n      var det = panel.querySelector('details'); if (det) { det.style.display = 'none'; }\n    };\n  }\n  \/* ---------- lectura ---------- *\/\n  function norm(x) {\n    var t = (x === undefined || x === null) ? '' : String(x).toLowerCase().replace(\/\u00f1\/g, 'n');\n    if (t.normalize) { t = t.normalize('NFD').replace(\/[\\u0300-\\u036f]\/g, ''); }\n    return t.replace(\/[^a-z0-9]\/g, '');\n  }\n  function clean(x) { return (x === undefined || x === null) ? '' : String(x).replace(\/\\s+\/g, ' ').replace(\/^\\s+|\\s+$\/g, ''); }\n  function gridOf(vr) { return (vr && vr.values) || []; }\n  \/* names: cada elemento es un titulo o una lista de titulos equivalentes; el objeto resultante usa el primero. *\/\n  function tableFromGrid(grid, names) {\n    var r, c, key, cols, hdr = -1, out = [], o, any, k, ok, alts, prim, j;\n    for (r = 0; r < grid.length && hdr < 0; r++) {\n      cols = {};\n      for (c = 0; c < grid[r].length; c++) {\n        key = norm(grid[r][c]);\n        for (k = 0; k < names.length; k++) {\n          alts = typeof names[k] === 'string' ? [names[k]] : names[k];\n          for (j = 0; j < alts.length; j++) { if (key === alts[j] && cols[alts[0]] === undefined) { cols[alts[0]] = c; } }\n        }\n      }\n      ok = true;\n      for (k = 0; k < names.length; k++) {\n        prim = typeof names[k] === 'string' ? names[k] : names[k][0];\n        if (cols[prim] === undefined) { ok = false; }\n      }\n      if (ok) { hdr = r; }\n    }\n    if (hdr < 0) { return []; }\n    for (r = hdr + 1; r < grid.length; r++) {\n      o = {}; any = false;\n      for (k = 0; k < names.length; k++) {\n        prim = typeof names[k] === 'string' ? names[k] : names[k][0];\n        o[prim] = grid[r][cols[prim]];\n        if (o[prim] !== undefined && o[prim] !== '') { any = true; }\n      }\n      if (any) { out.push(o); }\n    }\n    return out;\n  }\n  \/* Periodo como texto. Si Google Sheets convirtio \"2026-1\" en fecha (numero de serie), se recupera como \"2026-1\". *\/\n  function perStr(v) {\n    if (typeof v === 'number' && v >= 36526 && v <= 73050) {\n      var d = new Date(Date.UTC(1899, 11, 30) + Math.round(v) * 86400000);\n      return d.getUTCFullYear() + '-' + (d.getUTCMonth() + 1);\n    }\n    return clean(v);\n  }\n  \/* Tabla ancha: columna periodo + una columna por serie (hasta el primer titulo vacio). *\/\n  function wideRows(grid) {\n    var r, c, hdr = -1, c0 = -1, heads = [], out = [], k, v, per;\n    for (r = 0; r < grid.length && hdr < 0; r++) {\n      for (c = 0; c < grid[r].length; c++) { if (norm(grid[r][c]) === 'periodo') { hdr = r; c0 = c; break; } }\n    }\n    if (hdr < 0) { return []; }\n    for (c = c0 + 1; c < grid[hdr].length; c++) {\n      k = clean(grid[hdr][c]);\n      if (!k) { break; }\n      heads.push({ name: k, col: c });\n    }\n    for (r = hdr + 1; r < grid.length; r++) {\n      per = perStr(grid[r][c0]);\n      if (!per) { continue; }\n      for (k = 0; k < heads.length; k++) {\n        v = toNum(grid[r][heads[k].col]);\n        if (v !== null) { out.push({ tipo: '', periodo: per, programa: heads[k].name, cifra: v }); }\n      }\n    }\n    return out;\n  }\n  function replay(panel) {\n    var wasIn = hasIn(panel);\n    if (wasIn) { delIn(panel); void panel.offsetWidth; window.requestAnimationFrame(function () { addIn(panel); }); }\n  }\n  function delayedIn(panel) { replay(panel); }\n  \/* ---------- 1. Ejes de proyeccion social ---------- *\/\n  var chartPob = new Chart(root.querySelector('[data-chart=\"poblacion\"]'), 'lines', { only: true, area: true, color: '#20b49c', label: 'Poblaci\u00f3n beneficiada' });\n  var chartProy = new Chart(root.querySelector('[data-chart=\"proyectos\"]'), 'bars', { only: true, label: 'Proyectos ejecutados' });\n  function Ejes() {\n    var tabsEl = root.querySelector('.ups-tabs'), box = root.querySelector('[data-eje]'), soonEl = root.querySelector('[data-eje-soon]');\n    var titleEl = root.querySelector('.ups-eje-title'), list = [], cur = 0;\n    function kpi(id, v) {\n      var el = root.querySelector('.ups-kpi[data-kpi=\"' + id + '\"] .ups-kpi-n');\n      if (el) { el.textContent = v === null ? '\u2014' : fmt(v); }\n    }\n    function drawTabs() {\n      var h = [], i;\n      for (i = 0; i < list.length; i++) {\n        h.push('<button type=\"button\" class=\"ups-chip\" data-e=\"' + i + '\" aria-pressed=\"' + (i === cur ? 'true' : 'false') + '\">' + esc(list[i].name) +\n          (list[i].soon ? ' <span class=\"ups-badge\">Pr\u00f3ximamente<\/span>' : '') + '<\/button>');\n      }\n      tabsEl.innerHTML = h.join('');\n    }\n    function render(animate) {\n      var e = list[cur], i, years = [], rp = [], ry = [], sum = 0, ys;\n      if (e.soon) { box.style.display = 'none'; soonEl.style.display = ''; return; }\n      soonEl.style.display = 'none'; box.style.display = '';\n      titleEl.textContent = e.name;\n      for (ys in e.years) { if (e.years.hasOwnProperty(ys)) { years.push(ys.substring(1)); } }\n      years.sort(function (a, b) { return a - b; });\n      for (i = 0; i < years.length; i++) {\n        var y = e.years['y' + years[i]];\n        if (y.ben !== null) { rp.push({ tipo: '', periodo: years[i], programa: 'x', cifra: y.ben }); sum += y.ben; }\n        if (y.proy !== null) { ry.push({ tipo: '', periodo: years[i], programa: 'x', cifra: y.proy }); }\n      }\n      kpi('formulados', e.formulados);\n      kpi('beneficiados', e.beneficiados !== null ? e.beneficiados : (rp.length ? sum : null));\n      kpi('voluntarios', e.voluntarios);\n      chartPob.setModel(buildModel(rp, ''), animate);\n      chartProy.setModel(buildModel(ry, ''), animate);\n    }\n    tabsEl.addEventListener('click', function (ev) {\n      var b = ev.target;\n      while (b && b !== tabsEl && !(b.getAttribute && b.getAttribute('data-e') !== null)) { b = b.parentNode; }\n      if (!b || b === tabsEl) { return; }\n      cur = parseInt(b.getAttribute('data-e'), 10);\n      drawTabs(); render(true);\n    });\n    this.setList = function (items) {\n      list = items; cur = 0;\n      if (!list.length) { this.empty(); return; }\n      root.querySelector('[data-eje-msg]').innerHTML = '';\n      drawTabs(); render(false);\n    };\n    this.empty = function () {\n      tabsEl.innerHTML = ''; soonEl.style.display = 'none'; box.style.display = 'none';\n      root.querySelector('[data-eje-msg]').innerHTML = '<p class=\"ups-empty\">A\u00fan no hay datos disponibles.<\/p>';\n    };\n    this.fail = function () {\n      tabsEl.innerHTML = ''; soonEl.style.display = 'none'; box.style.display = 'none';\n      root.querySelector('[data-eje-msg]').innerHTML = '<p class=\"ups-empty\">No fue posible cargar los datos en este momento.<\/p>';\n    };\n  }\n  \/* ---------- 2. Cifras SNIES (espacio de referencia) ---------- *\/\n  var chartS = new Chart(root.querySelector('[data-chart=\"snies\"]'), 'bars', { all: true });\n  \/* ---------- 3. Eventos de extension ---------- *\/\n  function Events(panel) {\n    var chipsEl = panel.querySelector('.ups-chips'), bars = panel.querySelector('.ups-bars'), strip = panel.querySelector('.ups-strip');\n    var items = [], periods = [], cur = '';\n    function drawChips() {\n      var h = ['<button type=\"button\" class=\"ups-chip\" data-p=\"\" aria-pressed=\"' + (cur === '' ? 'true' : 'false') + '\">Todos<\/button>'], i;\n      for (i = 0; i < periods.length; i++) {\n        h.push('<button type=\"button\" class=\"ups-chip\" data-p=\"' + esc(periods[i]) + '\" aria-pressed=\"' + (cur === periods[i] ? 'true' : 'false') + '\">' + esc(periods[i]) + '<\/button>');\n      }\n      chipsEl.innerHTML = h.join('');\n    }\n    function render(animate) {\n      var vis = [], i, mx = 0, total = 0, h = [];\n      for (i = 0; i < items.length; i++) { if (cur === '' || items[i].per === cur) { vis.push(items[i]); } }\n      for (i = 0; i < vis.length; i++) { if (vis[i].n > mx) { mx = vis[i].n; } total += vis[i].n; }\n      var wasIn = hasIn(panel);\n      if (animate && wasIn) { delIn(panel); }\n      for (i = 0; i < vis.length; i++) {\n        h.push('<div class=\"ups-row\" style=\"--i:' + i + '\"><div class=\"ups-row-top\"><span class=\"ups-label\">' + esc(vis[i].ev) +\n          ' <span class=\"ups-pill\">' + esc(vis[i].per) + '<\/span><\/span><span class=\"ups-val\">' + fmt(vis[i].n) + '<\/span><\/div>' +\n          '<div class=\"ups-track\"><div class=\"ups-fill\" style=\"--w:' + (mx ? (vis[i].n \/ mx * 100).toFixed(2) : 0) + '%\"><\/div><\/div><\/div>');\n      }\n      bars.innerHTML = vis.length ? h.join('') : '<p class=\"ups-empty\">No hay eventos para este periodo.<\/p>';\n      strip.innerHTML = '<div class=\"ups-tile\"><span class=\"ups-tile-num\">' + fmt(vis.length) + '<\/span><span class=\"ups-tile-lbl\">' + (vis.length === 1 ? 'Evento' : 'Eventos') + '<\/span><\/div>' +\n        '<div class=\"ups-tile\"><span class=\"ups-tile-num\">' + fmt(total) + '<\/span><span class=\"ups-tile-lbl\">Participantes en total<\/span><\/div>';\n      strip.style.display = '';\n      if (animate && wasIn) { void panel.offsetWidth; window.requestAnimationFrame(function () { addIn(panel); }); }\n    }\n    chipsEl.addEventListener('click', function (ev) {\n      var b = ev.target;\n      while (b && b !== chipsEl && !(b.getAttribute && b.getAttribute('data-p') !== null)) { b = b.parentNode; }\n      if (!b || b === chipsEl) { return; }\n      cur = b.getAttribute('data-p');\n      drawChips(); render(true);\n    });\n    this.setRows = function (rows) {\n      var i, seen = {}, per, ev, n;\n      items = []; periods = []; cur = '';\n      for (i = 0; i < rows.length; i++) {\n        per = clean(rows[i].periodo); ev = clean(rows[i].evento); n = toNum(rows[i].participantes);\n        if (!per || !ev || n === null) { continue; }\n        items.push({ per: per, ev: ev, n: n, ord: i });\n        if (!seen['p' + per]) { seen['p' + per] = true; periods.push(per); }\n      }\n      periods.sort(function (a, b) { return b.localeCompare(a, undefined, { numeric: true }); });\n      items.sort(function (a, b) { var c = b.per.localeCompare(a.per, undefined, { numeric: true }); return c !== 0 ? c : a.ord - b.ord; });\n      if (!items.length) {\n        chipsEl.innerHTML = ''; strip.style.display = 'none';\n        bars.innerHTML = '<p class=\"ups-empty\">A\u00fan no hay datos disponibles.<\/p>';\n        return;\n      }\n      drawChips(); render(false);\n    };\n    this.fail = function () {\n      chipsEl.innerHTML = ''; strip.style.display = 'none';\n      bars.innerHTML = '<p class=\"ups-empty\">No fue posible cargar los datos en este momento.<\/p>';\n    };\n  }\n  var ejes = new Ejes();\n  var events = new Events(root.querySelector('[data-events]'));\n  \/* ---------- carga (cada seccion es independiente y registra su propio error) ---------- *\/\n  function getJson(url) {\n    return fetch(url).then(function (r) {\n      if (r.ok) { return r.json(); }\n      return r.json().then(function (j) {\n        throw new Error('HTTP ' + r.status + (j && j.error && j.error.message ? ': ' + j.error.message : ''));\n      }, function () { throw new Error('HTTP ' + r.status); });\n    });\n  }\n  function warn(what, e) { if (window.console) { console.warn('[Proyecci\u00f3n social] No se pudo cargar ' + what + ':', e); } }\n  function parseEje(title, grid) {\n    var e = { name: ALIAS[norm(title)] || title, soon: false, formulados: null, beneficiados: null, voluntarios: null, years: {} };\n    var r, c, key, v, i, n = 0;\n    for (r = 0; r < grid.length; r++) {\n      for (c = 0; c < grid[r].length; c++) {\n        key = norm(grid[r][c]);\n        if (key === 'proyectosformulados') { v = toNum(grid[r][c + 1]); if (v !== null) { e.formulados = v; n++; } }\n        else if (key === 'beneficiados') { v = toNum(grid[r][c + 1]); if (v !== null) { e.beneficiados = v; n++; } }\n        else if (key === 'voluntariosparticipantes') { v = toNum(grid[r][c + 1]); if (v !== null) { e.voluntarios = v; n++; } }\n      }\n    }\n    var rows = tableFromGrid(grid, ['ano', 'poblacionbeneficiada', 'proyectosejecutados']), y;\n    for (i = 0; i < rows.length; i++) {\n      y = toNum(rows[i].ano);\n      if (y === null) { continue; }\n      e.years['y' + y] = { ben: toNum(rows[i].poblacionbeneficiada), proy: toNum(rows[i].proyectosejecutados) };\n      n++;\n    }\n    e.soon = n === 0;\n    return e;\n  }\n  function quoteTab(t) { return \"'\" + t.replace(\/'\/g, \"''\") + \"'!A:C\"; }\n  function loadEjes() {\n    if (!window.fetch) { ejes.fail(); return; }\n    var titles = EJES_TABS.length ? Promise.resolve(EJES_TABS) :\n      getJson(BASE + EJES_SHEET_ID + '?fields=sheets.properties.title&key=' + API_KEY).then(function (j) {\n        var out = [], i, t;\n        for (i = 0; i < (j.sheets || []).length; i++) {\n          t = j.sheets[i].properties && j.sheets[i].properties.title;\n          if (t && t.charAt(0) !== '_' && !NO_EJE[norm(t)]) { out.push(t); }\n        }\n        return out;\n      });\n    titles.then(function (names) {\n      if (!names.length) { return []; }\n      var url = BASE + EJES_SHEET_ID + '\/values:batchGet?', i;\n      for (i = 0; i < names.length; i++) { url += 'ranges=' + encodeURIComponent(quoteTab(names[i])) + '&'; }\n      url += 'valueRenderOption=UNFORMATTED_VALUE&key=' + API_KEY;\n      return getJson(url).then(function (j) {\n        var vr = j.valueRanges || [], out = [], q;\n        for (q = 0; q < names.length; q++) { out.push(parseEje(names[q], gridOf(vr[q]))); }\n        return out;\n      });\n    }).then(function (list) {\n      ejes.setList(list);\n    }).catch(function (e) { warn('los ejes', e); ejes.fail(); });\n  }\n  function tabValues(tab) {\n    return getJson(BASE + EJES_SHEET_ID + '\/values:batchGet?ranges=' + encodeURIComponent(tab + '!A:Z') + '&valueRenderOption=UNFORMATTED_VALUE&key=' + API_KEY).then(function (j) {\n      return gridOf((j.valueRanges || [])[0]);\n    });\n  }\n  function loadSnies() {\n    if (!window.fetch) { chartS.fail(); return; }\n    tabValues('snies_proyeccion').then(function (grid) {\n      var sn = tableFromGrid(grid, ['periodo', ['actividad', 'tipodeactividad', 'tipo'], ['cifra', 'cantidad', 'total']]), rows = [], i;\n      for (i = 0; i < sn.length; i++) { rows.push({ tipo: '', periodo: perStr(sn[i].periodo), programa: sn[i].actividad, cifra: sn[i].cifra }); }\n      if (!rows.length) { rows = wideRows(grid); }\n      chartS.setModel(buildModel(rows, ''));\n    }).catch(function (e) { warn('las cifras SNIES', e); chartS.fail(); });\n  }\n  function loadEvents() {\n    if (!window.fetch) { events.fail(); return; }\n    tabValues('eventos_extension').then(function (grid) {\n      var rows = tableFromGrid(grid, ['periodo', ['evento', 'nombreevento', 'nombre'], ['participantes', 'noparticipantes', 'numeroparticipantes', 'nparticipantes']]), i;\n      for (i = 0; i < rows.length; i++) { rows[i].periodo = perStr(rows[i].periodo); }\n      events.setRows(rows);\n    }).catch(function (e) { warn('los eventos', e); events.fail(); });\n  }\n  loadEjes(); loadSnies(); loadEvents();\n})();\n<\/script>\n\t\t<\/div>\n\t<\/div>\n\n\t\t<\/div> \n\t<\/div><\/div><\/div><\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"Ejes de proyecci\u00f3n social Proyectos, poblaci\u00f3n beneficiada y voluntarios por eje. Proyectos formulados \u2014 Beneficiados \u2014 Voluntarios participantes \u2014 Poblaci\u00f3n beneficiada Personas beneficiadas por a\u00f1o. Cargando datos\u2026 Proyectos ejecutados Proyectos [...]","protected":false},"author":13,"featured_media":96307,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-101178","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PROYECCI\u00d3N SOCIAL Y EXTENSI\u00d3N - Uninavarra<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/uninavarra.edu.co\/en\/cifras-proyeccion-social-y-extension\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PROYECCI\u00d3N SOCIAL Y EXTENSI\u00d3N - Uninavarra\" \/>\n<meta property=\"og:url\" content=\"https:\/\/uninavarra.edu.co\/en\/cifras-proyeccion-social-y-extension\/\" \/>\n<meta property=\"og:site_name\" content=\"Uninavarra\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/UninavarraEduca\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-18T22:11:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/uninavarra.edu.co\/wp-content\/uploads\/2026\/01\/banner-uninavarra-en-cifras.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2500\" \/>\n\t<meta property=\"og:image:height\" content=\"326\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@uninavarraeduca\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/cifras-proyeccion-social-y-extension\\\/\",\"url\":\"https:\\\/\\\/uninavarra.edu.co\\\/cifras-proyeccion-social-y-extension\\\/\",\"name\":\"PROYECCI\u00d3N SOCIAL Y EXTENSI\u00d3N - Uninavarra\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/cifras-proyeccion-social-y-extension\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/cifras-proyeccion-social-y-extension\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/uninavarra.edu.co\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/banner-uninavarra-en-cifras.jpg\",\"datePublished\":\"2026-09-18T14:30:28+00:00\",\"dateModified\":\"2026-09-18T22:11:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/cifras-proyeccion-social-y-extension\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/uninavarra.edu.co\\\/cifras-proyeccion-social-y-extension\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/cifras-proyeccion-social-y-extension\\\/#primaryimage\",\"url\":\"https:\\\/\\\/uninavarra.edu.co\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/banner-uninavarra-en-cifras.jpg\",\"contentUrl\":\"https:\\\/\\\/uninavarra.edu.co\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/banner-uninavarra-en-cifras.jpg\",\"width\":2500,\"height\":326},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/cifras-proyeccion-social-y-extension\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/uninavarra.edu.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PROYECCI\u00d3N SOCIAL Y EXTENSI\u00d3N\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/#website\",\"url\":\"https:\\\/\\\/uninavarra.edu.co\\\/\",\"name\":\"UNINAVARRA\",\"description\":\"Haz realidad tu deseo de aprender\",\"publisher\":{\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/uninavarra.edu.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/#organization\",\"name\":\"Fundaci\u00f3n Universitaria Navarra - UNINAVARRA\",\"url\":\"https:\\\/\\\/uninavarra.edu.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/uninavarra.edu.co\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Escudo-uninavarra-Solo.png\",\"contentUrl\":\"https:\\\/\\\/uninavarra.edu.co\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Escudo-uninavarra-Solo.png\",\"width\":1500,\"height\":1401,\"caption\":\"Fundaci\u00f3n Universitaria Navarra - UNINAVARRA\"},\"image\":{\"@id\":\"https:\\\/\\\/uninavarra.edu.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/UninavarraEduca\",\"https:\\\/\\\/x.com\\\/uninavarraeduca\",\"https:\\\/\\\/www.instagram.com\\\/uninavarra\\\/?hl=es\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/fundacin-universitaria-navarra-uninavarra-b41225222\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PROYECCI\u00d3N SOCIAL Y EXTENSI\u00d3N - Uninavarra","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/uninavarra.edu.co\/en\/cifras-proyeccion-social-y-extension\/","og_locale":"en_US","og_type":"article","og_title":"PROYECCI\u00d3N SOCIAL Y EXTENSI\u00d3N - Uninavarra","og_url":"https:\/\/uninavarra.edu.co\/en\/cifras-proyeccion-social-y-extension\/","og_site_name":"Uninavarra","article_publisher":"https:\/\/www.facebook.com\/UninavarraEduca","article_modified_time":"2026-09-18T22:11:07+00:00","og_image":[{"width":2500,"height":326,"url":"https:\/\/uninavarra.edu.co\/wp-content\/uploads\/2026\/01\/banner-uninavarra-en-cifras.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@uninavarraeduca","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/uninavarra.edu.co\/cifras-proyeccion-social-y-extension\/","url":"https:\/\/uninavarra.edu.co\/cifras-proyeccion-social-y-extension\/","name":"PROYECCI\u00d3N SOCIAL Y EXTENSI\u00d3N - Uninavarra","isPartOf":{"@id":"https:\/\/uninavarra.edu.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/uninavarra.edu.co\/cifras-proyeccion-social-y-extension\/#primaryimage"},"image":{"@id":"https:\/\/uninavarra.edu.co\/cifras-proyeccion-social-y-extension\/#primaryimage"},"thumbnailUrl":"https:\/\/uninavarra.edu.co\/wp-content\/uploads\/2026\/01\/banner-uninavarra-en-cifras.jpg","datePublished":"2026-09-18T14:30:28+00:00","dateModified":"2026-09-18T22:11:07+00:00","breadcrumb":{"@id":"https:\/\/uninavarra.edu.co\/cifras-proyeccion-social-y-extension\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/uninavarra.edu.co\/cifras-proyeccion-social-y-extension\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/uninavarra.edu.co\/cifras-proyeccion-social-y-extension\/#primaryimage","url":"https:\/\/uninavarra.edu.co\/wp-content\/uploads\/2026\/01\/banner-uninavarra-en-cifras.jpg","contentUrl":"https:\/\/uninavarra.edu.co\/wp-content\/uploads\/2026\/01\/banner-uninavarra-en-cifras.jpg","width":2500,"height":326},{"@type":"BreadcrumbList","@id":"https:\/\/uninavarra.edu.co\/cifras-proyeccion-social-y-extension\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/uninavarra.edu.co\/"},{"@type":"ListItem","position":2,"name":"PROYECCI\u00d3N SOCIAL Y EXTENSI\u00d3N"}]},{"@type":"WebSite","@id":"https:\/\/uninavarra.edu.co\/#website","url":"https:\/\/uninavarra.edu.co\/","name":"UNINAVARRA","description":"Make your desire to learn a reality","publisher":{"@id":"https:\/\/uninavarra.edu.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/uninavarra.edu.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/uninavarra.edu.co\/#organization","name":"Navarre University Foundation - UNINAVARRA","url":"https:\/\/uninavarra.edu.co\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/uninavarra.edu.co\/#\/schema\/logo\/image\/","url":"https:\/\/uninavarra.edu.co\/wp-content\/uploads\/2024\/06\/Escudo-uninavarra-Solo.png","contentUrl":"https:\/\/uninavarra.edu.co\/wp-content\/uploads\/2024\/06\/Escudo-uninavarra-Solo.png","width":1500,"height":1401,"caption":"Fundaci\u00f3n Universitaria Navarra - UNINAVARRA"},"image":{"@id":"https:\/\/uninavarra.edu.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/UninavarraEduca","https:\/\/x.com\/uninavarraeduca","https:\/\/www.instagram.com\/uninavarra\/?hl=es","https:\/\/www.linkedin.com\/in\/fundacin-universitaria-navarra-uninavarra-b41225222\/"]}]}},"_links":{"self":[{"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/pages\/101178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/comments?post=101178"}],"version-history":[{"count":5,"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/pages\/101178\/revisions"}],"predecessor-version":[{"id":101231,"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/pages\/101178\/revisions\/101231"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/media\/96307"}],"wp:attachment":[{"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/media?parent=101178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/categories?post=101178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/uninavarra.edu.co\/en\/wp-json\/wp\/v2\/tags?post=101178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}