{"id":7196,"date":"2026-07-20T18:28:33","date_gmt":"2026-07-20T23:28:33","guid":{"rendered":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/?page_id=7196"},"modified":"2026-07-20T18:30:11","modified_gmt":"2026-07-20T23:30:11","slug":"banco-directores","status":"publish","type":"page","link":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/","title":{"rendered":"Banco-Directores"},"content":{"rendered":"\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\n\n \n \n Banco de Directores \u2014 Maestr\u00eda TIC UFPS<\/title>\n <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap\" rel=\"stylesheet\" \/>\n <style>\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n :root {\n --azul: #D21116; --ufps-rojo-c: #FAE8E8; --ufps-rojo-d: #9B0D11;\n --ufps-negro: #1A1A1A; --ufps-gris-c:#F5F5F5; --ufps-gris-d:#4A4A4A;\n --t1: #1A1A1A; --t2: #4a5568; --t3: #718096;\n --bg: #ffffff; --bg2: #F5F5F5;\n --bdr: #E8E0E0; --bdr2: #C8BEBE;\n --r2: 10px; --r3: 16px;\n --sh: 0 4px 16px rgba(210,17,22,0.12);\n --sh2: 0 2px 8px rgba(0,48,135,0.07);\n }\n body { font-family:'Open Sans',sans-serif; background:var(--bg2); color:var(--t1); min-height:100vh; }\n\n \/* \u2500\u2500 Hero \u2500\u2500 *\/\n .hero {\n background:linear-gradient(135deg,#9B0D11 0%,#D21116 55%,#7A0A0D 100%);\n padding:2.5rem 2rem 5rem; position:relative; overflow:hidden;\n }\n .hero::before { content:''; position:absolute; top:-60px; right:-60px; width:300px; height:300px; border-radius:50%; background:rgba(255,255,255,0.05); }\n .hero::after { content:''; position:absolute; bottom:-50px; left:25%; width:200px; height:200px; border-radius:50%; background:rgba(255,255,255,0.04); }\n .hero-inner { max-width:1100px; margin:0 auto; position:relative; z-index:1; }\n .hero-badge { display:inline-flex; align-items:center; gap:6px; background:rgba(255,255,255,0.15); border:1px solid rgba(255,255,255,0.25); color:#fff; font-size:11px; font-weight:600; letter-spacing:0.08em; text-transform:uppercase; padding:5px 14px; border-radius:20px; margin-bottom:1rem; }\n .hero-badge::before { content:''; width:6px; height:6px; background:#4ade80; border-radius:50%; display:inline-block; }\n .hero h1 { font-family:'Open Sans',sans-serif; font-size:clamp(1.8rem,4vw,2.6rem); color:#fff; font-weight:400; line-height:1.2; margin-bottom:0.5rem; }\n .hero h1 em { font-style:italic; color:rgba(255,255,255,0.85); }\n .hero p { font-size:14px; color:rgba(255,255,255,0.75); max-width:560px; line-height:1.6; }\n\n \/* \u2500\u2500 Main \u2500\u2500 *\/\n .main { max-width:1100px; margin:-3rem auto 3rem; padding:0 1.25rem; position:relative; z-index:2; }\n\n \/* \u2500\u2500 Buscador \u2500\u2500 *\/\n .search-wrap {\n background:var(--bg); border-radius:var(--r3); box-shadow:var(--sh);\n padding:1.25rem 1.5rem; margin-bottom:1.5rem; border:1px solid var(--bdr);\n display:flex; gap:10px; align-items:center; flex-wrap:wrap;\n }\n .search-wrap .sw-label { font-size:13px; font-weight:600; color:var(--t2); letter-spacing:0.05em; text-transform:uppercase; white-space:nowrap; }\n .input-wrap { flex:1; min-width:200px; position:relative; }\n .input-wrap svg { position:absolute; left:12px; top:50%; transform:translateY(-50%); color:var(--t3); pointer-events:none; }\n .input-wrap input { width:100%; height:40px; padding:0 14px 0 36px; border:1.5px solid var(--bdr2); border-radius:var(--r2); font-family:'Open Sans',sans-serif; font-size:14px; color:var(--t1); background:var(--bg); outline:none; transition:border-color 0.18s; }\n .input-wrap input:focus { border-color:#D21116; box-shadow:0 0 0 3px rgba(210,17,22,0.09); }\n .input-wrap input::placeholder { color:var(--t3); }\n .count-label { font-size:13px; color:var(--t3); white-space:nowrap; }\n\n \/* \u2500\u2500 Grid de tarjetas \u2500\u2500 *\/\n .grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:16px; }\n\n .director-card {\n background:var(--bg); border-radius:var(--r3); border:1px solid var(--bdr);\n box-shadow:var(--sh2); overflow:hidden; cursor:pointer;\n transition:transform 0.18s, box-shadow 0.18s, border-color 0.18s;\n display:flex; flex-direction:column;\n }\n .director-card:hover { transform:translateY(-3px); box-shadow:var(--sh); border-color:#D21116; }\n\n .card-foto {\n width:100%; aspect-ratio:1\/1; object-fit:cover;\n background:linear-gradient(135deg,#FAE8E8,#FFF0F0);\n display:flex; align-items:center; justify-content:center;\n }\n .card-foto img { width:100%; height:100%; object-fit:cover; display:block; }\n .card-foto .avatar-ini {\n font-family:'Open Sans',sans-serif; font-size:3rem; color:#D21116;\n user-select:none;\n }\n\n .card-body { padding:1rem; flex:1; }\n .card-name { font-size:14px; font-weight:600; color:var(--t1); line-height:1.35; margin-bottom:4px; }\n .card-area { font-size:12px; color:var(--t3); line-height:1.4; }\n .card-chips { display:flex; flex-wrap:wrap; gap:4px; margin-top:8px; }\n .card-chip {\n font-size:10px; font-weight:600; padding:2px 8px; border-radius:20px;\n letter-spacing:0.04em; text-transform:uppercase;\n }\n .chip-doc { background:#FAE8E8; color:#9B0D11; }\n .chip-mae { background:#F5F5F5; color:#4A4A4A; }\n .chip-esp { background:#fef3c7; color:#92400e; }\n .chip-preg { background:#f1f5f9; color:#475569; }\n\n \/* \u2500\u2500 Modal overlay \u2500\u2500 *\/\n .modal-overlay {\n position:fixed; inset:0; background:rgba(0,10,40,0.55);\n backdrop-filter:blur(3px); z-index:100;\n display:none; align-items:center; justify-content:center; padding:1rem;\n }\n .modal-overlay.open { display:flex; }\n\n .modal {\n background:var(--bg); border-radius:var(--r3); box-shadow:0 20px 60px rgba(0,0,0,0.25);\n width:100%; max-width:680px; max-height:90vh; overflow-y:auto;\n animation:modalIn 0.25s ease;\n position:relative;\n }\n @keyframes modalIn { from{opacity:0;transform:translateY(20px)} to{opacity:1;transform:translateY(0)} }\n\n .modal-close {\n position:absolute; top:14px; right:14px; width:32px; height:32px;\n border-radius:50%; background:rgba(255,255,255,0.2); border:none; cursor:pointer;\n display:flex; align-items:center; justify-content:center; color:#fff;\n font-size:18px; line-height:1; transition:background 0.15s; z-index:2;\n }\n .modal-close:hover { background:rgba(255,255,255,0.35); }\n\n \/* Header modal *\/\n .modal-header {\n background:linear-gradient(135deg,#9B0D11 0%,#D21116 100%);\n padding:1.75rem; display:flex; gap:1.25rem; align-items:center; position:relative;\n }\n .modal-foto {\n width:110px; height:110px; min-width:110px; border-radius:12px;\n border:3px solid rgba(255,255,255,0.4); overflow:hidden;\n background:rgba(255,255,255,0.15);\n display:flex; align-items:center; justify-content:center;\n flex-shrink:0;\n }\n .modal-foto img { width:100%; height:100%; object-fit:cover; display:block; }\n .modal-foto .mav { font-family:'Open Sans',sans-serif; font-size:2.8rem; color:#fff; }\n .modal-info .mname { font-size:20px; font-weight:600; color:#fff; margin-bottom:4px; line-height:1.25; }\n .modal-info .mcorreo { font-size:13px; color:rgba(255,255,255,0.80); display:flex; align-items:center; gap:5px; }\n .modal-info .mcorreo a { color:inherit; text-decoration:none; }\n .modal-info .mcorreo a:hover { text-decoration:underline; }\n\n \/* Cuerpo modal *\/\n .modal-body { padding:1.5rem 1.75rem; }\n\n .msec { margin-bottom:1.5rem; }\n .msec-title {\n font-size:11px; font-weight:700; letter-spacing:0.09em; text-transform:uppercase;\n color:var(--t3); margin-bottom:10px; padding-bottom:6px; border-bottom:1px solid var(--bdr);\n }\n\n \/* Formaci\u00f3n acad\u00e9mica *\/\n .formacion-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }\n .form-item {\n background:var(--bg2); border:1px solid var(--bdr); border-radius:var(--r2);\n padding:10px 12px; position:relative; overflow:hidden;\n }\n .form-item::before { content:''; position:absolute; top:0; left:0; right:0; height:3px; }\n .form-item.doctorado::before { background:#D21116; }\n .form-item.maestria::before { background:#4A4A4A; }\n .form-item.especializacion::before { background:#d97706; }\n .form-item.pregrado::before { background:#94a3b8; }\n .form-item .flabel { font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:0.07em; margin-bottom:4px; display:block; }\n .form-item.doctorado .flabel { color:#D21116; }\n .form-item.maestria .flabel { color:#4A4A4A; }\n .form-item.especializacion .flabel { color:#b45309; }\n .form-item.pregrado .flabel { color:#64748b; }\n .form-item .fval { font-size:13px; font-weight:500; color:var(--t1); line-height:1.4; }\n .form-item.empty { opacity:0.4; }\n\n \/* Grupos e investigaci\u00f3n *\/\n .grupos-row { display:flex; flex-wrap:wrap; gap:8px; }\n .grupo-pill {\n display:inline-flex; align-items:center; gap:6px;\n background:var(--azul-c); border:1px solid #F5C4C4;\n border-radius:8px; padding:6px 12px;\n font-size:13px; font-weight:500; color:var(--azul-d);\n }\n .grupo-pill svg { color:#D21116; flex-shrink:0; }\n\n \/* Areas *\/\n .areas-row { display:flex; flex-wrap:wrap; gap:8px; }\n .area-badge {\n display:inline-flex; align-items:center; gap:5px;\n padding:6px 14px; border-radius:20px; font-size:13px; font-weight:500;\n }\n .area-badge.principal { background:var(--verde-c); color:var(--verde-d); border:1px solid #C8BEBE; }\n .area-badge.secundaria { background:var(--bg2); color:var(--t2); border:1px solid var(--bdr2); }\n\n \/* Links externos *\/\n .links-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:10px; }\n .ext-link {\n display:flex; align-items:center; gap:8px;\n padding:10px 14px; border-radius:var(--r2); border:1px solid var(--bdr);\n text-decoration:none; font-size:13px; font-weight:500;\n transition:border-color 0.15s, background 0.15s;\n color:var(--t1);\n }\n .ext-link:hover { border-color:#D21116; background:var(--azul-c); }\n .ext-link.disabled { opacity:0.4; pointer-events:none; }\n .ext-link .el-icon { width:32px; height:32px; border-radius:8px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }\n .ext-link.orc .el-icon { background:#F5F5F5; color:#4A4A4A; }\n .ext-link.cvl .el-icon { background:#fef3c7; color:#92400e; }\n .ext-link.lin .el-icon { background:#dbeafe; color:#1d4ed8; }\n .ext-link .el-text .el-label { font-size:10px; color:var(--t3); text-transform:uppercase; letter-spacing:0.06em; display:block; }\n .ext-link .el-text .el-name { font-size:13px; font-weight:600; color:var(--t1); }\n\n \/* Loading \/ empty *\/\n .loading-state { text-align:center; padding:4rem 1rem; color:var(--t3); font-size:14px; }\n .spinner { width:36px; height:36px; border:3px solid var(--bdr); border-top-color:#D21116; border-radius:50%; animation:spin 0.7s linear infinite; margin:0 auto 14px; }\n @keyframes spin { to{transform:rotate(360deg)} }\n .empty-state { text-align:center; padding:3rem 1rem; color:var(--t3); }\n\n .footer { text-align:center; font-size:12px; color:var(--t3); padding:0 1rem 2rem; }\n\n @media(max-width:600px){\n .grid { grid-template-columns:repeat(auto-fill,minmax(160px,1fr)); }\n .modal-header { flex-direction:column; align-items:flex-start; }\n .formacion-grid { grid-template-columns:1fr; }\n .links-grid { grid-template-columns:1fr 1fr; }\n .search-wrap { flex-direction:column; align-items:stretch; }\n }\n <\/style>\n<\/head>\n<body>\n\n<div class=\"hero\">\n <div class=\"hero-inner\">\n <span class=\"hero-badge\">Maestr\u00eda TIC \u2014 UFPS<\/span>\n <h1>Banco de <em>Directores<\/em><\/h1>\n <p>Conoce los docentes e investigadores disponibles para dirigir proyectos de grado en la Maestr\u00eda TIC.<\/p>\n <\/div>\n<\/div>\n\n<div class=\"main\">\n <div class=\"search-wrap\">\n <span class=\"sw-label\">Buscar<\/span>\n <div class=\"input-wrap\">\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/svg>\n <input type=\"text\" id=\"searchInput\" placeholder=\"Nombre, \u00e1rea o grupo de investigaci\u00f3n...\" autocomplete=\"off\" \/>\n <\/div>\n <span class=\"count-label\" id=\"countLabel\"><\/span>\n <\/div>\n\n <div id=\"gridArea\">\n <div class=\"loading-state\"><div class=\"spinner\"><\/div>Cargando banco de directores...<\/div>\n <\/div>\n\n <div class=\"footer\">Universidad Francisco de Paula Santander  \u00b7  Direcci\u00f3n Maestr\u00eda TIC<\/div>\n<\/div>\n\n<!-- Modal -->\n<div class=\"modal-overlay\" id=\"modalOverlay\" onclick=\"cerrarModal(event)\">\n <div class=\"modal\" id=\"modal\">\n <button class=\"modal-close\" onclick=\"cerrarModalBtn()\">✕<\/button>\n <div id=\"modalContent\"><\/div>\n <\/div>\n<\/div>\n\n<script>\n const API_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbwMa1117FzGzP-OQlpBsBswEpiU0XB7V8dgtwVwnycs4_B719h1pvu_BEZw4uJQViKY\/exec';\n const SHEET = 'Banco de Directores';\n\n let allData = [], loaded = false;\n\n function initials(n) {\n if (!n) return '?';\n return n.split(' ').filter(Boolean).slice(0,2).map(w=>w[0]).join('').toUpperCase();\n }\n\n \/\/ Convierte cualquier URL de Google Drive al formato thumbnail (sin CORS)\n function driveImg(url) {\n if (!url) return '';\n var m = url.match(\/[?&]id=([^&]+)\/);\n if (m) return 'https:\/\/drive.google.com\/thumbnail?id=' + m[1] + '&sz=w400';\n m = url.match(\/\\\/d\\\/([^\/]+)\\\/\/);\n if (m) return 'https:\/\/drive.google.com\/thumbnail?id=' + m[1] + '&sz=w400';\n m = url.match(\/open\\?id=([^&]+)\/);\n if (m) return 'https:\/\/drive.google.com\/thumbnail?id=' + m[1] + '&sz=w400';\n return url;\n }\n\n\n function nivelChip(nivel, valor) {\n if (!valor || valor.trim() === '') return '';\n const clases = { doctorado:'chip-doc', maestria:'chip-mae', especializacion:'chip-esp', pregrado:'chip-preg' };\n const labels = { doctorado:'Ph.D', maestria:'Mg.', especializacion:'Esp.', pregrado:'Preg.' };\n return `<span class=\"card-chip ${clases[nivel]}\">${labels[nivel]}<\/span>`;\n }\n\n function mapearDirector(row) {\n return {\n nombre: String(row['NOMBRE_DIRECTOR'] || '').trim(),\n correo: String(row['CORREO_DIRECTOR'] || '').trim(),\n foto: String(row['FOTOGRAFIA'] || '').trim(),\n pregrado: String(row['PREGRADO'] || '').trim(),\n especializacion:String(row['ESPECIALIZACION'] || '').trim(),\n maestria: String(row['MAESTRIA'] || '').trim(),\n doctorado: String(row['DOCTORADO'] || '').trim(),\n grupo1: String(row['GRUPO1'] || '').trim(),\n grupo2: String(row['GRUPO2'] || '').trim(),\n areaPrincipal: String(row['AREA_PRINCIPAL'] || '').trim(),\n areaSecundaria:String(row['AREA_SECUNDARIA'] || '').trim(),\n hojaDeVida: String(row['HOJA_DE_VIDA'] || '').trim(),\n orcid: String(row['ORCID'] || '').trim(),\n cvlac: String(row['CVLAC'] || '').trim(),\n linkedin: String(row['LINKEDIN'] || '').trim(),\n };\n }\n\n async function cargarDatos() {\n if (loaded) return true;\n \/\/ fetch directo\n try {\n const url = API_URL + '?sheet=' + encodeURIComponent(SHEET);\n const res = await fetch(url, { redirect:'follow' });\n if (res.ok) {\n const json = await res.json();\n allData = json.map(mapearDirector).filter(r => r.nombre);\n loaded = true;\n return true;\n }\n } catch(e) { console.warn('fetch fall\u00f3, intentando JSONP...', e); }\n\n \/\/ JSONP fallback\n return new Promise(resolve => {\n const cb = 'cb_bd_' + Date.now();\n const sc = document.createElement('script');\n const tm = setTimeout(() => {\n delete window[cb];\n if (document.body.contains(sc)) document.body.removeChild(sc);\n resolve(false);\n }, 12000);\n window[cb] = json => {\n clearTimeout(tm);\n delete window[cb];\n if (document.body.contains(sc)) document.body.removeChild(sc);\n try {\n allData = json.map(mapearDirector).filter(r => r.nombre);\n loaded = true;\n resolve(true);\n } catch(e) { resolve(false); }\n };\n sc.onerror = () => { clearTimeout(tm); delete window[cb]; resolve(false); };\n sc.src = API_URL + '?sheet=' + encodeURIComponent(SHEET) + '&callback=' + cb;\n document.body.appendChild(sc);\n });\n }\n\n let filteredData = [];\n\n function renderGrid(data) {\n filteredData = data; \/\/ sincronizar ANTES de generar HTML\n const grid = document.getElementById('gridArea');\n const lbl = document.getElementById('countLabel');\n if (!data.length) {\n grid.innerHTML = '<div class=\"empty-state\">No se encontraron directores con ese criterio.<\/div>';\n lbl.textContent = '';\n return;\n }\n lbl.textContent = data.length + ' director' + (data.length !== 1 ? 'es' : '');\n grid.innerHTML = '<div class=\"grid\">' + data.map((d, i) => {\n const fotoSrc = driveImg(d.foto);\n const fotoCard = fotoSrc\n ? `<img decoding=\"async\" src=\"${fotoSrc}\" alt=\"${d.nombre.replace(\/\"\/g,\"'\")}\" onerror=\"this.style.display='none';this.parentElement.innerHTML='<div class=\\'avatar-ini\\'>${initials(d.nombre)}<\/div>'\" loading=\"lazy\" \/>`\n : `<div class=\"avatar-ini\">${initials(d.nombre)}<\/div>`;\n return `<div class=\"director-card\" onclick=\"abrirModal(${i})\">\n <div class=\"card-foto\">${fotoCard}<\/div>\n <div class=\"card-body\">\n <div class=\"card-name\">${d.nombre}<\/div>\n <div class=\"card-area\">${d.areaPrincipal || d.areaSecundaria || ''}<\/div>\n <div class=\"card-chips\">\n ${nivelChip('doctorado', d.doctorado)}\n ${nivelChip('maestria', d.maestria)}\n ${nivelChip('especializacion', d.especializacion)}\n ${nivelChip('pregrado', d.pregrado)}\n <\/div>\n <\/div>\n <\/div>`;\n }).join('') + '<\/div>';\n }\n\n \n function abrirModal(idx) {\n const d = filteredData[idx];\n if (!d) return;\n\n const fotoModalSrc = driveImg(d.foto);\n const fotoHTML = fotoModalSrc\n ? `<img decoding=\"async\" src=\"${fotoModalSrc}\" alt=\"${d.nombre}\" onerror=\"this.outerHTML='<div class=\\'mav\\'>${initials(d.nombre)}<\/div>'\" loading=\"lazy\" \/>`\n : `<div class=\"mav\">${initials(d.nombre)}<\/div>`;\n\n const formItem = (nivel, label, val) => val\n ? `<div class=\"form-item ${nivel}\"><span class=\"flabel\">${label}<\/span><div class=\"fval\">${val}<\/div><\/div>`\n : `<div class=\"form-item ${nivel} empty\"><span class=\"flabel\">${label}<\/span><div class=\"fval\">No registrado<\/div><\/div>`;\n\n const svgGrupo = '<svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><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>';\n const gruposArr = [\n d.grupo1 ? { label:'Grupo 1', val: d.grupo1 } : null,\n d.grupo2 ? { label:'Grupo 2', val: d.grupo2 } : null\n ].filter(Boolean);\n const grupoHTML = gruposArr.length\n ? gruposArr.map(g => `\n <div class=\"grupo-pill\">\n ${svgGrupo}\n <div>\n <span style=\"font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:#9B0D11;display:block;\">${g.label}<\/span>\n <span style=\"font-size:13px;font-weight:500;\">${g.val}<\/span>\n <\/div>\n <\/div>`).join('')\n : '<span style=\"color:var(--t3);font-size:13px;\">No registrado<\/span>';\n\n const extLink = (cls, href, label, name, iconSVG) => href\n ? `<a href=\"${href}\" target=\"_blank\" rel=\"noopener\" class=\"ext-link ${cls}\">\n <div class=\"el-icon\">${iconSVG}<\/div>\n <div class=\"el-text\"><span class=\"el-label\">${label}<\/span><span class=\"el-name\">${name}<\/span><\/div>\n <\/a>`\n : `<div class=\"ext-link ${cls} disabled\">\n <div class=\"el-icon\">${iconSVG}<\/div>\n <div class=\"el-text\"><span class=\"el-label\">${label}<\/span><span class=\"el-name\">No disponible<\/span><\/div>\n <\/div>`;\n\n const icoOrc = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 8v4l3 3\"\/><\/svg>';\n const icoCvl = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"\/><path d=\"M8 21h8M12 17v4\"\/><\/svg>';\n const icoLin = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"\/><rect x=\"2\" y=\"9\" width=\"4\" height=\"12\"\/><circle cx=\"4\" cy=\"4\" r=\"2\"\/><\/svg>';\n\n document.getElementById('modalContent').innerHTML = `\n <div class=\"modal-header\">\n <div class=\"modal-foto\">${fotoHTML}<\/div>\n <div class=\"modal-info\">\n <div class=\"mname\">${d.nombre}<\/div>\n <div class=\"mcorreo\">\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"\/><polyline points=\"22,6 12,13 2,6\"\/><\/svg>\n ${d.correo ? `<a href=\"mailto:${d.correo}\">${d.correo}<\/a>` : 'Sin correo registrado'}\n <\/div>\n <\/div>\n <\/div>\n\n <div class=\"modal-body\">\n\n <div class=\"msec\">\n <div class=\"msec-title\">Formaci\u00f3n acad\u00e9mica<\/div>\n <div class=\"formacion-grid\">\n ${formItem('doctorado','Doctorado', d.doctorado)}\n ${formItem('maestria','Maestr\u00eda', d.maestria)}\n ${formItem('especializacion','Especializaci\u00f3n', d.especializacion)}\n ${formItem('pregrado','Pregrado', d.pregrado)}\n <\/div>\n <\/div>\n\n <div class=\"msec\">\n <div class=\"msec-title\">Grupos de investigaci\u00f3n<\/div>\n <div class=\"grupos-row\">${grupoHTML}<\/div>\n <\/div>\n\n <div class=\"msec\">\n <div class=\"msec-title\">\u00c1reas de conocimiento<\/div>\n <div class=\"areas-row\">\n ${d.areaPrincipal ? `\n <div class=\"area-badge principal\" style=\"flex-direction:column;align-items:flex-start;gap:3px;padding:8px 14px;border-radius:10px;\">\n <span style=\"font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;opacity:0.75;\">\u00c1rea principal<\/span>\n <span style=\"display:flex;align-items:center;gap:5px;\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"\/><\/svg>\n ${d.areaPrincipal}\n <\/span>\n <\/div>` : ''}\n ${d.areaSecundaria ? `\n <div class=\"area-badge secundaria\" style=\"flex-direction:column;align-items:flex-start;gap:3px;padding:8px 14px;border-radius:10px;\">\n <span style=\"font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;opacity:0.65;\">\u00c1rea secundaria<\/span>\n <span>${d.areaSecundaria}<\/span>\n <\/div>` : ''}\n ${!d.areaPrincipal && !d.areaSecundaria ? '<span style=\"color:var(--t3);font-size:13px;\">No registrado<\/span>' : ''}\n <\/div>\n <\/div>\n\n <div class=\"msec\">\n <div class=\"msec-title\">Perfiles y documentos<\/div>\n <div class=\"links-grid\">\n ${extLink('orc', d.orcid, 'ORCID', 'Ver perfil', icoOrc)}\n ${extLink('cvl', d.cvlac, 'CvLAC', 'Ver perfil', icoCvl)}\n ${extLink('lin', d.linkedin, 'LinkedIn', 'Ver perfil', icoLin)}\n <\/div>\n <\/div>\n\n <\/div>`;\n\n document.getElementById('modalOverlay').classList.add('open');\n document.body.style.overflow = 'hidden';\n }\n\n function cerrarModal(e) {\n if (e.target === document.getElementById('modalOverlay')) cerrarModalBtn();\n }\n function cerrarModalBtn() {\n document.getElementById('modalOverlay').classList.remove('open');\n document.body.style.overflow = '';\n }\n document.addEventListener('keydown', e => { if (e.key === 'Escape') cerrarModalBtn(); });\n\n \/\/ B\u00fasqueda en tiempo real\n document.getElementById('searchInput').addEventListener('input', function() {\n const q = this.value.toLowerCase().trim();\n renderGrid(q\n ? allData.filter(d =>\n d.nombre.toLowerCase().includes(q) ||\n d.areaPrincipal.toLowerCase().includes(q) ||\n d.areaSecundaria.toLowerCase().includes(q) ||\n d.grupo1.toLowerCase().includes(q) ||\n d.grupo2.toLowerCase().includes(q)\n )\n : [...allData]);\n });\n\n \/\/ Iniciar\n (async () => {\n const ok = await cargarDatos();\n if (!ok) {\n document.getElementById('gridArea').innerHTML =\n '<div class=\"empty-state\">No se pudo cargar el banco de directores.<br>Verifica tu conexi\u00f3n e intenta de nuevo.<\/div>';\n return;\n }\n renderGrid([...allData]);\n })();\n<\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Banco de Directores \u2014 Maestr\u00eda TIC UFPS Maestr\u00eda TIC \u2014 UFPS Banco de Directores Conoce los docentes e investigadores disponibles para dirigir proyectos de grado en la Maestr\u00eda TIC. Buscar Cargando banco de directores… Universidad Francisco de Paula Santander  \u00b7  Direcci\u00f3n Maestr\u00eda TIC ✕<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-7196","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Banco-Directores -<\/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:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Banco-Directores -\" \/>\n<meta property=\"og:description\" content=\"Banco de Directores \u2014 Maestr\u00eda TIC UFPS Maestr\u00eda TIC \u2014 UFPS Banco de Directores Conoce los docentes e investigadores disponibles para dirigir proyectos de grado en la Maestr\u00eda TIC. Buscar Cargando banco de directores… Universidad Francisco de Paula Santander  \u00b7  Direcci\u00f3n Maestr\u00eda TIC ✕\" \/>\n<meta property=\"og:url\" content=\"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-20T23:30:11+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/banco-directores\\\/\",\"url\":\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/banco-directores\\\/\",\"name\":\"Banco-Directores -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/#website\"},\"datePublished\":\"2026-07-20T23:28:33+00:00\",\"dateModified\":\"2026-07-20T23:30:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/banco-directores\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/banco-directores\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/banco-directores\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Presentaci\u00f3n\",\"item\":\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Banco-Directores\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/#website\",\"url\":\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/\",\"name\":\"\",\"description\":\"Maestr\u00eda en TIC\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/campusvirtual.ufps.edu.co\\\/maestria-tic\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Banco-Directores -","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:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/","og_locale":"es_ES","og_type":"article","og_title":"Banco-Directores -","og_description":"Banco de Directores \u2014 Maestr\u00eda TIC UFPS Maestr\u00eda TIC \u2014 UFPS Banco de Directores Conoce los docentes e investigadores disponibles para dirigir proyectos de grado en la Maestr\u00eda TIC. Buscar Cargando banco de directores… Universidad Francisco de Paula Santander  \u00b7  Direcci\u00f3n Maestr\u00eda TIC ✕","og_url":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/","article_modified_time":"2026-07-20T23:30:11+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/","url":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/","name":"Banco-Directores -","isPartOf":{"@id":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/#website"},"datePublished":"2026-07-20T23:28:33+00:00","dateModified":"2026-07-20T23:30:11+00:00","breadcrumb":{"@id":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/banco-directores\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Presentaci\u00f3n","item":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/"},{"@type":"ListItem","position":2,"name":"Banco-Directores"}]},{"@type":"WebSite","@id":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/#website","url":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/","name":"","description":"Maestr\u00eda en TIC","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"smart-post-landscape":false,"smart-post-portrait":false},"uagb_author_info":{"display_name":"adminufpsvirtual","author_link":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/blog\/author\/adminufpsvirtual\/"},"uagb_comment_info":0,"uagb_excerpt":"Banco de Directores \u2014 Maestr\u00eda TIC UFPS Maestr\u00eda TIC \u2014 UFPS Banco de Directores Conoce los docentes e investigadores disponibles para dirigir proyectos de grado en la Maestr\u00eda TIC. Buscar Cargando banco de directores… Universidad Francisco de Paula Santander  \u00b7  Direcci\u00f3n Maestr\u00eda TIC ✕","_links":{"self":[{"href":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/wp-json\/wp\/v2\/pages\/7196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/wp-json\/wp\/v2\/comments?post=7196"}],"version-history":[{"count":7,"href":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/wp-json\/wp\/v2\/pages\/7196\/revisions"}],"predecessor-version":[{"id":7203,"href":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/wp-json\/wp\/v2\/pages\/7196\/revisions\/7203"}],"wp:attachment":[{"href":"https:\/\/campusvirtual.ufps.edu.co\/maestria-tic\/wp-json\/wp\/v2\/media?parent=7196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}