{"version":3,"names":["window","__stacksPinnedBannerInit","FEATURED_TOPIC_IDS","FEATURED_HOP_TO_LATEST_TAG","SNACKS_TAG","SNACKS_PREVIEW_SKIP_RE","MAX_FEATURED","TOP_MENU","Set","CACHE_KEY","CACHE_TTL_MS","renderGeneration","inFlight","lastRenderedKey","lastHideIds","mountObserver","clearBannerTimer","lastNetworkFetchAt","rateLimitedUntil","NETWORK_MIN_INTERVAL_MS","isAuthRoute","path","location","pathname","replace","segment","split","filter","Boolean","test","body","document","some","name","classList","contains","isTopicRoute","isTopicListPage","startsWith","has","getTextLib","require","formatFeaturedExcerpt","content","textLib","hasHtml","sanitize","emojiUnescape","html","escapeHtml","text","String","stripHtml","el","createElement","innerHTML","textContent","trim","formatRelative","iso","then","Date","getTime","diff","now","days","Math","floor","toLocaleDateString","undefined","month","day","readCache","raw","sessionStorage","getItem","parsed","JSON","parse","ts","cards","Array","isArray","length","c","excerpt","writeCache","setItem","stringify","fetchTopicById","id","res","fetch","credentials","headers","Accept","status","noteRateLimit","ok","data","json","topic","slug","title","fancy_title","posts_count","last_posted_at","category_id","pinned","pinned_globally","tags","highest_post_number","categories","category","hideFromList","fetchFeaturedTopics","featured","seen","entry","add","push","topics","topic_list","categoryFor","find","topicHasTag","tagName","tag","toLowerCase","stripSnacksPlaceholderPlain","match","slice","indexOf","stripSnacksPlaceholderFromCooked","cooked","root","remove","passed","child","childNodes","forEach","node","firstChild","nodeType","Node","TEXT_NODE","ELEMENT_NODE","cookedForFeaturedExcerpt","finalizeSnacksExcerpt","plain","excerptFromCooked","out","chars","max","appendText","normalized","chunk","appendChild","createTextNode","walk","cloneNode","before","isUsableFeaturedPost","post","hidden","action_code","fetchLatestUsablePost","topicId","fromPostNumber","n","Number","i","postRes","retryAfter","get","waitMs","isFinite","canFetchNetwork","force","enrichTopic","existingCategory","hopToLatest","topicHasHopToLatestTag","latestPostNumber","highestPostNumber","postedAt","created_at","from","post_stream","posts","featuredTopicUrl","base","postNumber","buildCard","card","className","dataset","url","excerptHtml","activityAt","hideWelcomeBanner","querySelectorAll","style","display","hideDuplicateListRows","topicIds","ids","row","clearBanner","clearTimeout","scheduleClearBanner","setTimeout","onRouteChange","setDiscoveryPage","scheduleNetworkRefresh","active","toggle","ensureMount","querySelector","liveMount","featuredGridHasCards","ensureBannerShell","mount","host","banner","setAttribute","insertBefore","paintCards","grid","nodes","frag","createDocumentFragment","replaceChildren","paintCachedCards","cached","map","color","join","excerptFromTopic","renderFeaturedBanner","options","forceNetwork","allowNetwork","ensureMountObserver","generation","entries","Promise","all","enriched","key","e","missingExcerpt","liveBanner","domMissingExcerpt","hideIds","retryBanner","retryGrid","scheduleDomRepair","__stacksPinnedBannerTimer","__stacksPinnedBannerNetTimer","MutationObserver","__stacksPinnedBannerWatchTimer","bannerMissing","listNeedsHide","observe","childList","subtree","bootFeaturedBanner","__stacksPinnedBannerEvents","addEventListener","readyState"],"sources":["theme-7-inline-common-header-2.js"],"sourcesContent":["\n(function () {\n  if (window.__stacksPinnedBannerInit) {\n    return;\n  }\n  window.__stacksPinnedBannerInit = true;\n\n  // Optional manual curation — set topic IDs here to feature specific posts\n  // (leave empty to auto-use globally pinned topics).\n  const FEATURED_TOPIC_IDS = [];\n\n  // Topics with this tag link to their latest post from Featured cards (admin-only tag).\n  const FEATURED_HOP_TO_LATEST_TAG = \"featured-hop-to-latest\";\n\n  // Stacks Snacks OP boilerplate — skip in Featured previews for tag:snacks.\n  const SNACKS_TAG = \"snacks\";\n  const SNACKS_PREVIEW_SKIP_RE =\n    /View this on stackssnacks\\.com and subscribe to receive updates via email\\.?/i;\n\n  const MAX_FEATURED = 3;\n  const TOP_MENU = new Set([\n    \"latest\",\n    \"new\",\n    \"hot\",\n    \"unread\",\n    \"top\",\n    \"categories\",\n    \"\",\n  ]);\n  const CACHE_KEY = \"stacks-featured-banner-v10\";\n  const CACHE_TTL_MS = 5 * 60 * 1000;\n\n  let renderGeneration = 0;\n  let inFlight = null;\n  let lastRenderedKey = \"\";\n  let lastHideIds = [];\n  let mountObserver = null;\n  let clearBannerTimer = null;\n  let lastNetworkFetchAt = 0;\n  let rateLimitedUntil = 0;\n  const NETWORK_MIN_INTERVAL_MS = 60 * 1000;\n\n  function isAuthRoute() {\n    const path = window.location.pathname.replace(/\\/$/, \"\") || \"/\";\n    const segment = path.split(\"/\").filter(Boolean)[0] || \"\";\n    if (/^(login|signup|register|session|password-reset)$/i.test(segment)) {\n      return true;\n    }\n    if (/^\\/invites?(\\/|$)/i.test(path)) {\n      return true;\n    }\n    const body = document.body;\n    if (!body) {\n      return false;\n    }\n    return [\n      \"login-page\",\n      \"signup-page\",\n      \"invite-page\",\n      \"password-reset-page\",\n      \"activate-account-page\",\n    ].some((name) => body.classList.contains(name));\n  }\n\n  function isTopicRoute() {\n    const path = window.location.pathname.replace(/\\/$/, \"\") || \"/\";\n    // /t/slug/id — individual topics must never show Featured\n    if (/^\\/t(\\/|$)/i.test(path)) {\n      return true;\n    }\n    const body = document.body;\n    if (!body) {\n      return false;\n    }\n    return (\n      body.classList.contains(\"archetype-regular\") ||\n      body.classList.contains(\"archetype-banner\") ||\n      body.classList.contains(\"archetype-private_message\")\n    );\n  }\n\n  function isTopicListPage() {\n    if (isAuthRoute() || isTopicRoute()) {\n      return false;\n    }\n    const path = window.location.pathname.replace(/\\/$/, \"\") || \"/\";\n    if (path === \"/admin\" || path.startsWith(\"/admin/\")) {\n      return false;\n    }\n    const body = document.body;\n    if (body?.classList.contains(\"admin-interface\")) {\n      return false;\n    }\n    // Path is authoritative. Do NOT require body.navigation-* — Ember drops\n    // those classes briefly during SPA transitions and used to clearBanner().\n    const segment = path.split(\"/\").filter(Boolean)[0] || \"\";\n    return TOP_MENU.has(segment);\n  }\n\n  function getTextLib() {\n    try {\n      if (typeof window.require === \"function\") {\n        return window.require(\"discourse/lib/text\");\n      }\n    } catch {\n      /* Discourse app not booted yet */\n    }\n    return null;\n  }\n\n  function formatFeaturedExcerpt(content) {\n    if (!content) {\n      return \"\";\n    }\n\n    const textLib = getTextLib();\n    const hasHtml = /<[a-z][\\s\\S]*>/i.test(content);\n\n    if (hasHtml) {\n      if (textLib?.sanitize) {\n        return textLib.sanitize(content);\n      }\n      return content;\n    }\n\n    if (textLib?.emojiUnescape) {\n      const html = textLib.emojiUnescape(content);\n      if (textLib.sanitize) {\n        return textLib.sanitize(html);\n      }\n      return html;\n    }\n\n    return escapeHtml(content);\n  }\n\n  function escapeHtml(text) {\n    return String(text || \"\")\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/\"/g, \"&quot;\");\n  }\n\n  function stripHtml(html) {\n    const el = document.createElement(\"div\");\n    el.innerHTML = html || \"\";\n    return (el.textContent || \"\").replace(/\\s+/g, \" \").trim();\n  }\n\n  function formatRelative(iso) {\n    if (!iso) {\n      return \"\";\n    }\n    const then = new Date(iso).getTime();\n    const diff = Date.now() - then;\n    const days = Math.floor(diff / 86400000);\n    if (days < 1) {\n      return \"Today\";\n    }\n    if (days === 1) {\n      return \"1d ago\";\n    }\n    if (days < 30) {\n      return `${days}d ago`;\n    }\n    return new Date(iso).toLocaleDateString(undefined, {\n      month: \"short\",\n      day: \"numeric\",\n    });\n  }\n\n  function readCache() {\n    try {\n      const raw = sessionStorage.getItem(CACHE_KEY);\n      if (!raw) {\n        return null;\n      }\n      const parsed = JSON.parse(raw);\n      if (!parsed?.ts || Date.now() - parsed.ts > CACHE_TTL_MS) {\n        return null;\n      }\n      const cards = Array.isArray(parsed.cards) ? parsed.cards : null;\n      // Poisoned cache (empty excerpts) must not paint — it also sets\n      // lastRenderedKey and can block a later successful refresh.\n      if (!cards?.length || cards.some((c) => !c?.excerpt)) {\n        return null;\n      }\n      return cards;\n    } catch {\n      return null;\n    }\n  }\n\n  function writeCache(cards) {\n    try {\n      sessionStorage.setItem(\n        CACHE_KEY,\n        JSON.stringify({ ts: Date.now(), cards })\n      );\n    } catch {\n      /* private mode / quota */\n    }\n  }\n\n  async function fetchTopicById(id) {\n    try {\n      const res = await fetch(`/t/${id}.json`, {\n        credentials: \"same-origin\",\n        headers: { Accept: \"application/json\" },\n      });\n      if (res.status === 429) {\n        noteRateLimit(res);\n        return null;\n      }\n      if (!res.ok) {\n        return null;\n      }\n      const data = await res.json();\n      if (!data.id) {\n        return null;\n      }\n      return {\n        topic: {\n          id: data.id,\n          slug: data.slug,\n          title: data.title,\n          fancy_title: data.fancy_title,\n          excerpt: data.excerpt,\n          posts_count: data.posts_count,\n          last_posted_at: data.last_posted_at,\n          category_id: data.category_id,\n          pinned: data.pinned,\n          pinned_globally: data.pinned_globally,\n          tags: data.tags || [],\n          highest_post_number: data.highest_post_number,\n        },\n        categories: data.category ? [data.category] : [],\n        hideFromList: true,\n      };\n    } catch {\n      return null;\n    }\n  }\n\n  async function fetchFeaturedTopics() {\n    const featured = [];\n    const seen = new Set();\n\n    for (const id of FEATURED_TOPIC_IDS) {\n      if (featured.length >= MAX_FEATURED || seen.has(id)) {\n        continue;\n      }\n      const entry = await fetchTopicById(id);\n      if (!entry) {\n        continue;\n      }\n      seen.add(entry.topic.id);\n      featured.push(entry);\n    }\n\n    if (featured.length >= MAX_FEATURED) {\n      return featured;\n    }\n\n    // One page is enough for globally pinned topics (they sort to the top).\n    const res = await fetch(`/latest.json?page=0`, {\n      credentials: \"same-origin\",\n      headers: { Accept: \"application/json\" },\n    });\n    if (res.status === 429) {\n      noteRateLimit(res);\n      return featured;\n    }\n    if (!res.ok) {\n      return featured;\n    }\n    const data = await res.json();\n    const topics = data.topic_list?.topics || [];\n    for (const topic of topics) {\n      if (!topic.pinned_globally || seen.has(topic.id)) {\n        continue;\n      }\n      seen.add(topic.id);\n      featured.push({\n        topic,\n        categories: data.categories || [],\n        hideFromList: true,\n      });\n      if (featured.length >= MAX_FEATURED) {\n        break;\n      }\n    }\n\n    return featured;\n  }\n\n  function categoryFor(topic, categories) {\n    return categories.find((c) => c.id === topic.category_id) || null;\n  }\n\n  function topicHasTag(topic, tagName) {\n    const tags = topic?.tags;\n    if (!Array.isArray(tags) || !tags.length) {\n      return false;\n    }\n    return tags.some((tag) => {\n      const name =\n        typeof tag === \"string\" ? tag : tag?.name || tag?.slug || \"\";\n      return name.toLowerCase() === String(tagName).toLowerCase();\n    });\n  }\n\n  function stripSnacksPlaceholderPlain(text) {\n    const raw = String(text || \"\");\n    const match = raw.match(SNACKS_PREVIEW_SKIP_RE);\n    if (!match) {\n      return raw.trim();\n    }\n    return raw\n      .slice(raw.indexOf(match[0]) + match[0].length)\n      .replace(/^[\\s\\u00a0.,;:—\\-–]+/, \"\")\n      .trim();\n  }\n\n  /* Drop the newsletter CTA (and anything before it) for snacks posts.\n     Match on textContent — the CTA wraps stackssnacks.com / subscribe in <a> tags. */\n  function stripSnacksPlaceholderFromCooked(cooked) {\n    if (!cooked) {\n      return \"\";\n    }\n\n    const root = document.createElement(\"div\");\n    root.innerHTML = cooked;\n    if (!SNACKS_PREVIEW_SKIP_RE.test(root.textContent || \"\")) {\n      return cooked;\n    }\n\n    const remove = [];\n    let passed = false;\n\n    for (const child of [...root.childNodes]) {\n      if (passed) {\n        break;\n      }\n      const text = child.textContent || \"\";\n      if (!SNACKS_PREVIEW_SKIP_RE.test(text)) {\n        remove.push(child);\n        continue;\n      }\n\n      // Marker lives in this node (often a <p> with linked words). Drop the\n      // whole block — remaining copy continues in following siblings.\n      remove.push(child);\n      passed = true;\n    }\n\n    remove.forEach((node) => node.remove());\n\n    // Trim leading <hr> / empty nodes after the CTA block.\n    while (root.firstChild) {\n      const node = root.firstChild;\n      if (node.nodeType === Node.TEXT_NODE && !String(node.textContent || \"\").trim()) {\n        node.remove();\n        continue;\n      }\n      if (\n        node.nodeType === Node.ELEMENT_NODE &&\n        /^(HR|BR)$/i.test(node.tagName)\n      ) {\n        node.remove();\n        continue;\n      }\n      if (\n        node.nodeType === Node.ELEMENT_NODE &&\n        !stripHtml(node.innerHTML || \"\").trim()\n      ) {\n        node.remove();\n        continue;\n      }\n      break;\n    }\n\n    return root.innerHTML;\n  }\n\n  function cookedForFeaturedExcerpt(cooked, topic) {\n    if (!topicHasTag(topic, SNACKS_TAG)) {\n      return cooked || \"\";\n    }\n    return stripSnacksPlaceholderFromCooked(cooked);\n  }\n\n  function finalizeSnacksExcerpt(excerpt, topic) {\n    if (!excerpt || !topicHasTag(topic, SNACKS_TAG)) {\n      return excerpt || \"\";\n    }\n    if (!SNACKS_PREVIEW_SKIP_RE.test(stripHtml(excerpt))) {\n      return excerpt;\n    }\n    // Last resort — plain-text strip if HTML path left the CTA in the snippet.\n    const plain = stripSnacksPlaceholderPlain(stripHtml(excerpt));\n    return plain ? formatFeaturedExcerpt(plain) : \"\";\n  }\n\n  function excerptFromCooked(cooked) {\n    if (!cooked) {\n      return \"\";\n    }\n\n    const root = document.createElement(\"div\");\n    root.innerHTML = cooked;\n\n    const out = document.createElement(\"div\");\n    let chars = 0;\n    const max = 180;\n\n    function appendText(text) {\n      const normalized = text.replace(/\\s+/g, \" \");\n      if (!normalized.trim()) {\n        return;\n      }\n\n      let chunk = normalized;\n      if (chars + chunk.length > max) {\n        chunk = chunk.slice(0, max - chars).trim();\n        if (chunk.length < normalized.length) {\n          chunk += \"…\";\n        }\n      }\n      chars += chunk.length;\n      out.appendChild(document.createTextNode(chunk));\n    }\n\n    function walk(node) {\n      if (chars >= max) {\n        return;\n      }\n\n      for (const child of node.childNodes) {\n        if (chars >= max) {\n          break;\n        }\n        if (child.nodeType === Node.TEXT_NODE) {\n          appendText(child.textContent || \"\");\n        } else if (child.nodeType === Node.ELEMENT_NODE) {\n          if (child.tagName === \"IMG\" && child.classList.contains(\"emoji\")) {\n            out.appendChild(child.cloneNode(true));\n          } else if (child.tagName === \"A\") {\n            appendText(child.textContent || \"\");\n          } else {\n            const before = chars;\n            walk(child);\n            if (\n              before < chars &&\n              chars < max &&\n              /^(P|DIV|H[1-6]|LI|UL|OL|BLOCKQUOTE|BR)$/i.test(child.tagName)\n            ) {\n              appendText(\" \");\n            }\n          }\n        }\n      }\n    }\n\n    walk(root);\n    const html = out.innerHTML.trim();\n    if (html) {\n      return html;\n    }\n\n    const text = stripHtml(cooked);\n    return text.length > 180 ? `${text.slice(0, 180).trim()}…` : text;\n  }\n\n  function isUsableFeaturedPost(post) {\n    if (!post || post.hidden) {\n      return false;\n    }\n    // Small actions (pin/unpin, etc.) have action_code and empty cooked.\n    if (post.action_code) {\n      return false;\n    }\n    return Boolean(post.cooked && String(post.cooked).trim());\n  }\n\n  async function fetchLatestUsablePost(topicId, fromPostNumber) {\n    let n = Number(fromPostNumber) || 0;\n    // Walk back past system/small-action posts (pin toggles, etc.).\n    for (let i = 0; i < 12 && n > 1; i += 1, n -= 1) {\n      try {\n        const postRes = await fetch(`/posts/by_number/${topicId}/${n}.json`, {\n          credentials: \"same-origin\",\n          headers: { Accept: \"application/json\" },\n        });\n        if (postRes.status === 429) {\n          noteRateLimit(postRes);\n          return null;\n        }\n        if (!postRes.ok) {\n          continue;\n        }\n        const post = await postRes.json();\n        if (isUsableFeaturedPost(post)) {\n          return post;\n        }\n      } catch {\n        /* try older post */\n      }\n    }\n    return null;\n  }\n\n  function noteRateLimit(res) {\n    // Honor Retry-After when present; otherwise back off for a minute.\n    const retryAfter = Number(res?.headers?.get?.(\"Retry-After\"));\n    const waitMs =\n      Number.isFinite(retryAfter) && retryAfter > 0\n        ? retryAfter * 1000\n        : 60 * 1000;\n    rateLimitedUntil = Date.now() + waitMs;\n  }\n\n  function canFetchNetwork(force) {\n    const now = Date.now();\n    if (now < rateLimitedUntil) {\n      return false;\n    }\n    if (!force && now - lastNetworkFetchAt < NETWORK_MIN_INTERVAL_MS) {\n      return false;\n    }\n    return true;\n  }\n\n  async function enrichTopic(topic, existingCategory) {\n    const hopToLatest = topicHasHopToLatestTag(topic);\n    const latestPostNumber =\n      topic.highest_post_number || topic.highestPostNumber;\n\n    try {\n      let cooked = \"\";\n      let postedAt = topic.last_posted_at;\n      let category = existingCategory || null;\n\n      if (hopToLatest && latestPostNumber && latestPostNumber > 1) {\n        const post = await fetchLatestUsablePost(topic.id, latestPostNumber);\n        if (post) {\n          cooked = post.cooked || \"\";\n          postedAt = post.created_at || postedAt;\n        }\n      }\n\n      if (!cooked || !category) {\n        const res = await fetch(`/t/${topic.id}.json`, {\n          credentials: \"same-origin\",\n          headers: { Accept: \"application/json\" },\n        });\n        if (res.status === 429) {\n          noteRateLimit(res);\n          return {\n            excerpt: finalizeSnacksExcerpt(\n              excerptFromCooked(cookedForFeaturedExcerpt(cooked, topic)),\n              topic\n            ),\n            postedAt,\n            category,\n          };\n        }\n        if (res.ok) {\n          const data = await res.json();\n          if (!category) {\n            category = data.category || null;\n          }\n          if (!cooked) {\n            if (hopToLatest) {\n              const from =\n                data.highest_post_number || latestPostNumber || 0;\n              const post = await fetchLatestUsablePost(topic.id, from);\n              if (post) {\n                cooked = post.cooked || \"\";\n                postedAt = post.created_at || postedAt;\n              }\n            }\n            if (!cooked) {\n              cooked = data.post_stream?.posts?.[0]?.cooked || \"\";\n              if (!hopToLatest) {\n                postedAt =\n                  data.post_stream?.posts?.[0]?.created_at ||\n                  data.created_at ||\n                  postedAt;\n              }\n            }\n          }\n        }\n      }\n\n      return {\n        excerpt: finalizeSnacksExcerpt(\n          excerptFromCooked(cookedForFeaturedExcerpt(cooked, topic)),\n          topic\n        ),\n        category,\n        postedAt,\n      };\n    } catch {\n      return {\n        excerpt: \"\",\n        category: existingCategory || null,\n        postedAt: topic.last_posted_at,\n      };\n    }\n  }\n\n  function topicHasHopToLatestTag(topic) {\n    return topicHasTag(topic, FEATURED_HOP_TO_LATEST_TAG);\n  }\n\n  function featuredTopicUrl(topic) {\n    const base = `/t/${topic.slug}/${topic.id}`;\n    if (!topicHasHopToLatestTag(topic)) {\n      return base;\n    }\n    const postNumber = topic.highest_post_number || topic.highestPostNumber;\n    if (postNumber && postNumber > 1) {\n      return `${base}/${postNumber}`;\n    }\n    return base;\n  }\n\n  function buildCard(topic, category, excerpt, postedAt) {\n    const card = document.createElement(\"article\");\n    card.className = \"stacks-pinned-card\";\n    card.dataset.topicId = String(topic.id);\n\n    const url = featuredTopicUrl(topic);\n    const title = stripHtml(topic.fancy_title || topic.title);\n    const excerptHtml = excerpt ? formatFeaturedExcerpt(excerpt) : \"\";\n    const activityAt = postedAt || topic.last_posted_at;\n\n    card.innerHTML =\n      `<a class=\"stacks-pinned-card__link\" href=\"${url}\">` +\n      `<div class=\"stacks-pinned-card__meta\">` +\n      `<span class=\"stacks-pinned-card__badge\">Featured</span>` +\n      `<span class=\"stacks-pinned-card__stat\">${Math.max(0, topic.posts_count - 1)} replies</span>` +\n      `<span class=\"stacks-pinned-card__stat\">${formatRelative(activityAt)}</span>` +\n      `</div>` +\n      `<h2 class=\"stacks-pinned-card__title\">${escapeHtml(title)}</h2>` +\n      (excerptHtml\n        ? `<p class=\"stacks-pinned-card__excerpt\">${excerptHtml}</p>`\n        : \"\") +\n      `<span class=\"stacks-pinned-card__cta\">Read topic →</span>` +\n      `</a>`;\n\n    return card;\n  }\n\n  function hideWelcomeBanner() {\n    document\n      .querySelectorAll(\n        \".welcome-banner, .custom-search-banner-wrap, .search-banner\"\n      )\n      .forEach((el) => {\n        el.hidden = true;\n        el.style.display = \"none\";\n      });\n  }\n\n  function hideDuplicateListRows(topicIds) {\n    if (Array.isArray(topicIds)) {\n      lastHideIds = topicIds.slice();\n    }\n    const ids = lastHideIds;\n    if (!ids.length) {\n      return;\n    }\n    for (const id of ids) {\n      document\n        .querySelectorAll(`.topic-list tbody tr[data-topic-id=\"${id}\"]`)\n        .forEach((row) => {\n          row.classList.add(\"stacks-pinned-banner-hidden\");\n          row.hidden = true;\n        });\n    }\n  }\n\n  function clearBanner() {\n    window.clearTimeout(clearBannerTimer);\n    clearBannerTimer = null;\n    // Invalidate any in-flight home render so it can't re-paint after we leave.\n    renderGeneration += 1;\n    lastRenderedKey = \"\";\n    lastHideIds = [];\n    document.body.classList.remove(\"stacks-pinned-banner-active\");\n    document.body.classList.remove(\"stacks-discovery-banner\");\n    document\n      .querySelectorAll(\".stacks-pinned-banner\")\n      .forEach((el) => el.remove());\n  }\n\n  // Soft-nav from Latest leaves our injected banner in #main-outlet (Ember\n  // doesn't own that node). Clear immediately on known topic routes; only\n  // debounce when the path is ambiguous during discovery SPA flicker.\n  function scheduleClearBanner() {\n    if (isTopicRoute() || isAuthRoute()) {\n      clearBanner();\n      return;\n    }\n    window.clearTimeout(clearBannerTimer);\n    clearBannerTimer = window.setTimeout(() => {\n      clearBannerTimer = null;\n      if (!isTopicListPage()) {\n        clearBanner();\n      }\n    }, 120);\n  }\n\n  function onRouteChange() {\n    if (!isTopicListPage()) {\n      scheduleClearBanner();\n      setDiscoveryPage(false);\n      return;\n    }\n    scheduleNetworkRefresh(true);\n  }\n\n  function setDiscoveryPage(active) {\n    document.body.classList.toggle(\"stacks-discovery-banner\", active);\n  }\n\n  function ensureMount() {\n    return (\n      document.querySelector(\"#main-outlet\") ||\n      document.querySelector(\"#main-outlet-wrapper\")\n    );\n  }\n\n  function liveMount() {\n    return (\n      document.querySelector(\"#main-outlet\") ||\n      document.querySelector(\"#main-outlet-wrapper\")\n    );\n  }\n\n  function featuredGridHasCards() {\n    return Boolean(document.querySelector(\".stacks-pinned-banner .stacks-pinned-card\"));\n  }\n\n  function ensureBannerShell(mount) {\n    if (!isTopicListPage()) {\n      return null;\n    }\n\n    const host = mount && document.contains(mount) ? mount : liveMount();\n    if (!host) {\n      return null;\n    }\n\n    document.body.classList.add(\"stacks-pinned-banner-active\");\n\n    let banner =\n      host.querySelector(\":scope > .stacks-pinned-banner\") ||\n      document.querySelector(\"#main-outlet > .stacks-pinned-banner\");\n    if (banner && !document.contains(banner)) {\n      banner = null;\n    }\n    if (!banner) {\n      banner = document.createElement(\"section\");\n      banner.className = \"stacks-pinned-banner\";\n      banner.setAttribute(\"aria-label\", \"Featured topics\");\n      banner.innerHTML =\n        '<div class=\"stacks-pinned-banner__inner\">' +\n        '<div class=\"stacks-pinned-banner__grid\"></div>' +\n        \"</div>\";\n      host.insertBefore(banner, host.firstChild);\n    } else {\n      // Drop legacy eyebrow label if an older shell is still mounted\n      banner.querySelector(\".stacks-pinned-banner__eyebrow\")?.remove();\n    }\n\n    return banner;\n  }\n\n  function paintCards(grid, nodes) {\n    const frag = document.createDocumentFragment();\n    for (const node of nodes) {\n      frag.appendChild(node);\n    }\n    grid.replaceChildren(frag);\n  }\n\n  function paintCachedCards(banner, cached) {\n    const grid = banner.querySelector(\".stacks-pinned-banner__grid\");\n    if (!grid || !cached.length) {\n      return false;\n    }\n    const nodes = cached.map((c) =>\n      buildCard(\n        {\n          id: c.id,\n          slug: c.slug,\n          title: c.title,\n          fancy_title: c.title,\n          posts_count: c.posts_count,\n          last_posted_at: c.last_posted_at,\n          tags: c.hopToLatest ? [{ name: FEATURED_HOP_TO_LATEST_TAG }] : [],\n          highest_post_number: c.highestPostNumber,\n        },\n        c.category\n          ? { name: c.category.name, color: c.category.color }\n          : null,\n        c.excerpt || \"\",\n        c.last_posted_at\n      )\n    );\n    paintCards(grid, nodes);\n    hideDuplicateListRows(cached.map((c) => c.id));\n    lastRenderedKey = cached.map((c) => c.id).join(\",\");\n    return true;\n  }\n\n  function excerptFromTopic(topic) {\n    const raw = topic.excerpt || \"\";\n    if (!raw || raw === topic.fancy_title || raw === topic.title) {\n      return \"\";\n    }\n    let text = stripHtml(raw).replace(/\\s+/g, \" \").trim();\n    if (!text) {\n      return \"\";\n    }\n    if (topicHasTag(topic, SNACKS_TAG)) {\n      text = stripSnacksPlaceholderPlain(text);\n      if (!text) {\n        return \"\";\n      }\n    }\n    return text.length > 180 ? `${text.slice(0, 180).trim()}…` : text;\n  }\n\n  async function renderFeaturedBanner(options = {}) {\n    const forceNetwork = Boolean(options.forceNetwork);\n    const allowNetwork = options.allowNetwork !== false;\n\n    if (!isTopicListPage()) {\n      setDiscoveryPage(false);\n      scheduleClearBanner();\n      return;\n    }\n\n    window.clearTimeout(clearBannerTimer);\n    clearBannerTimer = null;\n    setDiscoveryPage(true);\n    hideWelcomeBanner();\n    ensureMountObserver();\n\n    const mount = liveMount();\n    if (!mount) {\n      return;\n    }\n\n    const cached = readCache();\n    if (cached?.length) {\n      const banner = ensureBannerShell(mount);\n      if (banner) {\n        paintCachedCards(banner, cached);\n      }\n    }\n    hideDuplicateListRows();\n\n    // Cache-only repair: if Ember replaced #main-outlet after a detached paint,\n    // repaint from cache. If the grid is still empty, allow a network refill.\n    if (!allowNetwork || !canFetchNetwork(forceNetwork)) {\n      if (!featuredGridHasCards() && cached?.length) {\n        const banner = ensureBannerShell(liveMount());\n        if (banner) {\n          paintCachedCards(banner, cached);\n        }\n      }\n      if (featuredGridHasCards() || !forceNetwork) {\n        return;\n      }\n    }\n\n    const generation = ++renderGeneration;\n\n    if (inFlight) {\n      try {\n        await inFlight;\n      } catch {\n        /* previous attempt failed — continue */\n      }\n      if (generation !== renderGeneration || !isTopicListPage()) {\n        return;\n      }\n    }\n\n    lastNetworkFetchAt = Date.now();\n\n    inFlight = (async () => {\n      let entries = [];\n      try {\n        entries = await fetchFeaturedTopics();\n      } catch {\n        // Network blip — keep whatever is already painted (cache/DOM).\n        return;\n      }\n      if (generation !== renderGeneration || !isTopicListPage()) {\n        return;\n      }\n\n      if (!entries.length) {\n        // Don't wipe a good cache paint on a transient empty response.\n        if (readCache()?.length || featuredGridHasCards()) {\n          return;\n        }\n        if (generation === renderGeneration) {\n          scheduleClearBanner();\n        }\n        return;\n      }\n\n      const cards = await Promise.all(\n        entries.map(async ({ topic, categories, hideFromList }) => {\n          let category = categoryFor(topic, categories);\n          const hopToLatest = topicHasHopToLatestTag(topic);\n          let excerpt = hopToLatest ? \"\" : excerptFromTopic(topic);\n          let postedAt = topic.last_posted_at;\n          const enriched = await enrichTopic(topic, category);\n          if (hopToLatest) {\n            excerpt = enriched.excerpt;\n            postedAt = enriched.postedAt || postedAt;\n          } else if (!excerpt) {\n            excerpt = enriched.excerpt;\n          }\n          excerpt = finalizeSnacksExcerpt(excerpt, topic);\n          if (!category && enriched.category) {\n            category = enriched.category;\n          }\n          return { topic, category, excerpt, postedAt, hideFromList };\n        })\n      );\n\n      if (generation !== renderGeneration || !isTopicListPage()) {\n        return;\n      }\n\n      const key = cards.map((e) => e.topic.id).join(\",\");\n      const missingExcerpt = cards.some((e) => !e.excerpt);\n      const liveBanner = ensureBannerShell(liveMount());\n      if (!liveBanner) {\n        return;\n      }\n      const domMissingExcerpt = Boolean(\n        liveBanner.querySelector(\".stacks-pinned-card\") &&\n          !liveBanner.querySelector(\".stacks-pinned-card__excerpt\")\n      );\n      if (\n        key === lastRenderedKey &&\n        liveBanner.querySelector(\".stacks-pinned-card\") &&\n        !missingExcerpt &&\n        !domMissingExcerpt\n      ) {\n        hideDuplicateListRows(\n          cards.filter((e) => e.hideFromList).map((e) => e.topic.id)\n        );\n        return;\n      }\n\n      const grid = liveBanner.querySelector(\".stacks-pinned-banner__grid\");\n      if (!grid) {\n        return;\n      }\n      paintCards(\n        grid,\n        cards.map(({ topic, category, excerpt, postedAt }) =>\n          buildCard(topic, category, excerpt, postedAt)\n        )\n      );\n\n      const hideIds = cards\n        .filter((e) => e.hideFromList)\n        .map((e) => e.topic.id);\n      hideDuplicateListRows(hideIds);\n      lastRenderedKey = key;\n\n      writeCache(\n        cards.map(({ topic, category, excerpt, postedAt }) => ({\n          id: topic.id,\n          slug: topic.slug,\n          title: stripHtml(topic.fancy_title || topic.title),\n          posts_count: topic.posts_count,\n          last_posted_at: postedAt || topic.last_posted_at,\n          excerpt,\n          hopToLatest: topicHasHopToLatestTag(topic),\n          highestPostNumber: topic.highest_post_number,\n          category: category\n            ? { name: category.name, color: category.color }\n            : null,\n        }))\n      );\n\n      // Ember often replaces #main-outlet after this await. Repaint onto\n      // whatever outlet is live now so cards aren't left on a detached node.\n      if (!featuredGridHasCards()) {\n        const retryBanner = ensureBannerShell(liveMount());\n        const retryGrid = retryBanner?.querySelector(\".stacks-pinned-banner__grid\");\n        if (retryGrid) {\n          paintCards(\n            retryGrid,\n            cards.map(({ topic, category, excerpt, postedAt }) =>\n              buildCard(topic, category, excerpt, postedAt)\n            )\n          );\n          hideDuplicateListRows(hideIds);\n        }\n      }\n    })();\n\n    try {\n      await inFlight;\n    } finally {\n      if (inFlight) {\n        inFlight = null;\n      }\n    }\n  }\n\n  function scheduleDomRepair() {\n    window.clearTimeout(window.__stacksPinnedBannerTimer);\n    window.__stacksPinnedBannerTimer = window.setTimeout(() => {\n      renderFeaturedBanner({ allowNetwork: false });\n    }, 0);\n  }\n\n  function scheduleNetworkRefresh(force) {\n    window.clearTimeout(window.__stacksPinnedBannerNetTimer);\n    window.__stacksPinnedBannerNetTimer = window.setTimeout(() => {\n      renderFeaturedBanner({ allowNetwork: true, forceNetwork: Boolean(force) });\n    }, 0);\n  }\n\n  function ensureMountObserver() {\n    if (mountObserver || typeof MutationObserver === \"undefined\") {\n      return;\n    }\n    const root =\n      document.querySelector(\"#main-outlet-wrapper\") ||\n      document.querySelector(\"#main\") ||\n      document.body;\n    if (!root) {\n      return;\n    }\n\n    mountObserver = new MutationObserver(() => {\n      window.clearTimeout(window.__stacksPinnedBannerWatchTimer);\n      window.__stacksPinnedBannerWatchTimer = window.setTimeout(() => {\n        if (!isTopicListPage()) {\n          // Outlet churn on topic pages used to no-op here, leaving a\n          // Latest-injected Featured shell stuck above the post.\n          if (document.querySelector(\".stacks-pinned-banner\")) {\n            scheduleClearBanner();\n          }\n          return;\n        }\n        const mount = ensureMount();\n        const bannerMissing = !document.querySelector(\".stacks-pinned-banner\");\n        const listNeedsHide =\n          lastHideIds.length > 0 &&\n          lastHideIds.some((id) => {\n            const row = document.querySelector(\n              `.topic-list tbody tr[data-topic-id=\"${id}\"]`\n            );\n            return (\n              row && !row.classList.contains(\"stacks-pinned-banner-hidden\")\n            );\n          });\n        if (\n          bannerMissing ||\n          listNeedsHide ||\n          !featuredGridHasCards() ||\n          !mount?.querySelector(\".stacks-pinned-banner\")\n        ) {\n          if (inFlight) {\n            hideDuplicateListRows();\n            return;\n          }\n          if (!featuredGridHasCards()) {\n            scheduleNetworkRefresh(true);\n          } else {\n            scheduleDomRepair();\n          }\n        } else {\n          hideDuplicateListRows();\n          hideWelcomeBanner();\n        }\n      }, 50);\n    });\n\n    mountObserver.observe(root, { childList: true, subtree: true });\n  }\n\n  function bootFeaturedBanner() {\n    ensureMountObserver();\n\n    if (!isTopicListPage()) {\n      scheduleClearBanner();\n    } else {\n      setDiscoveryPage(true);\n      hideWelcomeBanner();\n      const cached = readCache();\n      if (cached?.length) {\n        const banner = ensureBannerShell(liveMount());\n        if (banner) {\n          paintCachedCards(banner, cached);\n        }\n      }\n    }\n\n    if (isTopicListPage()) {\n      scheduleNetworkRefresh(true);\n    }\n    if (!window.__stacksPinnedBannerEvents) {\n      window.__stacksPinnedBannerEvents = true;\n      document.addEventListener(\"discourse:ready\", onRouteChange);\n      document.addEventListener(\"discourse:page-changed\", onRouteChange);\n      window.addEventListener(\"popstate\", onRouteChange);\n    }\n    window.setTimeout(() => {\n      if (!isTopicListPage()) {\n        scheduleClearBanner();\n        return;\n      }\n      if (inFlight || featuredGridHasCards()) {\n        if (featuredGridHasCards()) {\n          hideDuplicateListRows();\n        }\n        return;\n      }\n      scheduleNetworkRefresh(true);\n    }, 300);\n    window.setTimeout(() => {\n      if (!isTopicListPage()) {\n        scheduleClearBanner();\n        return;\n      }\n      if (inFlight || featuredGridHasCards()) {\n        return;\n      }\n      scheduleNetworkRefresh(true);\n    }, 1200);\n    window.setTimeout(() => {\n      if (!isTopicListPage()) {\n        scheduleClearBanner();\n        return;\n      }\n      if (inFlight || featuredGridHasCards()) {\n        return;\n      }\n      scheduleNetworkRefresh(true);\n    }, 2500);\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", bootFeaturedBanner);\n  } else {\n    bootFeaturedBanner();\n  }\n})();\n\n"],"mappings":"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","ignoreList":[]}