{"id":7116,"date":"2026-05-17T14:23:13","date_gmt":"2026-05-17T19:23:13","guid":{"rendered":"https:\/\/jgmun.com\/?page_id=7116"},"modified":"2026-05-19T20:15:05","modified_gmt":"2026-05-20T01:15:05","slug":"portafolio25","status":"publish","type":"page","link":"https:\/\/jgmun.com\/index.php\/portafolio25\/","title":{"rendered":"Portafolios Anteriores"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7116\" class=\"elementor elementor-7116\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-aed6b08 e-flex e-con-boxed e-con e-parent\" data-id=\"aed6b08\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c9ac6b elementor-widget elementor-widget-html\" data-id=\"0c9ac6b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\r\n  JGMUN 2025 \u2014 Portafolios por Comisi\u00f3n\r\n  Pega en bloque HTML personalizado de WordPress.\r\n-->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" \/>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Lato:ital,wght@0,300;0,400;0,700;1,300&family=Cormorant+Garamond:ital,wght@0,400;0,600;1,400&display=swap\" rel=\"stylesheet\" \/>\r\n\r\n<style>\r\n.jpf *, .jpf *::before, .jpf *::after { box-sizing: border-box; margin: 0; padding: 0; }\r\n\r\n.jpf {\r\n  --bg:      #07111f;\r\n  --surface: #0c1d34;\r\n  --panel:   #112240;\r\n  --accent:  #b8924a;\r\n  --accent2: #d4a85c;\r\n  --text:    #ddd5c4;\r\n  --muted:   #6b7f96;\r\n  --border:  rgba(255,255,255,0.07);\r\n\r\n  background: var(--bg);\r\n  color: var(--text);\r\n  font-family: 'Lato', sans-serif;\r\n  font-weight: 300;\r\n  width: 100vw;\r\n  position: relative;\r\n  left: 50%;\r\n  transform: translateX(-50%);\r\n  overflow-x: hidden;\r\n  min-height: 60vh;\r\n}\r\n\r\n\/* \u2500\u2500 HEADER \u2500\u2500 *\/\r\n.jpf-header {\r\n  padding: 64px 64px 0;\r\n  max-width: 1280px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.jpf-eyebrow {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 10px;\r\n  font-size: 0.66rem;\r\n  letter-spacing: 0.2em;\r\n  text-transform: uppercase;\r\n  color: var(--accent);\r\n  margin-bottom: 14px;\r\n}\r\n\r\n.jpf-eyebrow::before {\r\n  content: '';\r\n  width: 20px;\r\n  height: 1px;\r\n  background: var(--accent);\r\n  display: block;\r\n}\r\n\r\n.jpf-title {\r\n  font-family: 'Cormorant Garamond', serif;\r\n  font-size: clamp(2rem, 4vw, 3rem);\r\n  font-weight: 600;\r\n  color: #fff;\r\n  line-height: 1.05;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.jpf-title em {\r\n  font-style: italic;\r\n  font-weight: 400;\r\n  color: var(--accent);\r\n}\r\n\r\n.jpf-subtitle {\r\n  font-size: 0.85rem;\r\n  color: var(--muted);\r\n  line-height: 1.7;\r\n  margin-bottom: 40px;\r\n}\r\n\r\n\/* \u2500\u2500 TABS \u2500\u2500 *\/\r\n.jpf-tabs-wrap {\r\n  border-bottom: 1px solid var(--border);\r\n  padding: 0 64px;\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 50;\r\n  background: rgba(7,17,31,0.95);\r\n  backdrop-filter: blur(12px);\r\n  -webkit-backdrop-filter: blur(12px);\r\n}\r\n\r\n.jpf-tabs {\r\n  display: flex;\r\n  gap: 0;\r\n  overflow-x: auto;\r\n  scrollbar-width: none;\r\n  max-width: 1280px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.jpf-tabs::-webkit-scrollbar { display: none; }\r\n\r\n.jpf-tab {\r\n  flex-shrink: 0;\r\n  padding: 16px 22px;\r\n  font-family: 'Lato', sans-serif;\r\n  font-size: 0.78rem;\r\n  font-weight: 400;\r\n  letter-spacing: 0.04em;\r\n  color: var(--muted);\r\n  border: none;\r\n  background: none;\r\n  cursor: pointer;\r\n  border-bottom: 2px solid transparent;\r\n  transition: color 0.2s, border-color 0.2s;\r\n  white-space: nowrap;\r\n  position: relative;\r\n  bottom: -1px;\r\n}\r\n\r\n.jpf-tab:hover { color: var(--text); }\r\n\r\n.jpf-tab.active {\r\n  color: var(--accent);\r\n  border-bottom-color: var(--accent);\r\n}\r\n\r\n.jpf-tab-count {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  width: 18px;\r\n  height: 18px;\r\n  border-radius: 50%;\r\n  background: var(--panel);\r\n  font-size: 0.6rem;\r\n  color: var(--muted);\r\n  margin-left: 7px;\r\n  transition: background 0.2s, color 0.2s;\r\n}\r\n\r\n.jpf-tab.active .jpf-tab-count {\r\n  background: rgba(184,146,74,0.15);\r\n  color: var(--accent);\r\n}\r\n\r\n\/* \u2500\u2500 PANELS \u2500\u2500 *\/\r\n.jpf-panels {\r\n  max-width: 1280px;\r\n  margin: 0 auto;\r\n  padding: 40px 64px 80px;\r\n}\r\n\r\n.jpf-panel { display: none; }\r\n.jpf-panel.active { display: block; }\r\n\r\n\/* \u2500\u2500 GRID DE CARDS \u2500\u2500 *\/\r\n.jpf-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\r\n  gap: 20px;\r\n}\r\n\r\n\/* \u2500\u2500 CARD \u2500\u2500 *\/\r\n.jpf-card {\r\n  background: var(--surface);\r\n  border: 1px solid var(--border);\r\n  border-radius: 6px;\r\n  overflow: hidden;\r\n  cursor: pointer;\r\n  transition: border-color 0.25s, box-shadow 0.25s, transform 0.25s;\r\n  opacity: 0;\r\n  animation: jpf-rise 0.4s forwards;\r\n  position: relative;\r\n}\r\n\r\n.jpf-card:hover {\r\n  border-color: rgba(184,146,74,0.35);\r\n  box-shadow: 0 10px 36px rgba(0,0,0,0.4);\r\n  transform: translateY(-3px);\r\n}\r\n\r\n@keyframes jpf-rise {\r\n  from { opacity: 0; transform: translateY(12px); }\r\n  to   { opacity: 1; transform: translateY(0); }\r\n}\r\n\r\n.jpf-card::before {\r\n  content: '';\r\n  position: absolute;\r\n  left: 0; top: 0; bottom: 0;\r\n  width: 2px;\r\n  background: var(--accent);\r\n  transform: scaleY(0);\r\n  transform-origin: bottom;\r\n  transition: transform 0.3s ease;\r\n}\r\n\r\n.jpf-card:hover::before { transform: scaleY(1); }\r\n\r\n\/* \u2500\u2500 IMAGEN UNIFORME \u2500\u2500 *\/\r\n.jpf-card-flag-wrap {\r\n  width: 100%;\r\n  height: 130px; \/* altura fija id\u00e9ntica en todas las cards *\/\r\n  overflow: hidden;\r\n  display: block;\r\n  background: var(--panel);\r\n  flex-shrink: 0;\r\n}\r\n\r\n.jpf-card-flag {\r\n  width: 100%;\r\n  height: 100%;\r\n  object-fit: cover;      \/* recorta para llenar el \u00e1rea sin distorsionar *\/\r\n  object-position: center;\r\n  display: block;\r\n  filter: brightness(0.7) saturate(0.8);\r\n  transition: filter 0.4s, transform 0.4s;\r\n}\r\n\r\n.jpf-card:hover .jpf-card-flag {\r\n  filter: brightness(0.9) saturate(1);\r\n  transform: scale(1.04);\r\n}\r\n\r\n.jpf-card-flag-placeholder {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n}\r\n\r\n.jpf-card-body {\r\n  padding: 16px 18px 18px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  gap: 10px;\r\n}\r\n\r\n.jpf-card-name {\r\n  font-size: 0.88rem;\r\n  color: #fff;\r\n  font-weight: 400;\r\n  line-height: 1.3;\r\n}\r\n\r\n.jpf-card-open {\r\n  width: 28px;\r\n  height: 28px;\r\n  border: 1px solid rgba(184,146,74,0.3);\r\n  border-radius: 50%;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  flex-shrink: 0;\r\n  transition: background 0.2s, border-color 0.2s;\r\n}\r\n\r\n.jpf-card:hover .jpf-card-open {\r\n  background: rgba(184,146,74,0.1);\r\n  border-color: rgba(184,146,74,0.6);\r\n}\r\n\r\n.jpf-card-open svg { color: var(--accent); }\r\n\r\n\/* \u2500\u2500 LOADING \/ ERROR estado inicial \u2500\u2500 *\/\r\n.jpf-state {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  min-height: 320px;\r\n  gap: 10px;\r\n  font-size: 0.82rem;\r\n  color: var(--muted);\r\n  letter-spacing: 0.04em;\r\n}\r\n\r\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\r\n@media (max-width: 768px) {\r\n  .jpf-header  { padding: 40px 24px 0; }\r\n  .jpf-tabs-wrap { padding: 0 24px; }\r\n  .jpf-panels  { padding: 28px 24px 60px; }\r\n  .jpf-grid    { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 14px; }\r\n  .jpf-card-flag-wrap { height: 100px; }\r\n}\r\n<\/style>\r\n\r\n<!-- \u2550\u2550\u2550 RA\u00cdZ \u2550\u2550\u2550 -->\r\n<div class=\"jpf\" id=\"jpf\">\r\n\r\n  <!-- Header -->\r\n  <div class=\"jpf-header\">\r\n    <p class=\"jpf-eyebrow\">JGMUN \u00b7 Cohorte 2025<\/p>\r\n    <h1 class=\"jpf-title\">Porta<em>folios<\/em><\/h1>\r\n    <p class=\"jpf-subtitle\">Documentos de posici\u00f3n por comisi\u00f3n. Selecciona una delegaci\u00f3n para ver su portafolio.<br>Est\u00e1 prohibido copiar el contenido de cada portafolio sin hacer la respectiva cita bibliogr\u00e1fica.<\/p>\r\n  <\/div>\r\n\r\n  <!-- Estado inicial -->\r\n  <div class=\"jpf-state\" id=\"jpf-state\">\r\n    <div class=\"jpf-spinner-inline\"><\/div>\r\n    Cargando portafolios\u2026\r\n  <\/div>\r\n\r\n  <!-- Tabs (se genera con JS) -->\r\n  <div class=\"jpf-tabs-wrap\" id=\"jpf-tabs-wrap\" style=\"display:none\">\r\n    <div class=\"jpf-tabs\" id=\"jpf-tabs\"><\/div>\r\n  <\/div>\r\n\r\n  <!-- Panels (se genera con JS) -->\r\n  <div class=\"jpf-panels\" id=\"jpf-panels\" style=\"display:none\"><\/div>\r\n\r\n<\/div>\r\n\r\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n     MODAL \u2014 se inserta en document.body para\r\n     sobreponerse a TODO el sitio WordPress.\r\n     Los estilos van en un <style> separado para\r\n     evitar conflictos con el scope de .jpf\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\r\n<style>\r\n\/* Spinner dentro del bloque principal *\/\r\n.jpf-spinner-inline {\r\n  width: 16px;\r\n  height: 16px;\r\n  border: 1.5px solid rgba(255,255,255,0.07);\r\n  border-top-color: #b8924a;\r\n  border-radius: 50%;\r\n  animation: jpf-spin 0.8s linear infinite;\r\n  flex-shrink: 0;\r\n}\r\n\r\n\/* \u2500\u2500 MODAL OVERLAY \u2500\u2500\r\n   z-index alt\u00edsimo para superar header, men\u00fas y\r\n   cualquier elemento sticky de WordPress.       *\/\r\n#jpf-modal-bg {\r\n  display: none;\r\n  position: fixed;\r\n  inset: 0;\r\n  z-index: 999999;          \/* por encima de todo WordPress *\/\r\n  background: rgba(4,10,20,0.92);\r\n  backdrop-filter: blur(6px);\r\n  -webkit-backdrop-filter: blur(6px);\r\n  align-items: center;\r\n  justify-content: center;\r\n  padding: 24px;\r\n  font-family: 'Lato', sans-serif;\r\n}\r\n\r\n#jpf-modal-bg.open { display: flex; }\r\n\r\n.jpf-modal {\r\n  background: #0c1d34;\r\n  border: 1px solid rgba(255,255,255,0.07);\r\n  border-radius: 6px;\r\n  width: 100%;\r\n  max-width: 960px;\r\n  max-height: 90vh;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n  animation: jpf-modal-in 0.3s ease;\r\n}\r\n\r\n@keyframes jpf-modal-in {\r\n  from { opacity: 0; transform: scale(0.96) translateY(12px); }\r\n  to   { opacity: 1; transform: scale(1) translateY(0); }\r\n}\r\n\r\n@keyframes jpf-spin { to { transform: rotate(360deg); } }\r\n\r\n.jpf-modal-header {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  padding: 16px 22px;\r\n  border-bottom: 1px solid rgba(255,255,255,0.07);\r\n  gap: 12px;\r\n  flex-shrink: 0;\r\n}\r\n\r\n.jpf-modal-title-row {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  min-width: 0;\r\n}\r\n\r\n.jpf-modal-flag {\r\n  width: 36px;\r\n  height: 24px;\r\n  object-fit: cover;        \/* bandera uniforme en el modal tambi\u00e9n *\/\r\n  object-position: center;\r\n  border-radius: 2px;\r\n  flex-shrink: 0;\r\n}\r\n\r\n.jpf-modal-name {\r\n  font-family: 'Cormorant Garamond', serif;\r\n  font-size: 1.05rem;\r\n  font-weight: 600;\r\n  color: #fff;\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.jpf-modal-commission {\r\n  font-size: 0.68rem;\r\n  letter-spacing: 0.12em;\r\n  text-transform: uppercase;\r\n  color: #b8924a;\r\n}\r\n\r\n.jpf-modal-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  flex-shrink: 0;\r\n}\r\n\r\n.jpf-modal-ext {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  padding: 6px 14px;\r\n  border: 1px solid rgba(255,255,255,0.07);\r\n  border-radius: 3px;\r\n  font-size: 0.72rem;\r\n  letter-spacing: 0.06em;\r\n  color: #6b7f96;\r\n  text-decoration: none;\r\n  transition: color 0.2s, border-color 0.2s;\r\n}\r\n\r\n.jpf-modal-ext:hover {\r\n  color: #ddd5c4;\r\n  border-color: rgba(255,255,255,0.15);\r\n}\r\n\r\n.jpf-modal-close {\r\n  width: 32px;\r\n  height: 32px;\r\n  border: 1px solid rgba(255,255,255,0.07);\r\n  border-radius: 50%;\r\n  background: none;\r\n  cursor: pointer;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  color: #6b7f96;\r\n  transition: color 0.2s, border-color 0.2s;\r\n}\r\n\r\n.jpf-modal-close:hover {\r\n  color: #fff;\r\n  border-color: rgba(255,255,255,0.2);\r\n}\r\n\r\n.jpf-modal-body {\r\n  flex: 1;\r\n  overflow: hidden;\r\n  position: relative;\r\n  min-height: 0;\r\n}\r\n\r\n.jpf-iframe {\r\n  width: 100%;\r\n  height: 100%;\r\n  min-height: 560px;\r\n  border: none;\r\n  display: block;\r\n}\r\n\r\n.jpf-iframe-loading {\r\n  position: absolute;\r\n  inset: 0;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 10px;\r\n  font-size: 0.8rem;\r\n  color: #6b7f96;\r\n  background: #0c1d34;\r\n  pointer-events: none;\r\n  transition: opacity 0.3s;\r\n}\r\n\r\n.jpf-iframe-loading.hidden { opacity: 0; }\r\n\r\n.jpf-iframe-spinner {\r\n  width: 16px;\r\n  height: 16px;\r\n  border: 1.5px solid rgba(255,255,255,0.07);\r\n  border-top-color: #b8924a;\r\n  border-radius: 50%;\r\n  animation: jpf-spin 0.8s linear infinite;\r\n  flex-shrink: 0;\r\n}\r\n\r\n@media (max-width: 768px) {\r\n  #jpf-modal-bg { padding: 12px; }\r\n  .jpf-modal    { max-height: 95vh; }\r\n  .jpf-iframe   { min-height: 400px; }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function () {\r\n\r\n  const API = 'https:\/\/api.jgmun.com\/api\/cohorts\/cohort2025\/portfolios';\r\n  let activeTab = null;\r\n\r\n  \/* \u2500\u2500 Crear modal en document.body \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n     Al inyectarlo directamente en <body> (fuera del contenedor de WP)\r\n     el z-index 999999 supera men\u00fas, headers sticky y cualquier overlay\r\n     del tema o plugins.\r\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  var modalHTML = [\r\n    '<div id=\"jpf-modal-bg\">',\r\n      '<div class=\"jpf-modal\">',\r\n        '<div class=\"jpf-modal-header\">',\r\n          '<div class=\"jpf-modal-title-row\">',\r\n            '<img decoding=\"async\" class=\"jpf-modal-flag\" id=\"jpf-modal-flag\" src=\"\" alt=\"\" \/>',\r\n            '<div>',\r\n              '<div class=\"jpf-modal-name\" id=\"jpf-modal-name\">\u2014<\/div>',\r\n              '<div class=\"jpf-modal-commission\" id=\"jpf-modal-commission\">\u2014<\/div>',\r\n            '<\/div>',\r\n          '<\/div>',\r\n          '<div class=\"jpf-modal-actions\">',\r\n            '<a class=\"jpf-modal-ext\" id=\"jpf-modal-ext\" href=\"#\" target=\"_blank\" rel=\"noopener\">',\r\n              '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\/><polyline points=\"15 3 21 3 21 9\"\/><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"\/><\/svg>',\r\n              'Abrir',\r\n            '<\/a>',\r\n            '<button class=\"jpf-modal-close\" id=\"jpf-modal-close-btn\">',\r\n              '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg>',\r\n            '<\/button>',\r\n          '<\/div>',\r\n        '<\/div>',\r\n        '<div class=\"jpf-modal-body\">',\r\n          '<div class=\"jpf-iframe-loading\" id=\"jpf-iframe-loading\">',\r\n            '<div class=\"jpf-iframe-spinner\"><\/div> Cargando documento\u2026',\r\n          '<\/div>',\r\n          '<iframe class=\"jpf-iframe\" id=\"jpf-iframe\" src=\"\" allow=\"fullscreen\"><\/iframe>',\r\n        '<\/div>',\r\n      '<\/div>',\r\n    '<\/div>'\r\n  ].join('');\r\n\r\n  var modalContainer = document.createElement('div');\r\n  modalContainer.innerHTML = modalHTML;\r\n  document.body.appendChild(modalContainer);\r\n\r\n  \/* \u2500\u2500 Cargar Lato\/Cormorant en <head> si no est\u00e1 ya \u2500\u2500 *\/\r\n  if (!document.querySelector('link[href*=\"Cormorant+Garamond\"]')) {\r\n    var lnk = document.createElement('link');\r\n    lnk.rel = 'stylesheet';\r\n    lnk.href = 'https:\/\/fonts.googleapis.com\/css2?family=Lato:wght@300;400;700&family=Cormorant+Garamond:ital,wght@0,400;0,600;1,400&display=swap';\r\n    document.head.appendChild(lnk);\r\n  }\r\n\r\n  \/* iframe onload despu\u00e9s de insertar en DOM *\/\r\n  var iframe = document.getElementById('jpf-iframe');\r\n  if (iframe) {\r\n    iframe.addEventListener('load', function () {\r\n      document.getElementById('jpf-iframe-loading').classList.add('hidden');\r\n    });\r\n  }\r\n\r\n  \/* \u2500\u2500 Abrir modal \u2500\u2500 *\/\r\n  window.jpfOpenModal = function (url, name, flag, commission) {\r\n    document.getElementById('jpf-modal-flag').src = flag || '';\r\n    document.getElementById('jpf-modal-flag').alt = name;\r\n    document.getElementById('jpf-modal-name').textContent = name;\r\n    document.getElementById('jpf-modal-commission').textContent = commission;\r\n    document.getElementById('jpf-modal-ext').href = url;\r\n    document.getElementById('jpf-iframe-loading').classList.remove('hidden');\r\n    document.getElementById('jpf-iframe').src = url;\r\n    document.getElementById('jpf-modal-bg').classList.add('open');\r\n    document.body.style.overflow = 'hidden';\r\n  };\r\n\r\n  \/* \u2500\u2500 Cerrar modal \u2500\u2500 *\/\r\n  window.jpfCloseModal = function (e) {\r\n    if (e && e.target !== document.getElementById('jpf-modal-bg')) return;\r\n    document.getElementById('jpf-modal-bg').classList.remove('open');\r\n    document.getElementById('jpf-iframe').src = '';\r\n    document.body.style.overflow = '';\r\n  };\r\n\r\n  \/* Clic en overlay cierra *\/\r\n  document.getElementById('jpf-modal-bg').addEventListener('click', function (e) {\r\n    if (e.target === this) jpfCloseModal();\r\n  });\r\n\r\n  \/* Bot\u00f3n X cierra *\/\r\n  document.getElementById('jpf-modal-close-btn').addEventListener('click', function () {\r\n    jpfCloseModal();\r\n  });\r\n\r\n  \/* Esc cierra *\/\r\n  document.addEventListener('keydown', function (e) {\r\n    if (e.key === 'Escape') jpfCloseModal();\r\n  });\r\n\r\n  \/* \u2500\u2500 Cambiar tab \u2500\u2500 *\/\r\n  function switchTab(key) {\r\n    activeTab = key;\r\n    document.querySelectorAll('.jpf-tab').forEach(function (t) {\r\n      t.classList.toggle('active', t.dataset.key === key);\r\n    });\r\n    document.querySelectorAll('.jpf-panel').forEach(function (p) {\r\n      p.classList.toggle('active', p.dataset.key === key);\r\n    });\r\n  }\r\n\r\n  \/* \u2500\u2500 Render card \u2500\u2500 *\/\r\n  function makeCard(item, commission, i) {\r\n    var name  = item.delegation ? item.delegation.name  : (item.name || 'Delegaci\u00f3n');\r\n    var flag  = item.delegation ? item.delegation.flag  : '';\r\n    var url   = item.portfolio  || item.portfolioURL || item.url || '';\r\n\r\n    var card = document.createElement('div');\r\n    card.className = 'jpf-card';\r\n    card.style.animationDelay = (i * 45) + 'ms';\r\n    card.onclick = function () { jpfOpenModal(url, name, flag, commission); };\r\n\r\n    var flagHTML = flag\r\n      ? '<div class=\"jpf-card-flag-wrap\"><img decoding=\"async\" class=\"jpf-card-flag\" src=\"' + flag + '\" alt=\"' + name + '\" loading=\"lazy\" \/><\/div>'\r\n      : '<div class=\"jpf-card-flag-wrap\"><div class=\"jpf-card-flag-placeholder\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" style=\"color:#6b7f96\"><path d=\"M3 3h18v12H3z\"\/><\/svg><\/div><\/div>';\r\n\r\n    card.innerHTML =\r\n      flagHTML +\r\n      '<div class=\"jpf-card-body\">' +\r\n        '<span class=\"jpf-card-name\">' + name + '<\/span>' +\r\n        '<span class=\"jpf-card-open\">' +\r\n          '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#b8924a\" stroke-width=\"2\"><polyline points=\"9 18 15 12 9 6\"\/><\/svg>' +\r\n        '<\/span>' +\r\n      '<\/div>';\r\n\r\n    return card;\r\n  }\r\n\r\n  \/* \u2500\u2500 Fetch y render \u2500\u2500 *\/\r\n  fetch(API)\r\n    .then(function (r) { return r.json(); })\r\n    .then(function (json) {\r\n      var data = json.data || json;\r\n      var keys = Object.keys(data);\r\n\r\n      if (!keys.length) {\r\n        document.getElementById('jpf-state').textContent = 'No hay portafolios disponibles a\u00fan.';\r\n        return;\r\n      }\r\n\r\n      var tabsEl   = document.getElementById('jpf-tabs');\r\n      var panelsEl = document.getElementById('jpf-panels');\r\n\r\n      keys.forEach(function (commission, ki) {\r\n        var items = data[commission];\r\n\r\n        \/* Tab *\/\r\n        var btn = document.createElement('button');\r\n        btn.className = 'jpf-tab' + (ki === 0 ? ' active' : '');\r\n        btn.dataset.key = commission;\r\n        btn.onclick = function () { switchTab(commission); };\r\n        btn.innerHTML =\r\n          commission +\r\n          '<span class=\"jpf-tab-count\">' + items.length + '<\/span>';\r\n        tabsEl.appendChild(btn);\r\n\r\n        \/* Panel *\/\r\n        var panel = document.createElement('div');\r\n        panel.className = 'jpf-panel' + (ki === 0 ? ' active' : '');\r\n        panel.dataset.key = commission;\r\n\r\n        var grid = document.createElement('div');\r\n        grid.className = 'jpf-grid';\r\n\r\n        items.forEach(function (item, i) {\r\n          grid.appendChild(makeCard(item, commission, i));\r\n        });\r\n\r\n        panel.appendChild(grid);\r\n        panelsEl.appendChild(panel);\r\n      });\r\n\r\n      \/* Mostrar *\/\r\n      document.getElementById('jpf-state').style.display = 'none';\r\n      document.getElementById('jpf-tabs-wrap').style.display = 'block';\r\n      document.getElementById('jpf-panels').style.display = 'block';\r\n      activeTab = keys[0];\r\n    })\r\n    .catch(function () {\r\n      document.getElementById('jpf-state').textContent =\r\n        'Error al cargar los portafolios. Intenta m\u00e1s tarde.';\r\n    });\r\n\r\n})();\r\nwindow.addEventListener('DOMContentLoaded', function () {\r\n  document.querySelectorAll('.internal__pading').forEach(function (el) {\r\n    el.style.setProperty('padding', '0', 'important');\r\n  });\r\n});\r\ndocument.querySelectorAll('.internal__pading').forEach(function (el) {\r\n  el.style.setProperty('padding', '0', 'important');\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>JGMUN \u00b7 Cohorte 2025 Portafolios Documentos de posici\u00f3n por comisi\u00f3n. Selecciona una delegaci\u00f3n para ver su portafolio.Est\u00e1 prohibido copiar el contenido de cada portafolio sin hacer la respectiva cita bibliogr\u00e1fica. Cargando portafolios\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-7116","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/jgmun.com\/index.php\/wp-json\/wp\/v2\/pages\/7116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jgmun.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/jgmun.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/jgmun.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jgmun.com\/index.php\/wp-json\/wp\/v2\/comments?post=7116"}],"version-history":[{"count":12,"href":"https:\/\/jgmun.com\/index.php\/wp-json\/wp\/v2\/pages\/7116\/revisions"}],"predecessor-version":[{"id":7207,"href":"https:\/\/jgmun.com\/index.php\/wp-json\/wp\/v2\/pages\/7116\/revisions\/7207"}],"wp:attachment":[{"href":"https:\/\/jgmun.com\/index.php\/wp-json\/wp\/v2\/media?parent=7116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}