{
  "version": 3,
  "sources": ["/cdn/shop/t/36/assets/zr-cart.js?r=30250"],
  "sourcesContent": ["import { DE_SET_CODES, DE_SHAMPOO_B_CODE, preisA, PREIS_A_CODE, angebotB, ANGEBOT_B_CODES, membership, MEMBERSHIP_CODES, MEMBERSHIP_ABO_CODES, GESCHENK_IM_ABO, GESCHENK_VARIANTE, SHAMPOO_M, DISCOVERY, FREE_SHIPPING_THRESHOLD, KOLLEKTIONEN, KOLLEKTION_DER_LINIE, STAFFELN, findProdukt, findCombo, GESCHENK } from \"zr/data.js\";\nimport { bestpreis, naechsterSchritt, zerlegungText } from \"zr/staffel.js\";\nconst KEY = \"zois-cart-v1\";\nconst SD_CODE = \"SINGLES\";\n// Singles Day Preise B (Jeffry 11.11.): Standard-Kollektionen 1+1 / 2+2 / 3+3 = Staffel, Kasse \u00FCber Stufen-Codes SINGLESn (n bezahlte Flakons)\nconst SD_PREIS = {\"1\": 89.99, \"2\": 149.99, \"3\": 219.99, \"4\": 299.98, \"5\": 369.98, \"6\": 439.98, \"7\": 519.97, \"8\": 589.97, \"9\": 659.97, \"10\": 739.96, \"11\": 809.96, \"12\": 879.96};\nconst SD_STUFE = {\"2\": \"SINGLES2\", \"3\": \"SINGLES3\", \"4\": \"SINGLES4\", \"5\": \"SINGLES5\", \"6\": \"SINGLES6\", \"7\": \"SINGLES7\", \"8\": \"SINGLES8\", \"9\": \"SINGLES9\", \"10\": \"SINGLES10\", \"11\": \"SINGLES11\", \"12\": \"SINGLES12\"};\nconst SD_ALLE = [SD_CODE, ...Object.values(SD_STUFE)];\nconst sdStandard = (kid) => KOLLEKTIONEN[kid]?.staffel === STAFFELN.standard;\nconst sdPreis = (kid, n) => sdStandard(kid) && SD_PREIS[n] ? SD_PREIS[n] : Math.round(KOLLEKTIONEN[kid].staffel[0].price * n * 100) / 100;\n\nlet items = null;\nconst subs = /* @__PURE__ */ new Set();\nconst round2 = (n) => Math.round(n * 100) / 100;\nconst rp = (n) => Math.round(n * 100);\nconst setKey = (kollektion, qty, scents) => `set:${kollektion}:${qty}:${[...scents].sort().join(\"+\")}`;\nfunction migriere(liste) {\n  const out = [];\n  for (const i of liste) {\n    let it = i;\n    if (i?.type === \"set\" && !i.kollektion) {\n      const kollektion = KOLLEKTION_DER_LINIE[i.line];\n      if (!kollektion) continue;\n      it = { ...i, kollektion, key: setKey(kollektion, i.qty, i.scents) };\n    }\n    const hit = out.find((x) => x.key === it.key);\n    if (hit) hit.count += it.count;\n    else out.push(it);\n  }\n  return out;\n}\nfunction load() {\n  try {\n    const raw = globalThis.localStorage?.getItem(KEY);\n    if (raw) {\n      const v = JSON.parse(raw);\n      if (Array.isArray(v)) return migriere(v);\n    }\n  } catch {\n  }\n  return [];\n}\nfunction save() {\n  try {\n    globalThis.localStorage?.setItem(KEY, JSON.stringify(items));\n  } catch {\n  }\n}\nfunction ensure() {\n  if (items === null) items = load();\n  return items;\n}\nfunction emit({ sync = true } = {}) {\n  save();\n  if (sync) synchronisieren();\n  const snap = getCart();\n  subs.forEach((fn) => {\n    try {\n      fn(snap);\n    } catch {\n    }\n  });\n  try {\n    if (typeof window !== \"undefined\" && typeof CustomEvent === \"function\") {\n      window.dispatchEvent(new CustomEvent(\"cart:change\", { detail: snap }));\n    }\n  } catch {\n  }\n}\nlet fehlerSimulieren = false;\nexport function simuliereFehler(an) {\n  fehlerSimulieren = !!an;\n}\nconst FEHLER = \"Das hat nicht geklappt. Deine Auswahl bleibt erhalten, versuch es bitte noch einmal.\";\nfunction kaufbar(p) {\n  if (p.status === \"ausverkauft\") throw new Error(`${p.name} ist leider ausverkauft.`);\n  if (p.status === \"bald\") throw new Error(`${p.name} ist bald erh\u00E4ltlich.`);\n}\nconst verfuegbar = (id) => findProdukt(id)?.status === \"verfuegbar\";\nconst istVerfuegbar = (i) => i.type === \"set\" ? i.scents.every(verfuegbar) : i.type === \"combo\" ? i.ids.every(verfuegbar) : verfuegbar(i.id);\nfunction pruefeBestand(liste) {\n  const n = /* @__PURE__ */ new Map();\n  for (const i of liste) {\n    const ids = i.type === \"set\" ? i.scents : i.type === \"produkt\" ? [i.id] : i.type === \"combo\" ? i.ids : [];\n    ids.forEach((id) => n.set(id, (n.get(id) || 0) + i.count));\n  }\n  for (const [id, menge] of n) {\n    const p = findProdukt(id);\n    if (p?.bestand != null && menge > p.bestand) throw new Error(`Von ${p.name} sind nur noch ${p.bestand} ${p.bestand === 1 ? \"Flakon\" : \"Flakons\"} verf\u00FCgbar.`);\n  }\n}\nfunction buendle(list) {\n  let geaendert = null;\n  for (const [kid, k] of Object.entries(KOLLEKTIONEN)) {\n    const pos = list.filter((i) => i.type === \"set\" && i.kollektion === kid && !i.dreierpack && !i.abo && !i.doppelt && istVerfuegbar(i));\n    if (!pos.length) continue;\n    const ist = pos.flatMap((i) => Array(i.count).fill(i.qty)).sort((a, b) => b - a);\n    const { zerlegung } = bestpreis(k.staffel, ist.reduce((a, b) => a + b, 0));\n    if (ist.join() === zerlegung.join()) continue;\n    const pool = pos.flatMap((i) => Array.from({ length: i.count }, () => i.scents)).flat();\n    const neu = [];\n    for (const q of zerlegung) {\n      const scents = pool.splice(0, q).sort();\n      const key = setKey(kid, q, scents);\n      const hit = neu.find((i) => i.key === key);\n      if (hit) hit.count += 1;\n      else neu.push({ key, type: \"set\", kollektion: kid, line: k.linie, qty: q, scents, price: k.staffel.find((t) => t.qty === q).price, count: 1, ...q > 1 ? { auto: true } : {} });\n    }\n    const start = list.indexOf(pos[0]);\n    for (const i of pos) list.splice(list.indexOf(i), 1);\n    for (const n of neu) {\n      const hit = list.find((i) => i.key === n.key);\n      if (hit) hit.count += n.count;\n      else list.splice(Math.min(start, list.length), 0, n);\n    }\n    geaendert = { kollektion: kid, zerlegung };\n  }\n  return geaendert;\n}\n// THE OAKED 2+1: ab 3 einzelnen Shampoos (Einmalkauf) wird daraus einmal pro Bestellung das 2+1 (wie der Shopify-Rabatt)\nfunction oakedBuendel(list) {\n  const p = findProdukt(\"the-oaked\");\n  const gruppe = (einzelKey, comboId, einzelFelder, comboFelder) => {\n    const einzeln = list.find((i) => i.key === einzelKey);\n    const paket = list.find((i) => i.key === `combo:${comboId}`);\n    if (!einzeln && !paket) return;\n    const n = (einzeln?.count || 0) + 3 * (paket?.count || 0);\n    const c = findCombo(comboId);\n    const pos = list.indexOf(paket || einzeln);\n    for (const x of [einzeln, paket]) if (x) list.splice(list.indexOf(x), 1);\n    const neu = [];\n    if (c && n >= 3) neu.push({ key: `combo:${comboId}`, type: \"combo\", id: c.id, ids: [...c.produkte], price: c.price, count: 1, ...comboFelder });\n    const rest = c && n >= 3 ? n - 3 : n;\n    if (rest > 0) neu.push({ key: einzelKey, type: \"produkt\", id: \"the-oaked\", count: rest, ...einzelFelder });\n    list.splice(Math.min(pos, list.length), 0, ...neu);\n  };\n  gruppe(\"produkt:the-oaked\", \"oaked-2plus1\", { price: p.price }, {});\n  // Shampoo-Test B: Einmalkauf \u00FCber das Test-Produkt, Abo \u00FCber den Loop-Plan\n  gruppe(\"produkt:the-oaked:m\", \"oaked-2plus1-m\", { price: SHAMPOO_M.einmal, variante: SHAMPOO_M.variante }, {});\n  const plan = planFuer(\"the-oaked\");\n  if (plan) gruppe(`abo:the-oaked:${plan.id}`, \"oaked-2plus1-abo\", { price: plan.preis, plan: plan.id, planName: plan.name }, { plans: { \"the-oaked\": plan.id } });\n}\n// Shampoo-Test B: menge 1 oder 3, abo = ZO\u00CDS Membership (Loop-Plan \u00ABJeden Monat\u00BB)\nexport function addOakedM(menge, abo) {\n  const p = findProdukt(\"the-oaked\");\n  kaufbar(p);\n  if (fehlerSimulieren) throw new Error(FEHLER);\n  const plan = abo ? planFuer(\"the-oaked\") : null;\n  if (abo && !plan) throw new Error(\"Die Membership ist gerade nicht verf\u00FCgbar. Bitte w\u00E4hle den Einmalkauf.\");\n  const key = plan ? `abo:the-oaked:${plan.id}` : \"produkt:the-oaked:m\";\n  aendere((list) => {\n    const hit = list.find((i) => i.key === key);\n    if (hit) hit.count += menge;\n    else list.push(plan ? { key, type: \"produkt\", id: \"the-oaked\", price: plan.preis, plan: plan.id, planName: plan.name, count: menge } : { key, type: \"produkt\", id: \"the-oaked\", price: SHAMPOO_M.einmal, variante: SHAMPOO_M.variante, count: menge });\n  });\n}\nlet letzteBuendelung = null;\nexport function buendelung() {\n  return letzteBuendelung;\n}\nfunction aendere(fn) {\n  const vorher = structuredClone(ensure());\n  try {\n    fn(items);\n    letzteBuendelung = buendle(items);\n    oakedBuendel(items);\n    pruefeBestand(items);\n  } catch (e) {\n    items = vorher;\n    throw e;\n  }\n  emit();\n}\nconst oder = (zahlen) => zahlen.length > 1 ? `${zahlen.slice(0, -1).join(\", \")} oder ${zahlen.at(-1)}` : String(zahlen[0]);\nexport function getCart() {\n  return structuredClone(ensure());\n}\nexport function addSet({ kollektion, line, qty, scents, dreierpack = false, abo = null, doppelt = false }) {\n  const kid = kollektion ?? KOLLEKTION_DER_LINIE[line];\n  const k = KOLLEKTIONEN[kid];\n  if (!k) throw new Error(kollektion ? \"Unbekannte Kollektion.\" : \"Unbekannte Duftlinie.\");\n  const tier = doppelt ? Number.isInteger(qty) && qty % 2 === 0 && qty >= 2 && qty <= 20 ? { price: sdPreis(kid, qty / 2) } : null : k.staffel.find((t) => t.qty === qty);\n  if (!tier && doppelt) throw new Error(\"Ung\u00FCltige Packungsgr\u00F6sse. M\u00F6glich sind 1 + 1 bis 10 + 10 Flakons.\");\n  if (!tier) throw new Error(`Ung\u00FCltige Packungsgr\u00F6sse. M\u00F6glich sind ${oder(k.staffel.map((t) => t.qty))} Flakons.`);\n  if (!Array.isArray(scents) || scents.length !== qty) {\n    throw new Error(`Bitte w\u00E4hle genau ${qty} ${qty === 1 ? \"Duft\" : \"D\u00FCfte\"} aus.`);\n  }\n  for (const id of scents) {\n    const s = k.duefte.find((x) => x.id === id);\n    if (!s) {\n      const p = findProdukt(id);\n      if (p?.kollektion === \"limited\") {\n        kaufbar(p);\n        throw new Error(`${p.name} gibt es nur einzeln, nicht im Set.`);\n      }\n      throw new Error(\"Dieser Duft geh\u00F6rt nicht zu dieser Kollektion.\");\n    }\n    kaufbar(s);\n    // Limitierte D\u00FCfte nur mit eigenem Loop-Plan im Abo\n    if (abo && s.kollektion === \"limited\" && !planFuer(s.id)) throw new Error(`${s.name} gibt es nicht im Abo. W\u00E4hle \u00ABEinmalig\u00BB oder einen anderen Duft.`);\n  }\n  if (fehlerSimulieren) throw new Error(FEHLER);\n  const dp = dreierpack && qty === 3 && new Set(scents).size === 1;\n  const ab = abo && (abo.rabatt > 0 || abo.monat) ? { rabatt: abo.rabatt || 0, wochen: abo.wochen, monat: abo.monat } : null;\n  const key = setKey(kid, qty, scents) + (dp ? \":dreierpack\" : \"\") + (ab ? \":abo\" : \"\") + (doppelt ? \":doppelt\" : \"\");\n  aendere((list) => {\n    const hit = list.find((i) => i.key === key);\n    if (hit) hit.count += 1;\n    else list.push({ key, type: \"set\", kollektion: kid, line: k.linie, qty, scents: [...scents].sort(), price: round2(tier.price - (ab?.rabatt || 0)), count: 1, ...dp ? { dreierpack: true } : {}, ...ab ? { abo: ab } : {}, ...doppelt ? { doppelt: true } : {} });\n  });\n  return getCart().find((i) => i.key === key);\n}\n// Abo: Plan aus window.ZR.produkte[id].abo ({ id, name, preis }) oder { abo: true } aus dem Prototyp (erster Shopify-Plan des Produkts).\n// Ohne Shopify-Plan wird daraus ein Einmalkauf.\n// Nur Loop-Pl\u00E4ne (Loop appId 5284869), nie Kaching\nconst istLoop = (a) => /loop/i.test(`${a.app || \"\"} ${a.gruppe || \"\"}`) || String(a.app) === \"5284869\";\nconst planFuer = (id) => (SHOP()[id]?.abo || []).find(istLoop) || null;\nconst aboAus = (id, opt) => opt && typeof opt === \"object\" && \"abo\" in opt ? opt.abo ? planFuer(id) : null : opt;\nexport function addProdukt(id, opt = null) {\n  const abo = aboAus(id, opt);\n  const p = findProdukt(id);\n  if (!p || p.price == null || KOLLEKTIONEN[p.kollektion] || DISCOVERY.includes(p)) throw new Error(\"Unbekannter Artikel.\");\n  kaufbar(p);\n  if (fehlerSimulieren) throw new Error(FEHLER);\n  const key = abo ? `abo:${id}:${abo.id}` : `produkt:${id}`;\n  aendere((list) => {\n    const hit = list.find((i) => i.key === key);\n    if (hit) hit.count += 1;\n    else list.push(abo ? { key, type: \"produkt\", id, price: abo.preis, plan: abo.id, planName: abo.name, count: 1 } : { key, type: \"produkt\", id, price: p.price, count: 1 });\n  });\n  return getCart().find((i) => i.key === key);\n}\nexport function addCombo(id, { abo = false } = {}) {\n  const c = findCombo(id);\n  if (!c) throw new Error(\"Unbekannte Routine.\");\n  c.produkte.forEach((pid) => kaufbar(findProdukt(pid)));\n  if (fehlerSimulieren) throw new Error(FEHLER);\n  const plans = abo ? Object.fromEntries(c.produkte.map((pid) => [pid, planFuer(pid)?.id]).filter(([, pl]) => pl)) : {};\n  const ab = Object.keys(plans).length ? plans : null;\n  const preis = round2(c.produkte.reduce((s, pid) => s + (ab?.[pid] ? planFuer(pid).preis : findProdukt(pid)?.price ?? 0), 0));\n  const key = `combo:${id}${ab ? \":abo\" : \"\"}`;\n  aendere((list) => {\n    const hit = list.find((i) => i.key === key);\n    if (hit) hit.count += 1;\n    else list.push({ key, type: \"combo\", id, ids: [...c.produkte], price: ab ? preis : c.price, count: 1, ...ab ? { plans: ab } : {} });\n  });\n  return getCart().find((i) => i.key === key);\n}\nexport function addDiscovery(id) {\n  const d = DISCOVERY.find((x) => x.id === id);\n  if (!d) throw new Error(\"Unbekanntes Discovery Set.\");\n  kaufbar(d);\n  if (fehlerSimulieren) throw new Error(FEHLER);\n  const key = `discovery:${id}`;\n  aendere((list) => {\n    const hit = list.find((i) => i.key === key);\n    if (hit) hit.count += 1;\n    else list.push({ key, type: \"discovery\", id, price: d.price, count: 1 });\n  });\n  return getCart().find((i) => i.key === key);\n}\nexport function setCount(key, n) {\n  const idx = ensure().findIndex((i) => i.key === key);\n  if (idx < 0) return;\n  n = Math.floor(Number(n));\n  aendere((list) => {\n    if (!(n > 0)) list.splice(idx, 1);\n    else list[idx].count = n;\n  });\n}\nexport function remove(key) {\n  setCount(key, 0);\n}\nexport function clear() {\n  items = [];\n  emit();\n}\nexport function rechnung() {\n  const list = ensure();\n  const nichtVerfuegbar = list.filter((i) => !istVerfuegbar(i)).map((i) => i.key);\n  const aktiv = list.filter(istVerfuegbar);\n  const kollektionen = [];\n  for (const [kid, k] of Object.entries(KOLLEKTIONEN)) {\n    const pos = aktiv.filter((i) => i.type === \"set\" && i.kollektion === kid && !i.abo && !i.doppelt);\n    if (!pos.length) continue;\n    const st = k.staffel;\n    const flakons = pos.reduce((s, i) => s + i.qty * i.count, 0);\n    const { preis, zerlegung } = shopPreis(st, flakons);\n    const einheiten = pos.filter((i) => i.qty > 1).flatMap((i) => Array(i.count).fill(i)).sort((a, b) => b.qty - a.qty);\n    const behalten = /* @__PURE__ */ new Map();\n    let rest = flakons;\n    for (const e of einheiten) {\n      if (rp(shopPreis(st, rest - e.qty).preis) + rp(e.price) === rp(shopPreis(st, rest).preis)) {\n        behalten.set(e.key, (behalten.get(e.key) || 0) + 1);\n        rest -= e.qty;\n      }\n    }\n    const quellen = pos.map((i) => ({ key: i.key, n: i.count - (behalten.get(i.key) || 0) })).filter((q) => q.n > 0);\n    const restListe = round2(quellen.reduce((s, q) => s + pos.find((i) => i.key === q.key).price * q.n, 0));\n    const restBest = shopPreis(st, rest);\n    const gruppe = rp(restListe) > rp(restBest.preis) ? { flakons: rest, preis: restBest.preis, listenpreis: restListe, zerlegung: restBest.zerlegung, text: `als ${zerlegungText(restBest.zerlegung)} berechnet`, quellen } : null;\n    kollektionen.push({\n      id: kid,\n      flakons,\n      preis,\n      zerlegung,\n      gruppe,\n      listenpreis: round2(pos.reduce((s, i) => s + i.price * i.count, 0)),\n      regulaer: round2(flakons * st.find((t) => t.qty === 1).price)\n    });\n  }\n  const andere = round2(aktiv.filter((i) => i.type !== \"set\" || i.abo || i.doppelt).reduce((s, i) => s + i.price * i.count, 0));\n  return { kollektionen, nichtVerfuegbar, total: round2(kollektionen.reduce((s, k) => s + k.preis, 0) + andere) };\n}\nexport function subtotal() {\n  return rechnung().total;\n}\nexport function geschenke(liste = ensure()) {\n  if (!globalThis.window?.ZR?.geschenkAn) return [];\n  const nv = new Set(rechnung().nichtVerfuegbar);\n  const n = /* @__PURE__ */ new Map();\n  for (const i of liste) {\n    if (i.type !== \"set\" || i.doppelt || i.qty < 2 && !i.abo || nv.has(i.key)) continue;  // Abo: Shampoo auch zu 1 Flakon (Jeffry 26.10.)\n    if (angebotB() && KOLLEKTIONEN[i.kollektion]?.staffel === STAFFELN.standard && !(membership() && i.abo)) continue;  // Angebot B: ohne Geschenk, Membership-Test: Geschenk nur im Abo\n    const id = GESCHENK[KOLLEKTIONEN[i.kollektion]?.linie] || GESCHENK.him;\n    n.set(id, (n.get(id) || 0) + i.count);\n  }\n  return [...n].map(([id, count2]) => ({ id, count: count2, wert: findProdukt(id)?.price ?? 0 }));\n}\nexport function count() {\n  return ensure().reduce((s, i) => s + i.count, 0);\n}\nexport function freeShippingRemaining() {\n  return round2(Math.max(0, FREE_SHIPPING_THRESHOLD - subtotal()));\n}\nexport function subscribe(fn) {\n  subs.add(fn);\n  return () => subs.delete(fn);\n}\nexport function describe(item) {\n  if (item.type === \"discovery\") {\n    const d = DISCOVERY.find((x) => x.id === item.id);\n    return { title: d?.name ?? item.id, detail: \"\", tier: \"\" };\n  }\n  if (item.type === \"produkt\") return { title: findProdukt(item.id)?.name ?? item.id, detail: \"\", tier: \"\" };\n  if (item.type === \"combo\") {\n    const c = findCombo(item.id);\n    return { title: c?.name ?? item.id, detail: c?.zusatz ?? \"\", tier: \"\" };\n  }\n  const k = KOLLEKTIONEN[item.kollektion];\n  return {\n    title: k?.name ?? item.kollektion,\n    detail: item.scents.map((id) => findProdukt(id)?.name ?? id).join(\", \"),\n    tier: item.doppelt ? `${item.qty / 2} + ${item.qty / 2} gratis` : k?.staffel.find((t) => t.qty === item.qty)?.label ?? \"\"\n  };\n}\nexport function _reset() {\n  items = null;\n  subs.clear();\n  entfernt = null;\n}\nexport function regulaer(item) {\n  if (item.type === \"discovery\") return DISCOVERY.find((x) => x.id === item.id)?.compareAt ?? item.price;\n  if (item.type === \"produkt\") {\n    const c = findProdukt(item.id)?.compareAt;\n    return c > item.price ? c : item.price;\n  }\n  if (item.type === \"combo\") return findCombo(item.id)?.regulaer ?? round2(item.ids.reduce((s, id) => s + (findProdukt(id)?.price ?? 0), 0));\n  const abSet = item.abo && item.qty > 1 && KOLLEKTIONEN[item.kollektion]?.staffel.find((t) => t.qty === item.qty);\n  if (abSet) return abSet.price;  // Abo-Set: Vergleich mit dem Einmalpreis (Jeffry 26.10.)\n  const einzel = KOLLEKTIONEN[item.kollektion]?.staffel.find((t) => t.qty === 1).price ?? item.price;\n  return round2(item.qty * einzel);\n}\nexport function ersparnis(item) {\n  return round2(Math.max(0, regulaer(item) - item.price) * item.count);\n}\nexport function summen() {\n  const r = rechnung();\n  const aktiv = ensure().filter((i) => !r.nichtVerfuegbar.includes(i.key));\n  const regulaerSumme = round2(r.kollektionen.reduce((s, k) => s + k.regulaer, 0) + aktiv.filter((i) => i.type !== \"set\" || i.abo).reduce((s, i) => s + regulaer(i) * i.count, 0));\n  // Abos werden immer gratis verschickt (Shopify-Rabatt \u00ABAbo \u00B7 Gratisversand\u00BB)\n  const mitAbo = aktiv.some((i) => i.abo || i.plan || i.plans);\n  return { zwischensumme: regulaerSumme, ersparnis: round2(regulaerSumme - r.total), versand: mitAbo || r.total >= FREE_SHIPPING_THRESHOLD ? 0 : null, total: r.total, gratisFehlt: mitAbo ? 0 : round2(Math.max(0, FREE_SHIPPING_THRESHOLD - r.total)) };\n}\nexport const ZAHLARTEN = [\n  { id: \"visa\", name: \"Visa\", datei: \"visa\" },\n  { id: \"mastercard\", name: \"Mastercard\", datei: \"mastercard\" },\n  { id: \"amex\", name: \"American Express\", datei: \"americanexpress\" },\n  { id: \"applepay\", name: \"Apple Pay\", datei: \"applepay\" },\n  { id: \"googlepay\", name: \"Google Pay\", datei: \"googlepay\" },\n  { id: \"paypal\", name: \"PayPal\", datei: \"paypal\" },\n  { id: \"klarna\", name: \"Klarna\", datei: \"klarna\" }\n];\nexport function lieferdatum(heute = /* @__PURE__ */ new Date(), werktage = 2) {\n  const d = new Date(heute.getFullYear(), heute.getMonth(), heute.getDate());\n  let n = 0;\n  while (n < werktage) {\n    d.setDate(d.getDate() + 1);\n    if (d.getDay() !== 0 && d.getDay() !== 6) n += 1;\n  }\n  return d;\n}\nconst TAG = [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"];\nconst MONAT = [\"Jan.\", \"Feb.\", \"M\u00E4rz\", \"Apr.\", \"Mai\", \"Juni\", \"Juli\", \"Aug.\", \"Sept.\", \"Okt.\", \"Nov.\", \"Dez.\"];\nexport function datumKurz(d) {\n  return `${TAG[d.getDay()]}, ${d.getDate()}. ${MONAT[d.getMonth()]}`;\n}\nexport function hinweis(linieVorgabe = \"him\") {\n  const r = rechnung();\n  const aktiv = ensure().filter((i) => !r.nichtVerfuegbar.includes(i.key));\n  let top = null;\n  for (const k of r.kollektionen) {\n    const s = naechsterSchritt(KOLLEKTIONEN[k.id].staffel, k.flakons);\n    if (s && (!top || s.vorteil > top.vorteil || s.vorteil === top.vorteil && s.differenz < top.differenz)) top = { ...s, kollektion: k.id };\n  }\n  if (top) {\n    const k = KOLLEKTIONEN[top.kollektion];\n    const pos = aktiv.filter((i) => i.type === \"set\" && i.kollektion === top.kollektion);\n    return {\n      art: \"set\",\n      kollektion: top.kollektion,\n      linie: k.linie,\n      qty: top.qty,\n      fehlt: top.fehlt,\n      differenz: top.differenz,\n      vorteil: top.vorteil,\n      endpreis: k.staffel.find((t) => t.qty === top.qty).price,\n      behalten: pos.flatMap((i) => Array(i.count).fill(i.scents).flat()),\n      ersetzt: pos.map((i) => i.key)\n    };\n  }\n  const hatDuft = aktiv.some((i) => i.type === \"set\" || i.type === \"produkt\" && findProdukt(i.id)?.kollektion === \"limited\");\n  if (aktiv.length && !hatDuft && r.total < FREE_SHIPPING_THRESHOLD) {\n    const ersteLinie = aktiv.map((i) => i.type === \"discovery\" ? DISCOVERY.find((x) => x.id === i.id)?.line : i.type === \"combo\" ? findCombo(i.id)?.linie : findProdukt(i.id)?.linie).find((l) => l === \"her\" || l === \"him\");\n    const linie = ersteLinie || linieVorgabe;\n    const d = DISCOVERY.find((x) => x.line === linie);\n    if (d && d.status === \"verfuegbar\" && !aktiv.some((i) => i.key === `discovery:${d.id}`)) return { art: \"discovery\", linie, discovery: d };\n  }\n  return null;\n}\nexport function zuSet({ kollektion, linie, qty, scents, ersetzt = [] }) {\n  const vorher = structuredClone(ensure());\n  const weg = new Set(ersetzt);\n  items = ensure().filter((i) => !weg.has(i.key));\n  try {\n    return addSet({ kollektion: kollektion ?? KOLLEKTION_DER_LINIE[linie], qty, scents });\n  } catch (e) {\n    items = vorher;\n    throw e;\n  }\n}\nexport function tauscheDuft(key, index, neuId) {\n  const list = ensure();\n  const idx = list.findIndex((i) => i.key === key);\n  if (idx < 0) return null;\n  const it = list[idx];\n  const s = KOLLEKTIONEN[it.kollektion]?.duefte.find((x) => x.id === neuId);\n  if (!s || s.status !== \"verfuegbar\") throw new Error(\"Dieser Duft ist nicht verf\u00FCgbar.\");\n  const scents = [...it.scents];\n  scents[index] = neuId;\n  const neuKey = setKey(it.kollektion, it.qty, scents) + (it.abo ? \":abo\" : \"\");\n  if (neuKey === key) return key;\n  aendere((l) => {\n    const hit = l.find((i) => i.key === neuKey);\n    const { dreierpack, ...rest } = it;\n    if (hit) {\n      hit.count += it.count;\n      l.splice(idx, 1);\n    } else l[idx] = { ...rest, key: neuKey, scents };\n  });\n  return neuKey;\n}\nlet entfernt = null;\nexport function entfernen(key) {\n  const list = ensure();\n  const idx = list.findIndex((i) => i.key === key);\n  if (idx < 0) return null;\n  entfernt = { item: structuredClone(list[idx]), idx, bis: Date.now() + 5e3 };\n  list.splice(idx, 1);\n  emit();\n  return entfernt.item;\n}\nexport function nimmDuftRaus(key, index) {\n  const vorher = structuredClone(ensure());\n  const idx = vorher.findIndex((i) => i.key === key);\n  if (idx < 0) return null;\n  const it = vorher[idx];\n  const weg = it.scents[index];\n  const rest = it.scents.filter((_, i) => i !== index);\n  const k = KOLLEKTIONEN[it.kollektion];\n  const einzel = k.staffel.find((t) => t.qty === 1).price;\n  aendere((l) => {\n    const pos = l.findIndex((i) => i.key === key);\n    if (l[pos].count > 1) l[pos].count -= 1;\n    else l.splice(pos, 1);\n    let at = Math.min(pos, l.length);\n    for (const sid of rest) {\n      const ek = setKey(it.kollektion, 1, [sid]);\n      const hit = l.find((i) => i.key === ek);\n      if (hit) hit.count += 1;\n      else l.splice(at++, 0, { key: ek, type: \"set\", kollektion: it.kollektion, line: it.line, qty: 1, scents: [sid], price: einzel, count: 1 });\n    }\n  });\n  entfernt = { snapshot: vorher, bis: Date.now() + 5e3 };\n  return weg;\n}\nexport function rueckgaengig() {\n  if (!entfernt || Date.now() > entfernt.bis) {\n    entfernt = null;\n    return false;\n  }\n  if (entfernt.snapshot) {\n    items = entfernt.snapshot;\n    entfernt = null;\n    emit();\n    return true;\n  }\n  const list = ensure();\n  const hit = list.find((i) => i.key === entfernt.item.key);\n  if (hit) hit.count += entfernt.item.count;\n  else list.splice(Math.min(entfernt.idx, list.length), 0, entfernt.item);\n  entfernt = null;\n  emit();\n  return true;\n}\nexport function pruefeCode(code) {\n  const c = String(code || \"\").trim();\n  if (!c) return { ok: false, meldung: \"Bitte gib einen Code ein.\" };\n  fetch(`/discount/${encodeURIComponent(c)}`, { credentials: \"same-origin\" }).catch(() => {});\n  return { ok: true, meldung: `Code ${c} ist vorgemerkt und wird an der Kasse abgezogen.` };\n}\nconst BESTELLUNG = \"zois-proto-bestellung-v1\";\nlet letzte = null;\nexport function placeOrder(form = {}) {\n  const list = getCart();\n  if (!list.length) throw new Error(\"Dein Warenkorb ist leer.\");\n  const r = rechnung();\n  if (r.nichtVerfuegbar.length) throw new Error(\"Bitte entferne zuerst die Artikel, die nicht mehr verf\u00FCgbar sind.\");\n  const nr = `ZO-${Math.floor(1e4 + Math.random() * 9e4)}`;\n  const snap = {\n    nr,\n    zeit: (/* @__PURE__ */ new Date()).toISOString(),\n    lieferdatum: lieferdatum().toISOString(),\n    positionen: list.map((i) => ({ ...i, text: describe(i), regulaer: regulaer(i) })),\n    summen: summen(),\n    rechnung: r,\n    kunde: { vorname: form.vorname || \"\", nachname: form.nachname || \"\", email: form.email || \"\", adresse: form.adresse || \"\", zusatz: form.zusatz || \"\", plz: form.plz || \"\", ort: form.ort || \"\", land: \"Deutschland\" },\n    zahlung: form.zahlung || \"\"\n  };\n  try {\n    globalThis.sessionStorage?.setItem(BESTELLUNG, JSON.stringify(snap));\n  } catch {\n  }\n  letzte = snap;\n  clear();\n  return snap;\n}\nexport function letzteBestellung() {\n  if (letzte) return letzte;\n  try {\n    const raw = globalThis.sessionStorage?.getItem(BESTELLUNG);\n    if (raw) return JSON.parse(raw);\n  } catch {\n  }\n  return null;\n}\n\n// ---------- Shopify ----------\n// Die Shopify-Rabatte \u00AB3 Flakons ZOIS\u00BB / \u00AB5 Flakons ZOIS\u00BB (und Eternal Code) ziehen je Flakon ab:\n// ab 3 Flakons einer Linie 46.65, ab 5 Flakons 43.99 pro Flakon. Der Warenkorb zeigt genau diesen Preis.\nfunction shopPreis(staffel, n) {\n  return bestpreis(staffel, n);\n  const einzel = staffel.find((t) => t.qty === 1).price;\n  const stufe = [...staffel].filter((t) => t.qty > 1 && n >= t.qty).sort((a, b) => b.qty - a.qty)[0];\n  const preis = stufe ? round2(n * stufe.perUnit) : round2(n * einzel);\n  return { preis, zerlegung: bestpreis(staffel, n).zerlegung };\n}\nconst SHOP = () => globalThis.window?.ZR?.produkte || {};\nconst varianteVon = (id) => SHOP()[id]?.variante || null;\n// Abgleich je Variante und Abo-Plan: \u00ABvariante|plan\u00BB (Einmalkauf: \u00ABvariante|\u00BB)\nconst zeilenKey = (v, plan) => `${v}|${plan || \"\"}`;\nconst planVon = (l) => l.selling_plan_allocation?.selling_plan?.id || null;\nfunction soll() {\n  const m = /* @__PURE__ */ new Map();\n  for (const i of ensure()) {\n    const ids = i.type === \"set\" ? i.scents.flatMap((s) => Array(i.count).fill(s)) : i.type === \"combo\" ? i.ids.flatMap((x) => Array(i.count).fill(x)) : Array(i.count).fill(i.id);\n    for (const [n, id] of ids.entries()) {\n      const v = (i.type === \"combo\" ? findCombo(i.id)?.variante : i.variante) || varianteVon(id);\n      const plan = i.type === \"combo\" ? i.plans?.[id] : i.type === \"set\" && i.abo ? membership() && n >= i.count ? null : planFuer(id)?.id : i.plan;  // Membership NEU: nur 1 Duft pro Set im Abo, Rest einmalig\n      if (v) m.set(zeilenKey(v, plan), (m.get(zeilenKey(v, plan)) || 0) + 1);\n    }\n  }\n  // Geschenk zum Set (Shopify-Rabatt \u00ABKaufe X, erhalte Y\u00BB macht es gratis): Wash mit in den Warenkorb\n  // Membership NEU: Gratis-Shampoo mit dem Loop-Plan des Abo-Dufts, damit es jeden Monat mitkommt (0)\n  const aboSet = membership() && GESCHENK_IM_ABO ? ensure().find((x) => x.type === \"set\" && x.abo) : null;\n  const gPlan = aboSet ? planFuer(aboSet.scents[0])?.id || null : null;\n  for (const g of geschenke()) {\n    const v = GESCHENK_VARIANTE[g.id] || varianteVon(g.id);\n    const pl = GESCHENK_VARIANTE[g.id] ? gPlan : null;\n    if (v) m.set(zeilenKey(v, pl), (m.get(zeilenKey(v, pl)) || 0) + g.count);\n  }\n  return m;\n}\nfunction ist(c) {\n  const bekannt = new Set([...Object.values(SHOP()).map((p) => p.variante), ...Object.values(GESCHENK_VARIANTE), SHAMPOO_M.variante]);\n  const m = /* @__PURE__ */ new Map();\n  for (const l of c?.items || []) if (bekannt.has(l.variant_id)) m.set(zeilenKey(l.variant_id, planVon(l)), (m.get(zeilenKey(l.variant_id, planVon(l))) || 0) + l.quantity);\n  return m;\n}\nexport function fremd() {\n  const bekannt = new Set([...Object.values(SHOP()).map((p) => p.variante), ...Object.values(GESCHENK_VARIANTE), SHAMPOO_M.variante]);\n  return (shopCart?.items || []).some((l) => !bekannt.has(l.variant_id) && (l.final_line_price ?? l.line_price) > 0);\n}\nconst gleich = (a, b) => a.size === b.size && [...a].every(([k, v]) => b.get(k) === v);\nlet shopCart = null;\nlet lauf = Promise.resolve();\nconst json = (r) => {\n  if (!r.ok) throw new Error(String(r.status));\n  return r.json();\n};\nconst holen = () => fetch(\"/cart.js\", { headers: { Accept: \"application/json\" }, credentials: \"same-origin\" }).then(json).then((c) => shopCart = c);\nfunction ausShopify(c) {\n  const proVariante = {};\n  for (const [id, p] of Object.entries(SHOP())) proVariante[p.variante] = id;\n  const neu = [];\n  const sdTopf = {};\n  const dazu = (it) => {\n    const hit = neu.find((x) => x.key === it.key);\n    if (hit) hit.count += it.count;\n    else neu.push(it);\n  };\n  for (const l of c.items) {\n    if (l.variant_id === SHAMPOO_M.variante) {\n      dazu({ key: \"produkt:the-oaked:m\", type: \"produkt\", id: \"the-oaked\", price: SHAMPOO_M.einmal, variante: SHAMPOO_M.variante, count: l.quantity });\n      continue;\n    }\n    const id = proVariante[l.variant_id];\n    const p = id && findProdukt(id);\n    if (!p) continue;\n    const plan = planVon(l);\n    const kidAbo = plan && Object.keys(KOLLEKTIONEN).find((k) => KOLLEKTIONEN[k].duefte.some((d) => d.id === id));\n    if (kidAbo) {\n      const k = KOLLEKTIONEN[kidAbo];\n      dazu({ key: setKey(kidAbo, 1, [id]) + \":abo\", type: \"set\", kollektion: kidAbo, line: k.linie, qty: 1, scents: [id], price: k.staffel[0].price, count: l.quantity, abo: { rabatt: 0, monat: true } });\n      continue;\n    }\n    if (plan) {\n      dazu({ key: `abo:${id}:${plan}`, type: \"produkt\", id, price: l.price / 100, plan, planName: l.selling_plan_allocation.selling_plan.name, count: l.quantity });\n      continue;\n    }\n    const kid = Object.keys(KOLLEKTIONEN).find((k) => KOLLEKTIONEN[k].duefte.some((d) => d.id === id));\n    if (kid && (c.discount_codes || []).some((d) => SD_ALLE.includes(String(d.code).toUpperCase()))) {\n      // Singles Day: mit SINGLES werden alle Flakons einer Kollektion (auch gemischt) zu \u00ABn + n gratis\u00BB\n      (sdTopf[kid] ||= []).push(...Array(l.quantity).fill(id));\n      continue;\n    }\n    if (kid) {\n      const k = KOLLEKTIONEN[kid];\n      dazu({ key: setKey(kid, 1, [id]), type: \"set\", kollektion: kid, line: k.linie, qty: 1, scents: [id], price: k.staffel[0].price, count: l.quantity });\n    } else if (DISCOVERY.includes(p)) dazu({ key: `discovery:${id}`, type: \"discovery\", id, price: p.price, count: l.quantity });\n    else dazu({ key: `produkt:${id}`, type: \"produkt\", id, price: p.price, count: l.quantity });\n  }\n  for (const [kid, ids] of Object.entries(sdTopf)) {\n    const k = KOLLEKTIONEN[kid], q = ids.length - ids.length % 2;\n    if (q) dazu({ key: setKey(kid, q, ids.slice(0, q)) + \":doppelt\", type: \"set\", kollektion: kid, line: k.linie, qty: q, scents: ids.slice(0, q).sort(), price: sdPreis(kid, q / 2), count: 1, doppelt: true });\n    if (ids.length % 2) dazu({ key: setKey(kid, 1, [ids[q]]), type: \"set\", kollektion: kid, line: k.linie, qty: 1, scents: [ids[q]], price: k.staffel[0].price, count: 1 });\n  }\n  buendle(neu);\n  // Geschenk-Wash nicht als gekauftes Produkt z\u00E4hlen\n  for (const g of geschenke(neu)) {\n    if (GESCHENK_VARIANTE[g.id]) continue;  // eigene Gratis-Variante, kein gekauftes Produkt\n    const hit = neu.find((x) => x.key === `produkt:${g.id}`);\n    if (!hit) continue;\n    hit.count -= g.count;\n    if (hit.count <= 0) neu.splice(neu.indexOf(hit), 1);\n  }\n  oakedBuendel(neu);\n  return neu;\n}\nfunction synchronisieren() {\n  lauf = lauf.then(async () => {\n    const c = shopCart || await holen();\n    const s = soll(), i = ist(c);\n    // Monats-Abo: Loop-Flows lesen die Phase aus dem Bestell-Attribut (s1 = 1 Flakon, s3 = 2+1)\n    const aboStueck = ensure().reduce((n, x) => n + (x.type === \"set\" && x.abo ? x.qty * x.count : 0), 0);\n    const phase = membership() ? aboStueck >= 1 ? \"m1\" : \"\" : aboStueck >= 3 ? \"s3\" : aboStueck >= 1 ? \"s1\" : \"\";  // m1 = Membership NEU (jeden Monat Duft + Shampoo)\n    if (phase && (c.attributes?.zois_phase || \"\") !== phase) shopCart = await fetch(\"/cart/update.js\", { method: \"POST\", headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" }, credentials: \"same-origin\", body: JSON.stringify({ attributes: { zois_phase: phase } }) }).then(json);\n    // Preistest Gruppe A: Code nur mit einem 2+1- oder 3+2-Set im Warenkorb\n    // Angebotstest T7 Gruppe B: ZOIS-B-3ER (\u221239.05) bei einem 3er-Set, ZOIS-B-5ER (\u221219.05) bei einem 5er-Set\n    // Membership-Test T8 Gruppe B: ZOIS-M-3ER (\u221229.05) bei einem 3er-Set einmalig, ZOIS-B-5ER bei einem 5er-Set einmalig; Abo-Preise \u00FCber Automatikrabatte\n    const sets = ensure().filter((x) => x.type === \"set\" && KOLLEKTIONEN[x.kollektion]?.staffel === STAFFELN.standard && x.qty >= 3 && !x.abo && !x.doppelt);\n    const eigene = [...new Set([...Object.values(DE_SET_CODES).flatMap((x) => Object.values(x)), DE_SHAMPOO_B_CODE, ...Object.values(MEMBERSHIP_CODES), ...Object.values(MEMBERSHIP_ABO_CODES)])];\n    const aboSets = ensure().filter((x) => x.type === \"set\" && x.abo && x.qty >= 3);\n    const deCodes = [];\n    for (const [name, codes] of Object.entries(DE_SET_CODES)) for (const [q, code] of Object.entries(codes)) if (ensure().some((x) => x.type === \"set\" && !x.abo && KOLLEKTIONEN[x.kollektion]?.staffel === STAFFELN[name] && x.qty === Number(q))) deCodes.push(membership() && name === \"standard\" ? MEMBERSHIP_CODES[q] : code);\n    if (membership()) for (const q of [3, 5]) if (aboSets.some((x) => KOLLEKTIONEN[x.kollektion]?.staffel === STAFFELN.standard && x.qty === q)) deCodes.push(MEMBERSHIP_ABO_CODES[q]);\n    if ((s.get(zeilenKey(SHAMPOO_M.variante, null)) || 0) >= 3) deCodes.push(DE_SHAMPOO_B_CODE);\n    const sollCodes = true ? [...new Set(deCodes)] : membership() ? [...[3, 5].filter((q) => sets.some((x) => x.qty === q)).map((q) => MEMBERSHIP_CODES[q]), ...[3, 5].filter((q) => aboSets.some((x) => x.qty === q)).map((q) => MEMBERSHIP_ABO_CODES[q])] : angebotB() ? [3, 5].filter((q) => sets.some((x) => x.qty === q)).map((q) => ANGEBOT_B_CODES[q]) : preisA() && sets.length ? [PREIS_A_CODE] : [];\n    const codes = (shopCart?.discount_codes || c.discount_codes || []).map((d) => String(d.code).toUpperCase());\n    if (codes.some((x) => SD_ALLE.includes(x))) sollCodes.length = 0;  // Singles Day: SINGLES ersetzt alle Staffel-Codes\n    const hat = codes.filter((x) => eigene.includes(x));\n    if (hat.length !== sollCodes.length || sollCodes.some((x) => !hat.includes(x))) {\n      const rest = codes.filter((x) => !eigene.includes(x));\n      shopCart = await fetch(\"/cart/update.js\", { method: \"POST\", headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" }, credentials: \"same-origin\", body: JSON.stringify({ discount: [...rest, ...sollCodes].join(\",\") }) }).then(json);\n    }\n    // Singles Day: passenden Stufen-Code setzen (nur Standard-Kollektionen im Warenkorb, sonst SINGLES 50 %), erst nachdem die Zeilen stimmen\n    const sdStufe = async () => {\n      const jetzt = (shopCart?.discount_codes || []).map((d) => String(d.code).toUpperCase());\n      const sdHat = jetzt.filter((x) => SD_ALLE.includes(x));\n      if (sdHat.length) {\n        const dop = ensure().filter((x) => x.type === \"set\" && x.doppelt);\n        const std = dop.filter((x) => sdStandard(x.kollektion));\n        const n = std.reduce((a, x) => a + x.qty / 2 * x.count, 0);\n        const sdSoll = n >= 2 && std.length === dop.length && SD_STUFE[n] ? SD_STUFE[n] : SD_CODE;\n        if (sdHat.length !== 1 || sdHat[0] !== sdSoll) {\n          const rest = jetzt.filter((x) => !SD_ALLE.includes(x) && !eigene.includes(x));\n          shopCart = await fetch(\"/cart/update.js\", { method: \"POST\", headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" }, credentials: \"same-origin\", body: JSON.stringify({ discount: [...rest, sdSoll].join(\",\") }) }).then(json);\n        }\n      }\n    };\n    if (gleich(s, i)) { await sdStufe(); return; }\n    // Bestehende Zeilen \u00FCber ihren Zeilen-key \u00E4ndern, neue Zeilen (auch mit selling_plan) \u00FCber /cart/add.js\n    const zeilen = /* @__PURE__ */ new Map();\n    for (const l of c.items || []) {\n      const k = zeilenKey(l.variant_id, planVon(l));\n      zeilen.set(k, [...zeilen.get(k) || [], l.key]);\n    }\n    const updates = {}, neu = [];\n    for (const k of /* @__PURE__ */ new Set([...s.keys(), ...i.keys()])) {\n      const n = s.get(k) || 0;\n      if (n === (i.get(k) || 0)) continue;\n      const keys = zeilen.get(k);\n      if (keys) keys.forEach((lk, j) => updates[lk] = j ? 0 : n);\n      else {\n        const [v, plan] = k.split(\"|\");\n        neu.push({ id: Number(v), quantity: n, ...plan ? { selling_plan: Number(plan) } : {} });\n      }\n    }\n    const post = (url, body) => fetch(url, { method: \"POST\", headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" }, credentials: \"same-origin\", body: JSON.stringify(body) }).then(json);\n    if (Object.keys(updates).length) shopCart = await post(\"/cart/update.js\", { updates });\n    if (neu.length) {\n      await post(\"/cart/add.js\", { items: neu });\n      await holen();\n    }\n    await sdStufe();\n    document.dispatchEvent(new CustomEvent(\"cart:refresh\", { bubbles: true }));\n  }).catch(async () => {\n    // Shopify hat abgelehnt (z. B. Bestand): Warenkorb aus Shopify neu aufbauen\n    try {\n      const c = await holen();\n      items = ausShopify(c);\n      emit({ sync: false });\n      window.dispatchEvent(new CustomEvent(\"zr:cart-fehler\"));\n    } catch {\n    }\n  });\n  return lauf;\n}\nexport const bereit = () => lauf;\nif (typeof window !== \"undefined\" && typeof fetch === \"function\") {\n  lauf = holen().then((c) => {\n    if (!gleich(soll(), ist(c))) {\n      items = ausShopify(c);\n      emit({ sync: false });\n    }\n  }).catch(() => {});\n  // Zur Kasse erst, wenn Shopify den Stand hat\n  document.addEventListener(\"click\", (e) => {\n    const a = e.target.closest?.('a[href^=\"/checkout\"]');\n    if (!a) return;\n    e.preventDefault();\n    const ziel = a.getAttribute(\"href\");\n    lauf.finally(async () => {\n      // Singles Day: Stufen-Code direkt vor der Kasse aus dem echten Shopify-Warenkorb setzen\n      try {\n        const c = await holen();\n        const codes = (c.discount_codes || []).map((d) => String(d.code).toUpperCase());\n        if (codes.some((x) => SD_ALLE.includes(x)) || sessionStorage.getItem(\"zr_sd11\") === \"1\") {\n          const dop = ausShopify({ ...c, discount_codes: [{ code: SD_CODE }] }).filter((x) => x.type === \"set\" && x.doppelt);\n          const alle = (c.items || []).reduce((s, l) => s + l.quantity, 0);\n          const std = dop.filter((x) => sdStandard(x.kollektion));\n          const n = std.reduce((s, x) => s + x.qty / 2 * x.count, 0);\n          const stdFlakons = std.reduce((s, x) => s + x.qty * x.count, 0);\n          const code = n >= 2 && std.length === dop.length && stdFlakons === alle && SD_STUFE[n] ? SD_STUFE[n] : SD_CODE;\n          if (codes.length !== 1 || codes[0] !== code) await fetch(\"/cart/update.js\", { method: \"POST\", headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" }, credentials: \"same-origin\", body: JSON.stringify({ discount: code }) });\n        }\n      } catch {}\n      location.href = ziel;\n    });\n  }, true);\n  // Andere Tabs / R\u00FCckkehr aus der Kasse\n  window.addEventListener(\"pageshow\", (ev) => {\n    if (!ev.persisted) return;\n    shopCart = null;\n    lauf = lauf.then(holen).then((c) => {\n      if (!gleich(soll(), ist(c))) {\n        items = ausShopify(c);\n        emit({ sync: false });\n      }\n    }).catch(() => {});\n  });\n}\n"],
  "mappings": "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",
  "names": ["ist", "codes"]
}
