{"css": "/*\n  Coast Paid Activities - v2 stylesheet.\n\n  This file is the source of truth for the widget's CSS. It is NOT pasted\n  into Cornerstone - it's published (base64-encoded) to its own unlisted\n  WordPress data page via coast_paid_activities_v2_publish.py, and fetched/\n  injected by the tiny stub (coast-paid-activities-v2-stub.html) that IS\n  pasted into Cornerstone. Edit this file, then re-run the publish script -\n  no Cornerstone save required, so the recurring [cs_content_seo] leak bug\n  (see projects/camps/the-coast/ops/coast-paid-activities-website.md) never\n  gets triggered by routine widget updates again.\n\n  Identical to the v1 styles in coast-paid-activities.html as of 2026-07-14 -\n  this is a lift-and-shift, not a redesign.\n*/\n#cpa-app {\n  background: #2fb9ac;\n  padding: 28px 16px;\n  font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif;\n  color: #1a1a1a;\n  box-sizing: border-box;\n}\n#cpa-app * { box-sizing: border-box; }\n\n#cpa-card {\n  max-width: 480px;\n  margin: 0 auto;\n  background: #fff;\n  border-radius: 10px;\n  box-shadow: 0 2px 16px rgba(0, 0, 0, 0.12);\n  padding: 24px 20px;\n}\n\n#cpa-title {\n  margin: 0;\n  font-size: 26px;\n  font-weight: 700;\n  color: #1a1a1a;\n  text-align: center;\n}\n\n#cpa-updated {\n  text-align: center;\n  color: #767676;\n  font-size: 12px;\n  margin: 4px 0 20px 0;\n}\n\n#cpa-status {\n  display: none;\n  background: #fff8e1;\n  border: 1px solid #f0d878;\n  border-radius: 6px;\n  padding: 10px 12px;\n  margin-bottom: 12px;\n  font-size: 14px;\n}\n\n.cpa-tabs {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 12px;\n}\n.cpa-tab {\n  flex: 1;\n  padding: 12px 8px;\n  font-size: 15px;\n  font-weight: 600;\n  border: 1px solid #ccc;\n  background: #f5f5f5;\n  border-radius: 8px;\n  cursor: pointer;\n  min-height: 44px;\n}\n.cpa-tab.active {\n  background: #2fb9ac;\n  color: #fff;\n  border-color: #2fb9ac;\n}\n\n#cpa-search {\n  width: 100%;\n  padding: 12px;\n  font-size: 16px; /* 16px+ prevents iOS auto-zoom on focus */\n  border: 1px solid #ccc;\n  border-radius: 8px;\n  margin-bottom: 12px;\n}\n\n#cpa-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.cpa-list-row {\n  display: flex;\n  align-items: center;\n  border-bottom: 1px solid #eee;\n}\n.cpa-star {\n  flex: 0 0 auto;\n  width: 40px;\n  height: 48px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: none;\n  border: none;\n  color: #ccc;\n  cursor: pointer;\n  padding: 0;\n}\n.cpa-star.is-favorited { color: #2fb9ac; }\n.cpa-list-item {\n  display: block;\n  flex: 1 1 auto;\n  width: 100%;\n  text-align: left;\n  padding: 14px 12px 14px 4px;\n  font-size: 16px;\n  background: #fff;\n  border: none;\n  min-height: 48px;\n  cursor: pointer;\n}\n.cpa-list-item:active { background: #f0f0f0; }\n.cpa-section-label {\n  padding: 12px 12px 4px 12px;\n  font-size: 12px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #888;\n}\n.cpa-empty { padding: 14px 12px; color: #888; font-size: 14px; }\n\n#cpa-coming-soon {\n  text-align: center;\n  padding: 32px 12px;\n  color: #444;\n}\n#cpa-coming-soon .cpa-coming-soon-title {\n  font-size: 18px;\n  font-weight: 700;\n  margin-bottom: 8px;\n}\n#cpa-coming-soon .cpa-coming-soon-body {\n  font-size: 14px;\n  color: #767676;\n}\n\n#cpa-detail { padding-top: 4px; }\n#cpa-back {\n  background: none;\n  border: none;\n  color: #004f68;\n  font-size: 16px;\n  font-weight: 600;\n  padding: 8px 0;\n  margin-bottom: 8px;\n  cursor: pointer;\n  min-height: 44px;\n}\n#cpa-detail-title {\n  font-size: 20px;\n  margin: 0 0 12px 0;\n}\n.cpa-day-card {\n  border: 1px solid #e5e5e5;\n  border-radius: 8px;\n  margin-bottom: 10px;\n  overflow: hidden;\n}\n.cpa-day-header {\n  display: flex;\n  align-items: center;\n  width: 100%;\n  gap: 8px;\n  padding: 14px 12px;\n  background: #f7f7f7;\n  border: none;\n  cursor: pointer;\n  min-height: 48px;\n  text-align: left;\n}\n.cpa-day-header:active { background: #eee; }\n.cpa-day-name {\n  font-size: 14px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #1a1a1a;\n  flex: 1 1 auto;\n}\n.cpa-day-header.is-today .cpa-day-name { color: #004f68; }\n.cpa-day-header.is-today .cpa-day-name::after {\n  content: \"Today\";\n  margin-left: 8px;\n  font-size: 10px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.03em;\n  color: #fff;\n  background: #2fb9ac;\n  padding: 2px 6px;\n  border-radius: 999px;\n  vertical-align: middle;\n}\n.cpa-day-count {\n  font-size: 12px;\n  color: #888;\n  flex: 0 0 auto;\n}\n.cpa-day-chevron {\n  flex: 0 0 auto;\n  display: flex;\n  color: #666;\n  transition: transform 0.15s ease;\n}\n.cpa-day-header[aria-expanded=\"true\"] .cpa-day-chevron { transform: rotate(180deg); }\n.cpa-day-body[hidden] { display: none; }\n.cpa-entry-list {\n  list-style: none;\n  margin: 0;\n  padding: 0 4px;\n}\n.cpa-entry-list li {\n  display: flex;\n  align-items: center;\n  padding: 10px 4px;\n  border-bottom: 1px solid #f0f0f0;\n  font-size: 15px;\n}\n.cpa-time {\n  flex: 0 0 52px;\n  text-align: center;\n  font-weight: 700;\n  color: #004f68;\n}\n.cpa-activity {\n  flex: 0 0 92px;\n  text-align: center;\n  font-weight: 600;\n  padding: 0 4px;\n}\n.cpa-name {\n  flex: 1 1 auto;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  text-align: center;\n  color: #555;\n  padding: 0 4px;\n}\n.cpa-name-extra {\n  font-size: 12px;\n  color: #888;\n  margin-top: 2px;\n}\n\n.cpa-toggle-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 12px;\n  font-size: 14px;\n  color: #444;\n  cursor: pointer;\n}\n.cpa-toggle-row input[type=\"checkbox\"] {\n  width: 18px;\n  height: 18px;\n  flex: 0 0 auto;\n  accent-color: #2fb9ac;\n  cursor: pointer;\n}\n\n.cpa-detail-header-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  margin-bottom: 8px;\n}\n.cpa-detail-header-row #cpa-back {\n  margin-bottom: 0;\n}\n.cpa-detail-header-row .cpa-toggle-row {\n  margin-bottom: 0;\n}\n", "js": "/*\n  Coast Paid Activities - v2 application logic.\n\n  Source of truth lives here, NOT in Cornerstone. Published (base64-encoded)\n  to its own unlisted WordPress data page via coast_paid_activities_v2_publish.py,\n  and fetched/injected at runtime by the tiny stub\n  (coast-paid-activities-v2-stub.html) that's the only thing actually pasted\n  into Cornerstone. Edit this file + re-run the publish script to ship\n  changes - no Cornerstone save required, so the recurring [cs_content_seo]\n  leak bug (see the ops doc) never gets triggered by routine widget updates.\n\n  Builds its own DOM into #cpa-root (provided by the stub) instead of\n  expecting static markup to already exist on the page - this is what lets\n  the stub stay permanent even as the widget's structure evolves. Logic is\n  otherwise a straight port of the v1 widget (coast-paid-activities.html) as\n  of 2026-07-14 - this is a lift-and-shift, not a redesign.\n*/\n(function () {\n  // ---- Easy-to-edit config ----------------------------------------------\n  // Points at the LIVE schedule-data page - a read-only public fetch, same\n  // one the v1 widget already uses safely. No write access, so reusing it\n  // here (even while v2 itself is still in a sandbox test page) is safe.\n  var DATA_URL = \"https://camps.wol.org/wp-json/wp/v2/pages/10032\";\n  var REFRESH_MS = 10 * 60 * 1000; // 10 minutes\n  var DAY_ORDER = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\"];\n  var STORAGE_KEY = \"cpa_last_good_data\";\n  var FAVORITES_KEY = \"cpa_favorites\";\n  var SHOW_EXTRA_KEY = \"cpa_show_extra\";\n  // -------------------------------------------------------------------------\n\n  var STAR_FILLED = '<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M12 2l2.9 6.9 7.1.6-5.4 4.7 1.6 7.1L12 17.3 5.8 21.3l1.6-7.1L2 9.5l7.1-.6z\"/></svg>';\n  var STAR_OUTLINE = '<svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M12 2l2.9 6.9 7.1.6-5.4 4.7 1.6 7.1L12 17.3 5.8 21.3l1.6-7.1L2 9.5l7.1-.6z\"/></svg>';\n  var CHEVRON_ICON = '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"/></svg>';\n  var WEEKDAY_NAMES = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n\n  var state = { data: null, mode: \"cabins\", search: \"\", showExtra: getShowExtra(), currentName: null };\n\n  // ---- Build the widget's DOM into #cpa-root (mount point from the stub) --\n  function buildSkeleton(root) {\n    root.innerHTML =\n      '<div id=\"cpa-app\">' +\n        '<div id=\"cpa-card\">' +\n          '<h1 id=\"cpa-title\">Coast Paid Activities</h1>' +\n          '<div id=\"cpa-updated\"></div>' +\n          '<div id=\"cpa-status\"></div>' +\n          '<div id=\"cpa-coming-soon\" hidden>' +\n            '<div class=\"cpa-coming-soon-title\">Coming Soon</div>' +\n            '<div class=\"cpa-coming-soon-body\">The paid activity schedule isn&#39;t posted yet. Check back shortly.</div>' +\n          '</div>' +\n          '<div id=\"cpa-picker\">' +\n            '<div class=\"cpa-tabs\">' +\n              '<button type=\"button\" data-mode=\"cabins\" class=\"cpa-tab active\">By Cabin</button>' +\n              '<button type=\"button\" data-mode=\"groups\" class=\"cpa-tab\">By Group</button>' +\n            '</div>' +\n            '<label class=\"cpa-toggle-row\">' +\n              '<input type=\"checkbox\" class=\"cpa-extra-toggle\">' +\n              '<span class=\"cpa-extra-toggle-label\"></span>' +\n            '</label>' +\n            '<input type=\"search\" id=\"cpa-search\" placeholder=\"Search...\">' +\n            '<ul id=\"cpa-list\"></ul>' +\n          '</div>' +\n          '<div id=\"cpa-detail\" hidden>' +\n            '<div class=\"cpa-detail-header-row\">' +\n              '<button type=\"button\" id=\"cpa-back\">&larr; Back</button>' +\n              '<label class=\"cpa-toggle-row\">' +\n                '<input type=\"checkbox\" class=\"cpa-extra-toggle\">' +\n                '<span class=\"cpa-extra-toggle-label\"></span>' +\n              '</label>' +\n            '</div>' +\n            '<h2 id=\"cpa-detail-title\"></h2>' +\n            '<div id=\"cpa-detail-content\"></div>' +\n          '</div>' +\n        '</div>' +\n      '</div>';\n  }\n\n  // ---- \"Show church/cabin\" toggle (localStorage, one global setting) -----\n  function getShowExtra() {\n    return localStorage.getItem(SHOW_EXTRA_KEY) === \"1\";\n  }\n\n  function setShowExtra(value) {\n    localStorage.setItem(SHOW_EXTRA_KEY, value ? \"1\" : \"0\");\n    state.showExtra = value;\n    syncExtraToggleUI();\n    if (!document.getElementById(\"cpa-detail\").hidden && state.currentName) {\n      showDetail(state.currentName);\n    }\n  }\n\n  function extraLabelText() {\n    return state.mode === \"cabins\" ? \"Show group name\" : \"Show cabin\";\n  }\n\n  function syncExtraToggleUI() {\n    Array.prototype.forEach.call(document.querySelectorAll(\".cpa-extra-toggle\"), function (cb) {\n      cb.checked = state.showExtra;\n    });\n    Array.prototype.forEach.call(document.querySelectorAll(\".cpa-extra-toggle-label\"), function (label) {\n      label.textContent = extraLabelText();\n    });\n  }\n\n  // ---- Favorites (localStorage, per-browser/per-device, not synced) ------\n  function getFavorites() {\n    try {\n      var parsed = JSON.parse(localStorage.getItem(FAVORITES_KEY) || \"{}\");\n      if (!Array.isArray(parsed.cabins)) parsed.cabins = [];\n      if (!Array.isArray(parsed.groups)) parsed.groups = [];\n      return parsed;\n    } catch (e) {\n      return { cabins: [], groups: [] };\n    }\n  }\n\n  function isFavorited(mode, name) {\n    return getFavorites()[mode].indexOf(name) !== -1;\n  }\n\n  function toggleFavorite(mode, name) {\n    var favs = getFavorites();\n    var idx = favs[mode].indexOf(name);\n    if (idx === -1) favs[mode].push(name);\n    else favs[mode].splice(idx, 1);\n    localStorage.setItem(FAVORITES_KEY, JSON.stringify(favs));\n  }\n\n  function decodePayload(body) {\n    var raw = (body.content && body.content.rendered) || \"\";\n    var stripped = raw.replace(/<[^>]+>/g, \"\").trim();\n    var ta = document.createElement(\"textarea\");\n    ta.innerHTML = stripped;\n    var b64 = ta.value.trim();\n    var binary = atob(b64);\n    var bytes = new Uint8Array(binary.length);\n    for (var i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n    var jsonText = new TextDecoder(\"utf-8\").decode(bytes);\n    return JSON.parse(jsonText);\n  }\n\n  function fetchData() {\n    var url = DATA_URL + \"?_=\" + Date.now();\n    return fetch(url)\n      .then(function (r) {\n        if (!r.ok) throw new Error(\"HTTP \" + r.status);\n        return r.json();\n      })\n      .then(decodePayload);\n  }\n\n  function setStatus(msg) {\n    var el = document.getElementById(\"cpa-status\");\n    el.textContent = msg;\n    el.style.display = msg ? \"block\" : \"none\";\n  }\n\n  function formatUpdated(iso) {\n    if (!iso) return \"\";\n    var d = new Date(iso);\n    return \"Last updated \" + d.toLocaleString(undefined, {\n      month: \"short\", day: \"numeric\", hour: \"numeric\", minute: \"2-digit\"\n    });\n  }\n\n  function loadData(isInitial) {\n    if (isInitial) {\n      var cached = localStorage.getItem(STORAGE_KEY);\n      if (cached) {\n        try {\n          state.data = JSON.parse(cached);\n          renderComingSoonOrList();\n        } catch (e) { /* ignore corrupt cache */ }\n      }\n    }\n\n    fetchData()\n      .then(function (data) {\n        state.data = data;\n        localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n        setStatus(\"\");\n        renderComingSoonOrList();\n      })\n      .catch(function (err) {\n        console.error(\"Coast Paid Activities: fetch failed\", err);\n        if (state.data) {\n          setStatus(\"Couldn't refresh just now - showing the last saved schedule.\");\n        } else {\n          setStatus(\"Unable to load the schedule right now. Please try again shortly.\");\n        }\n      });\n  }\n\n  function appendSectionLabel(listEl, text) {\n    var li = document.createElement(\"li\");\n    li.className = \"cpa-section-label\";\n    li.textContent = text;\n    listEl.appendChild(li);\n  }\n\n  function appendListRow(listEl, name) {\n    var li = document.createElement(\"li\");\n    li.className = \"cpa-list-row\";\n\n    var favorited = isFavorited(state.mode, name);\n    var starBtn = document.createElement(\"button\");\n    starBtn.type = \"button\";\n    starBtn.className = \"cpa-star\" + (favorited ? \" is-favorited\" : \"\");\n    starBtn.innerHTML = favorited ? STAR_FILLED : STAR_OUTLINE;\n    starBtn.setAttribute(\"aria-label\", favorited ? \"Remove \" + name + \" from favorites\" : \"Add \" + name + \" to favorites\");\n    starBtn.addEventListener(\"click\", function (e) {\n      e.stopPropagation();\n      toggleFavorite(state.mode, name);\n      renderList();\n    });\n\n    var nameBtn = document.createElement(\"button\");\n    nameBtn.type = \"button\";\n    nameBtn.className = \"cpa-list-item\";\n    nameBtn.textContent = name;\n    nameBtn.addEventListener(\"click\", function () { showDetail(name); });\n\n    li.appendChild(starBtn);\n    li.appendChild(nameBtn);\n    listEl.appendChild(li);\n  }\n\n  function renderComingSoonOrList() {\n    var comingSoonEl = document.getElementById(\"cpa-coming-soon\");\n    var pickerEl = document.getElementById(\"cpa-picker\");\n    var detailEl = document.getElementById(\"cpa-detail\");\n    var isEmpty = !!(state.data && state.data.record_count === 0);\n\n    comingSoonEl.hidden = !isEmpty;\n    pickerEl.hidden = isEmpty;\n    if (isEmpty) detailEl.hidden = true;\n\n    document.getElementById(\"cpa-updated\").textContent = formatUpdated(state.data && state.data.generated_at);\n\n    if (!isEmpty) renderList();\n  }\n\n  function renderList() {\n    var listEl = document.getElementById(\"cpa-list\");\n    listEl.innerHTML = \"\";\n    if (!state.data) return;\n\n    var source = state.mode === \"cabins\" ? state.data.cabins : state.data.groups;\n    var names = Object.keys(source).sort();\n    var q = state.search.trim().toLowerCase();\n    if (q) names = names.filter(function (n) { return n.toLowerCase().indexOf(q) !== -1; });\n\n    if (!names.length) {\n      var empty = document.createElement(\"li\");\n      empty.className = \"cpa-empty\";\n      empty.textContent = \"No matches.\";\n      listEl.appendChild(empty);\n    } else {\n      var favSet = getFavorites()[state.mode];\n      var favoriteNames = names.filter(function (n) { return favSet.indexOf(n) !== -1; });\n      var otherNames = names.filter(function (n) { return favSet.indexOf(n) === -1; });\n\n      if (favoriteNames.length) {\n        appendSectionLabel(listEl, \"Favorites\");\n        favoriteNames.forEach(function (name) { appendListRow(listEl, name); });\n        if (otherNames.length) appendSectionLabel(listEl, \"All\");\n      }\n      otherNames.forEach(function (name) { appendListRow(listEl, name); });\n    }\n\n    document.getElementById(\"cpa-updated\").textContent = formatUpdated(state.data.generated_at);\n  }\n\n  function showDetail(name) {\n    state.currentName = name;\n    var source = state.mode === \"cabins\" ? state.data.cabins : state.data.groups;\n    var entries = source[name] || [];\n\n    document.getElementById(\"cpa-detail-title\").textContent = name;\n    syncExtraToggleUI();\n    var contentEl = document.getElementById(\"cpa-detail-content\");\n    contentEl.innerHTML = \"\";\n\n    var byDay = {};\n    entries.forEach(function (e) {\n      (byDay[e.day] = byDay[e.day] || []).push(e);\n    });\n\n    var todayName = WEEKDAY_NAMES[new Date().getDay()];\n    var defaultExpandDay = byDay[todayName] ? todayName : null;\n    if (!defaultExpandDay) {\n      defaultExpandDay = DAY_ORDER.filter(function (d) { return byDay[d]; })[0] || null;\n    }\n\n    var anyRendered = false;\n    DAY_ORDER.forEach(function (day) {\n      if (!byDay[day]) return;\n      anyRendered = true;\n      var isExpanded = day === defaultExpandDay;\n\n      var card = document.createElement(\"div\");\n      card.className = \"cpa-day-card\";\n\n      var header = document.createElement(\"button\");\n      header.type = \"button\";\n      header.className = \"cpa-day-header\" + (day === todayName ? \" is-today\" : \"\");\n      header.setAttribute(\"aria-expanded\", isExpanded ? \"true\" : \"false\");\n\n      var nameSpan = document.createElement(\"span\");\n      nameSpan.className = \"cpa-day-name\";\n      nameSpan.textContent = day;\n\n      var countSpan = document.createElement(\"span\");\n      countSpan.className = \"cpa-day-count\";\n      countSpan.textContent = byDay[day].length + (byDay[day].length === 1 ? \" activity\" : \" activities\");\n\n      var chevronSpan = document.createElement(\"span\");\n      chevronSpan.className = \"cpa-day-chevron\";\n      chevronSpan.innerHTML = CHEVRON_ICON;\n\n      header.appendChild(nameSpan);\n      header.appendChild(countSpan);\n      header.appendChild(chevronSpan);\n\n      var ul = document.createElement(\"ul\");\n      ul.className = \"cpa-entry-list cpa-day-body\";\n      ul.hidden = !isExpanded;\n\n      byDay[day].forEach(function (e) {\n        var extra = state.mode === \"cabins\" ? e.group_name : e.housing;\n        var li = document.createElement(\"li\");\n\n        var timeSpan = document.createElement(\"span\");\n        timeSpan.className = \"cpa-time\";\n        timeSpan.textContent = e.time_slot || \"\";\n\n        var activitySpan = document.createElement(\"span\");\n        activitySpan.className = \"cpa-activity\";\n        activitySpan.textContent = e.activity || \"\";\n\n        var nameSpan2 = document.createElement(\"span\");\n        nameSpan2.className = \"cpa-name\";\n        var nameLine = document.createElement(\"span\");\n        nameLine.textContent = e.name;\n        nameSpan2.appendChild(nameLine);\n        if (extra && state.showExtra) {\n          var extraLine = document.createElement(\"span\");\n          extraLine.className = \"cpa-name-extra\";\n          extraLine.textContent = extra;\n          nameSpan2.appendChild(extraLine);\n        }\n\n        li.appendChild(timeSpan);\n        li.appendChild(activitySpan);\n        li.appendChild(nameSpan2);\n        ul.appendChild(li);\n      });\n\n      header.addEventListener(\"click\", function () {\n        var expanded = header.getAttribute(\"aria-expanded\") === \"true\";\n        header.setAttribute(\"aria-expanded\", expanded ? \"false\" : \"true\");\n        ul.hidden = expanded;\n      });\n\n      card.appendChild(header);\n      card.appendChild(ul);\n      contentEl.appendChild(card);\n    });\n\n    if (!anyRendered) {\n      var none = document.createElement(\"p\");\n      none.textContent = \"No activities found for this \" + (state.mode === \"cabins\" ? \"cabin\" : \"group\") + \".\";\n      contentEl.appendChild(none);\n    }\n\n    document.getElementById(\"cpa-picker\").hidden = true;\n    document.getElementById(\"cpa-detail\").hidden = false;\n  }\n\n  function wireControls() {\n    Array.prototype.forEach.call(document.querySelectorAll(\".cpa-tab\"), function (tab) {\n      tab.addEventListener(\"click\", function () {\n        Array.prototype.forEach.call(document.querySelectorAll(\".cpa-tab\"), function (t) {\n          t.classList.remove(\"active\");\n        });\n        tab.classList.add(\"active\");\n        state.mode = tab.getAttribute(\"data-mode\");\n        state.search = \"\";\n        document.getElementById(\"cpa-search\").value = \"\";\n        syncExtraToggleUI();\n        renderList();\n      });\n    });\n\n    document.getElementById(\"cpa-search\").addEventListener(\"input\", function (e) {\n      state.search = e.target.value;\n      renderList();\n    });\n\n    document.getElementById(\"cpa-back\").addEventListener(\"click\", function () {\n      document.getElementById(\"cpa-detail\").hidden = true;\n      document.getElementById(\"cpa-picker\").hidden = false;\n    });\n\n    Array.prototype.forEach.call(document.querySelectorAll(\".cpa-extra-toggle\"), function (cb) {\n      cb.addEventListener(\"change\", function (e) { setShowExtra(e.target.checked); });\n    });\n  }\n\n  // ---- Init ---------------------------------------------------------------\n  var root = document.getElementById(\"cpa-root\");\n  if (!root) {\n    console.error(\"Coast Paid Activities v2: #cpa-root mount point not found - stub not installed correctly.\");\n    return;\n  }\n  buildSkeleton(root);\n  wireControls();\n  syncExtraToggleUI();\n  loadData(true);\n  setInterval(function () { loadData(false); }, REFRESH_MS);\n})();\n"}