{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/peptik-fuzzy-search.js?cb=20260821-search-popup-v4"],
  "sourcesContent": ["// ABOUTME: Provides one shared product-search engine and dropdown for the collection and header.\n// ABOUTME: Fully replaces Shopify predictive results so both search bars behave identically.\n// DATA FLOW: Either search input -> shared catalog and suggestion lookup -> identical result rows.\n// DEPENDENCIES: Shopify /products.json, /search/suggest.json, and collection search CSS classes.\n(function () {\n  if (window.__peptikFuzzyHeaderBound) return;\n  window.__peptikFuzzyHeaderBound = true;\n\n  // Search is deliberately OUTSIDE the desktop gate (Big Cheese 2026-08-05). The gate keeps\n  // `mobile-only` products out of the browsable grid, where a competitor scrapes the\n  // catalogue; someone who types the name already knows it exists, so hiding it there only\n  // costs a sale. The collection-page search bar never filtered either, so both bars behave\n  // the same.\n\n  // ----- Sold-out styling for header search hits -----\n  // The hit displays a product's pen/vial namesake variant; when THAT variant\n  // is out of stock the hit is crossed out (both our fuzzy hits and Shopify's\n  // native predictive product cards).\n  (function injectStyle() {\n    if (document.getElementById('peptik-fuzzy-soldout-style')) return;\n    var s = document.createElement('style');\n    s.id = 'peptik-fuzzy-soldout-style';\n    s.textContent =\n      '.peptik-fuzzy__hit--soldout,.predictive-search-results__card--soldout{opacity:.6;}' +\n      '.peptik-fuzzy__hit--soldout .peptik-fuzzy__title,' +\n      '.predictive-search-results__card--soldout .predictive-search-results__card-title,' +\n      '.predictive-search-results__card--soldout .resource-card__title,' +\n      '.predictive-search-results__card--soldout .resource-card__title-link{text-decoration:line-through;text-decoration-thickness:1.5px;}' +\n      '.peptik-fuzzy__soldout,.predictive-search-results__card--soldout .peptik-native-soldout{display:inline-block;margin-top:2px;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#b42318;}';\n    (document.head || document.documentElement).appendChild(s);\n  })();\n\n  // ----- Catalog (cached for the session) -----\n  var catalogPromise = null;\n  var catalogByHandle = Object.create(null);\n  // Priorite marchande commune aux trois tris de ce module et a la barre du catalogue\n  // (sections/main-collection.liquid) : best-seller + stylo, puis best-seller, puis le reste.\n  // Pilotee par les tags produit depuis l'admin \u2014 jamais par une liste de handles en dur.\n  // Big Cheese 2026-08-11 : \"reta pen is the best seller\", il doit sortir en premier.\n  // Format vendu par une fiche, d'apres son titre \u2014 meme regle que la carte de collection\n  // (snippets/product-card.liquid) : \"une fiche intitulee ...Pen doit cibler sa variante Pen\".\n  function peptikFormat(entry) {\n    var t = ((entry && entry.title) || '').toLowerCase();\n    if (t.indexOf('spray') !== -1 || t.indexOf('nasal') !== -1) return 'spray';\n    if (t.indexOf('pen') !== -1) return 'pen';\n    if (t.indexOf('vial') !== -1) return 'vial';\n    return '';\n  }\n\n  // Variante a ouvrir depuis un resultat de recherche. Sans elle, le lien porte la seule\n  // reference produit et la fiche retombe sur selected_or_first_available_variant : sur le\n  // stylo RETA, dont le 10mg est epuise, c'etait le FLACON qui s'ouvrait \u2014 un client qui\n  // clique \"Pen\" atterrissait sur un vial (2026-08-11).\n  function peptikVariantMatchesFormat(variant, fmt) {\n    var title = ((variant && variant.title) || '').toLowerCase();\n    if (fmt === 'pen') return title.indexOf('pen') !== -1 || title.indexOf('ready-to-use') !== -1 || title.indexOf('ready to use') !== -1;\n    if (fmt === 'vial') return title.indexOf('vial') !== -1;\n    if (fmt === 'spray') return title.indexOf('spray') !== -1 || title.indexOf('nasal') !== -1;\n    return false;\n  }\n\n  function peptikVariantOfFormat(entry, fmt) {\n    var vs = (entry && entry.variants) || [];\n    if (!fmt || !vs.length) return null;\n    var duFormat = vs.filter(function (v) { return peptikVariantMatchesFormat(v, fmt); });\n    if (!duFormat.length) return null;\n    var dispo = duFormat.filter(function (v) { return v.available; })[0];\n    return dispo || duFormat[0];\n  }\n\n  function peptikVarianteCibleComplete(entry) {\n    return peptikVariantOfFormat(entry, peptikFormat(entry));\n  }\n\n  function peptikVarianteCible(entry) {\n    var variant = peptikVarianteCibleComplete(entry);\n    return (variant && variant.id) || null;\n  }\n\n  function peptikUrlVariante(url, id) {\n    if (!id || !url) return url;\n    if (url.indexOf('variant=') !== -1) return url;\n    return url + (url.indexOf('?') !== -1 ? '&' : '?') + 'variant=' + id;\n  }\n\n  function peptikPrio(tags) {\n    var t = tags || '';\n    if (t.indexOf('best seller') === -1) return 2;\n    return /(^|\\s)pen(\\s|$)/.test(t) ? 0 : 1;\n  }\n\n  function loadCatalog() {\n    if (catalogPromise) return catalogPromise;\n    catalogPromise = fetch('/products.json?limit=250', { headers: { Accept: 'application/json' } })\n      .then(function (r) { return r.ok ? r.json() : { products: [] }; })\n      .then(function (d) {\n        return ((d && d.products) || []).map(function (p) {\n          // The hit DISPLAYS the product's hero image (images[0]). Sold-out\n          // cross-out must read from the variant whose image that is \u2014 NOT\n          // variants[0]. For bundles variants[0] is often the Vial while the\n          // displayed hero (and the card) is the Pen, so matching by image is\n          // what keeps search, card and PDP consistent.\n          // Match on the image FILENAME (basename) so URL-prefix differences\n          // between product image and variant image don't break the match.\n          var displayImg = (p.images && p.images[0] && p.images[0].src) ? p.images[0].src.split('?')[0].split('/').pop() : '';\n          var dv = null;\n          if (displayImg && Array.isArray(p.variants)) {\n            for (var vi = 0; vi < p.variants.length; vi++) {\n              var fimg = p.variants[vi].featured_image;\n              if (fimg && fimg.src && fimg.src.split('?')[0].split('/').pop() === displayImg) { dv = p.variants[vi]; break; }\n            }\n          }\n          if (!dv) dv = p.variants && p.variants[0];\n          var rawTags = Array.isArray(p.tags) ? p.tags : String(p.tags || '').split(',');\n          var bundleProduct = String(p.product_type || '').toLowerCase() === 'bundle'\n            || rawTags.some(function (tag) { return /^bundles?$/i.test(String(tag || '').trim()); });\n          // If the hero belongs to an unavailable dosage, promote the first available\n          // variant of the product's own format. This keeps every early render coherent,\n          // before query-specific formatting is applied.\n          var productFormat = peptikFormat(p);\n          if (dv && !dv.available && productFormat && Array.isArray(p.variants)) {\n            for (var pi = 0; pi < p.variants.length; pi++) {\n              if (p.variants[pi].available && peptikVariantMatchesFormat(p.variants[pi], productFormat)) {\n                dv = p.variants[pi];\n                break;\n              }\n            }\n          }\n          // Sold-out must judge the FORMAT, not the single matched variant. Since dosage became\n          // a second option, a pen product carries Pen/10mg AND Pen/40mg: with 10mg out of stock\n          // the hit was crossed out even though the 40mg pen is on the shelf and buyable. Look\n          // for any variant of the same format that is available.\n          var dvFormat = '';\n          if (dv && dv.title) {\n            var dvt = dv.title.toLowerCase();\n            if (dvt.indexOf('pen') !== -1) dvFormat = 'pen';\n            else if (dvt.indexOf('vial') !== -1) dvFormat = 'vial';\n            else if (dvt.indexOf('spray') !== -1) dvFormat = 'spray';\n          }\n          var formatAvailable = dv ? !!dv.available : true;\n          if (bundleProduct && Array.isArray(p.variants)) {\n            formatAvailable = p.variants.some(function (variant) { return !!variant.available; });\n          } else if (!formatAvailable && Array.isArray(p.variants)) {\n            for (var ai = 0; ai < p.variants.length; ai++) {\n              var av = p.variants[ai];\n              if (!av || !av.available) continue;\n              // No format word on the displayed variant (single-variant products): any\n              // available variant means the product is buyable.\n              if (!dvFormat || (av.title || '').toLowerCase().indexOf(dvFormat) !== -1) { formatAvailable = true; break; }\n            }\n          }\n          var searchAliases = rawTags\n            .map(function (tag) { return String(tag || '').trim().toLowerCase(); })\n            .filter(function (tag) { return tag.indexOf('search alias ') === 0; })\n            .map(function (tag) { return tag.slice('search alias '.length); })\n            .join(' ');\n          var entry = {\n            id: p.id,\n            title: p.title || '',\n            handle: p.handle || '',\n            body: (p.body_html || '').replace(/<[^>]*>/g, ' ').slice(0, 800),\n            vendor: p.vendor || '',\n            product_type: (p.product_type || '').toLowerCase(),\n            tags: Array.isArray(p.tags) ? p.tags.join(' ').toLowerCase() : (p.tags || '').toLowerCase(),\n            search_aliases: searchAliases,\n            image: (dv && dv.featured_image && dv.featured_image.src) || (p.images && p.images[0] && p.images[0].src) || '',\n            price: dv ? dv.price : '',\n            available: formatAvailable,\n            // Pen + Vial variants, so a matched bundle can be split into two\n            // hits (a bundle is one product carrying both formats).\n            variants: (Array.isArray(p.variants) ? p.variants : []).map(function (v) {\n              return {\n                id: v.id,\n                title: v.title || '',\n                price: v.price,\n                available: !!v.available,\n                image: (v.featured_image && v.featured_image.src) || '',\n              };\n            }),\n            url: '/products/' + p.handle,\n          };\n          catalogByHandle[entry.handle] = entry;\n          return entry;\n        });\n      })\n      .catch(function () { return []; });\n    return catalogPromise;\n  }\n\n  function normalize(s) { return (s || '').toString().toLowerCase().replace(/[^a-z0-9]+/g, ''); }\n  function levenshtein(a, b) {\n    if (a === b) return 0;\n    if (!a.length) return b.length;\n    if (!b.length) return a.length;\n    var prev = new Array(b.length + 1);\n    var curr = new Array(b.length + 1);\n    for (var j = 0; j <= b.length; j++) prev[j] = j;\n    for (var i = 1; i <= a.length; i++) {\n      curr[0] = i;\n      for (var k = 1; k <= b.length; k++) {\n        var cost = a.charCodeAt(i - 1) === b.charCodeAt(k - 1) ? 0 : 1;\n        curr[k] = Math.min(prev[k] + 1, curr[k - 1] + 1, prev[k - 1] + cost);\n      }\n      var tmp = prev; prev = curr; curr = tmp;\n    }\n    return prev[b.length];\n  }\n  // Min edits to match q as a fuzzy SUBSTRING of t \u2014 the match may start and end\n  // anywhere in t for free, so a short typo'd prefix like \"tizepa\" aligns to\n  // \"tirzepa\" inside \"tirzepatidenextgenpen\" at distance 1 (not the huge\n  // full-string distance that the old token Levenshtein produced).\n  function fuzzyContains(q, t) {\n    var m = q.length, n = t.length;\n    if (m === 0) return 0;\n    if (n === 0) return m;\n    var prev = new Array(n + 1);\n    for (var j = 0; j <= n; j++) prev[j] = 0; // start anywhere in t is free\n    for (var i = 1; i <= m; i++) {\n      var curr = new Array(n + 1);\n      curr[0] = i;\n      for (var k = 1; k <= n; k++) {\n        var cost = q.charCodeAt(i - 1) === t.charCodeAt(k - 1) ? 0 : 1;\n        curr[k] = Math.min(prev[k] + 1, curr[k - 1] + 1, prev[k - 1] + cost);\n      }\n      prev = curr;\n    }\n    var min = Infinity;\n    for (var z = 0; z <= n; z++) if (prev[z] < min) min = prev[z];\n    return min;\n  }\n  // Jaro-Winkler similarity (0..1) \u2014 robust to transpositions and garbled\n  // typos that defeat plain edit distance, e.g. \"tizapeti\" vs \"tirzepatide\".\n  function jaro(s1, s2) {\n    if (s1 === s2) return 1;\n    var l1 = s1.length, l2 = s2.length;\n    if (!l1 || !l2) return 0;\n    var md = Math.max(0, Math.floor(Math.max(l1, l2) / 2) - 1);\n    var m1 = new Array(l1).fill(false), m2 = new Array(l2).fill(false), m = 0;\n    for (var i = 0; i < l1; i++) {\n      var lo = Math.max(0, i - md), hi = Math.min(i + md + 1, l2);\n      for (var j = lo; j < hi; j++) { if (m2[j] || s1[i] !== s2[j]) continue; m1[i] = m2[j] = true; m++; break; }\n    }\n    if (!m) return 0;\n    var t = 0, k = 0;\n    for (var i2 = 0; i2 < l1; i2++) { if (!m1[i2]) continue; while (!m2[k]) k++; if (s1[i2] !== s2[k]) t++; k++; }\n    t /= 2;\n    return (m / l1 + m / l2 + (m - t) / m) / 3;\n  }\n  function jw(s1, s2) {\n    var j = jaro(s1, s2), p = 0, max = Math.min(4, Math.min(s1.length, s2.length));\n    for (var i = 0; i < max; i++) { if (s1[i] === s2[i]) p++; else break; }\n    return j + p * 0.1 * (1 - j);\n  }\n  // Returns a small distance-like score for a match, Infinity otherwise.\n  // Two ways to match: (a) a fuzzy SUBSTRING within 30% of the query length\n  // (good for partials like \"ghk\", \"bpc157\"); (b) a token whose Jaro-Winkler\n  // similarity to the query is >= 0.82 (good for garbled typos).\n  function score(query, p) {\n    var q = normalize(query);\n    if (q.length < 2) return Infinity;\n    // A product-name prefix is more relevant than the same letters inside a\n    // vendor name (for example, \"pt\" occurs in \"Peptik\" on every product).\n    // Keep availability ordering in fuzzyFind unchanged.\n    if (normalize(p.title).indexOf(q) === 0 || normalize(p.handle).indexOf(q) === 0) return -1;\n    var fields = [p.title, p.handle, p.vendor, p.search_aliases];\n    var bestFc = Infinity, bestJwDist = Infinity, exact = false;\n    for (var i = 0; i < fields.length; i++) {\n      var fNorm = normalize(fields[i]);\n      if (!fNorm) continue;\n      if (fNorm.indexOf(q) !== -1) { exact = true; }\n      var fc = fuzzyContains(q, fNorm) / q.length;\n      if (fc < bestFc) bestFc = fc;\n      var tokens = fields[i].toLowerCase().split(/[^a-z0-9]+/);\n      for (var j = 0; j < tokens.length; j++) {\n        if (tokens[j].length < 3) continue;\n        var d = 1 - jw(q, tokens[j]);\n        if (d < bestJwDist) bestJwDist = d;\n      }\n    }\n    if (exact) return 0;\n    if (bestFc <= 0.30 || bestJwDist <= 0.18) return Math.min(bestFc, bestJwDist);\n    return Infinity;\n  }\n  function mounjaroSynonym(query){\n    var qn = (query || '').toString().toLowerCase().replace(/[^a-z0-9]+/g, '');\n    // \"Mounjaro\" is the brand name for Tirzepatide \u2014 surface Tirzepatide for it.\n    if (qn && (('mounjaro'.indexOf(qn) === 0 && qn.length >= 4) || qn.indexOf('mounjaro') !== -1)) return 'tirzepatide';\n    return query;\n  }\n  function fuzzyFind(query, limit) {\n    query = mounjaroSynonym(query);\n    return loadCatalog().then(function (catalog) {\n      var q = normalize(query);\n      if (q.length < 2) return [];\n      // score() already applies the 30% substring / 0.82 Jaro-Winkler match\n      // thresholds and returns Infinity for non-matches.\n      var scored = catalog.map(function (p) { return { p: p, s: score(query, p) }; });\n      return scored\n        .filter(function (x) { return isFinite(x.s); })\n        .sort(function (a, b) {\n        var aA = a.p.available !== false, bA = b.p.available !== false;\n        if (aA !== bA) return aA ? -1 : 1;                 // in-stock first\n        if (a.s !== b.s) return a.s - b.s;                 // exact/relevant matches first\n        var aR = peptikPrio(a.p.tags), bR = peptikPrio(b.p.tags);\n        if (aR !== bR) return aR - bR;                     // best-seller / pen first\n        var aP = parseFloat(a.p.price); if (!isFinite(aP)) aP = Infinity;\n        var bP = parseFloat(b.p.price); if (!isFinite(bP)) bP = Infinity;\n        if (aP !== bP) return aP - bP;                     // lowest price first\n        return 0;\n      })\n        .slice(0, limit || 6)\n        .map(function (x) { return x.p; });\n    });\n  }\n\n  // ----- Bundle format splitting -----\n  function isBundle(entry) {\n    if (!entry) return false;\n    if (entry.product_type === 'bundle') return true;\n    return /(^|\\s)bundles?(\\s|$)/.test(entry.tags || '');\n  }\n  // Each matched multi-format bundle becomes one hit per format, deep-linked\n  // to its exact variant. The limit is applied to whole products so the final\n  // result slot can never keep Vial while silently cutting Pen or Spray.\n  function expandBundles(list, limit) {\n    var out = [];\n    list.forEach(function (p) {\n      if (limit && out.length >= limit) return;\n      var group = [];\n      if (isBundle(p) && p.variants && p.variants.length >= 2) {\n        [{ format: 'pen', label: 'Pen' }, { format: 'spray', label: 'Spray' }, { format: 'vial', label: 'Vial' }]\n          .forEach(function (choice) {\n            var variant = peptikVariantOfFormat(p, choice.format);\n            if (!variant) return;\n            group.push({\n              id: String(p.id) + ':' + variant.id,\n              title: p.title + ' (' + choice.label + ')',\n              handle: p.handle,\n              image: variant.image || p.image,\n              price: variant.price,\n              available: variant.available,\n              tags: p.tags,\n              url: '/products/' + p.handle + '?variant=' + variant.id,\n              _split: true,\n            });\n          });\n        if (group.length >= 2) {\n          group = group.filter(function (entry) { return entry.available; })\n            .concat(group.filter(function (entry) { return !entry.available; }));\n          if (!limit || out.length + group.length <= limit || out.length === 0) {\n            Array.prototype.push.apply(out, group);\n          }\n          return;\n        }\n      }\n      out.push(p);\n    });\n    return out;\n  }\n\n  // ----- Shared collection and header search -----\n  // Both surfaces call this exact function. Shopify predictive search remains only as the\n  // header dialog shell; its own requests, cards, recent products and messages are removed.\n  function expandQuery(raw) {\n    var q = (raw || '').trim();\n    if (!q) return [];\n    var variants = new Set([q]);\n    variants.add(q.replace(/([a-zA-Z])(\\d)/g, '$1-$2').replace(/(\\d)([a-zA-Z])/g, '$1-$2'));\n    variants.add(q.replace(/([a-zA-Z])(\\d)/g, '$1 $2').replace(/(\\d)([a-zA-Z])/g, '$1 $2'));\n    if (q.indexOf('-') !== -1) variants.add(q.replace(/-/g, ''));\n    if (q.indexOf(' ') !== -1) variants.add(q.replace(/\\s+/g, ''));\n    return Array.from(variants).filter(function (value) { return value.length >= 2; });\n  }\n\n  function suggestionUrl(query) {\n    return '/search/suggest.json?q=' + encodeURIComponent(query)\n      + '&resources[type]=product&resources[limit]=8'\n      + '&resources[options][unavailable_products]=last'\n      + '&resources[options][fields]=title,product_type,vendor,tag,body';\n  }\n\n  function requestedFormat(query) {\n    var words = ' ' + String(query || '').toLowerCase().replace(/[^a-z0-9]+/g, ' ') + ' ';\n    if (/\\spens?\\s/.test(words)) return 'pen';\n    if (/\\svials?\\s/.test(words)) return 'vial';\n    if (/\\ssprays?\\s/.test(words) || /\\snasal\\s/.test(words)) return 'spray';\n    return '';\n  }\n\n  function queryWithoutRequestedFormat(query, format) {\n    if (!format) return query;\n    var reduced = String(query || '').replace(/\\b(pens?|vials?|sprays?|nasal)\\b/gi, ' ').replace(/\\s+/g, ' ').trim();\n    return reduced || query;\n  }\n\n  function entryForRequestedFormat(entry, format) {\n    if (!entry || !format || !Array.isArray(entry.variants)) return entry;\n    var variant = peptikVariantOfFormat(entry, format);\n    if (!variant) return entry;\n    var formatted = Object.assign({}, entry, {\n      image: variant.image || entry.image,\n      price: variant.price,\n      available: variant.available,\n      url: '/products/' + entry.handle + '?variant=' + variant.id,\n    });\n    if (format === 'pen') {\n      formatted.title = formatted.title.replace('Lyophilized Vial + Sterile Water', 'Next-Gen Dual-Chamber Pen');\n    } else if (format === 'vial') {\n      formatted.title = formatted.title\n        .replace('Next-Gen Dual-Chamber Pen', 'Lyophilized Vial + Sterile Water')\n        .replace(' Pen Dual-Chamber', '');\n    }\n    return formatted;\n  }\n\n  function unifiedFind(query, signal) {\n    // The catalog is the deterministic source of truth. Normalization already removes spaces\n    // and punctuation, so `tb500`, `TB-500` and `tb 500` are the same query without relying on\n    // Shopify's inconsistent predictive endpoint.\n    var format = requestedFormat(query);\n    var catalogQuery = queryWithoutRequestedFormat(query, format);\n    return fuzzyFind(catalogQuery, 20).then(function (merged) {\n      merged = merged.map(function (entry, index) { return { entry: entry, index: index }; })\n        .sort(function (a, b) {\n          if (a.entry.available !== b.entry.available) return a.entry.available ? -1 : 1;\n          return a.index - b.index;\n        })\n        .map(function (item) { return item.entry; });\n      var formatted = format\n        ? merged.slice(0, 8).map(function (entry) { return entryForRequestedFormat(entry, format); })\n        : merged;\n      var products = format ? formatted.slice(0, 8) : expandBundles(formatted, 8);\n      products = products.map(function (entry) {\n        if (entry._split) return entry;\n        var variant = peptikVarianteCibleComplete(entry);\n        if (!variant) return entry;\n        return Object.assign({}, entry, {\n          image: variant.image || entry.image,\n          price: variant.price,\n          available: variant.available,\n          url: peptikUrlVariante(entry.url, variant.id),\n        });\n      });\n      return products;\n    });\n\n    var suggestionRequests = expandQuery(query).map(function (variant) {\n      return fetch(suggestionUrl(variant), { signal: signal, headers: { Accept: 'application/json' } })\n        .then(function (response) { return response.ok ? response.json() : null; })\n        .then(function (data) {\n          return (data && data.resources && data.resources.results && data.resources.results.products) || [];\n        })\n        .catch(function (error) {\n          if (error.name === 'AbortError') throw error;\n          return [];\n        });\n    });\n\n    return Promise.all([loadCatalog(), Promise.all(suggestionRequests), fuzzyFind(query, 20)])\n      .then(function (parts) {\n        var seen = new Set();\n        var merged = [];\n        parts[1].forEach(function (group) {\n          group.forEach(function (suggestion) {\n            var handle = suggestion && suggestion.handle;\n            if (!handle || seen.has(handle)) return;\n            var catalogEntry = catalogByHandle[handle];\n            if (!catalogEntry) return;\n            var entry = Object.assign({}, catalogEntry);\n            entry.url = suggestion.url || entry.url;\n            seen.add(handle);\n            merged.push(entry);\n          });\n        });\n        parts[2].forEach(function (entry) {\n          if (!entry || !entry.handle || seen.has(entry.handle)) return;\n          seen.add(entry.handle);\n          merged.push(entry);\n        });\n\n        merged = merged.map(function (entry, index) { return { entry: entry, index: index }; })\n          .sort(function (a, b) {\n            if (a.entry.available !== b.entry.available) return a.entry.available ? -1 : 1;\n            var priority = peptikPrio(a.entry.tags) - peptikPrio(b.entry.tags);\n            if (priority !== 0) return priority;\n            var aPrice = parseFloat(a.entry.price); if (!isFinite(aPrice)) aPrice = Infinity;\n            var bPrice = parseFloat(b.entry.price); if (!isFinite(bPrice)) bPrice = Infinity;\n            if (aPrice !== bPrice) return aPrice - bPrice;\n            return a.index - b.index;\n          })\n          .map(function (item) { return item.entry; });\n\n        var products = expandBundles(merged.slice(0, 8)).slice(0, 8);\n        products.forEach(function (entry) {\n          if (entry._split) return;\n          var variantId = peptikVarianteCible(entry);\n          if (variantId) entry.url = peptikUrlVariante(entry.url, variantId);\n        });\n        return products;\n      });\n  }\n\n  function formatPrice(raw) {\n    var aed = parseFloat(raw);\n    if (!isFinite(aed)) return '';\n    var rounded = Math.round(aed);\n    return (Math.abs(aed - rounded) < 0.005 ? rounded : aed.toFixed(2)) + ' AED';\n  }\n\n  function priceCents(raw) {\n    var aed = parseFloat(raw);\n    return isFinite(aed) ? String(Math.round(aed * 100)) : '';\n  }\n\n  function renderUnifiedResults(results, products) {\n    if (!products.length) {\n      results.innerHTML = '<div class=\"peptik-cat-search__empty\">No matches. Press Enter to see all results.</div>';\n      results.hidden = false;\n      return;\n    }\n    results.innerHTML = products.map(function (product, index) {\n      var src = thumbSrc(product.image);\n      var image = src\n        ? '<img src=\"' + escapeHtml(src) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\">'\n        : '<span class=\"peptik-cat-search__thumb-fallback\"></span>';\n      var cents = priceCents(product.price);\n      var priceAttribute = cents ? ' data-peptik-price-aed=\"' + cents + '\"' : '';\n      var soldOut = product.available === false;\n      return '<a class=\"peptik-cat-search__hit' + (soldOut ? ' peptik-cat-search__hit--soldout' : '')\n        + '\" href=\"' + escapeHtml(product.url) + '\" role=\"option\" data-peptik-key=\"' + index + '\">'\n        + '<span class=\"peptik-cat-search__thumb\">' + image + '</span>'\n        + '<span class=\"peptik-cat-search__meta\">'\n        + '<span class=\"peptik-cat-search__title\">' + escapeHtml(product.title) + '</span>'\n        + '<span class=\"peptik-cat-search__price\"' + priceAttribute + '>' + formatPrice(product.price) + '</span>'\n        + (soldOut ? '<span class=\"peptik-cat-search__soldout\">Sold out</span>' : '')\n        + '</span></a>';\n    }).join('');\n    results.hidden = false;\n  }\n\n  function bindUnifiedSearch(form, input, results) {\n    if (!form || !input || !results || input.__peptikUnifiedSearch) return;\n    input.__peptikUnifiedSearch = true;\n    var controller = null;\n    var debounce = null;\n    input.addEventListener('input', function () {\n      var query = input.value.trim();\n      clearTimeout(debounce);\n      if (controller) controller.abort();\n      if (!query) {\n        results.hidden = true;\n        results.innerHTML = '';\n        return;\n      }\n      debounce = setTimeout(function () {\n        controller = new AbortController();\n        var requestedQuery = query;\n        unifiedFind(requestedQuery, controller.signal).then(function (products) {\n          if (input.value.trim() !== requestedQuery) return;\n          renderUnifiedResults(results, products);\n        }).catch(function (error) {\n          if (error.name !== 'AbortError') console.warn('search err', error);\n        });\n      }, 180);\n    });\n    input.addEventListener('focus', function () {\n      if (input.value.trim() && results.innerHTML) results.hidden = false;\n    });\n    input.addEventListener('keydown', function (event) {\n      if (event.key === 'Escape') {\n        results.hidden = true;\n        input.blur();\n      }\n    });\n    form.addEventListener('submit', function (event) {\n      event.preventDefault();\n      var query = input.value.trim();\n      if (query) window.location.assign('/search?type=product&q=' + encodeURIComponent(query));\n    });\n    document.addEventListener('click', function (event) {\n      if (!form.contains(event.target) && !results.contains(event.target)) results.hidden = true;\n    });\n  }\n\n  function replaceCollectionSearch() {\n    var form = document.querySelector('[data-peptik-cat-search-form]');\n    var oldInput = form && form.querySelector('[data-peptik-cat-search-input]');\n    var results = document.querySelector('[data-peptik-cat-search-results]');\n    if (!form || !oldInput || !results || oldInput.__peptikUnifiedSearch) return;\n    var input = oldInput.cloneNode(true);\n    oldInput.replaceWith(input);\n    results.hidden = true;\n    results.innerHTML = '';\n    bindUnifiedSearch(form, input, results);\n  }\n\n  function replaceHeaderSearch() {\n    var component = document.querySelector('predictive-search-component');\n    if (!component) return;\n    var nativeClose = component.querySelector('[ref=\"closeModalButton\"]');\n    var shell = document.createElement('div');\n    shell.className = component.className + ' peptik-header-search-shell';\n    shell.style.cssText = component.style.cssText;\n    shell.dataset.peptikHeaderSearchShell = 'true';\n    shell.setAttribute('role', 'search');\n    shell.setAttribute('aria-label', component.getAttribute('aria-label') || 'Search');\n    var form = document.createElement('form');\n    form.className = 'peptik-cat-search-wrap peptik-header-unified-search';\n    form.action = '/search';\n    form.method = 'get';\n    form.setAttribute('role', 'search');\n    form.innerHTML = ''\n      + '<input type=\"hidden\" name=\"type\" value=\"product\">'\n      + '<div class=\"peptik-cat-search\">'\n      + '<span class=\"peptik-cat-search__icon\" aria-hidden=\"true\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"><circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"#686677\" stroke-width=\"1.6\"></circle><path d=\"m21 21-4.3-4.3\" stroke=\"#686677\" stroke-width=\"1.6\" stroke-linecap=\"round\"></path></svg></span>'\n      + '<input type=\"search\" name=\"q\" class=\"peptik-cat-search__input\" placeholder=\"Find your peptides\" aria-label=\"Search peptides\" autocomplete=\"off\" ref=\"searchInput\" data-peptik-header-search-input>'\n      + '<button type=\"submit\" class=\"peptik-cat-search__btn\">Search</button>'\n      + '<button type=\"button\" ref=\"resetButton\" hidden aria-hidden=\"true\" tabindex=\"-1\"></button>'\n      + '</div>'\n      + '<div class=\"peptik-cat-search__results\" ref=\"predictiveSearchResults\" data-peptik-header-search-results role=\"listbox\" aria-label=\"Search results\" hidden></div>';\n    shell.appendChild(form);\n    if (nativeClose) {\n      nativeClose.style.setProperty('position', 'absolute', 'important');\n      nativeClose.style.setProperty('top', '16px', 'important');\n      nativeClose.style.setProperty('right', '16px', 'important');\n      shell.appendChild(nativeClose);\n    }\n    component.replaceWith(shell);\n    bindUnifiedSearch(\n      form,\n      form.querySelector('[data-peptik-header-search-input]'),\n      form.querySelector('[data-peptik-header-search-results]')\n    );\n  }\n\n  (function injectUnifiedStyle() {\n    if (document.getElementById('peptik-unified-search-style')) return;\n    var style = document.createElement('style');\n    style.id = 'peptik-unified-search-style';\n    style.textContent = ''\n      + '.peptik-header-unified-search{width:min(100% - 32px,1100px);margin:28px auto 0;position:relative;z-index:2;}'\n      + '.peptik-header-unified-search+.predictive-search__close-modal-button{position:absolute!important;top:16px!important;right:16px!important;}'\n      + '.peptik-header-search-shell{display:block;position:relative;flex:1 1 auto;width:100%;min-height:100%;padding-top:36px;background:transparent;}'\n      + '.peptik-header-unified-search .peptik-cat-search__results{position:relative;top:auto;left:auto;right:auto;margin-top:0;border-top:0;border-radius:0 0 16px 16px;box-shadow:none;}'\n      + '@media(max-width:749px){.peptik-header-unified-search{width:calc(100% - 24px);margin-top:64px;}}';\n    document.head.appendChild(style);\n  })();\n\n  replaceCollectionSearch();\n  replaceHeaderSearch();\n  new MutationObserver(function (records) {\n    var predictiveSearchAdded = records.some(function (record) {\n      return Array.prototype.some.call(record.addedNodes, function (node) {\n        return node instanceof Element\n          && (node.matches('predictive-search-component') || node.querySelector('predictive-search-component'));\n      });\n    });\n    if (predictiveSearchAdded) replaceHeaderSearch();\n  }).observe(document.documentElement, { childList: true, subtree: true });\n  return;\n\n  // Hide Shopify's single native bundle card once we render its explicit\n  // Pen + Vial hits, so the bundle isn't shown twice (and ambiguously).\n  // Idempotent: a card is only touched the first time it matches.\n  function hideNativeBundleCards(host, handles) {\n    if (!host || !handles || !handles.size) return;\n    var cards = host.querySelectorAll('.predictive-search-results__card--product');\n    Array.prototype.forEach.call(cards, function (card) {\n      if (card.getAttribute('data-peptik-bundle-hidden') === '1') return;\n      var a = card.querySelector('a[href*=\"/products/\"]');\n      if (!a) return;\n      var m = (a.getAttribute('href') || '').match(/\\/products\\/([^/?#]+)/);\n      if (!m || !handles.has(m[1])) return;\n      card.setAttribute('data-peptik-bundle-hidden', '1');\n      card.style.display = 'none';\n    });\n  }\n\n  function escapeHtml(s) {\n    return String(s || '').replace(/[&<>\"']/g, function (c) {\n      return ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' })[c];\n    });\n  }\n  function thumbSrc(url) {\n    if (!url) return '';\n    return url + (url.indexOf('?') > -1 ? '&' : '?') + 'width=120';\n  }\n  function renderHits(products, query) {\n    if (!products.length) return '';\n    var items = products.map(function (p) {\n      var src = thumbSrc(p.image);\n      var img = src\n        ? '<img src=\"' + escapeHtml(src) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\">'\n        : '<span class=\"peptik-fuzzy__thumb-fallback\"></span>';\n      return ''\n        + '<a class=\"peptik-fuzzy__hit\" href=\"' + escapeHtml(p.url) + '\">'\n        + '<span class=\"peptik-fuzzy__thumb\">' + img + '</span>'\n        + '<span class=\"peptik-fuzzy__title\">' + escapeHtml(p.title) + '</span>'\n        + '</a>';\n    }).join('');\n    return ''\n      + '<div class=\"peptik-fuzzy\" data-peptik-fuzzy>'\n      +   '<div class=\"peptik-fuzzy__label\">Did you mean\u2026</div>'\n      +   '<div class=\"peptik-fuzzy__list\">' + items + '</div>'\n      + '</div>';\n  }\n\n  // Cross out Shopify's OWN native predictive product cards whose displayed\n  // (first/namesake) variant is sold out. Idempotent: only mutates a card the\n  // first time, so it can't drive the dropdown MutationObserver into a loop.\n  function markNativeCards(host) {\n    if (!host) return;\n    loadCatalog().then(function (catalog) {\n      if (!catalog || !catalog.length) return;\n      var availByHandle = Object.create(null);\n      var priceByHandle = Object.create(null);\n      var tagsByHandle = Object.create(null);\n      var catalogueParHandle = Object.create(null);\n      catalog.forEach(function (p) { availByHandle[p.handle] = p.available; priceByHandle[p.handle] = parseFloat(p.price); tagsByHandle[p.handle] = p.tags; catalogueParHandle[p.handle] = p; });\n      var cards = host.querySelectorAll('.predictive-search-results__card--product');\n      // Reorder native predictive product cards: in-stock first, then lowest price.\n      // Idempotent (only moves when order actually differs) so it can't drive the\n      // dropdown MutationObserver into a loop. Recently-viewed keeps its recency order.\n      (function reorderNative(){\n        var groups = [];\n        Array.prototype.forEach.call(cards, function (card) {\n          if (card.closest('.recently-viewed-wrapper')) return;\n          var ul = card.parentNode; if (!ul) return;\n          var g = null; for (var gi=0; gi<groups.length; gi++){ if (groups[gi].ul === ul){ g = groups[gi]; break; } }\n          if (!g) { g = { ul: ul, cards: [] }; groups.push(g); }\n          g.cards.push(card);\n        });\n        groups.forEach(function (g) {\n          if (g.cards.length < 2) return;\n          var meta = g.cards.map(function (card, i) {\n            var a = card.querySelector('a[href*=\"/products/\"]');\n            var m = a && (a.getAttribute('href') || '').match(/\\/products\\/([^/?#]+)/);\n            var hn = m ? m[1] : null;\n            var av = (hn && availByHandle[hn] === false) ? 0 : 1;\n            var pr = (hn && isFinite(priceByHandle[hn])) ? priceByHandle[hn] : Infinity;\n            var rk = peptikPrio(hn ? tagsByHandle[hn] : '');\n            return { card: card, i: i, av: av, pr: pr, rk: rk };\n          });\n          // Les cartes natives de Shopify pointent la fiche sans variante : meme piege.\n          meta.forEach(function (m) {\n            var a = m.card.querySelector('a[href*=\"/products/\"]');\n            if (!a) return;\n            var href = a.getAttribute('href') || '';\n            var hm = href.match(/\\/products\\/([^/?#]+)/);\n            var e = hm ? catalogueParHandle[hm[1]] : null;\n            var id = e ? peptikVarianteCible(e) : null;\n            if (id) a.setAttribute('href', peptikUrlVariante(href, id));\n          });\n          var sorted = meta.slice().sort(function (a, b) {\n            if (a.av !== b.av) return b.av - a.av;\n            if (a.rk !== b.rk) return a.rk - b.rk;\n            if (a.pr !== b.pr) return a.pr - b.pr;\n            return a.i - b.i;\n          });\n          if (!sorted.some(function (s, i) { return s.card !== g.cards[i]; })) return;\n          sorted.forEach(function (s) { g.ul.appendChild(s.card); });\n        });\n      })();\n      Array.prototype.forEach.call(cards, function (card) {\n        if (card.classList.contains('predictive-search-results__card--soldout')) return;\n        var a = card.querySelector('a[href*=\"/products/\"]');\n        if (!a) return;\n        var m = (a.getAttribute('href') || '').match(/\\/products\\/([^/?#]+)/);\n        if (!m || availByHandle[m[1]] !== false) return;\n        card.classList.add('predictive-search-results__card--soldout');\n        var titleEl = card.querySelector('.resource-card__title-link, .resource-card__title, .predictive-search-results__card-title');\n        if (titleEl && titleEl.parentNode && !card.querySelector('.peptik-native-soldout')) {\n          var tag = document.createElement('span');\n          tag.className = 'peptik-native-soldout';\n          tag.textContent = 'Sold out';\n          titleEl.parentNode.insertBefore(tag, titleEl.nextSibling);\n        }\n      });\n    });\n  }\n\n  // ----- Injection into Shopify's predictive-search dropdown -----\n  function getDropdownHost(input) {\n    var component = input.closest('predictive-search-component') || document.querySelector('predictive-search-component');\n    if (!component) return null;\n    return component.querySelector('.predictive-search-form__content, .predictive-search-dropdown, [ref=\"predictiveSearchResults\"]');\n  }\n  function shopifyHasGoodResults(host) {\n    if (!host) return false;\n    // If Shopify rendered at least one product card, treat it as a hit and\n    // skip the fuzzy injection so we don't pollute solid matches.\n    return !!host.querySelector('.predictive-search-results__card--product a, .predictive-search-results__products a');\n  }\n  // Stable per-host state so the fuzzy panel is INSERTED ONCE and updated\n  // in place. The previous version removed + re-inserted the whole block on\n  // every observer trigger, which caused two compounding bugs:\n  //   1. The observer watches the whole component (childList:true,subtree:true)\n  //      and our own insertion fires it again \u2192 infinite re-inject loop every\n  //      50ms \u2192 between mousedown and click the <a class=\"peptik-fuzzy__hit\">\n  //      is replaced and the click is lost (UNCLICKABLE bug).\n  //   2. The same loop kept restarting the CSS hover transition under the\n  //      cursor (light-blue blink).\n  // Fix: keep a persistent container element, only update its innerHTML when\n  // the rendered list actually changed, suspend the observer while we mutate.\n  var hostState = new WeakMap(); // host element -> { container, lastSig, observer, suspended }\n\n  function getHostState(h) {\n    var s = hostState.get(h);\n    if (!s) { s = { container: null, lastSig: '', observer: null, suspended: false }; hostState.set(h, s); }\n    return s;\n  }\n\n  function renderListHtml(products) {\n    // Just the inner `.peptik-fuzzy__list` items \u2014 the wrapper is built once.\n    return products.map(function (p) {\n      var src = thumbSrc(p.image);\n      var img = src\n        ? '<img src=\"' + escapeHtml(src) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\">'\n        : '<span class=\"peptik-fuzzy__thumb-fallback\"></span>';\n      var soldOut = p.available === false;\n      return ''\n        + '<a class=\"peptik-fuzzy__hit' + (soldOut ? ' peptik-fuzzy__hit--soldout' : '') + '\" href=\"' + escapeHtml(p.url) + '\">'\n        + '<span class=\"peptik-fuzzy__thumb\">' + img + '</span>'\n        + '<span class=\"peptik-fuzzy__title\">' + escapeHtml(p.title) + '</span>'\n        + (soldOut ? '<span class=\"peptik-fuzzy__soldout\">Sold out</span>' : '')\n        + '</a>';\n    }).join('');\n  }\n\n  function buildContainer() {\n    var el = document.createElement('div');\n    el.className = 'peptik-fuzzy';\n    el.setAttribute('data-peptik-fuzzy', '');\n    el.innerHTML =\n      '<div class=\"peptik-fuzzy__label\">Did you mean\u2026</div>' +\n      '<div class=\"peptik-fuzzy__list\" data-peptik-fuzzy-list></div>';\n    return el;\n  }\n\n  function patch(input) {\n    var q = (input.value || '').trim();\n    var host = getDropdownHost(input);\n    if (!host) return;\n    markNativeCards(host);\n    var st = getHostState(host);\n    if (q.length < 2) {\n      if (st.container && st.container.isConnected) {\n        st.suspended = true;\n        st.container.remove();\n        st.lastSig = '';\n        // Re-arm observer on next tick.\n        setTimeout(function () { st.suspended = false; }, 0);\n      }\n      return;\n    }\n    fuzzyFind(q, 6).then(function (rawProducts) {\n      var h = getDropdownHost(input);\n      if (!h) return;\n      if ((input.value || '').trim() !== q) return;\n      var stNow = getHostState(h);\n      // Expand matched bundles into Pen + Vial hits before de-duping.\n      var products = expandBundles(rawProducts);\n      if (shopifyHasGoodResults(h) && products.length > 0) {\n        var dom = h.querySelectorAll('.predictive-search-results__card--product a, .predictive-search-results__products a');\n        var existingHandles = new Set();\n        dom.forEach(function (a) {\n          var m = (a.getAttribute('href') || '').match(/\\/products\\/([^/?#]+)/);\n          if (m) existingHandles.add(m[1]);\n        });\n        // Split hits are kept even when Shopify already shows the bundle (we\n        // replace its one ambiguous card with our two variant options); plain\n        // hits Shopify already shows are dropped to avoid duplicates.\n        var bundlesToHide = new Set();\n        products = products.filter(function (p) {\n          if (p._split) {\n            if (existingHandles.has(p.handle)) bundlesToHide.add(p.handle);\n            return true;\n          }\n          return !existingHandles.has(p.handle);\n        });\n        if (bundlesToHide.size) hideNativeBundleCards(h, bundlesToHide);\n      }\n      // In-stock first. Shopify's own predictive cards already reorder this way (see\n      // reorderNative below); these hits did not, so a crossed-out result could sit above\n      // something the shopper can actually buy. Sort is stable, so match quality is kept\n      // inside each group \u2014 and it runs BEFORE the slice, so a buyable hit ranked ninth\n      // takes the place of a sold-out one rather than being cut.\n      // Chaque hit non eclate part vers la variante de SON format (voir peptikVarianteCible).\n      products.forEach(function (p) {\n        if (p._split) return;\n        var id = peptikVarianteCible(p);\n        if (id) p.url = peptikUrlVariante(p.url, id);\n      });\n      products = products.map(function (p, i) { return { p: p, i: i }; }).sort(function (a, b) {\n        if (a.p.available !== b.p.available) return a.p.available ? -1 : 1;\n        var r = peptikPrio(a.p.tags) - peptikPrio(b.p.tags);\n        if (r !== 0) return r;\n        return a.i - b.i;\n      }).map(function (x) { return x.p; });\n      products = products.slice(0, 8);\n      // Signature so identical results don't trigger a DOM mutation. Keyed on\n      // url so the two variant hits of a bundle don't collapse together.\n      var sig = products.map(function (p) { return p.url; }).join('|');\n      if (!products.length) {\n        if (stNow.container && stNow.container.isConnected) {\n          stNow.suspended = true;\n          stNow.container.remove();\n          stNow.lastSig = '';\n          setTimeout(function () { stNow.suspended = false; }, 0);\n        }\n        return;\n      }\n      if (sig === stNow.lastSig && stNow.container && stNow.container.isConnected && stNow.container.parentNode === h) {\n        return; // Identical to what's already on screen \u2014 no mutation.\n      }\n      // Suspend observer while we mutate so we don't re-enter the loop.\n      stNow.suspended = true;\n      if (!stNow.container) stNow.container = buildContainer();\n      var list = stNow.container.querySelector('[data-peptik-fuzzy-list]');\n      if (list) list.innerHTML = renderListHtml(products);\n      var labelEl = stNow.container.querySelector('.peptik-fuzzy__label');\n      if (labelEl) labelEl.textContent = products.some(function (p) { return p._split; }) ? 'Pen & vial options' : 'Did you mean\u2026';\n      // Ensure the container is present and first child of the host. Use\n      // direct DOM ops so we mutate the SAME element (no remove+reinsert,\n      // which would interrupt any in-flight click on a child <a>).\n      if (stNow.container.parentNode !== h) {\n        if (stNow.container.parentNode) stNow.container.parentNode.removeChild(stNow.container);\n        h.insertBefore(stNow.container, h.firstChild);\n      } else if (h.firstChild !== stNow.container) {\n        h.insertBefore(stNow.container, h.firstChild);\n      }\n      stNow.lastSig = sig;\n      // Re-arm observer on next microtask.\n      setTimeout(function () { stNow.suspended = false; }, 0);\n    });\n  }\n\n  function isSearchInput(el) {\n    if (!el || el.nodeType !== 1) return false;\n    if (el.tagName !== 'INPUT') return false;\n    if (el.type !== 'search' && el.getAttribute('type') !== 'search') return false;\n    if (el.name !== 'q' && el.getAttribute('name') !== 'q') return false;\n    if (!el.closest('predictive-search-component')) return false;\n    return true;\n  }\n\n  var debounceTimer;\n  document.addEventListener('input', function (e) {\n    if (!isSearchInput(e.target)) return;\n    clearTimeout(debounceTimer);\n    var input = e.target;\n    debounceTimer = setTimeout(function () { patch(input); }, 200);\n  }, true);\n\n  // Re-patch when Shopify re-renders the dropdown subtree (morphs on each\n  // keystroke). The observer ignores its own self-triggered mutations via\n  // the `suspended` flag on the per-host state.\n  function observeDropdowns() {\n    document.querySelectorAll('predictive-search-component').forEach(function (component) {\n      if (component.__peptikObserved) return;\n      component.__peptikObserved = true;\n      var input = component.querySelector('input[type=\"search\"][name=\"q\"]');\n      if (!input) return;\n      var mo = new MutationObserver(function (mutations) {\n        // Ignore mutations that originated INSIDE our own .peptik-fuzzy\n        // container \u2014 those are us updating the list, not Shopify re-rendering.\n        var ours = mutations.every(function (m) {\n          var t = m.target;\n          return t && (t.closest && t.closest('[data-peptik-fuzzy]'));\n        });\n        if (ours) return;\n        // Shopify's response can land in the same observer batch as our own\n        // insertion. In that case the native morph removes the fuzzy panel\n        // while the host is still marked suspended. Reconcile once the current\n        // mutation batch is over instead of dropping that native update.\n        var currentInput = component.querySelector('input[type=\"search\"][name=\"q\"]');\n        if (!currentInput || !currentInput.value || !currentInput.value.trim()) return;\n        var host = getDropdownHost(currentInput);\n        if (host && getHostState(host).suspended) {\n          clearTimeout(debounceTimer);\n          debounceTimer = setTimeout(function () {\n            var latestInput = component.querySelector('input[type=\"search\"][name=\"q\"]');\n            if (latestInput && latestInput.value && latestInput.value.trim()) patch(latestInput);\n          }, 0);\n          return;\n        }\n        clearTimeout(debounceTimer);\n        debounceTimer = setTimeout(function () {\n          var latestInput = component.querySelector('input[type=\"search\"][name=\"q\"]');\n          if (latestInput) patch(latestInput);\n        }, 80);\n      });\n      mo.observe(component, { childList: true, subtree: true });\n    });\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', observeDropdowns, { once: true });\n  } else {\n    observeDropdowns();\n  }\n  // Re-scan in case the modal mounts later (lazy section render).\n  setTimeout(observeDropdowns, 500);\n  setTimeout(observeDropdowns, 2000);\n})();\n"],
  "mappings": "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",
  "names": []
}
