{
  "version": 3,
  "sources": ["/cdn/shop/t/191/assets/searchanise-widget-drawer.js?nocache=1791451163882"],
  "sourcesContent": ["/**\n * Searchanise instant-search widget, shown inside the Capelli Sport 2.0 search drawer\n * ------------------------------------------------------------------------------------\n * Searchanise's own widget does everything (results, suggestions, categories, pages,\n * analytics). This file only moves its dropdown into the drawer and restyles it with\n * the theme's fonts, pills, product grid and button so it looks like the drawer.\n * The theme's own predictive results are hidden while the widget is showing.\n * The widget sits in its own box next to the theme's results area (the theme\n * redraws that area on every keystroke, so nothing else can live inside it).\n */\n(() => {\n  if (window.__snizeWidgetDrawer) return;\n  window.__snizeWidgetDrawer = true;\n\n  const DRAWER = '#search-drawer';\n  const SLOT_ID = 'snize-drawer-slot';\n  // The drawer only displays elements tagged slot=\"results\", so the widget's box carries that tag too.\n  const THEME_RESULTS = `#search-drawer [slot=\"results\"]:not(#${SLOT_ID})`;\n  const HOST = `#${SLOT_ID}`;\n\n  const css = `\n  /* Theme results hidden while Searchanise's widget is showing in the drawer */\n  ${DRAWER}.snize-hosting [slot=\"results\"]:not(${HOST}) { display: none !important; }\n  ${DRAWER}:not(.snize-hosting) ${HOST} { display: none !important; }\n  ${DRAWER}.snize-hosting ${HOST} { display: block !important; width: 100%; }\n\n  /* The widget, placed in the drawer instead of floating over the page */\n  ${HOST} .snize-ac-results {\n    position: static !important; inset: auto !important; transform: none !important;\n    width: 100% !important; max-width: none !important; min-width: 0 !important;\n    max-height: none !important; height: auto !important; margin: 0 !important;\n    border: 0 !important; box-shadow: none !important; background: transparent !important;\n    z-index: auto !important; overflow: visible !important;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important;\n    color: rgb(28, 28, 28) !important;\n  }\n  ${HOST} .snize-ac-results .snize-dropdown-arrow { display: none !important; }\n  ${HOST} .snize-ac-results-content { padding: 0 !important; background: transparent !important; border: 0 !important; box-shadow: none !important; }\n\n  /* One column: suggestions, products, then collections / pages */\n  ${HOST} .snize-ac-results-columns { display: flex !important; flex-direction: column !important; gap: 28px !important; }\n  ${HOST} .snize-ac-results-column { width: 100% !important; max-width: none !important; padding: 0 !important; border: 0 !important; float: none !important; }\n  ${HOST} .snize-ac-results-columns > .snize-ac-results-column:last-child { order: -1; } /* products after suggestions */\n  ${HOST} .snize-ac-results-columns > .snize-ac-results-column:first-child { display: contents !important; }\n  ${HOST} .snize-ac-results-columns > .snize-ac-results-column:first-child > ul:first-child { order: -2; } /* suggestions first */\n\n  /* Section headings, like \"SUGGESTED SEARCHES\" */\n  ${HOST} .snize-label {\n    display: block !important; width: 100% !important; flex-basis: 100% !important;\n    padding: 0 0 14px !important; margin: 0 !important; border: 0 !important; background: none !important;\n    font-family: var(--heading-font-family, \"industry\", sans-serif) !important;\n    font-weight: 700 !important; font-size: 16px !important; line-height: 1 !important;\n    text-transform: uppercase !important; letter-spacing: 0 !important; color: rgb(28, 28, 28) !important;\n  }\n\n  ${HOST} .snize-ac-results-list, ${HOST} .snize-ac-results-multicolumn-list {\n    list-style: none !important; margin: 0 !important; padding: 0 !important; border: 0 !important;\n  }\n\n  /* Suggestions as the theme's pills */\n  ${HOST} ul:has(> .snize-suggestion) { display: flex !important; flex-wrap: wrap !important; gap: 8px !important; }\n  ${HOST} .snize-suggestion {\n    display: inline-flex !important; align-items: center !important; width: auto !important;\n    padding: 10px 14px !important; margin: 0 !important; border: 1px solid rgba(0, 0, 0, 0.18) !important;\n    border-radius: 999px !important; background: #fff !important; cursor: pointer;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important;\n    font-size: 14px !important; line-height: 14px !important; font-weight: 400 !important; color: rgb(28, 28, 28) !important;\n  }\n  ${HOST} .snize-suggestion b { font-weight: 400 !important; }\n  ${HOST} .snize-suggestion::before, ${HOST} .snize-suggestion::after,\n  ${HOST} .snize-category a::before, ${HOST} .snize-page a::before, ${HOST} .snize-page-icon { display: none !important; content: none !important; background: none !important; }\n  ${HOST} .snize-suggestion, ${HOST} .snize-category a, ${HOST} .snize-page a { background-image: none !important; }\n  ${HOST} .snize-suggestion:hover, ${HOST} .snize-suggestion.snize-ac-over { border-color: rgb(28, 28, 28) !important; background: #fff !important; }\n\n  /* Products as the theme's 3-column grid */\n  ${HOST} .snize-ac-results-multicolumn-list { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 20px 10px !important; }\n  ${HOST} .snize-ac-results-multicolumn-list > .snize-label { grid-column: 1 / -1; }\n  ${HOST} .snize-separator { display: none !important; }\n  ${HOST} .snize-product { max-width: none !important; min-width: 0 !important; width: auto !important; float: none !important; margin: 0 !important; padding: 0 !important; border: 0 !important; background: none !important; }\n  ${HOST} .snize-product .snize-item { width: 100% !important; display: flex !important; flex-direction: column !important; gap: 4px !important; padding: 0 !important; text-decoration: none !important; }\n  ${HOST} .snize-thumbnail { width: 100% !important; height: auto !important; aspect-ratio: 1 / 1; margin: 0 0 8px !important; overflow: hidden; background: #f5f5f5; display: flex !important; align-items: center; justify-content: center; }\n  ${HOST} .snize-thumbnail img { width: 100% !important; height: 100% !important; max-width: none !important; max-height: none !important; object-fit: contain !important; transition: transform .4s ease; }\n  ${HOST} .snize-item:hover .snize-thumbnail img { transform: scale(1.05); }\n  ${HOST} .snize-title {\n    display: -webkit-box !important; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;\n    padding: 0 !important; margin: 0 !important; max-height: none !important;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important;\n    font-size: 14px !important; line-height: 18.2px !important; font-weight: 400 !important; color: rgb(28, 28, 28) !important;\n  }\n  ${HOST} .snize-description, ${HOST} .snize-sku, ${HOST} .snize-reviews { display: none !important; }\n  ${HOST} .snize-price-list { padding: 0 !important; margin: 0 !important; }\n  ${HOST} .snize-price, ${HOST} .snize-price-list .money {\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important;\n    font-size: 14px !important; line-height: 18.2px !important; font-weight: 400 !important; color: rgb(28, 28, 28) !important;\n  }\n  ${HOST} .snize-discounted-price { color: rgba(28, 28, 28, .55) !important; }\n\n  /* Collections and pages as the theme's divided link list */\n  ${HOST} ul:has(> .snize-category), ${HOST} ul:has(> .snize-page) { border-bottom: 1px solid rgba(0, 0, 0, 0.12) !important; }\n  ${HOST} .snize-category, ${HOST} .snize-page {\n    padding: 0 !important; margin: 0 !important; border-top: 1px solid rgba(0, 0, 0, 0.12) !important; background: none !important;\n  }\n  ${HOST} .snize-category a, ${HOST} .snize-page a, ${HOST} .snize-view-all-categories {\n    display: flex !important; align-items: center !important; justify-content: space-between !important;\n    width: 100% !important; box-sizing: border-box; padding: 14px 0 !important; text-decoration: none !important; cursor: pointer;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important;\n    font-size: 14px !important; font-weight: 400 !important; color: rgb(28, 28, 28) !important;\n  }\n  ${HOST} .snize-category a::after, ${HOST} .snize-page a::after { content: \"\\\\2192\"; font-size: 14px; }\n  ${HOST} .snize-category b, ${HOST} .snize-page b { font-weight: 400 !important; }\n  ${HOST} .snize-page-img { display: none !important; }\n  /* Whole name on the left, arrow on the right */\n  ${HOST} .snize-category a, ${HOST} .snize-page a { display: block !important; position: relative !important; padding-right: 24px !important; }\n  ${HOST} .snize-category a::after, ${HOST} .snize-page a::after { position: absolute; right: 0; top: 50%; transform: translateY(-50%); }\n  ${HOST} .snize-page::before, ${HOST} .snize-page a > :not(span), ${HOST} .snize-page a span::before { display: none !important; }\n  /* The widget's \"View all\" button replaces the theme's \"Search for\" button while it's showing */\n  ${DRAWER}.snize-hosting .search-drawer__view-all { display: none !important; }\n\n  /* \"View all N items\" as the theme's black button */\n  ${HOST} .snize-view-all-container { order: 10; border: 0 !important; }\n  ${HOST} .snize-view-all-link {\n    display: flex !important; align-items: center !important; justify-content: center !important;\n    width: 100% !important; padding: 14px 40px !important; margin: 0 !important; border: 0 !important;\n    background: rgb(28, 28, 28) !important; color: #fff !important; cursor: pointer;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important;\n    font-size: 14px !important; text-transform: uppercase !important;\n  }\n  ${HOST} .snize-view-all-link span { color: #fff !important; }\n  ${HOST} .snize-ac-results-arrow { display: none !important; }\n\n  @media (max-width: 699px) {\n    ${HOST} .snize-ac-results-multicolumn-list { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }\n  }\n\n  /* Products fill the drawer width like the theme grid */\n  ${HOST} .snize-ac-results-columns { align-items: stretch !important; }\n  ${HOST} .snize-ac-results-multicolumn-list {\n    width: 100% !important; max-width: none !important; align-self: stretch !important;\n  }\n\n  /* Headings match the theme's (14px, extra bold) */\n  ${HOST} .snize-label { font-size: 14px !important; font-weight: 800 !important; }\n  `;\n\n  const style = document.createElement('style');\n  style.id = 'snize-widget-drawer-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  // Keep the widget's dropdown in its own box, right after the theme's results area.\n  function slot() {\n    const themeResults = document.querySelector(THEME_RESULTS);\n    if (!themeResults || !themeResults.parentElement) return null;\n\n    let box = document.getElementById(SLOT_ID);\n    if (!box) {\n      box = document.createElement('div');\n      box.id = SLOT_ID;\n      box.setAttribute('slot', 'results');\n    }\n\n    // Put the Searchanise box AFTER the theme's results div,\n    // so the theme's search fills its own div, not this one\n    if (box.parentElement !== themeResults.parentElement || themeResults.nextElementSibling !== box) {\n      themeResults.after(box);\n    }\n    return box;\n  }\n\n  let busy = false;\n  function place() {\n    if (busy) return;\n    busy = true;\n    try {\n      const drawer = document.querySelector(DRAWER);\n      const results = document.querySelector('.snize-ac-results');\n      const box = slot();\n      if (!drawer || !box) return;\n      if (results && results.parentElement !== box) box.appendChild(results);\n      const input = drawer.querySelector('input[name=\"q\"]');\n      const showing = !!results && results.style.display !== 'none'\n        && !!(input && input.value.trim()) && !!results.querySelector('li');\n      if (drawer.classList.contains('snize-hosting') !== showing) drawer.classList.toggle('snize-hosting', showing);\n    } finally {\n      busy = false;\n    }\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; place(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style'] });\n  document.addEventListener('input', (e) => { if (e.target.closest && e.target.closest(DRAWER)) schedule(); }, true);\n})();\n\n/* Products / Collections / Pages tabs, like the theme's own search drawer */\n(() => {\n  if (window.__snizeDrawerTabs) return;\n  window.__snizeDrawerTabs = true;\n\n  const HOST = '#snize-drawer-slot';\n  const LABELS = { products: 'Products', collections: 'Collections', pages: 'Pages' };\n  let chosen = 'products'; // the tab the shopper picked (Products unless they click another)\n  let lastQ = '';\n\n  const css = `\n  /* Suggested searches: heading, bold typed text, divider underneath */\n  ${HOST} ul:has(> .snize-suggestion) { order: -3 !important; padding-bottom: 24px !important; border-bottom: 1px solid rgba(0, 0, 0, 0.12) !important; }\n  ${HOST} ul:has(> .snize-suggestion) > .snize-label { font-size: 18px !important; font-weight: 800 !important; padding-bottom: 16px !important; }\n  ${HOST} .snize-suggestion { font-weight: 700 !important; }\n  ${HOST} .snize-suggestion b { font-weight: 400 !important; }\n\n  /* Tabs */\n  ${HOST} .snize-drawer-tabs { order: -2; display: flex; gap: 24px; }\n  ${HOST} .snize-drawer-tabs button {\n    background: none; border: 0; border-bottom: 1px solid transparent; padding: 0 0 4px; margin: 0; cursor: pointer;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px; line-height: 18.2px; color: rgba(28, 28, 28, 0.6);\n  }\n  ${HOST} .snize-drawer-tabs button[aria-selected=\"true\"] { color: rgb(28, 28, 28); border-bottom-color: rgb(28, 28, 28); }\n\n  /* Section labels replaced by the tabs */\n  ${HOST} ul:not(:has(> .snize-suggestion)) > .snize-label { display: none !important; }\n\n  /* Only the active tab's section shows */\n  ${HOST}[data-tab=\"products\"] ul:has(> .snize-category), ${HOST}[data-tab=\"products\"] ul:has(> .snize-page),\n  ${HOST}[data-tab=\"collections\"] .snize-ac-results-multicolumn-list, ${HOST}[data-tab=\"collections\"] ul:has(> .snize-page),\n  ${HOST}[data-tab=\"pages\"] .snize-ac-results-multicolumn-list, ${HOST}[data-tab=\"pages\"] ul:has(> .snize-category) { display: none !important; }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-drawer-tabs-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  function sync() {\n    const box = document.querySelector(HOST);\n    const cols = box && box.querySelector('.snize-ac-results-columns');\n    if (!cols) return;\n\n    // New search -> back to the Products tab\n    const input = document.querySelector('#search-drawer input[name=\"q\"]');\n    const q = input ? input.value.trim() : '';\n    if (q !== lastQ) { lastQ = q; chosen = 'products'; }\n\n    const has = {\n      products: !!box.querySelector('.snize-product'),\n      collections: !!box.querySelector('.snize-category') || !!document.querySelector('#search-drawer .search-drawer__results .predictive-search__collections > a'),\n      pages: [...box.querySelectorAll('.snize-page a')].some((a) => !window.snizePageOk || window.snizePageOk(a.textContent, a.getAttribute('href'), q)),\n    };\n    const available = Object.keys(has).filter((k) => has[k]);\n    // Show the chosen tab; only if it's empty right now, show another one for the moment\n    // (results update mid-typing, so this is never remembered - Products comes back as soon as it has results)\n    const tab = has[chosen] ? chosen : (available[0] || 'products');\n    if (box.dataset.tab !== tab) box.dataset.tab = tab;\n\n    let bar = cols.querySelector(':scope > .snize-drawer-tabs');\n    if (!bar) {\n      bar = document.createElement('div');\n      bar.className = 'snize-drawer-tabs';\n      bar.setAttribute('role', 'tablist');\n      // Keep focus in the search box so the widget stays open\n      bar.addEventListener('mousedown', (e) => e.preventDefault());\n      bar.addEventListener('click', (e) => {\n        const b = e.target.closest('button[data-tab]');\n        if (!b) return;\n        e.preventDefault(); e.stopPropagation();\n        chosen = b.dataset.tab;\n        sync();\n      });\n      cols.appendChild(bar);\n    }\n    const sig = available.join(',') + '|' + tab;\n    if (bar.dataset.sig !== sig) {\n      bar.dataset.sig = sig;\n      bar.innerHTML = available.map((k) =>\n        '<button type=\"button\" role=\"tab\" data-tab=\"' + k + '\" aria-selected=\"' + (k === tab) + '\">' + LABELS[k] + '</button>'\n      ).join('');\n    }\n\n    const label = box.querySelector('ul:has(> .snize-suggestion) > .snize-label');\n    if (label && label.textContent !== 'Suggested searches') label.textContent = 'Suggested searches';\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  document.addEventListener('input', schedule, true);\n})();\n\n/* \"Sorry, nothing found\u2026 Did you mean\" at the top of the drawer, in place of Suggested searches */\n(() => {\n  if (window.__snizeDidYouMean) return;\n  window.__snizeDidYouMean = true;\n\n  const HOST = '#snize-drawer-slot';\n\n  const css = `\n  /* Searchanise's empty \"No categories/pages were found\" lines are never shown */\n  ${HOST} ul:has(> .snize-no-categories-found), ${HOST} ul:has(> .snize-no-pages-found) { display: none !important; }\n\n  /* The message moves out of the product grid to the top */\n  ${HOST} .snize-no-products-found { display: none !important; }\n  ${HOST}[data-dym=\"1\"] ul:has(> .snize-suggestion) { display: none !important; }\n  ${HOST} .snize-drawer-notice { order: -3; padding-bottom: 24px; border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n    font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px; line-height: 1.4; color: rgb(28, 28, 28); }\n  ${HOST}:not([data-dym=\"1\"]) .snize-drawer-notice { display: none !important; }\n  ${HOST} .snize-drawer-notice__title { margin: 0 0 8px; font-family: var(--heading-font-family, \"industry\", sans-serif);\n    font-size: 18px; font-weight: 800; line-height: 1.2; text-transform: uppercase; }\n  ${HOST} .snize-drawer-notice__text { margin: 0 0 16px; }\n  ${HOST} .snize-drawer-notice__pills { display: flex; flex-wrap: wrap; gap: 8px; }\n  ${HOST} .snize-drawer-notice__pills button {\n    display: inline-flex; align-items: center; padding: 10px 14px; margin: 0; cursor: pointer;\n    border: 1px solid rgba(0, 0, 0, 0.18); border-radius: 999px; background: #fff;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px; line-height: 14px; font-weight: 700; color: rgb(28, 28, 28);\n  }\n  ${HOST} .snize-drawer-notice__pills button:hover { border-color: rgb(28, 28, 28); }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-did-you-mean-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const esc = (s) => s.replace(/[&<>\"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]));\n\n  // A pill click runs Searchanise's own (hidden) \"did you mean\" link for that word\n  function searchFor(term) {\n    const link = [...document.querySelectorAll(HOST + ' .snize-did-you-mean a')].find((a) => a.textContent.trim() === term);\n    if (link) link.click();\n  }\n\n  function sync() {\n    const box = document.querySelector(HOST);\n    const cols = box && box.querySelector('.snize-ac-results-columns');\n    if (!cols) return;\n    const src = box.querySelector('.snize-no-products-found');\n    const on = !!src && !src.closest('.snize-hidden');\n    if ((box.dataset.dym === '1') !== on) box.dataset.dym = on ? '1' : '0';\n    if (!on) return;\n\n    const spans = src.querySelectorAll('.snize-no-products-found-text > span');\n    const title = spans[0] ? spans[0].textContent.trim() : '';\n    const showing = spans[1] ? spans[1].textContent.trim() : '';\n    const terms = [...src.querySelectorAll('.snize-did-you-mean a')].map((a) => a.textContent.trim()).filter(Boolean);\n    const sig = title + '|' + showing + '|' + terms.join(',');\n\n    let notice = cols.querySelector(':scope > .snize-drawer-notice');\n    if (!notice) {\n      notice = document.createElement('div');\n      notice.className = 'snize-drawer-notice';\n      notice.addEventListener('mousedown', (e) => { if (e.target.closest('button')) e.preventDefault(); });\n      notice.addEventListener('click', (e) => {\n        const b = e.target.closest('button[data-term]');\n        if (!b) return;\n        e.preventDefault(); e.stopPropagation();\n        searchFor(b.dataset.term);\n      });\n      cols.appendChild(notice);\n    }\n    if (notice.dataset.sig === sig) return;\n    notice.dataset.sig = sig;\n    notice.innerHTML =\n      '<p class=\"snize-drawer-notice__title\">' + esc(title) + '</p>' +\n      (showing || terms.length ? '<p class=\"snize-drawer-notice__text\">' + esc(showing) + (showing && !/[.!?]$/.test(showing) ? '.' : '') + (terms.length ? ' Did you mean:' : '') + '</p>' : '') +\n      (terms.length ? '<div class=\"snize-drawer-notice__pills\">' + terms.map((t) => '<button type=\"button\" data-term=\"' + esc(t) + '\">' + esc(t) + '</button>').join('') + '</div>' : '');\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['class'] });\n  document.addEventListener('input', schedule, true);\n})();\n\n/* Search results page styled like the collection pages */\n(() => {\n  if (window.__snizeResultsPage) return;\n  window.__snizeResultsPage = true;\n\n  const R = '#snize_results';\n  const css = `\n  /* Page: full width, title on the left */\n  .max-w-lg:has(${R}) { max-width: none !important; }\n  .section-stack:has(${R}) > h1 { text-align: left !important; font-size: 48px !important; line-height: 1 !important; font-weight: 800 !important; text-transform: uppercase !important; margin: 0 !important; }\n  .section-stack:has(${R}) { row-gap: 20px !important; }\n  ${R} { font-family: var(--subheading-font-family, \"industry\", sans-serif); }\n  /* Products / Categories / Pages tabs sit right under the title, no divider */\n  ${R} > .snize-main-panel { border-top: 0 !important; padding-top: 0 !important; margin: 0 !important; }\n\n  /* Filters on the left, products on the right */\n  @media (min-width: 1000px) {\n    ${R} { display: grid !important; grid-template-columns: 296px minmax(0, 1fr); column-gap: 28px; width: 100% !important; max-width: none !important; }\n    ${R} > .snize-main-panel, ${R} > .snize-horizontal-wrapper, ${R} > .snize-pagination { grid-column: 1 / -1; }\n    ${R} > .snize-filters-sidebar { grid-column: 1; width: auto !important; float: none !important; margin: 0 !important; padding: 0 !important; }\n    ${R} > .snize-search-results-main-content { grid-column: 2; width: auto !important; float: none !important; margin: 0 !important; }\n  }\n  ${R} .snize-two-columns { display: block !important; width: 100% !important; }\n\n  /* Tabs: Products (112) / Categories (13) / Pages (11) */\n  ${R} .snize-main-panel-controls a { font-size: 14px !important; font-weight: 400 !important; letter-spacing: 0.56px; color: rgba(28, 28, 28, 0.6) !important; text-decoration: none !important; border-bottom: 1px solid transparent !important; padding-bottom: 4px !important; }\n  ${R} .snize-main-panel-controls a.active { color: rgb(28, 28, 28) !important; border-bottom-color: rgb(28, 28, 28) !important; }\n  ${R} .snize-main-panel-controls a span { position: static !important; top: auto !important; bottom: auto !important; vertical-align: baseline !important; line-height: inherit !important; font-size: inherit !important; margin-left: 4px; color: inherit !important; }\n  ${R} .snize-main-panel-controls a span::before { content: \"(\"; }\n  ${R} .snize-main-panel-controls a span::after { content: \")\"; }\n\n  /* Toolbar: results count left, Sort right */\n  ${R} > .snize-horizontal-wrapper { align-items: center !important; margin: 16px 0 24px !important; }\n  ${R} .snize-search-results-header { font-size: 14px !important; letter-spacing: 0.56px; color: rgb(28, 28, 28) !important; }\n  ${R} .snize-search-results-header a { color: inherit !important; }\n  ${R} .snize-main-panel-view-mode { display: none !important; }\n  ${R} .snize-main-panel-dropdown-button { border: 0 !important; background: none !important; font-size: 14px !important; letter-spacing: 0.56px; color: rgb(28, 28, 28) !important; padding: 0 !important; min-width: 0 !important; gap: 6px; }\n\n  /* (Filter sidebar styling lives in the next block) */\n\n  /* Products: 4 across like the collection grid */\n  ${R} ul.snize-search-results-content { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 32px 4px !important; width: 100% !important; margin: 0 !important; padding: 0 !important; }\n  ${R} ul.snize-search-results-content::before, ${R} ul.snize-search-results-content::after { display: none !important; content: none !important; }\n  @media (max-width: 999px) { ${R} ul.snize-search-results-content { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n  ${R} li.snize-product { width: auto !important; max-width: none !important; height: auto !important; margin: 0 !important; padding: 0 !important; border: 0 !important; box-shadow: none !important; background: none !important; }\n  ${R} li.snize-product .snize-view-link, ${R} li.snize-product .snize-item { width: 100% !important; height: auto !important; padding: 0 !important; display: flex !important; flex-direction: column !important; }\n  ${R} .snize-thumbnail-wrapper { width: 100% !important; height: auto !important; margin: 0 !important; padding: 0 !important; }\n  ${R} .snize-thumbnail { display: block !important; position: relative !important; width: 100% !important; height: auto !important; aspect-ratio: 1 / 1; margin: 0 !important; background: #f5f5f5; overflow: hidden; }\n  ${R} .snize-thumbnail img { width: 100% !important; height: 100% !important; max-width: none !important; max-height: none !important; object-fit: contain !important; }\n  ${R} .snize-thumbnail img.snize-flip-image { position: absolute !important; inset: 0 !important; }\n  ${R} .snize-overhidden { padding: 16px 4% 0 2% !important; gap: 4px; text-align: left !important; height: auto !important; }\n  ${R} .snize-title { font-family: var(--subheading-font-family, \"industry\", sans-serif) !important; font-size: 16px !important; line-height: 20.8px !important; font-weight: 400 !important; color: rgb(28, 28, 28) !important; max-height: none !important; padding: 0 !important; margin: 0 !important; }\n  ${R} .snize-description { display: none !important; }\n  ${R} .snize-price-list { justify-content: flex-start !important; padding: 0 !important; margin: 0 !important; }\n  ${R} .snize-price-list, ${R} .snize-price-list .money, ${R} .snize-price { font-size: 16px !important; line-height: 20.8px !important; font-weight: 400 !important; color: rgb(28, 28, 28) !important; }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-results-page-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n})();\n\n/* Search page filters set up exactly like the collection filters */\n(() => {\n  if (window.__snizeCollectionFilters) return;\n  window.__snizeCollectionFilters = true;\n\n  const R = '#snize_results';\n  // Filters to keep, in collection order. Anything not listed here is hidden.\n  const KEEP = {\n    'product type': { order: 1, label: 'Product Type' },\n    // 'availability' is left out on purpose: the \"In stock only\" switch block below replaces it\n    'size':         { order: 3, label: 'Size',  collapse: true },\n    'price':        { order: 4, label: 'Price', collapse: true },\n    'color':        { order: 5, label: 'Color', collapse: true },\n  };\n\n  const css = `\n  /* Sidebar and \"Filters\" heading, as on the collection page */\n  ${R} .snize-filters-sidebar { display: flex !important; flex-direction: column !important; }\n  ${R} .snize-filters-sidebar::before { content: \"Filters\"; order: -1; font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px; letter-spacing: 0.56px; color: rgb(28, 28, 28); padding: 0 0 36px; }\n  ${R} .snize-product-filters-block[data-cf=\"hide\"] { display: none !important; }\n\n  /* Each filter: 58px row, thin divider underneath */\n  ${R} .snize-product-filters-block { border: 0 !important; border-bottom: 1px solid rgb(232, 232, 232) !important; margin: 0 !important; padding: 0 !important; }\n  ${R} .snize-product-filters-title[data-label] {\n    display: flex !important; justify-content: space-between !important; align-items: center !important;\n    min-height: 58px; padding: 0 !important; margin: 0 !important; cursor: pointer;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important; font-size: 14px !important;\n    font-weight: 400 !important; letter-spacing: 0.56px; color: rgb(28, 28, 28) !important;\n  }\n  ${R} .snize-product-filters-title[data-label] > span { display: none !important; }\n  ${R} .snize-product-filters-title[data-label]::before { content: attr(data-label); order: 0; }\n  ${R} .snize-product-filters-title[data-label]:not(.open) { color: rgba(28, 28, 28, 0.6) !important; }\n\n  /* Thin chevron: down when closed, up when open */\n  ${R} .snize-product-filters-title i.snize-product-filters-close {\n    order: 1; width: 7px !important; height: 7px !important; margin: 0 4px 4px 0 !important; background: none !important;\n    border: 0 !important; border-right: 1.5px solid rgb(28, 28, 28) !important; border-bottom: 1.5px solid rgb(28, 28, 28) !important;\n    transform: rotate(45deg); position: static !important; opacity: 1 !important;\n  }\n  ${R} .snize-product-filters-title.open i.snize-product-filters-close { transform: rotate(-135deg); margin: 4px 4px 0 0 !important; }\n  ${R} .snize-product-filters-title i.snize-product-filters-close::before,\n  ${R} .snize-product-filters-title i.snize-product-filters-close::after { display: none !important; content: none !important; }\n\n  /* Options: grey square, label + (count), 33px apart */\n  ${R} .snize-product-filters-list { margin: 0 !important; padding: 0 0 20px 18px !important; }\n  ${R} .snize-product-filters-list li { margin: 0 !important; padding: 0 !important; min-height: 33px; display: flex !important; align-items: center !important; }\n  ${R} .snize-product-filters-list label { display: flex !important; align-items: center !important; gap: 14px; margin: 0 !important; cursor: pointer; }\n  ${R} .snize-product-filters-list label, ${R} .snize-product-filters-list label span {\n    font-family: var(--text-font-family, \"helvetica-neue-lt-pro\", sans-serif) !important; font-size: 14px !important;\n    line-height: 18.2px !important; color: rgb(28, 28, 28) !important;\n  }\n  ${R} .snize-filter-checkbox { width: 14px !important; height: 14px !important; margin: 0 !important; flex: none; }\n  ${R} .snize-filter-checkbox span { display: block !important; width: 14px !important; height: 14px !important; border: 0 !important; border-radius: 2px !important; background: #e5e5e5 !important; }\n  ${R} .snize-filter-checkbox span::before, ${R} .snize-filter-checkbox span::after { display: none !important; }\n  ${R} .snize-filter-checkbox input:checked + span { background: rgb(28, 28, 28) !important; }\n  ${R} .snize-filter-variant-count { display: inline !important; position: static !important; vertical-align: baseline !important; font-size: inherit !important; margin-left: 4px; }\n  ${R} .snize-filter-variant-count::before { content: \"(\"; }\n  ${R} .snize-filter-variant-count::after { content: \")\"; }\n\n  /* \"In stock only\" as a grey switch */\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] { display: flex !important; align-items: center !important; justify-content: space-between !important; min-height: 58px; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-product-filters-title { pointer-events: none; color: rgba(28, 28, 28, 0.6) !important; flex: 1; min-height: 0; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-product-filters-title i { display: none !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-product-filters-list { display: block !important; padding: 0 !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-product-filters-list li { min-height: 0; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-product-filters-list li:not(:first-child) { display: none !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] label > span.needsclick { display: none !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-filter-checkbox { width: 30px !important; height: 14px !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-filter-checkbox span {\n    position: relative !important; width: 30px !important; height: 14px !important; border-radius: 999px !important;\n    background: #e5e5e5 !important; transition: background .2s ease;\n  }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-filter-checkbox span::after {\n    content: \"\" !important; display: block !important; position: absolute; top: 2px; left: 2px; width: 10px; height: 10px;\n    border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(0, 0, 0, .2); transition: transform .2s ease;\n  }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-filter-checkbox input:checked + span { background: rgb(28, 28, 28) !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-filter-checkbox input:checked + span::after { transform: translateX(16px); }\n\n  /* Fixes found on the live page: Searchanise lays titles out right-to-left and has a second \"+\" icon */\n  ${R} .snize-product-filters-title[data-label] { flex-direction: row !important; }\n  ${R} .snize-product-filters-title i.snize-product-filters-open { display: none !important; }\n  ${R} .snize-product-filters-title i.snize-product-filters-close { display: block !important; }\n\n  /* Switch sits on the right of the \"In stock only\" row (Searchanise's own checkbox is hidden over it) */\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-product-filters-title { width: auto !important; flex: 1 1 auto !important; min-width: 0; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-product-filters-list { flex: none !important; width: 30px !important; min-width: 30px; overflow: visible !important; height: auto !important; max-height: none !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-product-filters-list li { display: block !important; width: 30px !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] label { display: block !important; width: 30px !important; position: relative !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-filter-checkbox { position: relative !important; left: auto !important; top: auto !important; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-filter-checkbox input { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; margin: 0 !important; opacity: 0 !important; cursor: pointer; z-index: 1; }\n  ${R} .snize-product-filters-block[data-cf=\"toggle\"] .snize-filter-checkbox span::after { box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.12) !important; }\n\n  /* Active filters: \"Filters\" heading, chips with an x, and a \"Reset filters\" link */\n  ${R} .snize-filters-sidebar:has(> .snize-filters-title)::before { display: none !important; }\n  ${R} .snize-filters-title { order: -1; padding: 0 0 24px !important; margin: 0 !important; border: 0 !important; background: none !important; }\n  ${R} .snize-filters-title > span { display: block; margin: 0 0 16px !important; font-family: var(--subheading-font-family, \"industry\", sans-serif) !important; font-size: 14px !important; font-weight: 400 !important; letter-spacing: 0.56px; color: rgb(28, 28, 28) !important; }\n  ${R} .snize-selected-filters { margin: 0 !important; padding: 0 !important; }\n  ${R} .snize-selected-filters ul { display: flex !important; flex-wrap: wrap !important; align-items: center !important; gap: 8px !important; margin: 0 !important; padding: 0 !important; }\n  ${R} .snize-selected-filters li { margin: 0 !important; }\n  ${R} .snize-selected-filters li.snize-filter-button:not(.snize-clear-all-button) { display: inline-flex !important; align-items: center !important; gap: 8px; padding: 8px 12px !important; border: 1px solid rgba(0, 0, 0, 0.18) !important; border-radius: 999px !important; background: #fff !important; }\n  ${R} .snize-selected-filters .snize-clear-the-filter { font-family: var(--text-font-family, \"helvetica-neue-lt-pro\", sans-serif) !important; font-size: 14px !important; color: rgb(28, 28, 28) !important; }\n  ${R} .snize-selected-filters .snize-clear-icon { display: inline-flex !important; position: relative !important; inset: auto !important; transform: none !important; width: 8px !important; height: 8px !important; line-height: 0 !important; margin: 0 !important; cursor: pointer; }\n  ${R} .snize-selected-filters .snize-clear-icon svg { display: block !important; position: static !important; transform: none !important; width: 8px !important; height: 8px !important; margin: 0 !important; }\n  ${R} .snize-selected-filters .snize-clear-icon path { fill: rgb(28, 28, 28) !important; }\n  ${R} .snize-selected-filters li.snize-clear-all-button { display: inline-flex !important; align-items: center !important; list-style: none !important; margin: 0 0 0 4px !important; }\n  ${R} .snize-product-filters-reset-all { background: none !important; border: 0 !important; padding: 0 !important; margin: 0 !important; cursor: pointer; }\n  ${R} .snize-product-filters-reset-all span { font-family: var(--text-font-family, \"helvetica-neue-lt-pro\", sans-serif) !important; font-size: 14px !important; color: rgb(28, 28, 28) !important; text-decoration: underline; text-underline-offset: 3px; }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-collection-filters-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const collapsed = new Set(); // collapse each filter once per page load, then leave it to the shopper\n\n  function sync() {\n    document.querySelectorAll(R + ' .snize-product-filters-block').forEach((block) => {\n      const title = block.querySelector('.snize-product-filters-title');\n      if (!title) return;\n      const raw = (title.dataset.raw || title.textContent).trim();\n      if (title.dataset.raw !== raw) title.dataset.raw = raw;\n      const key = raw.toLowerCase().replace(/,.*$/, '').trim(); // \"Price, $\" -> \"price\"\n      const cfg = KEEP[key];\n\n      const want = !cfg ? 'hide' : cfg.toggle ? 'toggle' : 'show';\n      if (block.dataset.cf !== want) block.dataset.cf = want;\n      if (!cfg) return;\n\n      const order = String(cfg.order);\n      if (block.style.order !== order) block.style.order = order;\n      if (title.dataset.label !== cfg.label) title.dataset.label = cfg.label;\n\n      if (cfg.collapse && !collapsed.has(key)) {\n        collapsed.add(key);\n        if (title.classList.contains('open')) title.click();\n      }\n    });\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  schedule();\n})();\n\n/* \"In stock only\": a real on/off switch that stays in the sidebar, like the collection page */\n(() => {\n  if (window.__snizeStockToggle) return;\n  window.__snizeStockToggle = true;\n\n  const R = '#snize_results';\n  const CHIP = R + ' .snize-clear-icon[data-se-facet-attribute=\"stock_status\"]';\n\n  const css = `\n  /* Searchanise's own Availability box and its \"In Stock\" chip are replaced by the switch */\n  ${R} .snize-product-filters-block:has(.snize-product-filters-title[data-raw=\"Availability\"]) { display: none !important; }\n  ${R} .snize-selected-filters li.snize-filter-button:has(.snize-clear-icon[data-se-facet-attribute=\"stock_status\"]) { display: none !important; }\n\n  ${R} .snize-stock-toggle {\n    order: 2; display: flex !important; align-items: center !important; justify-content: space-between !important; width: 100% !important;\n    min-height: 58px !important; height: auto !important; padding: 0 !important; margin: 0 !important;\n    border: 0 !important; border-bottom: 1px solid rgb(232, 232, 232) !important; border-radius: 0 !important;\n    background: none !important; box-shadow: none !important; cursor: pointer; text-align: left; text-transform: none !important;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important; font-size: 14px !important; font-weight: 400 !important;\n    letter-spacing: 0.56px !important; line-height: normal !important; color: rgba(28, 28, 28, 0.6) !important;\n  }\n  ${R} .snize-stock-toggle::before, ${R} .snize-stock-toggle::after { display: none !important; content: none !important; }\n  ${R} .snize-stock-toggle__switch { position: relative; width: 30px; height: 14px; border-radius: 999px; background: #e5e5e5; transition: background .2s ease; flex: none; }\n  ${R} .snize-stock-toggle__switch::after {\n    content: \"\"; position: absolute; top: 2px; left: 2px; width: 10px; height: 10px; border-radius: 50%;\n    background: #fff; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.12); transition: transform .2s ease;\n  }\n  ${R} .snize-stock-toggle[aria-checked=\"true\"] { color: rgb(28, 28, 28) !important; }\n  ${R} .snize-stock-toggle[aria-checked=\"true\"] .snize-stock-toggle__switch { background: rgb(28, 28, 28); }\n  ${R} .snize-stock-toggle[aria-checked=\"true\"] .snize-stock-toggle__switch::after { transform: translateX(16px); box-shadow: none; }\n  ${R} .snize-stock-toggle.is-busy { pointer-events: none; }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-stock-toggle-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const isOn = () => !!document.querySelector(CHIP);\n\n  // Drives Searchanise's own In Stock filter behind the scenes\n  function flip() {\n    const chip = document.querySelector(CHIP);\n    if (chip) { chip.click(); return true; } // on -> off: remove the In Stock filter\n    const input = [...document.querySelectorAll(R + ' .snize-product-filters-block')]\n      .filter((b) => /availability/i.test((b.querySelector('.snize-product-filters-title') || {}).textContent || ''))\n      .map((b) => b.querySelector('input[type=\"checkbox\"]'))[0];\n    if (input) { input.click(); return true; } // off -> on: tick the In Stock box\n    return false;\n  }\n\n  function sync() {\n    const sidebar = document.querySelector(R + ' .snize-filters-sidebar');\n    if (!sidebar) return;\n    let btn = sidebar.querySelector(':scope > .snize-stock-toggle');\n    if (!btn) {\n      btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'snize-stock-toggle';\n      btn.setAttribute('role', 'switch');\n      btn.innerHTML = '<span>In stock only</span><span class=\"snize-stock-toggle__switch\" aria-hidden=\"true\"></span>';\n      btn.addEventListener('click', () => {\n        const next = !isOn();\n        if (flip()) {\n          btn.setAttribute('aria-checked', String(next)); // show the new state straight away\n          btn.classList.add('is-busy');\n          setTimeout(() => btn.classList.remove('is-busy'), 1500);\n        }\n      });\n      sidebar.appendChild(btn);\n    }\n    if (btn.classList.contains('is-busy')) return;\n    const on = String(isOn());\n    if (btn.getAttribute('aria-checked') !== on) btn.setAttribute('aria-checked', on);\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  schedule();\n})();\n\n/* Page title becomes 'Search results for \"sock\"'; Searchanise's \"Showing 26 results for\u2026\" line is hidden */\n(() => {\n  if (window.__snizeResultsTitle) return;\n  window.__snizeResultsTitle = true;\n\n  const R = '#snize_results';\n  const style = document.createElement('style');\n  style.id = 'snize-results-title-style';\n  style.textContent = `${R} .snize-search-results-header { display: none !important; }`;\n  document.head.appendChild(style);\n\n  function sync() {\n    const h1 = document.querySelector('.section-stack:has(' + R + ') > h1');\n    if (!h1) return;\n    if (!h1.dataset.base) h1.dataset.base = h1.textContent.trim(); // \"Search results\"\n    const q = (new URLSearchParams(location.search).get('q') || '').trim();\n    const text = q ? h1.dataset.base + ' for \"' + q + '\"' : h1.dataset.base;\n    if (h1.textContent !== text) h1.textContent = text;\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  window.addEventListener('popstate', schedule);\n  schedule();\n})();\n\n/* Drawer \"Collections\" tab: top 5 collections with images (from the theme's own search), plus \"View more collections\" */\n(() => {\n  if (window.__snizeDrawerCollections) return;\n  window.__snizeDrawerCollections = true;\n\n  const HOST = '#snize-drawer-slot';\n  const THEME = '#search-drawer .search-drawer__results .predictive-search__collections';\n  const MAX = 5;\n\n  const css = `\n  /* The theme's collection results (with images) replace Searchanise's plain list */\n  ${HOST}[data-tab=\"collections\"] ul:has(> .snize-category) { display: none !important; }\n  ${HOST}:not([data-tab=\"collections\"]) .snize-drawer-collections { display: none !important; }\n  ${HOST} .snize-drawer-collections { order: 0; display: flex; flex-direction: column; }\n  ${HOST} .snize-drawer-collections__item {\n    display: flex; align-items: center; gap: 16px; padding: 12px 0; text-decoration: none; color: rgb(28, 28, 28);\n    border-top: 1px solid rgba(0, 0, 0, 0.12);\n    font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px;\n  }\n  ${HOST} .snize-drawer-collections__item:last-of-type { border-bottom: 1px solid rgba(0, 0, 0, 0.12); }\n  ${HOST} .snize-drawer-collections__img { width: 64px; height: 64px; flex: none; overflow: hidden; background: #f5f5f5; }\n  ${HOST} .snize-drawer-collections__img img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .4s ease; }\n  ${HOST} .snize-drawer-collections__item:hover img { transform: scale(1.05); }\n  ${HOST} .snize-drawer-collections__name { flex: 1; }\n  ${HOST} .snize-drawer-collections__item::after { content: \"\\\\2192\"; font-size: 14px; }\n  ${HOST} .snize-drawer-collections__more {\n    align-self: flex-start; margin-top: 16px; color: rgb(28, 28, 28); text-decoration: underline; text-underline-offset: 3px;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px;\n  }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-drawer-collections-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const esc = (s) => String(s).replace(/[&<>\"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]));\n\n  function sync() {\n    const box = document.querySelector(HOST);\n    const cols = box && box.querySelector('.snize-ac-results-columns');\n    if (!cols) return;\n    const input = document.querySelector('#search-drawer input[name=\"q\"]');\n    const q = input ? input.value.trim() : '';\n    const items = [...document.querySelectorAll(THEME + ' > a')].slice(0, MAX).map((a) => {\n      const img = a.querySelector('img');\n      return { href: a.getAttribute('href'), name: a.textContent.trim(), src: img ? (img.currentSrc || img.src) : '', alt: img ? img.alt : '' };\n    });\n    const sig = q + '|' + items.map((i) => i.href).join(',');\n    let panel = cols.querySelector(':scope > .snize-drawer-collections');\n    if (!panel) { panel = document.createElement('div'); panel.className = 'snize-drawer-collections'; cols.appendChild(panel); }\n    if (panel.dataset.sig === sig) return;\n    panel.dataset.sig = sig;\n    // \"View more collections\" opens the search results page on its Categories tab\n    const more = '/pages/search-results-page?q=' + encodeURIComponent(q) + '&tab=categories';\n    panel.innerHTML = items.map((i) =>\n      '<a class=\"snize-drawer-collections__item\" href=\"' + esc(i.href) + '\">' +\n        '<span class=\"snize-drawer-collections__img\">' + (i.src ? '<img src=\"' + esc(i.src) + '\" alt=\"' + esc(i.alt) + '\" loading=\"lazy\">' : '') + '</span>' +\n        '<span class=\"snize-drawer-collections__name\">' + esc(i.name) + '</span></a>'\n    ).join('') + (items.length ? '<a class=\"snize-drawer-collections__more\" href=\"' + esc(more) + '\">View more collections</a>' : '');\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  document.addEventListener('input', schedule, true);\n})();\n\n/* Drawer \"Pages\" tab: a grid of cards (image above title) like the products, plus \"View more pages\" */\n(() => {\n  if (window.__snizeDrawerPages) return;\n  window.__snizeDrawerPages = true;\n\n  const HOST = '#snize-drawer-slot';\n  const MAX = 6;\n  const CACHE_DAYS = 7;\n\n  const css = `\n  ${HOST}[data-tab=\"pages\"] ul:has(> .snize-page) { display: none !important; }\n  ${HOST}:not([data-tab=\"pages\"]) .snize-drawer-pages { display: none !important; }\n  ${HOST} .snize-drawer-pages { order: 0; }\n  ${HOST} .snize-drawer-pages__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px 10px; }\n  @media (max-width: 699px) { ${HOST} .snize-drawer-pages__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n  ${HOST} .snize-drawer-pages__item { display: flex; flex-direction: column; gap: 8px; text-decoration: none; color: rgb(28, 28, 28); }\n  ${HOST} .snize-drawer-pages__img { display: block; aspect-ratio: 7 / 4; overflow: hidden; background: #f5f5f5; }\n  ${HOST} .snize-drawer-pages__img img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .4s ease; }\n  ${HOST} .snize-drawer-pages__item:hover img { transform: scale(1.05); }\n  ${HOST} .snize-drawer-pages__title {\n    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px; line-height: 18.2px;\n  }\n  ${HOST} .snize-drawer-pages__more {\n    display: inline-block; margin-top: 20px; color: rgb(28, 28, 28); text-decoration: underline; text-underline-offset: 3px;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px;\n  }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-drawer-pages-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const esc = (s) => String(s).replace(/[&<>\"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]));\n  const path = (u) => { try { return new URL(u, location.origin).pathname.replace(/\\/$/, ''); } catch (e) { return u; } };\n  const fallback = (document.querySelector('meta[property=\"og:image\"]') || {}).content || ''; // the store's sharing image\n  // Ask Shopify's CDN for a properly sized image (Searchanise gives tiny 160px \"_compact\" thumbnails)\n  const sized = (src, w) => {\n    if (!src) return src;\n    try {\n      const u = new URL(src, location.origin);\n      if (!/\\/cdn\\/shop\\/|cdn\\.shopify\\.com/.test(u.href)) return src;\n      u.pathname = u.pathname.replace(/_(pico|icon|thumb|small|compact|medium|large|grande|original|master|\\d+x\\d*|x\\d+)(?=\\.(jpe?g|png|gif|webp)$)/i, '');\n      u.searchParams.delete('height');\n      u.searchParams.set('width', w);\n      return u.href;\n    } catch (e) { return src; }\n  };\n\n  // Image per page path, remembered in the shopper's browser for a week so each page is only read once\n  const KEY = 'snize-page-images';\n  let images = {};\n  try {\n    const saved = JSON.parse(localStorage.getItem(KEY) || '{}');\n    const fresh = Date.now() - CACHE_DAYS * 864e5;\n    Object.keys(saved).forEach((k) => { if (saved[k].t > fresh) images[k] = saved[k]; });\n  } catch (e) { images = {}; }\n  const save = () => { try { localStorage.setItem(KEY, JSON.stringify(images)); } catch (e) {} };\n  const known = (p) => Object.prototype.hasOwnProperty.call(images, p);\n  const remember = (p, src) => { images[p] = { src: src || '', t: Date.now() }; };\n\n  // 1. Quick: Shopify's search API gives blog posts their image, and pages their content\n  async function quickLookup(q) {\n    try {\n      const r = await fetch('/search/suggest.json?q=' + encodeURIComponent(q) + '&resources[type]=article,page&resources[limit]=10');\n      const res = (await r.json()).resources.results;\n      (res.articles || []).forEach((a) => {\n        const src = a.image || (a.featured_image && a.featured_image.url) || '';\n        if (src && !(known(path(a.url)) && images[path(a.url)].src)) remember(path(a.url), src);\n      });\n      (res.pages || []).forEach((p) => {\n        const img = new DOMParser().parseFromString(p.body || '', 'text/html').querySelector('img');\n        if (img && img.getAttribute('src') && !(known(path(p.url)) && images[path(p.url)].src)) remember(path(p.url), img.getAttribute('src'));\n      });\n    } catch (e) {}\n  }\n\n  // 2. Thorough: read the page itself and take the first image in its content (stops reading once found)\n  async function pageLookup(url) {\n    const p = path(url);\n    try {\n      const res = await fetch(url, { credentials: 'same-origin' });\n      const reader = res.body.getReader();\n      const dec = new TextDecoder();\n      let buf = '';\n      let found = '';\n      for (;;) {\n        const { done, value } = await reader.read();\n        if (done) break;\n        buf += dec.decode(value, { stream: true });\n        const at = buf.search(/id=\"shopify-section-template--/); // the page's own content, after the header and menus\n        if (at < 0) continue;\n        const re = /<img\\b[^>]*>/gi;\n        const part = buf.slice(at);\n        let m;\n        while ((m = re.exec(part))) {\n          const tag = m[0];\n          const src = (tag.match(/\\ssrc=\"([^\"]+)\"/) || [])[1] || '';\n          const set = ((tag.match(/\\ssrcset=\"([^\"]+)\"/) || [])[1] || '').split(',').pop().trim().split(' ')[0];\n          const cand = [src, set].find((c) => c && !/^data:|\\.svg|icon|logo/i.test(c));\n          if (cand) { found = cand.replace(/&amp;/g, '&'); break; }\n        }\n        if (found) { reader.cancel(); break; }\n      }\n      remember(p, found);\n    } catch (e) { remember(p, ''); }\n  }\n\n  let lastQ = null;\n  let pending = 0;\n\n  async function sync() {\n    const box = document.querySelector(HOST);\n    const cols = box && box.querySelector('.snize-ac-results-columns');\n    if (!cols) return;\n    const input = document.querySelector('#search-drawer input[name=\"q\"]');\n    const q = input ? input.value.trim() : '';\n    const items = [...box.querySelectorAll('.snize-page a')]\n      .filter((a) => !window.snizePageOk || window.snizePageOk(a.textContent, a.getAttribute('href'), q)) // title must contain the search\n      .slice(0, MAX).map((a) => ({\n      href: a.getAttribute('href'), title: a.textContent.trim().replace(/\\s+/g, ' '),\n    })).filter((i) => i.href);\n\n    let panel = cols.querySelector(':scope > .snize-drawer-pages');\n    if (!panel) { panel = document.createElement('div'); panel.className = 'snize-drawer-pages'; cols.appendChild(panel); }\n\n    // Images are only looked up once someone opens the Pages tab\n    if (q && q !== lastQ && box.dataset.tab === 'pages') {\n      lastQ = q;\n      const ticket = ++pending;\n      await quickLookup(q);\n      const missing = items.filter((i) => !known(path(i.href))); // not looked up yet (or cache expired)\n      await Promise.all(missing.map((i) => pageLookup(i.href)));\n      save();\n      if (ticket !== pending) return; // a newer search has started\n      panel.dataset.sig = '';\n    }\n\n    const srcOf = (i) => sized((known(path(i.href)) && images[path(i.href)].src) || fallback, 800);\n    const sig = q + '|' + items.map((i) => i.href + '=' + srcOf(i)).join(',');\n    if (panel.dataset.sig === sig) return;\n    panel.dataset.sig = sig;\n    const more = '/pages/search-results-page?q=' + encodeURIComponent(q) + '&tab=pages';\n    panel.innerHTML = items.length\n      ? '<div class=\"snize-drawer-pages__grid\">' + items.map((i) => {\n          const src = srcOf(i);\n          return '<a class=\"snize-drawer-pages__item\" href=\"' + esc(i.href) + '\">' +\n            '<span class=\"snize-drawer-pages__img\">' + (src ? '<img src=\"' + esc(src) + '\" alt=\"\" loading=\"lazy\">' : '') + '</span>' +\n            '<span class=\"snize-drawer-pages__title\">' + esc(i.title) + '</span></a>';\n        }).join('') + '</div><a class=\"snize-drawer-pages__more\" href=\"' + esc(more) + '\">View more pages</a>'\n      : '';\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['data-tab'] });\n  document.addEventListener('input', schedule, true);\n})();\n\n/* Collections and Pages tabs: divider above the button, which reads VIEW ALL \"<search>\" ITEMS */\n(() => {\n  if (window.__snizeViewAllLabel) return;\n  window.__snizeViewAllLabel = true;\n\n  const HOST = '#snize-drawer-slot';\n  const css = `\n  ${HOST}[data-tab=\"collections\"] .snize-view-all-container,\n  ${HOST}[data-tab=\"pages\"] .snize-view-all-container { border-top: 1px solid rgba(0, 0, 0, 0.12) !important; padding-top: 28px !important; }\n  ${HOST}[data-tab=\"collections\"] .snize-view-all-link[data-label] > span,\n  ${HOST}[data-tab=\"pages\"] .snize-view-all-link[data-label] > span { display: none !important; }\n  ${HOST}[data-tab=\"collections\"] .snize-view-all-link[data-label]::before,\n  ${HOST}[data-tab=\"pages\"] .snize-view-all-link[data-label]::before { content: attr(data-label); }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-view-all-label-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  function sync() {\n    const link = document.querySelector(HOST + ' .snize-view-all-link');\n    if (!link) return;\n    const input = document.querySelector('#search-drawer input[name=\"q\"]');\n    const q = input ? input.value.trim() : '';\n    const label = q ? 'View all \"' + q + '\" items' : '';\n    if (label && link.dataset.label !== label) link.dataset.label = label;\n    if (!label && link.hasAttribute('data-label')) link.removeAttribute('data-label');\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  document.addEventListener('input', schedule, true);\n})();\n\n/* Search results page: Categories tab as a list with images, Pages tab as an image grid (like the drawer) */\n(() => {\n  if (window.__snizeResultsTabs) return;\n  window.__snizeResultsTabs = true;\n\n  const R = '#snize_results';\n  const CACHE_DAYS = 7;\n\n  const css = `\n  /* No filters or Sort on these tabs; content uses the full width */\n  ${R}[data-tab=\"categories\"] > .snize-filters-sidebar, ${R}[data-tab=\"pages\"] > .snize-filters-sidebar,\n  ${R}[data-tab=\"categories\"] > .snize-horizontal-wrapper, ${R}[data-tab=\"pages\"] > .snize-horizontal-wrapper { display: none !important; }\n  ${R}[data-tab=\"categories\"] > .snize-search-results-main-content, ${R}[data-tab=\"pages\"] > .snize-search-results-main-content { grid-column: 1 / -1 !important; margin-top: 24px !important; }\n  ${R}[data-tab=\"categories\"] .snize-search-results-main-content > div, ${R}[data-tab=\"pages\"] .snize-search-results-main-content > div { display: block !important; width: 100% !important; }\n\n  /* Collections: image cards like the Pages tab but smaller - 6 across on desktop, 3 on tablet, 2 on mobile */\n  ${R}[data-tab=\"categories\"] ul.snize-search-results-content { grid-template-columns: repeat(6, minmax(0, 1fr)) !important; gap: 28px 10px !important; }\n  @media (max-width: 999px) { ${R}[data-tab=\"categories\"] ul.snize-search-results-content { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; } }\n  @media (max-width: 699px) { ${R}[data-tab=\"categories\"] ul.snize-search-results-content { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; } }\n  ${R}[data-tab=\"categories\"] li.snize-category { margin: 0 !important; padding: 0 !important; border: 0 !important; background: none !important; width: auto !important; height: auto !important; }\n  ${R}[data-tab=\"categories\"] li.snize-category .snize-view-link,\n  ${R}[data-tab=\"categories\"] li.snize-category .snize-item { display: flex !important; flex-direction: column !important; align-items: stretch !important; gap: 10px; padding: 0 !important; height: auto !important; width: 100% !important; text-decoration: none !important; }\n  ${R}[data-tab=\"categories\"] li.snize-category .snize-overhidden { display: flex !important; flex-direction: row !important; align-items: flex-start !important; justify-content: space-between !important; gap: 8px; padding: 0 !important; }\n  ${R}[data-tab=\"categories\"] li.snize-category .snize-title { font-family: var(--subheading-font-family, \"industry\", sans-serif) !important; font-size: 14px !important; line-height: 18px !important; text-transform: uppercase !important; letter-spacing: 0.56px !important; color: rgb(28, 28, 28) !important; margin: 0 !important; padding: 0 !important; }\n  ${R}[data-tab=\"categories\"] li.snize-category .snize-overhidden::after, ${R}[data-tab=\"categories\"] li.snize-category .snize-item::after { display: none !important; content: none !important; }\n  ${R}[data-tab=\"categories\"] li.snize-category:hover .snize-title { text-decoration: underline; text-underline-offset: 3px; }\n  ${R}[data-tab=\"categories\"] .snize-x-img { display: block; width: 100%; aspect-ratio: 1 / 1; overflow: hidden; background: #f5f5f5; }\n\n  /* Pages: cards with a landscape image above the title, four across */\n  ${R}[data-tab=\"pages\"] ul.snize-search-results-content { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; gap: 32px 10px !important; }\n  @media (max-width: 999px) { ${R}[data-tab=\"pages\"] ul.snize-search-results-content { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; } }\n  ${R}[data-tab=\"pages\"] li.snize-page, ${R}[data-tab=\"pages\"] li.snize-product { margin: 0 !important; padding: 0 !important; border: 0 !important; background: none !important; width: auto !important; height: auto !important; }\n  ${R}[data-tab=\"pages\"] .snize-view-link, ${R}[data-tab=\"pages\"] .snize-item { display: flex !important; flex-direction: column !important; gap: 12px; padding: 0 !important; height: auto !important; width: 100% !important; text-decoration: none !important; }\n  ${R}[data-tab=\"pages\"] .snize-thumbnail-wrapper { display: none !important; }\n  ${R}[data-tab=\"pages\"] .snize-overhidden { padding: 0 !important; }\n  ${R}[data-tab=\"pages\"] .snize-title { font-family: var(--subheading-font-family, \"industry\", sans-serif) !important; font-size: 16px !important; line-height: 20.8px !important; color: rgb(28, 28, 28) !important; margin: 0 !important; padding: 0 !important; }\n  ${R}[data-tab=\"pages\"] .snize-description { display: none !important; }\n  ${R}[data-tab=\"pages\"] .snize-x-img { display: block; width: 100%; aspect-ratio: 7 / 4; overflow: hidden; background: #f5f5f5; }\n\n  ${R} .snize-x-img img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .4s ease; }\n  ${R} .snize-view-link:hover .snize-x-img img { transform: scale(1.05); }\n  ${R}:not([data-tab=\"categories\"]):not([data-tab=\"pages\"]) .snize-x-img { display: none !important; }\n  /* Clean-ups: hide Searchanise's own blog thumbnail, left-align titles, images fill their box */\n  ${R}[data-tab=\"pages\"] .snize-item > .snize-thumbnail { display: none !important; }\n  ${R}[data-tab=\"pages\"] .snize-item { align-items: stretch !important; }\n  ${R}[data-tab=\"pages\"] .snize-overhidden, ${R}[data-tab=\"categories\"] .snize-overhidden { align-items: flex-start !important; justify-content: flex-start !important; text-align: left !important; }\n  ${R} .snize-x-img { margin: 0 !important; }\n  ${R} .snize-x-img img { margin: 0 !important; padding: 0 !important; position: static !important; transform: none !important; max-width: none !important; max-height: none !important; width: 100% !important; height: 100% !important; object-fit: cover !important; }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-results-tabs-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const path = (u) => { try { return new URL(u, location.origin).pathname.replace(/\\/$/, ''); } catch (e) { return u; } };\n  const fallback = (document.querySelector('meta[property=\"og:image\"]') || {}).content || '';\n  // Ask Shopify's CDN for a properly sized image (Searchanise gives tiny 160px \"_compact\" thumbnails)\n  const sized = (src, w) => {\n    if (!src) return src;\n    try {\n      const u = new URL(src, location.origin);\n      if (!/\\/cdn\\/shop\\/|cdn\\.shopify\\.com/.test(u.href)) return src;\n      u.pathname = u.pathname.replace(/_(pico|icon|thumb|small|compact|medium|large|grande|original|master|\\d+x\\d*|x\\d+)(?=\\.(jpe?g|png|gif|webp)$)/i, '');\n      u.searchParams.delete('height');\n      u.searchParams.set('width', w);\n      return u.href;\n    } catch (e) { return src; }\n  };\n\n  // Image caches in the shopper's browser (pages share the drawer's cache)\n  const load = (key) => {\n    try {\n      const saved = JSON.parse(localStorage.getItem(key) || '{}');\n      const fresh = Date.now() - CACHE_DAYS * 864e5;\n      const out = {};\n      Object.keys(saved).forEach((k) => { if (saved[k].t > fresh) out[k] = saved[k]; });\n      return out;\n    } catch (e) { return {}; }\n  };\n  const store = (key, obj) => { try { localStorage.setItem(key, JSON.stringify(obj)); } catch (e) {} };\n  const pageImgs = load('snize-page-images');\n  const collImgs = load('snize-collection-images');\n\n  // Collection image = its first product's photo (collections here have no image of their own)\n  async function collectionImage(href) {\n    const p = path(href);\n    if (collImgs[p]) return collImgs[p].src;\n    let src = '';\n    try {\n      const r = await fetch(p + '/products.json?limit=1');\n      const prod = (await r.json()).products[0];\n      src = prod && prod.images && prod.images[0] ? prod.images[0].src : '';\n    } catch (e) {}\n    collImgs[p] = { src, t: Date.now() };\n    store('snize-collection-images', collImgs);\n    return src;\n  }\n\n  // Page image = first image in the page's own content (stops reading once found)\n  async function pageImage(href) {\n    const p = path(href);\n    if (pageImgs[p]) return pageImgs[p].src;\n    let found = '';\n    try {\n      const res = await fetch(p, { credentials: 'same-origin' });\n      const reader = res.body.getReader();\n      const dec = new TextDecoder();\n      let buf = '';\n      for (;;) {\n        const { done, value } = await reader.read();\n        if (done) break;\n        buf += dec.decode(value, { stream: true });\n        const at = buf.search(/id=\"shopify-section-template--/);\n        if (at < 0) continue;\n        const re = /<img\\b[^>]*>/gi;\n        const part = buf.slice(at);\n        let m;\n        while ((m = re.exec(part))) {\n          const tag = m[0];\n          const src = (tag.match(/\\ssrc=\"([^\"]+)\"/) || [])[1] || '';\n          const set = ((tag.match(/\\ssrcset=\"([^\"]+)\"/) || [])[1] || '').split(',').pop().trim().split(' ')[0];\n          const cand = [src, set].find((c) => c && !/^data:|\\.svg|icon|logo/i.test(c));\n          if (cand) { found = cand.replace(/&amp;/g, '&'); break; }\n        }\n        if (found) { reader.cancel(); break; }\n      }\n    } catch (e) {}\n    pageImgs[p] = { src: found, t: Date.now() };\n    store('snize-page-images', pageImgs);\n    return found;\n  }\n\n  // Sharp images on every screen: the browser picks the right size from a set (incl. high-res / retina screens)\n  const SIZES = {\n    categories: '(min-width: 1000px) 17vw, (min-width: 700px) 33vw, 50vw',\n    pages: '(min-width: 1000px) 25vw, 50vw',\n  };\n  const setImg = (holder, src, w, kind) => {\n    const base = src || fallback;\n    const want = sized(base, w);\n    const img = holder.querySelector('img');\n    if (img && img.getAttribute('src') === want) return;\n    if (!want) { holder.innerHTML = ''; return; }\n    const set = want === base ? '' : [400, 600, 800, 1000, 1400, 1800].map((x) => sized(base, x) + ' ' + x + 'w').join(', ');\n    const q = (s) => s.replace(/\"/g, '&quot;');\n    holder.innerHTML = '<img src=\"' + q(want) + '\"' + (set ? ' srcset=\"' + q(set) + '\" sizes=\"' + SIZES[kind] + '\"' : '') + ' alt=\"\" loading=\"lazy\" decoding=\"async\">';\n  };\n\n  // Images are fetched only when a card scrolls into view\n  const io = new IntersectionObserver((entries) => {\n    entries.forEach(async (en) => {\n      if (!en.isIntersecting) return;\n      io.unobserve(en.target);\n      const li = en.target;\n      const a = li.querySelector('a[href]');\n      const holder = li.querySelector('.snize-x-img');\n      if (!a || !holder) return;\n      const href = a.getAttribute('href');\n      const own = li.querySelector('.snize-thumbnail img'); // blog posts already come with an image\n      const src = li.classList.contains('snize-category') ? await collectionImage(href)\n        : (own && own.getAttribute('src')) || await pageImage(href);\n      const kind = li.classList.contains('snize-category') ? 'categories' : 'pages';\n      setImg(holder, src, kind === 'categories' ? 800 : 1200, kind);\n    });\n  }, { rootMargin: '200px' });\n\n  function sync() {\n    const root = document.querySelector(R);\n    if (!root) return;\n    const active = root.querySelector('.snize-main-panel-controls a.active');\n    const tab = !active ? '' : /categories/.test(active.className) ? 'categories' : /pages/.test(active.className) ? 'pages' : 'products';\n    if (root.dataset.tab !== tab) root.dataset.tab = tab;\n\n    // Call the \"Categories\" tab \"Collections\" (matches the search drawer)\n    root.querySelectorAll('.snize-main-panel-controls a[class*=\"categories\"]').forEach((a) => {\n      a.childNodes.forEach((n) => { if (n.nodeType === 3 && /Categories/.test(n.textContent)) n.textContent = n.textContent.replace('Categories', 'Collections'); });\n    });\n    if (tab !== 'categories' && tab !== 'pages') return;\n\n    root.querySelectorAll('.snize-search-results-content > li').forEach((li) => {\n      const item = li.querySelector('.snize-item');\n      if (!item || item.querySelector(':scope > .snize-x-img')) return;\n      const holder = document.createElement('span');\n      holder.className = 'snize-x-img';\n      item.prepend(holder);\n      io.observe(li);\n    });\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['class'] });\n  schedule();\n})();\n\n/* Hide Manhattan University products and collections everywhere in search (drawer + results page) */\n(() => {\n  if (window.__snizeHideCollections) return;\n  window.__snizeHideCollections = true;\n\n  // Collections to hide: the collection itself and every product in it. Add more handles here if needed.\n  const HIDE = ['manhattan-university'];\n  const AREAS = ['#snize-drawer-slot', '#snize_results'];\n\n  const style = document.createElement('style');\n  style.id = 'snize-hide-collections-style';\n  document.head.appendChild(style);\n\n  const rulesFor = (handles) => {\n    const sel = [];\n    AREAS.forEach((A) => {\n      HIDE.forEach((c) => {\n        sel.push(`${A} li:has(> a[href*=\"/collections/${c}\"])`, `${A} a.snize-drawer-collections__item[href*=\"/collections/${c}\"]`);\n        sel.push(`${A} li.snize-product:has(a[href*=\"/products/${c}\"])`); // products named after the collection\n      });\n      handles.forEach((h) => sel.push(`${A} li.snize-product:has(a[href*=\"/products/${h}\"])`));\n    });\n    return sel.join(',\\n') + ' { display: none !important; }';\n  };\n  style.textContent = rulesFor([]);\n\n  // Product handles in those collections (a small lookup, remembered for a day)\n  const KEY = 'snize-hidden-products';\n  let handles = [];\n  try {\n    const saved = JSON.parse(localStorage.getItem(KEY) || 'null');\n    if (saved && saved.t > Date.now() - 864e5) handles = saved.h;\n  } catch (e) {}\n  if (handles.length) style.textContent = rulesFor(handles);\n\n  (async () => {\n    const found = [];\n    for (const c of HIDE) {\n      for (let page = 1; page <= 4; page++) {\n        try {\n          const r = await fetch('/collections/' + c + '/products.json?limit=250&page=' + page);\n          const list = (await r.json()).products || [];\n          list.forEach((p) => found.push(p.handle));\n          if (list.length < 250) break;\n        } catch (e) { break; }\n      }\n    }\n    if (!found.length) return;\n    handles = found;\n    style.textContent = rulesFor(handles);\n    try { localStorage.setItem(KEY, JSON.stringify({ h: handles, t: Date.now() })); } catch (e) {}\n  })();\n})();\n\n/* Search results page filters: Price (slider, then \"$ min to $ max\" boxes) and Color (square swatches), like the collection page */\n(() => {\n  if (window.__snizeFilterLooks) return;\n  window.__snizeFilterLooks = true;\n\n  const R = '#snize_results';\n  const css = `\n  /* Price */\n  ${R} .snize-product-filters-block:has(.snize-price-range) .snize-product-filters-list { padding-left: 0 !important; }\n  ${R} .snize-price-range { display: grid !important; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) !important; align-items: center !important; column-gap: 16px !important; row-gap: 20px !important; width: 100% !important; padding: 4px 0 8px !important; height: auto !important; }\n  ${R} .snize-price-range-slider { grid-column: 1 / -1 !important; grid-row: 1 !important; width: auto !important; margin: 0 7px !important; padding: 0 !important; height: 14px !important; position: relative !important; }\n  ${R} .snize-price-range .slider-container { width: 100% !important; margin: 0 !important; top: 6px !important; }\n  ${R} .snize-price-range .back-bar, ${R} .snize-price-range .selected-bar { height: 2px !important; background: rgb(28, 28, 28) !important; border-radius: 0 !important; }\n  ${R} .snize-price-range .pointer { width: 14px !important; height: 14px !important; top: -6px !important; margin-left: -7px; border-radius: 50% !important; background: #fff !important; border: 2px solid rgb(28, 28, 28) !important; box-shadow: none !important; }\n  ${R} .snize-price-range .pointer::before, ${R} .snize-price-range .pointer::after, ${R} .snize-price-range .pointer-label, ${R} .snize-price-range .scale { display: none !important; }\n  ${R} .snize-price-range-input { grid-row: 2 !important; width: 100% !important; height: 44px !important; margin: 0 !important; padding: 0 14px 0 32px !important; box-sizing: border-box !important; border: 1px solid rgb(229, 229, 229) !important; border-radius: 0 !important; background: #fff !important; text-align: right !important; font-family: var(--subheading-font-family, \"industry\", sans-serif) !important; font-size: 16px !important; color: rgba(28, 28, 28, 0.6) !important; }\n  ${R} .snize-range-min-price { grid-column: 1 !important; }\n  ${R} .snize-range-max-price { grid-column: 3 !important; }\n  /* \"$\" sits inside each box (Searchanise's hidden input labels are reused for it) */\n  ${R} .snize-price-range > label.snize-visually-hidden { grid-row: 2 !important; position: static !important; clip: auto !important; clip-path: none !important; width: auto !important; height: auto !important; margin: 0 0 0 14px !important; overflow: visible !important; pointer-events: none; font-size: 0 !important; z-index: 1; justify-self: start; }\n  ${R} .snize-price-range > label.snize-visually-hidden:first-of-type { grid-column: 1 !important; }\n  ${R} .snize-price-range > label.snize-visually-hidden:last-of-type { grid-column: 3 !important; }\n  ${R} .snize-price-range > label.snize-visually-hidden::after { content: \"$\"; font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 16px; color: rgb(28, 28, 28); }\n  ${R} .snize-range-divider { grid-column: 2 !important; grid-row: 2 !important; width: auto !important; white-space: nowrap !important; font-size: 0 !important; margin: 0 !important; }\n  ${R} .snize-range-divider::after { content: \"to\"; font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px; color: rgb(28, 28, 28); }\n\n  /* Color */\n  ${R} ul.snize-product-color-filter { display: grid !important; grid-template-columns: repeat(6, 36px) !important; justify-content: space-between !important; gap: 16px 0 !important; width: 100% !important; max-width: none !important; box-sizing: border-box !important; padding: 4px 0 20px !important; margin: 0 !important; }\n  ${R} ul.snize-product-color-filter::before, ${R} ul.snize-product-color-filter::after { display: none !important; content: none !important; }\n  ${R} ul.snize-product-color-filter li { width: 36px !important; height: 36px !important; min-height: 0 !important; margin: 0 !important; padding: 0 !important; float: none !important; display: block !important; }\n  ${R} ul.snize-product-color-filter label { display: block !important; width: 36px !important; height: 36px !important; margin: 0 !important; gap: 0 !important; }\n  ${R} .snize-color-filter-checkbox { width: 36px !important; height: 36px !important; position: relative !important; margin: 0 !important; }\n  ${R} .snize-color-filter-checkbox span { display: block !important; width: 36px !important; height: 36px !important; border-radius: 0 !important; border: 1px solid rgba(0, 0, 0, 0.1) !important; box-sizing: border-box !important; margin: 0 !important; }\n  ${R} .snize-color-filter-checkbox span::before, ${R} .snize-color-filter-checkbox span::after { display: none !important; }\n  ${R} .snize-color-filter-checkbox input { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; opacity: 0 !important; margin: 0 !important; cursor: pointer; z-index: 1; }\n  ${R} .snize-color-filter-checkbox input:checked + span { outline: 2px solid rgb(28, 28, 28) !important; outline-offset: 2px; }\n  ${R} .snize-color-name { display: none !important; }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-filter-looks-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n})();\n\n/* When every result is hidden (e.g. a Manhattan University search): plain \"nothing found\", no suggestions */\n(() => {\n  if (window.__snizeHiddenNoResults) return;\n  window.__snizeHiddenNoResults = true;\n\n  const D = '#snize-drawer-slot';\n  const R = '#snize_results';\n  const css = `\n  ${D}[data-all-hidden] .snize-ac-results-columns > :not(.snize-hidden-notice),\n  ${D}[data-all-hidden] .snize-ac-results-column > * { display: none !important; }\n  ${D}:not([data-all-hidden]) .snize-hidden-notice, ${R}:not([data-all-hidden]) .snize-hidden-notice { display: none !important; }\n  ${R}[data-all-hidden] > .snize-filters-sidebar, ${R}[data-all-hidden] > .snize-horizontal-wrapper, ${R}[data-all-hidden] > .snize-main-panel,\n  ${R}[data-all-hidden] .snize-search-results-main-content > :not(.snize-hidden-notice) { display: none !important; }\n  ${R}[data-all-hidden] > .snize-search-results-main-content { grid-column: 1 / -1 !important; }\n  ${D} .snize-hidden-notice { order: -10; }\n  /* Keep the theme's own button colours (Searchanise turns links dark grey) */\n  ${D} .snize-hidden-notice .teamshop-fallback a.button, ${D} .snize-hidden-notice .teamshop-fallback a.button button-content { color: #fff !important; }\n  ${D} .snize-hidden-notice .predictive-search__no-results { padding-top: 8px; }\n  .snize-hidden-notice { font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px; line-height: 1.4; color: rgb(28, 28, 28); }\n  .snize-hidden-notice__title { margin: 0 0 8px; font-family: var(--heading-font-family, \"industry\", sans-serif); font-size: 18px; font-weight: 800; line-height: 1.2; text-transform: uppercase; }\n  .snize-hidden-notice p { margin: 0; }\n  ${R} .snize-hidden-notice { padding: 8px 0 40px; }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-hidden-noresults-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const esc = (s) => String(s).replace(/[&<>\"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]));\n  const allHidden = (root) => {\n    const items = [...root.querySelectorAll('li.snize-product')];\n    return items.length > 0 && items.every((li) => getComputedStyle(li).display === 'none');\n  };\n  // The drawer shows your theme's own \"no results\" screen, including the Teamshop banner. Its link, text and\n  // images are read from the theme's Teamshop script, so changes made in the theme editor carry through.\n  const teamshop = (() => {\n    const src = [...document.querySelectorAll('script')].map((x) => x.textContent).find((t) => /TEAMSHOP_URL/.test(t)) || '';\n    const pick = (name) => { const m = src.match(new RegExp(name + '\\\\s*=\\\\s*\"([^\"]*)\"')); return m ? JSON.parse('\"' + m[1] + '\"') : ''; };\n    return src ? { url: pick('TEAMSHOP_URL'), text: pick('TEXT'), btn: pick('BTN_LABEL'), desk: pick('DESKTOP_IMG'), mob: pick('MOBILE_IMG') } : null;\n  })();\n  const themeEmpty = () => {\n    const t = teamshop;\n    const ts = !t ? '' :\n      '<div class=\"teamshop-fallback\"><div class=\"teamshop-fallback__inner\">' +\n        '<p class=\"subheading\">TEAMSHOP</p><p class=\"h5\">' + esc(t.text) + '</p>' +\n        ((t.desk || t.mob) ? '<a class=\"teamshop-fallback__media\" href=\"' + esc(t.url) + '\" target=\"_blank\" rel=\"noopener\" aria-label=\"' + esc(t.btn) + '\"><picture>' +\n          (t.mob ? '<source media=\"(max-width: 767px)\" srcset=\"' + esc(t.mob) + '\">' : '') +\n          '<img src=\"' + esc(t.desk || t.mob) + '\" alt=\"TeamShop\" loading=\"lazy\" decoding=\"async\"></picture></a>' : '') +\n        '<a href=\"' + esc(t.url) + '\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"button\"><button-content class=\"button__content\" up-text=\"' + esc(t.btn) + '\">' + esc(t.btn) + '</button-content></a>' +\n      '</div></div>';\n    return '<div class=\"predictive-search__no-results prose prose-justify-center\"><p class=\"subheading\">Search</p><p class=\"h5\">Your search did not yield any result</p>' +\n      '<button type=\"reset\" class=\"button button--outline\" style=\"border-radius: 0px;--button-text-color: var(--button-background-primary);\" form=\"predictive-search-form\"><button-content class=\"button__content\">Reset search</button-content></button>' +\n      ts + '</div>';\n  };\n\n  // In the drawer the screen is added at the end (the layout there depends on Searchanise's first column staying first)\n  function notice(parent, q, atStart, drawer) {\n    let n = parent.querySelector(':scope > .snize-hidden-notice');\n    if (!n) { n = document.createElement('div'); n.className = 'snize-hidden-notice'; atStart ? parent.prepend(n) : parent.appendChild(n); }\n    if (n.dataset.q !== q) {\n      n.dataset.q = q;\n      n.innerHTML = drawer ? themeEmpty()\n        : '<p class=\"snize-hidden-notice__title\">Sorry, nothing found for \"' + esc(q) + '\".</p><p>Try checking the spelling or searching for something else.</p>';\n    }\n  }\n  const flag = (el, on) => {\n    if (on && !el.hasAttribute('data-all-hidden')) el.setAttribute('data-all-hidden', '');\n    if (!on && el.hasAttribute('data-all-hidden')) el.removeAttribute('data-all-hidden');\n  };\n\n  function sync() {\n    const box = document.querySelector(D);\n    const cols = box && box.querySelector('.snize-ac-results-columns');\n    if (box && cols) {\n      const input = document.querySelector('#search-drawer input[name=\"q\"]');\n      const on = allHidden(box);\n      flag(box, on);\n      if (on) notice(cols, input ? input.value.trim() : '', false, true);\n    }\n    const root = document.querySelector(R);\n    const main = root && root.querySelector('.snize-search-results-main-content');\n    if (root && main) {\n      const tab = root.querySelector('.snize-main-panel-controls a.active');\n      const on = (!tab || /products/.test(tab.className)) && allHidden(root);\n      flag(root, on);\n      if (on) notice(main, new URLSearchParams(location.search).get('q') || '', true, false);\n    }\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  schedule();\n})();\n\n/* Search results page \"Size\" filter: a checkbox list like the collection page (sorted, first 8 + \"Show more\"),\n   plus \"In stock only\" titled in the same colour as the other filters, and Color collapsing properly */\n(() => {\n  if (window.__snizeSizeList) return;\n  window.__snizeSizeList = true;\n\n  const R = '#snize_results';\n  const LIMIT = 8;\n\n  const css = `\n  ${R} ul.snize-product-size-filter { display: flex !important; flex-direction: column !important; width: 100% !important; margin: 0 !important; padding: 0 0 20px 18px !important; }\n  ${R} .snize-product-filters-title:not(.open) + ul.snize-product-size-filter,\n  ${R} .snize-product-filters-title:not(.open) + ul.snize-product-color-filter { display: none !important; }\n  ${R} ul.snize-product-size-filter::before, ${R} ul.snize-product-size-filter::after { display: none !important; content: none !important; }\n  ${R} ul.snize-product-size-filter > li { display: flex !important; align-items: center !important; min-height: 33px; width: auto !important; height: auto !important; margin: 0 !important; padding: 0 !important; float: none !important; }\n  ${R} ul.snize-product-size-filter > li[data-extra] { display: none !important; }\n  ${R}[data-sizes-open] ul.snize-product-size-filter > li[data-extra] { display: flex !important; }\n  ${R} ul.snize-product-size-filter label { display: block !important; margin: 0 !important; cursor: pointer; }\n  ${R} .snize-size-filter-checkbox { position: relative !important; display: block !important; width: auto !important; height: auto !important; margin: 0 !important; }\n  ${R} .snize-size-filter-checkbox input { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; opacity: 0 !important; margin: 0 !important; cursor: pointer; z-index: 1; }\n  ${R} .snize-size-filter-checkbox span {\n    display: flex !important; align-items: center !important; gap: 14px; width: auto !important; height: auto !important; min-width: 0 !important;\n    padding: 0 !important; margin: 0 !important; border: 0 !important; border-radius: 0 !important; background: none !important; box-shadow: none !important;\n    font-family: var(--text-font-family, \"helvetica-neue-lt-pro\", sans-serif) !important; font-size: 14px !important; line-height: 18.2px !important;\n    color: rgb(28, 28, 28) !important; text-align: left !important;\n  }\n  ${R} .snize-size-filter-checkbox span::before { content: \"\"; display: block; width: 14px; height: 14px; flex: none; border-radius: 2px; background: #e5e5e5; }\n  ${R} .snize-size-filter-checkbox input:checked + span::before { background: rgb(28, 28, 28); }\n  ${R} .snize-size-more { list-style: none !important; min-height: 0 !important; padding: 8px 0 0 !important; margin: 0 !important; order: 9999; display: block !important; }\n  ${R} .snize-size-more button {\n    background: none !important; border: 0 !important; padding: 0 !important; margin: 0 !important; cursor: pointer; box-shadow: none !important; height: auto !important; min-height: 0 !important;\n    font-family: var(--text-font-family, \"helvetica-neue-lt-pro\", sans-serif) !important; font-size: 14px !important; text-transform: none !important; letter-spacing: 0 !important;\n    color: rgb(28, 28, 28) !important; text-decoration: underline !important; text-underline-offset: 3px;\n  }\n  ${R} .snize-size-more button::before, ${R} .snize-size-more button::after { display: none !important; content: none !important; }\n\n  /* \"In stock only\" styled exactly like the Size / Price titles: same font, grey when off, dark when on */\n  ${R} .snize-stock-toggle { color: rgba(28, 28, 28, 0.6) !important; }\n  ${R} .snize-stock-toggle[aria-checked=\"true\"] { color: rgb(28, 28, 28) !important; }\n  ${R} .snize-stock-toggle > span:first-child {\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important; font-size: 14px !important; font-weight: 400 !important;\n    letter-spacing: 0.56px !important; text-transform: none !important; color: inherit !important;\n  }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-size-list-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  // Sensible size order: letter sizes, then numbers (youth/shoe), then anything else\n  const LETTERS = ['XXS', '2XS', 'XS', 'XS/S', 'S', 'S/M', 'M', 'M/L', 'L', 'L/XL', 'XL', 'XXL', '2XL', 'XXXL', '3XL', '4XL', '5XL'];\n  const rank = (v) => {\n    const s = String(v).trim().toUpperCase();\n    const i = LETTERS.indexOf(s);\n    if (i >= 0) return i;\n    const n = parseFloat(s.replace(/^[A-Z]+/, ''));\n    return isNaN(n) ? 2000 : 1000 + n;\n  };\n\n  let open = false; // \"Show more\" state, kept while Searchanise redraws the filters\n\n  function sync() {\n    const root = document.querySelector(R);\n    if (!root) return;\n    if (open !== root.hasAttribute('data-sizes-open')) root.toggleAttribute('data-sizes-open', open);\n    const list = root.querySelector('ul.snize-product-size-filter');\n    if (!list) return;\n\n    const items = [...list.children].filter((li) => !li.classList.contains('snize-size-more'));\n    const sorted = items\n      .map((li) => ({ li, v: (li.querySelector('input') || {}).value || li.textContent }))\n      .sort((a, b) => rank(a.v) - rank(b.v) || String(a.v).localeCompare(String(b.v), undefined, { numeric: true }));\n    sorted.forEach(({ li }, i) => {\n      if (li.style.order !== String(i)) li.style.order = String(i);\n      const extra = i >= LIMIT && !(li.querySelector('input') || {}).checked; // ticked sizes always stay visible\n      if (extra !== li.hasAttribute('data-extra')) li.toggleAttribute('data-extra', extra);\n    });\n\n    let more = list.querySelector(':scope > .snize-size-more');\n    const hidden = Math.max(0, items.length - LIMIT);\n    if (!hidden) { if (more) more.remove(); return; }\n    if (!more) {\n      more = document.createElement('li');\n      more.className = 'snize-size-more';\n      more.innerHTML = '<button type=\"button\"></button>';\n      more.querySelector('button').addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); open = !open; sync(); });\n      list.appendChild(more);\n    }\n    const label = open ? 'Show less' : 'Show more (' + hidden + ')';\n    const b = more.querySelector('button');\n    if (b.textContent !== label) b.textContent = label;\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; sync(); }); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  schedule();\n})();\n\n/* Mobile: white (not grey) behind Safari's top and bottom bars while search is open */\n(() => {\n  if (window.__snizeMobileWhite) return;\n  window.__snizeMobileWhite = true;\n\n  const style = document.createElement('style');\n  style.id = 'snize-mobile-white-style';\n  style.textContent = `\n  @media (max-width: 999px) {\n    /* The dimmed layer behind the drawer turns white, so the bars show white */\n    #search-drawer[open]::part(overlay) { background: #fff !important; }\n    html:has(#search-drawer[open]), html:has(#search-drawer[open]) body { background: #fff !important; }\n  }`;\n  document.head.appendChild(style);\n\n  // Safari also colours its bars from the page's \"theme colour\": white while search is open, back after\n  const drawer = document.getElementById('search-drawer');\n  if (!drawer) return;\n  let meta = document.querySelector('meta[name=\"theme-color\"]');\n  const original = meta ? meta.getAttribute('content') : null;\n  const sync = () => {\n    const open = drawer.hasAttribute('open') && window.matchMedia('(max-width: 999px)').matches;\n    if (open) {\n      if (!meta) { meta = document.createElement('meta'); meta.name = 'theme-color'; document.head.appendChild(meta); }\n      meta.setAttribute('content', '#ffffff');\n    } else if (meta) {\n      if (original === null) { meta.remove(); meta = null; } else meta.setAttribute('content', original);\n    }\n  };\n  new MutationObserver(sync).observe(drawer, { attributes: true, attributeFilter: ['open'] });\n  sync();\n})();\n\n/* Drawer \"Pages\" tab as image cards (like the search results page): 3 across on desktop, 2 on mobile.\n   Covers both versions of the tab - Searchanise's (widget showing) and the theme's own (widget not showing).\n   Pages with no image get the white Capelli logo on black instead of an empty grey box. */\n(() => {\n  if (window.__snizePageCards) return;\n  window.__snizePageCards = true;\n\n  const THEME_RESULTS = '#search-drawer .search-drawer__results';\n  const WIDGET = '#snize-drawer-slot';\n  const CACHE_KEY = 'snize-page-images'; // same image cache as the results page and the widget's Pages tab\n  const CACHE_DAYS = 7;\n  const MAX = 4; // pages shown in the drawer's Pages tab\n\n  // White logo from the header, used for pages without their own image\n  const logo = (() => {\n    const img = [...document.querySelectorAll('.header__logo-image')].find((i) => /white/i.test(i.currentSrc || i.src));\n    return img ? (img.currentSrc || img.src) : '';\n  })();\n  if (logo) document.documentElement.style.setProperty('--snz-logo', `url(\"${logo}\")`);\n\n  const css = `\n  /* Theme's own Pages list -> card grid (the original list stays in the page, just hidden) */\n  ${THEME_RESULTS} [slot=\"tabpanel\"].snz-has-cards > ul:has(.predictive-search-link) { display: none !important; }\n  .snz-page-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px 10px; }\n  @media (max-width: 699px) { .snz-page-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n  .snz-page-cards__item { display: flex; flex-direction: column; gap: 8px; text-decoration: none; color: rgb(28, 28, 28); }\n  .snz-page-cards__img { position: relative; display: block; aspect-ratio: 7 / 4; overflow: hidden; background: #f5f5f5; }\n  .snz-page-cards__img img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .4s ease; }\n  .snz-page-cards__item:hover img { transform: scale(1.05); }\n  .snz-page-cards__title {\n    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px; line-height: 18.2px;\n    font-weight: 400; text-transform: none; letter-spacing: normal;\n  }\n  .snz-page-cards__more {\n    display: inline-block; margin-top: 20px; color: rgb(28, 28, 28); text-decoration: underline; text-underline-offset: 3px;\n    font-family: var(--subheading-font-family, \"industry\", sans-serif); font-size: 14px;\n  }\n\n  /* No image: white logo on black (both Pages tabs) */\n  .snz-page-cards__img:empty, ${WIDGET} .snize-drawer-pages__img:empty { position: relative; background: #000 !important; }\n  .snz-page-cards__img:empty::after, ${WIDGET} .snize-drawer-pages__img:empty::after {\n    content: \"\"; position: absolute; inset: 0; background: var(--snz-logo) center / 45% auto no-repeat;\n  }\n  /* Searchanise's tab: same 3 / 2 columns */\n  ${WIDGET} .snize-drawer-pages__grid { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }\n  @media (max-width: 699px) { ${WIDGET} .snize-drawer-pages__grid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; } }\n  ${WIDGET} .snize-drawer-pages__img { position: relative; }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-page-cards-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const esc = (s) => String(s).replace(/[&<>\"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[c]));\n  const path = (u) => { try { return new URL(u, location.origin).pathname.replace(/\\/$/, ''); } catch (e) { return u; } };\n  // Properly sized image from Shopify's CDN\n  const sized = (src, w) => {\n    if (!src) return src;\n    try {\n      const u = new URL(src, location.origin);\n      if (!/\\/cdn\\/shop\\/|cdn\\.shopify\\.com/.test(u.href)) return src;\n      u.pathname = u.pathname.replace(/_(pico|icon|thumb|small|compact|medium|large|grande|original|master|\\d+x\\d*|x\\d+)(?=\\.(jpe?g|png|gif|webp)$)/i, '');\n      u.searchParams.delete('height');\n      u.searchParams.set('width', w);\n      return u.href;\n    } catch (e) { return src; }\n  };\n\n  // Shared image cache (kept in the shopper's browser for a week)\n  const load = () => {\n    try {\n      const saved = JSON.parse(localStorage.getItem(CACHE_KEY) || '{}');\n      const fresh = Date.now() - CACHE_DAYS * 864e5;\n      const out = {};\n      Object.keys(saved).forEach((k) => { if (saved[k].t > fresh) out[k] = saved[k]; });\n      return out;\n    } catch (e) { return {}; }\n  };\n  const save = (obj) => { try { localStorage.setItem(CACHE_KEY, JSON.stringify(obj)); } catch (e) {} };\n\n  // First image in the page's own content (stops reading once found)\n  const inflight = new Map();\n  function pageImage(href) {\n    const p = path(href);\n    const cache = load();\n    if (cache[p]) return Promise.resolve(cache[p].src);\n    if (inflight.has(p)) return inflight.get(p);\n    const job = (async () => {\n      let found = '';\n      try {\n        const res = await fetch(p, { credentials: 'same-origin' });\n        const reader = res.body.getReader();\n        const dec = new TextDecoder();\n        let buf = '';\n        for (;;) {\n          const { done, value } = await reader.read();\n          if (done) break;\n          buf += dec.decode(value, { stream: true });\n          const at = buf.search(/id=\"shopify-section-template--/);\n          if (at < 0) continue;\n          const re = /<img\\b[^>]*>/gi;\n          const part = buf.slice(at);\n          let m;\n          while ((m = re.exec(part))) {\n            const tag = m[0];\n            const src = (tag.match(/\\ssrc=\"([^\"]+)\"/) || [])[1] || '';\n            const set = ((tag.match(/\\ssrcset=\"([^\"]+)\"/) || [])[1] || '').split(',').pop().trim().split(' ')[0];\n            const cand = [src, set].find((c) => c && !/^data:|\\.svg|icon|logo/i.test(c));\n            if (cand) { found = cand.replace(/&amp;/g, '&'); break; }\n          }\n          if (found) { reader.cancel(); break; }\n        }\n      } catch (e) {}\n      const c = load();\n      c[p] = { src: found, t: Date.now() };\n      save(c);\n      inflight.delete(p);\n      return found;\n    })();\n    inflight.set(p, job);\n    return job;\n  }\n\n  const imgHtml = (src) => (src ? `<img src=\"${esc(sized(src, 800))}\" alt=\"\" loading=\"lazy\">` : '');\n\n  // Pages for the search term from Searchanise (the theme's own search usually finds only one)\n  const API_KEY = (window.Searchanise && window.Searchanise.ApiKey) || '7W0p4B8R5f';\n  const sniPages = new Map();\n  function searchanisePages(q) {\n    if (sniPages.has(q)) return sniPages.get(q);\n    const u = new URL('https://searchserverapi1.com/getresults');\n    u.search = new URLSearchParams({\n      api_key: API_KEY, q, output: 'json', items: 'false', categories: 'false', suggestions: 'false',\n      pages: 'true', pagesMaxResults: String(MAX),\n    }).toString();\n    const job = fetch(u.href)\n      .then((r) => r.json())\n      .then((d) => (d.pages || []).map((p) => ({ href: path(p.link), title: String(p.title || '').trim(), img: p.image_link || '' })))\n      .catch(() => []);\n    sniPages.set(q, job);\n    return job;\n  }\n\n  function render(panel, items, q) {\n    let grid = panel.querySelector(':scope > .snz-page-cards-wrap');\n    if (!grid) { grid = document.createElement('div'); grid.className = 'snz-page-cards-wrap'; panel.appendChild(grid); }\n    panel.classList.add('snz-has-cards');\n    const cache = load();\n    grid.innerHTML = '<div class=\"snz-page-cards\">' + items.map((i) => {\n      const c = cache[path(i.href)];\n      const src = i.img || (c && c.src) || '';\n      return `<a class=\"snz-page-cards__item\" href=\"${esc(i.href)}\"><span class=\"snz-page-cards__img\" data-href=\"${esc(i.href)}\">${imgHtml(src)}</span>` +\n        `<span class=\"snz-page-cards__title\">${esc(i.title)}</span></a>`;\n    }).join('') + '</div>' +\n      (q ? `<a class=\"snz-page-cards__more\" href=\"/pages/search-results-page?q=${encodeURIComponent(q)}&tab=pages\">View more pages</a>` : '');\n\n    // Fetch images not known yet, then drop them in\n    grid.querySelectorAll('.snz-page-cards__img:empty').forEach((box) => {\n      const href = box.dataset.href;\n      if (load()[path(href)]) return;\n      pageImage(href).then((src) => { if (box.isConnected && src) box.innerHTML = imgHtml(src); });\n    });\n  }\n\n  // The theme's own Pages tab: up to 4 cards (Searchanise's pages first, then any extra the theme found)\n  function syncTheme() {\n    document.querySelectorAll(`${THEME_RESULTS} [slot=\"tabpanel\"]`).forEach((panel) => {\n      const links = [...panel.querySelectorAll('.predictive-search-link')];\n      if (!links.length) return;\n      const themeItems = links.map((a) => ({ href: a.getAttribute('href'), title: a.textContent.trim().replace(/\\s+/g, ' '), img: '' }));\n      const input = document.querySelector('#search-drawer input[name=\"q\"]');\n      const q = input ? input.value.trim() : '';\n      const key = q + '|' + themeItems.map((i) => i.href).join(',');\n      if (panel.dataset.snzFor === key && panel.querySelector(':scope > .snz-page-cards-wrap')) return;\n      panel.dataset.snzFor = key;\n      render(panel, themeItems.filter((i) => !window.snizePageMatches || window.snizePageMatches(i.title, q)).slice(0, MAX), q);\n      if (!q) return;\n      searchanisePages(q).then((sp) => {\n        if (!panel.isConnected || panel.dataset.snzFor !== key || !sp.length) return;\n        const seen = new Set();\n        const merged = [...sp, ...themeItems].filter((i) => {\n          const p = path(i.href);\n          if (!i.title || seen.has(p)) return false;\n          if (window.snizePageMatches && !window.snizePageMatches(i.title, q)) return false; // title must contain the search\n          if (window.snizePageAlive && window.snizePageAlive(i.href) === false) return false; // page no longer live\n          seen.add(p);\n          return true;\n        }).slice(0, MAX);\n        render(panel, merged, q);\n      });\n    });\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; setTimeout(() => { queued = false; try { syncTheme(); } catch (e) {} }, 30); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  document.addEventListener('input', schedule, true);\n  document.addEventListener('click', schedule, true);\n  schedule();\n})();\n\n/* Every search goes to the Searchanise results page (/pages/search-results-page), never Shopify's own /search page.\n   Covers Enter in the search box, the theme's \"SEARCH FOR \u2026\" button and suggestion pills, and anyone landing on /search. */\n(() => {\n  if (window.__snizeAlwaysResultsPage) return;\n  window.__snizeAlwaysResultsPage = true;\n\n  const RESULTS = '/pages/search-results-page';\n  const isShopifySearch = (u) => /^\\/(?:[a-z]{2}(?:-[a-z]{2})?\\/)?search\\/?$/i.test(u.pathname);\n  const target = (q) => `${RESULTS}?q=${encodeURIComponent(q)}`;\n\n  // 1. Someone lands on Shopify's search page with a search term: send them straight on\n  const here = new URL(location.href);\n  const hereQ = (here.searchParams.get('q') || '').trim();\n  if (isShopifySearch(here) && hereQ && !/^\\s*(id|handle):/.test(hereQ) && !here.searchParams.has('section_id')) {\n    location.replace(target(hereQ));\n    return;\n  }\n\n  // 2. Search forms submit to the results page\n  document.addEventListener('submit', (e) => {\n    const form = e.target;\n    if (!form || !form.matches || !form.matches('form')) return;\n    let action;\n    try { action = new URL(form.getAttribute('action') || '', location.origin); } catch (err) { return; }\n    if (!isShopifySearch(action)) return;\n    const input = form.querySelector('input[name=\"q\"]');\n    const q = input ? input.value.trim() : '';\n    if (!q) return;\n    e.preventDefault();\n    location.href = target(q);\n  }, true);\n\n  // 3. Links to Shopify's search page (\"SEARCH FOR \u2026\", suggestion pills) go to the results page instead\n  document.addEventListener('click', (e) => {\n    const a = e.target.closest && e.target.closest('a[href]');\n    if (!a || e.defaultPrevented || e.metaKey || e.ctrlKey || e.shiftKey) return;\n    let u;\n    try { u = new URL(a.getAttribute('href'), location.origin); } catch (err) { return; }\n    if (u.origin !== location.origin || !isShopifySearch(u)) return;\n    const q = (u.searchParams.get('q') || '').trim();\n    if (!q || /^\\s*(id|handle):/.test(q)) return;\n    e.preventDefault();\n    location.href = target(q);\n  }, true);\n})();\n\n/* Search results page on mobile, matched to the mobile collection page:\n   - smaller \"Search results for\" title (same size as a collection title)\n   - top Sort dropdown hidden (sorting is in the \"Filter & sort\" panel)\n   - products edge to edge with the collection's 2px gaps, 14px titles and prices\n   - black \"FILTER & SORT\" bar fixed to the bottom, opening the filters panel (styled in the next block)\n   Only applies when Searchanise is in its mobile layout (#snize_results.snize-mobile-design). */\n(() => {\n  if (window.__snizeMobileResults) return;\n  window.__snizeMobileResults = true;\n  if (!/\\/pages\\/search-results-page/.test(location.pathname)) return;\n\n  const R = '#snize_results.snize-mobile-design';\n  const FONT = 'var(--subheading-font-family, \"industry\", sans-serif)';\n  const LINE = 'rgb(232, 232, 232)';\n  const INK = 'rgb(28, 28, 28)';\n  const GUTTER = 'var(--container-gutter, 1.25rem)';\n\n  const css = `\n  /* Title: collection-title size on mobile */\n  @media (max-width: 999px) {\n    body.snize-results-page .section-stack:has(#snize_results) > h1,\n    body.snize-results-page main h1.h2 {\n      font-size: var(--text-h4) !important;\n      line-height: calc(var(--heading-line-height, 1) + .1) !important;\n    }\n  }\n\n  /* Searchanise's own Filters button and the sidebar's \"Filters\" / \"In stock only\" are replaced by the bottom bar */\n  ${R} .snize-main-panel-mobile-filters { display: none !important; }\n  ${R} .snize-filters-sidebar { display: none !important; }\n\n  /* Sort lives in the \"Filter & sort\" panel, so the top Sort dropdown is hidden (still used behind the scenes) */\n  ${R} .snize-main-panel-dropdown { display: none !important; }\n  ${R} .snize-main-panel { margin-bottom: 16px !important; }\n\n  /* Products: edge to edge, collection gaps and type */\n  ${R} ul.snize-search-results-content {\n    gap: var(--product-list-row-gap, 1.5rem) var(--product-list-column-gap, 2px) !important;\n    margin-left: calc(-1 * ${GUTTER}) !important; margin-right: calc(-1 * ${GUTTER}) !important;\n    width: auto !important; max-width: none !important; padding: 0 !important;\n  }\n  ${R} ul.snize-search-results-content > li.snize-product { margin: 0 !important; }\n  /* Card text exactly as the mobile collection: title in the heading font, price in the body font, both 14px */\n  ${R} li.snize-product .snize-overhidden { padding: 16px 4% 0 !important; gap: 0 !important; }\n  ${R} li.snize-product .snize-title {\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important;\n    font-size: 14px !important; line-height: 18.2px !important; font-weight: 400 !important;\n    letter-spacing: normal !important; text-transform: none !important; color: ${INK} !important;\n    margin: 0 !important; padding: 0 !important;\n  }\n  ${R} li.snize-product .snize-price-list { margin: 2px 0 0 !important; padding: 0 !important; }\n  ${R} li.snize-product .snize-price,\n  ${R} li.snize-product .snize-price-list .money {\n    font-family: var(--text-font-family, \"helvetica-neue-lt-pro\", \"Helvetica Neue\", Helvetica, Arial, sans-serif) !important;\n    font-size: 14px !important; line-height: 18.2px !important; font-weight: 400 !important;\n    letter-spacing: normal !important; color: ${INK} !important;\n  }\n  /* Room so the bar never covers the last row / pagination */\n  ${R} { padding-bottom: 88px !important; }\n\n  /* The black \"FILTER & SORT\" bar */\n  .snz-filter-bar { display: none; }\n  body.snz-mobile-results .snz-filter-bar {\n    display: grid; justify-items: center; position: fixed; z-index: 20;\n    left: 1rem; right: 1rem; bottom: calc(1rem + env(safe-area-inset-bottom, 0px));\n  }\n  .snz-filter-bar__button {\n    display: flex; align-items: center; justify-content: center; gap: 12px;\n    width: 100%; max-width: 24rem; padding: 14px 40px; margin: 0;\n    border: 0; border-radius: 0; background: ${INK}; color: #fff; cursor: pointer;\n    font-family: ${FONT}; font-size: 14px; font-weight: 400; line-height: 1.2; letter-spacing: normal; text-transform: uppercase;\n    -webkit-tap-highlight-color: transparent;\n  }\n  .snz-filter-bar__button svg { width: 16px; height: auto; flex: none; }\n  .snz-filter-bar__count:empty { display: none; }\n\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-mobile-results-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const ICON = '<svg aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 16 10\"><path stroke=\"currentColor\" stroke-linecap=\"square\" stroke-width=\"1.5\" d=\"M4 5h8M1 1h14M7 9h2\"/></svg>';\n\n  const mobileFiltersButton = () => document.querySelector('#snize_results .snize-main-panel-mobile-filters button');\n\n  // Bottom bar\n  const bar = document.createElement('div');\n  bar.className = 'snz-filter-bar';\n  bar.innerHTML = `<button type=\"button\" class=\"snz-filter-bar__button\" aria-haspopup=\"dialog\">${ICON}<span>Filter &amp; sort</span><span class=\"snz-filter-bar__count\"></span></button>`;\n  bar.querySelector('button').addEventListener('click', () => {\n    const b = mobileFiltersButton();\n    if (b) b.click();\n  });\n  document.body.appendChild(bar);\n  const count = bar.querySelector('.snz-filter-bar__count');\n\n  function sync() {\n    const mobile = !!document.querySelector('#snize_results.snize-mobile-design') && !!mobileFiltersButton();\n    document.body.classList.toggle('snz-mobile-results', mobile);\n    if (!mobile) return;\n    // Mirror Searchanise's selected-filter count, e.g. \"FILTER & SORT (2)\"\n    const c = document.querySelector('#snize_results .snize-main-panel-mobile-filters .snize-selected-filters-count-container');\n    const n = c ? c.textContent.replace(/\\D/g, '') : '';\n    const text = n && n !== '0' ? `(${n})` : '';\n    if (count.textContent !== text) count.textContent = text;\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; setTimeout(() => { queued = false; try { sync(); } catch (e) {} }, 30); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  window.addEventListener('resize', schedule);\n  schedule();\n})();\n\n/* Mobile \"Filter & sort\" panel styled like the collection page's filter drawer:\n   round black close button, bold FILTERS heading, Sort by / Product Type / In stock only / Size / Price / Color\n   as rows that open in place (grey title when closed, dark when open, thin chevron), grey square checkboxes,\n   colour swatches, price slider + boxes, and CLEAR ALL / APPLY buttons fixed at the bottom. */\n(() => {\n  if (window.__snizeMobileFilterPanel) return;\n  window.__snizeMobileFilterPanel = true;\n  if (!/\\/pages\\/search-results-page/.test(location.pathname)) return;\n\n  const M = 'html body :is(#snize-modal-mobile-filters-dialog, [id^=\"snize-modal-mobile-filters\"])';\n  const FONT = 'var(--subheading-font-family, \"industry\", sans-serif)';\n  const HEAD = 'var(--heading-font-family, \"industry\", sans-serif)';\n  const TEXT = 'var(--text-font-family, \"helvetica-neue-lt-pro\", \"Helvetica Neue\", Helvetica, Arial, sans-serif)';\n  const INK = 'rgb(28, 28, 28)';\n  const DIM = 'rgba(28, 28, 28, 0.6)';\n  const LINE = 'rgb(232, 232, 232)';\n  const PAD = '20px';\n\n  // Order of the rows; anything not listed is hidden (Availability becomes the \"In stock only\" switch)\n  const ORDER = { 'product type': 10, 'size': 30, 'price': 40, 'color': 50 };\n\n  const css = `\n  /* Panel */\n  ${M} { background: #fff !important; font-family: ${FONT} !important; color: ${INK} !important; }\n  ${M} .snize-modal-content {\n    position: absolute !important; inset: 0 !important; width: auto !important; height: auto !important; max-height: none !important;\n    margin: 0 !important; padding: 0 !important; display: flex !important; flex-direction: column !important;\n    overflow-y: auto !important; overflow-x: hidden !important; background: #fff !important; -webkit-overflow-scrolling: touch;\n  }\n  ${M}, ${M} * { box-sizing: border-box !important; }\n  ${M} button { font-family: ${FONT} !important; text-shadow: none !important; box-shadow: none !important; letter-spacing: normal !important; }\n\n  /* Header: round black close button on the left, FILTERS in the middle */\n  ${M} #snize_filters_block_header {\n    order: 0 !important; position: sticky !important; top: 0 !important; z-index: 2 !important;\n    display: flex !important; align-items: center !important; justify-content: center !important;\n    flex: none !important; width: 100% !important; height: 66px !important; margin: 0 !important; padding: 0 ${PAD} !important;\n    background: #fff !important; border: 0 !important; border-bottom: 1px solid ${LINE} !important;\n  }\n  ${M} #snize_filters_block_title {\n    font-family: ${HEAD} !important; font-size: 16px !important; font-weight: 800 !important; line-height: 1 !important;\n    text-transform: uppercase !important; letter-spacing: normal !important; color: ${INK} !important; margin: 0 !important; padding: 0 !important;\n  }\n  ${M} > .snize-close-button {\n    position: absolute !important; top: 19px !important; left: ${PAD} !important; right: auto !important; bottom: auto !important; z-index: 5 !important;\n    display: flex !important; align-items: center !important; justify-content: center !important;\n    width: 28px !important; height: 28px !important; min-width: 0 !important; min-height: 0 !important; padding: 0 !important; margin: 0 !important;\n    border: 0 !important; border-radius: 50% !important; background: ${INK} !important; font-size: 0 !important; cursor: pointer;\n  }\n  ${M} > .snize-close-button > * { display: none !important; }\n  ${M} > .snize-close-button::before {\n    content: \"\"; width: 10px; height: 10px; display: block;\n    background:\n      linear-gradient(45deg, transparent calc(50% - 0.75px), #fff calc(50% - 0.75px), #fff calc(50% + 0.75px), transparent calc(50% + 0.75px)),\n      linear-gradient(-45deg, transparent calc(50% - 0.75px), #fff calc(50% - 0.75px), #fff calc(50% + 0.75px), transparent calc(50% + 0.75px));\n  }\n  ${M} > .snize-close-button::after { display: none !important; content: none !important; }\n\n  /* Rows that aren't used */\n  ${M} [data-snz-hide], ${M} #snize_product_filter_header_sort_by { display: none !important; }\n\n  /* Filter rows */\n  ${M} .snize-product-filters-header:not(#snize_filters_block_header) {\n    flex: none !important; width: auto !important; margin: 0 ${PAD} !important; padding: 0 !important;\n    background: none !important; border: 0 !important; border-bottom: 1px solid ${LINE} !important;\n  }\n  ${M} .snize-product-filters-header.open:not(#snize_filters_block_header) { border-bottom: 0 !important; }\n  ${M} .snize-back-to-filters { display: none !important; }\n  ${M} .snize-product-filter-header-controls { display: block !important; width: 100% !important; margin: 0 !important; padding: 0 !important; }\n  ${M} .snize-product-filter-header-button, ${M} .snz-modal-row {\n    display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 12px !important;\n    width: 100% !important; min-height: 54px !important; height: auto !important; margin: 0 !important; padding: 0 !important;\n    background: none !important; border: 0 !important; border-radius: 0 !important; cursor: pointer; text-align: left !important;\n    font-family: ${FONT} !important; font-size: 16px !important; font-weight: 400 !important; line-height: 1.2 !important;\n    letter-spacing: 0.32px !important; text-transform: none !important; color: ${DIM} !important;\n  }\n  ${M} .snize-product-filters-header.open .snize-product-filter-header-button, ${M} .snz-modal-row.snz-open { color: ${INK} !important; }\n  /* \"Sort by\" and \"In stock only\" text in Industry, exactly like the filter titles */\n  ${M} .snz-modal-row > span:first-child {\n    font-family: ${FONT} !important; font-size: 16px !important; font-weight: 400 !important; line-height: 1.2 !important;\n    letter-spacing: 0.32px !important; text-transform: none !important; color: inherit !important;\n  }\n  ${M} .snize-product-filter-header-button > :not(.snize-product-filters-title) { display: none !important; }\n  ${M} .snize-product-filter-header-button .snize-product-filters-title {\n    font: inherit !important; color: inherit !important; letter-spacing: inherit !important; text-transform: none !important; margin: 0 !important; padding: 0 !important;\n  }\n  ${M} .snize-product-filters-price-symbol { display: none !important; }\n  ${M} .snize-product-filter-header-button::before { display: none !important; content: none !important; }\n  /* Thin chevron: down when closed, up when open */\n  ${M} .snize-product-filter-header-button::after, ${M} .snz-modal-sort::after {\n    content: \"\" !important; display: block !important; flex: none !important; position: static !important;\n    width: 8px !important; height: 8px !important; margin: 0 4px 5px 0 !important; background: none !important;\n    border: 0 !important; border-right: 1.5px solid ${INK} !important; border-bottom: 1.5px solid ${INK} !important;\n    transform: rotate(45deg) !important; opacity: 1 !important;\n  }\n  ${M} .snize-product-filters-header.open .snize-product-filter-header-button::after,\n  ${M} .snz-modal-sort.snz-open::after { transform: rotate(-135deg) !important; margin: 5px 4px 0 0 !important; }\n\n  /* Open section: options under the title, divider after them */\n  ${M} .snize-product-filter-container {\n    flex: none !important; width: auto !important; margin: 0 ${PAD} !important; padding: 0 !important; border: 0 !important; background: none !important;\n  }\n  ${M} .snize-product-filter-container.open { padding: 0 0 20px !important; border-bottom: 1px solid ${LINE} !important; }\n\n  /* Checkbox options: grey square, label + (count) */\n  ${M} .snize-product-filters-list { list-style: none !important; margin: 0 !important; padding: 0 0 0 11px !important; border: 0 !important; }\n  ${M} .snize-product-filters-list li { display: flex !important; align-items: center !important; min-height: 29px !important; margin: 0 !important; padding: 0 !important; border: 0 !important; background: none !important; }\n  ${M} .snize-product-filters-list label { display: flex !important; align-items: center !important; gap: 12px !important; margin: 0 !important; padding: 0 !important; cursor: pointer; }\n  ${M} .snize-product-filters-list label,\n  ${M} .snize-product-filters-list label > span.needsclick {\n    font-family: ${TEXT} !important; font-size: 16px !important; line-height: 1.3 !important; font-weight: 400 !important; color: ${INK} !important; text-transform: none !important;\n  }\n  ${M} .snize-product-filters-list label > span.needsclick { margin: 0 !important; padding: 0 !important; }\n  ${M} .snize-filter-checkbox { position: relative !important; flex: none !important; width: 14px !important; height: 14px !important; margin: 0 !important; padding: 0 !important; }\n  ${M} .snize-filter-checkbox input { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; margin: 0 !important; opacity: 0 !important; z-index: 1; cursor: pointer; }\n  ${M} .snize-filter-checkbox span { display: block !important; width: 14px !important; height: 14px !important; margin: 0 !important; border: 0 !important; border-radius: 2px !important; background: #e5e5e5 !important; }\n  ${M} .snize-filter-checkbox span::before, ${M} .snize-filter-checkbox span::after { display: none !important; content: none !important; }\n  ${M} .snize-filter-checkbox input:checked + span { background: ${INK} !important; }\n  ${M} .snize-filter-variant-count { display: inline !important; position: static !important; margin: 0 0 0 4px !important; padding: 0 !important; background: none !important; font: inherit !important; color: inherit !important; opacity: 1 !important; }\n  ${M} .snize-filter-variant-count::before { content: \"(\"; }\n  ${M} .snize-filter-variant-count::after { content: \")\"; }\n\n  /* Size: the same checkbox list, in size order */\n  ${M} ul.snize-product-size-filter { display: flex !important; flex-direction: column !important; list-style: none !important; margin: 0 !important; padding: 0 0 0 11px !important; width: 100% !important; }\n  ${M} ul.snize-product-size-filter::before, ${M} ul.snize-product-size-filter::after { display: none !important; content: none !important; }\n  ${M} ul.snize-product-size-filter > li { display: flex !important; align-items: center !important; min-height: 29px !important; width: auto !important; height: auto !important; margin: 0 !important; padding: 0 !important; float: none !important; border: 0 !important; background: none !important; }\n  ${M} ul.snize-product-size-filter label { display: block !important; margin: 0 !important; padding: 0 !important; cursor: pointer; }\n  ${M} .snize-size-filter-checkbox { position: relative !important; display: block !important; width: auto !important; height: auto !important; margin: 0 !important; padding: 0 !important; }\n  ${M} .snize-size-filter-checkbox input { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; margin: 0 !important; opacity: 0 !important; z-index: 1; cursor: pointer; }\n  ${M} .snize-size-filter-checkbox span {\n    display: flex !important; align-items: center !important; gap: 12px !important; width: auto !important; height: auto !important; min-width: 0 !important;\n    margin: 0 !important; padding: 0 !important; border: 0 !important; border-radius: 0 !important; background: none !important; box-shadow: none !important;\n    font-family: ${TEXT} !important; font-size: 16px !important; line-height: 1.3 !important; color: ${INK} !important; text-align: left !important;\n  }\n  ${M} .snize-size-filter-checkbox span::before { content: \"\" !important; display: block !important; width: 14px !important; height: 14px !important; flex: none !important; border-radius: 2px !important; background: #e5e5e5 !important; }\n  ${M} .snize-size-filter-checkbox span::after { display: none !important; content: none !important; }\n  ${M} .snize-size-filter-checkbox input:checked + span::before { background: ${INK} !important; }\n\n  /* Color: square swatches */\n  ${M} ul.snize-product-color-filter {\n    display: grid !important; grid-template-columns: repeat(6, 36px) !important; justify-content: space-between !important; gap: 16px 0 !important;\n    width: 100% !important; margin: 0 !important; padding: 4px 11px 0 !important; list-style: none !important;\n  }\n  ${M} ul.snize-product-color-filter::before, ${M} ul.snize-product-color-filter::after { display: none !important; content: none !important; }\n  ${M} ul.snize-product-color-filter li, ${M} ul.snize-product-color-filter label { display: block !important; width: 36px !important; height: 36px !important; margin: 0 !important; padding: 0 !important; float: none !important; }\n  ${M} .snize-color-filter-checkbox { position: relative !important; width: 36px !important; height: 36px !important; margin: 0 !important; }\n  ${M} .snize-color-filter-checkbox span { display: block !important; width: 36px !important; height: 36px !important; margin: 0 !important; border-radius: 0 !important; border: 1px solid rgba(0, 0, 0, 0.1) !important; }\n  ${M} .snize-color-filter-checkbox span::before, ${M} .snize-color-filter-checkbox span::after { display: none !important; content: none !important; }\n  ${M} .snize-color-filter-checkbox input { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; opacity: 0 !important; margin: 0 !important; z-index: 1; cursor: pointer; }\n  ${M} .snize-color-filter-checkbox input:checked + span { outline: 2px solid ${INK} !important; outline-offset: 2px; }\n  ${M} .snize-color-name { display: none !important; }\n\n  /* Price: slider, then \"$ min  to  $ max\" boxes */\n  ${M} .snize-product-filter-container:has(.snize-price-range) .snize-product-filters-list { padding-left: 0 !important; }\n  ${M} .snize-price-range { display: grid !important; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) !important; align-items: center !important; column-gap: 20px !important; row-gap: 20px !important; width: 100% !important; height: auto !important; padding: 8px 0 4px !important; }\n  ${M} .snize-price-range-slider { grid-column: 1 / -1 !important; grid-row: 1 !important; position: relative !important; width: auto !important; height: 16px !important; margin: 0 8px !important; padding: 0 !important; }\n  ${M} .snize-price-range .slider-container { width: 100% !important; margin: 0 !important; top: 7px !important; }\n  ${M} .snize-price-range .back-bar, ${M} .snize-price-range .selected-bar { height: 2px !important; background: ${INK} !important; border-radius: 0 !important; }\n  ${M} .snize-price-range .pointer { width: 16px !important; height: 16px !important; top: -7px !important; margin-left: -8px; border-radius: 50% !important; background: #fff !important; border: 2px solid ${INK} !important; box-shadow: none !important; }\n  ${M} .snize-price-range .pointer::before, ${M} .snize-price-range .pointer::after, ${M} .snize-price-range .pointer-label, ${M} .snize-price-range .scale { display: none !important; }\n  ${M} .snize-price-range-input {\n    grid-row: 2 !important; width: 100% !important; height: 44px !important; margin: 0 !important; padding: 0 14px 0 32px !important; box-sizing: border-box !important;\n    border: 1px solid rgb(229, 229, 229) !important; border-radius: 0 !important; background: #fff !important; text-align: right !important;\n    font-family: ${FONT} !important; font-size: 16px !important; color: ${DIM} !important;\n  }\n  ${M} .snize-range-min-price { grid-column: 1 !important; }\n  ${M} .snize-range-max-price { grid-column: 3 !important; }\n  ${M} .snize-price-range > label.snize-visually-hidden {\n    grid-row: 2 !important; position: static !important; clip: auto !important; clip-path: none !important; width: auto !important; height: auto !important;\n    margin: 0 0 0 14px !important; overflow: visible !important; pointer-events: none; font-size: 0 !important; z-index: 1; justify-self: start;\n  }\n  ${M} .snize-price-range > label.snize-visually-hidden:first-of-type { grid-column: 1 !important; }\n  ${M} .snize-price-range > label.snize-visually-hidden:last-of-type { grid-column: 3 !important; }\n  ${M} .snize-price-range > label.snize-visually-hidden::after { content: \"$\"; font-family: ${FONT}; font-size: 16px; color: ${INK}; }\n  ${M} .snize-range-divider { grid-column: 2 !important; grid-row: 2 !important; width: auto !important; margin: 0 !important; font-size: 0 !important; white-space: nowrap !important; }\n  ${M} .snize-range-divider::after { content: \"to\"; font-family: ${FONT}; font-size: 16px; color: ${INK}; }\n\n  /* Sort by: same row style; options as a list with a grey square (black = current) */\n  ${M} #snize_product_filter_sort_by { display: none !important; }\n  ${M} #snize_product_filter_sort_by.snz-open { display: block !important; padding: 0 0 20px !important; border-bottom: 1px solid ${LINE} !important; }\n  ${M} #snize_product_filter_sort_by.snz-open .snize-product-filter-container,\n  ${M} #snize_product_filter_sort_by.snz-open ul { display: block !important; position: static !important; width: auto !important; height: auto !important; margin: 0 !important; padding: 0 0 0 11px !important; border: 0 !important; box-shadow: none !important; background: none !important; list-style: none !important; }\n  ${M} #snize_product_filter_sort_by.snz-open .snize-product-filter-container { padding: 0 !important; }\n  ${M} #snize_product_filter_sort_by li { display: flex !important; align-items: center !important; min-height: 29px !important; height: auto !important; line-height: 1.3 !important; margin: 0 !important; padding: 0 !important; border: 0 !important; background: none !important; }\n  ${M} #snize_product_filter_sort_by li::before, ${M} #snize_product_filter_sort_by li::after { display: none !important; content: none !important; }\n  ${M} #snize_product_filter_sort_by a {\n    display: flex !important; align-items: center !important; gap: 12px !important; width: auto !important; height: auto !important; min-height: 29px !important; padding: 0 !important; margin: 0 !important;\n    background: none !important; border: 0 !important; text-decoration: none !important; cursor: pointer;\n    font-family: ${TEXT} !important; font-size: 16px !important; font-weight: 400 !important; line-height: 1.3 !important; color: ${INK} !important; text-transform: none !important;\n  }\n  /* Same grey square as the Product Type checkboxes (black = the sort in use); Searchanise's own radio circles hidden */\n  ${M} #snize_product_filter_sort_by a > *, ${M} #snize_product_filter_sort_by input { display: none !important; }\n  ${M} #snize_product_filter_sort_by a::before {\n    content: \"\" !important; display: block !important; position: static !important; flex: none !important;\n    width: 14px !important; height: 14px !important; min-width: 0 !important; margin: 0 !important; padding: 0 !important;\n    border: 0 !important; border-radius: 2px !important; box-shadow: none !important; outline: 0 !important;\n    background: #e5e5e5 !important; transform: none !important; opacity: 1 !important;\n  }\n  ${M} #snize_product_filter_sort_by a.current::before { background: ${INK} !important; }\n  ${M} #snize_product_filter_sort_by a::after { display: none !important; content: none !important; }\n  ${M} #snize_product_filter_sort_by a.current { font-weight: 400 !important; }\n  ${M} .snz-modal-sort { order: 2; flex: none !important; width: auto !important; margin: 0 ${PAD} !important; border-bottom: 1px solid ${LINE} !important; }\n  ${M} .snz-modal-sort.snz-open { border-bottom: 0 !important; }\n  ${M} #snize_product_filter_sort_by { order: 3; }\n\n  /* In stock only: grey switch on the right */\n  ${M} .snz-modal-stock { order: 20; flex: none !important; width: auto !important; margin: 0 ${PAD} !important; border-bottom: 1px solid ${LINE} !important; }\n  ${M} .snz-modal-stock[aria-checked=\"true\"] { color: ${INK} !important; }\n  ${M} .snz-modal-stock__switch { position: relative; flex: none; width: 30px; height: 14px; border-radius: 999px; background: #e5e5e5; transition: background .2s ease; }\n  ${M} .snz-modal-stock__switch::after { content: \"\"; position: absolute; top: 2px; left: 2px; width: 10px; height: 10px; border-radius: 50%; background: #fff; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.12); transition: transform .2s ease; }\n  ${M} .snz-modal-stock[aria-checked=\"true\"] .snz-modal-stock__switch { background: ${INK}; }\n  ${M} .snz-modal-stock[aria-checked=\"true\"] .snz-modal-stock__switch::after { transform: translateX(16px); box-shadow: none; }\n\n  /* Footer: CLEAR ALL (outlined) and APPLY (black), fixed at the bottom */\n  ${M} .snize-product-filters-buttons-container {\n    order: 100 !important; position: sticky !important; bottom: 0 !important; z-index: 2 !important; flex: none !important;\n    width: 100% !important; margin: auto 0 0 !important; padding: 20px ${PAD} calc(20px + env(safe-area-inset-bottom, 0px)) !important;\n    background: #fff !important; border: 0 !important; border-top: 1px solid ${LINE} !important; box-shadow: none !important;\n  }\n  ${M} .snize-product-filters-showed-products { display: none !important; }\n  ${M} .snize-product-filters-buttons { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 16px !important; width: 100% !important; margin: 0 !important; padding: 0 !important; }\n  ${M} .snize-product-filters-buttons > button {\n    display: flex !important; align-items: center !important; justify-content: center !important; width: 100% !important; height: 46px !important;\n    min-height: 0 !important; margin: 0 !important; padding: 0 12px !important; border: 1px solid ${INK} !important; border-radius: 0 !important; font-size: 0 !important; cursor: pointer;\n  }\n  ${M} .snize-product-filters-buttons > button > * { display: none !important; }\n  ${M} .snize-product-filters-buttons > button::before {\n    font-family: ${FONT}; font-size: 14px; font-weight: 400; line-height: 1; letter-spacing: 0.56px; text-transform: uppercase;\n  }\n  ${M} .snize-product-filters-buttons > button::after { display: none !important; content: none !important; }\n  ${M} .snize-product-filters-reset-all { background: #fff !important; color: ${INK} !important; }\n  ${M} .snize-product-filters-reset-all::before { content: \"Clear all\"; color: ${INK}; }\n  ${M} .snize-product-filters-show-products { background: ${INK} !important; color: #fff !important; }\n  ${M} .snize-product-filters-show-products::before { content: \"Apply\"; color: #fff; }\n  `;\n  const style = document.createElement('style');\n  style.id = 'snize-mobile-filter-panel-style';\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const PANEL = '[id^=\"snize-modal-mobile-filters\"]';\n  const LETTERS = ['XXS', '2XS', 'XS', 'XS/S', 'S', 'S/M', 'M', 'M/L', 'L', 'L/XL', 'XL', 'XXL', '2XL', 'XXXL', '3XL', '4XL', '5XL'];\n  const rank = (v) => {\n    const s = String(v).trim().toUpperCase();\n    const i = LETTERS.indexOf(s);\n    if (i >= 0) return i;\n    const n = parseFloat(s.replace(/^[A-Z]+/, ''));\n    return isNaN(n) ? 2000 : 1000 + n;\n  };\n  let openedProductType = false;\n\n  const stockInput = (panel) => panel.querySelector('#snize_product_filter_stock_status input[type=\"checkbox\"]');\n\n  function sync() {\n    const panel = document.querySelector(PANEL);\n    const content = panel && panel.querySelector('.snize-modal-content');\n    if (!content) return;\n\n    // Row order, and hide the filters the desktop page doesn't show\n    content.querySelectorAll(':scope > .snize-product-filters-header:not(#snize_filters_block_header):not(.dedicated)').forEach((h) => {\n      const t = h.querySelector('.snize-product-filters-title');\n      const key = (t ? t.textContent : '').toLowerCase().replace(/,.*$/, '').trim();\n      const order = ORDER[key];\n      const box = h.nextElementSibling && h.nextElementSibling.classList.contains('snize-product-filter-container') ? h.nextElementSibling : null;\n      [h, box].forEach((el, i) => {\n        if (!el) return;\n        if (order) {\n          if (el.hasAttribute('data-snz-hide')) el.removeAttribute('data-snz-hide');\n          const o = String(order + i);\n          if (el.style.order !== o) el.style.order = o;\n        } else if (!el.hasAttribute('data-snz-hide')) el.setAttribute('data-snz-hide', '');\n      });\n      // Product Type starts open, like the collection page\n      if (key === 'product type' && !openedProductType) {\n        openedProductType = true;\n        if (!h.classList.contains('open')) { const b = h.querySelector('button'); if (b) b.click(); }\n      }\n    });\n\n    // \"Sort by\" row (opens Searchanise's own sort options in place)\n    const sortBox = content.querySelector('#snize_product_filter_sort_by');\n    let sortRow = content.querySelector(':scope > .snz-modal-sort');\n    // (row from an older version of this code)\n    content.querySelectorAll(':scope > .snz-modal-sort:not(.snz-modal-row)').forEach((r) => r.remove());\n    sortRow = content.querySelector(':scope > .snz-modal-sort');\n    if (sortBox && !sortRow) {\n      sortRow = document.createElement('button');\n      sortRow.type = 'button';\n      sortRow.className = 'snz-modal-row snz-modal-sort';\n      sortRow.innerHTML = '<span>Sort by</span>';\n      sortRow.addEventListener('click', (e) => {\n        e.preventDefault(); e.stopPropagation();\n        const open = !sortRow.classList.contains('snz-open');\n        sortRow.classList.toggle('snz-open', open);\n        const box = content.querySelector('#snize_product_filter_sort_by');\n        if (box) box.classList.toggle('snz-open', open);\n      });\n      content.insertBefore(sortRow, sortBox);\n    }\n    if (sortBox && sortRow && sortRow.classList.contains('snz-open') !== sortBox.classList.contains('snz-open')) {\n      sortBox.classList.toggle('snz-open', sortRow.classList.contains('snz-open'));\n    }\n\n    // \"In stock only\" switch (drives Searchanise's Availability > In Stock box)\n    const input = stockInput(panel);\n    let stock = content.querySelector(':scope > .snz-modal-stock');\n    if (input && !stock) {\n      stock = document.createElement('button');\n      stock.type = 'button';\n      stock.className = 'snz-modal-row snz-modal-stock';\n      stock.setAttribute('role', 'switch');\n      stock.innerHTML = '<span>In stock only</span><span class=\"snz-modal-stock__switch\" aria-hidden=\"true\"></span>';\n      stock.addEventListener('click', (e) => {\n        e.preventDefault(); e.stopPropagation();\n        const box = stockInput(panel);\n        if (box) { box.click(); stock.setAttribute('aria-checked', String(box.checked)); }\n      });\n      content.appendChild(stock);\n    }\n    if (stock) {\n      if (!input) stock.remove();\n      else if (stock.getAttribute('aria-checked') !== String(input.checked)) stock.setAttribute('aria-checked', String(input.checked));\n    }\n\n    // Price slider: Searchanise sets it up while the panel is hidden, so both handles start stuck on the left.\n    // Once Price is open, put the handles at the current min / max.\n    const slider = content.querySelector('#snize_slider_price');\n    const $ = window.Searchanise && window.Searchanise.$;\n    if (slider && $ && /NaN/.test(slider.value) && slider.closest('.snize-product-filter-container.open')) {\n      try {\n        const inst = $(slider).data('plugin_jRange');\n        const o = (inst && inst.options) || {};\n        const lo = parseFloat((content.querySelector('.snize-range-min-price') || {}).value);\n        const hi = parseFloat((content.querySelector('.snize-range-max-price') || {}).value);\n        $(slider).jRange('setValue', (isNaN(lo) ? o.from : lo) + ',' + (isNaN(hi) ? o.to : hi));\n      } catch (e) {}\n    }\n\n    // Sizes in size order\n    content.querySelectorAll('ul.snize-product-size-filter').forEach((list) => {\n      [...list.children]\n        .map((li) => ({ li, v: (li.querySelector('input') || {}).value || li.textContent }))\n        .sort((a, b) => rank(a.v) - rank(b.v) || String(a.v).localeCompare(String(b.v), undefined, { numeric: true }))\n        .forEach(({ li }, i) => { if (li.style.order !== String(i)) li.style.order = String(i); });\n    });\n  }\n\n  let queued = false;\n  const schedule = () => { if (!queued) { queued = true; setTimeout(() => { queued = false; try { sync(); } catch (e) {} }, 30); } };\n  new MutationObserver(schedule).observe(document.body, { childList: true, subtree: true });\n  schedule();\n})();\n\n/* Search results page, Collections and Pages tabs: titles styled exactly like the product titles\n   (same font, normal case, no letter-spacing, same padding) - 16px on desktop, 14px on mobile */\n(() => {\n  if (window.__snizeCollectionTitles) return;\n  window.__snizeCollectionTitles = true;\n\n  const R = ':is(#snize_results[data-tab=\"categories\"] li.snize-category, #snize_results[data-tab=\"pages\"] li)';\n  const style = document.createElement('style');\n  style.id = 'snize-collection-titles-style';\n  style.textContent = `\n  ${R} .snize-overhidden { padding: 16px 4% 0 2% !important; }\n  ${R} .snize-title {\n    font-family: var(--subheading-font-family, \"industry\", sans-serif) !important;\n    font-size: 16px !important; line-height: 20.8px !important; font-weight: 400 !important;\n    text-transform: none !important; letter-spacing: normal !important; color: rgb(28, 28, 28) !important;\n  }\n  ${R}:hover .snize-title { text-decoration: none !important; }\n  @media (max-width: 999px) {\n    ${R} .snize-overhidden { padding: 16px 4% 0 !important; }\n    ${R} .snize-title { font-size: 14px !important; line-height: 18.2px !important; }\n  }\n  /* Mobile: edge to edge with 2px gaps, like the products */\n  #snize_results.snize-mobile-design:is([data-tab=\"categories\"], [data-tab=\"pages\"]) ul.snize-search-results-content {\n    gap: var(--product-list-row-gap, 1.5rem) var(--product-list-column-gap, 2px) !important;\n  }`;\n  document.head.appendChild(style);\n})();\n\n/* Pages only show when their title contains what was searched (any case), and only if the page still opens.\n   e.g. \"sock\" shows \"Grip Sock Promotion\" but not \"USAFH Officials x Capelli Sport\".\n   With several words, every word must be in the title. Applies to the drawer (both Pages tabs) and the results page.\n   Searchanise redraws its results whenever anything inside them changes, so this block never touches Searchanise's\n   own elements: it hides pages and sets the \"Pages (n)\" count through its own stylesheet instead. */\n(() => {\n  if (window.__snizePagesExact) return;\n  window.__snizePagesExact = true;\n\n  const API_KEY = (window.Searchanise && window.Searchanise.ApiKey) || '7W0p4B8R5f';\n  const norm = (s) => String(s || '').toLowerCase().normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').replace(/\\s+/g, ' ').trim();\n  const matches = (title, q) => {\n    const words = norm(q).split(' ').filter(Boolean);\n    const t = norm(title);\n    return words.length > 0 && words.every((w) => t.includes(w));\n  };\n  const pathOf = (href) => { try { return new URL(href, location.origin).pathname.replace(/\\/$/, ''); } catch (e) { return ''; } };\n\n  // Is the page still live? Checked once per page, remembered for a day in the shopper's browser\n  const ALIVE_KEY = 'snize-page-alive';\n  let alive = {};\n  try {\n    const saved = JSON.parse(localStorage.getItem(ALIVE_KEY) || '{}');\n    Object.keys(saved).forEach((k) => { if (saved[k].t > Date.now() - 864e5) alive[k] = saved[k]; });\n  } catch (e) {}\n  const checking = new Map();\n  function aliveCheck(href) { // Promise<boolean>\n    const p = pathOf(href);\n    if (!p) return Promise.resolve(true);\n    if (alive[p]) return Promise.resolve(alive[p].ok);\n    if (!checking.has(p)) {\n      checking.set(p, fetch(p, { method: 'HEAD', credentials: 'same-origin' })\n        .then((r) => r.ok).catch(() => true)\n        .then((ok) => {\n          alive[p] = { ok, t: Date.now() };\n          try { localStorage.setItem(ALIVE_KEY, JSON.stringify(alive)); } catch (e) {}\n          return ok;\n        }));\n    }\n    return checking.get(p);\n  }\n  const isDead = (href) => { const a = alive[pathOf(href)]; return !!a && !a.ok; };\n\n  // Used by the drawer's own Pages code: should this page be shown for this search?\n  window.snizePageMatches = matches;\n  window.snizePageAlive = (href) => (isDead(href) ? false : true);\n  window.snizePageOk = (title, href, q) => matches(title, q) && !isDead(href);\n\n  // For a search: every page Searchanise has for it, split into the ones to show and the ones to hide\n  const lookups = new Map();\n  function lookup(q) {\n    const key = norm(q);\n    if (!key) return Promise.resolve({ show: [], hide: [] });\n    if (lookups.has(key)) return lookups.get(key);\n    const u = new URL('https://searchserverapi1.com/getresults');\n    u.search = new URLSearchParams({\n      api_key: API_KEY, q, output: 'json', items: 'false', categories: 'false', suggestions: 'false',\n      pages: 'true', pagesMaxResults: '100',\n    }).toString();\n    const job = fetch(u.href).then((r) => r.json()).then(async (d) => {\n      const pages = (d.pages || []).map((p) => ({ path: pathOf(p.link), title: p.title || '' })).filter((p) => p.path);\n      const ok = await Promise.all(pages.map((p) => (matches(p.title, q) ? aliveCheck(p.path) : false)));\n      return { show: pages.filter((p, i) => ok[i]), hide: pages.filter((p, i) => !ok[i]) };\n    }).catch(() => ({ show: null, hide: [] }));\n    lookups.set(key, job);\n    return job;\n  }\n\n  const fixed = document.createElement('style');\n  fixed.id = 'snize-pages-exact-base-style';\n  fixed.textContent = `.snz-page-cards__item[hidden], #search-drawer [slot=\"tab\"][hidden] { display: none !important; }`;\n  document.head.appendChild(fixed);\n  const style = document.createElement('style');\n  style.id = 'snize-pages-exact-style';\n  document.head.appendChild(style);\n  const cssEsc = (s) => String(s).replace(/[\"\\\\]/g, '\\\\$&');\n  let lastCss = '';\n\n  const drawerQ = () => { const i = document.querySelector('#search-drawer input[name=\"q\"]'); return i ? i.value.trim() : ''; };\n  const pageQ = () => (new URLSearchParams(location.search).get('q') || '').trim();\n\n  async function update() {\n    const dq = drawerQ();\n    const pq = document.querySelector('#snize_results') ? pageQ() : '';\n    const [d, p] = await Promise.all([lookup(dq), lookup(pq)]);\n    if (dq !== drawerQ()) return; // typing moved on; a newer update will follow\n\n    const rules = [];\n    const hideIn = (area, list) => list.forEach((x) => {\n      rules.push(`${area} li:has(a[href$=\"${cssEsc(x.path)}\"]), ${area} a.snize-drawer-pages__item[href$=\"${cssEsc(x.path)}\"] { display: none !important; }`);\n    });\n    hideIn('#snize-drawer-slot', d.hide);\n    hideIn('#snize_results', p.hide);\n\n    // Results page: \"Pages (n)\" shows the real number; the tab disappears when there are none\n    if (pq && p.show) {\n      const n = p.show.length;\n      rules.push(`#snize_results .snize-main-panel-controls a[class*=\"pages\"] span { font-size: 0 !important; }`);\n      rules.push(`#snize_results .snize-main-panel-controls a[class*=\"pages\"] span::before { content: \"(${n})\" !important; font-size: 14px !important; }`);\n      rules.push(`#snize_results .snize-main-panel-controls a[class*=\"pages\"] span::after { content: none !important; }`);\n      if (n === 0) rules.push(`#snize_results .snize-main-panel-controls li:has(a[class*=\"pages\"]) { display: none !important; }`);\n    }\n    // Drawer (Searchanise's widget): hide its Pages tab when nothing matches\n    if (dq && d.show && d.show.length === 0) {\n      rules.push(`#snize-drawer-slot .snize-drawer-tabs button[data-tab=\"pages\"] { display: none !important; }`);\n    }\n    const css = rules.join('\\n');\n    if (css !== lastCss) { lastCss = css; style.textContent = css; }\n\n    // Drawer (theme's own Pages tab): its cards are ours, so they can be filtered directly\n    document.querySelectorAll('#search-drawer .search-drawer__results [slot=\"tabpanel\"]').forEach((panel) => {\n      const cards = panel.querySelector('.snz-page-cards');\n      if (!cards) return;\n      let shown = 0;\n      cards.querySelectorAll('.snz-page-cards__item').forEach((a) => {\n        const t = a.querySelector('.snz-page-cards__title');\n        const ok = window.snizePageOk(t ? t.textContent : a.textContent, a.getAttribute('href'), dq);\n        if (a.hidden !== !ok) a.hidden = !ok;\n        if (ok) shown++;\n      });\n      const panels = [...panel.parentElement.querySelectorAll(':scope > [slot=\"tabpanel\"]')];\n      const tab = panel.parentElement.querySelectorAll(':scope > [slot=\"tab\"]')[panels.indexOf(panel)];\n      if (tab && tab.hidden !== (shown === 0)) {\n        tab.hidden = shown === 0;\n        if (shown === 0 && tab.getAttribute('aria-selected') === 'true') {\n          const first = panel.parentElement.querySelector(':scope > [slot=\"tab\"]:not([hidden])');\n          if (first) first.click();\n        }\n      }\n    });\n  }\n\n  let timer = null;\n  const schedule = () => { clearTimeout(timer); timer = setTimeout(() => { update().catch(() => {}); }, 60); };\n  // Only re-run when the search changes, the drawer's cards are rebuilt, or the results page tabs appear\n  document.addEventListener('input', schedule, true);\n  new MutationObserver((list) => {\n    if (list.some((m) => [...m.addedNodes].some((n) => n.nodeType === 1 && (n.matches('.snz-page-cards-wrap, .snz-page-cards, #snize_results, .snize-main-panel, .snize-drawer-pages') || n.querySelector && n.querySelector('.snz-page-cards, .snize-main-panel-controls'))))) schedule();\n  }).observe(document.body, { childList: true, subtree: true });\n  window.addEventListener('popstate', schedule);\n  schedule();\n})();"],
  "mappings": "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",
  "names": ["handles", "b", "c"]
}
