{"id":1243,"date":"2026-03-14T21:17:33","date_gmt":"2026-03-14T21:17:33","guid":{"rendered":"https:\/\/dondevamos.com.ar\/wp\/?page_id=1243"},"modified":"2026-05-03T12:07:50","modified_gmt":"2026-05-03T12:07:50","slug":"agenda","status":"publish","type":"page","link":"https:\/\/dondevamos.com.ar\/wp\/agenda\/","title":{"rendered":"Agenda"},"content":{"rendered":"\n<style>\nh1.wp-block-post-title{display:none} \n\n\n<\/style>\n\n\n\n<div class=\"wp-block-group alignfull is-vertical is-content-justification-stretch is-nowrap is-layout-flex wp-container-core-group-is-layout-73b0033c wp-block-group-is-layout-flex wp-container-13 is-position-sticky\"><nav class=\"has-background has-custom-negro-background-color items-justified-center alignfull wp-block-navigation is-horizontal is-content-justification-center is-layout-flex wp-container-core-navigation-is-layout-d68a6c7c wp-block-navigation-is-layout-flex\" aria-label=\"Menu Secciones\">\n<div class=\"wp-block-buttons wp-container-content-9cfa9a5a is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-32ab6faf wp-block-buttons-is-layout-flex\">\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--2\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/actualidad\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">actualidad<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--3\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/notas\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">Notas<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--4\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/social\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">social<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--5\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/agro\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">Agro<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--6\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/bienestar\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">bienestar<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--7\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/moda\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">MODA<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--8\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/deco\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">deco<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--9\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/musica\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">Musica<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--10\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/recorrida\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">Recorrida<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--11\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/agenda\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">Agenda<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline dv-btn-back is-style-outline--12\"><a class=\"wp-block-button__link has-accent-4-color has-custom-negro-background-color has-text-color has-background has-link-color has-monarch-bc-font-family has-small-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/dondevamos.com.ar\/wp\/horoscopo\/\" style=\"border-style:none;border-width:0px;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-right:0px;padding-left:0px;font-style:normal;font-weight:700\">horoscopo<\/a><\/div>\n<\/div>\n<\/nav><\/div>\n\n\n\n\n\n\n<p><style>\nh1.wp-block-post-title{display:none}<br \/>\n.is-style-outline--3 .wp-block-button__link {<br \/>\n    background-color: #ffffff !important;<br \/>\n    color: #000000; \/* opcional *\/<br \/>\n}<br \/>\n<\/style>\n<\/p>\n\n\n\n\n<!-- BLOQUE HTML PERSONALIZADO - Pegar en WordPress -->\n<div id=\"agenda-container\">\n  <div id=\"agenda-filtros\"><\/div>\n  <div id=\"agenda-lista\"><\/div>\n<\/div>\n\n<style>\n#agenda-container {\n  font-family: inherit;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 1rem;\n  color: #000;\n}\n\n\/* \u2500\u2500 FILTROS \u2500\u2500 *\/\n#agenda-filtros {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin: 2rem 0 2.5rem;\n  justify-content: center;\n  padding: 1.5rem 0;\n}\n\n.agenda-fila-filtros {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  justify-content: center;\n  width: 100%;\n}\n\n.agenda-fila-hijos {\n  margin-top: 8px;\n}\n\n.agenda-filtro-btn {\n  padding: 6px 18px;\n  border: 2px solid #000;\n  background: transparent;\n  color: #000;\n  font-family: inherit;\n  font-size: 0.85rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  cursor: pointer;\n  transition: background 0.2s, color 0.2s;\n  border-radius: 2px;\n}\n\n.agenda-filtro-btn:hover,\n.agenda-filtro-btn.activo {\n  background: #000;\n  color: #fff;\n}\n\n.agenda-filtro-btn.agenda-filtro-hijo {\n  font-size: 0.78rem;\n  opacity: 0.7;\n}\n\n.agenda-filtro-btn.agenda-filtro-hijo.activo,\n.agenda-filtro-btn.agenda-filtro-hijo:hover {\n  background: #000;\n  color: #fff;\n  opacity: 1;\n}\n\n\/* \u2500\u2500 GRUPO DE D\u00cdA \u2500\u2500 *\/\n.agenda-dia-grupo { margin-bottom: 2rem; }\n\n.agenda-dia-titulo {\n  font-size: 1rem;\n  font-weight: 900;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  border-bottom: 2px solid #000;\n  padding-bottom: 6px;\n  margin-bottom: 12px;\n  color: #000;\n}\n\n\/* \u2500\u2500 ITEM EVENTO \u2500\u2500 *\/\n.agenda-item {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  padding: 8px 0;\n  border-bottom: 1px solid rgba(0,0,0,0.12);\n  text-decoration: none;\n  color: #000;\n  transition: opacity 0.2s;\n}\n\n.agenda-item:hover { opacity: 0.6; }\n\n.agenda-item img {\n  width: 64px;\n  height: 64px;\n  object-fit: cover;\n  flex-shrink: 0;\n  border-radius: 2px;\n  background: #eee;\n}\n\n.agenda-item-sin-foto {\n  width: 64px;\n  height: 64px;\n  background: #eee;\n  flex-shrink: 0;\n  border-radius: 2px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1.5rem;\n}\n\n.agenda-item-info { flex: 1; min-width: 0; }\n\n.agenda-item-titulo {\n  font-size: 0.9rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  line-height: 1.3;\n}\n\n.agenda-item-meta {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 4px;\n}\n\n.agenda-item-hora {\n  font-size: 0.75rem;\n  opacity: 0.5;\n}\n\n.agenda-item-tag {\n  font-size: 0.68rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  opacity: 0.45;\n  border: 1px solid rgba(0,0,0,0.3);\n  padding: 1px 6px;\n  border-radius: 2px;\n  white-space: nowrap;\n}\n\n\/* Badge para eventos de rango *\/\n.agenda-item-rango {\n  font-size: 0.68rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  opacity: 0.4;\n  white-space: nowrap;\n}\n\n.agenda-loading,\n.agenda-vacia {\n  text-align: center;\n  padding: 3rem 0;\n  opacity: 0.5;\n  font-size: 0.9rem;\n}\n<\/style>\n\n<script>\n(function () {\n  const POST_TYPE     = 'publicacion';\n  const TAXONOMY_SLUG = 'tipo_de_evento';\n  const SECCION_SLUG  = 'seccion';\n  const SECCION_TERM  = 14;\n  const PER_PAGE      = 100;\n  const API_BASE      = '\/wp\/wp-json\/wp\/v2';\n\n  const contenedor = document.getElementById('agenda-lista');\n  const filtrosEl  = document.getElementById('agenda-filtros');\n  let todosLosEventos = [];\n  let tiposCache      = [];\n  let filtroActivo    = null;\n\n  const MESES = ['Enero','Febrero','Marzo','Abril','Mayo','Junio',\n                 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];\n\n  function hoyLocal() {\n    const d = new Date();\n    return `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;\n  }\n\n  function parsearFechaACF(ev, campo) {\n    const str = ev?.acf?.[campo]?.value;\n    if (!str) return null;\n    const f = new Date(str.replace(' ', 'T'));\n    return isNaN(f) ? null : f;\n  }\n\n  \/\/ Parsea \"2026-03-21 21, 2026-03-28 23\" \u2192 array de Date\n  function parsearFechasExtra(ev) {\n    const str = ev?.acf?.fechas_extra?.value;\n    if (!str) return [];\n    return str.split(',').map(s => {\n      s = s.trim();\n      \/\/ Formato YYYY-MM-DD HH \u2192 agregar :00:00\n      const m = s.match(\/^(\\d{4}-\\d{2}-\\d{2})\\s+(\\d{1,2})$\/);\n      if (m) return new Date(`${m[1]}T${m[2].padStart(2,'0')}:00:00`);\n      \/\/ Formato completo por las dudas\n      return new Date(s.replace(' ', 'T'));\n    }).filter(f => !isNaN(f));\n  }\n\n  function claveDia(fecha) {\n    return `${fecha.getFullYear()}-${String(fecha.getMonth()+1).padStart(2,'0')}-${String(fecha.getDate()).padStart(2,'0')}`;\n  }\n\n  function formatDia(fecha) {\n    return `${fecha.getDate()} ${MESES[fecha.getMonth()]}`;\n  }\n\n  function formatHora(fecha) {\n    return `${String(fecha.getHours()).padStart(2,'0')}:${String(fecha.getMinutes()).padStart(2,'0')} hs`;\n  }\n\n  \/\/ Suma d\u00edas a una fecha sin mutar el original\n  function sumarDias(fecha, n) {\n    const d = new Date(fecha);\n    d.setDate(d.getDate() + n);\n    return d;\n  }\n\n  \/\/ Normaliza una fecha a medianoche local\n  function medianoche(fecha) {\n    return new Date(fecha.getFullYear(), fecha.getMonth(), fecha.getDate());\n  }\n\n  async function cargarTipos() {\n    const res = await fetch(`${API_BASE}\/${TAXONOMY_SLUG}?per_page=50&_fields=id,name,parent`);\n    if (!res.ok) return [];\n    const todos = await res.json();\n    const padres = todos.filter(t => t.parent === 0).sort((a,b) => a.name.localeCompare(b.name));\n    const resultado = [];\n    padres.forEach(padre => {\n      resultado.push(padre);\n      todos.filter(t => t.parent === padre.id)\n           .sort((a,b) => a.name.localeCompare(b.name))\n           .forEach(hijo => resultado.push({ ...hijo, _esHijo: true }));\n    });\n    return resultado;\n  }\n\n  async function cargarEventos() {\n    const url = `${API_BASE}\/${POST_TYPE}?per_page=${PER_PAGE}&${SECCION_SLUG}=${SECCION_TERM}&_fields=id,title,link,featured_media,acf,${TAXONOMY_SLUG}`;\n    const res = await fetch(url);\n    if (!res.ok) throw new Error(`HTTP ${res.status}`);\n    return res.json();\n  }\n\n  async function cargarImagenes(eventos) {\n    const ids = [...new Set(eventos.map(ev => ev.featured_media).filter(id => id > 0))];\n    if (!ids.length) return {};\n    const res = await fetch(`${API_BASE}\/media?include=${ids.join(',')}&per_page=${ids.length}&_fields=id,media_details,source_url`);\n    if (!res.ok) return {};\n    const medias = await res.json();\n    const mapa = {};\n    medias.forEach(m => {\n      mapa[m.id] = m.media_details?.sizes?.thumbnail?.source_url\n                || m.media_details?.sizes?.medium?.source_url\n                || m.source_url || '';\n    });\n    return mapa;\n  }\n\n  function renderFiltros(tipos) {\n    tiposCache = tipos;\n    filtrosEl.innerHTML = '';\n\n    const fila1 = document.createElement('div');\n    fila1.className = 'agenda-fila-filtros';\n\n    const btnTodos = document.createElement('button');\n    btnTodos.className = 'agenda-filtro-btn activo';\n    btnTodos.textContent = 'Todos';\n    btnTodos.dataset.id = '';\n    fila1.appendChild(btnTodos);\n\n    tipos.filter(t => !t._esHijo).forEach(t => {\n      const btn = document.createElement('button');\n      btn.className = 'agenda-filtro-btn';\n      btn.textContent = t.name;\n      btn.dataset.id = t.id;\n      fila1.appendChild(btn);\n    });\n\n    filtrosEl.appendChild(fila1);\n\n    const fila2 = document.createElement('div');\n    fila2.className = 'agenda-fila-filtros agenda-fila-hijos';\n    fila2.style.display = 'none';\n    filtrosEl.appendChild(fila2);\n\n    filtrosEl.addEventListener('click', e => {\n      const btn = e.target.closest('.agenda-filtro-btn');\n      if (!btn) return;\n      const id = btn.dataset.id ? Number(btn.dataset.id) : null;\n      const tipo = tiposCache.find(t => t.id === id);\n      const esPadre = !tipo?._esHijo;\n\n      filtrosEl.querySelectorAll('.agenda-filtro-btn').forEach(b => b.classList.remove('activo'));\n      btn.classList.add('activo');\n\n      if (!id) {\n        filtroActivo = null;\n        fila2.style.display = 'none';\n        fila2.innerHTML = '';\n      } else if (esPadre) {\n        filtroActivo = id;\n        const hijos = tiposCache.filter(t => t.parent === id);\n        if (hijos.length) {\n          fila2.innerHTML = '';\n          hijos.forEach(h => {\n            const b = document.createElement('button');\n            b.className = 'agenda-filtro-btn agenda-filtro-hijo';\n            b.textContent = h.name;\n            b.dataset.id = h.id;\n            fila2.appendChild(b);\n          });\n          fila2.style.display = 'flex';\n        } else {\n          fila2.style.display = 'none';\n          fila2.innerHTML = '';\n        }\n      } else {\n        filtroActivo = id;\n      }\n      renderLista();\n    });\n  }\n\n  \/\/ Devuelve el nombre del tipo de evento m\u00e1s espec\u00edfico del post\n  function getNombreTipo(ev) {\n    const ids = ev[TAXONOMY_SLUG] || [];\n    if (!ids.length) return '';\n    \/\/ Preferir hijo sobre padre si tiene ambos\n    const hijo = tiposCache.find(t => t._esHijo && ids.includes(t.id));\n    if (hijo) return hijo.name;\n    const padre = tiposCache.find(t => !t._esHijo && ids.includes(t.id));\n    return padre ? padre.name : '';\n  }\n\n  function renderLista() {\n    const hoy = hoyLocal();\n\n    \/\/ Expandir eventos con rango en entradas por d\u00eda\n    const entradas = []; \/\/ { ev, fecha, esRango }\n\n    todosLosEventos.forEach(ev => {\n      \/\/ Filtro por tipo\n      if (filtroActivo) {\n        const tipos = ev[TAXONOMY_SLUG] || [];\n        \/\/ Incluir si coincide directamente O si el padre coincide\n        const padreActivo = tiposCache.find(t => t.id === filtroActivo && !t._esHijo);\n        const hijosDelPadre = padreActivo ? tiposCache.filter(t => t.parent === padreActivo.id).map(t => t.id) : [];\n        const idsValidos = [filtroActivo, ...hijosDelPadre];\n        if (!tipos.some(id => idsValidos.includes(id))) return;\n      }\n\n      const fechaFin   = parsearFechaACF(ev, 'fecha_de_evento');\n      const fechaIni   = parsearFechaACF(ev, 'fecha_inicio_de_evento');\n      const fechasExtra = parsearFechasExtra(ev);\n\n      if (!fechaFin) return;\n\n      if (fechaIni) {\n        \/\/ Rango continuo\n        const diasRango = ev?.acf?.dias_del_rango?.value || 'todos';\n        const inicio = medianoche(fechaIni) < medianoche(new Date()) ? medianoche(new Date()) : medianoche(fechaIni);\n        const fin    = medianoche(fechaFin);\n        if (fin < medianoche(new Date())) return;\n        let cursor = new Date(inicio);\n        while (cursor <= fin) {\n          const diaSemana = cursor.getDay(); \/\/ 0=Dom, 6=Sab\n          const esFinDe   = diaSemana === 0 || diaSemana === 6;\n          const incluir   = diasRango === 'todos'\n                         || (diasRango === 'habiles' &#038;&#038; !esFinDe)\n                         || (diasRango === 'finde'   &#038;&#038; esFinDe);\n          if (incluir &#038;&#038; claveDia(cursor) >= hoy) {\n            entradas.push({ ev, fecha: new Date(cursor), esRango: true });\n          }\n          cursor = sumarDias(cursor, 1);\n        }\n      } else {\n        \/\/ Fecha principal\n        if (claveDia(fechaFin) >= hoy) {\n          entradas.push({ ev, fecha: fechaFin, esRango: false });\n        }\n        \/\/ Fechas extra\n        fechasExtra.forEach(f => {\n          if (claveDia(f) >= hoy) {\n            entradas.push({ ev, fecha: f, esRango: false });\n          }\n        });\n      }\n    });\n\n    \/\/ Ordenar por fecha y hora\n    entradas.sort((a, b) => {\n      const claveA = claveDia(a.fecha);\n      const claveB = claveDia(b.fecha);\n      if (claveA !== claveB) return a.fecha - b.fecha; \/\/ distinto d\u00eda\n      \/\/ Mismo d\u00eda: ordenar por hora del evento (fecha_de_evento)\n      const horaA = parsearFechaACF(a.ev, 'fecha_de_evento') || a.fecha;\n      const horaB = parsearFechaACF(b.ev, 'fecha_de_evento') || b.fecha;\n      return horaA - horaB;\n    });\n\n    if (entradas.length === 0) {\n      contenedor.innerHTML = '<div class=\"agenda-vacia\">No hay eventos pr\u00f3ximos.<\/div>';\n      return;\n    }\n\n    \/\/ Agrupar por d\u00eda\n    const grupos = {}, orden = [];\n    entradas.forEach(entrada => {\n      const clave = claveDia(entrada.fecha);\n      if (!grupos[clave]) { grupos[clave] = { fecha: entrada.fecha, items: [] }; orden.push(clave); }\n      grupos[clave].items.push(entrada);\n    });\n\n    let html = '';\n    orden.forEach(clave => {\n      const { fecha, items } = grupos[clave];\n      html += `<div class=\"agenda-dia-grupo\"><div class=\"agenda-dia-titulo\">${formatDia(fecha)}<\/div>`;\n      items.forEach(({ ev, fecha: fechaItem, esRango }) => {\n        const titulo    = ev.title?.rendered || '';\n        const link      = ev.link || '#';\n        const hora      = formatHora(fechaItem);\n        const imgUrl    = ev._imgUrl || '';\n        const nombreTipo = getNombreTipo(ev);\n        const tituloSeguro = titulo.replace(\/\"\/g, '&quot;').replace(\/'\/g, '&#39;');\n        const imgHtml   = imgUrl\n          ? `<img decoding=\"async\" src=\"${imgUrl}\" alt=\"${tituloSeguro}\" loading=\"lazy\">`\n          : `<div class=\"agenda-item-sin-foto\">&#x1f3b5;<\/div>`;\n        const tagHtml   = nombreTipo ? `<span class=\"agenda-item-tag\">${nombreTipo}<\/span>` : '';\n        const fechaFinEv = parsearFechaACF(ev, 'fecha_de_evento');\n        const rangoHtml = esRango && fechaFinEv\n          ? `<span class=\"agenda-item-rango\">hasta ${formatDia(fechaFinEv)}<\/span>` : '';\n\n        html += `<a class=\"agenda-item\" href=\"${link}\">\n          ${imgHtml}\n          <div class=\"agenda-item-info\">\n            <div class=\"agenda-item-titulo\">${titulo}<\/div>\n            <div class=\"agenda-item-meta\">\n              <span class=\"agenda-item-hora\">${hora}<\/span>\n              ${tagHtml}\n              ${rangoHtml}\n            <\/div>\n          <\/div>\n        <\/a>`;\n      });\n      html += `<\/div>`;\n    });\n    contenedor.innerHTML = html;\n  }\n\n  async function init() {\n    contenedor.innerHTML = '<div class=\"agenda-loading\">Cargando eventos...<\/div>';\n    try {\n      const [tipos, eventos] = await Promise.all([cargarTipos(), cargarEventos()]);\n      const mapaImagenes = await cargarImagenes(eventos);\n      eventos.forEach(ev => { ev._imgUrl = mapaImagenes[ev.featured_media] || ''; });\n      todosLosEventos = eventos;\n      renderFiltros(tipos);\n      renderLista();\n    } catch (err) {\n      contenedor.innerHTML = `<div class=\"agenda-vacia\">Error: ${err.message}<\/div>`;\n      console.error('[Agenda]', err);\n    }\n  }\n\n  init();\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-1243","page","type-page","status-publish","hentry"],"acf":[],"mb":[],"mfb_rest_fields":["title"],"_links":{"self":[{"href":"https:\/\/dondevamos.com.ar\/wp\/wp-json\/wp\/v2\/pages\/1243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dondevamos.com.ar\/wp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dondevamos.com.ar\/wp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dondevamos.com.ar\/wp\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/dondevamos.com.ar\/wp\/wp-json\/wp\/v2\/comments?post=1243"}],"version-history":[{"count":29,"href":"https:\/\/dondevamos.com.ar\/wp\/wp-json\/wp\/v2\/pages\/1243\/revisions"}],"predecessor-version":[{"id":2702,"href":"https:\/\/dondevamos.com.ar\/wp\/wp-json\/wp\/v2\/pages\/1243\/revisions\/2702"}],"wp:attachment":[{"href":"https:\/\/dondevamos.com.ar\/wp\/wp-json\/wp\/v2\/media?parent=1243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}