{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/tcg-singles-shop.js?cb=1781414538"],
  "sourcesContent": ["(() => {\r\n  /* kl24-singles-cart-drawer-v13 */\r\n  const CART_CLOSE_ICON =\r\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" class=\"icon icon-close\" viewBox=\"0 0 18 17\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z\"/></svg>';\r\n\r\n  const buildCartDrawerMarkup = () => `\r\n        <aside class=\"tcg-gap-cart-drawer__panel\" role=\"complementary\" aria-label=\"Dein Warenkorb\">\r\n          <header class=\"tcg-gap-cart-drawer__header\">\r\n            <h2 class=\"tcg-gap-cart-drawer__title\">Dein Warenkorb</h2>\r\n            <button type=\"button\" class=\"tcg-gap-cart-drawer__close\" data-singles-cart-close aria-label=\"Schlie\u00DFen\">\r\n              ${CART_CLOSE_ICON}\r\n            </button>\r\n          </header>\r\n          <p class=\"tcg-gap-cart-drawer__summary\" data-singles-cart-drawer-summary></p>\r\n          <ul class=\"tcg-gap-cart-drawer__list\" data-singles-cart-drawer-list></ul>\r\n          <div class=\"tcg-gap-cart-drawer__footer\">\r\n            <div class=\"tcg-gap-cart-drawer__total\" data-kl24-cart-drawer-total hidden>\r\n              <span class=\"tcg-gap-cart-drawer__total-label\">Zwischensumme</span>\r\n              <span class=\"tcg-gap-cart-drawer__total-value\" data-kl24-cart-drawer-total-value></span>\r\n            </div>\r\n            <p class=\"tcg-gap-cart-drawer__checkout-hint\" data-kl24-cart-checkout-hint hidden></p>\r\n            <a href=\"/checkout\" class=\"tcg-gap-filler__panel-btn tcg-gap-filler__panel-btn--primary tcg-gap-cart-drawer__checkout-btn\" data-kl24-cart-checkout>\r\n              Zur Kasse\r\n            </a>\r\n            <button type=\"button\" class=\"button tcg-gap-filler__panel-btn tcg-gap-filler__panel-btn--ghost tcg-gap-cart-drawer__close-btn\" data-singles-cart-close>\r\n              Schlie\u00DFen\r\n            </button>\r\n          </div>\r\n        </aside>`;\r\n\r\n  const root = document.querySelector('[data-tcg-singles-shop]');\r\n  if (!root) return;\r\n\r\n  const ensureCartChrome = () => {\r\n    let drawer = document.querySelector('[data-singles-cart-drawer]');\r\n    if (!drawer) {\r\n      drawer = document.createElement('div');\r\n      drawer.className = 'tcg-singles-cart-drawer tcg-gap-cart-drawer tcg-gap-cart-drawer--peek';\r\n      drawer.dataset.singlesCartDrawer = '';\r\n      drawer.hidden = true;\r\n      drawer.innerHTML = buildCartDrawerMarkup();\r\n      document.body.append(drawer);\r\n      window.Kl24CartDrawerCheckout?.bind(drawer);\r\n    } else {\r\n      drawer.classList.add('tcg-gap-cart-drawer--peek');\r\n      const panel = drawer.querySelector('.tcg-gap-cart-drawer__panel');\r\n      if (panel) {\r\n        panel.setAttribute('role', 'complementary');\r\n        panel.removeAttribute('aria-modal');\r\n      }\r\n      window.Kl24CartDrawerCheckout?.bind(drawer);\r\n      window.Kl24CartDrawerUI?.ensureFooterTotal(drawer);\r\n      if (drawer.parentElement !== document.body) {\r\n        document.body.append(drawer);\r\n      }\r\n    }\r\n\r\n    let stat = root.querySelector('[data-singles-cart-stat]');\r\n    let sidebarBtn = root.querySelector('[data-singles-view-cart]');\r\n    const sidebar = root.querySelector('.tcg-singles-shop__sidebar');\r\n    const filters = root.querySelector('.tcg-singles-shop__filters');\r\n    if (!stat && sidebar && filters) {\r\n      const widget = document.createElement('div');\r\n      widget.className = 'tcg-singles-shop__cart-widget';\r\n      widget.innerHTML = `\r\n        <div class=\"tcg-singles-shop__cart-widget-head\">\r\n          <h2 class=\"tcg-singles-shop__cart-widget-title\">Warenkorb</h2>\r\n        </div>\r\n        <p class=\"tcg-singles-shop__cart-widget-stat\" data-singles-cart-stat aria-live=\"polite\">\r\n          Noch keine Karten im Warenkorb\r\n        </p>\r\n        <button type=\"button\" class=\"button button--secondary tcg-singles-shop__cart-view-btn\" data-singles-view-cart>\r\n          Anzeigen\r\n        </button>`;\r\n      sidebar.insertBefore(widget, filters);\r\n      stat = widget.querySelector('[data-singles-cart-stat]');\r\n      sidebarBtn = widget.querySelector('[data-singles-view-cart]');\r\n    }\r\n\r\n    return {\r\n      cartStat: stat,\r\n      viewCartBtn: sidebarBtn,\r\n      cartDrawer: drawer,\r\n      cartDrawerList: drawer.querySelector('[data-singles-cart-drawer-list]'),\r\n      cartDrawerSummary: drawer.querySelector('[data-singles-cart-drawer-summary]'),\r\n    };\r\n  };\r\n\r\n  const chrome = ensureCartChrome();\r\n\r\n  const collectionHandle = root.dataset.collectionHandle || 'pokemon-singles';\r\n  const productsPerPage = Math.max(12, Number.parseInt(root.dataset.productsPerPage || '24', 10) || 24);\r\n  const priceLabel = root.dataset.priceLabel || 'Preis';\r\n\r\n  const grid = root.querySelector('[data-singles-grid]');\r\n  const stats = root.querySelector('[data-singles-stats]');\r\n  const feedback = root.querySelector('[data-singles-feedback]');\r\n  const pagination = root.querySelector('[data-singles-pagination]');\r\n  const filterGroups = root.querySelector('[data-singles-filter-groups]');\r\n  const searchInput = root.querySelector('[data-singles-search]');\r\n  const sortSelect = root.querySelector('[data-singles-sort]');\r\n  const clearFiltersBtn = root.querySelector('[data-singles-clear-filters]');\r\n  const stockFilterInput = root.querySelector('[data-singles-filter-stock]');\r\n  let cartStat = chrome.cartStat;\r\n  let viewCartBtn = chrome.viewCartBtn;\r\n  let cartDrawer = chrome.cartDrawer;\r\n  let cartDrawerList = chrome.cartDrawerList;\r\n  let cartDrawerSummary = chrome.cartDrawerSummary;\r\n\r\n  const CART_BUBBLE_SECTION = 'cart-icon-bubble';\r\n  const SHOPIFY_CART_SECTIONS = [CART_BUBBLE_SECTION, 'cart-drawer'];\r\n\r\n  /** @type {Array<object>} */\r\n  let shopifyCartItems = [];\r\n  /** @type {object|null} */\r\n  let shopifyCartSnapshot = null;\r\n  /** @type {Map<string, object>} */\r\n  let productByVariantId = new Map();\r\n\r\n  const PM_SKU_FULL = /^PM-([A-Z0-9]+)-(\\d+)-(\\d+)-([A-Z]{2,4})(?:-(?:RH|H|STD))?(?:-EN)?$/i;\r\n  const PM_SKU_SHORT = /^PM-([A-Z0-9]+)-(\\d+)-([A-Z]{2,4})(?:-(?:RH|H|STD))?(?:-EN)?$/i;\r\n  const POK_SKU = /^POK-([A-Z0-9]+)-(\\d+)-([A-Z]{2,4})$/i;\r\n  const CARD_NUM_RE = /(\\d+)\\s*\\/\\s*(\\d+)/;\r\n\r\n  const RARITY_MAP = {\r\n    h\u00E4ufig: 'H\u00E4ufig',\r\n    haufig: 'H\u00E4ufig',\r\n    common: 'H\u00E4ufig',\r\n    ungew\u00F6hnlich: 'Ungew\u00F6hnlich',\r\n    ungewohnlich: 'Ungew\u00F6hnlich',\r\n    uncommon: 'Ungew\u00F6hnlich',\r\n    selten: 'Selten',\r\n    rare: 'Selten',\r\n    'ultra selten': 'Ultra Selten',\r\n    'ultra rare': 'Ultra Selten',\r\n    doppelselten: 'Doppelselten',\r\n    'double rare': 'Doppelselten',\r\n    illustrationsselten: 'Illustrationsselten',\r\n    'illustration rare': 'Illustrationsselten',\r\n    hyperselten: 'Hyperselten',\r\n    'hyper rare': 'Hyperselten',\r\n    promo: 'Promo',\r\n  };\r\n\r\n  const ENERGY_TYPES = [\r\n    'feuer',\r\n    'wasser',\r\n    'pflanze',\r\n    'elektro',\r\n    'psycho',\r\n    'kampf',\r\n    'finsternis',\r\n    'metall',\r\n    'fee',\r\n    'drache',\r\n    'farblos',\r\n  ];\r\n\r\n  const ENERGY_LABELS = {\r\n    feuer: 'Feuer',\r\n    wasser: 'Wasser',\r\n    pflanze: 'Pflanze',\r\n    elektro: 'Elektro',\r\n    psycho: 'Psycho',\r\n    kampf: 'Kampf',\r\n    finsternis: 'Finsternis',\r\n    metall: 'Metall',\r\n    fee: 'Fee',\r\n    drache: 'Drache',\r\n    farblos: 'Farblos',\r\n  };\r\n\r\n  const FILTER_DEFS = [\r\n    { key: 'setCode', label: 'Set', defaultOpen: false },\r\n    { key: 'condition', label: 'Zustand', defaultOpen: false },\r\n    { key: 'rarity', label: 'Seltenheit', defaultOpen: false },\r\n    { key: 'energyType', label: 'Element', defaultOpen: true },\r\n    { key: 'finish', label: 'Holo / Druck', defaultOpen: false },\r\n    { key: 'language', label: 'Sprache', defaultOpen: false },\r\n  ];\r\n\r\n  const applyElementFromUrl = () => {\r\n    try {\r\n      const params = new URLSearchParams(window.location.search);\r\n      const raw = String(params.get('element') || params.get('energy') || '')\r\n        .trim()\r\n        .toLowerCase();\r\n      if (!raw) return;\r\n      const slug = raw\r\n        .replace(/\u00E4/g, 'ae')\r\n        .replace(/\u00F6/g, 'oe')\r\n        .replace(/\u00FC/g, 'ue')\r\n        .replace(/\u00DF/g, 'ss');\r\n      const label =\r\n        ENERGY_LABELS[slug] ||\r\n        Object.values(ENERGY_LABELS).find((name) => name.toLowerCase() === raw) ||\r\n        '';\r\n      if (!label) return;\r\n      activeFilters.energyType.add(label);\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n  };\r\n\r\n  const syncElementUrl = () => {\r\n    try {\r\n      const url = new URL(window.location.href);\r\n      const selected = [...activeFilters.energyType];\r\n      if (selected.length === 1) {\r\n        const slug =\r\n          Object.entries(ENERGY_LABELS).find(([, name]) => name === selected[0])?.[0] || '';\r\n        if (slug) url.searchParams.set('element', slug);\r\n        else url.searchParams.delete('element');\r\n      } else {\r\n        url.searchParams.delete('element');\r\n      }\r\n      url.searchParams.delete('energy');\r\n      window.history.replaceState({}, '', `${url.pathname}${url.search}${url.hash}`);\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n  };\r\n\r\n  const CONDITION_LABELS = {\r\n    NM: 'Near Mint (NM)',\r\n    EX: 'Excellent (EX)',\r\n    LP: 'Light Played (LP)',\r\n    MP: 'Moderate Played (MP)',\r\n    DMG: 'Damaged (DMG)',\r\n  };\r\n\r\n  /** @type {Map<string, string>} */\r\n  const setNameByCode = new Map();\r\n\r\n  /** SKU/Limitless codes that differ from tcg-sets-index set_code (mirrors backend/services/sets.py). */\r\n  const SET_CODE_ALIASES = {\r\n    RSV: 'WHT',\r\n    RSV10: 'WHT',\r\n    RSV10PT5: 'WHT',\r\n    RSV10PTS: 'WHT',\r\n    'WHITE FLARE': 'WHT',\r\n    WHITEFLARE: 'WHT',\r\n    'WHITE-FLARE': 'WHT',\r\n    'SV10.5W': 'WHT',\r\n    SV105W: 'WHT',\r\n  };\r\n\r\n  /** @type {Map<string, string>} setCode from SKU -> resolved German display name */\r\n  let setDisplayNameByCode = new Map();\r\n\r\n  const normalizeSetCode = (value) => {\r\n    const raw = String(value || '').trim().toUpperCase();\r\n    if (!raw) return raw;\r\n    if (SET_CODE_ALIASES[raw]) return SET_CODE_ALIASES[raw];\r\n    for (const [prefix, canonical] of Object.entries(SET_CODE_ALIASES)) {\r\n      if (raw.startsWith(prefix)) return canonical;\r\n    }\r\n    return raw;\r\n  };\r\n\r\n  /** Normalize \"Serie - Set\" \u2192 \"Set (Serie)\" when not already parenthesized. */\r\n  const formatSetDisplayName = (raw) => {\r\n    const s = String(raw || '').trim();\r\n    if (!s || s.includes(' (')) return s;\r\n    const idx = s.indexOf(' - ');\r\n    if (idx <= 0) return s;\r\n    const series = s.slice(0, idx).trim();\r\n    const set = s.slice(idx + 3).trim();\r\n    if (!series || !set) return s;\r\n    return `${set} (${series})`;\r\n  };\r\n\r\n  const lookupSetNameInIndex = (setCode) => {\r\n    const raw = String(setCode || '').trim().toUpperCase();\r\n    if (!raw) return '';\r\n    return setNameByCode.get(raw) || setNameByCode.get(normalizeSetCode(raw)) || '';\r\n  };\r\n\r\n  const registerSetIndexAliases = (entry) => {\r\n    const code = String(entry.set_code || '').trim().toUpperCase();\r\n    const name = formatSetDisplayName(String(entry.name || '').trim());\r\n    if (!code || !name) return;\r\n\r\n    setNameByCode.set(code, name);\r\n\r\n    const tcgdx = String(entry.tcgdex_id || '').trim().toLowerCase();\r\n    const svMatch = /^sv(\\d+)$/.exec(tcgdx);\r\n    if (svMatch) {\r\n      const major = Number.parseInt(svMatch[1], 10);\r\n      if (Number.isFinite(major)) {\r\n        setNameByCode.set(`SV${major}`, name);\r\n      }\r\n    }\r\n  };\r\n\r\n  const buildSetDisplayNameIndex = () => {\r\n    const map = new Map();\r\n    allProducts.forEach((product) => {\r\n      const code = String(product.setCode || '').trim();\r\n      const name = String(product.setName || '').trim();\r\n      if (!code || !name || map.has(code)) return;\r\n      map.set(code, name);\r\n    });\r\n    setDisplayNameByCode = map;\r\n  };\r\n\r\n  const CONDITION_SUFFIXES = ['NM', 'EX', 'LP', 'MP', 'DMG'];\r\n\r\n  const parseSetNameFromTitle = (title) => {\r\n    const raw = String(title || '').trim();\r\n    if (!raw.endsWith(')')) return '';\r\n\r\n    let depth = 0;\r\n    let start = -1;\r\n    for (let i = raw.length - 1; i >= 0; i -= 1) {\r\n      if (raw[i] === ')') depth += 1;\r\n      else if (raw[i] === '(') {\r\n        depth -= 1;\r\n        if (depth === 0) {\r\n          start = i;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (start < 0) return '';\r\n    return raw.slice(start + 1, raw.length - 1).trim();\r\n  };\r\n\r\n  const stripTrailingParenGroup = (text) => {\r\n    const raw = String(text || '').trim();\r\n    if (!raw.endsWith(')')) return raw;\r\n\r\n    let depth = 0;\r\n    let start = -1;\r\n    for (let i = raw.length - 1; i >= 0; i -= 1) {\r\n      if (raw[i] === ')') depth += 1;\r\n      else if (raw[i] === '(') {\r\n        depth -= 1;\r\n        if (depth === 0) {\r\n          start = i;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (start < 0) return raw;\r\n    return raw.slice(0, start).trim();\r\n  };\r\n\r\n  const buildDisplayTitle = (title, setName, cardNumber, condition) => {\r\n    let display = String(title || '').trim();\r\n    const code = String(condition || '').toUpperCase();\r\n\r\n    if (code) {\r\n      CONDITION_SUFFIXES.forEach((c) => {\r\n        display = display\r\n          .replaceAll(` (${c})`, '')\r\n          .replaceAll(`(${c})`, '')\r\n          .replaceAll(` \u2013 ${c}`, '')\r\n          .replaceAll(` - ${c}`, '');\r\n      });\r\n    }\r\n\r\n    display = stripTrailingParenGroup(display);\r\n\r\n    let stripCardNumberGuard = 0;\r\n    while (CARD_NUM_RE.test(display) && stripCardNumberGuard < 8) {\r\n      stripCardNumberGuard += 1;\r\n      const next = display.replace(/\\s*[\u2013-]\\s*\\d+\\s*\\/\\s*\\d+\\s*$/u, '').trim();\r\n      if (next === display) break;\r\n      display = next;\r\n    }\r\n\r\n    if (cardNumber) {\r\n      const numPattern = new RegExp(`\\\\s*[\u2013-]\\\\s*${cardNumber.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\s*$`);\r\n      display = display.replace(numPattern, '');\r\n    }\r\n\r\n    return display.trim();\r\n  };\r\n\r\n  const resolveSetName = (setCode, title) => {\r\n    const fromIndex = lookupSetNameInIndex(setCode);\r\n    if (fromIndex) return fromIndex;\r\n    return parseSetNameFromTitle(title);\r\n  };\r\n\r\n  const setCoreName = (setName) =>\r\n    String(setName || '')\r\n      .trim()\r\n      .replace(/\\s*\\([^)]*\\)\\s*$/u, '')\r\n      .trim();\r\n\r\n  const stripSetFromName = (name, setName) => {\r\n    let out = String(name || '').trim();\r\n    const set = String(setName || '').trim();\r\n    const core = setCoreName(set);\r\n    if (!out) return '';\r\n    if (set) out = out.split(set).join(' ').replace(/\\s+/g, ' ').trim();\r\n    if (core && core !== set) out = out.split(core).join(' ').replace(/\\s+/g, ' ').trim();\r\n    return out.replace(/\\s*[\u2013-]\\s*$/u, '').trim();\r\n  };\r\n\r\n  const enrichProduct = (product) => {\r\n    // Prefer catalog/index set names over title parsing (avoids English nested-paren bugs).\r\n    const fromIndex = lookupSetNameInIndex(product.setCode);\r\n    const setName = formatSetDisplayName(\r\n      fromIndex || String(product.setName || '').trim() || resolveSetName(product.setCode, product.title)\r\n    );\r\n    let cardName = buildDisplayTitle(\r\n      product.title,\r\n      setName,\r\n      product.cardNumber,\r\n      product.condition\r\n    );\r\n    cardName = stripSetFromName(cardName || product.title, setName);\r\n    return { ...product, setName, cardName: cardName || product.title };\r\n  };\r\n\r\n  const loadSetIndex = async () => {\r\n    const url = root.dataset.setsIndex;\r\n    if (!url) return;\r\n    try {\r\n      const res = await fetch(url);\r\n      if (!res.ok) return;\r\n      const data = await res.json();\r\n      (data.sets || []).forEach(registerSetIndexAliases);\r\n    } catch {\r\n      /* optional index */\r\n    }\r\n  };\r\n\r\n  /** @type {Array<object>} */\r\n  let allProducts = [];\r\n  let currentPage = 1;\r\n  let catalogLoading = false;\r\n  let stockOnly = false;\r\n  let initialCatalogPaintDone = false;\r\n\r\n  const markCatalogReady = () => {\r\n    root.classList.remove('tcg-singles-shop--loading');\r\n    root.classList.add('tcg-singles-shop--ready');\r\n    if (!grid) return;\r\n    grid.classList.add('is-ready');\r\n    grid.setAttribute('aria-busy', 'false');\r\n  };\r\n\r\n  const markFiltersReady = () => {\r\n    filterGroups?.classList.add('is-ready');\r\n  };\r\n  /** @type {Record<string, Set<string>>} */\r\n  const activeFilters = {\r\n    setCode: new Set(),\r\n    rarity: new Set(),\r\n    energyType: new Set(),\r\n    condition: new Set(),\r\n    finish: new Set(),\r\n    language: new Set(),\r\n  };\r\n\r\n  const formatMoney = (cents) => {\r\n    const fmt = window.formatMoneyDE || window.Kl24EuroFormat?.formatMoneyDE;\r\n    if (fmt) return fmt(cents);\r\n    const value = Math.max(0, Number(cents) || 0) / 100;\r\n    const amount = new Intl.NumberFormat('de-DE', {\r\n      minimumFractionDigits: 2,\r\n      maximumFractionDigits: 2,\r\n    }).format(value);\r\n    return `${amount}\\u00A0\u20AC`;\r\n  };\r\n\r\n  const parseCardNumberFromTitle = (title) => {\r\n    const match = CARD_NUM_RE.exec(String(title || ''));\r\n    if (!match) return '';\r\n    return `${Number.parseInt(match[1], 10)}/${match[2]}`;\r\n  };\r\n\r\n  const parseFromSku = (sku) => {\r\n    const raw = String(sku || '').trim().toUpperCase();\r\n    if (!raw) return null;\r\n\r\n    let match = PM_SKU_FULL.exec(raw);\r\n    if (match) {\r\n      return {\r\n        setCode: match[1],\r\n        cardNumber: `${Number.parseInt(match[2], 10)}/${match[3]}`,\r\n        condition: match[4],\r\n      };\r\n    }\r\n\r\n    match = PM_SKU_SHORT.exec(raw);\r\n    if (match) {\r\n      return {\r\n        setCode: match[1],\r\n        cardNumber: String(Number.parseInt(match[2], 10)),\r\n        condition: match[3],\r\n      };\r\n    }\r\n\r\n    match = POK_SKU.exec(raw);\r\n    if (match) {\r\n      return {\r\n        setCode: match[1],\r\n        cardNumber: String(Number.parseInt(match[2], 10)),\r\n        condition: match[3],\r\n      };\r\n    }\r\n\r\n    return null;\r\n  };\r\n\r\n  const parseRarityFromTags = (tags) => {\r\n    const lower = tags.map((t) => String(t).toLowerCase().trim());\r\n    for (const tag of lower) {\r\n      if (RARITY_MAP[tag]) return RARITY_MAP[tag];\r\n    }\r\n    for (const tag of lower) {\r\n      for (const [needle, label] of Object.entries(RARITY_MAP)) {\r\n        if (tag.includes(needle)) return label;\r\n      }\r\n    }\r\n    return '';\r\n  };\r\n\r\n  const ENERGY_EN_TO_DE = {\r\n    fire: 'Feuer',\r\n    water: 'Wasser',\r\n    grass: 'Pflanze',\r\n    lightning: 'Elektro',\r\n    psychic: 'Psycho',\r\n    fighting: 'Kampf',\r\n    darkness: 'Finsternis',\r\n    metal: 'Metall',\r\n    fairy: 'Fee',\r\n    dragon: 'Drache',\r\n    colorless: 'Farblos',\r\n  };\r\n\r\n  const stripHtml = (html) => {\r\n    const tmp = document.createElement('div');\r\n    tmp.innerHTML = String(html || '');\r\n    return (tmp.textContent || tmp.innerText || '').replace(/\\s+/g, ' ').trim();\r\n  };\r\n\r\n  const normalizeEnergyLabel = (raw) => {\r\n    const text = String(raw || '').trim();\r\n    if (!text) return '';\r\n    const lower = text.toLowerCase();\r\n    if (ENERGY_LABELS[lower]) return ENERGY_LABELS[lower];\r\n    for (const [key, label] of Object.entries(ENERGY_LABELS)) {\r\n      if (lower === key || lower === label.toLowerCase()) return label;\r\n    }\r\n    return ENERGY_EN_TO_DE[lower] || '';\r\n  };\r\n\r\n  const parseEnergyFromTags = (tags) => {\r\n    const lower = tags.map((t) => String(t).toLowerCase().trim());\r\n    for (const energy of ENERGY_TYPES) {\r\n      if (lower.some((tag) => tag === energy || tag.includes(energy))) {\r\n        return ENERGY_LABELS[energy];\r\n      }\r\n    }\r\n    for (const label of Object.values(ENERGY_LABELS)) {\r\n      const tagLower = label.toLowerCase();\r\n      if (lower.some((tag) => tag === tagLower)) return label;\r\n    }\r\n    return '';\r\n  };\r\n\r\n  /** Cockpit singles store energy in description (e.g. \"Pok\u00E9mon \u00B7 Stage 1 \u00B7 Metall \u00B7 130 HP\"), not always in tags. */\r\n  const parseEnergyFromDescription = (bodyHtml) => {\r\n    const plain = stripHtml(bodyHtml);\r\n    if (!plain) return '';\r\n    const segments = plain.split('\u00B7').map((segment) => segment.trim());\r\n    for (const segment of segments) {\r\n      const label = normalizeEnergyLabel(segment);\r\n      if (label) return label;\r\n    }\r\n    return '';\r\n  };\r\n\r\n  const parseFinishFromTags = (tags) => {\r\n    const lower = tags.map((t) => String(t).toLowerCase().trim());\r\n    if (lower.some((tag) => tag.includes('reverse'))) return 'Reverse Holo';\r\n    if (lower.some((tag) => tag === 'matt' || tag === 'normal' || tag === 'non-holo' || tag === 'non holo')) {\r\n      return 'Matt (Normal)';\r\n    }\r\n    if (lower.some((tag) => tag.includes('holo') || tag.includes('foil') || tag === 'glitzer')) {\r\n      return 'Holo';\r\n    }\r\n    if (\r\n      lower.some(\r\n        (tag) =>\r\n          tag === 'standard' ||\r\n          tag === 'standard print' ||\r\n          tag === 'secret / standard' ||\r\n          tag.includes('secret rare') ||\r\n          (tag.includes('secret') && !tag.includes('reverse'))\r\n      )\r\n    ) {\r\n      return 'Secret / Standard';\r\n    }\r\n    return 'Matt (Normal)';\r\n  };\r\n\r\n  const skuWithoutLanguage = (sku) => String(sku || '').trim().toUpperCase().replace(/-EN$/, '');\r\n\r\n  const parseLanguageFromSku = (sku) =>\r\n    String(sku || '').trim().toUpperCase().endsWith('-EN') ? 'Englisch' : '';\r\n\r\n  const languageChip = (language) => {\r\n    const key = String(language || '').trim().toLowerCase();\r\n    if (key === 'englisch' || key === 'english' || key === 'en') return { label: 'EN', modifier: 'en' };\r\n    if (key === 'deutsch' || key === 'german' || key === 'de') return { label: 'DE', modifier: 'de' };\r\n    return null;\r\n  };\r\n\r\n  const parseFinishFromSku = (sku) => {\r\n    const raw = skuWithoutLanguage(sku);\r\n    if (raw.endsWith('-RH')) return 'Reverse Holo';\r\n    if (raw.endsWith('-STD')) return 'Secret / Standard';\r\n    if (raw.endsWith('-H')) return 'Holo';\r\n    return '';\r\n  };\r\n\r\n  const parseFinishFromDescription = (bodyHtml) => {\r\n    const plain = stripHtml(bodyHtml);\r\n    if (!plain) return '';\r\n    const foilMatch = plain.match(\r\n      /\\bFoil:\\s*(Reverse\\s+Holo|Secret\\s*\\/\\s*Standard|Non[\\s-]*Holo|Holo\\s*\\/\\s*Foil|Holo|Standard|Matt)/i\r\n    );\r\n    if (!foilMatch) return '';\r\n    const value = foilMatch[1].toLowerCase().replace(/\\s+/g, ' ').trim();\r\n    if (value.includes('reverse')) return 'Reverse Holo';\r\n    if (value.includes('secret')) return 'Secret / Standard';\r\n    if (value.includes('non') && value.includes('holo')) return 'Matt (Normal)';\r\n    if (value === 'matt' || value === 'standard') return 'Matt (Normal)';\r\n    if (value.includes('holo') || value.includes('foil')) return 'Holo';\r\n    return 'Matt (Normal)';\r\n  };\r\n\r\n  const resolveProductFinish = (tags, sku, bodyHtml) => {\r\n    const fromSku = parseFinishFromSku(sku);\r\n    if (fromSku) return fromSku;\r\n    const fromTags = parseFinishFromTags(tags);\r\n    if (fromTags !== 'Matt (Normal)') return fromTags;\r\n    const fromBody = parseFinishFromDescription(bodyHtml);\r\n    if (fromBody) return fromBody;\r\n    return 'Matt (Normal)';\r\n  };\r\n\r\n  /** Internal finish keys \u2192 chip/badge label (matches card set-number line). */\r\n  const finishLabelForCard = (finish) => {\r\n    const key = String(finish || '').trim();\r\n    if (!key) return '';\r\n    if (key === 'Matt (Normal)') return 'Matt';\r\n    return key;\r\n  };\r\n\r\n  /** SEO alt: \"[Name] [Nummer] \u2013 [Set] \u2013 Pok\u00E9mon Karte\" (+ finish). */\r\n  const buildKl24ImageAlt = (product) => {\r\n    const set = String(product.setName || '').trim();\r\n    const number = String(product.cardNumber || '').trim();\r\n    const finish = finishLabelForCard(product.finish);\r\n    let name = stripSetFromName(product.cardName || product.title || '', set);\r\n    if (number && name.includes(number)) {\r\n      /* keep */\r\n    } else if (number) {\r\n      name = [name, number].filter(Boolean).join(' ');\r\n    }\r\n    const core = setCoreName(set);\r\n    let alt = name;\r\n    if (set && !name.includes(set) && !(core && name.includes(core))) {\r\n      alt = alt ? `${alt} \u2013 ${set}` : set;\r\n    }\r\n    alt = alt ? `${alt} \u2013 Pok\u00E9mon Karte` : 'Pok\u00E9mon Karte';\r\n    if (finish) alt = `${alt} ${finish}`;\r\n    return alt.trim();\r\n  };\r\n\r\n  const FINISH_FILTER_ORDER = [\r\n    'Matt (Normal)',\r\n    'Holo',\r\n    'Reverse Holo',\r\n    'Secret / Standard',\r\n  ];\r\n\r\n  const formatCardNumberWithFinish = (cardNumber, finish) => {\r\n    const num = String(cardNumber || '').trim();\r\n    const label = finishLabelForCard(finish);\r\n    if (!num) return label;\r\n    if (!label) return num;\r\n    return `${num} \u00B7 ${label}`;\r\n  };\r\n\r\n  const parseLanguageFromTags = (tags) => {\r\n    const lower = tags.map((t) => String(t).toLowerCase().trim());\r\n    if (lower.some((tag) => tag === 'deutsch' || tag === 'german' || tag === 'de')) {\r\n      return 'Deutsch';\r\n    }\r\n    if (lower.some((tag) => tag === 'englisch' || tag === 'english' || tag === 'en')) {\r\n      return 'Englisch';\r\n    }\r\n    return '';\r\n  };\r\n\r\n  /** Only show listing photos hosted on Shopify CDN (our scans), never TCGdex/reference URLs. */\r\n  const isOwnListingPhoto = (url) => {\r\n    const raw = String(url || '').trim().toLowerCase();\r\n    if (!raw) return false;\r\n    if (raw.includes('assets.tcgdex.net') || raw.includes('api.tcgdex.net')) return false;\r\n    return raw.includes('cdn.shopify.com');\r\n  };\r\n\r\n  const imageApi = () => window.Kl24ShopifyImage;\r\n\r\n  const gridThumbUrl = (url) => {\r\n    const api = imageApi();\r\n    const width = api?.WIDTHS?.gridThumb ?? 480;\r\n    return api?.sizedUrl(url, width) || url;\r\n  };\r\n\r\n  const cartThumbUrl = (url) => {\r\n    const api = imageApi();\r\n    const width = api?.WIDTHS?.cartThumb ?? 120;\r\n    return api?.sizedUrl(url, width) || url;\r\n  };\r\n\r\n  const ownListingPhotoUrl = (url) => {\r\n    const raw = String(url || '').trim();\r\n    return isOwnListingPhoto(raw) ? raw : '';\r\n  };\r\n\r\n  const fetchProductImageUrl = async (handle) => {\r\n    const h = String(handle || '').trim();\r\n    if (!h) return '';\r\n    try {\r\n      const res = await fetch(\r\n        `${window.location.origin}/products/${encodeURIComponent(h)}.json`,\r\n        { credentials: 'same-origin' }\r\n      );\r\n      if (!res.ok) return '';\r\n      const data = await res.json();\r\n      const product = data?.product;\r\n      if (!product) return '';\r\n      const fromImages = (product.images || [])[0]?.src;\r\n      if (fromImages) return String(fromImages).trim();\r\n      return String(product.image?.src || '').trim();\r\n    } catch {\r\n      return '';\r\n    }\r\n  };\r\n\r\n  /** Prefer live Shopify media over possibly stale collection JSON URLs. */\r\n  const refreshPageImageUrls = async (pageItems) => {\r\n    const handles = [...new Set(pageItems.map((item) => String(item.handle || '').trim()).filter(Boolean))];\r\n    if (!handles.length) return new Map();\r\n\r\n    const byHandle = new Map();\r\n    await Promise.all(\r\n      handles.map(async (handle) => {\r\n        const url = ownListingPhotoUrl(await fetchProductImageUrl(handle));\r\n        if (url) byHandle.set(handle, url);\r\n      })\r\n    );\r\n    return byHandle;\r\n  };\r\n\r\n  const mergeFreshImageUrls = (byHandle) => {\r\n    if (!byHandle?.size) return;\r\n    allProducts = allProducts.map((product) => {\r\n      const fresh = byHandle.get(product.handle);\r\n      if (!fresh || fresh === product.imageUrl) return product;\r\n      return { ...product, imageUrl: fresh, hasOwnPhoto: true };\r\n    });\r\n    rebuildVariantIndex();\r\n  };\r\n\r\n  const normalizeProduct = (product) => {\r\n    const tags = Array.isArray(product.tags) ? product.tags : [];\r\n    const variant = (product.variants || [])[0] || {};\r\n    const sku = String(variant.sku || '').trim();\r\n    const parsed = parseFromSku(sku) || {};\r\n    const cardNumber = parsed.cardNumber || parseCardNumberFromTitle(product.title) || '';\r\n    const priceCents = Math.round(Number.parseFloat(variant.price || '0') * 100);\r\n    const rawImageUrl = (product.images || [])[0]?.src || '';\r\n    const imageUrl = ownListingPhotoUrl(rawImageUrl);\r\n\r\n    return {\r\n      id: product.id,\r\n      handle: product.handle,\r\n      title: product.title,\r\n      url: `/products/${product.handle}`,\r\n      imageUrl,\r\n      hasOwnPhoto: Boolean(imageUrl),\r\n      variantId: variant.id != null ? String(variant.id) : null,\r\n      available: Boolean(variant.available),\r\n      priceCents,\r\n      sku,\r\n      setCode: parsed.setCode || '',\r\n      cardNumber,\r\n      condition: parsed.condition || 'NM',\r\n      rarity: parseRarityFromTags(tags),\r\n      energyType: parseEnergyFromTags(tags) || parseEnergyFromDescription(product.body_html),\r\n      finish: resolveProductFinish(tags, sku, product.body_html),\r\n      language: parseLanguageFromTags(tags) || parseLanguageFromSku(sku),\r\n      createdAt: product.created_at || '',\r\n    };\r\n  };\r\n\r\n  const showFeedback = (message, type) => {\r\n    if (!feedback) return;\r\n    feedback.hidden = false;\r\n    feedback.textContent = message;\r\n    feedback.classList.remove('is-error', 'is-success');\r\n    feedback.classList.add(type === 'success' ? 'is-success' : 'is-error');\r\n  };\r\n\r\n  const cartItemQuantity = (item) => Math.max(0, Number(item?.quantity) || 0);\r\n\r\n  const cartTotalQuantity = () =>\r\n    shopifyCartItems.reduce((sum, item) => sum + cartItemQuantity(item), 0);\r\n\r\n  const cartLinePriceCents = (item) => {\r\n    const unit = Number(item?.final_price ?? item?.price ?? 0);\r\n    return Math.round(unit * cartItemQuantity(item));\r\n  };\r\n\r\n  const rebuildVariantIndex = () => {\r\n    productByVariantId = new Map();\r\n    allProducts.forEach((product) => {\r\n      if (product.variantId != null) {\r\n        productByVariantId.set(String(product.variantId), product);\r\n      }\r\n    });\r\n  };\r\n\r\n  const findProductForCartItem = (item) =>\r\n    productByVariantId.get(String(item?.variant_id || '')) || null;\r\n\r\n  const refreshCartBadge = async (parsedState) => {\r\n    const chrome = window.Kl24InventoryReservation;\r\n    if (chrome?.refreshCartChrome) {\r\n      await chrome.refreshCartChrome(parsedState || null, {\r\n        openDrawer: false,\r\n        source: 'tcg-singles-shop',\r\n      });\r\n    }\r\n  };\r\n\r\n  const syncKl24CartCheckout = (cart) => {\r\n    if (window.Kl24CartEnhancements?.syncCartState) {\r\n      window.Kl24CartEnhancements.syncCartState(cart);\r\n    } else {\r\n      window.Kl24CartDrawerCheckout?.sync(cartDrawer, cart);\r\n    }\r\n  };\r\n\r\n  const syncCartFromShopify = async () => {\r\n    try {\r\n      const res = await fetch('/cart.js', { headers: { Accept: 'application/json' } });\r\n      if (!res.ok) return;\r\n      const cart = await res.json();\r\n      shopifyCartSnapshot = cart;\r\n      shopifyCartItems = cart.items || [];\r\n      updateCartSidebar();\r\n      if (cartDrawer && !cartDrawer.hidden) renderCartDrawer();\r\n      syncKl24CartCheckout(cart);\r\n\r\n      const chrome = window.Kl24InventoryReservation;\r\n      if (chrome?.fetchAndApplyCartBubble) {\r\n        await chrome.fetchAndApplyCartBubble();\r\n      }\r\n    } catch (error) {\r\n      console.warn('[Singles-Shop] Warenkorb-Sync:', error);\r\n    }\r\n  };\r\n\r\n  const updateCartSidebar = () => {\r\n    const totalQty = cartTotalQuantity();\r\n    let totalCents = 0;\r\n    shopifyCartItems.forEach((item) => {\r\n      totalCents += cartLinePriceCents(item);\r\n    });\r\n\r\n    if (cartStat) {\r\n      if (!totalQty) {\r\n        cartStat.textContent = 'Noch keine Karten im Warenkorb';\r\n      } else {\r\n        cartStat.textContent =\r\n          totalQty === 1\r\n            ? `1 Karte im Warenkorb \u00B7 ca. ${formatMoney(totalCents)}`\r\n            : `${totalQty} Karten im Warenkorb \u00B7 ca. ${formatMoney(totalCents)}`;\r\n      }\r\n    }\r\n\r\n    if (viewCartBtn) {\r\n      viewCartBtn.disabled = false;\r\n    }\r\n  };\r\n\r\n  const openCartSelectionDrawer = async () => {\r\n    if (!cartDrawer) return;\r\n    await syncCartFromShopify();\r\n    renderCartDrawer();\r\n    cartDrawer.removeAttribute('hidden');\r\n    cartDrawer.hidden = false;\r\n    window.Kl24CartDrawerUI?.open(cartDrawer, closeCartSelectionDrawer);\r\n  };\r\n\r\n  const closeCartSelectionDrawer = () => {\r\n    if (!cartDrawer) return;\r\n    cartDrawer.hidden = true;\r\n    cartDrawer.setAttribute('hidden', '');\r\n    window.Kl24CartDrawerUI?.close(cartDrawer);\r\n  };\r\n\r\n  const removeVariantIdsFromShopifyCart = async (variantIds) => {\r\n    const ids = new Set([...variantIds].map((id) => String(id)).filter(Boolean));\r\n    if (!ids.size) return true;\r\n\r\n    try {\r\n      const cartRes = await fetch('/cart.js', { headers: { Accept: 'application/json' } });\r\n      if (!cartRes.ok) throw new Error('Warenkorb konnte nicht gelesen werden.');\r\n      const cart = await cartRes.json();\r\n\r\n      const updates = {};\r\n      (cart.items || []).forEach((item) => {\r\n        if (ids.has(String(item.variant_id))) {\r\n          updates[item.key] = 0;\r\n        }\r\n      });\r\n      if (!Object.keys(updates).length) return true;\r\n\r\n      const updateRes = await fetch('/cart/update.js', {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\r\n        body: JSON.stringify({\r\n          updates,\r\n          sections: SHOPIFY_CART_SECTIONS,\r\n          sections_url: window.location.pathname,\r\n        }),\r\n      });\r\n      if (!updateRes.ok) {\r\n        const body = await updateRes.json().catch(() => ({}));\r\n        throw new Error(body.description || 'Warenkorb konnte nicht aktualisiert werden.');\r\n      }\r\n      const parsedState = await updateRes.json();\r\n      await refreshCartBadge(parsedState);\r\n      await syncCartFromShopify();\r\n      return true;\r\n    } catch (error) {\r\n      console.warn('[Singles-Shop] Warenkorb entfernen:', error);\r\n      showFeedback(error.message || 'Warenkorb konnte nicht aktualisiert werden.', 'error');\r\n      return false;\r\n    }\r\n  };\r\n\r\n  const removeCartLineItem = async (item) => {\r\n    const product = findProductForCartItem(item);\r\n    const ok = await removeVariantIdsFromShopifyCart([String(item.variant_id)]);\r\n    if (!ok) return;\r\n    if (product) {\r\n      const reserveApi = window.Kl24InventoryReservation;\r\n      if (reserveApi?.release) {\r\n        try {\r\n          await reserveApi.release({\r\n            shopifyVariantId: product.variantId,\r\n            sku: product.sku,\r\n            syncShopify: true,\r\n          });\r\n        } catch (error) {\r\n          console.warn('[Singles-Shop] Reservierung freigeben:', error);\r\n        }\r\n      }\r\n    }\r\n    if (cartTotalQuantity() === 0) closeCartSelectionDrawer();\r\n  };\r\n\r\n  const renderCartDrawer = () => {\r\n    if (!cartDrawerList) return;\r\n    const ui = window.Kl24CartDrawerUI;\r\n    const totalQty = cartTotalQuantity();\r\n    let totalCents = 0;\r\n    shopifyCartItems.forEach((item) => {\r\n      totalCents += cartLinePriceCents(item);\r\n    });\r\n    cartDrawerList.replaceChildren();\r\n\r\n    if (cartDrawerSummary) {\r\n      if (!totalQty) {\r\n        cartDrawerSummary.textContent = 'Noch keine Karten in deinem Warenkorb.';\r\n      } else {\r\n        cartDrawerSummary.textContent =\r\n          totalQty === 1 ? '1 Karte im Warenkorb' : `${totalQty} Karten im Warenkorb`;\r\n      }\r\n    }\r\n\r\n    ui?.updateFooterTotal(cartDrawer, {\r\n      qty: totalQty,\r\n      formattedTotal: formatMoney(totalCents),\r\n    });\r\n\r\n    if (!totalQty) {\r\n      const empty = document.createElement('li');\r\n      empty.className = 'tcg-gap-cart-drawer__empty';\r\n      empty.textContent = 'Noch keine Karten in deinem Warenkorb.';\r\n      cartDrawerList.append(empty);\r\n      syncKl24CartCheckout(\r\n        shopifyCartSnapshot || { item_count: 0, items_subtotal_price: 0, items: [] }\r\n      );\r\n      return;\r\n    }\r\n\r\n    shopifyCartItems.forEach((item) => {\r\n      const product = findProductForCartItem(item);\r\n      const qty = cartItemQuantity(item);\r\n      const name = product?.cardName || item.product_title || item.title || 'Karte';\r\n      let detail = '';\r\n      let finishLabel = '';\r\n      if (product) {\r\n        detail = [product.setName, product.cardNumber].filter(Boolean).join(' \u00B7 ') || '';\r\n        finishLabel = finishLabelForCard(product.finish);\r\n      } else {\r\n        const variant =\r\n          item.variant_title && item.variant_title !== 'Default Title' ? item.variant_title : '';\r\n        detail = variant || '';\r\n        finishLabel = window.Kl24CartFinish?.resolveCartItemFinish(item) || '';\r\n      }\r\n      if (!detail && !finishLabel) detail = 'Single';\r\n      const imageUrl = cartThumbUrl(product?.imageUrl || ui?.cartItemImage(item) || '');\r\n      const priceFormatted = formatMoney(cartLinePriceCents(item));\r\n\r\n      const li = ui?.buildItemRow({\r\n        name,\r\n        detail,\r\n        finishLabel,\r\n        priceFormatted,\r\n        qty,\r\n        imageUrl,\r\n        onRemove: () => {\r\n          void removeCartLineItem(item);\r\n        },\r\n      });\r\n      if (li) cartDrawerList.append(li);\r\n    });\r\n    syncKl24CartCheckout(shopifyCartSnapshot);\r\n  };\r\n\r\n  const addToCart = async (variantId, title, sku) => {\r\n    if (!variantId) return false;\r\n    try {\r\n      const reserveApi = window.Kl24InventoryReservation;\r\n      let parsedState = null;\r\n      if (reserveApi?.isEnabled()) {\r\n        parsedState = await reserveApi.addCartItems([{ id: variantId, quantity: 1 }], {\r\n          reserveEntries: [{ shopifyVariantId: variantId, sku, quantity: 1 }],\r\n          openDrawer: false,\r\n        });\r\n      } else {\r\n        const response = await fetch('/cart/add.js', {\r\n          method: 'POST',\r\n          headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\r\n          body: JSON.stringify({\r\n            items: [{ id: variantId, quantity: 1 }],\r\n            sections: ['cart-icon-bubble', 'cart-drawer'],\r\n            sections_url: window.location.pathname,\r\n          }),\r\n        });\r\n        if (!response.ok) {\r\n          const body = await response.json().catch(() => ({}));\r\n          throw new Error(body.description || 'Warenkorb konnte nicht aktualisiert werden.');\r\n        }\r\n        parsedState = await response.json();\r\n      }\r\n      showFeedback(`\u201E${title}\u201C wurde in den Warenkorb gelegt.`, 'success');\r\n      await refreshCartBadge(parsedState);\r\n      await syncCartFromShopify();\r\n      return true;\r\n    } catch (error) {\r\n      showFeedback(error.message || 'Fehler beim Hinzuf\u00FCgen.', 'error');\r\n      return false;\r\n    }\r\n  };\r\n\r\n  const loadAllProducts = async (onBatch) => {\r\n    catalogLoading = true;\r\n\r\n    // Accumulate only \u2014 no mid-load grid paints (avoids SSR wipe + multi-batch flicker).\r\n    const ingestBatch = (rawProducts) => {\r\n      if (!rawProducts?.length) return;\r\n      const normalized = rawProducts.map(normalizeProduct).map(enrichProduct);\r\n      allProducts.push(...normalized);\r\n      rebuildVariantIndex();\r\n      buildSetDisplayNameIndex();\r\n\r\n      if (typeof onBatch === 'function') onBatch(normalized);\r\n    };\r\n\r\n    try {\r\n      const catalog = window.Kl24SinglesCatalog;\r\n      if (catalog?.fetchSinglesProducts) {\r\n        allProducts = [];\r\n        const { products } = await catalog.fetchSinglesProducts({\r\n          collectionHandle,\r\n          maxPages: 20,\r\n          onBatch: (batch) => ingestBatch(batch),\r\n        });\r\n        return products.map(normalizeProduct).map(enrichProduct);\r\n      }\r\n\r\n      const origin = window.location.origin;\r\n      const items = [];\r\n      let page = 1;\r\n      while (page <= 20) {\r\n        const url = `${origin}/collections/${encodeURIComponent(collectionHandle)}/products.json?limit=250&page=${page}`;\r\n        const res = await fetch(url);\r\n        if (!res.ok) break;\r\n        const data = await res.json();\r\n        const batch = data.products || [];\r\n        if (!batch.length) break;\r\n        items.push(...batch);\r\n        ingestBatch(batch);\r\n        if (batch.length < 250) break;\r\n        page += 1;\r\n      }\r\n      return items.map(normalizeProduct).map(enrichProduct);\r\n    } finally {\r\n      catalogLoading = false;\r\n    }\r\n  };\r\n\r\n  const filterLabel = (key, value) => {\r\n    if (key === 'setCode') {\r\n      return (\r\n        setDisplayNameByCode.get(String(value || '').trim()) ||\r\n        lookupSetNameInIndex(value) ||\r\n        value\r\n      );\r\n    }\r\n    if (key === 'condition') {\r\n      return CONDITION_LABELS[String(value).toUpperCase()] || value;\r\n    }\r\n    if (key === 'finish') {\r\n      return finishLabelForCard(value) || value;\r\n    }\r\n    return value;\r\n  };\r\n\r\n  const countForFilterValue = (key, value) =>\r\n    allProducts.filter(\r\n      (product) =>\r\n        product.available && String(product[key] || '').trim() === value\r\n    ).length;\r\n\r\n  const hasActiveFilters = () =>\r\n    stockOnly ||\r\n    Object.values(activeFilters).some((set) => set.size > 0) ||\r\n    Boolean((searchInput?.value || '').trim());\r\n\r\n  const updateClearButton = () => {\r\n    if (!clearFiltersBtn) return;\r\n    clearFiltersBtn.hidden = !hasActiveFilters();\r\n  };\r\n\r\n  const passesFilters = (product) => {\r\n    if (stockOnly && !product.available) return false;\r\n\r\n    for (const { key } of FILTER_DEFS) {\r\n      const selected = activeFilters[key];\r\n      if (!selected.size) continue;\r\n      const value = String(product[key] || '').trim();\r\n      if (!value || !selected.has(value)) return false;\r\n    }\r\n\r\n    const q = (searchInput?.value || '').trim().toLowerCase();\r\n    if (!q) return true;\r\n    return (\r\n      product.cardName.toLowerCase().includes(q) ||\r\n      product.setName.toLowerCase().includes(q) ||\r\n      product.title.toLowerCase().includes(q) ||\r\n      product.setCode.toLowerCase().includes(q) ||\r\n      product.cardNumber.toLowerCase().includes(q) ||\r\n      product.sku.toLowerCase().includes(q) ||\r\n      String(product.finish || '').toLowerCase().includes(q) ||\r\n      finishLabelForCard(product.finish).toLowerCase().includes(q) ||\r\n      String(product.language || '').toLowerCase().includes(q)\r\n    );\r\n  };\r\n\r\n  const sortProducts = (list) => {\r\n    const mode = sortSelect?.value || 'title-asc';\r\n    const sorted = [...list];\r\n    sorted.sort((a, b) => {\r\n      if (mode === 'price-asc') return a.priceCents - b.priceCents;\r\n      if (mode === 'price-desc') return b.priceCents - a.priceCents;\r\n      if (mode === 'newest') return (b.id || 0) - (a.id || 0);\r\n      if (mode === 'title-desc') return b.cardName.localeCompare(a.cardName, 'de');\r\n      return a.cardName.localeCompare(b.cardName, 'de');\r\n    });\r\n    return sorted;\r\n  };\r\n\r\n  const visibleProducts = () => sortProducts(allProducts.filter(passesFilters));\r\n\r\n  const MIN_ENERGY_STOCK = 10;\r\n\r\n  const uniqueValues = (key) => {\r\n    const values = new Set();\r\n    allProducts.forEach((p) => {\r\n      if (!p.available) return;\r\n      const v = String(p[key] || '').trim();\r\n      if (v) values.add(v);\r\n    });\r\n    let list = [...values];\r\n    if (key === 'energyType') {\r\n      list = list.filter((value) => countForFilterValue(key, value) >= MIN_ENERGY_STOCK);\r\n    }\r\n    if (key === 'setCode') {\r\n      return list.sort((a, b) => filterLabel(key, a).localeCompare(filterLabel(key, b), 'de'));\r\n    }\r\n    if (key === 'finish') {\r\n      return list.sort((a, b) => {\r\n        const ia = FINISH_FILTER_ORDER.indexOf(a);\r\n        const ib = FINISH_FILTER_ORDER.indexOf(b);\r\n        const ra = ia === -1 ? FINISH_FILTER_ORDER.length : ia;\r\n        const rb = ib === -1 ? FINISH_FILTER_ORDER.length : ib;\r\n        if (ra !== rb) return ra - rb;\r\n        return a.localeCompare(b, 'de');\r\n      });\r\n    }\r\n    return list.sort((a, b) => a.localeCompare(b, 'de'));\r\n  };\r\n\r\n  const renderFilterGroups = () => {\r\n    if (!filterGroups) return;\r\n\r\n    const openKeys = new Set();\r\n    filterGroups.querySelectorAll('.tcg-singles-shop__filter-panel').forEach((panel) => {\r\n      if (panel.open && panel.dataset.filterKey) {\r\n        openKeys.add(panel.dataset.filterKey);\r\n      }\r\n    });\r\n\r\n    filterGroups.replaceChildren();\r\n\r\n    FILTER_DEFS.forEach(({ key, label, defaultOpen }) => {\r\n      const values = uniqueValues(key);\r\n      if (key === 'energyType' && activeFilters.energyType.size) {\r\n        [...activeFilters.energyType].forEach((value) => {\r\n          if (!values.includes(value)) activeFilters.energyType.delete(value);\r\n        });\r\n        syncElementUrl();\r\n      }\r\n      if (!values.length) return;\r\n\r\n      const panel = document.createElement('details');\r\n      panel.className = 'tcg-singles-shop__filter-panel';\r\n      panel.dataset.filterKey = key;\r\n      panel.open = openKeys.has(key) || (openKeys.size === 0 && Boolean(defaultOpen));\r\n\r\n      const summary = document.createElement('summary');\r\n      summary.className = 'tcg-singles-shop__filter-summary';\r\n      summary.textContent = label;\r\n\r\n      const body = document.createElement('div');\r\n      body.className = 'tcg-singles-shop__filter-panel-body';\r\n\r\n      const group = document.createElement('div');\r\n      group.className = 'tcg-singles-shop__filter-group';\r\n      group.dataset.filterKey = key;\r\n\r\n      values.forEach((value) => {\r\n        const chip = document.createElement('button');\r\n        chip.type = 'button';\r\n        chip.className = 'tcg-singles-shop__filter-chip';\r\n\r\n        const labelEl = document.createElement('span');\r\n        labelEl.className = 'tcg-singles-shop__filter-chip-label';\r\n        const labelText = filterLabel(key, value);\r\n        labelEl.textContent = labelText;\r\n        if (key === 'energyType') {\r\n          const slug = Object.entries(ENERGY_LABELS).find(([, name]) => name === value)?.[0] || '';\r\n          if (slug) {\r\n            chip.classList.add('tcg-singles-shop__energy-chip');\r\n            group.classList.add('tcg-singles-shop__filter-group--energy');\r\n            chip.style.setProperty('--energy', `rgb(var(--kl24-energy-${slug}))`);\r\n            chip.style.setProperty('--energy-ink', `rgb(var(--kl24-energy-${slug}-ink))`);\r\n            const dot = document.createElement('span');\r\n            dot.className = 'tcg-singles-shop__energy-dot';\r\n            dot.setAttribute('aria-hidden', 'true');\r\n            labelEl.prepend(dot);\r\n          }\r\n        }\r\n        if (key === 'setCode' || key === 'finish' || labelText.length > 28) {\r\n          labelEl.title = labelText;\r\n          chip.title = labelText;\r\n        }\r\n\r\n        const countEl = document.createElement('span');\r\n        countEl.className = 'tcg-singles-shop__filter-chip-count';\r\n        countEl.textContent = String(countForFilterValue(key, value));\r\n\r\n        chip.append(labelEl, countEl);\r\n        chip.dataset.filterValue = value;\r\n        chip.setAttribute('aria-pressed', 'false');\r\n        if (activeFilters[key].has(value)) {\r\n          chip.classList.add('is-active');\r\n          chip.setAttribute('aria-pressed', 'true');\r\n        }\r\n        chip.addEventListener('click', () => {\r\n          if (activeFilters[key].has(value)) {\r\n            activeFilters[key].delete(value);\r\n          } else {\r\n            activeFilters[key].add(value);\r\n          }\r\n          currentPage = 1;\r\n          if (key === 'energyType') syncElementUrl();\r\n          renderFilterGroups();\r\n          render();\r\n        });\r\n        group.append(chip);\r\n      });\r\n\r\n      body.append(group);\r\n      panel.append(summary, body);\r\n      filterGroups.append(panel);\r\n    });\r\n\r\n    if (!filterGroups.childElementCount) {\r\n      const empty = document.createElement('p');\r\n      empty.className = 'tcg-singles-shop__loading tcg-singles-shop__loading--sidebar';\r\n      empty.textContent = 'Keine Filter verf\u00FCgbar.';\r\n      filterGroups.append(empty);\r\n    }\r\n\r\n    markFiltersReady();\r\n  };\r\n\r\n  const buildPaginationItems = (current, total, siblingCount = 2) => {\r\n    if (total <= 1) return [];\r\n    if (total <= 7) {\r\n      return Array.from({ length: total }, (_, index) => index + 1);\r\n    }\r\n\r\n    const pages = new Set([1, total, current]);\r\n    for (let offset = 1; offset <= siblingCount; offset += 1) {\r\n      pages.add(current - offset);\r\n      pages.add(current + offset);\r\n    }\r\n\r\n    const sorted = [...pages].filter((page) => page >= 1 && page <= total).sort((a, b) => a - b);\r\n    const items = [];\r\n    for (let index = 0; index < sorted.length; index += 1) {\r\n      if (index > 0 && sorted[index] - sorted[index - 1] > 1) {\r\n        items.push('\u2026');\r\n      }\r\n      items.push(sorted[index]);\r\n    }\r\n    return items;\r\n  };\r\n\r\n  const prefetchedImageUrls = new Set();\r\n\r\n  const getPageItems = (pageNum, filtered) => {\r\n    if (!filtered.length) return [];\r\n    const totalPages = Math.max(1, Math.ceil(filtered.length / productsPerPage));\r\n    const safePage = Math.min(Math.max(1, pageNum), totalPages);\r\n    const start = (safePage - 1) * productsPerPage;\r\n    return filtered.slice(start, start + productsPerPage);\r\n  };\r\n\r\n  const prefetchPageImages = (pageNum, filtered) => {\r\n    const api = imageApi();\r\n    getPageItems(pageNum, filtered).forEach((product) => {\r\n      const url = product.imageUrl;\r\n      if (!url) return;\r\n      const sized = gridThumbUrl(url);\r\n      if (prefetchedImageUrls.has(sized)) return;\r\n      prefetchedImageUrls.add(sized);\r\n      const img = new Image();\r\n      img.decoding = 'async';\r\n      img.src = sized;\r\n      if (api?.srcSet) {\r\n        const set = api.srcSet(url, [\r\n          api.WIDTHS?.gridThumbSm ?? 180,\r\n          api.WIDTHS?.gridThumb ?? 360,\r\n          api.WIDTHS?.gridThumbMd ?? 540,\r\n          api.WIDTHS?.gridThumbLg ?? 720,\r\n        ]);\r\n        if (set) img.srcset = set;\r\n      }\r\n    });\r\n  };\r\n\r\n  const prefetchAdjacentPages = (_filtered, _totalPages) => {\r\n    // Intentionally no-op: prefetching adjacent page images inflated request count / bandwidth.\r\n  };\r\n\r\n  const appendPageButton = (pageNumber) => {\r\n    const btn = document.createElement('button');\r\n    btn.type = 'button';\r\n    btn.className = 'tcg-singles-shop__page-btn';\r\n    btn.textContent = String(pageNumber);\r\n    btn.setAttribute('aria-label', `Seite ${pageNumber}`);\r\n    if (pageNumber === currentPage) {\r\n      btn.classList.add('is-active');\r\n      btn.setAttribute('aria-current', 'page');\r\n    }\r\n    btn.addEventListener('click', () => {\r\n      currentPage = pageNumber;\r\n      render();\r\n      grid?.scrollIntoView({ behavior: 'auto', block: 'start' });\r\n    });\r\n    pagination.append(btn);\r\n  };\r\n\r\n  const renderPagination = (totalPages) => {\r\n    if (!pagination) return;\r\n    pagination.replaceChildren();\r\n\r\n    if (totalPages <= 1) {\r\n      pagination.hidden = true;\r\n      return;\r\n    }\r\n\r\n    pagination.hidden = false;\r\n\r\n    const prev = document.createElement('button');\r\n    prev.type = 'button';\r\n    prev.className = 'tcg-singles-shop__page-btn';\r\n    prev.textContent = '\u2039';\r\n    prev.setAttribute('aria-label', 'Vorherige Seite');\r\n    prev.disabled = currentPage <= 1;\r\n    prev.addEventListener('click', () => {\r\n      currentPage -= 1;\r\n      render();\r\n      grid?.scrollIntoView({ behavior: 'auto', block: 'start' });\r\n    });\r\n    pagination.append(prev);\r\n\r\n    buildPaginationItems(currentPage, totalPages).forEach((item) => {\r\n      if (item === '\u2026') {\r\n        const ellipsis = document.createElement('span');\r\n        ellipsis.className = 'tcg-singles-shop__page-ellipsis';\r\n        ellipsis.textContent = '\u2026';\r\n        ellipsis.setAttribute('aria-hidden', 'true');\r\n        pagination.append(ellipsis);\r\n        return;\r\n      }\r\n      appendPageButton(item);\r\n    });\r\n\r\n    const next = document.createElement('button');\r\n    next.type = 'button';\r\n    next.className = 'tcg-singles-shop__page-btn';\r\n    next.textContent = '\u203A';\r\n    next.setAttribute('aria-label', 'N\u00E4chste Seite');\r\n    next.disabled = currentPage >= totalPages;\r\n    next.addEventListener('click', () => {\r\n      currentPage += 1;\r\n      render();\r\n      grid?.scrollIntoView({ behavior: 'auto', block: 'start' });\r\n    });\r\n    pagination.append(next);\r\n  };\r\n\r\n  const createThumbPlaceholder = (product) => {\r\n    const ph = document.createElement('div');\r\n    ph.className = 'tcg-singles-shop__thumb-placeholder';\r\n    ph.setAttribute('aria-hidden', 'true');\r\n    const num = String(product.cardNumber || '').trim();\r\n    if (num) {\r\n      const numEl = document.createElement('span');\r\n      numEl.className = 'tcg-singles-shop__thumb-placeholder-num';\r\n      numEl.textContent = num;\r\n      ph.append(numEl);\r\n    } else {\r\n      ph.textContent = 'Scan folgt';\r\n    }\r\n    return ph;\r\n  };\r\n\r\n  const showThumbPlaceholder = (thumbWrap, product) => {\r\n    thumbWrap.querySelector('.tcg-singles-shop__thumb')?.remove();\r\n    if (!thumbWrap.querySelector('.tcg-singles-shop__thumb-placeholder')) {\r\n      thumbWrap.append(createThumbPlaceholder(product));\r\n    }\r\n  };\r\n\r\n  const bindProductThumb = (thumb, thumbWrap, product, index) => {\r\n    thumb.className = 'tcg-singles-shop__thumb';\r\n    thumb.alt = buildKl24ImageAlt(product);\r\n    thumb.loading = index < 3 ? 'eager' : 'lazy';\r\n    thumb.decoding = 'async';\r\n    if (index === 0) {\r\n      thumb.fetchPriority = 'high';\r\n    }\r\n    thumb.width = 360;\r\n    thumb.height = 480;\r\n\r\n    const applySrc = (imageUrl, { useSrcSet = true } = {}) => {\r\n      const api = imageApi();\r\n      const sized = gridThumbUrl(imageUrl);\r\n      thumb.removeAttribute('srcset');\r\n      thumb.removeAttribute('sizes');\r\n      if (useSrcSet && api?.srcSet) {\r\n        const set = api.srcSet(imageUrl, [\r\n          api.WIDTHS?.gridThumbSm ?? 180,\r\n          api.WIDTHS?.gridThumb ?? 360,\r\n          api.WIDTHS?.gridThumbMd ?? 540,\r\n          api.WIDTHS?.gridThumbLg ?? 720,\r\n        ]);\r\n        if (set) {\r\n          thumb.srcset = set;\r\n          thumb.sizes = '(min-width: 1200px) 270px, (min-width: 750px) 22vw, 42vw';\r\n        }\r\n      }\r\n      thumb.src = sized;\r\n    };\r\n\r\n    applySrc(product.imageUrl);\r\n\r\n    thumb.addEventListener('error', () => {\r\n      const stage = Number(thumb.dataset.kl24ImgFail || '0');\r\n      if (stage === 0) {\r\n        thumb.dataset.kl24ImgFail = '1';\r\n        applySrc(product.imageUrl, { useSrcSet: false });\r\n        return;\r\n      }\r\n      if (stage === 1) {\r\n        thumb.dataset.kl24ImgFail = '2';\r\n        thumb.removeAttribute('srcset');\r\n        thumb.removeAttribute('sizes');\r\n        thumb.src = product.imageUrl;\r\n        return;\r\n      }\r\n      showThumbPlaceholder(thumbWrap, product);\r\n    });\r\n    thumb.addEventListener('load', () => {\r\n      if (thumb.naturalWidth < 12 || thumb.naturalHeight < 12) {\r\n        showThumbPlaceholder(thumbWrap, product);\r\n      }\r\n    });\r\n  };\r\n\r\n  const mountProductThumb = (thumbWrap, product, index) => {\r\n    thumbWrap.querySelector('.tcg-singles-shop__thumb-placeholder')?.remove();\r\n    let thumb = thumbWrap.querySelector('.tcg-singles-shop__thumb');\r\n    if (!thumb) {\r\n      thumb = document.createElement('img');\r\n      thumbWrap.prepend(thumb);\r\n    }\r\n    thumb.dataset.kl24ImgFail = '0';\r\n    bindProductThumb(thumb, thumbWrap, product, index);\r\n  };\r\n\r\n  const appendProductThumb = (card, product, index) => {\r\n    const thumbWrap = document.createElement('div');\r\n    thumbWrap.className = 'tcg-singles-shop__thumb-wrap';\r\n\r\n    if (product.imageUrl) {\r\n      const thumb = document.createElement('img');\r\n      bindProductThumb(thumb, thumbWrap, product, index);\r\n      thumbWrap.append(thumb);\r\n    } else {\r\n      thumbWrap.append(createThumbPlaceholder(product));\r\n    }\r\n\r\n    if (product.available && product.variantId) {\r\n      const fab = document.createElement('button');\r\n      fab.type = 'button';\r\n      fab.className = 'tcg-singles-shop__card-cart-fab';\r\n      fab.setAttribute('aria-label', `${product.cardName} in den Warenkorb`);\r\n      fab.title = 'In den Warenkorb';\r\n      fab.innerHTML =\r\n        '<span class=\"tcg-singles-shop__card-cart-fab-icon\" aria-hidden=\"true\"></span>';\r\n      fab.addEventListener('click', async (event) => {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        fab.disabled = true;\r\n        await addToCart(product.variantId, product.cardName, product.sku);\r\n        fab.disabled = false;\r\n      });\r\n      thumbWrap.append(fab);\r\n    }\r\n\r\n    card.append(thumbWrap);\r\n  };\r\n\r\n  const renderGrid = (pageItems) => {\r\n    if (!grid) return;\r\n\r\n    const prefersReducedMotion =\r\n      typeof window.matchMedia === 'function' &&\r\n      window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n    const isSsrHandoff =\r\n      !initialCatalogPaintDone &&\r\n      !prefersReducedMotion &&\r\n      grid.classList.contains('tcg-singles-shop__grid--ssr') &&\r\n      grid.childElementCount > 0;\r\n\r\n    if (isSsrHandoff) {\r\n      grid.classList.add('tcg-singles-shop__grid--handoff');\r\n    }\r\n\r\n    grid.replaceChildren();\r\n\r\n    if (!pageItems.length) {\r\n      const empty = document.createElement('p');\r\n      empty.className = 'tcg-singles-shop__loading';\r\n      empty.textContent = hasActiveFilters()\r\n        ? 'Keine Karten f\u00FCr diese Filter gefunden.'\r\n        : 'Noch keine Singles in dieser Kollektion.';\r\n      grid.append(empty);\r\n    } else {\r\n      pageItems.forEach((product, index) => {\r\n        const card = document.createElement('a');\r\n        card.className = 'tcg-singles-shop__card';\r\n        card.href = product.url;\r\n        card.setAttribute('role', 'listitem');\r\n        if (product.handle) {\r\n          card.dataset.productHandle = product.handle;\r\n        }\r\n        if (!product.available) card.classList.add('is-out-of-stock');\r\n\r\n        appendProductThumb(card, product, index);\r\n\r\n        const body = document.createElement('div');\r\n        body.className = 'tcg-singles-shop__card-body';\r\n\r\n        const name = document.createElement('p');\r\n        name.className = 'tcg-singles-shop__card-name';\r\n        name.textContent = product.cardName;\r\n        body.append(name);\r\n\r\n        if (product.setName || product.cardNumber) {\r\n          const setLine = document.createElement('p');\r\n          setLine.className = 'tcg-singles-shop__card-set';\r\n\r\n          if (product.setName) {\r\n            const setNameEl = document.createElement('span');\r\n            setNameEl.className = 'tcg-singles-shop__set-name';\r\n            setNameEl.textContent = product.setName;\r\n            setLine.append(setNameEl);\r\n          }\r\n\r\n          body.append(setLine);\r\n\r\n          if (product.cardNumber) {\r\n            const pills = document.createElement('div');\r\n            pills.className = 'tcg-singles-shop__meta-pills';\r\n            const numberEl = document.createElement('span');\r\n            numberEl.className = 'tcg-singles-shop__meta-pill';\r\n            numberEl.textContent = formatCardNumberWithFinish(\r\n              product.cardNumber,\r\n              product.finish\r\n            );\r\n            pills.append(numberEl);\r\n            const langChip = languageChip(product.language);\r\n            if (langChip) {\r\n              const langEl = document.createElement('span');\r\n              langEl.className = 'tcg-singles-shop__meta-pill';\r\n              langEl.textContent = langChip.label;\r\n              pills.append(langEl);\r\n            }\r\n            body.append(pills);\r\n          } else {\r\n            const langChip = languageChip(product.language);\r\n            if (langChip) {\r\n              const pills = document.createElement('div');\r\n              pills.className = 'tcg-singles-shop__meta-pills';\r\n              const langEl = document.createElement('span');\r\n              langEl.className = 'tcg-singles-shop__meta-pill';\r\n              langEl.textContent = langChip.label;\r\n              pills.append(langEl);\r\n              body.append(pills);\r\n            }\r\n          }\r\n        } else {\r\n          const langChip = languageChip(product.language);\r\n          if (langChip) {\r\n            const pills = document.createElement('div');\r\n            pills.className = 'tcg-singles-shop__meta-pills';\r\n            const langEl = document.createElement('span');\r\n            langEl.className = 'tcg-singles-shop__meta-pill';\r\n            langEl.textContent = langChip.label;\r\n            pills.append(langEl);\r\n            body.append(pills);\r\n          }\r\n        }\r\n\r\n        if (product.available && product.priceCents > 0) {\r\n          const priceWrap = document.createElement('div');\r\n          priceWrap.className = 'tcg-singles-shop__card-price-block';\r\n\r\n          const priceLabelEl = document.createElement('span');\r\n          priceLabelEl.className = 'tcg-singles-shop__card-price-label';\r\n          priceLabelEl.textContent = priceLabel;\r\n\r\n          const priceValue = document.createElement('p');\r\n          priceValue.className = 'tcg-singles-shop__card-price';\r\n          priceValue.textContent = formatMoney(product.priceCents);\r\n\r\n          priceWrap.append(priceLabelEl, priceValue);\r\n          body.append(priceWrap);\r\n        } else {\r\n          const unavail = document.createElement('p');\r\n          unavail.className = 'tcg-singles-shop__card-unavailable';\r\n          unavail.textContent = 'Nicht auf Lager';\r\n          body.append(unavail);\r\n        }\r\n\r\n        card.append(body);\r\n        grid.append(card);\r\n      });\r\n    }\r\n\r\n    grid.classList.remove('tcg-singles-shop__grid--ssr');\r\n\r\n    if (isSsrHandoff) {\r\n      grid.classList.add('is-fading-in');\r\n      window.setTimeout(() => {\r\n        grid.classList.remove('tcg-singles-shop__grid--handoff', 'is-fading-in');\r\n      }, 160);\r\n    }\r\n\r\n    initialCatalogPaintDone = true;\r\n  };\r\n\r\n  const updateStats = (filteredCount, pageCount, totalPages) => {\r\n    if (!stats) return;\r\n    const total = allProducts.length;\r\n    if (!total) {\r\n      stats.textContent = 'Keine Karten geladen.';\r\n      return;\r\n    }\r\n    if (totalPages > 1) {\r\n      stats.textContent = `${pageCount} von ${filteredCount} Karten (Seite ${currentPage}/${totalPages}) \u00B7 ${total} gesamt`;\r\n    } else {\r\n      stats.textContent = `${filteredCount} von ${total} Karten`;\r\n    }\r\n  };\r\n\r\n  let renderGeneration = 0;\r\n  let pageImageRefreshTimer = null;\r\n\r\n  const patchGridThumbs = (pageItems) => {\r\n    if (!grid) return;\r\n    pageItems.forEach((product, index) => {\r\n      if (!product.imageUrl || !product.handle) return;\r\n      const card = grid.querySelector(`[data-product-handle=\"${CSS.escape(product.handle)}\"]`);\r\n      if (!card) return;\r\n      const thumbWrap = card.querySelector('.tcg-singles-shop__thumb-wrap');\r\n      if (!thumbWrap) return;\r\n      mountProductThumb(thumbWrap, product, index);\r\n    });\r\n  };\r\n\r\n  const hydratePageImages = async (pageItems, generation) => {\r\n    if (!pageItems.length) return;\r\n    const byHandle = await refreshPageImageUrls(pageItems);\r\n    if (generation !== renderGeneration) return;\r\n    if (!byHandle.size) return;\r\n\r\n    mergeFreshImageUrls(byHandle);\r\n    const refreshedItems = pageItems.map((product) => {\r\n      const fresh = byHandle.get(product.handle);\r\n      return fresh ? { ...product, imageUrl: fresh, hasOwnPhoto: true } : product;\r\n    });\r\n    patchGridThumbs(refreshedItems);\r\n    const filtered = visibleProducts();\r\n    const totalPages = Math.max(1, Math.ceil(filtered.length / productsPerPage));\r\n    prefetchAdjacentPages(filtered, totalPages);\r\n  };\r\n\r\n  const patchGridAvailability = () => {\r\n    if (!grid) return;\r\n    grid.querySelectorAll('[data-product-handle]').forEach((card) => {\r\n      const handle = card.dataset.productHandle || '';\r\n      const product = allProducts.find((row) => row.handle === handle);\r\n      if (!product) return;\r\n      card.classList.toggle('is-out-of-stock', !product.available);\r\n\r\n      const body = card.querySelector('.tcg-singles-shop__card-body');\r\n      if (!body) return;\r\n\r\n      const priceBlock = body.querySelector('.tcg-singles-shop__card-price-block');\r\n      const unavail = body.querySelector('.tcg-singles-shop__card-unavailable');\r\n\r\n      if (product.available && product.priceCents > 0) {\r\n        unavail?.remove();\r\n        if (!priceBlock) {\r\n          const priceWrap = document.createElement('div');\r\n          priceWrap.className = 'tcg-singles-shop__card-price-block';\r\n\r\n          const priceLabelEl = document.createElement('span');\r\n          priceLabelEl.className = 'tcg-singles-shop__card-price-label';\r\n          priceLabelEl.textContent = priceLabel;\r\n\r\n          const priceValue = document.createElement('p');\r\n          priceValue.className = 'tcg-singles-shop__card-price';\r\n          priceValue.textContent = formatMoney(product.priceCents);\r\n\r\n          priceWrap.append(priceLabelEl, priceValue);\r\n          body.append(priceWrap);\r\n        } else {\r\n          const priceValue = priceBlock.querySelector('.tcg-singles-shop__card-price');\r\n          if (priceValue) priceValue.textContent = formatMoney(product.priceCents);\r\n        }\r\n      } else {\r\n        priceBlock?.remove();\r\n        if (!unavail) {\r\n          const next = document.createElement('p');\r\n          next.className = 'tcg-singles-shop__card-unavailable';\r\n          next.textContent = 'Nicht auf Lager';\r\n          body.append(next);\r\n        }\r\n      }\r\n\r\n      const fab = card.querySelector('.tcg-singles-shop__card-cart-fab');\r\n      if (product.available && product.variantId) {\r\n        if (!fab) {\r\n          const thumbWrap = card.querySelector('.tcg-singles-shop__thumb-wrap');\r\n          if (thumbWrap) {\r\n            const nextFab = document.createElement('button');\r\n            nextFab.type = 'button';\r\n            nextFab.className = 'tcg-singles-shop__card-cart-fab';\r\n            nextFab.setAttribute('aria-label', `${product.cardName} in den Warenkorb`);\r\n            nextFab.title = 'In den Warenkorb';\r\n            nextFab.innerHTML =\r\n              '<span class=\"tcg-singles-shop__card-cart-fab-icon\" aria-hidden=\"true\"></span>';\r\n            nextFab.addEventListener('click', async (event) => {\r\n              event.preventDefault();\r\n              event.stopPropagation();\r\n              nextFab.disabled = true;\r\n              await addToCart(product.variantId, product.cardName, product.sku);\r\n              nextFab.disabled = false;\r\n            });\r\n            thumbWrap.append(nextFab);\r\n          }\r\n        }\r\n      } else {\r\n        fab?.remove();\r\n      }\r\n    });\r\n  };\r\n\r\n  const render = ({ refreshImages = true } = {}) => {\r\n    const filtered = visibleProducts();\r\n    const totalPages = Math.max(1, Math.ceil(filtered.length / productsPerPage));\r\n    if (currentPage > totalPages) currentPage = totalPages;\r\n\r\n    const start = (currentPage - 1) * productsPerPage;\r\n    const pageItems = filtered.slice(start, start + productsPerPage);\r\n\r\n    renderGeneration += 1;\r\n    const generation = renderGeneration;\r\n    const isFirstCatalogPaint = !initialCatalogPaintDone;\r\n\r\n    renderGrid(pageItems);\r\n    markCatalogReady();\r\n    renderPagination(totalPages);\r\n    updateStats(filtered.length, pageItems.length, totalPages);\r\n    updateClearButton();\r\n    prefetchAdjacentPages(filtered, totalPages);\r\n\r\n    if (refreshImages && pageItems.length) {\r\n      clearTimeout(pageImageRefreshTimer);\r\n      // Delay first image refresh slightly so the SSR\u2192JS handoff isn't fighting thumb swaps.\r\n      const delayMs = isFirstCatalogPaint ? 180 : 60;\r\n      pageImageRefreshTimer = setTimeout(() => {\r\n        void hydratePageImages(pageItems, generation);\r\n      }, delayMs);\r\n    }\r\n  };\r\n\r\n  const resetFilters = () => {\r\n    FILTER_DEFS.forEach(({ key }) => activeFilters[key].clear());\r\n    stockOnly = false;\r\n    if (stockFilterInput) stockFilterInput.checked = false;\r\n    if (searchInput) searchInput.value = '';\r\n    currentPage = 1;\r\n    renderFilterGroups();\r\n    render();\r\n  };\r\n\r\n  const debounce = (fn, waitMs) => {\r\n    let timer = null;\r\n    return (...args) => {\r\n      clearTimeout(timer);\r\n      timer = setTimeout(() => fn(...args), waitMs);\r\n    };\r\n  };\r\n\r\n  searchInput?.addEventListener(\r\n    'input',\r\n    debounce(() => {\r\n      currentPage = 1;\r\n      render();\r\n    }, 250)\r\n  );\r\n\r\n  sortSelect?.addEventListener('change', () => {\r\n    currentPage = 1;\r\n    render();\r\n  });\r\n\r\n  clearFiltersBtn?.addEventListener('click', resetFilters);\r\n\r\n  stockFilterInput?.addEventListener('change', () => {\r\n    stockOnly = Boolean(stockFilterInput.checked);\r\n    currentPage = 1;\r\n    render();\r\n  });\r\n\r\n  const bindCartOpeners = () => {\r\n    const open = () => {\r\n      void openCartSelectionDrawer();\r\n    };\r\n    viewCartBtn?.addEventListener('click', open);\r\n    cartDrawer?.querySelectorAll('[data-singles-cart-close]').forEach((btn) => {\r\n      btn.addEventListener('click', closeCartSelectionDrawer);\r\n    });\r\n  };\r\n\r\n  /** Header cart icon links to /cart by default; open our drawer on the Singles page instead. */\r\n  const bindHeaderCartIcon = () => {\r\n    document.addEventListener(\r\n      'click',\r\n      (event) => {\r\n        const cartLink = event.target.closest('#cart-icon-bubble');\r\n        if (!cartLink || !root.isConnected) return;\r\n        event.preventDefault();\r\n        event.stopImmediatePropagation();\r\n        void openCartSelectionDrawer();\r\n      },\r\n      true\r\n    );\r\n  };\r\n\r\n  bindCartOpeners();\r\n  bindHeaderCartIcon();\r\n  window.Kl24CartDrawerCheckout?.bind(cartDrawer);\r\n\r\n  document.addEventListener('cart:refresh', () => {\r\n    void syncCartFromShopify();\r\n  });\r\n\r\n  if (typeof subscribe === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') {\r\n    subscribe(PUB_SUB_EVENTS.cartUpdate, () => {\r\n      void syncCartFromShopify();\r\n    });\r\n  }\r\n\r\n  const applyLiveAvailability = async () => {\r\n    const api = window.Kl24InventoryReservation;\r\n    if (!api?.isEnabled?.()) return;\r\n    const variantIds = allProducts.map((p) => p.variantId).filter(Boolean);\r\n    if (!variantIds.length) return;\r\n\r\n    for (let i = 0; i < variantIds.length; i += 40) {\r\n      const chunk = variantIds.slice(i, i + 40);\r\n      try {\r\n        await api.fetchAvailability({ variantIds: chunk, force: i === 0 });\r\n      } catch (error) {\r\n        console.warn('[Singles-Shop] Verf\u00FCgbarkeit:', error);\r\n        return;\r\n      }\r\n    }\r\n\r\n    allProducts = allProducts.map((product) => {\r\n      const cached = api.getCachedAvailability?.({ variantId: product.variantId });\r\n      if (!cached) return product;\r\n      return {\r\n        ...product,\r\n        available: cached.available > 0,\r\n        cockpitAvailable: cached.available,\r\n      };\r\n    });\r\n  };\r\n\r\n  let availabilityRenderTimer = null;\r\n\r\n  document.addEventListener('kl24:availability', () => {\r\n    const api = window.Kl24InventoryReservation;\r\n    if (!api?.isEnabled?.() || !allProducts.length) return;\r\n    allProducts = allProducts.map((product) => {\r\n      const cached = api.getCachedAvailability?.({ variantId: product.variantId });\r\n      if (!cached) return product;\r\n      return {\r\n        ...product,\r\n        available: cached.available > 0,\r\n        cockpitAvailable: cached.available,\r\n      };\r\n    });\r\n    clearTimeout(availabilityRenderTimer);\r\n    availabilityRenderTimer = setTimeout(() => {\r\n      renderFilterGroups();\r\n      if (grid?.querySelector('[data-product-handle]')) {\r\n        patchGridAvailability();\r\n        updateClearButton();\r\n      } else {\r\n        render({ refreshImages: false });\r\n      }\r\n    }, 350);\r\n  });\r\n\r\n  const ensureCatalogScript = () =>\r\n    new Promise((resolve, reject) => {\r\n      if (window.Kl24SinglesCatalog?.fetchSinglesProducts) {\r\n        resolve();\r\n        return;\r\n      }\r\n      const src = window.Kl24SinglesCatalogSrc;\r\n      if (!src) {\r\n        resolve();\r\n        return;\r\n      }\r\n      const existing = document.querySelector('script[data-kl24-singles-catalog]');\r\n      if (existing) {\r\n        existing.addEventListener('load', () => resolve(), { once: true });\r\n        existing.addEventListener('error', () => reject(new Error('Katalog-Skript fehlgeschlagen')), {\r\n          once: true,\r\n        });\r\n        return;\r\n      }\r\n      const script = document.createElement('script');\r\n      script.src = src;\r\n      script.defer = true;\r\n      script.dataset.kl24SinglesCatalog = '1';\r\n      script.onload = () => resolve();\r\n      script.onerror = () => reject(new Error('Katalog-Skript fehlgeschlagen'));\r\n      document.head.append(script);\r\n    });\r\n\r\n  let catalogBootPromise = null;\r\n  const bootFullCatalog = async () => {\r\n    if (catalogBootPromise) return catalogBootPromise;\r\n    catalogBootPromise = (async () => {\r\n      try {\r\n        await ensureCatalogScript();\r\n        await loadSetIndex();\r\n        allProducts = [];\r\n        let firstPaintDone = false;\r\n        await loadAllProducts(() => {\r\n          if (firstPaintDone || allProducts.length < productsPerPage) return;\r\n          firstPaintDone = true;\r\n          rebuildVariantIndex();\r\n          buildSetDisplayNameIndex();\r\n          applyElementFromUrl();\r\n          renderFilterGroups();\r\n          render();\r\n        });\r\n        rebuildVariantIndex();\r\n        buildSetDisplayNameIndex();\r\n        applyElementFromUrl();\r\n        renderFilterGroups();\r\n        render();\r\n        void applyLiveAvailability()\r\n          .then(() => {\r\n            renderFilterGroups();\r\n            if (grid?.querySelector('[data-product-handle]')) {\r\n              patchGridAvailability();\r\n            } else {\r\n              render({ refreshImages: false });\r\n            }\r\n          })\r\n          .catch((error) => {\r\n            console.warn('[Singles-Shop] Verf\u00FCgbarkeit (Hintergrund):', error);\r\n          });\r\n      } catch (error) {\r\n        catalogBootPromise = null;\r\n        if (grid && !grid.querySelector('[data-ssr-product-card], [data-product-handle]')) {\r\n          grid.replaceChildren();\r\n          const el = document.createElement('p');\r\n          el.className = 'tcg-singles-shop__loading';\r\n          el.textContent = 'Karten konnten nicht geladen werden.';\r\n          grid.append(el);\r\n        }\r\n        if (stats) stats.textContent = error.message || 'Ladefehler';\r\n        showFeedback(error.message || 'Ladefehler', 'error');\r\n        throw error;\r\n      }\r\n    })();\r\n    return catalogBootPromise;\r\n  };\r\n\r\n  const scheduleDeferredCatalogBoot = () => {\r\n    let started = false;\r\n    const start = () => {\r\n      if (started) return;\r\n      started = true;\r\n      detach();\r\n      void bootFullCatalog();\r\n    };\r\n    const onInteract = () => start();\r\n    const detach = () => {\r\n      searchInput?.removeEventListener('focus', onInteract);\r\n      searchInput?.removeEventListener('input', onInteract);\r\n      sortSelect?.removeEventListener('change', onInteract);\r\n      filterGroups?.removeEventListener('click', onInteract);\r\n      clearFiltersBtn?.removeEventListener('click', onInteract);\r\n      stockFilterInput?.removeEventListener('change', onInteract);\r\n      window.removeEventListener('scroll', onInteract, { passive: true });\r\n      window.removeEventListener('pointerdown', onInteract);\r\n      window.removeEventListener('keydown', onInteract);\r\n    };\r\n\r\n    searchInput?.addEventListener('focus', onInteract, { once: true });\r\n    searchInput?.addEventListener('input', onInteract, { once: true });\r\n    sortSelect?.addEventListener('change', onInteract, { once: true });\r\n    filterGroups?.addEventListener('click', onInteract, { once: true });\r\n    clearFiltersBtn?.addEventListener('click', onInteract, { once: true });\r\n    stockFilterInput?.addEventListener('change', onInteract, { once: true });\r\n    window.addEventListener('scroll', onInteract, { once: true, passive: true });\r\n    window.addEventListener('pointerdown', onInteract, { once: true });\r\n    window.addEventListener('keydown', onInteract, { once: true });\r\n\r\n    const hasUrlFilters =\r\n      /[?&](q|set|element|condition|finish|sort|page)=/i.test(window.location.search || '');\r\n    if (hasUrlFilters) {\r\n      start();\r\n      return;\r\n    }\r\n  };\r\n\r\n  void syncCartFromShopify().catch(() => {});\r\n  scheduleDeferredCatalogBoot();\r\n})();\r\n"],
  "mappings": "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",
  "names": ["chrome"]
}
