{
  "version": 3,
  "sources": ["/cdn/shop/t/51/assets/custom.js?fx=20260816-004"],
  "sourcesContent": ["/**\n * FerryXpress \u2013 custom UX enhancements\n * Laadt na theme.js (defer). Geen conflicten met Shopify/theme logica.\n */\n(function () {\n  'use strict';\n\n  // \u2500\u2500\u2500 1. DESKTOP ACCOUNT LABEL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // Het Warehouse-thema toont op desktop een los tekstlabel boven de link\n  // \"Konto\". Maak ook het label zelf klikbaar, zodat klikken op\n  // \"Einloggen / Registrieren\" niet alleen tekst selecteert.\n  var accountTitle = document.querySelector('.header__action-item--account .header__action-item-title');\n  if (accountTitle) {\n    accountTitle.setAttribute('role', 'link');\n    accountTitle.setAttribute('tabindex', '0');\n    accountTitle.setAttribute('aria-label', 'Einloggen / Registrieren');\n    accountTitle.style.cursor = 'pointer';\n    var openAccount = function () {\n      window.location.assign('/account/login');\n    };\n    accountTitle.addEventListener('click', openAccount);\n    accountTitle.addEventListener('keydown', function (event) {\n      if (event.key === 'Enter' || event.key === ' ') {\n        event.preventDefault();\n        openAccount();\n      }\n    });\n  }\n\n  // The base theme hides the mobile navigation below 600px. Keep the\n  // existing hamburger button visible on phones without changing its\n  // click handler or the menu markup.\n  var mobileMenuStyle = document.createElement('style');\n  mobileMenuStyle.id = 'fx-mobile-menu-style';\n  mobileMenuStyle.textContent = '@media (max-width: 600px) { .header__mobile-nav { display: inline-block !important; flex: 0 0 auto; margin-right: 12px !important; } }';\n  (document.head || document.documentElement).appendChild(mobileMenuStyle);\n\n  function restoreMobileMenuVisibility() {\n    var mobileNav = document.querySelector('.header__mobile-nav');\n    if (!mobileNav) return;\n    if (window.matchMedia && window.matchMedia('(max-width: 749px)').matches) {\n      mobileNav.style.setProperty('display', 'inline-block', 'important');\n      mobileNav.style.setProperty('flex', '0 0 auto');\n      mobileNav.style.setProperty('margin-right', '12px', 'important');\n    } else {\n      mobileNav.style.removeProperty('display');\n      mobileNav.style.removeProperty('flex');\n      mobileNav.style.removeProperty('margin-right');\n    }\n  }\n  restoreMobileMenuVisibility();\n  window.addEventListener('resize', restoreMobileMenuVisibility, { passive: true });\n\n  // \u2500\u2500\u2500 2. SLIDESHOW ACCESSIBILITY \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // The Warehouse carousel adds aria-hidden to inactive slides. A slide can\n  // itself be an <a>, so keep inactive slides out of the keyboard tree too.\n  function syncSlideshowAccessibility() {\n    document.querySelectorAll('.slideshow__slide').forEach(function (slide) {\n      var isHidden = slide.getAttribute('aria-hidden') === 'true';\n      if (isHidden) {\n        slide.setAttribute('inert', '');\n        slide.setAttribute('tabindex', '-1');\n      } else {\n        slide.removeAttribute('inert');\n        slide.removeAttribute('tabindex');\n      }\n    });\n  }\n\n  syncSlideshowAccessibility();\n  if ('MutationObserver' in window) {\n    var slideshowObserver = new MutationObserver(syncSlideshowAccessibility);\n    document.querySelectorAll('.slideshow__slide').forEach(function (slide) {\n      slideshowObserver.observe(slide, { attributes: true, attributeFilter: ['aria-hidden', 'class'] });\n    });\n  }\n\n  // \u2500\u2500\u2500 3. BACK-TO-TOP BUTTON \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  var btt = document.createElement('button');\n  btt.id = 'fx-btt';\n  btt.setAttribute('aria-label', 'Nach oben');\n  btt.innerHTML = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><path d=\"M12 19V5M5 12l7-7 7 7\"/></svg>';\n  document.body.appendChild(btt);\n\n  window.addEventListener('scroll', function () {\n    btt.classList.toggle('fx-btt--visible', window.scrollY > 400);\n  }, { passive: true });\n  btt.addEventListener('click', function () {\n    window.scrollTo({ top: 0, behavior: 'smooth' });\n  });\n\n  // \u2500\u2500\u2500 4. COLLECTION PRODUCTS: ALWAYS VISIBLE AFTER PAGINATION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // Initialize the collection scope before its first visibility pass.\n  if (document.body.dataset.pageType === 'collection' || document.querySelector('.collection__products-count')) {\n    document.body.classList.add('fx-collection-page');\n  }\n\n  function showCollectionCards() {\n    document.querySelectorAll(\n      '.fx-collection-page .product-item, .fx-collection-page .collection__product-list > li, .fx-collection-page .grid__item'\n    ).forEach(function (el) {\n      el.classList.remove('fx-card--pending');\n      el.classList.add('fx-card--visible');\n    });\n  }\n\n  function refreshCollectionProducts() {\n    showCollectionCards();\n    var loader = window.lazySizes && window.lazySizes.loader;\n    if (!loader || typeof loader.unveil !== 'function') return;\n    var viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n    document.querySelectorAll(\n      '.fx-collection-page .collection__dynamic-part .product-item__primary-image.lazyload'\n    ).forEach(function (image, index) {\n      var rect = image.getBoundingClientRect();\n      // Start the first row while the theme smoothly scrolls back to the grid.\n      if (index < 4 || (rect.bottom > 0 && rect.top < viewportHeight)) {\n        loader.unveil(image);\n      }\n    });\n  }\n  showCollectionCards();\n  document.addEventListener('theme:loading:end', refreshCollectionProducts);\n  document.addEventListener('collection:reloaded', refreshCollectionProducts);\n  document.addEventListener('ajaxComplete', refreshCollectionProducts);\n\n  // \u2500\u2500\u2500 5. FILTER LABEL VERTALINGEN (Engels \u2192 Duits) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  var tagVertalingen = {\n    'lcd': 'LCD', 'oled': 'OLED', 'amoled': 'AMOLED',\n    'loud speaker': 'Lautsprecher', 'loudspeaker': 'Lautsprecher',\n    'earpiece': 'H\u00F6rmuschel', 'earphone': 'H\u00F6rmuschel',\n    'charging port': 'Ladebuchse', 'charging connector': 'Ladebuchse',\n    'battery': 'Akku', 'back cover': 'Backcover', 'backcover': 'Backcover',\n    'back glass': 'R\u00FCckglas', 'front glass': 'Frontglas',\n    'camera lens': 'Kameraobjektiv', 'camera': 'Kamera',\n    'frame': 'Rahmen', 'housing': 'Geh\u00E4use', 'chassis': 'Chassis',\n    'flex cable': 'Flexkabel', 'flex': 'Flexkabel',\n    'sim tray': 'SIM-Halter', 'sim card tray': 'SIM-Halter',\n    'volume button': 'Lautst\u00E4rketaste', 'power button': 'Ein/Aus-Taste',\n    'home button': 'Home-Taste', 'home button flex': 'Home-Taste Flex',\n    'vibration motor': 'Vibrationsmotor', 'vibrator': 'Vibrationsmotor',\n    'proximity sensor': 'N\u00E4herungssensor', 'ambient sensor': 'Lichtsensor',\n    'screen protector': 'Schutzglas', 'tempered glass': 'Panzerglas',\n    'case': 'H\u00FClle', 'cover': 'H\u00FClle', 'silicone case': 'Silikonh\u00FClle',\n    'cable': 'Kabel', 'charger': 'Ladeger\u00E4t', 'adapter': 'Adapter',\n    'on/off flex': 'Ein/Aus Flex', 'volume flex': 'Lautst\u00E4rke Flex',\n    'digitizer': 'Touchscreen', 'touch screen': 'Touchscreen',\n    'motherboard': 'Hauptplatine', 'logic board': 'Hauptplatine',\n    'antenna': 'Antenne', 'wifi': 'WLAN', 'bluetooth': 'Bluetooth',\n    'speaker': 'Lautsprecher', 'microphone': 'Mikrofon',\n    'dock connector': 'Dock-Anschluss', 'headphone jack': 'Kopfh\u00F6rerbuchse',\n    'power flex': 'Power Flex', 'charging flex': 'Lade-Flex',\n    's series': 'S-Serie', 'a series': 'A-Serie', 'm series': 'M-Serie',\n    'n series': 'N-Serie', 'z series': 'Z-Serie',\n    'note series': 'Note-Serie', 'tab series': 'Tab-Serie',\n  };\n\n  function translateFilterLabels() {\n    document.querySelectorAll('.collection__filter-checkbox label, .collection__active-filter-item').forEach(function (el) {\n      var txt = el.textContent.trim().toLowerCase();\n      if (tagVertalingen[txt]) {\n        el.textContent = tagVertalingen[txt];\n      }\n    });\n  }\n  translateFilterLabels();\n\n  // Re-translate after filter panel opens\n  document.addEventListener('click', function (e) {\n    var btn = e.target.closest('[data-action=\"toggle-collapsible\"]');\n    if (btn) setTimeout(translateFilterLabels, 50);\n  });\n\n  // \u2500\u2500\u2500 6. FILTER PILL ICONS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  var pillIcons = {\n    'Produkttyp': '<svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><rect x=\"2\" y=\"2\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"9\" y=\"2\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"2\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"9\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\"/></svg>',\n    'Preis':      '<svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><circle cx=\"8\" cy=\"8\" r=\"6\"/><path d=\"M8 5v1.5M8 9.5V11M6.5 7.5C6.5 6.7 7.2 6.5 8 6.5s1.5.5 1.5 1-.5 1-1.5 1-1.5.5-1.5 1S7 11 8 11\"/></svg>',\n    'Verf\u00FCgbarkeit': '<svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M3 8l3 3 7-7\"/></svg>',\n    'Marke':      '<svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M8 2l1.5 3.5L13 6l-2.5 2.5.6 3.5L8 10.5 4.9 12l.6-3.5L3 6l3.5-.5z\"/></svg>',\n    'Weitere Filter': '<svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M2 4h12M4 8h8M6 12h4\"/></svg>',\n  };\n\n  function addPillIcons() {\n    document.querySelectorAll('.collection__filter-group-name').forEach(function (btn) {\n      if (btn.querySelector('.fx-pill-icon')) return;\n      var label = btn.textContent.trim().replace(/\\s*[\\u25bc\\u2193\u25BC\u2193]+\\s*/g, '').trim();\n      var svgStr = null;\n      for (var key in pillIcons) {\n        if (label.toLowerCase().indexOf(key.toLowerCase()) === 0) {\n          svgStr = pillIcons[key]; break;\n        }\n      }\n      if (svgStr) {\n        var span = document.createElement('span');\n        span.className = 'fx-pill-icon';\n        span.innerHTML = svgStr;\n        btn.prepend(span);\n      }\n    });\n  }\n  // Filterpillen blijven bewust tekstueel en rustig; geen extra icoontjes.\n  document.querySelectorAll('.fx-pill-icon').forEach(function (icon) {\n    icon.remove();\n  });\n\n  // \u2500\u2500\u2500 7. SMOOTH SIDEBAR SCROLL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  document.querySelectorAll('.collection__filter-link').forEach(function (link) {\n    link.addEventListener('click', function () {\n      window.scrollTo({ top: 0, behavior: 'smooth' });\n    });\n  });\n\n  // \u2500\u2500\u2500 8. IMAGE ZOOM \u2192 puur CSS (:hover in customized-styles.css) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // Geen JS nodig \u2013 CSS .product-item:hover img { transform: scale(1.06) }\n\n})();\n"],
  "mappings": "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",
  "names": []
}
