{
  "version": 3,
  "sources": ["/cdn/shop/t/24/assets/wmn-search-discover.js?wmn=20261026cover1"],
  "sourcesContent": ["/**\n * Rough Trade\u2013style discover panel on search focus.\n * Empty query: personalized Best Sellers. Typing: live fuzzy-ranked catalog search.\n * Graph-race remount for typed intent (v2026-08-04b).\n * Nuclear clear remount + explore-with-nodes (v20260807e) \u2014 CDN bust must change body.\n */\n(function () {\n  var root = null;\n  var grid = null;\n  var emptyEl = null;\n  var titleEl = null;\n  var whyEl = null;\n  var panelEl = null;\n  var data = null;\n  var open = false;\n  var bound = false;\n  var openedAt = 0;\n  var suppressNextOutsideClose = false;\n  var CLOSE_IGNORE_MS = 400;\n  var DEBOUNCE_MS = 40;\n  /** Typed settle debounce \u2014 short so lean/committed paint-on-settle feels instant. */\n  /** Debounce typed preference signal \u2014 plan: 300ms so fleeting keys don't dominate. */\n  var SEARCH_SIGNAL_MS = 300;\n  var GRID_LIMIT = 32;\n  var CACHE_MAX = 48;\n  var debounceTimer = null;\n  var searchSignalTimer = null;\n  var searchSignalIdleGen = 0;\n  var lastSearchSignal = '';\n  var pendingSearchSignalQuery = '';\n  var lastResultsForSignal = [];\n  var lastFlushedQuery = '';\n  var hoverTimer = null;\n  var hoverHandle = null;\n  var hoverStartedAt = 0;\n  var visibleLogged = null; // Set of handles logged this open\n  var visibilityObserver = null;\n  // Results-session noise gates\n  var resultsShownAt = 0;\n  var resultsEngaged = false;\n  var cardSeenAt = {};\n  var cardEngaged = {};\n  var scrollPastDone = {};\n  var BOUNCE_CLEAR_MS = 800;\n  var SCROLL_PAST_MS = 200;\n  var abortCtrl = null;\n  var requestSeq = 0;\n  var mode = 'bestsellers'; // bestsellers | results\n  var resultCache = {}; // normalized query -> mapped product array\n  var cacheOrder = [];\n  var lastPaintKey = '';\n  /** Clears suppressEmpty blank if similar/Shopify never settles. */\n  var suppressEmptyTimer = null;\n  var suppressEmptySeq = 0;\n  var rankedCache = null; // memoized For-you list (rankByAffinity / field rank)\n  var rankedCacheAt = 0;\n  /** True when rankedCache was primed on settle \u2014 clear path paints without re-rank. */\n  var settleRankPrimed = false;\n  var lastBestsellersPaint = null; // last painted bestsellers for instant local search\n  /* Search chrome only \u2014 never the whole .wmn-header-shell / .sticky_nav\n     (those stole clicks from .wmn-header__nav-link). */\n  var SEARCH_SAFE =\n    '.wmn-header__search, .header_search_form, [data-dropdown=\"search\"], .icon-search, .wmn-search-clear, a[data-dropdown-rel=\"search\"]';\n\n  var DISPLAY_LIMIT = 32;\n  var RANK_CACHE_MS = 60000;\n  // First desktop row is 8 cols; eager-flooding all 32 saturates CDN.\n  // SSR liquid already ships the first row \u2014 keep that budget on remounts.\n  // Mobile/tablet: fewer columns \u2192 fewer eager downloads.\n  function eagerCoverBudget() {\n    var w = window.innerWidth || 1280;\n    if (w <= 640) return 6;\n    if (w <= 1024) return 8;\n    return 12;\n  }\n  var EAGER_COVER_N = eagerCoverBudget();\n  /** Panel-rooted IO \u2014 native loading=lazy still floods all rows (Chrome preload margin). */\n  var coverSrcObserver = null;\n  /** Coalesce pointerdown+focusin show() so layout work can't stack before first paint. */\n  var warmScheduled = false;\n  var pendingShowInput = null;\n  var lastPointerShowAt = 0;\n  /** Bumped to cancel deferred seed-expand timeouts (must not overwrite ranked For you). */\n  var seedExpandGen = 0;\n\n  /** First-row cover imgs currently in the grid (SSR or painted). */\n  function firstRowCoverImgs() {\n    if (!grid) return [];\n    EAGER_COVER_N = eagerCoverBudget();\n    var imgs = grid.querySelectorAll('.wmn-search-discover__cover img[src]');\n    var out = [];\n    var n = Math.min(imgs.length, EAGER_COVER_N);\n    var i;\n    for (i = 0; i < n; i++) out.push(imgs[i]);\n    return out;\n  }\n\n  function firstRowCoversDecoded() {\n    var imgs = firstRowCoverImgs();\n    if (!imgs.length) return false;\n    var i;\n    for (i = 0; i < imgs.length; i++) {\n      if (!(imgs[i].complete && imgs[i].naturalWidth > 0)) return false;\n    }\n    return true;\n  }\n\n  /** Boost SSR/first-row bandwidth claim via fetchpriority only. */\n  function prioritizeFirstRowCovers() {\n    var imgs = firstRowCoverImgs();\n    var i;\n    for (i = 0; i < imgs.length; i++) {\n      try {\n        imgs[i].setAttribute('fetchpriority', 'high');\n        imgs[i].setAttribute('loading', 'eager');\n        imgs[i].setAttribute('decoding', 'async');\n      } catch (ePri) {\n        /* ignore */\n      }\n    }\n  }\n\n  /**\n   * Run cb once first-row covers are decoded (or after maxWaitMs).\n   * Used to start deferred cover src promotion \u2014 not to gate personalization.\n   */\n  function whenFirstRowDecoded(cb, maxWaitMs) {\n    if (typeof cb !== 'function') return;\n    if (firstRowCoversDecoded()) {\n      cb();\n      return;\n    }\n    var imgs = firstRowCoverImgs();\n    var pending = 0;\n    var done = false;\n    var finish = function () {\n      if (done) return;\n      done = true;\n      cb();\n    };\n    var i;\n    for (i = 0; i < imgs.length; i++) {\n      if (imgs[i].complete && imgs[i].naturalWidth > 0) continue;\n      pending++;\n      (function (im) {\n        var once = function () {\n          im.removeEventListener('load', once);\n          im.removeEventListener('error', once);\n          pending--;\n          if (pending <= 0) finish();\n        };\n        im.addEventListener('load', once);\n        im.addEventListener('error', once);\n      })(imgs[i]);\n    }\n    if (pending <= 0) {\n      finish();\n      return;\n    }\n    setTimeout(finish, typeof maxWaitMs === 'number' ? maxWaitMs : 8000);\n  }\n\n\n  function qs(sel, ctx) {\n    return (ctx || document).querySelector(sel);\n  }\n\n  function qsa(sel, ctx) {\n    return Array.prototype.slice.call((ctx || document).querySelectorAll(sel));\n  }\n\n  function eventEl(t) {\n    if (!t) return null;\n    if (t.nodeType === 3) return t.parentElement;\n    return t.nodeType === 1 ? t : null;\n  }\n\n  function withinIgnoreWindow() {\n    return Date.now() - openedAt < CLOSE_IGNORE_MS;\n  }\n\n  function shopRoot() {\n    return window.Shopify && window.Shopify.routes && window.Shopify.routes.root\n      ? window.Shopify.routes.root\n      : '/';\n  }\n\n  function loadData() {\n    if (data) return data;\n    var node = document.getElementById('wmn-best-sellers-data');\n    if (!node) {\n      data = [];\n      return data;\n    }\n    try {\n      data = JSON.parse(node.textContent || '[]') || [];\n    } catch (e) {\n      data = [];\n    }\n    return data;\n  }\n\n  function setBestSellersSeed(list) {\n    if (!list || !list.length) return false;\n    data = list;\n    try {\n      var node = document.getElementById('wmn-best-sellers-data');\n      if (node) node.textContent = JSON.stringify(list);\n    } catch (e) {\n      /* ignore */\n    }\n    invalidateRankedCache();\n    return true;\n  }\n\n  /**\n   * Force storewide all-time best-selling order (Shopify order-count rank).\n   * Uses /collections/all?sort_by=best-selling \u2014 not affinity / manual order.\n   */\n  function fetchBestSellersBySales() {\n    var discoverRoot = document.getElementById('wmn-search-discover');\n    var url = '';\n    try {\n      url =\n        (discoverRoot &&\n          discoverRoot.getAttribute('data-wmn-bs-sort-url')) ||\n        '';\n    } catch (e0) {\n      url = '';\n    }\n    if (!url) {\n      url =\n        shopRoot() +\n        'collections/all?view=wmn-bs-json&sort_by=best-selling';\n    }\n    return fetch(url, {\n      credentials: 'same-origin',\n      headers: { Accept: 'application/json, text/plain, */*' }\n    })\n      .then(function (res) {\n        if (!res || !res.ok) throw new Error('bs-sort-fetch');\n        return res.text();\n      })\n      .then(function (text) {\n        var parsed = null;\n        try {\n          parsed = JSON.parse(String(text || '').replace(/^\\uFEFF/, ''));\n        } catch (eParse) {\n          parsed = null;\n        }\n        if (!Array.isArray(parsed) || parsed.length < 3) return null;\n        return parsed;\n      })\n      .catch(function () {\n        return null;\n      });\n  }\n\n  function applyBestSellersSalesOrder(list) {\n    if (!setBestSellersSeed(list)) return;\n    // Refresh open cold Best Sellers grid (not personalized For you).\n    if (\n      open &&\n      mode === 'bestsellers' &&\n      !hasEntityPrefs() &&\n      !fieldOwnsForYou() &&\n      !fieldHasEnergyNodes()\n    ) {\n      try {\n        paintItems(list, 'bestsellers', { forceWipe: false });\n      } catch (ePaint) {\n        /* ignore */\n      }\n    }\n    reorderHomepageBestSellers(list);\n  }\n\n  /**\n   * Homepage \"Best Sellers\" featured grid \u2014 reorder DOM to storewide sales rank.\n   */\n  function reorderHomepageBestSellers(list) {\n    if (!list || !list.length) return;\n    var roots = document.querySelectorAll('[data-wmn-bs-featured]');\n    if (!roots || !roots.length) return;\n    var order = {};\n    var i;\n    for (i = 0; i < list.length; i++) {\n      if (list[i] && list[i].handle) order[list[i].handle] = i;\n    }\n    var ri;\n    for (ri = 0; ri < roots.length; ri++) {\n      var rootEl = roots[ri];\n      var matrix =\n        rootEl.querySelector('.product-list') ||\n        rootEl.querySelector('.collection-matrix');\n      if (!matrix) continue;\n      var cells = Array.prototype.slice\n        .call(matrix.children || [])\n        .filter(function (el) {\n          return (\n            el &&\n            el.nodeType === 1 &&\n            el.classList &&\n            el.classList.contains('thumbnail')\n          );\n        });\n      if (!cells.length) continue;\n      cells.sort(function (a, b) {\n        var ha = handleFromHref(a);\n        var hb = handleFromHref(b);\n        var ia = ha != null && order[ha] != null ? order[ha] : 9999;\n        var ib = hb != null && order[hb] != null ? order[hb] : 9999;\n        return ia - ib;\n      });\n      for (i = 0; i < cells.length; i++) {\n        matrix.appendChild(cells[i]);\n      }\n    }\n  }\n\n  function handleFromHref(el) {\n    if (!el) return null;\n    try {\n      var a = el.querySelector('a[href*=\"/products/\"]');\n      if (!a) return null;\n      var m = String(a.getAttribute('href') || '').match(\n        /\\/products\\/([^/?#]+)/\n      );\n      return m ? decodeURIComponent(m[1]) : null;\n    } catch (e) {\n      return null;\n    }\n  }\n\n  function warmBestSellersSalesOrder() {\n    if (window.__wmnBsSalesWarm) return window.__wmnBsSalesWarm;\n    window.__wmnBsSalesWarm = fetchBestSellersBySales().then(function (list) {\n      if (list) applyBestSellersSalesOrder(list);\n      return list;\n    });\n    return window.__wmnBsSalesWarm;\n  }\n\n  function affinityMap() {\n    if (window.wmnEngagement && typeof window.wmnEngagement.getAffinity === 'function') {\n      try {\n        return window.wmnEngagement.getAffinity();\n      } catch (e) {\n        return null;\n      }\n    }\n    return null;\n  }\n\n  function invalidateRankedCache() {\n    rankedCache = null;\n    rankedCacheAt = 0;\n    settleRankPrimed = false;\n  }\n\n  function rankedBestSellers() {\n    var now = Date.now();\n    if (rankedCache && now - rankedCacheAt < RANK_CACHE_MS) {\n      return rankedCache;\n    }\n    var t0 = performance.now();\n    var items = loadData();\n    var loadMs = performance.now() - t0;\n    // Cold Best Sellers must stay all-time sales order \u2014 never affinity shuffle.\n    // Affinity only applies once personalization owns the panel (For you).\n    if (\n      !hasEntityPrefs() &&\n      !fieldOwnsForYou() &&\n      !fieldHasEnergyNodes() &&\n      !hasSessionFocusPrimary()\n    ) {\n      rankedCache = items;\n      rankedCacheAt = now;\n      return rankedCache;\n    }\n    if (\n      window.wmnEngagement &&\n      typeof window.wmnEngagement.rankByAffinity === 'function'\n    ) {\n      try {\n        var tRank = performance.now();\n        rankedCache = window.wmnEngagement.rankByAffinity(items);\n        var rankMs = performance.now() - tRank;\n        rankedCacheAt = now;\n        return rankedCache;\n      } catch (err) {\n        return items;\n      }\n    }\n    return items;\n  }\n\n  /**\n   * Rank once after settle and keep the list for clear / remount paints.\n   * Clear path should call paintCachedForYou() \u2014 not invalidate + re-rank.\n   * Do NOT lock settleRankPrimed when lean/committed but the field has no\n   * energy nodes yet (graph not ready \u2192 empty inject) \u2014 otherwise the blues\n   * seed order sticks and graph-load upgrade is skipped.\n   */\n  function primeSettleRankedCache() {\n    rankedCache = null;\n    rankedCacheAt = 0;\n    var list = rankedBestSellers();\n    var nodesReady = fieldHasEnergyNodes();\n    if (fieldOwnsForYou() && !nodesReady) {\n      settleRankPrimed = false;\n      // Keep the list for paint, but allow graph-load to re-rank.\n      rankedCache = list || rankedCache;\n      rankedCacheAt = Date.now();\n      return list || [];\n    }\n    settleRankPrimed = !!(list && list.length);\n    return list || [];\n  }\n\n  function fieldHasEnergyNodes() {\n    try {\n      if (\n        !window.wmnIntentField ||\n        typeof window.wmnIntentField.getField !== 'function'\n      ) {\n        return false;\n      }\n      var f = window.wmnIntentField.getField();\n      return !!(f && f.nodes && Object.keys(f.nodes).length > 0);\n    } catch (e) {\n      return false;\n    }\n  }\n\n  /**\n   * Graph arrived after typed settles \u2014 reinject active stem and remount For you.\n   */\n  function refreshFieldAfterGraphLoad() {\n    try {\n      if (\n        !window.wmnIntentField ||\n        typeof window.wmnIntentField.refreshSearchInject !== 'function'\n      ) {\n        return false;\n      }\n      var f = window.wmnIntentField.getField();\n      var stem = f && f.query && f.query.stem;\n      if (!stem) return false;\n      var hadNodes = fieldHasEnergyNodes();\n      window.wmnIntentField.refreshSearchInject({\n        query: stem,\n        results: lastResultsForSignal || []\n      });\n      var nowHas = fieldHasEnergyNodes();\n      if (!nowHas) return false;\n      settleRankPrimed = false;\n      rankedCache = null;\n      rankedCacheAt = 0;\n      if (open && mode !== 'results') {\n        paintCachedForYou();\n      } else {\n        try {\n          window.__wmnTypedPrefsDirty = true;\n        } catch (eDirty) {\n          /* ignore */\n        }\n        primeSettleRankedCache();\n      }\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function paintCachedForYou(opts) {\n    opts = opts || {};\n    var list =\n      settleRankPrimed && rankedCache && rankedCache.length\n        ? rankedCache\n        : primeSettleRankedCache();\n    if (!opts.keepPaintKey) lastPaintKey = '';\n    paintItems(list, 'bestsellers', opts);\n    return list;\n  }\n\n  /** Instant pool for typed search \u2014 never runs rankByAffinity on the keystroke path. */\n  function localPool() {\n    return mergePools(lastBestsellersPaint, loadData());\n  }\n\n  function escapeHtml(str) {\n    return String(str || '')\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;');\n  }\n\n  function handleFromUrl(url) {\n    var m = String(url || '').match(/\\/products\\/([^/?#]+)/);\n    return m ? decodeURIComponent(m[1]) : '';\n  }\n\n  function mapSearchResult(item) {\n    if (!item || item.object_type && item.object_type !== 'product') return null;\n    var handle = item.handle || handleFromUrl(item.url);\n    if (!handle && !item.url) return null;\n    var title = item.title || '';\n    var titleL = title.toLowerCase();\n    if (titleL.indexOf('gift voucher') !== -1 || titleL.indexOf('gift card') !== -1) {\n      return null;\n    }\n    var img = item.thumbnail || item.image || null;\n    if (img === 'NULL' || img === '\"\"') img = null;\n    // search.json is slim (no tags/genres) \u2014 resolve genre slugs from catalog graph.\n    var genres = [];\n    if (Array.isArray(item.genres) && item.genres.length) {\n      genres = item.genres.slice();\n    } else if (\n      handle &&\n      window.wmnCatalogGraph &&\n      typeof window.wmnCatalogGraph.resolveProduct === 'function' &&\n      typeof window.wmnCatalogGraph.getData === 'function' &&\n      window.wmnCatalogGraph.getData()\n    ) {\n      try {\n        var resolved = window.wmnCatalogGraph.resolveProduct(handle);\n        if (resolved && resolved.genres && resolved.genres.length) {\n          genres = resolved.genres.slice();\n        }\n      } catch (e) {\n        /* ignore */\n      }\n    }\n    return {\n      handle: handle,\n      title: title,\n      artist: item.artist || item.type || '',\n      imprint: item.imprint || item.vendor || '',\n      url: item.url,\n      image: img,\n      genres: genres,\n      tags: item.tags\n    };\n  }\n\n  function exactGenreSlug(query) {\n    if (\n      !window.wmnCatalogGraph ||\n      typeof window.wmnCatalogGraph.exactGenreFromQuery !== 'function'\n    ) {\n      return null;\n    }\n    try {\n      return window.wmnCatalogGraph.exactGenreFromQuery(query) || null;\n    } catch (e) {\n      return null;\n    }\n  }\n\n  function productMatchesExactGenre(handle, genreSlug, title) {\n    if (!handle || !genreSlug) return false;\n    if (\n      window.wmnEngagement &&\n      typeof window.wmnEngagement.becauseProductMatchesGenre === 'function'\n    ) {\n      try {\n        if (window.wmnEngagement.becauseProductMatchesGenre(handle, genreSlug)) {\n          return true;\n        }\n      } catch (e0) {\n        /* fall through */\n      }\n    }\n    // Fallback before engagement/graph warm: title/handle word only.\n    var text = (\n      String(title || '') +\n      ' ' +\n      String(handle || '').replace(/-/g, ' ')\n    ).toLowerCase();\n    var gWords = String(genreSlug).replace(/-/g, ' ').trim();\n    if (!gWords) return false;\n    if (gWords.indexOf(' ') === -1) {\n      return new RegExp(\n        '\\\\b' + gWords.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') + '\\\\b',\n        'i'\n      ).test(text);\n    }\n    return text.indexOf(gWords) !== -1;\n  }\n\n  function filterExactGenreItems(query, items) {\n    var slug = exactGenreSlug(query);\n    if (!slug || !items || !items.length) return items;\n    var out = [];\n    var i;\n    for (i = 0; i < items.length; i++) {\n      var it = items[i];\n      if (!it || !it.handle) continue;\n      if (productMatchesExactGenre(it.handle, slug, it.title)) out.push(it);\n    }\n    return out;\n  }\n\n  function genreCollectionUrl(genreSlug) {\n    if (!genreSlug) return '';\n    var root = '/';\n    try {\n      if (typeof shopRoot === 'function') {\n        var sr = shopRoot();\n        if (sr) root = sr.charAt(sr.length - 1) === '/' ? sr : sr + '/';\n      }\n    } catch (e) {\n      /* ignore */\n    }\n    return root + 'collections/all/' + encodeURIComponent(genreSlug);\n  }\n\n  /**\n   * Graph-powered ranking for natural queries (genre/country/artist/\"like X\").\n   * Returns { items, scores, intent } or null when graph cannot help.\n   */\n  function graphRankQuery(query, opts) {\n    opts = opts || {};\n    if (\n      !window.wmnCatalogGraph ||\n      typeof window.wmnCatalogGraph.graphSearch !== 'function' ||\n      typeof window.wmnCatalogGraph.getData !== 'function' ||\n      !window.wmnCatalogGraph.getData()\n    ) {\n      return null;\n    }\n    var result;\n    try {\n      result = window.wmnCatalogGraph.graphSearch(query, {\n        limit: Math.max(GRID_LIMIT * 2, 36),\n        seedHandles: opts.seedHandles || [],\n        likeLane: opts.likeLane || null\n      });\n    } catch (e) {\n      return null;\n    }\n    if (!result || !result.handles || !result.handles.length) {\n      // Still return intent so callers can seed \"like X\" from Shopify hits.\n      if (result && result.intent && (result.intent.entities.length || result.intent.like)) {\n        return {\n          items: [],\n          scores: {},\n          intent: result.intent,\n          empty: true\n        };\n      }\n      return null;\n    }\n    var items = [];\n    var i;\n    for (i = 0; i < result.handles.length; i++) {\n      var card = null;\n      if (typeof window.wmnCatalogGraph.productCard === 'function') {\n        try {\n          card = window.wmnCatalogGraph.productCard(result.handles[i]);\n        } catch (eCard) {\n          card = null;\n        }\n      }\n      if (card) items.push(card);\n    }\n    return {\n      items: items,\n      scores: result.scores || {},\n      intent: result.intent,\n      empty: false\n    };\n  }\n\n  function likePhraseFromQuery(query) {\n    if (\n      window.wmnCatalogGraph &&\n      typeof window.wmnCatalogGraph.parseSearchIntent === 'function' &&\n      window.wmnCatalogGraph.getData &&\n      window.wmnCatalogGraph.getData()\n    ) {\n      try {\n        var intent = window.wmnCatalogGraph.parseSearchIntent(query);\n        if (intent && intent.like && intent.like.phrase) return intent.like.phrase;\n      } catch (e) {\n        /* fall through */\n      }\n    }\n    var m = String(query || '').match(\n      /\\b(?:sounds?\\s+like|similar\\s+to|like)\\s+(.+)$/i\n    );\n    return m && m[1] ? String(m[1]).replace(/^\\s+|\\s+$/g, '') : '';\n  }\n\n  /** Collect Shopify/local hits that match a \"like Artist\" phrase as graph seeds. */\n  function seedHandlesFromItems(phrase, items) {\n    if (!phrase || !items || !items.length) return [];\n    var norm =\n      window.wmnSearchFuzzy && typeof window.wmnSearchFuzzy.normalize === 'function'\n        ? window.wmnSearchFuzzy.normalize(phrase)\n        : String(phrase).toLowerCase();\n    if (!norm) return [];\n    var out = [];\n    var i;\n    for (i = 0; i < items.length && out.length < 6; i++) {\n      var it = items[i];\n      if (!it || !it.handle) continue;\n      var hay = (\n        (it.title || '') +\n        ' ' +\n        (it.artist || '') +\n        ' ' +\n        (it.handle || '').replace(/-/g, ' ')\n      ).toLowerCase();\n      if (hay.indexOf(norm) !== -1) out.push(it.handle);\n    }\n    return out;\n  }\n\n  function queryClickBoostFn() {\n    return window.wmnEngagement &&\n      typeof window.wmnEngagement.queryClickBoost === 'function'\n      ? window.wmnEngagement.queryClickBoost\n      : null;\n  }\n\n  /**\n   * Pin handles previously clicked for this query to the front.\n   * Soft score deltas alone lose to fuzzy position prior (Desert\u2192Timchar).\n   */\n  function pinQueryClickHandles(query, ranked) {\n    if (\n      !window.wmnEngagement ||\n      typeof window.wmnEngagement.queryClickTopHandles !== 'function'\n    ) {\n      return ranked || [];\n    }\n    var tops = [];\n    try {\n      tops = window.wmnEngagement.queryClickTopHandles(query, 6) || [];\n    } catch (eTops) {\n      tops = [];\n    }\n    if (!tops.length) return ranked || [];\n    var byHandle = {};\n    var i;\n    for (i = 0; i < (ranked || []).length; i++) {\n      if (ranked[i] && ranked[i].handle) byHandle[ranked[i].handle] = ranked[i];\n    }\n    var pinned = [];\n    var seen = {};\n    for (i = 0; i < tops.length; i++) {\n      var h = tops[i];\n      if (!h || seen[h]) continue;\n      var card = byHandle[h];\n      if (!card && typeof cardFromHandle === 'function') {\n        try {\n          card = cardFromHandle(h);\n        } catch (eCard) {\n          card = null;\n        }\n      }\n      if (!card) continue;\n      seen[h] = true;\n      pinned.push(card);\n    }\n    if (!pinned.length) return ranked || [];\n    var rest = [];\n    for (i = 0; i < (ranked || []).length; i++) {\n      var it = ranked[i];\n      if (!it || !it.handle || seen[it.handle]) continue;\n      seen[it.handle] = true;\n      rest.push(it);\n    }\n    var out = pinned.concat(rest);\n    if (out.length > GRID_LIMIT) out = out.slice(0, GRID_LIMIT);\n    return out;\n  }\n\n  /**\n   * Re-rank candidates with learned query\u2192handle click weights.\n   * Caps leapfrog so exact artist pins stay above related.\n   */\n  function applyQueryClickRerank(query, ranked, opts) {\n    opts = opts || {};\n    var boostFn = queryClickBoostFn();\n    if (!boostFn || !ranked || ranked.length < 2) {\n      return pinQueryClickHandles(query, ranked || []);\n    }\n    var pinExact = !!opts.pinExact;\n    var exactSlug = opts.exactArtistSlug || '';\n    var exact = [];\n    var rest = [];\n    var i;\n    if (pinExact && exactSlug && window.wmnCatalogGraph && window.wmnCatalogGraph.getData) {\n      var data = window.wmnCatalogGraph.getData();\n      for (i = 0; i < ranked.length; i++) {\n        var it = ranked[i];\n        var a =\n          it &&\n          it.handle &&\n          data &&\n          data.products &&\n          data.products[it.handle] &&\n          data.products[it.handle].a;\n        if (a === exactSlug) exact.push(it);\n        else rest.push(it);\n      }\n    } else {\n      rest = ranked.slice();\n    }\n    if (rest.length < 2) {\n      return pinQueryClickHandles(query, ranked);\n    }\n    var n = rest.length;\n    var decorated = rest.map(function (item, index) {\n      var h = (item && item.handle) || '';\n      return {\n        item: item,\n        score: (n - index) * 12 + (boostFn(query, h) || 0)\n      };\n    });\n    decorated.sort(function (a, b) {\n      return b.score - a.score;\n    });\n    var out = exact.concat(\n      decorated.map(function (row) {\n        return row.item;\n      })\n    );\n    if (out.length > GRID_LIMIT) out = out.slice(0, GRID_LIMIT);\n    // Pins win over soft score \u2014 one Timchar click must beat alphabetical desert pack.\n    return pinQueryClickHandles(query, out);\n  }\n\n  function fuzzyRank(query, items, opts) {\n    opts = opts || {};\n    var ranked;\n    if (\n      window.wmnSearchFuzzy &&\n      typeof window.wmnSearchFuzzy.rank === 'function'\n    ) {\n      ranked = window.wmnSearchFuzzy.rank(query, items, {\n        limit: GRID_LIMIT,\n        requireMatch: true,\n        affinity: opts.skipAffinity ? null : affinityMap()\n      });\n    } else {\n      var q = String(query || '').toLowerCase();\n      ranked = [];\n      for (var i = 0; i < items.length && ranked.length < GRID_LIMIT; i++) {\n        var it = items[i];\n        if (!it) continue;\n        var hay = (\n          (it.title || '') +\n          ' ' +\n          (it.artist || '') +\n          ' ' +\n          (it.handle || '')\n        ).toLowerCase();\n        if (hay.indexOf(q) !== -1) ranked.push(it);\n      }\n    }\n\n    ranked = filterExactGenreItems(query, ranked);\n\n    // Graph intent: merge edge-expanded candidates and re-rank.\n    var seedHandles = opts.seedHandles || [];\n    if (!seedHandles.length) {\n      var likePhrase = likePhraseFromQuery(query);\n      if (likePhrase) seedHandles = seedHandlesFromItems(likePhrase, items || []);\n    }\n    var graph = graphRankQuery(query, {\n      seedHandles: seedHandles,\n      likeLane: opts.likeLane || null\n    });\n    var artistOnlyIntent = false;\n    var exactArtistSlug = '';\n    if (graph && graph.intent && graph.intent.entities && graph.intent.entities.length) {\n      artistOnlyIntent =\n        !graph.intent.like &&\n        graph.intent.entities.every(function (e) {\n          return e && String(e.id || '').indexOf('artist:') === 0;\n        });\n      if (artistOnlyIntent && graph.intent.entities[0]) {\n        exactArtistSlug = String(graph.intent.entities[0].id).split(':').slice(1).join(':');\n      }\n    }\n    var clickBoost = queryClickBoostFn();\n    if (graph && graph.items && graph.items.length) {\n      var gScores = graph.scores || {};\n      if (artistOnlyIntent && ranked && ranked.length) {\n        // Exact fuzzy hits (the named artist) stay pinned on top. Graph\n        // related artists append after \u2014 never leapfrog Coltrane via\n        // engagement / tie-break (Guillaume Indo-Jazz bug).\n        var pinned = ranked.slice();\n        var pinnedH = {};\n        var pi;\n        for (pi = 0; pi < pinned.length; pi++) {\n          if (pinned[pi] && pinned[pi].handle) pinnedH[pinned[pi].handle] = true;\n        }\n        // Thin-shelf densify (Cash / Gorbea) scores ~100\u2013110 \u2014 must not use the\n        // strict 100 bar in a way that drops the whole densified salsa/country pack.\n        var densifying = !!(\n          graph.intent &&\n          ((graph.intent.densifyGenres && graph.intent.densifyGenres.length) ||\n            (graph.intent.densifyArtists && graph.intent.densifyArtists.length) ||\n            (graph.intent.densifyEmb && graph.intent.densifyEmb.length))\n        );\n        var relatedMin = densifying ? 55 : 100;\n        var related = [];\n        for (pi = 0; pi < graph.items.length; pi++) {\n          var git = graph.items[pi];\n          if (!git || !git.handle || pinnedH[git.handle]) continue;\n          // Skip weak related when we already have the exact artist hit.\n          if (exactArtistSlug && (gScores[git.handle] || 0) < relatedMin) continue;\n          related.push(git);\n        }\n        related.sort(function (a, b) {\n          var ca = clickBoost ? clickBoost(query, a.handle || '') : 0;\n          var cb = clickBoost ? clickBoost(query, b.handle || '') : 0;\n          return (\n            (gScores[b.handle] || 0) +\n            cb -\n            ((gScores[a.handle] || 0) + ca) ||\n            ((a.handle || '') < (b.handle || '') ? -1 : 1)\n          );\n        });\n        ranked = pinned.concat(related);\n      } else {\n        ranked = mergePools(graph.items, ranked || []);\n        var decoratedG = ranked.map(function (item, index) {\n          var h = item && item.handle;\n          var gScore = h && gScores[h] != null ? gScores[h] : 0;\n          var fuzzyPrior = Math.max(0, (ranked.length - index) * 10);\n          var learned = clickBoost && h ? clickBoost(query, h) : 0;\n          return { item: item, score: gScore * 1.4 + fuzzyPrior + learned };\n        });\n        decoratedG.sort(function (a, b) {\n          return b.score - a.score;\n        });\n        ranked = decoratedG.map(function (row) {\n          return row.item;\n        });\n      }\n      if (ranked.length > GRID_LIMIT) ranked = ranked.slice(0, GRID_LIMIT);\n    }\n\n    if (opts.skipAffinity) {\n      return applyQueryClickRerank(query, ranked, {\n        pinExact: artistOnlyIntent,\n        exactArtistSlug: exactArtistSlug\n      });\n    }\n\n    // Blend fuzzy order with entity scoreHandle (final network results only).\n    // Never let engagement pull related artists above an exact artist match.\n    var scoreFn =\n      window.wmnEngagement && typeof window.wmnEngagement.scoreHandle === 'function'\n        ? window.wmnEngagement.scoreHandle\n        : null;\n    if (!scoreFn || !ranked.length) {\n      return applyQueryClickRerank(query, ranked, {\n        pinExact: artistOnlyIntent,\n        exactArtistSlug: exactArtistSlug\n      });\n    }\n    if (artistOnlyIntent && exactArtistSlug) {\n      var exactTier = [];\n      var relatedTier = [];\n      var ri;\n      for (ri = 0; ri < ranked.length; ri++) {\n        var rit = ranked[ri];\n        if (rit && rit.handle && graph && graph.scores && (graph.scores[rit.handle] || 0) >= 150) {\n          exactTier.push(rit);\n        } else if (\n          rit &&\n          window.wmnCatalogGraph &&\n          window.wmnCatalogGraph.getData &&\n          window.wmnCatalogGraph.getData() &&\n          window.wmnCatalogGraph.getData().products[rit.handle] &&\n          window.wmnCatalogGraph.getData().products[rit.handle].a === exactArtistSlug\n        ) {\n          exactTier.push(rit);\n        } else {\n          relatedTier.push(rit);\n        }\n      }\n      var nRel = relatedTier.length;\n      relatedTier = relatedTier\n        .map(function (item, index) {\n          return {\n            item: item,\n            score:\n              (nRel - index) * 12 +\n              (scoreFn(item.handle || '') || 0) +\n              ((graph && graph.scores && graph.scores[item.handle]) || 0) * 0.15 +\n              (clickBoost ? clickBoost(query, item.handle || '') : 0)\n          };\n        })\n        .sort(function (a, b) {\n          return b.score - a.score;\n        })\n        .map(function (row) {\n          return row.item;\n        });\n      return pinQueryClickHandles(\n        query,\n        exactTier.concat(relatedTier).slice(0, GRID_LIMIT)\n      );\n    }\n    var n = ranked.length;\n    var decorated = ranked.map(function (item, index) {\n      var gBoost = 0;\n      if (graph && graph.scores && item && item.handle) {\n        gBoost = (graph.scores[item.handle] || 0) * 0.15;\n      }\n      return {\n        item: item,\n        score:\n          (n - index) * 12 +\n          (scoreFn(item.handle || '') || 0) +\n          gBoost +\n          (clickBoost ? clickBoost(query, item.handle || '') : 0)\n      };\n    });\n    decorated.sort(function (a, b) {\n      return b.score - a.score;\n    });\n    return pinQueryClickHandles(\n      query,\n      decorated.map(function (row) {\n        return row.item;\n      })\n    );\n  }\n\n  function markResultsEngaged(handle) {\n    resultsEngaged = true;\n    if (handle) cardEngaged[handle] = true;\n  }\n\n  function noteResultsPainted() {\n    if (!resultsShownAt) resultsShownAt = Date.now();\n  }\n\n  function resetResultsSession() {\n    resultsShownAt = 0;\n    resultsEngaged = false;\n    cardSeenAt = {};\n    cardEngaged = {};\n    scrollPastDone = {};\n  }\n\n  function isBounceClear() {\n    if (!resultsShownAt) return false;\n    return Date.now() - resultsShownAt < BOUNCE_CLEAR_MS && !resultsEngaged;\n  }\n\n  function emitSkip(handle, reason, dwellMs) {\n    if (!handle) return;\n    if (\n      window.wmnIntentField &&\n      typeof window.wmnIntentField.onSkip === 'function'\n    ) {\n      try {\n        window.wmnIntentField.onSkip(handle, {\n          reason: reason || 'skip',\n          dwellMs: dwellMs\n        });\n      } catch (e) {\n        /* ignore */\n      }\n    }\n    if (\n      window.wmnIntentAnalytics &&\n      typeof window.wmnIntentAnalytics.log === 'function'\n    ) {\n      try {\n        window.wmnIntentAnalytics.log({\n          type: 'skip',\n          handle: handle,\n          dwellMs: dwellMs != null ? dwellMs : null,\n          mode: mode,\n          meta: { reason: reason || 'skip' }\n        });\n      } catch (e2) {\n        /* ignore */\n      }\n    }\n  }\n\n  function algoQueryAllowed(query) {\n    try {\n      if (\n        window.wmnQueryGuard &&\n        typeof window.wmnQueryGuard.isBlocked === 'function' &&\n        window.wmnQueryGuard.isBlocked(query)\n      ) {\n        return false;\n      }\n    } catch (eGuard) {\n      /* ignore */\n    }\n    return true;\n  }\n\n  function commitSearchSignal(query) {\n    var norm = normalizeQuery(query);\n    if (!norm || norm.length < 2 || norm === lastSearchSignal) return;\n    // Dirty / abusive stems must not train For You, intent field, or prefs.\n    if (!algoQueryAllowed(norm)) {\n      lastSearchSignal = norm;\n      return;\n    }\n    lastSearchSignal = norm;\n    lastFlushedQuery = norm;\n\n    // Warm collective query\u2192click boosts for this settle (next rank uses them).\n    if (\n      window.wmnEngagement &&\n      typeof window.wmnEngagement.ensureQueryClickCollective === 'function'\n    ) {\n      try {\n        window.wmnEngagement.ensureQueryClickCollective(norm);\n      } catch (eQc) {\n        /* ignore */\n      }\n    }\n\n    // Analytics settle count first (independent of ranking brain)\n    if (\n      window.wmnIntentAnalytics &&\n      typeof window.wmnIntentAnalytics.noteSearchSettle === 'function'\n    ) {\n      try {\n        var shown = [];\n        var results = lastResultsForSignal || [];\n        for (var i = 0; i < results.length && shown.length < 12; i++) {\n          if (results[i] && results[i].handle) shown.push(results[i].handle);\n        }\n        window.wmnIntentAnalytics.noteSearchSettle(norm, {\n          mode: mode,\n          shownHandles: shown\n        });\n      } catch (e2) {\n        /* ignore */\n      }\n    }\n\n    // Field is the ranking brain \u2014 settle into the energy field first.\n    var fieldMode = 'explore';\n    if (\n      window.wmnIntentField &&\n      typeof window.wmnIntentField.onSearchSettle === 'function'\n    ) {\n      try {\n        window.wmnIntentField.onSearchSettle(norm, {\n          results: lastResultsForSignal || []\n        });\n        if (typeof window.wmnIntentField.getMode === 'function') {\n          fieldMode = window.wmnIntentField.getMode() || 'explore';\n        }\n      } catch (e3) {\n        /* ignore */\n      }\n    }\n\n    // One brain: lean/committed \u2014 field owns ranking; do NOT bump entities/focus.\n    // Explore: always soft-feed recordSearch (graph + visible results) even when\n    // onSearchSettle already injected field nodes \u2014 that was skipping multi-signal.\n    if (fieldMode === 'lean' || fieldMode === 'committed') {\n      try {\n        window.__wmnTypedPrefsDirty = true;\n      } catch (eDirty) {\n        /* ignore */\n      }\n      // Rank once here; paint now only when already on For you chrome.\n      // During results mode, prime cache only \u2014 painting bestsellers would\n      // flash \"For you\" over Results (H6) and race searchAndRender.\n      primeSettleRankedCache();\n      // Never paint For you over an in-progress typed query (incl. misses).\n      if (open && mode !== 'results' && !holdSearchResultsPane()) {\n        paintForYouOnSettle(fieldMode);\n        try {\n          window.__wmnTypedPrefsDirty = false;\n        } catch (eClear) {\n          /* ignore */\n        }\n      }\n      return;\n    }\n\n    // Explore (incl. first settle with energy): multi-signal preference bump.\n    if (\n      window.wmnEngagement &&\n      typeof window.wmnEngagement.recordSearch === 'function'\n    ) {\n      try {\n        window.wmnEngagement.recordSearch(norm, {\n          results: lastResultsForSignal || []\n        });\n      } catch (e) {\n        /* ignore */\n      }\n    }\n\n    // If field already has energy from this settle, prime For you for clear.\n    if (fieldHasEnergyNodes()) {\n      try {\n        window.__wmnTypedPrefsDirty = true;\n      } catch (eDirty2) {\n        /* ignore */\n      }\n      primeSettleRankedCache();\n      if (open && mode !== 'results' && !holdSearchResultsPane()) {\n        paintForYouOnSettle(fieldMode);\n        try {\n          window.__wmnTypedPrefsDirty = false;\n        } catch (eClear2) {\n          /* ignore */\n        }\n      }\n    }\n  }\n\n  /**\n   * Lean/committed settle: paint For you from the settle-primed rank cache.\n   * Does not re-rank \u2014 primeSettleRankedCache() already ran in commitSearchSignal.\n   */\n  function paintForYouOnSettle(fieldMode) {\n    if (!open || holdSearchResultsPane()) return;\n    paintCachedForYou();\n    logSettlePaint(fieldMode);\n    resetVisibilityTracking();\n  }\n\n  function logSettlePaint(fieldMode) {\n    if (\n      !window.wmnIntentAnalytics ||\n      typeof window.wmnIntentAnalytics.log !== 'function'\n    ) {\n      return;\n    }\n    try {\n      var qSettles = null;\n      if (\n        lastFlushedQuery &&\n        typeof window.wmnIntentAnalytics.getSettleCount === 'function'\n      ) {\n        qSettles = window.wmnIntentAnalytics.getSettleCount(lastFlushedQuery);\n      }\n      window.wmnIntentAnalytics.log({\n        type: 'settle_paint',\n        q: lastFlushedQuery || null,\n        qSettles: qSettles,\n        mode: fieldMode || mode || 'bestsellers',\n        shownHandles: gridShownHandles(),\n        topEntities: topEntitiesForLog()\n      });\n    } catch (e) {\n      /* ignore */\n    }\n  }\n\n  function gridShownHandles() {\n    var out = [];\n    if (!grid) return out;\n    var cards = grid.querySelectorAll('[data-wmn-handle]');\n    for (var i = 0; i < cards.length && out.length < 12; i++) {\n      var h = cards[i].getAttribute('data-wmn-handle');\n      if (h) out.push(h);\n    }\n    return out;\n  }\n\n  function topEntitiesForLog() {\n    try {\n      if (\n        window.wmnIntentAnalytics &&\n        window.wmnEngagement &&\n        typeof window.wmnEngagement.getEntityPrefs === 'function'\n      ) {\n        // buildCloudProfile / log normalize will also fill tops; pass none.\n      }\n    } catch (e) {\n      /* ignore */\n    }\n    return null;\n  }\n\n  function logClearRemount() {\n    if (\n      !window.wmnIntentAnalytics ||\n      typeof window.wmnIntentAnalytics.log !== 'function'\n    ) {\n      return;\n    }\n    try {\n      var qSettles = null;\n      if (\n        lastFlushedQuery &&\n        typeof window.wmnIntentAnalytics.getSettleCount === 'function'\n      ) {\n        qSettles = window.wmnIntentAnalytics.getSettleCount(lastFlushedQuery);\n      }\n      window.wmnIntentAnalytics.log({\n        type: 'clear_remount',\n        q: lastFlushedQuery || null,\n        qSettles: qSettles,\n        mode: mode || 'bestsellers',\n        shownHandles: gridShownHandles(),\n        topEntities: topEntitiesForLog()\n      });\n    } catch (e) {\n      /* ignore */\n    }\n  }\n\n  function scheduleSearchSignal(query) {\n    pendingSearchSignalQuery = query;\n    if (searchSignalTimer) clearTimeout(searchSignalTimer);\n    // Fixed debounce \u2014 do not idle-flush early (fleeting keys must not dominate).\n    searchSignalTimer = setTimeout(function () {\n      searchSignalTimer = null;\n      commitSearchSignal(query);\n    }, SEARCH_SIGNAL_MS);\n  }\n\n  function scheduleIdleSearchFlush(norm) {\n    var gen = ++searchSignalIdleGen;\n    var run = function () {\n      if (gen !== searchSignalIdleGen) return;\n      if (!pendingSearchSignalQuery) return;\n      if (normalizeQuery(pendingSearchSignalQuery) !== norm) return;\n      // Still pending \u2014 flush early while the main thread is idle.\n      flushSearchSignal(pendingSearchSignalQuery);\n    };\n    if (typeof window.requestIdleCallback === 'function') {\n      window.requestIdleCallback(run, { timeout: SEARCH_SIGNAL_MS });\n    } else if (typeof window.requestAnimationFrame === 'function') {\n      window.requestAnimationFrame(function () {\n        window.requestAnimationFrame(run);\n      });\n    }\n  }\n\n  function flushSearchSignal(query) {\n    searchSignalIdleGen += 1; // cancel pending idle flushes\n    if (searchSignalTimer) {\n      clearTimeout(searchSignalTimer);\n      searchSignalTimer = null;\n    }\n    pendingSearchSignalQuery = '';\n    if (query) commitSearchSignal(query);\n  }\n\n  function consumeTypedPrefsDirty() {\n    var dirty = false;\n    try {\n      dirty = !!window.__wmnTypedPrefsDirty;\n      window.__wmnTypedPrefsDirty = false;\n    } catch (e) {\n      dirty = false;\n    }\n    return dirty;\n  }\n\n  /** Current typed query in the open discover search field (if any). */\n  function activeDiscoverQuery() {\n    try {\n      var active = document.activeElement;\n      if (isHeaderSearchInput(active)) {\n        var aq = inputValue(active);\n        if (aq) return aq;\n      }\n      var inp = document.querySelector(\n        '.wmn-header__search input[name=\"q\"], .header_search_form input[name=\"q\"]'\n      );\n      return inputValue(inp);\n    } catch (e) {\n      return '';\n    }\n  }\n\n  /**\n   * While the user still has a typed query, never replace Results / empty\n   * apology with personalized For you (Guns N' Roses \u2192 Indian Classical bug).\n   */\n  function holdSearchResultsPane() {\n    return !!(open && activeDiscoverQuery());\n  }\n\n  function remountForYouFromTypedPrefs() {\n    // Nuclear: invalidate + forceWipe so SSR/reorder cannot keep seed order.\n    if (!open || holdSearchResultsPane()) return;\n    paintCachedForYouNuclear('typed-prefs');\n    logClearRemount();\n    resetVisibilityTracking();\n  }\n\n  function paintForYouNow(reason) {\n    if (holdSearchResultsPane()) return;\n    paintCachedForYouNuclear(reason || 'for-you');\n  }\n\n  function paintEmptyState() {\n    if (settleRankPrimed && rankedCache && rankedCache.length) {\n      paintCachedForYou();\n      return;\n    }\n    if (hasEntityPrefs() || fieldOwnsForYou() || fieldHasEnergyNodes()) {\n      paintCachedForYouNuclear('empty-open');\n      return;\n    }\n    prioritizeFirstRowCovers();\n    // Prefer sales-sorted seed when warm fetch already finished\n    warmBestSellersSalesOrder().then(function (sorted) {\n      if (\n        !open ||\n        mode !== 'bestsellers' ||\n        hasEntityPrefs() ||\n        fieldOwnsForYou() ||\n        fieldHasEnergyNodes()\n      ) {\n        return;\n      }\n      if (sorted && sorted.length) {\n        paintItems(sorted, 'bestsellers', { skipHydrate: true });\n      }\n    });\n    paintItems(loadData(), 'bestsellers', { skipHydrate: true });\n  }\n\n  /**\n   * Session focus primary (genre/country/region) \u2014 same driver as homepage scorer.\n   */\n  function hasSessionFocusPrimary() {\n    try {\n      if (\n        !window.wmnEngagement ||\n        typeof window.wmnEngagement.getFocus !== 'function'\n      ) {\n        return false;\n      }\n      var f = window.wmnEngagement.getFocus();\n      if (!f) return false;\n      var kind = f.primaryKind || '';\n      if (kind === 'country' && f.primaryCountry) return true;\n      if (kind === 'region' && f.primaryRegion) return true;\n      if (kind === 'genre' && (f.primaryGenre || (f.genres && f.genres[0]))) {\n        return true;\n      }\n      if (!kind) {\n        if (f.primaryCountry || f.primaryRegion) return true;\n        if (f.primaryGenre || (f.genres && f.genres[0])) return true;\n      }\n    } catch (e) {\n      /* ignore */\n    }\n    return false;\n  }\n\n  /**\n   * Phase 6: Discover empty For you uses the homepage catalog scorer.\n   * @returns {object[]|null}\n   */\n  function sharedCatalogForYouPicks() {\n    try {\n      if (\n        !window.wmnEngagement ||\n        typeof window.wmnEngagement.scoreCatalogForYou !== 'function'\n      ) {\n        return null;\n      }\n      var built = window.wmnEngagement.scoreCatalogForYou({\n        limit: 32,\n        explore: false,\n        pinRecent: true\n      });\n      if (built && built.picks && built.picks.length >= 3) {\n        return built.picks;\n      }\n    } catch (e) {\n      /* ignore */\n    }\n    return null;\n  }\n\n  /**\n   * Always wipe/reorder For you when personalized energy exists.\n   * Prefer settle-primed order from the typed query \u2014 do NOT blindly\n   * invalidate+re-rank (dwell on seed bestsellers can pollute the field and\n   * wash out a single cuba settle). Reinforce last stem only when re-ranking.\n   * Phase 6: geo / rail-affinity / empty-open (+ session focus) \u2192 scoreCatalogForYou(32).\n   */\n  function paintCachedForYouNuclear(reason) {\n    seedExpandGen += 1;\n    lastPaintKey = '';\n    var list = null;\n    var path = 'rerank';\n\n    // Shared homepage composition for rail / geo / empty-open / session focus\n    var forceShared =\n      reason === 'rail-affinity' ||\n      reason === 'empty-open' ||\n      (window.wmnEngagement &&\n        typeof window.wmnEngagement.hasGeoForYouPrefs === 'function' &&\n        window.wmnEngagement.hasGeoForYouPrefs()) ||\n      hasSessionFocusPrimary();\n    if (forceShared) {\n      settleRankPrimed = false;\n      rankedCache = null;\n      rankedCacheAt = 0;\n      list = sharedCatalogForYouPicks();\n      if (list) path = 'catalog-shared';\n    }\n\n    if (!list && settleRankPrimed && rankedCache && rankedCache.length) {\n      list = rankedCache;\n      path = 'settleCache';\n    } else if (!list) {\n      try {\n        if (\n          lastFlushedQuery &&\n          window.wmnIntentField &&\n          typeof window.wmnIntentField.refreshSearchInject === 'function'\n        ) {\n          window.wmnIntentField.refreshSearchInject({\n            query: lastFlushedQuery,\n            results: lastResultsForSignal || []\n          });\n        }\n      } catch (eRein) {\n        /* ignore */\n      }\n      invalidateRankedCache();\n      // Prefer catalog scorer over seed rankByAffinity when personalized\n      if (hasEntityPrefs() || fieldOwnsForYou() || hasSessionFocusPrimary()) {\n        list = sharedCatalogForYouPicks();\n        if (list) path = 'catalog-shared';\n      }\n      if (!list) {\n        list = rankedBestSellers();\n        path = path === 'catalog-shared' ? path : 'rerank';\n      }\n    }\n    // Prefer reorder+salvage when enough cards overlap \u2014 forceWipe only when\n    // composition is mostly new (avoids re-download/re-decode of first row).\n    var forceWipe = true;\n    if (grid && list && list.length) {\n      var map = existingCardMap();\n      var overlap = 0;\n      var oi;\n      for (oi = 0; oi < list.length; oi++) {\n        if (list[oi] && list[oi].handle && map[list[oi].handle]) overlap++;\n      }\n      if (overlap >= Math.ceil(list.length * 0.5)) forceWipe = false;\n    }\n    paintItems(list, 'bestsellers', { forceWipe: forceWipe });\n    if (list && list.length) {\n      rankedCache = list;\n      rankedCacheAt = Date.now();\n      settleRankPrimed = true;\n    }\n    return list;\n  }\n\n  function hasEntityPrefs() {\n    try {\n      if (\n        window.wmnEngagement &&\n        typeof window.wmnEngagement.getFocus === 'function'\n      ) {\n        var focus = window.wmnEngagement.getFocus();\n        if (\n          focus &&\n          ((focus.artists && focus.artists.length) ||\n            (focus.genres && focus.genres.length) ||\n            (focus.handles && focus.handles.length))\n        ) {\n          return true;\n        }\n      }\n      if (\n        window.wmnEngagement &&\n        typeof window.wmnEngagement.getEntityPrefs === 'function'\n      ) {\n        var prefs = window.wmnEngagement.getEntityPrefs() || {};\n        return Object.keys(prefs).length > 0;\n      }\n    } catch (e) {\n      /* ignore */\n    }\n    return false;\n  }\n\n  function fieldOwnsForYou() {\n    try {\n      if (\n        window.wmnIntentField &&\n        typeof window.wmnIntentField.ownsRanking === 'function'\n      ) {\n        return !!window.wmnIntentField.ownsRanking();\n      }\n      if (\n        window.wmnIntentField &&\n        typeof window.wmnIntentField.getMode === 'function'\n      ) {\n        var m = window.wmnIntentField.getMode();\n        return m === 'lean' || m === 'committed';\n      }\n    } catch (e) {\n      /* ignore */\n    }\n    return false;\n  }\n\n  var similarLabel = '';\n  /** Lane explanation for results: { similarTo, genres[], countries[], artistLabel, densify }. */\n  var explainState = null;\n\n  var GENERIC_EXPLAIN_GENRES = {\n    'world-music': 1,\n    'world-music-compilation': 1,\n    'world-compilation': 1\n  };\n\n  function entityLabel(kind, slug) {\n    if (!slug) return '';\n    try {\n      if (\n        window.wmnCatalogGraph &&\n        typeof window.wmnCatalogGraph.entityDisplayName === 'function'\n      ) {\n        return window.wmnCatalogGraph.entityDisplayName(kind, slug) || '';\n      }\n    } catch (eLab) {\n      /* ignore */\n    }\n    return String(slug)\n      .replace(/-/g, ' ')\n      .replace(/\\b\\w/g, function (c) {\n        return c.toUpperCase();\n      });\n  }\n\n  function firstSpecificGenreSlug(genres) {\n    var list = genres || [];\n    var i;\n    for (i = 0; i < list.length; i++) {\n      var g = String(list[i] || '').toLowerCase();\n      if (g && !GENERIC_EXPLAIN_GENRES[g]) return g;\n    }\n    return list.length ? String(list[0] || '').toLowerCase() : '';\n  }\n\n  function setExplainState(next) {\n    explainState = next || null;\n  }\n\n  function clearExplainState() {\n    explainState = null;\n  }\n\n  /**\n   * Shelf why line \u2014 e.g. \"Similar to Tinariwen \u00B7 Desert blues \u00B7 Mali\".\n   * Teaches how the catalogue lane was chosen.\n   */\n  function formatExplainLine(state) {\n    if (!state) return '';\n    var parts = [];\n    if (state.similarTo) {\n      parts.push('Similar to ' + state.similarTo);\n    } else if (state.artistLabel) {\n      parts.push(state.artistLabel);\n    }\n    var gSlug = firstSpecificGenreSlug(state.genres);\n    if (gSlug) {\n      var gName = entityLabel('genre', gSlug);\n      if (gName && parts.indexOf(gName) === -1) parts.push(gName);\n    }\n    var countries = state.countries || [];\n    var ci;\n    for (ci = 0; ci < countries.length && parts.length < 4; ci++) {\n      var cSlug = String(countries[ci] || '').toLowerCase();\n      if (!cSlug || cSlug === 'celtic') continue;\n      var cName = entityLabel('country', cSlug);\n      if (cName && parts.indexOf(cName) === -1) {\n        parts.push(cName);\n        break;\n      }\n    }\n    if (parts.length < 2 && !state.similarTo) return '';\n    return parts.join(' \u00B7 ');\n  }\n\n  /**\n   * Per-card why \u2014 product\u2019s lane overlap with the active explain state.\n   * Exact named-artist hits stay quiet; related / similar cards speak.\n   */\n  function explainWhyForHandle(handle, opts) {\n    opts = opts || {};\n    if (!handle || !explainState) return '';\n    if (opts.exactArtist) return '';\n    var g = window.wmnCatalogGraph;\n    if (!g || typeof g.resolveProduct !== 'function') return '';\n    var resolved = null;\n    try {\n      resolved = g.resolveProduct(handle) || {};\n    } catch (eR) {\n      return '';\n    }\n    var pGenres = resolved.genres || [];\n    var pCountries = resolved.countries || [];\n    var laneG = {};\n    var i;\n    var genres = explainState.genres || [];\n    for (i = 0; i < genres.length; i++) {\n      var gs = String(genres[i] || '').toLowerCase();\n      if (gs && !GENERIC_EXPLAIN_GENRES[gs]) laneG[gs] = true;\n    }\n    var hitG = '';\n    for (i = 0; i < pGenres.length; i++) {\n      var pg = String(pGenres[i] || '').toLowerCase();\n      if (laneG[pg]) {\n        hitG = pg;\n        break;\n      }\n      if (!hitG && pg && !GENERIC_EXPLAIN_GENRES[pg] && explainState.similarTo) {\n        hitG = pg;\n      }\n    }\n    if (!hitG && pGenres.length && explainState.densify) {\n      hitG = firstSpecificGenreSlug(pGenres);\n    }\n    var laneC = {};\n    var countries = explainState.countries || [];\n    for (i = 0; i < countries.length; i++) {\n      var cs = String(countries[i] || '').toLowerCase();\n      if (cs) laneC[cs] = true;\n    }\n    var hitC = '';\n    for (i = 0; i < pCountries.length; i++) {\n      var pc = String(pCountries[i] || '').toLowerCase();\n      if (laneC[pc] || (explainState.similarTo && pc && !hitC)) {\n        hitC = pc;\n        if (laneC[pc]) break;\n      }\n    }\n    var bits = [];\n    if (hitG) bits.push(entityLabel('genre', hitG));\n    if (hitC) bits.push(entityLabel('country', hitC));\n    if (!bits.length && explainState.similarTo) {\n      return 'Neighbour';\n    }\n    return bits.join(' \u00B7 ');\n  }\n\n  function explainStateFromSimilar(sim) {\n    if (!sim) return null;\n    return {\n      similarTo: sim.similarTo || '',\n      genres: (sim.genres || []).slice(),\n      countries: (sim.countries || []).slice(),\n      densify: false\n    };\n  }\n\n  function explainStateFromGraphIntent(intent, opts) {\n    opts = opts || {};\n    if (!intent) return null;\n    var genres = [];\n    var countries = [];\n    var artistLabel = '';\n    var densify = !!(\n      (intent.densifyGenres && intent.densifyGenres.length) ||\n      (intent.densifyArtists && intent.densifyArtists.length)\n    );\n    if (intent.densifyGenres && intent.densifyGenres.length) {\n      genres = intent.densifyGenres.slice();\n    }\n    var ents = intent.entities || [];\n    var ei;\n    for (ei = 0; ei < ents.length; ei++) {\n      var id = String((ents[ei] && ents[ei].id) || '');\n      var colon = id.indexOf(':');\n      if (colon < 0) continue;\n      var kind = id.slice(0, colon);\n      var key = id.slice(colon + 1);\n      if (kind === 'genre' && genres.indexOf(key) === -1) genres.push(key);\n      if (kind === 'country' && countries.indexOf(key) === -1) countries.push(key);\n      if (kind === 'artist' && !artistLabel) {\n        artistLabel = entityLabel('artist', key) || opts.artistFallback || '';\n      }\n    }\n    if (intent.like && intent.like.lane) {\n      var lane = intent.like.lane;\n      return {\n        similarTo: lane.n || intent.like.phrase || '',\n        genres: (lane.g && lane.g.length ? lane.g : genres).slice(),\n        countries: (lane.c && lane.c.length ? lane.c : countries).slice(),\n        densify: false\n      };\n    }\n    if (!genres.length && !countries.length && !artistLabel) return null;\n    return {\n      similarTo: '',\n      genres: genres,\n      countries: countries,\n      artistLabel: artistLabel,\n      densify: densify\n    };\n  }\n\n  function setPanelChrome(nextMode, hasItems, opts) {\n    opts = opts || {};\n    var missFb = !!opts.missFallback;\n    mode = nextMode;\n    if (nextMode !== 'results') {\n      similarLabel = '';\n      clearExplainState();\n    }\n    var personalized =\n      nextMode !== 'results' &&\n      (hasEntityPrefs() || fieldOwnsForYou() || fieldHasEnergyNodes());\n    var explainLine =\n      nextMode === 'results' && !missFb ? formatExplainLine(explainState) : '';\n    var title =\n      nextMode === 'results'\n        ? missFb\n          ? opts.missFallbackLabel || ''\n          : similarLabel\n            ? explainLine || 'Similar to ' + similarLabel\n            : hasItems\n              ? 'Results'\n              : ''\n        : personalized\n          ? 'For you'\n          : 'Best Sellers';\n    // When title already carries the full explain string, why sits empty;\n    // densify / genre Results keep \"Results\" + a why subtitle.\n    var whyText = '';\n    if (nextMode === 'results' && !missFb && hasItems) {\n      if (similarLabel) {\n        whyText = '';\n      } else if (explainLine && explainLine.indexOf('Similar to ') !== 0) {\n        whyText = explainLine;\n      }\n    }\n    if (titleEl) {\n      titleEl.textContent = title;\n      if (missFb && title) {\n        titleEl.classList.add('wmn-search-discover__title--rail');\n      } else {\n        titleEl.classList.remove('wmn-search-discover__title--rail');\n      }\n      if (whyText) {\n        titleEl.classList.add('wmn-search-discover__title--explained');\n      } else {\n        titleEl.classList.remove('wmn-search-discover__title--explained');\n      }\n    }\n    if (whyEl) {\n      if (whyText) {\n        whyEl.textContent = whyText;\n        whyEl.hidden = false;\n      } else {\n        whyEl.textContent = '';\n        whyEl.hidden = true;\n      }\n    }\n    if (panelEl) {\n      panelEl.setAttribute(\n        'aria-label',\n        nextMode === 'results'\n          ? missFb || (!hasItems && !similarLabel)\n            ? \"Sorry, we don't have anything like that right now\"\n            : explainLine ||\n              (similarLabel ? 'Similar to ' + similarLabel : 'Search results')\n          : title\n      );\n    }\n    if (emptyEl) {\n      // Pending similar/live resolve: claim results mode without flashing apology.\n      if (opts.suppressEmpty) {\n        emptyEl.hidden = true;\n      } else if (hasItems && !missFb) {\n        // Miss fallback keeps the apology visible above the product rail.\n        emptyEl.hidden = true;\n      } else {\n        emptyEl.textContent =\n          nextMode === 'results'\n            ? \"Sorry, we don't have anything like that right now\"\n            : 'No recommendations to show yet.';\n        emptyEl.hidden = false;\n      }\n    }\n  }\n\n  function isLikelyProductHandle(handle) {\n    if (\n      window.wmnEngagement &&\n      typeof window.wmnEngagement.isLikelyProductHandle === 'function'\n    ) {\n      return !!window.wmnEngagement.isLikelyProductHandle(handle);\n    }\n    var h = String(handle || '').replace(/^\\s+|\\s+$/g, '');\n    if (!h || h.indexOf('/') !== -1 || h.indexOf('.') !== -1) return false;\n    if (/_\\d+x\\d*(?:$|[.?#])/i.test(h)) return false;\n    return true;\n  }\n\n  /** Slim card from handle \u2014 graph first, then seed / local pools. */\n  function cardFromHandle(handle) {\n    var h = String(handle || '')\n      .replace(/^\\s+|\\s+$/g, '')\n      .toLowerCase();\n    if (!h || !isLikelyProductHandle(h)) return null;\n    var g = window.wmnCatalogGraph;\n    if (g && typeof g.productCard === 'function') {\n      try {\n        var card = g.productCard(h);\n        if (card && card.handle) return card;\n      } catch (eCard) {\n        /* fall through */\n      }\n    }\n    var pools = [lastBestsellersPaint, loadData()];\n    var pi;\n    for (pi = 0; pi < pools.length; pi++) {\n      var pool = pools[pi] || [];\n      var i;\n      for (i = 0; i < pool.length; i++) {\n        if (\n          pool[i] &&\n          pool[i].handle &&\n          String(pool[i].handle).toLowerCase() === h\n        ) {\n          return pool[i];\n        }\n      }\n    }\n    var root = shopRoot();\n    if (root.slice(-1) !== '/') root += '/';\n    var image = '';\n    try {\n      if (g && typeof g.getProductImage === 'function') {\n        image = g.getProductImage(h) || '';\n      }\n    } catch (eImg) {\n      /* ignore */\n    }\n    return {\n      handle: h,\n      title: h.replace(/-/g, ' '),\n      url: root + 'products/' + encodeURIComponent(h),\n      image: image\n    };\n  }\n\n  /**\n   * Empty search miss rail: recently viewed \u2192 For you \u2192 Best Sellers.\n   * @returns {{items: object[], label: string}}\n   */\n  function missFallbackBundle() {\n    try {\n      if (\n        window.wmnEngagement &&\n        typeof window.wmnEngagement.readRecentlyViewedCookie === 'function'\n      ) {\n        var rv = window.wmnEngagement.readRecentlyViewedCookie() || [];\n        var cards = [];\n        var seen = {};\n        var ri;\n        for (ri = 0; ri < rv.length && cards.length < DISPLAY_LIMIT; ri++) {\n          var c = cardFromHandle(rv[ri]);\n          if (!c || !c.handle || seen[c.handle]) continue;\n          seen[c.handle] = true;\n          cards.push(c);\n        }\n        if (cards.length) {\n          return { items: cards, label: 'Recently viewed' };\n        }\n      }\n    } catch (eRv) {\n      /* fall through */\n    }\n\n    if (\n      hasEntityPrefs() ||\n      fieldOwnsForYou() ||\n      fieldHasEnergyNodes() ||\n      hasSessionFocusPrimary()\n    ) {\n      var fy = sharedCatalogForYouPicks();\n      if (fy && fy.length) {\n        return { items: fy, label: 'For you' };\n      }\n    }\n\n    var bs = rankedBestSellers() || loadData() || [];\n    return {\n      items: bs.slice(0, DISPLAY_LIMIT),\n      label: 'Best Sellers'\n    };\n  }\n\n  /** Handle-only signature \u2014 image URL changes must not remount the grid. */\n  function itemsSignature(items, nextMode, opts) {\n    var parts = [nextMode || '', hasEntityPrefs() ? 'fy' : 'bs'];\n    if (opts && opts.missFallback) {\n      parts.push('miss');\n      parts.push(opts.missFallbackLabel || '');\n    }\n    if (nextMode === 'results') {\n      parts.push(similarLabel || '');\n      parts.push(formatExplainLine(explainState) || '');\n    }\n    var list = items || [];\n    for (var i = 0; i < list.length; i++) {\n      parts.push((list[i] && list[i].handle) || (list[i] && list[i].url) || '');\n    }\n    return parts.join('|');\n  }\n\n  function sameImageUrl(a, b) {\n    if (!a || !b) return false;\n    if (a === b) return true;\n    var na = String(a).replace(/^https?:/, '');\n    var nb = String(b).replace(/^https?:/, '');\n    if (na === nb) return true;\n    // Treat _200x / _400x (etc.) as the same asset \u2014 do not reload decoded covers.\n    return (\n      na.replace(/_\\d+x(?=\\.|\\?)/, '_Xx') ===\n      nb.replace(/_\\d+x(?=\\.|\\?)/, '_Xx')\n    );\n  }\n\n  /** Copy imageCache URLs onto ranked items so settle-primed covers can patch. */\n  function syncItemImagesFromGraph(items) {\n    var graph = window.wmnCatalogGraph;\n    if (!graph || typeof graph.getProductImage !== 'function') return items || [];\n    var list = items || [];\n    var i;\n    for (i = 0; i < list.length; i++) {\n      var it = list[i];\n      if (!it || !it.handle || it.image) continue;\n      var cached = graph.getProductImage(it.handle);\n      if (cached) it.image = cached;\n    }\n    return list;\n  }\n\n  /** Inject cover imgs from imageCache for every grid card (DOM-driven). */\n  function patchGridCoversFromGraph() {\n    if (!grid) return;\n    var graph = window.wmnCatalogGraph;\n    if (!graph || typeof graph.getProductImage !== 'function') return;\n    var cards = grid.querySelectorAll('[data-wmn-handle]');\n    var i;\n    for (i = 0; i < cards.length; i++) {\n      var handle = cards[i].getAttribute('data-wmn-handle');\n      if (!handle) continue;\n      var src = graph.getProductImage(handle);\n      if (!src) continue;\n      var img = cards[i].querySelector('img');\n      if (img) {\n        var cur = img.getAttribute('src');\n        var pending = img.getAttribute('data-src');\n        if (sameImageUrl(cur, src) || sameImageUrl(pending, src)) continue;\n        if (cur && img.complete && img.naturalWidth > 0) continue;\n        img.removeAttribute('data-src');\n        img.setAttribute('loading', 'eager');\n        img.setAttribute('decoding', 'async');\n        img.setAttribute('src', src);\n        continue;\n      }\n      var cover = cards[i].querySelector('.wmn-search-discover__cover');\n      if (cover) {\n        cover.innerHTML =\n          '<img src=\"' +\n          escapeHtml(src) +\n          '\" alt=\"\" loading=\"eager\" decoding=\"async\" width=\"200\" height=\"200\" />';\n      }\n    }\n  }\n\n  function patchCardImages(items) {\n    if (!grid) return;\n    syncItemImagesFromGraph(items);\n    var graph = window.wmnCatalogGraph;\n    var byHandle = {};\n    var i;\n    for (i = 0; i < (items || []).length; i++) {\n      var it = items[i];\n      if (!it || !it.handle) continue;\n      var src = it.image || null;\n      if (\n        !src &&\n        graph &&\n        typeof graph.getProductImage === 'function'\n      ) {\n        src = graph.getProductImage(it.handle) || null;\n        if (src) it.image = src;\n      }\n      if (src) byHandle[it.handle] = src;\n    }\n    var cards = grid.querySelectorAll('[data-wmn-handle]');\n    for (i = 0; i < cards.length; i++) {\n      var handle = cards[i].getAttribute('data-wmn-handle');\n      var src = handle && byHandle[handle];\n      if (!src) continue;\n      var img = cards[i].querySelector('img');\n      if (img) {\n        var cur = img.getAttribute('src');\n        var pending = img.getAttribute('data-src');\n        if (sameImageUrl(cur, src) || sameImageUrl(pending, src)) continue;\n        // SSR / preloaded covers are already decoded \u2014 never bounce them.\n        if (cur && img.complete && img.naturalWidth > 0) continue;\n        img.removeAttribute('data-src');\n        img.setAttribute('loading', 'eager');\n        img.setAttribute('decoding', 'async');\n        img.setAttribute('src', src);\n        continue;\n      }\n      var cover = cards[i].querySelector('.wmn-search-discover__cover');\n      if (cover) {\n        cover.innerHTML =\n          '<img src=\"' +\n          escapeHtml(src) +\n          '\" alt=\"\" loading=\"eager\" decoding=\"async\" width=\"200\" height=\"200\" />';\n      }\n    }\n    // DOM-driven pass: covers any card whose ranked item lacked .image but cache has URL.\n    patchGridCoversFromGraph();\n    patchDiscoverPlayButtons();\n  }\n\n  function cardHtml(item, loading) {\n    if (!item || !item.url) return '';\n    // Default lazy \u2014 remounts must not decode 32 eager covers at once.\n    // Below-fold: data-src only (no src). Native loading=lazy still requests every\n    // row inside the fixed overflow panel and saturates Slow-4G (~4\u20135s first paint).\n    var load = loading || 'lazy';\n    var eager = load === 'eager';\n    var img = item.image\n      ? '<div class=\"wmn-search-discover__cover\"><img ' +\n        (eager\n          ? 'src=\"' + escapeHtml(item.image) + '\" '\n          : 'data-src=\"' + escapeHtml(item.image) + '\" ') +\n        'alt=\"\" loading=\"' +\n        load +\n        '\" decoding=\"async\" width=\"200\" height=\"200\" /></div>'\n      : '<div class=\"wmn-search-discover__cover\"></div>';\n    var artistName = item.artist || '';\n    if (window.wmnCardKicker && item.handle) {\n      artistName = window.wmnCardKicker({\n        handle: item.handle,\n        title: item.title || '',\n        artist: item.artist || ''\n      });\n    }\n    var artist = artistName\n      ? '<p class=\"wmn-search-discover__artist\">' +\n        escapeHtml(artistName) +\n        '</p>'\n      : '';\n    var whyCard = '';\n    if (mode === 'results' && item.handle && explainState) {\n      var exactArtist = false;\n      if (explainState.artistLabel && item.artist) {\n        exactArtist =\n          normalizeQuery(item.artist) === normalizeQuery(explainState.artistLabel);\n      }\n      // Named-artist densify: quiet on the seed artist\u2019s own titles.\n      if (\n        explainState.densify &&\n        explainState.artistLabel &&\n        item.artist &&\n        normalizeQuery(item.artist).indexOf(\n          normalizeQuery(explainState.artistLabel).split(' ')[0] || ''\n        ) === 0 &&\n        normalizeQuery(item.artist) === normalizeQuery(explainState.artistLabel)\n      ) {\n        exactArtist = true;\n      }\n      var whyTxt = explainWhyForHandle(item.handle, { exactArtist: exactArtist });\n      if (whyTxt) {\n        whyCard =\n          '<p class=\"wmn-search-discover__card-why\">' +\n          escapeHtml(whyTxt) +\n          '</p>';\n      }\n    }\n    var sp = spotifyPathForHandle(item.handle);\n    var play = playButtonHtml(item.handle, sp);\n    var handleAttr = item.handle\n      ? ' data-wmn-handle=\"' + escapeHtml(item.handle) + '\"'\n      : '';\n    var spAttr = sp ? ' data-wmn-spotify=\"' + escapeHtml(sp) + '\"' : '';\n    return (\n      '<div class=\"wmn-search-discover__card-wrap\"' +\n      handleAttr +\n      spAttr +\n      (item.title\n        ? ' data-wmn-title=\"' + escapeHtml(item.title) + '\"'\n        : '') +\n      '>' +\n      '<a class=\"wmn-search-discover__card\" href=\"' +\n      escapeHtml(item.url) +\n      '\"' +\n      handleAttr +\n      '>' +\n      img +\n      '<div class=\"wmn-search-discover__meta\">' +\n      artist +\n      '<p class=\"wmn-search-discover__name\">' +\n      escapeHtml(item.title || '') +\n      '</p>' +\n      whyCard +\n      '</div></a>' +\n      play +\n      '</div>'\n    );\n  }\n\n  function spotifyPathForHandle(handle) {\n    if (!handle) return '';\n    try {\n      if (\n        window.wmnCatalogGraph &&\n        typeof window.wmnCatalogGraph.getSpotifyPath === 'function'\n      ) {\n        return window.wmnCatalogGraph.getSpotifyPath(handle) || '';\n      }\n    } catch (e) {\n      /* ignore */\n    }\n    return '';\n  }\n\n  function playButtonHtml(handle, sp) {\n    if (!handle || !sp) return '';\n    return (\n      '<button type=\"button\" class=\"wmn-card-cover__play\" data-wmn-play data-wmn-listen data-wmn-handle=\"' +\n      escapeHtml(handle) +\n      '\" data-wmn-spotify=\"' +\n      escapeHtml(sp) +\n      '\" data-wmn-play-source=\"search-discover\" aria-label=\"Play preview\" aria-pressed=\"false\">' +\n      '<svg class=\"wmn-card-cover__play-icon wmn-card-cover__play-icon--play\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M8 5v14l11-7z\"/></svg>' +\n      '<svg class=\"wmn-card-cover__play-icon wmn-card-cover__play-icon--pause\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 5h4v14H6zm8 0h4v14h-4z\"/></svg>' +\n      '</button>'\n    );\n  }\n\n  /** After catalog graph loads, inject missing cover-play on already-painted cards. */\n  function patchDiscoverPlayButtons() {\n    if (!grid) return;\n    var wraps = grid.querySelectorAll('.wmn-search-discover__card-wrap[data-wmn-handle]');\n    for (var i = 0; i < wraps.length; i++) {\n      var wrap = wraps[i];\n      if (wrap.querySelector('[data-wmn-play]')) continue;\n      var handle = (wrap.getAttribute('data-wmn-handle') || '').trim();\n      var sp = spotifyPathForHandle(handle);\n      if (!sp) continue;\n      wrap.setAttribute('data-wmn-spotify', sp);\n      wrap.insertAdjacentHTML('beforeend', playButtonHtml(handle, sp));\n    }\n  }\n\n  function promoteDeferredCover(img) {\n    if (!img) return;\n    var src = img.getAttribute('data-src');\n    if (!src) return;\n    img.removeAttribute('data-src');\n    img.setAttribute('loading', 'eager');\n    img.setAttribute('decoding', 'async');\n    img.setAttribute('src', src);\n  }\n\n  /** Load deferred covers without flooding CDN (native lazy fails in this panel). */\n  function armDeferredCovers() {\n    if (!grid) return;\n    if (coverSrcObserver) {\n      try {\n        coverSrcObserver.disconnect();\n      } catch (eDisc) {\n        /* ignore */\n      }\n      coverSrcObserver = null;\n    }\n    var deferred = Array.prototype.slice.call(\n      grid.querySelectorAll('.wmn-search-discover__cover img[data-src]')\n    );\n    if (!deferred.length) return;\n\n    // Prefer cards nearer the top of the panel.\n    deferred.sort(function (a, b) {\n      return a.getBoundingClientRect().top - b.getBoundingClientRect().top;\n    });\n\n\n    var queue = deferred.slice();\n    var inflight = 0;\n    var MAX_INFLIGHT = 6;\n    var started = false;\n    var done = false;\n\n    function pump() {\n      if (done) return;\n      if (inflight >= MAX_INFLIGHT || !queue.length) {\n        if (!queue.length && inflight === 0) done = true;\n        return;\n      }\n      var img = queue.shift();\n      if (!img || !img.getAttribute('data-src')) {\n        pump();\n        return;\n      }\n      inflight++;\n      var onSettle = function () {\n        inflight--;\n        img.removeEventListener('load', onSettle);\n        img.removeEventListener('error', onSettle);\n        // Yield between promotions \u2014 sync cache hits used to cascade all 24.\n        if (window.requestAnimationFrame) {\n          window.requestAnimationFrame(pump);\n        } else {\n          setTimeout(pump, 16);\n        }\n      };\n      img.addEventListener('load', onSettle);\n      img.addEventListener('error', onSettle);\n      promoteDeferredCover(img);\n      if (img.complete) {\n        onSettle();\n      }\n    }\n\n    function startQueue() {\n      if (started) return;\n      started = true;\n      pump();\n    }\n\n    // First row must finish before ANY deferred src promotion.\n    // Prior 1200ms safety started the row-2 flood while row-1 was still blank\n    // on cold/Slow-3G (~4.5s first-row) \u2014 that was the user-visible bottleneck.\n    prioritizeFirstRowCovers();\n    whenFirstRowDecoded(function () {\n      if (!open || mode === 'results') return;\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(startQueue);\n      } else {\n        startQueue();\n      }\n      // Scroll near a deferred card \u2192 jump it to the front of the queue.\n      if (panelEl && typeof IntersectionObserver === 'function') {\n        coverSrcObserver = new IntersectionObserver(\n          function (entries) {\n            var i;\n            for (i = 0; i < entries.length; i++) {\n              if (!entries[i].isIntersecting) continue;\n              var img = entries[i].target;\n              if (!img.getAttribute('data-src')) {\n                coverSrcObserver.unobserve(img);\n                continue;\n              }\n              var qi = queue.indexOf(img);\n              if (qi > 0) {\n                queue.splice(qi, 1);\n                queue.unshift(img);\n              }\n              coverSrcObserver.unobserve(img);\n              startQueue();\n            }\n          },\n          { root: panelEl, rootMargin: '80px 0px', threshold: 0.01 }\n        );\n        var di;\n        for (di = 0; di < deferred.length; di++) {\n          coverSrcObserver.observe(deferred[di]);\n        }\n      }\n    }, 8000);\n  }\n\n  function existingCardMap() {\n    var map = {};\n    if (!grid) return map;\n    // Map WRAP nodes \u2014 reorder must move the wrap (card + play), not the\n    // inner <a>. Moving only the <a> orphans play buttons in empty wraps.\n    var wraps = grid.querySelectorAll(\n      '.wmn-search-discover__card-wrap[data-wmn-handle]'\n    );\n    var i;\n    for (i = 0; i < wraps.length; i++) {\n      var h = wraps[i].getAttribute('data-wmn-handle');\n      if (h) map[h] = wraps[i];\n    }\n    return map;\n  }\n\n  /** Drop empty wraps left behind by older reorder bugs (play-only shells). */\n  function purgeOrphanPlayWraps() {\n    if (!grid) return 0;\n    var kids = grid.children;\n    var removed = 0;\n    var i;\n    for (i = kids.length - 1; i >= 0; i--) {\n      var w = kids[i];\n      if (\n        !w ||\n        !w.classList ||\n        !w.classList.contains('wmn-search-discover__card-wrap')\n      ) {\n        // Also remove naked <a.card> nodes left by the old bug\n        if (\n          w &&\n          w.classList &&\n          w.classList.contains('wmn-search-discover__card')\n        ) {\n          grid.removeChild(w);\n          removed++;\n        }\n        continue;\n      }\n      if (w.querySelector('a.wmn-search-discover__card')) continue;\n      grid.removeChild(w);\n      removed++;\n    }\n    return removed;\n  }\n\n\n  /** Detach decoded cover <img> nodes before an innerHTML wipe. */\n  function salvageCoverImages() {\n    var map = {};\n    if (!grid) return map;\n    var cards = grid.querySelectorAll(\n      '.wmn-search-discover__card[data-wmn-handle]'\n    );\n    var i;\n    for (i = 0; i < cards.length; i++) {\n      var h = cards[i].getAttribute('data-wmn-handle');\n      var img = cards[i].querySelector('.wmn-search-discover__cover img');\n      if (h && img && (img.getAttribute('src') || img.getAttribute('data-src'))) {\n        map[h] = img;\n      }\n    }\n    return map;\n  }\n\n  /** Reattach salvaged <img> nodes so the browser keeps decoded bitmaps. */\n  function restoreCoverImages(salvaged) {\n    if (!grid || !salvaged) return;\n    var cards = grid.querySelectorAll(\n      '.wmn-search-discover__card[data-wmn-handle]'\n    );\n    var i;\n    for (i = 0; i < cards.length; i++) {\n      var h = cards[i].getAttribute('data-wmn-handle');\n      var oldImg = h && salvaged[h];\n      if (!oldImg) continue;\n      var cover = cards[i].querySelector('.wmn-search-discover__cover');\n      if (!cover) continue;\n      var fresh = cover.querySelector('img');\n      var oldSrc =\n        oldImg.getAttribute('src') || oldImg.getAttribute('data-src');\n      if (fresh) {\n        var newSrc =\n          fresh.getAttribute('src') || fresh.getAttribute('data-src');\n        // sameImageUrl: keep decoded bitmap across _200x/_400x URL churn.\n        if (oldSrc && newSrc && sameImageUrl(oldSrc, newSrc)) {\n          cover.replaceChild(oldImg, fresh);\n        }\n      } else if (oldSrc) {\n        cover.appendChild(oldImg);\n      }\n    }\n  }\n\n  function patchCardMeta(cardOrWrap, item) {\n    if (!cardOrWrap || !item) return;\n    var card = cardOrWrap.classList.contains('wmn-search-discover__card')\n      ? cardOrWrap\n      : cardOrWrap.querySelector('a.wmn-search-discover__card') || cardOrWrap;\n    if (item.url && card.getAttribute('href') !== item.url) {\n      card.setAttribute('href', item.url);\n    }\n    var nameEl = card.querySelector('.wmn-search-discover__name');\n    if (nameEl && item.title != null && nameEl.textContent !== item.title) {\n      nameEl.textContent = item.title;\n    }\n    var artistEl = card.querySelector('.wmn-search-discover__artist');\n    if (item.artist) {\n      if (artistEl) {\n        if (artistEl.textContent !== item.artist) artistEl.textContent = item.artist;\n      } else {\n        var meta = card.querySelector('.wmn-search-discover__meta');\n        if (meta) {\n          var p = document.createElement('p');\n          p.className = 'wmn-search-discover__artist';\n          p.textContent = item.artist;\n          meta.appendChild(p);\n        }\n      }\n    } else if (artistEl && artistEl.parentNode) {\n      artistEl.parentNode.removeChild(artistEl);\n    }\n  }\n\n  function prefersReducedMotion() {\n    try {\n      return !!(\n        window.matchMedia &&\n        window.matchMedia('(prefers-reduced-motion: reduce)').matches\n      );\n    } catch (e) {\n      return false;\n    }\n  }\n\n  /**\n   * Reorder existing card nodes instead of wiping innerHTML.\n   * Keeps decoded images; FLIP-animates movers when motion is allowed.\n   * Returns false when overlap is too low (caller should full-rebuild).\n   */\n  function reorderGridCards(list) {\n    if (!grid || !list || !list.length) return false;\n    purgeOrphanPlayWraps();\n    var map = existingCardMap();\n    var existingN = Object.keys(map).length;\n    if (existingN < 2) return false;\n\n    var overlap = 0;\n    var i;\n    for (i = 0; i < list.length; i++) {\n      if (list[i] && list[i].handle && map[list[i].handle]) overlap++;\n    }\n    // Need enough shared cards for reorder to beat a full wipe.\n    if (overlap < Math.max(3, Math.ceil(list.length * 0.25))) return false;\n\n    var useFlip = !prefersReducedMotion();\n    var first = {};\n    var handle;\n    if (useFlip) {\n      for (handle in map) {\n        if (!Object.prototype.hasOwnProperty.call(map, handle)) continue;\n        var rect = map[handle].getBoundingClientRect();\n        first[handle] = { top: rect.top, left: rect.left };\n      }\n    }\n\n    var used = {};\n    for (i = 0; i < list.length; i++) {\n      var item = list[i];\n      if (!item || !item.url) continue;\n      var wrapNode = item.handle ? map[item.handle] : null;\n      if (wrapNode) {\n        used[item.handle] = true;\n        patchCardMeta(wrapNode, item);\n        grid.appendChild(wrapNode);\n      } else {\n        var wrap = document.createElement('div');\n        // Only first row eager \u2014 appending 24 eager srcs re-floods the CDN.\n        wrap.innerHTML = cardHtml(\n          item,\n          i < EAGER_COVER_N ? 'eager' : 'lazy'\n        );\n        if (wrap.firstChild) grid.appendChild(wrap.firstChild);\n      }\n    }\n\n    for (handle in map) {\n      if (!Object.prototype.hasOwnProperty.call(map, handle)) continue;\n      if (used[handle]) continue;\n      if (map[handle].parentNode === grid) {\n        grid.removeChild(map[handle]);\n      }\n    }\n\n    if (useFlip) {\n      for (handle in used) {\n        if (!Object.prototype.hasOwnProperty.call(used, handle)) continue;\n        var el = map[handle];\n        var from = first[handle];\n        if (!el || !from) continue;\n        var last = el.getBoundingClientRect();\n        var dx = from.left - last.left;\n        var dy = from.top - last.top;\n        if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) continue;\n        el.style.transition = 'none';\n        el.style.transform = 'translate(' + dx + 'px,' + dy + 'px)';\n        // force layout so the invert sticks before animating to identity\n        void el.offsetWidth;\n        el.style.transition = 'transform 160ms ease';\n        el.style.transform = '';\n      }\n      window.setTimeout(function () {\n        var nodes = grid.querySelectorAll('.wmn-search-discover__card-wrap');\n        var ci;\n        for (ci = 0; ci < nodes.length; ci++) {\n          nodes[ci].style.transition = '';\n          nodes[ci].style.transform = '';\n        }\n      }, 220);\n    }\n\n\n    return true;\n  }\n\n  /**\n   * Fallback when reorder overlap math fails but SSR first-row cards exist:\n   * keep every decoded card node, append only missing handles.\n   */\n  function expandPreservingDecoded(list) {\n    if (!grid || !list || !list.length) return false;\n    purgeOrphanPlayWraps();\n    var map = existingCardMap();\n    if (Object.keys(map).length < 4) return false;\n    var used = {};\n    var i;\n    for (i = 0; i < list.length; i++) {\n      var item = list[i];\n      if (!item || !item.url) continue;\n      var wrapNode = item.handle ? map[item.handle] : null;\n      if (wrapNode) {\n        used[item.handle] = true;\n        patchCardMeta(wrapNode, item);\n        grid.appendChild(wrapNode);\n      } else {\n        var wrap = document.createElement('div');\n        wrap.innerHTML = cardHtml(\n          item,\n          i < EAGER_COVER_N ? 'eager' : 'lazy'\n        );\n        if (wrap.firstChild) grid.appendChild(wrap.firstChild);\n      }\n    }\n    var handle;\n    for (handle in map) {\n      if (!Object.prototype.hasOwnProperty.call(map, handle)) continue;\n      if (used[handle]) continue;\n      if (map[handle].parentNode === grid) {\n        grid.removeChild(map[handle]);\n      }\n    }\n    return true;\n  }\n\n  function withResolvedImages(items) {\n    var out = [];\n    var needFetch = [];\n    var graph = window.wmnCatalogGraph;\n    for (var i = 0; i < (items || []).length; i++) {\n      var item = items[i];\n      if (!item || !item.url) continue;\n      var img = item.image || null;\n      if (\n        !img &&\n        item.handle &&\n        graph &&\n        typeof graph.getProductImage === 'function'\n      ) {\n        var cached = graph.getProductImage(item.handle);\n        if (cached) {\n          img = cached;\n        } else if (\n          typeof graph.hasImageCacheEntry === 'function' &&\n          graph.hasImageCacheEntry(item.handle)\n        ) {\n          // Confirmed missing \u2014 keep the ranked slot with empty cover so\n          // personalization is not replaced by unrelated bestsellers.\n          out.push(item);\n          continue;\n        } else {\n          needFetch.push(item.handle);\n          // Keep ranked/personalized slots visible; hydrate patches covers later.\n          out.push(item);\n          continue;\n        }\n      } else if (!img) {\n        if (item.handle) needFetch.push(item.handle);\n        out.push(item);\n        continue;\n      }\n      item.image = img;\n      out.push(item);\n    }\n    return { items: out, needFetch: needFetch };\n  }\n\n  /** Fill incomplete rows with image-ready bestsellers (graph misses must not leave holes). */\n  function backfillImageReady(list, excludeHandles, limit) {\n    var out = (list || []).slice();\n    var seen = {};\n    var i;\n    for (i = 0; i < out.length; i++) {\n      if (out[i] && out[i].handle) seen[out[i].handle] = true;\n    }\n    for (i = 0; i < (excludeHandles || []).length; i++) {\n      if (excludeHandles[i]) seen[excludeHandles[i]] = true;\n    }\n    var seed = loadData() || [];\n    var extras = [];\n    for (i = 0; i < seed.length; i++) {\n      var s = seed[i];\n      if (!s || !s.handle || seen[s.handle]) continue;\n      extras.push(s);\n    }\n    var ready = withResolvedImages(extras).items;\n    for (i = 0; i < ready.length && out.length < limit; i++) {\n      if (!ready[i] || !ready[i].handle || seen[ready[i].handle]) continue;\n      seen[ready[i].handle] = true;\n      out.push(ready[i]);\n    }\n    return out;\n  }\n\n  function paintItems(items, nextMode, opts) {\n    if (!grid) return;\n    opts = opts || {};\n    EAGER_COVER_N = eagerCoverBudget();\n    var paintT0 = performance.now();\n    var raw = items || [];\n    // Empty search miss \u2192 recently viewed \u2192 For you \u2192 Best Sellers under apology.\n    if (\n      nextMode === 'results' &&\n      !raw.length &&\n      !opts.skipMissFallback &&\n      !opts.missFallback\n    ) {\n      var bundle = missFallbackBundle();\n      if (bundle && bundle.items && bundle.items.length) {\n        opts = {\n          missFallback: true,\n          missFallbackLabel: bundle.label || '',\n          forceWipe: opts.forceWipe !== false,\n          skipHydrate: opts.skipHydrate\n        };\n        raw = bundle.items;\n      }\n    }\n    // Any real results / miss-rail / apology paint ends the blank hold.\n    if (!(opts.suppressEmpty && !raw.length)) {\n      clearSuppressEmptyWatch();\n    }\n    var missFallback = !!opts.missFallback;\n    var resolved = withResolvedImages(raw);\n    var list = resolved.items;\n    if (nextMode === 'bestsellers' && list.length < DISPLAY_LIMIT) {\n      list = backfillImageReady(list, resolved.needFetch, DISPLAY_LIMIT);\n    } else if (list.length > DISPLAY_LIMIT) {\n      list = list.slice(0, DISPLAY_LIMIT);\n    }\n    if (nextMode === 'results' && list.length && !missFallback) {\n      lastResultsForSignal = list;\n      noteResultsPainted();\n    }\n    if (nextMode === 'bestsellers') {\n      // New For you session \u2014 drop results-session trackers after clear remount.\n      // (reset also happens on clear; this covers warm open)\n    }\n    var key = itemsSignature(list, nextMode, opts);\n    if (key === lastPaintKey) {\n      patchCardImages(list);\n      if (resolved.needFetch.length && !opts.skipHydrate) {\n        hydrateDiscoverImages(raw, resolved.needFetch);\n      }\n      // Re-assert apology chrome if a same-key miss rail repaint lands.\n      if (missFallback) setPanelChrome(nextMode, list.length > 0, opts);\n      return;\n    }\n    lastPaintKey = key;\n    if (nextMode === 'bestsellers') {\n      lastBestsellersPaint = list;\n    }\n    setPanelChrome(nextMode, list.length > 0, opts);\n    if (!list.length) {\n      grid.innerHTML = '';\n      if (resolved.needFetch.length && !opts.skipHydrate) {\n        hydrateDiscoverImages(raw, resolved.needFetch);\n      }\n      return;\n    }\n\n    // If liquid SSR already decoded the first row, never wipe/rebuild those\n    // nodes \u2014 only append the rest, and delay their network until later.\n    // ONLY for cold unpersonalized seed expand. Personalized / field-owned\n    // For you must remount/reorder when order differs (SSR-keep would freeze).\n    var existingCards = grid.querySelectorAll(\n      '.wmn-search-discover__card[data-wmn-handle]'\n    );\n    var personalized =\n      nextMode === 'bestsellers' &&\n      (fieldOwnsForYou() || hasEntityPrefs() || fieldHasEnergyNodes());\n    if (\n      !opts.forceWipe &&\n      !personalized &&\n      nextMode === 'bestsellers' &&\n      existingCards.length >= 8 &&\n      list.length >= existingCards.length\n    ) {\n      var prefixOk = true;\n      var pi;\n      for (pi = 0; pi < 8; pi++) {\n        if (\n          !list[pi] ||\n          existingCards[pi].getAttribute('data-wmn-handle') !== list[pi].handle\n        ) {\n          prefixOk = false;\n          break;\n        }\n      }\n      // Append-only: every existing card must already sit at the same index\n      // in the new list. Otherwise fall through to reorder (positions 9+).\n      if (prefixOk && existingCards.length > 8) {\n        for (pi = 8; pi < existingCards.length; pi++) {\n          if (\n            !list[pi] ||\n            existingCards[pi].getAttribute('data-wmn-handle') !== list[pi].handle\n          ) {\n            prefixOk = false;\n            break;\n          }\n        }\n      }\n      if (prefixOk) {\n        // Keep SSR first row; append remaining cards on rAF (or immediately\n        // if first row already decoded). Do not gate behind whenFirstRowDecoded.\n        prioritizeFirstRowCovers();\n        lastPaintKey = key;\n        lastBestsellersPaint = list;\n        var appendGen = seedExpandGen;\n        function appendRest() {\n          if (!open || mode === 'results') return;\n          if (appendGen !== seedExpandGen) return;\n          var have = {};\n          var existingNow = grid.querySelectorAll(\n            '.wmn-search-discover__card[data-wmn-handle]'\n          );\n          var ei2;\n          for (ei2 = 0; ei2 < existingNow.length; ei2++) {\n            have[existingNow[ei2].getAttribute('data-wmn-handle')] = true;\n          }\n          var pi2;\n          for (pi2 = 0; pi2 < list.length; pi2++) {\n            if (!list[pi2] || !list[pi2].handle || have[list[pi2].handle]) {\n              continue;\n            }\n            var wrap = document.createElement('div');\n            wrap.innerHTML = cardHtml(list[pi2], 'lazy');\n            if (wrap.firstChild) grid.appendChild(wrap.firstChild);\n          }\n          armDeferredCovers();\n          if (open) resetVisibilityTracking();\n        }\n        if (firstRowCoversDecoded()) {\n          appendRest();\n        } else if (typeof requestAnimationFrame === 'function') {\n          requestAnimationFrame(appendRest);\n        } else {\n          appendRest();\n        }\n        return;\n      }\n    }\n\n    // Cancel any pending SSR deferred-append from an earlier paint.\n    seedExpandGen += 1;\n\n    // Prefer in-place reorder when enough cards already exist (settle paint /\n    // For you reshuffles). Full wipe only when overlap is too low \u2014 still\n    // salvage decoded <img> nodes so remount is not decode-bound.\n    // SSR first row (8 cards): always reuse \u2014 never wipe decoded covers on open.\n    var existingN = existingCards.length;\n    var reordered =\n      !opts.forceWipe &&\n      (reorderGridCards(list) ||\n        (existingN >= 8 && expandPreservingDecoded(list)));\n    if (!reordered) {\n      var salvaged = salvageCoverImages();\n      // Prefer already-hydrated / baked URLs before building empty cover divs.\n      syncItemImagesFromGraph(list);\n      var html = '';\n      var i;\n      // Known image URL \u2192 src immediately (baked graph). data-src trickle made\n      // For you wait seconds after titles already showed.\n      for (i = 0; i < list.length; i++) {\n        html += cardHtml(\n          list[i],\n          list[i] && list[i].image\n            ? 'eager'\n            : i < EAGER_COVER_N\n              ? 'eager'\n              : 'lazy'\n        );\n      }\n      grid.innerHTML = html;\n      restoreCoverImages(salvaged);\n      patchGridCoversFromGraph();\n      patchDiscoverPlayButtons();\n    } else {\n      syncItemImagesFromGraph(list);\n      patchCardImages(list);\n    }\n\n    if (resolved.needFetch.length && !opts.skipHydrate) {\n      hydrateDiscoverImages(raw, resolved.needFetch);\n    }\n    armDeferredCovers();\n    if (open) resetVisibilityTracking();\n  }\n\n  function resolveBestsellersList() {\n    var raw = rankedBestSellers();\n    var resolved = withResolvedImages(raw);\n    var list = resolved.items;\n    if (list.length < DISPLAY_LIMIT) {\n      list = backfillImageReady(list, resolved.needFetch, DISPLAY_LIMIT);\n    } else if (list.length > DISPLAY_LIMIT) {\n      list = list.slice(0, DISPLAY_LIMIT);\n    }\n    return { raw: raw, resolved: resolved, list: list };\n  }\n\n  function hydrateDiscoverImages(allItems, presetNeed) {\n    if (\n      !window.wmnCatalogGraph ||\n      typeof window.wmnCatalogGraph.hydrateImages !== 'function'\n    ) {\n      return;\n    }\n    var needFetch = presetNeed ? presetNeed.slice() : [];\n    if (!needFetch.length) return;\n    // Remount during an in-flight hydrate used to drop the new needFetch forever\n    // (lock early-return) \u2014 For you stayed blank. Queue and run after unlock.\n    if (window.__wmnHydrateLock) {\n      window.__wmnHydratePending = window.__wmnHydratePending || [];\n      var pi;\n      for (pi = 0; pi < needFetch.length; pi++) {\n        if (\n          needFetch[pi] &&\n          window.__wmnHydratePending.indexOf(needFetch[pi]) === -1\n        ) {\n          window.__wmnHydratePending.push(needFetch[pi]);\n        }\n      }\n      return;\n    }\n    window.__wmnHydrateLock = true;\n    var hydrateT0 = Date.now();\n    EAGER_COVER_N = eagerCoverBudget();\n    var priority = [];\n    var rest = [];\n    var shown = gridShownHandles();\n    var i;\n    for (i = 0; i < needFetch.length; i++) {\n      var h = needFetch[i];\n      var idx = shown.indexOf(h);\n      if (idx >= 0 && idx < EAGER_COVER_N) priority.push(h);\n      else rest.push(h);\n    }\n    var ordered = priority.concat(rest);\n    function flushPendingHydrate() {\n      var pending = window.__wmnHydratePending;\n      window.__wmnHydratePending = null;\n      if (pending && pending.length) {\n        hydrateDiscoverImages(null, pending);\n      }\n    }\n    function applyHydratedImages() {\n      try {\n        if (!open || mode === 'results') return;\n        if (settleRankPrimed && rankedCache && rankedCache.length) {\n          syncItemImagesFromGraph(rankedCache);\n          patchCardImages(rankedCache);\n        } else {\n          var next = resolveBestsellersList();\n          patchCardImages(next.list);\n        }\n        patchGridCoversFromGraph();\n        patchDiscoverPlayButtons();\n        armDeferredCovers();\n      } catch (eApply) {\n        /* never abort */\n      }\n    }\n    function queueMissingRanked() {\n      if (!(settleRankPrimed && rankedCache && rankedCache.length)) return;\n      var still = [];\n      var si;\n      for (si = 0; si < rankedCache.length; si++) {\n        var rit = rankedCache[si];\n        if (!rit || !rit.handle || rit.image) continue;\n        if (\n          window.wmnCatalogGraph &&\n          typeof window.wmnCatalogGraph.hasImageCacheEntry === 'function' &&\n          window.wmnCatalogGraph.hasImageCacheEntry(rit.handle)\n        ) {\n          continue;\n        }\n        still.push(rit.handle);\n      }\n      if (!still.length) return;\n      window.__wmnHydratePending = window.__wmnHydratePending || [];\n      for (si = 0; si < still.length; si++) {\n        if (window.__wmnHydratePending.indexOf(still[si]) === -1) {\n          window.__wmnHydratePending.push(still[si]);\n        }\n      }\n    }\n    function afterHydrate() {\n      window.__wmnHydrateLock = false;\n      if (open && mode === 'results') {\n        var active = document.activeElement;\n        if (isHeaderSearchInput(active) && inputValue(active)) {\n          paintOptimistic(inputValue(active));\n        }\n        flushPendingHydrate();\n        return;\n      }\n      if (open) {\n        applyHydratedImages();\n        queueMissingRanked();\n      }\n      flushPendingHydrate();\n    }\n    // Single batch \u2014 mid-batch patch used to throw and skip the rest.\n    window.wmnCatalogGraph\n      .hydrateImages(ordered)\n      .then(afterHydrate)\n      .catch(function () {\n        window.__wmnHydrateLock = false;\n        if (open) applyHydratedImages();\n        flushPendingHydrate();\n      });\n  }\n\n  /**\n   * Instant paint \u2014 never block on hydrate/network.\n   * Missing covers backfill from seed; hydrate patches in the background.\n   */\n  function paintPersonalizedBestsellers() {\n    paintItems(rankedBestSellers(), 'bestsellers');\n  }\n\n  function renderBestSellers() {\n    paintPersonalizedBestsellers();\n  }\n\n  function warmGraphThenRender() {\n    var warmT0 = performance.now();\n    var now = Date.now();\n    var already =\n      window.wmnCatalogGraph &&\n      typeof window.wmnCatalogGraph.getData === 'function' &&\n      !!window.wmnCatalogGraph.getData();\n    // focusin + input both open discover \u2014 coalesce warm/network work only.\n    // Never delay a forced typed For you paint (dirty flag or settle-primed cache).\n    if (window.__wmnLastWarmMs && now - window.__wmnLastWarmMs < 400) {\n      var forceTyped =\n        !!window.__wmnTypedPrefsDirty ||\n        (settleRankPrimed && rankedCache && rankedCache.length);\n      // Typed query still in the box \u2192 keep Results / empty apology, not For you.\n      if (forceTyped && !holdSearchResultsPane()) {\n        try {\n          window.__wmnTypedPrefsDirty = false;\n        } catch (eDirty) {\n          /* ignore */\n        }\n        remountForYouFromTypedPrefs();\n      }\n      return;\n    }\n    window.__wmnLastWarmMs = now;\n\n    setPanelChrome('bestsellers', true);\n    paintEmptyState();\n\n    if (\n      !window.wmnCatalogGraph ||\n      typeof window.wmnCatalogGraph.ensureLoaded !== 'function'\n    ) {\n      return;\n    }\n\n    function upgradeIfStable() {\n      if (!open || mode === 'results') return;\n      // Rank in idle time so the first paint stays snappy.\n      var run = function () {\n        if (!open || mode === 'results') return;\n        // Typed prefs landed while empty \u2014 apply settle cache if primed.\n        if (consumeTypedPrefsDirty()) {\n          seedExpandGen += 1;\n          paintCachedForYou();\n          return;\n        }\n        // Cold bestsellers with no personalization: stay put. Idle re-rank was\n        // reshuffling seed \u2194 affinity forever as dwell injected energy.\n        // Do NOT treat fieldHasEnergyNodes alone as personalization \u2014 dwell on\n        // seed bestsellers injects energy and used to wipe unfinished SSR covers.\n        if (!firstRowCoversDecoded()) return;\n        if (\n          !settleRankPrimed &&\n          !hasEntityPrefs() &&\n          !fieldOwnsForYou()\n        ) {\n          return;\n        }\n        // Settle-primed order is authoritative until the next settle/invalidate.\n        // Exception: lean/committed with empty field nodes means inject missed\n        // the graph \u2014 re-rank now that data may be present.\n        if (settleRankPrimed && rankedCache && rankedCache.length) {\n          if (!(fieldOwnsForYou() && !fieldHasEnergyNodes())) {\n            return;\n          }\n          settleRankPrimed = false;\n          rankedCache = null;\n          rankedCacheAt = 0;\n        }\n        var next = rankedBestSellers();\n        var resolved = withResolvedImages(next);\n        var list = resolved.items;\n        if (list.length < DISPLAY_LIMIT) {\n          list = backfillImageReady(list, resolved.needFetch, DISPLAY_LIMIT);\n        }\n        var key = itemsSignature(list, 'bestsellers');\n        if (key === lastPaintKey) {\n          patchCardImages(list);\n          if (resolved.needFetch.length) {\n            hydrateDiscoverImages(next, resolved.needFetch);\n          }\n          return;\n        }\n        // Cancel deferred seed expand \u2014 ranked paint wins.\n        seedExpandGen += 1;\n        paintItems(next, 'bestsellers');\n      };\n      if (window.requestIdleCallback) {\n        window.requestIdleCallback(run, { timeout: 200 });\n      } else {\n        setTimeout(run, 0);\n      }\n    }\n\n    if (already) {\n      // Graph already in memory \u2014 still refresh if settles raced an empty field.\n      if (fieldOwnsForYou() && !fieldHasEnergyNodes()) {\n        refreshFieldAfterGraphLoad();\n      }\n      upgradeIfStable();\n      return;\n    }\n\n    window.wmnCatalogGraph.ensureLoaded().then(function () {\n      refreshFieldAfterGraphLoad();\n      upgradeIfStable();\n      patchDiscoverPlayButtons();\n    });\n  }\n\n  function normalizeQuery(q) {\n    if (window.wmnSearchFuzzy && typeof window.wmnSearchFuzzy.normalize === 'function') {\n      return window.wmnSearchFuzzy.normalize(q);\n    }\n    return String(q || '')\n      .toLowerCase()\n      .replace(/^\\s+|\\s+$/g, '');\n  }\n\n  function cachePut(query, mapped) {\n    var key = normalizeQuery(query);\n    if (!key || !mapped) return;\n    if (!resultCache[key]) {\n      cacheOrder.push(key);\n      while (cacheOrder.length > CACHE_MAX) {\n        var old = cacheOrder.shift();\n        delete resultCache[old];\n      }\n    }\n    resultCache[key] = mapped;\n  }\n\n  function cacheLookup(query) {\n    var key = normalizeQuery(query);\n    if (!key) return null;\n    if (resultCache[key]) {\n      return { mapped: resultCache[key], exact: true, key: key };\n    }\n    var best = '';\n    for (var i = 0; i < cacheOrder.length; i++) {\n      var k = cacheOrder[i];\n      if (key.indexOf(k) === 0 && k.length >= 2 && k.length > best.length) {\n        best = k;\n      }\n    }\n    if (best && resultCache[best]) {\n      return { mapped: resultCache[best], exact: false, key: best };\n    }\n    return null;\n  }\n\n  function mergePools(primary, secondary) {\n    var out = [];\n    var seen = {};\n    function add(list) {\n      if (!list) return;\n      for (var i = 0; i < list.length; i++) {\n        var it = list[i];\n        if (!it) continue;\n        var h = it.handle || it.url;\n        if (!h || seen[h]) continue;\n        seen[h] = true;\n        out.push(it);\n      }\n    }\n    add(primary);\n    add(secondary);\n    return out;\n  }\n\n  function localFallback(query) {\n    // Typed search: only graph intent candidates (genre/country/\"like X\"),\n    // never the bestsellers pool.\n    var graph = graphRankQuery(query);\n    if (graph && graph.items && graph.items.length) {\n      return fuzzyRank(query, graph.items, {\n        skipAffinity: true,\n        seedHandles: []\n      });\n    }\n    return [];\n  }\n\n  function optimisticItems(query) {\n    var cached = cacheLookup(query);\n    var pool = [];\n    if (cached && cached.mapped && cached.mapped.length) {\n      pool = cached.mapped.slice();\n    }\n    var graph = graphRankQuery(query);\n    if (graph && graph.items && graph.items.length) {\n      pool = mergePools(graph.items, pool);\n    }\n    // Include local pool only as extra candidates to fuzzy-filter \u2014 never\n    // return it unfiltered when the query matches nothing.\n    pool = mergePools(pool, localPool());\n    var ranked = fuzzyRank(query, pool, { skipAffinity: true });\n    return ranked;\n  }\n\n  function clearSuppressEmptyWatch() {\n    if (suppressEmptyTimer) {\n      clearTimeout(suppressEmptyTimer);\n      suppressEmptyTimer = null;\n    }\n  }\n\n  function armSuppressEmptyWatch(seq) {\n    clearSuppressEmptyWatch();\n    suppressEmptySeq = seq;\n    // Pop/rock OOV (Michael Jackson) used to sit on a black panel forever when\n    // searchAndRender bumped requestSeq and cancelled optimistic similar, then\n    // Shopify search stalled or rate-limited.\n    suppressEmptyTimer = setTimeout(function () {\n      suppressEmptyTimer = null;\n      if (suppressEmptySeq !== requestSeq) return;\n      if (!open || mode !== 'results') return;\n      var hasCards =\n        grid && grid.querySelector('.wmn-search-discover__card[data-wmn-handle]');\n      var apologyHidden = emptyEl && emptyEl.hidden;\n      if (hasCards || !apologyHidden) return;\n      similarLabel = '';\n      clearExplainState();\n      lastPaintKey = '';\n      paintItems([], 'results', { forceWipe: true });\n    }, 1000);\n  }\n\n  function applyExplainFromQuery(query, graph, likeLane) {\n    similarLabel = '';\n    if (likeLane && likeLane.n) {\n      var likePhrase = likePhraseFromQuery(query);\n      var bareLike =\n        !!likePhrase &&\n        (!graph ||\n          !graph.intent ||\n          !graph.intent.entities ||\n          !graph.intent.entities.length);\n      if (bareLike) {\n        similarLabel = likeLane.n;\n        setExplainState({\n          similarTo: likeLane.n,\n          genres: (likeLane.g || []).slice(),\n          countries: (likeLane.c || []).slice(),\n          densify: false\n        });\n        return;\n      }\n    }\n    if (graph && graph.intent) {\n      var fromIntent = explainStateFromGraphIntent(graph.intent);\n      if (fromIntent) {\n        setExplainState(fromIntent);\n        return;\n      }\n    }\n    clearExplainState();\n  }\n\n  function paintOptimistic(query) {\n    var ranked = optimisticItems(query);\n    if (ranked.length) {\n      clearSuppressEmptyWatch();\n      applyExplainFromQuery(query, graphRankQuery(query), null);\n      paintItems(ranked, 'results');\n      return;\n    }\n    // Claim results mode immediately so settle/warm cannot flash personalized\n    // For you over a miss while similarTo / live MB resolves. Do NOT flash\n    // the apology yet \u2014 that only paints after similar/live fully fails\n    // (Eric Clapton was showing \"Sorry\" for 1\u20132s before blues arrived).\n    similarLabel = '';\n    clearExplainState();\n    paintItems([], 'results', {\n      skipMissFallback: true,\n      suppressEmpty: true\n    });\n    armSuppressEmptyWatch(requestSeq);\n    paintSimilarToQuery(query, requestSeq);\n  }\n\n  function searchAndRender(query, opts) {\n    opts = opts || {};\n    var norm = normalizeQuery(query);\n    if (!norm) return;\n\n    var cached = cacheLookup(query);\n    if (cached && cached.exact && !opts.force) {\n      var cachedRanked = fuzzyRank(query, cached.mapped) || cached.mapped;\n      applyExplainFromQuery(query, graphRankQuery(query), null);\n      paintItems(cachedRanked, 'results');\n      return;\n    }\n\n    var seq = ++requestSeq;\n    if (abortCtrl && abortCtrl.abort) {\n      try {\n        abortCtrl.abort();\n      } catch (e) {}\n    }\n    abortCtrl =\n      typeof AbortController !== 'undefined' ? new AbortController() : null;\n\n    // Trailing * made Shopify return the whole catalog for unknown artists\n    // (e.g. Tinariwen* \u2192 270 hits). Only wildcard very short prefix queries.\n    var qParam = query;\n    if (String(query || '').replace(/^\\s+|\\s+$/g, '').length <= 2) {\n      qParam = query + '*';\n    }\n    var url =\n      shopRoot() +\n      'search?type=product&q=' +\n      encodeURIComponent(qParam) +\n      '&view=json';\n\n    var fetchOpts = { credentials: 'same-origin' };\n    if (abortCtrl) fetchOpts.signal = abortCtrl.signal;\n\n    fetch(url, fetchOpts)\n      .then(function (res) {\n        if (!res.ok) throw new Error('search ' + res.status);\n        return res.json();\n      })\n      .then(function (payload) {\n        if (seq !== requestSeq) return;\n        var raw = (payload && payload.results) || [];\n        var mapped = [];\n        for (var i = 0; i < raw.length; i++) {\n          var m = mapSearchResult(raw[i]);\n          if (m) mapped.push(m);\n        }\n        cachePut(query, mapped);\n\n        // \"like Tinariwen\" OOV: resolve neighbour lane (affinity / live MB),\n        // seed graph expand, then fall back to Similar-to path.\n        var likePhrase = likePhraseFromQuery(query);\n        var seeds = likePhrase\n          ? seedHandlesFromItems(likePhrase, mapped)\n          : [];\n        var g = window.wmnCatalogGraph;\n        var lanePromise = Promise.resolve(null);\n        if (likePhrase && g && typeof g.resolveLikeLane === 'function') {\n          lanePromise = Promise.resolve(g.ensureLoaded ? g.ensureLoaded() : null)\n            .then(function () {\n              return g.resolveLikeLane(likePhrase);\n            })\n            .catch(function () {\n              return null;\n            });\n        } else if (\n          likePhrase &&\n          g &&\n          typeof g.ensureAffinity === 'function'\n        ) {\n          lanePromise = Promise.resolve(g.ensureAffinity()).then(function () {\n            return typeof g.resolveLikeLaneSync === 'function'\n              ? g.resolveLikeLaneSync(likePhrase)\n              : null;\n          });\n        }\n\n        return lanePromise.then(function (likeLane) {\n          if (seq !== requestSeq) return;\n          var graph = graphRankQuery(query, {\n            seedHandles: seeds,\n            likeLane: likeLane || null\n          });\n          var pool = mapped;\n          if (graph && graph.items && graph.items.length) {\n            pool = mergePools(graph.items, mapped);\n          }\n          var ranked = fuzzyRank(query, pool, {\n            seedHandles: seeds,\n            likeLane: likeLane || null\n          });\n          if (ranked.length) {\n            applyExplainFromQuery(query, graph, likeLane || null);\n            paintItems(ranked, 'results');\n            return;\n          }\n          paintSimilarToQuery(query, seq);\n        });\n      })\n      .catch(function (err) {\n        if (err && err.name === 'AbortError') return;\n        if (seq !== requestSeq) return;\n        paintSimilarToQuery(query, seq);\n      });\n  }\n\n  /**\n   * No exact catalog hit \u2192 show similar WMN artists/releases.\n   * In-catalog: artists.*.g / *.r + product-emb centroid.\n   * OOV: affinity map (MusicBrainz-baked) + embedding nearest neighbours.\n   */\n  function paintMissFallback() {\n    clearSuppressEmptyWatch();\n    similarLabel = '';\n    clearExplainState();\n    lastPaintKey = '';\n    paintItems([], 'results', { forceWipe: true });\n  }\n\n  function paintSimilarItems(g, sim) {\n    if (!sim || !sim.handles || !sim.handles.length) {\n      paintMissFallback();\n      return;\n    }\n    clearSuppressEmptyWatch();\n    similarLabel = sim.similarTo || '';\n    setExplainState(explainStateFromSimilar(sim));\n    var items = [];\n    var i;\n    for (i = 0; i < sim.handles.length; i++) {\n      var card =\n        typeof g.productCard === 'function'\n          ? g.productCard(sim.handles[i])\n          : null;\n      if (card) items.push(card);\n    }\n    if (!items.length) {\n      paintMissFallback();\n      return;\n    }\n    paintItems(items, 'results');\n  }\n\n  /** True when the discover input still matches the query we resolved for. */\n  function queryStillActive(query) {\n    try {\n      var live = '';\n      if (root) {\n        var input =\n          document.querySelector(\n            '.wmn-header__search input[name=\"q\"], .header_search_form input[name=\"q\"], [data-dropdown=\"search\"] input[name=\"q\"]'\n          ) || null;\n        if (input) live = inputValue(input);\n      }\n      return normalizeQuery(live) === normalizeQuery(query);\n    } catch (e) {\n      return true;\n    }\n  }\n\n  function paintSimilarToQuery(query, seq) {\n    if (\n      !window.wmnCatalogGraph ||\n      typeof window.wmnCatalogGraph.ensureLoaded !== 'function'\n    ) {\n      paintMissFallback();\n      return;\n    }\n    var g = window.wmnCatalogGraph;\n    // \"like Tinariwen\" / \"sounds like Bombino\" \u2192 resolve artist phrase only.\n    // Passing the full string misses affinity keys and poisons live MB.\n    var artistQ = likePhraseFromQuery(query) || query;\n\n    function stale() {\n      // Same typed query: allow miss paint even if searchAndRender bumped seq\n      // (that bump used to cancel optimistic similar and leave a black panel).\n      if (seq == null) return false;\n      if (seq === requestSeq) return false;\n      return !queryStillActive(query);\n    }\n\n    Promise.resolve(g.ensureLoaded())\n      .then(function () {\n        if (typeof g.ensureAffinity === 'function') return g.ensureAffinity();\n        return null;\n      })\n      .then(function () {\n        if (stale()) return { done: true };\n        if (typeof g.similarToQuery !== 'function') {\n          paintMissFallback();\n          return { done: true };\n        }\n        var sim = g.similarToQuery(artistQ, { limit: GRID_LIMIT });\n        if (sim && sim.handles && sim.handles.length) {\n          paintSimilarItems(g, sim);\n          return { done: true };\n        }\n        // Baked miss \u2192 live MusicBrainz lane (specific WMN genres only).\n        if (typeof g.fetchLiveAffinity !== 'function') {\n          paintMissFallback();\n          return { done: true };\n        }\n        return g.fetchLiveAffinity(artistQ).then(function (row) {\n          return { done: false, liveRow: row };\n        });\n      })\n      .then(function (state) {\n        if (!state || state.done) return;\n        if (stale()) return;\n        var simLive = g.similarToQuery(artistQ, {\n          limit: GRID_LIMIT,\n          liveRow: state.liveRow\n        });\n        paintSimilarItems(g, simLive);\n      })\n      .catch(function () {\n        if (stale()) return;\n        paintMissFallback();\n      });\n  }\n\n  function syncFromInput(input) {\n    var q = inputValue(input);\n    if (!q) {\n      if (debounceTimer) {\n        clearTimeout(debounceTimer);\n        debounceTimer = null;\n      }\n      var toFlush = pendingSearchSignalQuery || lastSearchSignal;\n      if (searchSignalTimer) {\n        clearTimeout(searchSignalTimer);\n        searchSignalTimer = null;\n      }\n      var bounce = mode === 'results' && isBounceClear();\n      if (bounce) {\n        // Noise gate: open \u2192 clear <800ms, no dwell/click \u2014 do not inject.\n        pendingSearchSignalQuery = '';\n        lastSearchSignal = '';\n        if (\n          window.wmnIntentField &&\n          typeof window.wmnIntentField.onBounceClear === 'function'\n        ) {\n          try {\n            window.wmnIntentField.onBounceClear(toFlush || '');\n          } catch (eB) {\n            /* ignore */\n          }\n        }\n        if (\n          window.wmnIntentAnalytics &&\n          typeof window.wmnIntentAnalytics.log === 'function'\n        ) {\n          try {\n            window.wmnIntentAnalytics.log({\n              type: 'bounce_clear',\n              q: toFlush || null,\n              mode: mode,\n              meta: {\n                elapsedMs: resultsShownAt ? Date.now() - resultsShownAt : null\n              }\n            });\n          } catch (eLog) {\n            /* ignore */\n          }\n        }\n        try {\n          window.__wmnTypedPrefsDirty = false;\n        } catch (eD) {\n          /* ignore */\n        }\n        resetResultsSession();\n        requestSeq++;\n        // Bounce clears the typed inject, but if the field still owns For you\n        // from earlier settles, do not fall back to seed bestsellers.\n        if (\n          (settleRankPrimed && rankedCache && rankedCache.length) ||\n          fieldOwnsForYou() ||\n          fieldHasEnergyNodes() ||\n          hasEntityPrefs()\n        ) {\n          paintForYouNow('bounce-clear');\n          resetVisibilityTracking();\n        } else {\n          paintEmptyState();\n        }\n        return;\n      }\n      if (toFlush) commitSearchSignal(toFlush);\n      pendingSearchSignalQuery = '';\n      // Allow the same genre to re-signal after clear \u2192 type again.\n      lastSearchSignal = '';\n      resetResultsSession();\n      requestSeq++;\n      var dirty = consumeTypedPrefsDirty();\n      var fieldOwns = fieldOwnsForYou() || fieldHasEnergyNodes();\n      // Empty input: nuclear For you when settle/prefs/field, else empty seed.\n      if (\n        dirty ||\n        (settleRankPrimed && rankedCache && rankedCache.length) ||\n        fieldOwns ||\n        hasEntityPrefs()\n      ) {\n        paintForYouNow('clear');\n        logClearRemount();\n        resetVisibilityTracking();\n      } else {\n        paintEmptyState();\n      }\n      return;\n    }\n\n    // Debounced entity bump from typed query (search as signal)\n    scheduleSearchSignal(q);\n\n    // Instant local/cached paint \u2014 no debounce.\n    paintOptimistic(q);\n\n    var cached = cacheLookup(q);\n    if (cached && cached.exact) {\n      if (debounceTimer) {\n        clearTimeout(debounceTimer);\n        debounceTimer = null;\n      }\n      return;\n    }\n\n    if (debounceTimer) clearTimeout(debounceTimer);\n    // Keep network search tight \u2014 optimistic local paint already filled the grid.\n    var wait = q.length <= 2 ? 0 : DEBOUNCE_MS;\n    debounceTimer = setTimeout(function () {\n      debounceTimer = null;\n      searchAndRender(q);\n    }, wait);\n  }\n\n  function headerBottom() {\n    var sticky = qs('.sticky_nav.sticky_nav--stick');\n    var bottom = 0;\n    if (sticky) {\n      var sr = sticky.getBoundingClientRect();\n      if (sr.height > 40 && sr.top > -8 && sr.top < 12 && sr.bottom > 40) {\n        bottom = Math.max(sr.bottom, 48);\n      }\n    }\n    if (!bottom) {\n      var bar =\n        qs('.wmn-header-shell .wmn-header__bar') ||\n        qs('.wmn-header-shell .header') ||\n        qs('.wmn-header-shell') ||\n        qs('#header');\n      if (!bar) return 56;\n      var rect = bar.getBoundingClientRect();\n      if (rect.bottom <= 0 || rect.top > 80) return 56;\n      bottom = Math.max(rect.bottom, 48);\n    }\n\n    var promo =\n      qs('.wmn-header-shell .promo_banner') ||\n      qs('#header .promo_banner') ||\n      qs('.promo_banner');\n    if (promo) {\n      var ps = window.getComputedStyle(promo);\n      if (ps.display !== 'none' && ps.visibility !== 'hidden') {\n        var pr = promo.getBoundingClientRect();\n        if (pr.height > 0) {\n          bottom = Math.max(bottom, pr.bottom);\n          var shell = qs('.wmn-header-shell .header') || qs('.wmn-header-shell');\n          if (shell) {\n            bottom = Math.max(bottom, shell.getBoundingClientRect().bottom);\n          }\n        }\n      }\n    }\n    var topBar = qs('.wmn-header-shell .top_bar');\n    if (topBar) {\n      var ts = window.getComputedStyle(topBar);\n      if (ts.display !== 'none' && ts.visibility !== 'hidden') {\n        var tr = topBar.getBoundingClientRect();\n        if (tr.height > 0) bottom = Math.max(bottom, tr.bottom);\n      }\n    }\n\n    return Math.round(Math.max(bottom, 48));\n  }\n\n  function setTopOffset() {\n    if (!root) return;\n    document.documentElement.style.setProperty(\n      '--wmn-discover-top',\n      headerBottom() + 'px'\n    );\n  }\n\n  function hideClassicAutocomplete() {\n    qsa('.search__results-wrapper, .search__results').forEach(function (el) {\n      el.style.display = 'none';\n    });\n  }\n\n  function scheduleWarm(input, showT0) {\n    pendingShowInput = input || pendingShowInput;\n    if (warmScheduled) {\n      return;\n    }\n    warmScheduled = true;\n    var t0 = showT0 || performance.now();\n    var runWarm = function () {\n      warmScheduled = false;\n      if (!open) return;\n      var inp = pendingShowInput;\n      var q = inp ? inputValue(inp) : '';\n      if (inp) {\n        if (!q) warmGraphThenRender();\n        else syncFromInput(inp);\n      } else {\n        warmGraphThenRender();\n      }\n      requestAnimationFrame(function () {\n        setTopOffset();\n        resetVisibilityTracking();\n      });\n    };\n    if (typeof window.requestAnimationFrame === 'function') {\n      requestAnimationFrame(function () {\n        requestAnimationFrame(runWarm);\n      });\n    } else {\n      setTimeout(runWarm, 0);\n    }\n  }\n\n  function show(input) {\n    if (!root) return;\n    var showT0 = performance.now();\n    var early = false;\n    try {\n      early = !!window.__wmnDiscoverEarlyOpen;\n    } catch (eEarly) {\n      early = false;\n    }\n    var chromeAlready =\n      open ||\n      early ||\n      (!root.hidden && root.classList.contains('is-open'));\n\n    // Early head-open already flipped is-open. Do NOT re-run setTopOffset /\n    // setPanelChrome layout work in the same turn \u2014 that delayed first paint\n    // ~200\u2013300ms under CPU\u00D74/6 after early open (H-C).\n    if (!chromeAlready) {\n      if (input && inputValue(input)) {\n        setPanelChrome('results', true);\n      } else {\n        setPanelChrome('bestsellers', true);\n      }\n      root.hidden = false;\n      root.classList.add('is-open');\n      root.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('wmn-discover-open');\n      hideClassicAutocomplete();\n    } else {\n      // Adopt early chrome; light class sync only (no layout reads).\n      root.hidden = false;\n      root.classList.add('is-open');\n      root.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('wmn-discover-open');\n      if (input && inputValue(input) && mode !== 'results') {\n        setPanelChrome('results', true);\n      }\n    }\n    open = true;\n    if (!openedAt) openedAt = Date.now();\n    suppressNextOutsideClose = false;\n    // Claim bandwidth for SSR covers immediately \u2014 don't wait for warm rAF.\n    prioritizeFirstRowCovers();\n\n    // Yield so the browser can paint chrome BEFORE ranking / grid HTML.\n    scheduleWarm(input, showT0);\n  }\n\n  function hide() {\n    if (!root) return;\n    if (coverSrcObserver) {\n      try {\n        coverSrcObserver.disconnect();\n      } catch (eObs) {\n        /* ignore */\n      }\n      coverSrcObserver = null;\n    }\n    if (debounceTimer) {\n      clearTimeout(debounceTimer);\n      debounceTimer = null;\n    }\n    requestSeq++;\n    if (abortCtrl && abortCtrl.abort) {\n      try {\n        abortCtrl.abort();\n      } catch (e) {}\n    }\n    clearHoverTimer();\n    if (visibilityObserver) {\n      try {\n        visibilityObserver.disconnect();\n      } catch (e2) {\n        /* ignore */\n      }\n      visibilityObserver = null;\n    }\n    visibleLogged = {};\n    resetResultsSession();\n    root.hidden = true;\n    root.classList.remove('is-open');\n    root.setAttribute('aria-hidden', 'true');\n    try {\n      root.style.display = '';\n    } catch (eDisp) {\n      /* ignore */\n    }\n    document.body.classList.remove('wmn-discover-open');\n    open = false;\n    warmScheduled = false;\n    pendingShowInput = null;\n    lastPointerShowAt = 0;\n    try {\n      window.__wmnDiscoverEarlyOpen = false;\n    } catch (eEarly) {\n      /* ignore */\n    }\n  }\n\n  function inputValue(input) {\n    return (input && input.value ? input.value : '').replace(/^\\s+|\\s+$/g, '');\n  }\n\n  function isHeaderSearchInput(input) {\n    return !!(\n      input &&\n      input.name === 'q' &&\n      input.closest &&\n      input.closest(\n        '.wmn-header__search, .header_search_form, [data-dropdown=\"search\"]'\n      )\n    );\n  }\n\n  function isSearchChrome(el) {\n    return !!(el && el.closest && el.closest(SEARCH_SAFE));\n  }\n\n  function isDiscoverPanel(el) {\n    return !!(\n      el &&\n      el.closest &&\n      el.closest('#wmn-search-discover .wmn-search-discover__panel')\n    );\n  }\n\n  function syncQueryClass(input) {\n    if (!input || !input.closest) return;\n    var form = input.closest('form');\n    if (!form) return;\n    if (inputValue(input).length > 0) form.classList.add('wmn-has-query');\n    else form.classList.remove('wmn-has-query');\n  }\n\n  function clearAndClose(fromBtn) {\n    if (withinIgnoreWindow()) return;\n    var form = fromBtn && fromBtn.closest ? fromBtn.closest('form') : null;\n    var input = form\n      ? form.querySelector('input[name=\"q\"]')\n      : document.activeElement;\n    var hadQuery = !!(input && input.name === 'q' && inputValue(input).length);\n    if (hadQuery) {\n      // Commit typed settle once, then remount For you once.\n      // Do NOT dispatch input \u2014 that used to fire a second nuclear wipe mid-hydrate\n      // and leave empty cover divs even after imageCache was full.\n      var toFlush = pendingSearchSignalQuery || lastSearchSignal;\n      if (toFlush) {\n        flushSearchSignal(toFlush);\n      }\n      pendingSearchSignalQuery = '';\n      lastSearchSignal = '';\n      resetResultsSession();\n      requestSeq++;\n      if (input && input.name === 'q') {\n        input.value = '';\n        syncQueryClass(input);\n      }\n      paintForYouNow('clear-btn');\n      logClearRemount();\n      resetVisibilityTracking();\n      if (input && input.focus) {\n        try {\n          /* preventScroll: clear must not yank homepage scroll position */\n          if (typeof input.focus.call === 'function') {\n            input.focus({ preventScroll: true });\n          } else {\n            input.focus();\n          }\n        } catch (eF) {\n          try {\n            input.focus();\n          } catch (eF2) {\n            /* ignore */\n          }\n        }\n      }\n      return;\n    }\n    if (input && input.name === 'q') {\n      input.value = '';\n      syncQueryClass(input);\n      try {\n        input.dispatchEvent(new Event('input', { bubbles: true }));\n        input.dispatchEvent(new Event('change', { bubbles: true }));\n      } catch (err) {}\n    }\n    hide();\n    if (input && input.blur) input.blur();\n  }\n\n  function onFocus(e) {\n    var input = e.target;\n    if (!isHeaderSearchInput(input)) return;\n    // pointerdown already opened chrome \u2014 skip duplicate show on same gesture.\n    if (open && Date.now() - lastPointerShowAt < 400) {\n      syncQueryClass(input);\n      scheduleWarm(input, performance.now());\n      return;\n    }\n    syncQueryClass(input);\n    show(input);\n  }\n\n  function onFocusOut(e) {\n    var input = e.target;\n    if (!isHeaderSearchInput(input)) return;\n    // Flush pending typed signal; do not remount For you while query still has text.\n    var toFlush = pendingSearchSignalQuery || inputValue(input);\n    if (toFlush) flushSearchSignal(toFlush);\n  }\n\n  function onInput(e) {\n    var input = e.target;\n    if (!isHeaderSearchInput(input)) return;\n    syncQueryClass(input);\n    if (!open) show(input);\n    else {\n      hideClassicAutocomplete();\n      syncFromInput(input);\n    }\n  }\n\n  function onSearchPointerDown(e) {\n    // Ignore legacy mousedown duplicates if any remain bound.\n    if (e && e.type === 'mousedown') return;\n    var el = eventEl(e.target);\n    if (!isSearchChrome(el)) return;\n    suppressNextOutsideClose = true;\n\n    if (el.closest && el.closest('[data-wmn-search-clear]')) return;\n\n    var input = null;\n    if (el.name === 'q') {\n      input = el;\n    } else if (el.closest) {\n      var form = el.closest('form');\n      if (form) input = form.querySelector('input[name=\"q\"]');\n    }\n    // Mobile icon opens dropdown then focuses input \u2014 still open discover chrome.\n    if (!input && el.closest && el.closest('.icon-search, a[data-dropdown-rel=\"search\"]')) {\n      input =\n        qs('.wmn-header__search input[name=\"q\"]') ||\n        qs('[data-dropdown=\"search\"] input[name=\"q\"]') ||\n        qs('.header_search_form input[name=\"q\"]');\n    }\n    if (!input || !isHeaderSearchInput(input)) {\n      // Icon-only path: open chrome without a resolved input.\n      if (el.closest && el.closest('.icon-search, a[data-dropdown-rel=\"search\"]')) {\n        lastPointerShowAt = Date.now();\n        show(null);\n      }\n      return;\n    }\n\n    syncQueryClass(input);\n    lastPointerShowAt = Date.now();\n    show(input);\n  }\n\n  function onClearClick(e) {\n    var el = eventEl(e.target);\n    if (!el || !el.closest) return;\n    var btn = el.closest('[data-wmn-search-clear]');\n    if (!btn) return;\n    e.preventDefault();\n    e.stopPropagation();\n    clearAndClose(btn);\n  }\n\n  function tryOutsideClose(e) {\n    if (!open) return;\n    if (suppressNextOutsideClose) {\n      suppressNextOutsideClose = false;\n      return;\n    }\n    if (withinIgnoreWindow()) return;\n\n    var t = eventEl(e.target);\n    if (!t) return;\n    if (t.closest && t.closest('[data-wmn-discover-close]')) {\n      hide();\n      return;\n    }\n    if (isDiscoverPanel(t)) return;\n    if (isSearchChrome(t)) return;\n    hide();\n  }\n\n  function onKey(e) {\n    if (e.key === 'Escape' && open) {\n      hide();\n      var active = document.activeElement;\n      if (active && active.blur) active.blur();\n      return;\n    }\n    // Enter: flush settle immediately (don't wait out SEARCH_SIGNAL_MS).\n    // Exact genre queries \u2192 tag collection (avoids Shopify body/semantic false hits).\n    if (e.key === 'Enter') {\n      var input = e.target;\n      if (!isHeaderSearchInput(input)) {\n        input = document.activeElement;\n      }\n      if (!isHeaderSearchInput(input)) return;\n      var q = pendingSearchSignalQuery || inputValue(input);\n      if (q && normalizeQuery(q).length >= 2) {\n        flushSearchSignal(q);\n      }\n      var genreSlug = exactGenreSlug(q);\n      if (genreSlug) {\n        var dest = genreCollectionUrl(genreSlug);\n        if (dest) {\n          e.preventDefault();\n          window.location.href = dest;\n        }\n      }\n    }\n  }\n\n  function clearHoverTimer() {\n    if (hoverTimer) {\n      clearTimeout(hoverTimer);\n      hoverTimer = null;\n    }\n    hoverHandle = null;\n    hoverStartedAt = 0;\n  }\n\n  function resetVisibilityTracking() {\n    visibleLogged = {};\n    cardSeenAt = {};\n    if (visibilityObserver) {\n      try {\n        visibilityObserver.disconnect();\n      } catch (e) {\n        /* ignore */\n      }\n      visibilityObserver = null;\n    }\n    if (!open || !grid || typeof window.IntersectionObserver !== 'function') {\n      return;\n    }\n    var timers = {};\n    visibilityObserver = new IntersectionObserver(\n      function (entries) {\n        for (var i = 0; i < entries.length; i++) {\n          var entry = entries[i];\n          var card = entry.target;\n          var handle = card.getAttribute('data-wmn-handle');\n          if (!handle) continue;\n          if (entry.isIntersecting && entry.intersectionRatio >= 0.5) {\n            if (!cardSeenAt[handle]) cardSeenAt[handle] = Date.now();\n            if (visibleLogged[handle] || timers[handle]) continue;\n            timers[handle] = setTimeout(function (h, el) {\n              return function () {\n                timers[h] = null;\n                if (!open || visibleLogged[h]) return;\n                var rect = el.getBoundingClientRect();\n                if (rect.height < 8 || rect.bottom < 0 || rect.top > window.innerHeight) {\n                  return;\n                }\n                visibleLogged[h] = true;\n                markResultsEngaged(h);\n                if (\n                  window.wmnIntentAnalytics &&\n                  typeof window.wmnIntentAnalytics.log === 'function'\n                ) {\n                  var artistEl = el.querySelector('.wmn-search-discover__artist');\n                  try {\n                    window.wmnIntentAnalytics.log({\n                      type: 'visible',\n                      handle: h,\n                      dwellMs: 1500,\n                      artist: artistEl\n                        ? (artistEl.textContent || '').trim()\n                        : null,\n                      mode: mode\n                    });\n                  } catch (err) {\n                    /* ignore */\n                  }\n                }\n                if (\n                  window.wmnIntentField &&\n                  typeof window.wmnIntentField.onVisible === 'function'\n                ) {\n                  try {\n                    window.wmnIntentField.onVisible(h, 1500);\n                    if (window.wmnIntentField.learnFromSignal) {\n                      window.wmnIntentField.learnFromSignal('visible', true, {\n                        handle: h\n                      });\n                    }\n                  } catch (errF) {\n                    /* ignore */\n                  }\n                }\n              };\n            }(handle, card), 1500);\n          } else {\n            // Left viewport \u2014 scroll-past if briefly seen\n            if (timers[handle]) {\n              clearTimeout(timers[handle]);\n              timers[handle] = null;\n            }\n            if (cardSeenAt[handle] && !cardEngaged[handle] && !scrollPastDone[handle]) {\n              var dur = Date.now() - cardSeenAt[handle];\n              delete cardSeenAt[handle];\n              if (dur > 0 && dur < SCROLL_PAST_MS) {\n                scrollPastDone[handle] = true;\n                emitSkip(handle, 'scroll_past', dur);\n              }\n            } else if (cardSeenAt[handle]) {\n              delete cardSeenAt[handle];\n            }\n          }\n        }\n      },\n      { threshold: [0.5] }\n    );\n    var cards = grid.querySelectorAll('.wmn-search-discover__card[data-wmn-handle]');\n    for (var c = 0; c < cards.length; c++) {\n      visibilityObserver.observe(cards[c]);\n    }\n  }\n\n  function onDiscoverHover(e) {\n    if (!open || !root) return;\n    var el = eventEl(e.target);\n    if (!el || !el.closest) return;\n    var card = el.closest('.wmn-search-discover__card');\n    var related =\n      e.relatedTarget && e.relatedTarget.closest\n        ? e.relatedTarget.closest('.wmn-search-discover__card')\n        : null;\n\n    if (e.type === 'pointerover') {\n      if (!card || !root.contains(card)) return;\n      if (related === card) return;\n      var handle = card.getAttribute('data-wmn-handle');\n      if (!handle) return;\n      if (hoverHandle === handle && hoverTimer) return;\n      clearHoverTimer();\n      hoverHandle = handle;\n      hoverStartedAt = Date.now();\n      hoverTimer = setTimeout(function () {\n        var dwell = Date.now() - hoverStartedAt;\n        hoverTimer = null;\n        if (dwell < 500) return;\n        markResultsEngaged(handle);\n        var artistEl = card.querySelector('.wmn-search-discover__artist');\n        if (\n          window.wmnIntentAnalytics &&\n          typeof window.wmnIntentAnalytics.log === 'function'\n        ) {\n          try {\n            window.wmnIntentAnalytics.log({\n              type: 'hover',\n              handle: handle,\n              dwellMs: dwell,\n              artist: artistEl ? (artistEl.textContent || '').trim() : null,\n              mode: mode\n            });\n          } catch (err) {\n            /* ignore */\n          }\n        }\n        if (\n          window.wmnIntentField &&\n          typeof window.wmnIntentField.onHover === 'function'\n        ) {\n          try {\n            window.wmnIntentField.onHover(handle, dwell);\n            if (window.wmnIntentField.learnFromSignal) {\n              window.wmnIntentField.learnFromSignal('hover', true, {\n                handle: handle\n              });\n            }\n          } catch (errF) {\n            /* ignore */\n          }\n        }\n      }, 500);\n      return;\n    }\n\n    if (e.type === 'pointerout' || e.type === 'pointercancel') {\n      if (!card || !root.contains(card)) {\n        clearHoverTimer();\n        return;\n      }\n      if (related === card) return;\n      if (hoverHandle === card.getAttribute('data-wmn-handle')) {\n        clearHoverTimer();\n      }\n    }\n  }\n\n  function onDiscoverCardClick(e) {\n    var el = eventEl(e.target);\n    if (!el || !el.closest) return;\n    var card = el.closest('.wmn-search-discover__card');\n    if (!card) return;\n    if (root && !root.contains(card)) return;\n    var handle = card.getAttribute('data-wmn-handle') || handleFromUrl(card.getAttribute('href'));\n    if (!handle) return;\n    markResultsEngaged(handle);\n    var nameEl = card.querySelector('.wmn-search-discover__name');\n    var artistEl = card.querySelector('.wmn-search-discover__artist');\n    // Prefer the live input (what they see typed), then last settled query.\n    var qLive = '';\n    try {\n      var inp =\n        document.querySelector(\n          '.wmn-header__search input[name=\"q\"], .header_search_form input[name=\"q\"], [data-dropdown=\"search\"] input[name=\"q\"]'\n        ) || null;\n      qLive = normalizeQuery(inputValue(inp));\n    } catch (eQ) {\n      qLive = '';\n    }\n    var qClick = qLive || lastFlushedQuery || normalizeQuery(activeDiscoverQuery());\n    if (\n      window.wmnEngagement &&\n      typeof window.wmnEngagement.recordSearchClick === 'function'\n    ) {\n      try {\n        window.wmnEngagement.recordSearchClick({\n          handle: handle,\n          title: nameEl ? (nameEl.textContent || '').trim() : '',\n          artist: artistEl ? (artistEl.textContent || '').trim() : '',\n          kind: 'search_click',\n          q: qClick\n        });\n      } catch (err) {\n        /* ignore */\n      }\n    }\n  }\n\n  function bind() {\n    if (bound) return;\n    bound = true;\n    document.addEventListener('focusin', onFocus, true);\n    document.addEventListener('focusout', onFocusOut, true);\n    document.addEventListener('input', onInput, true);\n    document.addEventListener('keyup', onInput, true);\n    document.addEventListener('click', onClearClick, true);\n    document.addEventListener('click', onDiscoverCardClick, true);\n    document.addEventListener('pointerdown', onSearchPointerDown, true);\n    document.addEventListener('pointerdown', tryOutsideClose, false);\n    document.addEventListener('keydown', onKey, true);\n    // Search form submit (button / enter) \u2014 same exact-genre collection redirect.\n    document.addEventListener(\n      'submit',\n      function (e) {\n        var form = e.target;\n        if (!form || !form.querySelector) return;\n        var input =\n          form.querySelector(\n            '.wmn-header__search input[name=\"q\"], .header_search_form input[name=\"q\"], input[name=\"q\"]'\n          ) || null;\n        if (!input || !isHeaderSearchInput(input)) return;\n        var q = inputValue(input);\n        var genreSlug = exactGenreSlug(q);\n        if (!genreSlug) return;\n        var dest = genreCollectionUrl(genreSlug);\n        if (!dest) return;\n        e.preventDefault();\n        window.location.href = dest;\n      },\n      true\n    );\n    if (root) {\n      root.addEventListener('pointerover', onDiscoverHover, true);\n      root.addEventListener('pointerout', onDiscoverHover, true);\n      root.addEventListener('pointercancel', onDiscoverHover, true);\n    }\n    window.addEventListener(\n      'resize',\n      function () {\n        if (open) setTopOffset();\n      },\n      { passive: true }\n    );\n    window.addEventListener(\n      'scroll',\n      function () {\n        if (open) setTopOffset();\n      },\n      { passive: true }\n    );\n    document.addEventListener('wmn:preferences-updated', function () {\n      invalidateRankedCache();\n      // Do NOT remount the open grid from dwell/prefs updates.\n      // Visible cards \u2192 learn \u2192 remount \u2192 new visibles was an infinite thrash.\n      // Intentional remounts: search settle, clear, warm open, and rail-affinity.\n    });\n    document.addEventListener('wmn:intent-field-updated', function () {\n      invalidateRankedCache();\n      // Learning from visible/hover on discover cards must not reshuffle the open panel.\n    });\n    // Rough Guides (and other) rails: live remount For you \u2014 safe because\n    // discover visibility observers are not the signal source (no thrash loop).\n    var railAffinityTimer = 0;\n    document.addEventListener('wmn:rail-affinity', function () {\n      invalidateRankedCache();\n      if (!open) return;\n      var q = '';\n      try {\n        var active = document.activeElement;\n        if (isHeaderSearchInput(active)) q = inputValue(active);\n        if (!q) {\n          var inp = document.querySelector(\n            '.wmn-header__search input[name=\"q\"], .header_search_form input[name=\"q\"]'\n          );\n          q = inputValue(inp);\n        }\n      } catch (eQ) {\n        q = '';\n      }\n      if (q) return; // only reshuffle empty-query For you / Best Sellers\n      if (railAffinityTimer) clearTimeout(railAffinityTimer);\n      railAffinityTimer = setTimeout(function () {\n        railAffinityTimer = 0;\n        if (!open) return;\n        var q2 = '';\n        try {\n          var active2 = document.activeElement;\n          if (isHeaderSearchInput(active2)) q2 = inputValue(active2);\n          if (!q2) {\n            var inp2 = document.querySelector(\n              '.wmn-header__search input[name=\"q\"], .header_search_form input[name=\"q\"]'\n            );\n            q2 = inputValue(inp2);\n          }\n        } catch (eQ2) {\n          q2 = '';\n        }\n        if (q2) return;\n        function paint() {\n          settleRankPrimed = false;\n          rankedCache = null;\n          rankedCacheAt = 0;\n          paintCachedForYouNuclear('rail-affinity');\n          resetVisibilityTracking();\n        }\n        try {\n          if (\n            window.wmnCatalogGraph &&\n            typeof window.wmnCatalogGraph.ensureLoaded === 'function'\n          ) {\n            window.wmnCatalogGraph.ensureLoaded().then(paint).catch(paint);\n            return;\n          }\n        } catch (eLoad) {\n          /* fall through */\n        }\n        paint();\n      }, 450);\n    });\n  }\n\n  function boot() {\n    root = document.getElementById('wmn-search-discover');\n    if (!root) return;\n    grid = qs('[data-wmn-discover-grid]', root);\n    emptyEl = qs('[data-wmn-discover-empty]', root);\n    titleEl = qs('[data-wmn-discover-title]', root) || qs('.wmn-search-discover__title', root);\n    whyEl = qs('[data-wmn-discover-why]', root);\n    panelEl = qs('.wmn-search-discover__panel', root);\n    bind();\n    // Prefetch sales-ranked Best Sellers so cold open matches all-time order\n    warmBestSellersSalesOrder();\n    var active = document.activeElement;\n    var early = false;\n    try {\n      early = !!window.__wmnDiscoverEarlyOpen;\n    } catch (eEarly) {\n      early = false;\n    }\n    if (isHeaderSearchInput(active)) {\n      show(active);\n    } else if (early && root.classList.contains('is-open')) {\n      // Early chrome opened before this script parsed \u2014 fill grid now.\n      open = true;\n      openedAt = Date.now();\n      var input =\n        qs('.wmn-header__search input[name=\"q\"]') ||\n        qs('.header_search_form input[name=\"q\"]');\n      show(input || null);\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else {\n    boot();\n  }\n\n  document.addEventListener('shopify:section:load', function () {\n    bound = false;\n    data = null;\n    try {\n      window.__wmnBsSalesWarm = null;\n    } catch (eReset) {\n      /* ignore */\n    }\n    boot();\n  });\n\n  if (window.InstantClick) {\n    try {\n      InstantClick.on('change', function () {\n        hide();\n        bound = false;\n        data = null;\n        try {\n          window.__wmnBsSalesWarm = null;\n        } catch (eIc) {\n          /* ignore */\n        }\n        setTimeout(boot, 0);\n      });\n    } catch (err) {}\n  }\n})();\n"],
  "mappings": "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",
  "names": ["root", "data", "a", "appendRest"]
}
