{"id":23803,"date":"2026-09-08T12:18:19","date_gmt":"2026-09-08T12:18:19","guid":{"rendered":"https:\/\/esi.uclm.es\/?page_id=23803"},"modified":"2026-09-08T14:03:19","modified_gmt":"2026-09-08T14:03:19","slug":"calendario-academico-esi","status":"publish","type":"page","link":"https:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/","title":{"rendered":"Calendario Acad\u00e9mico ESI"},"content":{"rendered":"\n<!-- ==========================================================\n     Calendario acad\u00e9mico ESI \u2014 m\u00f3dulo HTML personalizado (WordPress)\n     Todo se genera din\u00e1micamente leyendo:\n       https:\/\/esi.uclm.es\/TV\/hall\/calendario.json\n     Para actualizar el calendario basta con actualizar ese JSON.\n     CSS encapsulado bajo #esical-root. Sin dependencias externas.\n     IMPORTANTE: no usar el caracter ampersand en este fichero,\n     WordPress lo escapa y rompe el script.\n     ========================================================== -->\n<div id=\"esical-root\">\n  <div class=\"esical-head\">\n    <div class=\"esical-titles\">\n      <h2 class=\"esical-title\">Calendario acad\u00e9mico<\/h2>\n      <p class=\"esical-sub\"><\/p>\n    <\/div>\n  <\/div>\n\n  <div class=\"esical-legend\" role=\"group\" aria-label=\"Tipos de evento\"><\/div>\n  <p class=\"esical-hint\">Pulsa un tipo para ver todas sus fechas del curso<\/p>\n\n  <div class=\"esical-year\"><\/div>\n\n  <div class=\"esical-modal\" hidden>\n    <div class=\"esical-modal-bg\" data-esical-cerrar><\/div>\n    <div class=\"esical-modal-box\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Listado de fechas\">\n      <div class=\"esical-modal-head\">\n        <div class=\"esical-modal-htxt\">\n          <strong class=\"esical-modal-tit\">Fechas del curso<\/strong>\n          <span class=\"esical-modal-sub\"><\/span>\n        <\/div>\n        <button type=\"button\" class=\"esical-modal-x\" data-esical-cerrar aria-label=\"Cerrar\">\u00d7<\/button>\n      <\/div>\n      <div class=\"esical-modal-chips\"><\/div>\n      <div class=\"esical-modal-body\"><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"esical-tip\" role=\"tooltip\" aria-hidden=\"true\"><\/div>\n\n  <p class=\"esical-foot\"><\/p>\n<\/div>\n\n<style>\n#esical-root{\n  --bg:#ffffff;--panel:#ffffff;--fg:#0f172a;--muted:#64748b;--line:#e2e8f0;--soft:#f8fafc;--accent:#2563eb;\n  position:relative;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n  color:var(--fg);background:var(--bg);max-width:1280px;margin:0 auto;padding:4px 0 20px;line-height:1.4;box-sizing:border-box}\n#esical-root *,#esical-root *::before,#esical-root *::after{box-sizing:border-box}\n#esical-root h2,#esical-root h3,#esical-root p,#esical-root ul,#esical-root li{margin:0;padding:0;list-style:none}\n\n.esical-head{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;justify-content:space-between;padding:6px 4px 12px;border-bottom:2px solid var(--line)}\n.esical-title{font-size:1.45rem;font-weight:700;letter-spacing:-.02em;line-height:1.2}\n.esical-sub{color:var(--muted);font-size:.85rem;margin-top:3px}\n.esical-nav{display:flex;gap:6px;flex-wrap:wrap}\n.esical-btn{border:1px solid var(--line);background:var(--soft);color:var(--fg);border-radius:8px;font-family:inherit;\n  font-size:.8rem;font-weight:600;cursor:pointer;padding:7px 13px}\n.esical-btn:hover{background:#eef2f7;border-color:#cbd5e1}\n\n.esical-legend{display:flex;flex-wrap:wrap;gap:6px;padding:12px 4px 2px}\n.esical-chip{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:#fff;border-radius:999px;\n  padding:5px 12px 5px 9px;font-size:.76rem;font-weight:600;cursor:pointer;color:var(--fg);font-family:inherit}\n.esical-chip .dot{width:10px;height:10px;border-radius:50%;background:var(--cc);flex:0 0 auto}\n.esical-chip[aria-pressed=\"false\"]{opacity:.35;background:var(--soft)}\n.esical-chip:hover{border-color:var(--cc);background:var(--soft)}\n#esical-root .esical-hint{padding:8px 6px 0;font-size:.75rem;color:var(--muted)}\n\n.esical-year{display:grid;grid-template-columns:repeat(auto-fill,minmax(430px,1fr));gap:14px;padding:14px 4px 0;align-items:start}\n\n.esical-block{display:grid;grid-template-columns:190px minmax(0,1fr);border:1px solid var(--line);border-radius:12px;background:#fff;overflow:hidden}\n.esical-block.now{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}\n.esical-mini{border-right:1px solid var(--line);padding:8px 8px 10px}\n.esical-mname{font-size:.78rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;padding:2px 2px 7px;color:var(--fg)}\n.esical-mname small{color:var(--muted);font-weight:600}\n.esical-dow{display:grid;grid-template-columns:repeat(7,1fr)}\n.esical-dow div{text-align:center;font-size:.58rem;font-weight:700;color:var(--muted);padding:0 0 3px;text-transform:uppercase}\n.esical-days{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}\n.esical-day{position:relative;height:23px;display:flex;align-items:center;justify-content:center;\n  font-size:.68rem;border-radius:5px;color:var(--fg);border:1px solid transparent;background:none;font-family:inherit;padding:0;line-height:1}\n.esical-day.pad{visibility:hidden}\n.esical-day.wknd{color:#a3aab6}\n.esical-day.has{cursor:pointer;font-weight:700}\n.esical-day.has:hover{border-color:var(--fg)}\n.esical-day.today{outline:2px solid var(--fg);outline-offset:-2px}\n.esical-day.sel{background:var(--fg) !important;color:#fff !important}\n.esical-dots{display:flex;gap:2px;position:absolute;bottom:1px;left:0;right:0;justify-content:center}\n.esical-dots i{width:3px;height:3px;border-radius:50%;background:var(--dc)}\n.esical-bars{position:absolute;left:3px;right:3px;bottom:0;display:flex;flex-direction:column;gap:1px}\n.esical-bars i{height:2px;border-radius:1px;background:var(--dc)}\n.esical-day.sel .esical-dots i,.esical-day.sel .esical-bars i{background:#fff}\n\n#esical-root .esical-notes{padding:12px 16px 14px 16px;min-width:0}\n#esical-root .esical-note{display:flex;gap:12px;align-items:flex-start;padding:7px 10px 8px 12px;cursor:pointer;\n  border-left:3px solid var(--cc);border-radius:0 6px 6px 0;margin-bottom:4px}\n.esical-note:hover,.esical-note.on{background:var(--soft)}\n.esical-note .nday{flex:0 0 74px;font-size:.68rem;font-weight:800;color:var(--cc);line-height:1.3;padding-top:1px}\n.esical-note .ntxt{font-size:.76rem;font-weight:600;min-width:0;line-height:1.35}\n.esical-note .ntxt em{display:block;font-style:normal;font-weight:500;color:var(--muted);font-size:.68rem;margin-top:2px}\n#esical-root .esical-empty{padding:6px 2px;color:var(--muted);font-size:.75rem}\n\n.esical-tip{position:absolute;z-index:99;max-width:290px;background:#0f172a;color:#fff;border-radius:10px;padding:9px 11px;\n  font-size:.78rem;line-height:1.35;box-shadow:0 8px 24px rgba(0,0,0,.22);pointer-events:none;opacity:0;transform:translateY(4px);\n  transition:opacity .12s,transform .12s}\n.esical-tip.show{opacity:1;transform:translateY(0)}\n.esical-tip .tday{font-weight:800;display:block;margin-bottom:5px;font-size:.74rem;color:#cbd5e1}\n.esical-tip .tit{display:flex;gap:7px;align-items:flex-start;padding:2px 0}\n.esical-tip .tit span.b{width:3px;border-radius:2px;background:var(--cc);flex:0 0 auto;align-self:stretch;min-height:14px}\n.esical-tip .tit small{display:block;color:#94a3b8;font-size:.7rem}\n\n.esical-foot{margin:16px 4px 0;font-size:.76rem;color:var(--muted)}\n.esical-foot a{color:var(--accent)}\n.esical-loading{padding:22px 4px;color:var(--muted);font-size:.88rem}\n.esical-btn-main{background:var(--accent);border-color:var(--accent);color:#fff}\n.esical-btn-main:hover{background:#1d4ed8;border-color:#1d4ed8}\n\n.esical-modal{\n  --panel:#ffffff;--fg:#0f172a;--muted:#64748b;--line:#e2e8f0;--soft:#f8fafc;\n  font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n  font-size:14px;line-height:1.4;color:var(--fg);\n  position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;\n  z-index:2147483000;display:flex;align-items:center;justify-content:center;padding:20px 14px}\n.esical-modal *,.esical-modal *::before,.esical-modal *::after{box-sizing:border-box}\n.esical-modal h4,.esical-modal p,.esical-modal ul,.esical-modal li{margin:0;padding:0;list-style:none}\n@media(prefers-color-scheme:dark){\n  .esical-modal{--panel:#14171c;--fg:#e8eaed;--muted:#9aa4b2;--line:#333941;--soft:#1b1f26}\n}\n.esical-modal[hidden]{display:none}\n.esical-modal-bg{position:absolute;inset:0;background:rgba(15,23,42,.55)}\n.esical-modal-box{position:relative;background:var(--panel);color:var(--fg);border-radius:14px;width:100%;max-width:760px;\n  max-height:88vh;max-height:88dvh;display:flex;flex-direction:column;box-shadow:0 24px 60px rgba(0,0,0,.35);overflow:hidden}\n.esical-modal-head{flex:0 0 auto;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;\n  padding:14px 16px 12px;border-bottom:1px solid var(--line);background:var(--panel);border-radius:14px 14px 0 0}\n.esical-modal-htxt{min-width:0}\n.esical-modal-tit::before{content:\"\";display:inline-block;width:11px;height:11px;border-radius:50%;\n  background:var(--cc);margin-right:9px;vertical-align:baseline}\n.esical-modal-tit{font-size:1.05rem;font-weight:700;display:block}\n.esical-modal-sub{font-size:.78rem;color:var(--muted)}\n.esical-modal-x{flex:0 0 auto;border:1px solid var(--line);background:var(--soft);border-radius:9px;width:38px;height:38px;\n  font-size:1.4rem;line-height:1;color:var(--fg);cursor:pointer;font-family:inherit;padding:0}\n.esical-modal-x:hover{background:#eef2f7;border-color:#cbd5e1}\n.esical-modal-chips{flex:0 0 auto;display:flex;flex-wrap:wrap;gap:6px;padding:11px 16px;border-bottom:1px solid var(--line);\n  max-height:26vh;overflow:auto}\n.esical-modal-box .esical-chip[aria-pressed=\"false\"]{opacity:1;background:transparent}\n.esical-modal-box .esical-chip[aria-pressed=\"true\"]{background:var(--cc);border-color:var(--cc);color:#fff}\n.esical-modal-box .esical-chip[aria-pressed=\"true\"] .dot{background:#fff}\n.esical-modal-body{flex:1 1 auto;min-height:0;overflow:auto;padding:4px 16px 20px}\n.esical-grupo{padding:10px 0 2px}\n.esical-grupo h4{font-size:.8rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;margin:0 0 8px;\n  display:flex;align-items:center;gap:8px;color:var(--cc)}\n.esical-grupo h4 span.n{color:var(--muted);font-weight:600;letter-spacing:0;text-transform:none;font-size:.75rem}\n.esical-fila{display:flex;gap:14px;align-items:flex-start;padding:7px 10px 8px 12px;border-left:3px solid var(--cc);\n  border-radius:0 6px 6px 0;cursor:pointer;margin-bottom:4px}\n.esical-fila:hover{background:var(--soft)}\n.esical-fila .fd{flex:0 0 138px;font-size:.76rem;font-weight:800;color:var(--cc);line-height:1.35}\n.esical-fila .ft{font-size:.85rem;font-weight:600;line-height:1.35;min-width:0}\n.esical-fila .ft em{display:block;font-style:normal;font-weight:500;color:var(--muted);font-size:.75rem;margin-top:2px}\n.esical-modal-vacio{padding:26px 2px;color:var(--muted);font-size:.85rem}\n@media(max-width:560px){\n  .esical-modal{padding:12px}\n  .esical-fila{flex-direction:column;gap:2px}\n  .esical-fila .fd{flex:none}\n}\n\n@media(max-width:900px){\n  .esical-year{grid-template-columns:1fr}\n}\n@media(max-width:480px){\n  .esical-block{grid-template-columns:1fr}\n  .esical-mini{border-right:0;border-bottom:1px solid var(--line)}\n  .esical-day{height:30px;font-size:.78rem}\n  #esical-root .esical-notes{padding:12px 14px 14px}\n  .esical-tip{max-width:calc(100vw - 36px)}\n}\n@media(prefers-color-scheme:dark){\n  #esical-root{--bg:transparent;--panel:#14171c;--fg:#e8eaed;--muted:#9aa4b2;--line:#333941;--soft:#1b1f26}\n  .esical-block,.esical-chip{background:#14171c}\n  .esical-btn:hover{background:#252a32;border-color:#454c56}\n  .esical-day.wknd{color:#6b7280}\n  .esical-tip{background:#0b0e13;border:1px solid #333941}\n}\n<\/style>\n\n<script>\n(function(){\n\"use strict\";\nvar URL_JSON = \"https:\/\/esi.uclm.es\/TV\/hall\/calendario.json\";\n\nvar MESES=[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"];\nvar MESC=[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"];\nvar DOW=[\"L\",\"M\",\"X\",\"J\",\"V\",\"S\",\"D\"];\nvar DIAS=[\"domingo\",\"lunes\",\"martes\",\"mi\u00e9rcoles\",\"jueves\",\"viernes\",\"s\u00e1bado\"];\n\n\/\/ Grupos tradicionales del calendario acad\u00e9mico, en el orden habitual.\nvar GRUPOS=[\n  {id:\"docencia\",   nom:\"Docencia\",                         col:\"#2563eb\", cats:[\"docencia\"]},\n  {id:\"evaluacion\", nom:\"Evaluaci\u00f3n\",                       col:\"#dc2626\", cats:[\"evaluacion\"]},\n  {id:\"tfg\",        nom:\"Defensas de TFG\",                  col:\"#7c3aed\", cats:[\"tfg\"]},\n  {id:\"actas\",      nom:\"Cierre de actas\",                  col:\"#0891b2\", cats:[\"actas\"]},\n  {id:\"no-lectivo\", nom:\"Periodos no lectivos\",             col:\"#64748b\", cats:[\"no-lectivo\"]},\n  {id:\"actividad\",  nom:\"Actividades de Santa Tecla\",       col:\"#16a34a\", cats:[\"actividad\"]},\n  {id:\"festivo\",    nom:\"D\u00edas festivos\",                    col:\"#ea580c\", cats:[\"festivo\"]}\n];\nvar EXTRA=[\"#0d9488\",\"#c026d3\",\"#b45309\",\"#4f46e5\",\"#be123c\"];\n\/\/ A partir de estos dias un evento se considera \"periodo de fondo\" (semestre, periodo lectivo)\n\/\/ y se pinta como tinte suave; todo lo demas se marca con color y puntos.\nvar DIAS_FONDO=60;\n\nvar root=document.getElementById(\"esical-root\");\nvar elTitle=root.querySelector(\".esical-title\");\nvar elSub=root.querySelector(\".esical-sub\");\nvar elLegend=root.querySelector(\".esical-legend\");\nvar elYear=root.querySelector(\".esical-year\");\nvar elFoot=root.querySelector(\".esical-foot\");\nvar elTip=root.querySelector(\".esical-tip\");\nvar modal=root.querySelector(\".esical-modal\");\nvar modalTit=modal.querySelector(\".esical-modal-tit\");\nvar modalSub=modal.querySelector(\".esical-modal-sub\");\nvar modalChips=modal.querySelector(\".esical-modal-chips\");\nvar modalBody=modal.querySelector(\".esical-modal-body\");\n\nvar eventos=[], byDay={}, grupos=[], meses=[], selDay=null, pinned=null, grupoActivo=null, scrollBloqueado=\"\";\nvar hoy=new Date(); var hoyK=clave(hoy);\n\nfunction pad(n){ return (n<10?\"0\":\"\")+n; }\nfunction clave(d){ return d.getFullYear()+\"-\"+pad(d.getMonth()+1)+\"-\"+pad(d.getDate()); }\nfunction parse(s){ var p=String(s).split(\"-\"); return new Date(+p[0],+p[1]-1,+p[2]); }\nfunction may(s){ return String(s).charAt(0).toUpperCase()+String(s).slice(1); }\nfunction dur(e){ return Math.round((parse(e.fin||e.inicio)-parse(e.inicio))\/86400000)+1; }\nfunction txt(el,s){ el.textContent=(s===undefined||s===null)?\"\":String(s); }\nfunction rgba(hex,a){ var h=hex.replace(\"#\",\"\");\n  return \"rgba(\"+parseInt(h.substr(0,2),16)+\",\"+parseInt(h.substr(2,2),16)+\",\"+parseInt(h.substr(4,2),16)+\",\"+a+\")\"; }\n\n\/\/ grupo al que pertenece una categor\u00eda del JSON\nfunction grupoDe(cat){\n  for(var i=0;i<grupos.length;i++){ if(grupos[i].cats.indexOf(cat)>=0){ return grupos[i]; } }\n  return grupos[0];\n}\nfunction color(cat){ return grupoDe(cat).col; }\nfunction etiq(cat){ return grupoDe(cat).nom; }\nfunction peso(cat){ return grupoDe(cat).peso; }\nfunction visible(e){ return true; }\n\n\/\/ ---------- carga ----------\nfunction arranca(){\n  elYear.innerHTML='<div class=\"esical-loading\">Cargando calendario\u2026<\/div>';\n  var x=new XMLHttpRequest();\n  x.open(\"GET\", URL_JSON + (URL_JSON.indexOf(\"?\")<0 ? \"?v=\" : \"#v=\") + Date.now(), true);\n  x.onreadystatechange=function(){\n    if(x.readyState!==4){ return; }\n    if(x.status>=200){ if(x.status<400){ try{ construye(JSON.parse(x.responseText)); return; }catch(e){} } }\n    elYear.innerHTML='<div class=\"esical-loading\">No se ha podido cargar el calendario.<\/div>';\n  };\n  x.send();\n}\n\nfunction construye(data){\n  eventos=(data.eventos||[]).slice();\n  if(data.titulo){ txt(elTitle, data.titulo + (data.curso ? \" \" + data.curso : \"\")); }\n  txt(elSub, data.subtitulo||\"\");\n  pintaPie(data);\n\n  \/\/ grupos: los tradicionales que tengan eventos, mas los sueltos que aparezcan en el JSON\n  var usadas=[];\n  eventos.forEach(function(e){ if(usadas.indexOf(e.categoria)<0){ usadas.push(e.categoria); } });\n  grupos=[];\n  GRUPOS.forEach(function(g){\n    var hay=g.cats.filter(function(c){ return usadas.indexOf(c)>=0; });\n    if(hay.length){ grupos.push({id:g.id,nom:g.nom,col:g.col,cats:g.cats.slice()}); }\n  });\n  var sueltas=usadas.filter(function(c){\n    var dentro=false;\n    GRUPOS.forEach(function(g){ if(g.cats.indexOf(c)>=0){ dentro=true; } });\n    return !dentro;\n  });\n  sueltas.forEach(function(c,i){\n    grupos.push({id:c,nom:may(c.replace(\/-\/g,\" \")),col:EXTRA[i%EXTRA.length],cats:[c]});\n  });\n  grupos.forEach(function(g,i){ g.peso=grupos.length-i; });\n\n  \/\/ \u00edndice d\u00eda -> eventos\n  byDay={};\n  eventos.forEach(function(ev){\n    var d=parse(ev.inicio), f=parse(ev.fin||ev.inicio), guard=0;\n    while(d<=f){\n      var k=clave(d);\n      if(!byDay[k]){ byDay[k]=[]; }\n      byDay[k].push(ev);\n      d.setDate(d.getDate()+1);\n      guard++; if(guard>800){ break; }\n    }\n  });\n\n  meses=rango(data);\n  pintaLeyenda();\n  render();\n}\n\nfunction pintaPie(data){\n  elFoot.innerHTML=\"\";\n  var pie=document.createElement(\"span\");\n  txt(pie,(data.pie||\"\") + (data.actualizado ? \"  \u00b7  Actualizado \" + fechaCorta(data.actualizado) : \"\"));\n  elFoot.appendChild(pie);\n  if(data.fuente){\n    elFoot.appendChild(document.createTextNode(\"  \u00b7  \"));\n    var a=document.createElement(\"a\"); a.href=data.fuente; a.target=\"_blank\"; a.rel=\"noopener\"; txt(a,\"Fuente\");\n    elFoot.appendChild(a);\n  }\n}\nfunction fechaCorta(iso){ var d=parse(iso); return pad(d.getDate())+\"\/\"+pad(d.getMonth()+1)+\"\/\"+d.getFullYear(); }\n\n\/\/ rango de meses: por curso (sep -> jul) o, si no, por los eventos del JSON\nfunction rango(data){\n  var a=null,b=null;\n  var m=\/(\\d{4})\\s*[\\\/-]\\s*(\\d{4})\/.exec(data.curso||\"\");\n  if(m){ a=[+m[1],8]; b=[+m[2],6]; }\n  if(!a){\n    var min=null,max=null;\n    eventos.forEach(function(e){\n      var i=parse(e.inicio), f=parse(e.fin||e.inicio);\n      if(min===null||i<min){ min=i; }\n      if(max===null||f>max){ max=f; }\n    });\n    if(min===null){ min=new Date(); max=new Date(); }\n    a=[min.getFullYear(),min.getMonth()]; b=[max.getFullYear(),max.getMonth()];\n  }\n  \/\/ ampliar el rango para que no quede fuera ningun evento del JSON\n  var min=null,max=null;\n  eventos.forEach(function(e){\n    var i=parse(e.inicio), f=parse(e.fin||e.inicio);\n    if(min===null||i<min){ min=i; }\n    if(max===null||f>max){ max=f; }\n  });\n  if(min!==null){\n    var ia=new Date(a[0],a[1],1), fb=new Date(b[0],b[1],1);\n    var im=new Date(min.getFullYear(),min.getMonth(),1);\n    var fm=new Date(max.getFullYear(),max.getMonth(),1);\n    if(im<ia){ a=[min.getFullYear(),min.getMonth()]; }\n    if(fm>fb){ b=[max.getFullYear(),max.getMonth()]; }\n  }\n  var out=[], y=a[0], mm=a[1], guard=0;\n  while(guard<400){\n    out.push([y,mm]);\n    if(y===b[0]){ if(mm>=b[1]){ break; } }\n    if(y>b[0]){ break; }\n    mm++; if(mm>11){ mm=0; y++; }\n    guard++;\n  }\n  return out;\n}\n\nfunction visibles(k){\n  var l=byDay[k]||[];\n  return l.filter(visible);\n}\n\n\/\/ ---------- leyenda ----------\nfunction pintaLeyenda(){\n  elLegend.innerHTML=\"\";\n  grupos.forEach(function(g){\n    var b=document.createElement(\"button\");\n    b.type=\"button\"; b.className=\"esical-chip\";\n    b.setAttribute(\"title\",\"Ver todas las fechas de \"+g.nom);\n    b.style.setProperty(\"--cc\", g.col);\n    var d=document.createElement(\"span\"); d.className=\"dot\"; b.appendChild(d);\n    b.appendChild(document.createTextNode(g.nom));\n    b.addEventListener(\"click\",function(ev){ ev.stopPropagation(); abreModal(g.id); });\n    elLegend.appendChild(b);\n  });\n}\n\n\/\/ ---------- render a\u00f1o completo ----------\nfunction render(){\n  elYear.innerHTML=\"\";\n  meses.forEach(function(m){ elYear.appendChild(bloque(m[0],m[1])); });\n}\n\nfunction bloque(y,m){\n  var wrap=document.createElement(\"div\");\n  wrap.className=\"esical-block\";\n  if(y===hoy.getFullYear()){ if(m===hoy.getMonth()){ wrap.className+=\" now\"; wrap.setAttribute(\"data-now\",\"1\"); } }\n\n  var mini=document.createElement(\"div\"); mini.className=\"esical-mini\";\n  var h=document.createElement(\"div\"); h.className=\"esical-mname\";\n  h.appendChild(document.createTextNode(may(MESES[m])+\" \"));\n  var sm=document.createElement(\"small\"); txt(sm,y); h.appendChild(sm);\n  mini.appendChild(h);\n  var dw=document.createElement(\"div\"); dw.className=\"esical-dow\";\n  DOW.forEach(function(d){ var s=document.createElement(\"div\"); txt(s,d); dw.appendChild(s); });\n  mini.appendChild(dw);\n  var days=document.createElement(\"div\"); days.className=\"esical-days\";\n  var off=(new Date(y,m,1).getDay()+6)%7;\n  for(var i=0;i<off;i++){ var p=document.createElement(\"div\"); p.className=\"esical-day pad\"; days.appendChild(p); }\n  var ult=new Date(y,m+1,0).getDate();\n  for(var d=1;d<=ult;d++){ days.appendChild(celda(y,m,d)); }\n  mini.appendChild(days);\n  wrap.appendChild(mini);\n\n  wrap.appendChild(notas(y,m));\n  return wrap;\n}\n\nfunction celda(y,m,d){\n  var dt=new Date(y,m,d), k=clave(dt), evs=visibles(k);\n  var cell=document.createElement(evs.length?\"button\":\"div\");\n  if(evs.length){ cell.type=\"button\"; }\n  var cls=\"esical-day\";\n  if(evs.length){ cls+=\" has\"; }\n  if(dt.getDay()===0){ cls+=\" wknd\"; }\n  if(dt.getDay()===6){ cls+=\" wknd\"; }\n  if(k===hoyK){ cls+=\" today\"; }\n  if(k===selDay){ cls+=\" sel\"; }\n  cell.className=cls;\n  cell.appendChild(document.createTextNode(String(d)));\n  cell.setAttribute(\"data-k\",k);\n\n  if(evs.length){\n    var cortos=[], largos=[];\n    evs.forEach(function(e){\n      var g=grupoDe(e.categoria);\n      var lista=(dur(e)>DIAS_FONDO)?largos:cortos;\n      if(lista.indexOf(g)<0){ lista.push(g); }\n    });\n    cortos.sort(function(a,b){ return b.peso-a.peso; });\n    largos.sort(function(a,b){ return b.peso-a.peso; });\n    if(cortos.length){\n      cell.style.background=rgba(cortos[0].col,0.22);\n      var dots=document.createElement(\"div\"); dots.className=\"esical-dots\";\n      cortos.slice(0,3).forEach(function(g){\n        var i2=document.createElement(\"i\"); i2.style.setProperty(\"--dc\",g.col); dots.appendChild(i2);\n      });\n      cell.appendChild(dots);\n    }else{\n      if(largos.length){ cell.style.background=rgba(largos[0].col,0.10); }\n    }\n    cell.setAttribute(\"aria-label\", d+\" de \"+MESES[m]+\": \"+evs.length+\" evento(s)\");\n    cell.addEventListener(\"mouseenter\",function(){ if(!pinned){ muestraTip(cell,k); } });\n    cell.addEventListener(\"mouseleave\",function(){ if(!pinned){ ocultaTip(); } });\n    cell.addEventListener(\"focus\",function(){ muestraTip(cell,k); });\n    cell.addEventListener(\"blur\",function(){ if(!pinned){ ocultaTip(); } });\n    cell.addEventListener(\"click\",function(ev){\n      ev.stopPropagation();\n      if(selDay===k){ selDay=null; pinned=null; ocultaTip(); render(); return; }\n      selDay=k; pinned=k; render();\n      var nuevo=elYear.querySelector('[data-k=\"'+k+'\"]');\n      if(nuevo){ muestraTip(nuevo,k); }\n    });\n  }\n  return cell;\n}\n\n\/\/ ---------- bloc de notas del mes ----------\nfunction notas(y,m){\n  var box=document.createElement(\"ul\"); box.className=\"esical-notes\";\n  var ini=new Date(y,m,1), fin=new Date(y,m+1,0);\n  var lista=eventos.filter(function(e){\n    if(!visible(e)){ return false; }\n    var i=parse(e.inicio);\n    if(i<ini){ return false; }\n    if(i>fin){ return false; }\n    return true;\n  }).sort(function(a,b){\n    var ia=parse(a.inicio), ib=parse(b.inicio);\n    if(ia-ib!==0){ return ia-ib; }\n    return grupoDe(b.categoria).peso-grupoDe(a.categoria).peso;\n  });\n\n  if(!lista.length){\n    var v=document.createElement(\"li\"); v.className=\"esical-empty\";\n    txt(v,\"Sin fechas se\u00f1aladas.\");\n    box.appendChild(v);\n    return box;\n  }\n\n  lista.forEach(function(e){\n    var g=grupoDe(e.categoria);\n    var li=document.createElement(\"li\");\n    li.className=\"esical-note\";\n    if(selDay){ if(dentro(e,selDay)){ li.className+=\" on\"; } }\n    li.style.setProperty(\"--cc\", g.col);\n    var nd=document.createElement(\"span\"); nd.className=\"nday\"; txt(nd, rotulo(e));\n    var nt=document.createElement(\"div\"); nt.className=\"ntxt\";\n    nt.appendChild(document.createTextNode(e.titulo||\"\"));\n    if(e.detalle){ var em=document.createElement(\"em\"); txt(em,e.detalle); nt.appendChild(em); }\n    li.appendChild(nd); li.appendChild(nt);\n    li.addEventListener(\"click\",function(){\n      var i=parse(e.inicio);\n      if(i<ini){ i=ini; }\n      selDay=clave(i); pinned=selDay; render();\n      var c=elYear.querySelector('[data-k=\"'+selDay+'\"]');\n      if(c){ muestraTip(c,selDay); c.scrollIntoView({block:\"nearest\"}); }\n    });\n    box.appendChild(li);\n  });\n  return box;\n}\n\nfunction dentro(e,k){\n  var d=parse(k);\n  if(d<parse(e.inicio)){ return false; }\n  if(d>parse(e.fin||e.inicio)){ return false; }\n  return true;\n}\n\nfunction rotulo(e){\n  var i=parse(e.inicio), f=parse(e.fin||e.inicio);\n  if(e.inicio===(e.fin||e.inicio)){ return i.getDate()+\" \"+MESC[i.getMonth()]; }\n  if(i.getMonth()===f.getMonth()){\n    if(i.getFullYear()===f.getFullYear()){ return i.getDate()+\"\u2013\"+f.getDate()+\" \"+MESC[i.getMonth()]; }\n  }\n  return i.getDate()+\" \"+MESC[i.getMonth()]+\" \u2013 \"+f.getDate()+\" \"+MESC[f.getMonth()];\n}\n\n\/\/ ---------- tooltip ----------\nfunction muestraTip(cell,k){\n  var evs=visibles(k);\n  if(!evs.length){ ocultaTip(); return; }\n  var d=parse(k);\n  elTip.innerHTML=\"\";\n  var h=document.createElement(\"span\"); h.className=\"tday\";\n  txt(h, may(DIAS[d.getDay()])+\", \"+d.getDate()+\" de \"+MESES[d.getMonth()]+\" de \"+d.getFullYear());\n  elTip.appendChild(h);\n  evs.forEach(function(e){\n    var g=grupoDe(e.categoria);\n    var row=document.createElement(\"div\"); row.className=\"tit\";\n    row.style.setProperty(\"--cc\", g.col);\n    var b=document.createElement(\"span\"); b.className=\"b\"; row.appendChild(b);\n    var box=document.createElement(\"div\");\n    box.appendChild(document.createTextNode(e.titulo||\"\"));\n    var s=document.createElement(\"small\");\n    txt(s,(e.detalle ? e.detalle+\" \u00b7 \" : \"\")+g.nom+rango2(e));\n    box.appendChild(s);\n    row.appendChild(box);\n    elTip.appendChild(row);\n  });\n\n  elTip.classList.add(\"show\");\n  elTip.setAttribute(\"aria-hidden\",\"false\");\n  var rc=cell.getBoundingClientRect(), rr=root.getBoundingClientRect();\n  var w=elTip.offsetWidth, hgt=elTip.offsetHeight;\n  var x=rc.left-rr.left+(rc.width\/2)-(w\/2);\n  if(x<4){ x=4; }\n  if(x+w>rr.width-4){ x=rr.width-w-4; }\n  var yy=rc.top-rr.top-hgt-8;\n  if(yy<0){ yy=rc.top-rr.top+rc.height+8; }\n  elTip.style.left=x+\"px\";\n  elTip.style.top=yy+\"px\";\n}\nfunction rango2(e){\n  if(e.inicio===(e.fin||e.inicio)){ return \"\"; }\n  var i=parse(e.inicio), f=parse(e.fin);\n  return \" \u00b7 del \"+i.getDate()+\"\/\"+(i.getMonth()+1)+\" al \"+f.getDate()+\"\/\"+(f.getMonth()+1);\n}\nfunction ocultaTip(){\n  elTip.classList.remove(\"show\");\n  elTip.setAttribute(\"aria-hidden\",\"true\");\n}\n\n\/\/ ---------- ventana flotante con las fechas de una categoria ----------\nfunction abreModal(gid){\n  grupoActivo=gid;\n  \/\/ WordPress puede meter el bloque dentro de contenedores con transform\/filter,\n  \/\/ que rompen position:fixed. Sacando la ventana al body siempre queda por encima.\n  if(modal.parentNode!==document.body){ document.body.appendChild(modal); }\n  scrollBloqueado=document.body.style.overflow;\n  document.body.style.overflow=\"hidden\";\n  modal.hidden=false;\n  pintaModal();\n  var x=modal.querySelector(\".esical-modal-x\");\n  if(x){ x.focus(); }\n}\nfunction cierraModal(){\n  modal.hidden=true;\n  document.body.style.overflow=scrollBloqueado||\"\";\n}\n\nfunction pintaModal(){\n  var g=null;\n  grupos.forEach(function(o){ if(o.id===grupoActivo){ g=o; } });\n  if(!g){ g=grupos[0]; grupoActivo=g.id; }\n\n  \/\/ chips para saltar de una categoria a otra sin cerrar\n  modalChips.innerHTML=\"\";\n  grupos.forEach(function(o){\n    var b=document.createElement(\"button\");\n    b.type=\"button\"; b.className=\"esical-chip\";\n    b.setAttribute(\"aria-pressed\", (o.id===grupoActivo)?\"true\":\"false\");\n    b.style.setProperty(\"--cc\", o.col);\n    var d=document.createElement(\"span\"); d.className=\"dot\"; b.appendChild(d);\n    b.appendChild(document.createTextNode(o.nom));\n    b.addEventListener(\"click\",function(){ grupoActivo=o.id; pintaModal(); modalBody.scrollTop=0; });\n    modalChips.appendChild(b);\n  });\n\n  var lista=eventos.filter(function(e){ return g.cats.indexOf(e.categoria)>=0; })\n    .sort(function(a,b){ return parse(a.inicio)-parse(b.inicio); });\n\n  var tit=modalTit;\n  tit.style.setProperty(\"--cc\", g.col);\n  txt(tit, g.nom);\n  txt(modalSub, lista.length+(lista.length===1?\" fecha\":\" fechas\")+\" en el calendario\");\n\n  modalBody.innerHTML=\"\";\n  if(!lista.length){\n    var v=document.createElement(\"div\"); v.className=\"esical-modal-vacio\";\n    txt(v,\"No hay fechas de este tipo.\");\n    modalBody.appendChild(v);\n    return;\n  }\n  var sec=document.createElement(\"section\"); sec.className=\"esical-grupo\";\n  sec.style.setProperty(\"--cc\", g.col);\n  lista.forEach(function(e){\n    var fila=document.createElement(\"div\"); fila.className=\"esical-fila\";\n    fila.style.setProperty(\"--cc\", g.col);\n    var fd=document.createElement(\"span\"); fd.className=\"fd\"; txt(fd, rotuloLargo(e));\n    var ft=document.createElement(\"div\"); ft.className=\"ft\";\n    ft.appendChild(document.createTextNode(e.titulo||\"\"));\n    if(e.detalle){ var em=document.createElement(\"em\"); txt(em,e.detalle); ft.appendChild(em); }\n    fila.appendChild(fd); fila.appendChild(ft);\n    fila.addEventListener(\"click\",function(){\n      cierraModal();\n      selDay=e.inicio; pinned=e.inicio; render();\n      var c=elYear.querySelector('[data-k=\"'+e.inicio+'\"]');\n      if(c){ c.scrollIntoView({behavior:\"smooth\",block:\"center\"}); muestraTip(c,e.inicio); }\n    });\n    sec.appendChild(fila);\n  });\n  modalBody.appendChild(sec);\n}\n\nfunction rotuloLargo(e){\n  var i=parse(e.inicio), f=parse(e.fin||e.inicio);\n  var ay=(i.getFullYear()!==f.getFullYear());\n  if(e.inicio===(e.fin||e.inicio)){ return i.getDate()+\" \"+MESC[i.getMonth()]+\" \"+i.getFullYear(); }\n  if(i.getMonth()===f.getMonth()){\n    if(!ay){ return i.getDate()+\"\u2013\"+f.getDate()+\" \"+MESC[i.getMonth()]+\" \"+i.getFullYear(); }\n  }\n  return i.getDate()+\" \"+MESC[i.getMonth()]+\" \u2013 \"+f.getDate()+\" \"+MESC[f.getMonth()]+\" \"+f.getFullYear();\n}\n\n\/\/ ---------- controles ----------\nmodal.querySelectorAll(\"[data-esical-cerrar]\").forEach(function(b){\n  b.addEventListener(\"click\",function(ev){ ev.stopPropagation(); cierraModal(); });\n});\ndocument.addEventListener(\"keydown\",function(ev){ if(ev.key===\"Escape\"){ cierraModal(); } });\ndocument.addEventListener(\"click\",function(ev){\n  if(!pinned){ return; }\n  if(root.contains(ev.target)){ return; }\n  if(modal.contains(ev.target)){ return; }\n  pinned=null; selDay=null; ocultaTip(); render();\n});\nwindow.addEventListener(\"resize\",function(){ if(pinned){ pinned=null; selDay=null; ocultaTip(); render(); } });\n\narranca();\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Calendario acad\u00e9mico Pulsa un tipo para ver todas sus fechas del curso Fechas del curso \u00d7<\/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-23803","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Calendario Acad\u00e9mico ESI - Escuela Superior de Inform\u00e1tica de UCLM<\/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:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calendario Acad\u00e9mico ESI - Escuela Superior de Inform\u00e1tica de UCLM\" \/>\n<meta property=\"og:description\" content=\"Calendario acad\u00e9mico Pulsa un tipo para ver todas sus fechas del curso Fechas del curso \u00d7\" \/>\n<meta property=\"og:url\" content=\"https:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/\" \/>\n<meta property=\"og:site_name\" content=\"Escuela Superior de Inform\u00e1tica de UCLM\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Escuela-Superior-de-Informtica-543261809027158\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-08T14:03:19+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@esiuclm\" \/>\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:\\\/\\\/esi.uclm.es\\\/index.php\\\/calendario-academico-esi\\\/\",\"url\":\"https:\\\/\\\/esi.uclm.es\\\/index.php\\\/calendario-academico-esi\\\/\",\"name\":\"Calendario Acad\u00e9mico ESI - Escuela Superior de Inform\u00e1tica de UCLM\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/esi.uclm.es\\\/#website\"},\"datePublished\":\"2026-09-08T12:18:19+00:00\",\"dateModified\":\"2026-09-08T14:03:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/esi.uclm.es\\\/index.php\\\/calendario-academico-esi\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/esi.uclm.es\\\/index.php\\\/calendario-academico-esi\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/esi.uclm.es\\\/index.php\\\/calendario-academico-esi\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/esi.uclm.es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calendario Acad\u00e9mico ESI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/esi.uclm.es\\\/#website\",\"url\":\"https:\\\/\\\/esi.uclm.es\\\/\",\"name\":\"Escuela Superior de Inform\u00e1tica de UCLM en Ciudad Real, Castilla-La Mancha\",\"description\":\"La Escuela Superior de Inform\u00e1tica de Ciudad Real (Castilla-La Mancha), Universidad de Castilla-La Mancha es un centro universitario que imparte el ciclo completo de Ingenier\u00eda en Inform\u00e1tica: grado, m\u00e1ster y doctorado.\",\"publisher\":{\"@id\":\"https:\\\/\\\/esi.uclm.es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/esi.uclm.es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/esi.uclm.es\\\/#organization\",\"name\":\"Escuela Superior de Inform\u00e1tica de UCLM\",\"url\":\"https:\\\/\\\/esi.uclm.es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/esi.uclm.es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/esi.uclm.es\\\/assets\\\/uploads\\\/2022\\\/03\\\/LogoESI_cabecera-1.png\",\"contentUrl\":\"https:\\\/\\\/esi.uclm.es\\\/assets\\\/uploads\\\/2022\\\/03\\\/LogoESI_cabecera-1.png\",\"width\":460,\"height\":184,\"caption\":\"Escuela Superior de Inform\u00e1tica de UCLM\"},\"image\":{\"@id\":\"https:\\\/\\\/esi.uclm.es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Escuela-Superior-de-Informtica-543261809027158\",\"https:\\\/\\\/x.com\\\/esiuclm\",\"https:\\\/\\\/www.instagram.com\\\/esiuclm\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/esiuclm\",\"https:\\\/\\\/www.twitch.tv\\\/esiuclm\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/12656631\\\/admin\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Calendario Acad\u00e9mico ESI - Escuela Superior de Inform\u00e1tica de UCLM","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:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/","og_locale":"es_ES","og_type":"article","og_title":"Calendario Acad\u00e9mico ESI - Escuela Superior de Inform\u00e1tica de UCLM","og_description":"Calendario acad\u00e9mico Pulsa un tipo para ver todas sus fechas del curso Fechas del curso \u00d7","og_url":"https:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/","og_site_name":"Escuela Superior de Inform\u00e1tica de UCLM","article_publisher":"https:\/\/www.facebook.com\/Escuela-Superior-de-Informtica-543261809027158","article_modified_time":"2026-09-08T14:03:19+00:00","twitter_card":"summary_large_image","twitter_site":"@esiuclm","twitter_misc":{"Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/","url":"https:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/","name":"Calendario Acad\u00e9mico ESI - Escuela Superior de Inform\u00e1tica de UCLM","isPartOf":{"@id":"https:\/\/esi.uclm.es\/#website"},"datePublished":"2026-09-08T12:18:19+00:00","dateModified":"2026-09-08T14:03:19+00:00","breadcrumb":{"@id":"https:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/esi.uclm.es\/index.php\/calendario-academico-esi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/esi.uclm.es\/"},{"@type":"ListItem","position":2,"name":"Calendario Acad\u00e9mico ESI"}]},{"@type":"WebSite","@id":"https:\/\/esi.uclm.es\/#website","url":"https:\/\/esi.uclm.es\/","name":"Escuela Superior de Inform\u00e1tica de UCLM en Ciudad Real, Castilla-La Mancha","description":"La Escuela Superior de Inform\u00e1tica de Ciudad Real (Castilla-La Mancha), Universidad de Castilla-La Mancha es un centro universitario que imparte el ciclo completo de Ingenier\u00eda en Inform\u00e1tica: grado, m\u00e1ster y doctorado.","publisher":{"@id":"https:\/\/esi.uclm.es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/esi.uclm.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/esi.uclm.es\/#organization","name":"Escuela Superior de Inform\u00e1tica de UCLM","url":"https:\/\/esi.uclm.es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/esi.uclm.es\/#\/schema\/logo\/image\/","url":"https:\/\/esi.uclm.es\/assets\/uploads\/2022\/03\/LogoESI_cabecera-1.png","contentUrl":"https:\/\/esi.uclm.es\/assets\/uploads\/2022\/03\/LogoESI_cabecera-1.png","width":460,"height":184,"caption":"Escuela Superior de Inform\u00e1tica de UCLM"},"image":{"@id":"https:\/\/esi.uclm.es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Escuela-Superior-de-Informtica-543261809027158","https:\/\/x.com\/esiuclm","https:\/\/www.instagram.com\/esiuclm\/","https:\/\/www.youtube.com\/user\/esiuclm","https:\/\/www.twitch.tv\/esiuclm","https:\/\/www.linkedin.com\/company\/12656631\/admin\/"]}]}},"_links":{"self":[{"href":"https:\/\/esi.uclm.es\/index.php\/wp-json\/wp\/v2\/pages\/23803","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esi.uclm.es\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/esi.uclm.es\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/esi.uclm.es\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esi.uclm.es\/index.php\/wp-json\/wp\/v2\/comments?post=23803"}],"version-history":[{"count":7,"href":"https:\/\/esi.uclm.es\/index.php\/wp-json\/wp\/v2\/pages\/23803\/revisions"}],"predecessor-version":[{"id":23812,"href":"https:\/\/esi.uclm.es\/index.php\/wp-json\/wp\/v2\/pages\/23803\/revisions\/23812"}],"wp:attachment":[{"href":"https:\/\/esi.uclm.es\/index.php\/wp-json\/wp\/v2\/media?parent=23803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}