{"title":"👻 Ghosties Week Collection","description":"","products":[{"product_id":"sculpt-and-bake-spooky-cutie-halloween-pet","title":"Sculpt \u0026 Bake: Spooky Cutie Halloween Pet Kit","description":"\u003cp\u003eCreate these amazing Halloween-inspired cutie baby pets! Made from awesome Ditto oven-bake clay, sculpt your own spooky cutie cat, mouse, owl, bat, snake or dog! Collect all 6!\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat's In The Kit?\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e4 blocks of high-quality Ditto polymer clay (50 grams each)\u003c\/li\u003e\n\u003cli\u003eMakes 1 pet.\u003c\/li\u003e\n\u003cli\u003eArmature wire\u003c\/li\u003e\n\u003cli\u003eA step by step guide. Our simple instructions are created with care, so don’t worry, you or your kids will have no problem-o following along to make your oven-bake clay creation!\u003c\/li\u003e\n\u003cli\u003eContent and materials are not for commercial, school or paid program use without authorization.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eFor baking instructions and to learn more about Ditto \u003ca href=\"\/pages\/about-ditto\"\u003eclick here.\u003c\/a\u003e\u003cbr\u003e\u003c\/p\u003e","brand":"DITTO","offers":[{"title":"Cat","offer_id":40229939806298,"sku":null,"price":16.99,"currency_code":"CAD","in_stock":true},{"title":"Mouse","offer_id":40229939839066,"sku":null,"price":16.99,"currency_code":"CAD","in_stock":true},{"title":"Owl","offer_id":40229939871834,"sku":null,"price":16.99,"currency_code":"CAD","in_stock":true},{"title":"Bat","offer_id":40229939904602,"sku":null,"price":16.99,"currency_code":"CAD","in_stock":true},{"title":"Dog","offer_id":40229939937370,"sku":null,"price":16.99,"currency_code":"CAD","in_stock":true},{"title":"Snake","offer_id":40229939970138,"sku":"","price":16.99,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/products\/cutie_baby_halloween_pets_03_800x800_00074c15-501d-4baf-970c-784a49918a08.jpg?v=1675464761"},{"product_id":"4pm-tue-oct-6th-halloween-mini-session-4-week-session","title":"4pm Tue Oct 6th | Halloween Mini Session | 4 Week Session","description":"\u003cp\u003e\u003cstrong\u003eAges 5-10\u003c\/strong\u003e\u003c\/p\u003e\n\u003cdiv class=\"relative w-full overflow-visible\"\u003e\n\u003csection class=\"text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [\u0026amp;:has([data-writing-block])\u0026gt;*]:pointer-events-auto [content-visibility:auto] supports-[content-visibility:auto]:[contain-intrinsic-size:auto_100lvh] R6Vx5W_threadScrollVars scroll-mb-[calc(var(--scroll-root-safe-area-inset-bottom,0px)+var(--thread-response-height))] scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\"\u003e\n\u003cdiv class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm\/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg\/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)\"\u003e\n\u003cdiv class=\"[--thread-content-max-width:40rem] @w-lg\/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\"\u003e\n\u003cdiv class=\"flex max-w-full flex-col gap-4 grow\"\u003e\n\u003cdiv dir=\"auto\" class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+\u0026amp;]:mt-1\" tabindex=\"0\"\u003e\n\u003cdiv class=\"flex w-full flex-col gap-1 empty:hidden\"\u003e\n\u003cdiv class=\"markdown prose dark:prose-invert wrap-break-word w-full light markdown-new-styling\"\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eThis 4-week mini session is packed with spooky fun and Halloween creativity! Each week, kids will create a frightfully fun project inspired by friendly ghosts, pumpkins, black cats, bats, and other Halloween favourites while exploring a variety of creative techniques and materials. It's the perfect mix of imagination, creativity, and just the right amount of spooky!\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/div\u003e","brand":"4CATS","offers":[{"title":"AB \/ CALGARY - INGLEWOOD","offer_id":43517276782682,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"AB \/ ST ALBERT","offer_id":43517276815450,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - GARDEN CITY","offer_id":43517276848218,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - STEVESTON","offer_id":43517276880986,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ SURREY - SOUTH","offer_id":43517276913754,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - KITSILANO","offer_id":43517276946522,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - MAIN STREET","offer_id":43517276979290,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - UBC","offer_id":43517277012058,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - COOK STREET VILLAGE","offer_id":43517277044826,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - ESQUIMALT","offer_id":43517277077594,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - OAK BAY","offer_id":43517277110362,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - UPTOWN","offer_id":43517277143130,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ BURLINGTON - SOUTH","offer_id":43517277175898,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ CAMBRIDGE - GALT","offer_id":43517277208666,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ERIN","offer_id":43517277241434,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - OTTAWA STREET","offer_id":43517277274202,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WATERDOWN","offer_id":43517277306970,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WEST HARBOUR","offer_id":43517277339738,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ KINGSTON - ARLINGTON PARK","offer_id":43517277372506,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - BYRON","offer_id":43517277405274,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - WORTLEY VILLAGE","offer_id":43517277438042,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ MISSISSAUGA - PORT CREDIT","offer_id":43517277470810,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - NORTH","offer_id":43517277503578,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - WEST","offer_id":43517277536346,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OTTAWA - THE GLEBE","offer_id":43517277569114,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ST CATHARINES","offer_id":43517277601882,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - AVENUE ROAD","offer_id":43517277634650,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - BABY POINT","offer_id":43517277667418,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - LEASIDE","offer_id":43517277700186,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - THE BEACHES","offer_id":43517277732954,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ WATERLOO - UPTOWN","offer_id":43517277765722,"sku":null,"price":125.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/halloween_mini_session_02_1080x1080_819ca7ae-8f05-47fb-affb-e2698af8a06c.jpg?v=1755101329"},{"product_id":"monday-lineup-ghosties-week-mon-sep-28th","title":"Monday Lineup | Ghosties Week | Mon Sep 28th","description":"","brand":"4Cats","offers":[{"title":"Default Title","offer_id":43669307588698,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/monday_lineup_ghosties_week_thumbnail.jpg?v=1784304821"},{"product_id":"ghosties-week-mini-make","title":"Ghosties Week Mini Make","description":"\u003cp\u003e✔ Pick a project \u0026amp; settle in\u003cbr\u003e✔ Easy, small demo, printed instructions at your table\u003cbr\u003e✔ Instructors nearby to answer questions\u003cbr\u003e✔ Good for friend hangs, dates \u0026amp; family outings\u003c\/p\u003e\n\u003ch3 data-start=\"156\" data-end=\"243\"\u003e\u003cstrong\u003eThis week is Ghosties Week 👻🎃👻🎃\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp data-start=\"156\" data-end=\"243\"\u003e\u003cspan style=\"font-family: -apple-system, BlinkMacSystemFont, 'San Francisco', 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif; font-size: 0.875rem;\"\u003e\u003cspan\u003eChoose between Ghost Calmies (make up to 2) or Cutie Mini Ghost Pals (make up to 2).\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cdiv id=\"mm-root\"\u003e\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/\/ ┌─────────────────────────────────────────────────┐\n  \/\/ │  EDIT THESE TWO LINES FOR EACH WEEK'S PAGE      │\n  const DATE_FROM = '2026-09-28'  \/\/ First day of the week\n  const DATE_TO   = '2026-10-04'  \/\/ Last day of the week\n  \/\/ └─────────────────────────────────────────────────┘\n\u003c\/script\u003e\n\n\u003cstyle\u003e\n  #mm-root {\n    font-family: 'Work Sans', sans-serif;\n    max-width: 720px;\n    margin: 0 auto;\n    padding: 8px 0 40px;\n    color: #1a1a1a;\n  }\n  .mm-step-label {\n    font-family: 'Work Sans', sans-serif;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: #999;\n    margin-bottom: 10px;\n  }\n  .mm-provinces {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-bottom: 28px;\n  }\n  .mm-prov-chip {\n    font-family: 'Work Sans', sans-serif;\n    font-size: 13px;\n    padding: 8px 20px;\n    border: 1.5px solid #ddd;\n    border-radius: 100px;\n    cursor: pointer;\n    background: #fff;\n    color: #444;\n    transition: all 0.15s ease;\n    white-space: nowrap;\n  }\n  .mm-prov-chip:hover {\n    border-color: #1a1a1a !important;\n    color: #1a1a1a !important;\n  }\n  .mm-prov-chip.selected {\n    background: #1a1a1a !important;\n    border-color: #1a1a1a !important;\n    color: #fff !important;\n    font-weight: 600 !important;\n  }\n  .mm-studio-wrap { margin-bottom: 28px; }\n  .mm-studio-select {\n    font-family: 'Work Sans', sans-serif;\n    font-size: 14px;\n    width: 100%;\n    max-width: 400px;\n    padding: 10px 14px;\n    border: 1.5px solid #ddd;\n    border-radius: 8px;\n    background: #fff;\n    color: #1a1a1a;\n    appearance: none;\n    -webkit-appearance: none;\n    background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23999' stroke-width='1.5' fill='none' stroke-linecap='round'\/%3E%3C\/svg%3E\");\n    background-repeat: no-repeat;\n    background-position: right 14px center;\n    cursor: pointer;\n    transition: border-color 0.15s;\n  }\n  .mm-studio-select:focus {\n    outline: none;\n    border-color: #1a1a1a;\n  }\n  .mm-dates {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-bottom: 28px;\n  }\n  .mm-date-chip {\n    font-family: 'Work Sans', sans-serif;\n    font-size: 13px;\n    padding: 8px 16px;\n    border: 1.5px solid #ddd;\n    border-radius: 100px;\n    cursor: pointer;\n    background: #fff;\n    color: #444;\n    transition: all 0.15s ease;\n    white-space: nowrap;\n  }\n  .mm-date-chip:hover {\n    border-color: #1a1a1a !important;\n    color: #1a1a1a !important;\n  }\n  .mm-date-chip.selected {\n    background: #1a1a1a !important;\n    border-color: #1a1a1a !important;\n    color: #fff !important;\n    font-weight: 600 !important;\n  }\n  .mm-slots {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n    gap: 12px;\n    margin-bottom: 12px;\n  }\n  .mm-slot {\n    font-family: 'Work Sans', sans-serif;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    padding: 16px 10px 14px;\n    border: 1.5px solid #e0e0e0;\n    border-radius: 10px;\n    background: #fff;\n    gap: 10px;\n  }\n  .mm-slot.sold-out { opacity: 0.5; }\n  .mm-slot-time {\n    font-size: 18px;\n    font-weight: 700;\n    color: #1a1a1a;\n  }\n  .mm-slot.sold-out .mm-slot-time { color: #bbb; }\n  .mm-slot-sold-label {\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: 0.06em;\n    text-transform: uppercase;\n    padding: 3px 10px;\n    border-radius: 100px;\n    background: #f0f0f0;\n    color: #aaa;\n  }\n  .mm-qty {\n    display: flex;\n    align-items: center;\n    border: 1.5px solid #ddd;\n    border-radius: 8px;\n    overflow: hidden;\n  }\n  .mm-qty-btn {\n    width: 34px;\n    height: 34px;\n    background: #f7f7f7;\n    border: none;\n    font-size: 18px;\n    cursor: pointer;\n    color: #444;\n    transition: background 0.1s;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n  }\n  .mm-qty-btn:hover { background: #eee; }\n  .mm-qty-btn:disabled { color: #ccc; cursor: default; }\n  .mm-qty-val {\n    width: 34px;\n    text-align: center;\n    font-size: 14px;\n    font-weight: 700;\n    color: #1a1a1a;\n    border-left: 1px solid #ddd;\n    border-right: 1px solid #ddd;\n    line-height: 34px;\n    flex-shrink: 0;\n  }\n  #mm-root .mm-register-btn {\n    font-family: 'Work Sans', sans-serif !important;\n    font-size: 12px !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.08em !important;\n    text-transform: uppercase !important;\n    padding: 8px 18px !important;\n    background: #1a1a1a !important;\n    color: #fff !important;\n    border: none !important;\n    border-radius: 6px !important;\n    cursor: pointer !important;\n    text-decoration: none !important;\n    transition: background 0.15s !important;\n    display: inline-block !important;\n    width: 100% !important;\n    text-align: center !important;\n    box-sizing: border-box !important;\n  }\n  #mm-root .mm-register-btn:hover { background: #333 !important; }\n  .mm-loading, .mm-empty, .mm-prompt {\n    font-family: 'Work Sans', sans-serif;\n    font-size: 14px;\n    color: #999;\n    padding: 20px 0;\n    text-align: center;\n  }\n  .mm-spinner {\n    display: inline-block;\n    width: 18px;\n    height: 18px;\n    border: 2px solid #eee;\n    border-top-color: #555;\n    border-radius: 50%;\n    animation: mm-spin 0.7s linear infinite;\n    vertical-align: middle;\n    margin-right: 8px;\n  }\n  @keyframes mm-spin { to { transform: rotate(360deg); } }\n  .mm-section { margin-bottom: 28px; }\n  .mm-divider {\n    border: none;\n    border-top: 1px solid #f0f0f0;\n    margin: 0 0 28px;\n  }\n  .mm-spaces-left {\n    font-family: 'Work Sans', sans-serif;\n    font-size: 11px;\n    font-weight: 600;\n    color: #c0392b;\n    letter-spacing: 0.04em;\n  }\n  .mm-slot.mm-preselected {\n    border-color: #c3090c !important;\n    box-shadow: 0 0 0 2px rgba(195,9,12,0.15) !important;\n  }\n\u003c\/style\u003e\n\n\u003cscript\u003e\n(function () {\n  const EDGE_URL = 'https:\/\/snxibhbhhchjthfmjtaj.supabase.co\/functions\/v1\/public-minimake'\n\n  const PROVINCES = [\n    { label: 'British Columbia', prefix: 'BC' },\n    { label: 'Alberta',          prefix: 'AB' },\n    { label: 'Ontario',          prefix: 'ON' },\n  ]\n\n  const root = document.getElementById('mm-root')\n\n  let allDates = []\n  let studioList = []\n  let selectedProvince = null\n  let selectedStudio = null\n  let selectedDate = null\n  let preselectTime = null\n  let scrolledToPreselect = false\n  const slotQty = {}\n\n  function formatTimeFromHHMM(t) {\n    var parts = t.split(':')\n    var h = parseInt(parts[0], 10), m = parseInt(parts[1], 10)\n    var ampm = h \u003e= 12 ? 'pm' : 'am'\n    var h12 = h % 12 || 12\n    return h12 + (m \u003e 0 ? ':' + (m \u003c 10 ? '0' + m : m) : '') + ampm\n  }\n\n  function applyUrlParams() {\n    try {\n      var search = window.parent.location.search || window.location.search\n      var params = new URLSearchParams(search)\n      var t = params.get('time')\n      if (t) preselectTime = t\n      var sid = params.get('studio')\n      var dt = params.get('date')\n      if (!sid) return\n      sid = sid.toUpperCase()\n      var match = studioList.some(function(s) { return s.studio_id === sid })\n      if (!match) return\n      selectedProvince = sid.indexOf('BC') === 0 ? 'BC' : sid.indexOf('AB') === 0 ? 'AB' : sid.indexOf('ON') === 0 ? 'ON' : null\n      selectedStudio = sid\n      if (dt) {\n        var avail = datesForStudio(sid)\n        if (avail.some(function(d) { return d.date === dt })) selectedDate = dt\n      }\n    } catch (e) {}\n  }\n\n  const fetchUrl = EDGE_URL + '?date_from=' + DATE_FROM + '\u0026date_to=' + DATE_TO\n\n  root.innerHTML = '\u003cdiv class=\"mm-loading\"\u003e\u003cspan class=\"mm-spinner\"\u003e\u003c\/span\u003eLoading available sessions\\u2026\u003c\/div\u003e'\n\n  fetch(fetchUrl)\n    .then(function(r) { return r.json() })\n    .then(function(data) {\n      allDates = data.dates || []\n      \/\/ Filter out past dates client-side\n      var todayStr = new Date().toLocaleDateString('en-CA', { timeZone: 'America\/Toronto' })\n      allDates = allDates.filter(function(d) { return d.date \u003e= todayStr })\n      if (!allDates.length) {\n        root.innerHTML = '\u003cdiv class=\"mm-empty\"\u003eNo Mini Make sessions are scheduled for this week. Check back soon!\u003c\/div\u003e'\n        return\n      }\n      var studioMap = {}\n      for (var i = 0; i \u003c allDates.length; i++) {\n        for (var j = 0; j \u003c allDates[i].studios.length; j++) {\n          var s = allDates[i].studios[j]\n          if (!studioMap[s.studio_id]) studioMap[s.studio_id] = s.studio_name\n        }\n      }\n      studioList = Object.keys(studioMap).map(function(id) {\n        return { studio_id: id, studio_name: studioMap[id] }\n      }).sort(function(a, b) { return a.studio_name.localeCompare(b.studio_name) })\n\n      var activeProvs = PROVINCES.filter(function(p) {\n        return studioList.some(function(s) { return s.studio_id.indexOf(p.prefix) === 0 })\n      })\n      if (activeProvs.length === 1) selectedProvince = activeProvs[0].prefix\n\n      applyUrlParams()\n\n      render()\n    })\n    .catch(function() {\n      root.innerHTML = '\u003cdiv class=\"mm-empty\"\u003eCouldn\\'t load sessions right now \\u2014 please refresh the page.\u003c\/div\u003e'\n    })\n\n  function render() {\n    root.innerHTML = ''\n    renderProvincePicker()\n\n    \/\/ Auto-select studio if only one exists for the selected province\n    if (selectedProvince \u0026\u0026 !selectedStudio) {\n      var provinceStudios = studioList.filter(function(s) {\n        return s.studio_id.indexOf(selectedProvince) === 0\n      })\n      if (provinceStudios.length === 1) {\n        selectedStudio = provinceStudios[0].studio_id\n      }\n    }\n\n    renderStudioPicker()\n\n    if (selectedStudio \u0026\u0026 datesForStudio(selectedStudio).length === 0) {\n      var noneMsg = document.createElement('div')\n      noneMsg.className = 'mm-empty'\n      noneMsg.textContent = 'No available Mini Make sessions for this studio right now \\u2014 please check another studio.'\n      root.appendChild(noneMsg)\n      return\n    }\n\n    \/\/ Auto-select date if only one is available for the selected studio\n    if (selectedStudio \u0026\u0026 !selectedDate) {\n      var availableDates = datesForStudio(selectedStudio)\n      if (availableDates.length === 1) {\n        selectedDate = availableDates[0].date\n      }\n    }\n\n    renderDatePicker()\n    renderSlots()\n  }\n\n  function activeProvinceCount() {\n    return PROVINCES.filter(function(p) {\n      return studioList.some(function(s) { return s.studio_id.indexOf(p.prefix) === 0 })\n    }).length\n  }\n\n  function hasAvailableSlot(studioObj) {\n    return studioObj.slots.some(function(slot) {\n      return !(slot.spaces_left !== null \u0026\u0026 slot.spaces_left === 0)\n    })\n  }\n\n  function datesForStudio(studioId) {\n    return allDates.filter(function(d) {\n      return d.studios.some(function(s) {\n        return s.studio_id === studioId \u0026\u0026 hasAvailableSlot(s)\n      })\n    }).map(function(d) { return { date: d.date, label: d.label } })\n  }\n\n  function makeHr() {\n    var hr = document.createElement('hr')\n    hr.className = 'mm-divider'\n    return hr\n  }\n\n  function renderProvincePicker() {\n    var activeProvs = PROVINCES.filter(function(p) {\n      return studioList.some(function(s) { return s.studio_id.indexOf(p.prefix) === 0 })\n    })\n    if (activeProvs.length \u003c= 1) return\n\n    var wrap = document.createElement('div')\n    wrap.className = 'mm-section'\n    var label = document.createElement('div')\n    label.className = 'mm-step-label'\n    label.textContent = 'Step 1 \\u2014 Choose your province'\n    wrap.appendChild(label)\n\n    var chips = document.createElement('div')\n    chips.className = 'mm-provinces'\n\n    activeProvs.forEach(function(p) {\n      var chip = document.createElement('button')\n      chip.className = 'mm-prov-chip' + (selectedProvince === p.prefix ? ' selected' : '')\n      chip.textContent = p.label\n      chip.addEventListener('click', function() {\n        selectedProvince = p.prefix\n        selectedStudio = null\n        selectedDate = null\n        render()\n      })\n      chips.appendChild(chip)\n    })\n\n    wrap.appendChild(chips)\n    root.appendChild(wrap)\n    root.appendChild(makeHr())\n  }\n\n  function renderStudioPicker() {\n    if (!selectedProvince) return\n    var provinceStudios = studioList.filter(function(s) {\n      return s.studio_id.indexOf(selectedProvince) === 0\n    })\n    if (!provinceStudios.length) return\n\n    var stepNum = activeProvinceCount() \u003e 1 ? 2 : 1\n    var wrap = document.createElement('div')\n    wrap.className = 'mm-section mm-studio-wrap'\n    var label = document.createElement('div')\n    label.className = 'mm-step-label'\n    label.textContent = 'Step ' + stepNum + ' \\u2014 Choose your studio'\n    wrap.appendChild(label)\n\n    var select = document.createElement('select')\n    select.className = 'mm-studio-select'\n\n    var placeholder = document.createElement('option')\n    placeholder.value = ''\n    placeholder.textContent = '\\u2014 Select a studio \\u2014'\n    placeholder.disabled = true\n    placeholder.selected = !selectedStudio\n    select.appendChild(placeholder)\n\n    provinceStudios.forEach(function(studio) {\n      var opt = document.createElement('option')\n      opt.value = studio.studio_id\n      opt.textContent = studio.studio_name\n      opt.selected = selectedStudio === studio.studio_id\n      select.appendChild(opt)\n    })\n\n    select.addEventListener('change', function() {\n      selectedStudio = select.value || null\n      selectedDate = null\n      var available = datesForStudio(selectedStudio)\n      if (available.length === 1) selectedDate = available[0].date\n      render()\n    })\n\n    wrap.appendChild(select)\n    root.appendChild(wrap)\n    root.appendChild(makeHr())\n  }\n\n  function renderDatePicker() {\n    if (!selectedStudio) return\n    var available = datesForStudio(selectedStudio)\n    if (!available.length || available.length === 1) return\n\n    var stepNum = activeProvinceCount() \u003e 1 ? 3 : 2\n    var wrap = document.createElement('div')\n    wrap.className = 'mm-section'\n    var label = document.createElement('div')\n    label.className = 'mm-step-label'\n    label.textContent = 'Step ' + stepNum + ' \\u2014 Choose a date'\n    wrap.appendChild(label)\n\n    var chips = document.createElement('div')\n    chips.className = 'mm-dates'\n\n    available.forEach(function(d) {\n      var chip = document.createElement('button')\n      chip.className = 'mm-date-chip' + (selectedDate === d.date ? ' selected' : '')\n      chip.textContent = d.label\n      chip.addEventListener('click', function() {\n        selectedDate = d.date\n        render()\n      })\n      chips.appendChild(chip)\n    })\n\n    wrap.appendChild(chips)\n    root.appendChild(wrap)\n    root.appendChild(makeHr())\n  }\n\n  function renderSlots() {\n    if (!selectedStudio || !selectedDate) {\n      if (selectedStudio \u0026\u0026 !selectedDate) {\n        var p = document.createElement('div')\n        p.className = 'mm-prompt'\n        p.textContent = 'Choose a date above to see available times.'\n        root.appendChild(p)\n      }\n      return\n    }\n\n    var dateObj = null\n    for (var i = 0; i \u003c allDates.length; i++) {\n      if (allDates[i].date === selectedDate) { dateObj = allDates[i]; break }\n    }\n    var studioObj = null\n    if (dateObj) {\n      for (var j = 0; j \u003c dateObj.studios.length; j++) {\n        if (dateObj.studios[j].studio_id === selectedStudio) { studioObj = dateObj.studios[j]; break }\n      }\n    }\n    if (!studioObj) return\n\n    var totalSteps = activeProvinceCount() \u003e 1 ? 4 : 3\n    var wrap = document.createElement('div')\n    wrap.className = 'mm-section'\n    var label = document.createElement('div')\n    label.className = 'mm-step-label'\n    label.textContent = 'Step ' + totalSteps + ' \\u2014 Pick a time'\n    wrap.appendChild(label)\n\n    var dateChip = document.createElement('div')\n    dateChip.className = 'mm-date-chip selected'\n    dateChip.style.display = 'inline-block'\n    dateChip.style.marginBottom = '16px'\n    dateChip.style.cursor = 'default'\n    dateChip.textContent = dateObj.label\n    wrap.appendChild(dateChip)\n\n    var grid = document.createElement('div')\n    grid.className = 'mm-slots'\n    var preselectedCard = null\n\n    studioObj.slots.forEach(function(slot) {\n      var isSoldOut = slot.spaces_left !== null \u0026\u0026 slot.spaces_left === 0\n      if (isSoldOut) return\n\n      var isPreselected = preselectTime \u0026\u0026 slot.time === formatTimeFromHHMM(preselectTime)\n      var card = document.createElement('div')\n      card.className = 'mm-slot' + (isPreselected ? ' mm-preselected' : '')\n      if (isPreselected) preselectedCard = card\n\n      var timeEl = document.createElement('span')\n      timeEl.className = 'mm-slot-time'\n      timeEl.textContent = slot.time\n      card.appendChild(timeEl)\n\n      var key = slot.register_url\n      if (!slotQty[key]) slotQty[key] = 1\n\n      var qty = document.createElement('div')\n      qty.className = 'mm-qty'\n\n      var minus = document.createElement('button')\n      minus.className = 'mm-qty-btn'\n      minus.textContent = '\\u2212'\n      minus.disabled = slotQty[key] \u003c= 1;\n      (function(k) {\n        minus.addEventListener('click', function() {\n          if (slotQty[k] \u003e 1) { slotQty[k]--; render() }\n        })\n      })(key)\n\n      var val = document.createElement('div')\n      val.className = 'mm-qty-val'\n      val.textContent = slotQty[key]\n\n      var plus = document.createElement('button')\n      plus.className = 'mm-qty-btn'\n      plus.textContent = '+'\n      plus.disabled = slot.spaces_left !== null \u0026\u0026 slotQty[key] \u003e= slot.spaces_left;\n      (function(k) {\n        plus.addEventListener('click', function() { slotQty[k]++; render() })\n      })(key)\n\n      qty.appendChild(minus)\n      qty.appendChild(val)\n      qty.appendChild(plus)\n      card.appendChild(qty)\n\n      if (slot.spaces_left !== null \u0026\u0026 slot.spaces_left \u003c= 5) {\n        var warning = document.createElement('div')\n        warning.className = 'mm-spaces-left'\n        warning.textContent = slot.spaces_left + (slot.spaces_left === 1 ? ' space left' : ' spaces left')\n        card.appendChild(warning)\n      }\n\n      var btn = document.createElement('a')\n      btn.className = 'mm-register-btn'\n      btn.href = slot.register_url.replace('QTY', slotQty[key])\n      btn.textContent = 'Register'\n      card.appendChild(btn)\n\n      grid.appendChild(card)\n    })\n\n    if (!grid.hasChildNodes()) {\n      var mmEmptyMsg = document.createElement('div')\n      mmEmptyMsg.className = 'mm-empty'\n      mmEmptyMsg.textContent = 'All sessions for this date are sold out \\u2014 please choose another date.'\n      wrap.appendChild(mmEmptyMsg)\n    } else {\n      wrap.appendChild(grid)\n    }\n    root.appendChild(wrap)\n\n    if (preselectedCard \u0026\u0026 !scrolledToPreselect) {\n      scrolledToPreselect = true\n      setTimeout(function () {\n        preselectedCard.scrollIntoView({ behavior: 'smooth', block: 'center' })\n      }, 150)\n    }\n  }\n\n})()\n\u003c\/script\u003e","brand":"4CATS","offers":[{"title":"Default Title","offer_id":43669442003034,"sku":null,"price":15.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/mini_make_ghosties_week.jpg?v=1784225801"},{"product_id":"wednesday-lineup-ghosties-week-wed-sep-30th","title":"Wednesday Lineup | Ghosties Week | Wed Sep 30th","description":"","brand":"4Cats","offers":[{"title":"Default Title","offer_id":43669892923482,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/wednesday_lineup_ghosties_week_thumbnail.jpg?v=1784228807"},{"product_id":"thursday-lineup-ghosties-week-thu-oct-1st","title":"Thursday Lineup | Ghosties Week | Thu Oct 1st","description":"","brand":"4Cats","offers":[{"title":"Default Title","offer_id":43669954986074,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/thursday_lineup_ghosties_week_thumbnail.jpg?v=1784068408"},{"product_id":"fri-oct-2nd-ghostie-event","title":"Fri Oct 2nd | Ghosties Event","description":"","brand":"4CATS","offers":[{"title":"AB \/ CALGARY - INGLEWOOD","offer_id":43669999255642,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"AB \/ ST ALBERT","offer_id":43669999288410,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - GARDEN CITY","offer_id":43669999321178,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - STEVESTON","offer_id":43669999353946,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ SURREY - SOUTH","offer_id":43669999386714,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - KITSILANO","offer_id":43669999419482,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - MAIN STREET","offer_id":43669999452250,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - UBC","offer_id":43669999485018,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - COOK STREET VILLAGE","offer_id":43669999517786,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - ESQUIMALT","offer_id":43669999550554,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - OAK BAY","offer_id":43669999583322,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - UPTOWN","offer_id":43669999616090,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ BURLINGTON - SOUTH","offer_id":43669999648858,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ CAMBRIDGE - GALT","offer_id":43669999681626,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ERIN","offer_id":43669999714394,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - OTTAWA STREET","offer_id":43669999747162,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WATERDOWN","offer_id":43669999779930,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WEST HARBOUR","offer_id":43669999812698,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ KINGSTON - ARLINGTON PARK","offer_id":43669999845466,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - BYRON","offer_id":43669999878234,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - WORTLEY VILLAGE","offer_id":43669999911002,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ MISSISSAUGA - PORT CREDIT","offer_id":43669999943770,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - NORTH","offer_id":43669999976538,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - WEST","offer_id":43670000009306,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OTTAWA - THE GLEBE","offer_id":43670000042074,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ST CATHARINES","offer_id":43670000074842,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - AVENUE ROAD","offer_id":43670000107610,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - BABY POINT","offer_id":43670000140378,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - LEASIDE","offer_id":43670000173146,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - THE BEACHES","offer_id":43670000205914,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ WATERLOO - UPTOWN","offer_id":43670000238682,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/friday_lineup_ghosties_week_thumbnail_85155cca-a88b-4168-8bb8-a4cc9ef6b6d9.jpg?v=1784314124"},{"product_id":"5-30pm-fri-oct-2nd-ghostie-event","title":"5:30pm Fri Oct 2nd | Ghosties Event","description":"","brand":"4CATS","offers":[{"title":"AB \/ CALGARY - INGLEWOOD","offer_id":43670003744858,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"AB \/ ST ALBERT","offer_id":43670003777626,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - GARDEN CITY","offer_id":43670003810394,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - STEVESTON","offer_id":43670003843162,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ SURREY - SOUTH","offer_id":43670003875930,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - KITSILANO","offer_id":43670003908698,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - MAIN STREET","offer_id":43670003941466,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - UBC","offer_id":43670003974234,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - COOK STREET VILLAGE","offer_id":43670004007002,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - ESQUIMALT","offer_id":43670004039770,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - OAK BAY","offer_id":43670004072538,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - UPTOWN","offer_id":43670004105306,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ BURLINGTON - SOUTH","offer_id":43670004138074,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ CAMBRIDGE - GALT","offer_id":43670004170842,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ERIN","offer_id":43670004203610,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - OTTAWA STREET","offer_id":43670004236378,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WATERDOWN","offer_id":43670004269146,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WEST HARBOUR","offer_id":43670004301914,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ KINGSTON - ARLINGTON PARK","offer_id":43670004334682,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - BYRON","offer_id":43670004367450,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - WORTLEY VILLAGE","offer_id":43670004400218,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ MISSISSAUGA - PORT CREDIT","offer_id":43670004432986,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - NORTH","offer_id":43670004465754,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - WEST","offer_id":43670004498522,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OTTAWA - THE GLEBE","offer_id":43670004531290,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ST CATHARINES","offer_id":43670004564058,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - AVENUE ROAD","offer_id":43670004596826,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - BABY POINT","offer_id":43670004629594,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - LEASIDE","offer_id":43670004662362,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - THE BEACHES","offer_id":43670004695130,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ WATERLOO - UPTOWN","offer_id":43670004727898,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/friday_lineup_ghosties_week_thumbnail.jpg?v=1784311915"},{"product_id":"6-30pm-fri-oct-2nd-ghostie-event","title":"6:30pm Fri Oct 2nd | Ghosties Event","description":"","brand":"4CATS","offers":[{"title":"AB \/ CALGARY - INGLEWOOD","offer_id":43670007644250,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"AB \/ ST ALBERT","offer_id":43670007677018,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - GARDEN CITY","offer_id":43670007709786,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - STEVESTON","offer_id":43670007742554,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ SURREY - SOUTH","offer_id":43670007775322,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - KITSILANO","offer_id":43670007808090,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - MAIN STREET","offer_id":43670007840858,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - UBC","offer_id":43670007873626,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - COOK STREET VILLAGE","offer_id":43670007906394,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - ESQUIMALT","offer_id":43670007939162,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - OAK BAY","offer_id":43670007971930,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - UPTOWN","offer_id":43670008004698,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ BURLINGTON - SOUTH","offer_id":43670008037466,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ CAMBRIDGE - GALT","offer_id":43670008070234,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ERIN","offer_id":43670008103002,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - OTTAWA STREET","offer_id":43670008135770,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WATERDOWN","offer_id":43670008168538,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WEST HARBOUR","offer_id":43670008201306,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ KINGSTON - ARLINGTON PARK","offer_id":43670008234074,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - BYRON","offer_id":43670008266842,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - WORTLEY VILLAGE","offer_id":43670008299610,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ MISSISSAUGA - PORT CREDIT","offer_id":43670008332378,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - NORTH","offer_id":43670008365146,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - WEST","offer_id":43670008397914,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OTTAWA - THE GLEBE","offer_id":43670008430682,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ST CATHARINES","offer_id":43670008463450,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - AVENUE ROAD","offer_id":43670008496218,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - BABY POINT","offer_id":43670008528986,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - LEASIDE","offer_id":43670008561754,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - THE BEACHES","offer_id":43670008594522,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ WATERLOO - UPTOWN","offer_id":43670008627290,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/friday_lineup_ghosties_week_thumbnail.jpg?v=1784311915"},{"product_id":"7-30pm-fri-oct-2nd-ghostie-event","title":"7:30pm Fri Oct 2nd | Ghosties Event","description":"","brand":"4CATS","offers":[{"title":"AB \/ CALGARY - INGLEWOOD","offer_id":43670009151578,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"AB \/ ST ALBERT","offer_id":43670009184346,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - GARDEN CITY","offer_id":43670009217114,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ RICHMOND - STEVESTON","offer_id":43670009249882,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ SURREY - SOUTH","offer_id":43670009282650,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - KITSILANO","offer_id":43670009315418,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - MAIN STREET","offer_id":43670009348186,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VANCOUVER - UBC","offer_id":43670009380954,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - COOK STREET VILLAGE","offer_id":43670009413722,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - ESQUIMALT","offer_id":43670009446490,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - OAK BAY","offer_id":43670009479258,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"BC \/ VICTORIA - UPTOWN","offer_id":43670009512026,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ BURLINGTON - SOUTH","offer_id":43670009544794,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ CAMBRIDGE - GALT","offer_id":43670009577562,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ERIN","offer_id":43670009610330,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - OTTAWA STREET","offer_id":43670009643098,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WATERDOWN","offer_id":43670009675866,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ HAMILTON - WEST HARBOUR","offer_id":43670009708634,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ KINGSTON - ARLINGTON PARK","offer_id":43670009741402,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - BYRON","offer_id":43670009774170,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ LONDON - WORTLEY VILLAGE","offer_id":43670009806938,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ MISSISSAUGA - PORT CREDIT","offer_id":43670009839706,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - NORTH","offer_id":43670009872474,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OAKVILLE - WEST","offer_id":43670009905242,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ OTTAWA - THE GLEBE","offer_id":43670009938010,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ ST CATHARINES","offer_id":43670009970778,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - AVENUE ROAD","offer_id":43670010003546,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - BABY POINT","offer_id":43670010036314,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - LEASIDE","offer_id":43670010069082,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ TORONTO - THE BEACHES","offer_id":43670010101850,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true},{"title":"ON \/ WATERLOO - UPTOWN","offer_id":43670010134618,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/friday_lineup_ghosties_week_thumbnail.jpg?v=1784311915"},{"product_id":"saturday-lineup-ghosties-week-sat-oct-3rd","title":"Saturday Lineup | Ghosties Week | Sat Oct 3rd","description":"","brand":"4Cats","offers":[{"title":"Default Title","offer_id":43670100181082,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/saturday_lineup_ghosties_week_thumbnail.jpg?v=1784304846"},{"product_id":"sunday-lineup-ghosties-week-sun-oct-4th","title":"Sunday Lineup | Ghosties Week | Sun Oct 4th","description":"","brand":"4Cats","offers":[{"title":"Default Title","offer_id":43670140092506,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/sunday_lineup_ghosties_week_thumbnail.jpg?v=1784304858"},{"product_id":"tuesday-lineup-ghosties-week-tue-sep-29th","title":"Tuesday Lineup | Ghosties Week | Tue Sep 29th","description":"","brand":"4Cats","offers":[{"title":"Default Title","offer_id":43670531735642,"sku":null,"price":35.0,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/files\/tuesday_lineup_ghosties_week_thumbnail.jpg?v=1784316782"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1451\/3756\/collections\/ghosties_week_collection_projects_1080x1080_5a5de732-ddf9-4729-885b-1b7254e5b36f.jpg?v=1784321897","url":"https:\/\/4cats.com\/collections\/ghosties-week-collection.oembed","provider":"4Cats","version":"1.0","type":"link"}