{
  "version": 3,
  "sources": ["/cdn/shop/t/144/assets/psykhe.js?version=1.0.0"],
  "sourcesContent": ["/*\n * PSYKHE PLP behavior overrides for the Olivela Shopify theme.\n *\n * This file customizes PSYKHE web components to match the production\n * PLP on www.olivela.com. Customization happens through public render\n * callbacks, facet config, typed `psykhe-*` events, and theme-owned\n * layout glue.\n *\n * Production reference: https://www.olivela.com/collections/new-arrivals\n *\n * File layout:\n *   1.  Sticky header offset       \u2014 getStickyOffset() dynamic header height\n *   2.  Collection metadata        \u2014 GLOBAL_COLLECTION_MAPPING helpers\n *   3.  Public override helpers    \u2014 renderCard, renderChip, facet config\n *   4.  Badge & tag data helpers   \u2014 getOlivelaCuratedBadge, getOlivelaCardTag\n *   5.  Pagination polish          \u2014 hide pagination when single page\n *   6.  Sticky controls bar        \u2014 sentinel + IntersectionObserver\n *   7.  Event/runtime glue         \u2014 typed analytics + content tiles\n *   8.  Controls bar text tweaks   \u2014 FILTER/SORT labels, Products count\n *   9. Search suggestion data      \u2014 fallback chips + helpers\n *   10. Bootstrap                  \u2014 DOMContentLoaded + public event wiring\n *   11. Pagination skeleton overlay \u2014 shimmer on slow page changes\n */\n\n// ---------------------------------------------------------------------------\n// 1. STICKY HEADER OFFSET\n//\n// getStickyOffset() returns the pixel offset below which a sticky element\n// should sit (i.e. the bottom of Olivela's fixed site header). Reads a CSS\n// variable first, then falls back to measuring the actual header element,\n// then to hardcoded 119/70 values.\n//\n// Measures the live header so the offset survives announcement-bar\n// dismissal and responsive breakpoint changes.\n// ---------------------------------------------------------------------------\n\nfunction parsePxValue(value) {\n  if (!value) return 0;\n  const parsed = Number.parseFloat(String(value).trim());\n  return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction normalizeOlivelaStickyOffset(offset) {\n  if (!Number.isFinite(offset) || offset <= 0) {\n    return 0;\n  }\n\n  if (window.innerWidth > 768 && offset >= 119) {\n    return offset - 1;\n  }\n\n  return offset;\n}\n\nvar _olivelaHeaderEl = null;\n\nfunction findOlivelaHeaderElement() {\n  if (_olivelaHeaderEl instanceof HTMLElement && _olivelaHeaderEl.isConnected) {\n    return _olivelaHeaderEl;\n  }\n  // Olivela uses a <sticky-header> custom element inside the .shopify-section-header\n  // wrapper. Fall back to the section wrapper if the custom element isn't present.\n  var candidates = [\n    \"sticky-header\",\n    \".shopify-section-header sticky-header\",\n    \".shopify-section-header .header-wrapper\",\n    \".shopify-section-header header\",\n    \".shopify-section-header\",\n    \"header.header\",\n    \".header__wrapper\",\n  ];\n  for (var i = 0; i < candidates.length; i++) {\n    var el = document.querySelector(candidates[i]);\n    if (el instanceof HTMLElement && el.offsetHeight > 0) {\n      _olivelaHeaderEl = el;\n      return el;\n    }\n  }\n  return null;\n}\n\n// Measures the live bottom edge of the Olivela header on every call rather\n// than caching a value, because the header height changes when the announcement\n// bar is dismissed and during the sticky-show transition. Math.floor avoids\n// the 1px subpixel gap that appears between the header and the PLP sticky bar\n// when the browser rounds a fractional `bottom` value upward.\nfunction getStickyOffset() {\n  var styles = window.getComputedStyle(document.documentElement);\n  var explicitSticky = parsePxValue(\n    styles.getPropertyValue(\"--sticky-header-offset\")\n  );\n  if (explicitSticky > 0) return normalizeOlivelaStickyOffset(explicitSticky);\n\n  // iOS app webview only: the app reserves extra top space for the native status\n  // bar (see .is-pwa header-section top:46px rule in header.liquid), so the header's\n  // real bottom edge sits lower there than in a normal browser tab. The candidates in\n  // findOlivelaHeaderElement() never match this theme's actual header markup\n  // (<header-component id=\"header-component\">), so without this branch the app would\n  // fall through to the same static window.innerWidth fallback the browser uses \u2014\n  // pinning the sticky controls bar under/behind the app's status bar. Scoped to\n  // .is-pwa only so the already-working browser/mobile-web path below is untouched.\n  if (document.documentElement.classList.contains(\"is-pwa\")) {\n    var pwaHeader = document.querySelector(\"#header-component\");\n    if (pwaHeader instanceof HTMLElement) {\n      var pwaRect = pwaHeader.getBoundingClientRect();\n      if (pwaRect.height > 0) {\n        return normalizeOlivelaStickyOffset(Math.floor(pwaRect.bottom));\n      }\n    }\n  }\n\n  var header = findOlivelaHeaderElement();\n  if (header) {\n    var rect = header.getBoundingClientRect();\n    if (rect.height > 0) {\n      return normalizeOlivelaStickyOffset(Math.floor(rect.bottom));\n    }\n  }\n\n  return window.innerWidth <= 768 ? 70 : 118;\n}\n\n// ---------------------------------------------------------------------------\n// 2. COLLECTION METADATA\n//\n// Olivela theme sets window.GLOBAL_COLLECTION_MAPPING (e.g. \"Clothing > Tops\")\n// to indicate the current PLP's category depth. We use this to decide:\n//   - which category levels to show/hide in the filter panel drill-down\n// Reference: Olivela theme's GLOBAL_COLLECTION_MAPPING liquid variable.\n// ---------------------------------------------------------------------------\n\nfunction getOlivelaCollectionMapping() {\n  if (typeof window.GLOBAL_COLLECTION_MAPPING !== \"string\") {\n    return \"\";\n  }\n\n  return window.GLOBAL_COLLECTION_MAPPING.trim();\n}\n\nfunction getOlivelaCollectionSegments() {\n  const mapping = getOlivelaCollectionMapping();\n  if (!mapping) {\n    return [];\n  }\n\n  return mapping\n    .split(\">\")\n    .map((segment) => segment.trim())\n    .filter((segment) => segment.length > 0);\n}\n\n// ---------------------------------------------------------------------------\n// 3. PUBLIC OVERRIDE HELPERS\n// ---------------------------------------------------------------------------\n\nvar olivelaRuntimeState = {\n  instance: \"default\",\n  page: 1,\n  total: 0,\n  itemsOnPage: 0,\n  facets: [],\n  categoryTitleLabels: {\n    category_2: [],\n  },\n  runtimeInit: false,\n};\n\nvar olivelaAutoOpenState = {\n  didBootstrapCategoryOpen: false,\n  prevCat0Selected: [],\n  prevCat1Selected: [],\n  prevCat2Selected: [],\n  // Set on psykhe-refinements-change and flushed on psykhe-loading-change\n  // (loading:false), so the child accordion opens only after fresh facet\n  // data has rendered.\n  pendingDrillOpenKey: null,\n};\n\n// ---------------------------------------------------------------------------\n// 4. BADGE & TAG DATA HELPERS + CONSTANTS\n//\n// Shared data extraction helpers for Olivela's product-card override.\n// Reads named_tags.Badge_curated1 / Badge_curated for the top-left badge and\n// named_tags.Tag_curated1 / Tag_curated for the text below the price.\n// ---------------------------------------------------------------------------\n\n// Class fallback for browsers without :has() support (see psykhe.css layout rule).\nfunction initOlivelaAppBlock(root) {\n  if (!(root instanceof HTMLElement)) return;\n  const appBlock = root.closest(\".shopify-app-block\");\n  if (appBlock instanceof HTMLElement && !appBlock.classList.contains(\"psykhe-app-block\")) {\n    appBlock.classList.add(\"psykhe-app-block\");\n  }\n}\n\n// Badge priority promotes \"Selling Fast\" when present in the array.\nfunction normalizeOlivelaBadgeValue(value, preferSellingFast) {\n  if (Array.isArray(value)) {\n    const firstString = value.find(\n      (entry) => typeof entry === \"string\" && entry.trim().length > 0\n    );\n    if (\n      preferSellingFast &&\n      value.some(\n        (entry) =>\n          typeof entry === \"string\" &&\n          entry.trim().toLowerCase() === \"selling fast\"\n      )\n    ) {\n      return \"Selling Fast\";\n    }\n    return typeof firstString === \"string\" ? firstString.trim() : \"\";\n  }\n\n  if (typeof value !== \"string\") return \"\";\n\n  const normalized = value.trim();\n  if (!normalized) return \"\";\n  if (preferSellingFast && normalized.toLowerCase() === \"selling fast\") {\n    return \"Selling Fast\";\n  }\n  return normalized;\n}\n\nfunction getOlivelaNamedTags(item) {\n  if (!item || typeof item !== \"object\") {\n    return null;\n  }\n\n  if (item.named_tags && typeof item.named_tags === \"object\") {\n    return item.named_tags;\n  }\n\n  if (item.metadata && typeof item.metadata === \"object\") {\n    var metadataNamedTags = item.metadata.named_tags;\n    if (metadataNamedTags && typeof metadataNamedTags === \"object\") {\n      return metadataNamedTags;\n    }\n  }\n\n  if (item.namedTags && typeof item.namedTags === \"object\") {\n    return item.namedTags;\n  }\n\n  return null;\n}\n\n// Reads named_tags.Badge_curated1 then Badge_curated. Typical Olivela\n// values: \"New Arrival\", \"Selling Fast\".\nfunction getOlivelaCuratedBadge(item) {\n  if (!item || typeof item !== \"object\") return \"\";\n\n  const namedTags = getOlivelaNamedTags(item);\n  if (!namedTags || typeof namedTags !== \"object\") return \"\";\n\n  const primary = normalizeOlivelaBadgeValue(namedTags.Badge_curated1, true);\n  if (primary) return primary;\n\n  return normalizeOlivelaBadgeValue(namedTags.Badge_curated, false);\n}\n\n// Returns the card tag for an item using the following priority order:\n//   1. Personalization = \"Engravable\" (always shown, highest priority)\n//   2. Tag2 (other values) \u2014 suppressed for carousels, Badge=New, Availability=Pre-order, Availability=Made to order\n//   3. Personalization = \"Letters available\"\n//   4. Tag1\n//   5. Tag (only when value is \"fast shipping\")\n//   6. Tag_curated1\n//   7. Tag_curated\nfunction getOlivelaCardTag(item) {\n  if (!item || typeof item !== \"object\") return \"\";\n\n  var namedTags = getOlivelaNamedTags(item);\n  if (!namedTags || typeof namedTags !== \"object\") return \"\";\n\n  function firstVal(/** @type {string|string[]|undefined} */ v) {\n    if (typeof v === \"string\" && v.trim()) return v.trim();\n    if (Array.isArray(v)) {\n      var found = v.find(function(x) { return typeof x === \"string\" && x.trim(); });\n      return found ? found.trim() : \"\";\n    }\n    return \"\";\n  }\n\n  // Unlike firstVal, this searches every entry of a multi-value tag (e.g. Availability\n  // can be [\"Available now\", \"Fast shipping\"]) instead of only looking at the first one.\n  function findVal(/** @type {string|string[]|undefined} */ v, /** @type {string} */ target) {\n    var values = typeof v === \"string\" ? [v] : Array.isArray(v) ? v : [];\n    var found = values.find(function(x) {\n      return typeof x === \"string\" && x.trim().toLowerCase() === target.toLowerCase();\n    });\n    return found ? found.trim() : \"\";\n  }\n\n  var tag2 = firstVal(namedTags.Personalization);\n  if (tag2 === \"Engravable\") return 'Engraving available';\n\n  if (tag2) {\n    var isCarousel = !!item.isCarousel;\n    var badgeNew = firstVal(namedTags.Badge) === \"New\";\n    var preOrder = !!findVal(namedTags.Availability, \"Pre-order\");\n    var madeToOrder = !!findVal(namedTags.Availability, \"Made to order\");\n    if (!isCarousel && !badgeNew && !preOrder && !madeToOrder) return tag2;\n  }\n\n  var tag1 = firstVal(namedTags.Personalization);\n  if (tag1 === \"Letters available\") return 'More letters available';\n\n  tag1 = firstVal(namedTags.Tag1);\n  if (tag1) return tag1;\n\n  var tag = firstVal(namedTags.Tag);\n  if (tag && tag.toLowerCase() === \"fast shipping\") return tag;\n\n  var tagCurated1 = firstVal(namedTags.Tag_curated1);\n  if (tagCurated1) return tagCurated1;\n\n  var mto = findVal(namedTags.Availability, \"Made to order\");\n  if (mto) return mto;\n\n  return firstVal(namedTags.Tag_curated);\n}\n\nfunction formatOlivelaCardTagLabel(value) {\n  var normalized = String(value || \"\").trim().toLowerCase();\n  if (!normalized) {\n    return \"\";\n  }\n\n  return normalized.charAt(0).toUpperCase() + normalized.slice(1);\n}\n\nfunction getOlivelaProductPrice(product) {\n  if (typeof product?.price === \"string\") {\n    return String(product.price).trim();\n  }\n  return formatOlivelaMoneyAmount(product?.price?.current?.amount);\n}\n\nfunction getOlivelaCompareAtPrice(product) {\n  return formatOlivelaMoneyAmount(product?.price?.compareAt?.amount);\n}\n\nfunction toOlivelaImageObject(value) {\n  if (!value) return null;\n  if (typeof value === \"string\") return { url: value };\n  if (typeof value.url === \"string\") return value;\n  if (typeof value.src === \"string\") {\n    return { url: value.src, width: value.width, height: value.height, altText: value.alt };\n  }\n  return null;\n}\n\nfunction getOlivelaProductPrimaryImage(product) {\n  if (Array.isArray(product?.images) && product.images.length > 0) {\n    var obj = toOlivelaImageObject(product.images[0]);\n    if (obj) return obj;\n  }\n  return toOlivelaImageObject(product?.image || product?.featured_image);\n}\n\nfunction getOlivelaProductHoverImage(product) {\n  if (Array.isArray(product?.images) && product.images.length > 1) {\n    var obj = toOlivelaImageObject(product.images[1]);\n    if (obj) return obj;\n  }\n  return toOlivelaImageObject(product?.imageHover);\n}\n\nfunction olivelaShouldHideHoverImage() {\n  return typeof window.matchMedia === \"function\"\n    ? window.matchMedia(\"(hover: none)\").matches\n    : window.innerWidth <= 768;\n}\n\nfunction formatOlivelaMoneyAmount(amount) {\n  if (typeof amount !== \"number\" || !Number.isFinite(amount)) {\n    return \"\";\n  }\n  return \"$\" + amount.toLocaleString(\"en-US\");\n}\n\nfunction getOlivelaProductUrl(product) {\n  if (product && typeof product.url === \"string\" && product.url.trim()) {\n    return product.url.trim();\n  }\n\n  var handle =\n    typeof product?.handle === \"string\" && product.handle.trim()\n      ? product.handle.trim()\n      : \"\";\n\n  return handle ? \"/products/\" + handle : \"#\";\n}\n\nfunction renderOlivelaProductCard(product, ctx, onClick, options) {\n  var primaryImage = getOlivelaProductPrimaryImage(product);\n  var hoverImage = getOlivelaProductHoverImage(product);\n  var title = product?.title || \"\";\n  var vendor = product?.vendor || \"\";\n  var priceFormatted = getOlivelaProductPrice(product);\n  var compareAt = getOlivelaCompareAtPrice(product);\n  var onSale = !!(product?.price && product.price.onSale);\n  var url = getOlivelaProductUrl(product);\n  var badge = getOlivelaCuratedBadge(product);\n  var cardTag = formatOlivelaCardTagLabel(getOlivelaCardTag(product));\n  var linkTabIndex = options && typeof options.linkTabIndex === \"number\"\n    ? options.linkTabIndex\n    : null;\n  var handle = typeof product?.handle === \"string\" ? product.handle.trim() : \"\";\n  var rawPrice = product?.price?.current?.amount != null\n    ? product.price.current.amount\n    : (typeof product?.price === \"string\" ? product.price.replace(/[^0-9.]/g, \"\") : \"\");\n  var imageUrl = primaryImage?.url || \"\";\n\n  return ctx.html`\n    <a\n      part=\"card card-link\"\n      href=${url}\n      aria-label=${title || vendor || \"View product\"}\n      tabindex=${linkTabIndex != null ? String(linkTabIndex) : ctx.nothing}\n      @click=${onClick || ctx.nothing}\n    >\n      <div part=\"media\">\n        ${badge ? ctx.html`<span part=\"badge\">${badge}</span>` : \"\"}\n        ${primaryImage?.url\n          ? ctx.html`\n              <img\n                part=\"image image-primary\"\n                src=${primaryImage.url}\n                alt=${primaryImage.altText || title || \"\"}\n                loading=\"lazy\"\n                width=${primaryImage.width || 620}\n                height=${primaryImage.height || 775}\n              />\n            `\n          : \"\"}\n        ${(!options?.hideHoverImage && hoverImage?.url)\n          ? ctx.html`\n              <img\n                part=\"image image-hover\"\n                src=${hoverImage.url}\n                alt=\"\"\n                aria-hidden=\"true\"\n                loading=\"lazy\"\n                width=${hoverImage.width || primaryImage?.width || 620}\n                height=${hoverImage.height || primaryImage?.height || 775}\n              />\n            `\n          : \"\"}\n      </div>\n      ${handle\n        ? ctx.html`<div\n            part=\"wishlist-anchor\"\n            data-handle=${handle}\n            data-name=${title}\n            data-image=${imageUrl}\n            data-price=${String(rawPrice)}\n            data-url=${url}\n          ></div>`\n        : \"\"}\n      <div part=\"content content-link\">\n        <p part=\"vendor\">${vendor}</p>\n        <p part=\"title\">${title}</p>\n        <div part=\"pricing\">\n          ${onSale && compareAt\n            ? ctx.html`<span part=\"compare-price\">${compareAt}</span>`\n            : \"\"}\n          <span part=\"price\">${priceFormatted}</span>\n        </div>\n        ${cardTag ? ctx.html`<span part=\"more-info\">${cardTag}</span>` : \"\"}\n      </div>\n    </a>\n  `;\n}\n\nfunction formatOlivelaPriceChipLabel(label) {\n  var raw = String(label == null ? \"\" : label).trim();\n  if (!raw) return raw;\n\n  var numbers = raw.replace(/\\$/g, \"\").match(/\\d+(?:\\.\\d+)?/g);\n  if (numbers && numbers.length >= 2) {\n    return \"$\" + numbers[0] + \" - $\" + numbers[1];\n  }\n  if (numbers && numbers.length === 1) {\n    var amount = \"$\" + numbers[0];\n    if (/\\bunder\\b|up to|^</i.test(raw)) return amount + \" and under\";\n    if (/\\+|from/i.test(raw)) return amount + \" +\";\n    return amount;\n  }\n\n  return raw.charAt(0) === \"$\" ? raw : \"$\" + raw;\n}\n\nfunction renderOlivelaFilterChip(chip, ctx) {\n  var label =\n    typeof chip.label === \"string\" && chip.label.includes(\">\")\n      ? normalizeOlivelaHierarchicalLabel(chip.label)\n      : chip.label;\n  if (String(chip.facetLabel || \"\").toLowerCase() === \"price\") {\n    label = formatOlivelaPriceChipLabel(label);\n  }\n\n  return ctx.html`\n    <button\n      ${ctx.a11y.chipRemove(chip)}\n      part=\"chip\"\n      @click=${ctx.actions.remove(chip)}\n    >\n      <span part=\"remove\">\n        <span part=\"chip-remove-icon\" aria-hidden=\"true\"></span>\n      </span>\n      <span part=\"chip-label\">\n        <span part=\"chip-facet-label\">${chip.facetLabel}:</span>\n        <span part=\"chip-value-label\">${label}</span>\n      </span>\n    </button>\n  `;\n}\n\nfunction getSelectedFacetLabels(facets, facetKey) {\n  var facet = getFacetModelByKey(facets, facetKey);\n  if (!facet || !Array.isArray(facet.options)) {\n    return [];\n  }\n\n  return facet.options\n    .filter(function (option) {\n      return option && option.selected === true;\n    })\n    .map(function (option) {\n      return String(option.label || \"\").trim();\n    })\n    .filter(function (label) {\n      return label.length > 0;\n    });\n}\n\nvar OLIVELA_PRIORITY_FILTERS_BY_COLLECTION = {\n  Jewelry: [\"Category\", \"Material\", \"Size\", \"Color\", \"Designer\", \"Price\"],\n  Clothing: [\"Category\", \"Size\", \"Color\", \"Occasion\", \"Price\"],\n  Shoes: [\"Category\", \"Size\", \"Color\", \"Occasion\", \"Price\"],\n  \"Bags-accessories\": [\"Category\", \"Size\", \"Color\", \"Occasion\", \"Price\"],\n  \"New-arrivals\": [\"Category\", \"Designer\", \"Size\", \"Color\", \"Material\", \"Price\"],\n  Search: [\"Category\", \"Designer\", \"Size\", \"Color\", \"Material\", \"Price\"],\n  Designer: [\"Category\", \"Size\", \"Color\", \"Material\", \"Price\"],\n};\n\nvar OLIVELA_PRIORITY_FILTER_FACET_KEYS = {\n  Category: \"category_0\",\n  Designer: \"designer\",\n  Size: \"us_size\",\n  Color: \"color\",\n  Material: \"material\",\n  Occasion: \"occasion\",\n  Price: \"price\",\n};\n\nfunction getFacetModelByKey(facets, facetKey) {\n  return Array.isArray(facets)\n    ? facets.find(function (entry) {\n        return entry && entry.key === facetKey;\n      }) || null\n    : null;\n}\n\nfunction isRenderableOlivelaFacetOption(option) {\n  if (!option || typeof option !== \"object\") {\n    return false;\n  }\n\n  return (\n    option.selected === true ||\n    option.disabled !== true ||\n    (typeof option.count === \"number\" && option.count > 0)\n  );\n}\n\nfunction isRenderableOlivelaFacet(facets, facetKey) {\n  var facet = getFacetModelByKey(facets, facetKey);\n  if (!facet || typeof facet !== \"object\") {\n    return false;\n  }\n\n  if (typeof facet.selectedCount === \"number\" && facet.selectedCount > 0) {\n    return true;\n  }\n\n  if (isOlivelaPriceFacet(facet)) {\n    // Price is renderable when numeric bounds are available.\n    return (\n      typeof facet.currentMin === \"number\" &&\n      typeof facet.currentMax === \"number\" &&\n      facet.currentMax >= facet.currentMin\n    );\n  }\n\n  if (!Array.isArray(facet.options)) {\n    return false;\n  }\n\n  return facet.options.some(isRenderableOlivelaFacetOption);\n}\n\nfunction isOlivelaPriceFacet(facet) {\n  if (!facet || facet.type !== \"range\") return false;\n  return facet.key === \"price\" || facet.label === \"Price\";\n}\n\nfunction getOlivelaPriorityFilterCollectionKey() {\n  var mapping = getOlivelaCollectionMapping();\n  if (!mapping) {\n    var path = String(window.location.pathname || \"\").toLowerCase();\n    if (path.includes(\"/search\")) return \"Search\";\n    if (path.includes(\"/new-arrivals\")) return \"New-arrivals\";\n    if (path.includes(\"/designer-\")) return \"Designer\";\n    return \"\";\n  }\n\n  var normalized = mapping.replace(/ & /g, \"-\").replace(/\\s+/g, \"-\");\n  return (\n    Object.keys(OLIVELA_PRIORITY_FILTERS_BY_COLLECTION).find(function (key) {\n      return normalized.includes(key);\n    }) || \"\"\n  );\n}\n\nfunction getOlivelaPriorityFilterLabels() {\n  var collectionKey = getOlivelaPriorityFilterCollectionKey();\n  return collectionKey\n    ? OLIVELA_PRIORITY_FILTERS_BY_COLLECTION[collectionKey] || []\n    : [];\n}\n\nfunction resolveOlivelaPriorityFacetKey(label) {\n  if (label === \"Designer\") {\n    if (isRenderableOlivelaFacet(olivelaRuntimeState.facets, \"designer\")) {\n      return \"designer\";\n    }\n    if (isRenderableOlivelaFacet(olivelaRuntimeState.facets, \"vendor\")) {\n      return \"vendor\";\n    }\n    if (isRenderableOlivelaFacet(olivelaRuntimeState.facets, \"brand\")) {\n      return \"brand\";\n    }\n  }\n\n  if (label === \"Size\") {\n    if (isRenderableOlivelaFacet(olivelaRuntimeState.facets, \"us_size\")) {\n      return \"us_size\";\n    }\n    if (isRenderableOlivelaFacet(olivelaRuntimeState.facets, \"size\")) {\n      return \"size\";\n    }\n  }\n\n  if (label !== \"Category\") {\n    return OLIVELA_PRIORITY_FILTER_FACET_KEYS[label] || \"\";\n  }\n\n  var collectionKey = getOlivelaPriorityFilterCollectionKey();\n  var mappingDepth = getOlivelaCollectionSegments().length;\n  if (collectionKey !== \"New-arrivals\" && collectionKey !== \"Search\") {\n    if (mappingDepth === 1) return \"category_1\";\n    if (mappingDepth >= 2) return \"category_2\";\n  }\n\n  return \"category_0\";\n}\n\nfunction getOlivelaPriorityFacetLabel(facetKey) {\n  var facet = getFacetModelByKey(olivelaRuntimeState.facets, facetKey);\n  if (facet && typeof facet.label === \"string\" && facet.label.trim()) {\n    return facet.label.trim();\n  }\n\n  switch (facetKey) {\n    case \"category_0\":\n    case \"category_1\":\n    case \"category_2\":\n      return \"Category\";\n    case \"designer\":\n    case \"vendor\":\n    case \"brand\":\n      return \"Designer\";\n    case \"us_size\":\n      return \"Size\";\n    case \"color\":\n      return \"Color\";\n    case \"material\":\n      return \"Material\";\n    case \"occasion\":\n      return \"Occasion\";\n    default:\n      return \"\";\n  }\n}\n\n/**\n * Fuse.js adapter for the designer facet search input.\n *\n * Plugs into `FacetConfig.searchFilter` on the <psykhe-filter-panel>. The\n * panel calls this once per keystroke (only while the query is non-empty)\n * with the current unselected values. Selected designers are pinned by the\n * panel and never passed through here, so this matcher cannot hide them.\n *\n * Fuse config: `threshold: 0.4`, `ignoreLocation: true`,\n * `minMatchCharLength: 0`.\n *\n * The Fuse instance is memoized on the values-array identity so we avoid\n * rebuilding the index on every keystroke \u2014 the panel passes the same array\n * until facet data changes. Falls back to case-insensitive substring if\n * `window.Fuse` is not loaded (CDN blocked, load ordering, etc.).\n */\nfunction createOlivelaDesignerSearchFilter() {\n  var cachedFuse = null;\n  var cachedValues = null;\n\n  return function designerSearchFilter(query, values) {\n    if (window.Fuse) {\n      if (cachedValues !== values) {\n        cachedValues = values;\n        cachedFuse = new window.Fuse(values, {\n          keys: [\"label\"],\n          threshold: 0.4,\n          ignoreLocation: true,\n          minMatchCharLength: 0,\n        });\n      }\n      return cachedFuse.search(query).map(function (result) {\n        return result.item;\n      });\n    }\n\n    var needle = String(query).toLowerCase();\n    return values.filter(function (value) {\n      var label = value && value.label ? String(value.label).toLowerCase() : \"\";\n      return label.indexOf(needle) !== -1;\n    });\n  };\n}\n\nvar olivelaDesignerSearchFilter = createOlivelaDesignerSearchFilter();\n\nfunction buildOlivelaFilterFacetConfig() {\n  var collectionSegments = getOlivelaCollectionSegments();\n  var mappingDepth = collectionSegments.length;\n  var sourceFacets = olivelaRuntimeState.facets;\n  var cat0Selected = getSelectedFacetLabels(sourceFacets, \"category_0\");\n  var cat1Selected = getSelectedFacetLabels(sourceFacets, \"category_1\");\n  var cat2Selected = getSelectedFacetLabels(sourceFacets, \"category_2\");\n\n  if (cat1Selected.length > 0 && cat2Selected.length === 0) {\n    olivelaRuntimeState.categoryTitleLabels.category_2 = cat1Selected.slice();\n  } else if (cat1Selected.length === 0 && cat2Selected.length === 0) {\n    olivelaRuntimeState.categoryTitleLabels.category_2 = [];\n  } else if (\n    cat1Selected.length > 0 &&\n    olivelaRuntimeState.categoryTitleLabels.category_2.length === 0\n  ) {\n    olivelaRuntimeState.categoryTitleLabels.category_2 = cat1Selected.slice();\n  }\n\n  var effectiveCat0Selected =\n    cat0Selected.length > 0\n      ? cat0Selected\n      : mappingDepth > 0\n      ? [collectionSegments[0]]\n      : [];\n  var effectiveCat1Selected =\n    cat2Selected.length > 0 &&\n    olivelaRuntimeState.categoryTitleLabels.category_2.length > 0\n      ? olivelaRuntimeState.categoryTitleLabels.category_2\n      : cat1Selected.length > 0\n      ? cat1Selected\n      : mappingDepth > 1\n      ? [collectionSegments.slice(0, 2).join(\" > \")]\n      : [];\n\n  var showCategoryOne =\n    mappingDepth < 2 &&\n    (mappingDepth === 1 || effectiveCat0Selected.length > 0) &&\n    isRenderableOlivelaFacet(sourceFacets, \"category_1\");\n  var showCategoryTwo =\n    (mappingDepth >= 2 ||\n      (effectiveCat1Selected.length > 0 && showCategoryOne)) &&\n    isRenderableOlivelaFacet(sourceFacets, \"category_2\");\n\n  if (!Array.isArray(sourceFacets)) {\n    return [{ key: \"designer\", searchable: true, visible: false }];\n  }\n\n  var mapped = sourceFacets\n    .filter(function (f) {\n      return f && typeof f.key === \"string\" && f.key.length > 0;\n    })\n    .map(function (f) {\n      var key = f.key;\n      switch (key) {\n        case \"category_0\":\n          return {\n            key: \"category_0\",\n            visible:\n              mappingDepth === 0 &&\n              isRenderableOlivelaFacet(sourceFacets, \"category_0\"),\n          };\n        case \"category_1\":\n          return {\n            key: \"category_1\",\n            visible: showCategoryOne,\n            label:\n              showCategoryOne && effectiveCat0Selected.length > 0\n                ? effectiveCat0Selected.join(\", \")\n                : undefined,\n            labelFormatter: normalizeOlivelaHierarchicalLabel,\n          };\n        case \"category_2\":\n          return {\n            key: \"category_2\",\n            visible: showCategoryTwo,\n            label:\n              showCategoryTwo && effectiveCat1Selected.length > 0\n                ? effectiveCat1Selected\n                    .map(normalizeOlivelaHierarchicalLabel)\n                    .join(\", \")\n                : undefined,\n            labelFormatter: normalizeOlivelaHierarchicalLabel,\n          };\n        case \"designer\":\n          return {\n            key: \"designer\",\n            searchable: true,\n            searchFilter: olivelaDesignerSearchFilter,\n            visible: isRenderableOlivelaFacet(sourceFacets, \"designer\"),\n          };\n        case \"color\":\n          return {\n            key: \"color\",\n            swatchMap: olivelaColorMap,\n            visible: isRenderableOlivelaFacet(sourceFacets, \"color\"),\n          };\n        default:\n          return {\n            key: key,\n            visible: isRenderableOlivelaFacet(sourceFacets, key),\n          };\n      }\n    });\n\n  var hasDesigner = mapped.some(function (f) { return f.key === \"designer\"; });\n  if (!hasDesigner) {\n    mapped = [{ key: \"designer\", searchable: true, visible: false }].concat(mapped);\n  }\n  return mapped;\n}\n\nvar OLIVELA_PRICE_BUCKETS = [200, 300, 500, 1000];\n\nvar olivelaRangePanelId = 0;\nvar olivelaRangePanelIds = new WeakMap();\n\nfunction olivelaGetRangeControlKey(facet, panel) {\n  var panelId = panel ? olivelaRangePanelIds.get(panel) : null;\n  if (panel && !panelId) {\n    olivelaRangePanelId += 1;\n    panelId = \"olivela-price-range-\" + olivelaRangePanelId;\n    olivelaRangePanelIds.set(panel, panelId);\n  }\n  return (panelId || \"olivela-price-range\") + \":\" + facet.key;\n}\n\nfunction olivelaMakeRangeBounds(min, max) {\n  if (typeof min === \"number\" && typeof max === \"number\" && max > min) {\n    return { min: min, max: max };\n  }\n  return null;\n}\n\nfunction olivelaMakePriceAvailabilityBounds(min, max) {\n  if (typeof min === \"number\" && typeof max === \"number\" && max >= min) {\n    return { min: min, max: max };\n  }\n  return null;\n}\n\nfunction buildOlivelaPriceBuckets(statsMin, statsMax, activeSelection) {\n  var buckets = [];\n  OLIVELA_PRICE_BUCKETS.forEach(function (threshold) {\n    var bucket = {\n      kind: \"under\",\n      label: \"$\" + threshold + \" and under\",\n      min: null,\n      max: threshold,\n    };\n    var isActive = olivelaIsSamePriceSelection(activeSelection, bucket);\n    if (isActive || (threshold >= statsMin && threshold <= statsMax)) {\n      buckets.push({\n        kind: bucket.kind,\n        label: bucket.label,\n        min: bucket.min,\n        max: bucket.max,\n      });\n    }\n  });\n  var top = OLIVELA_PRICE_BUCKETS[OLIVELA_PRICE_BUCKETS.length - 1];\n  var topBucket = {\n    kind: \"over\",\n    label: \"$\" + top + \" +\",\n    min: top,\n    max: null,\n  };\n  if (olivelaIsSamePriceSelection(activeSelection, topBucket) || statsMax >= top) {\n    buckets.push(topBucket);\n  }\n  return buckets;\n}\n\nfunction olivelaGetMatchingPriceBucketIdx(selection, buckets) {\n  if (!selection) return null;\n  for (var i = 0; i < buckets.length; i++) {\n    var bucket = buckets[i];\n    if (olivelaIsSamePriceSelection(selection, bucket)) {\n      return i;\n    }\n  }\n  return null;\n}\n\nfunction olivelaIsSamePriceSelection(selection, bucket) {\n  return (\n    selection &&\n    bucket &&\n    selection.min === bucket.min &&\n    selection.max === bucket.max\n  );\n}\n\nfunction olivelaNormalizeSelectedRange(selection) {\n  if (!selection || typeof selection !== \"object\" || Array.isArray(selection)) {\n    return null;\n  }\n\n  var min =\n    typeof selection.min === \"number\" && Number.isFinite(selection.min)\n      ? selection.min\n      : null;\n  var max =\n    typeof selection.max === \"number\" && Number.isFinite(selection.max)\n      ? selection.max\n      : null;\n\n  if (min === null && max === null) return null;\n  return { min: min, max: max, bucketIdx: null };\n}\n\nfunction olivelaParsePriceInput(value) {\n  var trimmed = String(value == null ? \"\" : value).trim();\n  if (trimmed === \"\") return null;\n  var num = Number(trimmed);\n  return Number.isFinite(num) ? num : null;\n}\n\nfunction olivelaTogglePartToken(el, token, active) {\n  if (!el) return;\n  var parts = String(el.getAttribute(\"part\") || \"\")\n    .split(/\\s+/)\n    .filter(Boolean);\n  var hasToken = parts.indexOf(token) !== -1;\n  if (active && !hasToken) {\n    parts.push(token);\n  } else if (!active && hasToken) {\n    parts = parts.filter(function (part) {\n      return part !== token;\n    });\n  }\n  el.setAttribute(\"part\", parts.join(\" \"));\n}\n\nfunction olivelaSetPriceInputsInvalid(form, invalid) {\n  if (!form) return;\n  var errorId = form.getAttribute(\"data-olivela-error-id\");\n  var errorEl = form.querySelector(\"[data-olivela-error]\");\n  if (errorEl) {\n    errorEl.textContent = invalid ? \"Enter a valid price range.\" : \"\";\n  }\n  form.toggleAttribute(\"data-olivela-invalid\", invalid);\n  form\n    .querySelectorAll('[data-olivela-bound]')\n    .forEach(function (input) {\n      input.setAttribute(\"aria-invalid\", invalid ? \"true\" : \"false\");\n      if (invalid && errorId) {\n        input.setAttribute(\"aria-describedby\", errorId);\n      } else if (input.getAttribute(\"aria-describedby\") === errorId) {\n        input.removeAttribute(\"aria-describedby\");\n      }\n      olivelaTogglePartToken(input, \"range-input-invalid\", invalid);\n      olivelaTogglePartToken(\n        input.closest('[part~=\"range-field\"]'),\n        \"range-field-invalid\",\n        invalid\n      );\n    });\n}\n\nfunction olivelaSyncPriceRangeForm(form, min, max) {\n  if (!form) return;\n  var minEl = form.querySelector('[data-olivela-bound=\"min\"]');\n  var maxEl = form.querySelector('[data-olivela-bound=\"max\"]');\n  if (minEl) minEl.value = typeof min === \"number\" ? String(min) : \"\";\n  if (maxEl) maxEl.value = typeof max === \"number\" ? String(max) : \"\";\n  olivelaSetPriceInputsInvalid(form, false);\n}\n\nfunction olivelaRefreshPriceRangePanel(panel) {\n  if (!panel) return;\n  if (typeof panel.requestUpdate === \"function\") {\n    panel.requestUpdate();\n  }\n}\n\nfunction olivelaCommitPriceInputs(\n  form,\n  facetKey,\n  actions,\n  hasSelection,\n  bounds\n) {\n  var minEl = form.querySelector('[data-olivela-bound=\"min\"]');\n  var maxEl = form.querySelector('[data-olivela-bound=\"max\"]');\n  var typedMin = olivelaParsePriceInput(minEl && minEl.value);\n  var typedMax = olivelaParsePriceInput(maxEl && maxEl.value);\n  olivelaSetPriceInputsInvalid(form, false);\n\n  if (typedMin === null && typedMax === null) {\n    if (minEl) minEl.value = \"\";\n    if (maxEl) maxEl.value = \"\";\n    if (hasSelection) {\n      actions.setRange(facetKey, null, null);\n      return true;\n    }\n    return false;\n  }\n\n  var nextMin = typedMin === null ? null : Math.max(0, typedMin);\n  var nextMax = typedMax === null ? null : Math.max(0, typedMax);\n\n  if (\n    typeof nextMin === \"number\" &&\n    typeof nextMax === \"number\" &&\n    nextMin >= nextMax\n  ) {\n    olivelaSetPriceInputsInvalid(form, true);\n    return false;\n  }\n\n  if (bounds) {\n    var belowAvailable =\n      typeof nextMax === \"number\" && nextMax < Math.floor(bounds.min);\n    var aboveAvailable =\n      typeof nextMin === \"number\" && nextMin > Math.ceil(bounds.max);\n    if (belowAvailable || aboveAvailable) {\n      olivelaSetPriceInputsInvalid(form, true);\n      return false;\n    }\n  }\n\n  if (minEl) minEl.value = typeof nextMin === \"number\" ? String(nextMin) : \"\";\n  if (maxEl) maxEl.value = typeof nextMax === \"number\" ? String(nextMax) : \"\";\n\n  actions.setRange(facetKey, nextMin, nextMax);\n  return true;\n}\n\nfunction olivelaClearPresetSelection(form) {\n  var presets = form.querySelectorAll('input[data-olivela-preset]');\n  presets.forEach(function (preset) {\n    preset.checked = false;\n  });\n}\n\nfunction olivelaResetPriceRangeControls(scope) {\n  var root = scope instanceof HTMLElement ? scope : document;\n  root.querySelectorAll(\"psykhe-filter-panel\").forEach(function (panel) {\n    if (!panel.shadowRoot) return;\n    panel.shadowRoot\n      .querySelectorAll('[part~=\"range-controls\"]')\n      .forEach(function (form) {\n        olivelaSyncPriceRangeForm(form, null, null);\n        form\n          .querySelectorAll('input[data-olivela-preset]')\n          .forEach(function (preset) {\n            preset.checked = false;\n          });\n      });\n    if (typeof panel.requestUpdate === \"function\") {\n      panel.requestUpdate();\n    }\n  });\n}\n\nfunction olivelaRenderPriceRange(facet, ctx, panel) {\n  if (!isOlivelaPriceFacet(facet)) return null;\n\n  var controlKey = olivelaGetRangeControlKey(facet, panel);\n  var baselineBounds = olivelaMakeRangeBounds(\n    facet.baselineMin,\n    facet.baselineMax\n  );\n  if (!baselineBounds) return null;\n  var availabilityBounds = olivelaMakePriceAvailabilityBounds(\n    facet.currentMin,\n    facet.currentMax\n  );\n  var inputBounds = baselineBounds;\n  if (facet.selectedCount === 0 && availabilityBounds) {\n    inputBounds =\n      olivelaMakePriceAvailabilityBounds(\n        Math.max(baselineBounds.min, availabilityBounds.min),\n        Math.min(baselineBounds.max, availabilityBounds.max)\n      ) || baselineBounds;\n  }\n  var selection = olivelaNormalizeSelectedRange(facet.selectedRange);\n  // Without an active Price selection, show only presets available for the\n  // current results. When Price is active, keep broader presets available so\n  // the shopper can replace or clear the current price range.\n  var presetBounds =\n    facet.selectedCount > 0 ? baselineBounds : inputBounds;\n  var statsMin = presetBounds.min;\n  var statsMax = presetBounds.max;\n  var buckets = buildOlivelaPriceBuckets(statsMin, statsMax, selection);\n\n  if (selection && selection.bucketIdx == null) {\n    var matchingBucketIdx = olivelaGetMatchingPriceBucketIdx(selection, buckets);\n    if (matchingBucketIdx !== null) {\n      selection = {\n        min: selection.min,\n        max: selection.max,\n        bucketIdx: matchingBucketIdx,\n      };\n    }\n  }\n  var activeBucketIdx = selection ? selection.bucketIdx : null;\n\n  function onInputType(event) {\n    var form = event.currentTarget.closest('[part=\"range-controls\"]');\n    if (form) olivelaClearPresetSelection(form);\n  }\n\n  function onInputKey(event) {\n    if (event.key !== \"Enter\") return;\n    event.preventDefault();\n    var form = event.currentTarget.closest('[part=\"range-controls\"]');\n    if (form) {\n      if (olivelaCommitPriceInputs(\n        form,\n        facet.key,\n        ctx.actions,\n        facet.selectedCount > 0,\n        inputBounds\n      )) {\n        olivelaRefreshPriceRangePanel(panel);\n      }\n    }\n  }\n\n  function onInputBlur(event) {\n    var form = event.currentTarget.closest('[part=\"range-controls\"]');\n    var nextFocus =\n      event.relatedTarget && form && form.contains(event.relatedTarget)\n        ? event.relatedTarget\n        : null;\n    if (\n      nextFocus &&\n      typeof nextFocus.hasAttribute === \"function\" &&\n      nextFocus.hasAttribute(\"data-olivela-bound\")\n    ) {\n      return;\n    }\n    if (form) {\n      if (olivelaCommitPriceInputs(\n        form,\n        facet.key,\n        ctx.actions,\n        facet.selectedCount > 0,\n        inputBounds\n      )) {\n        olivelaRefreshPriceRangePanel(panel);\n      }\n    }\n  }\n\n  function onPresetClick(idx, bucket, active) {\n    return function (event) {\n      var form = event.currentTarget.closest('[part=\"range-controls\"]');\n      var activeNow = selection\n        ? olivelaIsSamePriceSelection(selection, bucket)\n        : active;\n      if (activeNow) {\n        event.currentTarget.checked = false;\n        olivelaSyncPriceRangeForm(form, null, null);\n        ctx.actions.setRange(facet.key, null, null);\n        olivelaRefreshPriceRangePanel(panel);\n        return;\n      }\n\n      if (form) {\n        var presets = form.querySelectorAll('input[data-olivela-preset]');\n        presets.forEach(function (preset) {\n          preset.checked = preset === event.currentTarget;\n        });\n      }\n      olivelaSyncPriceRangeForm(form, bucket.min, bucket.max);\n      ctx.actions.setRange(facet.key, bucket.min, bucket.max);\n      olivelaRefreshPriceRangePanel(panel);\n    };\n  }\n\n  var minDisplay =\n    selection && typeof selection.min === \"number\" ? String(selection.min) : \"\";\n  var maxDisplay =\n    selection && typeof selection.max === \"number\" ? String(selection.max) : \"\";\n  var presetName = controlKey.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n  var minInputName = presetName + \"-min\";\n  var maxInputName = presetName + \"-max\";\n  var errorId = presetName + \"-error\";\n\n  return ctx.html`\n    <div\n      part=\"range-controls\"\n      role=\"group\"\n      aria-label=${facet.label}\n      data-olivela-error-id=${errorId}\n    >\n      <label part=\"range-field\">\n        <span part=\"range-field-label\">Min</span>\n        <input\n          part=\"range-input\"\n          data-olivela-bound=\"min\"\n          name=${minInputName}\n          type=\"text\"\n          inputmode=\"decimal\"\n          placeholder=\"\"\n          autocomplete=\"off\"\n          aria-label=\"Minimum price\"\n          .value=${minDisplay}\n          @input=${onInputType}\n          @keydown=${onInputKey}\n          @blur=${onInputBlur}\n        />\n      </label>\n      <label part=\"range-field\">\n        <span part=\"range-field-label\">Max</span>\n        <input\n          part=\"range-input\"\n          data-olivela-bound=\"max\"\n          name=${maxInputName}\n          type=\"text\"\n          inputmode=\"decimal\"\n          placeholder=\"\"\n          autocomplete=\"off\"\n          aria-label=\"Maximum price\"\n          .value=${maxDisplay}\n          @input=${onInputType}\n          @keydown=${onInputKey}\n          @blur=${onInputBlur}\n        />\n      </label>\n      <span\n        id=${errorId}\n        part=\"range-error\"\n        data-olivela-error\n        aria-live=\"polite\"\n        role=\"status\"\n      ></span>\n      <div part=\"price-presets\" role=\"group\" aria-label=${facet.label + \" presets\"}>\n        ${buckets.map(function (b, idx) {\n          var active = activeBucketIdx === idx;\n          return ctx.html`\n            <label part=${active ? \"price-preset-option option option-selected\" : \"price-preset-option option\"}>\n              <span part=\"price-preset-label option-label\">\n                <input\n                  part=\"price-preset-input option-input\"\n                  data-olivela-preset\n                  type=\"checkbox\"\n                  name=${presetName}\n                  .checked=${active}\n                  @click=${onPresetClick(idx, b, active)}\n                />\n                ${b.label}\n              </span>\n            </label>\n          `;\n        })}\n      </div>\n    </div>\n  `;\n}\n\nfunction applyOlivelaFilterPanelConfig(panel) {\n  if (!(panel instanceof HTMLElement)) {\n    return;\n  }\n\n  panel.toggleAttribute(\"hide-count\", true);\n  if (\"singleOpen\" in panel) {\n    panel.singleOpen = true;\n  } else {\n    panel.setAttribute(\"single-open\", \"\");\n  }\n  if (\"scrollOnExpand\" in panel) {\n    panel.scrollOnExpand = \"start\";\n  } else {\n    panel.setAttribute(\"scroll-on-expand\", \"start\");\n  }\n  if (\"hierarchicalMode\" in panel) {\n    panel.hierarchicalMode = \"drill-down\";\n  } else {\n    panel.setAttribute(\"hierarchical-mode\", \"drill-down\");\n  }\n  var isDrawerPanel = !!panel.closest(\"psykhe-drawer\");\n  if (isDrawerPanel) {\n    if (\"facetSummary\" in panel) {\n      panel.facetSummary = \"count\";\n    } else {\n      panel.setAttribute(\"facet-summary\", \"count\");\n    }\n  }\n  if (isDrawerPanel && !panel.hasAttribute(\"max-visible-items\")) {\n    panel.setAttribute(\"max-visible-items\", \"0\");\n  }\n\n  panel.facets = buildOlivelaFilterFacetConfig();\n  panel.renderRange = function (facet, ctx) {\n    return olivelaRenderPriceRange(facet, ctx, panel);\n  };\n\n  // Shadow DOM style injection: hide search clear icon & native clear button\n  if (panel.shadowRoot && !panel.shadowRoot.querySelector('#olivela-facet-search-style')) {\n    var shadowStyle = document.createElement('style');\n    shadowStyle.id = 'olivela-facet-search-style';\n    shadowStyle.textContent = '[part=\"facet-search-clear\"] svg { display: none !important; } [part=\"facet-search-input\"]::-webkit-search-cancel-button { -webkit-appearance: none; display: none !important; } [part=\"facet-search-input\"]::-ms-clear { display: none !important; }';\n    panel.shadowRoot.appendChild(shadowStyle);\n  }\n}\n\nvar WRAPPED_FETCHER_MARKER = Symbol(\"psykhe.olivelaWrapped\");\nvar WRAPPED_CLEAR_FILTERS_MARKER = Symbol(\"psykhe.olivelaClearWrapped\");\n\n// Upserts the \"VIEW ALL\" link next to the \"Most Popular Searches\" label.\n// `visible` is driven from the suggestions fetcher \u2014 the fetcher knows\n// whether we have a query AND whether that query returned products, which\n// is the ground truth for showing the link. Driving from DOM `input` events\n// cannot distinguish \"typed but no results\" and would leak stale links\n// across dialog open/close cycles.\nfunction syncOlivelaViewAllLink(input, row, visible) {\n  if (!row) return;\n  var existing = row.querySelector(\".psykhe-olivela-queries-heading__link\");\n\n  if (!visible) {\n    if (existing) existing.remove();\n    return;\n  }\n\n  var raw = typeof input.value === \"string\" ? input.value : \"\";\n  var query = raw.trim();\n\n  if (!query) {\n    if (existing) existing.remove();\n    return;\n  }\n  var href = \"/search?q=\" + encodeURIComponent(query);\n  if (existing) {\n    if (existing.getAttribute(\"href\") !== href) existing.setAttribute(\"href\", href);\n    return;\n  }\n  var linkEl = document.createElement(\"a\");\n  linkEl.className = \"psykhe-olivela-queries-heading__link\";\n  linkEl.href = href;\n  linkEl.textContent = \"VIEW ALL\";\n  row.appendChild(linkEl);\n}\n\nfunction syncOlivelaLabel(input, labelEl, hasResults) {\n  if (!(labelEl instanceof HTMLElement)) return;\n  var raw = typeof input.value === \"string\" ? input.value : \"\";\n  var query = raw.trim();\n  labelEl.textContent = (query && hasResults) ? \"Suggestions\" : \"Most Popular Searches\";\n}\n\n// Slot the \"Most Popular Searches\" heading + (conditional) \"no results\"\n// notice into the search input's public `queries-heading` slot. Pure light-DOM\n// append \u2014 no shadow DOM probe, no MutationObserver. The wrapper is\n// idempotent via the `[slot=\"queries-heading\"]` existence check.\nfunction mountOlivelaQueriesHeading(input) {\n  if (!(input instanceof HTMLElement)) return;\n  if (input.querySelector(':scope > [slot=\"queries-heading\"]')) return;\n\n  var heading = document.createElement(\"div\");\n  heading.setAttribute(\"slot\", \"queries-heading\");\n  heading.className = \"psykhe-olivela-queries-heading\";\n\n  var noResultsEl = document.createElement(\"div\");\n  noResultsEl.className = \"psykhe-olivela-no-results\";\n  noResultsEl.hidden = true;\n  noResultsEl.appendChild(document.createTextNode('Sorry, there are no results for \"'));\n  var noResultsQ = document.createElement(\"span\");\n  noResultsQ.className = \"psykhe-olivela-no-results__q\";\n  noResultsEl.appendChild(noResultsQ);\n  noResultsEl.appendChild(document.createTextNode('\"'));\n  heading.appendChild(noResultsEl);\n\n  var labelRow = document.createElement(\"div\");\n  labelRow.className = \"psykhe-olivela-queries-heading__row\";\n\n  var labelEl = document.createElement(\"span\");\n  labelEl.className = \"psykhe-olivela-queries-heading__label\";\n  labelEl.textContent = \"Most Popular Searches\";\n  labelRow.appendChild(labelEl);\n  heading.appendChild(labelRow);\n\n  input.appendChild(heading);\n  input.__psykheOlivelaLabelEl = labelEl;\n  input.__psykheOlivelaLabelRow = labelRow;\n  // Initial state: empty query, no results, hide VIEW ALL.\n  syncOlivelaViewAllLink(input, labelRow, false);\n  syncOlivelaLabel(input, labelEl, false);\n}\n\n// Toggle the \"Sorry, there are no results for '<q>'\" notice that lives\n// inside the slotted queries-heading. Shown only when user typed AND zero\n// hits; hidden otherwise.\nfunction setOlivelaNoResultsState(input, show, query) {\n  if (!(input instanceof HTMLElement)) return;\n  var noResultsEl = input.querySelector(\n    ':scope > [slot=\"queries-heading\"] .psykhe-olivela-no-results'\n  );\n  if (!noResultsEl) return;\n  noResultsEl.hidden = !show;\n  if (show) {\n    var qEl = noResultsEl.querySelector(\".psykhe-olivela-no-results__q\");\n    if (qEl) qEl.textContent = typeof query === \"string\" ? query : \"\";\n  }\n}\n\n// Render a chip as an `<a>` so click/cmd-click/right-click navigate to\n// `/search?q=...` natively. `@mousedown=preventDefault` preserves input focus\n// so a click keeps the suggestions panel open until navigation commits.\nfunction renderOlivelaQueryChipAsLink(query, ctx) {\n  var value = (query && (query.value || query.label)) || \"\";\n  var url =\n    typeof query.url === \"string\" && query.url\n      ? query.url\n      : \"/search?q=\" + encodeURIComponent(value);\n  return ctx.html`\n    <a\n      part=\"query-chip\"\n      href=${url}\n      @mousedown=${(e) => e.preventDefault()}\n    >${query.label || query.value}</a>\n  `;\n}\n\nfunction olivelaSlugify(s) {\n  return String(s || \"\")\n    .toLowerCase()\n    .replace(/&/g, \" \")\n    .replace(/[^a-z0-9\\s-]/g, \"\")\n    .trim()\n    .replace(/\\s+/g, \"-\")\n    .replace(/-+/g, \"-\");\n}\n\nfunction resolveOlivelaCollectionHref(label, preferredSlugs) {\n  var table = Array.isArray(window.shopifyCollections) ? window.shopifyCollections : [];\n  if (!table.length) return null;\n\n  var candidates = [];\n  for (var i = 0; i < preferredSlugs.length; i++) {\n    var s = preferredSlugs[i];\n    if (s) candidates.push(s);\n  }\n  var labelSlug = olivelaSlugify(label);\n  if (labelSlug) candidates.push(labelSlug);\n\n  var labelLower = String(label || \"\").toLowerCase().trim();\n\n  for (var j = 0; j < table.length; j++) {\n    var entry = table[j];\n    if (!entry) continue;\n    var handle = entry.handle || \"\";\n    var title = (entry.title || \"\").toLowerCase().trim();\n    if (title && title === labelLower) return \"/collections/\" + handle;\n    for (var k = 0; k < candidates.length; k++) {\n      if (handle === candidates[k]) return \"/collections/\" + handle;\n    }\n  }\n  return null;\n}\n\nfunction deriveOlivelaChipsFromProducts(products, limit) {\n  var max = typeof limit === \"number\" && limit > 0 ? limit : 15;\n  if (!Array.isArray(products) || products.length === 0) return [];\n\n  var chipMap = new Map();\n\n  function upsertChip(label, url) {\n    var key = label.toLowerCase();\n    var existing = chipMap.get(key);\n    if (!existing) {\n      chipMap.set(key, { label: label, url: url });\n    } else if (\n      url.indexOf(\"/collections/\") === 0 &&\n      existing.url.indexOf(\"/collections/\") !== 0\n    ) {\n      chipMap.set(key, { label: label, url: url });\n    }\n  }\n\n  products.forEach(function (product) {\n    if (!product || typeof product !== \"object\") return;\n    var data = product.data;\n    if (!data || typeof data !== \"object\") return;\n\n    var isGiftCard = typeof data.product_type === \"string\"\n      && data.product_type.trim().toLowerCase() === \"gift cards\";\n\n    if (isGiftCard) {\n      if (typeof data.handle === \"string\" && data.handle.trim()) {\n        var giftLabel = (typeof data.title === \"string\" && data.title.trim()) || \"Gift Card\";\n        upsertChip(giftLabel, \"/products/\" + data.handle.trim());\n      }\n    } else if (typeof data.vendor === \"string\" && data.vendor.trim()) {\n      var vendorName = data.vendor.trim();\n      var vendorSlug = olivelaSlugify(vendorName);\n      var preferredSlugs = [\"designer-\" + vendorSlug, vendorSlug];\n      var vendorUrl = resolveOlivelaCollectionHref(vendorName, preferredSlugs)\n        || \"/search?q=\" + encodeURIComponent(vendorName);\n      upsertChip(vendorName, vendorUrl);\n    }\n\n    var named = data.named_tags;\n    if (!named || typeof named !== \"object\") return;\n\n    function processLvl(arr, takeLast, levelKey) {\n      if (!Array.isArray(arr)) return;\n      arr.forEach(function (v) {\n        if (typeof v !== \"string\") return;\n        var raw = v.trim();\n        if (!raw) return;\n        var chipLabel = takeLast ? raw.split(\">\").pop().trim() : raw;\n        if (!chipLabel) return;\n        var chipSlug = olivelaSlugify(chipLabel);\n\n        var chipUrl = null;\n        if (levelKey === \"category_2\") {\n          var segs = raw.split(\">\").map(function (s) { return s.trim(); }).filter(Boolean);\n          if (segs.length >= 2) {\n            var parentLabel = segs[segs.length - 2];\n            var parentHref = resolveOlivelaCollectionHref(\n              parentLabel,\n              [olivelaSlugify(parentLabel)]\n            );\n            if (parentHref && parentHref.indexOf(\"/collections/\") === 0) {\n              chipUrl = parentHref + \"?pf.category_2=\" + encodeURIComponent(raw);\n            }\n          }\n        }\n\n        chipUrl = chipUrl\n          || resolveOlivelaCollectionHref(chipLabel, [chipSlug])\n          || \"/search?q=\" + encodeURIComponent(chipLabel);\n        upsertChip(chipLabel, chipUrl);\n      });\n    }\n\n    processLvl(named[\"categories.lvl0\"], false, \"category_0\");\n    processLvl(named[\"categories.lvl1\"], true, \"category_1\");\n    processLvl(named[\"categories.lvl2\"], true, \"category_2\");\n  });\n\n  var chips = Array.from(chipMap.values())\n    .sort(function (a, b) {\n      return a.label.toLowerCase() < b.label.toLowerCase() ? -1 : a.label.toLowerCase() > b.label.toLowerCase() ? 1 : 0;\n    })\n    .slice(0, max)\n    .map(function (c) { return { value: c.label, label: c.label, url: c.url }; });\n\n  return chips;\n}\n\nfunction createCarouselIcon(slotName, pathData) {\n  var svgNamespace = \"http://www.w3.org/2000/svg\";\n  var icon = document.createElementNS(svgNamespace, \"svg\");\n  var path = document.createElementNS(svgNamespace, \"path\");\n\n  icon.setAttribute(\"slot\", slotName);\n  icon.setAttribute(\"class\", \"psykhe-carousel-icon\");\n  icon.setAttribute(\"width\", \"18\");\n  icon.setAttribute(\"height\", \"18\");\n  icon.setAttribute(\"viewBox\", \"0 0 24 24\");\n  icon.setAttribute(\"aria-hidden\", \"true\");\n  icon.setAttribute(\"focusable\", \"false\");\n\n  path.setAttribute(\"d\", pathData);\n  path.setAttribute(\"fill\", \"none\");\n  path.setAttribute(\"stroke\", \"currentColor\");\n  path.setAttribute(\"stroke-width\", \"2\");\n  icon.appendChild(path);\n\n  return icon;\n}\n\nfunction applyCarouselIcons(feed) {\n  if (feed.getAttribute(\"layout\") !== \"carousel\") {\n    return;\n  }\n\n  if (!feed.querySelector('[slot=\"carousel-prev-icon\"]')) {\n    feed.appendChild(\n      createCarouselIcon(\"carousel-prev-icon\", \"M15 6l-6 6 6 6\")\n    );\n  }\n\n  if (!feed.querySelector('[slot=\"carousel-next-icon\"]')) {\n    feed.appendChild(\n      createCarouselIcon(\"carousel-next-icon\", \"M9 6l6 6-6 6\")\n    );\n  }\n}\n\nfunction applyOlivelaPublicOverrides(root) {\n  var scope = root instanceof HTMLElement ? root : document;\n\n  scope.querySelectorAll(\"psykhe-product-grid\").forEach(function (grid) {\n    if (!(grid instanceof HTMLElement)) {\n      return;\n    }\n    grid.renderCard = function (product, ctx) {\n      return renderOlivelaProductCard(product, ctx, ctx.actions.click(product));\n    };\n      // Customize empty-state message via slot=\"empty\" override\n    if (!grid.querySelector('[slot=\"empty\"]')) {\n      var emptySlot = document.createElement(\"div\");\n      emptySlot.setAttribute(\"slot\", \"empty\");\n      emptySlot.setAttribute(\"part\", \"empty-query\");\n      emptySlot.style.cssText = \"text-align:center;padding:clamp(3rem,6vw,6rem) 1rem;font-size:16px;line-height:1.5;color:rgb(47,47,48);text-wrap:balance;\";\n      emptySlot.textContent = \"Sorry, we couldn\\u2019t find any results.\";\n      grid.appendChild(emptySlot);\n\n      // Listen for query changes to update the message with the search term\n      var provider = grid.closest(\"psykhe-provider\") || grid.closest(\".psykhe--search, .psykhe\");\n      if (provider) {\n        provider.addEventListener(\"psykhe-query-change\", function (e) {\n          var q = (e.detail && e.detail.query) || \"\";\n          emptySlot.textContent = q\n            ? 'Sorry, we couldn\\u2019t find any results for \\u201C' + q + '\\u201D'\n            : \"Sorry, we couldn\\u2019t find any results.\";\n        });\n      }\n\n      // Also try to pick up the query from the URL for search pages\n      var params = new URLSearchParams(window.location.search);\n      var initialQ = params.get(\"q\") || params.get(\"query\") || \"\";\n      if (initialQ) {\n        emptySlot.textContent = 'Sorry, we couldn\\u2019t find any results for \\u201C' + initialQ + '\\u201D';\n      }\n    }\n  });\n\n  scope.querySelectorAll(\"psykhe-recommendations\").forEach(function (feed) {\n    if (!(feed instanceof HTMLElement)) {\n      return;\n    }\n    feed.renderCard = function (product, ctx) {\n      return renderOlivelaProductCard(product, ctx, ctx.actions.click(product), {\n        hideHoverImage: olivelaShouldHideHoverImage(),\n      });\n    };\n    applyCarouselIcons(feed);\n  });\n\n  scope.querySelectorAll(\"psykhe-active-filters\").forEach(function (active) {\n    if (!(active instanceof HTMLElement)) {\n      return;\n    }\n    active.renderChip = renderOlivelaFilterChip;\n  });\n\n  scope.querySelectorAll(\"psykhe-filter-panel\").forEach(function (panel) {\n    applyOlivelaFilterPanelConfig(panel);\n  });\n\n  scope.querySelectorAll(\"psykhe-clear-filters\").forEach(function (clearFilters) {\n    if (\n      !(clearFilters instanceof HTMLElement) ||\n      clearFilters[WRAPPED_CLEAR_FILTERS_MARKER] ||\n      typeof clearFilters.clearAll !== \"function\"\n    ) {\n      return;\n    }\n    var originalClearAll = clearFilters.clearAll.bind(clearFilters);\n    clearFilters[WRAPPED_CLEAR_FILTERS_MARKER] = true;\n    clearFilters.clearAll = function () {\n      olivelaAutoOpenState.pendingDrillOpenKey = null;\n      olivelaResetPriceRangeControls(document);\n      return originalClearAll();\n    };\n  });\n\n  scope.querySelectorAll(\"psykhe-search-input\").forEach(function (input) {\n    if (!(input instanceof HTMLElement)) return;\n\n    if (input.suggestionsFetcher && input.suggestionsFetcher[WRAPPED_FETCHER_MARKER]) return;\n\n    input.renderSuggestion = function (suggestion, ctx) {\n      var product = suggestion && suggestion.data ? suggestion.data : null;\n      if (!product) return ctx.nothing;\n      var props = ctx.a11y && ctx.a11y.getOptionProps\n        ? ctx.a11y.getOptionProps(suggestion)\n        : null;\n      var onClick = function () {\n        ctx.actions.selectSuggestion(suggestion);\n      };\n      return ctx.html`\n        <li\n          id=${props ? props.id : ctx.nothing}\n          part=\"suggestion\"\n          role=${props ? props.role : \"option\"}\n          aria-selected=${props ? props[\"aria-selected\"] : ctx.nothing}\n          @mousedown=${function (e) { e.preventDefault(); }}\n        >\n          ${renderOlivelaProductCard(product, ctx, onClick, { linkTabIndex: -1, hideHoverImage: olivelaShouldHideHoverImage() })}\n        </li>\n      `;\n    };\n\n    var originalFetcher = input.suggestionsFetcher;\n\n    function fetchProducts(q, opts) {\n      if (!originalFetcher) return Promise.resolve([]);\n      return Promise.resolve(originalFetcher(q, opts)).then(function (res) {\n        if (Array.isArray(res)) return res;\n        return res && Array.isArray(res.products) ? res.products : [];\n      });\n    }\n\n    if (!input.__psykheOlivelaQueryStatus) input.__psykheOlivelaQueryStatus = Object.create(null);\n\n    var wrapper = function (query, options) {\n      var trimmed = (query || \"\").trim();\n\n      return fetchProducts(trimmed, options).then(function (products) {\n        var labelEl = input.__psykheOlivelaLabelEl || null;\n        var labelRow = input.__psykheOlivelaLabelRow || null;\n\n        if (!trimmed) {\n          // Empty input: show \"Most Popular Searches\" and hide VIEW ALL.\n          setOlivelaNoResultsState(input, false);\n          syncOlivelaLabel(input, labelEl, false);\n          syncOlivelaViewAllLink(input, labelRow, false);\n          var chips = deriveOlivelaChipsFromProducts(products, 15);\n          return {\n            queries: chips.length ? chips : OLIVELA_TRENDING_CHIPS,\n            products: products,\n          };\n        }\n\n        if (products.length === 0) {\n          // Typed query with no matches: show the no-results notice,\n          // keep the label as \"Most Popular Searches\", and hide VIEW ALL\n          // so we never link shoppers to an empty SERP.\n          input.__psykheOlivelaQueryStatus[trimmed] = false;\n          return fetchProducts(\"\", options).then(function (fallback) {\n            setOlivelaNoResultsState(input, true, trimmed);\n            syncOlivelaLabel(input, labelEl, false);\n            syncOlivelaViewAllLink(input, labelRow, false);\n            var fallbackChips = deriveOlivelaChipsFromProducts(fallback, 15);\n            return {\n              queries: fallbackChips.length ? fallbackChips : OLIVELA_TRENDING_CHIPS,\n              products: fallback,\n            };\n          });\n        }\n\n        // Typed query with matches: show \"Suggestions\" + VIEW ALL.\n        input.__psykheOlivelaQueryStatus[trimmed] = true;\n        setOlivelaNoResultsState(input, false);\n        syncOlivelaLabel(input, labelEl, true);\n        syncOlivelaViewAllLink(input, labelRow, true);\n        var chipsTyped = deriveOlivelaChipsFromProducts(products, 15);\n        return {\n          queries: chipsTyped.length ? chipsTyped : OLIVELA_TRENDING_CHIPS,\n          products: products,\n        };\n      });\n    };\n    wrapper[WRAPPED_FETCHER_MARKER] = true;\n    input.suggestionsFetcher = wrapper;\n\n    input.minQueryLength = 0;\n    input.setAttribute(\"min-query-length\", \"0\");\n\n    input.productsHeading = \"Products\";\n    input.queriesHeading = \"Most Popular Searches\";\n    input.renderQueryChip = renderOlivelaQueryChipAsLink;\n\n    if (input.dataset.psykheOlivelaClickGuardWired !== \"true\") {\n      input.dataset.psykheOlivelaClickGuardWired = \"true\";\n      var stopProp = function (e) {\n        e.stopPropagation();\n      };\n      input.addEventListener(\"pointerdown\", stopProp);\n      input.addEventListener(\"click\", stopProp);\n    }\n\n    // Replace the SDK's default \"\u00D7\" glyph with our \"CLEAR\" text label by\n    // slotting into the component's public `clear-icon` slot. The button\n    // itself is rendered conditionally by the SDK only when the input has\n    // a value, so no extra show/hide wiring is needed here.\n    if (!input.querySelector(':scope > [slot=\"clear-icon\"]')) {\n      var clearLabelEl = document.createElement(\"span\");\n      clearLabelEl.setAttribute(\"slot\", \"clear-icon\");\n      clearLabelEl.className = \"psykhe-olivela-clear-label\";\n      clearLabelEl.textContent = \"Clear\";\n      input.appendChild(clearLabelEl);\n    }\n\n    mountOlivelaQueriesHeading(input);\n\n    // Wire CLEAR button click cleanup. The SDK's handleClear refocuses\n    // the already-focused input on macOS, which does not fire a fresh\n    // `focus` event \u2014 so the fetcher never re-runs and VIEW ALL / label\n    // state would stay stale. We listen on the host, detect a click on\n    // [part=\"clear\"] via composedPath, briefly blur the shadow input so\n    // the SDK's queued refocus fires a real focus event (reopening the\n    // trending-chip panel), and scrub any leftover heading state\n    // synchronously so nothing flashes between re-renders.\n    if (input.dataset.psykheOlivelaClearWired !== \"true\") {\n      input.dataset.psykheOlivelaClearWired = \"true\";\n      input.addEventListener(\"click\", function (ev) {\n        var path = typeof ev.composedPath === \"function\" ? ev.composedPath() : [];\n        var hitClear = false;\n        for (var i = 0; i < path.length; i++) {\n          var node = path[i];\n          if (\n            node &&\n            node.getAttribute &&\n            node.getAttribute(\"part\") === \"clear\"\n          ) {\n            hitClear = true;\n            break;\n          }\n        }\n        if (!hitClear) return;\n\n        var shadowInput = input.shadowRoot\n          ? input.shadowRoot.querySelector('[part=\"input\"]')\n          : null;\n        if (shadowInput) shadowInput.blur();\n\n        var labelElLocal = input.__psykheOlivelaLabelEl || null;\n        var labelRowLocal = input.__psykheOlivelaLabelRow || null;\n        syncOlivelaViewAllLink(input, labelRowLocal, false);\n        syncOlivelaLabel(input, labelElLocal, false);\n        setOlivelaNoResultsState(input, false);\n      });\n    }\n\n    // Keep VIEW ALL / label / no-results state aligned with whatever\n    // suggestion list the search input is showing right now. The fetcher\n    // records each query's hit/miss outcome in a map; this listener reads\n    // that map whenever the resolved suggestion list changes and re-applies\n    // the matching heading state. Empty queries scrub back to the default\n    // \"Most Popular Searches\" state.\n    if (input.dataset.psykheOlivelaSuggestionsSyncWired !== \"true\") {\n      input.dataset.psykheOlivelaSuggestionsSyncWired = \"true\";\n      input.addEventListener(\"psykhe-suggestions-change\", function (ev) {\n        var query = ev && ev.detail && typeof ev.detail.query === \"string\"\n          ? ev.detail.query\n          : \"\";\n        var labelEl = input.__psykheOlivelaLabelEl || null;\n        var labelRow = input.__psykheOlivelaLabelRow || null;\n        if (!query) {\n          syncOlivelaViewAllLink(input, labelRow, false);\n          syncOlivelaLabel(input, labelEl, false);\n          setOlivelaNoResultsState(input, false);\n          return;\n        }\n        var status = input.__psykheOlivelaQueryStatus;\n        if (!status || !Object.prototype.hasOwnProperty.call(status, query)) return;\n        var hasProducts = status[query] === true;\n        syncOlivelaViewAllLink(input, labelRow, hasProducts);\n        syncOlivelaLabel(input, labelEl, hasProducts);\n        setOlivelaNoResultsState(input, !hasProducts, query);\n      });\n    }\n\n    // Reset heading + query state when the search modal closes, so the\n    // next open never shows a stale VIEW ALL / label from the previous\n    // session. The theme reassigns the native input value on close\n    // without dispatching `input`, so we cannot rely on DOM events.\n    if (input.dataset.psykheOlivelaDialogCloseWired !== \"true\") {\n      var dialog = input.closest(\"dialog\");\n      if (dialog) {\n        input.dataset.psykheOlivelaDialogCloseWired = \"true\";\n        dialog.addEventListener(\"close\", function () {\n          if (typeof input.reset === \"function\") input.reset();\n          var labelEl = input.__psykheOlivelaLabelEl || null;\n          var labelRow = input.__psykheOlivelaLabelRow || null;\n          syncOlivelaViewAllLink(input, labelRow, false);\n          setOlivelaNoResultsState(input, false);\n          syncOlivelaLabel(input, labelEl, false);\n        });\n      }\n    }\n  });\n}\n\n// ---------------------------------------------------------------------------\n// 5. PAGINATION POLISH\n//\n// Hide pagination entirely when there is only one page of results. Olivela\n// uses standard page-mode pagination, so we can derive the host visibility\n// from the public results payload and let the component's built-in\n// `hide-on-single-page` support handle the inner controls.\n// ---------------------------------------------------------------------------\n\nfunction shouldHideOlivelaPagination() {\n  if (olivelaRuntimeState.page > 1) {\n    return false;\n  }\n\n  if (olivelaRuntimeState.total === 0) {\n    return true;\n  }\n\n  if (olivelaRuntimeState.itemsOnPage <= 0) {\n    return false;\n  }\n\n  return olivelaRuntimeState.total <= olivelaRuntimeState.itemsOnPage;\n}\n\nfunction applyOlivelaPaginationConfig(pagination) {\n  if (!(pagination instanceof HTMLElement)) {\n    return;\n  }\n\n  pagination.toggleAttribute(\"hide-on-single-page\", true);\n  pagination.toggleAttribute(\"hide-disabled-nav\", true);\n\n  if (\"showNavTooltips\" in pagination) {\n    pagination.showNavTooltips = true;\n  }\n  pagination.toggleAttribute(\"show-nav-tooltips\", true);\n}\n\nfunction syncOlivelaPaginationVisibility(root) {\n  var scope = root instanceof HTMLElement ? root : document;\n  var shouldHide = shouldHideOlivelaPagination();\n\n  scope.querySelectorAll(\"psykhe-pagination\").forEach(function (pagination) {\n    if (!(pagination instanceof HTMLElement)) {\n      return;\n    }\n\n    applyOlivelaPaginationConfig(pagination);\n\n    var hidePageModePagination =\n      pagination.getAttribute(\"mode\") === \"page\" && shouldHide;\n    pagination.classList.toggle(\n      \"psykhe-pagination-hidden\",\n      hidePageModePagination\n    );\n\n    var appBlock = pagination.closest(\".shopify-app-block\");\n    if (appBlock instanceof HTMLElement) {\n      appBlock.classList.toggle(\n        \"psykhe-app-block--with-pagination\",\n        !hidePageModePagination\n      );\n    }\n  });\n}\n\n// ---------------------------------------------------------------------------\n// 5b. PAGINATION / FILTER SCROLL CONTRACT (reference only)\n//\n// psykhe-pagination owns the scroll on page/filter change. The extension\n// ships `scroll-to=\"#psykhe-results-top\"` as the default target and\n// `--psykhe-scroll-offset` as the public CSS var for sticky-header offset.\n// The offset is tuned in assets/psykhe.css \u2014 no JS needed here.\n//\n//\n//   // Retarget: scroll to a different element\n//   document.querySelectorAll(\"psykhe-pagination\").forEach(function (el) {\n//     el.setAttribute(\"scroll-to\", \".my-results-wrapper\");\n//   });\n//\n//   // Scroll to document top instead of results\n//   document.querySelectorAll(\"psykhe-pagination\").forEach(function (el) {\n//     el.setAttribute(\"scroll-to\", \"body\");\n//   });\n//\n//   // Disable the built-in scroll entirely\n//   document.querySelectorAll(\"psykhe-pagination\").forEach(function (el) {\n//     el.removeAttribute(\"scroll-to\");\n//   });\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// 6. STICKY CONTROLS BAR\n//\n// Makes the controls bar and applied-filters bar stick below the site header\n// on scroll. Mirrors plp-sticky-filter.js runStickyFilterBarAndPills():\n// sentinel + IntersectionObserver + class toggling + placeholders.\n// ---------------------------------------------------------------------------\n\n// Guard path must stay cheap because this can run multiple times per page as\n// providers and theme chrome initialize.\nfunction initStickyControls(root) {\n  if (!(root instanceof HTMLElement)) return;\n  if (root.dataset.psykheOlivelaStickyInit === \"true\") return;\n\n  var controls = root.querySelector(\".psykhe__controls\");\n  if (!(controls instanceof HTMLElement)) return;\n\n  var pillsBar = root.querySelector(\".psykhe-applied-filters-bar\");\n\n  root.dataset.psykheOlivelaStickyInit = \"true\";\n\n  var sentinel = document.createElement(\"div\");\n  sentinel.style.width = \"100%\";\n  sentinel.style.height = \"1px\";\n  controls.parentNode.insertBefore(sentinel, controls);\n\n  var placeholder = null;\n  var pillsPlaceholder = null;\n\n  function ensurePlaceholder() {\n    if (!placeholder) {\n      placeholder = document.createElement(\"div\");\n      placeholder.className = \"psykhe-sticky-placeholder\";\n      controls.parentNode.insertBefore(placeholder, controls);\n    }\n    placeholder.style.height = controls.offsetHeight + \"px\";\n  }\n\n  function removePlaceholder() {\n    if (placeholder && placeholder.parentNode) {\n      placeholder.parentNode.removeChild(placeholder);\n      placeholder = null;\n    }\n  }\n\n  function ensurePillsPlaceholder() {\n    if (!pillsBar) pillsBar = root.querySelector(\".psykhe-applied-filters-bar\");\n    if (!pillsBar) return;\n    if (!pillsPlaceholder) {\n      pillsPlaceholder = document.createElement(\"div\");\n      pillsPlaceholder.className = \"psykhe-applied-filters-placeholder\";\n      pillsBar.parentNode.insertBefore(pillsPlaceholder, pillsBar);\n    }\n    pillsPlaceholder.style.height = pillsBar.offsetHeight + \"px\";\n  }\n\n  function removePillsPlaceholder() {\n    if (pillsPlaceholder && pillsPlaceholder.parentNode) {\n      pillsPlaceholder.parentNode.removeChild(pillsPlaceholder);\n      pillsPlaceholder = null;\n    }\n  }\n\n  function pillsHasContent() {\n    if (!pillsBar) pillsBar = root.querySelector(\".psykhe-applied-filters-bar\");\n    if (!pillsBar) return false;\n    var af = pillsBar.querySelector(\"psykhe-active-filters\");\n    // hasFilters is a live property on psykhe-active-filters; falls back to\n    // the count of items in its state if the property is missing.\n    if (!af) return false;\n    if (typeof af.hasFilters === \"boolean\") return af.hasFilters;\n    var items = af.state && Array.isArray(af.state.items) ? af.state.items : [];\n    return items.length > 0;\n  }\n\n  // Toggle the .psykhe-has-filters class on the bar so CSS can show/hide it.\n  // Without this class the bar stays display:none and doesn't take up space.\n  function syncPillsBarVisibility() {\n    if (!pillsBar) pillsBar = root.querySelector(\".psykhe-applied-filters-bar\");\n    if (!pillsBar) return;\n    if (pillsHasContent()) {\n      pillsBar.classList.add(\"psykhe-has-filters\");\n    } else {\n      pillsBar.classList.remove(\"psykhe-has-filters\");\n    }\n  }\n\n  var observer = null;\n\n  function updateSticky() {\n    syncPillsBarVisibility();\n    var stickyOffset = getStickyOffset();\n    root.style.setProperty(\"--psykhe-sticky-offset\", stickyOffset + \"px\");\n\n    // iOS app webview only: --psykhe-scroll-offset (psykhe.css binds it to\n    // --header-height) drives the extension's built-in scroll-to-#psykhe-results-top\n    // landing after filters/paging change. --header-height omits the app's extra\n    // status-bar inset, so that landing scroll overshot by the missing inset even\n    // from the top of the page \u2014 enough to cross the sticky threshold below and\n    // snap the controls bar into fixed mode over the results. Reuse the same\n    // accurate stickyOffset measurement so the landing and the sticky trigger agree.\n    if (document.documentElement.classList.contains(\"is-pwa\")) {\n      root.style.setProperty(\"--psykhe-scroll-offset\", stickyOffset + \"px\");\n    }\n\n    var entryTop = sentinel.getBoundingClientRect().top;\n    if (entryTop < stickyOffset) {\n      ensurePlaceholder();\n      controls.classList.add(\"psykhe-is-fixed\");\n      controls.classList.add(\"psykhe-is-stuck\");\n\n      // Position the pills bar right below the fixed controls bar.\n      var controlsBottom = stickyOffset + controls.offsetHeight;\n      root.style.setProperty(\"--psykhe-pills-fixed-top\", controlsBottom + \"px\");\n      if (pillsBar) pillsBar.style.setProperty(\"--psykhe-pills-fixed-top\", controlsBottom + \"px\");\n\n      if (pillsHasContent()) {\n        ensurePillsPlaceholder();\n        pillsBar.classList.add(\"psykhe-is-fixed\");\n        controls.classList.add(\"psykhe-with-pills\");\n      } else {\n        if (pillsBar) pillsBar.classList.remove(\"psykhe-is-fixed\");\n        removePillsPlaceholder();\n        controls.classList.remove(\"psykhe-with-pills\");\n      }\n    } else {\n      controls.classList.remove(\"psykhe-is-fixed\");\n      controls.classList.remove(\"psykhe-is-stuck\");\n      removePlaceholder();\n      if (pillsBar) pillsBar.classList.remove(\"psykhe-is-fixed\");\n      removePillsPlaceholder();\n      controls.classList.remove(\"psykhe-with-pills\");\n    }\n  }\n\n  function createObserver() {\n    if (observer) observer.disconnect();\n    var stickyOffset = getStickyOffset();\n    observer = new IntersectionObserver(\n      function () { updateSticky(); },\n      { root: null, threshold: [0], rootMargin: \"-\" + stickyOffset + \"px 0px 0px 0px\" }\n    );\n    observer.observe(sentinel);\n  }\n  createObserver();\n\n  // Watch for filter changes via the component's own event (bubbles, composed).\n  // Using the event avoids a MutationObserver feedback loop since we toggle\n  // classes on pillsBar inside updateSticky().\n  root.addEventListener(\"psykhe-active-filters-change\", function () {\n    updateSticky();\n  });\n\n  window.addEventListener(\"resize\", function () {\n    if (controls.classList.contains(\"psykhe-is-fixed\") && placeholder) {\n      placeholder.style.height = controls.offsetHeight + \"px\";\n    }\n    if (pillsBar && pillsBar.classList.contains(\"psykhe-is-fixed\") && pillsPlaceholder) {\n      pillsPlaceholder.style.height = pillsBar.offsetHeight + \"px\";\n    }\n    createObserver();\n    updateSticky();\n  });\n\n  // Keep the sticky offset in sync while the header height changes during\n  // scroll (announcement-bar dismissal, sticky-show transition). rAF throttle\n  // keeps this cheap; updateSticky() only mutates DOM when classes actually\n  // need to flip.\n  var _scrollRaf = 0;\n  window.addEventListener(\n    \"scroll\",\n    function () {\n      if (_scrollRaf) return;\n      _scrollRaf = window.requestAnimationFrame(function () {\n        _scrollRaf = 0;\n        updateSticky();\n      });\n    },\n    { passive: true }\n  );\n\n  updateSticky();\n}\n\nfunction getOlivelaProviderInstanceForDrawer(drawer) {\n  if (!(drawer instanceof HTMLElement)) {\n    return \"\";\n  }\n\n  const cachedInstance = String(\n    drawer.dataset.psykheOlivelaInstance || \"\"\n  ).trim();\n  if (cachedInstance) {\n    return cachedInstance;\n  }\n\n  const provider = drawer.closest(\"psykhe-provider\");\n  const providerInstance = String(\n    provider?.getAttribute(\"instance\") || provider?.instance || \"\"\n  ).trim();\n  if (providerInstance) {\n    drawer.dataset.psykheOlivelaInstance = providerInstance;\n    return providerInstance;\n  }\n\n  const triggerSelector = String(\n    drawer.getAttribute(\"trigger\") || drawer.trigger || \"\"\n  ).trim();\n  if (!triggerSelector) {\n    return \"\";\n  }\n\n  let triggerElement = null;\n  try {\n    triggerElement = drawer.ownerDocument.querySelector(triggerSelector);\n  } catch {\n    return \"\";\n  }\n\n  const triggerProvider = triggerElement?.closest(\"psykhe-provider\");\n  const triggerProviderInstance = String(\n    triggerProvider?.getAttribute(\"instance\") || triggerProvider?.instance || \"\"\n  ).trim();\n  if (triggerProviderInstance) {\n    drawer.dataset.psykheOlivelaInstance = triggerProviderInstance;\n  }\n\n  return triggerProviderInstance;\n}\n\nfunction syncOlivelaDrawerContext(drawer) {\n  if (!(drawer instanceof HTMLElement)) {\n    return;\n  }\n\n  const providerInstance = getOlivelaProviderInstanceForDrawer(drawer);\n  if (!providerInstance) {\n    return;\n  }\n\n  drawer\n    .querySelectorAll(\n      \"psykhe-active-filters, psykhe-clear-filters, psykhe-filter-panel, psykhe-results-count\"\n    )\n    .forEach((element) => {\n      if (!(element instanceof HTMLElement)) {\n        return;\n      }\n\n      if ((element.getAttribute(\"instance\") || \"\").trim() !== providerInstance) {\n        element.setAttribute(\"instance\", providerInstance);\n      }\n    });\n}\n\nfunction initOlivelaDrawer(drawer) {\n  if (!(drawer instanceof HTMLElement)) return;\n  if (drawer.dataset.psykheOlivelaDrawerInit !== \"true\") {\n    const header = document.createElement(\"div\");\n    header.slot = \"header\";\n    header.className = \"psykhe-drawer-header\";\n    header.innerHTML = `\n      <span class=\"psykhe-drawer-title\">Filter</span>\n      <div class=\"psykhe-drawer-header-right\">\n        <psykhe-results-count class=\"psykhe-drawer-results\"></psykhe-results-count>\n        <button type=\"button\" class=\"psykhe-drawer-close\" aria-label=\"Close filter drawer\">\n          <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <line x1=\"1\" y1=\"1\" x2=\"9\" y2=\"9\" stroke=\"#222\" stroke-width=\"0.8\" stroke-linecap=\"round\"/>\n            <line x1=\"9\" y1=\"1\" x2=\"1\" y2=\"9\" stroke=\"#222\" stroke-width=\"0.8\" stroke-linecap=\"round\"/>\n          </svg>\n        </button>\n      </div>\n    `;\n    drawer.prepend(header);\n\n    var closeBtn = header.querySelector(\".psykhe-drawer-close\");\n    if (closeBtn) {\n      closeBtn.addEventListener(\"click\", function () {\n        drawer.removeAttribute(\"open\");\n      });\n    }\n\n    drawer.dataset.psykheOlivelaDrawerInit = \"true\";\n  }\n\n  syncOlivelaDrawerContext(drawer);\n\n  drawer.querySelectorAll(\"psykhe-clear-filters\").forEach(function (element) {\n    if (!(element instanceof HTMLElement)) {\n      return;\n    }\n    if (\"hideWhenEmpty\" in element) {\n      element.hideWhenEmpty = false;\n    }\n    if (element.getAttribute(\"hide-when-empty\") !== \"false\") {\n      element.setAttribute(\"hide-when-empty\", \"false\");\n    }\n  });\n\n  // Footer elements (psykhe-clear-filters + view button) ship as direct\n  // children of <psykhe-drawer> with slot=\"footer\" \u2014 no DOM-move needed.\n}\n\n// ---------------------------------------------------------------------------\n// 7. FILTER CONFIG, CONTENT TILES, AND ANALYTICS\n//\n// Theme-owned runtime glue for filter config, content tiles, and analytics.\n// Filter customization lives in `.facets = [...]`, content-tile visibility\n// tracks public result events, and analytics listens to typed `psykhe-*`\n// events instead of DOM click reverse-mapping.\n// ---------------------------------------------------------------------------\n\n// Color map for Olivela's facet palette. Covers values from the theme's\n// color-constants.js plus additional entries that appear in live facet\n// data (e.g. Maroon, Beige) so swatches always resolve.\nconst olivelaColorMap = {\n  Silver: \"#c0c0c0\",\n  Black: \"#000000\",\n  Multicolor: \"#e5e5e5\",\n  White: \"#ffffff\",\n  Blue: \"#4146AB\",\n  Pink: \"#E896CA\",\n  Green: \"#087B3C\",\n  Brown: \"#643B37\",\n  Tan: \"#d2b48c\",\n  Gold: \"#ffd700\",\n  Grey: \"#979797\",\n  Metallic: \"#B6A489\",\n  Neutrals: \"#D6C5B9\",\n  Neutral: \"#D6C5B9\",\n  Orange: \"#E17C54\",\n  Purple: \"#8718B4\",\n  Red: \"#CF1818\",\n  Yellow: \"#FFDC4A\",\n  Maroon: \"#800000\",\n  Beige: \"#F5F5DC\",\n  Cream: \"#FFFDD0\",\n  Ivory: \"#FFFFF0\",\n  Nude: \"#E3BC9A\",\n  Navy: \"#000080\",\n  Olive: \"#808000\",\n  Burgundy: \"#800020\",\n  Rose: \"#FF007F\",\n  Copper: \"#B87333\",\n  Bronze: \"#CD7F32\",\n  Khaki: \"#C3B091\",\n  Turquoise: \"#40E0D0\",\n  Teal: \"#008080\",\n  Lavender: \"#B57EDC\",\n  Coral: \"#FF7F50\",\n  Mustard: \"#FFDB58\",\n};\n\nfunction normalizeOlivelaHierarchicalLabel(value) {\n  if (typeof value !== \"string\") {\n    return \"\";\n  }\n\n  var segments = value\n    .split(\">\")\n    .map(function (segment) {\n      return segment.trim();\n    })\n    .filter(function (segment) {\n      return segment.length > 0;\n    });\n\n  if (segments.length === 0) {\n    return value.trim();\n  }\n\n  return segments[segments.length - 1];\n}\n\nfunction getOlivelaCollectionTitle() {\n  var decoder = document.createElement(\"textarea\");\n  decoder.innerHTML = String(window.COLLECTION_TITLE || \"\").trim();\n  return decoder.value.trim();\n}\n\nfunction getOlivelaEventInstance(event, detail) {\n  var explicitInstance =\n    detail && typeof detail.instance === \"string\" ? detail.instance.trim() : \"\";\n  if (explicitInstance) {\n    return explicitInstance;\n  }\n\n  var target = event.target;\n  if (!(target instanceof HTMLElement)) {\n    return \"\";\n  }\n\n  var targetInstance = String(\n    target.getAttribute(\"instance\") || target.instance || \"\"\n  ).trim();\n  if (targetInstance) {\n    return targetInstance;\n  }\n\n  var provider = target.closest(\"psykhe-provider\");\n  return String(\n    provider?.getAttribute(\"instance\") || provider?.instance || \"\"\n  ).trim();\n}\n\nfunction isOlivelaPlpEvent(event, detail) {\n  return getOlivelaEventInstance(event, detail) === olivelaRuntimeState.instance;\n}\n\nvar OLIVELA_CONTENT_TILE_DEFINITIONS = [\n  {\n    globalName: \"contentTileOne\",\n    minTotal: 12,\n    tile: {\n      id: \"olivela-tile-one\",\n      slot: \"olivela-tile-one\",\n      beforeProductIndex: 6,\n      colSpan: 2,\n    },\n  },\n  {\n    globalName: \"contentTileTwo\",\n    minTotal: 20,\n    tile: {\n      id: \"olivela-tile-two\",\n      slot: \"olivela-tile-two\",\n      beforeProductIndex: 18,\n      colSpan: 2,\n    },\n  },\n];\n\nfunction normalizeOlivelaContentTileHtml(html) {\n  if (typeof html !== \"string\") {\n    return \"\";\n  }\n\n  var trimmed = html.trim();\n  if (trimmed === \"\") {\n    return \"\";\n  }\n\n  var container = document.createElement(\"div\");\n  container.innerHTML = trimmed;\n  container.querySelectorAll(\"script\").forEach(function (node) {\n    node.remove();\n  });\n\n  var contentChildren = Array.from(container.children);\n  var builderComponent =\n    contentChildren.length === 1 &&\n    contentChildren[0].tagName === \"BUILDER-COMPONENT\"\n      ? contentChildren[0]\n      : null;\n  var hasPlaceholderOnly =\n    builderComponent &&\n    builderComponent.getAttribute(\"editing-only\") === \"true\" &&\n    builderComponent.querySelector(\"*\") === null &&\n    container.textContent.trim() === \"\";\n\n  return hasPlaceholderOnly ? \"\" : trimmed;\n}\n\nfunction getOlivelaContentTileHtml(globalName) {\n  return normalizeOlivelaContentTileHtml(window[globalName]);\n}\n\n// Resolves the PLP grid for the active provider instance. Tries a direct\n// attribute selector first, then a provider-scoped descendant lookup, so\n// Builder.io editorial tiles resolve regardless of which element carries\n// the instance attribute.\nfunction getOlivelaContentTileGrid(root) {\n  var scope = root instanceof HTMLElement ? root : document;\n  var instance = olivelaRuntimeState.instance;\n  var directSelector = 'psykhe-product-grid[instance=\"' + instance + '\"]';\n  var providerScopedSelector =\n    'psykhe-provider[instance=\"' + instance + '\"] psykhe-product-grid';\n  var grid =\n    scope.querySelector(directSelector) ||\n    document.querySelector(directSelector) ||\n    scope.querySelector(providerScopedSelector) ||\n    document.querySelector(providerScopedSelector);\n  if (!(grid instanceof HTMLElement) || !(\"contentTiles\" in grid)) {\n    return null;\n  }\n  return grid;\n}\n\nfunction ensureOlivelaContentTileSlotChild(grid, slotName, html) {\n  var existing = grid.querySelector(':scope > [slot=\"' + slotName + '\"]');\n  if (typeof html !== \"string\" || html.trim() === \"\") {\n    if (existing instanceof HTMLElement) {\n      existing.remove();\n    }\n    return false;\n  }\n\n  if (!(existing instanceof HTMLElement)) {\n    existing = document.createElement(\"section\");\n    existing.setAttribute(\"slot\", slotName);\n    existing.className = \"psykhe-content-tile\";\n    grid.appendChild(existing);\n  }\n\n  if (existing.innerHTML !== html) {\n    existing.innerHTML = html;\n  }\n\n  return true;\n}\n\nfunction syncOlivelaContentTiles(root) {\n  var grid = getOlivelaContentTileGrid(root);\n  if (!(grid instanceof HTMLElement)) {\n    return;\n  }\n\n  if (window.showPlpContentTiles === false) {\n    grid.contentTiles = [];\n    return;\n  }\n\n  var tiles = [];\n  OLIVELA_CONTENT_TILE_DEFINITIONS.forEach(function (definition) {\n    var tileHtml = getOlivelaContentTileHtml(definition.globalName);\n    if (!ensureOlivelaContentTileSlotChild(grid, definition.tile.slot, tileHtml)) {\n      return;\n    }\n\n    var hidden =\n      olivelaRuntimeState.page > 1 ||\n      olivelaRuntimeState.total < definition.minTotal;\n    tiles.push({\n      id: definition.tile.id,\n      slot: definition.tile.slot,\n      beforeProductIndex: definition.tile.beforeProductIndex,\n      colSpan: definition.tile.colSpan,\n      hidden: hidden,\n    });\n  });\n\n  grid.contentTiles = tiles;\n}\n\nfunction handleOlivelaResultsUpdated(event) {\n  var detail = event.detail || {};\n  if (!isOlivelaPlpEvent(event, detail)) {\n    return;\n  }\n\n  if (typeof detail.page === \"number\" && detail.page >= 1) {\n    olivelaRuntimeState.page = detail.page;\n  }\n  if (typeof detail.total === \"number\" && detail.total >= 0) {\n    olivelaRuntimeState.total = detail.total;\n  }\n  olivelaRuntimeState.itemsOnPage = Array.isArray(detail.items)\n    ? detail.items.length\n    : 0;\n\n  syncOlivelaPaginationVisibility(document);\n  syncOlivelaContentTiles(event.target);\n}\n\nfunction handleOlivelaRefinementsChange(event) {\n  if (!isOlivelaPlpEvent(event)) {\n    return;\n  }\n\n  var detail = event.detail || {};\n  olivelaRuntimeState.facets = Array.isArray(detail.facets) ? detail.facets : [];\n\n  var sourceFacets = olivelaRuntimeState.facets;\n  var currCat0 = getSelectedFacetLabels(sourceFacets, \"category_0\");\n  var currCat1 = getSelectedFacetLabels(sourceFacets, \"category_1\");\n  var currCat2 = getSelectedFacetLabels(sourceFacets, \"category_2\");\n  var mappingDepth = getOlivelaCollectionSegments().length;\n\n  var cat0Added = currCat0.some(function (v) {\n    return olivelaAutoOpenState.prevCat0Selected.indexOf(v) === -1;\n  });\n  var cat1Added = currCat1.some(function (v) {\n    return olivelaAutoOpenState.prevCat1Selected.indexOf(v) === -1;\n  });\n\n  var cat1Lost = currCat1.length === 0\n    && olivelaAutoOpenState.prevCat1Selected.length > 0;\n  var cat2Lost = currCat2.length === 0\n    && olivelaAutoOpenState.prevCat2Selected.length > 0;\n\n  var keyToOpen = null;\n  var isDrillUp = false;\n  if (cat1Added && currCat2.length === 0) {\n    keyToOpen = \"category_2\";\n  } else if (cat0Added && currCat1.length === 0) {\n    keyToOpen = \"category_1\";\n  } else if (cat2Lost && (currCat1.length > 0 || mappingDepth >= 2)) {\n    keyToOpen = \"category_2\";\n    isDrillUp = true;\n  } else if (cat1Lost && (currCat0.length > 0 || mappingDepth >= 1)) {\n    keyToOpen = \"category_1\";\n    isDrillUp = true;\n  }\n\n  olivelaAutoOpenState.prevCat0Selected = currCat0;\n  olivelaAutoOpenState.prevCat1Selected = currCat1;\n  olivelaAutoOpenState.prevCat2Selected = currCat2;\n\n  applyOlivelaPublicOverrides(event.target);\n\n  if (keyToOpen) {\n    if (isDrillUp) {\n      // Drill-up: user cleared a child level. Open immediately \u2014 the user is\n      // already looking at the drawer and stale-data flash is acceptable since\n      // the cleared facet just lost its values.\n      var scope = event.target instanceof HTMLElement ? event.target : document;\n      var drawer = getOlivelaPriorityFilterDrawer(scope);\n      if (drawer && drawer.hasAttribute(\"open\")) {\n        openFacetInPriorityDrawer(drawer, keyToOpen);\n      }\n    } else {\n      // Drill-down: user selected a parent value, child should open. Defer\n      // until the browse response lands (psykhe-loading-change loading:false)\n      // so the child accordion renders with fresh facet values, not stale ones\n      // from the previous browse.\n      olivelaAutoOpenState.pendingDrillOpenKey = keyToOpen;\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Hierarchical category cascade: when a parent category level loses ALL its\n// selections (goes to 0 active), child levels are cleared automatically.\n// Cascade only fires on full deselect \u2014 removing one of several values at the\n// same level does NOT cascade. The hierarchy is:\n//   category_0 \u2192 category_1 \u2192 category_2\n// Examples:\n//   - category_0 had 2 values, user removes 1 \u2192 1 remains \u2192 no cascade\n//   - category_0 had 1 value, user removes it \u2192 0 remain \u2192 clear cat1 + cat2\n//   - category_1 cleared via \"clear\" button \u2192 clear cat2\n//\n// Cascade is driven by two synchronous intent events:\n//   psykhe-facet-change  \u2014 fired by psykhe-filter-panel (drawer interactions)\n//   psykhe-filter-remove \u2014 fired by psykhe-active-filters (sticky bar chips)\n// Both fire BEFORE the browse request, so child clears batch into one request.\n// ---------------------------------------------------------------------------\nvar OLIVELA_CATEGORY_CHILDREN = {\n  category_0: [\"category_1\", \"category_2\"],\n  category_1: [\"category_2\"],\n};\n\nfunction getOlivelaProvider(event) {\n  var target = event.target instanceof HTMLElement ? event.target : null;\n  var provider = target && target.closest(\"psykhe-provider\");\n  return provider || document.querySelector(\"psykhe-provider\");\n}\n\nfunction cascadeOlivelaCategoryClear(facetKey, event) {\n  var children = OLIVELA_CATEGORY_CHILDREN[facetKey];\n  if (!children) return;\n\n  var provider = getOlivelaProvider(event);\n  if (!provider || typeof provider.sdk?.clearFilter !== \"function\") return;\n\n  for (var i = 0; i < children.length; i++) {\n    provider.sdk.clearFilter(children[i]);\n  }\n}\n\nfunction shouldOlivelaCategoryCascade(facetKey, removedValue) {\n  var children = OLIVELA_CATEGORY_CHILDREN[facetKey];\n  if (!children) return false;\n\n  // olivelaRuntimeState.facets holds pre-mutation state (psykhe-facet-change\n  // fires before the SDK commit). Manually exclude removedValue to simulate\n  // the post-mutation count.\n  var selected = getSelectedFacetLabels(olivelaRuntimeState.facets, facetKey);\n  var remaining = selected.filter(function (v) {\n    return String(v) !== String(removedValue);\n  });\n  return remaining.length === 0;\n}\n\nfunction handleOlivelaFacetChange(event) {\n  var detail = event.detail || {};\n  if (!isOlivelaPlpEvent(event, detail)) {\n    return;\n  }\n\n  if (detail.selected === false\n    && shouldOlivelaCategoryCascade(detail.facetKey, detail.value)) {\n    cascadeOlivelaCategoryClear(detail.facetKey, event);\n  }\n}\n\nfunction handleOlivelaFacetCleared(event) {\n  var detail = event.detail || {};\n  if (!isOlivelaPlpEvent(event, detail)) {\n    return;\n  }\n\n  if (String(detail.facetKey || \"\").toLowerCase() === \"price\") {\n    olivelaResetPriceRangeControls(document);\n  }\n\n  cascadeOlivelaCategoryClear(detail.facetKey, event);\n}\n\nfunction handleOlivelaFilterRemove(event) {\n  var detail = event.detail || {};\n  if (!isOlivelaPlpEvent(event, detail)) {\n    return;\n  }\n\n  if (String(detail.facetKey || \"\").toLowerCase() === \"price\") {\n    olivelaResetPriceRangeControls(document);\n  }\n\n  if (shouldOlivelaCategoryCascade(detail.facetKey, detail.value)) {\n    cascadeOlivelaCategoryClear(detail.facetKey, event);\n  }\n}\n\nfunction handleOlivelaFiltersCleared(event) {\n  var detail = event.detail || {};\n  if (!isOlivelaPlpEvent(event, detail)) {\n    return;\n  }\n\n  olivelaAutoOpenState.pendingDrillOpenKey = null;\n  olivelaResetPriceRangeControls(document);\n}\n\nfunction handleOlivelaClearFiltersClick(event) {\n  var path =\n    typeof event.composedPath === \"function\" ? event.composedPath() : [];\n  var clickedClearFilters = path.some(function (entry) {\n    return (\n      entry &&\n      entry.tagName &&\n      String(entry.tagName).toLowerCase() === \"psykhe-clear-filters\"\n    );\n  });\n  if (clickedClearFilters) {\n    olivelaAutoOpenState.pendingDrillOpenKey = null;\n    olivelaResetPriceRangeControls(document);\n  }\n}\n\nfunction handleOlivelaClearFiltersStateChange(event) {\n  var detail = event.detail || {};\n  if (!isOlivelaPlpEvent(event, detail)) {\n    return;\n  }\n  if (detail.hasFilters === false) {\n    olivelaAutoOpenState.pendingDrillOpenKey = null;\n    olivelaResetPriceRangeControls(document);\n  }\n}\n\n// Flush deferred drill-down accordion open once the browse response settles.\n// psykhe-loading-change fires with loading:false after updateStoresWithResponse\n// has written fresh facets to the store, so the accordion renders with current\n// values instead of stale ones from the previous browse.\nfunction handleOlivelaLoadingChange(event) {\n  if (!isOlivelaPlpEvent(event)) return;\n\n  var detail = event.detail || {};\n  if (detail.loading !== false) return;\n\n  var keyToOpen = olivelaAutoOpenState.pendingDrillOpenKey;\n  if (!keyToOpen) return;\n  olivelaAutoOpenState.pendingDrillOpenKey = null;\n\n  var scope = event.target instanceof HTMLElement ? event.target : document;\n  var drawer = getOlivelaPriorityFilterDrawer(scope);\n  openFacetInPriorityDrawer(drawer, keyToOpen);\n}\n\nfunction initOlivelaRuntimeBindings() {\n  if (olivelaRuntimeState.runtimeInit) {\n    return;\n  }\n  olivelaRuntimeState.runtimeInit = true;\n\n  document.addEventListener(\"psykhe-results-updated\", handleOlivelaResultsUpdated);\n  document.addEventListener(\n    \"psykhe-refinements-change\",\n    handleOlivelaRefinementsChange\n  );\n  document.addEventListener(\"psykhe-facet-change\", handleOlivelaFacetChange);\n  document.addEventListener(\"psykhe-facet-cleared\", handleOlivelaFacetCleared);\n  document.addEventListener(\"psykhe-filter-remove\", handleOlivelaFilterRemove);\n  document.addEventListener(\n    \"psykhe-filters-cleared\",\n    handleOlivelaFiltersCleared\n  );\n  document.addEventListener(\n    \"psykhe-clear-filters-change\",\n    handleOlivelaClearFiltersStateChange\n  );\n  document.addEventListener(\"click\", handleOlivelaClearFiltersClick, true);\n\n  document.addEventListener(\"psykhe-loading-change\", handleOlivelaLoadingChange);\n}\n\nfunction runOlivelaInitStep(label, callback) {\n  try {\n    callback();\n  } catch (error) {\n    console.error(`[psykhe-olivela] ${label} init failed`, error);\n  }\n}\n\n// ---------------------------------------------------------------------------\n// 8. CONTROLS BAR TEXT TWEAKS\n//\n// Matches the controls bar labels and count text to the theme layout:\n//   - responsive \"FILTER\" / \"All filters\" text\n//   - mobile sort shows \"SORT\" prefix instead of selected value\n//   - stats format: \"N Products\" / \"N Product\"\n// ---------------------------------------------------------------------------\n\nfunction initOlivelaControlsBar(root) {\n  var trigger = root.querySelector(\".psykhe__drawer-trigger\");\n  if (trigger) {\n    function setTriggerText() {\n      var text = window.innerWidth <= 768 ? \"FILTER\" : \"All filters\";\n      if (trigger.textContent !== text) trigger.textContent = text;\n    }\n    setTriggerText();\n    if (root.dataset.psykheControlsBarInit !== \"true\") {\n      window.addEventListener(\"resize\", setTriggerText);\n    }\n  }\n\n  var sort = root.querySelector(\"psykhe-sort-select\");\n  if (sort && sort.getAttribute(\"prefix\") !== \"SORT\") {\n    sort.setAttribute(\"prefix\", \"SORT\");\n  }\n  if (sort && sort.getAttribute(\"icon\") !== \"\u203A\") {\n    sort.setAttribute(\"icon\", \"\u203A\");\n  }\n\n  var resultsCount = root.querySelector(\"psykhe-results-count\");\n  if (resultsCount && resultsCount.getAttribute(\"plural-label\") !== \"Products\") {\n    resultsCount.setAttribute(\"singular-label\", \"Products\");\n    resultsCount.setAttribute(\"plural-label\", \"Products\");\n  }\n\n  syncOlivelaPriorityFilters(root);\n\n  if (root.dataset.psykheControlsBarInit !== \"true\") {\n    window.addEventListener(\"resize\", function () {\n      syncOlivelaPriorityFilters(root);\n    });\n  }\n\n  root.dataset.psykheControlsBarInit = \"true\";\n\n  // Pagination: the component handles disabled-nav hiding and inner\n  // single-page collapse via public attributes; theme JS only syncs the host\n  // visibility class/margin from the public results payload.\n}\n\nfunction getOlivelaPriorityFilterDrawer(root) {\n  if (!(root instanceof HTMLElement)) {\n    return null;\n  }\n\n  return root.querySelector(\"psykhe-drawer.psykhe__filter-drawer\");\n}\n\nfunction openFacetInPriorityDrawer(drawer, facetKey) {\n  var panel = drawer && drawer.querySelector(\"psykhe-filter-panel\");\n  if (panel && typeof panel.openFacet === \"function\") {\n    panel.openFacet(facetKey);\n  }\n}\n\nfunction openOlivelaPriorityFacet(root, facetKey) {\n  var drawer = getOlivelaPriorityFilterDrawer(root);\n  if (!drawer) return;\n\n  if (!drawer.hasAttribute(\"open\")) {\n    var trigger = root.querySelector(\".psykhe__drawer-trigger\");\n    if (trigger instanceof HTMLElement) trigger.click();\n  }\n\n  openFacetInPriorityDrawer(drawer, facetKey);\n}\n\nfunction syncOlivelaPriorityFilters(root) {\n  if (!(root instanceof HTMLElement)) {\n    return;\n  }\n\n  var controls = root.querySelector(\".psykhe__controls\");\n  if (!(controls instanceof HTMLElement)) {\n    return;\n  }\n\n  var labels = getOlivelaPriorityFilterLabels();\n  var existing = controls.querySelector(\".psykhe-priority-filters\");\n  if (labels.length === 0 || window.innerWidth <= 1024) {\n    if (existing instanceof HTMLElement) {\n      existing.remove();\n    }\n    controls.classList.remove(\"psykhe-has-priority-filters\");\n    return;\n  }\n\n  var wrapper = existing;\n  if (!(wrapper instanceof HTMLElement)) {\n    wrapper = document.createElement(\"div\");\n    wrapper.className = \"psykhe-priority-filters\";\n    controls.insertBefore(wrapper, controls.firstChild);\n  }\n\n  wrapper.innerHTML = \"\";\n  var list = document.createElement(\"ul\");\n  list.className = \"psykhe-priority-filters-list\";\n\n  labels.forEach(function (label) {\n    var item = document.createElement(\"li\");\n    var button = document.createElement(\"button\");\n    var text = document.createElement(\"span\");\n    var icon = document.createElement(\"span\");\n    button.type = \"button\";\n    button.className = \"psykhe-priority-filter-button\";\n    text.className = \"psykhe-priority-filter-label\";\n    text.textContent = label;\n    icon.className = \"psykhe-priority-filter-icon\";\n    icon.setAttribute(\"aria-hidden\", \"true\");\n    button.appendChild(text);\n    button.appendChild(icon);\n    button.setAttribute(\"data-facet-key\", resolveOlivelaPriorityFacetKey(label));\n    button.addEventListener(\"click\", function () {\n      openOlivelaPriorityFacet(root, button.getAttribute(\"data-facet-key\") || \"\");\n    });\n    item.appendChild(button);\n    list.appendChild(item);\n  });\n\n  wrapper.appendChild(list);\n  controls.classList.add(\"psykhe-has-priority-filters\");\n}\n\n// ---------------------------------------------------------------------------\n// 9. SEARCH SUGGESTION DATA\n//\n// Fallback chips for <psykhe-search-input>. The dropdown row itself is\n// rendered by renderOlivelaProductCard (shared with the grid) \u2014 the hookup\n// in section 11 wraps it in an <li role=\"option\"> for listbox a11y.\n// ---------------------------------------------------------------------------\n\nvar OLIVELA_TRENDING_CHIPS = [\n  { value: \"dresses\",    label: \"Dresses\",    url: \"/collections/dresses\" },\n  { value: \"swimsuit\",   label: \"Swimsuit\",   url: \"/collections/swim\"    },\n  { value: \"mestiza\",    label: \"Mestiza\",    url: \"/search?mestiza\" },\n  { value: \"gown\",       label: \"Gown\",       url: \"/collections/dresses?pf.category_2=Clothing+>+Dresses+>+Gown\"  },\n  { value: \"rings\",      label: \"Rings\",      url: \"/collections/rings\"  },\n  { value: \"skirts\",     label: \"Skirts\",     url: \"/collections/skirts\" },\n  { value: \"aquamarine\", label: \"Aquamarine\", url: \"/search?q=aquamarine\"},\n];\n\n// ---------------------------------------------------------------------------\n// 10. BOOTSTRAP\n//\n// Runs on DOMContentLoaded plus typed PSYKHE lifecycle events.\n// All init functions are idempotent via dataset flags.\n// ---------------------------------------------------------------------------\n\nvar OLIVELA_PLP_ROOT_SELECTOR = \".psykhe, .psykhe--search\";\nvar OLIVELA_PLP_DRAWER_ROOT_SELECTOR =\n  '.psykhe[data-filter-position=\"drawer\"], .psykhe--search[data-filter-position=\"drawer\"]';\n\nfunction initPsykheOlivelaPlp() {\n  var plpRoots = document.querySelectorAll(OLIVELA_PLP_ROOT_SELECTOR);\n  var drawerRoots = document.querySelectorAll(OLIVELA_PLP_DRAWER_ROOT_SELECTOR);\n\n  runOlivelaInitStep(\"runtime-bindings\", () => {\n    initOlivelaRuntimeBindings();\n  });\n\n  runOlivelaInitStep(\"app-block\", () => {\n    plpRoots.forEach((root) => initOlivelaAppBlock(root));\n  });\n\n  runOlivelaInitStep(\"controls-bar\", () => {\n    plpRoots.forEach((root) => initOlivelaControlsBar(root));\n  });\n\n  runOlivelaInitStep(\"sticky-controls\", () => {\n    drawerRoots.forEach((root) => initStickyControls(root));\n  });\n\n  runOlivelaInitStep(\"drawer\", () => {\n    document\n      .querySelectorAll(\"psykhe-drawer.psykhe__filter-drawer\")\n      .forEach((drawer) => initOlivelaDrawer(drawer));\n  });\n\n  runOlivelaInitStep(\"public-overrides\", () => {\n    applyOlivelaPublicOverrides(document);\n  });\n\n  runOlivelaInitStep(\"category-bootstrap\", function () {\n    if (olivelaAutoOpenState.didBootstrapCategoryOpen) return;\n\n    var segments = getOlivelaCollectionSegments();\n    if (segments.length === 0) return;\n\n    // Requires real facet data from the store. handleOlivelaRefinementsChange\n    // populates olivelaRuntimeState.facets synchronously on the first\n    // non-suppressed psykhe-refinements-change event. This bootstrap runs from\n    // a rAF-deferred initPsykheOlivelaPlp, so the handler always fires first.\n    if (!Array.isArray(olivelaRuntimeState.facets)\n      || olivelaRuntimeState.facets.length === 0) {\n      return;\n    }\n\n    olivelaAutoOpenState.didBootstrapCategoryOpen = true;\n\n    var keyToOpen = segments.length >= 2 ? \"category_2\" : \"category_1\";\n\n    drawerRoots.forEach(function (root) {\n      var drawer = getOlivelaPriorityFilterDrawer(root);\n      openFacetInPriorityDrawer(drawer, keyToOpen);\n    });\n\n    // Seed prev-state from collection segments (mapped parent context) and\n    // actual facet selections (cat2 may have URL-preselected values). Prevents\n    // the first psykhe-refinements-change from re-detecting gain/loss.\n    var bootFacets = olivelaRuntimeState.facets;\n    if (segments.length >= 1) {\n      olivelaAutoOpenState.prevCat0Selected = [segments[0]];\n    }\n    if (segments.length >= 2) {\n      olivelaAutoOpenState.prevCat1Selected = [segments.slice(0, 2).join(\" > \")];\n    }\n    olivelaAutoOpenState.prevCat2Selected =\n      getSelectedFacetLabels(bootFacets, \"category_2\");\n  });\n\n  runOlivelaInitStep(\"content-tiles\", () => {\n    syncOlivelaContentTiles(document);\n  });\n\n  runOlivelaInitStep(\"pagination\", () => {\n    syncOlivelaPaginationVisibility(document);\n  });\n}\n\nlet olivelaPlpInitRafId = 0;\nlet psykheOlivelaSearchInputObserver = null;\nfunction schedulePsykheOlivelaPlpInit() {\n  if (olivelaPlpInitRafId) return;\n  olivelaPlpInitRafId = window.requestAnimationFrame(() => {\n    olivelaPlpInitRafId = 0;\n    initPsykheOlivelaPlp();\n  });\n}\n\nif (document.readyState === \"loading\") {\n  document.addEventListener(\"DOMContentLoaded\", initPsykheOlivelaPlp, {\n    once: true,\n  });\n} else {\n  initPsykheOlivelaPlp();\n}\n\ndocument.addEventListener(\"psykhe-instance-ready\", schedulePsykheOlivelaPlpInit);\ndocument.addEventListener(\"psykhe-results-updated\", schedulePsykheOlivelaPlpInit);\ndocument.addEventListener(\n  \"psykhe-refinements-change\",\n  schedulePsykheOlivelaPlpInit\n);\n\n// The theme mounts <psykhe-search-input> in its <dialog> on demand; no\n// document listener above fires on that insertion, so a MutationObserver\n// runs applyOlivelaPublicOverrides at attach time, before the first render.\ncustomElements.whenDefined('psykhe-search-input').then(function () {\n  applyOlivelaPublicOverrides(document);\n\n  // Idempotency guard prevents observer leak if bootstrap runs twice (theme editor preview).\n  if (psykheOlivelaSearchInputObserver) return;\n\n  psykheOlivelaSearchInputObserver = new MutationObserver(function (mutations) {\n    mutations.forEach(function (mutation) {\n      mutation.addedNodes.forEach(function (node) {\n        if (!(node instanceof Element)) return;\n        if (node.matches(\"psykhe-search-input\")) {\n          applyOlivelaPublicOverrides(node.parentElement || document);\n        } else if (node.querySelector) {\n          var found = node.querySelectorAll(\"psykhe-search-input\");\n          found.forEach(function (el) {\n            applyOlivelaPublicOverrides(el.parentElement || document);\n          });\n        }\n      });\n    });\n  });\n  psykheOlivelaSearchInputObserver.observe(document, { childList: true, subtree: true });\n});\n\n// ---------------------------------------------------------------------------\n// 11. PAGINATION SKELETON OVERLAY\n//\n// Shows a shimmer overlay on the product grid when a pagination request takes\n// longer than `stalledDelayMs` to complete.\n//\n//   el.showPaginationSkeleton = true;   // disable with false\n//   el.stalledDelayMs = 300;            // wait before showing the overlay\n//   el.paginationMinDisplayMs = 300;    // minimum visible duration once shown\n//\n// Both delays default to 300 ms in the SDK (research-backed anti-flicker\n// baseline). Raise `stalledDelayMs` (e.g. 400) to hide brief network hiccups,\n// or raise `paginationMinDisplayMs` (e.g. 500) for a steadier overlay on slow\n// connections. Lower either (e.g. 200) to react sooner and hide quicker.\n// ---------------------------------------------------------------------------\n\ncustomElements.whenDefined(\"psykhe-provider\").then(function () {\n  document.querySelectorAll(\"psykhe-provider\").forEach(function (el) {\n    el.showPaginationSkeleton = true;\n    el.stalledDelayMs = 300;\n    el.paginationMinDisplayMs = 300;\n  });\n});\n"],
  "mappings": "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",
  "names": ["setTriggerText"]
}
