{"id":10846,"date":"2026-03-23T12:17:59","date_gmt":"2026-03-23T16:17:59","guid":{"rendered":"https:\/\/www.sheelersda.com\/m\/?page_id=10846"},"modified":"2026-04-04T10:22:49","modified_gmt":"2026-04-04T14:22:49","slug":"events_itinerary_feed","status":"publish","type":"page","link":"https:\/\/www.sheelersda.com\/m\/events_itinerary_feed\/","title":{"rendered":"Events_itinerary_feed"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><p>[vc_row][vc_column][vc_column_text css=\u00bb\u00bb woodmart_inline=\u00bbno\u00bb text_larger=\u00bbno\u00bb]        <div id=\"cbran-events-itinerary-feed-1\"\n            class=\"cbran-events-itinerary-feed cbran-events-itinerary-feed-root cbran-event-view-public max-w-4xl mx-auto p-4 sm:p-6 bg-white rounded-xl border border-gray-200 shadow-sm space-y-4\"\n            data-cbran-tailwind=\"1\"\n            data-cbran-ap-ov-base=\"cbran-itin-feed-ov-2\"\n            data-cbran-overlay-id=\"cbran-itin-feed-ov-2\"\n            data-cbran-overlay-cancel-id=\"cbran-itin-feed-ov-2-cancel\"\n            data-cbran-overlay-confirm-id=\"cbran-itin-feed-ov-2-confirm\"\n            data-cbran-ajax-url=\"https:\/\/www.sheelersda.com\/m\/wp-admin\/admin-ajax.php\"\n            data-cbran-itinerary-scope=\"public\"\n            data-cbran-feed-title=\"\"\n            data-cbran-rendered-eids=\"\">\n            <div class=\"cbran-events-itinerary-feed-live-inner\">\n                        <div class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2 pb-2 border-b border-gray-200\">\n            <div class=\"flex items-center gap-2 min-w-0\">\n                <span class=\"text-blue-600 shrink-0\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"h-5 w-5\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><polyline points=\"12 6 12 12 16 14\"><\/polyline><\/svg><\/span>\n                <h2 class=\"text-xl font-semibold text-gray-900 truncate\">Today&#039;s itineraries<\/h2>\n            <\/div>\n            <p class=\"text-sm text-gray-500 shrink-0 cbran-events-itinerary-feed-today-label\">08\/19\/2026<\/p>\n        <\/div>\n                            <p class=\"cbran-events-itinerary-feed-empty text-gray-600 text-sm py-4\">No events scheduled for today.<\/p>\n                            <\/div>\n            <div id=\"cbran-itin-feed-ov-2\" style=\"display:none; position:fixed; inset:0; z-index:2147483647; background:rgba(0,0,0,0.5); align-items:center; justify-content:center; padding:1rem; min-width:100vw; min-height:100vh;\" class=\"cbran-itinerary-reset-overlay-public cbran-itinerary-feed-reset-overlay\" aria-hidden=\"true\">\n                <div class=\"bg-white rounded-xl shadow-xl max-w-sm w-full p-5\" style=\"box-shadow:0 25px 50px -12px rgba(0,0,0,0.25);\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"cbran-itin-feed-ov-2-title\">\n                    <p id=\"cbran-itin-feed-ov-2-title\" class=\"text-sm font-medium text-gray-900 mb-1\">Reset section<\/p>\n                    <p class=\"text-sm text-gray-600 mb-4\">Do you want to reset this section to Not started? You can start it again later.<\/p>\n                    <div class=\"flex gap-3 justify-end\">\n                        <button type=\"button\" id=\"cbran-itin-feed-ov-2-cancel\" class=\"px-4 py-2 text-sm font-medium rounded-lg border border-gray-300 text-gray-700 bg-white hover:bg-gray-50\">Cancel<\/button>\n                        <button type=\"button\" id=\"cbran-itin-feed-ov-2-confirm\" class=\"px-4 py-2 text-sm font-medium rounded-lg bg-amber-600 text-white hover:bg-amber-700\">Reset<\/button>\n                    <\/div>\n                <\/div>\n            <\/div>\n                        <div id=\"cbran-itin-feed-ov-2-autopilot\" class=\"cbran-itinerary-autopilot-overlay-public cbran-itinerary-feed-autopilot-overlay\" style=\"display:none; position:fixed; inset:0; z-index:2147483647; background:rgba(0,0,0,0.5); align-items:center; justify-content:center; padding:1rem; min-width:100vw; min-height:100vh;\" aria-hidden=\"true\">\n                <div class=\"cbran-itinerary-autopilot-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"cbran-itin-feed-ov-2-autopilot-title\">\n                    <div class=\"cbran-itinerary-autopilot-modal__header\">\n                        <p id=\"cbran-itin-feed-ov-2-autopilot-title\" class=\"cbran-itinerary-autopilot-modal__title\">Itinerary autopilot<\/p>\n                    <\/div>\n                    <p class=\"cbran-itinerary-autopilot-modal__lead\">Start each section yourself when you are ready, or turn on autopilot so \u201cStart\u201d runs automatically at each section\u2019s scheduled time.<\/p>\n                    <label class=\"cbran-itinerary-autopilot-modal__skip\" for=\"cbran-itin-feed-ov-2-autopilot-skip\">\n                        <input type=\"checkbox\" id=\"cbran-itin-feed-ov-2-autopilot-skip\" class=\"cbran-itinerary-autopilot-modal__checkbox\" \/>\n                        <span>Don\u2019t ask again for this event (on this browser)<\/span>\n                    <\/label>\n                    <div class=\"cbran-itinerary-autopilot-modal__actions\">\n                        <button type=\"button\" id=\"cbran-itin-feed-ov-2-autopilot-cancel\" class=\"cbran-itinerary-autopilot-modal__btn cbran-itinerary-autopilot-modal__btn--secondary\">Cancel<\/button>\n                        <button type=\"button\" id=\"cbran-itin-feed-ov-2-autopilot-manual\" class=\"cbran-itinerary-autopilot-modal__btn cbran-itinerary-autopilot-modal__btn--outline\">Manual \u2014 start this section only<\/button>\n                        <button type=\"button\" id=\"cbran-itin-feed-ov-2-autopilot-enable\" class=\"cbran-itinerary-autopilot-modal__btn cbran-itinerary-autopilot-modal__btn--primary\">Enable autopilot and start<\/button>\n                    <\/div>\n                <\/div>\n            <\/div>\n                    <\/div>\n        <script>\n        (function() {\n        (function(w){\nvar AP = w.CbranItineraryAutopilot = w.CbranItineraryAutopilot || {};\nif (!AP.bootHost) {\nvar SK = 'cbran_itinerary_autopilot_';\nvar SKIPK = 'cbran_itinerary_autopilot_skip_prompt_';\nfunction lsGet(k){ try { return w.localStorage.getItem(k); } catch(e){ return null; } }\nfunction lsSet(k,v){ try { w.localStorage.setItem(k,v); } catch(e){} }\nfunction getState(evId) {\ntry { var j = lsGet(SK + evId); return j ? JSON.parse(j) : { active: false }; } catch(e){ return { active: false }; }\n}\nfunction setActive(evId, active) {\nvar o = getState(evId); o.active = !!active; o.since = (Date.now && Date.now()) || +new Date(); lsSet(SK + evId, JSON.stringify(o));\n}\nfunction skipPrompt(evId){ return lsGet(SKIPK + evId) === '1'; }\nfunction setSkipPrompt(evId){ lsSet(SKIPK + evId, '1'); }\nfunction hideOv(el) {\nif (!el) return;\nel.style.display = 'none'; el.setAttribute('aria-hidden','true'); document.body.classList.remove('cbran-public-overlay-open');\n}\nfunction showOv(el) {\nif (!el) return;\nif (el.parentNode !== document.body) { document.body.appendChild(el); }\nel.style.display = 'flex'; el.setAttribute('aria-hidden','false'); document.body.classList.add('cbran-public-overlay-open');\n}\nfunction xhrStart(ajaxUrl, nonce, eventId, sectionId, onDone) {\nvar fd = new FormData();\nfd.append('action','cbran_set_itinerary_section_in_progress');\nfd.append('nonce', nonce);\nfd.append('event_id', eventId);\nfd.append('section_id', sectionId);\nvar xhr = new XMLHttpRequest();\nxhr.open('POST', ajaxUrl, true);\nxhr.withCredentials = true;\nxhr.onreadystatechange = function(){\nif (xhr.readyState === 4 && typeof onDone === 'function') {\ntry { var ok = xhr.status === 200 && JSON.parse(xhr.responseText).success; onDone(!!ok); } catch(e2) { onDone(false); }\n}\n};\nxhr.send(fd);\n}\nfunction xhrComplete(ajaxUrl, nonce, eventId, sectionId, onDone) {\nvar fd = new FormData();\nfd.append('action','cbran_toggle_itinerary_section');\nfd.append('nonce', nonce);\nfd.append('event_id', eventId);\nfd.append('section_id', sectionId);\nvar xhr = new XMLHttpRequest();\nxhr.open('POST', ajaxUrl, true);\nxhr.withCredentials = true;\nxhr.onreadystatechange = function(){\nif (xhr.readyState === 4 && typeof onDone === 'function') {\ntry { var ok = xhr.status === 200 && JSON.parse(xhr.responseText).success; onDone(!!ok); } catch(e3) { onDone(false); }\n}\n};\nxhr.send(fd);\n}\nfunction syncBanner(host, evId) {\nvar b = host.querySelector('[data-cbran-autopilot-banner]');\nif (!b) return;\nb.style.display = getState(evId).active ? 'flex' : 'none';\n}\n\/** cfg: { host, listEl, ajaxUrl, nonce, eventId, canEdit, overlayEl, cancelEl, manualEl, enableEl, skipCheckEl, refreshFn }\n *\/\nAP.bootHost = function(cfg) {\nvar host = cfg.host, listEl = cfg.listEl, ajaxUrl = cfg.ajaxUrl, nonce = cfg.nonce, eventId = String(cfg.eventId || '');\nvar overlay = cfg.overlayEl, cancelBtn = cfg.cancelEl, manualBtn = cfg.manualEl, enableBtn = cfg.enableEl, skipCheck = cfg.skipCheckEl;\nvar refreshFn = cfg.refreshFn || function(cb){ if (typeof cb === 'function') cb(); };\nvar canEditHost = !!cfg.canEdit;\nif (!host || !listEl || !ajaxUrl || !nonce || !eventId) return;\nif (host.__cbranAutopilot && typeof host.__cbranAutopilot.clearTick === 'function') {\nhost.__cbranAutopilot.clearTick();\n}\nvar fired = {};\nvar firedEnd = {};\nvar tickTimer = null;\nfunction clearTick() { if (tickTimer) { clearInterval(tickTimer); tickTimer = null; } }\nfunction tick() {\nif (!listEl || !listEl.isConnected) { clearTick(); return; }\nif (!getState(eventId).active) return;\nif (!canEditHost) return;\nvar now = (Date.now && Date.now()) || +new Date();\nvar rows = listEl.querySelectorAll('.cbran-itinerary-detail-row');\nfor (var i = 0; i < rows.length; i++) {\nvar row = rows[i];\nvar sid = row.getAttribute('data-section-id');\nif (!sid) continue;\nvar startBtn = row.querySelector('.cbran-itinerary-start-btn');\nvar startMs = row.getAttribute('data-auto-start-ms');\nif (startBtn && startMs && !fired[sid]) {\nvar t = parseInt(startMs, 10);\nif (!isNaN(t) && now >= t) {\nfired[sid] = true;\nxhrStart(ajaxUrl, nonce, eventId, sid, function(ok) {\nif (ok) { refreshFn(function(){}); } else { delete fired[sid]; }\n});\n}\n}\nvar completeBtn = row.querySelector('.cbran-itinerary-complete-btn');\nvar endMs = row.getAttribute('data-auto-end-ms');\nif (completeBtn && endMs && !firedEnd[sid]) {\nvar te = parseInt(endMs, 10);\nif (!isNaN(te) && now >= te) {\nfiredEnd[sid] = true;\nxhrComplete(ajaxUrl, nonce, eventId, sid, function(ok) {\nif (ok) { refreshFn(function(){}); } else { delete firedEnd[sid]; }\n});\n}\n}\n}\n}\nfunction startTick() { clearTick(); tick(); tickTimer = setInterval(tick, 5000); }\nif (getState(eventId).active) { syncBanner(host, eventId); startTick(); }\nvar stopBtn = host.querySelector('.cbran-itinerary-autopilot-stop');\nif (stopBtn && !stopBtn.__cbranApBound) {\nstopBtn.__cbranApBound = true;\nstopBtn.addEventListener('click', function() {\nsetActive(eventId, false); syncBanner(host, eventId); clearTick();\n});\n}\nif (overlay && cancelBtn && manualBtn && enableBtn && !AP._apOverlayWired) {\nAP._apOverlayWired = true;\ncancelBtn.addEventListener('click', function() {\nhideOv(overlay);\nvar p = AP._pendingAp;\nAP._pendingAp = null;\nif (p && p.btn) { p.btn.disabled = false; p.btn.removeAttribute('aria-busy'); }\n});\nmanualBtn.addEventListener('click', function() {\nvar p = AP._pendingAp;\nif (skipCheck && p && skipCheck.checked) setSkipPrompt(p.eventId);\nhideOv(overlay);\nAP._pendingAp = null;\nif (p && typeof p.run === 'function') p.run();\n});\nenableBtn.addEventListener('click', function() {\nvar p = AP._pendingAp;\nif (!p) return;\nif (skipCheck && skipCheck.checked) setSkipPrompt(p.eventId);\nsetActive(p.eventId, true);\nsyncBanner(p.host, p.eventId);\nif (typeof p.startTickHost === 'function') p.startTickHost();\nhideOv(overlay);\nAP._pendingAp = null;\nif (typeof p.run === 'function') p.run();\n});\n}\nhost.__cbranAutopilot = {\neventId: eventId,\nclearTick: clearTick,\nstartTick: startTick,\ntryFirstStart: function(startBtn, row, runStart) {\nif (!canEditHost) { runStart(); return; }\nvar first = listEl.querySelector('.cbran-itinerary-start-btn');\nif (!first || startBtn !== first) { runStart(); return; }\nif (getState(eventId).active) { runStart(); return; }\nif (skipPrompt(eventId)) { runStart(); return; }\nif (!overlay || !manualBtn || !enableBtn) { runStart(); return; }\nAP._pendingAp = { btn: startBtn, run: runStart, eventId: eventId, host: host, startTickHost: startTick };\nif (skipCheck) skipCheck.checked = false;\nshowOv(overlay);\n}\n};\n};\n}\n})(window);            var root = document.getElementById(\"cbran-events-itinerary-feed-1\");\n            if (!root) return;\n            var ajaxUrl = root.getAttribute('data-cbran-ajax-url') || \"https:\\\/\\\/www.sheelersda.com\\\/m\\\/wp-admin\\\/admin-ajax.php\";\n            var feedTitle = root.getAttribute('data-cbran-feed-title') || '';\n            var renderedSig = root.getAttribute('data-cbran-rendered-eids') || '';\n            var feedScope = (root.getAttribute('data-cbran-itinerary-scope') || 'public').toLowerCase();\n            var overlayId = root.getAttribute('data-cbran-overlay-id');\n            var overlayCancelId = root.getAttribute('data-cbran-overlay-cancel-id');\n            var overlayConfirmId = root.getAttribute('data-cbran-overlay-confirm-id');\n            var expandedByEvent = {};\n            var pendingReset = { wrap: null, sectionId: '', eventId: '' };\n            var toggleDebounceMs = 400;\n            var lastToggleKey = '';\n            var lastToggleTime = 0;\n            var debug = typeof window !== 'undefined' && (window.location.search.indexOf('debug=1') !== -1 || window.location.search.indexOf('&debug=1') !== -1);\n\n            function getItineraryEventJumpId() {\n                try {\n                    var p = new URLSearchParams(window.location.search);\n                    var v = p.get('cbran_itinerary_event');\n                    if (!v) return '';\n                    v = String(v).replace(\/[^0-9]\/g, '');\n                    return v || '';\n                } catch (e) { return ''; }\n            }\n            var itineraryJumpTarget = getItineraryEventJumpId();\n            var itineraryJumpDone = false;\n            function scrollToItineraryEventTarget() {\n                if (!itineraryJumpTarget || itineraryJumpDone) return;\n                var el = root.querySelector('.cbran-itinerary-feed-event-wrap[data-event-id=\"' + itineraryJumpTarget + '\"]');\n                if (!el) return;\n                itineraryJumpDone = true;\n                el.scrollIntoView({ behavior: 'smooth', block: 'start' });\n                el.classList.add('cbran-itinerary-feed-jump-highlight');\n                setTimeout(function() { el.classList.remove('cbran-itinerary-feed-jump-highlight'); }, 4500);\n            }\n\n            function restoreExpandedForList(listEl, eventId) {\n                var o = expandedByEvent[eventId];\n                if (!o) return;\n                var sectionIds = Object.keys(o);\n                if (!sectionIds.length) return;\n                var cards = listEl.querySelectorAll('.cbran-public-itinerary-card[data-expandable=\"1\"]');\n                for (var i = 0; i < sectionIds.length; i++) {\n                    var sid = sectionIds[i];\n                    if (!sid) continue;\n                    for (var j = 0; j < cards.length; j++) {\n                        var row = cards[j].querySelector('.cbran-itinerary-detail-row');\n                        if (!row || row.getAttribute('data-section-id') !== sid) continue;\n                        var body = cards[j].querySelector('.cbran-public-itinerary-card-body');\n                        var chevron = cards[j].querySelector('.cbran-public-card-chevron');\n                        if (body) {\n                            body.style.display = 'block';\n                            body.setAttribute('aria-hidden', 'false');\n                        }\n                        if (chevron) chevron.style.transform = 'rotate(180deg)';\n                        cards[j].classList.add('cbran-expanded');\n                        break;\n                    }\n                }\n            }\n\n            function refreshWrap(wrap, callback) {\n                var eid = wrap.getAttribute('data-eid');\n                var eventId = wrap.getAttribute('data-event-id');\n                var listEl = wrap.querySelector('.cbran-itinerary-feed-list-inner');\n                if (!listEl || !eid) {\n                    if (typeof callback === 'function') callback();\n                    return;\n                }\n                var xhr = new XMLHttpRequest();\n                var url = ajaxUrl + '?action=cbran_get_public_event_itinerary_html&eid=' + encodeURIComponent(eid) + '&itinerary_feed=1';\n                if (feedScope === 'full') {\n                    url += '&page_scope=full';\n                }\n                url += '&_=' + (Date.now ? Date.now() : new Date().getTime());\n                xhr.open('GET', url, true);\n                xhr.withCredentials = true;\n                xhr.onreadystatechange = function() {\n                    if (xhr.readyState !== 4) return;\n                    if (debug && xhr.status !== 200) console.warn('[cbran itinerary feed] Refresh failed', xhr.status, url);\n                    if (xhr.status === 200) {\n                        try {\n                            var res = JSON.parse(xhr.responseText);\n                            if (res.success && res.data && res.data.html !== undefined) {\n                                listEl.innerHTML = res.data.html;\n                                restoreExpandedForList(listEl, eventId);\n                            }\n                        } catch (err) {\n                            if (debug) console.warn('[cbran itinerary feed] Parse error', err);\n                        }\n                    }\n                    if (typeof callback === 'function') callback();\n                };\n                xhr.send();\n            }\n\n            var apOvBase = root.getAttribute('data-cbran-ap-ov-base') || '';\n            function bootAutopilotForFeedWraps() {\n                if (!window.CbranItineraryAutopilot || !window.CbranItineraryAutopilot.bootHost || !apOvBase) return;\n                var ov = document.getElementById(apOvBase + '-autopilot');\n                var c = document.getElementById(apOvBase + '-autopilot-cancel');\n                var m = document.getElementById(apOvBase + '-autopilot-manual');\n                var en = document.getElementById(apOvBase + '-autopilot-enable');\n                var sk = document.getElementById(apOvBase + '-autopilot-skip');\n                if (!ov) return;\n                var wraps = root.querySelectorAll('[data-cbran-itinerary-feed-wrap]');\n                for (var wi = 0; wi < wraps.length; wi++) {\n                    var w = wraps[wi];\n                    if (w.__cbranApWired) continue;\n                    var listElW = w.querySelector('.cbran-itinerary-feed-list-inner');\n                    if (!listElW) continue;\n                    w.__cbranApWired = true;\n                    window.CbranItineraryAutopilot.bootHost({\n                        host: w,\n                        listEl: listElW,\n                        ajaxUrl: w.getAttribute('data-ajax-url') || ajaxUrl,\n                        nonce: w.getAttribute('data-nonce'),\n                        eventId: w.getAttribute('data-event-id'),\n                        canEdit: w.getAttribute('data-can-edit') === '1',\n                        overlayEl: ov,\n                        cancelEl: c,\n                        manualEl: m,\n                        enableEl: en,\n                        skipCheckEl: sk,\n                        refreshFn: function(cb) { refreshWrap(w, cb); }\n                    });\n                }\n            }\n            bootAutopilotForFeedWraps();\n\n            function refreshAll() {\n                var wraps = root.querySelectorAll('[data-cbran-itinerary-feed-wrap]');\n                for (var i = 0; i < wraps.length; i++) refreshWrap(wraps[i]);\n            }\n\n            function pollFeedStructureThenRefreshRows() {\n                var url = ajaxUrl + '?action=cbran_get_public_events_itinerary_feed_poll&feed_scope=' + encodeURIComponent(feedScope) + '&feed_title=' + encodeURIComponent(feedTitle) + '&sig=' + encodeURIComponent(renderedSig) + '&_=' + (Date.now ? Date.now() : new Date().getTime());\n                var xhr = new XMLHttpRequest();\n                xhr.open('GET', url, true);\n                xhr.withCredentials = true;\n                xhr.onreadystatechange = function() {\n                    if (xhr.readyState !== 4) return;\n                    if (xhr.status === 200) {\n                        try {\n                            var res = JSON.parse(xhr.responseText);\n                            if (res.success && res.data) {\n                                if (res.data.html_inner !== undefined) {\n                                    var live = root.querySelector('.cbran-events-itinerary-feed-live-inner');\n                                    if (live) live.innerHTML = res.data.html_inner;\n                                }\n                                if (res.data.rendered_eids !== undefined) {\n                                    renderedSig = res.data.rendered_eids;\n                                    root.setAttribute('data-cbran-rendered-eids', renderedSig);\n                                }\n                            }\n                        } catch (err) {\n                            if (debug) console.warn('[cbran itinerary feed] poll parse', err);\n                        }\n                    }\n                    refreshAll();\n                    setTimeout(scrollToItineraryEventTarget, 200);\n                    var feeds = root.querySelectorAll('[data-cbran-itinerary-feed-wrap]');\n                    for (var qi = 0; qi < feeds.length; qi++) feeds[qi].__cbranApWired = false;\n                    bootAutopilotForFeedWraps();\n                };\n                xhr.send();\n            }\n\n            setInterval(pollFeedStructureThenRefreshRows, 2000);\n            setTimeout(pollFeedStructureThenRefreshRows, 300);\n            setTimeout(scrollToItineraryEventTarget, 900);\n            document.addEventListener('visibilitychange', function() {\n                if (document.visibilityState === 'visible') pollFeedStructureThenRefreshRows();\n            });\n            window.addEventListener('focus', pollFeedStructureThenRefreshRows);\n            window.addEventListener('pageshow', function(ev) {\n                if (ev.persisted) pollFeedStructureThenRefreshRows();\n            });\n\n            root.addEventListener('click', function(e) {\n                var wrap = e.target.closest('[data-cbran-itinerary-feed-wrap]');\n                if (!wrap || !root.contains(wrap)) return;\n                var eventId = wrap.getAttribute('data-event-id');\n                var canEdit = wrap.getAttribute('data-can-edit') === '1';\n                var wrapAjax = wrap.getAttribute('data-ajax-url') || ajaxUrl;\n                var nonce = wrap.getAttribute('data-nonce');\n\n                var card = e.target.closest('.cbran-public-itinerary-card[data-expandable=\"1\"]');\n                if (card && wrap.contains(card) && !e.target.closest('.cbran-itinerary-start-btn, .cbran-itinerary-reset-btn, .cbran-itinerary-complete-btn')) {\n                    if (e.target.closest('.cbran-public-itinerary-card-body')) return;\n                    var row = card.querySelector('.cbran-itinerary-detail-row');\n                    var sectionId = row ? row.getAttribute('data-section-id') : '';\n                    var body = card.querySelector('.cbran-public-itinerary-card-body');\n                    var chevron = card.querySelector('.cbran-public-card-chevron');\n                    if (!body || !sectionId) return;\n                    var now = Date.now ? Date.now() : new Date().getTime();\n                    var tKey = eventId + ':' + sectionId;\n                    if (tKey === lastToggleKey && (now - lastToggleTime) < toggleDebounceMs) {\n                        e.preventDefault();\n                        e.stopPropagation();\n                        return;\n                    }\n                    lastToggleKey = tKey;\n                    lastToggleTime = now;\n                    var isHidden = body.style.display === 'none' || body.getAttribute('aria-hidden') === 'true';\n                    if (!expandedByEvent[eventId]) expandedByEvent[eventId] = {};\n                    if (isHidden) {\n                        body.style.display = 'block';\n                        body.setAttribute('aria-hidden', 'false');\n                        if (chevron) chevron.style.transform = 'rotate(180deg)';\n                        card.classList.add('cbran-expanded');\n                        expandedByEvent[eventId][sectionId] = true;\n                    } else {\n                        body.style.display = 'none';\n                        body.setAttribute('aria-hidden', 'true');\n                        if (chevron) chevron.style.transform = 'rotate(0deg)';\n                        card.classList.remove('cbran-expanded');\n                        delete expandedByEvent[eventId][sectionId];\n                    }\n                    return;\n                }\n\n                if (!nonce) return;\n\n                var startBtn = e.target.closest('.cbran-itinerary-start-btn');\n                if (startBtn && wrap.contains(startBtn)) {\n                    e.preventDefault();\n                    if (!canEdit) return;\n                    var rowS = startBtn.closest('.cbran-itinerary-detail-row');\n                    var sidS = rowS ? rowS.getAttribute('data-section-id') : '';\n                    var evIdS = rowS ? rowS.getAttribute('data-event-id') : '';\n                    if (!sidS || !evIdS) return;\n                    var runStart = function() {\n                    startBtn.disabled = true;\n                    startBtn.setAttribute('aria-busy', 'true');\n                    var fd = new FormData();\n                    fd.append('action', 'cbran_set_itinerary_section_in_progress');\n                    fd.append('nonce', nonce);\n                    fd.append('event_id', evIdS);\n                    fd.append('section_id', sidS);\n                    var x = new XMLHttpRequest();\n                    x.open('POST', wrapAjax, true);\n                    x.withCredentials = true;\n                    x.onreadystatechange = function() {\n                        if (x.readyState === 4) {\n                            startBtn.disabled = false;\n                            startBtn.removeAttribute('aria-busy');\n                            if (x.status === 200) {\n                                try {\n                                    var r = JSON.parse(x.responseText);\n                                    if (r.success) refreshWrap(wrap);\n                                } catch (e2) {}\n                            }\n                        }\n                    };\n                    x.send(fd);\n                    };\n                    if (wrap.__cbranAutopilot && typeof wrap.__cbranAutopilot.tryFirstStart === 'function') {\n                        wrap.__cbranAutopilot.tryFirstStart(startBtn, rowS, runStart);\n                    } else {\n                        runStart();\n                    }\n                    return;\n                }\n\n                var completeBtn = e.target.closest('.cbran-itinerary-complete-btn');\n                if (completeBtn && wrap.contains(completeBtn)) {\n                    e.preventDefault();\n                    if (!canEdit) return;\n                    var rowC = completeBtn.closest('.cbran-itinerary-detail-row');\n                    var sidC = rowC ? rowC.getAttribute('data-section-id') : '';\n                    var evIdC = rowC ? rowC.getAttribute('data-event-id') : '';\n                    if (!sidC || !evIdC) return;\n                    completeBtn.disabled = true;\n                    completeBtn.setAttribute('aria-busy', 'true');\n                    var fd2 = new FormData();\n                    fd2.append('action', 'cbran_toggle_itinerary_section');\n                    fd2.append('nonce', nonce);\n                    fd2.append('event_id', evIdC);\n                    fd2.append('section_id', sidC);\n                    var x2 = new XMLHttpRequest();\n                    x2.open('POST', wrapAjax, true);\n                    x2.withCredentials = true;\n                    x2.onreadystatechange = function() {\n                        if (x2.readyState === 4) {\n                            completeBtn.disabled = false;\n                            completeBtn.removeAttribute('aria-busy');\n                            if (x2.status === 200) {\n                                try {\n                                    var r2 = JSON.parse(x2.responseText);\n                                    if (r2.success) refreshWrap(wrap);\n                                } catch (e3) {}\n                            }\n                        }\n                    };\n                    x2.send(fd2);\n                    return;\n                }\n\n                var resetBtn = e.target.closest('.cbran-itinerary-reset-btn');\n                if (resetBtn && wrap.contains(resetBtn)) {\n                    e.preventDefault();\n                    if (!canEdit) return;\n                    var rowR = resetBtn.closest('.cbran-itinerary-detail-row');\n                    var sidR = rowR ? rowR.getAttribute('data-section-id') : '';\n                    var evIdR = rowR ? rowR.getAttribute('data-event-id') : '';\n                    if (!sidR || !evIdR || !overlayId) return;\n                    pendingReset.sectionId = sidR;\n                    pendingReset.eventId = evIdR;\n                    pendingReset.wrap = wrap;\n                    var ov = document.getElementById(overlayId);\n                    if (ov) {\n                        if (ov.parentNode !== document.body) document.body.appendChild(ov);\n                        ov.style.display = 'flex';\n                        ov.setAttribute('aria-hidden', 'false');\n                        document.body.classList.add('cbran-public-overlay-open');\n                    }\n                }\n            });\n\n            var resetCancelBtn = overlayCancelId ? document.getElementById(overlayCancelId) : null;\n            var resetConfirmBtn = overlayConfirmId ? document.getElementById(overlayConfirmId) : null;\n            if (resetCancelBtn) resetCancelBtn.addEventListener('click', function() {\n                var ov = overlayId ? document.getElementById(overlayId) : null;\n                if (ov) { ov.style.display = 'none'; ov.setAttribute('aria-hidden', 'true'); }\n                document.body.classList.remove('cbran-public-overlay-open');\n            });\n            if (resetConfirmBtn) resetConfirmBtn.addEventListener('click', function() {\n                if (!pendingReset.sectionId || !pendingReset.eventId || !pendingReset.wrap) return;\n                var w = pendingReset.wrap;\n                var n = w.getAttribute('data-nonce');\n                var wa = w.getAttribute('data-ajax-url') || ajaxUrl;\n                var ov = overlayId ? document.getElementById(overlayId) : null;\n                if (!n) return;\n                resetConfirmBtn.disabled = true;\n                var fd3 = new FormData();\n                fd3.append('action', 'cbran_reset_itinerary_section');\n                fd3.append('nonce', n);\n                fd3.append('event_id', pendingReset.eventId);\n                fd3.append('section_id', pendingReset.sectionId);\n                var x3 = new XMLHttpRequest();\n                x3.open('POST', wa, true);\n                x3.withCredentials = true;\n                x3.onreadystatechange = function() {\n                    if (x3.readyState === 4) {\n                        resetConfirmBtn.disabled = false;\n                        if (ov) { ov.style.display = 'none'; ov.setAttribute('aria-hidden', 'true'); }\n                        document.body.classList.remove('cbran-public-overlay-open');\n                        if (x3.status === 200) {\n                            try {\n                                var r3 = JSON.parse(x3.responseText);\n                                if (r3.success && pendingReset.wrap) refreshWrap(pendingReset.wrap);\n                            } catch (e4) {}\n                        }\n                    }\n                };\n                x3.send(fd3);\n            });\n        })();\n        <\/script>\n        [\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>[vc_row][vc_column][vc_column_text css=\u00bb\u00bb woodmart_inline=\u00bbno\u00bb text_larger=\u00bbno\u00bb][\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-10846","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.sheelersda.com\/m\/wp-json\/wp\/v2\/pages\/10846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sheelersda.com\/m\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.sheelersda.com\/m\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.sheelersda.com\/m\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sheelersda.com\/m\/wp-json\/wp\/v2\/comments?post=10846"}],"version-history":[{"count":2,"href":"https:\/\/www.sheelersda.com\/m\/wp-json\/wp\/v2\/pages\/10846\/revisions"}],"predecessor-version":[{"id":10852,"href":"https:\/\/www.sheelersda.com\/m\/wp-json\/wp\/v2\/pages\/10846\/revisions\/10852"}],"wp:attachment":[{"href":"https:\/\/www.sheelersda.com\/m\/wp-json\/wp\/v2\/media?parent=10846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}