{"id":802,"date":"2026-08-26T14:20:40","date_gmt":"2026-08-26T13:20:40","guid":{"rendered":"https:\/\/kuriosia.mur.at\/?page_id=802"},"modified":"2026-08-26T15:49:35","modified_gmt":"2026-08-26T14:49:35","slug":"timetable-kuriosia-gathering-2026","status":"publish","type":"page","link":"https:\/\/kuriosia.mur.at\/index.php\/timetable-kuriosia-gathering-2026\/","title":{"rendered":"Timetable &#8211; Kuriosia Gathering 2026"},"content":{"rendered":"\n<style data-wp-block-html=\"css\">\n#kuriosia-timetable {\n  --kt-green: #55634a;\n  --kt-green-dark: #37402f;\n  --kt-cream: #f5f1e8;\n  --kt-paper: #fffdf7;\n  --kt-border: rgba(55, 64, 47, 0.22);\n  --kt-muted: rgba(55, 64, 47, 0.68);\n  --kt-hour-height: 80px;\n\n  width: 100%;\n  color: var(--kt-green-dark);\n  font-family: inherit;\n}\n\n.kt-intro {\n  max-width: 820px;\n  margin: 0 auto 3rem;\n  text-align: center;\n}\n\n.kt-kicker {\n  display: block;\n  margin-bottom: 0.6rem;\n  font-size: 0.82rem;\n  font-weight: 700;\n  letter-spacing: 0.12em;\n  text-transform: uppercase;\n  color: var(--kt-green);\n}\n\n.kt-intro h1 {\n  margin: 0 0 1rem;\n  font-size: clamp(2.5rem, 6vw, 5rem);\n  line-height: 0.95;\n}\n\n.kt-intro p {\n  max-width: 680px;\n  margin: 0 auto;\n  font-size: 1.1rem;\n  line-height: 1.6;\n}\n\n.kt-day {\n  max-width: 1500px;\n  margin: 0 auto 5rem;\n}\n\n.kt-day-title {\n  margin-bottom: 1.25rem;\n}\n\n.kt-day-title h2 {\n  margin: 0;\n  font-size: clamp(2rem, 4vw, 3.5rem);\n}\n\n.kt-day-title p {\n  margin: 0.2rem 0 0;\n  color: var(--kt-muted);\n}\n\n.kt-scroll {\n  overflow-x: auto;\n  padding-bottom: 0.75rem;\n}\n\n.kt-table {\n  min-width: 900px;\n  overflow: hidden;\n  border: 1px solid var(--kt-border);\n  border-radius: 18px;\n  background: var(--kt-paper);\n  box-shadow: 0 14px 40px rgba(55, 64, 47, 0.08);\n}\n\n.kt-header {\n  display: grid;\n  grid-template-columns:\n    74px\n    repeat(var(--kt-location-count), minmax(150px, 1fr));\n\n  border-bottom: 1px solid var(--kt-border);\n  background: var(--kt-cream);\n}\n\n.kt-header-spacer {\n  border-right: 1px solid var(--kt-border);\n}\n\n.kt-location {\n  min-height: 62px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0.75rem;\n  text-align: center;\n  font-weight: 700;\n  border-right: 1px solid var(--kt-border);\n}\n\n.kt-location:last-child {\n  border-right: 0;\n}\n\n.kt-schedule {\n  display: grid;\n  grid-template-columns: 74px 1fr;\n}\n\n.kt-times {\n  position: relative;\n  border-right: 1px solid var(--kt-border);\n  background: var(--kt-cream);\n}\n\n.kt-time {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  padding-right: 11px;\n  text-align: right;\n  font-size: 0.75rem;\n  font-weight: 650;\n  color: var(--kt-muted);\n  transform: translateY(-50%);\n}\n\n.kt-stage {\n  position: relative;\n  min-width: 750px;\n  background-image:\n    linear-gradient(\n      to bottom,\n      transparent calc(50% - 0.5px),\n      rgba(55, 64, 47, 0.08) calc(50% - 0.5px),\n      rgba(55, 64, 47, 0.08) calc(50% + 0.5px),\n      transparent calc(50% + 0.5px)\n    );\n  background-size: 100% calc(var(--kt-hour-height) \/ 2);\n}\n\n.kt-grid-column {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 1px;\n  background: var(--kt-border);\n  pointer-events: none;\n}\n\n.kt-hour-line {\n  position: absolute;\n  left: 0;\n  right: 0;\n  border-top: 1px solid var(--kt-border);\n  pointer-events: none;\n}\n\n.kt-event {\n  position: absolute;\n  z-index: 2;\n  padding: 6px;\n  box-sizing: border-box;\n}\n\n.kt-event-card {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n\n  padding: 0.55rem 0.6rem;\n  overflow: hidden;\n\n  border: 1px solid rgba(55, 64, 47, 0.2);\n  border-radius: 10px;\n  background: rgba(255, 253, 247, 0.97);\n  box-shadow: 0 3px 10px rgba(55, 64, 47, 0.07);\n\n  text-align: center;\n\n  transition:\n    transform 0.15s ease,\n    box-shadow 0.15s ease;\n}\n\n.kt-event-card:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 7px 18px rgba(55, 64, 47, 0.13);\n}\n\n.kt-event-title {\n  font-weight: 750;\n  line-height: 1.15;\n}\n\n.kt-event-subtitle {\n  margin-top: 0.25rem;\n  font-size: 0.76rem;\n  line-height: 1.2;\n  opacity: 0.75;\n}\n\n.kt-event-time {\n  margin-top: 0.3rem;\n  font-size: 0.72rem;\n  opacity: 0.7;\n}\n\n.kt-event[data-type=\"meal\"] .kt-event-card {\n  background: #ece7d7;\n  box-shadow: none;\n}\n\n.kt-event[data-type=\"highlight\"] .kt-event-card {\n  background: var(--kt-green);\n  color: white;\n  border-color: var(--kt-green);\n  font-size: 1.08rem;\n}\n\n.kt-event[data-type=\"evening\"] .kt-event-card {\n  background: var(--kt-green-dark);\n  color: white;\n  border-color: var(--kt-green-dark);\n}\n\n.kt-event[data-type=\"open\"] .kt-event-card {\n  background: rgba(245, 241, 232, 0.75);\n  border-style: dashed;\n  color: var(--kt-muted);\n}\n\n.kt-mobile {\n  display: none;\n}\n\n.kt-agenda-event {\n  display: grid;\n  grid-template-columns: 82px 1fr;\n  gap: 1rem;\n\n  padding: 1rem 0;\n  border-bottom: 1px solid var(--kt-border);\n}\n\n.kt-agenda-time {\n  font-weight: 750;\n}\n\n.kt-agenda-title {\n  font-size: 1.05rem;\n  font-weight: 750;\n}\n\n.kt-agenda-subtitle,\n.kt-agenda-location {\n  margin-top: 0.2rem;\n  color: var(--kt-muted);\n  font-size: 0.9rem;\n}\n\n.kt-agenda-event[data-type=\"highlight\"],\n.kt-agenda-event[data-type=\"evening\"] {\n  margin: 0.7rem 0;\n  padding: 1rem;\n  border: 0;\n  border-radius: 12px;\n  color: white;\n}\n\n.kt-agenda-event[data-type=\"highlight\"] {\n  background: var(--kt-green);\n}\n\n.kt-agenda-event[data-type=\"evening\"] {\n  background: var(--kt-green-dark);\n}\n\n.kt-agenda-event[data-type=\"highlight\"] .kt-agenda-location,\n.kt-agenda-event[data-type=\"highlight\"] .kt-agenda-subtitle,\n.kt-agenda-event[data-type=\"evening\"] .kt-agenda-location,\n.kt-agenda-event[data-type=\"evening\"] .kt-agenda-subtitle {\n  color: rgba(255, 255, 255, 0.78);\n}\n\n.kt-error {\n  max-width: 850px;\n  margin: 2rem auto;\n  padding: 1.25rem;\n  border: 2px solid #a33;\n  border-radius: 12px;\n  background: #fff0f0;\n}\n\n@media (max-width: 760px) {\n  .kt-desktop {\n    display: none;\n  }\n\n  .kt-mobile {\n    display: block;\n  }\n\n  .kt-day {\n    margin-bottom: 3.5rem;\n  }\n\n  .kt-intro {\n    text-align: left;\n    margin-bottom: 2.5rem;\n  }\n\n  .kt-intro p {\n    margin-left: 0;\n  }\n\n  .kt-agenda-event {\n    grid-template-columns: 70px 1fr;\n  }\n}\n<\/style>\n\n<script data-wp-block-html=\"js\">\n\/* =========================================================\n   KURIOSIA TIMETABLE\n   ========================================================= *\/\n\n\/* =========================================================\n   \u270f\ufe0f PROGRAMMDATEN \u2013 HIER BEARBEITEN\n\n   Neue Programmpunkte einfach in \"events\" erg\u00e4nzen.\n\n   Regeln:\n   - Uhrzeiten immer als \"HH:MM\"\n   - Orte m\u00fcssen exakt einem Eintrag aus \"locations\" entsprechen\n   - \"location\": \"all\" = \u00fcber alle Orte\n   - Beim letzten Objekt in einer Liste kein Komma danach n\u00f6tig\n   ========================================================= *\/\n\nconst kuriosiaTimetableData = {\n  settings: {\n    start: \"08:00\",\n    end: \"23:00\"\n  },\n\n  locations: [\n    \"Tempel\",\n    \"Sonnenwiese\",\n    \"Friedensplatz\",\n    \"Wurzelgrund\",\n    \"Kreativ Kosmos\"\n  ],\n\n  days: [\n    {\n      id: \"samstag\",\n      label: \"Samstag\",\n      date: \"5. September\",\n      events: [\n        {\n          title: \"Breakfast\",\n          start: \"09:00\",\n          end: \"10:00\",\n          location: \"all\",\n          type: \"meal\"\n        },\n\n        {\n          title: \"Vinyasa Yoga\",\n          start: \"10:00\",\n          end: \"13:00\",\n          location: \"Sonnenwiese\"\n        },\n\n        {\n          title: \"Open\",\n          start: \"10:00\",\n          end: \"13:00\",\n          location: \"Kreativ Kosmos\",\n          type: \"open\"\n        },\n\n        {\n          title: \"Lunch\",\n          start: \"13:00\",\n          end: \"14:00\",\n          location: \"all\",\n          type: \"meal\"\n        },\n\n        {\n          title: \"Acro Yoga\",\n          start: \"14:00\",\n          end: \"17:30\",\n          location: \"Sonnenwiese\"\n        },\n\n        {\n          title: \"Breathwork\",\n          start: \"14:00\",\n          end: \"17:30\",\n          location: \"Wurzelgrund\"\n        },\n\n        {\n          title: \"Open\",\n          start: \"14:00\",\n          end: \"17:30\",\n          location: \"Kreativ Kosmos\",\n          type: \"open\"\n        },\n\n        {\n          title: \"Cacao & Ecstatic Dance\",\n          start: \"17:30\",\n          end: \"20:00\",\n          location: \"all\",\n          type: \"highlight\"\n        },\n\n        {\n          title: \"Dinner\",\n          start: \"20:00\",\n          end: \"21:00\",\n          location: \"all\",\n          type: \"meal\"\n        },\n\n        {\n          title: \"Lagerfeuer & Singkreis\",\n          start: \"21:00\",\n          end: \"23:00\",\n          location: \"all\",\n          type: \"evening\"\n        }\n      ]\n    },\n\n    {\n      id: \"sonntag\",\n      label: \"Sonntag\",\n      date: \"6. September\",\n      events: [\n        {\n          title: \"Breakfast\",\n          start: \"09:00\",\n          end: \"10:00\",\n          location: \"all\",\n          type: \"meal\"\n        },\n\n        {\n          title: \"Intuition\",\n          subtitle: \"Innerer Kompass\",\n          start: \"10:00\",\n          end: \"13:00\",\n          location: \"Tempel\"\n        },\n\n        {\n          title: \"Yoga Nidra\",\n          start: \"11:00\",\n          end: \"13:00\",\n          location: \"Friedensplatz\"\n        },\n\n        {\n          title: \"Open\",\n          start: \"10:00\",\n          end: \"13:00\",\n          location: \"Kreativ Kosmos\",\n          type: \"open\"\n        },\n\n        {\n          title: \"Lunch\",\n          start: \"13:00\",\n          end: \"14:00\",\n          location: \"all\",\n          type: \"meal\"\n        },\n\n        {\n          title: \"Intuition\",\n          subtitle: \"Innerer Kompass\",\n          start: \"14:00\",\n          end: \"15:30\",\n          location: \"Tempel\"\n        },\n\n        {\n          title: \"Beziehung\",\n          start: \"15:30\",\n          end: \"17:00\",\n          location: \"Tempel\"\n        },\n\n        {\n          title: \"Playfight\",\n          subtitle: \"Conscious Play\",\n          start: \"14:00\",\n          end: \"17:00\",\n          location: \"Friedensplatz\"\n        },\n\n        {\n          title: \"Frauenkreis\",\n          start: \"14:00\",\n          end: \"17:00\",\n          location: \"Wurzelgrund\"\n        },\n\n        {\n          title: \"Open\",\n          start: \"14:00\",\n          end: \"17:30\",\n          location: \"Kreativ Kosmos\",\n          type: \"open\"\n        },\n\n        {\n          title: \"Biodanza\",\n          start: \"17:30\",\n          end: \"20:00\",\n          location: \"all\",\n          type: \"highlight\"\n        },\n\n        {\n          title: \"Dinner\",\n          start: \"20:00\",\n          end: \"21:00\",\n          location: \"all\",\n          type: \"meal\"\n        },\n\n        {\n          title: \"Lagerfeuer & Singkreis\",\n          start: \"21:00\",\n          end: \"23:00\",\n          location: \"all\",\n          type: \"evening\"\n        }\n      ]\n    }\n  ]\n};\n\n\n\/* =========================================================\n   \u26d4 AB HIER F\u00dcR PROGRAMM\u00c4NDERUNGEN NICHTS \u00c4NDERN\n   ========================================================= *\/\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const root = document.getElementById(\"kuriosia-timetable\");\n\n  if (!root) {\n    return;\n  }\n\n  try {\n    renderTimetable(root, kuriosiaTimetableData);\n  } catch (error) {\n    console.error(\"Kuriosia Timetable:\", error);\n\n    root.innerHTML = `\n      <div class=\"kt-error\">\n        <strong>Das Programm konnte nicht geladen werden.<\/strong><br>\n        Bitte \u00fcberpr\u00fcfe die Programmdaten im WPCode-JavaScript-Snippet.\n      <\/div>\n    `;\n  }\n});\n\n\nfunction renderTimetable(root, data) {\n  validateData(data);\n\n  const startMinutes = timeToMinutes(data.settings.start);\n  const endMinutes = timeToMinutes(data.settings.end);\n\n  const hourHeight = 80;\n  const pxPerMinute = hourHeight \/ 60;\n\n  root.style.setProperty(\n    \"--kt-location-count\",\n    data.locations.length\n  );\n\n  root.innerHTML = `\n    <div class=\"kt-intro\">\n      <span class=\"kt-kicker\">\n        Kuriosia Gathering 2026\n      <\/span>\n\n      <h1>Programm<\/h1>\n\n      <p>\n        Zwei Tage zum Ausprobieren, Bewegen, Begegnen und Sein.\n        Der Timetable darf noch wachsen \u2013 \u00c4nderungen sind m\u00f6glich.\n      <\/p>\n    <\/div>\n\n    <div class=\"kt-days\"><\/div>\n  `;\n\n  const daysContainer = root.querySelector(\".kt-days\");\n\n  data.days.forEach(day => {\n    const section = document.createElement(\"section\");\n\n    section.className = \"kt-day\";\n\n    section.innerHTML = `\n      <div class=\"kt-day-title\">\n        <h2>${escapeHtml(day.label)}<\/h2>\n        <p>${escapeHtml(day.date)}<\/p>\n      <\/div>\n\n      <div class=\"kt-desktop\">\n        ${buildDesktopDay(\n          day,\n          data,\n          startMinutes,\n          endMinutes,\n          pxPerMinute\n        )}\n      <\/div>\n\n      <div class=\"kt-mobile\">\n        ${buildMobileDay(day, data)}\n      <\/div>\n    `;\n\n    daysContainer.appendChild(section);\n  });\n}\n\n\nfunction buildDesktopDay(\n  day,\n  data,\n  startMinutes,\n  endMinutes,\n  pxPerMinute\n) {\n  const totalMinutes = endMinutes - startMinutes;\n  const scheduleHeight = totalMinutes * pxPerMinute;\n\n  const locationHeaders = data.locations\n    .map(location => `\n      <div class=\"kt-location\">\n        ${escapeHtml(location)}\n      <\/div>\n    `)\n    .join(\"\");\n\n  let timeLabels = \"\";\n  let hourLines = \"\";\n\n  for (\n    let minute = startMinutes;\n    minute <= endMinutes;\n    minute += 60\n  ) {\n    const top = (minute - startMinutes) * pxPerMinute;\n\n    timeLabels += `\n      <div\n        class=\"kt-time\"\n        style=\"top:${top}px\"\n      >\n        ${escapeHtml(minutesToTime(minute))}\n      <\/div>\n    `;\n\n    hourLines += `\n      <div\n        class=\"kt-hour-line\"\n        style=\"top:${top}px\"\n      ><\/div>\n    `;\n  }\n\n  const columnLines = data.locations\n    .slice(1)\n    .map((_, index) => {\n      const left =\n        ((index + 1) \/ data.locations.length) * 100;\n\n      return `\n        <div\n          class=\"kt-grid-column\"\n          style=\"left:${left}%\"\n        ><\/div>\n      `;\n    })\n    .join(\"\");\n\n  const events = day.events\n    .map(event =>\n      buildDesktopEvent(\n        event,\n        data,\n        startMinutes,\n        pxPerMinute\n      )\n    )\n    .join(\"\");\n\n  return `\n    <div class=\"kt-scroll\">\n      <div class=\"kt-table\">\n\n        <div class=\"kt-header\">\n          <div class=\"kt-header-spacer\"><\/div>\n          ${locationHeaders}\n        <\/div>\n\n        <div class=\"kt-schedule\">\n\n          <div\n            class=\"kt-times\"\n            style=\"height:${scheduleHeight}px\"\n          >\n            ${timeLabels}\n          <\/div>\n\n          <div\n            class=\"kt-stage\"\n            style=\"height:${scheduleHeight}px\"\n          >\n            ${hourLines}\n            ${columnLines}\n            ${events}\n          <\/div>\n\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n}\n\n\nfunction buildDesktopEvent(\n  event,\n  data,\n  startMinutes,\n  pxPerMinute\n) {\n  const eventStart = timeToMinutes(event.start);\n  const eventEnd = timeToMinutes(event.end);\n\n  const top =\n    (eventStart - startMinutes) * pxPerMinute;\n\n  const height =\n    (eventEnd - eventStart) * pxPerMinute;\n\n  let left;\n  let width;\n\n  if (event.location === \"all\") {\n    left = 0;\n    width = 100;\n  } else {\n    const locationIndex =\n      data.locations.indexOf(event.location);\n\n    if (locationIndex === -1) {\n      console.warn(\n        `Unbekannter Ort \"${event.location}\" bei \"${event.title}\".`\n      );\n\n      return \"\";\n    }\n\n    left =\n      (locationIndex \/ data.locations.length) * 100;\n\n    width =\n      100 \/ data.locations.length;\n  }\n\n  const subtitle = event.subtitle\n    ? `\n      <div class=\"kt-event-subtitle\">\n        ${escapeHtml(event.subtitle)}\n      <\/div>\n    `\n    : \"\";\n\n  return `\n    <article\n      class=\"kt-event\"\n      data-type=\"${escapeHtml(event.type || \"default\")}\"\n      style=\"\n        top:${top}px;\n        height:${height}px;\n        left:${left}%;\n        width:${width}%;\n      \"\n    >\n      <div class=\"kt-event-card\">\n\n        <div class=\"kt-event-title\">\n          ${escapeHtml(event.title)}\n        <\/div>\n\n        ${subtitle}\n\n        <div class=\"kt-event-time\">\n          ${escapeHtml(event.start)}\n          \u2013\n          ${escapeHtml(event.end)}\n        <\/div>\n\n      <\/div>\n    <\/article>\n  `;\n}\n\n\nfunction buildMobileDay(day, data) {\n  const events = [...day.events].sort((a, b) => {\n    const timeDifference =\n      timeToMinutes(a.start) -\n      timeToMinutes(b.start);\n\n    if (timeDifference !== 0) {\n      return timeDifference;\n    }\n\n    return (\n      getLocationOrder(a.location, data) -\n      getLocationOrder(b.location, data)\n    );\n  });\n\n  return `\n    <div class=\"kt-agenda\">\n\n      ${events.map(event => {\n        const subtitle = event.subtitle\n          ? `\n            <div class=\"kt-agenda-subtitle\">\n              ${escapeHtml(event.subtitle)}\n            <\/div>\n          `\n          : \"\";\n\n        const locationText =\n          event.location === \"all\"\n            ? `${event.start}\u2013${event.end}`\n            : `${event.location} \u00b7 ${event.start}\u2013${event.end}`;\n\n        return `\n          <article\n            class=\"kt-agenda-event\"\n            data-type=\"${escapeHtml(event.type || \"default\")}\"\n          >\n\n            <div class=\"kt-agenda-time\">\n              ${escapeHtml(event.start)}\n            <\/div>\n\n            <div>\n              <div class=\"kt-agenda-title\">\n                ${escapeHtml(event.title)}\n              <\/div>\n\n              ${subtitle}\n\n              <div class=\"kt-agenda-location\">\n                ${escapeHtml(locationText)}\n              <\/div>\n            <\/div>\n\n          <\/article>\n        `;\n      }).join(\"\")}\n\n    <\/div>\n  `;\n}\n\n\nfunction validateData(data) {\n  if (!data.settings) {\n    throw new Error(\"settings fehlen.\");\n  }\n\n  if (!Array.isArray(data.locations)) {\n    throw new Error(\"locations muss eine Liste sein.\");\n  }\n\n  if (!Array.isArray(data.days)) {\n    throw new Error(\"days muss eine Liste sein.\");\n  }\n\n  data.days.forEach(day => {\n    if (!Array.isArray(day.events)) {\n      throw new Error(\n        `events fehlen bei ${day.label}.`\n      );\n    }\n\n    day.events.forEach(event => {\n      validateEvent(event, data);\n    });\n  });\n}\n\n\nfunction validateEvent(event, data) {\n  if (\n    !event.title ||\n    !event.start ||\n    !event.end ||\n    !event.location\n  ) {\n    console.warn(\n      \"Unvollst\u00e4ndiger Programmpunkt:\",\n      event\n    );\n\n    return;\n  }\n\n  if (\n    event.location !== \"all\" &&\n    !data.locations.includes(event.location)\n  ) {\n    console.warn(\n      `Kuriosia Timetable:\n       Unbekannter Ort \"${event.location}\"\n       bei \"${event.title}\".`\n    );\n  }\n\n  if (\n    timeToMinutes(event.start) >=\n    timeToMinutes(event.end)\n  ) {\n    console.warn(\n      `Kuriosia Timetable:\n       Endzeit liegt vor Startzeit bei\n       \"${event.title}\".`\n    );\n  }\n}\n\n\nfunction getLocationOrder(location, data) {\n  if (location === \"all\") {\n    return -1;\n  }\n\n  const index = data.locations.indexOf(location);\n\n  return index === -1\n    ? 999\n    : index;\n}\n\n\nfunction timeToMinutes(time) {\n  const [hours, minutes] =\n    time.split(\":\").map(Number);\n\n  return hours * 60 + minutes;\n}\n\n\nfunction minutesToTime(minutes) {\n  const hours =\n    Math.floor(minutes \/ 60);\n\n  const mins =\n    minutes % 60;\n\n  return (\n    String(hours).padStart(2, \"0\") +\n    \":\" +\n    String(mins).padStart(2, \"0\")\n  );\n}\n\n\nfunction escapeHtml(value) {\n  return String(value)\n    .replaceAll(\"&\", \"&amp;\")\n    .replaceAll(\"<\", \"&lt;\")\n    .replaceAll(\">\", \"&gt;\")\n    .replaceAll('\"', \"&quot;\")\n    .replaceAll(\"'\", \"&#039;\");\n}\n<\/script>\n\n<div id=\"kuriosia-timetable\"><\/div>\n\n\n\n<style data-wp-block-html=\"css\">\n#kuriosia-timetable {\n  --kt-green: #55634a;\n  --kt-green-dark: #37402f;\n  --kt-cream: #f5f1e8;\n  --kt-paper: #fffdf7;\n  --kt-border: rgba(55, 64, 47, 0.22);\n  --kt-muted: rgba(55, 64, 47, 0.68);\n  --kt-hour-height: 80px;\n\n  width: calc(100% - 1em);\n  max-width: unset !important;\n\n  color: var(--kt-green-dark);\n  font-family: inherit;\n}\n\n.kt-day {\n  max-width: 1500px;\n  margin: 0 auto 5rem;\n}\n\n.kt-day-title {\n  margin-bottom: 1.25rem;\n}\n\n.kt-day-title h2 {\n  margin: 0;\n  font-size: clamp(2rem, 4vw, 3.5rem);\n}\n\n.kt-day-title p {\n  margin: 0.2rem 0 0;\n  color: var(--kt-muted);\n}\n\n.kt-scroll {\n  overflow-x: auto;\n  padding-bottom: 0.75rem;\n}\n\n.kt-table {\n  min-width: 900px;\n  overflow: hidden;\n\n  border: 1px solid var(--kt-border);\n  border-radius: 18px;\n\n  background: var(--kt-paper);\n\n  box-shadow:\n    0 14px 40px rgba(55, 64, 47, 0.08);\n}\n\n.kt-header {\n  display: grid;\n\n  grid-template-columns:\n    74px\n    repeat(\n      var(--kt-location-count),\n      minmax(150px, 1fr)\n    );\n\n  border-bottom: 1px solid var(--kt-border);\n  background: var(--kt-cream);\n}\n\n.kt-header-spacer {\n  border-right: 1px solid var(--kt-border);\n}\n\n.kt-location {\n  min-height: 62px;\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  padding: 0.75rem;\n\n  text-align: center;\n  font-weight: 700;\n\n  border-right: 1px solid var(--kt-border);\n}\n\n.kt-location:last-child {\n  border-right: 0;\n}\n\n.kt-schedule {\n  display: grid;\n  grid-template-columns: 74px 1fr;\n}\n\n.kt-times {\n  position: relative;\n\n  border-right: 1px solid var(--kt-border);\n  background: var(--kt-cream);\n}\n\n.kt-time {\n  position: absolute;\n  left: 0;\n\n  width: 100%;\n\n  padding-right: 11px;\n\n  text-align: right;\n\n  font-size: 0.75rem;\n  font-weight: 650;\n\n  color: var(--kt-muted);\n\n  transform: translateY(-50%);\n}\n\n.kt-stage {\n  position: relative;\n\n  min-width: 750px;\n\n  background-image:\n    linear-gradient(\n      to bottom,\n      transparent calc(50% - 0.5px),\n      rgba(55, 64, 47, 0.08) calc(50% - 0.5px),\n      rgba(55, 64, 47, 0.08) calc(50% + 0.5px),\n      transparent calc(50% + 0.5px)\n    );\n\n  background-size:\n    100% calc(var(--kt-hour-height) \/ 2);\n}\n\n.kt-grid-column {\n  position: absolute;\n\n  top: 0;\n  bottom: 0;\n\n  width: 1px;\n\n  background: var(--kt-border);\n\n  pointer-events: none;\n}\n\n.kt-hour-line {\n  position: absolute;\n\n  left: 0;\n  right: 0;\n\n  border-top: 1px solid var(--kt-border);\n\n  pointer-events: none;\n}\n\n.kt-event {\n  position: absolute;\n\n  z-index: 2;\n\n  padding: 6px;\n\n  box-sizing: border-box;\n}\n\n.kt-event-card {\n  width: 100%;\n  height: 100%;\n\n  box-sizing: border-box;\n\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n\n  padding: 0.55rem 0.6rem;\n\n  overflow: hidden;\n\n  border:\n    1px solid rgba(55, 64, 47, 0.2);\n\n  border-radius: 10px;\n\n  background:\n    rgba(255, 253, 247, 0.97);\n\n  box-shadow:\n    0 3px 10px rgba(55, 64, 47, 0.07);\n\n  text-align: center;\n\n  transition:\n    transform 0.15s ease,\n    box-shadow 0.15s ease;\n}\n\n.kt-event-card:hover {\n  transform: translateY(-2px);\n\n  box-shadow:\n    0 7px 18px rgba(55, 64, 47, 0.13);\n}\n\n.kt-event-title {\n  font-weight: 750;\n  line-height: 1.15;\n}\n\n.kt-event-subtitle {\n  margin-top: 0.25rem;\n\n  font-size: 0.76rem;\n  line-height: 1.2;\n\n  opacity: 0.75;\n}\n\n.kt-event-time {\n  margin-top: 0.3rem;\n\n  font-size: 0.72rem;\n\n  opacity: 0.7;\n}\n\n\n\/* =========================================\n   EVENT-TYPEN DESKTOP\n   ========================================= *\/\n\n.kt-event[data-type=\"meal\"] .kt-event-card {\n  background: #ece7d7;\n  box-shadow: none;\n}\n\n.kt-event[data-type=\"highlight\"] .kt-event-card {\n  background: var(--kt-green);\n\n  color: white;\n\n  border-color: var(--kt-green);\n\n  font-size: 1.08rem;\n}\n\n.kt-event[data-type=\"evening\"] .kt-event-card {\n  background: var(--kt-green-dark);\n\n  color: white;\n\n  border-color: var(--kt-green-dark);\n}\n\n.kt-event[data-type=\"open\"] .kt-event-card {\n  background:\n    rgba(245, 241, 232, 0.75);\n\n  border-style: dashed;\n\n  color: var(--kt-muted);\n}\n\n\n\/* =========================================\n   STATUS \/ FEHLER\n   ========================================= *\/\n\n.kt-mobile {\n  display: none;\n}\n\n.kt-loading {\n  padding: 2rem;\n\n  text-align: center;\n\n  color: var(--kt-muted);\n}\n\n.kt-error {\n  padding: 1.25rem;\n\n  border: 2px solid #a33;\n  border-radius: 12px;\n\n  background: #fff0f0;\n}\n\n\n\/* =========================================\n   MOBILE\n   ========================================= *\/\n\n@media (max-width: 760px) {\n\n  .kt-desktop {\n    display: none;\n  }\n\n  .kt-mobile {\n    display: block;\n  }\n\n  .kt-day {\n    margin-bottom: 3.5rem;\n  }\n\n  .kt-day-title {\n    position: sticky;\n    top: 0;\n    z-index: 20;\n\n    margin: 0 0 1rem;\n    padding: 0.8rem 0;\n\n    background:\n      rgba(255, 253, 247, 0.96);\n\n    backdrop-filter: blur(8px);\n  }\n\n  .kt-day-title h2 {\n    font-size: 1.7rem;\n    line-height: 1;\n  }\n\n  .kt-day-title p {\n    margin-top: 0.25rem;\n\n    font-size: 0.9rem;\n  }\n\n  .kt-agenda {\n    display: flex;\n    flex-direction: column;\n\n    gap: 0.75rem;\n  }\n\n  .kt-agenda-event {\n    display: block;\n\n    padding: 1rem 1.1rem;\n\n    border: 1px solid var(--kt-border);\n    border-radius: 14px;\n\n    background: var(--kt-paper);\n\n    box-shadow:\n      0 4px 14px rgba(55, 64, 47, 0.06);\n  }\n\n  .kt-agenda-title {\n    font-size: 1.08rem;\n    font-weight: 800;\n\n    line-height: 1.2;\n  }\n\n  .kt-agenda-subtitle {\n    margin-top: 0.2rem;\n\n    color: var(--kt-muted);\n\n    font-size: 0.9rem;\n    line-height: 1.3;\n  }\n\n  .kt-agenda-meta {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n\n    gap: 1rem;\n\n    margin-top: 0.7rem;\n\n    color: var(--kt-muted);\n\n    font-size: 0.78rem;\n  }\n\n  .kt-agenda-duration {\n    flex-shrink: 0;\n\n    font-weight: 650;\n  }\n\n  .kt-agenda-location {\n    min-width: 0;\n\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n\n    text-align: right;\n\n    font-weight: 650;\n  }\n\n\n  \/* =========================================\n     EVENT-TYPEN MOBILE\n     ========================================= *\/\n\n  .kt-agenda-event[data-type=\"meal\"] {\n    background: #ece7d7;\n\n    box-shadow: none;\n  }\n\n  .kt-agenda-event[data-type=\"open\"] {\n    background:\n      rgba(245, 241, 232, 0.75);\n\n    border-style: dashed;\n\n    box-shadow: none;\n  }\n\n  .kt-agenda-event[data-type=\"highlight\"] {\n    background: var(--kt-green);\n\n    border-color: var(--kt-green);\n\n    color: white;\n  }\n\n  .kt-agenda-event[data-type=\"evening\"] {\n    background: var(--kt-green-dark);\n\n    border-color: var(--kt-green-dark);\n\n    color: white;\n  }\n\n  .kt-agenda-event[data-type=\"highlight\"]\n  .kt-agenda-subtitle,\n\n  .kt-agenda-event[data-type=\"highlight\"]\n  .kt-agenda-meta,\n\n  .kt-agenda-event[data-type=\"evening\"]\n  .kt-agenda-subtitle,\n\n  .kt-agenda-event[data-type=\"evening\"]\n  .kt-agenda-meta {\n\n    color:\n      rgba(255, 255, 255, 0.78);\n  }\n}\n<\/style>\n\n<script data-wp-block-html=\"js\">\ndocument.addEventListener(\"DOMContentLoaded\", async () => {\n\n  const root =\n    document.getElementById(\n      \"kuriosia-timetable\"\n    );\n\n  if (!root) {\n    return;\n  }\n\n  root.innerHTML = `\n    <div class=\"kt-loading\">\n      Programm wird geladen \u2026\n    <\/div>\n  `;\n\n  try {\n\n    const response =\n      await fetch(\n        \"\/wp-json\/kuriosia\/v1\/program\",\n        {\n          headers: {\n            \"Accept\": \"application\/json\"\n          }\n        }\n      );\n\n    if (!response.ok) {\n      throw new Error(\n        `HTTP ${response.status}: ${response.statusText}`\n      );\n    }\n\n    const data =\n      await response.json();\n\n    renderTimetable(\n      root,\n      data\n    );\n\n  } catch (error) {\n\n    console.error(\n      \"Kuriosia Timetable:\",\n      error\n    );\n\n    root.innerHTML = `\n      <div class=\"kt-error\">\n        <strong>\n          Das Programm konnte nicht geladen werden.\n        <\/strong>\n        <br>\n        Bitte versuche es sp\u00e4ter noch einmal.\n      <\/div>\n    `;\n  }\n\n});\n\n\nfunction renderTimetable(\n  root,\n  data\n) {\n\n  validateData(data);\n\n  const startMinutes =\n    timeToMinutes(\n      data.settings.start\n    );\n\n  const endMinutes =\n    timeToMinutes(\n      data.settings.end\n    );\n\n  const hourHeight = 80;\n\n  const pxPerMinute =\n    hourHeight \/ 60;\n\n  root.style.setProperty(\n    \"--kt-location-count\",\n    data.locations.length\n  );\n\n  root.innerHTML = \"\";\n\n  data.days.forEach(day => {\n\n    const section =\n      document.createElement(\n        \"section\"\n      );\n\n    section.className =\n      \"kt-day\";\n\n    section.innerHTML = `\n      <div class=\"kt-day-title\">\n\n        <h2>\n          ${escapeHtml(day.label)}\n        <\/h2>\n\n        <p>\n          ${escapeHtml(day.date)}\n        <\/p>\n\n      <\/div>\n\n      <div class=\"kt-desktop\">\n        ${buildDesktopDay(\n          day,\n          data,\n          startMinutes,\n          endMinutes,\n          pxPerMinute\n        )}\n      <\/div>\n\n      <div class=\"kt-mobile\">\n        ${buildMobileDay(\n          day,\n          data\n        )}\n      <\/div>\n    `;\n\n    root.appendChild(\n      section\n    );\n  });\n\n}\n\n\n\/* =========================================\n   DESKTOP\n   ========================================= *\/\n\nfunction buildDesktopDay(\n  day,\n  data,\n  startMinutes,\n  endMinutes,\n  pxPerMinute\n) {\n\n  const totalMinutes =\n    endMinutes -\n    startMinutes;\n\n  const scheduleHeight =\n    totalMinutes *\n    pxPerMinute;\n\n  const locationHeaders =\n    data.locations\n      .map(location => `\n        <div class=\"kt-location\">\n          ${escapeHtml(location)}\n        <\/div>\n      `)\n      .join(\"\");\n\n  let timeLabels = \"\";\n  let hourLines = \"\";\n\n  for (\n    let minute = startMinutes;\n    minute <= endMinutes;\n    minute += 60\n  ) {\n\n    const top =\n      (\n        minute -\n        startMinutes\n      ) *\n      pxPerMinute;\n\n    timeLabels += `\n      <div\n        class=\"kt-time\"\n        style=\"top:${top}px\"\n      >\n        ${escapeHtml(\n          minutesToTime(\n            minute\n          )\n        )}\n      <\/div>\n    `;\n\n    hourLines += `\n      <div\n        class=\"kt-hour-line\"\n        style=\"top:${top}px\"\n      ><\/div>\n    `;\n\n  }\n\n  const columnLines =\n    data.locations\n      .slice(1)\n      .map(\n        (_, index) => {\n\n          const left =\n            (\n              (index + 1) \/\n              data.locations.length\n            ) * 100;\n\n          return `\n            <div\n              class=\"kt-grid-column\"\n              style=\"left:${left}%\"\n            ><\/div>\n          `;\n\n        }\n      )\n      .join(\"\");\n\n  const events =\n    day.events\n      .map(\n        event =>\n          buildDesktopEvent(\n            event,\n            data,\n            startMinutes,\n            pxPerMinute\n          )\n      )\n      .join(\"\");\n\n  return `\n    <div class=\"kt-scroll\">\n\n      <div class=\"kt-table\">\n\n        <div class=\"kt-header\">\n\n          <div\n            class=\"kt-header-spacer\"\n          ><\/div>\n\n          ${locationHeaders}\n\n        <\/div>\n\n        <div class=\"kt-schedule\">\n\n          <div\n            class=\"kt-times\"\n            style=\"\n              height:${scheduleHeight}px\n            \"\n          >\n            ${timeLabels}\n          <\/div>\n\n          <div\n            class=\"kt-stage\"\n            style=\"\n              height:${scheduleHeight}px\n            \"\n          >\n\n            ${hourLines}\n\n            ${columnLines}\n\n            ${events}\n\n          <\/div>\n\n        <\/div>\n\n      <\/div>\n\n    <\/div>\n  `;\n\n}\n\n\nfunction buildDesktopEvent(\n  event,\n  data,\n  startMinutes,\n  pxPerMinute\n) {\n\n  const eventStart =\n    timeToMinutes(\n      event.start\n    );\n\n  const eventEnd =\n    timeToMinutes(\n      event.end\n    );\n\n  const top =\n    (\n      eventStart -\n      startMinutes\n    ) *\n    pxPerMinute;\n\n  const height =\n    (\n      eventEnd -\n      eventStart\n    ) *\n    pxPerMinute;\n\n  let left;\n  let width;\n\n  if (\n    event.location === \"all\"\n  ) {\n\n    left = 0;\n    width = 100;\n\n  } else {\n\n    const locationIndex =\n      data.locations.indexOf(\n        event.location\n      );\n\n    if (\n      locationIndex === -1\n    ) {\n\n      console.warn(\n        `Kuriosia Timetable: Unbekannter Ort \"${event.location}\" bei \"${event.title}\".`\n      );\n\n      return \"\";\n    }\n\n    left =\n      (\n        locationIndex \/\n        data.locations.length\n      ) * 100;\n\n    width =\n      100 \/\n      data.locations.length;\n\n  }\n\n  const subtitle =\n    event.subtitle\n      ? `\n        <div\n          class=\"kt-event-subtitle\"\n        >\n          ${escapeHtml(\n            event.subtitle\n          )}\n        <\/div>\n      `\n      : \"\";\n\n  return `\n    <article\n      class=\"kt-event\"\n\n      data-type=\"${escapeHtml(\n        event.type ||\n        \"workshop\"\n      )}\"\n\n      style=\"\n        top:${top}px;\n        height:${height}px;\n        left:${left}%;\n        width:${width}%;\n      \"\n    >\n\n      <div class=\"kt-event-card\">\n\n        <div class=\"kt-event-title\">\n          ${escapeHtml(\n            event.title\n          )}\n        <\/div>\n\n        ${subtitle}\n\n        <div class=\"kt-event-time\">\n          ${escapeHtml(\n            formatTime(\n              event.start\n            )\n          )}\n          \u2013\n          ${escapeHtml(\n            formatTime(\n              event.end\n            )\n          )}\n        <\/div>\n\n      <\/div>\n\n    <\/article>\n  `;\n\n}\n\n\n\/* =========================================\n   MOBILE\n   ========================================= *\/\n\nfunction buildMobileDay(\n  day,\n  data\n) {\n\n  const events =\n    [...day.events]\n      .sort(\n        (a, b) => {\n\n          const timeDifference =\n            timeToMinutes(\n              a.start\n            ) -\n            timeToMinutes(\n              b.start\n            );\n\n          if (\n            timeDifference !== 0\n          ) {\n            return timeDifference;\n          }\n\n          return (\n            getLocationOrder(\n              a.location,\n              data\n            ) -\n            getLocationOrder(\n              b.location,\n              data\n            )\n          );\n\n        }\n      );\n\n  return `\n    <div class=\"kt-agenda\">\n\n      ${events\n        .map(\n          event => {\n\n            const subtitle =\n              event.subtitle\n                ? `\n                  <div\n                    class=\"kt-agenda-subtitle\"\n                  >\n                    ${escapeHtml(\n                      event.subtitle\n                    )}\n                  <\/div>\n                `\n                : \"\";\n\n            const location =\n              event.location === \"all\"\n                ? \"Gemeinsam\"\n                : event.location;\n\n            return `\n              <article\n                class=\"kt-agenda-event\"\n\n                data-type=\"${escapeHtml(\n                  event.type ||\n                  \"workshop\"\n                )}\"\n              >\n\n                <div\n                  class=\"kt-agenda-title\"\n                >\n                  ${escapeHtml(\n                    event.title\n                  )}\n                <\/div>\n\n                ${subtitle}\n\n                <div\n                  class=\"kt-agenda-meta\"\n                >\n\n                  <div\n                    class=\"kt-agenda-duration\"\n                  >\n                    ${escapeHtml(\n                      formatTime(\n                        event.start\n                      )\n                    )}\n                    \u2013\n                    ${escapeHtml(\n                      formatTime(\n                        event.end\n                      )\n                    )}\n                  <\/div>\n\n                  <div\n                    class=\"kt-agenda-location\"\n                  >\n                    ${escapeHtml(\n                      location\n                    )}\n                  <\/div>\n\n                <\/div>\n\n              <\/article>\n            `;\n\n          }\n        )\n        .join(\"\")}\n\n    <\/div>\n  `;\n\n}\n\n\n\/* =========================================\n   VALIDIERUNG\n   ========================================= *\/\n\nfunction validateData(\n  data\n) {\n\n  if (\n    !data ||\n    typeof data !== \"object\"\n  ) {\n\n    throw new Error(\n      \"Ung\u00fcltige Programmdaten.\"\n    );\n\n  }\n\n  if (\n    !data.settings\n  ) {\n\n    throw new Error(\n      \"settings fehlen.\"\n    );\n\n  }\n\n  if (\n    !data.settings.start ||\n    !data.settings.end\n  ) {\n\n    throw new Error(\n      \"Start- oder Endzeit des Timetables fehlt.\"\n    );\n\n  }\n\n  if (\n    !Array.isArray(\n      data.locations\n    )\n  ) {\n\n    throw new Error(\n      \"locations muss eine Liste sein.\"\n    );\n\n  }\n\n  if (\n    !Array.isArray(\n      data.days\n    )\n  ) {\n\n    throw new Error(\n      \"days muss eine Liste sein.\"\n    );\n\n  }\n\n  data.days.forEach(\n    day => {\n\n      if (\n        !Array.isArray(\n          day.events\n        )\n      ) {\n\n        throw new Error(\n          `events fehlen bei ${\n            day.label ||\n            day.id\n          }.`\n        );\n\n      }\n\n      day.events.forEach(\n        event => {\n\n          validateEvent(\n            event,\n            data\n          );\n\n        }\n      );\n\n    }\n  );\n\n}\n\n\nfunction validateEvent(\n  event,\n  data\n) {\n\n  if (\n    !event.title ||\n    !event.start ||\n    !event.end ||\n    !event.location\n  ) {\n\n    console.warn(\n      \"Kuriosia Timetable: Unvollst\u00e4ndiger Programmpunkt:\",\n      event\n    );\n\n    return;\n  }\n\n  if (\n    event.location !== \"all\" &&\n    !data.locations.includes(\n      event.location\n    )\n  ) {\n\n    console.warn(\n      `Kuriosia Timetable: Unbekannter Ort \"${event.location}\" bei \"${event.title}\".`\n    );\n\n  }\n\n  if (\n    timeToMinutes(\n      event.start\n    ) >=\n    timeToMinutes(\n      event.end\n    )\n  ) {\n\n    console.warn(\n      `Kuriosia Timetable: Ung\u00fcltige Zeit bei \"${event.title}\".`\n    );\n\n  }\n\n}\n\n\n\/* =========================================\n   HELPER\n   ========================================= *\/\n\nfunction getLocationOrder(\n  location,\n  data\n) {\n\n  if (\n    location === \"all\"\n  ) {\n    return -1;\n  }\n\n  const index =\n    data.locations.indexOf(\n      location\n    );\n\n  return index === -1\n    ? 999\n    : index;\n\n}\n\n\nfunction timeToMinutes(\n  time\n) {\n\n  if (\n    typeof time !== \"string\"\n  ) {\n\n    throw new Error(\n      `Ung\u00fcltige Uhrzeit: ${JSON.stringify(time)}`\n    );\n\n  }\n\n  const parts =\n    time.split(\":\");\n\n  if (\n    parts.length < 2\n  ) {\n\n    throw new Error(\n      `Ung\u00fcltiges Zeitformat: \"${time}\"`\n    );\n\n  }\n\n  const hours =\n    Number(\n      parts[0]\n    );\n\n  const minutes =\n    Number(\n      parts[1]\n    );\n\n  if (\n    !Number.isFinite(\n      hours\n    ) ||\n    !Number.isFinite(\n      minutes\n    )\n  ) {\n\n    throw new Error(\n      `Ung\u00fcltiges Zeitformat: \"${time}\"`\n    );\n\n  }\n\n  return (\n    hours * 60 +\n    minutes\n  );\n\n}\n\n\nfunction minutesToTime(\n  minutes\n) {\n\n  const hours =\n    Math.floor(\n      minutes \/ 60\n    );\n\n  const mins =\n    minutes % 60;\n\n  return (\n    String(\n      hours\n    )\n      .padStart(\n        2,\n        \"0\"\n      ) +\n    \":\" +\n    String(\n      mins\n    )\n      .padStart(\n        2,\n        \"0\"\n      )\n  );\n\n}\n\n\nfunction formatTime(\n  time\n) {\n\n  return String(\n    time\n  ).substring(\n    0,\n    5\n  );\n\n}\n\n\nfunction escapeHtml(\n  value\n) {\n\n  return String(\n    value\n  )\n    .replaceAll(\n      \"&#038;\",\n      \"&amp;\"\n    )\n    .replaceAll(\n      \"<\",\n      \"&lt;\"\n    )\n    .replaceAll(\n      \">\",\n      \"&gt;\"\n    )\n    .replaceAll(\n      '\"',\n      \"&quot;\"\n    )\n    .replaceAll(\n      \"'\",\n      \"&#039;\"\n    );\n\n}\n<\/script>\n\n<div id=\"kuriosia-timetable\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"full-width","meta":{"_acf_changed":false,"saved_in_kubio":true,"footnotes":""},"class_list":["post-802","page","type-page","status-publish","hentry"],"acf":[],"kubio_ai_page_context":{"short_desc":"","purpose":"general"},"_links":{"self":[{"href":"https:\/\/kuriosia.mur.at\/index.php\/wp-json\/wp\/v2\/pages\/802","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kuriosia.mur.at\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kuriosia.mur.at\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kuriosia.mur.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kuriosia.mur.at\/index.php\/wp-json\/wp\/v2\/comments?post=802"}],"version-history":[{"count":13,"href":"https:\/\/kuriosia.mur.at\/index.php\/wp-json\/wp\/v2\/pages\/802\/revisions"}],"predecessor-version":[{"id":866,"href":"https:\/\/kuriosia.mur.at\/index.php\/wp-json\/wp\/v2\/pages\/802\/revisions\/866"}],"wp:attachment":[{"href":"https:\/\/kuriosia.mur.at\/index.php\/wp-json\/wp\/v2\/media?parent=802"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}