{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/kl24-inventory-reservation-v5.js?cb=1781414667"],
  "sourcesContent": ["/**\r\n * Cockpit soft-reservation helper for Pok\u00E9mon singles (PDP, Singles-Shop, collections).\r\n * kl24-inventory-reservation-v5\r\n */\r\n(function () {\r\n  if (window.Kl24InventoryReservation) return;\r\n  // Session owner = Shopify cart token (shared across tabs of the same cart).\r\n  // Legacy key kept for migration cleanup only \u2014 never create new tab-scoped UUIDs.\r\n  const SESSION_KEY = 'kl24_gap_filler_session';\r\n  const CART_TOKEN_KEY = 'kl24_reserve_cart_token';\r\n  const HEARTBEAT_MS = 4 * 60 * 1000;\r\n  const AVAILABILITY_TTL_MS = 45 * 1000;\r\n\r\n  /** @type {Map<string, {available: number, reservedBySession: boolean, sessionReservedQty: number, fetchedAt: number}>} */\r\n  const availabilityCache = new Map();\r\n\r\n  let heartbeatTimer = null;\r\n  let reconcileInFlight = null;\r\n  let reconcileTimer = null;\r\n  let reconcileResolveWaiters = [];\r\n  /** @type {string|null} */\r\n  let cachedCartSessionId = null;\r\n  /** @type {Promise<string>|null} */\r\n  let cartSessionReady = null;\r\n\r\n  const resolveApiBase = () => {\r\n    const fromHtml = document.documentElement.dataset.cockpitApiBase || '';\r\n    const fromBody = document.body?.dataset?.cockpitApiBase || '';\r\n    const fromSection = document.querySelector('[data-api-base]')?.dataset?.apiBase || '';\r\n    const explicit = String(fromHtml || fromBody || fromSection || window.KL24_COCKPIT_API_BASE || '')\r\n      .trim()\r\n      .replace(/\\/$/, '');\r\n    if (explicit) {\r\n      if (/kartenladen24\\.de$/i.test(window.location.hostname) && explicit.includes('loca.lt')) {\r\n        console.warn('[KL24 Reserve] Ignoriere loca.lt Cockpit-URL auf Produktion.');\r\n        return '';\r\n      }\r\n      return explicit;\r\n    }\r\n    const useAppProxy = document.documentElement.dataset.cockpitUseAppProxy === 'true';\r\n    if (useAppProxy && /kartenladen24\\.de$/i.test(window.location.hostname)) {\r\n      return '/apps/kl24-cockpit';\r\n    }\r\n    return '';\r\n  };\r\n\r\n  /** Map Shopify cart.token \u2192 Cockpit session_id (max 128, shared across tabs). */\r\n  const sessionIdFromCartToken = (token) => {\r\n    const raw = String(token || '').trim();\r\n    if (!raw) return null;\r\n    // Keep readable prefix; strip query/noise; fit API max_length=128.\r\n    const compact = raw.split('?')[0].replace(/[^a-zA-Z0-9_-]/g, '');\r\n    if (compact.length < 8) return null;\r\n    const id = `c_${compact}`.slice(0, 128);\r\n    return id.length >= 8 ? id : null;\r\n  };\r\n\r\n  const persistCartSession = (sessionId, token) => {\r\n    cachedCartSessionId = sessionId;\r\n    try {\r\n      // localStorage is shared across tabs (sessionStorage is not).\r\n      localStorage.setItem(SESSION_KEY, sessionId);\r\n      if (token) localStorage.setItem(CART_TOKEN_KEY, String(token));\r\n      // Clear legacy tab-scoped id so other code paths don't diverge.\r\n      sessionStorage.removeItem(SESSION_KEY);\r\n    } catch {\r\n      /* ignore quota / private mode */\r\n    }\r\n  };\r\n\r\n  /** Release holds for an explicit session (old cart.token / legacy UUID). Never sync_shopify. */\r\n  const releaseSessionId = async (sessionId) => {\r\n    const id = String(sessionId || '').trim();\r\n    if (!resolveApiBase() || id.length < 8 || id.startsWith('c_pending_')) {\r\n      return { ok: true, released: 0 };\r\n    }\r\n    try {\r\n      return await post('/integrations/inventory/release', {\r\n        session_id: id,\r\n        release_all: true,\r\n        sync_shopify: false,\r\n      });\r\n    } catch (error) {\r\n      console.warn('[KL24 Reserve] release session:', error?.message || error);\r\n      return { ok: true, released: 0, degraded: true };\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Adopt Shopify cart.token as owner. On token/legacy change, release previous\r\n   * session holds (TTL still covers anything we miss). Prevents rollout conflicts\r\n   * when Bestandskunden still have a tab-scoped UUID in sessionStorage.\r\n   */\r\n  const adoptCartSession = (sessionId, token) => {\r\n    const previous = [];\r\n    try {\r\n      const prevLocal = localStorage.getItem(SESSION_KEY);\r\n      if (prevLocal && prevLocal !== sessionId && String(prevLocal).length >= 8) {\r\n        previous.push(prevLocal);\r\n      }\r\n      const prevToken = localStorage.getItem(CART_TOKEN_KEY);\r\n      if (prevToken && token && String(prevToken) !== String(token)) {\r\n        const fromOldToken = sessionIdFromCartToken(prevToken);\r\n        if (fromOldToken && fromOldToken !== sessionId) previous.push(fromOldToken);\r\n      }\r\n      const legacyTab = sessionStorage.getItem(SESSION_KEY);\r\n      if (legacyTab && legacyTab !== sessionId && String(legacyTab).length >= 8) {\r\n        previous.push(legacyTab);\r\n      }\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n    persistCartSession(sessionId, token);\r\n    const seen = new Set();\r\n    previous.forEach((oldId) => {\r\n      if (!oldId || oldId === sessionId || seen.has(oldId)) return;\r\n      seen.add(oldId);\r\n      void releaseSessionId(oldId);\r\n    });\r\n  };\r\n\r\n  const getSessionId = () => {\r\n    if (cachedCartSessionId) return cachedCartSessionId;\r\n    try {\r\n      const fromLocal = localStorage.getItem(SESSION_KEY);\r\n      if (fromLocal && fromLocal.startsWith('c_') && fromLocal.length >= 8) {\r\n        cachedCartSessionId = fromLocal;\r\n        return fromLocal;\r\n      }\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n    // Sync callers before cart.js resolves: temporary id; refreshCartSessionId replaces it.\r\n    const pending = `c_pending_${Date.now().toString(36)}`;\r\n    cachedCartSessionId = pending;\r\n    return pending;\r\n  };\r\n\r\n  const refreshCartSessionId = async () => {\r\n    if (cartSessionReady) return cartSessionReady;\r\n    cartSessionReady = (async () => {\r\n      try {\r\n        const res = await fetch(`/cart.js?_=${Date.now()}`, {\r\n          headers: { Accept: 'application/json' },\r\n          credentials: 'same-origin',\r\n          cache: 'no-store',\r\n        });\r\n        if (!res.ok) return getSessionId();\r\n        const cart = await res.json();\r\n        const id = sessionIdFromCartToken(cart?.token);\r\n        if (id) {\r\n          adoptCartSession(id, cart.token);\r\n          return id;\r\n        }\r\n      } catch (error) {\r\n        console.warn('[KL24 Reserve] cart token:', error?.message || error);\r\n      } finally {\r\n        cartSessionReady = null;\r\n      }\r\n      return getSessionId();\r\n    })();\r\n    return cartSessionReady;\r\n  };\r\n\r\n  const isEnabled = () => Boolean(resolveApiBase());\r\n\r\n  const COCKPIT_FETCH_TIMEOUT_MS = 4000;\r\n  const SYNC_CART_TIMEOUT_MS = 15000;\r\n  const SYNC_DEBOUNCE_MS = 700;\r\n  const SYNC_RETRY_BACKOFF_MS = 1000;\r\n\r\n  const cockpitRequestHeaders = (apiBase, extra = {}) => {\r\n    const headers = { Accept: 'application/json', ...extra };\r\n    if (apiBase.includes('loca.lt')) {\r\n      headers['Bypass-Tunnel-Reminder'] = 'true';\r\n    }\r\n    return headers;\r\n  };\r\n\r\n  const isNetworkFetchError = (error) => {\r\n    if (!error) return false;\r\n    const name = String(error.name || '');\r\n    const message = String(error.message || '');\r\n    return (\r\n      name === 'AbortError' ||\r\n      name === 'TypeError' ||\r\n      /networkerror|failed to fetch|load failed|network request failed/i.test(message)\r\n    );\r\n  };\r\n\r\n  const request = async (method, path, body, timeoutMs = COCKPIT_FETCH_TIMEOUT_MS) => {\r\n    const apiBase = resolveApiBase();\r\n    if (!apiBase) return null;\r\n    const controller = new AbortController();\r\n    const timeoutId = window.setTimeout(() => controller.abort(), timeoutMs);\r\n    const init = {\r\n      method,\r\n      headers: cockpitRequestHeaders(apiBase),\r\n      signal: controller.signal,\r\n    };\r\n    if (body != null) {\r\n      init.headers['Content-Type'] = 'application/json';\r\n      init.body = JSON.stringify(body);\r\n    }\r\n    try {\r\n      const res = await fetch(`${apiBase}${path}`, init);\r\n      if (!res.ok) {\r\n        const errBody = await res.json().catch(() => ({}));\r\n        const detail = errBody.detail;\r\n        const message =\r\n          typeof detail === 'string'\r\n            ? detail\r\n            : detail?.message || errBody.message || `Cockpit ${res.status}`;\r\n        throw new Error(message);\r\n      }\r\n      return res.json();\r\n    } catch (error) {\r\n      if (isNetworkFetchError(error)) {\r\n        const degraded = new Error('Cockpit API nicht erreichbar');\r\n        degraded.networkDegraded = true;\r\n        throw degraded;\r\n      }\r\n      throw error;\r\n    } finally {\r\n      window.clearTimeout(timeoutId);\r\n    }\r\n  };\r\n\r\n  const post = (path, body, timeoutMs) => request('POST', path, body, timeoutMs);\r\n\r\n  const cacheKeyForVariant = (variantId) => `v:${String(variantId || '').trim()}`;\r\n  const cacheKeyForSku = (sku) => `s:${String(sku || '').trim().toUpperCase()}`;\r\n\r\n  const storeAvailabilityRows = (rows) => {\r\n    (rows || []).forEach((row) => {\r\n      const payload = {\r\n        available: Math.max(0, Number(row?.available) || 0),\r\n        reservedBySession: Boolean(row?.reserved_by_session),\r\n        sessionReservedQty: Math.max(0, Number(row?.session_reserved_qty) || 0),\r\n        stock: Math.max(0, Number(row?.stock) || 0),\r\n        fetchedAt: Date.now(),\r\n      };\r\n      const numeric = String(row?.shopify_variant_numeric_id || '').trim();\r\n      const gid = String(row?.shopify_variant_id || '').trim();\r\n      const sku = String(row?.sku || '').trim();\r\n      if (numeric) availabilityCache.set(cacheKeyForVariant(numeric), payload);\r\n      if (gid) availabilityCache.set(cacheKeyForVariant(gid.replace(/^gid:\\/\\/shopify\\/ProductVariant\\//, '')), payload);\r\n      if (sku) availabilityCache.set(cacheKeyForSku(sku), payload);\r\n    });\r\n    document.dispatchEvent(new CustomEvent('kl24:availability', { detail: { rows } }));\r\n  };\r\n\r\n  const fetchAvailability = async ({ variantIds = [], skus = [], force = false } = {}) => {\r\n    if (!isEnabled()) return [];\r\n    const variantList = [...new Set((variantIds || []).map((id) => String(id).trim()).filter(Boolean))];\r\n    const skuList = [...new Set((skus || []).map((s) => String(s).trim()).filter(Boolean))];\r\n    if (!variantList.length && !skuList.length) return [];\r\n\r\n    if (!force) {\r\n      const allFresh = [...variantList, ...skuList].every((_, idx) => {\r\n        const key =\r\n          idx < variantList.length\r\n            ? cacheKeyForVariant(variantList[idx])\r\n            : cacheKeyForSku(skuList[idx - variantList.length]);\r\n        const hit = availabilityCache.get(key);\r\n        return hit && Date.now() - hit.fetchedAt < AVAILABILITY_TTL_MS;\r\n      });\r\n      if (allFresh && variantList.length + skuList.length > 0) {\r\n        return [...variantList, ...skuList].map((_, idx) => {\r\n          const key =\r\n            idx < variantList.length\r\n              ? cacheKeyForVariant(variantList[idx])\r\n              : cacheKeyForSku(skuList[idx - variantList.length]);\r\n          return availabilityCache.get(key);\r\n        });\r\n      }\r\n    }\r\n\r\n    const params = new URLSearchParams();\r\n    params.set('session_id', getSessionId());\r\n    variantList.forEach((id) => params.append('shopify_variant_id', id));\r\n    skuList.forEach((sku) => params.append('sku', sku));\r\n\r\n    const apiBase = resolveApiBase();\r\n    const controller = new AbortController();\r\n    const timeoutId = window.setTimeout(() => controller.abort(), COCKPIT_FETCH_TIMEOUT_MS);\r\n    try {\r\n      const res = await fetch(`${apiBase}/integrations/inventory/availability?${params.toString()}`, {\r\n        headers: {\r\n          Accept: 'application/json',\r\n          ...(apiBase.includes('loca.lt') ? { 'Bypass-Tunnel-Reminder': 'true' } : {}),\r\n        },\r\n        signal: controller.signal,\r\n      });\r\n      if (!res.ok) {\r\n        console.warn('[KL24 Reserve] availability:', res.status);\r\n        return [];\r\n      }\r\n      const data = await res.json();\r\n      const rows = data.items || [];\r\n      storeAvailabilityRows(rows);\r\n      return rows;\r\n    } catch (error) {\r\n      if (isNetworkFetchError(error)) {\r\n        console.warn('[KL24 Reserve] availability network:', error.message || error);\r\n        return [];\r\n      }\r\n      throw error;\r\n    } finally {\r\n      window.clearTimeout(timeoutId);\r\n    }\r\n  };\r\n\r\n  const getCachedAvailability = ({ variantId, sku } = {}) => {\r\n    const byVariant = variantId ? availabilityCache.get(cacheKeyForVariant(variantId)) : null;\r\n    if (byVariant) return byVariant;\r\n    if (sku) return availabilityCache.get(cacheKeyForSku(sku)) || null;\r\n    return null;\r\n  };\r\n\r\n  const reserve = async ({\r\n    shopifyVariantId,\r\n    sku,\r\n    quantity = 1,\r\n    syncShopify = false,\r\n    timeoutMs,\r\n  } = {}) => {\r\n    void syncShopify; // hard-disabled \u2014 never ask API to write Shopify inventory\r\n    const variantId = shopifyVariantId != null ? String(shopifyVariantId).trim() : '';\r\n    const skuClean = sku != null ? String(sku).trim() : '';\r\n    if (!resolveApiBase() || (!variantId && !skuClean)) {\r\n      return { ok: true, skipped: true };\r\n    }\r\n    await refreshCartSessionId();\r\n    const result = await post(\r\n      '/integrations/inventory/reserve',\r\n      {\r\n        session_id: getSessionId(),\r\n        quantity: Math.max(1, Number(quantity) || 1),\r\n        shopify_variant_id: variantId || null,\r\n        sku: skuClean || null,\r\n        sync_shopify: false,\r\n      },\r\n      timeoutMs\r\n    ).catch((error) => {\r\n      console.warn('[KL24 Reserve] reserve \u00FCbersprungen:', error?.message || error);\r\n      return { ok: true, skipped: true, degraded: true };\r\n    });\r\n    if (!result || result.degraded || result.skipped || result.ok === false) return result;\r\n    await fetchAvailability({\r\n      variantIds: variantId ? [variantId] : [],\r\n      skus: skuClean ? [skuClean] : [],\r\n      force: true,\r\n    });\r\n    return result;\r\n  };\r\n\r\n  const release = async ({\r\n    shopifyVariantId,\r\n    sku,\r\n    syncShopify = false,\r\n    releaseAll = false,\r\n  } = {}) => {\r\n    void syncShopify;\r\n    if (!resolveApiBase()) return { ok: true, released: 0 };\r\n    const variantId = shopifyVariantId != null ? String(shopifyVariantId).trim() : '';\r\n    const skuClean = sku != null ? String(sku).trim() : '';\r\n    if (!releaseAll && !variantId && !skuClean) {\r\n      return { ok: true, released: 0 };\r\n    }\r\n    await refreshCartSessionId();\r\n    const result = await post('/integrations/inventory/release', {\r\n      session_id: getSessionId(),\r\n      shopify_variant_id: releaseAll ? null : variantId || null,\r\n      sku: releaseAll ? null : skuClean || null,\r\n      release_all: Boolean(releaseAll),\r\n      sync_shopify: false,\r\n    });\r\n    await fetchAvailability({\r\n      variantIds: variantId ? [variantId] : [],\r\n      skus: skuClean ? [skuClean] : [],\r\n      force: true,\r\n    });\r\n    return result;\r\n  };\r\n\r\n  const AVAIL_CHUNK = 40;\r\n\r\n  /** True when another session holds the last unit(s); own holds still count as available. */\r\n  const isHeldByOthers = (hit) =>\r\n    Boolean(hit && hit.available <= 0 && !hit.reservedBySession);\r\n\r\n  const AVAIL_PARALLEL = 3;\r\n\r\n  /**\r\n   * Batch /availability for cards (chunked, up to AVAIL_PARALLEL in flight).\r\n   * Fail-open when API offline (no hit); fail-closed when available===0 for others.\r\n   */\r\n  const filterAvailableCards = async (cards, { force = true } = {}) => {\r\n    const list = Array.isArray(cards) ? cards.filter(Boolean) : [];\r\n    if (!list.length || !isEnabled()) {\r\n      return { keep: list, blocked: [], degraded: !isEnabled() };\r\n    }\r\n    const variantIds = [\r\n      ...new Set(list.map((card) => String(card.variantId || card.id || '').trim()).filter(Boolean)),\r\n    ];\r\n    const skus = [\r\n      ...new Set(list.map((card) => String(card.sku || '').trim()).filter(Boolean)),\r\n    ];\r\n    const chunks = [];\r\n    for (let i = 0; i < variantIds.length; i += AVAIL_CHUNK) {\r\n      chunks.push(variantIds.slice(i, i + AVAIL_CHUNK));\r\n    }\r\n    for (let i = 0; i < chunks.length; i += AVAIL_PARALLEL) {\r\n      const slice = chunks.slice(i, i + AVAIL_PARALLEL);\r\n      await Promise.all(\r\n        slice.map((variantChunk) => fetchAvailability({ variantIds: variantChunk, force }))\r\n      );\r\n    }\r\n    if (skus.length && skus.length <= AVAIL_CHUNK) {\r\n      await fetchAvailability({ skus, force: false });\r\n    }\r\n    const keep = [];\r\n    const blocked = [];\r\n    list.forEach((card) => {\r\n      const hit = getCachedAvailability({\r\n        variantId: card.variantId || card.id,\r\n        sku: card.sku,\r\n      });\r\n      if (isHeldByOthers(hit)) blocked.push(card);\r\n      else keep.push(card);\r\n    });\r\n    return { keep, blocked, degraded: false };\r\n  };\r\n\r\n  const ensureConflictNoticeStyles = () => {\r\n    if (document.getElementById('kl24-reserve-conflict-style')) return;\r\n    const style = document.createElement('style');\r\n    style.id = 'kl24-reserve-conflict-style';\r\n    style.textContent = `\r\n      .kl24-reserve-conflict-host {\r\n        margin: 0 0 1rem;\r\n      }\r\n      .kl24-reserve-conflict-notice {\r\n        margin: 0 0 1rem;\r\n        padding: 1rem 1.2rem;\r\n        border: 0.1rem solid rgba(234, 179, 8, 0.55);\r\n        border-radius: 0.8rem;\r\n        background: rgba(234, 179, 8, 0.12);\r\n        color: rgb(var(--color-foreground, 30, 30, 30));\r\n        font-size: 1.4rem;\r\n        line-height: 1.4;\r\n      }\r\n      .kl24-reserve-conflict-notice[hidden] { display: none !important; }\r\n      #kl24-reserve-conflict-host-drawer {\r\n        margin: 0.8rem 1.2rem 0;\r\n      }\r\n      .template-cart #kl24-reserve-conflict-host {\r\n        margin: 1.2rem 0 0;\r\n      }\r\n    `;\r\n    document.head.appendChild(style);\r\n  };\r\n\r\n  const conflictNoticeText = (removed) => {\r\n    if (!removed.length) return '';\r\n    if (removed.length === 1) {\r\n      const name = removed[0].title || removed[0].sku || 'Diese Karte';\r\n      return `\u201E${name}\u201C ist gerade bei einem anderen Kunden reserviert und wurde entfernt.`;\r\n    }\r\n    const names = removed\r\n      .slice(0, 3)\r\n      .map((row) => row.title || row.sku)\r\n      .filter(Boolean);\r\n    const head = names.length ? ` (${names.join(', ')}${removed.length > 3 ? ', \u2026' : ''})` : '';\r\n    return `${removed.length} Karten sind gerade bei anderen Kunden reserviert und wurden entfernt${head}.`;\r\n  };\r\n\r\n  const CONFLICT_NOTICE_KEY = 'kl24_reserve_conflict_notice';\r\n  const CONFLICT_NOTICE_SHOWN_KEY = 'kl24_reserve_conflict_notice_shown';\r\n  /** In-memory copy so the banner survives cart/drawer section re-renders (one-shot per conflict). */\r\n  let liveConflictNotice = '';\r\n  let conflictHostObserver = null;\r\n\r\n  const clearConflictNoticeStorage = () => {\r\n    liveConflictNotice = '';\r\n    try {\r\n      sessionStorage.removeItem(CONFLICT_NOTICE_KEY);\r\n      sessionStorage.removeItem(CONFLICT_NOTICE_SHOWN_KEY);\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n  };\r\n\r\n  const dismissConflictNoticeDom = () => {\r\n    document.querySelectorAll('.kl24-reserve-conflict-notice').forEach((el) => {\r\n      el.hidden = true;\r\n      el.textContent = '';\r\n    });\r\n  };\r\n\r\n  const isCartPage = () => /^\\/cart\\/?$/i.test(window.location.pathname || '');\r\n\r\n  /** Stable hosts OUTSIDE #main-cart-items / #CartDrawer-CartItems (those get re-rendered). */\r\n  const ensureConflictHosts = () => {\r\n    const mainItems = document.getElementById('main-cart-items');\r\n    if (mainItems) {\r\n      let host = document.getElementById('kl24-reserve-conflict-host');\r\n      if (!host) {\r\n        host = document.createElement('div');\r\n        host.id = 'kl24-reserve-conflict-host';\r\n        host.className = 'kl24-reserve-conflict-host';\r\n        const section = mainItems.closest('.shopify-section') || mainItems;\r\n        section.parentNode?.insertBefore(host, section);\r\n      }\r\n    }\r\n    const drawer = document.getElementById('CartDrawer');\r\n    if (drawer) {\r\n      let dhost = document.getElementById('kl24-reserve-conflict-host-drawer');\r\n      if (!dhost || !drawer.contains(dhost)) {\r\n        dhost = document.createElement('div');\r\n        dhost.id = 'kl24-reserve-conflict-host-drawer';\r\n        dhost.className = 'kl24-reserve-conflict-host';\r\n        const items = document.getElementById('CartDrawer-CartItems');\r\n        if (items && items.parentNode) items.parentNode.insertBefore(dhost, items);\r\n        else drawer.insertBefore(dhost, drawer.firstChild);\r\n      }\r\n    }\r\n  };\r\n\r\n  const markConflictNoticeShownOnCart = () => {\r\n    if (!isCartPage() || !liveConflictNotice) return;\r\n    const el = document.querySelector(\r\n      '#kl24-reserve-conflict-host .kl24-reserve-conflict-notice:not([hidden])'\r\n    );\r\n    if (!el || !(el.textContent || '').trim()) return;\r\n    const rect = el.getBoundingClientRect();\r\n    if (rect.width < 2 || rect.height < 2) return;\r\n    try {\r\n      sessionStorage.setItem(CONFLICT_NOTICE_SHOWN_KEY, '1');\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n  };\r\n\r\n  const showConflictNotice = (removed) => {\r\n    const text = conflictNoticeText(removed);\r\n    if (!text) return;\r\n    liveConflictNotice = text;\r\n    try {\r\n      sessionStorage.setItem(CONFLICT_NOTICE_KEY, text);\r\n      // Do NOT set shown yet \u2014 only after the banner is actually visible on /cart.\r\n      sessionStorage.removeItem(CONFLICT_NOTICE_SHOWN_KEY);\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n    paintConflictNotice(text);\r\n    startConflictHostObserver();\r\n  };\r\n\r\n  const paintConflictNotice = (text) => {\r\n    const msg = String(text || '').trim();\r\n    if (!msg) return;\r\n    ensureConflictNoticeStyles();\r\n    ensureConflictHosts();\r\n    const apply = (host) => {\r\n      if (!host) return;\r\n      let el = host.querySelector('.kl24-reserve-conflict-notice');\r\n      if (!el) {\r\n        el = document.createElement('p');\r\n        el.className = 'kl24-reserve-conflict-notice';\r\n        el.setAttribute('role', 'status');\r\n        el.setAttribute('aria-live', 'polite');\r\n        el.tabIndex = 0;\r\n        el.addEventListener('click', () => {\r\n          dismissConflictNoticeDom();\r\n          clearConflictNoticeStorage();\r\n        });\r\n        host.prepend(el);\r\n      }\r\n      el.hidden = false;\r\n      el.textContent = msg;\r\n    };\r\n    apply(document.getElementById('kl24-reserve-conflict-host'));\r\n    apply(document.getElementById('kl24-reserve-conflict-host-drawer'));\r\n    markConflictNoticeShownOnCart();\r\n  };\r\n\r\n  const repaintLiveConflictNotice = () => {\r\n    if (!liveConflictNotice) return;\r\n    paintConflictNotice(liveConflictNotice);\r\n  };\r\n\r\n  const startConflictHostObserver = () => {\r\n    if (conflictHostObserver || typeof MutationObserver === 'undefined') return;\r\n    const root = document.getElementById('MainContent') || document.body;\r\n    if (!root) return;\r\n    conflictHostObserver = new MutationObserver(() => {\r\n      if (!liveConflictNotice) return;\r\n      window.requestAnimationFrame(() => {\r\n        ensureConflictHosts();\r\n        repaintLiveConflictNotice();\r\n      });\r\n    });\r\n    conflictHostObserver.observe(root, { childList: true, subtree: true });\r\n  };\r\n\r\n  const restoreConflictNotice = () => {\r\n    try {\r\n      if (sessionStorage.getItem(CONFLICT_NOTICE_SHOWN_KEY) === '1') {\r\n        // Already shown once on /cart \u2014 do not re-show after reload.\r\n        sessionStorage.removeItem(CONFLICT_NOTICE_KEY);\r\n        liveConflictNotice = '';\r\n        return;\r\n      }\r\n      const text = sessionStorage.getItem(CONFLICT_NOTICE_KEY) || '';\r\n      if (text) {\r\n        liveConflictNotice = text;\r\n        paintConflictNotice(text);\r\n        startConflictHostObserver();\r\n      }\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n  };\r\n\r\n  let conflictResolveInFlight = null;\r\n\r\n  const isExplicitConflict = (row) =>\r\n    Boolean(row && row.ok === false && String(row.error || '') === 'conflict');\r\n\r\n  const removeConflictLinesFromCart = async (conflicts, cart) => {\r\n    // ONLY remove on explicit sync-cart error:\"conflict\". Never on timeout/5xx/network/unknown.\r\n    const rows = (conflicts || []).filter(isExplicitConflict);\r\n    const badIds = new Set(\r\n      rows\r\n        .map((row) =>\r\n          String(row.shopify_variant_numeric_id || row.shopify_variant_id || '')\r\n            .replace(/^.*\\//, '')\r\n            .trim()\r\n        )\r\n        .filter(Boolean)\r\n    );\r\n    const badSkus = new Set(\r\n      rows.map((row) => String(row.sku || '').trim().toUpperCase()).filter(Boolean)\r\n    );\r\n    if (!badIds.size && !badSkus.size) return { removed: [], cart: null };\r\n\r\n    const updates = {};\r\n    const removed = [];\r\n    (cart?.items || []).forEach((item) => {\r\n      const vid = String(item.variant_id || '');\r\n      const sku = String(item.sku || '').trim().toUpperCase();\r\n      if (!badIds.has(vid) && !(sku && badSkus.has(sku))) return;\r\n      updates[item.key] = 0;\r\n      removed.push({\r\n        variantId: vid,\r\n        title: item.product_title || item.title || '',\r\n        sku: item.sku || '',\r\n      });\r\n    });\r\n    if (!Object.keys(updates).length) return { removed: [], cart: null };\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: ['cart-icon-bubble', 'cart-drawer', 'main-cart-items', 'main-cart-footer'],\r\n        sections_url: window.location.pathname,\r\n      }),\r\n    });\r\n    if (!updateRes.ok) {\r\n      throw new Error('conflict_remove_failed');\r\n    }\r\n    const parsed = await updateRes.json();\r\n    return { removed, cart: parsed };\r\n  };\r\n\r\n  const applyCartPageSections = (parsed) => {\r\n    if (!parsed?.sections) return;\r\n    const applySection = (elementId, sectionKey) => {\r\n      const target = document.getElementById(elementId);\r\n      const html = parsed.sections[sectionKey];\r\n      if (!target || !html) return;\r\n      const doc = new DOMParser().parseFromString(html, 'text/html');\r\n      const source =\r\n        doc.getElementById(elementId) ||\r\n        doc.querySelector(`#${elementId}`) ||\r\n        doc.querySelector('.shopify-section');\r\n      if (!source) return;\r\n      target.innerHTML = source.innerHTML;\r\n      if (source.className) target.className = source.className;\r\n    };\r\n    applySection('main-cart-items', 'main-cart-items');\r\n    applySection('main-cart-footer', 'main-cart-footer');\r\n    const itemsEl = document.getElementById('main-cart-items');\r\n    if (itemsEl && parsed.item_count != null) {\r\n      itemsEl.classList.toggle('is-empty', parsed.item_count === 0);\r\n    }\r\n    document.querySelectorAll('.cart__empty-text, cart-items, .is-empty').forEach((node) => {\r\n      if (parsed.item_count === 0) node.classList?.add?.('is-empty');\r\n    });\r\n  };\r\n\r\n  const releaseMany = async (entries, { syncShopify = false } = {}) => {\r\n    for (const entry of entries || []) {\r\n      try {\r\n        await release({ ...entry, syncShopify: false });\r\n      } catch (error) {\r\n        console.warn('[KL24 Reserve] release:', error);\r\n      }\r\n    }\r\n  };\r\n\r\n  const heartbeat = async () => {\r\n    if (!isEnabled()) return { extended: 0 };\r\n    try {\r\n      return await post('/integrations/inventory/heartbeat', {\r\n        session_id: getSessionId(),\r\n      });\r\n    } catch (error) {\r\n      console.warn('[KL24 Reserve] heartbeat:', error);\r\n      return { extended: 0 };\r\n    }\r\n  };\r\n\r\n  const sleep = (ms) => new Promise((resolve) => window.setTimeout(resolve, ms));\r\n\r\n  const syncCartReservationsOnce = async ({ syncShopify = false } = {}) => {\r\n    void syncShopify;\r\n    if (!isEnabled()) return null;\r\n    await refreshCartSessionId();\r\n    const cartRes = await fetch(`/cart.js?_=${Date.now()}`, {\r\n      headers: { Accept: 'application/json' },\r\n      credentials: 'same-origin',\r\n      cache: 'no-store',\r\n    });\r\n    if (!cartRes.ok) return null;\r\n    const cart = await cartRes.json();\r\n    const tokenId = sessionIdFromCartToken(cart?.token);\r\n    if (tokenId) adoptCartSession(tokenId, cart.token);\r\n    const items = (cart.items || []).map((item) => ({\r\n      shopify_variant_id: item.variant_id,\r\n      sku: item.sku,\r\n      quantity: item.quantity,\r\n    }));\r\n    // Empty cart \u2192 release all holds for this cart token (covers /cart/clear + qty 0).\r\n    const result = await post(\r\n      '/integrations/inventory/sync-cart',\r\n      {\r\n        session_id: getSessionId(),\r\n        items,\r\n        // Never ask API to mirror reservations into Shopify inventory.\r\n        sync_shopify: false,\r\n      },\r\n      SYNC_CART_TIMEOUT_MS\r\n    );\r\n    const variantIds = items.map((item) => item.shopify_variant_id).filter(Boolean);\r\n    const skus = items.map((item) => item.sku).filter(Boolean);\r\n    if (variantIds.length || skus.length) {\r\n      await fetchAvailability({ variantIds, skus, force: true });\r\n    }\r\n\r\n    // Safety-net: remove cart lines ONLY when API marks error:\"conflict\".\r\n    // Timeouts / 5xx / network throw above and never reach this path (no remove, no banner).\r\n    const conflicts = (result?.items || []).filter(isExplicitConflict);\r\n    if (conflicts.length && !conflictResolveInFlight) {\r\n      conflictResolveInFlight = (async () => {\r\n        try {\r\n          const { removed, cart: updated } = await removeConflictLinesFromCart(conflicts, cart);\r\n          if (!removed.length) return result;\r\n          if (updated) {\r\n            applyCartPageSections(updated);\r\n            await refreshCartChrome(updated, {\r\n              openDrawer: false,\r\n              source: 'kl24-reserve-conflict',\r\n              reconcile: false,\r\n            });\r\n          }\r\n          // Banner lives outside replaced sections; paint after chrome refresh.\r\n          showConflictNotice(removed);\r\n          window.requestAnimationFrame(() => repaintLiveConflictNotice());\r\n          // Holds for remaining lines only (removed variants gone from cart.js).\r\n          return await syncCartReservationsOnce({ syncShopify: false });\r\n        } catch (error) {\r\n          // Remove/update failed (network/5xx): leave lines, no shopper banner.\r\n          console.warn('[KL24 Reserve] conflict remove:', error?.message || error);\r\n          return result;\r\n        } finally {\r\n          conflictResolveInFlight = null;\r\n        }\r\n      })();\r\n      return conflictResolveInFlight;\r\n    }\r\n    return result;\r\n  };\r\n\r\n  const syncCartReservations = async ({ syncShopify = false } = {}) => {\r\n    if (!isEnabled()) return null;\r\n    try {\r\n      return await syncCartReservationsOnce({ syncShopify: false });\r\n    } catch (error) {\r\n      try {\r\n        await sleep(SYNC_RETRY_BACKOFF_MS);\r\n        return await syncCartReservationsOnce({ syncShopify: false });\r\n      } catch {\r\n        // Silent for shoppers \u2014 reservation reconciles on next cart change / heartbeat.\r\n        return null;\r\n      }\r\n    }\r\n  };\r\n\r\n  const flushReconcileWaiters = (value) => {\r\n    const waiters = reconcileResolveWaiters.splice(0, reconcileResolveWaiters.length);\r\n    waiters.forEach((resolve) => resolve(value));\r\n  };\r\n\r\n  const runReconcileNow = async () => {\r\n    if (reconcileInFlight) return reconcileInFlight;\r\n    reconcileInFlight = syncCartReservations({ syncShopify: false }).finally(() => {\r\n      reconcileInFlight = null;\r\n    });\r\n    const result = await reconcileInFlight;\r\n    flushReconcileWaiters(result);\r\n    return result;\r\n  };\r\n\r\n  const reconcileCartReservations = async () => {\r\n    if (!isEnabled()) return null;\r\n    return new Promise((resolve) => {\r\n      reconcileResolveWaiters.push(resolve);\r\n      if (reconcileTimer) window.clearTimeout(reconcileTimer);\r\n      reconcileTimer = window.setTimeout(() => {\r\n        reconcileTimer = null;\r\n        void runReconcileNow();\r\n      }, SYNC_DEBOUNCE_MS);\r\n    });\r\n  };\r\n\r\n  const startHeartbeat = () => {\r\n    if (heartbeatTimer || !isEnabled()) return;\r\n    const tick = async () => {\r\n      await heartbeat();\r\n      await reconcileCartReservations();\r\n    };\r\n    void tick();\r\n    heartbeatTimer = window.setInterval(() => {\r\n      void tick();\r\n    }, HEARTBEAT_MS);\r\n  };\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  const applyCartIconBubbleSection = (html) => {\r\n    const target = document.getElementById('cart-icon-bubble');\r\n    if (!target || !html) return;\r\n    const doc = new DOMParser().parseFromString(html, 'text/html');\r\n    const section = doc.querySelector('.shopify-section');\r\n    if (section) target.innerHTML = section.innerHTML;\r\n  };\r\n\r\n  const fetchAndApplyCartBubble = async () => {\r\n    try {\r\n      const cartUrl = window.routes?.cart_url || '/cart';\r\n      const res = await fetch(`${cartUrl}?section_id=${CART_BUBBLE_SECTION}`);\r\n      if (!res.ok) return;\r\n      applyCartIconBubbleSection(await res.text());\r\n    } catch (error) {\r\n      console.warn('[KL24 Reserve] cart-icon-bubble:', error);\r\n    }\r\n  };\r\n\r\n  const refreshCartChrome = async (\r\n    parsedState,\r\n    { openDrawer = false, source = 'kl24-reserve', reconcile = true } = {}\r\n  ) => {\r\n    const bubbleHtml = parsedState?.sections?.[CART_BUBBLE_SECTION];\r\n    if (bubbleHtml) {\r\n      applyCartIconBubbleSection(bubbleHtml);\r\n    } else {\r\n      await fetchAndApplyCartBubble();\r\n    }\r\n\r\n    const shopifyDrawer = document.querySelector('cart-drawer');\r\n    if (shopifyDrawer) {\r\n      const drawerSection = parsedState?.sections?.['cart-drawer'];\r\n      if (drawerSection && typeof shopifyDrawer.renderContents === 'function' && openDrawer) {\r\n        shopifyDrawer.renderContents(parsedState);\r\n      } else if (drawerSection) {\r\n        const target = document.querySelector('#CartDrawer');\r\n        if (target && typeof shopifyDrawer.getSectionInnerHTML === 'function') {\r\n          try {\r\n            const inner = shopifyDrawer.getSectionInnerHTML(drawerSection, '#CartDrawer');\r\n            if (inner) target.innerHTML = inner;\r\n          } catch {\r\n            /* keep existing drawer markup */\r\n          }\r\n        }\r\n        if (parsedState?.item_count != null) {\r\n          shopifyDrawer.classList.toggle('is-empty', parsedState.item_count === 0);\r\n        }\r\n        if (openDrawer && typeof shopifyDrawer.open === 'function') {\r\n          shopifyDrawer.open();\r\n        }\r\n      } else {\r\n        if (parsedState?.item_count != null) {\r\n          shopifyDrawer.classList.toggle('is-empty', parsedState.item_count === 0);\r\n        }\r\n        if (openDrawer && typeof shopifyDrawer.open === 'function') {\r\n          shopifyDrawer.open();\r\n        }\r\n      }\r\n    }\r\n\r\n    if (typeof publish === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') {\r\n      publish(PUB_SUB_EVENTS.cartUpdate, {\r\n        source,\r\n        cartData: parsedState || {},\r\n      });\r\n    }\r\n    document.dispatchEvent(new CustomEvent('cart:refresh'));\r\n    // Section HTML replace wipes the banner \u2014 re-paint while this conflict is live.\r\n    window.requestAnimationFrame(() => repaintLiveConflictNotice());\r\n    if (reconcile) void reconcileCartReservations();\r\n  };\r\n\r\n  const isSoftReserveMiss = (result) =>\r\n    Boolean(\r\n      result?.skipped ||\r\n        result?.degraded ||\r\n        result?.error === 'not_found'\r\n    );\r\n\r\n  const addCartItems = async (items, { reserveEntries = [], refreshChrome = true, openDrawer = false } = {}) => {\r\n    const list = (items || []).filter((item) => item && item.id != null);\r\n    if (!list.length) {\r\n      throw new Error('Keine Artikel zum Hinzuf\u00FCgen.');\r\n    }\r\n\r\n    const reserved = [];\r\n    for (const entry of reserveEntries) {\r\n      const result = await reserve({ ...entry, syncShopify: false, timeoutMs: 1500 });\r\n      if (!result?.ok) {\r\n        if (isSoftReserveMiss(result)) {\r\n          console.warn('[KL24 Reserve] Katalog-Miss \u2014 Warenkorb ohne Hold:', result?.message || result?.error);\r\n          continue;\r\n        }\r\n        await releaseMany(reserved, { syncShopify: false });\r\n        const err = new Error(\r\n          result?.message || 'Diese Karte ist gerade von einem anderen Besucher reserviert.'\r\n        );\r\n        err.reserveResult = result;\r\n        throw err;\r\n      }\r\n      if (!result?.degraded && !result?.skipped) {\r\n        reserved.push(entry);\r\n      }\r\n    }\r\n\r\n    try {\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: list,\r\n          sections: SHOPIFY_CART_SECTIONS,\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        await releaseMany(reserved, { syncShopify: false });\r\n        throw new Error(body.description || body.message || 'Warenkorb-Update fehlgeschlagen.');\r\n      }\r\n      const parsed = await response.json();\r\n      if (refreshChrome) {\r\n        await refreshCartChrome(parsed, { openDrawer, source: 'kl24-reserve' });\r\n      }\r\n      void (async () => {\r\n        for (const entry of reserved) {\r\n          try {\r\n            await reserve({ ...entry, syncShopify: false });\r\n          } catch (error) {\r\n            console.warn('[KL24 Reserve] Shopify sync:', error);\r\n          }\r\n        }\r\n      })();\r\n      return parsed;\r\n    } catch (error) {\r\n      await releaseMany(reserved, { syncShopify: false });\r\n      throw error;\r\n    }\r\n  };\r\n\r\n  const shouldReserveElement = (element) =>\r\n    element?.dataset?.tcgInventoryReserve === 'true' && isEnabled();\r\n\r\n  const boot = () => {\r\n    if (!isEnabled()) {\r\n      console.info('[KL24 Reserve] Cockpit API nicht konfiguriert \u2013 Reservierung deaktiviert.');\r\n      return;\r\n    }\r\n    void (async () => {\r\n      await refreshCartSessionId();\r\n      startHeartbeat();\r\n      await reconcileCartReservations();\r\n      restoreConflictNotice();\r\n    })();\r\n\r\n    // Drop one-shot notice after navigating away from cart (not on every reload of cart).\r\n    const path = window.location.pathname || '';\r\n    if (!/^\\/cart\\/?$/i.test(path)) {\r\n      try {\r\n        if (sessionStorage.getItem(CONFLICT_NOTICE_SHOWN_KEY) === '1') {\r\n          clearConflictNoticeStorage();\r\n        }\r\n      } catch {\r\n        /* ignore */\r\n      }\r\n    }\r\n  };\r\n\r\n  document.addEventListener('cart:refresh', () => {\r\n    window.requestAnimationFrame(() => repaintLiveConflictNotice());\r\n    void refreshCartSessionId().then(() => reconcileCartReservations());\r\n  });\r\n\r\n  // /cart/clear and line removals emit cartUpdate / navigate \u2014 keep holds in sync.\r\n  document.addEventListener('visibilitychange', () => {\r\n    if (document.visibilityState === 'visible') {\r\n      void refreshCartSessionId().then(() => reconcileCartReservations());\r\n    }\r\n  });\r\n\r\n  if (typeof subscribe === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') {\r\n    subscribe(PUB_SUB_EVENTS.cartUpdate, () => {\r\n      window.requestAnimationFrame(() => repaintLiveConflictNotice());\r\n      void refreshCartSessionId().then(() => reconcileCartReservations());\r\n    });\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', boot);\r\n  } else {\r\n    boot();\r\n  }\r\n\r\n  window.Kl24InventoryReservation = {\r\n    getSessionId,\r\n    refreshCartSessionId,\r\n    isEnabled,\r\n    resolveApiBase,\r\n    reserve,\r\n    release,\r\n    releaseMany,\r\n    addCartItems,\r\n    refreshCartChrome,\r\n    fetchAndApplyCartBubble,\r\n    shouldReserveElement,\r\n    fetchAvailability,\r\n    getCachedAvailability,\r\n    filterAvailableCards,\r\n    isHeldByOthers,\r\n    showConflictNotice,\r\n    clearConflictNoticeStorage,\r\n    releaseSessionId,\r\n    syncCartReservations,\r\n    reconcileCartReservations,\r\n    heartbeat,\r\n  };\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
