{
  "version": 3,
  "sources": ["/cdn/shop/t/15/assets/quick-view.js?qv=2"],
  "sourcesContent": ["/**\n * G\u00F6ssl Theme - Quick View Drawer\n * Slide-in product preview fetched from /products/{handle}.js\n */\n(function() {\n  'use strict';\n\n  var SIZE_ORDER = [\n    'XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL',\n    '0', '1', '2', '3', '4', '4+', '5', '5+', '6', '6+',\n    '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38',\n    '39', '40', '41', '42', '44', '46', '48', '50', '52', '54', '56', '58', '60',\n    '62', '64', '86', '92', '98', '104', '110', '116', '122', '128', '134', '140',\n    '146', '152', '158', '164', '170', '176'\n  ];\n\n  function extractColorCode(val) {\n    if (!val) return null;\n    var m = val.match(/\\s(\\d+)$/);\n    return m ? m[1] : null;\n  }\n\n  function extractColorName(val) {\n    if (!val) return val;\n    return val.replace(/\\s\\d+$/, '');\n  }\n\n  function sortSizes(a, b) {\n    var ai = SIZE_ORDER.indexOf(a);\n    var bi = SIZE_ORDER.indexOf(b);\n    if (ai !== -1 && bi !== -1) return ai - bi;\n    if (ai !== -1) return -1;\n    if (bi !== -1) return 1;\n    var an = parseFloat(a), bn = parseFloat(b);\n    if (!isNaN(an) && !isNaN(bn)) return an - bn;\n    return a.localeCompare(b);\n  }\n\n  function formatMoney(cents) {\n    if (window.Goessl && typeof window.Goessl.formatMoney === 'function') return window.Goessl.formatMoney(cents);\n    return (cents / 100).toFixed(2).replace('.', ',') + ' \u20AC';\n  }\n\n  function el(tag, cls, attrs) {\n    var e = document.createElement(tag);\n    if (cls) e.className = cls;\n    if (attrs) Object.keys(attrs).forEach(function(k) {\n      if (k === 'text') e.textContent = attrs[k];\n      else e.setAttribute(k, attrs[k]);\n    });\n    return e;\n  }\n\n  function buildSkeleton() {\n    var wrap = el('div', 'quick-view__skeleton');\n    var gallery = el('div', 'quick-view__skeleton-gallery');\n    gallery.appendChild(el('div', 'skeleton-shimmer'));\n    gallery.firstChild.style.cssText = 'width:100%;height:100%';\n    wrap.appendChild(gallery);\n\n    var info = el('div', 'quick-view__skeleton-info');\n    var lines = [\n      { w: '35%', h: '10px', mt: '0' },\n      { w: '70%', h: '18px', mt: '4px' },\n      { w: '25%', h: '14px', mt: '8px' },\n    ];\n    lines.forEach(function(l) {\n      var line = el('div', 'skeleton-shimmer');\n      line.style.cssText = 'width:' + l.w + ';height:' + l.h + ';margin-top:' + l.mt + ';border-radius:3px';\n      info.appendChild(line);\n    });\n\n    // Color swatch placeholders\n    var swatchGroup = el('div', '');\n    swatchGroup.style.marginTop = '24px';\n    var swatchLabel = el('div', 'skeleton-shimmer');\n    swatchLabel.style.cssText = 'width:40%;height:10px;margin-bottom:8px;border-radius:3px';\n    swatchGroup.appendChild(swatchLabel);\n    var swatchRow = el('div', '');\n    swatchRow.style.cssText = 'display:flex;gap:8px';\n    for (var i = 0; i < 3; i++) {\n      var dot = el('div', 'skeleton-shimmer');\n      dot.style.cssText = 'width:36px;height:36px;border-radius:50%';\n      swatchRow.appendChild(dot);\n    }\n    swatchGroup.appendChild(swatchRow);\n    info.appendChild(swatchGroup);\n\n    // Size button placeholders\n    var sizeGroup = el('div', '');\n    sizeGroup.style.marginTop = '20px';\n    var sizeLabel = el('div', 'skeleton-shimmer');\n    sizeLabel.style.cssText = 'width:30%;height:10px;margin-bottom:8px;border-radius:3px';\n    sizeGroup.appendChild(sizeLabel);\n    var sizeRow = el('div', '');\n    sizeRow.style.cssText = 'display:flex;gap:8px;flex-wrap:wrap';\n    for (var j = 0; j < 6; j++) {\n      var btn = el('div', 'skeleton-shimmer');\n      btn.style.cssText = 'width:44px;height:36px;border-radius:6px';\n      sizeRow.appendChild(btn);\n    }\n    sizeGroup.appendChild(sizeRow);\n    info.appendChild(sizeGroup);\n\n    // Button placeholder\n    var btnPlaceholder = el('div', 'skeleton-shimmer');\n    btnPlaceholder.style.cssText = 'width:100%;height:44px;border-radius:6px;margin-top:24px';\n    info.appendChild(btnPlaceholder);\n\n    wrap.appendChild(info);\n    return wrap;\n  }\n\n  var drawer = document.querySelector('[data-quick-view]');\n  if (!drawer) return;\n\n  var body = drawer.querySelector('[data-quick-view-body]');\n  var loading = drawer.querySelector('[data-quick-view-loading]');\n  var isOpen = false;\n  var cache = {};\n  // AI-image note (EU AI Act Art. 50): localized caption text from the drawer (Liquid),\n  // so the quick view shows it in the active storefront language.\n  var aiNoteText = (drawer.getAttribute('data-ai-note-text') || 'Bild mit KI-Unterst\u00FCtzung erstellt');\n  // 22.10.2026: the picture shows the short word, the full sentence stays for screen readers (as on the PDP)\n  var aiNoteShort = (drawer.getAttribute('data-ai-note-short') || 'KI-Bild');\n  function fileNameOf(url) { return String(url || '').split('?')[0].split('/').pop(); }\n  // 25.10.2026 (SJ: white \"only on dark closeup photos\", ink everywhere else): |file|file| of the AI pictures that are\n  // dark where the note sits (snippets/ai-media-dark-keys.liquid via the drawer)\n  var aiDark = drawer.getAttribute('data-ai-dark') || '';\n  // The note turns white only where a dark-listed picture really lies under it: the 2:3 frame letterboxes the 3:4\n  // pictures, and their note sits on the light frost band below the picture. Read once the picture has loaded.\n  // This is the first paint: assets/ai-media-note.js then reads the pixels under the note, and once it has read this\n  // picture (note.__g26Px.last) its tone stands.\n  function toneNote(slide) {\n    var img = slide.querySelector('.quick-view__gallery-img'), note = slide.querySelector('.quick-view__ai-note');\n    if (!img || !note) return;\n    if (note.__g26Px && note.__g26Px.last === (img.currentSrc || img.getAttribute('src'))) return;\n    var dark = false;\n    if (slide.getAttribute('data-ai-dark') === '1' && img.naturalWidth && img.naturalHeight) {\n      var r = img.getBoundingClientRect(), n = note.getBoundingClientRect();\n      var s = Math.min(r.width / img.naturalWidth, r.height / img.naturalHeight);\n      var w = img.naturalWidth * s, h = img.naturalHeight * s;\n      var left = r.left + (r.width - w) / 2, top = r.top + (r.height - h) / 2;\n      dark = r.width > 0 && n.left >= left - 1 && n.right <= left + w + 1 && n.top >= top - 1 && n.bottom <= top + h + 1;\n    }\n    if (dark) note.setAttribute('data-on-dark', ''); else note.removeAttribute('data-on-dark');\n  }\n  // The card trigger carries this product's AI image FILENAMES (goessl.ai_media) as a comma list -\n  // /products/{handle}.js has no metafields. buildGallery marks a slide when its image url basename\n  // is in this set. Same filename key the PDP/lightbox/JSON-LD match on.\n  function aiFilenameSet(aiMediaCsv) {\n    var set = {};\n    if (!aiMediaCsv) return set;\n    aiMediaCsv.split(',').forEach(function (x) { x = String(x).trim(); if (x) set[x] = 1; });\n    return set;\n  }\n  var currentProduct = null;\n  var state = { color: null, size: null, variant: null };\n  var releaseFocusTrap = null;\n  var lastTrigger = null;\n\n  // \u2500\u2500 Open / Close \u2500\u2500\n\n  function open(handle, opts) {\n    opts = opts || {};\n    // Remember what had focus so we can restore it on close\n    lastTrigger = opts.trigger || document.activeElement;\n\n    drawer.hidden = false;\n    drawer.offsetHeight; // reflow\n    drawer.classList.add('is-open');\n    document.body.classList.add('quick-view-open');\n    isOpen = true;\n    settleScroll();\n\n    // Show skeleton loading state\n    loading.style.display = 'none';\n    var skeleton = body.querySelector('.quick-view__skeleton');\n    if (!skeleton) {\n      skeleton = buildSkeleton();\n      body.insertBefore(skeleton, body.firstChild);\n    }\n    skeleton.style.display = '';\n\n    // Clear previous content/errors\n    var prev = body.querySelector('.quick-view__product');\n    if (prev) prev.remove();\n    var prevErr = body.querySelector('.quick-view__error');\n    if (prevErr) prevErr.remove();\n    state = { color: null, size: null, variant: null, sizePicked: false };\n\n    fetchProduct(handle).then(function(product) {\n      // r187: a pre-order product needs its per-size state before the buttons are labelled\n      // (window.g26preorder, layout/theme.liquid). 22.10.2026: every product asks - the same answer carries the\n      // sizes with 1-4 pieces left (low) for the stock line; only a product in a selling plan group keeps _preorder.\n      if (!window.g26preorder) return product;\n      var planned = product.selling_plan_groups && product.selling_plan_groups.length;\n      return window.g26preorder.state(handle).then(function(s) {\n        if (planned) product._preorder = s;\n        product._low = (s && s.low) || {};\n        return product;\n      });\n    }).then(function(product) {\n      skeleton.style.display = 'none';\n      currentProduct = product;\n      render(product, opts);\n      // Re-trap focus after new content is rendered so new focusables are included\n      if (releaseFocusTrap) releaseFocusTrap();\n      if (window.Goessl && window.Goessl.trapFocus) {\n        releaseFocusTrap = window.Goessl.trapFocus(drawer);\n      }\n    }).catch(function(e) {\n      skeleton.style.display = 'none';\n      body.appendChild(el('p', 'quick-view__error', { text: window.g26tText('products.quick_view.load_error', 'Produkt konnte nicht geladen werden.') }));\n    });\n\n    // Trap focus within the drawer\n    if (window.Goessl && window.Goessl.trapFocus) {\n      releaseFocusTrap = window.Goessl.trapFocus(drawer);\n    }\n\n    // Focus close button\n    var closeBtn = drawer.querySelector('[data-quick-view-close]');\n    if (closeBtn) closeBtn.focus();\n  }\n\n  function close() {\n    if (!isOpen) return;\n    isOpen = false;\n    closeStav();   // the availability modal sits above the drawer; it must not outlive it\n    drawer.classList.remove('is-open');\n    document.body.classList.remove('quick-view-open');\n\n    // Release focus trap\n    if (releaseFocusTrap) {\n      releaseFocusTrap();\n      releaseFocusTrap = null;\n    }\n\n    // Restore focus to the trigger that opened the drawer - unless focus has moved on: after an add to\n    // cart the cart drawer opens over the quick view and holds focus (a11y #902)\n    var active = document.activeElement;\n    if (lastTrigger && typeof lastTrigger.focus === 'function' && (!active || active === document.body || drawer.contains(active))) {\n      lastTrigger.focus();\n    }\n    lastTrigger = null;\n\n    setTimeout(function() {\n      if (!isOpen) {\n        drawer.hidden = true;\n        var existingContent = body.querySelector('.quick-view__product');\n        if (existingContent) existingContent.remove();\n      }\n    }, 350);\n  }\n\n  // Close handlers\n  drawer.querySelectorAll('[data-quick-view-close]').forEach(function(btn) {\n    btn.addEventListener('click', close);\n  });\n  document.addEventListener('keydown', function(e) {\n    if (e.key === 'Escape' && isOpen) close();\n  });\n\n  // \u2500\u2500 Fetch \u2500\u2500\n\n  function fetchProduct(handle) {\n    if (cache[handle]) return Promise.resolve(cache[handle]);\n    // _fd=0: on the myshopify preview host a bare request 301s to the primary\n    // domain and dies cross-origin (same trap as the configurator length fetch)\n    return fetch(window.g26url('products/' + handle + '.js') + '?_fd=0')\n      .then(function(r) { return r.json(); })\n      .then(function(data) { cache[handle] = data; return data; });\n  }\n\n  // \u2500\u2500 Render \u2500\u2500\n\n  function render(product, opts) {\n    var existing = body.querySelector('.quick-view__product');\n    if (existing) existing.remove();\n\n    var wrap = el('div', 'quick-view__product');\n\n    // AI-image note: resolve which images are AI-made before the gallery is built\n    product._aiFilenames = aiFilenameSet(opts && opts.aiMedia);\n\n    // Gallery\n    var gallery = buildGallery(product);\n    wrap.appendChild(gallery);\n\n    // Info section\n    var info = el('div', 'quick-view__info');\n\n    // Title\n    info.appendChild(el('h2', 'quick-view__title', { text: product.title }));\n\n    // Price\n    var priceWrap = el('div', 'quick-view__price');\n    updatePrice(priceWrap, product, null);\n    info.appendChild(priceWrap);\n\n    // Options: .js returns [{name, position, values}], need index by name\n    var farbeIndex = -1, sizeIndex = -1;\n    (product.options || []).forEach(function(opt, i) {\n      var name = typeof opt === 'string' ? opt : opt.name;\n      if (name === 'Farbe') farbeIndex = i;\n      if (name === 'Gr\u00F6\u00DFe') sizeIndex = i;\n    });\n\n    // Color swatches. 22.10.2026: the colour the card or row shows - its active swatch, else the trigger's colour code\n    // (a split card or a shop-the-look tile has no swatch row) - never simply the first colour of the variant list.\n    if (farbeIndex !== -1) {\n      info.appendChild(buildColorSwatches(product, farbeIndex, opts.color || colourValueFor(product, farbeIndex, opts.colourCode)));\n    }\n\n    // Size pills\n    if (sizeIndex !== -1) {\n      info.appendChild(buildSizePills(product, sizeIndex));\n    }\n\n    // Stock status\n    var stockEl = el('div', 'quick-view__stock', { 'aria-live': 'polite' });\n    info.appendChild(stockEl);\n\n    // In-stock: the PDP's store line. The button carries the selected variant\n    // because the quickview has no cart form for the modal to read it from.\n    var storeRow = el('div', 'quick-view__store-row');\n    storeRow.hidden = true;\n    var stavBtn = el('button', 'quick-view__store-link', { type: 'button', text: window.g26tText('products.store_availability.check', 'Verf\u00FCgbarkeit pr\u00FCfen') });\n    stavBtn.addEventListener('click', function() {\n      openStav(state.variant ? String(state.variant.id) : null, product, opts.articleNo, opts.reservable === true);\n    });\n    storeRow.appendChild(stavBtn);\n    info.appendChild(storeRow);\n\n    // Out-of-stock: back-in-stock, same markup and classes as the PDP block\n    var bis = el('div', 'quick-view__bis g26-bis');\n    bis.hidden = true;\n    var custEmail = (window.Goessl && window.Goessl.customer && window.Goessl.customer.email) || '';\n    var bisForm = el('div', 'g26-bis__form');\n    var bisEmail = el('input', 'g26-bis__input', { type: 'email', placeholder: window.g26tText('general.newsletter.email_placeholder', 'E-Mail-Adresse'), autocomplete: 'email', 'aria-label': window.g26tText('products.back_in_stock.email_label', 'E-Mail-Adresse f\u00FCr die Benachrichtigung') });\n    var bisSubmit = el('button', 'g26-bis__submit', { type: 'button', text: window.g26tText('products.back_in_stock.notify', 'Benachrichtigen') });\n    if (custEmail) {\n      // logged in: no email field, the button alone subscribes their account address\n      bisEmail.value = custEmail;\n      bisSubmit.textContent = window.g26tText('products.back_in_stock.notify_long', 'Benachrichtigen, sobald wieder verf\u00FCgbar');\n      bisSubmit.className += ' g26-bis__submit--solo';\n    } else {\n      bisForm.appendChild(bisEmail);\n    }\n    bisForm.appendChild(bisSubmit);\n    var bisOk = el('p', 'g26-bis__msg', { text: window.g26tText('products.back_in_stock.success', 'Danke! Wir melden uns bei Ihnen, sobald das Modell in Ihrer Gr\u00F6\u00DFe wieder verf\u00FCgbar ist.') });\n    bisOk.hidden = true;\n    var bisErr = el('p', 'g26-bis__msg g26-bis__msg--err', { text: window.g26tText('products.back_in_stock.error', 'Das hat leider nicht geklappt - bitte versuchen Sie es gleich noch einmal.') });\n    bisErr.hidden = true;\n    bis.appendChild(bisForm); bis.appendChild(bisOk); bis.appendChild(bisErr);\n    function submitBis() {\n      var addr = (bisEmail.value || '').trim();\n      if (!addr || addr.indexOf('@') < 1) { bisEmail.focus(); return; }\n      if (!state.variant) { bisErr.hidden = false; return; }\n      bisSubmit.disabled = true;\n      fetch('https://partner.goessl.com/api/public/bis-demand', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n          email: addr,\n          variant_id: String(state.variant.id),\n          handle: product.handle,\n          title: product.title,\n          article_no: opts.articleNo || '',\n          color: state.color || '',\n          size: state.size || ''\n        })\n      }).then(function(r) {\n        return r.json().catch(function() { return {}; }).then(function(j) {\n          bisSubmit.disabled = false;\n          if (r.ok && j.ok && j.klaviyo) { bisForm.hidden = true; bisOk.hidden = false; bisErr.hidden = true; }\n          else { bisErr.hidden = false; }\n        });\n      }).catch(function() { bisSubmit.disabled = false; bisErr.hidden = false; });\n    }\n    bisSubmit.addEventListener('click', submitBis);\n    bisEmail.addEventListener('keydown', function(e) {\n      if (e.key === 'Enter') { e.preventDefault(); submitBis(); }\n    });\n    // appended to the action row further down, so \"benachrichtigen\" appears\n    // exactly where \"in den Warenkorb\" would have been\n\n    // Description snippet + detail link\n    if (product.description) {\n      var descDiv = el('div', 'quick-view__description');\n      var decoded = product.description.replace(/<br\\s*\\/?>/gi, ' ').replace(/<[^>]+>/g, '');\n      descDiv.textContent = decoded;\n      info.appendChild(descDiv);\n    }\n    var detailLink = el('a', 'quick-view__detail-link', {\n      text: window.g26tText('products.quick_view.view_details', 'Produktdetails ansehen'),\n      href: window.g26url('products/' + product.handle)\n    });\n    detailLink.setAttribute('data-quick-view-detail', '');\n    info.appendChild(detailLink);\n\n    // Action buttons + wishlist row\n    var actions = el('div', 'quick-view__actions');\n\n    var btnRow = el('div', 'quick-view__btn-row');\n\n    if (opts.context === 'configurator') {\n      // Primary: add to canvas (outfit). Secondary: direct cart.\n      var outfitBtn = el('button', 'quick-view__add-btn', { text: window.g26tText('products.quick_view.add_to_outfit', 'Zum Outfit hinzuf\u00FCgen'), type: 'button' });\n      outfitBtn.dataset.action = 'outfit';\n      outfitBtn.addEventListener('click', function() { onAction(product, opts); });\n      btnRow.appendChild(outfitBtn);\n\n      var cartBtn = el('button', 'quick-view__add-btn quick-view__add-btn--secondary', { text: window.g26tText('products.product.add_to_cart', 'In den Warenkorb'), type: 'button' });\n      cartBtn.dataset.action = 'cart';\n      cartBtn.addEventListener('click', function() {\n        // Bypass the configurator-onSelect path so this button always lands in the cart\n        var directOpts = Object.assign({}, opts, { context: 'cart-direct' });\n        onAction(product, directOpts);\n      });\n      btnRow.appendChild(cartBtn);\n    } else {\n      var addBtn = el('button', 'quick-view__add-btn', { text: window.g26tText('products.product.add_to_cart', 'In den Warenkorb'), type: 'button' });\n      addBtn.dataset.action = 'cart';\n      addBtn.addEventListener('click', function() { onAction(product, opts); });\n      btnRow.appendChild(addBtn);\n    }\n\n    // Wishlist icon button (matches product page)\n    var wishBtn = el('button', 'quick-view__wishlist', { type: 'button', 'aria-label': window.g26tText('wishlist.to_wishlist', 'Zur Merkliste') });\n    function makeHeart(filled) {\n      var ns = 'http://www.w3.org/2000/svg';\n      var svg = document.createElementNS(ns, 'svg');\n      svg.setAttribute('viewBox', '0 0 20 20');\n      svg.setAttribute('width', '22');\n      svg.setAttribute('height', '22');\n      var path = document.createElementNS(ns, 'path');\n      path.setAttribute('d', 'M10 17.5s-7-4.5-7-9.5a4 4 0 0 1 7-2.65A4 4 0 0 1 17 8c0 5-7 9.5-7 9.5z');\n      if (filled) {\n        svg.setAttribute('fill', 'currentColor');\n      } else {\n        svg.setAttribute('fill', 'none');\n        svg.setAttribute('stroke', 'currentColor');\n        svg.setAttribute('stroke-width', '1.5');\n        path.setAttribute('stroke-linecap', 'round');\n        path.setAttribute('stroke-linejoin', 'round');\n      }\n      svg.appendChild(path);\n      return svg;\n    }\n    var isWished = window.Goessl && window.Goessl.wishlist && window.Goessl.wishlist.hasItem(product.handle);\n    wishBtn.appendChild(makeHeart(isWished));\n    if (isWished) wishBtn.classList.add('is-wishlisted');\n    wishBtn.addEventListener('click', function() {\n      if (window.Goessl && window.Goessl.wishlist) {\n        window.Goessl.wishlist.toggleItem(product.handle);\n        var nowWished = window.Goessl.wishlist.hasItem(product.handle);\n        wishBtn.classList.toggle('is-wishlisted', nowWished);\n        var oldSvg = wishBtn.querySelector('svg');\n        if (oldSvg) wishBtn.replaceChild(makeHeart(nowWished), oldSvg);\n      }\n    });\n    btnRow.appendChild(wishBtn);\n\n    actions.appendChild(btnRow);\n    actions.appendChild(bis);\n    info.appendChild(actions);\n    wrap.appendChild(info);\n    body.appendChild(wrap);\n\n\n    // Store option indices on product for reuse\n    product._farbeIndex = farbeIndex;\n    product._sizeIndex = sizeIndex;\n\n    // Init state\n    if (farbeIndex !== -1) {\n      var firstSwatch = info.querySelector('.quick-view__color-swatch.active');\n      if (firstSwatch) {\n        state.color = firstSwatch.dataset.value;\n        filterGalleryByColor(product, gallery);\n      }\n    }\n    updateAvailability(product);\n\n    // SJ 22.10.2026 (card a): no size of the quick view's own choosing - it picked the middle size, and a visitor could\n    // add it without ever choosing it. A single size is the only answer; otherwise the visitor's remembered size\n    // (r154) when this colour has it, else none and the button asks for one.\n    var sizeGrid = body.querySelector('.quick-view__size-grid');\n    if (sizeGrid) {\n      var pills = Array.from(sizeGrid.querySelectorAll('.quick-view__size-btn'));\n      var pre = pills.length === 1 ? pills[0] : rememberedSizePill(product, pills);\n      if (pre) {\n        pre.classList.add('active');\n        pre.setAttribute('aria-pressed', 'true');\n        state.size = pre.dataset.value;\n        state.sizePicked = false;   // not the visitor's pick here - the product page applies the memory itself\n        updateVariant(product);\n      }\n    }\n  }\n\n  // the pill of the visitor's remembered size (GoesslPersonal.sizes, the product page's applySizeMemory) among the\n  // sizes this colour can deliver, or null\n  function rememberedSizePill(product, pills) {\n    var P = window.GoesslPersonal;\n    if (!P || !P.sizes || product._sizeIndex === -1) return null;\n    var open = pills.filter(function(b) { return !b.classList.contains('quick-view__size-btn--unavailable'); });\n    if (!open.length) return null;\n    var si = product._sizeIndex;\n    var values = (product.variants || []).map(function(v) { return v.options[si]; });\n    var fam = P.sizes.familyFor(product, values, null, (product.variants || []).map(function(v) { return v.sku; }));\n    var pick = P.sizes.match(fam, open.map(function(b) { return b.dataset.value; }));\n    return pick ? open.find(function(b) { return b.dataset.value === pick; }) || null : null;\n  }\n\n  // \u2500\u2500 Gallery \u2500\u2500\n\n  function buildGallery(product) {\n    var gallery = el('div', 'quick-view__gallery');\n    var track = el('div', 'quick-view__gallery-track');\n\n    product.images.forEach(function(src) {\n      var slide = el('div', 'quick-view__gallery-slide');\n      var isAi = product._aiFilenames && product._aiFilenames[fileNameOf(src)];\n      if (isAi) slide.classList.add('quick-view__gallery-slide--ai');\n      var img = el('img', 'quick-view__gallery-img', {\n        src: src.replace(/(\\.\\w+)(\\?|$)/, '_600x$1$2'),\n        alt: product.title,\n        loading: 'lazy',\n        decoding: 'async'\n      });\n      slide.appendChild(img);\n      if (isAi) {\n        var note = el('p', 'quick-view__ai-note');\n        note.appendChild(el('span', null, { text: aiNoteShort, 'aria-hidden': 'true' }));\n        note.appendChild(el('span', 'visually-hidden', { text: aiNoteText }));\n        slide.appendChild(note);\n        if (aiDark.indexOf('|' + fileNameOf(src) + '|') > -1) {\n          slide.setAttribute('data-ai-dark', '1');\n          img.addEventListener('load', toneNote.bind(null, slide));\n        }\n      }\n      track.appendChild(slide);\n    });\n    // a gallery with at least one AI note lifts its dots clear of the note (quick-view-drawer.liquid)\n    if (track.querySelector('.quick-view__gallery-slide--ai')) gallery.classList.add('quick-view__gallery--ai');\n\n    gallery.appendChild(track);\n\n    if (product.images.length > 1) {\n      // Dots\n      var dots = el('div', 'quick-view__gallery-dots');\n      product.images.forEach(function(_, i) {\n        var dot = el('button', 'quick-view__gallery-dot' + (i === 0 ? ' active' : ''), {\n          type: 'button', 'aria-label': window.g26tText('products.product.media.image_index', 'Bild {{ index }}', { index: i + 1 })\n        });\n        dot.addEventListener('click', function() {\n          track.scrollTo({ left: track.children[i].offsetLeft, behavior: 'smooth' });\n        });\n        dots.appendChild(dot);\n      });\n      gallery.appendChild(dots);\n\n      // Arrow buttons\n      var prevBtn = el('button', 'quick-view__gallery-arrow quick-view__gallery-arrow--prev', { type: 'button', 'aria-label': window.g26tText('sections.collection_gallery.previous_image', 'Vorheriges Bild') });\n      var nextBtn = el('button', 'quick-view__gallery-arrow quick-view__gallery-arrow--next', { type: 'button', 'aria-label': window.g26tText('sections.collection_gallery.next_image', 'N\u00E4chstes Bild') });\n      var ns = 'http://www.w3.org/2000/svg';\n      [prevBtn, nextBtn].forEach(function(btn, idx) {\n        var svg = document.createElementNS(ns, 'svg');\n        svg.setAttribute('viewBox', '0 0 24 24');\n        svg.setAttribute('width', '20');\n        svg.setAttribute('height', '20');\n        svg.setAttribute('fill', 'none');\n        svg.setAttribute('stroke', 'currentColor');\n        svg.setAttribute('stroke-width', '2');\n        svg.setAttribute('stroke-linecap', 'round');\n        svg.setAttribute('stroke-linejoin', 'round');\n        var polyline = document.createElementNS(ns, 'polyline');\n        polyline.setAttribute('points', idx === 0 ? '15 18 9 12 15 6' : '9 18 15 12 9 6');\n        svg.appendChild(polyline);\n        btn.appendChild(svg);\n      });\n      prevBtn.addEventListener('click', function() {\n        var w = track.children[0].offsetWidth;\n        track.scrollBy({ left: -w, behavior: 'smooth' });\n      });\n      nextBtn.addEventListener('click', function() {\n        var w = track.children[0].offsetWidth;\n        track.scrollBy({ left: w, behavior: 'smooth' });\n      });\n      gallery.appendChild(prevBtn);\n      gallery.appendChild(nextBtn);\n\n      var scrollTimer;\n      track.addEventListener('scroll', function() {\n        clearTimeout(scrollTimer);\n        scrollTimer = setTimeout(function() {\n          var slideWidth = track.children[0].offsetWidth;\n          var idx = Math.round(track.scrollLeft / slideWidth);\n          dots.querySelectorAll('.quick-view__gallery-dot').forEach(function(d, i) {\n            d.classList.toggle('active', i === idx);\n          });\n        }, 50);\n      });\n    }\n\n    return gallery;\n  }\n\n  function filterGalleryByColor(product, gallery) {\n    var colorCode = extractColorCode(state.color);\n    if (!colorCode) return;\n\n    var track = gallery.querySelector('.quick-view__gallery-track');\n    var dots = gallery.querySelector('.quick-view__gallery-dots');\n    var slides = Array.from(track.children);\n\n    var visibleCount = 0;\n    slides.forEach(function(slide) {\n      var img = slide.querySelector('img');\n      var src = img ? img.src : '';\n      var match = src.indexOf('-' + colorCode + '-') !== -1;\n      slide.style.display = match ? '' : 'none';\n      if (match) visibleCount++;\n    });\n\n    if (visibleCount === 0) {\n      slides.forEach(function(s) { s.style.display = ''; });\n      visibleCount = slides.length;\n    }\n\n    // Rebuild dots for visible slides only\n    if (dots) {\n      while (dots.firstChild) dots.removeChild(dots.firstChild);\n      var visibleSlides = slides.filter(function(s) { return s.style.display !== 'none'; });\n      visibleSlides.forEach(function(vs, i) {\n        var dot = el('button', 'quick-view__gallery-dot' + (i === 0 ? ' active' : ''), {\n          type: 'button', 'aria-label': window.g26tText('products.product.media.image_index', 'Bild {{ index }}', { index: i + 1 })\n        });\n        dot.addEventListener('click', function() {\n          track.scrollTo({ left: vs.offsetLeft, behavior: 'smooth' });\n        });\n        dots.appendChild(dot);\n      });\n    }\n\n    // Always reset to first visible image\n    track.scrollLeft = 0;\n    var firstVisible = slides.find(function(s) { return s.style.display !== 'none'; });\n    if (firstVisible) {\n      requestAnimationFrame(function() {\n        track.scrollTo({ left: 0, behavior: 'auto' });\n      });\n    }\n  }\n\n  // 1-4 pieces left of a variant that can be bought (snippets/low-stock.liquid via ?view=vorrat), else 0\n  function lowCount(product, variant) {\n    var q = variant && variant.available && product._low ? Number(product._low[String(variant.id)]) : 0;\n    return q >= 1 && q <= 4 ? q : 0;\n  }\n\n  // \u2500\u2500 Colour links (22.10.2026) \u2500\u2500\n  // The colour of a code the way the swatches and links read it (snippets/product-colour-url.liquid): the SKU's colour\n  // segment ({group}_{colour}_...), else the Farbe value's trailing number.\n  function colourValueFor(product, farbeIndex, code) {\n    if (!code || farbeIndex === -1) return null;\n    code = String(code);\n    var hit = (product.variants || []).find(function(v) { return String(v.sku || '').split('_')[1] === code; }) ||\n      (product.variants || []).find(function(v) { return extractColorCode(v.options[farbeIndex]) === code; });\n    return hit ? hit.options[farbeIndex] : null;\n  }\n  // ?variant=<the variant on screen> - with size=open while the size is only the quick view's own pick, so the\n  // product page still preselects the visitor's remembered size; a colour without that size: its first variant\n  // that can be bought\n  function detailHref(product) {\n    var base = window.g26url('products/' + product.handle);\n    var v = state.variant;\n    var fi = product._farbeIndex;\n    if (!v && state.color && fi !== -1) {\n      var ofColour = (product.variants || []).filter(function(x) { return x.options[fi] === state.color; });\n      v = ofColour.find(function(x) { return x.available; }) || ofColour[0] || null;\n    }\n    if (!v) return base;\n    return base + '?variant=' + v.id + (state.variant && state.sizePicked ? '' : '&size=open');\n  }\n\n  // \u2500\u2500 Color Swatches \u2500\u2500\n\n  function buildColorSwatches(product, optIndex, preselectedColor) {\n    var section = el('div', 'quick-view__option');\n    // No text label for color \u2014 swatches are self-explanatory\n\n    var grid = el('div', 'quick-view__color-grid');\n\n    var seen = {};\n    var colorValues = [];\n    product.variants.forEach(function(v) {\n      var colorVal = v.options[optIndex];\n      if (colorVal && !seen[colorVal]) {\n        seen[colorVal] = true;\n        colorValues.push(colorVal);\n      }\n    });\n\n    var initialColor = preselectedColor || colorValues[0];\n\n    colorValues.forEach(function(colorVal) {\n      var code = extractColorCode(colorVal);\n\n      var thumbSrc = null;\n      if (code) {\n        var imgMatch = product.images.find(function(src) { return src.indexOf('-' + code + '-') !== -1; });\n        if (imgMatch) thumbSrc = imgMatch.replace(/(\\.\\w+)(\\?|$)/, '_80x$1$2');\n      }\n\n      // a11y #902: the selected colour is pressed, as on the PDP\n      var btn = el('button', 'quick-view__color-swatch', { type: 'button', title: colorVal, 'aria-pressed': colorVal === initialColor ? 'true' : 'false' });\n      btn.dataset.value = colorVal;\n\n      if (thumbSrc) {\n        btn.appendChild(el('img', null, { src: thumbSrc, alt: colorVal, loading: 'lazy' }));\n      } else {\n        btn.textContent = code || colorVal.charAt(0);\n      }\n\n      if (colorVal === initialColor) {\n        btn.classList.add('active');\n        state.color = colorVal;\n        // color name display removed\n      }\n\n      btn.addEventListener('click', function() {\n        grid.querySelectorAll('.quick-view__color-swatch').forEach(function(b) { b.classList.remove('active'); b.setAttribute('aria-pressed', 'false'); });\n        btn.classList.add('active');\n        btn.setAttribute('aria-pressed', 'true');\n        state.color = colorVal;\n        // color name display removed\n\n        var gallery = body.querySelector('.quick-view__gallery');\n        if (gallery) filterGalleryByColor(currentProduct, gallery);\n        updateAvailability(currentProduct);\n        // still no size (SJ 22.10.2026): the remembered one, if this colour has it - as on the product page\n        var sizeGrid = !state.size && body.querySelector('.quick-view__size-grid');\n        var mem = sizeGrid ? rememberedSizePill(currentProduct, Array.from(sizeGrid.querySelectorAll('.quick-view__size-btn'))) : null;\n        if (mem) {\n          mem.classList.add('active');\n          mem.setAttribute('aria-pressed', 'true');\n          state.size = mem.dataset.value;\n          state.sizePicked = false;\n          updateVariant(currentProduct);\n        }\n      });\n\n      grid.appendChild(btn);\n    });\n\n    section.appendChild(grid);\n    return section;\n  }\n\n  // \u2500\u2500 Size Pills \u2500\u2500\n\n  function buildSizePills(product, optIndex) {\n    var section = el('div', 'quick-view__option');\n    section.appendChild(el('div', 'quick-view__option-label', { text: window.g26tText('products.quick_view.size_label', 'Gr\u00F6\u00DFe:') }));\n\n    var grid = el('div', 'quick-view__size-grid');\n    grid.dataset.optionIndex = optIndex;\n\n    var seen = {};\n    var sizes = [];\n    product.variants.forEach(function(v) {\n      var sizeVal = v.options[optIndex];\n      if (sizeVal && !seen[sizeVal]) {\n        seen[sizeVal] = true;\n        sizes.push({ value: sizeVal, display: sizeVal.replace(/\\s*\\([^)]*\\)/g, '') });\n      }\n    });\n\n    sizes.sort(function(a, b) { return sortSizes(a.display, b.display); });\n\n    sizes.forEach(function(s) {\n      var btn = el('button', 'quick-view__size-btn', { type: 'button', text: s.display, 'aria-pressed': 'false' });\n      btn.dataset.value = s.value;\n      btn.addEventListener('click', function() {\n        grid.querySelectorAll('.quick-view__size-btn').forEach(function(b) { b.classList.remove('active'); b.setAttribute('aria-pressed', 'false'); });\n        btn.classList.add('active');\n        btn.setAttribute('aria-pressed', 'true');\n        state.size = s.value;\n        state.sizePicked = true;\n        updateVariant(product);\n      });\n      grid.appendChild(btn);\n    });\n\n    section.appendChild(grid);\n    return section;\n  }\n\n  // \u2500\u2500 Variant matching \u2500\u2500\n\n  function updateAvailability(product) {\n    var sizeGrid = body.querySelector('.quick-view__size-grid');\n    // r71: products without a Gr\u00F6\u00DFe option (Taschen, G\u00FCrtel) have no size\n    // grid \u2014 the early return left state.variant null forever and the ATC\n    // permanently dead. Resolve the variant and let updateVariant run.\n    if (!sizeGrid) { updateVariant(product); return; }\n    var farbeIndex = product._farbeIndex;\n    var sizeIndex = product._sizeIndex;\n\n    sizeGrid.querySelectorAll('.quick-view__size-btn').forEach(function(btn) {\n      var sizeVal = btn.dataset.value;\n      var matching = product.variants.filter(function(v) {\n        var colorMatch = farbeIndex === -1 || !state.color || v.options[farbeIndex] === state.color;\n        return colorMatch && v.options[sizeIndex] === sizeVal;\n      });\n      var available = matching.some(function(v) { return v.available; });\n      // struck through but still selectable, as on the PDP \u2014 picking a sold-out\n      // size is how the customer reaches the back-in-stock form\n      btn.classList.toggle('quick-view__size-btn--unavailable', !available);\n      btn.disabled = false;\n      // a11y #902: the strike says it to screen readers too, in the PDP's words (sold out / no such size)\n      if (available) btn.removeAttribute('aria-label');\n      else btn.setAttribute('aria-label', btn.textContent.trim() + ', ' + (matching.length\n        ? window.g26tText('products.product.sold_out', 'Ausverkauft')\n        : window.g26tText('products.product.unavailable', 'Nicht verf\u00FCgbar')));\n    });\n\n    updateVariant(product);\n  }\n\n  // Vorbestellung (pre-order): without the plan the add would book as an ordinary\n  // oversold sale \u2014 the PDP marks its line as a pre-order and a collection-card add\n  // has to do the same. r187: per size, from product._preorder (set in open() via\n  // window.g26preorder): the plan for a size without stock, null for a size that\n  // has stock (it sells normally) or a product that is no pre-order. The old test\n  // matched the group NAME, which reads \"Pre-order\" on /en - every English quick-view\n  // add went into the cart without the plan.\n  // When the per-size answer could not be read (_preorder null), the plan comes from\n  // the .js data by its ID (scripts/preorder-config.json sellingPlanId) and every size\n  // stays a pre-order, as before r187 - never a no-stock size without the plan.\n  var PREORDER_PLAN_ID = 692860158286;\n  function preorderPlanId(product, variant) {\n    if (!variant || !product) return null;\n    if (product._preorder) return window.g26preorder.planFor(product._preorder, variant.id);\n    var groups = product.selling_plan_groups || [];\n    for (var i = 0; i < groups.length; i++) {\n      var plans = groups[i].selling_plans || [];\n      for (var j = 0; j < plans.length; j++) if (Number(plans[j].id) === PREORDER_PLAN_ID) return PREORDER_PLAN_ID;\n    }\n    return null;\n  }\n\n  function updateVariant(product) {\n    var farbeIndex = product._farbeIndex;\n    var sizeIndex = product._sizeIndex;\n\n    // SJ 22.10.2026 (card a): no size chosen yet - no variant either (it used to be the colour's first, an arbitrary\n    // size); the price covers the colour's sizes and the button asks for the size, as on the product page\n    var chosen = !!state.size || sizeIndex === -1;\n    var match = !chosen ? null : product.variants.find(function(v) {\n      var colorOk = farbeIndex === -1 || !state.color || v.options[farbeIndex] === state.color;\n      var sizeOk = sizeIndex === -1 || v.options[sizeIndex] === state.size;\n      return colorOk && sizeOk;\n    });\n\n    state.variant = match || null;\n\n    // 22.10.2026: \"Produktdetails ansehen\" opens the colour on screen - and the size, once the visitor picked one\n    var detail = body.querySelector('[data-quick-view-detail]');\n    if (detail) detail.setAttribute('href', detailHref(product));\n\n    var priceWrap = body.querySelector('.quick-view__price');\n    if (priceWrap) updatePrice(priceWrap, product, match);\n\n    // r83 (review F2): configurator context renders TWO .quick-view__add-btn\n    // (outfit + direct cart) \u2014 gate them BOTH, not just the first match.\n    var addBtns = body.querySelectorAll('.quick-view__add-btn');\n    var stockEl = body.querySelector('.quick-view__stock');\n    var storeRow = body.querySelector('.quick-view__store-row');\n    var bis = body.querySelector('.quick-view__bis');\n    // r71: a chosen colour+size WITHOUT a variant (partial size ranges) is\n    // just as unbuyable as sold-out \u2014 match=null used to fall into the\n    // enabled else-branch with \u201EIn den Warenkorb\".\n    var soldOut = chosen && (!match || !match.available);\n\n    // store line only once a size is picked (the modal needs a variant), BIS\n    // only when that variant is actually gone \u2014 and then the ATC steps aside\n    if (storeRow) storeRow.hidden = !(chosen && match && match.available);\n    if (bis) {\n      var wasHidden = bis.hidden;\n      bis.hidden = !soldOut;\n      if (soldOut && wasHidden) {\n        // fresh state per variant, like the PDP block does on variant:change\n        var f = bis.querySelector('.g26-bis__form');\n        var o = bis.querySelector('[class*=\"g26-bis__msg\"]:not(.g26-bis__msg--err)');\n        var er = bis.querySelector('.g26-bis__msg--err');\n        if (f) f.hidden = false;\n        if (o) o.hidden = true;\n        if (er) er.hidden = true;\n      }\n    }\n\n    addBtns.forEach(function (addBtn, i) {\n      addBtn.hidden = soldOut;\n      if (!chosen && i === 0) {\n        // SJ 22.10.2026: no size yet - the (first) button asks for one and leads to the sizes (onAction -> askForSize);\n        // the configurator's second button waits, as before\n        addBtn.disabled = false;\n        addBtn.classList.remove('quick-view__add-btn--disabled');\n        addBtn.textContent = window.g26tText('products.product.choose_size', 'Gr\u00F6\u00DFe w\u00E4hlen');\n      } else if (!chosen || soldOut) {\n        addBtn.disabled = true;\n        addBtn.classList.add('quick-view__add-btn--disabled');\n      } else {\n        addBtn.disabled = false;\n        addBtn.classList.remove('quick-view__add-btn--disabled');\n        addBtn.textContent = addBtn.dataset.action === 'outfit'\n          ? window.g26tText('products.quick_view.to_outfit', 'Zum Outfit')\n          : (preorderPlanId(product, match) ? window.g26tText('products.product.preorder', 'Vorbestellen') : window.g26tText('products.product.add_to_cart', 'In den Warenkorb'));\n      }\n    });\n    if (stockEl) {\n      if (!chosen) { stockEl.textContent = ''; stockEl.className = 'quick-view__stock'; }\n      else if (soldOut) { stockEl.textContent = window.g26tText('products.product.out_of_stock', 'Nicht auf Lager'); stockEl.className = 'quick-view__stock quick-view__stock--out'; }\n      // r187: a pre-order size is buyable (CONTINUE) but not in stock - the button says so, the line stays empty\n      else if (state.size && preorderPlanId(product, match)) { stockEl.textContent = ''; stockEl.className = 'quick-view__stock'; }\n      // 22.10.2026: 1-4 pieces left of this size (across every location that ships online orders) says so instead\n      else if (state.size && match && lowCount(product, match) === 1) { stockEl.textContent = window.g26tText('products.product.stock_last_one', 'Nur noch 1 verf\u00FCgbar'); stockEl.className = 'quick-view__stock quick-view__stock--low'; }\n      else if (state.size && match && lowCount(product, match) > 1) { stockEl.textContent = window.g26tText('products.product.stock_low', 'Auf Lager, weniger als {{ count }} verf\u00FCgbar', { count: 5 }); stockEl.className = 'quick-view__stock quick-view__stock--low'; }\n      else if (state.size) { stockEl.textContent = window.g26tText('products.product.in_stock', 'Auf Lager'); stockEl.className = 'quick-view__stock quick-view__stock--in'; }\n    }\n  }\n\n  // \u2500\u2500 Verf\u00FCgbarkeit im Gesch\u00E4ft (quickview instance) \u2500\u2500\n  // Zeilen, \u201EMein Gwandhaus\u201C und die Reservierung kommen seit r67 aus\n  // store-reserve.js \u2014 dieselbe Fassung, die die PDP zeichnet. Hier bleibt\n  // nur, was die Schnellansicht eigen hat: ihr Modal, ihr Produktzustand\n  // und das Escape, das die Schnellansicht darunter nicht schlie\u00DFen darf.\n  var stavModal = document.querySelector('[data-quick-view-stav]');\n  var stavProduct = null;\n  var stavArticleNo = '';\n\n  // Wird bei jedem \u00D6ffnen von Seite 2 und beim Absenden frisch gelesen:\n  // Farbe und Gr\u00F6\u00DFe k\u00F6nnen sich ge\u00E4ndert haben, seit das Modal aufging.\n  var stavCtrl = (stavModal && window.GoesslReserve)\n    ? window.GoesslReserve.attach(stavModal, function() {\n        return {\n          title: stavProduct ? stavProduct.title : '',\n          articleNo: stavArticleNo,\n          handle: stavProduct ? stavProduct.handle : '',\n          color: state.color || '',\n          size: state.size || '',\n          variantId: state.variant ? String(state.variant.id) : '',\n          available: state.variant ? state.variant.available !== false : undefined,\n        };\n      })\n    : null;\n\n  function closeStav() {\n    // a11y #902: only an open modal has anything to hand back - close() calls this on every close, and the\n    // re-trap below pulled focus back into the closing quick view, out of the cart drawer an add had opened\n    if (!stavModal || !stavModal.classList.contains('is-open')) return;\n    stavModal.classList.remove('is-open');\n    stavModal.setAttribute('aria-hidden', 'true');\n    if (stavCtrl) stavCtrl.reset();\n    // r71: hand focus back to the drawer's trap\n    if (releaseStavTrap) { releaseStavTrap(); releaseStavTrap = null; }\n    var drawerEl = document.querySelector('[data-quick-view]');\n    if (drawerEl && window.Goessl && window.Goessl.trapFocus) releaseFocusTrap = window.Goessl.trapFocus(drawerEl);\n    // the quickview owns body scroll while it is open \u2014 do not unlock it here\n  }\n\n  var releaseStavTrap = null;\n  function openStav(variantId, product, articleNo, reservable) {\n    if (!stavModal || !stavCtrl) return;\n    stavProduct = product;\n    stavArticleNo = articleNo || '';\n    // r186 (#531): one modal for every quickviewed product - the Reservieren buttons\n    // follow THIS product's 30-day rule, carried by its card trigger.\n    stavModal.setAttribute('data-reservable', reservable ? 'true' : 'false');\n    stavCtrl.reset();\n    stavModal.classList.add('is-open');\n    stavModal.setAttribute('aria-hidden', 'false');\n    // r71: the stav modal is a SIBLING of the drawer, outside its focus trap \u2014\n    // re-trap into the modal while it is open so keyboard users can reach it.\n    if (releaseFocusTrap) { releaseFocusTrap(); releaseFocusTrap = null; }\n    if (window.Goessl && window.Goessl.trapFocus) releaseStavTrap = window.Goessl.trapFocus(stavModal);\n    if (!variantId) { stavCtrl.message(window.g26t('products.store_availability.choose_size_first', 'Bitte w\u00E4hlen Sie zuerst eine Gr\u00F6\u00DFe.')); return; }\n    // Frau Adler 06.10.2026: wie auf der PDP alle Gr\u00F6\u00DFen der gew\u00E4hlten Farbe, in der\n    // Reihenfolge der Gr\u00F6\u00DFen-Pillen; Laden und Zeichnen in store-reserve.js (load)\n    var sizeIndex = product._sizeIndex;\n    var sizes = (sizeIndex === -1 || !state.variant) ? null : window.GoesslReserve.colourSizes(\n      product.variants, state.variant.options, sizeIndex,\n      Array.from(body.querySelectorAll('.quick-view__size-grid .quick-view__size-btn')).map(function(b) {\n        return { value: b.dataset.value, label: b.textContent.trim() };\n      }));\n    stavCtrl.load(variantId, sizes);\n  }\n  if (stavModal) {\n    stavModal.querySelectorAll('[data-qv-stav-close]').forEach(function(x) {\n      x.addEventListener('click', closeStav);\n    });\n    document.addEventListener('keydown', function(e) {\n      if (e.key === 'Escape' && stavModal.classList.contains('is-open')) {\n        e.stopPropagation();   // the quickview must not close underneath it\n        closeStav();\n      }\n    }, true);\n  }\n\n  // SJ 22.10.2026: without a size the price of the colour's sizes - those that can be bought, else all of them: one\n  // price or the range; a was-price only when every one has one, the lowest (the product page's rule,\n  // main-product.liquid so_* / product-form.js colourPrice)\n  function colourPrice(product) {\n    var fi = product._farbeIndex;\n    var all = (product.variants || []).filter(function(v) { return fi === -1 || !state.color || v.options[fi] === state.color; });\n    var pool = all.filter(function(v) { return v.available; });\n    if (!pool.length) pool = all;\n    if (!pool.length) return null;\n    var prices = pool.map(function(v) { return v.price; });\n    var compare = pool.every(function(v) { return v.compare_at_price > v.price; })\n      ? Math.min.apply(null, pool.map(function(v) { return v.compare_at_price; })) : 0;\n    return { min: Math.min.apply(null, prices), max: Math.max.apply(null, prices), compare: compare };\n  }\n\n  function updatePrice(container, product, variant) {\n    while (container.firstChild) container.removeChild(container.firstChild);\n    var cp = variant ? null : colourPrice(product);\n    if (cp && cp.max > cp.min) {\n      container.appendChild(el('span', 'quick-view__price-regular', { text: formatMoney(cp.min) + '\\u00a0\\u2013\\u00a0' + formatMoney(cp.max) }));\n      return;\n    }\n    var price = variant ? variant.price : (cp ? cp.min : product.price);\n    var compare = variant ? variant.compare_at_price : (cp ? cp.compare : product.compare_at_price);\n\n    if (compare && compare > price) {\n      container.appendChild(el('span', 'quick-view__price-compare', { text: formatMoney(compare) }));\n      container.appendChild(el('span', 'quick-view__price-sale', { text: formatMoney(price) }));\n    } else {\n      container.appendChild(el('span', 'quick-view__price-regular', { text: formatMoney(price) }));\n    }\n  }\n\n  // \u2500\u2500 Actions \u2500\u2500\n\n  // The button without a size (SJ 22.10.2026): the stock line says why, the first size that can be bought gets the\n  // focus - the product page's askForSize\n  function askForSize() {\n    var stockEl = body.querySelector('.quick-view__stock');\n    if (stockEl) {\n      stockEl.textContent = window.g26tText('products.store_availability.choose_size_first', 'Bitte w\u00E4hlen Sie zuerst eine Gr\u00F6\u00DFe.');\n      stockEl.className = 'quick-view__stock quick-view__stock--alert';\n    }\n    var grid = body.querySelector('.quick-view__size-grid');\n    if (!grid) return;\n    var pills = Array.from(grid.querySelectorAll('.quick-view__size-btn'));\n    var first = pills.find(function(b) { return !b.classList.contains('quick-view__size-btn--unavailable'); }) || pills[0];\n    if (first) first.focus({ preventScroll: true });\n    if (grid.scrollIntoView) grid.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n  }\n\n  function onAction(product, opts) {\n    if (product._sizeIndex !== -1 && !state.size) { askForSize(); return; }\n    if (!state.variant) return;\n\n    if (opts.context === 'configurator' && opts.onSelect) {\n      opts.onSelect(product, state.variant);\n      close();\n      return;\n    }\n\n    // r83 (review F2): feedback belongs on the CART button \u2014 in configurator\n    // context the first .quick-view__add-btn is the outfit button.\n    var addBtn = body.querySelector('.quick-view__add-btn[data-action=\"cart\"]');\n    if (addBtn) { addBtn.disabled = true; addBtn.textContent = window.g26tText('products.quick_view.adding', 'Wird hinzugef\u00FCgt\\u2026'); }\n\n    // Hidden line-item property carrying the Intex article number (admin-only).\n    // Sourced from the `Artikelnr:<value>` tag (the public products.json doesn't\n    // expose metafields, so fn39 mirrors article_no into a tag for JS access).\n    var lineProps = {};\n    try {\n      var tags = (product && product.tags) || [];\n      for (var t = 0; t < tags.length; t++) {\n        if (typeof tags[t] === 'string' && tags[t].indexOf('Artikelnr:') === 0) {\n          var v = tags[t].slice(10).trim();\n          if (v) lineProps['_Artikel-Nr'] = v;\n          break;\n        }\n      }\n    } catch (e) { /* ignore */ }\n    var lineItem = { id: state.variant.id, quantity: 1 };\n    if (Object.keys(lineProps).length) lineItem.properties = lineProps;\n    var qvPlanId = preorderPlanId(product, state.variant);\n    if (qvPlanId) lineItem.selling_plan = qvPlanId;\n\n    fetch(window.g26url('cart/add.js'), {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ items: [lineItem] })\n    })\n    .then(function(r) {\n      // r71: a 422 (sold out between render and click) still parses as JSON \u2014\n      // without this guard the drawer said \u201EHinzugef\u00FCgt\" for a failed add.\n      return r.json().then(function(data) {\n        if (r.ok && !data.status) return data;\n        throw new Error(data.description || data.message || 'Cart error');\n      });\n    })\n    .then(function() {\n      // r188: never more pieces without the plan than the size has in stock (assets/preorder-cart.js)\n      return product._preorder && product._preorder.plan && window.g26preorder.capCart ? window.g26preorder.capCart() : null;\n    })\n    .then(function() {\n      if (addBtn) addBtn.textContent = window.g26tText('products.quick_view.added', 'Hinzugef\u00FCgt');\n      document.dispatchEvent(new CustomEvent('cart:refresh'));\n      // the quick view closes underneath - the cart drawer hands focus back to the card's trigger (a11y #902)\n      document.dispatchEvent(new CustomEvent('cart:open', { detail: { opener: lastTrigger } }));\n      // a11y #902: the header count and the cart live region follow the add, as after a PDP add\n      var G = window.Goessl;\n      if (G && G.fetchCart && G.updateCartCount) G.fetchCart().then(function(cart) { if (cart) G.updateCartCount(cart.item_count); });\n      setTimeout(close, 600);\n    })\n    .catch(function() {\n      if (addBtn) { addBtn.disabled = false; addBtn.textContent = window.g26tText('products.quick_view.add_error', 'Fehler \\u2014 erneut versuchen'); }\n    });\n  }\n\n  // \u2500\u2500 Trigger buttons on product cards \u2500\u2500\n\n  document.addEventListener('click', function(e) {\n    var trigger = e.target.closest('[data-quick-view-trigger]');\n    if (!trigger) return;\n    e.preventDefault();\n    e.stopPropagation();\n    var handle = trigger.dataset.quickViewTrigger;\n    if (!handle) return;\n\n    // Detect active color swatch on the product card\n    var card = trigger.closest('.goessl-product-card');\n    // article_no is a metafield, so it is absent from /products/{handle}.js \u2014\n    // the card carries it on the trigger for the back-in-stock payload.\n    // r186: same for first_online - the card says whether Reservieren is open.\n    var opts = { trigger: trigger, articleNo: trigger.dataset.articleNo || '', reservable: trigger.dataset.reservable === 'true', aiMedia: trigger.dataset.aiMedia || '', colourCode: trigger.dataset.colourCode || '' };\n    if (card) {\n      var activeSwatch = card.querySelector('.goessl-product-card__swatch.active');\n      if (activeSwatch) {\n        // The colour comes from data-value, which is the option value itself and stays\n        // stable in every language. The aria-label parse below is only a fallback for\n        // cached markup that predates that attribute - it matches German copy and would\n        // silently open the quick view on the wrong colour on a translated storefront.\n        var label = activeSwatch.getAttribute('aria-label') || '';\n        var colorMatch = activeSwatch.getAttribute('data-value') || label.replace(/^Farbe:\\s*/, '');\n        if (colorMatch) opts.color = colorMatch;\n      }\n    }\n    // If the card lives inside the outfit configurator browser, switch to\n    // configurator context \u2014 primary CTA becomes \"Zum Outfit hinzuf\u00FCgen\"\n    // and a secondary \"In den Warenkorb\" is added.\n    var inConfigurator = !!(card && card.closest('[data-outfit-browser]'));\n    if (inConfigurator && window.Goessl && window.Goessl.configurator && window.Goessl.configurator.selectProduct) {\n      opts.context = 'configurator';\n      opts.onSelect = function(product, variant) {\n        window.Goessl.configurator.selectProduct(product, variant);\n      };\n    }\n    open(handle, opts);\n  });\n\n  // Close on background scroll (item 3) - but not on the scroll that is still running when the quick view opens:\n  // Enter on a card that Tab has just scrolled into view (the theme scrolls smoothly) opened the quick view while the\n  // page still moved, and that move closed it again. At open the page first settles: its scroll position unchanged\n  // for 10 animation frames (~150 ms), at most 60 frames (~1 s). That position is the baseline, and only a move of\n  // more than 40 px away from it closes the quick view (a11y #902). Counted in frames, not ms: a smooth scroll moves\n  // once per frame, so a busy or throttled tab that draws no frames cannot look settled while it still moves.\n  var scrollCloseTimer;\n  var scrollBaseline = null;\n  var settleRun = 0;\n  function settleScroll() {\n    var run = ++settleRun, lastY = window.scrollY, still = 0, frames = 0;\n    scrollBaseline = null;\n    (function tick() {\n      if (run !== settleRun || !isOpen) return;\n      var y = window.scrollY;\n      still = y === lastY ? still + 1 : 0;\n      lastY = y;\n      if (still >= 10 || ++frames >= 60) { scrollBaseline = y; return; }\n      requestAnimationFrame(tick);\n    })();\n  }\n  window.addEventListener('scroll', function() {\n    if (!isOpen || scrollBaseline === null || Math.abs(window.scrollY - scrollBaseline) <= 40) return;\n    clearTimeout(scrollCloseTimer);\n    scrollCloseTimer = setTimeout(close, 50);\n  }, { passive: true });\n\n  // \u2500\u2500 Public API \u2500\u2500\n\n  window.Goessl = window.Goessl || {};\n  window.Goessl.quickView = { open: open, close: close };\n\n})();\n"],
  "mappings": "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",
  "names": ["open"]
}
