{"id":10728,"date":"2023-04-11T12:51:46","date_gmt":"2023-04-11T10:51:46","guid":{"rendered":"https:\/\/sejem.eps-backup.com\/fairs\/agritech\/for-visitors\/spremljevalni-program\/"},"modified":"2026-08-19T10:29:39","modified_gmt":"2026-08-19T08:29:39","slug":"side-events-programme","status":"publish","type":"page","link":"https:\/\/ce-sejem.si\/en\/fairs\/agritech\/for-visitors\/side-events-programme\/","title":{"rendered":"Side Events Programme"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10728\" class=\"elementor elementor-10728 elementor-8139\" data-elementor-settings=\"{&quot;element_pack_global_tooltip_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_laptop&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_padding&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_laptop&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_laptop&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true}}\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c836686 noovrflw elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c836686\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-505f2b2\" data-id=\"505f2b2\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4fb8a81 elementor-widget elementor-widget-bdt-breadcrumbs\" data-id=\"4fb8a81\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"bdt-breadcrumbs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class='bdt-ep-breadcrumbs-wrapper'><ul class=\"bdt-ep-breadcrumb breadcrumb-align-left  \"><li><a href=\"https:\/\/ce-sejem.si\/en\/\">Celjski sejem d.d.<\/a><\/li>\n<li><span> Page<\/span><\/li>\n<\/ul><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-279cbbf elementor-widget elementor-widget-heading\" data-id=\"279cbbf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Side Events Programme<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cac4b72 programovrflw elementor-widget elementor-widget-shortcode\" data-id=\"cac4b72\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">        <section class=\"epp\" id=\"epp-1\" data-epp-program>\n            <div class=\"epp__notice-card\" data-epp-notice>\n                <span class=\"epp__notice-icon\" aria-hidden=\"true\">\u2197<\/span>\n                <p class=\"epp__kicker\">Programme<\/p>\n                <h2>The accompanying programme is being prepared.<\/h2>\n                <p>It will be published here as soon as it is confirmed in the portal.<\/p>\n            <\/div>\n\n            <div data-epp-content hidden>\n                \n                <div class=\"epp__filters\" aria-label=\"Programme filters\">\n                    <div class=\"epp__filter-heading\">\n                        <div>\n                            <p class=\"epp__kicker\" data-epp-fair-year>Agritech 2026<\/p>\n                            <h2>Choose a day and hall<\/h2>\n                            <p class=\"epp__filter-intro\">The programme is arranged by day, then by hall and time.<\/p>\n                        <\/div>\n                        <span class=\"epp__program-meta\" data-epp-meta><\/span>\n                    <\/div>\n\n                    <div class=\"epp__day-grid\" data-epp-days><\/div>\n\n                    <div class=\"epp__hall-filter\">\n                        <div class=\"epp__hall-label\"><span class=\"epp__step\">2<\/span>Choose a hall<\/div>\n                        <div class=\"epp__hall-buttons\" data-epp-halls><\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"epp__program-heading\">\n                    <div>\n                        <p class=\"epp__program-kicker\" data-epp-program-label>Agritech \u00b7 Programme 2026<\/p>\n                        <h2 data-epp-selected-date><\/h2>\n                    <\/div>\n                    <span class=\"epp__result-count\" data-epp-result-count><\/span>\n                <\/div>\n\n                <div class=\"epp__toolbar\">\n                    <div class=\"epp__search-wrap\" data-epp-search-wrap>\n                        <span class=\"screen-reader-text\">Search events, descriptions or organisers<\/span>\n                        <span class=\"epp__search-icon\" aria-hidden=\"true\">\n                            <svg viewBox=\"0 0 24 24\" focusable=\"false\"><circle cx=\"11\" cy=\"11\" r=\"6.5\"><\/circle><path d=\"m16 16 4 4\"><\/path><\/svg>\n                        <\/span>\n                        <input class=\"epp__search-input\" type=\"search\" inputmode=\"search\" autocomplete=\"off\" aria-label=\"Search events, descriptions or organisers\" placeholder=\"Search events, descriptions or organisers\" data-epp-search>\n                    <\/div>\n                    <div class=\"epp__toolbar-actions\" role=\"group\" aria-label=\"Programme view\">\n                        <button class=\"epp__view-button is-active\" type=\"button\" data-epp-view=\"all\">All events<\/button>\n                        <button class=\"epp__view-button\" type=\"button\" data-epp-view=\"saved\">\n                            <span class=\"epp__view-star\" aria-hidden=\"true\">\u2605<\/span>\n                            My programme                            <span class=\"epp__view-count\" data-epp-saved-count>0<\/span>\n                        <\/button>\n                                                    <button class=\"epp__print-button\" type=\"button\" data-epp-print>Print programme<\/button>\n                                            <\/div>\n                <\/div>\n\n                <div class=\"epp__live-strip\" data-epp-live-strip hidden>\n                    <div class=\"epp__live-caption\">\n                        <strong>Quick view based on the current time<\/strong>\n                        <span>Select a label to temporarily show only those events.<\/span>\n                    <\/div>\n                    <div class=\"epp__live-filters\">\n                        <button class=\"epp__status-filter epp__status-filter--now\" type=\"button\" data-epp-status=\"now\"><span class=\"epp__pulse\" aria-hidden=\"true\"><\/span>Happening now <span data-epp-now-count>0<\/span><\/button>\n                        <button class=\"epp__status-filter epp__status-filter--soon\" type=\"button\" data-epp-status=\"soon\"><span aria-hidden=\"true\">\u25f7<\/span>Starts in 30 min <span data-epp-soon-count>0<\/span><\/button>\n                    <\/div>\n                <\/div>\n\n                <div class=\"epp__schedule\" data-epp-schedule><\/div>\n            <\/div>\n            <dialog class=\"epp__dialog\" data-epp-dialog aria-labelledby=\"epp-1-dialog-title\">\n                <div class=\"epp__dialog-header\">\n                    <div>\n                        <span class=\"epp__dialog-eyebrow\" data-epp-dialog-eyebrow><\/span>\n                        <h3 id=\"epp-1-dialog-title\" data-epp-dialog-title><\/h3>\n                    <\/div>\n                    <button class=\"epp__dialog-close\" type=\"button\" data-epp-dialog-close aria-label=\"Close\">\u00d7<\/button>\n                <\/div>\n                <div class=\"epp__dialog-body\" data-epp-dialog-body><\/div>\n            <\/dialog>\n            <div class=\"epp__toast\" data-epp-toast role=\"status\" aria-live=\"polite\"><\/div>\n            <script type=\"application\/json\" data-epp-data>{\"fair\":\"agritech\",\"fairLabel\":\"Agritech\",\"year\":2026,\"language\":\"en\",\"published\":false,\"days\":[],\"labels\":{\"program\":\"Programme\",\"choose\":\"Choose a day and hall\",\"intro\":\"The programme is arranged by day, then by hall and time.\",\"chooseHall\":\"Choose a hall\",\"allHalls\":\"All halls\",\"eventsOne\":\"event\",\"eventsOther\":\"events\",\"eventInHall\":\"event\",\"eventsInHall\":\"events\",\"sorted\":\"Events are sorted by start time\",\"search\":\"Search events, descriptions or organisers\",\"print\":\"Print programme\",\"noResults\":\"No events found\",\"noResultsText\":\"Try another hall or a different search term.\",\"otherHall\":\"Other location\",\"organizer\":\"Organiser\",\"speakers\":\"Speakers or presenters\",\"preparing\":\"The accompanying programme is being prepared.\",\"preparingText\":\"It will be published here as soon as it is confirmed in the portal.\",\"invalid\":\"The selected fair is not configured.\",\"filterLabel\":\"Programme filters\",\"preview\":\"Preview of an unpublished programme \u2013 visible only to editors.\",\"viewLabel\":\"Programme view\",\"allEvents\":\"All events\",\"myProgram\":\"My programme\",\"quickView\":\"Quick view based on the current time\",\"quickViewText\":\"Select a label to temporarily show only those events.\",\"happeningNow\":\"Happening now\",\"startsSoon\":\"Starts in 30 min\",\"addToMy\":\"Add to my programme\",\"removeFromMy\":\"Remove from my programme\",\"addedToMy\":\"The event was added to My programme.\",\"removedFromMy\":\"The event was removed from My programme.\",\"savedEmpty\":\"You have not selected any events for this day yet.\",\"savedEmptyText\":\"Select the star next to an event to add it to My programme.\",\"showAll\":\"Show all events\",\"addCalendar\":\"Add to calendar\",\"viewMap\":\"View map\",\"calendarTitle\":\"Add to calendar\",\"calendarText\":\"Choose a calendar. The date, time, title and hall will be filled in automatically.\",\"googleCalendar\":\"Google Calendar\",\"outlook\":\"Outlook\",\"appleCalendar\":\"Apple Calendar \/ .ics\",\"mapTitle\":\"Event map\",\"mapText\":\"The map below shows the event location.\",\"conflictLabel\":\"Schedule conflict\",\"conflictTitle\":\"These events overlap\",\"conflictText\":\"Your programme already contains an event at the same time. You can still save both.\",\"cancel\":\"Cancel\",\"addAnyway\":\"Add anyway\",\"close\":\"Close\",\"organizerShort\":\"Organiser\"},\"showPrint\":true,\"isPreview\":false,\"feedUrl\":\"https:\/\/ce-sejem.si\/en\/wp-json\/epicoro-program\/v1\/program\/agritech\/latest\/en\",\"mapUrl\":\"\",\"hallMaps\":[]}<\/script>\n        <\/section>\n        <style id=\"epp-critical-221\" data-no-optimize=\"1\">.epp.epp .epp__toolbar{position:relative!important;z-index:10001!important;isolation:isolate!important;overflow:visible!important;pointer-events:auto!important}.epp.epp .epp__search-wrap{position:relative!important;z-index:10002!important;display:block!important;overflow:visible!important;pointer-events:auto!important}.epp.epp .epp__search-input{position:relative!important;z-index:10003!important;visibility:visible!important;opacity:1!important;pointer-events:auto!important;cursor:text!important}.epp.epp .epp__search-icon{z-index:10004!important;pointer-events:none!important}<\/style><script id=\"epp-runtime-221\" type=\"application\/javascript\" data-no-optimize=\"1\" data-cfasync=\"false\">(function(){var eppBoot=function(){window.setTimeout(function(){(function () {\n  'use strict';\n\n  function escapeHtml(value) {\n    return String(value == null ? '' : value)\n      .replace(\/&\/g, '&amp;')\n      .replace(\/<\/g, '&lt;')\n      .replace(\/>\/g, '&gt;')\n      .replace(\/\"\/g, '&quot;')\n      .replace(\/'\/g, '&#039;');\n  }\n\n  function textFromHtml(value) {\n    var template = document.createElement('template');\n    template.innerHTML = String(value || '');\n    return (template.content.textContent || '').replace(\/\\s+\/g, ' ').trim();\n  }\n\n  function shortText(value, length) {\n    var text = textFromHtml(value);\n    return text.length > length ? text.slice(0, length).trim() + '\u2026' : text;\n  }\n\n  function normalize(value) {\n    var text = String(value || '').toLocaleLowerCase();\n    return typeof text.normalize === 'function'\n      ? text.normalize('NFD').replace(\/[\\u0300-\\u036f]\/g, '')\n      : text;\n  }\n\n  function splitDate(value) {\n    var parts = String(value || '').split(',');\n    return {\n      name: (parts.shift() || '').trim(),\n      date: parts.join(',').trim() || String(value || '').trim()\n    };\n  }\n\n  function dateParts(value) {\n    var text = String(value || '');\n    var isoMatch = text.match(\/(20\\d{2})-(\\d{1,2})-(\\d{1,2})\/);\n    if (isoMatch) {\n      return { day: parseInt(isoMatch[3], 10), month: parseInt(isoMatch[2], 10), year: parseInt(isoMatch[1], 10) };\n    }\n\n    var match = text.match(\/(\\d{1,2})[.\\\/-](\\d{1,2})[.\\\/-](20\\d{2})\/);\n    if (!match) return null;\n    var first = parseInt(match[1], 10);\n    var second = parseInt(match[2], 10);\n    return second > 12\n      ? { day: second, month: first, year: parseInt(match[3], 10) }\n      : { day: first, month: second, year: parseInt(match[3], 10) };\n  }\n\n  function timeRange(value) {\n    var matches = String(value || '').match(\/\\d{1,2}[:.]\\d{2}\/g) || [];\n    if (!matches.length) return null;\n\n    function parse(part) {\n      var values = part.split(\/[:.]\/);\n      return { hour: parseInt(values[0], 10), minute: parseInt(values[1], 10) };\n    }\n\n    var start = parse(matches[0]);\n    var end = matches[1] ? parse(matches[1]) : { hour: start.hour + 1, minute: start.minute };\n    return { start: start, end: end };\n  }\n\n  function eventDates(day, event) {\n    var date = dateParts(day && day.date);\n    var range = timeRange(event && event.time);\n    if (!date || !range) return null;\n\n    var start = new Date(date.year, date.month - 1, date.day, range.start.hour, range.start.minute, 0, 0);\n    var end = new Date(date.year, date.month - 1, date.day, range.end.hour, range.end.minute, 0, 0);\n    if (end <= start) end.setDate(end.getDate() + 1);\n    return { start: start, end: end };\n  }\n\n  function timeKey(value) {\n    var range = timeRange(value);\n    return range ? (range.start.hour * 60) + range.start.minute : 9999;\n  }\n\n  function eventNoun(count, language) {\n    if (language === 'en') return count === 1 ? 'event' : 'events';\n    if (count === 1) return 'dogodek';\n    if (count === 2) return 'dogodka';\n    if (count === 3 || count === 4) return 'dogodki';\n    return 'dogodkov';\n  }\n\n  function formatTime(value) {\n    return escapeHtml(String(value || '').replace(\/\\s+[-\u2013\u2014]\\s+\/g, '\u2013'));\n  }\n\n  function hashString(value) {\n    var hash = 2166136261;\n    var text = String(value || '');\n    for (var index = 0; index < text.length; index += 1) {\n      hash ^= text.charCodeAt(index);\n      hash = Math.imul(hash, 16777619);\n    }\n    return (hash >>> 0).toString(36);\n  }\n\n  function stableEventId(day, event) {\n    var provided = String(event && event.id || '').trim();\n    if (provided) return provided;\n    return 'event-' + hashString([\n      day && day.date,\n      event && event.time,\n      event && event.title,\n      event && event.location\n    ].join('|'));\n  }\n\n  function pad(value) {\n    return String(value).padStart(2, '0');\n  }\n\n  function compactCalendarDate(date) {\n    return date.getFullYear() + pad(date.getMonth() + 1) + pad(date.getDate()) + 'T' + pad(date.getHours()) + pad(date.getMinutes()) + '00';\n  }\n\n  function isoLocalDate(date) {\n    return date.getFullYear() + '-' + pad(date.getMonth() + 1) + '-' + pad(date.getDate()) + 'T' + pad(date.getHours()) + ':' + pad(date.getMinutes()) + ':00';\n  }\n\n  function icsEscape(value) {\n    return String(value || '')\n      .replace(\/\\\\\/g, '\\\\\\\\')\n      .replace(\/,\/g, '\\\\,')\n      .replace(\/;\/g, '\\\\;')\n      .replace(\/\\r?\\n\/g, '\\\\n');\n  }\n\n  function starIcon() {\n    return '<svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"><path d=\"m12 3 2.75 5.57 6.15.9-4.45 4.33 1.05 6.12L12 17.03l-5.5 2.89 1.05-6.12L3.1 9.47l6.15-.9L12 3Z\"><\/path><\/svg>';\n  }\n\n  function initProgram(root) {\n    var dataElement = root.querySelector('[data-epp-data]');\n    if (!dataElement || root.getAttribute('data-epp-ready') === '1') return;\n    root.setAttribute('data-epp-ready', '1');\n\n    var data;\n    try {\n      data = JSON.parse(dataElement.textContent);\n    } catch (error) {\n      return;\n    }\n\n    var days = Array.isArray(data.days) ? data.days : [];\n    var labels = data.labels || {};\n    var language = data.language === 'en' ? 'en' : 'sl';\n    var dayGrid = root.querySelector('[data-epp-days]');\n    var hallButtons = root.querySelector('[data-epp-halls]');\n    var schedule = root.querySelector('[data-epp-schedule]');\n    var selectedDate = root.querySelector('[data-epp-selected-date]');\n    var resultCount = root.querySelector('[data-epp-result-count]');\n    var searchInput = root.querySelector('[data-epp-search]');\n    var searchWrap = root.querySelector('[data-epp-search-wrap]');\n    var programMeta = root.querySelector('[data-epp-meta]');\n    var printButton = root.querySelector('[data-epp-print]');\n    var notice = root.querySelector('[data-epp-notice]');\n    var content = root.querySelector('[data-epp-content]');\n    var fairYearLabel = root.querySelector('[data-epp-fair-year]');\n    var programLabel = root.querySelector('[data-epp-program-label]');\n    var savedCount = root.querySelector('[data-epp-saved-count]');\n    var liveStrip = root.querySelector('[data-epp-live-strip]');\n    var nowCount = root.querySelector('[data-epp-now-count]');\n    var soonCount = root.querySelector('[data-epp-soon-count]');\n    var dialog = root.querySelector('[data-epp-dialog]');\n    var dialogEyebrow = root.querySelector('[data-epp-dialog-eyebrow]');\n    var dialogTitle = root.querySelector('[data-epp-dialog-title]');\n    var dialogBody = root.querySelector('[data-epp-dialog-body]');\n    var toast = root.querySelector('[data-epp-toast]');\n    var selectedDay = 0;\n    var selectedHall = 'all';\n    var selectedView = 'all';\n    var selectedStatus = 'all';\n    var searchTerm = '';\n    var pendingEventId = '';\n    var saved = [];\n    var toastTimer;\n    var clockTimer;\n    var instancePrefix = String(root.id || 'epp-program').replace(\/[^a-zA-Z0-9_-]\/g, '');\n\n    function storageKey() {\n      return 'epp-my-program:' + String(data.fair || 'fair') + ':' + String(data.year || 'latest') + ':' + language;\n    }\n\n    function readSaved() {\n      try {\n        var parsed = JSON.parse(window.localStorage.getItem(storageKey()) || '[]');\n        return Array.isArray(parsed) ? parsed : [];\n      } catch (error) {\n        return [];\n      }\n    }\n\n    function writeSaved() {\n      try {\n        window.localStorage.setItem(storageKey(), JSON.stringify(saved));\n      } catch (error) {\n        \/\/ Zasebni na\u010din nekaterih brskalnikov lahko blokira localStorage.\n      }\n    }\n\n    function dayEvents(index) {\n      var day = days[index] || {};\n      return Array.isArray(day.events) ? day.events : [];\n    }\n\n    function allEventItems() {\n      var items = [];\n      days.forEach(function (day) {\n        (Array.isArray(day.events) ? day.events : []).forEach(function (event) {\n          items.push({ day: day, event: event, id: stableEventId(day, event) });\n        });\n      });\n      return items;\n    }\n\n    function findEventItem(id) {\n      return allEventItems().find(function (item) { return item.id === id; }) || null;\n    }\n\n    function eventStatus(day, event) {\n      var dates = eventDates(day, event);\n      if (!dates) return { type: 'none', label: '' };\n\n      var current = new Date();\n      if (current >= dates.start && current < dates.end) {\n        return { type: 'now', label: labels.happeningNow || '' };\n      }\n\n      var difference = Math.ceil((dates.start.getTime() - current.getTime()) \/ 60000);\n      if (difference > 0 && difference <= 30) {\n        var label = language === 'en' ? 'Starts in ' + difference + ' min' : 'Sledi \u010dez ' + difference + ' min';\n        return { type: 'soon', label: label };\n      }\n\n      return { type: 'none', label: '' };\n    }\n\n    function mapUrlForHall(hall) {\n      var hallMaps = data.hallMaps && typeof data.hallMaps === 'object' ? data.hallMaps : {};\n      var direct = hallMaps[hall];\n      if (direct) return String(direct);\n\n      var normalizedHall = normalize(hall);\n      var matchingKey = Object.keys(hallMaps).find(function (key) { return normalize(key) === normalizedHall; });\n      return matchingKey ? String(hallMaps[matchingKey]) : String(data.mapUrl || '');\n    }\n\n    function renderMeta() {\n      if (!programMeta || !days.length) return;\n      var first = splitDate(days[0].date).date;\n      var last = splitDate(days[days.length - 1].date).date;\n      var range = first === last ? first : first + ' \u2013 ' + last;\n      programMeta.innerHTML = '<strong>' + escapeHtml(range) + '<\/strong><span>\u2022<\/span>' + escapeHtml(data.fairLabel || '');\n    }\n\n    function showPublishedState(published) {\n      if (notice) notice.hidden = Boolean(published);\n      if (content) content.hidden = !published;\n    }\n\n    function applyProgram(nextData) {\n      if (nextData && typeof nextData === 'object') {\n        data.published = Boolean(nextData.published);\n        data.days = Array.isArray(nextData.days) ? nextData.days : [];\n        if (nextData.year) data.year = nextData.year;\n      }\n\n      days = Array.isArray(data.days) ? data.days : [];\n      selectedDay = 0;\n      selectedHall = 'all';\n      selectedStatus = 'all';\n      saved = readSaved();\n      showPublishedState(data.published && days.length > 0);\n\n      if (!data.published || !days.length) return;\n\n      if (fairYearLabel) fairYearLabel.textContent = (data.fairLabel || '') + ' ' + (data.year || '');\n      if (programLabel) programLabel.textContent = (data.fairLabel || '') + ' \u00b7 ' + (labels.program || '') + ' ' + (data.year || '');\n      renderMeta();\n      renderAll();\n    }\n\n    function refreshProgram() {\n      if (!data.feedUrl || data.isPreview || typeof window.fetch !== 'function') return;\n\n      window.fetch(data.feedUrl, {\n        method: 'GET',\n        credentials: 'same-origin',\n        cache: 'no-store',\n        headers: { 'Accept': 'application\/json' }\n      })\n        .then(function (response) {\n          if (!response.ok) throw new Error('Programme request failed');\n          return response.json();\n        })\n        .then(applyProgram)\n        .catch(function () {\n          \/\/ Ob napaki ostane prikazan varni stre\u017eni\u0161ki predogled oziroma stanje priprave.\n        });\n    }\n\n    function renderDays() {\n      if (!dayGrid) return;\n\n      dayGrid.innerHTML = days.map(function (day, index) {\n        var date = splitDate(day.date);\n        var count = dayEvents(index).length;\n        var active = index === selectedDay;\n        var savedOnDay = dayEvents(index).filter(function (event) {\n          return saved.indexOf(stableEventId(day, event)) !== -1;\n        }).length;\n\n        return '' +\n          '<button class=\"epp__day-card' + (active ? ' is-active' : '') + (savedOnDay ? ' has-saved' : '') + '\" type=\"button\" data-epp-day=\"' + index + '\" data-day-number=\"' + (index + 1) + '.\" aria-pressed=\"' + (active ? 'true' : 'false') + '\">' +\n            '<span class=\"epp__day-top\">' +\n              '<span class=\"epp__day-index\">' + (index + 1) + '<\/span>' +\n              '<span class=\"epp__day-count\">' + count + ' ' + escapeHtml(eventNoun(count, language)) + '<\/span>' +\n            '<\/span>' +\n            '<span class=\"epp__day-name\">' + escapeHtml(date.name || ((language === 'en' ? 'Day ' : '') + (index + 1) + (language === 'sl' ? '. dan' : ''))) + '<\/span>' +\n            '<span class=\"epp__day-date\">' + escapeHtml(date.date) + '<\/span>' +\n            (savedOnDay ? '<span class=\"epp__day-saved\" aria-label=\"' + escapeHtml(labels.myProgram || '') + '\">\u2605 ' + savedOnDay + '<\/span>' : '') +\n          '<\/button>';\n      }).join('');\n\n      dayGrid.querySelectorAll('[data-epp-day]').forEach(function (button) {\n        button.addEventListener('click', function () {\n          selectedDay = parseInt(button.getAttribute('data-epp-day'), 10) || 0;\n          selectedHall = 'all';\n          selectedStatus = 'all';\n          renderDays();\n          renderHalls();\n          renderSchedule();\n        });\n      });\n    }\n\n    function hallsForDay() {\n      var halls = [];\n      dayEvents(selectedDay).forEach(function (event) {\n        var hall = String(event.location || labels.otherHall || '').trim();\n        if (halls.indexOf(hall) === -1) halls.push(hall);\n      });\n      return halls;\n    }\n\n    function renderHalls() {\n      if (!hallButtons) return;\n      var halls = ['all'].concat(hallsForDay());\n\n      hallButtons.innerHTML = halls.map(function (hall) {\n        var active = hall === selectedHall;\n        var label = hall === 'all' ? labels.allHalls : hall;\n        return '<button class=\"epp__hall-button' + (active ? ' is-active' : '') + '\" type=\"button\" data-epp-hall=\"' + escapeHtml(hall) + '\" aria-pressed=\"' + (active ? 'true' : 'false') + '\">' + escapeHtml(label) + '<\/button>';\n      }).join('');\n\n      hallButtons.querySelectorAll('[data-epp-hall]').forEach(function (button) {\n        button.addEventListener('click', function () {\n          selectedHall = button.getAttribute('data-epp-hall') || 'all';\n          renderHalls();\n          renderSchedule();\n        });\n      });\n    }\n\n    function filteredEvents() {\n      var day = days[selectedDay] || {};\n      return dayEvents(selectedDay).filter(function (event) {\n        var hall = String(event.location || labels.otherHall || '').trim();\n        var id = stableEventId(day, event);\n        var status = eventStatus(day, event);\n        var hallMatches = selectedHall === 'all' || selectedHall === hall;\n        var viewMatches = selectedView === 'all' || saved.indexOf(id) !== -1;\n        var statusMatches = selectedStatus === 'all' || status.type === selectedStatus;\n        var haystack = normalize([\n          event.title,\n          textFromHtml(event.description),\n          event.organizator,\n          event.organizer,\n          event.speakers,\n          event.tag,\n          hall\n        ].join(' '));\n\n        return hallMatches && viewMatches && statusMatches && haystack.indexOf(normalize(searchTerm)) !== -1;\n      });\n    }\n\n    function detailsHtml(day, event, id) {\n      var description = String(event.description || '').trim();\n      var organizer = String(event.organizator || event.organizer || '').trim();\n      var speakers = String(event.speakers || '').trim();\n      var hall = String(event.location || labels.otherHall || '').trim();\n      var mapUrl = mapUrlForHall(hall);\n      var html = '';\n\n      if (description) html += '<div class=\"epp__description\">' + description + '<\/div>';\n      if (organizer) html += '<p><strong>' + escapeHtml(labels.organizer) + ':<\/strong> ' + escapeHtml(organizer) + '<\/p>';\n      if (speakers) html += '<p><strong>' + escapeHtml(labels.speakers) + ':<\/strong> ' + escapeHtml(speakers) + '<\/p>';\n      html += '<div class=\"epp__detail-actions\">';\n      html += '<button class=\"epp__detail-button\" type=\"button\" data-epp-calendar=\"' + escapeHtml(id) + '\"><span aria-hidden=\"true\">\u25a3<\/span>' + escapeHtml(labels.addCalendar || '') + '<\/button>';\n      if (mapUrl) {\n        html += '<button class=\"epp__detail-button\" type=\"button\" data-epp-map=\"' + escapeHtml(id) + '\"><span aria-hidden=\"true\">\u2316<\/span>' + escapeHtml(labels.viewMap || '') + '<\/button>';\n      }\n      html += '<\/div>';\n      return html;\n    }\n\n    function eventHtml(day, event, hallIndex, eventIndex) {\n      var id = stableEventId(day, event);\n      var organizer = String(event.organizator || event.organizer || '').trim();\n      var descriptionText = shortText(event.description, 180);\n      var tag = String(event.tag || '').trim();\n      var detailsId = instancePrefix + '-details-' + hallIndex + '-' + eventIndex;\n      var status = eventStatus(day, event);\n      var isSaved = saved.indexOf(id) !== -1;\n      var tags = '';\n\n      if (status.type === 'now') {\n        tags += '<span class=\"epp__tag epp__tag--now\"><span class=\"epp__pulse\" aria-hidden=\"true\"><\/span>' + escapeHtml(status.label) + '<\/span>';\n      } else if (status.type === 'soon') {\n        tags += '<span class=\"epp__tag epp__tag--soon\"><span aria-hidden=\"true\">\u25f7<\/span>' + escapeHtml(status.label) + '<\/span>';\n      }\n      if (tag) tags += '<span class=\"epp__tag\">' + escapeHtml(tag) + '<\/span>';\n      if (organizer) tags += '<span class=\"epp__tag epp__tag--organizer\">' + escapeHtml(organizer) + '<\/span>';\n\n      return '' +\n        '<article class=\"epp__event' + (status.type === 'now' ? ' is-now' : '') + (status.type === 'soon' ? ' is-soon' : '') + '\" data-epp-event-id=\"' + escapeHtml(id) + '\">' +\n          '<div class=\"epp__event-main\">' +\n            '<button class=\"epp__event-toggle\" type=\"button\" aria-expanded=\"false\" aria-controls=\"' + detailsId + '\">' +\n              '<span class=\"epp__time\">' + formatTime(event.time) + '<\/span>' +\n              '<span class=\"epp__event-copy\">' +\n                '<h4>' + escapeHtml(event.title || '') + '<\/h4>' +\n                (descriptionText ? '<span class=\"epp__event-summary\">' + escapeHtml(descriptionText) + '<\/span>' : '') +\n                (tags ? '<span class=\"epp__event-tags\">' + tags + '<\/span>' : '') +\n              '<\/span>' +\n              '<span class=\"epp__event-arrow\" aria-hidden=\"true\">+<\/span>' +\n            '<\/button>' +\n            '<button class=\"epp__star-button' + (isSaved ? ' is-saved' : '') + '\" type=\"button\" data-epp-save=\"' + escapeHtml(id) + '\" aria-pressed=\"' + (isSaved ? 'true' : 'false') + '\" aria-label=\"' + escapeHtml(isSaved ? labels.removeFromMy : labels.addToMy) + '\" title=\"' + escapeHtml(isSaved ? labels.removeFromMy : labels.addToMy) + '\">' + starIcon() + '<\/button>' +\n          '<\/div>' +\n          '<div class=\"epp__event-details\" id=\"' + detailsId + '\">' + detailsHtml(day, event, id) + '<\/div>' +\n        '<\/article>';\n    }\n\n    function renderLiveStrip(day) {\n      if (!liveStrip) return;\n      var events = Array.isArray(day.events) ? day.events : [];\n      var happening = events.filter(function (event) { return eventStatus(day, event).type === 'now'; }).length;\n      var upcoming = events.filter(function (event) { return eventStatus(day, event).type === 'soon'; }).length;\n\n      if (nowCount) nowCount.textContent = happening;\n      if (soonCount) soonCount.textContent = upcoming;\n      liveStrip.hidden = happening === 0 && upcoming === 0;\n\n      root.querySelectorAll('[data-epp-status]').forEach(function (button) {\n        button.classList.toggle('is-active', button.getAttribute('data-epp-status') === selectedStatus);\n      });\n    }\n\n    function renderSchedule() {\n      if (!schedule || !days.length) return;\n      var chosenDay = days[selectedDay] || {};\n      var date = splitDate(chosenDay.date);\n      var events = filteredEvents();\n\n      if (savedCount) savedCount.textContent = saved.length;\n      if (selectedDate) selectedDate.textContent = [date.name, date.date].filter(Boolean).join(', ');\n      if (resultCount) resultCount.innerHTML = '<strong>' + events.length + '<\/strong> ' + escapeHtml(eventNoun(events.length, language));\n      renderLiveStrip(chosenDay);\n\n      if (!events.length) {\n        var savedEmpty = selectedView === 'saved';\n        schedule.innerHTML = '<div class=\"epp__empty-state\">' +\n          '<span class=\"epp__empty-icon\" aria-hidden=\"true\">' + (savedEmpty ? '\u2605' : '\u2315') + '<\/span>' +\n          '<strong>' + escapeHtml(savedEmpty ? labels.savedEmpty : labels.noResults) + '<\/strong>' +\n          '<span>' + escapeHtml(savedEmpty ? labels.savedEmptyText : labels.noResultsText) + '<\/span>' +\n          (savedEmpty ? '<button class=\"epp__empty-action\" type=\"button\" data-epp-show-all>' + escapeHtml(labels.showAll) + '<\/button>' : '') +\n          '<\/div>';\n        bindScheduleActions();\n        return;\n      }\n\n      var groups = [];\n      events.forEach(function (event) {\n        var hall = String(event.location || labels.otherHall || '').trim();\n        var group = groups.find(function (item) { return item.hall === hall; });\n        if (!group) {\n          group = { hall: hall, events: [] };\n          groups.push(group);\n        }\n        group.events.push(event);\n      });\n\n      schedule.innerHTML = groups.map(function (group, hallIndex) {\n        group.events.sort(function (a, b) { return timeKey(a.time) - timeKey(b.time); });\n        var count = group.events.length;\n\n        return '' +\n          '<article class=\"epp__hall-section\">' +\n            '<header class=\"epp__hall-header\">' +\n              '<div class=\"epp__hall-title\">' +\n                '<span class=\"epp__hall-icon\">' + String(hallIndex + 1).padStart(2, '0') + '<\/span>' +\n                '<span><h3>' + escapeHtml(group.hall) + '<\/h3><small>' + escapeHtml(labels.sorted) + '<\/small><\/span>' +\n              '<\/div>' +\n              '<span class=\"epp__hall-event-count\">' + count + ' ' + escapeHtml(eventNoun(count, language)) + '<\/span>' +\n            '<\/header>' +\n            '<div class=\"epp__event-list\">' + group.events.map(function (event, eventIndex) {\n              return eventHtml(chosenDay, event, hallIndex, eventIndex);\n            }).join('') + '<\/div>' +\n          '<\/article>';\n      }).join('');\n\n      bindScheduleActions();\n    }\n\n    function bindScheduleActions() {\n      schedule.querySelectorAll('.epp__event-toggle').forEach(function (button) {\n        button.addEventListener('click', function () {\n          var event = button.closest('.epp__event');\n          var isOpen = event.classList.toggle('is-open');\n          button.setAttribute('aria-expanded', isOpen ? 'true' : 'false');\n        });\n      });\n\n      schedule.querySelectorAll('[data-epp-save]').forEach(function (button) {\n        button.addEventListener('click', function () { requestToggleSaved(button.getAttribute('data-epp-save')); });\n      });\n\n      schedule.querySelectorAll('[data-epp-calendar]').forEach(function (button) {\n        button.addEventListener('click', function () { showCalendar(button.getAttribute('data-epp-calendar')); });\n      });\n\n      schedule.querySelectorAll('[data-epp-map]').forEach(function (button) {\n        button.addEventListener('click', function () { showMap(button.getAttribute('data-epp-map')); });\n      });\n\n      var showAll = schedule.querySelector('[data-epp-show-all]');\n      if (showAll) showAll.addEventListener('click', function () { setView('all'); });\n    }\n\n    function overlaps(first, second) {\n      if (!first || !second) return false;\n      var firstDates = eventDates(first.day, first.event);\n      var secondDates = eventDates(second.day, second.event);\n      if (!firstDates || !secondDates) return false;\n      return firstDates.start < secondDates.end && secondDates.start < firstDates.end;\n    }\n\n    function requestToggleSaved(id) {\n      var savedIndex = saved.indexOf(id);\n      if (savedIndex !== -1) {\n        saved.splice(savedIndex, 1);\n        writeSaved();\n        showToast(labels.removedFromMy || '');\n        updateSavedUi();\n        return;\n      }\n\n      var candidate = findEventItem(id);\n      var conflict = saved.map(findEventItem).find(function (item) { return overlaps(candidate, item); });\n      if (conflict) {\n        pendingEventId = id;\n        showConflict(candidate, conflict);\n        return;\n      }\n\n      addSaved(id);\n    }\n\n    function addSaved(id) {\n      if (saved.indexOf(id) === -1) saved.push(id);\n      writeSaved();\n      showToast(labels.addedToMy || '');\n      updateSavedUi();\n    }\n\n    function updateSavedUi() {\n      renderDays();\n      renderSchedule();\n    }\n\n    function setView(view) {\n      selectedView = view;\n      root.querySelectorAll('[data-epp-view]').forEach(function (button) {\n        button.classList.toggle('is-active', button.getAttribute('data-epp-view') === view);\n      });\n      renderSchedule();\n    }\n\n    function showToast(message) {\n      if (!toast || !message) return;\n      toast.textContent = message;\n      toast.classList.add('is-visible');\n      window.clearTimeout(toastTimer);\n      toastTimer = window.setTimeout(function () { toast.classList.remove('is-visible'); }, 2600);\n    }\n\n    function openDialog(eyebrow, title, html) {\n      if (!dialog || !dialogBody) return;\n      if (dialog.open && typeof dialog.close === 'function') dialog.close();\n      if (dialogEyebrow) dialogEyebrow.textContent = eyebrow || '';\n      if (dialogTitle) dialogTitle.textContent = title || '';\n      dialogBody.innerHTML = html;\n      if (typeof dialog.showModal === 'function') dialog.showModal();\n      else dialog.setAttribute('open', '');\n    }\n\n    function closeDialog() {\n      pendingEventId = '';\n      if (!dialog) return;\n      if (typeof dialog.close === 'function') dialog.close();\n      else dialog.removeAttribute('open');\n    }\n\n    function showConflict(candidate, conflict) {\n      if (!candidate || !conflict) return;\n      openDialog(labels.conflictLabel, labels.conflictTitle,\n        '<p>' + escapeHtml(labels.conflictText) + '<\/p>' +\n        conflictCard(conflict) + conflictCard(candidate) +\n        '<div class=\"epp__dialog-actions\">' +\n          '<button class=\"epp__dialog-button\" type=\"button\" data-epp-cancel-conflict>' + escapeHtml(labels.cancel) + '<\/button>' +\n          '<button class=\"epp__dialog-button epp__dialog-button--primary\" type=\"button\" data-epp-confirm-conflict>' + escapeHtml(labels.addAnyway) + '<\/button>' +\n        '<\/div>'\n      );\n\n      dialogBody.querySelector('[data-epp-cancel-conflict]').addEventListener('click', closeDialog);\n      dialogBody.querySelector('[data-epp-confirm-conflict]').addEventListener('click', function () {\n        var id = pendingEventId;\n        pendingEventId = '';\n        closeDialog();\n        addSaved(id);\n      });\n    }\n\n    function conflictCard(item) {\n      var hall = String(item.event.location || labels.otherHall || '').trim();\n      return '<div class=\"epp__conflict-card\">' +\n        '<span class=\"epp__conflict-time\">' + formatTime(item.event.time) + '<\/span>' +\n        '<span><strong>' + escapeHtml(item.event.title || '') + '<\/strong><small>' + escapeHtml(hall) + '<\/small><\/span>' +\n      '<\/div>';\n    }\n\n    function calendarDetails(item) {\n      var event = item.event;\n      var hall = String(event.location || labels.otherHall || '').trim();\n      var organizer = String(event.organizator || event.organizer || '').trim();\n      return [shortText(event.description, 1000), hall, organizer].filter(Boolean).join('\\n');\n    }\n\n    function showCalendar(id) {\n      var item = findEventItem(id);\n      if (!item) return;\n      var dates = eventDates(item.day, item.event);\n      if (!dates) return;\n      var event = item.event;\n      var hall = String(event.location || labels.otherHall || '').trim();\n      var details = calendarDetails(item);\n      var googleUrl = 'https:\/\/calendar.google.com\/calendar\/render?action=TEMPLATE&text=' + encodeURIComponent(event.title || '') + '&dates=' + compactCalendarDate(dates.start) + '\/' + compactCalendarDate(dates.end) + '&ctz=Europe%2FLjubljana&details=' + encodeURIComponent(details) + '&location=' + encodeURIComponent(hall + ', Celjski sejem');\n      var outlookUrl = 'https:\/\/outlook.live.com\/calendar\/0\/deeplink\/compose?subject=' + encodeURIComponent(event.title || '') + '&startdt=' + encodeURIComponent(isoLocalDate(dates.start)) + '&enddt=' + encodeURIComponent(isoLocalDate(dates.end)) + '&body=' + encodeURIComponent(details) + '&location=' + encodeURIComponent(hall + ', Celjski sejem');\n\n      openDialog(labels.calendarTitle, event.title || '',\n        '<p>' + escapeHtml(labels.calendarText) + '<\/p>' +\n        '<div class=\"epp__calendar-choices\">' +\n          '<a class=\"epp__calendar-choice\" href=\"' + escapeHtml(googleUrl) + '\" target=\"_blank\" rel=\"noopener\"><span><strong>' + escapeHtml(labels.googleCalendar) + '<\/strong><small>Google<\/small><\/span><span aria-hidden=\"true\">\u2197<\/span><\/a>' +\n          '<a class=\"epp__calendar-choice\" href=\"' + escapeHtml(outlookUrl) + '\" target=\"_blank\" rel=\"noopener\"><span><strong>' + escapeHtml(labels.outlook) + '<\/strong><small>Microsoft<\/small><\/span><span aria-hidden=\"true\">\u2197<\/span><\/a>' +\n          '<button class=\"epp__calendar-choice\" type=\"button\" data-epp-download-ics><span><strong>' + escapeHtml(labels.appleCalendar) + '<\/strong><small>ICS<\/small><\/span><span aria-hidden=\"true\">\u2193<\/span><\/button>' +\n        '<\/div>'\n      );\n\n      dialogBody.querySelector('[data-epp-download-ics]').addEventListener('click', function () {\n        downloadIcs(item, dates);\n        closeDialog();\n      });\n    }\n\n    function downloadIcs(item, dates) {\n      var event = item.event;\n      var hall = String(event.location || labels.otherHall || '').trim();\n      var content = [\n        'BEGIN:VCALENDAR',\n        'VERSION:2.0',\n        'PRODID:-\/\/EpiCoro\/\/Spremljevalni program\/\/SL',\n        'CALSCALE:GREGORIAN',\n        'BEGIN:VEVENT',\n        'UID:' + stableEventId(item.day, event) + '@ce-sejem.si',\n        'DTSTART;TZID=Europe\/Ljubljana:' + compactCalendarDate(dates.start),\n        'DTEND;TZID=Europe\/Ljubljana:' + compactCalendarDate(dates.end),\n        'SUMMARY:' + icsEscape(event.title || ''),\n        'DESCRIPTION:' + icsEscape(calendarDetails(item)),\n        'LOCATION:' + icsEscape(hall + ', Celjski sejem'),\n        'END:VEVENT',\n        'END:VCALENDAR'\n      ].join('\\r\\n');\n      var blob = new Blob([content], { type: 'text\/calendar;charset=utf-8' });\n      var url = window.URL.createObjectURL(blob);\n      var link = document.createElement('a');\n      link.href = url;\n      link.download = 'dogodek-' + stableEventId(item.day, event) + '.ics';\n      document.body.appendChild(link);\n      link.click();\n      link.remove();\n      window.setTimeout(function () { window.URL.revokeObjectURL(url); }, 1000);\n    }\n\n    function showMap(id) {\n      var item = findEventItem(id);\n      if (!item) return;\n      var hall = String(item.event.location || labels.otherHall || '').trim();\n      var mapUrl = mapUrlForHall(hall);\n      if (!mapUrl) return;\n\n      openDialog(labels.mapTitle, hall,\n        '<p>' + escapeHtml(labels.mapText) + '<\/p>' +\n        '<figure class=\"epp__map-figure\"><img decoding=\"async\" src=\"' + escapeHtml(mapUrl) + '\" alt=\"' + escapeHtml((labels.mapTitle || '') + ' \u2013 ' + hall) + '\"><figcaption><strong>' + escapeHtml(hall) + '<\/strong><span>' + escapeHtml(item.event.title || '') + '<\/span><\/figcaption><\/figure>'\n      );\n    }\n\n    function renderAll() {\n      if (savedCount) savedCount.textContent = saved.length;\n      renderDays();\n      renderHalls();\n      renderSchedule();\n    }\n\n    if (searchInput) {\n      searchInput.removeAttribute('disabled');\n      searchInput.removeAttribute('readonly');\n      if (searchWrap) {\n        searchWrap.addEventListener('pointerdown', function (event) {\n          if (event.target === searchInput) return;\n          event.preventDefault();\n          searchInput.focus({ preventScroll: true });\n        }, true);\n      }\n      searchInput.addEventListener('pointerdown', function () {\n        if (document.activeElement !== searchInput) searchInput.focus({ preventScroll: true });\n      }, true);\n      searchInput.addEventListener('input', function () {\n        searchTerm = searchInput.value.trim();\n        renderSchedule();\n      });\n      searchInput.addEventListener('click', function (event) { event.stopPropagation(); });\n    }\n\n    root.querySelectorAll('[data-epp-view]').forEach(function (button) {\n      button.addEventListener('click', function () { setView(button.getAttribute('data-epp-view') || 'all'); });\n    });\n\n    root.querySelectorAll('[data-epp-status]').forEach(function (button) {\n      button.addEventListener('click', function () {\n        var status = button.getAttribute('data-epp-status') || 'all';\n        selectedStatus = selectedStatus === status ? 'all' : status;\n        renderSchedule();\n      });\n    });\n\n    if (dialog) {\n      var closeButton = dialog.querySelector('[data-epp-dialog-close]');\n      if (closeButton) closeButton.addEventListener('click', closeDialog);\n      dialog.addEventListener('click', function (event) { if (event.target === dialog) closeDialog(); });\n      dialog.addEventListener('cancel', function () { pendingEventId = ''; });\n    }\n\n    function runtimePrintCss() {\n      return '.epp-print-shell{display:none!important}@media print {' +\n        '@page{size:A4 portrait;margin:13mm 11mm}' +\n        'html,body.epp-is-printing{width:100%!important;min-width:0!important;min-height:0!important;margin:0!important;padding:0!important;overflow:visible!important;background:#fff!important}' +\n        'body.epp-is-printing:before,body.epp-is-printing:after{display:none!important;content:none!important}' +\n        'body.epp-is-printing>*:not(.epp-print-shell){display:none!important;visibility:hidden!important}' +\n        'body.epp-is-printing>.epp-print-shell{position:static!important;display:block!important;visibility:visible!important;width:100%!important;margin:0!important;padding:0!important;background:#fff!important}' +\n        '.epp-print-shell,.epp-print-shell *{font-family:\"DM Sans\",Arial,Helvetica,sans-serif!important;box-sizing:border-box!important}' +\n        '.epp-print-shell .epp{display:block!important;width:100%!important;max-width:none!important;margin:0!important;padding:0!important;overflow:visible!important;color:#111317!important;background:#fff!important}' +\n        '.epp-print-shell .epp__filters,.epp-print-shell .epp__toolbar,.epp-print-shell .epp__live-strip,.epp-print-shell .epp__preview-note,.epp-print-shell .epp__notice-card,.epp-print-shell .epp__event-arrow,.epp-print-shell .epp__event-summary,.epp-print-shell .epp__event-tags,.epp-print-shell .epp__star-button,.epp-print-shell .epp__detail-actions,.epp-print-shell .epp__dialog,.epp-print-shell .epp__toast{display:none!important}' +\n        '.epp-print-shell .epp__program-heading{display:flex!important;align-items:flex-end!important;justify-content:space-between!important;gap:10mm!important;margin:0 0 6mm!important;padding:0 0 4mm!important;border-bottom:1.5pt solid #0d56a6!important}' +\n        '.epp-print-shell .epp__program-heading h2{margin:0!important;font-size:20pt!important;line-height:1.15!important;color:#111317!important}' +\n        '.epp-print-shell .epp__program-kicker{margin:0 0 2mm!important;color:#0d56a6!important;font-size:8pt!important;font-weight:800!important;letter-spacing:.1em!important;text-transform:uppercase!important}' +\n        '.epp-print-shell .epp__result-count{display:block!important;font-size:9pt!important;color:#555!important;white-space:nowrap!important}' +\n        '.epp-print-shell .epp__schedule{display:block!important;margin:0!important}' +\n        '.epp-print-shell .epp__hall-section{display:block!important;margin:0 0 5mm!important;overflow:visible!important;border:1px solid #d7dce1!important;border-radius:4mm!important;box-shadow:none!important;break-inside:avoid-page!important;page-break-inside:avoid!important}' +\n        '.epp-print-shell .epp__hall-header{display:flex!important;min-height:0!important;padding:3mm 4mm!important;background:#f1f6fb!important;border-bottom:1px solid #dfe4e8!important}' +\n        '.epp-print-shell .epp__hall-icon{display:grid!important;width:9mm!important;height:9mm!important;border-radius:2.5mm!important;background:#0d56a6!important;color:#fff!important;font-size:8pt!important}' +\n        '.epp-print-shell .epp__hall-title h3{margin:0!important;font-size:12pt!important}.epp-print-shell .epp__hall-title small,.epp-print-shell .epp__hall-event-count{font-size:7.5pt!important}' +\n        '.epp-print-shell .epp__event{display:block!important;border-bottom:1px solid #e7e7e7!important;background:#fff!important;break-inside:avoid!important;page-break-inside:avoid!important;box-shadow:none!important}' +\n        '.epp-print-shell .epp__event-main{display:block!important;padding:0!important}' +\n        '.epp-print-shell .epp__event-toggle{display:grid!important;grid-template-columns:31mm minmax(0,1fr)!important;gap:5mm!important;width:100%!important;padding:4mm!important;border:0!important;background:#fff!important;color:#111317!important;text-align:left!important}' +\n        '.epp-print-shell .epp__time{padding-left:0!important;color:#0d56a6!important;font-size:9pt!important;font-weight:800!important}.epp-print-shell .epp__time:before{display:none!important}' +\n        '.epp-print-shell .epp__event-copy h4{margin:0!important;font-size:9.5pt!important;line-height:1.35!important}' +\n        '.epp-print-shell .epp__event-details{display:block!important;margin:0 4mm 4mm 40mm!important;padding-top:3mm!important;border-top:1px solid #e6e8ea!important;color:#444!important;font-size:8pt!important;line-height:1.5!important}' +\n        '.epp-print-shell .epp__event-details p{margin:0 0 2mm!important}.epp-print-shell .epp__event-details a{color:#0d56a6!important;text-decoration:underline!important;overflow-wrap:anywhere!important}.epp-print-shell .epp a[href]:after{content:none!important}' +\n        '}';\n    }\n\n    function printProgramOnly() {\n      if (!document.body || document.body.classList.contains('epp-is-printing')) return;\n\n      var shell = document.createElement('div');\n      var copy = root.cloneNode(true);\n      var style = document.createElement('style');\n      var cleanupTimer;\n      var cleaned = false;\n\n      shell.className = 'epp-print-shell';\n      shell.setAttribute('aria-hidden', 'true');\n      shell.style.display = 'none';\n      style.setAttribute('data-epp-runtime-print', '');\n      style.textContent = runtimePrintCss();\n\n      copy.removeAttribute('id');\n      copy.removeAttribute('data-epp-program');\n      copy.classList.add('epp--print-copy');\n      copy.querySelectorAll('script,[data-epp-dialog],[data-epp-toast]').forEach(function (element) { element.remove(); });\n\n      shell.appendChild(copy);\n      document.head.appendChild(style);\n      document.body.appendChild(shell);\n      document.body.classList.add('epp-is-printing');\n\n      function cleanupPrint() {\n        if (cleaned) return;\n        cleaned = true;\n        window.clearTimeout(cleanupTimer);\n        window.removeEventListener('afterprint', cleanupPrint);\n        document.body.classList.remove('epp-is-printing');\n        shell.remove();\n        style.remove();\n      }\n\n      window.addEventListener('afterprint', cleanupPrint, { once: true });\n      window.requestAnimationFrame(function () {\n        try {\n          window.print();\n        } catch (error) {\n          cleanupPrint();\n          return;\n        }\n        if (!cleaned) cleanupTimer = window.setTimeout(cleanupPrint, 300000);\n      });\n    }\n\n    if (printButton) printButton.addEventListener('click', printProgramOnly);\n\n    applyProgram(data);\n    refreshProgram();\n    clockTimer = window.setInterval(function () {\n      if (document.visibilityState === 'visible' && days.length) renderSchedule();\n    }, 60000);\n\n    window.addEventListener('pagehide', function () { window.clearInterval(clockTimer); }, { once: true });\n  }\n\n  function initAll() {\n    document.querySelectorAll('[data-epp-program]').forEach(initProgram);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initAll);\n  } else {\n    initAll();\n  }\n}());\n},120);};if(document.readyState===\"complete\"){eppBoot();}else{window.addEventListener(\"load\",eppBoot,{once:true});}}());<\/script>        <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Celjski sejem d.d. Stran Side Events Programme<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":10589,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"footnotes":""},"folder":[],"class_list":["post-10728","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/pages\/10728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/comments?post=10728"}],"version-history":[{"count":41,"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/pages\/10728\/revisions"}],"predecessor-version":[{"id":42877,"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/pages\/10728\/revisions\/42877"}],"up":[{"embeddable":true,"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/pages\/10589"}],"wp:attachment":[{"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/media?parent=10728"}],"wp:term":[{"taxonomy":"folder","embeddable":true,"href":"https:\/\/ce-sejem.si\/en\/wp-json\/wp\/v2\/folder?post=10728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}