{
  "version": 3,
  "sources": ["/cdn/shop/t/261/assets/btk-kitchen-styles-listing.js?cb=13"],
  "sourcesContent": ["/* ============================================================\n   btk-kitchen-styles-listing.js\n   Kitchen Styles Listing - all JS for btk-kitchen-styles-listing.liquid\n   Data dependencies (injected inline before this file loads):\n     window.btkFilterDescriptions  - set by Liquid loop in section\n     window.BTKExamplePrices       - Odoo's example prices by style code\n                                     (shop metafield btk.kitchen_example_prices)\n   ============================================================ */\n\n\n/* ----------------------------------------------------------\n   FAVOURITES\n   ---------------------------------------------------------- */\n\nvar FAV_KEY = 'btk_favourite_styles';\n\nfunction getBtkFavs() {\n  try { return JSON.parse(localStorage.getItem(FAV_KEY)) || []; }\n  catch (e) { return []; }\n}\n\nfunction updateFavUI() {\n  var favs = getBtkFavs();\n  var countLabel = document.getElementById('ksl-fav-count');\n  if (countLabel) countLabel.textContent = favs.length;\n\n  document.querySelectorAll('.btk-fav-toggle').forEach(function (btn) {\n    var card = btn.closest('.ksl-card');\n    var handle = card.getAttribute('data-style-handle');\n    btn.classList.toggle('is-active', favs.includes(handle));\n  });\n}\n\nfunction toggleBtkFav(handle) {\n  var favs = getBtkFavs();\n  var idx = favs.indexOf(handle);\n\n  if (idx > -1) favs.splice(idx, 1);\n  else favs.push(handle);\n\n  localStorage.setItem(FAV_KEY, JSON.stringify(favs));\n  updateFavUI();\n\n  var favFilterBtn = document.getElementById('ksl-filterbtn-fav');\n\n  if (favs.length === 0) {\n    if (favFilterBtn) {\n      favFilterBtn.classList.remove('is-active');\n      favFilterBtn.setAttribute('aria-pressed', 'false');\n    }\n    document.querySelectorAll('.ksl-card').forEach(function (card) {\n      card.style.display = '';\n    });\n    applyAllFilters();\n  } else if (favFilterBtn && favFilterBtn.classList.contains('is-active')) {\n    applyAllFilters();\n  }\n}\n\nfunction restoreBtkFavs() {\n  var favs = getBtkFavs();\n  if (favs.length === 0) return;\n\n  document.querySelectorAll('.ksl-card').forEach(function (card) {\n    var handle = card.getAttribute('data-style-handle');\n    if (favs.indexOf(handle) > -1) {\n      var btn = card.querySelector('.btk-fav-toggle');\n      if (btn) btn.classList.add('is-active');\n    }\n  });\n\n  var countLabel = document.getElementById('ksl-fav-count');\n  var favBtn = document.getElementById('ksl-filterbtn-fav');\n  if (countLabel) countLabel.textContent = favs.length;\n  if (favBtn) favBtn.style.display = 'inline-flex';\n}\n\ndocument.addEventListener('DOMContentLoaded', restoreBtkFavs);\n\n\n/* ----------------------------------------------------------\n   MAIN FILTERS, SWATCHES, HEADING, CLAMPING\n   ---------------------------------------------------------- */\n\n(function () {\n\n  function setActiveSwatch(card, active) {\n    var all = card.querySelectorAll('.ksl-swatch');\n    for (var i = 0; i < all.length; i++) all[i].classList.remove('is-active');\n    active.classList.add('is-active');\n  }\n\n  function openOverlay(card) {\n    var overlay = card.querySelector('.ksl-swatches-overlay');\n    if (!overlay) return;\n    overlay.hidden = false;\n    var btns = card.querySelectorAll('[data-action=\"toggle-swatches\"]');\n    for (var i = 0; i < btns.length; i++) btns[i].setAttribute('aria-expanded', 'true');\n  }\n\n  function closeOverlay(card) {\n    var overlay = card.querySelector('.ksl-swatches-overlay');\n    if (!overlay) return;\n    overlay.hidden = true;\n    var btns = card.querySelectorAll('[data-action=\"toggle-swatches\"]');\n    for (var i = 0; i < btns.length; i++) btns[i].setAttribute('aria-expanded', 'false');\n  }\n\n  function updateDoorBlocks(card, doorUrl) {\n    var blocks = card.querySelectorAll('.ksl-door-block');\n    if (!blocks || blocks.length === 0) return;\n\n    for (var i = 0; i < blocks.length; i++) {\n      var doorWrap = blocks[i];\n      var doorImg = doorWrap.querySelector('img.ksl-door-img');\n\n      if (doorUrl) {\n        if (!doorImg) {\n          doorImg = document.createElement('img');\n          doorImg.className = 'ksl-door-img';\n          doorImg.alt = '';\n          doorImg.loading = 'lazy';\n          doorImg.decoding = 'async';\n          doorWrap.appendChild(doorImg);\n        }\n        doorImg.src = doorUrl;\n        doorWrap.classList.remove('is-empty');\n      } else {\n        if (doorImg) doorImg.remove();\n        doorWrap.classList.add('is-empty');\n      }\n    }\n  }\n\n  function applySwatchToCard(card, swatch) {\n    if (!card || !swatch) return;\n\n    var colourName = swatch.getAttribute('data-colour-name') || '';\n    var colourHandle = swatch.getAttribute('data-colour-handle') || '';\n\n    // The per-colour images are no longer baked into these attributes - the\n    // ~2,100 image_url calls that produced them were pushing /pages/kitchens\n    // past Shopify's render timeout (see btk-style-previews.js). They now come\n    // from a fetched, session-cached map keyed by style + colour. The\n    // attributes are still read first so anything that does still carry them\n    // (or a cached page) keeps working unchanged.\n    // The FETCHED map wins over the data attributes.\n    //\n    // Those attributes still exist, but they no longer hold this colour's\n    // image: the per-colour map that filled them was removed (it was ~2,100\n    // image_url calls and made this page 500), so they now fall back to the\n    // style's DEFAULT image - the same picture on every swatch. Reading them\n    // first made clicking a swatch look like it did nothing. They stay only as\n    // a last resort for a cached page still carrying real per-colour values.\n    var styleHandle = card.getAttribute('data-style-handle')\n      || (card.closest && card.closest('[data-style-handle]')\n          && card.closest('[data-style-handle]').getAttribute('data-style-handle'));\n    var preview = '';\n    var door = '';\n    var pv = window.BTKStylePreviewFor\n      ? window.BTKStylePreviewFor(styleHandle, colourHandle) : null;\n    if (pv) {\n      preview = pv.p || '';\n      door    = pv.d || '';\n    } else if (styleHandle && window.BTKStylePreviewsReady) {\n      // This style's imagery has not been fetched yet - it loads on demand, one\n      // style per request. Pull it, then re-run this same call so the card\n      // updates. Guarded so it only retries once per swatch.\n      if (!swatch.dataset.btkPreviewRetry) {\n        swatch.dataset.btkPreviewRetry = '1';\n        window.BTKStylePreviewsReady(styleHandle).then(function () {\n          applySwatchToCard(card, swatch);\n        });\n      }\n    }\n    if (!preview) preview = swatch.getAttribute('data-preview-image') || '';\n    if (!door)    door    = swatch.getAttribute('data-door-image') || '';\n\n    setActiveSwatch(card, swatch);\n\n    var heroImg = card.querySelector('img.ksl-image');\n    if (heroImg && preview) {\n      heroImg.src = preview;\n      heroImg.removeAttribute('srcset');\n      heroImg.removeAttribute('sizes');\n    }\n\n    var label = card.querySelector('.ksl-selected-colour');\n    if (label) label.textContent = colourName;\n\n    updateDoorBlocks(card, door);\n\n    // Every buy button on the card (Plan this kitchen online NOW and Quick Buy Units, 2026-11-07),\n    // in the panel showing (a card with a linked style has one panel each).\n    var btnScope = card.querySelector('.ksl-sc-panel--active') || card;\n    if (colourHandle) btnScope.querySelectorAll('[data-ksl-buy]').forEach(function (startBuying) {\n      var style = startBuying.getAttribute('data-style') || '';\n      var carcase = startBuying.getAttribute('data-carcase') || 'white';\n\n      startBuying.setAttribute('data-colour', colourHandle);\n      startBuying.setAttribute('data-colour-name', colourName);\n\n      var href =\n        '/collections/kitchen-units-base-standard?' +\n        'filter.p.m.custom.kitchen_style_handle=' + encodeURIComponent(style) + '&filter.p.m.custom.kitchen_style_handle=all' +\n        '&colour=' + encodeURIComponent(colourHandle) +\n        '&carcase=' + encodeURIComponent(carcase) +\n        '&style=' + encodeURIComponent(style);\n\n      startBuying.setAttribute('href', href);\n    });\n\n\n    var detailsBtn = btnScope.querySelector('[data-ksl-details-link]');\n    if (detailsBtn && colourHandle) {\n      var dBase = detailsBtn.getAttribute('href').split('?')[0];\n      detailsBtn.setAttribute('href', dBase + '?colour=' + encodeURIComponent(colourHandle));\n    }\n\n    var titleLink = card.querySelector('a.ksl-title-link');\n    if (titleLink && colourHandle) {\n      var tbase = titleLink.getAttribute('href') || '';\n      tbase = tbase.split('?')[0];\n      titleLink.setAttribute('href', tbase + '?colour=' + encodeURIComponent(colourHandle));\n    }\n\n    var imageLink = card.querySelector('a.ksl-image-link');\n    if (imageLink && colourHandle) {\n      var ibase = imageLink.getAttribute('href') || '';\n      ibase = ibase.split('?')[0];\n      imageLink.setAttribute('href', ibase + '?colour=' + encodeURIComponent(colourHandle));\n    }\n  }\n\n  function swatchMatchesFamilies(swatch, families) {\n    if (!families || families.length === 0) return true;\n    var famAttr = swatch.getAttribute('data-family-handles') || '';\n    if (!famAttr) return false;\n    var hay = ',' + famAttr.toLowerCase() + ',';\n    for (var i = 0; i < families.length; i++) {\n      var key = String(families[i] || '').toLowerCase();\n      if (!key) continue;\n      if (hay.indexOf(',' + key + ',') !== -1) return true;\n    }\n    return false;\n  }\n\n  function getSelectedFamilies() {\n    var active = document.querySelectorAll('.ksl-colourfamily-tile.is-active');\n    var keys = [];\n    for (var i = 0; i < active.length; i++) {\n      var k = active[i].getAttribute('data-family-key') || '';\n      if (k) keys.push(k);\n    }\n    return keys;\n  }\n\n  function getSelectedStyles() {\n    var active = document.querySelectorAll('.ksl-filterbar-tile.is-active');\n    var keys = [];\n    for (var i = 0; i < active.length; i++) {\n      var k = active[i].getAttribute('data-filter-key') || '';\n      if (k) keys.push(k);\n    }\n    return keys;\n  }\n\n  function getSelectedRange() {\n    var t = document.querySelector('.ksl-range-tile.is-active');\n    return t ? (t.getAttribute('data-range-key') || '') : '';\n  }\n\n  /* One card per colour. When a colour family or a Style Name is picked, each\n     matching range is shown once per matching colour (Concrete -> one card per\n     concrete colour of each concrete range; Moderna -> one card per Moderna\n     colour). The extra cards are copies of the range's own card\n     (.ksl-card--clone) with that colour applied, so every handler - all\n     delegated on document - works on them unchanged. Rebuilt from scratch on\n     every filter change; nothing extra is rendered server-side. */\n  function removeColourClones() {\n    var clones = document.querySelectorAll('.ksl-card--clone');\n    for (var i = 0; i < clones.length; i++) clones[i].remove();\n    // The original card of a Style Name set back to its full swatch row;\n    // clampAllCards (run after every filter pass) re-clamps it.\n    var singles = document.querySelectorAll('.ksl-card--single-colour');\n    for (var j = 0; j < singles.length; j++) {\n      singles[j].classList.remove('ksl-card--single-colour');\n      var items = singles[j].querySelectorAll('.ksl-swatch-item');\n      for (var k = 0; k < items.length; k++) items[k].hidden = false;\n    }\n  }\n\n  // Style Name cards: each card is one colour, so its swatch row shows only\n  // that colour (no \"+N\" button). clampSwatchRows skips these cards.\n  function showOnlyCardColour(card, swatch) {\n    card.classList.add('ksl-card--single-colour');\n    var row = swatch.closest('.ksl-swatches-top');\n    if (!row) return;\n    var items = row.querySelectorAll('.ksl-swatch-item');\n    for (var i = 0; i < items.length; i++) items[i].hidden = !items[i].contains(swatch);\n    var more = row.querySelector('.ksl-swatch-more');\n    if (more) more.hidden = true;\n  }\n\n  function colourSwatchesFor(card, families) {\n    var row = card.querySelector('.ksl-toprow-left .ksl-sc-panel--active .ksl-swatches-top')\n      || card.querySelector('.ksl-toprow-left .ksl-swatches-top');\n    if (!row) return [];\n    var all = row.querySelectorAll('.ksl-swatch[data-colour-handle]');\n    var out = [];\n    for (var i = 0; i < all.length; i++) {\n      if (!all[i].getAttribute('data-colour-handle')) continue;\n      if (families.length && !swatchMatchesFamilies(all[i], families)) continue;\n      out.push(all[i]);\n    }\n    return out;\n  }\n\n  function expandCardByColour(card, families, singleColour) {\n    var swatches = colourSwatchesFor(card, families);\n    if (swatches.length === 0) return;\n    applySwatchToCard(card, swatches[0]);\n    if (singleColour) showOnlyCardColour(card, swatches[0]);\n    var after = card;\n    for (var i = 1; i < swatches.length; i++) {\n      var handle = swatches[i].getAttribute('data-colour-handle');\n      var clone = card.cloneNode(true);\n      clone.classList.add('ksl-card--clone');\n      after.parentNode.insertBefore(clone, after.nextSibling);\n      after = clone;\n      var cloneSwatches = colourSwatchesFor(clone, []);\n      for (var j = 0; j < cloneSwatches.length; j++) {\n        if (cloneSwatches[j].getAttribute('data-colour-handle') === handle) {\n          applySwatchToCard(clone, cloneSwatches[j]);\n          if (singleColour) showOnlyCardColour(clone, cloneSwatches[j]);\n          break;\n        }\n      }\n    }\n  }\n\n  // `list` is \",key,key,\" as the section writes data-*-fam-keys.\n  function famListHas(list, families) {\n    var hay = String(list || '').toLowerCase();\n    for (var i = 0; i < families.length; i++) {\n      var key = String(families[i] || '').toLowerCase();\n      if (key && hay.indexOf(',' + key + ',') !== -1) return true;\n    }\n    return false;\n  }\n\n  // A bespoke-painted tab has a \"Choose Bespoke Colour\" button, no swatches,\n  // so its families come from the card (e.g. Any F&B Colour).\n  function bespokeTabMatches(card, families) {\n    if (card.getAttribute('data-bespoke-painted') === 'true'\n        && famListHas(card.getAttribute('data-primary-fam-keys'), families)) return '0';\n    if (card.getAttribute('data-linked-bespoke-painted') === 'true'\n        && famListHas(card.getAttribute('data-linked-fam-keys'), families)) return '1';\n    return '';\n  }\n\n  function cardHasMatchingFamily(card, families) {\n    if (!families || families.length === 0) return true;\n    var swatches = card.querySelectorAll('.ksl-swatch[data-family-handles]');\n    for (var i = 0; i < swatches.length; i++) {\n      if (swatchMatchesFamilies(swatches[i], families)) return true;\n    }\n    return bespokeTabMatches(card, families) !== '';\n  }\n\n  // The tab switcher is defined further down this file, after the first\n  // filter pass has run, so a switch asked for on page load waits a tick.\n  function switchTabSoon(card, idx) {\n    if (typeof window._btkSwitchTab === 'function') { window._btkSwitchTab(card, idx); return; }\n    setTimeout(function () {\n      if (typeof window._btkSwitchTab === 'function') window._btkSwitchTab(card, idx);\n    }, 0);\n  }\n\n  function chooseFirstMatchingSwatch(card, families) {\n    if (!families || families.length === 0) return null;\n\n    var top = card.querySelectorAll('.ksl-swatches-top .ksl-swatch[data-family-handles]');\n    for (var i = 0; i < top.length; i++) {\n      if (swatchMatchesFamilies(top[i], families)) return top[i];\n    }\n\n    var overlay = card.querySelectorAll('.ksl-swatches-overlay .ksl-swatch[data-family-handles]');\n    for (var j = 0; j < overlay.length; j++) {\n      if (swatchMatchesFamilies(overlay[j], families)) return overlay[j];\n    }\n\n    return null;\n  }\n\n  function updateURL(selectedStyles, selectedFamilies, selectedRange) {\n    if (window.Shopify && window.Shopify.designMode) return;\n    try {\n      var url = new URL(window.location.href);\n      if (selectedStyles.length > 0) url.searchParams.set('style', selectedStyles.join(','));\n      else url.searchParams.delete('style');\n      if (selectedFamilies.length > 0) url.searchParams.set('colour_family', selectedFamilies.join(','));\n      else url.searchParams.delete('colour_family');\n      if (selectedRange) url.searchParams.set('range', selectedRange);\n      else url.searchParams.delete('range');\n      window.history.replaceState({}, '', url.toString());\n    } catch (e) {}\n  }\n\n  function applyAllFilters() {\n    removeColourClones();\n    var selectedStyles = getSelectedStyles();\n    var selectedFamilies = getSelectedFamilies();\n    var selectedRange = getSelectedRange();\n    var toExpand = [];\n    var cards = document.querySelectorAll('.ksl-card');\n\n    var favBtn = document.getElementById('ksl-filterbtn-fav');\n    var isFilteringFavs = favBtn && favBtn.classList.contains('is-active');\n    var currentFavs = (typeof getBtkFavs === 'function') ? getBtkFavs() : [];\n\n    for (var i = 0; i < cards.length; i++) {\n      var card = cards[i];\n\n      if (isFilteringFavs) {\n        var handle = card.getAttribute('data-style-handle');\n        if (currentFavs.indexOf(handle) === -1) {\n          card.style.display = 'none';\n          continue;\n        }\n      }\n\n      if (selectedRange) {\n        var rangeHandle = card.getAttribute('data-style-handle') || '';\n        var linkedHandle = card.getAttribute('data-linked-style-handle') || '';\n        if (rangeHandle !== selectedRange && linkedHandle !== selectedRange) {\n          card.style.display = 'none';\n          continue;\n        }\n      }\n\n      var matchStyle = true;\n      if (selectedStyles.length > 0) {\n        var groups = (card.getAttribute('data-filter-groups') || '').toLowerCase();\n        matchStyle = false;\n        for (var s = 0; s < selectedStyles.length; s++) {\n          var key = String(selectedStyles[s] || '').toLowerCase();\n          if (key && groups.indexOf(key) !== -1) { matchStyle = true; break; }\n        }\n      }\n\n      var matchFamily = true;\n      if (selectedFamilies.length > 0) {\n        matchFamily = cardHasMatchingFamily(card, selectedFamilies);\n      }\n\n      if (!matchStyle || !matchFamily) {\n        card.style.display = 'none';\n        continue;\n      }\n\n      card.style.display = '';\n\n      if (card.classList.contains('ksl-card--linked') && selectedStyles.length > 0 && typeof window._btkSwitchTab === 'function') {\n        var tabs = card.querySelectorAll('.ksl-sc-tab');\n        for (var t = 0; t < tabs.length; t++) {\n          var tabGroups = (tabs[t].getAttribute('data-tab-groups') || '').toLowerCase();\n          var tabMatches = false;\n          for (var s2 = 0; s2 < selectedStyles.length; s2++) {\n            if (tabGroups.indexOf(selectedStyles[s2].toLowerCase()) !== -1) { tabMatches = true; break; }\n          }\n          if (tabMatches) {\n            window._btkSwitchTab(card, tabs[t].getAttribute('data-tab'));\n            break;\n          }\n        }\n      }\n\n      // A colour family only the linked tab has (Any F&B Colour on a range\n      // whose F&B version is folded into this card): show that tab.\n      // Switched back once the family no longer needs it (data-fam-tab marks\n      // a switch made here, so a tab the visitor picked is left alone).\n      if (selectedFamilies.length > 0 && !selectedRange && selectedStyles.length === 0\n          && card.classList.contains('ksl-card--linked')\n          && !famListHas(card.getAttribute('data-primary-fam-keys'), selectedFamilies)\n          && famListHas(card.getAttribute('data-linked-fam-keys'), selectedFamilies)) {\n        card.setAttribute('data-fam-tab', '1');\n        switchTabSoon(card, '1');\n      } else if (card.hasAttribute('data-fam-tab')) {\n        card.removeAttribute('data-fam-tab');\n        if (!selectedRange && selectedStyles.length === 0) switchTabSoon(card, '0');\n      }\n\n      // The linked (bespoke) style's own handle picked: show its tab.\n      if (selectedRange && card.getAttribute('data-linked-style-handle') === selectedRange\n          && typeof window._btkSwitchTab === 'function') {\n        window._btkSwitchTab(card, '1');\n      }\n\n      if (selectedFamilies.length > 0) {\n        var chosen = chooseFirstMatchingSwatch(card, selectedFamilies);\n        if (chosen) applySwatchToCard(card, chosen);\n      } else {\n        var defaultSwatch = card.querySelector('.ksl-swatches-top .ksl-swatch');\n        if (defaultSwatch) applySwatchToCard(card, defaultSwatch);\n      }\n\n      if (selectedRange || selectedFamilies.length > 0) toExpand.push(card);\n    }\n\n    // Every expanded card is one colour, for a colour family as much as for a\n    // Style Name, so each shows only its own swatch (Arden, 2026-11-06: five\n    // Bellano oak cards each listed all of Bellano's colours).\n    for (var x = 0; x < toExpand.length; x++) expandCardByColour(toExpand[x], selectedFamilies, true);\n    // Prices are drawn by an IntersectionObserver that only knows the original\n    // cards, and its IIFE sits further down this file (not yet run on the\n    // first pass) - so price the copies on the next tick.\n    if (toExpand.length) {\n      setTimeout(function () {\n        if (typeof window._btkProcessCard !== 'function') return;\n        var clones = document.querySelectorAll('.ksl-card--clone');\n        for (var c = 0; c < clones.length; c++) window._btkProcessCard(clones[c]);\n      }, 0);\n    }\n\n    updateURL(selectedStyles, selectedFamilies, selectedRange);\n    updateDynamicHeading();\n\n    try { document.dispatchEvent(new CustomEvent('ksl:filters-updated')); } catch (e) {}\n\n    setTimeout(clampAllCards, 0);\n  }\n\n  function loadFromURL() {\n    try {\n      var params = new URLSearchParams(window.location.search);\n\n      var styleParam = params.get('style');\n      if (styleParam) {\n        var keys = styleParam.split(',');\n        for (var i = 0; i < keys.length; i++) {\n          var key = window.BTKCtxClean.handle((keys[i] || '').trim().toLowerCase());\n          if (!key) continue;\n          var tile = document.querySelector('.ksl-filterbar-tile[data-filter-key=\"' + key + '\"]');\n          if (tile && tile.tagName === 'BUTTON') {\n            tile.classList.add('is-active');\n            tile.setAttribute('aria-pressed', 'true');\n          }\n        }\n      }\n\n      var famParam = params.get('colour_family');\n      if (famParam) {\n        var fkeys = famParam.split(',');\n        for (var j = 0; j < fkeys.length; j++) {\n          var fkey = (fkeys[j] || '').trim().toLowerCase();\n          if (!fkey) continue;\n          var ftile = document.querySelector('.ksl-colourfamily-tile[data-family-key=\"' + fkey + '\"]');\n          if (ftile && ftile.tagName === 'BUTTON') {\n            ftile.classList.add('is-active');\n            ftile.setAttribute('aria-pressed', 'true');\n          }\n        }\n      }\n\n      // A Style Name stands alone: if the URL carries one, it wins and any\n      // style / colour_family in the same URL is dropped.\n      var rangeParam = window.BTKCtxClean.handle((params.get('range') || '').trim().toLowerCase());\n      if (rangeParam) {\n        var rtile = document.querySelector('.ksl-range-tile[data-range-key=\"' + rangeParam + '\"]');\n        if (rtile && rtile.tagName === 'BUTTON') {\n          document.querySelectorAll('.ksl-filterbar-tile, .ksl-colourfamily-tile').forEach(function (t) {\n            if (t.tagName === 'BUTTON') { t.classList.remove('is-active'); t.setAttribute('aria-pressed', 'false'); }\n          });\n          rtile.classList.add('is-active');\n          rtile.setAttribute('aria-pressed', 'true');\n        }\n      }\n    } catch (e) {}\n  }\n\n  document.addEventListener('click', function (e) {\n\n    var toggleBtn = e.target.closest('[data-action=\"toggle-swatches\"]');\n    if (toggleBtn) {\n      var cardT = toggleBtn.closest('.ksl-card');\n      if (!cardT) return;\n      e.preventDefault();\n      var overlayNow = cardT.querySelector('.ksl-swatches-overlay');\n      var isOpen = overlayNow && overlayNow.hidden === false;\n      if (isOpen) closeOverlay(cardT);\n      else openOverlay(cardT);\n      return;\n    }\n\n    var swatch = e.target.closest('.ksl-swatch');\n    if (swatch) {\n      if (swatch.getAttribute('data-action') === 'toggle-swatches') return;\n      var card = swatch.closest('.ksl-card');\n      if (!card) return;\n      e.preventDefault();\n      applySwatchToCard(card, swatch);\n      closeOverlay(card);\n      return;\n    }\n\n    var favToggle = e.target.closest('.btk-fav-toggle');\n    if (favToggle) {\n      e.preventDefault();\n      var card = favToggle.closest('.ksl-card');\n      var handle = card.getAttribute('data-style-handle');\n      var favFilterBtn = document.getElementById('ksl-filterbtn-fav');\n      var isFilterActive = favFilterBtn && favFilterBtn.classList.contains('is-active');\n      var wasAlreadyFav = getBtkFavs().indexOf(handle) > -1;\n      if (isFilterActive && wasAlreadyFav) card.style.display = 'none';\n      toggleBtkFav(handle);\n      return;\n    }\n\n    var favFilterBtn = e.target.closest('#ksl-filterbtn-fav');\n    if (favFilterBtn) {\n      e.preventDefault();\n      var turningOn = !favFilterBtn.classList.contains('is-active');\n      favFilterBtn.classList.toggle('is-active');\n      if (turningOn) {\n        document.querySelectorAll('.ksl-filterbar-tile').forEach(function (t) {\n          if (t.tagName === 'BUTTON') { t.classList.remove('is-active'); t.setAttribute('aria-pressed', 'false'); }\n        });\n        document.querySelectorAll('.ksl-colourfamily-tile, .ksl-range-tile').forEach(function (t) {\n          if (t.tagName === 'BUTTON') { t.classList.remove('is-active'); t.setAttribute('aria-pressed', 'false'); }\n        });\n      }\n      applyAllFilters();\n      return;\n    }\n\n    // Filter rules: Kitchen Style and Colour combine; a Style Name is a direct\n    // hit and stands alone. Picking a Style Name clears Kitchen Style and\n    // Colour; picking either of those clears the Style Name (below).\n    var rangeTile = e.target.closest('.ksl-range-tile');\n    if (rangeTile && rangeTile.tagName === 'BUTTON') {\n      e.preventDefault();\n      var rangeOn = !rangeTile.classList.contains('is-active');\n      document.querySelectorAll('.ksl-range-tile').forEach(function (t) {\n        t.classList.remove('is-active');\n        t.setAttribute('aria-pressed', 'false');\n      });\n      if (rangeOn) {\n        rangeTile.classList.add('is-active');\n        rangeTile.setAttribute('aria-pressed', 'true');\n        document.querySelectorAll('.ksl-filterbar-tile, .ksl-colourfamily-tile').forEach(function (t) {\n          if (t.tagName === 'BUTTON') { t.classList.remove('is-active'); t.setAttribute('aria-pressed', 'false'); }\n        });\n      }\n      applyAllFilters();\n      return;\n    }\n\n    var styleTile = e.target.closest('.ksl-filterbar-tile');\n    if (styleTile && styleTile.tagName === 'BUTTON') {\n      e.preventDefault();\n      var isAlreadyActive = styleTile.classList.contains('is-active');\n      var isAllTile = styleTile.getAttribute('data-filter-key') === '';\n      document.querySelectorAll('.ksl-filterbar-tile, .ksl-range-tile').forEach(function (t) {\n        if (t.tagName === 'BUTTON') { t.classList.remove('is-active'); t.setAttribute('aria-pressed', 'false'); }\n      });\n      if (!isAlreadyActive && !isAllTile) {\n        styleTile.classList.add('is-active');\n        styleTile.setAttribute('aria-pressed', 'true');\n      }\n      applyAllFilters();\n      return;\n    }\n\n    var famBtn = e.target.closest('.ksl-colourfamily-tile');\n    if (famBtn && famBtn.tagName === 'BUTTON') {\n      e.preventDefault();\n      var allFam = document.querySelectorAll('.ksl-colourfamily-tile, .ksl-range-tile');\n      for (var i = 0; i < allFam.length; i++) {\n        if (allFam[i] !== famBtn && allFam[i].tagName === 'BUTTON') {\n          allFam[i].classList.remove('is-active');\n          allFam[i].setAttribute('aria-pressed', 'false');\n        }\n      }\n      var willBeActive = !famBtn.classList.contains('is-active');\n      famBtn.classList.toggle('is-active', willBeActive);\n      famBtn.setAttribute('aria-pressed', willBeActive ? 'true' : 'false');\n      applyAllFilters();\n      return;\n    }\n\n    var clearBtn = e.target && e.target.id === 'ksl-filterbar-clear' ? e.target : null;\n    if (clearBtn) {\n      e.preventDefault();\n      var all = document.querySelectorAll('.ksl-filterbar-tile, .ksl-colourfamily-tile, .ksl-range-tile');\n      for (var k = 0; k < all.length; k++) {\n        if (all[k].tagName !== 'BUTTON') continue;\n        all[k].classList.remove('is-active');\n        all[k].setAttribute('aria-pressed', 'false');\n      }\n      applyAllFilters();\n      return;\n    }\n\n  });\n\n  function init() {\n    loadFromURL();\n    applyAllFilters();\n    updateDynamicHeading();\n  }\n\n  function updateDynamicHeading() {\n    var h1 = document.querySelector('#ksl-header h1, #ksl-header h2');\n    if (!h1) return;\n\n    var heroDiv = document.getElementById('ksl-hero');\n    var heroTitleEl = document.getElementById('ksl-hero-title');\n    var extSpan = document.getElementById('ksl-h1-ext');\n\n    var btkBcFilterCrumb = document.getElementById('btkBcFilterCrumb');\n    var btkBcFilterName = document.getElementById('btkBcFilterName');\n    if (btkBcFilterCrumb && btkBcFilterName) {\n      var bcActiveTile = document.querySelector('.ksl-filterbar-tile.is-active');\n      var bcTitle = bcActiveTile ? (bcActiveTile.getAttribute('data-filter-title') || '') : '';\n      if (bcTitle) {\n        btkBcFilterName.textContent = bcTitle;\n        btkBcFilterCrumb.hidden = false;\n      } else {\n        btkBcFilterName.textContent = '';\n        btkBcFilterCrumb.hidden = true;\n      }\n    }\n\n    var activeTile = document.querySelector('.ksl-filterbar-tile.is-active');\n    var activeFamily = document.querySelector('.ksl-colourfamily-tile.is-active');\n    var activeRange = document.querySelector('.ksl-range-tile.is-active');\n    var rangeTitle = activeRange ? (activeRange.getAttribute('data-range-title') || '') : '';\n    var rangeKey = activeRange ? (activeRange.getAttribute('data-range-key') || '') : '';\n\n    // Style Name picked: the hero (H1 + intro) belongs to the range's Kitchen\n    // Style group, as if that group were picked; the heading above the cards\n    // is the range name with the range's own description under it.\n    var rangeGroupKey = activeRange ? (activeRange.getAttribute('data-range-group') || '') : '';\n    var heroTile = activeTile\n      || (rangeGroupKey ? document.querySelector('.ksl-filterbar-tile[data-filter-key=\"' + rangeGroupKey + '\"]') : null);\n\n    if (heroTitleEl) {\n      var heroDefault = heroTitleEl.getAttribute('data-default-title') || 'Kitchens';\n      var heroText = heroTile ? (heroTile.getAttribute('data-filter-title') || heroDefault) : heroDefault;\n      var heroExt = heroTile\n        ? (heroTile.getAttribute('data-hero-extension') || '')\n        : (heroTitleEl.getAttribute('data-default-extension') || '');\n      heroTitleEl.childNodes.forEach(function (node) {\n        if (node.nodeType === Node.TEXT_NODE) node.textContent = heroText;\n      });\n      if (extSpan) extSpan.textContent = heroExt;\n    }\n\n    /* Hero is now plain (no background image) - the swap is a no-op.\n       Left here intentionally so the function signature is unchanged and\n       any future re-enable is a one-line edit. */\n    if (heroDiv && heroDiv.classList.contains('ksl-hero--plain')) {\n      /* deliberately skipped */\n    } else if (heroDiv) {\n      var heroImg = activeTile ? (activeTile.getAttribute('data-hero-image') || '') : '';\n      if (!heroImg) heroImg = heroDiv.getAttribute('data-default-image') || '';\n      heroDiv.style.backgroundImage = heroImg ? \"url('\" + heroImg + \"')\" : '';\n    }\n\n    var styleTitle = activeTile ? (activeTile.getAttribute('data-filter-seo-title') || activeTile.getAttribute('data-filter-title') || '') : '';\n    var familyTitle = activeFamily ? (activeFamily.getAttribute('data-family-title') || '') : '';\n\n    var heading = '';\n    if (rangeTitle && familyTitle) heading = rangeTitle + ' in ' + familyTitle;\n    else if (rangeTitle) heading = rangeTitle;\n    else if (activeTile && familyTitle) heading = (activeTile.getAttribute('data-filter-title') || styleTitle) + ' in ' + familyTitle;\n    else if (styleTitle) heading = styleTitle;\n    else if (familyTitle) heading = 'Kitchens in ' + familyTitle;\n\n    if (heading) {\n      h1.textContent = heading;\n    } else {\n      h1.textContent = h1.getAttribute('data-default-heading') || 'Kitchen styles';\n    }\n\n    var subtitle = document.querySelector('#ksl-header .ksl-subtitle');\n    var activeTileKey = activeTile ? activeTile.getAttribute('data-filter-key') : '';\n    var heroTileKey = heroTile ? heroTile.getAttribute('data-filter-key') : '';\n\n    // Reads from window.btkFilterDescriptions / btkRangeDescriptions - injected\n    // inline by Liquid. A picked Style Name shows the range's own description.\n    var btkFilterDescriptions = window.btkFilterDescriptions || {};\n    var btkRangeDescriptions = window.btkRangeDescriptions || {};\n    var desc = '';\n    if (rangeKey) desc = btkRangeDescriptions[rangeKey] || '';\n    else if (activeTileKey && btkFilterDescriptions[activeTileKey]) desc = btkFilterDescriptions[activeTileKey];\n\n    var defaultDesc = document.getElementById('ksl-default-desc');\n    if (desc) {\n      if (!subtitle) {\n        subtitle = document.createElement('div');\n        subtitle.className = 'ksl-subtitle';\n        h1.parentNode.appendChild(subtitle);\n      }\n      subtitle.innerHTML = desc;\n      if (defaultDesc && subtitle !== defaultDesc) defaultDesc.hidden = true;\n    } else {\n      if (subtitle && subtitle !== defaultDesc) subtitle.remove();\n      if (defaultDesc) defaultDesc.hidden = false;\n    }\n\n    // Hero intro text - same pattern as the subtitle above.\n    // Reads from window.btkFilterIntroTexts (set inline by Liquid).\n    var heroIntro = document.getElementById('ksl-hero-intro');\n    if (heroIntro) {\n      var btkFilterIntroTexts = window.btkFilterIntroTexts || {};\n      var introHtml = heroTileKey && btkFilterIntroTexts[heroTileKey] ? btkFilterIntroTexts[heroTileKey] : '';\n      if (introHtml) {\n        heroIntro.innerHTML = introHtml;\n        heroIntro.hidden = false;\n      } else {\n        heroIntro.innerHTML = '';\n        heroIntro.hidden = true;\n      }\n    }\n\n    // Guide cover and download button beside the intro, from the Kitchen Style record.\n    var guideLink = document.getElementById('ksl-guide');\n    if (guideLink) {\n      var guide = heroTileKey && window.btkFilterGuides ? window.btkFilterGuides[heroTileKey] : null;\n      var guideCover = document.getElementById('ksl-guide-cover');\n      if (guide && guide.url && guide.image) {\n        guideLink.href = guide.url;\n        if (guideCover) {\n          guideCover.src = guide.image;\n          guideCover.alt = guide.name;\n        }\n        guideLink.hidden = false;\n      } else {\n        guideLink.hidden = true;\n      }\n    }\n  }\n\n  // Door swatches are no longer inlined on every page (see\n  // btk-style-swatches.js) - warm them here, because THIS page shows colour\n  // chips in the active-context modal. Doing it at load means they are cached\n  // long before anyone opens that modal; the saving is on every OTHER page,\n  // which no longer carries 703 image_url calls it never uses.\n  if (window.BTKStyleSwatchesReady) window.BTKStyleSwatchesReady();\n\n  // Card imagery per (style, colour) is fetched ONE STYLE AT A TIME, on the\n  // first swatch click for that card (see applySwatchToCard). Nothing is warmed\n  // here on purpose: pre-loading all 66 styles is what put this page over the\n  // render timeout in the first place, and most shoppers touch a handful. The\n  // cards already paint from their inline default-colour image.\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n\n})();\n\n\n/* ----------------------------------------------------------\n   SWATCH CLAMPING\n   ---------------------------------------------------------- */\n\nfunction clampSwatchRows(card) {\n  if (card.style.display === 'none') return;\n  if (card.classList.contains('ksl-card--single-colour')) return;\n  var container = card.querySelector('.ksl-swatches-top');\n  if (!container) return;\n  var items = Array.prototype.slice.call(container.querySelectorAll('.ksl-swatch-item'));\n  var moreBtn = container.querySelector('.ksl-swatch-more');\n  if (!items.length) return;\n\n  var swatchSize = 40;\n  var gap = 12;\n  var containerWidth = container.offsetWidth;\n  if (containerWidth === 0) return;\n\n  var cols = Math.max(1, Math.floor((containerWidth + gap) / (swatchSize + gap)));\n  var maxSlots = cols * 2;\n  var total = items.length;\n\n  items.forEach(function (item) { item.hidden = false; });\n\n  if (total > maxSlots && moreBtn) {\n    var visible = maxSlots - 1;\n    for (var i = visible; i < items.length; i++) items[i].hidden = true;\n    moreBtn.textContent = '+' + (total - visible);\n    moreBtn.hidden = false;\n  } else {\n    if (moreBtn) moreBtn.hidden = true;\n  }\n}\n\nfunction clampAllCards() {\n  document.querySelectorAll('.ksl-card').forEach(function (card) {\n    clampSwatchRows(card);\n  });\n}\n\nif (document.readyState === 'loading') {\n  document.addEventListener('DOMContentLoaded', clampAllCards);\n} else {\n  clampAllCards();\n}\n\nvar _clampResizeTimer;\nwindow.addEventListener('resize', function () {\n  clearTimeout(_clampResizeTimer);\n  _clampResizeTimer = setTimeout(clampAllCards, 120);\n}, { passive: true });\n\ndocument.addEventListener('ksl:view-changed', function () {\n  clampAllCards();\n  setTimeout(clampAllCards, 200);\n});\n\n\n/* ----------------------------------------------------------\n   FILTER PANEL TOGGLE (style / colour dropdowns)\n   ---------------------------------------------------------- */\n\n(function () {\n  var panel = document.getElementById('ksl-filterbar-panel');\n  var btnStyle = document.getElementById('ksl-filterbtn-style');\n  var btnColour = document.getElementById('ksl-filterbtn-colour');\n  var labelStyle = document.getElementById('ksl-filterbtn-style-label');\n  var labelColour = document.getElementById('ksl-filterbtn-colour-label');\n  var btnRange = document.getElementById('ksl-filterbtn-range');\n  var labelRange = document.getElementById('ksl-filterbtn-range-label');\n\n  if (!panel || !btnStyle || !btnColour) return;\n\n  var filterBtns = { style: btnStyle, colour: btnColour, range: btnRange };\n\n  function showPanel(which) {\n    var panels = panel.querySelectorAll('[data-ksl-panel]');\n    for (var i = 0; i < panels.length; i++) {\n      panels[i].hidden = (panels[i].getAttribute('data-ksl-panel') !== which);\n    }\n  }\n\n  function setExpanded(which, isOpen) {\n    panel.hidden = !isOpen;\n    if (isOpen) showPanel(which);\n    Object.keys(filterBtns).forEach(function (k) {\n      var b = filterBtns[k];\n      if (!b) return;\n      var on = isOpen && k === which;\n      b.setAttribute('aria-expanded', on ? 'true' : 'false');\n      b.classList.toggle('is-active', on);\n    });\n  }\n\n  function updateRangeButtonText() {\n    if (!btnRange || !labelRange) return;\n    var t = document.querySelector('.ksl-range-tile.is-active');\n    var title = t ? (t.getAttribute('data-range-title') || '') : '';\n    var mobileLabel = btnRange.querySelector('.ksl-filterbtn-label-mobile');\n    labelRange.textContent = title || 'Style Names';\n    if (mobileLabel) mobileLabel.textContent = title ? title.split(' ')[0] : 'Name';\n    btnRange.classList.toggle('has-selection', !!title);\n  }\n\n  function getActiveStyleTiles() {\n    var active = document.querySelectorAll('.ksl-filterbar-tile.is-active');\n    var arr = [];\n    for (var i = 0; i < active.length; i++) {\n      arr.push({\n        title: active[i].getAttribute('data-filter-title') || '',\n        key: active[i].getAttribute('data-filter-key') || ''\n      });\n    }\n    return arr;\n  }\n\n  function getActiveFamilyTiles() {\n    var active = document.querySelectorAll('.ksl-colourfamily-tile.is-active');\n    var arr = [];\n    for (var i = 0; i < active.length; i++) {\n      arr.push({\n        title: active[i].getAttribute('data-family-title') || '',\n        key: active[i].getAttribute('data-family-key') || ''\n      });\n    }\n    return arr;\n  }\n\n  function updateStyleButtonText() {\n    if (!labelStyle) return;\n    var active = getActiveStyleTiles();\n    var mobileLabel = btnStyle.querySelector('.ksl-filterbtn-label-mobile');\n    var desktopText, mobileText;\n    if (active.length === 1 && active[0].title) {\n      var clean = active[0].title.replace(/\\bKitchens\\b/gi, '').trim();\n      desktopText = clean;\n      mobileText  = clean;\n    } else if (active.length > 1) {\n      desktopText = 'Kitchen Style (' + active.length + ')';\n      mobileText  = 'Style (' + active.length + ')';\n    } else {\n      desktopText = 'Kitchen Style';\n      mobileText  = 'Style';\n    }\n    labelStyle.textContent = desktopText;\n    if (mobileLabel) mobileLabel.textContent = mobileText;\n    btnStyle.classList.toggle('has-selection', active.length > 0);\n  }\n\n  function updateColourButtonText() {\n    if (!labelColour) return;\n    var active = getActiveFamilyTiles();\n    if (active.length === 1 && active[0].title) labelColour.textContent = active[0].title;\n    else if (active.length > 1) labelColour.textContent = 'Colour (' + active.length + ')';\n    else labelColour.textContent = 'Colour';\n    btnColour.classList.toggle('has-selection', active.length > 0);\n  }\n\n  document.addEventListener('click', function (e) {\n    var styleBtn = e.target.closest('#ksl-filterbtn-style');\n    var colourBtn = e.target.closest('#ksl-filterbtn-colour');\n\n    if (styleBtn) {\n      e.preventDefault();\n      var openNow = panel.hidden === false && btnStyle.getAttribute('aria-expanded') === 'true';\n      setExpanded('style', !openNow);\n      return;\n    }\n\n    if (colourBtn) {\n      e.preventDefault();\n      var openNow2 = panel.hidden === false && btnColour.getAttribute('aria-expanded') === 'true';\n      setExpanded('colour', !openNow2);\n      return;\n    }\n\n    var rangeBtn = e.target.closest('#ksl-filterbtn-range');\n    if (rangeBtn) {\n      e.preventDefault();\n      var openNow3 = panel.hidden === false && btnRange.getAttribute('aria-expanded') === 'true';\n      setExpanded('range', !openNow3);\n      return;\n    }\n\n    var tileClickedA = e.target.closest('.ksl-filterbar-tile');\n    if (tileClickedA) { setExpanded('style', false); return; }\n\n    var tileClickedB = e.target.closest('.ksl-colourfamily-tile');\n    if (tileClickedB) { setExpanded('colour', false); return; }\n\n    var tileClickedC = e.target.closest('.ksl-range-tile');\n    if (tileClickedC) { setExpanded('range', false); return; }\n\n    if (!panel.hidden) {\n      var clickedInside = e.target.closest('#ksl-filterbar');\n      if (!clickedInside) setExpanded('style', false);\n    }\n  });\n\n  document.addEventListener('keydown', function (e) {\n    if (e.key === 'Escape' && panel.hidden === false) setExpanded('style', false);\n  });\n\n  document.addEventListener('DOMContentLoaded', function () {\n    setExpanded('style', false);\n    updateStyleButtonText();\n    updateColourButtonText();\n    updateRangeButtonText();\n  });\n\n  document.addEventListener('ksl:filters-updated', function () {\n    updateStyleButtonText();\n    updateColourButtonText();\n    updateRangeButtonText();\n  });\n\n})();\n\n\n/* ----------------------------------------------------------\n   FILTER PANEL CAROUSELS\n   ---------------------------------------------------------- */\n\n(function () {\n  function setupCarousel(wrap) {\n    var track = wrap.querySelector('[data-ksl-track]');\n    var prev = wrap.querySelector('[data-ksl-arrow=\"prev\"]');\n    var next = wrap.querySelector('[data-ksl-arrow=\"next\"]');\n    if (!track || !prev || !next) return;\n\n    function updateArrows() {\n      var maxScroll = track.scrollWidth - track.clientWidth;\n      prev.disabled = track.scrollLeft <= 2;\n      next.disabled = track.scrollLeft >= (maxScroll - 2);\n    }\n\n    function scrollByAmount(dir) {\n      var amount = Math.max(240, Math.floor(track.clientWidth * 0.75));\n      track.scrollBy({ left: dir * amount, top: 0, behavior: 'smooth' });\n    }\n\n    prev.addEventListener('click', function (e) { e.preventDefault(); scrollByAmount(-1); });\n    next.addEventListener('click', function (e) { e.preventDefault(); scrollByAmount(1); });\n    track.addEventListener('scroll', updateArrows, { passive: true });\n    window.addEventListener('resize', updateArrows);\n    updateArrows();\n  }\n\n  function init() {\n    var wraps = document.querySelectorAll('[data-ksl-carousel]');\n    for (var i = 0; i < wraps.length; i++) setupCarousel(wraps[i]);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n  else init();\n})();\n\n\n/* ----------------------------------------------------------\n   RESTORE SCROLL TO FILTERBAR (after silo page navigation)\n   ---------------------------------------------------------- */\n\n(function () {\n  var STORAGE_FLAG = 'ksl_restore_to_filterbar';\n\n  document.addEventListener('click', function (e) {\n    var tile = e.target.closest('.ksl-filterbar-tile');\n    if (!tile || tile.tagName !== 'A') return;\n    try { sessionStorage.setItem(STORAGE_FLAG, '1'); } catch (err) {}\n  });\n\n  function restoreToFilterbar() {\n    var shouldRestore = false;\n    try { shouldRestore = sessionStorage.getItem(STORAGE_FLAG) === '1'; } catch (err) {}\n    if (!shouldRestore) return;\n    try { sessionStorage.removeItem(STORAGE_FLAG); } catch (err) {}\n    var bar = document.getElementById('ksl-filterbar');\n    if (!bar) return;\n    setTimeout(function () {\n      var y = bar.getBoundingClientRect().top + window.pageYOffset;\n      window.scrollTo(0, y);\n    }, 0);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', restoreToFilterbar);\n  else restoreToFilterbar();\n})();\n\n\n/* ----------------------------------------------------------\n   GRID / LIST VIEW TOGGLE\n   ---------------------------------------------------------- */\n\n(function () {\n  var STORAGE_KEY = 'ksl_view_mode';\n  var grid = document.getElementById('ksl-grid');\n  if (!grid) return;\n\n  function setButtons(activeView) {\n    var btns = document.querySelectorAll('.ksl-viewbtn');\n    for (var i = 0; i < btns.length; i++) {\n      var isActive = btns[i].getAttribute('data-ksl-view') === activeView;\n      btns[i].classList.toggle('is-active', isActive);\n      btns[i].setAttribute('aria-pressed', isActive ? 'true' : 'false');\n    }\n  }\n\n  function applyView(view) {\n    var v = (view === 'list') ? 'list' : 'grid';\n    grid.classList.remove('is-grid', 'is-list');\n    grid.classList.add(v === 'list' ? 'is-list' : 'is-grid');\n    setButtons(v);\n    try { localStorage.setItem(STORAGE_KEY, v); } catch (e) {}\n    try { document.dispatchEvent(new CustomEvent('ksl:view-changed')); } catch (e) {}\n  }\n\n  function loadView() {\n    var saved = '';\n    try { saved = localStorage.getItem(STORAGE_KEY) || ''; } catch (e) {}\n    applyView(saved);\n  }\n\n  document.addEventListener('click', function (e) {\n    var btn = e.target.closest('.ksl-viewbtn');\n    if (!btn) return;\n    e.preventDefault();\n    applyView(btn.getAttribute('data-ksl-view') || 'grid');\n  });\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', loadView);\n  else loadView();\n})();\n\n\n/* ----------------------------------------------------------\n   START BUYING - CONTEXT + CONFLICT MODAL\n   ---------------------------------------------------------- */\n\n(function () {\n  function n(v) { return (v || '').toString().trim(); }\n\n  function setLocalContext(style, styleName, colour, colourName, carcase) {\n    if (window.BTKKitchen && typeof window.BTKKitchen.set === 'function') {\n      window.BTKKitchen.set({ style: style, styleName: styleName, colour: colour, colourName: colourName, carcase: carcase });\n    }\n  }\n\n  function setCartAttributes(style, styleName, colour, colourName, carcase) {\n    var context = { style: style, styleName: styleName, colour: colour, carcase: carcase };\n    sessionStorage.setItem('btk_kitchen_context', JSON.stringify(context));\n    return fetch('/cart/update.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        attributes: {\n          kitchen_style: style,\n          kitchen_style_name: styleName,\n          kitchen_colour: colour,\n          kitchen_carcase_colour: carcase\n        }\n      })\n    });\n  }\n\n  document.addEventListener('click', function (e) {\n    var link = e.target.closest('[data-ksl-buy]');\n    if (!link) return;\n\n    e.preventDefault();\n\n    var style = n(link.getAttribute('data-style'));\n    var styleName = n(link.getAttribute('data-style-name')) || style;\n    var colour = n(link.getAttribute('data-colour'));\n    var colourName = n(link.getAttribute('data-colour-name')) || colour;\n    var carcase = n(link.getAttribute('data-carcase')) || 'white';\n    var href = link.getAttribute('href') || '/collections/kitchen-units-base-standard';\n\n    var currentContext = JSON.parse(sessionStorage.getItem('btk_kitchen_context') || '{}');\n    var isDifferentStyle = currentContext.style && currentContext.style !== style;\n    var isDifferentColour = currentContext.colour && currentContext.colour !== colour;\n\n    // ONE buying style on the website (Arden, 2026-10-09): no \"swap or add\"\n    // popup - the style chosen replaces the active one and no alternates are\n    // kept. The popup code below is left in place, switched off.\n    var OFFER_SWAP_OR_ADD = false;\n    try { sessionStorage.removeItem('btk_comparison_styles'); sessionStorage.removeItem('btk_style_slots'); } catch (_) {}\n    if (OFFER_SWAP_OR_ADD && currentContext.style && (isDifferentStyle || isDifferentColour)) {\n      var modal = document.getElementById('btkStyleModal');\n\n      function _pretty(h) {\n        return h ? String(h).replace(/-/g, ' ').replace(/\\b\\w/g, function (l) { return l.toUpperCase(); }) : '';\n      }\n\n      var activeDisplayName = (currentContext.styleName || _pretty(currentContext.style)) + ' (' + (currentContext.colourName || _pretty(currentContext.colour)) + ')';\n      document.getElementById('modalActiveName').textContent = activeDisplayName;\n      var modalSubEl = document.getElementById('modalActiveSub');\n      if (modalSubEl) modalSubEl.textContent = _pretty(currentContext.carcase || 'white') + ' cabinet';\n\n      var modalSwatchEl = document.getElementById('modalActiveSwatches');\n      if (modalSwatchEl) {\n        modalSwatchEl.innerHTML = '';\n        var size = 32;\n        var offX = Math.round(size * 0.45);\n        var offY = Math.round(size * 0.3);\n        var styleData = window.BTKStyleData || {};\n        var styleMeta = styleData[currentContext.style];\n        var doorUrl = styleMeta && styleMeta.doorSwatches && styleMeta.doorSwatches[currentContext.colour]\n          ? (styleMeta.doorSwatches[currentContext.colour].swatch || '') : '';\n        var carcaseData = window.BTKCarcaseSwatches || {};\n        var cs = carcaseData[currentContext.carcase] || carcaseData['white'];\n        var carcaseUrl = cs ? (cs.swatch || '') : '';\n\n        if (doorUrl || carcaseUrl) {\n          var wrap = document.createElement('div');\n          wrap.style.cssText = 'position:relative;width:' + (size + offX) + 'px;height:' + (size + offY) + 'px;flex-shrink:0;';\n\n          function _makeSwatchLayer(url, top, left) {\n            var d = document.createElement('div');\n            d.style.cssText = 'position:absolute;top:' + top + 'px;left:' + left + 'px;'\n              + 'width:' + size + 'px;height:' + size + 'px;border-radius:4px;overflow:hidden;'\n              + 'border:1px solid rgba(0,0,0,0.15);box-shadow:1px 1px 4px rgba(0,0,0,0.15);';\n            var img = document.createElement('img');\n            img.src = url;\n            img.style.cssText = 'width:100%;height:100%;object-fit:cover;display:block;';\n            img.alt = '';\n            d.appendChild(img);\n            return d;\n          }\n\n          if (carcaseUrl) wrap.appendChild(_makeSwatchLayer(carcaseUrl, 0, 0));\n          if (doorUrl) wrap.appendChild(_makeSwatchLayer(doorUrl, offY, offX));\n          modalSwatchEl.appendChild(wrap);\n        }\n      }\n\n      modal.style.display = 'flex';\n\n      document.getElementById('modalBtnSwap').onclick = function () {\n        setLocalContext(style, styleName, colour, colourName, carcase);\n        setCartAttributes(style, styleName, colour, colourName, carcase).then(function () {\n          window.location.href = href;\n        });\n      };\n\n      document.getElementById('modalBtnAdd').onclick = function () {\n        var alternates = JSON.parse(sessionStorage.getItem('btk_comparison_styles') || '[]');\n        if (currentContext.style && !alternates.find(function (a) { return a.style === currentContext.style && a.colour === currentContext.colour; })) {\n          alternates.push(currentContext);\n          sessionStorage.setItem('btk_comparison_styles', JSON.stringify(alternates));\n        }\n        setLocalContext(style, styleName, colour, colourName, carcase);\n        setCartAttributes(style, styleName, colour, colourName, carcase).then(function () {\n          window.location.href = href;\n        });\n      };\n\n      return;\n    }\n\n    setLocalContext(style, styleName, colour, colourName, carcase);\n    setCartAttributes(style, styleName, colour, colourName, carcase).then(function () {\n      window.location.href = href;\n    });\n\n  }, true);\n})();\n\n\n/* ----------------------------------------------------------\n   LINKED STYLE TAB SWITCHING\n   ---------------------------------------------------------- */\n\n(function () {\n  function switchTab(card, idx) {\n    var tabIdx = String(idx);\n\n    card.querySelectorAll('.ksl-sc-tab').forEach(function (t) {\n      t.classList.toggle('ksl-sc-tab--active', t.getAttribute('data-tab') === tabIdx);\n    });\n\n    card.querySelectorAll('.ksl-sc-panel').forEach(function (p) {\n      p.classList.toggle('ksl-sc-panel--active', p.getAttribute('data-panel') === tabIdx);\n    });\n\n    var activeTab = card.querySelector('.ksl-sc-tab[data-tab=\"' + tabIdx + '\"]');\n    if (!activeTab) return;\n\n    var heroUrl = activeTab.getAttribute('data-tab-hero') || '';\n    var doorUrl = activeTab.getAttribute('data-tab-door') || '';\n    var styleUrl = activeTab.getAttribute('data-tab-style-url') || '';\n    var colourHandle = activeTab.getAttribute('data-tab-colour') || '';\n\n    var heroImg = card.querySelector('img.ksl-image');\n    if (heroImg && heroUrl) {\n      heroImg.src = heroUrl;\n      heroImg.removeAttribute('srcset');\n      heroImg.removeAttribute('sizes');\n    }\n\n    var doorBlock = card.querySelector('[data-ksl-door-block]');\n    if (doorBlock) {\n      var doorImg = doorBlock.querySelector('img.ksl-door-img');\n      if (doorUrl) {\n        if (!doorImg) {\n          doorImg = document.createElement('img');\n          doorImg.className = 'ksl-door-img';\n          doorImg.alt = '';\n          doorImg.loading = 'lazy';\n          doorImg.decoding = 'async';\n          doorBlock.appendChild(doorImg);\n        }\n        doorImg.src = doorUrl;\n        doorBlock.classList.remove('is-empty');\n      } else {\n        if (doorImg) doorImg.remove();\n        doorBlock.classList.add('is-empty');\n      }\n    }\n\n    if (styleUrl && colourHandle) {\n      var fullUrl = styleUrl + '?colour=' + encodeURIComponent(colourHandle);\n      var imageLink = card.querySelector('a.ksl-image-link');\n      if (imageLink) imageLink.setAttribute('href', fullUrl);\n      var titleLink = card.querySelector('a.ksl-title-link');\n      if (titleLink) titleLink.setAttribute('href', fullUrl);\n    }\n\n    var styleName = activeTab.getAttribute('data-tab-style-name') || '';\n    if (styleName) {\n      var spaceIdx = styleName.indexOf(' ');\n      var titleRest = spaceIdx !== -1 ? styleName.slice(spaceIdx + 1) : '';\n      var titleRestEl = card.querySelector('.ksl-title-rest');\n      if (titleRestEl) titleRestEl.textContent = titleRest ? ' ' + titleRest : '';\n    }\n\n    // The colour name follows the tab's picture. A bespoke tab has no swatch\n    // to set it, so it kept the other tab's colour (\"Fjord\" over an F&B door).\n    var tabColourName = activeTab.getAttribute('data-tab-colour-name') || '';\n    if (tabColourName) {\n      card.querySelectorAll('.ksl-selected-colour').forEach(function (l) { l.textContent = tabColourName; });\n    }\n\n    var tabCollection = activeTab.getAttribute('data-tab-collection') || '';\n    var tabStyleCode = activeTab.getAttribute('data-tab-style-code') || '';\n    if (tabCollection && tabStyleCode) {\n      card.setAttribute('data-collection-handle', tabCollection);\n      card.setAttribute('data-style-code', tabStyleCode);\n      card.querySelectorAll('[data-btk-price-value]').forEach(function (s) { s.hidden = true; });\n      card.querySelectorAll('[data-btk-price-loading]').forEach(function (s) { s.hidden = false; });\n      if (typeof window._btkProcessCard === 'function') window._btkProcessCard(card);\n    }\n\n    var badge = card.querySelector('[data-ksl-also-badge]');\n    if (badge) {\n      var inactiveTab = card.querySelector('.ksl-sc-tab:not(.ksl-sc-tab--active)');\n      if (inactiveTab) {\n        var inactiveLabel = inactiveTab.getAttribute('data-tab') === '0'\n          ? (badge.getAttribute('data-tab-a-label') || '')\n          : (badge.getAttribute('data-tab-b-label') || '');\n        var badgeLabelEl = badge.querySelector('.ksl-also-badge-label');\n        if (badgeLabelEl && inactiveLabel) badgeLabelEl.textContent = inactiveLabel.replace(/ colours/i, '').replace(/ colors/i, '');\n        badge.setAttribute('aria-label', 'Switch to ' + inactiveLabel);\n      }\n    }\n  }\n\n  window._btkSwitchTab = switchTab;\n\n  document.addEventListener('click', function (e) {\n    var badge = e.target.closest('[data-ksl-also-badge]');\n    if (badge) {\n      e.preventDefault();\n      var badgeCard = badge.closest('.ksl-card');\n      if (!badgeCard) return;\n      var inactiveTab = badgeCard.querySelector('.ksl-sc-tab:not(.ksl-sc-tab--active)');\n      if (inactiveTab) switchTab(badgeCard, inactiveTab.getAttribute('data-tab'));\n      return;\n    }\n\n    var tab = e.target.closest('.ksl-sc-tab');\n    if (!tab) return;\n    var card = tab.closest('.ksl-card');\n    if (!card) return;\n    e.preventDefault();\n    e.stopPropagation();\n    switchTab(card, tab.getAttribute('data-tab'));\n  });\n})();\n\n\n/* ----------------------------------------------------------\n   EXAMPLE PRICES\n   Odoo's own example prices (what its kitchen style page shows as\n   \"Example Price for a SMALL KITCHEN\"), from the shop metafield\n   btk.kitchen_example_prices, inlined by the section as\n   window.BTKExamplePrices = { STYLECODE: [{ layout, price, was }, ...] }.\n   The first entry is Odoo's default layout. Same source as the\n   kitchen style page. Replaced (2026-10-02) a sum of the\n   kitchen_example_kit SKU lists, placeholder kits of 1-3 units that\n   showed a complete kitchen at the price of a base unit or two.\n   ---------------------------------------------------------- */\n\n(function () {\n  // Odoo's figures are VAT-inclusive. The site VAT toggle (window.BTKVat)\n  // divides by 1.2 for Exc VAT, the same rule as BTKVat.formatPrice; then\n  // whole pounds, as on the kitchen style page.\n  function incVat() { return !window.BTKVat || window.BTKVat.isIncVat(); }\n  function fmt(n) {\n    return '\\u00a3' + Math.round(incVat() ? n : n / 1.2).toLocaleString('en-GB');\n  }\n\n  function processCard(card) {\n    var styleCode = (card.getAttribute('data-style-code') || '').toUpperCase();\n    var slots = card.querySelectorAll('[data-btk-example-price-inline], [data-btk-example-price-stack]');\n    if (!styleCode || !slots.length) return;\n\n    var list = (window.BTKExamplePrices || {})[styleCode] || [];\n    var chosen = list[0];\n\n    slots.forEach(function (slot) {\n      var loadingEl = slot.querySelector('[data-btk-price-loading]');\n      var valueEl = slot.querySelector('[data-btk-price-value]');\n      var amountEl = slot.querySelector('[data-btk-price-amount]');\n      var suffixEl = slot.querySelector('[data-btk-price-suffix]');\n      var wasEl = slot.querySelector('[data-btk-price-was]');\n\n      if (chosen && chosen.price > 0 && valueEl && amountEl) {\n        slot.hidden = false;\n        if (loadingEl) loadingEl.hidden = true;\n        amountEl.textContent = fmt(chosen.price);\n        if (suffixEl) suffixEl.textContent = 'Example ' + (chosen.layout || 'kitchen') + (incVat() ? ', inc VAT' : ', exc VAT');\n        if (wasEl && chosen.was && chosen.was > chosen.price) {\n          wasEl.innerHTML = 'Was <span class=\"ksl-price-was-value\">' + fmt(chosen.was) + '</span>';\n          wasEl.hidden = false;\n        } else if (wasEl) {\n          wasEl.hidden = true;\n        }\n        // The extra discount is already in chosen.price (the section applies\n        // it to BTKExamplePrices); the flag says so.\n        if (window.BTKExampleXdFlag && !slot.querySelector('.btk-xd-flag')) {\n          var flagHost = slot.querySelector('.ksl-price-bar-left') || valueEl;\n          flagHost.insertAdjacentHTML('beforeend', window.BTKExampleXdFlag);\n        }\n        valueEl.hidden = false;\n      } else {\n        // No example price for this style (yet): no \"loading\" left spinning.\n        slot.hidden = true;\n      }\n    });\n  }\n\n  window._btkProcessCard = processCard;\n\n  function init() {\n    var cards = document.querySelectorAll('.ksl-card[data-collection-handle]');\n    if (!cards.length) return;\n\n    var observer = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        if (!entry.isIntersecting) return;\n        observer.unobserve(entry.target);\n        processCard(entry.target);\n      });\n    }, { rootMargin: '300px' });\n\n    cards.forEach(function (c) { observer.observe(c); });\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n  else init();\n\n  // VAT toggled: redraw the cards already showing a price (the data is\n  // local, so this is instant; cards not yet scrolled to draw on arrival).\n  document.addEventListener('btk:vat:changed', function () {\n    document.querySelectorAll('.ksl-card[data-collection-handle]').forEach(function (card) {\n      if (card.querySelector('[data-btk-price-value]:not([hidden])')) processCard(card);\n    });\n  });\n\nfunction setStyleCarouselColumns() {\n  var carousel = document.querySelector('.ksl-filterpanel--style [data-ksl-track]');\n  if (!carousel) return;\n  var total = carousel.querySelectorAll('.ksl-filterbar-tile').length;\n  var cols = Math.ceil(total / 2);\n  carousel.style.gridTemplateColumns = 'repeat(' + cols + ', max-content)';\n}\n\ndocument.addEventListener('DOMContentLoaded', setStyleCarouselColumns);\n\n\nfunction setStyleCarouselRows() {\n  var carousel = document.querySelector('.ksl-filterpanel--style [data-ksl-track]');\n  if (!carousel) return;\n  carousel.querySelectorAll('.ksl-flex-break').forEach(function(el) { el.remove(); });\n  var tiles = carousel.querySelectorAll('.ksl-filterbar-tile');\n  var total = tiles.length;\n  if (total < 2) return;\n  var breakAfter = Math.ceil(total / 2);\n  var breakEl = document.createElement('div');\n  breakEl.className = 'ksl-flex-break';\n  var targetTile = tiles[breakAfter - 1];\n  if (targetTile.nextSibling) carousel.insertBefore(breakEl, targetTile.nextSibling);\n  else carousel.appendChild(breakEl);\n}\n\ndocument.addEventListener('DOMContentLoaded', setStyleCarouselRows);\n\nfunction stripKitchensFromPills() {\n  document.querySelectorAll('.ksl-filterbar-tile-title').forEach(function(el) {\n    el.textContent = el.textContent.replace(/\\bKitchens\\b/gi, '').trim();\n  });\n  var styleLabel = document.getElementById('ksl-filterbtn-style-label');\n  if (styleLabel) styleLabel.textContent = styleLabel.textContent.replace(/\\bKitchens\\b/gi, '').trim();\n}\n\ndocument.addEventListener('DOMContentLoaded', stripKitchensFromPills);\n\n})();\n"],
  "mappings": "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",
  "names": ["applyAllFilters", "_pretty", "_makeSwatchLayer"]
}
