"use strict";

/*
 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/
(function () {
  // webpackBootstrap
  /******/
  var __webpack_modules__ = {
    /***/"./node_modules/animejs/lib/anime.es.js": (
    /*!**********************************************!*\
      !*** ./node_modules/animejs/lib/anime.es.js ***!
      \**********************************************/
    /***/
    function node_modulesAnimejsLibAnimeEsJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/*\n * anime.js v3.2.2\n * (c) 2023 Julian Garnier\n * Released under the MIT license\n * animejs.com\n */\n\n// Defaults\n\nvar defaultInstanceSettings = {\n  update: null,\n  begin: null,\n  loopBegin: null,\n  changeBegin: null,\n  change: null,\n  changeComplete: null,\n  loopComplete: null,\n  complete: null,\n  loop: 1,\n  direction: 'normal',\n  autoplay: true,\n  timelineOffset: 0\n};\n\nvar defaultTweenSettings = {\n  duration: 1000,\n  delay: 0,\n  endDelay: 0,\n  easing: 'easeOutElastic(1, .5)',\n  round: 0\n};\n\nvar validTransforms = ['translateX', 'translateY', 'translateZ', 'rotate', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'perspective', 'matrix', 'matrix3d'];\n\n// Caching\n\nvar cache = {\n  CSS: {},\n  springs: {}\n};\n\n// Utils\n\nfunction minMax(val, min, max) {\n  return Math.min(Math.max(val, min), max);\n}\n\nfunction stringContains(str, text) {\n  return str.indexOf(text) > -1;\n}\n\nfunction applyArguments(func, args) {\n  return func.apply(null, args);\n}\n\nvar is = {\n  arr: function (a) { return Array.isArray(a); },\n  obj: function (a) { return stringContains(Object.prototype.toString.call(a), 'Object'); },\n  pth: function (a) { return is.obj(a) && a.hasOwnProperty('totalLength'); },\n  svg: function (a) { return a instanceof SVGElement; },\n  inp: function (a) { return a instanceof HTMLInputElement; },\n  dom: function (a) { return a.nodeType || is.svg(a); },\n  str: function (a) { return typeof a === 'string'; },\n  fnc: function (a) { return typeof a === 'function'; },\n  und: function (a) { return typeof a === 'undefined'; },\n  nil: function (a) { return is.und(a) || a === null; },\n  hex: function (a) { return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a); },\n  rgb: function (a) { return /^rgb/.test(a); },\n  hsl: function (a) { return /^hsl/.test(a); },\n  col: function (a) { return (is.hex(a) || is.rgb(a) || is.hsl(a)); },\n  key: function (a) { return !defaultInstanceSettings.hasOwnProperty(a) && !defaultTweenSettings.hasOwnProperty(a) && a !== 'targets' && a !== 'keyframes'; },\n};\n\n// Easings\n\nfunction parseEasingParameters(string) {\n  var match = /\\(([^)]+)\\)/.exec(string);\n  return match ? match[1].split(',').map(function (p) { return parseFloat(p); }) : [];\n}\n\n// Spring solver inspired by Webkit Copyright © 2016 Apple Inc. All rights reserved. https://webkit.org/demos/spring/spring.js\n\nfunction spring(string, duration) {\n\n  var params = parseEasingParameters(string);\n  var mass = minMax(is.und(params[0]) ? 1 : params[0], .1, 100);\n  var stiffness = minMax(is.und(params[1]) ? 100 : params[1], .1, 100);\n  var damping = minMax(is.und(params[2]) ? 10 : params[2], .1, 100);\n  var velocity =  minMax(is.und(params[3]) ? 0 : params[3], .1, 100);\n  var w0 = Math.sqrt(stiffness / mass);\n  var zeta = damping / (2 * Math.sqrt(stiffness * mass));\n  var wd = zeta < 1 ? w0 * Math.sqrt(1 - zeta * zeta) : 0;\n  var a = 1;\n  var b = zeta < 1 ? (zeta * w0 + -velocity) / wd : -velocity + w0;\n\n  function solver(t) {\n    var progress = duration ? (duration * t) / 1000 : t;\n    if (zeta < 1) {\n      progress = Math.exp(-progress * zeta * w0) * (a * Math.cos(wd * progress) + b * Math.sin(wd * progress));\n    } else {\n      progress = (a + b * progress) * Math.exp(-progress * w0);\n    }\n    if (t === 0 || t === 1) { return t; }\n    return 1 - progress;\n  }\n\n  function getDuration() {\n    var cached = cache.springs[string];\n    if (cached) { return cached; }\n    var frame = 1/6;\n    var elapsed = 0;\n    var rest = 0;\n    while(true) {\n      elapsed += frame;\n      if (solver(elapsed) === 1) {\n        rest++;\n        if (rest >= 16) { break; }\n      } else {\n        rest = 0;\n      }\n    }\n    var duration = elapsed * frame * 1000;\n    cache.springs[string] = duration;\n    return duration;\n  }\n\n  return duration ? solver : getDuration;\n\n}\n\n// Basic steps easing implementation https://developer.mozilla.org/fr/docs/Web/CSS/transition-timing-function\n\nfunction steps(steps) {\n  if ( steps === void 0 ) steps = 10;\n\n  return function (t) { return Math.ceil((minMax(t, 0.000001, 1)) * steps) * (1 / steps); };\n}\n\n// BezierEasing https://github.com/gre/bezier-easing\n\nvar bezier = (function () {\n\n  var kSplineTableSize = 11;\n  var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n  function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1 }\n  function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1 }\n  function C(aA1)      { return 3.0 * aA1 }\n\n  function calcBezier(aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT }\n  function getSlope(aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1) }\n\n  function binarySubdivide(aX, aA, aB, mX1, mX2) {\n    var currentX, currentT, i = 0;\n    do {\n      currentT = aA + (aB - aA) / 2.0;\n      currentX = calcBezier(currentT, mX1, mX2) - aX;\n      if (currentX > 0.0) { aB = currentT; } else { aA = currentT; }\n    } while (Math.abs(currentX) > 0.0000001 && ++i < 10);\n    return currentT;\n  }\n\n  function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n    for (var i = 0; i < 4; ++i) {\n      var currentSlope = getSlope(aGuessT, mX1, mX2);\n      if (currentSlope === 0.0) { return aGuessT; }\n      var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n      aGuessT -= currentX / currentSlope;\n    }\n    return aGuessT;\n  }\n\n  function bezier(mX1, mY1, mX2, mY2) {\n\n    if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { return; }\n    var sampleValues = new Float32Array(kSplineTableSize);\n\n    if (mX1 !== mY1 || mX2 !== mY2) {\n      for (var i = 0; i < kSplineTableSize; ++i) {\n        sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n      }\n    }\n\n    function getTForX(aX) {\n\n      var intervalStart = 0;\n      var currentSample = 1;\n      var lastSample = kSplineTableSize - 1;\n\n      for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n        intervalStart += kSampleStepSize;\n      }\n\n      --currentSample;\n\n      var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n      var guessForT = intervalStart + dist * kSampleStepSize;\n      var initialSlope = getSlope(guessForT, mX1, mX2);\n\n      if (initialSlope >= 0.001) {\n        return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n      } else if (initialSlope === 0.0) {\n        return guessForT;\n      } else {\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n      }\n\n    }\n\n    return function (x) {\n      if (mX1 === mY1 && mX2 === mY2) { return x; }\n      if (x === 0 || x === 1) { return x; }\n      return calcBezier(getTForX(x), mY1, mY2);\n    }\n\n  }\n\n  return bezier;\n\n})();\n\nvar penner = (function () {\n\n  // Based on jQuery UI's implemenation of easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\n  var eases = { linear: function () { return function (t) { return t; }; } };\n\n  var functionEasings = {\n    Sine: function () { return function (t) { return 1 - Math.cos(t * Math.PI / 2); }; },\n    Expo: function () { return function (t) { return t ? Math.pow(2, 10 * t - 10) : 0; }; },\n    Circ: function () { return function (t) { return 1 - Math.sqrt(1 - t * t); }; },\n    Back: function () { return function (t) { return t * t * (3 * t - 2); }; },\n    Bounce: function () { return function (t) {\n      var pow2, b = 4;\n      while (t < (( pow2 = Math.pow(2, --b)) - 1) / 11) {}\n      return 1 / Math.pow(4, 3 - b) - 7.5625 * Math.pow(( pow2 * 3 - 2 ) / 22 - t, 2)\n    }; },\n    Elastic: function (amplitude, period) {\n      if ( amplitude === void 0 ) amplitude = 1;\n      if ( period === void 0 ) period = .5;\n\n      var a = minMax(amplitude, 1, 10);\n      var p = minMax(period, .1, 2);\n      return function (t) {\n        return (t === 0 || t === 1) ? t : \n          -a * Math.pow(2, 10 * (t - 1)) * Math.sin((((t - 1) - (p / (Math.PI * 2) * Math.asin(1 / a))) * (Math.PI * 2)) / p);\n      }\n    }\n  };\n\n  var baseEasings = ['Quad', 'Cubic', 'Quart', 'Quint'];\n\n  baseEasings.forEach(function (name, i) {\n    functionEasings[name] = function () { return function (t) { return Math.pow(t, i + 2); }; };\n  });\n\n  Object.keys(functionEasings).forEach(function (name) {\n    var easeIn = functionEasings[name];\n    eases['easeIn' + name] = easeIn;\n    eases['easeOut' + name] = function (a, b) { return function (t) { return 1 - easeIn(a, b)(1 - t); }; };\n    eases['easeInOut' + name] = function (a, b) { return function (t) { return t < 0.5 ? easeIn(a, b)(t * 2) / 2 : \n      1 - easeIn(a, b)(t * -2 + 2) / 2; }; };\n    eases['easeOutIn' + name] = function (a, b) { return function (t) { return t < 0.5 ? (1 - easeIn(a, b)(1 - t * 2)) / 2 : \n      (easeIn(a, b)(t * 2 - 1) + 1) / 2; }; };\n  });\n\n  return eases;\n\n})();\n\nfunction parseEasings(easing, duration) {\n  if (is.fnc(easing)) { return easing; }\n  var name = easing.split('(')[0];\n  var ease = penner[name];\n  var args = parseEasingParameters(easing);\n  switch (name) {\n    case 'spring' : return spring(easing, duration);\n    case 'cubicBezier' : return applyArguments(bezier, args);\n    case 'steps' : return applyArguments(steps, args);\n    default : return applyArguments(ease, args);\n  }\n}\n\n// Strings\n\nfunction selectString(str) {\n  try {\n    var nodes = document.querySelectorAll(str);\n    return nodes;\n  } catch(e) {\n    return;\n  }\n}\n\n// Arrays\n\nfunction filterArray(arr, callback) {\n  var len = arr.length;\n  var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n  var result = [];\n  for (var i = 0; i < len; i++) {\n    if (i in arr) {\n      var val = arr[i];\n      if (callback.call(thisArg, val, i, arr)) {\n        result.push(val);\n      }\n    }\n  }\n  return result;\n}\n\nfunction flattenArray(arr) {\n  return arr.reduce(function (a, b) { return a.concat(is.arr(b) ? flattenArray(b) : b); }, []);\n}\n\nfunction toArray(o) {\n  if (is.arr(o)) { return o; }\n  if (is.str(o)) { o = selectString(o) || o; }\n  if (o instanceof NodeList || o instanceof HTMLCollection) { return [].slice.call(o); }\n  return [o];\n}\n\nfunction arrayContains(arr, val) {\n  return arr.some(function (a) { return a === val; });\n}\n\n// Objects\n\nfunction cloneObject(o) {\n  var clone = {};\n  for (var p in o) { clone[p] = o[p]; }\n  return clone;\n}\n\nfunction replaceObjectProps(o1, o2) {\n  var o = cloneObject(o1);\n  for (var p in o1) { o[p] = o2.hasOwnProperty(p) ? o2[p] : o1[p]; }\n  return o;\n}\n\nfunction mergeObjects(o1, o2) {\n  var o = cloneObject(o1);\n  for (var p in o2) { o[p] = is.und(o1[p]) ? o2[p] : o1[p]; }\n  return o;\n}\n\n// Colors\n\nfunction rgbToRgba(rgbValue) {\n  var rgb = /rgb\\((\\d+,\\s*[\\d]+,\\s*[\\d]+)\\)/g.exec(rgbValue);\n  return rgb ? (\"rgba(\" + (rgb[1]) + \",1)\") : rgbValue;\n}\n\nfunction hexToRgba(hexValue) {\n  var rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n  var hex = hexValue.replace(rgx, function (m, r, g, b) { return r + r + g + g + b + b; } );\n  var rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  var r = parseInt(rgb[1], 16);\n  var g = parseInt(rgb[2], 16);\n  var b = parseInt(rgb[3], 16);\n  return (\"rgba(\" + r + \",\" + g + \",\" + b + \",1)\");\n}\n\nfunction hslToRgba(hslValue) {\n  var hsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(hslValue) || /hsla\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*([\\d.]+)\\)/g.exec(hslValue);\n  var h = parseInt(hsl[1], 10) / 360;\n  var s = parseInt(hsl[2], 10) / 100;\n  var l = parseInt(hsl[3], 10) / 100;\n  var a = hsl[4] || 1;\n  function hue2rgb(p, q, t) {\n    if (t < 0) { t += 1; }\n    if (t > 1) { t -= 1; }\n    if (t < 1/6) { return p + (q - p) * 6 * t; }\n    if (t < 1/2) { return q; }\n    if (t < 2/3) { return p + (q - p) * (2/3 - t) * 6; }\n    return p;\n  }\n  var r, g, b;\n  if (s == 0) {\n    r = g = b = l;\n  } else {\n    var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n    var p = 2 * l - q;\n    r = hue2rgb(p, q, h + 1/3);\n    g = hue2rgb(p, q, h);\n    b = hue2rgb(p, q, h - 1/3);\n  }\n  return (\"rgba(\" + (r * 255) + \",\" + (g * 255) + \",\" + (b * 255) + \",\" + a + \")\");\n}\n\nfunction colorToRgb(val) {\n  if (is.rgb(val)) { return rgbToRgba(val); }\n  if (is.hex(val)) { return hexToRgba(val); }\n  if (is.hsl(val)) { return hslToRgba(val); }\n}\n\n// Units\n\nfunction getUnit(val) {\n  var split = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(val);\n  if (split) { return split[1]; }\n}\n\nfunction getTransformUnit(propName) {\n  if (stringContains(propName, 'translate') || propName === 'perspective') { return 'px'; }\n  if (stringContains(propName, 'rotate') || stringContains(propName, 'skew')) { return 'deg'; }\n}\n\n// Values\n\nfunction getFunctionValue(val, animatable) {\n  if (!is.fnc(val)) { return val; }\n  return val(animatable.target, animatable.id, animatable.total);\n}\n\nfunction getAttribute(el, prop) {\n  return el.getAttribute(prop);\n}\n\nfunction convertPxToUnit(el, value, unit) {\n  var valueUnit = getUnit(value);\n  if (arrayContains([unit, 'deg', 'rad', 'turn'], valueUnit)) { return value; }\n  var cached = cache.CSS[value + unit];\n  if (!is.und(cached)) { return cached; }\n  var baseline = 100;\n  var tempEl = document.createElement(el.tagName);\n  var parentEl = (el.parentNode && (el.parentNode !== document)) ? el.parentNode : document.body;\n  parentEl.appendChild(tempEl);\n  tempEl.style.position = 'absolute';\n  tempEl.style.width = baseline + unit;\n  var factor = baseline / tempEl.offsetWidth;\n  parentEl.removeChild(tempEl);\n  var convertedUnit = factor * parseFloat(value);\n  cache.CSS[value + unit] = convertedUnit;\n  return convertedUnit;\n}\n\nfunction getCSSValue(el, prop, unit) {\n  if (prop in el.style) {\n    var uppercasePropName = prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n    var value = el.style[prop] || getComputedStyle(el).getPropertyValue(uppercasePropName) || '0';\n    return unit ? convertPxToUnit(el, value, unit) : value;\n  }\n}\n\nfunction getAnimationType(el, prop) {\n  if (is.dom(el) && !is.inp(el) && (!is.nil(getAttribute(el, prop)) || (is.svg(el) && el[prop]))) { return 'attribute'; }\n  if (is.dom(el) && arrayContains(validTransforms, prop)) { return 'transform'; }\n  if (is.dom(el) && (prop !== 'transform' && getCSSValue(el, prop))) { return 'css'; }\n  if (el[prop] != null) { return 'object'; }\n}\n\nfunction getElementTransforms(el) {\n  if (!is.dom(el)) { return; }\n  var str = el.style.transform || '';\n  var reg  = /(\\w+)\\(([^)]*)\\)/g;\n  var transforms = new Map();\n  var m; while (m = reg.exec(str)) { transforms.set(m[1], m[2]); }\n  return transforms;\n}\n\nfunction getTransformValue(el, propName, animatable, unit) {\n  var defaultVal = stringContains(propName, 'scale') ? 1 : 0 + getTransformUnit(propName);\n  var value = getElementTransforms(el).get(propName) || defaultVal;\n  if (animatable) {\n    animatable.transforms.list.set(propName, value);\n    animatable.transforms['last'] = propName;\n  }\n  return unit ? convertPxToUnit(el, value, unit) : value;\n}\n\nfunction getOriginalTargetValue(target, propName, unit, animatable) {\n  switch (getAnimationType(target, propName)) {\n    case 'transform': return getTransformValue(target, propName, animatable, unit);\n    case 'css': return getCSSValue(target, propName, unit);\n    case 'attribute': return getAttribute(target, propName);\n    default: return target[propName] || 0;\n  }\n}\n\nfunction getRelativeValue(to, from) {\n  var operator = /^(\\*=|\\+=|-=)/.exec(to);\n  if (!operator) { return to; }\n  var u = getUnit(to) || 0;\n  var x = parseFloat(from);\n  var y = parseFloat(to.replace(operator[0], ''));\n  switch (operator[0][0]) {\n    case '+': return x + y + u;\n    case '-': return x - y + u;\n    case '*': return x * y + u;\n  }\n}\n\nfunction validateValue(val, unit) {\n  if (is.col(val)) { return colorToRgb(val); }\n  if (/\\s/g.test(val)) { return val; }\n  var originalUnit = getUnit(val);\n  var unitLess = originalUnit ? val.substr(0, val.length - originalUnit.length) : val;\n  if (unit) { return unitLess + unit; }\n  return unitLess;\n}\n\n// getTotalLength() equivalent for circle, rect, polyline, polygon and line shapes\n// adapted from https://gist.github.com/SebLambla/3e0550c496c236709744\n\nfunction getDistance(p1, p2) {\n  return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\n\nfunction getCircleLength(el) {\n  return Math.PI * 2 * getAttribute(el, 'r');\n}\n\nfunction getRectLength(el) {\n  return (getAttribute(el, 'width') * 2) + (getAttribute(el, 'height') * 2);\n}\n\nfunction getLineLength(el) {\n  return getDistance(\n    {x: getAttribute(el, 'x1'), y: getAttribute(el, 'y1')}, \n    {x: getAttribute(el, 'x2'), y: getAttribute(el, 'y2')}\n  );\n}\n\nfunction getPolylineLength(el) {\n  var points = el.points;\n  var totalLength = 0;\n  var previousPos;\n  for (var i = 0 ; i < points.numberOfItems; i++) {\n    var currentPos = points.getItem(i);\n    if (i > 0) { totalLength += getDistance(previousPos, currentPos); }\n    previousPos = currentPos;\n  }\n  return totalLength;\n}\n\nfunction getPolygonLength(el) {\n  var points = el.points;\n  return getPolylineLength(el) + getDistance(points.getItem(points.numberOfItems - 1), points.getItem(0));\n}\n\n// Path animation\n\nfunction getTotalLength(el) {\n  if (el.getTotalLength) { return el.getTotalLength(); }\n  switch(el.tagName.toLowerCase()) {\n    case 'circle': return getCircleLength(el);\n    case 'rect': return getRectLength(el);\n    case 'line': return getLineLength(el);\n    case 'polyline': return getPolylineLength(el);\n    case 'polygon': return getPolygonLength(el);\n  }\n}\n\nfunction setDashoffset(el) {\n  var pathLength = getTotalLength(el);\n  el.setAttribute('stroke-dasharray', pathLength);\n  return pathLength;\n}\n\n// Motion path\n\nfunction getParentSvgEl(el) {\n  var parentEl = el.parentNode;\n  while (is.svg(parentEl)) {\n    if (!is.svg(parentEl.parentNode)) { break; }\n    parentEl = parentEl.parentNode;\n  }\n  return parentEl;\n}\n\nfunction getParentSvg(pathEl, svgData) {\n  var svg = svgData || {};\n  var parentSvgEl = svg.el || getParentSvgEl(pathEl);\n  var rect = parentSvgEl.getBoundingClientRect();\n  var viewBoxAttr = getAttribute(parentSvgEl, 'viewBox');\n  var width = rect.width;\n  var height = rect.height;\n  var viewBox = svg.viewBox || (viewBoxAttr ? viewBoxAttr.split(' ') : [0, 0, width, height]);\n  return {\n    el: parentSvgEl,\n    viewBox: viewBox,\n    x: viewBox[0] / 1,\n    y: viewBox[1] / 1,\n    w: width,\n    h: height,\n    vW: viewBox[2],\n    vH: viewBox[3]\n  }\n}\n\nfunction getPath(path, percent) {\n  var pathEl = is.str(path) ? selectString(path)[0] : path;\n  var p = percent || 100;\n  return function(property) {\n    return {\n      property: property,\n      el: pathEl,\n      svg: getParentSvg(pathEl),\n      totalLength: getTotalLength(pathEl) * (p / 100)\n    }\n  }\n}\n\nfunction getPathProgress(path, progress, isPathTargetInsideSVG) {\n  function point(offset) {\n    if ( offset === void 0 ) offset = 0;\n\n    var l = progress + offset >= 1 ? progress + offset : 0;\n    return path.el.getPointAtLength(l);\n  }\n  var svg = getParentSvg(path.el, path.svg);\n  var p = point();\n  var p0 = point(-1);\n  var p1 = point(+1);\n  var scaleX = isPathTargetInsideSVG ? 1 : svg.w / svg.vW;\n  var scaleY = isPathTargetInsideSVG ? 1 : svg.h / svg.vH;\n  switch (path.property) {\n    case 'x': return (p.x - svg.x) * scaleX;\n    case 'y': return (p.y - svg.y) * scaleY;\n    case 'angle': return Math.atan2(p1.y - p0.y, p1.x - p0.x) * 180 / Math.PI;\n  }\n}\n\n// Decompose value\n\nfunction decomposeValue(val, unit) {\n  // const rgx = /-?\\d*\\.?\\d+/g; // handles basic numbers\n  // const rgx = /[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n  var rgx = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n  var value = validateValue((is.pth(val) ? val.totalLength : val), unit) + '';\n  return {\n    original: value,\n    numbers: value.match(rgx) ? value.match(rgx).map(Number) : [0],\n    strings: (is.str(val) || unit) ? value.split(rgx) : []\n  }\n}\n\n// Animatables\n\nfunction parseTargets(targets) {\n  var targetsArray = targets ? (flattenArray(is.arr(targets) ? targets.map(toArray) : toArray(targets))) : [];\n  return filterArray(targetsArray, function (item, pos, self) { return self.indexOf(item) === pos; });\n}\n\nfunction getAnimatables(targets) {\n  var parsed = parseTargets(targets);\n  return parsed.map(function (t, i) {\n    return {target: t, id: i, total: parsed.length, transforms: { list: getElementTransforms(t) } };\n  });\n}\n\n// Properties\n\nfunction normalizePropertyTweens(prop, tweenSettings) {\n  var settings = cloneObject(tweenSettings);\n  // Override duration if easing is a spring\n  if (/^spring/.test(settings.easing)) { settings.duration = spring(settings.easing); }\n  if (is.arr(prop)) {\n    var l = prop.length;\n    var isFromTo = (l === 2 && !is.obj(prop[0]));\n    if (!isFromTo) {\n      // Duration divided by the number of tweens\n      if (!is.fnc(tweenSettings.duration)) { settings.duration = tweenSettings.duration / l; }\n    } else {\n      // Transform [from, to] values shorthand to a valid tween value\n      prop = {value: prop};\n    }\n  }\n  var propArray = is.arr(prop) ? prop : [prop];\n  return propArray.map(function (v, i) {\n    var obj = (is.obj(v) && !is.pth(v)) ? v : {value: v};\n    // Default delay value should only be applied to the first tween\n    if (is.und(obj.delay)) { obj.delay = !i ? tweenSettings.delay : 0; }\n    // Default endDelay value should only be applied to the last tween\n    if (is.und(obj.endDelay)) { obj.endDelay = i === propArray.length - 1 ? tweenSettings.endDelay : 0; }\n    return obj;\n  }).map(function (k) { return mergeObjects(k, settings); });\n}\n\n\nfunction flattenKeyframes(keyframes) {\n  var propertyNames = filterArray(flattenArray(keyframes.map(function (key) { return Object.keys(key); })), function (p) { return is.key(p); })\n  .reduce(function (a,b) { if (a.indexOf(b) < 0) { a.push(b); } return a; }, []);\n  var properties = {};\n  var loop = function ( i ) {\n    var propName = propertyNames[i];\n    properties[propName] = keyframes.map(function (key) {\n      var newKey = {};\n      for (var p in key) {\n        if (is.key(p)) {\n          if (p == propName) { newKey.value = key[p]; }\n        } else {\n          newKey[p] = key[p];\n        }\n      }\n      return newKey;\n    });\n  };\n\n  for (var i = 0; i < propertyNames.length; i++) loop( i );\n  return properties;\n}\n\nfunction getProperties(tweenSettings, params) {\n  var properties = [];\n  var keyframes = params.keyframes;\n  if (keyframes) { params = mergeObjects(flattenKeyframes(keyframes), params); }\n  for (var p in params) {\n    if (is.key(p)) {\n      properties.push({\n        name: p,\n        tweens: normalizePropertyTweens(params[p], tweenSettings)\n      });\n    }\n  }\n  return properties;\n}\n\n// Tweens\n\nfunction normalizeTweenValues(tween, animatable) {\n  var t = {};\n  for (var p in tween) {\n    var value = getFunctionValue(tween[p], animatable);\n    if (is.arr(value)) {\n      value = value.map(function (v) { return getFunctionValue(v, animatable); });\n      if (value.length === 1) { value = value[0]; }\n    }\n    t[p] = value;\n  }\n  t.duration = parseFloat(t.duration);\n  t.delay = parseFloat(t.delay);\n  return t;\n}\n\nfunction normalizeTweens(prop, animatable) {\n  var previousTween;\n  return prop.tweens.map(function (t) {\n    var tween = normalizeTweenValues(t, animatable);\n    var tweenValue = tween.value;\n    var to = is.arr(tweenValue) ? tweenValue[1] : tweenValue;\n    var toUnit = getUnit(to);\n    var originalValue = getOriginalTargetValue(animatable.target, prop.name, toUnit, animatable);\n    var previousValue = previousTween ? previousTween.to.original : originalValue;\n    var from = is.arr(tweenValue) ? tweenValue[0] : previousValue;\n    var fromUnit = getUnit(from) || getUnit(originalValue);\n    var unit = toUnit || fromUnit;\n    if (is.und(to)) { to = previousValue; }\n    tween.from = decomposeValue(from, unit);\n    tween.to = decomposeValue(getRelativeValue(to, from), unit);\n    tween.start = previousTween ? previousTween.end : 0;\n    tween.end = tween.start + tween.delay + tween.duration + tween.endDelay;\n    tween.easing = parseEasings(tween.easing, tween.duration);\n    tween.isPath = is.pth(tweenValue);\n    tween.isPathTargetInsideSVG = tween.isPath && is.svg(animatable.target);\n    tween.isColor = is.col(tween.from.original);\n    if (tween.isColor) { tween.round = 1; }\n    previousTween = tween;\n    return tween;\n  });\n}\n\n// Tween progress\n\nvar setProgressValue = {\n  css: function (t, p, v) { return t.style[p] = v; },\n  attribute: function (t, p, v) { return t.setAttribute(p, v); },\n  object: function (t, p, v) { return t[p] = v; },\n  transform: function (t, p, v, transforms, manual) {\n    transforms.list.set(p, v);\n    if (p === transforms.last || manual) {\n      var str = '';\n      transforms.list.forEach(function (value, prop) { str += prop + \"(\" + value + \") \"; });\n      t.style.transform = str;\n    }\n  }\n};\n\n// Set Value helper\n\nfunction setTargetsValue(targets, properties) {\n  var animatables = getAnimatables(targets);\n  animatables.forEach(function (animatable) {\n    for (var property in properties) {\n      var value = getFunctionValue(properties[property], animatable);\n      var target = animatable.target;\n      var valueUnit = getUnit(value);\n      var originalValue = getOriginalTargetValue(target, property, valueUnit, animatable);\n      var unit = valueUnit || getUnit(originalValue);\n      var to = getRelativeValue(validateValue(value, unit), originalValue);\n      var animType = getAnimationType(target, property);\n      setProgressValue[animType](target, property, to, animatable.transforms, true);\n    }\n  });\n}\n\n// Animations\n\nfunction createAnimation(animatable, prop) {\n  var animType = getAnimationType(animatable.target, prop.name);\n  if (animType) {\n    var tweens = normalizeTweens(prop, animatable);\n    var lastTween = tweens[tweens.length - 1];\n    return {\n      type: animType,\n      property: prop.name,\n      animatable: animatable,\n      tweens: tweens,\n      duration: lastTween.end,\n      delay: tweens[0].delay,\n      endDelay: lastTween.endDelay\n    }\n  }\n}\n\nfunction getAnimations(animatables, properties) {\n  return filterArray(flattenArray(animatables.map(function (animatable) {\n    return properties.map(function (prop) {\n      return createAnimation(animatable, prop);\n    });\n  })), function (a) { return !is.und(a); });\n}\n\n// Create Instance\n\nfunction getInstanceTimings(animations, tweenSettings) {\n  var animLength = animations.length;\n  var getTlOffset = function (anim) { return anim.timelineOffset ? anim.timelineOffset : 0; };\n  var timings = {};\n  timings.duration = animLength ? Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration; })) : tweenSettings.duration;\n  timings.delay = animLength ? Math.min.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.delay; })) : tweenSettings.delay;\n  timings.endDelay = animLength ? timings.duration - Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration - anim.endDelay; })) : tweenSettings.endDelay;\n  return timings;\n}\n\nvar instanceID = 0;\n\nfunction createNewInstance(params) {\n  var instanceSettings = replaceObjectProps(defaultInstanceSettings, params);\n  var tweenSettings = replaceObjectProps(defaultTweenSettings, params);\n  var properties = getProperties(tweenSettings, params);\n  var animatables = getAnimatables(params.targets);\n  var animations = getAnimations(animatables, properties);\n  var timings = getInstanceTimings(animations, tweenSettings);\n  var id = instanceID;\n  instanceID++;\n  return mergeObjects(instanceSettings, {\n    id: id,\n    children: [],\n    animatables: animatables,\n    animations: animations,\n    duration: timings.duration,\n    delay: timings.delay,\n    endDelay: timings.endDelay\n  });\n}\n\n// Core\n\nvar activeInstances = [];\n\nvar engine = (function () {\n  var raf;\n\n  function play() {\n    if (!raf && (!isDocumentHidden() || !anime.suspendWhenDocumentHidden) && activeInstances.length > 0) {\n      raf = requestAnimationFrame(step);\n    }\n  }\n  function step(t) {\n    // memo on algorithm issue:\n    // dangerous iteration over mutable `activeInstances`\n    // (that collection may be updated from within callbacks of `tick`-ed animation instances)\n    var activeInstancesLength = activeInstances.length;\n    var i = 0;\n    while (i < activeInstancesLength) {\n      var activeInstance = activeInstances[i];\n      if (!activeInstance.paused) {\n        activeInstance.tick(t);\n        i++;\n      } else {\n        activeInstances.splice(i, 1);\n        activeInstancesLength--;\n      }\n    }\n    raf = i > 0 ? requestAnimationFrame(step) : undefined;\n  }\n\n  function handleVisibilityChange() {\n    if (!anime.suspendWhenDocumentHidden) { return; }\n\n    if (isDocumentHidden()) {\n      // suspend ticks\n      raf = cancelAnimationFrame(raf);\n    } else { // is back to active tab\n      // first adjust animations to consider the time that ticks were suspended\n      activeInstances.forEach(\n        function (instance) { return instance ._onDocumentVisibility(); }\n      );\n      engine();\n    }\n  }\n  if (typeof document !== 'undefined') {\n    document.addEventListener('visibilitychange', handleVisibilityChange);\n  }\n\n  return play;\n})();\n\nfunction isDocumentHidden() {\n  return !!document && document.hidden;\n}\n\n// Public Instance\n\nfunction anime(params) {\n  if ( params === void 0 ) params = {};\n\n\n  var startTime = 0, lastTime = 0, now = 0;\n  var children, childrenLength = 0;\n  var resolve = null;\n\n  function makePromise(instance) {\n    var promise = window.Promise && new Promise(function (_resolve) { return resolve = _resolve; });\n    instance.finished = promise;\n    return promise;\n  }\n\n  var instance = createNewInstance(params);\n  var promise = makePromise(instance);\n\n  function toggleInstanceDirection() {\n    var direction = instance.direction;\n    if (direction !== 'alternate') {\n      instance.direction = direction !== 'normal' ? 'normal' : 'reverse';\n    }\n    instance.reversed = !instance.reversed;\n    children.forEach(function (child) { return child.reversed = instance.reversed; });\n  }\n\n  function adjustTime(time) {\n    return instance.reversed ? instance.duration - time : time;\n  }\n\n  function resetTime() {\n    startTime = 0;\n    lastTime = adjustTime(instance.currentTime) * (1 / anime.speed);\n  }\n\n  function seekChild(time, child) {\n    if (child) { child.seek(time - child.timelineOffset); }\n  }\n\n  function syncInstanceChildren(time) {\n    if (!instance.reversePlayback) {\n      for (var i = 0; i < childrenLength; i++) { seekChild(time, children[i]); }\n    } else {\n      for (var i$1 = childrenLength; i$1--;) { seekChild(time, children[i$1]); }\n    }\n  }\n\n  function setAnimationsProgress(insTime) {\n    var i = 0;\n    var animations = instance.animations;\n    var animationsLength = animations.length;\n    while (i < animationsLength) {\n      var anim = animations[i];\n      var animatable = anim.animatable;\n      var tweens = anim.tweens;\n      var tweenLength = tweens.length - 1;\n      var tween = tweens[tweenLength];\n      // Only check for keyframes if there is more than one tween\n      if (tweenLength) { tween = filterArray(tweens, function (t) { return (insTime < t.end); })[0] || tween; }\n      var elapsed = minMax(insTime - tween.start - tween.delay, 0, tween.duration) / tween.duration;\n      var eased = isNaN(elapsed) ? 1 : tween.easing(elapsed);\n      var strings = tween.to.strings;\n      var round = tween.round;\n      var numbers = [];\n      var toNumbersLength = tween.to.numbers.length;\n      var progress = (void 0);\n      for (var n = 0; n < toNumbersLength; n++) {\n        var value = (void 0);\n        var toNumber = tween.to.numbers[n];\n        var fromNumber = tween.from.numbers[n] || 0;\n        if (!tween.isPath) {\n          value = fromNumber + (eased * (toNumber - fromNumber));\n        } else {\n          value = getPathProgress(tween.value, eased * toNumber, tween.isPathTargetInsideSVG);\n        }\n        if (round) {\n          if (!(tween.isColor && n > 2)) {\n            value = Math.round(value * round) / round;\n          }\n        }\n        numbers.push(value);\n      }\n      // Manual Array.reduce for better performances\n      var stringsLength = strings.length;\n      if (!stringsLength) {\n        progress = numbers[0];\n      } else {\n        progress = strings[0];\n        for (var s = 0; s < stringsLength; s++) {\n          var a = strings[s];\n          var b = strings[s + 1];\n          var n$1 = numbers[s];\n          if (!isNaN(n$1)) {\n            if (!b) {\n              progress += n$1 + ' ';\n            } else {\n              progress += n$1 + b;\n            }\n          }\n        }\n      }\n      setProgressValue[anim.type](animatable.target, anim.property, progress, animatable.transforms);\n      anim.currentValue = progress;\n      i++;\n    }\n  }\n\n  function setCallback(cb) {\n    if (instance[cb] && !instance.passThrough) { instance[cb](instance); }\n  }\n\n  function countIteration() {\n    if (instance.remaining && instance.remaining !== true) {\n      instance.remaining--;\n    }\n  }\n\n  function setInstanceProgress(engineTime) {\n    var insDuration = instance.duration;\n    var insDelay = instance.delay;\n    var insEndDelay = insDuration - instance.endDelay;\n    var insTime = adjustTime(engineTime);\n    instance.progress = minMax((insTime / insDuration) * 100, 0, 100);\n    instance.reversePlayback = insTime < instance.currentTime;\n    if (children) { syncInstanceChildren(insTime); }\n    if (!instance.began && instance.currentTime > 0) {\n      instance.began = true;\n      setCallback('begin');\n    }\n    if (!instance.loopBegan && instance.currentTime > 0) {\n      instance.loopBegan = true;\n      setCallback('loopBegin');\n    }\n    if (insTime <= insDelay && instance.currentTime !== 0) {\n      setAnimationsProgress(0);\n    }\n    if ((insTime >= insEndDelay && instance.currentTime !== insDuration) || !insDuration) {\n      setAnimationsProgress(insDuration);\n    }\n    if (insTime > insDelay && insTime < insEndDelay) {\n      if (!instance.changeBegan) {\n        instance.changeBegan = true;\n        instance.changeCompleted = false;\n        setCallback('changeBegin');\n      }\n      setCallback('change');\n      setAnimationsProgress(insTime);\n    } else {\n      if (instance.changeBegan) {\n        instance.changeCompleted = true;\n        instance.changeBegan = false;\n        setCallback('changeComplete');\n      }\n    }\n    instance.currentTime = minMax(insTime, 0, insDuration);\n    if (instance.began) { setCallback('update'); }\n    if (engineTime >= insDuration) {\n      lastTime = 0;\n      countIteration();\n      if (!instance.remaining) {\n        instance.paused = true;\n        if (!instance.completed) {\n          instance.completed = true;\n          setCallback('loopComplete');\n          setCallback('complete');\n          if (!instance.passThrough && 'Promise' in window) {\n            resolve();\n            promise = makePromise(instance);\n          }\n        }\n      } else {\n        startTime = now;\n        setCallback('loopComplete');\n        instance.loopBegan = false;\n        if (instance.direction === 'alternate') {\n          toggleInstanceDirection();\n        }\n      }\n    }\n  }\n\n  instance.reset = function() {\n    var direction = instance.direction;\n    instance.passThrough = false;\n    instance.currentTime = 0;\n    instance.progress = 0;\n    instance.paused = true;\n    instance.began = false;\n    instance.loopBegan = false;\n    instance.changeBegan = false;\n    instance.completed = false;\n    instance.changeCompleted = false;\n    instance.reversePlayback = false;\n    instance.reversed = direction === 'reverse';\n    instance.remaining = instance.loop;\n    children = instance.children;\n    childrenLength = children.length;\n    for (var i = childrenLength; i--;) { instance.children[i].reset(); }\n    if (instance.reversed && instance.loop !== true || (direction === 'alternate' && instance.loop === 1)) { instance.remaining++; }\n    setAnimationsProgress(instance.reversed ? instance.duration : 0);\n  };\n\n  // internal method (for engine) to adjust animation timings before restoring engine ticks (rAF)\n  instance._onDocumentVisibility = resetTime;\n\n  // Set Value helper\n\n  instance.set = function(targets, properties) {\n    setTargetsValue(targets, properties);\n    return instance;\n  };\n\n  instance.tick = function(t) {\n    now = t;\n    if (!startTime) { startTime = now; }\n    setInstanceProgress((now + (lastTime - startTime)) * anime.speed);\n  };\n\n  instance.seek = function(time) {\n    setInstanceProgress(adjustTime(time));\n  };\n\n  instance.pause = function() {\n    instance.paused = true;\n    resetTime();\n  };\n\n  instance.play = function() {\n    if (!instance.paused) { return; }\n    if (instance.completed) { instance.reset(); }\n    instance.paused = false;\n    activeInstances.push(instance);\n    resetTime();\n    engine();\n  };\n\n  instance.reverse = function() {\n    toggleInstanceDirection();\n    instance.completed = instance.reversed ? false : true;\n    resetTime();\n  };\n\n  instance.restart = function() {\n    instance.reset();\n    instance.play();\n  };\n\n  instance.remove = function(targets) {\n    var targetsArray = parseTargets(targets);\n    removeTargetsFromInstance(targetsArray, instance);\n  };\n\n  instance.reset();\n\n  if (instance.autoplay) { instance.play(); }\n\n  return instance;\n\n}\n\n// Remove targets from animation\n\nfunction removeTargetsFromAnimations(targetsArray, animations) {\n  for (var a = animations.length; a--;) {\n    if (arrayContains(targetsArray, animations[a].animatable.target)) {\n      animations.splice(a, 1);\n    }\n  }\n}\n\nfunction removeTargetsFromInstance(targetsArray, instance) {\n  var animations = instance.animations;\n  var children = instance.children;\n  removeTargetsFromAnimations(targetsArray, animations);\n  for (var c = children.length; c--;) {\n    var child = children[c];\n    var childAnimations = child.animations;\n    removeTargetsFromAnimations(targetsArray, childAnimations);\n    if (!childAnimations.length && !child.children.length) { children.splice(c, 1); }\n  }\n  if (!animations.length && !children.length) { instance.pause(); }\n}\n\nfunction removeTargetsFromActiveInstances(targets) {\n  var targetsArray = parseTargets(targets);\n  for (var i = activeInstances.length; i--;) {\n    var instance = activeInstances[i];\n    removeTargetsFromInstance(targetsArray, instance);\n  }\n}\n\n// Stagger helpers\n\nfunction stagger(val, params) {\n  if ( params === void 0 ) params = {};\n\n  var direction = params.direction || 'normal';\n  var easing = params.easing ? parseEasings(params.easing) : null;\n  var grid = params.grid;\n  var axis = params.axis;\n  var fromIndex = params.from || 0;\n  var fromFirst = fromIndex === 'first';\n  var fromCenter = fromIndex === 'center';\n  var fromLast = fromIndex === 'last';\n  var isRange = is.arr(val);\n  var val1 = isRange ? parseFloat(val[0]) : parseFloat(val);\n  var val2 = isRange ? parseFloat(val[1]) : 0;\n  var unit = getUnit(isRange ? val[1] : val) || 0;\n  var start = params.start || 0 + (isRange ? val1 : 0);\n  var values = [];\n  var maxValue = 0;\n  return function (el, i, t) {\n    if (fromFirst) { fromIndex = 0; }\n    if (fromCenter) { fromIndex = (t - 1) / 2; }\n    if (fromLast) { fromIndex = t - 1; }\n    if (!values.length) {\n      for (var index = 0; index < t; index++) {\n        if (!grid) {\n          values.push(Math.abs(fromIndex - index));\n        } else {\n          var fromX = !fromCenter ? fromIndex%grid[0] : (grid[0]-1)/2;\n          var fromY = !fromCenter ? Math.floor(fromIndex/grid[0]) : (grid[1]-1)/2;\n          var toX = index%grid[0];\n          var toY = Math.floor(index/grid[0]);\n          var distanceX = fromX - toX;\n          var distanceY = fromY - toY;\n          var value = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n          if (axis === 'x') { value = -distanceX; }\n          if (axis === 'y') { value = -distanceY; }\n          values.push(value);\n        }\n        maxValue = Math.max.apply(Math, values);\n      }\n      if (easing) { values = values.map(function (val) { return easing(val / maxValue) * maxValue; }); }\n      if (direction === 'reverse') { values = values.map(function (val) { return axis ? (val < 0) ? val * -1 : -val : Math.abs(maxValue - val); }); }\n    }\n    var spacing = isRange ? (val2 - val1) / maxValue : val1;\n    return start + (spacing * (Math.round(values[i] * 100) / 100)) + unit;\n  }\n}\n\n// Timeline\n\nfunction timeline(params) {\n  if ( params === void 0 ) params = {};\n\n  var tl = anime(params);\n  tl.duration = 0;\n  tl.add = function(instanceParams, timelineOffset) {\n    var tlIndex = activeInstances.indexOf(tl);\n    var children = tl.children;\n    if (tlIndex > -1) { activeInstances.splice(tlIndex, 1); }\n    function passThrough(ins) { ins.passThrough = true; }\n    for (var i = 0; i < children.length; i++) { passThrough(children[i]); }\n    var insParams = mergeObjects(instanceParams, replaceObjectProps(defaultTweenSettings, params));\n    insParams.targets = insParams.targets || params.targets;\n    var tlDuration = tl.duration;\n    insParams.autoplay = false;\n    insParams.direction = tl.direction;\n    insParams.timelineOffset = is.und(timelineOffset) ? tlDuration : getRelativeValue(timelineOffset, tlDuration);\n    passThrough(tl);\n    tl.seek(insParams.timelineOffset);\n    var ins = anime(insParams);\n    passThrough(ins);\n    children.push(ins);\n    var timings = getInstanceTimings(children, params);\n    tl.delay = timings.delay;\n    tl.endDelay = timings.endDelay;\n    tl.duration = timings.duration;\n    tl.seek(0);\n    tl.reset();\n    if (tl.autoplay) { tl.play(); }\n    return tl;\n  };\n  return tl;\n}\n\nanime.version = '3.2.1';\nanime.speed = 1;\n// TODO:#review: naming, documentation\nanime.suspendWhenDocumentHidden = true;\nanime.running = activeInstances;\nanime.remove = removeTargetsFromActiveInstances;\nanime.get = getOriginalTargetValue;\nanime.set = setTargetsValue;\nanime.convertPx = convertPxToUnit;\nanime.path = getPath;\nanime.setDashoffset = setDashoffset;\nanime.stagger = stagger;\nanime.timeline = timeline;\nanime.easing = parseEasings;\nanime.penner = penner;\nanime.random = function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; };\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (anime);\n\n\n//# sourceURL=webpack://sinn/./node_modules/animejs/lib/anime.es.js?");

      /***/
    }),
    /***/"./node_modules/detect-autofill/dist/detect-autofill.js": (
    /*!**************************************************************!*\
      !*** ./node_modules/detect-autofill/dist/detect-autofill.js ***!
      \**************************************************************/
    /***/
    function node_modulesDetectAutofillDistDetectAutofillJs() {
      eval("(()=>{var e={454:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>a});var r=n(645),o=n.n(r)()((function(e){return e[1]}));o.push([e.id,\"INPUT:-webkit-autofill,SELECT:-webkit-autofill,TEXTAREA:-webkit-autofill{animation-name:onautofillstart}INPUT:not(:-webkit-autofill),SELECT:not(:-webkit-autofill),TEXTAREA:not(:-webkit-autofill){animation-name:onautofillcancel}@keyframes onautofillstart{}@keyframes onautofillcancel{}\",\"\"]);const a=o},645:e=>{\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?\"@media \".concat(t[2],\" {\").concat(n,\"}\"):n})).join(\"\")},t.i=function(e,n,r){\"string\"==typeof e&&(e=[[null,e,\"\"]]);var o={};if(r)for(var a=0;a<this.length;a++){var i=this[a][0];null!=i&&(o[i]=!0)}for(var u=0;u<e.length;u++){var c=[].concat(e[u]);r&&o[c[0]]||(n&&(c[2]?c[2]=\"\".concat(n,\" and \").concat(c[2]):c[2]=n),t.push(c))}},t}},810:()=>{!function(){if(\"undefined\"!=typeof window)try{var e=new window.CustomEvent(\"test\",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error(\"Could not prevent default\")}catch(e){var t=function(e,t){var n,r;return(t=t||{}).bubbles=!!t.bubbles,t.cancelable=!!t.cancelable,(n=document.createEvent(\"CustomEvent\")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,\"defaultPrevented\",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},379:(e,t,n)=>{\"use strict\";var r,o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),a=[];function i(e){for(var t=-1,n=0;n<a.length;n++)if(a[n].identifier===e){t=n;break}return t}function u(e,t){for(var n={},r=[],o=0;o<e.length;o++){var u=e[o],c=t.base?u[0]+t.base:u[0],l=n[c]||0,s=\"\".concat(c,\" \").concat(l);n[c]=l+1;var d=i(s),f={css:u[1],media:u[2],sourceMap:u[3]};-1!==d?(a[d].references++,a[d].updater(f)):a.push({identifier:s,updater:m(f,t),references:1}),r.push(s)}return r}function c(e){var t=document.createElement(\"style\"),r=e.attributes||{};if(void 0===r.nonce){var a=n.nc;a&&(r.nonce=a)}if(Object.keys(r).forEach((function(e){t.setAttribute(e,r[e])})),\"function\"==typeof e.insert)e.insert(t);else{var i=o(e.insert||\"head\");if(!i)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");i.appendChild(t)}return t}var l,s=(l=[],function(e,t){return l[e]=t,l.filter(Boolean).join(\"\\n\")});function d(e,t,n,r){var o=n?\"\":r.media?\"@media \".concat(r.media,\" {\").concat(r.css,\"}\"):r.css;if(e.styleSheet)e.styleSheet.cssText=s(t,o);else{var a=document.createTextNode(o),i=e.childNodes;i[t]&&e.removeChild(i[t]),i.length?e.insertBefore(a,i[t]):e.appendChild(a)}}function f(e,t,n){var r=n.css,o=n.media,a=n.sourceMap;if(o?e.setAttribute(\"media\",o):e.removeAttribute(\"media\"),a&&\"undefined\"!=typeof btoa&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" */\")),e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}var v=null,p=0;function m(e,t){var n,r,o;if(t.singleton){var a=p++;n=v||(v=c(t)),r=d.bind(null,n,a,!1),o=d.bind(null,n,a,!0)}else n=c(t),r=f.bind(null,n,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||\"boolean\"==typeof t.singleton||(t.singleton=(void 0===r&&(r=Boolean(window&&document&&document.all&&!window.atob)),r));var n=u(e=e||[],t);return function(e){if(e=e||[],\"[object Array]\"===Object.prototype.toString.call(e)){for(var r=0;r<n.length;r++){var o=i(n[r]);a[o].references--}for(var c=u(e,t),l=0;l<n.length;l++){var s=i(n[l]);0===a[s].references&&(a[s].updater(),a.splice(s,1))}n=c}}}}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={id:r,exports:{}};return e[r](a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\"use strict\";var e=n(379),t=n.n(e),r=n(454);function o(e){if(!e.hasAttribute(\"autocompleted\")){e.setAttribute(\"autocompleted\",\"\");var t=new window.CustomEvent(\"onautocomplete\",{bubbles:!0,cancelable:!0,detail:null});e.dispatchEvent(t)||(e.value=\"\")}}function a(e){e.hasAttribute(\"autocompleted\")&&(e.removeAttribute(\"autocompleted\"),e.dispatchEvent(new window.CustomEvent(\"onautocomplete\",{bubbles:!0,cancelable:!1,detail:null})))}t()(r.Z,{insert:\"head\",singleton:!1}),r.Z.locals,n(810),document.addEventListener(\"animationstart\",(function(e){\"onautofillstart\"===e.animationName?o(e.target):a(e.target)}),!0),document.addEventListener(\"input\",(function(e){\"insertReplacementText\"!==e.inputType&&\"data\"in e?a(e.target):o(e.target)}),!0)})()})();\n\n//# sourceURL=webpack://sinn/./node_modules/detect-autofill/dist/detect-autofill.js?");

      /***/
    }),
    /***/"./node_modules/letterizejs/lib/letterize.js": (
    /*!***************************************************!*\
      !*** ./node_modules/letterizejs/lib/letterize.js ***!
      \***************************************************/
    /***/
    function node_modulesLetterizejsLibLetterizeJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * letterize.js v2.0.0\n * (c) 2021 Wojciech Krakowiak\n * Released under the MIT license\n * https://github.com/WojciechWKROPCE/letterize\n */\n\n/*jshint esversion: 6 */\r\nconst getTargets = (targets) => {\r\n    if (targets instanceof NodeList ||\r\n        targets instanceof HTMLCollection ||\r\n        Array.isArray(targets)) {\r\n        return targets;\r\n    }\r\n    else if (targets instanceof HTMLElement) {\r\n        return [targets];\r\n    }\r\n    else if (typeof targets === \"string\") {\r\n        return document.querySelectorAll(targets);\r\n    }\r\n    return null;\r\n};\r\nconst deconstructText = (node, wrapper, className) => {\r\n    const text = node.textContent.trim();\r\n    const textLength = text.length;\r\n    const list = [];\r\n    node.textContent = \"\";\r\n    for (let n = 0; n < textLength; n++) {\r\n        const letterNode = document.createElement(wrapper);\r\n        if (className && className.length)\r\n            letterNode.classList.add(className);\r\n        // Replace spaces with &nbsp; so it has width after letterizing\r\n        letterNode.textContent = text[n] === \" \" ? \"\\xa0\" : text[n];\r\n        node.before(letterNode);\r\n        list.push(letterNode);\r\n    }\r\n    return list;\r\n};\r\nconst deconstructObjects = (targets, target, wrapper, className, list, listAll, i, id) => {\r\n    if (!Array.isArray(target.letterize_id)) {\r\n        target.letterize_id = [];\r\n    }\r\n    if (!target.letterize_id.includes(id)) {\r\n        target.letterize_id.push(id);\r\n        const nodeList = [...target.childNodes];\r\n        const nodeListLength = nodeList.length;\r\n        for (let j = 0; j < nodeListLength; j++) {\r\n            let listPart;\r\n            switch (nodeList[j].nodeType) {\r\n                case 1:\r\n                    if (Array.prototype.indexOf.call(targets, nodeList[j]) === -1) {\r\n                        // Check if current nodeList[j] wasn't deconstructed (it can happen if a target node is in another target node).\r\n                        deconstructObjects(targets, nodeList[j], wrapper, className, list, listAll, i, id);\r\n                    }\r\n                    break;\r\n                case 3:\r\n                    listPart = deconstructText(nodeList[j], wrapper, className);\r\n                    listAll.push(...listPart);\r\n                    list[i].push(...listPart);\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n};\r\nclass Letterize {\r\n    constructor(params) {\r\n        const targets = getTargets(params.targets);\r\n        if (!targets || !targets.length) {\r\n            console.error(`Letterize: targets '${targets}' not found or not specified`);\r\n            return;\r\n        }\r\n        const targetsLength = targets.length;\r\n        Letterize.numInstances = (Letterize.numInstances || 0) + 1;\r\n        const wrapper = params.wrapper || \"span\";\r\n        const className = params.className;\r\n        const id = Letterize.numInstances;\r\n        const list = [];\r\n        const listAll = [];\r\n        for (let i = 0; i < targetsLength; i++) {\r\n            list[i] = [];\r\n            deconstructObjects(targets, targets[i], wrapper, className, list, listAll, i, id);\r\n        }\r\n        this._wrapper = wrapper;\r\n        this._targets = targets;\r\n        this._list = list;\r\n        this._listAll = listAll;\r\n        this._className = className;\r\n    }\r\n    get listAll() {\r\n        return this._listAll;\r\n    }\r\n    get list() {\r\n        return this._list;\r\n    }\r\n    get targets() {\r\n        return this._targets;\r\n    }\r\n    get className() {\r\n        return this._className;\r\n    }\r\n    get wrapper() {\r\n        return this._wrapper;\r\n    }\r\n    deletterize() {\r\n        const listLength = this.listAll.length;\r\n        for (let i = 0; i < listLength; i++) {\r\n            this.listAll[i].before(...Array.from(this.listAll[i].childNodes));\r\n            this.listAll[i].remove();\r\n        }\r\n        this._wrapper = undefined;\r\n        this._targets = undefined;\r\n        this._list = undefined;\r\n        this._listAll = undefined;\r\n        this._className = undefined;\r\n        this.deletterize = undefined;\r\n    }\r\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Letterize);\n\n\n//# sourceURL=webpack://sinn/./node_modules/letterizejs/lib/letterize.js?");

      /***/
    }),
    /***/"./node_modules/vanilla-lazyload/dist/lazyload.min.js": (
    /*!************************************************************!*\
      !*** ./node_modules/vanilla-lazyload/dist/lazyload.min.js ***!
      \************************************************************/
    /***/
    function node_modulesVanillaLazyloadDistLazyloadMinJs(module) {
      eval("!function(n,t){ true?module.exports=t():0}(this,(function(){\"use strict\";function n(){return n=Object.assign||function(n){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},n.apply(this,arguments)}var t=\"undefined\"!=typeof window,e=t&&!(\"onscroll\"in window)||\"undefined\"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),i=t&&\"IntersectionObserver\"in window,o=t&&\"classList\"in document.createElement(\"p\"),a=t&&window.devicePixelRatio>1,r={elements_selector:\".lazy\",container:e||t?document:null,threshold:300,thresholds:null,data_src:\"src\",data_srcset:\"srcset\",data_sizes:\"sizes\",data_bg:\"bg\",data_bg_hidpi:\"bg-hidpi\",data_bg_multi:\"bg-multi\",data_bg_multi_hidpi:\"bg-multi-hidpi\",data_bg_set:\"bg-set\",data_poster:\"poster\",class_applied:\"applied\",class_loading:\"loading\",class_loaded:\"loaded\",class_error:\"error\",class_entered:\"entered\",class_exited:\"exited\",unobserve_completed:!0,unobserve_entered:!1,cancel_on_exit:!0,callback_enter:null,callback_exit:null,callback_applied:null,callback_loading:null,callback_loaded:null,callback_error:null,callback_finish:null,callback_cancel:null,use_native:!1,restore_on_error:!1},c=function(t){return n({},r,t)},l=function(n,t){var e,i=\"LazyLoad::Initialized\",o=new n(t);try{e=new CustomEvent(i,{detail:{instance:o}})}catch(n){(e=document.createEvent(\"CustomEvent\")).initCustomEvent(i,!1,!1,{instance:o})}window.dispatchEvent(e)},u=\"src\",s=\"srcset\",d=\"sizes\",f=\"poster\",_=\"llOriginalAttrs\",g=\"data\",v=\"loading\",b=\"loaded\",p=\"applied\",m=\"error\",h=\"native\",E=\"data-\",I=\"ll-status\",y=function(n,t){return n.getAttribute(E+t)},k=function(n){return y(n,I)},w=function(n,t){return function(n,t,e){var i=\"data-ll-status\";null!==e?n.setAttribute(i,e):n.removeAttribute(i)}(n,0,t)},A=function(n){return w(n,null)},L=function(n){return null===k(n)},O=function(n){return k(n)===h},x=[v,b,p,m],C=function(n,t,e,i){n&&\"function\"==typeof n&&(void 0===i?void 0===e?n(t):n(t,e):n(t,e,i))},N=function(n,t){\"\"!==t&&(o?n.classList.add(t):n.className+=(n.className?\" \":\"\")+t)},M=function(n,t){\"\"!==t&&(o?n.classList.remove(t):n.className=n.className.replace(new RegExp(\"(^|\\\\s+)\"+t+\"(\\\\s+|$)\"),\" \").replace(/^\\s+/,\"\").replace(/\\s+$/,\"\"))},z=function(n){return n.llTempImage},T=function(n,t){if(t){var e=t._observer;e&&e.unobserve(n)}},R=function(n,t){n&&(n.loadingCount+=t)},G=function(n,t){n&&(n.toLoadCount=t)},j=function(n){for(var t,e=[],i=0;t=n.children[i];i+=1)\"SOURCE\"===t.tagName&&e.push(t);return e},D=function(n,t){var e=n.parentNode;e&&\"PICTURE\"===e.tagName&&j(e).forEach(t)},H=function(n,t){j(n).forEach(t)},V=[u],F=[u,f],B=[u,s,d],J=[g],P=function(n){return!!n[_]},S=function(n){return n[_]},U=function(n){return delete n[_]},$=function(n,t){if(!P(n)){var e={};t.forEach((function(t){e[t]=n.getAttribute(t)})),n[_]=e}},q=function(n,t){if(P(n)){var e=S(n);t.forEach((function(t){!function(n,t,e){e?n.setAttribute(t,e):n.removeAttribute(t)}(n,t,e[t])}))}},K=function(n,t,e){N(n,t.class_applied),w(n,p),e&&(t.unobserve_completed&&T(n,t),C(t.callback_applied,n,e))},Q=function(n,t,e){N(n,t.class_loading),w(n,v),e&&(R(e,1),C(t.callback_loading,n,e))},W=function(n,t,e){e&&n.setAttribute(t,e)},X=function(n,t){W(n,d,y(n,t.data_sizes)),W(n,s,y(n,t.data_srcset)),W(n,u,y(n,t.data_src))},Y={IMG:function(n,t){D(n,(function(n){$(n,B),X(n,t)})),$(n,B),X(n,t)},IFRAME:function(n,t){$(n,V),W(n,u,y(n,t.data_src))},VIDEO:function(n,t){H(n,(function(n){$(n,V),W(n,u,y(n,t.data_src))})),$(n,F),W(n,f,y(n,t.data_poster)),W(n,u,y(n,t.data_src)),n.load()},OBJECT:function(n,t){$(n,J),W(n,g,y(n,t.data_src))}},Z=[\"IMG\",\"IFRAME\",\"VIDEO\",\"OBJECT\"],nn=function(n,t){!t||function(n){return n.loadingCount>0}(t)||function(n){return n.toLoadCount>0}(t)||C(n.callback_finish,t)},tn=function(n,t,e){n.addEventListener(t,e),n.llEvLisnrs[t]=e},en=function(n,t,e){n.removeEventListener(t,e)},on=function(n){return!!n.llEvLisnrs},an=function(n){if(on(n)){var t=n.llEvLisnrs;for(var e in t){var i=t[e];en(n,e,i)}delete n.llEvLisnrs}},rn=function(n,t,e){!function(n){delete n.llTempImage}(n),R(e,-1),function(n){n&&(n.toLoadCount-=1)}(e),M(n,t.class_loading),t.unobserve_completed&&T(n,e)},cn=function(n,t,e){var i=z(n)||n;on(i)||function(n,t,e){on(n)||(n.llEvLisnrs={});var i=\"VIDEO\"===n.tagName?\"loadeddata\":\"load\";tn(n,i,t),tn(n,\"error\",e)}(i,(function(o){!function(n,t,e,i){var o=O(t);rn(t,e,i),N(t,e.class_loaded),w(t,b),C(e.callback_loaded,t,i),o||nn(e,i)}(0,n,t,e),an(i)}),(function(o){!function(n,t,e,i){var o=O(t);rn(t,e,i),N(t,e.class_error),w(t,m),C(e.callback_error,t,i),e.restore_on_error&&q(t,B),o||nn(e,i)}(0,n,t,e),an(i)}))},ln=function(n,t,e){!function(n){return Z.indexOf(n.tagName)>-1}(n)?function(n,t,e){!function(n){n.llTempImage=document.createElement(\"IMG\")}(n),cn(n,t,e),function(n){P(n)||(n[_]={backgroundImage:n.style.backgroundImage})}(n),function(n,t,e){var i=y(n,t.data_bg),o=y(n,t.data_bg_hidpi),r=a&&o?o:i;r&&(n.style.backgroundImage='url(\"'.concat(r,'\")'),z(n).setAttribute(u,r),Q(n,t,e))}(n,t,e),function(n,t,e){var i=y(n,t.data_bg_multi),o=y(n,t.data_bg_multi_hidpi),r=a&&o?o:i;r&&(n.style.backgroundImage=r,K(n,t,e))}(n,t,e),function(n,t,e){var i=y(n,t.data_bg_set);if(i){var o=i.split(\"|\"),a=o.map((function(n){return\"image-set(\".concat(n,\")\")}));n.style.backgroundImage=a.join(),\"\"===n.style.backgroundImage&&(a=o.map((function(n){return\"-webkit-image-set(\".concat(n,\")\")})),n.style.backgroundImage=a.join()),K(n,t,e)}}(n,t,e)}(n,t,e):function(n,t,e){cn(n,t,e),function(n,t,e){var i=Y[n.tagName];i&&(i(n,t),Q(n,t,e))}(n,t,e)}(n,t,e)},un=function(n){n.removeAttribute(u),n.removeAttribute(s),n.removeAttribute(d)},sn=function(n){D(n,(function(n){q(n,B)})),q(n,B)},dn={IMG:sn,IFRAME:function(n){q(n,V)},VIDEO:function(n){H(n,(function(n){q(n,V)})),q(n,F),n.load()},OBJECT:function(n){q(n,J)}},fn=function(n,t){(function(n){var t=dn[n.tagName];t?t(n):function(n){if(P(n)){var t=S(n);n.style.backgroundImage=t.backgroundImage}}(n)})(n),function(n,t){L(n)||O(n)||(M(n,t.class_entered),M(n,t.class_exited),M(n,t.class_applied),M(n,t.class_loading),M(n,t.class_loaded),M(n,t.class_error))}(n,t),A(n),U(n)},_n=[\"IMG\",\"IFRAME\",\"VIDEO\"],gn=function(n){return n.use_native&&\"loading\"in HTMLImageElement.prototype},vn=function(n,t,e){n.forEach((function(n){return function(n){return n.isIntersecting||n.intersectionRatio>0}(n)?function(n,t,e,i){var o=function(n){return x.indexOf(k(n))>=0}(n);w(n,\"entered\"),N(n,e.class_entered),M(n,e.class_exited),function(n,t,e){t.unobserve_entered&&T(n,e)}(n,e,i),C(e.callback_enter,n,t,i),o||ln(n,e,i)}(n.target,n,t,e):function(n,t,e,i){L(n)||(N(n,e.class_exited),function(n,t,e,i){e.cancel_on_exit&&function(n){return k(n)===v}(n)&&\"IMG\"===n.tagName&&(an(n),function(n){D(n,(function(n){un(n)})),un(n)}(n),sn(n),M(n,e.class_loading),R(i,-1),A(n),C(e.callback_cancel,n,t,i))}(n,t,e,i),C(e.callback_exit,n,t,i))}(n.target,n,t,e)}))},bn=function(n){return Array.prototype.slice.call(n)},pn=function(n){return n.container.querySelectorAll(n.elements_selector)},mn=function(n){return function(n){return k(n)===m}(n)},hn=function(n,t){return function(n){return bn(n).filter(L)}(n||pn(t))},En=function(n,e){var o=c(n);this._settings=o,this.loadingCount=0,function(n,t){i&&!gn(n)&&(t._observer=new IntersectionObserver((function(e){vn(e,n,t)}),function(n){return{root:n.container===document?null:n.container,rootMargin:n.thresholds||n.threshold+\"px\"}}(n)))}(o,this),function(n,e){t&&(e._onlineHandler=function(){!function(n,t){var e;(e=pn(n),bn(e).filter(mn)).forEach((function(t){M(t,n.class_error),A(t)})),t.update()}(n,e)},window.addEventListener(\"online\",e._onlineHandler))}(o,this),this.update(e)};return En.prototype={update:function(n){var t,o,a=this._settings,r=hn(n,a);G(this,r.length),!e&&i?gn(a)?function(n,t,e){n.forEach((function(n){-1!==_n.indexOf(n.tagName)&&function(n,t,e){n.setAttribute(\"loading\",\"lazy\"),cn(n,t,e),function(n,t){var e=Y[n.tagName];e&&e(n,t)}(n,t),w(n,h)}(n,t,e)})),G(e,0)}(r,a,this):(o=r,function(n){n.disconnect()}(t=this._observer),function(n,t){t.forEach((function(t){n.observe(t)}))}(t,o)):this.loadAll(r)},destroy:function(){this._observer&&this._observer.disconnect(),t&&window.removeEventListener(\"online\",this._onlineHandler),pn(this._settings).forEach((function(n){U(n)})),delete this._observer,delete this._settings,delete this._onlineHandler,delete this.loadingCount,delete this.toLoadCount},loadAll:function(n){var t=this,e=this._settings;hn(n,e).forEach((function(n){T(n,t),ln(n,e,t)}))},restoreAll:function(){var n=this._settings;pn(n).forEach((function(t){fn(t,n)}))}},En.load=function(n,t){var e=c(t);ln(n,e)},En.resetStatus=function(n){A(n)},t&&function(n,t){if(t)if(t.length)for(var e,i=0;e=t[i];i+=1)l(n,e);else l(n,t)}(En,window.lazyLoadOptions),En}));\n\n\n//# sourceURL=webpack://sinn/./node_modules/vanilla-lazyload/dist/lazyload.min.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/app.js": (
    /*!***************************************!*\
      !*** ./source/out/sinn/src/js/app.js ***!
      \***************************************/
    /***/
    function sourceOutSinnSrcJsAppJs() {
      eval("var body = document.querySelector('body');\n\n// Stop firing transition on page reload\nsetTimeout(function(){\n  body.classList.remove('js--transition');\n},50);\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/app.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/accordion.js": (
    /*!*****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/accordion.js ***!
      \*****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesAccordionJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   accordion: () => (/* binding */ accordion)\n/* harmony export */ });\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n\n\nconst accordion = () => {\n\tvar accordionItems = document.querySelectorAll('.c-accordion__item');\n\tvar cubicBezier = 'cubicBezier(.40,.05,.20,.90)';\n\tvar accordionContentHeight, accordionBodyHeight, setViewportWidth;\n\n\tif (accordionItems) {\n\t\taccordionItems.forEach((item) => {\n\t\t\tvar accordion   = item;\n\t\t\tvar content     = item.querySelector('.c-accordion__body');\n\t\t\tvar header      = item.querySelector('.c-accordion__header');\n\n\t\t\theader.addEventListener('click', function () {\n\t\t\t\taccordionBodyHeight = item.querySelector('.c-accordion__content').getBoundingClientRect().height;\n\t\t\t\taccordionContentHeight = accordionBodyHeight + 'px';\n\n\t\t\t\taccordion.classList.add('js--pointerevent');\n\n\t\t\t\tif (accordion.classList.contains('js--active')) {\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: content,\n\t\t\t\t\t\theight: '0',\n\t\t\t\t\t\tduration: 650,\n\t\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\taccordion.classList.remove('js--active', 'js--pointerevent');\n\t\t\t\t\t\t\taccordion.classList.add('is--closed');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\taccordion.classList.add('js--active', 'js--pointerevent');\n\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: content,\n\t\t\t\t\t\theight: ['0', accordionContentHeight],\n\t\t\t\t\t\tduration: 650,\n\t\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\taccordion.classList.remove('js--pointerevent');\n\t\t\t\t\t\t\taccordion.classList.remove('is--closed');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t});\n\n\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\tsetViewportWidth = window.innerWidth;\n\n\t\t\t\taccordionBodyHeight = item.querySelector('.c-accordion__content').getBoundingClientRect().height;\n\t\t\t\taccordionContentHeight = accordionBodyHeight + 'px';\n\n\t\t\t\tif (accordion.classList.contains('js--active') && !accordion.classList.contains('js--pointerevent')) {\n\t\t\t\t\tcontent.style.height = accordionContentHeight;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n\nconst techAbcExcludedPages = document.querySelector('.is-checkout, .cl-techabcfrontendcontroller');\n\nif (techAbcExcludedPages) {\n\taccordion();\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/accordion.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/adressform.js": (
    /*!******************************************************!*\
      !*** ./source/out/sinn/src/js/modules/adressform.js ***!
      \******************************************************/
    /***/
    function sourceOutSinnSrcJsModulesAdressformJs() {
      eval("var _oForm = document.getElementById('addressForm');\nvar _oField = document.querySelector('#addressForm .e-form__wrap.text-danger');\n\nif (_oField) {\n\t_oForm.classList.add('is--shown');\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/adressform.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/alert.js": (
    /*!*************************************************!*\
      !*** ./source/out/sinn/src/js/modules/alert.js ***!
      \*************************************************/
    /***/
    function sourceOutSinnSrcJsModulesAlertJs() {
      eval("var alert = document.querySelector('.js-alert');\nvar alertClose = document.querySelector('.js-alert_close');\n\nif (alert) {\n\n    alertClose.addEventListener('click', (event) => {\n        event.target.closest('.js-alert').classList.add('is--hidden')\n    });\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/alert.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/amountCounter.js": (
    /*!*********************************************************!*\
      !*** ./source/out/sinn/src/js/modules/amountCounter.js ***!
      \*********************************************************/
    /***/
    function sourceOutSinnSrcJsModulesAmountCounterJs() {
      eval("document.addEventListener('DOMContentLoaded', function() {\n\tconst minusButtons = document.querySelectorAll('.js--btn-count-minus');\n\tconst plusButtons = document.querySelectorAll('.js--btn-count-plus');\n\tconst amountInputs = document.querySelectorAll('.js--btn-count-input');\n\tconst additionalAmountInput = document.getElementById('amountToBasket2');\n    const extrasAmountInput = document.getElementById('hiddenAmount');\n\n\tif (minusButtons.length === plusButtons.length && minusButtons.length === amountInputs.length) {\n\t  for (let i = 0; i < minusButtons.length; i++) {\n\t\tconst minusButton = minusButtons[i];\n\t\tconst plusButton = plusButtons[i];\n\t\tconst amountInput = amountInputs[i];\n\n\t\tconst minValue = parseInt(amountInput.min);\n\t\tconst maxValue = parseInt(amountInput.max);\n\n\t\tminusButton.addEventListener('click', function() {\n\t\t  updateAmount(amountInput, -1, minValue, maxValue);\n\t\t  if (additionalAmountInput) {\n\t\t\tupdateAmount(additionalAmountInput, -1, minValue, maxValue);\n\t\t  }\n\t\t});\n\n\t\tplusButton.addEventListener('click', function() {\n\t\t  updateAmount(amountInput, 1, minValue, maxValue);\n\t\t  if (additionalAmountInput) {\n\t\t\tupdateAmount(additionalAmountInput, 1, minValue, maxValue);\n\t\t  }\n\t\t});\n\t  }\n\t}\n\n\tfunction updateAmount(amountInput, change, minValue, maxValue) {\n\t  let currentValue = parseInt(amountInput.value);\n\t  let newValue = currentValue + change;\n\n\t  if (newValue >= minValue && newValue <= maxValue) {\n\t\tamountInput.value = newValue;\n        extrasAmountInput.value = newValue;\n\t  }\n\t}\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/amountCounter.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/animateOffcanvas.js": (
    /*!************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/animateOffcanvas.js ***!
      \************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesAnimateOffcanvasJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   animateOffcanvas: () => (/* binding */ animateOffcanvas)\n/* harmony export */ });\nconst animateOffcanvas = function(options={}) {\n    const offCanvas         = document.querySelector(options.offCanvas);\n    const triggers          = document.querySelectorAll(options.triggers);\n    const closeButtons       = document.querySelectorAll(options.closeButtons);\n    const callSelf          = options.callSelf ? options.callSelf : false;\n    const classActive       = 'js--active';\n\n\n\n    const resetMobileCanvas = function() {\n        let activeCanvasesMobile = document.querySelectorAll('.c-mobilemenu__item.js--active');\n\n        activeCanvasesMobile.forEach(element => {\n            let canvas = document.querySelector('.' + element.dataset.layer);\n            //animate\n            element.classList.remove(classActive);\n            canvas.classList.remove(classActive);\n\n            //edge case retailer footer\n            const footerTrigger = document.querySelector('a[href=\"#fachhändler\"].js--active');\n            footerTrigger && footerTrigger.classList.remove(classActive);\n\n            // edge case search input focus blur input\n            const searchField = document.querySelector('.c-search.js--active #searchParam');\n            let searchTriggerMobile = document.querySelector('#mobileSearchTrigger');\n            searchTriggerMobile && searchTriggerMobile.classList.remove('is--focused');\n            searchField && searchField.blur();\n\n            //display none after aninmation\n            const transitionEndHandler = function (event) {\n                if (event.target === canvas.firstElementChild) {\n                    canvas.firstElementChild.removeEventListener('transitionend', transitionEndHandler);\n                    canvas.style = 'display: none';\n                }\n            };\n            canvas.firstElementChild.addEventListener('transitionend', transitionEndHandler);\n        });\n    }\n\n    const openOffcanvas = function() {\n        //close mobile offcanvases before opening another\n        resetMobileCanvas();\n\n        //display the canvas\n        offCanvas.style = 'display: block;'\n\n        requestAnimationFrame(() => {\n            // Use a slight delay if needed to ensure everything is fully applied\n            setTimeout(() => {\n                // Trigger scss animation after canvas is displayed\n                offCanvas.classList.add(classActive);\n                triggers && triggers.forEach(item => {\n                    item.classList.add(classActive);\n                });\n            }, 0);\n        });\n    }\n\n    const closeOffcanvas = function() {\n        const offCanvasInner = offCanvas.querySelector('.c-offcanvas__inner');\n        //wait for c-offcanvas__inner transition\n        const transitionEndHandler = function (event) {\n            if (event.target === offCanvasInner) {\n                offCanvasInner.removeEventListener('transitionend', transitionEndHandler);\n                triggers && triggers.forEach(item => {\n                    item.classList.remove(classActive);\n                });\n                offCanvas.style = 'display: none';\n            }\n        };\n        offCanvasInner && offCanvasInner.addEventListener('transitionend', transitionEndHandler);\n        offCanvas.classList.remove(classActive);\n    }\n\n    //register Event listeners\n    closeButtons && closeButtons.forEach(close => {\n        close.addEventListener('click', closeOffcanvas);\n    })\n\n    triggers.forEach(item => {\n        item.addEventListener('click', () => {\n            if (item.classList.contains(classActive)) {\n                closeOffcanvas();\n            } else {\n                openOffcanvas();\n            }\n        });\n    });\n\n    if (callSelf) {\n        openOffcanvas();\n    }\n}\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/animateOffcanvas.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/animation.js": (
    /*!*****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/animation.js ***!
      \*****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesAnimationJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./animateOffcanvas */ \"./source/out/sinn/src/js/modules/animateOffcanvas.js\");\n/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Manages offCanvas animations\n * @author     Lennart Syre <info@dotfly.de>, Iris Isabell Jirka <iris.jirka@dotfly.de>, Anna Morawe <anna.morawe@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\n// Imports\n\n\n// --- Animate Flyout :: Product Search\n(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__.animateOffcanvas)({\n    offCanvas: '.c-search',\n\ttriggers: '.c-function.is--search .c-function__label, .c-mobilemenu__item.is--search',\n\tcloseButtons: '.c-search__close, .c-search__background'\n});\n\n// --- Animate Flyout :: Login\n(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__.animateOffcanvas)({\n    offCanvas: '.c-login',\n\ttriggers: '.c-function.is--account .c-function__label, .c-mobilemenu__item.is--account',\n\tcloseButtons: '.c-login__close, .c-login__background'\n});\n\n// --- Animate Flyout :: Priceinfo\n(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__.animateOffcanvas)({\n\toffCanvas: '.c-priceinfo',\n\ttriggers: '.c-priceinfo__trigger',\n\tcloseButtons: '.c-priceinfo__close, .c-priceinfo__background'\n});\n\n// --- Animate Flyout :: Cart\nlet openModal = document.querySelector('.c-modal.js--openMinibasket');\n(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__.animateOffcanvas)({\n    offCanvas: '.c-cart',\n\ttriggers: '.c-function.is--basket .c-function__label, .c-mobilemenu__item.is--cart',\n\tcloseButtons: '.c-cart__close, .c-cart__background'\n});\n\nif (openModal) {\n\t(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__.animateOffcanvas)({\n\t\toffCanvas: '.c-cart',\n\t\ttriggers: '.c-function.is--basket .c-function__label, .c-mobilemenu__item.is--cart',\n\t\tcloseButtons: '.c-cart__close, .c-cart__background',\n\t\tcallSelf: true\n\t});\n}\n\n// --- Animate Flyout :: Refine layer\n(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__.animateOffcanvas)({\n    offCanvas: '.c-refinelayer',\n\ttriggers: '.c-refine__action-item .js-show-filter, .c-mobilemenu__item.is--refine',\n\tcloseButtons: '.c-refinelayer__close, .c-refinelayer__background'\n});\n\n// --- Animate Flyout :: Tech ABC\n\n// animateOffcanvas wird im TechABC Modul aufgerufen!!!\n\n// --- Animate Flyout :: Warranty\n\n(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__.animateOffcanvas)({\n\toffCanvas: '.c-warranty',\n\ttriggers: '.c-warranty__link',\n\tcloseButtons: '.c-warranty__close, .c-warranty__background'\n});\n\n// --- Animate Flyout :: Basket Question\nvar basketquestionComponent = document.querySelector('.c-basketquestion');\nvar basketquestionTriggers = document.querySelectorAll('#toBasket:not(.is--directlytobasket)');\n(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__.animateOffcanvas)({\n\toffCanvas: '.c-basketquestion',\n\ttriggers: '#toBasket:not(.is--directlytobasket)',\n\tcloseButtons: '.c-basketquestion__close, .c-basketquestion__background, #questionConfigureButton'\n});\n\nif (basketquestionComponent) {\n    basketquestionTriggers.forEach((item) => {\n        item.addEventListener('click', function (event) {\n            event.stopPropagation();\n            event.preventDefault();\n        });\n    });\n}\n\n// --- Animate Flyout :: Retailer\nlet retailerComponent = document.querySelector('.c-retailer');\n\nif (retailerComponent) {\n\n\t(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_0__.animateOffcanvas)({\n\t\toffCanvas: '.c-retailer',\n\t\tcloseButtons: '.c-retailer__close, .c-retailer__background',\n\t\ttriggers: '.c-function.is--dealer .c-function__label, a[href=\"#fachhändler\"], .c-mobilemenu__item.is--retailer',\n\t});\n}\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/animation.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/breadcrumb.js": (
    /*!******************************************************!*\
      !*** ./source/out/sinn/src/js/modules/breadcrumb.js ***!
      \******************************************************/
    /***/
    function sourceOutSinnSrcJsModulesBreadcrumbJs() {
      eval("var breadcrumb = document.querySelector('.js--breadcrumb');\nvar breadcrumbContainer = document.querySelector('.js--breadcrumb-container');\nvar breadcrumbContainerCMS = document.querySelector('.js--breadcrumb-container-cms');\n\nif(breadcrumb) {\n    // Breadcrumb auf Detailseite\n    if(document.querySelector('body').classList.contains('cl-details') && window.innerWidth >= 1024) {\n        breadcrumbContainer.appendChild(breadcrumb);\n    }\n\n    if(document.querySelector('body').classList.contains('cl-alist') || document.querySelector('body').classList.contains('cl-start')) {\n\n        if(document.querySelector('.cmsContent')) {\n            // Breadcrumb auf Contentseiten\n            if(breadcrumbContainerCMS) {\n                breadcrumbContainerCMS.appendChild(breadcrumb);\n            }\n        } else {\n            // Breadcrumb auf Productliste\n            if(breadcrumbContainer) {\n                breadcrumbContainer.appendChild(breadcrumb);\n            }\n        }\n\n    }\n}\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/breadcrumb.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/cart.js": (
    /*!************************************************!*\
      !*** ./source/out/sinn/src/js/modules/cart.js ***!
      \************************************************/
    /***/
    function sourceOutSinnSrcJsModulesCartJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n/* harmony import */ var _minicartflapper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./minicartflapper */ \"./source/out/sinn/src/js/modules/minicartflapper.js\");\n\n\n\n$('body').on('click', '.c-minibasket__contents--delete', function () {\n\tvar ajaxTarget \t\t\t= document.getElementById('ajaxTargetMB').value;\n\tvar sessionToken \t\t= document.getElementById('sessionTokenMB').value;\n\tvar minibasketContainer = document.querySelector('.c-minibasket__wrapper');\n\tvar basketCounter \t\t= document.getElementById('basketCounter');\n\tvar cartLoader \t\t\t= document.querySelector('.c-cart__loader');\n\tvar cubicBezier \t\t= 'cubicBezier(.40,.05,.20,.90)';\n\n\tcartLoader.style.display = 'flex';\n\tcartLoader.classList.add('js--active');\n\n\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\ttargets: cartLoader,\n\t\topacity: ['0', '1'],\n\t\tduration: 250,\n\t\teasing: cubicBezier\n\t})\n\n\t$.ajax({\n\t\turl: ajaxTarget + \"cl=basket&fnc=ajaxRemoveArticleFromBasket&stoken=\" + sessionToken,\n\t\tmethod: \"POST\",\n\t\tdata: {basketindex: $(this).data('basketindex')},\n\t\tsuccess: function (ret) {\n\t\t\tminibasketContainer.innerHTML = ret;\n\t\t\tbasketCounter.innerText = document.getElementsByClassName('c-minibasket__item').length;\n\n\t\t\tvar cart = document.querySelector('.c-minibasket__overflow');\n\n\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\ttargets: cartLoader,\n\t\t\t\topacity: '0',\n\t\t\t\tduration: 250,\n\t\t\t\teasing: cubicBezier,\n\t\t\t\tcomplete: function () {\n\t\t\t\t\tcartLoader.classList.remove('js--active');\n\t\t\t\t\tcartLoader.style.display = 'none';\n\t\t\t\t}\n\t\t\t})\n\t\t\t;(0,_minicartflapper__WEBPACK_IMPORTED_MODULE_1__.addFlapper)();\n\t\t}\n\t});\n})\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/cart.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/checkSelectedPayment.js": (
    /*!****************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/checkSelectedPayment.js ***!
      \****************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesCheckSelectedPaymentJs() {
      eval("function checkSelectedPayment() {\n    const paymentBodyList = document.querySelectorAll('.c-payment__body');\n    paymentBodyList.forEach(paymentBody => {\n        paymentBody.classList.contains('activePayment') ? paymentBody.style.display = '' : paymentBody.style.display = 'none';\n    });\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n    checkSelectedPayment();\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/checkSelectedPayment.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/configurator/configurator.js": (
    /*!*********************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/configurator/configurator.js ***!
      \*********************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesConfiguratorConfiguratorJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   configuratorComponent: () => (/* binding */ configuratorComponent),\n/* harmony export */   configuratorSlider: () => (/* binding */ configuratorSlider),\n/* harmony export */   cubicBezier: () => (/* binding */ cubicBezier),\n/* harmony export */   forwardButton: () => (/* binding */ forwardButton),\n/* harmony export */   optionSubmitButton: () => (/* binding */ optionSubmitButton)\n/* harmony export */ });\n/* harmony import */ var _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @glidejs/glide */ \"./node_modules/@glidejs/glide/dist/glide.esm.js\");\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n/* harmony import */ var _animateOffcanvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../animateOffcanvas */ \"./source/out/sinn/src/js/modules/animateOffcanvas.js\");\n/* harmony import */ var _configuratorDropdown__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./configuratorDropdown */ \"./source/out/sinn/src/js/modules/configurator/configuratorDropdown.js\");\n/* harmony import */ var _configuratorUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./configuratorUtils */ \"./source/out/sinn/src/js/modules/configurator/configuratorUtils.js\");\n/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Configurator\n * @author     Lennart Syre <lennart.syre@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\n\n\n\n\n\n\n\nconst selectors = {\n    triggers: '.c-detail__configure-button, .c-detail__sticky-configure--button, .c-basketquestion .is--configuratortrigger',\n    closers: '.c-configurator__close, .c-configurator__background, .c-configurator__desciption-actions--forward, .c-configurator__options-actions--forward'\n}\n\n// General Variables\nvar configuratorSlider;\nvar configuratorStrap = document.querySelector('.c-configurator__straps-item');\nvar configuratorComponent = document.querySelector('#productConfigurator');\nvar cubicBezier = 'cubicBezier(.40,.05,.20,.90)';\nvar configuratorForward = document.querySelectorAll('.c-configurator__description-actions--forward, .c-configurator__switch-item.is--options');\nvar optionsItemList = document.querySelectorAll('.c-configurator__options-items .c-configurator__options-item input[type=\"checkbox\"]');\nvar armbandTab = document.querySelector('.c-configurator__switch-item.is--wristband');\nvar configuratorBody = document.querySelector('.c-configurator__body');\nvar watchBasePrice = document.articleBasePrice;\nvar setViewportWidth;\n\n//Action Buttons\nconst forwardButton = document.querySelector('.c-configurator__description-actions--forward');\nconst submitButton = document.querySelector('#configuratorBasket');\nconst optionSubmitButton = document.querySelector('#configuratorCart');\n\nif (configuratorStrap) {\n\n    // Set Configurator Slider Variable\n    configuratorSlider = new _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('.js-configuratorslider', {\n        type: 'slider',\n        gap: 0,\n        perView: 5,\n        startAt: 0,\n        focusAt: 'center',\n        animationDuration: 425,\n        animationTimingFunc: 'cubic-bezier(.44,.05,.19,.94)',\n        breakpoints: {\n            1024: {\n                perView: 4\n            },\n            768: {\n                perView: 3\n            },\n            640: {\n                perView: 2\n            }\n        }\n    });\n\n    //Handle The Configurator Overlay\n    (0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_2__.animateOffcanvas)({\n        offCanvas: '.c-configurator',\n        triggers: selectors.triggers,\n        closeButtons: selectors.closers,\n    });\n\n\n    const initializeBacksideImages = function() {\n        let allStrapItems = document.querySelectorAll('.c-configurator__straps-item[data-closings=\"true\"]');\n\n        for (let j = 0; j < allStrapItems.length; j++) {\n            //get Data from input\n            let closureInput = allStrapItems[j].querySelector('.js--closureInfos').value;\n            closureInput = JSON.parse(closureInput);\n\n            //get <picture>-Element \n            let pictureElement = allStrapItems[j].querySelector('picture.is--backwatch'); \n\n            if (pictureElement && closureInput[0]?.image) {\n                //Select first pic from JSON Data\n                let newImageUrl = closureInput[0].image; \n\n                //Set New Picture\n                (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.updatePictureElement)(pictureElement, newImageUrl);\n            }\n        }\n    };\n\n    //Handle specific actions when Configurator is opened\n    const configuratorTrigger = document.querySelectorAll(selectors.triggers);\n    configuratorTrigger.forEach((item) => {\n        item.addEventListener('click', function () {\n            setViewportWidth = window.innerWidth;\n\n            //mount slider\n            configuratorSlider.mount();\n\n            configuratorSlider.go('=0');\n            configuratorBody.classList.add('js--active');\n\n            // Change Forward Btn\n            if (forwardButton.classList.contains('is--not-configurable')) {\n                forwardButton.classList.remove('is--active');\n                optionSubmitButton.classList.add('is--active');\n                submitButton.classList.add('is--active');\n            } else {\n                forwardButton.classList.add('is--active');\n                optionSubmitButton.classList.remove('is--active');\n                submitButton.classList.remove('is--active');\n            }\n\n            initializeBacksideImages();\n\n        });\n    });\n\n\n    // Actions Before Sliding\n    configuratorSlider.on('run.before', function () {\n        var activeSlide = document.querySelector('.c-configurator__strap-list .glide__slide--active');\n        var dropdown = document.querySelector('.c-configurator__description-options .js--conf-dropdown');\n        var dropdownMenu = document.querySelector('.c-configurator__description-options .c-configurator__dropdown--menu');\n\n        // Check If Dropdown Open\n        if (dropdown.classList.contains('js--active')) {\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                targets: dropdownMenu,\n                duration: 300,\n                opacity: 0,\n                easing: cubicBezier,\n                complete: function () {\n                    dropdown.classList.remove('js--active');\n                    dropdownMenu.style.visibility = 'hidden';\n                    dropdownMenu.style.opacity = '0';\n                }\n            })\n        }\n\n        if (activeSlide.classList.contains('js--backwatch')) {\n            (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.switchView)(activeSlide, 'frontview')\n        }\n    });\n\n    // Actions After Sliding\n    configuratorSlider.on('run.after', function () {\n        var activeSlide = document.querySelector('.c-configurator__strap-list .glide__slide--active');\n        let activeStrapImages = activeSlide.querySelectorAll('img');\n        let activeHiddenInput = activeSlide.querySelector('.js--closureInfos');\n        var descText = document.querySelector('.c-configurator__description-text');\n        // Get Data Desc\n        if (activeSlide.dataset.desc) {\n            var desc = activeSlide.dataset.desc;\n\n            // Set Desc Text\n            descText.innerHTML = desc;\n\n            //set alt attribute\n            activeStrapImages.forEach(image => {\n                image.setAttribute('alt', desc);\n            });\n        }\n\n        // build the dropdown with the given data\n        (0,_configuratorDropdown__WEBPACK_IMPORTED_MODULE_3__.buildClaspsDropdown)(activeSlide, activeHiddenInput, watchBasePrice);\n\n        // Check Input Of Active Item\n        activeSlide.querySelector('input[type=\"radio\"]').checked = true;\n\n        // Show updated price\n        if (activeSlide.dataset.price) {\n            (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.updatePrice)(watchBasePrice)\n        }\n\n        // Find out which wristband type is active and assign the matching active state in the tab navigation\n        let activeCategory = activeSlide.getAttribute('data-name');\n\n        //reset active states\n        allCategoryItems.forEach(category => {\n            category.classList.remove('js--active');\n        });\n\n        allCategoryItems.forEach(category => {\n\n            if (category.classList.contains('js--' + activeCategory)) {\n                category.classList.add('js--active');\n                (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.scrollToTab)(category)\n            }\n        });\n    });\n\n\n    // Strap Tab Navigation \n    //trigger Tab Navigation when one of the Categorys is clicked\n    var allCategoryItems = document.querySelectorAll('.c-configurator__category-item');\n    allCategoryItems.forEach(category => {\n        category.addEventListener('click', function() {\n            const allSliderItems = document.querySelectorAll('.c-configurator__straps-item');\n            let categoryName = category.getAttribute('data-name');\n            let elFirstSlide = document.querySelectorAll('.c-configurator__straps-item' + '.is--' + categoryName )[0];\n            let strapIndex = [].indexOf.call(allSliderItems, elFirstSlide);\n            // Jump To First Matching Bracelet\n            configuratorSlider.go('=' + strapIndex);\n        })\n    });\n\n\n    //switch between front and backview of product\n    var viewTriggers = document.querySelectorAll('.c-configurator__description-options--group > span');\n    viewTriggers.forEach((item) => {\n        item.addEventListener('click', function (trigger) {\n            var activeSlide = document.querySelector('.c-configurator__strap-list .glide__slide--active');\n\n            if (trigger.srcElement.classList.contains('c-configurator__description-options--backview')) {\n                if (activeSlide.querySelector('img.is--backwatch')) {\n                    (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.switchView)(activeSlide, 'backview')\n                }\n            } else if (trigger.srcElement.classList.contains('c-configurator__description-options--frontview')) {\n                if (activeSlide.querySelector('img.is--backwatch')) {\n                    (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.switchView)(activeSlide, 'frontview')\n                }\n            }\n        });\n    });\n\n\n    //Proceed to second Step\n    configuratorForward.forEach((item) => {\n        item.addEventListener('click', function () {\n\n            if (!item.classList.contains('is--not-configurable')) {\n\n                (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.updateVariantPriceDifference)()\n\n                setViewportWidth = window.innerWidth;\n\n                if (configuratorComponent.classList.contains('js--firststep')) {\n                    var allItemsButActive = document.querySelectorAll('.c-configurator__straps-item:not(.glide__slide--active)');\n                    var dropdown = document.querySelector('.c-configurator__description-options .js--conf-dropdown');\n                    var dropdownMenu = document.querySelector('.c-configurator__description-options .c-configurator__dropdown--menu');\n                    var activeSlide = document.querySelector('.c-configurator__strap-list .glide__slide--active');\n\n                    // Disable Slider Functionality\n                    configuratorSlider.disable();\n\n                    // Set Current Slide Active Radio\n                    activeSlide.querySelector('input[type=\"radio\"]').checked = true;\n\n                    // Add Second Step Class\n                    configuratorComponent.classList.remove('js--firststep');\n                    configuratorComponent.classList.add('js--secondstep');\n\n                    optionSubmitButton.classList.add('is--active');\n\n                    // Check If Dropdown Open\n                    if (dropdown.classList.contains('js--active')) {\n                        (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                            targets: dropdownMenu,\n                            duration: 300,\n                            opacity: 0,\n                            easing: cubicBezier,\n                            complete: function () {\n                                dropdown.classList.remove('js--active');\n                                dropdownMenu.style.visibility = 'hidden';\n                                dropdownMenu.style.opacity = '0';\n                            }\n                        })\n                    }\n\n                    // Hide All Items But Active\n                    (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                        targets: allItemsButActive,\n                        opacity: '0',\n                        duration: 650,\n                        delay: 0,\n                        easing: 'easeInOutQuad',\n                        complete: function () {\n                            allItemsButActive.forEach((item) => {\n                                item.style.visibility = 'hidden';\n                            });\n                            forwardButton.classList.remove('is--active');\n                            submitButton.classList.add('is--active');\n                        }\n                    });\n\n                    // Hide Slider Controls\n                    (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                        targets: '.c-configurator__straps-controls',\n                        opacity: ['1', '0'],\n                        duration: 650,\n                        delay: 0,\n                        easing: 'easeInOutQuad',\n                        complete: function () {\n                            document.querySelector('.c-configurator__straps-controls').style.display = 'none';\n                        }\n                    });\n\n                    // Hide Wrist Type Tab\n                    (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                        targets: '.c-configurator__bottombar',\n                        opacity: ['1', '0'],\n                        duration: 1000,\n                        delay: 0,\n                        easing: 'easeInOutQuad'\n                    });\n                }\n            }\n\n        });\n    });\n\n\n    //Return to first Step\n    armbandTab.addEventListener('click', function () {\n        setViewportWidth = window.innerWidth;\n\n        if (configuratorComponent.classList.contains('js--secondstep')) {\n            var allItemsButActive = document.querySelectorAll('.c-configurator__straps-item:not(.glide__slide--active)');\n            var dropdown = document.querySelector('.c-configurator__description-options .js--conf-dropdown');\n            var dropdownMenu = document.querySelector('.c-configurator__description-options .c-configurator__dropdown--menu');\n\n            configuratorSlider.enable();\n\n            // Check If Options Checkboxes Exist\n            if (optionsItemList) {\n                optionsItemList.forEach((item) => {\n                    item.checked = false\n                });\n\n                watchBasePrice = document.articleBasePrice;\n                (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.updatePrice)(watchBasePrice);\n            }\n            (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.showOptionsError)(false);\n\n            // Check If Dropdown Open\n            if (dropdown.classList.contains('js--active')) {\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                    targets: dropdownMenu,\n                    duration: 300,\n                    opacity: 0,\n                    easing: cubicBezier,\n                    complete: function () {\n                        dropdown.classList.remove('js--active');\n                        dropdownMenu.style.visibility = 'hidden';\n                        dropdownMenu.style.opacity = '0';\n                    }\n                })\n            }\n\n            // Hide All Items But Active\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                targets: allItemsButActive,\n                opacity: '1',\n                duration: 650,\n                delay: 1000,\n                easing: 'easeInOutQuad',\n                begin: function () {\n                    allItemsButActive.forEach((item) => {\n                        item.style.visibility = null;\n                    });\n                    // Change Forward Btn\n                    forwardButton.classList.add('is--active');\n                    optionSubmitButton.classList.remove('is--active');\n                    submitButton.classList.remove('is--active');\n                }\n            });\n\n            // show Slider Controls\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                targets: '.c-configurator__straps-controls',\n                opacity: ['0', '1'],\n                duration: 650,\n                delay: 1000,\n                easing: 'easeInOutQuad',\n                begin: function () {\n                    document.querySelector('.c-configurator__straps-controls').style.display = null;\n                }\n            });\n\n            // show Wrist Type Tab\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                targets: '.c-configurator__bottombar',\n                opacity: ['0', '1'],\n                duration: 650,\n                delay: 1000,\n                easing: 'easeInOutQuad',\n                begin: function () {\n                    document.querySelector('.c-configurator__bottombar').style.display = null;\n\n                    // Add Second Step Class\n                    configuratorComponent.classList.add('js--firststep');\n                    configuratorComponent.classList.remove('js--secondstep');\n                }\n            });\n        }\n    });\n\n\n    //Handle added Options\n    optionsItemList.forEach((optionCheckbox, i) => {\n        optionCheckbox.addEventListener('change', async (e) => {\n            const result = await (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.fetchVariantData)(watchBasePrice);\n        });\n    });\n\n\n    //Buy the Watch\n    const submitButtons = document.querySelectorAll('#configuratorCart, #configuratorBasket', '#configuratorForward');\n    submitButtons && submitButtons.forEach(submit => {\n        submit.addEventListener('click', _configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.handleProductSubmit);\n    });\n\n    \n    //Close Configurator\n    var configuratorClose = document.querySelector('.c-configurator__closer');\n    configuratorClose && configuratorClose.addEventListener('click', function () {\n        var dropdown = document.querySelector('.c-configurator__description-options .js--conf-dropdown');\n        var dropdownMenu = document.querySelector('.c-configurator__description-options .c-configurator__dropdown--menu');\n        setViewportWidth = window.innerWidth;\n\n        configuratorComponent.classList.remove('js--active');\n\n        // Check If Options Checkboxes Exist\n        if (optionsItemList) {\n            optionsItemList.forEach((item) => {\n                item.checked = false\n            });\n            (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.showOptionsError)(false);\n        }\n\n        // Check If Dropdown Open\n        if (dropdown.classList.contains('js--active')) {\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n                targets: dropdownMenu,\n                duration: 300,\n                opacity: 0,\n                easing: cubicBezier,\n                complete: function () {\n                    dropdown.classList.remove('js--active');\n                    dropdownMenu.style.visibility = 'hidden';\n                    dropdownMenu.style.opacity = '0';\n                }\n            })\n        }\n\n        // // ...\n        if (configuratorComponent.classList.contains('js--firststep')) {\n            setTimeout(function () {\n                configuratorSlider.go('=0');\n                configuratorBody.classList.remove('js--active');\n            }, 1000)\n        }\n\n        // ...\n        if (configuratorComponent.classList.contains('js--secondstep')) {\n            var allItemsButActive = document.querySelectorAll('.c-configurator__straps-item:not(.glide__slide--active)');\n            setTimeout(function(){\n                (0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_4__.resetSlider)(allItemsButActive, configuratorSlider, configuratorComponent);\n                configuratorBody.classList.remove('js--active');\n            },1000)\n        }\n    });\n}\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/configurator/configurator.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/configurator/configuratorDropdown.js": (
    /*!*****************************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/configurator/configuratorDropdown.js ***!
      \*****************************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesConfiguratorConfiguratorDropdownJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   buildClaspsDropdown: () => (/* binding */ buildClaspsDropdown)\n/* harmony export */ });\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n/* harmony import */ var _configuratorUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./configuratorUtils */ \"./source/out/sinn/src/js/modules/configurator/configuratorUtils.js\");\n\n\n\n\nconst buildClaspsDropdown = async (activeSlide, activeHiddenInput, watchBasePrice) => {\n\tconst dropdown = document.querySelector('.c-configurator__description-options .js--conf-dropdown');\n\tconst dropdownMenu = dropdown.querySelector('.c-configurator__dropdown--menu');\n\tconst dropdownActiveValue = dropdown.querySelector('.js--value');\n\tconst parseJSON = (activeHiddenInput && activeHiddenInput.value) ? JSON.parse(activeHiddenInput.value) : null;\n\tconst mandatoryClosure = document.querySelector('.js--single-option-text');\n\n\tlet showDropDown = Boolean(parseJSON && parseJSON.length > 1);\n\n\tif (parseJSON && parseJSON.length > 1) {\n\t\tconst itemsHTML = Object.keys(parseJSON)\n\t\t\t.map((key, index) => {\n\t\t\t\tconst { title, id, price } = parseJSON[key];\n\t\t\t\tconst checked = index === 0 ? 'checked=\"true\"' : '';\n\t\t\t\tconst activeClass = index === 0 ? 'js--active' : '';\n\t\t\t\treturn `<li class=\"c-configurator__dropdown--item ${activeClass}\">\n                  <label><input name=\"closing\" ${checked} type=\"radio\" data-price=\"${price}\" value=\"${id}\">${title}</label>\n                </li>`;\n\t\t\t})\n\t\t\t.join('');\n\n\t\tmandatoryClosure.style.display = 'none';\n\t\tdropdownActiveValue.textContent = parseJSON[0].title;\n\t\tdropdownMenu.innerHTML = itemsHTML;\n\t} else {\n\t\tdropdownMenu.innerHTML = '';\n\n\t\tif (parseJSON) {\n\t\t\tconst singleClosureInput = Object.keys(parseJSON)\n\t\t\t\t.map((key, index) => {\n\t\t\t\t\tconst { title, id, price } = parseJSON[key];\n\t\t\t\t\tconst checked = index === 0 ? 'checked=\"true\"' : '';\n\t\t\t\t\treturn `<label><input name=\"closing\" ${checked} type=\"radio\" data-price=\"${price}\" value=\"${id}\">${title}</label>`;\n\t\t\t\t})\n\t\t\t\t.join('');\n\n\t\t\tmandatoryClosure.innerHTML = singleClosureInput;\n\t\t\tmandatoryClosure.style.display = 'inline-block';\n\t\t} else {\n\t\t\t//console.warn('Keine passende Schließe vorhanden.');\n\t\t\tif (mandatoryClosure) {\n\t\t\t\tmandatoryClosure.innerHTML = '';\n\t\t\t\tmandatoryClosure.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tif (showDropDown) {\n\t\tconst element = document.querySelector('.c-configurator__description-options--group');\n\t\tif (element) {\n\t\t\tconst elementWidth = element.getBoundingClientRect().width;\n\n\t\t\tdropdown.classList.add('is--visible');\n\t\t\tdropdown.classList.remove('is--hidden');\n\t\t\tdropdown.style.width = `calc(100% - ${elementWidth}px)`;\n\t\t}\n\t} else {\n\t\tdropdown.classList.add('is--hidden');\n\t\tdropdown.classList.remove('is--visible');\n\t}\n\n\t// Update price and show matching backside image after selecting clasp\n\tdropdown.addEventListener('change', (e) => matchWristbandImage(e, watchBasePrice));\n}\n\n\n// Show matching back view when clasp dropdown is changed\nconst matchWristbandImage = (e, watchBasePrice) => {\n\t// Get Active Slider element\n\tlet activeWatchSliderItem = document.querySelector('.c-configurator__straps-item.glide__slide--active');\n\tif (!activeWatchSliderItem) return;\n\n\t// Get ID from Selected Clasp\n\tlet clickedClaspId = e.target.value;\n\n\t// Get JSON Data according to selected band\n\tlet activeImages = JSON.parse(activeWatchSliderItem.querySelector('.js--closureInfos').value);\n\tlet claspMatch = activeImages.find(o => o.id === clickedClaspId);\n\n\tif (!claspMatch) return;\n\n\t// Get <picture>-Element for Backside\n\tlet backPictureElement = activeWatchSliderItem.querySelector('picture.is--backwatch');\n\tif (!backPictureElement) return;\n\n\t// Set new Picture\n\t(0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_1__.updatePictureElement)(backPictureElement, claspMatch.image);\n\n\t// update price\n\t(0,_configuratorUtils__WEBPACK_IMPORTED_MODULE_1__.updatePrice)(watchBasePrice);\n};\n\ndocument.addEventListener('DOMContentLoaded', () => {\n\tvar dropdown = document.querySelectorAll('.js--conf-dropdown');\n\tvar cubicBezier = 'cubicBezier(.40, .05, .20, .90)';\n\n\t// Überprüft, ob es Dropdown-Elemente gibt\n\tif (dropdown) {\n\t\tdropdown.forEach((item) => {  // Iteriert über jedes Dropdown-Element\n\t\t\tvar dropdown = item;\n\t\t\tvar parent;\n\n\t\t\t// Überprüft, ob das Dropdown ein aktives Sprach-Dataset hat und setzt es entsprechend\n\t\t\tif (item.querySelector('.js--value') && item.querySelector('.js--value').dataset.language && item.querySelector('.js--value').dataset.language != item.querySelector('.c-configurator__dropdown--item.js--active').dataset.language) {\n\t\t\t\tvar activeLanguage = item.querySelector('.c-configurator__dropdown--item.js--active').dataset.language;\n\t\t\t\tvar activeLanguageText = item.querySelector('.c-configurator__dropdown--item.js--active').innerText;\n\n\t\t\t\titem.querySelector('.js--value').dataset.language = activeLanguage;\n\t\t\t\titem.querySelector('.js--value').innerHTML = activeLanguageText;\n\t\t\t}\n\n\t\t\t// Fügt einen Klick-Event-Listener für den Dropdown-Auslöser hinzu\n\t\t\titem.querySelector('.js--conf-dropdown-trigger').addEventListener('click', function (trigger, event) {\n\t\t\t\tparent = this.parentElement;\n\t\t\t\tparent.classList.add('js--pointerevent');\n\n\t\t\t\t// Überprüft, ob das Dropdown-Menü sichtbar ist und toggelt es\n\t\t\t\tif (!item.querySelector('.c-configurator__dropdown--menu').style.visibility == 'visible' || !parent.classList.contains('js--active')) {\n\t\t\t\t\t// Dropdown geöffnet\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: item.querySelector('.c-configurator__dropdown--menu'),\n\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\t\tbegin: function () {\n\t\t\t\t\t\t\tparent.classList.add('js--active');\n\t\t\t\t\t\t\t// Dropdown wird geöffnet\n\t\t\t\t\t\t\titem.querySelector('.c-configurator__dropdown--menu').style.visibility = 'visible';\n\t\t\t\t\t\t\titem.querySelector('.c-configurator__dropdown--menu').style.opacity = '1';\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\t// Dropdown ist geöffnet\n\t\t\t\t\t\t\tparent.classList.remove('js--pointerevent');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else if (item.querySelector('.c-configurator__dropdown--menu').style.visibility == 'visible' && parent.classList.contains('js--active')) {\n\t\t\t\t\t// Dropdown geschlossen\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: item.querySelector('.c-configurator__dropdown--menu'),\n\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\t// Dropdown wird geschlossen\n\t\t\t\t\t\t\tparent.classList.remove('js--pointerevent', 'js--active');\n\t\t\t\t\t\t\titem.querySelector('.c-configurator__dropdown--menu').style.visibility = 'hidden';\n\t\t\t\t\t\t\titem.querySelector('.c-configurator__dropdown--menu').style.opacity = '0';\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Fügt Klick-Event-Listener für jedes Menüelement im Dropdown hinzu\n\t\t\t\titem.querySelectorAll('.c-configurator__dropdown--item').forEach((menuItem) => {\n\t\t\t\t\tmenuItem.addEventListener('click', function () {\n\t\t\t\t\t\tdropdown.querySelectorAll('.c-configurator__dropdown--item').forEach((removeClass) => {\n\t\t\t\t\t\t\tremoveClass.classList.remove('js--active');\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tvar text = menuItem.innerText;\n\n\t\t\t\t\t\t// Setzt den Text des ausgewählten Menüelements als Wert des Dropdowns\n\t\t\t\t\t\tif (parent.querySelector('.js--value')) {\n\t\t\t\t\t\t\tparent.querySelector('.js--value').innerHTML = text;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Setzt das Sprach-Dataset des ausgewählten Menüelements als Wert des Dropdowns\n\t\t\t\t\t\tif (menuItem.dataset.language) {\n\t\t\t\t\t\t\tvar language = menuItem.dataset.language;\n\t\t\t\t\t\t\tparent.querySelector('.js--value').dataset.language = language;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\t\ttargets: dropdown.querySelector('.c-configurator__dropdown--menu'),\n\t\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\t\t\tbegin: function () {\n\t\t\t\t\t\t\t\t// Dropdown wird nach dem Klick geschlossen (Start)\n\t\t\t\t\t\t\t\tmenuItem.classList.add('js--active');\n\t\t\t\t\t\t\t\tdropdown.querySelector('.c-configurator__dropdown--menu').classList.add('js--pointerevent');\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\t\t// Dropdown wird nach dem Klick geschlossen (Finish)\n\t\t\t\t\t\t\t\tparent.classList.remove('js--pointerevent', 'js--active');\n\t\t\t\t\t\t\t\tdropdown.querySelector('.c-configurator__dropdown--menu').classList.remove('js--pointerevent');\n\t\t\t\t\t\t\t\tdropdown.querySelector('.c-configurator__dropdown--menu').style.visibility = 'hidden';\n\t\t\t\t\t\t\t\tdropdown.querySelector('.c-configurator__dropdown--menu').style.opacity = '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n});\n\n\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/configurator/configuratorDropdown.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/configurator/configuratorUtils.js": (
    /*!**************************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/configurator/configuratorUtils.js ***!
      \**************************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesConfiguratorConfiguratorUtilsJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   fetchVariantData: () => (/* binding */ fetchVariantData),\n/* harmony export */   handleProductSubmit: () => (/* binding */ handleProductSubmit),\n/* harmony export */   resetSlider: () => (/* binding */ resetSlider),\n/* harmony export */   scrollToTab: () => (/* binding */ scrollToTab),\n/* harmony export */   showOptionsError: () => (/* binding */ showOptionsError),\n/* harmony export */   switchView: () => (/* binding */ switchView),\n/* harmony export */   updatePictureElement: () => (/* binding */ updatePictureElement),\n/* harmony export */   updatePrice: () => (/* binding */ updatePrice),\n/* harmony export */   updateVariantPriceDifference: () => (/* binding */ updateVariantPriceDifference)\n/* harmony export */ });\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n/* harmony import */ var _minicartflapper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../minicartflapper */ \"./source/out/sinn/src/js/modules/minicartflapper.js\");\n/* harmony import */ var _animateOffcanvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../animateOffcanvas */ \"./source/out/sinn/src/js/modules/animateOffcanvas.js\");\n/* harmony import */ var _configurator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./configurator */ \"./source/out/sinn/src/js/modules/configurator/configurator.js\");\n/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Configurator Frontend utilities \n * @author     Lennart Syre <lennart.syre@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\n\n\n\n\nconst scrollToTab = function (tab) {\n    tab.scrollIntoView({\n        behavior: 'smooth',\n        inline: 'center',\n        block: 'nearest'\n    });\n}\n\nconst switchView = function (activeSlide, view) {\n    var frontView = document.querySelector('.c-configurator__description-options--frontview');\n    var backView = document.querySelector('.c-configurator__description-options--backview');\n    var watchBody = document.querySelector('.c-configurator__watch');\n\n    if (view === 'backview') {\n        // Trigger Classes\n        frontView.classList.add('js--active');\n        backView.classList.remove('js--active');\n\n        // Active Slide Classes\n        activeSlide.classList.remove('js--frontwatch');\n        activeSlide.classList.add('js--backwatch');\n\n        // Watch Body Classes\n        watchBody.classList.remove('js--frontwatch');\n        watchBody.classList.remove('js--active');\n        watchBody.classList.add('js--backwatch');\n        //set image classes\n        activeSlide.querySelector('img.is--backwatch').classList.add('js--active');\n        activeSlide.querySelector('img.is--frontwatch').classList.remove('js--active');\n    } else if (view === 'frontview') {\n        // Trigger Classes\n        frontView.classList.remove('js--active');\n        backView.classList.add('js--active');\n\n        //active slide classes\n        activeSlide.classList.remove('js--backwatch');\n        activeSlide.classList.add('js--frontwatch');\n\n        // Watch Body Classes\n        watchBody.classList.remove('js--backwatch');\n        watchBody.classList.add('js--active');\n        watchBody.classList.add('js--frontwatch');\n\n        //set Image classes\n        activeSlide.querySelector('img.is--backwatch').classList.remove('js--active')\n        activeSlide.querySelector('img.is--frontwatch').classList.add('js--active');\n    }\n}\n\nconst showOptionsError = (show) => {\n    const visibility = (show ? 'visible' : 'hidden');\n    const opacity = (show ? '1' : '0');\n    const display = (show ? 'block' : 'none');\n    const messages = document.getElementsByClassName('js--optionserror');\n    for (let i = 0; i < messages.length; i++) {\n        const message = messages[i];\n        message.style.display = display;\n        message.style.visibility = visibility;\n        message.style.opacity = opacity;\n    }\n    // show/hide OrderButton\n    const cartButtons = document.getElementsByClassName('c-configurator__options-actions--forward');\n    for (let i = 0; i < cartButtons.length; i++) {\n        const button = cartButtons[i];\n        button.style.visibility = (show ? 'hidden' : 'visible');\n        button.style.opacity = (show ? '0' : '1');\n    }\n\n}\n\nconst getOptionsJson = () => {\n    var options = document.querySelectorAll('.configurator-options');\n\n    if (options.length > 0) {\n        var chosenOptions = {};\n\n        for (var i = 0; i < options.length; i++) {\n            if (options[i].checked === true) {\n                chosenOptions[options[i].name] = 1;\n            }\n        }\n        return JSON.stringify(chosenOptions);\n    }\n    return false;\n}\n\n// Helper-Funktion for updating <source>- and <img>-Tags\nconst updatePictureElement = (pictureElement, newImageUrl) => {\n    if (!pictureElement || !newImageUrl) return;\n\n    // Update <source>-Tags in <picture>-Element \n    let sources = pictureElement.querySelectorAll('source');\n    sources.forEach(source => {\n        let originalSrcset = source.getAttribute('srcset');\n        if (!originalSrcset) return;\n\n        // Split original srcSet\n        const updatedSrcset = originalSrcset\n            .split(',')\n            .map(entry => {\n                // extract ?-parameter and \"1x\", \"2x\", \"3x\"\n                const sizeInfo = entry.match(/(\\?.*?)\\s(\\d+x)/); \n                if (!sizeInfo) return '';\n\n                // Extract Dimensions & Scaling\n                const [_, sizeParams, scale] = sizeInfo; \n\n                // change only URL and keep the other parameters \n                return `${newImageUrl}${sizeParams} ${scale}`;\n            })\n            .join(',');\n\n        // update srcset in <source>-Tag\n        source.setAttribute('srcset', updatedSrcset);\n    });\n\n    // update fallback <img>-Tag \n    let imgElement = pictureElement.querySelector('img');\n    if (imgElement) {\n        const fallbackSrc = `${newImageUrl}?width=255&height=400&quality=100`; // Beispiel für die kleinste Größe\n        imgElement.setAttribute('src', fallbackSrc);\n    }\n};\n\n\nconst fetchVariantData = async (watchBasePrice) => {\n    const url = document.location.origin;\n\n    const chosenOptions = getOptionsJson();\n    // don't fetch, if no options were chosen\n    if (undefined === chosenOptions || chosenOptions.length <= 2) {\n        showOptionsError(false);\n        // reset to default\n        watchBasePrice = document.articleBasePrice;\n        updatePrice(watchBasePrice);\n        return Promise.resolve(false)\n    }\n    const postData = new URLSearchParams({\n        \"lang\": document.oxid.languageId,\n        \"fnc\": \"getVariantArticlePropertiesByOptions\",\n        \"watchId\": document.querySelector('input[name=\"anid\"]').value,\n        \"chosenOptions\": chosenOptions\n    });\n\n    const response = await fetch(url, {\n        method: 'POST',\n        headers: {\n            'Accept': 'application/json',\n            'Content-Type': 'application/x-www-form-urlencoded'\n        },\n        body: postData\n    });\n    const result = await response.json();\n    const availableVariant = result.availableVariant;\n\n    if (availableVariant.oxid) {\n        watchBasePrice = availableVariant.oxprice;\n        showOptionsError(false);\n    } else {\n        watchBasePrice = document.articleBasePrice;\n        console.warn(\"no option available\");\n        showOptionsError(true);\n    }\n\n    updatePrice(watchBasePrice);\n\n}\n\nconst updateVariantPriceDifference = async () => {\n    const basePrice = document.articleBasePrice;\n    const url = document.location.origin;\n    const options = document.querySelectorAll('.configurator-options');\n    let chosenOptions, priceDifference;\n\n    for (let option of options) {\n        chosenOptions = JSON.parse('{\"' + option.name + '\": 1}');\n        let postData = new URLSearchParams({\n            \"lang\": document.oxid.languageId,\n            \"fnc\": \"getVariantArticlePropertiesByOptions\",\n            \"watchId\": document.querySelector('input[name=\"anid\"]').value,\n            \"chosenOptions\": JSON.stringify(chosenOptions)\n        });\n\n        let response = await fetch(url, {\n            method: 'POST',\n            headers: {\n                'Accept': 'application/json',\n                'Content-Type': 'application/x-www-form-urlencoded'\n            },\n            body: postData\n        });\n\n        let result = await response.json();\n        let availableVariant = result.availableVariant;\n\n        priceDifference = availableVariant.oxprice - basePrice;\n        if (Number.isNaN(priceDifference)) {\n            priceDifference = 0;\n        }\n\n        let optionParent = option.parentNode;\n        let optionTextElement = optionParent.querySelector('.e-link');\n\n        // Store original text if not already stored\n        if (!optionTextElement.dataset.originalText) {\n            optionTextElement.dataset.originalText = optionTextElement.innerText;\n        }\n\n        // Update text with original text and price difference\n        optionTextElement.innerText = optionTextElement.dataset.originalText + \" (+\" + priceDifference.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + \" \" + document.oxid.shopCurrencySign + \")\";\n    }\n}\n\nconst updatePrice = (watchBasePrice) => {\n    var priceText = document.querySelectorAll('.c-configurator__description-price--wrap');\n\n    let basePrice = watchBasePrice;\n\n    let selectedBand = document.querySelector('input[name=\"selectedWatch\"]:checked');\n    let bandPrice = null !== selectedBand ? selectedBand.parentNode.dataset.price : 0;\n\n    let selectedClosing = document.querySelector(\"input[name='closing']:checked\");\n    let closingPrice = null !== selectedClosing ? selectedClosing.dataset.price : 0;\n\n    let newPrice = parseFloat(basePrice) + parseFloat(bandPrice) + parseFloat(closingPrice);\n    priceText.forEach(element => {\n        element.innerHTML = newPrice.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + \" \" + document.oxid.shopCurrencySign;\n    });\n}\n\nconst resetSlider = function (allItemsButActive, configuratorSlider, configuratorComponent) {\n    configuratorSlider.enable();\n    configuratorSlider.go('=0');\n\n    // Reset Styles\n    configuratorComponent.classList.remove('js--secondstep');\n    configuratorComponent.classList.add('js--firststep');\n    allItemsButActive.forEach((item) => {\n        item.style.visibility = null;\n        item.style.opacity = 1;\n    });\n    document.querySelector('.c-configurator__options').style = null;\n    document.querySelector('.c-configurator__bottombar').style = null;\n    document.querySelector('.c-configurator__straps-controls').style = null;\n    document.querySelector('.c-configurator__body').style = null;\n    document.querySelector('.c-configurator__footer').style = null;\n}\n\nconst handleProductSubmit = function () {\n    // necessary data for request\n    var ajaxTarget = document.getElementById('ajaxTarget').value;\n    var sessionToken = document.getElementById('sessionToken').value;\n    var minibasketContainer = document.querySelector('.c-minibasket__wrapper');\n    var basketCounter = document.getElementById('basketCounter');\n\n    var dropdown = document.querySelector('.c-configurator__description-options .js--conf-dropdown');\n    var dropdownMenu = document.querySelector('.c-configurator__description-options .c-configurator__dropdown--menu');\n    var cartComponent = document.querySelector('.c-cart');\n    var cartTriggerMobile = document.querySelector('.c-mobilemenu__item.is--cart');\n    var configuratorLoader = document.querySelector('.c-configurator__loader');\n\n\n    configuratorLoader.style.display = 'flex';\n    configuratorLoader.classList.add('js--active');\n\n    (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        targets: configuratorLoader,\n        opacity: ['0', '1'],\n        duration: 250,\n        easing: _configurator__WEBPACK_IMPORTED_MODULE_3__.cubicBezier\n    })\n\n    let closing;\n    if (document.querySelector(\"input[name='closing']:checked\")) {\n        closing = document.querySelector(\"input[name='closing']:checked\").value ? document.querySelector(\"input[name='closing']:checked\").value : \"\";\n    }\n    let options = getOptionsJson();\n\n    var watchDetails = {\n        watchId: document.querySelector('input[name=\"anid\"]').value,\n        selectedBand: document.querySelector('input[name=\"selectedWatch\"]:checked').value,\n        selectedClosing: closing,\n        oldId: document.querySelector('input[name=\"oldid\"]').value\n    }\n\n    // Check whether options are selected and add them to \"watchDetails\".\n    if (options.length > 0) {\n        watchDetails.chosenOptions = options\n    }\n\n    // Put watch in cart\n    $.ajax({\n        url: ajaxTarget + \"cl=basket&fnc=addConfiguratedArticleToBasket&stoken=\" + sessionToken,\n        method: \"POST\",\n        data: watchDetails,\n        success: function (ret) {\n            minibasketContainer.innerHTML = ret;\n            basketCounter.innerText = document.getElementsByClassName('c-minibasket__item').length;\n\n            if (dropdown.classList.contains('js--active')) {\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: dropdownMenu,\n                    height: '0',\n                    duration: 650,\n                    easing: _configurator__WEBPACK_IMPORTED_MODULE_3__.cubicBezier,\n                    complete: function () {\n                        dropdown.classList.remove('js--active');\n                        dropdownMenu.style.visibility = 'hidden';\n                        dropdownMenu.style.opacity = '0';\n                    }\n                })\n            }\n\n            if (_configurator__WEBPACK_IMPORTED_MODULE_3__.configuratorComponent.classList.contains('js--secondstep') || document.querySelector('#configuratorForward').classList.contains('is--not-configurable', 'c-configurator__options-actions--forward')) {\n                var allItemsButActive = document.querySelectorAll('.c-configurator__straps-item:not(.glide__slide--active)');\n\n                //reset styles after animation\n                setTimeout(() => {\n                    // Configurator Finish\n                    configuratorLoader.classList.remove('js--active');\n                    configuratorLoader.style.display = 'none';\n                    configuratorLoader.style.opacity = '0';\n\n                    // Change Forward Btn\n                    _configurator__WEBPACK_IMPORTED_MODULE_3__.forwardButton.classList.remove('is--active');\n                    _configurator__WEBPACK_IMPORTED_MODULE_3__.optionSubmitButton.classList.add('is--active');\n\n                    // Add active class to login layer\n                    cartComponent.classList.add('js--active');\n                    cartTriggerMobile.classList.add('js--active');\n\n                    //open minibasket\n                    let openModal = document.querySelector('.c-modal.js--openMinibasket');\n                    if (openModal) {\n                        (0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_2__.animateOffcanvas)({\n                            offCanvas: '.c-cart',\n                            triggers: '.c-function.is--basket .c-function__label, .c-mobilemenu__item.is--cart',\n                            closeButtons: '.c-cart__close, .c-cart__background',\n                            callSelf: true\n                        });\n                    }\n\n                    resetSlider(allItemsButActive, _configurator__WEBPACK_IMPORTED_MODULE_3__.configuratorSlider, _configurator__WEBPACK_IMPORTED_MODULE_3__.configuratorComponent);\n                }, 1000);\n            }\n\n            // Make minibasket flapper function available after ajax call:\n            (0,_minicartflapper__WEBPACK_IMPORTED_MODULE_1__.addFlapper)();\n            location.reload();\n        }\n    });\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/configurator/configuratorUtils.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/contactform.js": (
    /*!*******************************************************!*\
      !*** ./source/out/sinn/src/js/modules/contactform.js ***!
      \*******************************************************/
    /***/
    function sourceOutSinnSrcJsModulesContactformJs() {
      eval("var contactform \t\t\t\t= document.querySelector('.c-contactform');\nvar newsletter \t\t\t\t\t= document.querySelector('.c-contactform.is--newsletter');\nlet uploadField \t\t\t\t= document.getElementById('contactFile');\nconst contactRecipientSelect \t= document.getElementById('contactRecipientSelect');\nconst contactSubjectField \t\t= document.getElementById('contactSubject');\nconst contactSubjectSelect \t\t= document.getElementById('contactSubjectSelect');\nconst showForReplacementForm \t= document.querySelectorAll('.show--replacement');\nconst hideForReturnForm \t\t= document.querySelectorAll('.hide--return');\nconst showForReturnForm \t\t= document.querySelectorAll('.show--return');\n\nconst handleRecipientField = () => {\n\tif (contactRecipientSelect.value === \"Vertrieb\") {\n\t\tcontactSubjectField.classList.add('is--hidden');\n\t\tshowForReturnForm.forEach(element => {\n\t\t\telement.classList.add('is--hidden');\n\t\t});\n\t\tshowForReplacementForm.forEach(element => {\n\t\t\telement.classList.add('is--hidden');\n\t\t});\n\t} else if (contactRecipientSelect.value === \"Kundendienst\") {\n\t\tcontactSubjectField.classList.remove('is--hidden');\n\t}\n}\n\nconst handleSubjectField = () => {\t\n\t\n\tif (contactSubjectSelect.value === \"subject_message\") {\n\t\tshowForReplacementForm.forEach(element => {\n\t\t\telement.classList.add('is--hidden');\n\t\t});\n\n\t\tshowForReturnForm.forEach(element => {\n\t\t\telement.classList.add('is--hidden');\n\t\t});\n\n\t\thideForReturnForm.forEach(element => {\n\t\t\telement.classList.remove('is--hidden');\n\t\t});\n\n\t} else if (contactSubjectSelect.value === \"subject_replacement\") {\n\t\tshowForReturnForm.forEach(element => {\n\t\t\telement.classList.add('is--hidden');\n\t\t});\n\n\t\thideForReturnForm.forEach(element => {\n\t\t\telement.classList.remove('is--hidden');\n\t\t});\n\n\t\tshowForReplacementForm.forEach(element => {\n\t\t\telement.classList.remove('is--hidden');\n\t\t});\n\n\t} else if (contactSubjectSelect.value === \"subject_return\") {\n\t\tshowForReplacementForm.forEach(element => {\n\t\t\telement.classList.add('is--hidden');\n\t\t});\n\n\t\thideForReturnForm.forEach(element => {\n\t\t\telement.classList.add('is--hidden');\n\t\t});\n\n\t\tshowForReturnForm.forEach(element => {\n\t\t\telement.classList.remove('is--hidden');\n\t\t});\n\t}\n\t\n}\n\nconst disableFields = () => {\n\tconst allHiddenFormGroups \t= document.querySelectorAll('.e-form__row.is--hidden input, .e-form__row.is--hidden select');\n\tconst allShownFormGroups \t= document.querySelectorAll('.e-form__row:not(.is--hidden) input, .e-form__row:not(.is--hidden) select');\n\n\tallHiddenFormGroups.forEach(group => {\n\t\tgroup.disabled = true;\n\t});\n\n\tallShownFormGroups.forEach(group => {\n\t\tgroup.disabled = false;\n\t});\n}\n\nif (contactform) {\n\n\tcontactRecipientSelect.addEventListener(\"change\", (e) => {\n\t\thandleRecipientField();\n\t\tdisableFields();\n\t});\n\n\tcontactSubjectSelect.addEventListener(\"change\", (e) => {\n\t\thandleSubjectField();\n\t\tdisableFields();\n\t});\n\n\tcontactform.addEventListener('submit', function (event) {\n\t\tif (newsletter) {\n\t\t\tnewsletter.reset();\n\t\t}\n\t});\n}\n\nif (uploadField) {\n\n\tuploadField.addEventListener(\"change\", (e) => {\n\t\tcheckFileFormat();\n\t});\n\n\tconst checkFileFormat = () => {\n\t\tconst fileTypes = [\"jpg\", \"pdf\", \"rtf\", \"txt\"]\n\t\tconst alert = document.querySelector(\".is--upload\").querySelector(\".e-alert.e-alert__danger\");\n\t\tfor (var i = 0; i < uploadField.files.length; i++) {\n\t\t\tvar extension = uploadField.files[i].name.substr(uploadField.files[i].name.lastIndexOf('.') + 1);\n\t\t\tif (!fileTypes.includes(extension )) {\n\t\t\t\tuploadField.value = \"\";\n\t\t\t\talert.querySelector('p').innerText = oWave.i18n.DOT_WRONG_FILETYPE;\n\t\t\t\talert.style.display = \"block\";\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (uploadField.files[i].size > 5000000) {\n\t\t\t\tuploadField.value = \"\";\n\t\t\t\talert.querySelector('p').innerText = oWave.i18n.DOT_LARGE_FILE;\n\t\t\t\talert.style.display = \"block\";\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\talert.querySelector('p').innerText = \"\";\n\t\talert.style.display = \"none\";\n\t\treturn true;\n\t}\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/contactform.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/contentslider.js": (
    /*!*********************************************************!*\
      !*** ./source/out/sinn/src/js/modules/contentslider.js ***!
      \*********************************************************/
    /***/
    function sourceOutSinnSrcJsModulesContentsliderJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @glidejs/glide */ \"./node_modules/@glidejs/glide/dist/glide.esm.js\");\n/* harmony import */ var letterizejs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! letterizejs */ \"./node_modules/letterizejs/lib/letterize.js\");\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n\n\n\n\nif (document.querySelector('.js-contentslider')) {\n\n\tlet contentslider;\n\tlet previousIndex = 0;\n\n\tvar Mutator = function () {\n\t\treturn {\n\t\t\tmodify(translate) {\n\t\t\t\tif (!contentslider) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tconst i = contentslider.index;\n\t\t\t\tconst prevI = previousIndex;\n\n\t\t\t\tpreviousIndex = i;\n\n\t\t\t\tif (i === prevI) {\n\t\t\t\t\treturn 0;\n\t\t\t\t} else if ((Math.abs(i - prevI) === 1) && i > prevI || (i === 0 && prevI === contentslider._c.Html.slides.length - 1)) {\n\t\t\t\t\tcontentslider._c.Html.wrapper.classList.remove('glide__slides--reverse');\n\t\t\t\t} else {\n\t\t\t\t\tcontentslider._c.Html.wrapper.classList.add('glide__slides--reverse');\n\t\t\t\t}\n\n\t\t\t\tlet contentElems = document.querySelectorAll('.c-contentslider .glide__slide:not(.glide__slide--clone)');\n\n\t\t\t\tArray.from(contentElems).forEach(function (elem) {\n\t\t\t\t\telem.classList.remove('glide__slide--last');\n\t\t\t\t\tcontentElems[prevI].classList.add('glide__slide--last')\n\t\t\t\t});\n\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tcontentslider = new _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('.js-contentslider', {\n\t\ttype: 'carousel',\n\t\tgap: 0,\n\t\tanimationDuration: 1500,\n\t\tanimationTimingFunc: 'cubic-bezier(.44,.05,.19,.94)'\n\t}).mount();\n\n\tcontentslider.on('run.after', function () {\n\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n\t\t\ttargets: document.querySelectorAll('.c-contentslider .glide__slide--active .c-contentslider__slide-headline'),\n\t\t\ttranslateY: ['2.5vw', '0'],\n\t\t\topacity: ['0', '1'],\n\t\t\tdelay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].stagger(33,\n\t\t\t\t{\n\t\t\t\t\tstart: 0\n\t\t\t\t}\n\t\t\t),\n\t\t\tduration: 1500,\n\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t});\n\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n\t\t\ttargets: document.querySelectorAll('.c-contentslider .glide__slide--active .c-contentslider__slide-content'),\n\t\t\ttranslateY: ['5vw', '0'],\n\t\t\topacity: ['0', '1'],\n\t\t\tdelay: 150,\n\t\t\tduration: 1500,\n\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t});\n\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n\t\t\ttargets: document.querySelectorAll('.c-contentslider .glide__slide--active .c-contentslider__slide-link'),\n\t\t\ttranslateY: ['5vw', '0'],\n\t\t\topacity: ['0', '1'],\n\t\t\tdelay: 300,\n\t\t\tduration: 1500,\n\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t});\n\t});\n\n\tcontentslider.on('run.before', function () {\n\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n\t\t\ttargets: document.querySelectorAll('.c-contentslider .glide__slide--active .c-contentslider__slide-headline'),\n\t\t\topacity: ['1', '0'],\n\t\t\ttranslateY: ['0', '-5vw'],\n\t\t\tduration: 1500,\n\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t});\n\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n\t\t\ttargets: document.querySelectorAll('.c-contentslider .glide__slide--active .c-contentslider__slide-content'),\n\t\t\topacity: ['1', '0'],\n\t\t\ttranslateY: ['0', '-5vw'],\n\t\t\tdelay: 150,\n\t\t\tduration: 1500,\n\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t});\n\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n\t\t\ttargets: document.querySelectorAll('.c-contentslider .glide__slide--active .c-contentslider__slide-link'),\n\t\t\topacity: ['1', '0'],\n\t\t\ttranslateY: ['0', '-5vw'],\n\t\t\tdelay: 300,\n\t\t\tduration: 1500,\n\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t});\n\t});\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/contentslider.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/countryListNotice.js": (
    /*!*************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/countryListNotice.js ***!
      \*************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesCountryListNoticeJs() {
      eval("document.addEventListener('DOMContentLoaded', function () {\n    initDealerNotice();\n});\nfunction initDealerNotice() {\n    let dealerLinks = [\n        '/haendlerliste',\n        '/en/haendlerliste',\n        '/fr/haendlerliste',\n    ];\n    let words = [\n        'here.',\n        'Hier',\n        'ici',\n    ];\n    let preparedLinkElements = document.querySelectorAll('.label-notice-link');\n\n    preparedLinkElements.forEach((preparedLinkElement) => {\n        if (dealerLinks[selectedLanguage] && selectedLanguage !== undefined) {\n            preparedLinkElement.style.fontSize = \"smaller\";\n            let preparedHtml = preparedLinkElement.innerHTML;\n\n            words.forEach((word) => {\n                let regex = new RegExp(`(${word})`, 'g');\n                if (preparedHtml.match(regex)) {\n                    let anchor = `<a href=\"${dealerLinks[selectedLanguage]}\" target=\"_blank\" style=\"font-size: inherit; text-decoration: none; color: inherit;\">\n                                    <span style=\"text-decoration: underline;\">${word}</span>\n                                  </a>`;\n                    preparedHtml = preparedHtml.replace(regex, anchor);\n                }\n            });\n\n            preparedLinkElement.innerHTML = preparedHtml;\n        }\n    });\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/countryListNotice.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/datenschutzCBVisibilityControl.js": (
    /*!**************************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/datenschutzCBVisibilityControl.js ***!
      \**************************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesDatenschutzCBVisibilityControlJs() {
      eval("document.addEventListener('DOMContentLoaded', function() {\n\n    // Newsletter\n    let btnSubscribe = document.getElementById('newsletterSubscribeOn');\n    let btnUnsubscribe = document.getElementById('newsletterSubscribeOff');\n    let divDatenschutz = document.getElementById('div-datenschutz');\n    let cbDatenschutzNewsletter = document.getElementById('gdproptin_newsletter');\n\n    // Account\n    let selectedOption = document.getElementById('status');\n    let hideOnUnsub = document.querySelectorAll('.hide-on-unsub');\n    let cbDatenschutzAccount = document.getElementById('gdproptin_accountnewsletter');\n\n    function toggleNewsletterDatenschutz() {\n        if (btnUnsubscribe.checked) {\n            divDatenschutz.classList.add('hidden');\n            cbDatenschutzNewsletter.removeAttribute('required');\n        } else {\n            divDatenschutz.classList.remove('hidden');\n            cbDatenschutzNewsletter.setAttribute('required', 'required');\n        }\n    }\n\n    function toggleAccountDatenschutz() {\n        if (selectedOption.value == 0) {\n            modifyVisibility(hideOnUnsub, true);\n            cbDatenschutzAccount.removeAttribute('required');\n        } else {\n            modifyVisibility(hideOnUnsub, false);\n            cbDatenschutzAccount.setAttribute('required', 'required');\n        }\n    }\n\n    function modifyVisibility(elements, visible) {\n        elements.forEach(function(element) {\n            if (visible) {\n                element.classList.add('hidden');\n            } else {\n                element.classList.remove('hidden');\n            }\n        });\n    }\n\n    if (btnSubscribe && btnUnsubscribe) {\n        btnSubscribe.addEventListener('change', toggleNewsletterDatenschutz);\n        btnUnsubscribe.addEventListener('change', toggleNewsletterDatenschutz);\n\n        toggleNewsletterDatenschutz();\n    }\n\n    if (selectedOption) {\n        selectedOption.addEventListener('change', toggleAccountDatenschutz);\n        toggleAccountDatenschutz();\n    }\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/datenschutzCBVisibilityControl.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/dropdown.js": (
    /*!****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/dropdown.js ***!
      \****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesDropdownJs() {
      eval("/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Einfache Dropdown-Elemente, wie z.B. das Sortieren-Dropdown in Produktlisten\n * @author     Lennart Syre <lennart.syre@dotfly.de, anna.morawe@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\ndocument.addEventListener('DOMContentLoaded', function() {\n\tinitializeDropdowns();\n});\n\nfunction initializeDropdowns() {\n\tlet dropdownTriggers = document.querySelectorAll('.js--dropdown-trigger');\n\n\tif (dropdownTriggers.length === 0) {\n\t\treturn; // Keine Dropdowns vorhanden, nichts zu tun\n\t}\n\n\tdropdownTriggers.forEach(function(trigger) {\n\t\ttrigger.addEventListener('click', function(event) {\n\t\t\tevent.stopPropagation();\n\t\t\tlet dropdownContainer = trigger.closest('.e-dropdown');\n\t\t\tdropdownContainer.classList.toggle('js--active');\n\t\t\tcloseOtherDropdowns(dropdownContainer);\n\t\t});\n\t});\n\n\tdocument.addEventListener('click', function() {\n\t\tcloseAllDropdowns();\n\t});\n}\n\nfunction closeAllDropdowns() {\n\tlet dropdownContainers = document.querySelectorAll('.e-dropdown');\n\tdropdownContainers.forEach(function(container) {\n\t\tcontainer.classList.remove('js--active');\n\t});\n}\n\nfunction closeOtherDropdowns(currentDropdown) {\n\tlet dropdownContainers = document.querySelectorAll('.e-dropdown');\n\tdropdownContainers.forEach(function(container) {\n\t\tif (container !== currentDropdown) {\n\t\t\tcontainer.classList.remove('js--active');\n\t\t}\n\t});\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/dropdown.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/etracker.js": (
    /*!****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/etracker.js ***!
      \****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesEtrackerJs() {
      eval("document.addEventListener('DOMContentLoaded', _etrackerOnReady);\n\nfunction _etrackerOnReady() {\n    initEvents();\n}\n\n// Checks if order placed and sends it\nfunction tryOrderEvent() {\n    try {\n        if(thankYouPage) {\n            const etOrder = getOrderDetails();\n            sendOrderEvent(etOrder);\n        }\n    } catch (e) {\n        // console.log(\"Etracker can not be initialised\");\n    }\n}\n\nfunction getCookieValue(a) {\n    const b = document.cookie.match('(^|;)\\\\s*' + a + '\\\\s*=\\\\s*([^;]+)');\n    return b ? b.pop() : '';\n}\n\nfunction justLoggedIn() {\n    const justLoggedInValue = getCookieValue(\"justLoggedIn\");\n    const justLoggedOutValue = getCookieValue(\"justLoggedOut\");\n\n    if (justLoggedInValue == 1) {\n        try {\n            _etracker.sendEvent(new et_AuthenticationSuccessEvent('Login', '',));\n        } catch (e) {\n            // console.log(\"Event send failed!\");\n        } finally {\n            document.cookie = \"justLoggedIn=0; max-age=0; path=/;\";\n        }\n    }\n\n    if (justLoggedOutValue == 1) {\n        try {\n            _etracker.sendEvent(new et_AuthenticationLogoutEvent('Logout', '',));\n        } catch (e) {\n            // console.log(\"Event send failed!\");\n        } finally {\n            document.cookie = \"justLoggedOut=0; max-age=0; path=/;\";\n        }\n    }\n}\n\nfunction initEvents() {\n    if (!isCatalogArticle) {\n        if (!archivUhr  && !newItemAdded) {\n            etSendViewProductEvent();\n        } else if (newItemAdded) {\n            if (isWatchConfigured()) {\n                etSendInsertToBasketConfiguredEvent();\n            } else {\n                etSendInsertToBasketDefaultEvent();\n            }\n        }\n    }\n    tryOrderEvent();\n    justLoggedIn();\n}\n\n// viewProduct Event\nfunction etSendViewProductEvent() {\n        try {\n            etCommerce.sendEvent('viewProduct', baseEtProduct);\n        } catch (e) {\n            // console.error(\"Error sending eTracker event:\", error);\n        }\n}\n\nfunction isWatchConfigured() {\n    return ((lastAddedWatch && lastAddedWatch.variants && etDirectToBasketObject && etDirectToBasketObject.variants) &&\n        ((lastAddedWatch.variants.var1 !== undefined && etDirectToBasketObject.variants.var1 !== undefined && lastAddedWatch.variants.var1 !== etDirectToBasketObject.variants.var1) ||\n            (lastAddedWatch.variants.var2 !== undefined && etDirectToBasketObject.variants.var2 !== undefined && lastAddedWatch.variants.var2 !== etDirectToBasketObject.variants.var2) ||\n            (lastAddedWatch.variants.var3 !== undefined && lastAddedWatch.variants.var3 !== etDirectToBasketObject.variants.var3) ||\n            (lastAddedWatch.variants.var4 !== undefined && lastAddedWatch.variants.var4 !== etDirectToBasketObject.variants.var4) ||\n            (lastAddedWatch.variants.var5 !== undefined && lastAddedWatch.variants.var5 !== etDirectToBasketObject.variants.var5)));\n}\n\nfunction etSendInsertToBasketConfiguredEvent() {\n    let etProduct = getWatchVariants();\n    etProduct.category = [etProduct.category];\n\n    etProduct = getCleanEtProduct(etProduct);\n\n    try {\n        etCommerce.sendEvent('insertToBasket', etProduct, 1);\n        if (etProduct.variants && etProduct.variants.var1 !== undefined) {\n            _etracker.sendEvent(new et_UserDefinedEvent('Armband', 'Konfigurator', 'Auswahl', etProduct.variants.var1));\n        }\n        if (etProduct.variants && etProduct.variants.var2 !== undefined) {\n            _etracker.sendEvent(new et_UserDefinedEvent('Schließen', 'Konfigurator', 'Auswahl', etProduct.variants.var2));\n        }\n        if (etProduct.variants && etProduct.variants.var3 !== undefined) {\n            _etracker.sendEvent(new et_UserDefinedEvent('Optionen', 'Konfigurator', 'Auswahl', etProduct.variants.var3));\n        }\n        if (etProduct.variants && etProduct.variants.var4 !== undefined) {\n            _etracker.sendEvent(new et_UserDefinedEvent('Optionen', 'Konfigurator', 'Auswahl', etProduct.variants.var4));\n        }\n        if (etProduct.variants && etProduct.variants.var5 !== undefined) {\n            _etracker.sendEvent(new et_UserDefinedEvent('Optionen', 'Konfigurator', 'Auswahl', etProduct.variants.var5));\n        }\n    } catch (e) {\n        // console.error(\"Error sending eTracker event:\", e);\n    }\n}\n\nfunction getWatchVariants() {\n    let etProduct = { ...lastAddedWatch };\n    if (lastAddedWatch.variants) {\n        etProduct.variants = {};\n\n        if (lastAddedWatch.variants.var1) {\n            etProduct.variants.var1 = lastAddedWatch.variants.var1;\n        }\n        if (lastAddedWatch.variants.var2) {\n            etProduct.variants.var2 = lastAddedWatch.variants.var2;\n        }\n        if (lastAddedWatch.variants.var3) {\n            etProduct.variants.var3 = lastAddedWatch.variants.var3;\n        }\n        if (lastAddedWatch.variants.var4) {\n            etProduct.variants.var4 = lastAddedWatch.variants.var4;\n        }\n        if (lastAddedWatch.variants.var5) {\n            etProduct.variants.var5 = lastAddedWatch.variants.var5;\n        }\n    }\n    return etProduct;\n}\n\nfunction etSendInsertToBasketDefaultEvent() {\n    let etProduct = { ...baseEtProduct };\n\n    // Initialize and add variants if they exist in etDirectToBasketObject\n    if(!fetchBaseEtProduct.isSetWatch) {\n        etProduct = addDefaultVariants(etProduct);\n    } else {\n        etProduct = addSetVariant(etProduct);\n    }\n\n    etProduct = getCleanEtProduct(etProduct);\n\n    try {\n        etCommerce.sendEvent('insertToBasket', etProduct, parseInt(newitemAddedQuantity));\n        if (etProduct.variants && etProduct.variants.var1 !== undefined) {\n            _etracker.sendEvent(new et_UserDefinedEvent('Armband', 'Pre-Konfiguriert', 'Auswahl', etProduct.variants.var1));\n        }\n        if (etProduct.variants && etProduct.variants.var2 !== undefined) {\n            _etracker.sendEvent(new et_UserDefinedEvent('Schließen', 'Pre-Konfiguriert', 'Auswahl', etProduct.variants.var2));\n        }\n    } catch (e) {\n        // console.error(\"Error sending eTracker event:\", e);\n    }\n}\n\nfunction addDefaultVariants(etProduct) {\n    if (etDirectToBasketObject.variants) {\n        etProduct.variants = {};\n\n        if (etDirectToBasketObject.variants.var1) {\n            etProduct.variants.var1 = etDirectToBasketObject.variants.var1;\n        }\n        if (etDirectToBasketObject.variants.var2) {\n            etProduct.variants.var2 = etDirectToBasketObject.variants.var2;\n        }\n    }\n    return etProduct;\n}\n\nfunction addSetVariant(etProduct) {\n    etProduct.variants = {\n        var1: setOptionOne,\n        var2: \"Standardschließe\"\n    };\n    return etProduct;\n}\n\n// Order Event\nfunction getOrderDetails() {\n    etOrderDetails.basket.products = orderProducts;\n    etOrderDetails.status = 'sale';\n    etOrderDetails.orderPrice = formatPrice(ordPrice);\n    etOrderDetails.currency = 'EUR'\n    return etOrderDetails;\n}\n\n// Send Order Event\nfunction sendOrderEvent(etOrder) {\n    if (etOrder !== null && etOrder.basket !== null && Array.isArray(etOrder.basket.products) && etOrder.basket.products.length > 0) {\n        try {\n            let etProductStr = JSON.stringify(etOrder);\n            etCommerce.sendEvent('order', etOrder);\n        } catch (error) {\n            // console.error(\"Error sending eTracker event:\", error);\n        }\n    }\n}\n\n// Format price to always return 2 decimals\nfunction formatPrice(price) {\n    let num = parseFloat(price);\n    // Return 2 decimals\n    return isNaN(num) ? '0.00' : num.toFixed(2).toString();\n}\n\nfunction getCleanEtProduct(etProduct) {\n    delete etProduct.oxid;\n    delete etProduct.persParams;\n    delete etProduct.isSetWatch;\n    delete etProduct.band;\n    delete etProduct.closing;\n    delete etProduct.options;\n\n    return etProduct;\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/etracker.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/filter.js": (
    /*!**************************************************!*\
      !*** ./source/out/sinn/src/js/modules/filter.js ***!
      \**************************************************/
    /***/
    function sourceOutSinnSrcJsModulesFilterJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n/* harmony import */ var _animateOffcanvas_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./animateOffcanvas.js */ \"./source/out/sinn/src/js/modules/animateOffcanvas.js\");\n/* harmony import */ var _lazyload_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lazyload.js */ \"./source/out/sinn/src/js/modules/lazyload.js\");\n/* harmony import */ var _pagination_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pagination.js */ \"./source/out/sinn/src/js/modules/pagination.js\");\n\n\n\n\n\nvar cubicBezier = 'cubicBezier(.40,.05,.20,.90)';\n\n(function ($) {\n\tvar filterLit = document.querySelector('#filterList');\n\tif (filterLit) {\n\t\tvar afterAjax = function (baseurl) {\n\t\t\tvar options = {\n\t\t\t\tdataType: 'json',\n\t\t\t\tbeforeSerialize: showRequest,\n\t\t\t\tsuccess: processJson\n\t\t\t};\n\t\t\t$('#filterList').ajaxForm(options);\n\t\t\tmfSetUrl(baseurl);\n\t\t}\n\t\tvar mfSetUrl = function (baseurl) {\n\t\t\tvar querydata = {};\n\t\t\tvar querystring = baseurl;\n\t\t\tif (!querystring) querystring = window.location.href;\n\t\t\tif ((querystring.indexOf(\"executefilter\") != -1)) return false;\n\n\t\t\t$('.mf_filter').each(function () {\n\t\t\t\tif ($(this).attr('type') == 'checkbox') {\n\t\t\t\t\tif ($(this).attr('checked')) {\n\t\t\t\t\t\tquerydata[$(this).attr('name')] = $(this).val();\n\t\t\t\t\t}\n\t\t\t\t} else if ($(this).attr('type') == 'hidden') {\n\t\t\t\t\tif ($(this).val()) {\n\t\t\t\t\t\tquerydata[$(this).attr('name')] = $(this).val();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ($(this).val()) {\n\t\t\t\t\t\tquerydata[$(this).attr('name')] = $(this).val();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!$.isEmptyObject(querydata)) {\n\t\t\t\tquerydata.fnc = 'executefilter';\n\t\t\t\tif (querystring.indexOf(\"?\") == -1) querystring += '?';\n\t\t\t\telse querystring += '&';\n\t\t\t\tquerystring += $.param(querydata);\n\t\t\t}\n\t\t\thistory.replaceState({data: ''}, '', querystring);\n\t\t}\n\n\t\tfunction showRequest(formData, jqForm, options) {\n\t\t\t$('input[name=ajax]').val('1');\n\t\t\t$('input[name=mnid]').val('');\n\t\t\tvar refineLoader = document.querySelector('.c-refinelayer__loader');\n\n\t\t\trefineLoader.classList.add('js--active');\n\n\t\t\trefineLoader.style.display = 'flex';\n\t\t\trefineLoader.classList.add('js--active');\n\n\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\ttargets: refineLoader,\n\t\t\t\topacity: ['0', '1'],\n\t\t\t\tduration: 250,\n\t\t\t\teasing: cubicBezier\n\t\t\t})\n\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction processJson(data) {\n\t\t\tfor (var index in data) {\n\t\t\t\tif (data.hasOwnProperty(index)) {\n\t\t\t\t\tmfloadcontent(data[index], index);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar refineLoader = document.querySelector('.c-refinelayer__loader');\n\n\t\t\t(0,_animateOffcanvas_js__WEBPACK_IMPORTED_MODULE_1__.animateOffcanvas)({\n\t\t\t\toffCanvas: '.c-refinelayer',\n\t\t\t\ttriggers: '.c-refine__action-item .js-show-filter, .c-mobilemenu__item.is--refine',\n\t\t\t\tcloseButtons: '.c-refinelayer__close, .c-refinelayer__closebutton, .c-refinelayer__background',\n\t\t\t\tcallSelf: true\n\t\t\t});\n\n\t\t\trefineLoader.classList.add('js--active');\n\t\t\trefineLoader.style.display = 'flex';\n\n\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\ttargets: refineLoader,\n\t\t\t\topacity: ['1', '0'],\n\t\t\t\tduration: 250,\n\t\t\t\teasing: cubicBezier,\n\t\t\t\tcomplete: function () {\n\t\t\t\t\trefineLoader.classList.remove('js--active');\n\t\t\t\t\trefineLoader.style.display = 'none';\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t_lazyload_js__WEBPACK_IMPORTED_MODULE_2__.lazyContent.update();\n\n\t\t\tvar imgs = document.querySelectorAll('img');\n\t\t\tvar products = document.querySelectorAll('.c-product');\n\n\t\t\timgs.forEach(img => {\n\t\t\t\timg.classList.add('lazy__load-loaded');\n\t\t\t})\n\n\t\t\tproducts.forEach(product => {\n\t\t\t\tproduct.classList.add('js--animate');\n\t\t\t})\n\n\t\t\tafterAjax(data.baseurl);\n\n\t\t\t// Um die Sichtbarkeit der Paginierung nach dem Filtern zu aktualisieren\n\t\t\t(0,_pagination_js__WEBPACK_IMPORTED_MODULE_3__.updatePageVisibility)();\n\t\t}\n\n\t\tfunction mfloadcontent(data, target) {\n\t\t\tif (target != \"baseurl\") {\n\t\t\t\t$('#' + target).html(data);\n\t\t\t}\n\t\t}\n\n\t\t$(\".multifilter_reset_link\").click(\n\t\t\tfunction (e) {\n\t\t\t\t$('#multifilter_reset').val($(this).attr('data-ident'));\n\t\t\t\tconsole.log(\"Reset Link click\");\n\t\t\t\t$('#filterList').submit();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t);\n\n\t\t$(\"#multifilter_filters\").on(\"click\", \".colorpickerjs\",\n\t\t\tfunction (e) {\n\t\t\t\tvar inputElem = $(this).children('input');\n\t\t\t\tvar currentVal = inputElem.val();\n\t\t\t\tif (!currentVal) {\n\t\t\t\t\tinputElem.val('1');\n\t\t\t\t} else {\n\t\t\t\t\tinputElem.val('');\n\t\t\t\t}\n\t\t\t\t$(\"#filterList\").submit();\n\t\t\t}\n\t\t);\n\t\t$(\"#multifilter_filters\").on(\"click\", \".attrfilter a\",\n\t\t\tfunction (e) {\n\t\t\t\tvar refineLoader = document.querySelector('.c-refinelayer__loader');\n\n\t\t\t\trefineLoader.style.display = 'flex';\n\t\t\t\trefineLoader.classList.add('js--active');\n\n\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\ttargets: refineLoader,\n\t\t\t\t\topacity: ['0', '1'],\n\t\t\t\t\tduration: 250,\n\t\t\t\t\teasing: cubicBezier\n\t\t\t\t})\n\t\t\t}\n\t\t);\n\t\t$('.searchBox').append('<input type=\\\"hidden\\\" name=\\\"resetfilter\\\" value=\\\"1\\\" />');\n\t\tafterAjax();\n\t}\n})(jQuery);\n\n// Hide groups without content in FE\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n    const filterGroups = document.querySelectorAll(\".c-refinelayer__fieldsets--group\");\n    filterGroups.forEach((group, index) => {\n        let hasContent = false;\n\n        let sibling = group.nextElementSibling;\n        while (sibling && !sibling.classList.contains(\"c-refinelayer__fieldsets--group\")) {\n            // Check if this sibling is a filter group body and has valid list items\n            if (\n                sibling.querySelector &&\n                sibling.querySelector(\"ul > li:not(.hidden)\")\n            ) {\n                hasContent = true;\n                break;\n            }\n            sibling = sibling.nextElementSibling;\n        }\n\n        // If no content is found, hide the current group\n        if (!hasContent) {\n            group.classList.add(\"hidden\");\n        } else {\n            group.classList.remove(\"hidden\");\n        }\n    });\n});\n\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/filter.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/filterIndicator.js": (
    /*!***********************************************************!*\
      !*** ./source/out/sinn/src/js/modules/filterIndicator.js ***!
      \***********************************************************/
    /***/
    function sourceOutSinnSrcJsModulesFilterIndicatorJs() {
      eval("/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Shows number of active filters on product lists\n * @author     Anna Morawe <anna.morawe@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\n\nlet activeFilterIndicator = document.getElementById('activeFilterIndicator'); // Hier soll die Anzahl der aktiven Filter ausgegeben werden\n\nconst showActiveFilters = () => {\n\n\tlet productFilter = document.querySelectorAll('.c-refine__action'); // Wrapper der Filtergruppen\n\n\tif (productFilter.length > 0) {\n\n\t\t/*\n\t\t* Wenn die Seite fertig geladen ist herausfinden wie viele Filter aktiv sind\n\t\t*/\n\t\tlet activeFilters = document.querySelectorAll('.attrfilter.js--active').length; // Anzahl aller aktiven Filter\n\n\t\tactiveFilterIndicator.textContent = activeFilters;\n\n\n\t\t/*\n\t\t * Filter-Bubble ein- und ausblenden je nachdem ob Filter gesetzt sind oder nicht\n\t\t */\n\t\tif (activeFilters === 0) {\n\t\t\tactiveFilterIndicator.style.display = 'none';\n\t\t} else {\n\t\t\tactiveFilterIndicator.style.display = 'inline-block';\n\t\t}\n\n\t}\n\n};\n\nif (activeFilterIndicator) {\n\twindow.onload = showActiveFilters();\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/filterIndicator.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/formValidation.js": (
    /*!**********************************************************!*\
      !*** ./source/out/sinn/src/js/modules/formValidation.js ***!
      \**********************************************************/
    /***/
    function sourceOutSinnSrcJsModulesFormValidationJs() {
      eval("document.addEventListener(\"DOMContentLoaded\", function () {\n    const forms = document.querySelectorAll('.js--dotValidate');\n\n    if (forms) {\n//        console.log('Form validation is active');\n        forms.forEach(function (form) {\n            let firstErrorField = null;\n\n            form.addEventListener('submit', function (event) {\n                const requiredInputs = form.querySelectorAll('.e-form__row:not(.is--hidden) input[required]:not([type=\"checkbox\"])');\n                const requiredTextarea = form.querySelectorAll('.e-form__row:not(.is--hidden) textarea[required]');\n                const requiredCheckbox = form.querySelectorAll('.e-form__row:not(.is--hidden) input[required][type=\"checkbox\"]');\n                const requiredSelect = form.querySelectorAll('.e-form__row:not(.is--hidden) select[required]');\n\n                let isValid = true;\n\n                requiredInputs.forEach(function (field) {\n                    if (!field.value.trim()) {\n                        isValid = false;\n                        markAsError(field);\n                        if (!firstErrorField) {\n                            firstErrorField = field;\n                        }\n                    } else {\n                        markAsValid(field);\n                    }\n                });\n\n                requiredTextarea.forEach(function (textarea) {\n                    if (!textarea.value.trim()) {\n                        isValid = false;\n                        markAsError(textarea);\n                        if (!firstErrorField) {\n                            firstErrorField = textarea;\n                        }\n                    } else {\n                        markAsValid(textarea);\n                    }\n                });\n\n                requiredSelect.forEach(function (select) {\n                    if (select.value.trim() === '') {\n                        isValid = false;\n                        markAsError(select);\n                        if (!firstErrorField) {\n                            firstErrorField = select;\n                        }\n                    } else {\n                        markAsValid(select);\n                    }\n                });\n\n                requiredCheckbox.forEach(function (checkbox) {\n                    if (!checkbox.checked) {\n                        isValid = false;\n                        markAsError(checkbox);\n                        if (!firstErrorField) {\n                            firstErrorField = checkbox;\n                        }\n                    } else {\n                        markAsValid(checkbox);\n                    }\n                });\n\n                if (!isValid && firstErrorField) {\n                    event.preventDefault();\n                    firstErrorField.focus(); // Set focus on the first error field\n                }\n            });\n\n            // Add event listeners to remove error class on input/change\n            const allInputs = form.querySelectorAll('.e-form__row:not(.is--hidden) input, .e-form__row:not(.is--hidden) textarea, .e-form__row:not(.is--hidden) select, .e-form__row:not(.is--hidden) input[type=\"checkbox\"]');\n            allInputs.forEach(function (input) {\n                // Check if the input is a checkbox and has the required attribute\n                if (input.type && input.type.toLowerCase() === 'checkbox' && input.hasAttribute('required')) {\n                    input.addEventListener('change', function () {\n                        validateField(input);\n                    });\n                }\n\n                // Check if the input is a select element and has the required attribute\n                if (input.tagName.toLowerCase() === 'select' && input.hasAttribute('required')) {\n                    input.addEventListener('change', function () {\n                        validateField(input);\n                    });\n                }\n\n                // Add event listener to remove error class when the input is focused (except for checkboxes)\n                if (input.type && input.type.toLowerCase() !== 'checkbox') {\n                    input.addEventListener('focus', function () {\n                        markAsValid(input);\n                    });\n                }\n            });\n        });\n    }\n\n    function markAsError(element) {\n        var parentElement = element.closest('.e-form__wrap');\n        if (parentElement) {\n            parentElement.classList.add('is--error');\n            //parentElement.style.outline = '2px solid red';\n        }\n    }\n\n    function markAsValid(element) {\n        var parentElement = element.closest('.e-form__wrap');\n        if (parentElement) {\n            parentElement.classList.remove('is--error');\n            //parentElement.style.outline = '2px solid green';\n        }\n    }\n\n    function validateField(input) {\n        if (input.type && input.type.toLowerCase() === 'checkbox') {\n            if (input.checked) {\n                markAsValid(input);\n            } else {\n                markAsError(input);\n            }\n        } else if (input.tagName.toLowerCase() === 'select') {\n            if (input.value.trim() === '') {\n                markAsError(input);\n            } else {\n                markAsValid(input);\n            }\n        } else {\n            if (input.value.trim()) {\n                markAsValid(input);\n            } else {\n                markAsError(input);\n            }\n        }\n    }\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/formValidation.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/input.js": (
    /*!*************************************************!*\
      !*** ./source/out/sinn/src/js/modules/input.js ***!
      \*************************************************/
    /***/
    function sourceOutSinnSrcJsModulesInputJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var detect_autofill__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! detect-autofill */ \"./node_modules/detect-autofill/dist/detect-autofill.js\");\n/* harmony import */ var detect_autofill__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(detect_autofill__WEBPACK_IMPORTED_MODULE_0__);\n\n\nvar input = document.querySelectorAll('.e-form__wrap.is--input .e-form__input');\nvar filter = document.querySelectorAll('.c-refinelayer__filtergroup-item');\n\nif (filter) {\n\tfilter.forEach((item) => {\n\t\tif (item.querySelector('.c-refinelayer__filtergroup-checkbox').checked == true) {\n\t\t\titem.classList.add('js--active');\n\t\t}\n\n\t\titem.addEventListener('change', (event) => {\n\t\t\tif (!item.classList.contains('js--active')) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\titem.classList.add('js--active');\n\t\t\t} else {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\titem.classList.remove('js--active');\n\t\t\t}\n\t\t});\n\t});\n}\n\nif (input) {\n\tinput.forEach((item) => {\n\t\tif (item.value.length != 0) {\n\t\t\titem.parentElement.classList.add('js--active');\n\t\t}\n\n\t\titem.addEventListener('onautocomplete', (event) => {\n\t\t\titem.parentElement.classList.add('js--active');\n\t\t});\n\n\t\titem.addEventListener('focusin', (event) => {\n\t\t\tif (event.currentTarget.value.length == 0) {\n\t\t\t\titem.parentElement.classList.add('js--active');\n\t\t\t}\n\t\t});\n\n\t\titem.addEventListener('focusout', (event) => {\n\t\t\tif (event.currentTarget.value.length == 0) {\n\t\t\t\titem.parentElement.classList.remove('js--active');\n\t\t\t}\n\t\t});\n\t});\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/input.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/layers.js": (
    /*!**************************************************!*\
      !*** ./source/out/sinn/src/js/modules/layers.js ***!
      \**************************************************/
    /***/
    function sourceOutSinnSrcJsModulesLayersJs() {
      eval("/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Unterbindet das Scrollen im Body wenn der User eine Sidebar (Minibasket, Technik ABC, ...) geöffnet hat\n * @author     Anna Morawe <anna.morawe@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\ndocument.addEventListener('DOMContentLoaded', function() {\n\tfunction checkSidebars() {\n\t\tconst sidebars = document.querySelectorAll('.js--offcanvas');\n\t\tconst body = document.body;\n\t\tlet isAnySidebarOpen = false;\n\n\t\tsidebars.forEach(sidebar => {\n\t\t\tif (sidebar.classList.contains('js--active')) {\n\t\t\t\tisAnySidebarOpen = true;\n\t\t\t}\n\t\t});\n\n\t\tif (isAnySidebarOpen) {\n\t\t\tbody.classList.add('no--scroll');\n\t\t} else {\n\t\t\tbody.classList.remove('no--scroll');\n\t\t}\n\t}\n\n\tconst observerCallback = function(mutationsList) {\n\t\tfor (const mutation of mutationsList) {\n\t\t\tif (mutation.attributeName === 'class') {\n\t\t\t\tcheckSidebars();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst observerOptions = {\n\t\tattributes: true,\n\t\tattributeFilter: ['class']\n\t};\n\n\tconst sidebars = document.querySelectorAll('.js--offcanvas');\n\tsidebars.forEach(sidebar => {\n\t\tconst observer = new MutationObserver(observerCallback);\n\t\tobserver.observe(sidebar, observerOptions);\n\t});\n\n\tcheckSidebars();\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/layers.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/lazyload.js": (
    /*!****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/lazyload.js ***!
      \****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesLazyloadJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   lazyContent: () => (/* binding */ lazyContent)\n/* harmony export */ });\n/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vanilla-lazyload */ \"./node_modules/vanilla-lazyload/dist/lazyload.min.js\");\n/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0__);\n\n\nconst lazyContent = new (vanilla_lazyload__WEBPACK_IMPORTED_MODULE_0___default())({\n\tuse_native: true,\n\telements_selector: '.lazy__load',\n\tclass_loading: 'lazy__load-loading',\n\tclass_loaded: 'lazy__load-loaded'\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/lazyload.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/login.js": (
    /*!*************************************************!*\
      !*** ./source/out/sinn/src/js/modules/login.js ***!
      \*************************************************/
    /***/
    function sourceOutSinnSrcJsModulesLoginJs() {
      eval("var loginForm = document.querySelector('#login');\n\nif (loginForm) {\n\tloginForm.addEventListener('submit', function (event) {\n\n\t\tevent.preventDefault();\n\n\t\tdocument.getElementById('login-error-box').innerHTML = '';\n\t\tdocument.getElementById('login-error-box').style.display = 'none';\n\n\t\t$.ajax({\n\t\t\tmethod: \"POST\",\n\t\t\turl: document.getElementById('ajaxTargetMB').value + \"cl=user&fnc=ajaxCheckIfUserExists&stoken=\" + document.getElementById('sessionTokenMB').value,\n\t\t\tdata: {\n\t\t\t\tusername: document.querySelector(\"[name='lgn_usr']\").value,\n\t\t\t\tpassword: document.querySelector(\"[name='lgn_pwd']\").value,\n\t\t\t},\n\t\t\tsuccess: function (ret) {\n\t\t\t\tif (ret.length) {\n\t\t\t\t\tdocument.getElementById('login-error-box').style.display = 'block';\n\t\t\t\t\tdocument.getElementById('login-error-box').innerHTML = ret;\n\t\t\t\t} else {\n\t\t\t\t\tloginForm.submit();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/login.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/menuimage.js": (
    /*!*****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/menuimage.js ***!
      \*****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesMenuimageJs() {
      eval("const imageSourceElements = document.querySelectorAll('.has--image');\n\n// Erstellt für jedes Bild im Menü ein Bild im Hintergrund\nfunction createImages() {\n\timageSourceElements.forEach(element => {\n\t\tconst imageUrl = element.getAttribute('data-menuimage');\n\t\tconst imageElement = document.createElement('img');\n\t\tconst targetElement = document.querySelector('.js-menu-image');\n\n\t\timageElement.setAttribute('loading', 'lazy');\n\t\timageElement.setAttribute('src', imageUrl);\n\t\ttargetElement.appendChild(imageElement);\n\t});\n}\n\n// Ändert das Styling des Bildes, damit es sichtbar wird\nfunction imageViewer(event) {\n\tconst hoveredImageUrl = event.target.getAttribute('data-menuimage');\n\n\timageSourceElements.forEach(element => {\n\t\tconst imageURL = element.getAttribute('data-menuimage');\n\t\tconst imgElement = document.querySelector(`img[src=\"${imageURL}\"]`);\n\n\t\tif (imgElement) {\n\t\tif (imageURL === hoveredImageUrl) {\n\t\t\timgElement.style.visibility = 'visible';\n\t\t\timgElement.style.opacity = '1';\n\t\t} else {\n\t\t\timgElement.style.visibility = 'hidden';\n\t\t\timgElement.style.opacity = '0';\n\t\t}\n\t\t}\n\t});\n}\n\n// Funktion zum Ausblenden des Bildes\nfunction hideImage(event) {\n\timageSourceElements.forEach(element => {\n\t\tconst imageURL = element.getAttribute('data-menuimage');\n\t\tconst imgElement = document.querySelector(`img[src=\"${imageURL}\"]`);\n\n\t\tif (imgElement) {\n\t\t\timgElement.style.visibility = 'hidden';\n\t\t\timgElement.style.opacity = '0';\n\t\t}\n\t});\n}\n\n// Prüft, ob es Bilder im Menü gibt und führt die nötigen Funktionen aus\nif (imageSourceElements.length > 0) {\n\tcreateImages();\n\n\timageSourceElements.forEach(element => {\n\t\telement.addEventListener('mouseenter', imageViewer);\n\t\telement.addEventListener('mouseleave', hideImage);\n\t});\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/menuimage.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/miniBasketRenderer.js": (
    /*!**************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/miniBasketRenderer.js ***!
      \**************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesMiniBasketRendererJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _minicartflapper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./minicartflapper */ \"./source/out/sinn/src/js/modules/minicartflapper.js\");\n\n\ndocument.addEventListener('DOMContentLoaded', function () {\n    const miniBasketBtn = document.getElementById('miniBasketBtn');\n    if (miniBasketBtn) {\n        miniBasketBtn.addEventListener('click', function() {\n            // Recalculate Mini basket\n            fetch('/index.php?cl=minibasketcontroller&fnc=recalculateMiniBasket')\n                .then(response => response.text())\n                .then(data => {\n                    var miniBasketContainer = document.querySelector('.c-minibasket__wrapper');\n                    if (miniBasketContainer) {\n                        miniBasketContainer.innerHTML = data;\n                        (0,_minicartflapper__WEBPACK_IMPORTED_MODULE_0__.addFlapper)();\n                    }\n                })\n                .catch(error => {\n                    console.error('Error recalculating mini basket: ', error);\n                });\n     \n        });       \n    }  \n});    \n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/miniBasketRenderer.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/minicartflapper.js": (
    /*!***********************************************************!*\
      !*** ./source/out/sinn/src/js/modules/minicartflapper.js ***!
      \***********************************************************/
    /***/
    function sourceOutSinnSrcJsModulesMinicartflapperJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addFlapper: () => (/* binding */ addFlapper)\n/* harmony export */ });\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n\n\nconst addFlapper = () => {\n\tvar minibasketItems = document.querySelectorAll('.c-minibasket__item');\n\tvar cubicBezier = 'cubicBezier(.40,.05,.20,.90)';\n\tvar minibasketContentHeight, minibasketBodyHeight, setViewportWidth;\n\n\tif (minibasketItems) {\n\t\tminibasketItems.forEach((item) => {\n\t\t\tvar minibasket = item;\n\t\t\tvar content = item.querySelector('.c-minibasket__config');\n\t\t\tvar header = item.querySelector('.js--minibasketflapper');\n\n\t\t\tif (header) {\n\t\t\t\theader.addEventListener('click', function () {\n\t\t\t\t\tminibasketBodyHeight = item.querySelector('.c-minibasket__config--title').getBoundingClientRect().height + item.querySelector('.c-minibasket__config--list').getBoundingClientRect().height;\n\t\t\t\t\tminibasketContentHeight = minibasketBodyHeight + 'px';\n\n\n\t\t\t\t\tif (minibasket.classList.contains('js--active')) {\n\t\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\t\ttargets: content,\n\t\t\t\t\t\t\theight: '0',\n\t\t\t\t\t\t\tduration: 350,\n\t\t\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\t\tminibasket.classList.remove('js--active', 'js--pointerevent');\n\t\t\t\t\t\t\t\theader.classList.remove('is--open');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tminibasket.classList.add('js--active', 'js--pointerevent');\n\t\t\t\t\t\theader.classList.add('is--open');\n\n\t\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\t\ttargets: content,\n\t\t\t\t\t\t\theight: ['0', minibasketContentHeight],\n\t\t\t\t\t\t\tduration: 350,\n\t\t\t\t\t\t\teasing: cubicBezier\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\twindow.addEventListener('resize', () => {\n\t\t\t\t\tsetViewportWidth = window.innerWidth;\n\n\t\t\t\t\tminibasketBodyHeight = item.querySelector('.c-minibasket__config--title').getBoundingClientRect().height + item.querySelector('.c-minibasket__config--list').getBoundingClientRect().height;\n\t\t\t\t\tminibasketContentHeight = minibasketBodyHeight + 'px';\n\n\t\t\t\t\tif (minibasket.classList.contains('js--active') && !minibasket.classList.contains('js--pointerevent')) {\n\t\t\t\t\t\tcontent.style.height = minibasketContentHeight;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n}\naddFlapper();\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/minicartflapper.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/navigationDesktop.js": (
    /*!*************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/navigationDesktop.js ***!
      \*************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesNavigationDesktopJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n\n\n// --- Animate Flyout :: Desktop Menu\nvar logo = document.querySelector('.c-logo');\nvar nav = document.querySelector('.c-navigation');\nconst navBody = document.querySelector('body');\nconst secondLevelScroller = document.querySelectorAll('.c-flyout__scroller');\nvar navItems = document.querySelectorAll('.c-navigation__item.has--child, .c-navigation__burger');\nvar flyoutFirstItems = document.querySelectorAll('.c-flyout__column .c-flyout__menu--item.has--child');\nvar flyoutItems = document.querySelectorAll('.c-mobilenav, .c-search, .c-login, .c-retailer, .c-cart');\nvar cubicBezier = 'cubicBezier(.4, .05, .2, .9)';\nvar mobileMenuItems = document.querySelectorAll('.c-mobilemenu__item');\n\n\n// Navigate through each navigation item\nnavItems.forEach(function (item) {\n    // Listen to click trigger\n    item.children[0].addEventListener('click', function (event) {\n        var navItemData = event.currentTarget.getAttribute('data-target');\n        var navItemDataTarget = document.querySelector('.c-flyout[data-flyout=\"' + navItemData + '\"]');\n\n        event.preventDefault();\n\n        navItems.forEach(function (item) {\n            item.classList.remove('js--active');\n        });\n\n        item.classList.add('js--active');\n\n        if (!item.querySelector('.c-flyout__language') && document.querySelector('.c-flyout__language').style.opacity != '0') {\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: document.querySelector('.c-flyout__language'),\n                opacity: ['1', '0'],\n                duration: 650,\n                easing: cubicBezier,\n                complete: function () {\n                    document.querySelector('.c-flyout__language').style.visibility = 'hidden';\n                }\n            })\n        }\n\n        // If flyout visible\n        if (navItemDataTarget.style.display === 'block') {\n\n            if (item.querySelector('.c-flyout__language')) {\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: item.querySelector('.c-flyout__language'),\n                    opacity: ['1', '0'],\n                    duration: 650,\n                    easing: cubicBezier,\n                    complete: function () {\n                        item.querySelector('.c-flyout__language').style.visibility = 'hidden';\n                    }\n                })\n            }\n\n            // Animate background\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: '.c-navigation .c-flyout__background',\n                opacity: '0',\n                duration: 1000,\n                easing: 'easeInOutQuad',\n                complete: function () {\n                    navItemDataTarget.style.display = 'none';\n                    nav.classList.remove('js--pointerevent');\n                    document.querySelector('.c-navigation .c-flyout__background').style.display = 'none';\n                },\n                begin: function () {\n                    nav.classList.add('js--pointerevent');\n                    document.querySelector('.c-navigation__item.has--child.js--active, .c-navigation__burger.js--active').classList.remove('js--active');\n                }\n            })\n\n            // Animate progress background\n            ;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: '.c-navigation .c-flyout__progress',\n                width: '0%',\n                duration: 1000,\n                easing: cubicBezier\n            })\n\n            // Animate first level items\n            ;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: '.c-flyout[data-flyout=\"' + navItemData + '\"] .c-flyout__menu--span.first--level',\n                translateY: ['0', '-100%'],\n                delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(0,\n                    {\n                        start: 0,\n                    }\n                ),\n                duration: 650,\n                easing: 'easeInOutQuint'\n            })\n\n            flyoutFirstItems.forEach(function (item) {\n                if (item.classList.contains('js--active')) {\n                    // Animate second level items\n                    (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                        targets: '.c-flyout[data-flyout=\"' + navItemData + '\"] .js--finish .c-flyout__menu--span.second--level',\n                        translateY: ['0', '-100%'],\n                        delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(0,\n                            {\n                                start: 0,\n                            }\n                        ),\n                        duration: 650,\n                        easing: 'easeInOutQuint',\n                        complete: function () {\n                            item.classList.remove('js--finish');\n                        }\n                    })\n                }\n            });\n\n            // Remove classes\n            nav.classList.remove('js--bg-white');\n            nav.classList.remove('js--triggered');\n            logo.classList.remove('js--black');\n            navBody.classList.remove('no--scroll');\n            navBody.classList.remove('nav--open');\n\n            flyoutFirstItems.forEach(function (item) {\n                item.classList.remove('js--active');\n            });\n        }\n\n        // If flyout is not visible\n        if (navItemDataTarget.style.display !== 'block') {\n            // Show flyout menu\n            navItemDataTarget.style.display = 'block';\n\n            if (item.querySelector('.c-flyout__language')) {\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: item.querySelector('.c-flyout__language'),\n                    opacity: ['0', '1'],\n                    duration: 1000,\n                    easing: cubicBezier,\n                    begin: function () {\n                        item.querySelector('.c-flyout__language').style.visibility = 'visible';\n                    }\n                })\n            }\n\n            // Öffnen und Wechseln des Menüs über die Navigationspunkte und das Burger Menü im Header\n            if (document.querySelectorAll('.c-flyout[style*=\"display: block;\"]').length >= 2) {\n                // Menü gewechselt (nicht geöffnet!) über einen Header-Navigationspunkt\n                //console.log('Menü gewechselt (nicht geöffnet!) über das Burger Menü oder einen Header-Navigationspunkt');\n\n                // Scrollbar für 2. Ebene ausblenden, wenn das Menü über Header-Navigationspunkte oder das Burgermenü gewechselt wird\n                secondLevelScroller.forEach(function (item) {\n                    item.style.overflowY = 'hidden';\n                });\n                // Animate first level items\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: '.c-navigation__item:not(.js--active) .c-flyout .c-flyout__menu--span.first--level, .c-navigation__burger:not(.js--active) .c-flyout .c-flyout__menu--span.first--level',\n                    translateY: ['0', '-100%'],\n                    delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(0, {\n                        start: 0\n                    }),\n                    duration: 750,\n                    easing: cubicBezier,\n                    begin: function () {\n                        nav.classList.add('js--pointerevent');\n                    },\n                    complete: function () {\n                        document.querySelectorAll('.c-navigation__item:not(.js--active) .c-flyout, .c-navigation__burger:not(.js--active) .c-flyout').forEach(function (item) {\n                            item.style.display = 'none';\n                        });\n                    }\n                });\n\n                // Animate first level items\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: '.c-flyout[data-flyout=\"' + navItemData + '\"] .c-flyout__menu--span.first--level',\n                    translateY: ['100%', '0'],\n                    delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(75, {\n                        start: 0\n                    }),\n                    duration: 1000,\n                    easing: cubicBezier,\n                    complete: function () {\n                        nav.classList.remove('js--pointerevent');\n                    }\n                });\n\n                // ...\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: '.c-navigation .c-flyout__progress',\n                    width: '33.33%',\n                    duration: 1000,\n                    easing: cubicBezier,\n                    complete: function () {\n\n                    }\n                });\n\n                // ???\n                if (document.querySelectorAll('.c-flyout__menu--item.js--active').length >= 1) {\n                    (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                        targets: '.c-flyout__menu--item.js--active .c-flyout__menu--span.second--level',\n                        translateY: '-100%',\n                        delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(0, {\n                            start: 0\n                        }),\n                        duration: 750,\n                        easing: cubicBezier,\n                        complete: function () {\n                            document.querySelector('.c-flyout__menu--item.js--active .c-flyout__column').style.display = 'none';\n                            document.querySelector('.c-flyout__menu--item.js--active').classList.remove('js--active', 'js--finish');\n                        }\n                    })\n                }\n            } else {\n                // Menü geöffnet über das Burger Menü oder Header-Navigationspunkte\n                // console.log('Menü geöffnet über das Burger Menü oder Header-Navigationspunkte');\n\n                // Add black state\n                nav.classList.add('js--bg-white');\n                nav.classList.add('js--triggered');\n                navBody.classList.add('no--scroll');\n                navBody.classList.add('nav--open');\n\n                // Animate background\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: '.c-navigation .c-flyout__background',\n                    opacity: '1',\n                    duration: 1000,\n                    easing: 'easeInOutQuad',\n                    complete: function () {\n                        nav.classList.remove('js--pointerevent');\n                        document.querySelector('.c-navigation .c-flyout__background').classList.remove('js--pointerevent');\n                    },\n                    begin: function () {\n                        nav.classList.add('js--pointerevent');\n                        document.querySelector('.c-navigation .c-flyout__background').classList.add('js--pointerevent');\n                        document.querySelector('.c-navigation .c-flyout__background').style.display = 'block';\n                    }\n                });\n\n                // Animate progress background\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: '.c-navigation .c-flyout__progress',\n                    width: '33.33%',\n                    duration: 1000,\n                    easing: cubicBezier\n                })\n\n                // Animate first level items\n                ;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: '.c-flyout[data-flyout=\"' + navItemData + '\"] .c-flyout__menu--span.first--level',\n                    translateY: ['100%', '0'],\n                    delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(75, {\n                        start: 0\n                    }),\n                    duration: 1000,\n                    easing: cubicBezier\n                });\n            }\n        }\n    });\n\n    // Navigate through second level child\n    flyoutFirstItems.forEach(function (item) {\n        item.children[0].addEventListener('click', function (event) {\n            var flyoutCall = event.currentTarget.parentElement.getAttribute('data-menu');\n            var clickTarget = event.currentTarget.parentElement;\n            var flyoutMenuItems = document.querySelectorAll('.js--active .c-flyout__menu--item:not(.js--finish, .js--active) [data-id=\"' + flyoutCall + '\"] .c-flyout__menu--span.second--level');\n            var flyoutMenuItemsFinish = document.querySelectorAll('.js--active .js--finish .c-flyout__menu--span.second--level');\n            var flyoutFirstItemsActive = document.querySelectorAll('.js--active .c-flyout__column .c-flyout__menu--item.has--child');\n\n            flyoutFirstItemsActive.forEach(function (item) {\n                item.classList.remove('js--active');\n            });\n\n            flyoutFirstItems.forEach((item) => {\n                item.querySelector('.c-flyout__menu--link').classList.add('js--pointerevent');\n            });\n\n            logo.classList.add('js--black');\n            item.classList.add('js--active');\n            item.classList.add('js--animate');\n\n            // Animate second level items in\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: flyoutMenuItems,\n                translateY: ['100%', '0'],\n                delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(75, {\n                    start: 0\n                }),\n                duration: 1000,\n                easing: cubicBezier,\n                begin: function () {\n                    clickTarget.querySelector('.c-flyout__column').style.display = 'block';\n                },\n                complete: function () {\n                    secondLevelScroller.forEach(function (item) {\n                        item.style.overflowY = 'auto';\n                    });\n                    item.classList.add('js--finish');\n                    item.classList.remove('js--animate');\n                    flyoutFirstItems.forEach((item) => {\n                        item.querySelector('.c-flyout__menu--link').classList.remove('js--pointerevent');\n                    });\n                }\n            })\n\n            // Animate second level items out\n            ;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: flyoutMenuItemsFinish,\n                translateY: ['0', '-100%'],\n                delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(25, {\n                    start: 0\n                }),\n                duration: 750,\n                easing: cubicBezier,\n                begin: function () {\n                    secondLevelScroller.forEach(function (item) {\n                        item.style.overflowY = 'hidden';\n                    });\n                    flyoutFirstItemsActive.forEach(function (item) {\n                        item.classList.remove('js--finish');\n                    });\n                },\n                complete: function () {\n                    flyoutFirstItemsActive.forEach(function (item) {\n                        if (!item.classList.contains('js--active')) {\n                            item.querySelector('.c-flyout__column').style.display = 'none';\n                        }\n                    });\n                }\n            })\n\n            // Animate progress background to 66%\n            ;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: '.c-navigation .c-flyout__progress',\n                width: '66.66%',\n                duration: 1000,\n                easing: cubicBezier\n            })\n\n            // Animate progress background to 33%\n            if (clickTarget.classList.contains('js--finish', 'js--active', 'js--animate')) {\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: '.c-navigation .c-flyout__progress',\n                    width: '33.33%',\n                    duration: 1000,\n                    easing: cubicBezier,\n                    complete: function () {\n                        clickTarget.classList.remove('js--finish', 'js--active');\n                        clickTarget.querySelector('.c-flyout__column').style.display = 'none';\n                    },\n                    begin: function () {\n                        logo.classList.remove('js--black');\n                    }\n                })\n            }\n        }, false);\n    });\n});\n\n// Close On Background Click\ndocument.querySelectorAll('.c-flyout .c-flyout__menu--image, .c-flyout__background').forEach((item) => {\n\n    item.addEventListener('click', function (event) {\n\n        if (document.querySelector('.e-dropdown .js-language') && document.querySelector('.e-dropdown .js-language').style.opacity == '1') {\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: document.querySelector('.e-dropdown .js-language'),\n                opacity: ['1', '0'],\n                duration: 650,\n                easing: cubicBezier,\n                complete: function () {\n                    item.querySelector('.e-dropdown').style.visibility = 'hidden';\n                }\n            })\n        }\n\n        // Animate background\n        (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n            targets: '.c-navigation .c-flyout__background',\n            opacity: '0',\n            duration: 1000,\n            easing: 'easeInOutQuad',\n            complete: function () {\n                document.querySelector('.c-navigation .js--active .c-flyout').style.display = 'none';\n                document.querySelector('.c-navigation .c-flyout__background').style.display = 'none';\n\n                nav.classList.remove('js--pointerevent');\n                item.classList.remove('js--pointerevent');\n\n                document.querySelector('.c-navigation .c-flyout__background').classList.remove('js--pointerevent');\n                document.querySelector('.c-navigation__item.has--child.js--active, .c-navigation__burger.js--active').classList.remove('js--active');\n                document.querySelector('body').classList.remove('nav-open');\n            },\n            begin: function () {\n                navBody.classList.remove('no--scroll');\n                navBody.classList.remove('nav--open');\n                nav.classList.add('js--pointerevent');\n                item.classList.add('js--pointerevent');\n\n                document.querySelector('.c-navigation .c-flyout__background').classList.add('js--pointerevent');\n            }\n        })\n\n        // Animate progress background\n        ;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n            targets: '.c-navigation .c-flyout__progress',\n            width: '0%',\n            duration: 1000,\n            easing: cubicBezier\n        })\n\n        // Animate first level items\n        ;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n            targets: '.c-navigation__list > li.js--active .c-flyout .c-flyout__menu--span.first--level',\n            translateY: ['0', '-100%'],\n            delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(0,\n                {\n                    start: 0,\n                }\n            ),\n            duration: 650,\n            easing: 'easeInOutQuint'\n        })\n\n        flyoutFirstItems.forEach(function (item) {\n            if (item.classList.contains('js--active')) {\n                // Animate second level items\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: '.c-navigation__list > li.js--active .c-flyout .js--finish .c-flyout__menu--span.second--level',\n                    translateY: ['0', '-100%'],\n                    delay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(0, {\n                        start: 0\n                    }),\n                    duration: 650,\n                    easing: 'easeInOutQuint',\n                    begin: function () {\n                        secondLevelScroller.forEach(function (item) {\n                            item.style.overflowY = 'hidden';\n                        });\n                    },\n                    complete: function () {\n                        item.classList.remove('js--finish');\n                        secondLevelScroller.forEach(function (item) {\n                            item.style.overflowY = 'hidden';\n                        });\n                    }\n                });\n            }\n        });\n\n        nav.classList.remove('js--bg-white');\n        nav.classList.remove('js--triggered');\n        logo.classList.remove('js--black');\n\n        flyoutFirstItems.forEach(function (item) {\n            item.classList.remove('js--active');\n        });\n    });\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/navigationDesktop.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/navigationMobile.js": (
    /*!************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/navigationMobile.js ***!
      \************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesNavigationMobileJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n/* harmony import */ var _animateOffcanvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./animateOffcanvas */ \"./source/out/sinn/src/js/modules/animateOffcanvas.js\");\n\n\n\n// Führt den Code erst aus, wenn der DOM vollständig geladen ist\ndocument.addEventListener('DOMContentLoaded', function () {\n    const mobileNavContainer = document.querySelector('.c-mobilenav');\n\n    // Überprüfen, ob der mobileNavContainer vorhanden ist\n    if (mobileNavContainer) {\n        const mobileNavFirstLevel = document.querySelector('.c-mobilenav__content.first--level');\n        const firstLevelitems = document.querySelectorAll('.c-mobilenav__content.first--level > .c-mobilenav__list > .c-mobilenav__item > .c-mobilenav__item-link');\n        const mobileMenuItems = document.querySelectorAll('.c-mobilemenu__item');\n        const mobileNavItems = document.querySelectorAll('.c-mobilenav__item.has--child > .c-mobilenav__item-link');\n        const backButton = document.querySelectorAll('.c-mobilenav__back');\n        const cubicBezier = 'cubicBezier(.4, .05, .2, .9)';\n\n        // Initialisiert die Offcanvas-Animation für das Haupt-Navigationsmenü\n        (0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_1__.animateOffcanvas)({\n            offCanvas: '.c-mobilenav',\n            closeButton: '.c-mobilenav__close',\n            background: '.c-mobilenav__background',\n            triggers: '.c-mobilemenu__item.is--navigation',\n        });\n\n        // Resettet die mobile Navigation, wenn ein Link außerhalb der Navigation (z.B. Suche oder Warenkorb) angeklickt wird\n        mobileMenuItems.forEach(item => {\n            item.addEventListener('click', () => {\n                !item.classList.contains('is--navigation') && resetMobileNav();\n            });\n        });\n\n        // Funktion zum Zurücksetzen der mobilen Navigation\n        const resetMobileNav = function() {\n            const transitionEndHandler = function () {\n                mobileNavContainer.firstElementChild.removeEventListener('transitionend', transitionEndHandler);\n                document.querySelector('.c-mobilenav__content.first--level').style.transform = null;\n                document.querySelectorAll('.c-mobilenav__content:not(.first--level)').forEach((item) => {\n                    item.style = null;\n                });\n                firstLevelitems.forEach((item) => {\n                    item.style = null;\n                });\n            };\n            mobileNavContainer.firstElementChild.addEventListener('transitionend', transitionEndHandler);\n        }\n\n        // Animiert die Navigation (Verschiebung in X-Richtung)\n        const animateNavigation = (target, translateX, callback) => {\n            ;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: target,\n                translateX: translateX,\n                duration: 1000,\n                easing: cubicBezier,\n                complete: callback,\n            });\n        };\n\n        // Animiert die Navigationselemente (Verschiebung in Y-Richtung) mit optionaler Verzögerung\n        /*const animateItems = (items, translateY, delay = 0) => {\n            anime({\n                targets: items,\n                translateY: translateY,\n                delay: anime.stagger(delay), // Verzögert jedes Element individuell\n                duration: 1000,\n                easing: cubicBezier,\n            });\n        };*/\n\n        // Animationen für die zweite und dritte Navigationsebene\n        mobileNavItems.forEach((item) => {\n            item.addEventListener('click', function (event) {\n                const mobileNavItemData = event.currentTarget.getAttribute('data-href');\n                const mobileNavItemDataTarget = document.querySelector('.c-mobilenav__content[data-target=\"' + mobileNavItemData + '\"]');\n                //const activeItems = mobileNavItemDataTarget.querySelectorAll('.c-mobilenav__item.has--child .c-mobilenav__item-link');\n\n                // Überprüft, ob das Ziel ein Datenattribut besitzt\n                if (mobileNavItemData) {\n                    event.preventDefault();\n\n                    // Verhindert Mehrfachklicks während der Animation\n                    mobileNavFirstLevel.classList.add('js--pointerevent');\n\n                    // Animiert die Navigation nach vorne (zur nächsten Ebene)\n                    animateNavigation(mobileNavFirstLevel, '-=100%', () => {\n                        mobileNavFirstLevel.classList.remove('js--pointerevent');\n                    });\n\n                    // Animiert die Navigationselemente der aktiven Ebene\n                    //animateItems(activeItems, ['100%', '0%'], 20); // Neue Elemente erscheinen von unten\n                    //animateItems(firstLevelitems, ['0', '-100%']); // Aktuelle Elemente verschwinden nach oben\n\n                    // Aktiviert und zeigt den neuen Inhalt an\n                    mobileNavItemDataTarget.style.display = 'block';\n                }\n            });\n        });\n\n        // \"Zurück\"-Button-Animationen\n        backButton.forEach((button) => {\n            button.addEventListener('click', function (event) {\n                const activeContent = button.parentElement;\n                //const activeItems = activeContent.querySelectorAll('.c-mobilenav__item-link');\n\n                event.preventDefault();\n                mobileNavFirstLevel.classList.add('js--pointerevent');\n\n                // Animiert die Navigation zurück (zur vorherigen Ebene)\n                animateNavigation(mobileNavFirstLevel, '+=100%', () => {\n                    activeContent.style.display = null;\n                    mobileNavFirstLevel.classList.remove('js--pointerevent');\n                });\n\n                // Animiert die Navigationselemente zurück\n                //animateItems(activeItems, ['0', '-100%']); // Aktuelle Elemente verschwinden nach unten\n                //animateItems(firstLevelitems, ['100%', '0%'], 75); // Erste Ebene erscheint von oben\n            });\n        });\n    }\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/navigationMobile.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/navigationTracking.js": (
    /*!**************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/navigationTracking.js ***!
      \**************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesNavigationTrackingJs() {
      eval("// *** Navigation Tracking ***\nvar mainNaviLinks = document.querySelectorAll('.main-navi-link');\nvar fLevelNaviLinks = document.querySelectorAll('.f-level-navi-link');\n\nmainNaviLinks.forEach(function (link) {\n    link.addEventListener('mousedown', function () {\n        let spanTitle = link.getAttribute('data-target');\n        spanTitle === 'Burger' ? spanTitle = 'Menu-Button' : spanTitle;\n\n        if(typeof(_etracker) === 'object') {\n            _etracker.sendEvent(new et_UserDefinedEvent(spanTitle, 'Obernavigation', 'click', ''));\n        } else {\n            // console.log(\"failed\");\n        }\n    });\n});\n\nfLevelNaviLinks.forEach(function (link) {\n    link.addEventListener('mousedown', function () {\n        let spanTitle = link.getAttribute('data-target');\n        let parentElement = link.closest('.c-navigation__item');\n        let parentTitle = parentElement ? parentElement.querySelector('.main-navi-link')?.getAttribute('data-target') : 'Menu-Button';\n\n        if(typeof(_etracker) === 'object') {\n            _etracker.sendEvent(new et_UserDefinedEvent(spanTitle, 'Unternavigation', 'click', parentTitle));\n        } else {\n            // console.log(\"failed\");\n        }\n    });\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/navigationTracking.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/niceSelect.js": (
    /*!******************************************************!*\
      !*** ./source/out/sinn/src/js/modules/niceSelect.js ***!
      \******************************************************/
    /***/
    function sourceOutSinnSrcJsModulesNiceSelectJs() {
      eval("document.addEventListener(\"DOMContentLoaded\", function() {\n\n    const regularSelects    = document.querySelectorAll('.js--selectize');\n    const searchableSelects = document.querySelectorAll('.js--selectize-searchable');\n    const resetableSelects  = document.querySelectorAll('.js--selectize-resetable');\n\n    const searchPlaceholder = oWave.i18n.DOT_SELECT_SEARCH;\n    const searchOptions = {\n        searchable: true,\n        searchtext: searchPlaceholder,\n    };\n\n\n    if (regularSelects.length > 0 || searchableSelects.length > 0) {\n    \n        // Normale Selects\n        regularSelects.forEach(function(select){\n            NiceSelect.bind(select);\n        });\n\n        // Selects mit Suchfunktion\n        searchableSelects.forEach(function(select){\n            NiceSelect.bind(select, searchOptions);\n        });\n\n    }\n\n\n    if (resetableSelects.length > 0) {\n\n        resetableSelects.forEach(function(select){\n            let myNiceSelect = NiceSelect.bind(select, searchOptions);\n            let containerSelect = select.parentElement;\n            let customSelect = select.nextElementSibling;\n\n            if (select.selectedIndex > 0) {\n                customSelect.style.pointerEvents = 'none';\n                containerSelect.classList.add('has--reset');\n                containerSelect.addEventListener('click', reset, { capture: true });\n                myNiceSelect.update();\n            }\n\n            function reset () {\n                select.selectedIndex = 0;\n                containerSelect.classList.remove('has--reset');\n                containerSelect.removeEventListener('click', reset, { capture: true });\n                customSelect.style.pointerEvents = '';\n                myNiceSelect.update();\n\n                // Submit Form\n                if (select.hasAttribute('data-form')) {\n                    document.getElementById(select.dataset.form).submit();\n                }\n            }\n\n            select.addEventListener('change', function() {\n                if (select.selectedIndex != 0) {\n                    customSelect.style.pointerEvents = 'none';\n                    containerSelect.classList.add('has--reset');\n                    containerSelect.addEventListener('click', reset, { capture: true });\n                }\n\n                // Submit Form\n                if (select.hasAttribute('data-form')) {\n                    document.getElementById(select.dataset.form).submit();\n                }\n\n            });\n        });\n    }\n\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/niceSelect.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/order.js": (
    /*!*************************************************!*\
      !*** ./source/out/sinn/src/js/modules/order.js ***!
      \*************************************************/
    /***/
    function sourceOutSinnSrcJsModulesOrderJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n\n\nvar orderItems = document.querySelectorAll('.c-account__order');\nvar cubicBezier = 'cubicBezier(.40,.05,.20,.90)';\nvar contentHeight, bodyHeight, footerHeight, setViewportWidth;\n\nif (orderItems) {\n\torderItems.forEach((item) => {\n\t\tvar order = item;\n\t\tvar content = item.querySelector('.c-account__content');\n\t\tvar header = item.querySelector('.c-account__header');\n\n\t\theader.addEventListener('click', function () {\n\t\t\tbodyHeight = item.querySelector('.c-account__body').getBoundingClientRect().height;\n\t\t\tfooterHeight = item.querySelector('.c-account__footer').getBoundingClientRect().height;\n\t\t\tcontentHeight = (bodyHeight + footerHeight) + 'px';\n\n\t\t\torder.classList.add('js--pointerevent');\n\n\t\t\tif (order.classList.contains('js--active')) {\n\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\ttargets: content,\n\t\t\t\t\theight: '0',\n\t\t\t\t\tduration: 650,\n\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\torder.classList.remove('js--active', 'js--pointerevent');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\torder.classList.add('js--active', 'js--pointerevent');\n\n\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\ttargets: content,\n\t\t\t\t\theight: ['0', contentHeight],\n\t\t\t\t\tduration: 650,\n\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\torder.classList.remove('js--pointerevent');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\twindow.addEventListener('resize', () => {\n\t\t\tsetViewportWidth = window.innerWidth;\n\n\t\t\tbodyHeight = item.querySelector('.c-account__body').getBoundingClientRect().height;\n\t\t\tfooterHeight = item.querySelector('.c-account__footer').getBoundingClientRect().height;\n\t\t\tcontentHeight = (bodyHeight + footerHeight) + 'px';\n\n\t\t\tif (order.classList.contains('js--active') && !order.classList.contains('js--pointerevent')) {\n\t\t\t\tcontent.style.height = contentHeight;\n\t\t\t}\n\t\t});\n\t});\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/order.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/pagination.js": (
    /*!******************************************************!*\
      !*** ./source/out/sinn/src/js/modules/pagination.js ***!
      \******************************************************/
    /***/
    function sourceOutSinnSrcJsModulesPaginationJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   updatePageVisibility: () => (/* binding */ updatePageVisibility)\n/* harmony export */ });\n/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Blendet Punkte aus der Paginierung aus, wenn das Browserfenster nicht breit genug ist\n * @author     Anna Morawe <anna.morawe@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\nfunction togglePageDisplay(paginationContainer, show) {\n    const displayStyle = show ? 'block' : 'none';\n    paginationContainer.querySelectorAll('.e-pagination__item:not(.is--prev):not(.is--next):not(.is--active)').forEach(item => {\n        item.style.display = displayStyle;\n    });\n}\n\nfunction handleDotsVisibility(paginationContainer, show) {\n    const displayStyle = show ? 'block' : 'none';\n    paginationContainer.querySelectorAll('.e-pagination__item.is--dots').forEach(dot => {\n        dot.style.display = displayStyle;\n    });\n}\n\nfunction updatePageVisibility() {\n    const windowWidth = window.innerWidth;\n    const isMobileView = windowWidth < 1100;\n    \n    document.querySelectorAll('.e-pagination__inner').forEach(paginationContainer => {\n        handleDotsVisibility(paginationContainer, !isMobileView);\n        togglePageDisplay(paginationContainer, !isMobileView);\n        \n        if (isMobileView) {\n            const activePage = paginationContainer.querySelector('.e-pagination__item.is--active');\n            if (activePage) {\n                const prevSibling = activePage.previousElementSibling;\n                const nextSibling = activePage.nextElementSibling;\n                \n                if (prevSibling && !prevSibling.classList.contains('is--prev') && !prevSibling.classList.contains('is--dots')) {\n                    prevSibling.style.display = 'block';\n                }\n                \n                if (nextSibling && !nextSibling.classList.contains('is--next') && !nextSibling.classList.contains('is--dots')) {\n                    nextSibling.style.display = 'block';\n                }\n            }\n        } else {\n            paginationContainer.querySelectorAll('.e-pagination__item').forEach(item => {\n                item.removeAttribute('style');\n            });\n        }\n    });\n\n    document.querySelectorAll('.e-pagination__inner').forEach(paginationContainer => {\n        paginationContainer.style.opacity = '1';\n    });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", updatePageVisibility);\nwindow.addEventListener('resize', updatePageVisibility);\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/pagination.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/passwordcontrol.js": (
    /*!***********************************************************!*\
      !*** ./source/out/sinn/src/js/modules/passwordcontrol.js ***!
      \***********************************************************/
    /***/
    function sourceOutSinnSrcJsModulesPasswordcontrolJs() {
      eval("document.addEventListener('DOMContentLoaded', function () {\n    // List of ID sets\n    const idSets = [\n        { passwordNew: 'passwordNew', passwordNewConfirm: 'passwordNewConfirm', savePass: 'savePass' },\n        { passwordNew: 'password_new', passwordNewConfirm: 'password_new_confirm', savePass: 'savePassForgot' },\n        { passwordNew: 'userPassword', passwordNewConfirm: 'userPasswordConfirm', savePass: 'accUserSaveTop' },\n        { passwordNew: 'userPassword', passwordNewConfirm: 'userPasswordConfirm', savePass: 'userNextStepBottom' }\n    ];\n\n    idSets.forEach(({ passwordNew, passwordNewConfirm, savePass }) => {\n        // Get elements based on IDs\n        const passwordNewField = document.getElementById(passwordNew);\n        const passwordNewConfirmField = document.getElementById(passwordNewConfirm);\n        const passReqMsg = document.getElementById('pass-req-msg');\n        const passConfirmStatus = document.getElementById('pass-confirm-status');\n        const btnSavePass = document.getElementById(savePass);\n\n        // Only proceed if all elements are found\n        if (!passwordNewField || !passwordNewConfirmField || !btnSavePass) return;\n\n        // Requirement Strings and pass booleans\n        const requirements = [\n            {\n                element: document.getElementById('pass-req-length'),\n                check: value => value.length >= 8,\n                pass: false\n            },\n            {\n                element: document.getElementById('pass-req-capital'),\n                check: value => /[A-Z]/.test(value),\n                pass: false\n            },\n            {\n                element: document.getElementById('pass-req-small'),\n                check: value => /[a-z]/.test(value),\n                pass: false\n            },\n            {\n                element: document.getElementById('pass-req-number'),\n                check: value => /\\d/.test(value),\n                pass: false\n            },\n            {\n                element: document.getElementById('pass-req-symbol'),\n                check: value => /[!@#$%^&*(),.?\":{}|<>]/.test(value),\n                pass: false\n            }\n        ];\n\n        // Render changes\n        passwordNewField.addEventListener('input', handlePasswordInput);\n        passwordNewConfirmField.addEventListener('input', handleConfirmPasswordInput);\n\n        // Check Requirements and update\n        function checkRequirement(condition, element) {\n            if (condition) {\n                element.classList.add('hidden');\n            } else {\n                element.classList.remove('hidden');\n            }\n            return condition;\n        }\n\n        function handlePasswordInput() {\n            const value = passwordNewField.value;\n\n            let allConditionsMet = true;\n            requirements.forEach(requirement => {\n                const isMet = checkRequirement(requirement.check(value), requirement.element);\n                requirement.pass = isMet;\n                if (!isMet) {\n                    allConditionsMet = false;\n                }\n            });\n\n            if (allConditionsMet) {\n                passReqMsg.classList.add('hidden');\n            } else {\n                passReqMsg.classList.remove('hidden');\n            }\n\n            checkPasswordsMatch();\n        }\n\n        function handleConfirmPasswordInput() {\n            checkPasswordsMatch();\n        }\n\n        function checkPasswordsMatch() {\n            const inPassword = passwordNewField.value;\n            const inPasswordConfirm = passwordNewConfirmField.value;\n\n            if (inPasswordConfirm.length > 0) {\n                if (inPassword !== inPasswordConfirm) {\n                    // Show mismatch message & hide save button if passwords don't match if passwords don't match\n                    passConfirmStatus.classList.remove('e-alert__hidden');\n                    btnSavePass.classList.add('hidden');\n                } else {\n                    passConfirmStatus.classList.add('e-alert__hidden'); // Hide mismatch message if passwords match\n                    // Only show the save button if passwords match and all requirements are met\n                    if (requirements.every(req => req.pass)) {\n                        btnSavePass.classList.remove('hidden');\n                    } else {\n                        btnSavePass.classList.add('hidden');\n                    }\n                }\n            } else {\n                // If password confirm field is empty, hide confirmation status and save button\n                passConfirmStatus.classList.add('e-alert__hidden');\n                btnSavePass.classList.add('hidden');\n            }\n        }\n    });\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/passwordcontrol.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/productDetailScrolling.js": (
    /*!******************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/productDetailScrolling.js ***!
      \******************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesProductDetailScrollingJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @glidejs/glide */ \"./node_modules/@glidejs/glide/dist/glide.esm.js\");\n/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Regelt sämtliche Scroll-Funktionen auf Produktdetailseiten\n * @author     Anna Morawe <anna.morawe@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\n\n\nconst productDetailPage = document.querySelector('.cl-details');\n\nfunction isElementNotInViewport(el) {\n\tconst rect = el.getBoundingClientRect();\n\treturn (\n\t\trect.bottom < 0 ||\n\t\trect.right < 0 ||\n\t\trect.top > (window.innerHeight || document.documentElement.clientHeight) ||\n\t\trect.left > (window.innerWidth || document.documentElement.clientWidth)\n\t);\n}\n\nfunction isElementPartiallyInViewport(el) {\n\tconst rect = el.getBoundingClientRect();\n\tconst viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n\tconst viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n\n\treturn (\n\t\trect.bottom > 0 &&\n\t\trect.right > 0 &&\n\t\trect.left < viewportWidth &&\n\t\trect.top < viewportHeight\n\t);\n}\n\nfunction isElementBottomInViewport(el) {\n\tconst rect = el.getBoundingClientRect();\n\tconst windowHeight = window.innerHeight || document.documentElement.clientHeight;\n\n\treturn rect.bottom >= 0 && rect.bottom <= windowHeight;\n}\n\nfunction introProductZoom() {\n\tconst frontViewImage = document.querySelector('.c-detail__images-item[data-anchor=\"frontView\"]');\n\tif (!frontViewImage) return;\n\n\tif (window.innerWidth >= 1024) {\n\t\tconst imageWrap = frontViewImage.querySelector('.c-detail__images-item--wrap');\n\t\tconst introHeight = frontViewImage.querySelector('.c-detail__images-item--intro').clientHeight;\n\t\tconst wrapHeight = imageWrap.clientHeight;\n\t\tconst wrapRect = imageWrap.getBoundingClientRect();\n\t\tconst wrapValue = wrapRect.y + wrapHeight;\n\t\tconst offsetTop = wrapValue - wrapHeight;\n\t\tconst scaleValue = (offsetTop / (wrapHeight / 2) + 1) * 33.33;\n\n\t\tconst detailFixed = document.querySelector('.c-detail__fixed');\n\t\tconst shouldShowFixed = window.scrollY - introHeight / 1.5 >= 0;\n\n\t\tdetailFixed.classList.toggle('js--visible', shouldShowFixed);\n\n\t\timageWrap.style.width = Math.round(offsetTop) >= 0 ? `${scaleValue}%` : '33.33%';\n\t} else {\n\t\tconst imageWrap = frontViewImage.querySelector('.c-detail__images-item--wrap');\n\t\timageWrap.style.width = 'unset';\n\t}\n}\n\nfunction nightView() {\n\tconst nightViewImage = document.querySelector('.c-detail__images-item[data-anchor=\"nightView\"]');\n\tif (!nightViewImage) return;\n\n\tconst nightviewEl = nightViewImage;\n\tconst nightviewHeight = nightviewEl.clientHeight;\n\tconst currentOffsetY = window.scrollY;\n\tconst nightviewRect = nightviewEl.getBoundingClientRect();\n\tconst nightviewOffsetY = nightviewRect.y + window.scrollY;\n\n\tconst header = document.querySelector('.c-header');\n\tconst body = document.querySelector('body');\n\tconst detail = document.querySelector('.c-detail');\n\tconst darkmodeStatus = document.body.classList.contains('is--darkmode');\n\n\tconst isNightViewFocused = currentOffsetY >= (nightviewOffsetY - nightviewHeight / 2) && currentOffsetY <= (nightviewOffsetY + nightviewHeight / 2);\n\n\tif (window.innerWidth >= 1024) {\n\t\tif (darkmodeStatus == false) {\n\t\t\theader.classList.toggle('is--dark-header', isNightViewFocused);\n\t\t\theader.classList.toggle('is--light-header', !isNightViewFocused);\n\t\t\tbody.classList.toggle('is--nightview', isNightViewFocused);\n\t\t}\n\t}\n}\n\nfunction handleStickyInfos() {\n\tif (window.innerWidth >= 1024) {\n\t\tconst imageContainer = document.querySelector('.c-detail__images');\n\t\tconst fixedInfos = document.querySelector('.c-detail__fixed');\n\t\tconst windowHeight = window.innerHeight;\n\n\t\tif (isElementPartiallyInViewport(imageContainer)) {\n\t\t\tfixedInfos.style.top = '0';\n\n\t\t\tif (isElementBottomInViewport(imageContainer)) {\n\t\t\t\tconst bottomOffset = imageContainer.getBoundingClientRect().bottom - windowHeight;\n\t\t\t\tfixedInfos.style.top = `${bottomOffset}px`;\n\t\t\t}\n\t\t}\n\n\t\tif (isElementNotInViewport(imageContainer)) {\n\t\t\tfixedInfos.classList.remove('js--visible');\n\t\t}\n\t}\n}\n\nfunction handleStickyHeader() {\n\tif (window.innerWidth >= 1024) {\n\t\tconst mainHeader = document.querySelector('.c-header');\n\t\tconst stickyHeader = document.querySelector('.c-detail__sticky');\n\t\tconst allContents = document.querySelectorAll('.c-detail__main');\n\n\t\tif (mainHeader && stickyHeader) {\n\t\t\tconst mainHeaderHeight = mainHeader.clientHeight;\n\t\t\tconst stickyHeaderHeight = stickyHeader.clientHeight;\n\t\t\tconst topWhenStickyVisible = `${mainHeaderHeight}px`;\n\t\t\tconst topWhenStickyHidden = `${mainHeaderHeight - stickyHeaderHeight - 1}px`;\n\n\t\t\tallContents.forEach(item => {\n\t\t\t\tconst isSticky = isElementNotInViewport(item);\n\t\t\t\tstickyHeader.style.top = isSticky ? topWhenStickyVisible : topWhenStickyHidden;\n\t\t\t\tstickyHeader.classList.toggle('js--sticky', isSticky);\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction setupAnchorLinks() {\n\tif (window.innerWidth >= 1024) {\n\t\tconst anchorContainer = document.querySelector('.c-detail__anchors');\n\t\tif (!anchorContainer) return;\n\n\t\tanchorContainer.addEventListener('click', event => {\n\t\t\tconst clickedItem = event.target.closest('.c-detail__anchors-item');\n\t\t\tif (!clickedItem) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconst anchor = clickedItem.getAttribute('data-target');\n\t\t\tconst targetElement = document.querySelector(`.c-detail__images-item[data-anchor=${anchor}]`);\n\n\t\t\tif (targetElement) {\n\t\t\t\tconst offsetY = targetElement.getBoundingClientRect().top + window.scrollY;\n\t\t\t\twindow.scrollTo({\n\t\t\t\t\ttop: offsetY,\n\t\t\t\t\tbehavior: 'smooth'\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction initializeProductSlider() {\n\tlet detailSlider;\n\n\tconst sliderElement = document.querySelector('.c-detail__images.glide');\n\n\tif (!sliderElement) {\n\t\treturn;\n\t}\n\n\tif (window.innerWidth >= 1024) {\n\t\tif (detailSlider) {\n\t\t\tdetailSlider.disable();\n\t\t}\n\t} else {\n\t\tdetailSlider = new _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__[\"default\"](sliderElement, {\n\t\t\ttype: 'slider',\n\t\t\tgap: 0,\n\t\t\tanimationDuration: 1000,\n\t\t\tanimationTimingFunc: 'cubic-bezier(.44,.05,.19,.94)',\n\t\t\tperView: 2,\n\t\t\tfocusAt: 'center',\n\t\t\tbreakpoints: {\n\t\t\t\t767: {\n\t\t\t\t\tperView: 1\n\t\t\t\t}\n\t\t\t}\n\t\t}).mount();\n\t}\n}\n\n\nlet isScrolling = false;\nlet isResizing = false;\n\nfunction onScroll() {\n\tif (!isScrolling) {\n\t\tisScrolling = true;\n\t\twindow.requestAnimationFrame(() => {\n\t\t\tintroProductZoom();\n\t\t\thandleStickyInfos();\n\t\t\tnightView();\n\t\t\thandleStickyHeader();\n\t\t\tisScrolling = false;\n\t\t});\n\t}\n}\n\nfunction onResize() {\n\tif (!isResizing) {\n\t\tisResizing = true;\n\t\twindow.requestAnimationFrame(() => {\n\t\t\tinitializeProductSlider();\n\t\t\tintroProductZoom();\n\t\t\thandleStickyInfos();\n\t\t\tnightView();\n\t\t\tsetupAnchorLinks();\n\t\t\thandleStickyHeader();\n\t\t\tisResizing = false;\n\t\t});\n\t}\n}\n\nfunction initialSetup() {\n\tinitializeProductSlider();\n\tintroProductZoom();\n\thandleStickyInfos();\n\tnightView();\n\tsetupAnchorLinks();\n\thandleStickyHeader();\n}\n\nif (productDetailPage) {\n\tdocument.addEventListener('DOMContentLoaded', initialSetup);\n\twindow.addEventListener('scroll', onScroll);\n\twindow.innerWidth >= 1024 ? window.addEventListener('resize', onResize) : null;\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/productDetailScrolling.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/productslider.js": (
    /*!*********************************************************!*\
      !*** ./source/out/sinn/src/js/modules/productslider.js ***!
      \*********************************************************/
    /***/
    function sourceOutSinnSrcJsModulesProductsliderJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @glidejs/glide */ \"./node_modules/@glidejs/glide/dist/glide.esm.js\");\n\n\nif (document.querySelector('.js-productslider')) {\n\tvar productslider = new _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('.js-productslider', {\n\t\ttype: 'carousel',\n\t\tperView: 2,\n\t\tanimationDuration: 1000,\n\t\tanimationTimingFunc: 'cubic-bezier(.44,.05,.19,.94)',\n\t\tgap: 0,\n\t\tpeek: {\n\t\t\tbefore: 0,\n\t\t\tafter: 180\n\t\t},\n\t\tbreakpoints: {\n\t\t\t1024: {\n\t\t\t\tperView: 1,\n\t\t\t\tpeek: {\n\t\t\t\t\tbefore: 0,\n\t\t\t\t\tafter: 220\n\t\t\t\t}\n\t\t\t},\n\t\t\t768: {\n\t\t\t\tperView: 1,\n\t\t\t\tpeek: {\n\t\t\t\t\tbefore: 0,\n\t\t\t\t\tafter: 80\n\t\t\t\t}\n\t\t\t},\n\t\t\t400: {\n\t\t\t\tperView: 1,\n\t\t\t\tpeek: {\n\t\t\t\t\tbefore: 0,\n\t\t\t\t\tafter: 80\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tproductslider.mount()\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/productslider.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/register.js": (
    /*!****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/register.js ***!
      \****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesRegisterJs() {
      eval("/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Form validation for our fancy registration form\n * @author     Anna Morawe <anna.morawe@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\nconst fancyRegistrationForm = document.querySelector('.js--fancyFormErrors');\n\nif (fancyRegistrationForm) {\n\tfancyRegistrationForm.addEventListener('submit', function(event) {\n\n\t\tevent.preventDefault();\n\n\t\tfancyRegistrationForm.querySelector('.c-register__error').innerHTML = '';\n\t\tfancyRegistrationForm.querySelector('.c-register__error').style.display = 'none';\n\n\t\t$.ajax({\n\t\t\tmethod: \"POST\",\n\t\t\turl: document.getElementById('ajaxTargetMB').value + \"cl=user&fnc=validateUserDataForRegister&stoken=\" + document.getElementById('sessionTokenMB').value,\n\t\t\tdata: {\n\t\t\t\tusername: fancyRegistrationForm.querySelector(\"[name='lgn_usr']\").value,\n\t\t\t\tpassword: fancyRegistrationForm.querySelector(\"[name='lgn_pwd']\").value,\n\t\t\t\tcheck_password: fancyRegistrationForm.querySelector(\"[name='lgn_pwd2']\").value\n\t\t\t},\n\t\t\tsuccess: function(ret, data) {\n\t\t\t\tif (ret.length) {\n\t\t\t\t\tfancyRegistrationForm.querySelector('.c-register__error').innerHTML = ret;\n\t\t\t\t\tfancyRegistrationForm.querySelector('.c-register__error').style.display = 'block';\n\t\t\t\t} else {\n\t\t\t\t\tif (!fancyRegistrationForm.querySelector('.is--error')) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Tracking\n\t\t\t\t\t\t\t_etracker.sendEvent(new et_UserDefinedEvent('Standardformular', 'Registrierung', 'Formular abgesendet', 'Formular'));\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t// Submit\n\t\t\t\t\t\t\tfancyRegistrationForm.submit();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/register.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/retailer.js": (
    /*!****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/retailer.js ***!
      \****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesRetailerJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n/* harmony import */ var _retailerMap_GoogleMap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./retailerMap/GoogleMap */ \"./source/out/sinn/src/js/modules/retailerMap/GoogleMap.js\");\n\n\n\nvar retailerMap     = document.querySelector('.c-retailer__map');\nvar retailerResults     = document.querySelector('.c-retailer .c-retailer__results');\nvar retailerNoResults   = document.querySelector('.c-retailer__noresults');\nvar retailerForm        = document.querySelector('.c-retailer__submit');\nvar retailerInput       = document.querySelector('.c-retailer__submit .e-form__input');\nvar retailerSuggestions = document.querySelector('.c-retailer__searchresults--list');\n\nvar retailerBaseURL       = '/widget.php?actcontrol=start&cl=showdealers&searchdealer=';\nvar cubicBezier           = 'cubicBezier(.40,.05,.20,.90)';\n\nvar retailerTerm, retailerResultsURL, content, items, resultsItems, languageParam;\nvar isAutoSearch = true;\n\nvar fetchResults = function (event) {\n    if (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        if (event.keyCode == 13) {\n            event.preventDefault();\n            return false;\n        }\n        isAutoSearch = false;\n    }\n\n    // Reset \"results\" message at the start of each search\n    retailerNoResults.style.display = 'none';\n    retailerResults.style.display = 'none';\n    retailerResults.style.opacity = '0';\n\n    // Use selectedUserCountry if input is empty\n    retailerTerm = document.querySelector('.c-retailer .c-retailer__row .e-form__input').value || selectedUserCountry;\n    languageParam = '&lang=' + document.querySelector('.c-retailer .c-retailer__row input[name=\"lang\"]').value;\n    retailerResultsURL = (retailerBaseURL + retailerTerm + languageParam);\n\n    // Animate new contents\n    (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        targets: retailerResults,\n        opacity: '0',\n        duration: 250,\n        easing: cubicBezier\n    });\n\n    (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n        targets: retailerNoResults.querySelector('.c-retailer__noresults-text'),\n        opacity: '0',\n        delay: 0,\n        duration: 250,\n        easing: cubicBezier\n    });\n\n    fetch(retailerResultsURL)\n        .then(function (response) {\n            return response.text();\n        })\n        .then(function (html) {\n            // Parse HTML content\n            var parser = new DOMParser();\n            var results = parser.parseFromString(html, 'text/html');\n\n            // Fill Container with items\n            items = results.querySelector('.c-retailer__query');\n            content = items.innerHTML;\n            retailerResults.innerHTML = content;\n        })\n        .then(function () {\n            resultsItems = document.querySelectorAll('.c-retailer__results .c-retailer__item');\n\n            if (resultsItems.length > 0) {\n                retailerResults.style.display = 'flex';\n                retailerNoResults.style.display = 'none';\n\n                // Animate new contents\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: retailerResults,\n                    delay: 250,\n                    opacity: '1',\n                    duration: 0,\n                    easing: cubicBezier\n                });\n            } else if (!isAutoSearch) {\n                retailerResults.style.display = 'none';\n                retailerNoResults.style.display = 'flex';\n\n                // Animate no results text\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: retailerNoResults,\n                    opacity: '1',\n                    delay: 250,\n                    duration: 0,\n                    easing: cubicBezier\n                });\n            } else if (isAutoSearch) {\n                retailerResults.style.display = 'flex';\n                retailerNoResults.style.display = 'none';\n\n                // Animate new contents\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: retailerResults,\n                    delay: 250,\n                    opacity: '1',\n                    duration: 0,\n                    easing: cubicBezier\n                });\n            }\n        })\n        .catch(function (err) {\n            console.log(err);\n        });\n\n    return false;\n};\n\nretailerInput.addEventListener('keyup', fetchResults, false);\nretailerForm.addEventListener('submit', fetchResults, false);\n\n\n// =====================================================================================================\n// Google Maps\n\n// show consent form and listen to the consent button\ndocument.addEventListener('DOMContentLoaded', () => {\n\tsetConsentStateClasses();\n\n\tconst consentBox = document.getElementById('consentBox');\n\tconst consentButton = consentBox.querySelector('.consent-button');\n\tif (consentButton) {\n\t\tconsentButton.addEventListener('click', (evt) => {\n\t\t\tconsent();\n\t\t\tsetConsentStateClasses();\n\t\t})\n\t}\n\n    isAutoSearch = true;\n\n    const rejectButton = consentBox.querySelector('.reject-button');\n    if (rejectButton) {\n        rejectButton.addEventListener('click', (evt) => {\n            document.cookie = \"gmConsent=false; path=/; secure; samesite; domain=\" + window.location.hostname + \";\"\n            //document.getElementById('map').style.display = 'none'\n\t        setConsentStateClasses();\n        })\n    }\n})\n\n// give consent\nconst consent = () => {\n\t// set session cookie\n\tdocument.cookie = \"gmConsent=true; path=/; secure; samesite; domain=\" + window.location.hostname + \";\"\n\thideConsentLayer()\n\tinitMap()\n}\n\n// manages classes depending on consent status\nconst setConsentStateClasses = () => {\n\tconst getCookie = (name) => {\n\t\tconst value = `; ${document.cookie}`;\n\t\tconst parts = value.split(`; ${name}=`);\n\t\tif (parts.length === 2) return parts.pop().split(';').shift();\n\t\treturn null;\n\t};\n\tconst gmConsent = getCookie('gmConsent');\n\n\tif (gmConsent === null) {\n\t\t//console.log('Consent NOT DECIDED YET');\n\t\tretailerMap.classList.add('consent-expected');\n\t\treturn;\n\t}\n\n\tconst mapElement = document.getElementById('map');\n\n\tif (gmConsent === 'true') {\n\t\tmapElement.classList.add('consent-yes');\n\t\tmapElement.classList.remove('consent-no');\n\t\tmapElement.classList.remove('consent-expected');\n\t\t//console.log('Consent YES');\n\t} else if (gmConsent === 'false') {\n\t\tmapElement.classList.add('consent-no');\n\t\tmapElement.classList.remove('consent-yes');\n\t\tmapElement.classList.remove('consent-expected');\n\t\t//console.log('Consent NO');\n\t}\n}\n\n\n// hide the consent form\nconst hideConsentLayer = () => {\n\tconsentBox.style.display = 'none';\n}\n\n// obeserve, if map is visible\nconst observer = new IntersectionObserver( entries => {\n\tentries.forEach(entry => {\n\t\tif (entry.isIntersecting) {\n\t\t\tinitMap()\n\t\t\tobserver.unobserve(entry.target)\n\t\t}\n\t})\n}, { threshold: 1 })\n\n// hide consent form and show map, if cookie is present and true\nif (document.cookie.includes('gmConsent=true')) {\n\thideConsentLayer();\n\tobserver.observe(document.getElementById('map'))\n}\n\n// initialize the map when consent is given\nconst initMap = () => {\n\tlet mapContainer = document.getElementById('map');\n\tconst gmConsent = document.cookie.includes('gmConsent=true');\n\n\tif (gmConsent && mapContainer) {\n\t\tretailerInput.removeEventListener('keyup', fetchResults, false);\n\t\tretailerForm.removeEventListener('submit', fetchResults, false);\n\n\t\t_retailerMap_GoogleMap__WEBPACK_IMPORTED_MODULE_1__.GoogleMap('#map');\n\t\t_retailerMap_GoogleMap__WEBPACK_IMPORTED_MODULE_1__.initSearch();\n\t}\n};\n\n\n// reset the map and search, if the layer is closed\nconst closeButton = document.querySelector('.c-retailer__close')\ncloseButton.addEventListener('click', (e) => {\n\t_retailerMap_GoogleMap__WEBPACK_IMPORTED_MODULE_1__.resetToDefault()\n})\n\n// Init the search on the first awake with the user country\ndocument.addEventListener('DOMContentLoaded', function () {\n    const retailerParam = document.getElementById('retailerParam');\n\n    const observer = new MutationObserver(() => {\n        const retailerSuggestionsItems = retailerSuggestions.querySelectorAll('li');\n        const updateDisplay = () => {\n            const isInputEmpty = retailerParam.value.trim() === '';\n\n            if (retailerSuggestionsItems.length > 0 || isInputEmpty) {\n                // Show retailer results, hide \"no results\" message if input is empty or there are suggestions\n                retailerResults.style.display = 'flex';\n                retailerNoResults.style.display = 'none';\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: retailerResults,\n                    opacity: '1',\n                    duration: 250,\n                    easing: cubicBezier\n                });\n            } else {\n                // Show \"no results\" message if input is not empty and there are no suggestions\n                retailerNoResults.style.display = 'flex';\n                (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                    targets: retailerNoResults.querySelector('.c-retailer__noresults-text'),\n                    opacity: '1',\n                    duration: 250,\n                    easing: cubicBezier\n                });\n            }\n        };\n\n        updateDisplay();\n    });\n    observer.observe(retailerSuggestions, { childList: true });\n\n    // Handle input changes to show \"no results\" or reset display based on the input state\n    retailerParam.addEventListener('input', () => {\n        const retailerSuggestionsItems = retailerSuggestions.querySelectorAll('li');\n        const isInputEmpty = retailerParam.value.trim() === '';\n\n        if (isInputEmpty) {\n            // Reset display when input is cleared\n            retailerResults.style.display = 'flex';\n            retailerNoResults.style.display = 'none';\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: retailerResults,\n                opacity: '1',\n                duration: 250,\n                easing: cubicBezier\n            });\n        } else if (retailerSuggestionsItems.length === 0) {\n            // Show \"no results\" if input is not empty and there are no matching suggestions\n            retailerResults.style.display = 'none';\n            retailerNoResults.style.display = 'flex';\n            (0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n                targets: retailerNoResults.querySelector('.c-retailer__noresults-text'),\n                opacity: '1',\n                duration: 250,\n                easing: cubicBezier\n            });\n        }\n    });\n\n    // Initialize search with the user's country from the cookie\n    initMapWithCountryFromCookie();\n});\n\nfunction initMapWithCountryFromCookie() {\n    retailerInput.value = selectedUserCountry;\n    fetchResults();\n    retailerInput.value = \"\";\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/retailer.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/retailerMap/GoogleMap.js": (
    /*!*****************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/retailerMap/GoogleMap.js ***!
      \*****************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesRetailerMapGoogleMapJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   GoogleMap: () => (/* binding */ GoogleMap),\n/* harmony export */   initSearch: () => (/* binding */ initSearch),\n/* harmony export */   resetToDefault: () => (/* binding */ resetToDefault)\n/* harmony export */ });\n/* harmony import */ var _GoogleMapsApi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GoogleMapsApi */ \"./source/out/sinn/src/js/modules/retailerMap/GoogleMapsApi.js\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config */ \"./source/out/sinn/src/js/modules/retailerMap/config.js\");\n\n\n\nconst searchForm = document.getElementById(_config__WEBPACK_IMPORTED_MODULE_1__.config.searchFormId)\nconst searchField = searchForm.querySelector('input[type=\"text\"]')\nconst searchResults = document.getElementById('searchResults')\nconst resultContainer = document.querySelector(_config__WEBPACK_IMPORTED_MODULE_1__.config.retailerResultContainer)\nconst dataContainer = document.querySelector(_config__WEBPACK_IMPORTED_MODULE_1__.config.retailerDataContainer)\nlet gmapApiKey\nsetGmApiKey()\n\n/**\n * Location Map\n * Main map rendering function that uses our GMaps API class\n * @param {string} el - Google Map selector\n */\nfunction GoogleMap(el) {\n\n    const gmapApi = new _GoogleMapsApi__WEBPACK_IMPORTED_MODULE_0__[\"default\"](gmapApiKey, _config__WEBPACK_IMPORTED_MODULE_1__.config.language)\n    const mapEl = document.querySelector(el)\n\n    // Call map renderer\n    gmapApi.load().then(() => {\n        renderMap(mapEl)\n    })\n}\n\n/**\n * Render Map\n * @param {map obj} mapEl - Google Map\n * @param {obj} data - map data\n */\nfunction renderMap(mapEl) {\n\n    const options = {\n        styles: _config__WEBPACK_IMPORTED_MODULE_1__.mapStyle,\n        zoom: _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.zoom,\n        disableDefaultUI: _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.disableDefaultUI,\n        fullscreenControl: _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.fullscreenControl,\n        zoomControl: _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.zoomControl\n    }\n\n    window.map = new google.maps.Map(mapEl, options)\n    window.markers = []\n    window.retailers = []\n    window.infowindows = []\n    window.place = {}\n    window.placeIsCountry = false\n\n    // ToDo: if refactored, fetch the elements as json and handle just the data...\n    // fetch result items\n    fetch(_config__WEBPACK_IMPORTED_MODULE_1__.config.retailerItemsUrl)\n        .then(function (response) {\n            return response.text()\n        })\n        .then(function (html) {\n            // Parse HTML content\n            var parser = new DOMParser()\n            var results = parser.parseFromString(html, 'text/html')\n\n            // Fill Data Container with items\n            let content = results.querySelector('.c-retailer__query').innerHTML\n            dataContainer.style.display = 'none'\n            dataContainer.innerHTML = content\n\n            // set Marker\n            document.querySelectorAll('.c-retailer .c-retailer__data .c-retailer__item').forEach((retailer) => {\n\n                let retailerData = {\n                    oxid: retailer.getAttribute('data-id'),\n                    lat: retailer.getAttribute('data-lat'),\n                    lng: retailer.getAttribute('data-lng'),\n                    title: retailer.querySelector('.d-name').innerText,\n                    street: retailer.querySelector('.d-street').innerText,\n                    zip: retailer.querySelector('.d-zip').innerText,\n                    city: retailer.querySelector('.d-city').innerText,\n                    country: retailer.querySelector('.d-country').innerText,\n                    phone: retailer.getAttribute('data-phone')\n                }\n                if (retailerData.lat && retailerData.lng) {\n                    renderMarker(retailerData)\n                    window.retailers.push(retailerData)\n                }\n            })\n        })\n        .catch(function (err) {\n            console.log(err)\n        })\n    centerMap()\n}\n\nasync function centerMap() {\n    const coordinates = ( document.oxid.selectedCountry ? await geoCodeInitialCountry(document.oxid.selectedCountry) : _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.center)\n    window.map.setCenter(\n        new google.maps.LatLng(coordinates.lat, coordinates.lng)\n    )\n}\n\n/**\n * fetch the initial coordinates based on selected country\n * @param country\n * @returns {Promise<*>}\n */\nfunction geoCodeInitialCountry(country) {\n    return fetch(`https://maps.googleapis.com/maps/api/geocode/json?address=${country}&key=${gmapApiKey}`)\n        .then((response) => {\n            return response.json()\n        }).then(jsonData => {\n            return jsonData.results[0].geometry.location\n        })\n        .catch(error => {\n            console.log(error)\n        })\n}\n\n/**\n * Render Marker\n * Renders custom map marker and infowindow\n * @param {object} data\n */\nfunction renderMarker(data) {\n\n    const icon = {\n        url: _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.iconBase + _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.icon,\n        scaledSize: new google.maps.Size(_config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.iconDimension, _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.iconDimension)\n    }\n\n    const tmpl = (0,_config__WEBPACK_IMPORTED_MODULE_1__.infoBoxTpl)(data)\n\n    const marker = new google.maps.Marker({\n        position: new google.maps.LatLng(data.lat, data.lng),\n        map: window.map,\n        icon: icon,\n        title: data.title,\n        content: tmpl,\n        animation: google.maps.Animation.DROP,\n        oxid: data.oxid\n    })\n    window.markers.push(marker)\n    handleMarkerClick(marker)\n}\n\n/**\n * Handle Marker Click\n * @param {marker} marker\n * @param {infowindow} infoWindow\n */\nfunction handleMarkerClick(marker) {\n\n    google.maps.event.addListener(marker, 'click', function () {\n        openInfoWindow(marker)\n    })\n\n    google.maps.event.addListener(window.map, 'click', function (event) {\n        closeAllInfoWindows()\n    })\n\n    let resultItem = document.querySelector('.c-retailer__item[data-id=\"' + marker.oxid + '\"] .c-retailer__item--headline')\n    resultItem.addEventListener('click', function (event) {\n        openInfoWindow(marker)\n    })\n}\n\n/**\n * Close all info windows\n */\nfunction closeAllInfoWindows() {\n\n    window.infowindows.forEach((infowindow) => {\n        infowindow.close(window.map, infowindow)\n    })\n    window.infowindows = []\n\n    window.markers.forEach((marker) => {\n        marker.setIcon({\n            url: _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.iconBase + _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.icon,\n            scaledSize: new google.maps.Size(_config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.iconDimension, _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.iconDimension)\n        })\n    })\n}\n\n/**\n * Open info window\n * @param marker\n */\nfunction openInfoWindow(marker) {\n\n    closeAllInfoWindows()\n\n    let infowindow = new google.maps.InfoWindow({\n        content: marker.content\n    })\n    infowindow.open(window.map, marker)\n    window.infowindows.push(infowindow)\n\n    marker.setIcon({\n        url: _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.iconBase + _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.openIcon,\n        scaledSize: new google.maps.Size(_config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.iconDimension, _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.iconDimension)\n    })\n}\n\n/**\n * Initialize the Search\n */\nfunction initSearch() {\n    searchField.addEventListener('keyup', geoSearch, false)\n    searchForm.addEventListener('submit', (evt) => {\n        evt.preventDefault()\n    }, false)\n}\n\n/**\n * Reset the map and searchform to default state\n */\nfunction resetToDefault() {\n    if (!window.map instanceof Element) {\n        centerMap()\n    }\n    searchResults.innerHTML = ''\n    searchField.value = ''\n}\n\n/**\n * Perform the Search\n * @param {Event} evt\n */\nconst geoSearch = (evt) => {\n    if (evt.keyCode == 13) return false\n    evt.preventDefault()\n    let searchParam = searchField.value\n    if (searchParam != \"\") {\n        const service = new google.maps.places.AutocompleteService()\n        service.getQueryPredictions({input: evt.target.value, language: _config__WEBPACK_IMPORTED_MODULE_1__.config.language}, displaySuggestions)\n    }\n}\n\n/**\n * Display the search results\n * @param {Google Obj} predictions\n * @param {status} status\n */\nconst displaySuggestions = function (predictions, status) {\n    searchResults.innerHTML = ''\n    if (status != google.maps.places.PlacesServiceStatus.OK || !predictions) {\n        console.log(status)\n        return\n    }\n\n    predictions.forEach((prediction) => {\n        const li = document.createElement(\"li\")\n        li.setAttribute('data-place-id', prediction.place_id)\n\n        li.appendChild(document.createTextNode(prediction.description))\n        li.addEventListener('click', selectLocation, false)\n        searchResults.appendChild(li)\n    })\n}\n\n/**\n * Select the location\n * @param {Event} evt\n */\nconst selectLocation = async (evt) => {\n    searchField.value = evt.target.innerText\n    const relocated = await relocateMap(evt.target.dataset.placeId)\n    // ugly workaround ... without timeout, the results of the previous location would be displayed :-(\n    // will try to find a better solution with the refactoring of this\n    window.setTimeout(() => {\n        updateResults()\n    }, 500)\n}\n\n/**\n * Relocate the map to the selected place\n * @param {Place} placeId\n * @returns {boolean}\n */\nconst relocateMap = (placeId) => {\n    let request = {\n        placeId: placeId,\n        fields: ['name', 'geometry']\n    }\n    let serviceDetails = new google.maps.places.PlacesService(map)\n    serviceDetails.getDetails(request, function (place, status) {\n\n        let placeName = place.name\n\n        // quick fix :: exception for USA, because of system names\n        // TODO: refactor to mapping table\n        if (placeName == 'États-Unis') placeName = 'États-Unis d\\'Amérique'\n        if (placeName == 'USA') placeName = 'Vereinigte Staaten von Amerika'\n        if (placeName == 'Hongkong') placeName = 'Hong Kong'\n\n        // exception for metropolitan areas\n        const metros = ['HongKong', 'Hong Kong']\n        let isCountry = false\n        if( metros.find((place) => place === placeName )){\n            isCountry = true\n        }else{\n            // is the searched place a country?\n            isCountry = window.retailers.find(({ country }) => country === placeName);\n        }\n\n        if (status === google.maps.places.PlacesServiceStatus.OK) {\n            if (!place.geometry) {\n                console.log(\"Returned place contains no geometry\")\n                return false\n            }\n\n            let sortedResults = sortRetailersByDistance(place.geometry.location.lat(), place.geometry.location.lng())\n            let latlng = []\n            let bounds = new google.maps.LatLngBounds()\n\n            if (!isCountry) {\n                for (var i = 0; i < _config__WEBPACK_IMPORTED_MODULE_1__.mapConfig.minimumMarkers; i++) {\n                    latlng[i] = new google.maps.LatLng(sortedResults[i].coordinates[0], sortedResults[i].coordinates[1])\n                }\n            }else{\n                // only include retailers from this country\n                for (var i = 0; i < sortedResults.length; i++) {\n                    if (sortedResults[i].country == placeName) {\n                        latlng[i] = new google.maps.LatLng(sortedResults[i].coordinates[0], sortedResults[i].coordinates[1])\n                    }\n                }\n            }\n\n            // current location\n            latlng.push(place.geometry.location)\n\n            // extend view to minimum marker count\n            latlng.forEach(pos => {\n                bounds.extend(pos)\n            })\n\n            window.map.setCenter(bounds.getCenter())\n            window.map.fitBounds(bounds)\n\n            window.place = placeName\n            window.placeIsCountry = (isCountry !== undefined)\n        }\n    })\n\n    return true\n}\n\n/**\n * sort the retailers by distance to selected google place\n * @param lat\n * @param lng\n * @returns {*[]}\n */\nconst sortRetailersByDistance = (lat, lng) => {\n    let sortedlocations = []\n\n    window.retailers.forEach(retailer => {\n        let dis = getDistance([lat, lng], [retailer.lat, retailer.lng])\n\n        sortedlocations.push({\n            coordinates: [retailer.lat, retailer.lng],\n            distance: dis,\n            marker: window.markers.find(marker => marker.oxid === retailer.oxid),\n            country: retailer.country\n        })\n        retailer.distance = dis\n\n    })\n\n    sortedlocations = sortedlocations.sort((a, b) => {\n        return parseFloat(a.distance) - parseFloat(b.distance)\n    })\n\n    return sortedlocations\n}\n\n\n/**\n * calculate distance between two positions\n * @param  array loc1 startpoint\n * @param  array loc2 endpoint\n *\n * @return float\n */\nconst getDistance = (loc1, loc2) => {\n    var radlat1 = Math.PI * loc1[0] / 180\n    var radlat2 = Math.PI * loc2[0] / 180\n    var theta = loc1[1] - loc2[1]\n    var radtheta = Math.PI * theta / 180\n    var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta)\n\n    dist = Math.acos(dist)\n    dist = dist * 180 / Math.PI\n    dist = dist * 60 * 1.1515\n\n    return dist\n}\n\n/**\n * Update search results, after the map is relocated\n */\nconst updateResults = () => {\n    searchResults.innerHTML = \"\"\n    resultContainer.innerHTML = \"\"\n    let resultElements = []\n    let visibleMarkers = getVisibleMarkers()\n\n    for (var i = 0; i < window.retailers.length; i++) {\n        let retailer = window.retailers[i]\n\n        // if the search was a country only show retailers, that are in this country\n        let showRetailer = false\n        if (!window.placeIsCountry) {\n            if (visibleMarkers.find(vmarker => vmarker.oxid === retailer.oxid)) showRetailer = true\n        }else {\n            if (retailer.country === window.place) showRetailer = true\n        }\n\n        if (showRetailer === true) {\n            let resultElement = dataContainer.querySelector('.c-retailer__item[data-id=\"' + retailer.oxid + '\"]').cloneNode(true)\n\n            if (!window.placeIsCountry) {\n                resultElement.setAttribute('data-dist', retailer.distance)\n\n                let distanceEl = document.createTextNode(' (' + Math.round(retailer.distance * 100) / 100 + ' km)');\n                resultElement.querySelector('.d-name').append(distanceEl)\n            }\n\n            resultElements.push(resultElement)\n        }\n    }\n\n    resultElements\n        .sort(function(a, b) {\n            return (parseFloat(a.dataset.dist) > parseFloat(b.dataset.dist) ? 1 : -1)\n        })\n        .forEach(element => resultContainer.appendChild(element).classList.remove('is--hidden'))\n\n    let spanElement = document.createElement('span')\n    spanElement.classList.add('c-retailer__resultno')\n    spanElement.innerHTML = oWave.i18n.DOTFLY_DEALERFINDER_RESULTS + ' ' + resultElements.length\n\n    resultContainer.style.display = 'block'\n    resultContainer.insertBefore(spanElement, resultContainer.firstChild)\n\n    openFirstResult()\n}\n\n/**\n * show info window of the first result\n */\nconst openFirstResult = () => {\n    let firstVisibleResult = resultContainer.querySelector('.c-retailer__item:not(.is--hidden)')\n    if (firstVisibleResult) {\n        let newMarker = window.markers.find(marker => marker.oxid === firstVisibleResult.getAttribute('data-id'))\n        openInfoWindow(newMarker)\n    }\n}\n\n/**\n * retrieve visible markers from map\n * @returns {*[]}\n */\nconst getVisibleMarkers = () => {\n    let visibleMarkers = []\n    let bounds = window.map.getBounds()\n\n    for (var i = 0; i < window.markers.length; i++) {\n        var marker = window.markers[i]\n        if (bounds.contains(marker.getPosition()) === true) {\n            visibleMarkers.push(marker)\n        }\n    }\n    return visibleMarkers\n}\n\n/**\n * fetch the api key\n * @returns {Promise<*>}\n */\nasync function fetchGmApiKey() {\n    try {\n        const response = await fetch('/?cl=apicontroller&fnc=getGoogleMapsApiKey')\n        if (!response.ok) {\n            throw new Error('Failed to retrieve API key')\n        }\n        const data = await response.json()\n        return data.apiKey\n    } catch (error) {\n        console.error(error)\n        throw error\n    }\n}\n\n/**\n * set the api key\n * @returns {Promise<*>}\n */\nasync function setGmApiKey() {\n    try {\n        gmapApiKey = await fetchGmApiKey()\n    } catch (error) {\n        console.error(error)\n    }\n}\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/retailerMap/GoogleMap.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/retailerMap/GoogleMapsApi.js": (
    /*!*********************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/retailerMap/GoogleMapsApi.js ***!
      \*********************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesRetailerMapGoogleMapsApiJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * GoogleMapsApi\n * Class to load google maps api with api key\n * and global Callback to init map after resolution of promise.\n * Credits: https://github.com/stephenscaff/google-maps-es6\n *\n * @exports {GoogleMapsApi}\n * @example MapApi = new GoogleMapsApi();\n *          MapApi.load().then(() => {});\n */\nclass GoogleMapsApi {\n\n    /**\n     * Constructor\n     * @property {string} apiKey\n     * @property {string} callbackName\n     */\n    constructor(gApiKey, langIso) {\n\n        // api key for google maps\n        this.apiKey = gApiKey;\n        // language to use\n        this.langIso = langIso;\n\n        // Set global callback\n        if (!window._GoogleMapsApi) {\n            this.callbackName = '_GoogleMapsApi.mapLoaded';\n            window._GoogleMapsApi = this;\n            window._GoogleMapsApi.mapLoaded = this.mapLoaded.bind(this);\n        }\n    }\n\n    /**\n     * Load\n     * Create script element with google maps\n     * api url, containing api key and callback for\n     * map init.\n     * @return {promise}\n     * @this {_GoogleMapsApi}\n     */\n    load() {\n        if (!this.promise) {\n            this.promise = new Promise(resolve => {\n                this.resolve = resolve;\n\n                if (typeof window.google === 'undefined') {\n                    const script = document.createElement('script');\n                    script.src = `//maps.googleapis.com/maps/api/js?key=${this.apiKey}&libraries=places&language=${this.langIso}&callback=${this.callbackName}`;\n                    script.async = true;\n                    document.body.append(script);\n\n                } else {\n                    this.resolve();\n                }\n            });\n        }\n\n        return this.promise;\n    }\n\n    /**\n     * mapLoaded\n     * Global callback for loaded/resolved map instance.\n     * @this {_GoogleMapsApi}\n     *\n     */\n    mapLoaded() {\n\n        if (this.resolve) {\n            this.resolve();\n        }\n    }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GoogleMapsApi);\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/retailerMap/GoogleMapsApi.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/retailerMap/config.js": (
    /*!**************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/retailerMap/config.js ***!
      \**************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesRetailerMapConfigJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   config: () => (/* binding */ config),\n/* harmony export */   infoBoxTpl: () => (/* binding */ infoBoxTpl),\n/* harmony export */   mapConfig: () => (/* binding */ mapConfig),\n/* harmony export */   mapStyle: () => (/* binding */ mapStyle)\n/* harmony export */ });\nfunction infoBoxTpl(data){\n\tconst searchData = encodeURIComponent(data.street + ', ' + data.zip + ' ' + data.city + ', ' + data.country);\n\treturn '<div class=\"c-retailer__infobox\"><h3 class=\"c-retailer__infobox--headline\">' + data.title + '</h3>' +\n\t\t\t '<p class=\"c-retailer__infobox--address\">' +\n\t\t\tdata.street + '<br>' +\n\t\t\tdata.zip + ' ' + data.city + '<br>' +\n\t\t\tdata.country + '</p>' +\n\t\t\t'<a class=\"c-retailer__infobox--route\" href=\"https://www.google.com/maps/search/' + searchData + '\" target=\"_new\">'+ oWave.i18n.DOT_MAP_ROUTE + '</a><br>' +\n            (data.phone !== '' ? '<a class=\"c-retailer__infobox--phone\" href=\"tel:' + data.phone + '\">'+ oWave.i18n.DOT_MAP_PHONE + '</a>' : '') +\n\t\t\t'</div>';\n}\n\nconst config = {\n    retailerJsonUrl: '/widget.php?actcontrol=start&cl=showdealers&showalldealerdatajson=1',\n    retailerItemsUrl: '/widget.php?actcontrol=start&cl=showdealers&showalldealers=1',\n    searchFormId: 'retailerForm',\n    retailerResultContainer: '.c-retailer__results',\n    retailerDataContainer: '.c-retailer__data',\n    language: document.oxid.languageIso\n}\n\nconst mapConfig = {\n    iconBase: '/out/sinn/img/map/',\n    icon: 'location_white.svg',\n    openIcon: 'location_black.svg',\n    iconDimension: 40,\n    center: { lat: 51.163409, lng: 10.447718 }, // center germany by default\n\tzoom: 6,\n\tdisableDefaultUI: true, // Hide all controls and enable only the ones we need\n\tfullscreenControl: true,\n\tzoomControl: true,\n    minimumMarkers: 3,\n    retailerUrl: '/widget.php?actcontrol=start&cl=showdealers&showalldealerdata=1'\n};\n\nconst mapStyle = [\n    {\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#f5f5f5\"\n            }\n        ]\n    },\n    {\n        \"elementType\": \"labels.icon\",\n        \"stylers\": [\n            {\n                \"visibility\": \"off\"\n            }\n        ]\n    },\n    {\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#616161\"\n            }\n        ]\n    },\n    {\n        \"elementType\": \"labels.text.stroke\",\n        \"stylers\": [\n            {\n                \"color\": \"#f5f5f5\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"administrative.land_parcel\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#bdbdbd\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#eeeeee\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#757575\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.park\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#e5e5e5\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi.park\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#9e9e9e\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#ffffff\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#757575\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#dadada\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#616161\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#9e9e9e\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"transit.line\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#e5e5e5\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"transit.station\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#eeeeee\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"water\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#c9c9c9\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"water\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#9e9e9e\"\n            }\n        ]\n    }\n];\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/retailerMap/config.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/search.js": (
    /*!**************************************************!*\
      !*** ./source/out/sinn/src/js/modules/search.js ***!
      \**************************************************/
    /***/
    function sourceOutSinnSrcJsModulesSearchJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n/* harmony import */ var _lazyload_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lazyload.js */ \"./source/out/sinn/src/js/modules/lazyload.js\");\n\n\n\n// General Vars\nvar searchComponent \t\t= document.querySelector('.c-search');\nvar searchTabs \t\t\t\t= document.querySelector('.c-search__tabs');\nvar searchProductResults \t= document.querySelector('.c-search__tabs div[data-id=\"search__products\"]');\nvar searchContentResults \t= document.querySelector('.c-search__tabs div[data-id=\"search__pages\"]');\nvar searchProductTab \t\t= document.querySelector('.c-search__tabs-trigger[data-target=\"search__products\"]');\nvar searchContentTab \t\t= document.querySelector('.c-search__tabs-trigger[data-target=\"search__pages\"]');\nvar searchProductCounts \t= document.querySelector('.c-search__products-count');\nvar searchContentCounts \t= document.querySelector('.c-search__contents-count');\nvar searchLoader \t\t\t= document.querySelector('.c-search__loader');\nvar searchNoResults \t\t= document.querySelector('.c-search__noresults');\nvar searchInput \t\t\t= document.querySelector('.c-search__row .e-form__input');\nvar searchTabsTriggers \t\t= document.querySelectorAll('.c-search__tabs-trigger');\nvar searchForm \t\t\t\t= document.querySelector('.c-search__form');\nvar searchFormSubmit \t\t= document.querySelector('.c-search__row--button');\nvar searchSuggestions \t\t= document.querySelectorAll('.c-search__suggestions--span');\nvar cubicBezier \t\t\t= 'cubicBezier(.40,.05,.20,.90)';\n\nlet lang \t\t\t\t\t= searchForm.querySelector('input[name=lang]').value;\n\nvar searchProductURL \t\t= '/livesearch_ajax.php?searchparam=';\nvar searchContentURL \t\t= '/widget.php?lang=' + lang + '&actcontrol=start&cl=contentsearch&searchparam=';\n\nvar suggestionItemClicked,\n\tsearchProductBody,\n\tsearchContentBody,\n\tsearchProductContent,\n\tsearchContentContent,\n\tsearchProductCount,\n\tsearchContentCount,\n\tsearchTerm,\n\tsearchResultsURL,\n\tsearchContentsURL;\n\nif (searchComponent) {\n\tsearchTabsTriggers.forEach((item) => {\n\t\titem.addEventListener('click', function () {\n\t\t\tif (!item.classList.contains('js--active')) {\n\t\t\t\tvar dataTarget = item.dataset.target;\n\t\t\t\tvar dataTargetEl = document.querySelector('.c-search__tabs-content[data-id=\"' + dataTarget + '\"]');\n\t\t\t\tvar dataTargetElNot = document.querySelector('.c-search__tabs-content:not([data-id=\"' + dataTarget + '\"])');\n\n\t\t\t\t// Disable Clicks While Animation\n\t\t\t\tsearchTabs.classList.add('js--pointerevent');\n\n\t\t\t\t// Toggle Active Classes on Triggers\n\t\t\t\tsearchTabsTriggers.forEach((item) => {\n\t\t\t\t\titem.classList.remove('js--active')\n\t\t\t\t});\n\n\t\t\t\t// Toggle Active Classes on Contents\n\t\t\t\tdataTargetEl.classList.add('js--active');\n\n\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\ttargets: dataTargetElNot,\n\t\t\t\t\topacity: ['1', '0'],\n\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\tduration: 1000,\n\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\tdataTargetElNot.style.display = 'none';\n\t\t\t\t\t\tdataTargetEl.style.display = 'block';\n\t\t\t\t\t\titem.classList.add('js--active');\n\n\t\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\t\ttargets: dataTargetEl,\n\t\t\t\t\t\t\topacity: ['0', '1'],\n\t\t\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\t\t\tduration: 1000,\n\t\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\t\tsearchTabs.classList.remove('js--pointerevent');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\tsearchSuggestions.forEach((item) => {\n\t\titem.addEventListener('click', function () {\n\t\t\tsuggestionItemClicked = item.innerText;\n\t\t\tsearchInput.value = suggestionItemClicked;\n\t\t\tsearchFormSubmit.click();\n\t\t});\n\t});\n\n\tvar searchResults = function (event) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tsearchLoader.style.display = 'flex';\n\t\tsearchLoader.classList.add('js--active');\n\n\t\tsearchInput.disabled = true;\n\t\tsearchFormSubmit.disabled = true;\n\t\tsearchTerm = searchInput.value;\n\t\tsearchResultsURL = (searchProductURL + searchTerm);\n\t\tsearchContentsURL = (searchContentURL + searchTerm);\n\n\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\ttargets: searchLoader,\n\t\t\topacity: ['0', '1'],\n\t\t\tduration: 250,\n\t\t\teasing: cubicBezier\n\t\t})\n\n\t\t;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\ttargets: searchTabs,\n\t\t\topacity: '0',\n\t\t\tduration: 250,\n\t\t\teasing: cubicBezier\n\t\t});\n\n\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\ttargets: searchNoResults,\n\t\t\topacity: '0',\n\t\t\tduration: 250,\n\t\t\teasing: cubicBezier\n\t\t});\n\n\t\tPromise.all([\n\t\t\tfetch(searchResultsURL)\n\t\t\t\t.then(function (response) {\n\t\t\t\t\treturn response.text();\n\t\t\t\t})\n\t\t\t\t.then(function (html) {\n\t\t\t\t\t// Parse HTML content\n\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\tvar results = parser.parseFromString(html, 'text/html');\n\n\t\t\t\t\t// Fill Container with items\n\t\t\t\t\tsearchProductBody = results.querySelector('body');\n\t\t\t\t\tsearchProductCount = searchProductBody.querySelectorAll('.c-search__item').length;\n\t\t\t\t\tsearchProductContent = searchProductBody.innerHTML;\n\n\t\t\t\t\tsearchProductCounts.innerHTML = searchProductCount;\n\t\t\t\t\tsearchProductResults.innerHTML = searchProductContent;\n\n\t\t\t\t\t// LazyLoad Images\n\t\t\t\t\t_lazyload_js__WEBPACK_IMPORTED_MODULE_1__.lazyContent.update();\n\n                    if(typeof(_etracker) === 'object') {\n                        var eTrackerResults = searchProductCount > 0 ? 'Mit Ergebnis' : 'Ohne Ergebnis';\n                        et_areas = decodeURIComponent(et_areas);\n\n                        et_eC_Wrapper(\n                            {\n                                et_et: 'g9gkd9',\n                                et_pagename:'Suchergebnisse',\n                                et_areas: et_areas.substring(0,5) + '/Suche',\n                                cc_ordercurr : '',\n                                cc_ordertype : '',\n                                cc_baskettype : '',\n                                cc_attributes:{etcc_cu:'onsite', etcc_med_onsite:'Interne Suche', etcc_cmp_onsite:eTrackerResults, etcc_st_onsite:searchTerm}\n                            }\n                        );\n                    }\n\t\t\t\t}),\n\t\t\tfetch(searchContentsURL)\n\t\t\t\t.then(function (response) {\n\t\t\t\t\treturn response.text();\n\t\t\t\t})\n\t\t\t\t.then(function (html) {\n\t\t\t\t\t// Parse HTML content\n\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\tvar results = parser.parseFromString(html, 'text/html');\n\n\t\t\t\t\t// Fill Container with items\n\t\t\t\t\tsearchContentBody = results.querySelector('body');\n\t\t\t\t\tsearchContentCount = searchContentBody.querySelectorAll('.c-search__page').length;\n\t\t\t\t\tsearchContentContent = searchContentBody.innerHTML;\n\n\t\t\t\t\tsearchContentCounts.innerHTML = searchContentCount;\n\t\t\t\t\tsearchContentResults.innerHTML = searchContentContent;\n\n\t\t\t\t\t// LazyLoad Images\n\t\t\t\t\t_lazyload_js__WEBPACK_IMPORTED_MODULE_1__.lazyContent.update();\n\t\t\t\t})\n\t\t])\n\t\t\t.then(function () {\n\t\t\t\tif (searchProductCount > 0 || searchContentCount > 0) {\n\t\t\t\t\tif (searchProductCount <= 0 && searchContentCount > 0) {\n\t\t\t\t\t\tsearchProductTab.style.display = 'none';\n\t\t\t\t\t\tsearchProductResults.style.display = 'none';\n\n\t\t\t\t\t\tsearchContentResults.style.display = 'block';\n\t\t\t\t\t\tsearchContentResults.classList.add('js--active');\n\t\t\t\t\t\tsearchProductResults.classList.remove('js--active');\n\n\t\t\t\t\t\tsearchProductTab.classList.remove('js--active');\n\t\t\t\t\t\tsearchContentTab.classList.add('js--active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsearchProductTab.style = '';\n\t\t\t\t\t\tsearchProductResults.style = '';\n\n\t\t\t\t\t\tsearchProductTab.classList.add('js--active');\n\t\t\t\t\t\tsearchContentTab.classList.remove('js--active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (searchContentCount <= 0 && searchProductCount > 0) {\n\t\t\t\t\t\tsearchContentTab.style.display = 'none';\n\t\t\t\t\t\tsearchContentResults.style.display = 'none';\n\n\t\t\t\t\t\tsearchProductResults.style.display = 'block';\n\n\t\t\t\t\t\tsearchProductTab.classList.add('js--active');\n\t\t\t\t\t\tsearchContentTab.classList.remove('js--active');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsearchContentTab.style = '';\n\t\t\t\t\t\tsearchContentResults.style = '';\n\n\t\t\t\t\t\tsearchProductTab.classList.remove('js--active');\n\t\t\t\t\t\tsearchContentTab.classList.add('js--active');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (searchProductCount > 0 && searchContentCount > 0) {\n\n\t\t\t\t\t\tsearchContentTab.style = '';\n\t\t\t\t\t\tsearchProductTab.style = '';\n\n\t\t\t\t\t\tsearchProductResults.style.display = 'block';\n\t\t\t\t\t\tsearchContentResults.style.display = 'none';\n\n\t\t\t\t\t\tsearchProductTab.classList.add('js--active');\n\t\t\t\t\t\tsearchContentTab.classList.remove('js--active');\n\t\t\t\t\t}\n\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: searchLoader,\n\t\t\t\t\t\topacity: ['1', '0'],\n\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\tsearchLoader.classList.remove('js--active');\n\t\t\t\t\t\t\tsearchTabs.style.display = 'block';\n\t\t\t\t\t\t\tsearchNoResults.style.display = 'none';\n\t\t\t\t\t\t\tsearchLoader.style.display = 'none';\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\t// Animate Tabs\n\t\t\t\t\t;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: searchTabs,\n\t\t\t\t\t\tdelay: 250,\n\t\t\t\t\t\topacity: ['0', '1'],\n\t\t\t\t\t\tduration: 1000,\n\t\t\t\t\t\teasing: cubicBezier\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: searchLoader,\n\t\t\t\t\t\topacity: ['1', '0'],\n\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\teasing: cubicBezier,\n\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\tsearchLoader.classList.remove('js--active');\n\t\t\t\t\t\t\tsearchTabs.style.display = 'none';\n\t\t\t\t\t\t\tsearchNoResults.style.display = 'block';\n\t\t\t\t\t\t\tsearchLoader.style.display = 'none';\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\t// Animate Tabs\n\t\t\t\t\t;(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: searchNoResults,\n\t\t\t\t\t\tdelay: 250,\n\t\t\t\t\t\topacity: ['0', '1'],\n\t\t\t\t\t\tduration: 1000,\n\t\t\t\t\t\teasing: cubicBezier\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// Enable Form Submission\n\t\t\t\tsearchInput.disabled = false;\n\t\t\t\tsearchFormSubmit.disabled = false;\n\t\t\t})\n\t\t\t.catch(function (err) {\n\t\t\t\tconsole.log(err);\n\t\t\t});\n\t}\n\n\tsearchForm.addEventListener('submit', searchResults, false);\n}\n\n// Set focus to desktop search input when opened\nconst searchTriggerDesktop = document.getElementById('searchSidebarTrigger');\nconst searchFocusDesktop = () => {\n\tconst searchField = document.getElementById('searchParam');\n\tsearchField.focus();\n}\nif (searchTriggerDesktop) {\n\tsearchTriggerDesktop.addEventListener('click', (e) => {\n\t\tsearchFocusDesktop();\n\t});\n}\n\n\n// Set focus to mobile search input when opened \nlet searchTriggerMobile = document.querySelector('#mobileSearchTrigger');\nconst searchField = document.getElementById('searchParam');\nconst closeSearch = document.querySelectorAll('.c-search__close, .c-search__background')\nconst searchFocusMobile = () => {\n\tif (!searchTriggerMobile.classList.contains('is--focused')) {\n\t\tsetTimeout(() => {\n\t\t\tsearchField.focus();\n\t\t\tsearchTriggerMobile.classList.add('is--focused');\n\t\t}, 1000);\n\t} else if (searchTriggerMobile.classList.contains('is--focused')) {\n\t\tsearchTriggerMobile.classList.remove('is--focused');\n\t\tsearchField.blur();\n\t}\n}\n\nif (searchTriggerMobile) {\n    searchTriggerMobile.addEventListener('click', (e) => {\n\t\tsearchFocusMobile();\n    });\n}\n\ncloseSearch.forEach((trigger) => {\n\ttrigger.addEventListener('click', () => {\n\t\tsearchTriggerMobile && searchTriggerMobile.classList.remove('is--focused');\n\t\tsearchField && searchField.blur();\n\t})\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/search.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/shipping.js": (
    /*!****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/shipping.js ***!
      \****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesShippingJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n\n\nvar triggers = document.querySelectorAll('.js--deleteshipping, .js-language, .js--success');\nvar cubicBezier = 'cubicBezier(.40,.05,.20,.90)';\nvar dataTarget;\n\nif (triggers) {\n\ttriggers.forEach((item) => {\n\t\tif (item.classList.contains('js--success')) {\n\t\t\tsetTimeout(function () {\n\t\t\t\titem.click();\n\t\t\t}, 100);\n\t\t}\n\n\t\titem.addEventListener('click', function (event) {\n\t\t\t// Prevent Default Aciton\n\t\t\tevent.preventDefault();\n\n\t\t\t// Set Variables\n\t\t\tdataTarget = item.dataset.target;\n\t\t\tvar targetEl = document.querySelector(dataTarget);\n\t\t\tvar targetElBackground = targetEl.querySelector('.e-layer__background');\n\t\t\tvar targetElClose = targetEl.querySelector('.e-layer__inner-close');\n\t\t\tvar targetElCloseStripes = targetEl.querySelectorAll('.e-layer__inner-close--stripe');\n\t\t\tvar targetElInnerBackground = targetEl.querySelector('.e-layer__inner-background');\n\t\t\tvar targetElContents = targetEl.querySelectorAll('.e-layer__header, .e-layer__body, .e-layer__footer, .e-layer__contents');\n\n\t\t\t// Show Layer\n\t\t\ttargetEl.style.opacity = '1';\n\t\t\ttargetEl.style.visibility = 'visible';\n\t\t\ttargetEl.classList.add('js--pointerevent', 'js--active');\n\n\t\t\ttargetElContents.forEach((item) => {\n\t\t\t\titem.style.opacity = '0';\n\t\t\t});\n\n\t\t\ttargetElCloseStripes.forEach((item) => {\n\t\t\t\titem.style.opacity = '0';\n\t\t\t});\n\n\n\t\t\t// Animate Layer Background\n\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\ttargets: targetElBackground,\n\t\t\t\topacity: ['0', '1'],\n\t\t\t\tduration: 1000,\n\t\t\t\tdelay: 0,\n\t\t\t\teasing: 'easeInOutQuad',\n\t\t\t});\n\n\t\t\t// Animate Layer Inner Background\n\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\ttargets: targetElInnerBackground,\n\t\t\t\tscaleY: ['0', '1'],\n\t\t\t\tduration: 650,\n\t\t\t\teasing: cubicBezier,\n\t\t\t\tcomplete: function () {\n\t\t\t\t\t// Animate Close Button\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: targetElCloseStripes,\n\t\t\t\t\t\topacity: ['0', '1'],\n\t\t\t\t\t\tduration: 650,\n\t\t\t\t\t\tdelay: 0,\n\t\t\t\t\t\teasing: 'easeInOutQuad'\n\t\t\t\t\t});\n\n\t\t\t\t\t// Animate Header, Body, Footer\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: targetElContents,\n\t\t\t\t\t\topacity: ['0', '1'],\n\t\t\t\t\t\tduration: 650,\n\t\t\t\t\t\tdelay: 0,\n\t\t\t\t\t\teasing: 'easeInOutQuad',\n\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\ttargetEl.classList.remove('js--pointerevent');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttargetElClose.addEventListener('click', function () {\n\t\t\t\tif (targetEl.classList.contains('js--active')) {\n\t\t\t\t\t// Show Layer\n\t\t\t\t\ttargetEl.classList.add('js--pointerevent');\n\n\t\t\t\t\t// Animate Layer Background\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: targetElBackground,\n\t\t\t\t\t\topacity: ['1', '0'],\n\t\t\t\t\t\tduration: 650,\n\t\t\t\t\t\tdelay: 650,\n\t\t\t\t\t\teasing: 'easeInOutQuad',\n\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\ttargetEl.style.opacity = '0';\n\t\t\t\t\t\t\ttargetEl.style.visibility = 'hidden';\n\t\t\t\t\t\t\ttargetEl.classList.remove('js--pointerevent', 'js--active');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Animate Close Button\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: targetElCloseStripes,\n\t\t\t\t\t\topacity: ['1', '0'],\n\t\t\t\t\t\tduration: 650,\n\t\t\t\t\t\tdelay: 0,\n\t\t\t\t\t\teasing: 'easeInOutQuad'\n\t\t\t\t\t});\n\n\t\t\t\t\t// Animate Header, Body, Footer\n\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\ttargets: targetElContents,\n\t\t\t\t\t\topacity: ['1', '0'],\n\t\t\t\t\t\tduration: 650,\n\t\t\t\t\t\tdelay: 0,\n\t\t\t\t\t\teasing: 'easeInOutQuad',\n\t\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\t\t// Animate Layer Inner Background\n\t\t\t\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\t\t\t\ttargets: targetElInnerBackground,\n\t\t\t\t\t\t\t\tscaleY: ['1', '0'],\n\t\t\t\t\t\t\t\tduration: 650,\n\t\t\t\t\t\t\t\teasing: cubicBezier\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t});\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/shipping.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/stageslider.js": (
    /*!*******************************************************!*\
      !*** ./source/out/sinn/src/js/modules/stageslider.js ***!
      \*******************************************************/
    /***/
    function sourceOutSinnSrcJsModulesStagesliderJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @glidejs/glide */ \"./node_modules/@glidejs/glide/dist/glide.esm.js\");\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n\n\n\nvar countSlides = document.querySelectorAll('.js-stageslider .glide__slide');\n\nif (document.querySelector('.js-stageslider')) {\n\n\tlet stageslider;\n\tlet stagesliderPrevI = 0;\n\n\tvar Mutator = function () {\n\t\treturn {\n\t\t\tmodify(translate) {\n\t\t\t\tif (!stageslider) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tconst i = stageslider.index;\n\t\t\t\tconst prevI = stagesliderPrevI;\n\t\t\t\tconst prevItem = 1 + stagesliderPrevI;\n\n\t\t\t\tstagesliderPrevI = i;\n\n\t\t\t\tif (i === prevI) {\n\t\t\t\t\treturn 0;\n\t\t\t\t} else if ((Math.abs(i - prevI) === 1) && i > prevI || (i === 0 && prevI === stageslider._c.Html.slides.length - 1)) {\n\t\t\t\t\tstageslider._c.Html.wrapper.classList.remove('glide__slides--reverse');\n\t\t\t\t} else {\n\t\t\t\t\tstageslider._c.Html.wrapper.classList.add('glide__slides--reverse');\n\t\t\t\t}\n\n\t\t\t\tlet elems = document.querySelectorAll('.c-stageslider .glide__slide:not(.glide__slide--clone)');\n\n\t\t\t\tArray.from(elems).forEach(function (elem) {\n\t\t\t\t\telem.classList.remove('glide__slide--last');\n\t\t\t\t\telems[prevI].classList.add('glide__slide--last')\n\t\t\t\t});\n\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (countSlides.length > 1) {\n\t\tstageslider = new _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('.js-stageslider', {\n\t\t\ttype: 'carousel',\n\t\t\thoverpause: false,\n\t\t\tautoplay: 7500,\n\t\t\tgap: 0\n\t\t}).mutate([Mutator]).mount();\n\n\t\tdocument.querySelector('.js-stageslider ul').classList.add('glide--slider__multiple');\n\n\t\tstageslider.on('run.after', function () {\n\t\t\tvar itemsLength = document.querySelectorAll('.c-stageslider .glide__slide--active .c-stageslider__slide-headline--inner').length;\n\n\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n\t\t\t\ttargets: document.querySelectorAll('.c-stageslider .glide__slide--active .c-stageslider__slide-headline--inner'),\n\t\t\t\ttranslateY: ['100%', '0'],\n\t\t\t\tdelay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stagger(100,\n\t\t\t\t\t{\n\t\t\t\t\t\tstart: 300\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tduration: 1250,\n\t\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t\t});\n\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n\t\t\t\ttargets: document.querySelectorAll('.c-stageslider .glide__slide--active .e-btn'),\n\t\t\t\ttranslateY: ['100%', '0'],\n\t\t\t\tdelay: ((itemsLength * 100) + 100),\n\t\t\t\tduration: 1250,\n\t\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t\t});\n\t\t});\n\n\t\tstageslider.on('run.before', function () {\n\t\t\tvar itemsLength = document.querySelectorAll('.c-stageslider .glide__slide--active .c-stageslider__slide-headline--inner').length;\n\n\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n\t\t\t\ttargets: document.querySelectorAll('.c-stageslider .glide__slide--active .c-stageslider__slide-headline--inner'),\n\t\t\t\ttranslateY: ['0', '-100%'],\n\t\t\t\tdelay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stagger(100,\n\t\t\t\t\t{\n\t\t\t\t\t\tstart: 0,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tduration: 1250,\n\t\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t\t});\n\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n\t\t\t\ttargets: document.querySelectorAll('.c-stageslider .glide__slide--active .e-btn'),\n\t\t\t\ttranslateY: ['0', '-100%'],\n\t\t\t\tdelay: ((itemsLength * 100) + 100),\n\t\t\t\tduration: 1250,\n\t\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)'\n\t\t\t});\n\t\t});\n\n\t}\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/stageslider.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/stickyHeader.js": (
    /*!********************************************************!*\
      !*** ./source/out/sinn/src/js/modules/stickyHeader.js ***!
      \********************************************************/
    /***/
    function sourceOutSinnSrcJsModulesStickyHeaderJs() {
      eval("/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Sticky Header\n * @author     Anna Morawe <anna.morawe@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\nif (window.innerWidth >= 1024) {\n\tlet sliders = document.querySelectorAll('.c-stageslider, .c-hero');\n\tlet header = document.querySelector('.c-header');\n\tlet darkmodeStatus = document.body.classList.contains('is--darkmode');\n\n\tif (sliders.length > 0) {\n\n\t\tfunction checkSliderVisibility() {\n\t\t\tlet anySliderOutOfView = Array.from(sliders).some((item) => {\n\t\t\t\treturn item.getBoundingClientRect().top < 0;\n\t\t\t});\n\n\t\t\tif (anySliderOutOfView) {\n\t\t\t\tif (darkmodeStatus == true) {\n\t\t\t\t\theader.classList.add('is--dark-header');\n\t\t\t\t} else {\n\t\t\t\t\theader.classList.add('is--light-header');\n\t\t\t\t}\n\t\t\t} else if (!anySliderOutOfView && header.classList.contains('is--transparent-header')) {\n\t\t\t\theader.classList.remove('is--dark-header');\n\t\t\t\theader.classList.remove('is--light-header');\n\t\t\t}\n\t\t}\n\n\t\tfunction debounce(func, wait) {\n\t\t\tlet timeout;\n\t\t\treturn function() {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tfunc();\n\t\t\t\t}, wait);\n\t\t\t};\n\t\t}\n\n\t\tconst debouncedCheckSliderVisibility = debounce(checkSliderVisibility, 100);\n\n\t\twindow.addEventListener('scroll', debouncedCheckSliderVisibility);\n\t}\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/stickyHeader.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/tabs.js": (
    /*!************************************************!*\
      !*** ./source/out/sinn/src/js/modules/tabs.js ***!
      \************************************************/
    /***/
    function sourceOutSinnSrcJsModulesTabsJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n\n\n/* Klickelement und Contentelement werden über data-attribute verknüpft */\nvar tab = document.querySelectorAll('.js-tab');\n\nvar tabsList;\n\ntab.forEach(function (tabModule) {\n\ttabsList = tabModule.querySelector('.c-tabs__list');\n\ttabModule.querySelectorAll('.js-tab-trigger').forEach(function (item) {\n\n\t\titem.addEventListener('click', function (trigger) {\n\t\t\tvar activeTab = '.js-tab-content[data-tab=\"' + item.dataset.target + '\"]';\n\t\t\tvar activeContent = tabModule.querySelectorAll(activeTab);\n\n\t\t\ttabModule.querySelectorAll('.js-tab-trigger').forEach(element => element.classList.remove('is--active'));\n\t\t\ttabModule.querySelectorAll('.js-tab-content').forEach(element => element.classList.remove('is--active'));\n\n\t\t\tactiveContent.forEach(function (element) {\n\t\t\t\telement.classList.add('is--active');\n\n\t\t\t\tvar test = element.parentElement;\n\t\t\t\tvar test1 = test.parentElement;\n\t\t\t\tvar test2 = test1.querySelector('.c-tabs__content');\n\t\t\t\tvar test3 = test1.parentElement;\n\t\t\t\tvar test4 = test3.querySelector('.c-tabs__img');\n\n\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\ttargets: test2.querySelectorAll('.c-tabs__content-item.is--active'),\n\t\t\t\t\topacity: ['0', '1'],\n\t\t\t\t\tduration: 1000,\n\t\t\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)',\n\t\t\t\t\tbegin: function () {\n\t\t\t\t\t\telement.style.display = 'block';\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\ttargets: test4.querySelectorAll('.c-tabs__img-item.is--active div img'),\n\t\t\t\t\ttranslateY: ['100%', '0'],\n\t\t\t\t\tdelay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(75,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstart: 0,\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\tduration: 1000,\n\t\t\t\t\teasing: 'easeInOutCubic',\n\t\t\t\t\tbegin: function () {\n\t\t\t\t\t\ttabsList.classList.add('js--pointerevent');\n\t\t\t\t\t\telement.style.display = 'block';\n\t\t\t\t\t},\n\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\ttabsList.classList.remove('js--pointerevent');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\ttargets: test2.querySelector('.c-tabs__content-item:not(.is--active)'),\n\t\t\t\t\topacity: ['1', '0'],\n\t\t\t\t\tduration: 750,\n\t\t\t\t\teasing: 'cubicBezier(.40,.05,.20,.90)',\n\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\ttest2.querySelector('.c-tabs__content-item:not(.is--active)').style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t(0,animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n\t\t\t\t\ttargets: test4.querySelectorAll('.c-tabs__img-item:not(.is--active) div img'),\n\t\t\t\t\ttranslateY: ['0%', '-100%'],\n\t\t\t\t\tdelay: animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stagger(75,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstart: 0,\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\tduration: 1000,\n\t\t\t\t\teasing: 'easeInOutCubic',\n\t\t\t\t\tcomplete: function () {\n\t\t\t\t\t\ttest4.querySelector('.c-tabs__img-item:not(.is--active)').style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\titem.classList.add('is--active');\n\t\t});\n\t});\n\n\tlet rightSideHeight;\n\tlet leftSideHeight;\n\n\ttabModule.querySelectorAll('.c-tabs__img').forEach(function (item) {\n\t\tconst imgs = Array.from(item.querySelectorAll('.c-tabs__img-item'));\n\t\tlet highestImg = 0;\n\n\t\timgs.forEach(function (img) {\n\t\t\tconst imgH = img.getBoundingClientRect().height;\n\t\t\thighestImg = imgH > highestImg ? imgH : highestImg;\n\t\t});\n\n\t\trightSideHeight = highestImg;\n\t});\n\n\ttabModule.querySelectorAll('.c-tabs__wrapper').forEach(function (item) {\n\t\tconst items = Array.from(item.querySelectorAll('.c-tabs__content-item'));\n\t\tconst itemListHeight = item.querySelector('.c-tabs__list').offsetHeight;\n\t\tlet highestItem = 0;\n\n\t\titems.forEach(function (item) {\n\t\t\tconst itemH = item.getBoundingClientRect().height;\n\t\t\thighestItem = itemH > highestItem ? itemH : highestItem;\n\t\t});\n\n\t\tleftSideHeight = highestItem + itemListHeight;\n\t});\n\n\ttabModule.querySelector('.c-tabs__wrapper').style.height = leftSideHeight + 'px';\n\ttabModule.querySelector('.c-tabs__img').style.height = rightSideHeight + 'px';\n\n\twindow.addEventListener('resize', function (event) {\n\t\tlet rightSideHeight;\n\t\tlet leftSideHeight;\n\n\t\ttabModule.querySelectorAll('.c-tabs__img').forEach(function (item) {\n\t\t\tconst imgs = Array.from(item.querySelectorAll('.c-tabs__img-item'));\n\t\t\tlet highestImg = 0;\n\n\t\t\timgs.forEach(function (img) {\n\t\t\t\tconst imgH = img.getBoundingClientRect().height;\n\t\t\t\thighestImg = imgH > highestImg ? imgH : highestImg;\n\t\t\t});\n\n\t\t\trightSideHeight = highestImg;\n\t\t});\n\n\t\ttabModule.querySelectorAll('.c-tabs__wrapper').forEach(function (item) {\n\t\t\tconst items = Array.from(item.querySelectorAll('.c-tabs__content-item'));\n\t\t\tconst itemListHeight = item.querySelector('.c-tabs__list').offsetHeight;\n\t\t\tlet highestItem = 0;\n\n\t\t\titems.forEach(function (item) {\n\t\t\t\tconst itemH = item.getBoundingClientRect().height;\n\t\t\t\thighestItem = itemH > highestItem ? itemH : highestItem;\n\t\t\t});\n\n\t\t\tleftSideHeight = highestItem + itemListHeight;\n\t\t});\n\n\t\ttabModule.querySelector('.c-tabs__wrapper').style.height = leftSideHeight + 'px';\n\t\ttabModule.querySelector('.c-tabs__img').style.height = rightSideHeight + 'px';\n\t});\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/tabs.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/techabc.js": (
    /*!***************************************************!*\
      !*** ./source/out/sinn/src/js/modules/techabc.js ***!
      \***************************************************/
    /***/
    function sourceOutSinnSrcJsModulesTechabcJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _accordion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accordion */ \"./source/out/sinn/src/js/modules/accordion.js\");\n/* harmony import */ var _timeline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timeline */ \"./source/out/sinn/src/js/modules/timeline.js\");\n/* harmony import */ var _animateOffcanvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./animateOffcanvas */ \"./source/out/sinn/src/js/modules/animateOffcanvas.js\");\n/* harmony import */ var _glidejs_glide__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @glidejs/glide */ \"./node_modules/@glidejs/glide/dist/glide.esm.js\");\n\n\n\n\n\nconst highlightTerms = () => {\n    const content = document.querySelectorAll('#cDetailBody.js--techabc p, #cDetailBody.js--techabc ul:not(.glide__slides), #cDetailBody.js--techabc .c-accordion__content, .js--techabc .js--techabc-area p');\n\n    content.forEach(element => {\n        element.innerHTML = parseContent(element.innerHTML);\n\t    //console.log(element.innerHTML);\n    })\n\n    ;(0,_accordion__WEBPACK_IMPORTED_MODULE_0__.accordion)();\n\t(0,_timeline__WEBPACK_IMPORTED_MODULE_1__.timeline)();\n\n}\n\nconst parseContent = (content) => {\n\tconst glossaryTerms = document.matchTerms.sort((a, b) => b.name.length - a.name.length);\n\n\tglossaryTerms.forEach(term => {\n\t\tconst searchTerm = term.name.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\tconst regex = new RegExp(`(?!<a.*?class=\\\\\"c-techabc__link\\\\\">)(?![^<]*?</a>)\\\\b(${searchTerm})\\\\b`, 'gim');\n\t\tcontent = content.replace(regex, match => wrapTermWithLink(match.trim(), term.id));\n\t});\n\treturn content;\n}\n\n\nconst wrapTermWithLink = (name, id) => {\n    return ` <a role=\"button\" class=\"c-techabc__link\" data-id=\"${id}\">${name}</a>`\n}\n\nconst registerTriggers = () => {\n    const techTriggers = document.querySelectorAll('.c-techabc__link')\n    const techContent = document.querySelector('.c-techabc__content')\n\n    techTriggers.forEach(item => {\n        item.addEventListener('click', () => {\n\t\t\tconst techId = item.getAttribute('data-id')\n            const url = `/index.php?cl=techabcfrontendcontroller&fnc=getTechTerm&id=${techId}`\n\n            fetch(url)\n                .then(response => response.json())\n                .then(data => {\n                    const title = data.title\n                    const desc = data.parsedContent\n\n                    techContent.innerHTML = `<h3 class=\"c-techabc__headline\">${title}</h3><div class=\"c-techabc__desc\">${desc}</div>`\n\n                    ;(0,_animateOffcanvas__WEBPACK_IMPORTED_MODULE_2__.animateOffcanvas)({\n                        offCanvas: '.c-techabc',\n                        closeButtons: '.c-techabc__close, .c-techabc__background',\n                        callSelf: true\n                    });\n                })\n        })\n    })\n}\n\nconst techAbcExcludedPages = document.querySelector('.is-checkout, .cl-techabcfrontendcontroller')\n\nfunction highlightTermsAndRegisterTriggers() {\n    if (!techAbcExcludedPages && !window.location.href.includes('datenschutz') && !window.location.href.includes('protection-des-donnees')) {\n        highlightTerms();\n        //console.log('Terms are highlighted.');\n\n        registerTriggers();\n        //console.log('Triggers are registered.');\n    } else {\n        //console.log('This page is excluded from Tech ABC.');\n    }\n}\n\nfunction waitForContentAndExecute() {\n    if (document.readyState === 'complete') {\n        //console.log('readyState is complete');\n        highlightTermsAndRegisterTriggers();\n    } else {\n        window.addEventListener('load', () => {\n            //console.log('event listener load');\n            highlightTermsAndRegisterTriggers();\n        });\n    }\n}\n\nwaitForContentAndExecute();\n\n// *** Index *** //\n\nif (document.querySelector('.js--techabc-index')) {\n    let techAbcIndexSlider = new _glidejs_glide__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('.js--techabc-index .glide', {\n        type: 'slider',\n        bound: true,\n        rewind: false,\n        gap: 0,\n        perView: 26,\n        perSwipe: '|',\n        perTouch: '|',\n        touchRatio: 1,\n        breakpoints: {\n            859: {\n                perView: 13\n            },\n            639: {\n                perView: 5\n            }\n        }\n    })\n\n    techAbcIndexSlider.mount();\n\n    let techAbcIndex= document.querySelector('.js--techabc-index');\n    let techAbcIndexLink= document.querySelectorAll('.js--techabc-index-link');\n    let techAbcIndexTarget= document.querySelectorAll('[data-index-target]');\n\n    let linkHref;\n    let linkTarget;\n    let linkTargetPosition;\n\n    let activeChar;\n    let activeSlide;\n\n    let headerHeight = document.querySelector('.c-header').getBoundingClientRect().height;\n    let scrollSpacing;\n\n    // Check if Header is sticky\n    if (window.getComputedStyle(document.querySelector('.c-logo.is--mobile')).display === \"none\") {\n        headerHeight = document.querySelector('.c-header').getBoundingClientRect().height;\n        scrollSpacing = (techAbcIndex.getBoundingClientRect().height + headerHeight)*-1+'px';\n    } else {\n        scrollSpacing = techAbcIndex.getBoundingClientRect().height *-1+'px';\n        headerHeight = 0;\n    }\n\n    // Scroll to\n    techAbcIndexLink.forEach(function (link){\n\n        //deactivate link without target\n        linkHref = link.getAttribute('href').replace(\"#\", \"\");\n\n        if(!document.getElementById(linkHref)) {\n            link.classList.add('is--inactive');\n        }\n\n        //handle click\n        link.addEventListener('click', function(event) {\n            event.preventDefault();\n\n            linkHref = event.target.getAttribute('href').replace(\"#\", \"\");\n            linkTarget = document.getElementById(linkHref);\n            linkTargetPosition = linkTarget.getBoundingClientRect().top + window.scrollY - headerHeight - techAbcIndex.firstElementChild.getBoundingClientRect().height - 10;\n            activeSlide = event.target.getAttribute('data-index');\n\n            window.scrollTo({\n                top: linkTargetPosition,\n                behavior: 'smooth'\n            });\n\n            setTimeout(function(){\n                techAbcIndexLink.forEach(function(item) {\n                    item.classList.remove('is--active');\n                });\n                link.classList.add('is--active');\n                techAbcIndexSlider.go('=' + activeSlide);\n\n            }, 500);\n        });\n    });\n\n\n    // Intersection Observer\n    let options = {\n        root: null,\n        rootMargin: scrollSpacing+' 0px 0px 0px',\n        threshold: [0],\n    };\n\n    let callback = (entries, observer) => {\n        entries.forEach((entry) => {\n\n            // Element leaves top screen\n            if (!entry.isIntersecting && entry.target.getBoundingClientRect().top < window.innerHeight) {\n                if(entry.target.classList.contains('js--techabc-index')) {\n                    techAbcIndex.classList.add('is--fixed');\n                    techAbcIndex.firstElementChild.style.top = headerHeight+'px';\n                }\n\n                // Handle active Index via scrolling\n                if(entry.target.hasAttribute('data-index-target')) {\n                    techAbcIndexLink.forEach(function (link){\n                        link.classList.remove('is--active');\n                    });\n\n                    activeChar = document.querySelector('a.js--techabc-index-link[href=\"#'+entry.target.getAttribute('id')+'\"]');\n                    activeChar.classList.add('is--active');\n\n                    activeSlide = activeChar.getAttribute('data-index');\n                    techAbcIndexSlider.go('=' + activeSlide);\n                }\n\n            } else {\n                if(entry.target.classList.contains('js--techabc-index')) {\n                    techAbcIndex.classList.remove('is--fixed');\n                    techAbcIndex.firstElementChild.removeAttribute('style');\n                }\n            }\n\n\n            // Scrolling Reverse\n            if(!entry.isIntersecting && entry.target.getBoundingClientRect().top > window.innerHeight && entry.target.getBoundingClientRect().top < window.innerHeight+50) {\n                if(entry.target.hasAttribute('data-index-target')) {\n                    document.querySelector('a.js--techabc-index-link[href=\"#'+entry.target.getAttribute('id')+'\"]').classList.remove('is--active');\n                    activeChar = document.querySelector('a.js--techabc-index-link[href=\"#'+String.fromCharCode(entry.target.getAttribute('id').charCodeAt(0) - 1)+'\"]');\n                    activeChar.classList.add('is--active');\n                    activeSlide = activeChar.getAttribute('data-index');\n                    techAbcIndexSlider.go('=' + activeSlide);\n                }\n            }\n\n        });\n    };\n\n    let observer = new IntersectionObserver(callback, options);\n\n    observer.observe(techAbcIndex);\n\n    techAbcIndexTarget.forEach ( function (el) {\n        observer.observe(el);\n    });\n\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/techabc.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/timeline.js": (
    /*!****************************************************!*\
      !*** ./source/out/sinn/src/js/modules/timeline.js ***!
      \****************************************************/
    /***/
    function sourceOutSinnSrcJsModulesTimelineJs(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   timeline: () => (/* binding */ timeline)\n/* harmony export */ });\n/* harmony import */ var _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @glidejs/glide */ \"./node_modules/@glidejs/glide/dist/glide.esm.js\");\n/* harmony import */ var animejs_lib_anime_es_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! animejs/lib/anime.es.js */ \"./node_modules/animejs/lib/anime.es.js\");\n\n\n\nconst timeline = () => {\n\tif (document.querySelector('.js-timeline')) {\n\t\tvar timeline = new _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('.js-timeline', {\n\t\t\ttype: 'slider',\n\t\t\tperView: 1,\n\t\t\tgap: 0\n\t\t})\n\n\t\ttimeline.mount();\n\n\t\tvar timelineButtons = new _glidejs_glide__WEBPACK_IMPORTED_MODULE_0__[\"default\"]('.js-timeline-buttons', {\n\t\t\ttype: 'slider',\n\t\t\tperView: 7,\n\t\t\t//bound: true,\n\t\t\trewind: false,\n\t\t\tperSwipe: '|',\n\t\t\tperTouch: '|',\n\t\t\tgap: 0,\n\t\t\tbreakpoints: {\n\t\t\t\t1024: {\n\t\t\t\t\tperView: 5\n\t\t\t\t},\n\t\t\t\t768: {\n\t\t\t\t\tperView: 4\n\t\t\t\t},\n\t\t\t\t500: {\n\t\t\t\t\tperView: 3\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tvar timelines = document.querySelectorAll('.c-timeline');\n\n\t\ttimelines.forEach((item) => {\n\t\t\tvar parent = item;\n\t\t\tvar timelineItem = item.querySelectorAll('.js-timelineitem');\n\t\t\tvar mountSlider = timelineItem.length;\n\n\t\t\ttimelineItem.forEach((item, i) => {\n\t\t\t\tvar timelineYear = item.querySelector('.c-timeline__item-text').dataset.year;\n\t\t\t\tvar timelineImg = item.querySelector('.js-timeline-img').dataset.src;\n\n\t\t\t\tvar timelineButton =\n\t\t\t\t\t'<li class=\"glide__slide c-timeline__nav-item\">' +\n\t\t\t\t\t\t'<button class=\"c-timeline__nav-item\" data-glide-dir=\"=' + i + '\">' +\n\t\t\t\t\t\t\t'<span class=\"c-timeline__nav-text\">' + timelineYear + '</span>' +\n\t\t\t\t\t\t\t'<div class=\"c-timeline__nav-img\">' +\n\t\t\t\t\t\t\t\t'<img src=\"' + timelineImg + '\" alt=\"' + timelineYear + '\">' +\n\t\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t\t'</button>' +\n\t\t\t\t\t'</li>';\n\n\t\t\t\tparent.querySelector('.js-timeline-button-container').insertAdjacentHTML('beforeend', timelineButton);\n\n\t\t\t\tif (!--mountSlider) {\n\t\t\t\t\ttimelineButtons.mount();\n\n\t\t\t\t\ttimeline.on('swipe.end', function () {\n\t\t\t\t\t\ttimelineButtons.go('=' + timeline.index);\n\t\t\t\t\t})\n\n\t\t\t\t\ttimelineButtons.on('run', function () {\n\t\t\t\t\t\ttimeline.go('=' + timelineButtons.index);\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tdocument.addEventListener('DOMContentLoaded', function () {\n\t\t\t\t\tvar slideHeight = parent.querySelector('.glide__slide--active').getBoundingClientRect().height;\n\t\t\t\t\tvar glideTrack = parent.querySelector('.glide__track').getBoundingClientRect().height;\n\t\t\t\t\tif (slideHeight != glideTrack) {\n\t\t\t\t\t\tvar newHeight = slideHeight;\n\t\t\t\t\t\tparent.querySelector('.glide__track').style.height = newHeight + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\n\n\t\t\t\ttimeline.on('build.after', function () {\n\t\t\t\t\tvar slideHeight = parent.querySelector('.glide__slide--active').getBoundingClientRect().height;\n\t\t\t\t\tvar glideTrack = parent.querySelector('.glide__track').getBoundingClientRect().height;\n\t\t\t\t\tif (slideHeight != glideTrack) {\n\t\t\t\t\t\tvar newHeight = slideHeight;\n\t\t\t\t\t\tparent.querySelector('.glide__track').style.height = newHeight + \"px\";\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\ttimeline.on('run.after', function () {\n\t\t\t\t\tvar slideHeight = parent.querySelector('.glide__slide--active').getBoundingClientRect().height;\n\t\t\t\t\tvar glideTrack = parent.querySelector('.glide__track').getBoundingClientRect().height;\n\t\t\t\t\tif (slideHeight != glideTrack) {\n\t\t\t\t\t\tvar newHeight = slideHeight;\n\t\t\t\t\t\tparent.querySelector('.glide__track').style.height = newHeight + \"px\";\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\n\t\t\t// Button navigation\n\t\t\tvar buttonItem = document.querySelectorAll('button.c-timeline__nav-item');\n\n\t\t\tbuttonItem.forEach(function (item){\n\t\t\t\titem.addEventListener('click', function(event) {\n\t\t\t\t\ttimelineButtons.go(item.getAttribute('data-glide-dir'));\n\t\t\t\t\ttimeline.go(item.getAttribute('data-glide-dir'));\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\t// ====================================================================================\n\t\t// Sticky Buttons Start\n\t\t// ====================================================================================\n\n\t\tlet targetTimeline= document.querySelector('.c-timeline');\n\t\tlet targetTimelineNav= document.querySelector('.c-timeline__sticky');\n\t\tlet headerHeight = 0;\n\t\tlet scrollSpacing;\n\n\t\t// Check if Header is sticky\n\t\tif (window.getComputedStyle(document.querySelector('.c-logo.is--mobile')).display === \"none\") {\n\t\t\theaderHeight = document.querySelector('.c-header').getBoundingClientRect().height;\n\t\t\tscrollSpacing = (targetTimelineNav.getBoundingClientRect().height + headerHeight)*-1+'px';\n\t\t} else {\n\t\t\tscrollSpacing = targetTimelineNav.getBoundingClientRect().height *-1+'px';\n\t\t}\n\n\t\tlet options = {\n\t\t\troot: null,\n\t\t\trootMargin: scrollSpacing+' 0px 0px 0px',\n\t\t\tthreshold: [0],\n\t\t};\n\n\t\tlet callback = (entries, observer) => {\n\t\t\tentries.forEach((entry) => {\n\n\t\t\t\t// Navi leaves top screen\n\t\t\t\tif(entry.target.classList.contains('c-timeline__sticky')) {\n\t\t\t\t\tif (!entry.isIntersecting && entry.target.getBoundingClientRect().top < window.innerHeight) {\n\t\t\t\t\t\ttargetTimelineNav.classList.add('is--fixed');\n\t\t\t\t\t\ttargetTimelineNav.firstElementChild.style.top = headerHeight+'px';\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttargetTimelineNav.classList.remove('is--fixed');\n\t\t\t\t\t\ttargetTimelineNav.firstElementChild.removeAttribute('style');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Timeline leaves Viewport\n\t\t\t\tif(entry.target.classList.contains('c-timeline')) {\n\t\t\t\t\tif (!entry.isIntersecting ) {\n\t\t\t\t\t\ttargetTimelineNav.classList.remove('is--fixed');\n\t\t\t\t\t\ttargetTimelineNav.firstElementChild.removeAttribute('style');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tlet observer = new IntersectionObserver(callback, options);\n\n\t\tobserver.observe(targetTimelineNav);\n\t\tobserver.observe(targetTimeline);\n\n\t\t// Sticky Buttons End\n\n\t}\n}\n\nconst techAbcExcludedPages = document.querySelector('.is-checkout, .cl-techabcfrontendcontroller');\n\nif (techAbcExcludedPages) {\n\ttimeline();\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/timeline.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/video.js": (
    /*!*************************************************!*\
      !*** ./source/out/sinn/src/js/modules/video.js ***!
      \*************************************************/
    /***/
    function sourceOutSinnSrcJsModulesVideoJs() {
      eval("var videos = document.querySelectorAll('.c-video');\n\nif (videos) {\n\tvideos.forEach((video) => {\n\t\tvar iframe = video.querySelector('iframe');\n\n\t\tvideo.addEventListener('click', function () {\n\t\t\tif (video.classList.contains('is--playing')) {\n\t\t\t\tvideo.classList.remove('is--playing');\n\t\t\t\tiframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t} else {\n\t\t\t\tvideo.classList.add('is--playing');\n\t\t\t\tiframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t}\n\t\t});\n\t});\n}\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/video.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/wristbandSelectionValidation.js": (
    /*!************************************************************************!*\
      !*** ./source/out/sinn/src/js/modules/wristbandSelectionValidation.js ***!
      \************************************************************************/
    /***/
    function sourceOutSinnSrcJsModulesWristbandSelectionValidationJs() {
      eval("/**\n * This Software is the property of dotfly and is protected\n * by copyright law - it is NOT Freeware.\n *\n * Any unauthorized use of this software without a valid license key\n * is a violation of the license agreement and will be prosecuted by\n * civil and criminal law.\n *\n * @category   Validiert das Auswahlfeld im Produktdetail und verhindert das frühzeitige Absenden des Formulars durch disablen des Submit-Buttons\n * @author     Anna Morawe <anna.morawe@dotfly.de>\n * @license    http://www.dotfly.de Commercial\n * @link       http://www.dotfly.de\n */\n\ndocument.addEventListener('DOMContentLoaded', () => {\n    const submitButton = document.getElementById('toBasket');\n    const selectField = document.getElementById('requiredForWatch');\n    const form = document.querySelector('.js-oxProductForm');\n    const validateSelect = document.querySelector('.c-detail__basket-group .e-form__wrap.is--niceselect');\n    let tempButton;\n\n    function createTempButton() {\n        tempButton = document.createElement('button');\n        tempButton.type = 'button';\n        tempButton.id = 'tempButton';\n        tempButton.className = submitButton.className;\n        tempButton.innerHTML = submitButton.innerHTML;\n        submitButton.style.display = 'none';\n        submitButton.parentNode.insertBefore(tempButton, submitButton.nextSibling);\n\n        tempButton.addEventListener('click', function () {\n            validateSelect.classList.toggle('is--error', selectField.selectedIndex === 0);\n            if (selectField.selectedIndex !== 0) {\n                submitButton.style.display = 'inline-block';\n                tempButton.style.display = 'none';\n            }\n        });\n    }\n\n    function initializeWatchSelect() {\n        if (form && selectField && submitButton) {\n            if (selectField.selectedIndex === 0) {\n                submitButton.disabled = true;\n                createTempButton();\n            }\n            selectField.addEventListener('change', () => {\n                if (selectField.selectedIndex !== 0) {\n                    validateSelect.classList.remove('is--error');\n                    if (tempButton) {\n                        submitButton.style.display = 'inline-block';\n                        tempButton.style.display = 'none';\n                    }\n                    submitButton.disabled = false;\n                } else {\n                    if (!tempButton) {\n                        createTempButton();\n                    }\n                    submitButton.disabled = true;\n                    submitButton.style.display = 'none';\n                    tempButton.style.display = 'inline-block';\n                }\n            });\n        }\n    }\n\n    initializeWatchSelect();\n});\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/wristbandSelectionValidation.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/wrists.js": (
    /*!**************************************************!*\
      !*** ./source/out/sinn/src/js/modules/wrists.js ***!
      \**************************************************/
    /***/
    function sourceOutSinnSrcJsModulesWristsJs() {
      eval("var input = document.querySelector('input[name=\"wrists\"]');\nvar wrists = document.querySelectorAll('.c-basket__wrist .e-form__input');\nvar trigger = document.querySelector('#orderConfirmAgbBottom');\nvar basketForm = document.getElementById('basket_form');\nvar basketUpdate = document.getElementById('basketUpdate');\nvar wristData = {};\nvar result = [];\n\nif (input) {\n\ttrigger.addEventListener('submit', function (event) {\n\t\tevent.preventDefault();\n\n\t\tresult = [];\n\n\t\twrists.forEach((item) => {\n\t\t\twristData[item.dataset.id] = item.value;\n\t\t});\n\n\t\tinput.value = JSON.stringify(wristData);\n\n\t\ttrigger.submit();\n\t});\n\n\n\t// Prevent Form Submit on Enter -> Trigger Safe Button instead\n\n\tbasketForm.addEventListener ('keydown', function (event) {\n\t\tif (event.key == 'Enter') {\n\t\t\tevent.preventDefault();\n\t\t\tbasketUpdate.click();\n\t\t}\n\t});\n\n}\n\n\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/wrists.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/modules/youtubeConsent.js": (
    /*!**********************************************************!*\
      !*** ./source/out/sinn/src/js/modules/youtubeConsent.js ***!
      \**********************************************************/
    /***/
    function sourceOutSinnSrcJsModulesYoutubeConsentJs() {
      eval("// using the script from dotfly tracking module directly, because we don't need the consent tool\n(function () {\n    let ytIFrames = \tdocument.querySelectorAll('.js-iframe');\n    let ytPlaceholder = document.querySelectorAll('.js-youtube-confirmation');\n\n    function resetFrames() {\n        ytIFrames.forEach( elem => {\n            elem.classList.remove('is--hidden');\n            elem.src = elem.dataset.src;\n        })\n\n        ytPlaceholder.forEach( elem => {\n            !elem.classList.contains('is--hidden');\n            elem.classList.add('is--hidden');\n        })\n    }\n\n    function showVideoElem(videoContainer,  confirmationPanel) {\n        videoContainer.classList.remove('is--hidden');\n\n        console.log(videoContainer);\n        if (videoContainer.dataset.src && videoContainer.src !== videoContainer.dataset.src) {\n            videoContainer.src = videoContainer.dataset.src;\n        }\n\n        confirmationPanel &&\n        confirmationPanel.classList.contains('js-youtube-confirmation') &&\n        confirmationPanel.classList.add('is--hidden');\n    }\n\n    function registerClickEvents() {\n        document.querySelector('body').addEventListener('click', function (evt) {\n            if (\n                evt.target.classList.contains('js-confirm-once') ||\n                evt.target.classList.contains('js-confirm-always')\n            ) {\n                let videoContainer = document.getElementById(evt.target.dataset.iframeid);\n                if (!videoContainer) {\n                    throw new Error('No video-container available!');\n                }\n                showVideoElem(videoContainer, evt.target.parentNode.parentNode.parentNode.parentElement);\n            }\n        });\n    }\n\n    function showVideos() {\n        ytIFrames.forEach(elem => {\n            let confirmationPanel = elem.nextElementSibling;\n            showVideoElem(elem, confirmationPanel);\n        });\n    }\n\n    (function init() {\n        registerClickEvents();\n    })();\n})();\n\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/modules/youtubeConsent.js?");

      /***/
    }),
    /***/"./source/out/sinn/src/js/tables.js": (
    /*!******************************************!*\
      !*** ./source/out/sinn/src/js/tables.js ***!
      \******************************************/
    /***/
    function sourceOutSinnSrcJsTablesJs() {
      eval("// Responsive Tables\n\nif (document.querySelector('.c-text table')) {\n    let wrapper;\n\n    document.querySelectorAll('.c-text table').forEach(function (table){\n        wrapper = document.createElement('div');\n        wrapper.classList.add('c-text__table-responsive');\n\n        // insert wrapper before el in the DOM tree\n        table.parentNode.insertBefore(wrapper, table);\n\n        // move el into wrapper\n        wrapper.appendChild(table);\n    });\n\n}\n\n//# sourceURL=webpack://sinn/./source/out/sinn/src/js/tables.js?");

      /***/
    }),
    /***/"./node_modules/@glidejs/glide/dist/glide.esm.js": (
    /*!*******************************************************!*\
      !*** ./node_modules/@glidejs/glide/dist/glide.esm.js ***!
      \*******************************************************/
    /***/
    function node_modulesGlidejsGlideDistGlideEsmJs(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
      "use strict";

      eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ Glide)\n/* harmony export */ });\n/*!\n * Glide.js v3.6.2\n * (c) 2013-2024 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)\n * Released under the MIT License.\n */\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n  return function _createSuperInternal() {\n    var Super = _getPrototypeOf(Derived),\n        result;\n\n    if (hasNativeReflectConstruct) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return _possibleConstructorReturn(this, result);\n  };\n}\n\nfunction _superPropBase(object, property) {\n  while (!Object.prototype.hasOwnProperty.call(object, property)) {\n    object = _getPrototypeOf(object);\n    if (object === null) break;\n  }\n\n  return object;\n}\n\nfunction _get() {\n  if (typeof Reflect !== \"undefined\" && Reflect.get) {\n    _get = Reflect.get;\n  } else {\n    _get = function _get(target, property, receiver) {\n      var base = _superPropBase(target, property);\n\n      if (!base) return;\n      var desc = Object.getOwnPropertyDescriptor(base, property);\n\n      if (desc.get) {\n        return desc.get.call(arguments.length < 3 ? target : receiver);\n      }\n\n      return desc.value;\n    };\n  }\n\n  return _get.apply(this, arguments);\n}\n\nvar defaults = {\n  /**\n   * Type of the movement.\n   *\n   * Available types:\n   * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n   * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n   *\n   * @type {String}\n   */\n  type: 'slider',\n\n  /**\n   * Start at specific slide number defined with zero-based index.\n   *\n   * @type {Number}\n   */\n  startAt: 0,\n\n  /**\n   * A number of slides visible on the single viewport.\n   *\n   * @type {Number}\n   */\n  perView: 1,\n\n  /**\n   * Focus currently active slide at a specified position in the track.\n   *\n   * Available inputs:\n   * `center` - Current slide will be always focused at the center of a track.\n   * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n   *\n   * @type {String|Number}\n   */\n  focusAt: 0,\n\n  /**\n   * A size of the gap added between slides.\n   *\n   * @type {Number}\n   */\n  gap: 10,\n\n  /**\n   * Change slides after a specified interval. Use `false` for turning off autoplay.\n   *\n   * @type {Number|Boolean}\n   */\n  autoplay: false,\n\n  /**\n   * Stop autoplay on mouseover event.\n   *\n   * @type {Boolean}\n   */\n  hoverpause: true,\n\n  /**\n   * Allow for changing slides with left and right keyboard arrows.\n   *\n   * @type {Boolean}\n   */\n  keyboard: true,\n\n  /**\n   * Stop running `perView` number of slides from the end. Use this\n   * option if you don't want to have an empty space after\n   * a slider. Works only with `slider` type and a\n   * non-centered `focusAt` setting.\n   *\n   * @type {Boolean}\n   */\n  bound: false,\n\n  /**\n   * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n   *\n   * @type {Number|Boolean}\n   */\n  swipeThreshold: 80,\n\n  /**\n   * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n   *\n   * @type {Number|Boolean}\n   */\n  dragThreshold: 120,\n\n  /**\n   * A number of slides moved on single swipe.\n   *\n   * Available types:\n   * `` - Moves slider by one slide per swipe\n   * `|` - Moves slider between views per swipe (number of slides defined in `perView` options)\n   *\n   * @type {String}\n   */\n  perSwipe: '',\n\n  /**\n   * Moving distance ratio of the slides on a swiping and dragging.\n   *\n   * @type {Number}\n   */\n  touchRatio: 0.5,\n\n  /**\n   * Angle required to activate slides moving on swiping or dragging.\n   *\n   * @type {Number}\n   */\n  touchAngle: 45,\n\n  /**\n   * Duration of the animation in milliseconds.\n   *\n   * @type {Number}\n   */\n  animationDuration: 400,\n\n  /**\n   * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n   *\n   * @type {Boolean}\n   */\n  rewind: true,\n\n  /**\n   * Duration of the rewinding animation of the `slider` type in milliseconds.\n   *\n   * @type {Number}\n   */\n  rewindDuration: 800,\n\n  /**\n   * Easing function for the animation.\n   *\n   * @type {String}\n   */\n  animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n  /**\n   * Wait for the animation to finish until the next user input can be processed\n   *\n   * @type {boolean}\n   */\n  waitForTransition: true,\n\n  /**\n   * Throttle costly events at most once per every wait milliseconds.\n   *\n   * @type {Number}\n   */\n  throttle: 10,\n\n  /**\n   * Moving direction mode.\n   *\n   * Available inputs:\n   * - 'ltr' - left to right movement,\n   * - 'rtl' - right to left movement.\n   *\n   * @type {String}\n   */\n  direction: 'ltr',\n\n  /**\n   * The distance value of the next and previous viewports which\n   * have to peek in the current view. Accepts number and\n   * pixels as a string. Left and right peeking can be\n   * set up separately with a directions object.\n   *\n   * For example:\n   * `100` - Peek 100px on the both sides.\n   * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n   *\n   * @type {Number|String|Object}\n   */\n  peek: 0,\n\n  /**\n   * Defines how many clones of current viewport will be generated.\n   *\n   * @type {Number}\n   */\n  cloningRatio: 1,\n\n  /**\n   * Collection of options applied at specified media breakpoints.\n   * For example: display two slides per view under 800px.\n   * `{\n   *   '800px': {\n   *     perView: 2\n   *   }\n   * }`\n   */\n  breakpoints: {},\n\n  /**\n   * Collection of internally used HTML classes.\n   *\n   * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n   * @type {Object}\n   */\n  classes: {\n    swipeable: 'glide--swipeable',\n    dragging: 'glide--dragging',\n    direction: {\n      ltr: 'glide--ltr',\n      rtl: 'glide--rtl'\n    },\n    type: {\n      slider: 'glide--slider',\n      carousel: 'glide--carousel'\n    },\n    slide: {\n      clone: 'glide__slide--clone',\n      active: 'glide__slide--active'\n    },\n    arrow: {\n      disabled: 'glide__arrow--disabled'\n    },\n    nav: {\n      active: 'glide__bullet--active'\n    }\n  }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param  {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n  console.error(\"[Glide warn]: \".concat(msg));\n}\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n  return parseInt(value);\n}\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\nfunction toFloat(value) {\n  return parseFloat(value);\n}\n/**\n * Indicates whether the specified value is a string.\n *\n * @param  {*}   value\n * @return {Boolean}\n */\n\nfunction isString(value) {\n  return typeof value === 'string';\n}\n/**\n * Indicates whether the specified value is an object.\n *\n * @param  {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction isObject(value) {\n  var type = _typeof(value);\n\n  return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n/**\n * Indicates whether the specified value is a function.\n *\n * @param  {*} value\n * @return {Boolean}\n */\n\nfunction isFunction(value) {\n  return typeof value === 'function';\n}\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param  {*} value\n * @return {Boolean}\n */\n\nfunction isUndefined(value) {\n  return typeof value === 'undefined';\n}\n/**\n * Indicates whether the specified value is an array.\n *\n * @param  {*} value\n * @return {Boolean}\n */\n\nfunction isArray(value) {\n  return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\n\nfunction mount(glide, extensions, events) {\n  var components = {};\n\n  for (var name in extensions) {\n    if (isFunction(extensions[name])) {\n      components[name] = extensions[name](glide, components, events);\n    } else {\n      warn('Extension must be a function');\n    }\n  }\n\n  for (var _name in components) {\n    if (isFunction(components[_name].mount)) {\n      components[_name].mount();\n    }\n  }\n\n  return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param  {Object} obj         Object where property has to be defined.\n * @param  {String} prop        Name of the defined property.\n * @param  {Object} definition  Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n  Object.defineProperty(obj, prop, definition);\n}\n/**\n * Sorts aphabetically object keys.\n *\n * @param  {Object} obj\n * @return {Object}\n */\n\nfunction sortKeys(obj) {\n  return Object.keys(obj).sort().reduce(function (r, k) {\n    r[k] = obj[k];\n    return r[k], r;\n  }, {});\n}\n/**\n * Merges passed settings object with default options.\n *\n * @param  {Object} defaults\n * @param  {Object} settings\n * @return {Object}\n */\n\nfunction mergeOptions(defaults, settings) {\n  var options = Object.assign({}, defaults, settings); // `Object.assign` do not deeply merge objects, so we\n  // have to do it manually for every nested object\n  // in options. Although it does not look smart,\n  // it's smaller and faster than some fancy\n  // merging deep-merge algorithm script.\n\n  if (settings.hasOwnProperty('classes')) {\n    options.classes = Object.assign({}, defaults.classes, settings.classes);\n    var properties = ['direction', 'type', 'slide', 'arrow', 'nav'];\n    properties.forEach(function (property) {\n      if (settings.classes.hasOwnProperty(property)) {\n        options.classes[property] = _objectSpread2(_objectSpread2({}, defaults.classes[property]), settings.classes[property]);\n      }\n    });\n  }\n\n  if (settings.hasOwnProperty('breakpoints')) {\n    options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints);\n  }\n\n  return options;\n}\n\nvar EventsBus = /*#__PURE__*/function () {\n  /**\n   * Construct a EventBus instance.\n   *\n   * @param {Object} events\n   */\n  function EventsBus() {\n    var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, EventsBus);\n\n    this.events = events;\n    this.hop = events.hasOwnProperty;\n  }\n  /**\n   * Adds listener to the specifed event.\n   *\n   * @param {String|Array} event\n   * @param {Function} handler\n   */\n\n\n  _createClass(EventsBus, [{\n    key: \"on\",\n    value: function on(event, handler) {\n      if (isArray(event)) {\n        for (var i = 0; i < event.length; i++) {\n          this.on(event[i], handler);\n        }\n\n        return;\n      } // Create the event's object if not yet created\n\n\n      if (!this.hop.call(this.events, event)) {\n        this.events[event] = [];\n      } // Add the handler to queue\n\n\n      var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n      return {\n        remove: function remove() {\n          delete this.events[event][index];\n        }\n      };\n    }\n    /**\n     * Runs registered handlers for specified event.\n     *\n     * @param {String|Array} event\n     * @param {Object=} context\n     */\n\n  }, {\n    key: \"emit\",\n    value: function emit(event, context) {\n      if (isArray(event)) {\n        for (var i = 0; i < event.length; i++) {\n          this.emit(event[i], context);\n        }\n\n        return;\n      } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n      if (!this.hop.call(this.events, event)) {\n        return;\n      } // Cycle through events queue, fire!\n\n\n      this.events[event].forEach(function (item) {\n        item(context || {});\n      });\n    }\n  }]);\n\n  return EventsBus;\n}();\n\nvar Glide$1 = /*#__PURE__*/function () {\n  /**\r\n   * Construct glide.\r\n   *\r\n   * @param  {String} selector\r\n   * @param  {Object} options\r\n   */\n  function Glide(selector) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Glide);\n\n    this._c = {};\n    this._t = [];\n    this._e = new EventsBus();\n    this.disabled = false;\n    this.selector = selector;\n    this.settings = mergeOptions(defaults, options);\n    this.index = this.settings.startAt;\n  }\n  /**\r\n   * Initializes glide.\r\n   *\r\n   * @param {Object} extensions Collection of extensions to initialize.\r\n   * @return {Glide}\r\n   */\n\n\n  _createClass(Glide, [{\n    key: \"mount\",\n    value: function mount$1() {\n      var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      this._e.emit('mount.before');\n\n      if (isObject(extensions)) {\n        this._c = mount(this, extensions, this._e);\n      } else {\n        warn('You need to provide a object on `mount()`');\n      }\n\n      this._e.emit('mount.after');\n\n      return this;\n    }\n    /**\r\n     * Collects an instance `translate` transformers.\r\n     *\r\n     * @param  {Array} transformers Collection of transformers.\r\n     * @return {Void}\r\n     */\n\n  }, {\n    key: \"mutate\",\n    value: function mutate() {\n      var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      if (isArray(transformers)) {\n        this._t = transformers;\n      } else {\n        warn('You need to provide a array on `mutate()`');\n      }\n\n      return this;\n    }\n    /**\r\n     * Updates glide with specified settings.\r\n     *\r\n     * @param {Object} settings\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: \"update\",\n    value: function update() {\n      var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      this.settings = mergeOptions(this.settings, settings);\n\n      if (settings.hasOwnProperty('startAt')) {\n        this.index = settings.startAt;\n      }\n\n      this._e.emit('update');\n\n      return this;\n    }\n    /**\r\n     * Change slide with specified pattern. A pattern must be in the special format:\r\n     * `>` - Move one forward\r\n     * `<` - Move one backward\r\n     * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n     * `>>` - Rewinds to end (last slide)\r\n     * `<<` - Rewinds to start (first slide)\r\n     * `|>` - Move one viewport forward\r\n     * `|<` - Move one viewport backward\r\n     *\r\n     * @param {String} pattern\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: \"go\",\n    value: function go(pattern) {\n      this._c.Run.make(pattern);\n\n      return this;\n    }\n    /**\r\n     * Move track by specified distance.\r\n     *\r\n     * @param {String} distance\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: \"move\",\n    value: function move(distance) {\n      this._c.Transition.disable();\n\n      this._c.Move.make(distance);\n\n      return this;\n    }\n    /**\r\n     * Destroy instance and revert all changes done by this._c.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this._e.emit('destroy');\n\n      return this;\n    }\n    /**\r\n     * Start instance autoplaying.\r\n     *\r\n     * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: \"play\",\n    value: function play() {\n      var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (interval) {\n        this.settings.autoplay = interval;\n      }\n\n      this._e.emit('play');\n\n      return this;\n    }\n    /**\r\n     * Stop instance autoplaying.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this._e.emit('pause');\n\n      return this;\n    }\n    /**\r\n     * Sets glide into a idle status.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      this.disabled = true;\n      return this;\n    }\n    /**\r\n     * Sets glide into a active status.\r\n     *\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      this.disabled = false;\n      return this;\n    }\n    /**\r\n     * Adds cuutom event listener with handler.\r\n     *\r\n     * @param  {String|Array} event\r\n     * @param  {Function} handler\r\n     * @return {Glide}\r\n     */\n\n  }, {\n    key: \"on\",\n    value: function on(event, handler) {\n      this._e.on(event, handler);\n\n      return this;\n    }\n    /**\r\n     * Checks if glide is a precised type.\r\n     *\r\n     * @param  {String} name\r\n     * @return {Boolean}\r\n     */\n\n  }, {\n    key: \"isType\",\n    value: function isType(name) {\n      return this.settings.type === name;\n    }\n    /**\r\n     * Gets value of the core options.\r\n     *\r\n     * @return {Object}\r\n     */\n\n  }, {\n    key: \"settings\",\n    get: function get() {\n      return this._o;\n    }\n    /**\r\n     * Sets value of the core options.\r\n     *\r\n     * @param  {Object} o\r\n     * @return {Void}\r\n     */\n    ,\n    set: function set(o) {\n      if (isObject(o)) {\n        this._o = o;\n      } else {\n        warn('Options must be an `object` instance.');\n      }\n    }\n    /**\r\n     * Gets current index of the slider.\r\n     *\r\n     * @return {Object}\r\n     */\n\n  }, {\n    key: \"index\",\n    get: function get() {\n      return this._i;\n    }\n    /**\r\n     * Sets current index a slider.\r\n     *\r\n     * @return {Object}\r\n     */\n    ,\n    set: function set(i) {\n      this._i = toInt(i);\n    }\n    /**\r\n     * Gets type name of the slider.\r\n     *\r\n     * @return {String}\r\n     */\n\n  }, {\n    key: \"type\",\n    get: function get() {\n      return this.settings.type;\n    }\n    /**\r\n     * Gets value of the idle status.\r\n     *\r\n     * @return {Boolean}\r\n     */\n\n  }, {\n    key: \"disabled\",\n    get: function get() {\n      return this._d;\n    }\n    /**\r\n     * Sets value of the idle status.\r\n     *\r\n     * @return {Boolean}\r\n     */\n    ,\n    set: function set(status) {\n      this._d = !!status;\n    }\n  }]);\n\n  return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n  var Run = {\n    /**\n     * Initializes autorunning of the glide.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this._o = false;\n    },\n\n    /**\n     * Makes glides running based on the passed moving schema.\n     *\n     * @param {String} move\n     */\n    make: function make(move) {\n      var _this = this;\n\n      if (!Glide.disabled) {\n        !Glide.settings.waitForTransition || Glide.disable();\n        this.move = move;\n        Events.emit('run.before', this.move);\n        this.calculate();\n        Events.emit('run', this.move);\n        Components.Transition.after(function () {\n          if (_this.isStart()) {\n            Events.emit('run.start', _this.move);\n          }\n\n          if (_this.isEnd()) {\n            Events.emit('run.end', _this.move);\n          }\n\n          if (_this.isOffset()) {\n            _this._o = false;\n            Events.emit('run.offset', _this.move);\n          }\n\n          Events.emit('run.after', _this.move);\n          Glide.enable();\n        });\n      }\n    },\n\n    /**\n     * Calculates current index based on defined move.\n     *\n     * @return {Number|Undefined}\n     */\n    calculate: function calculate() {\n      var move = this.move,\n          length = this.length;\n      var steps = move.steps,\n          direction = move.direction; // By default assume that size of view is equal to one slide\n\n      var viewSize = 1; // While direction is `=` we want jump to\n      // a specified index described in steps.\n\n      if (direction === '=') {\n        // Check if bound is true, \n        // as we want to avoid whitespaces.\n        if (Glide.settings.bound && toInt(steps) > length) {\n          Glide.index = length;\n          return;\n        }\n\n        Glide.index = steps;\n        return;\n      } // When pattern is equal to `>>` we want\n      // fast forward to the last slide.\n\n\n      if (direction === '>' && steps === '>') {\n        Glide.index = length;\n        return;\n      } // When pattern is equal to `<<` we want\n      // fast forward to the first slide.\n\n\n      if (direction === '<' && steps === '<') {\n        Glide.index = 0;\n        return;\n      } // pagination movement\n\n\n      if (direction === '|') {\n        viewSize = Glide.settings.perView || 1;\n      } // we are moving forward\n\n\n      if (direction === '>' || direction === '|' && steps === '>') {\n        var index = calculateForwardIndex(viewSize);\n\n        if (index > length) {\n          this._o = true;\n        }\n\n        Glide.index = normalizeForwardIndex(index, viewSize);\n        return;\n      } // we are moving backward\n\n\n      if (direction === '<' || direction === '|' && steps === '<') {\n        var _index = calculateBackwardIndex(viewSize);\n\n        if (_index < 0) {\n          this._o = true;\n        }\n\n        Glide.index = normalizeBackwardIndex(_index, viewSize);\n        return;\n      }\n\n      warn(\"Invalid direction pattern [\".concat(direction).concat(steps, \"] has been used\"));\n    },\n\n    /**\n     * Checks if we are on the first slide.\n     *\n     * @return {Boolean}\n     */\n    isStart: function isStart() {\n      return Glide.index <= 0;\n    },\n\n    /**\n     * Checks if we are on the last slide.\n     *\n     * @return {Boolean}\n     */\n    isEnd: function isEnd() {\n      return Glide.index >= this.length;\n    },\n\n    /**\n     * Checks if we are making a offset run.\n     *\n     * @param {String} direction\n     * @return {Boolean}\n     */\n    isOffset: function isOffset() {\n      var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n      if (!direction) {\n        return this._o;\n      }\n\n      if (!this._o) {\n        return false;\n      } // did we view to the right?\n\n\n      if (direction === '|>') {\n        return this.move.direction === '|' && this.move.steps === '>';\n      } // did we view to the left?\n\n\n      if (direction === '|<') {\n        return this.move.direction === '|' && this.move.steps === '<';\n      }\n\n      return this.move.direction === direction;\n    },\n\n    /**\n     * Checks if bound mode is active\n     *\n     * @return {Boolean}\n     */\n    isBound: function isBound() {\n      return Glide.isType('slider') && Glide.settings.focusAt !== 'center' && Glide.settings.bound;\n    }\n  };\n  /**\n   * Returns index value to move forward/to the right\n   *\n   * @param viewSize\n   * @returns {Number}\n   */\n\n  function calculateForwardIndex(viewSize) {\n    var index = Glide.index;\n\n    if (Glide.isType('carousel')) {\n      return index + viewSize;\n    }\n\n    return index + (viewSize - index % viewSize);\n  }\n  /**\n   * Normalizes the given forward index based on glide settings, preventing it to exceed certain boundaries\n   *\n   * @param index\n   * @param length\n   * @param viewSize\n   * @returns {Number}\n   */\n\n\n  function normalizeForwardIndex(index, viewSize) {\n    var length = Run.length;\n\n    if (index <= length) {\n      return index;\n    }\n\n    if (Glide.isType('carousel')) {\n      return index - (length + 1);\n    }\n\n    if (Glide.settings.rewind) {\n      // bound does funny things with the length, therefor we have to be certain\n      // that we are on the last possible index value given by bound\n      if (Run.isBound() && !Run.isEnd()) {\n        return length;\n      }\n\n      return 0;\n    }\n\n    if (Run.isBound()) {\n      return length;\n    }\n\n    return Math.floor(length / viewSize) * viewSize;\n  }\n  /**\n   * Calculates index value to move backward/to the left\n   *\n   * @param viewSize\n   * @returns {Number}\n   */\n\n\n  function calculateBackwardIndex(viewSize) {\n    var index = Glide.index;\n\n    if (Glide.isType('carousel')) {\n      return index - viewSize;\n    } // ensure our back navigation results in the same index as a forward navigation\n    // to experience a homogeneous paging\n\n\n    var view = Math.ceil(index / viewSize);\n    return (view - 1) * viewSize;\n  }\n  /**\n   * Normalizes the given backward index based on glide settings, preventing it to exceed certain boundaries\n   *\n   * @param index\n   * @param length\n   * @param viewSize\n   * @returns {*}\n   */\n\n\n  function normalizeBackwardIndex(index, viewSize) {\n    var length = Run.length;\n\n    if (index >= 0) {\n      return index;\n    }\n\n    if (Glide.isType('carousel')) {\n      return index + (length + 1);\n    }\n\n    if (Glide.settings.rewind) {\n      // bound does funny things with the length, therefor we have to be certain\n      // that we are on first possible index value before we to rewind to the length given by bound\n      if (Run.isBound() && Run.isStart()) {\n        return length;\n      }\n\n      return Math.floor(length / viewSize) * viewSize;\n    }\n\n    return 0;\n  }\n\n  define(Run, 'move', {\n    /**\n     * Gets value of the move schema.\n     *\n     * @returns {Object}\n     */\n    get: function get() {\n      return this._m;\n    },\n\n    /**\n     * Sets value of the move schema.\n     *\n     * @returns {Object}\n     */\n    set: function set(value) {\n      var step = value.substr(1);\n      this._m = {\n        direction: value.substr(0, 1),\n        steps: step ? toInt(step) ? toInt(step) : step : 0\n      };\n    }\n  });\n  define(Run, 'length', {\n    /**\n     * Gets value of the running distance based\n     * on zero-indexing number of slides.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var settings = Glide.settings;\n      var length = Components.Html.slides.length; // If the `bound` option is active, a maximum running distance should be\n      // reduced by `perView` and `focusAt` settings. Running distance\n      // should end before creating an empty space after instance.\n\n      if (this.isBound()) {\n        return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n      }\n\n      return length - 1;\n    }\n  });\n  define(Run, 'offset', {\n    /**\n     * Gets status of the offsetting flag.\n     *\n     * @return {Boolean}\n     */\n    get: function get() {\n      return this._o;\n    }\n  });\n  return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n  return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction throttle(func, wait) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var timeout, context, args, result;\n  var previous = 0;\n\n  var later = function later() {\n    previous = options.leading === false ? 0 : now();\n    timeout = null;\n    result = func.apply(context, args);\n    if (!timeout) context = args = null;\n  };\n\n  var throttled = function throttled() {\n    var at = now();\n    if (!previous && options.leading === false) previous = at;\n    var remaining = wait - (at - previous);\n    context = this;\n    args = arguments;\n\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n\n      previous = at;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(later, remaining);\n    }\n\n    return result;\n  };\n\n  throttled.cancel = function () {\n    clearTimeout(timeout);\n    previous = 0;\n    timeout = context = args = null;\n  };\n\n  return throttled;\n}\n\nvar MARGIN_TYPE = {\n  ltr: ['marginLeft', 'marginRight'],\n  rtl: ['marginRight', 'marginLeft']\n};\nfunction Gaps (Glide, Components, Events) {\n  var Gaps = {\n    /**\n     * Applies gaps between slides. First and last\n     * slides do not receive it's edge margins.\n     *\n     * @param {HTMLCollection} slides\n     * @return {Void}\n     */\n    apply: function apply(slides) {\n      for (var i = 0, len = slides.length; i < len; i++) {\n        var style = slides[i].style;\n        var direction = Components.Direction.value;\n\n        if (i !== 0) {\n          style[MARGIN_TYPE[direction][0]] = \"\".concat(this.value / 2, \"px\");\n        } else {\n          style[MARGIN_TYPE[direction][0]] = '';\n        }\n\n        if (i !== slides.length - 1) {\n          style[MARGIN_TYPE[direction][1]] = \"\".concat(this.value / 2, \"px\");\n        } else {\n          style[MARGIN_TYPE[direction][1]] = '';\n        }\n      }\n    },\n\n    /**\n     * Removes gaps from the slides.\n     *\n     * @param {HTMLCollection} slides\n     * @returns {Void}\n    */\n    remove: function remove(slides) {\n      for (var i = 0, len = slides.length; i < len; i++) {\n        var style = slides[i].style;\n        style.marginLeft = '';\n        style.marginRight = '';\n      }\n    }\n  };\n  define(Gaps, 'value', {\n    /**\n     * Gets value of the gap.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      return toInt(Glide.settings.gap);\n    }\n  });\n  define(Gaps, 'grow', {\n    /**\n     * Gets additional dimensions value caused by gaps.\n     * Used to increase width of the slides wrapper.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      return Gaps.value * Components.Sizes.length;\n    }\n  });\n  define(Gaps, 'reductor', {\n    /**\n     * Gets reduction value caused by gaps.\n     * Used to subtract width of the slides.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      var perView = Glide.settings.perView;\n      return Gaps.value * (perView - 1) / perView;\n    }\n  });\n  /**\n   * Apply calculated gaps:\n   * - after building, so slides (including clones) will receive proper margins\n   * - on updating via API, to recalculate gaps with new options\n   */\n\n  Events.on(['build.after', 'update'], throttle(function () {\n    Gaps.apply(Components.Html.wrapper.children);\n  }, 30));\n  /**\n   * Remove gaps:\n   * - on destroying to bring markup to its inital state\n   */\n\n  Events.on('destroy', function () {\n    Gaps.remove(Components.Html.wrapper.children);\n  });\n  return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param  {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n  if (node && node.parentNode) {\n    var n = node.parentNode.firstChild;\n    var matched = [];\n\n    for (; n; n = n.nextSibling) {\n      if (n.nodeType === 1 && n !== node) {\n        matched.push(n);\n      }\n    }\n\n    return matched;\n  }\n\n  return [];\n}\n/**\n * Coerces a NodeList to an Array.\n *\n * @param  {NodeList} nodeList\n * @return {Array}\n */\n\nfunction toArray(nodeList) {\n  return Array.prototype.slice.call(nodeList);\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\nfunction Html (Glide, Components, Events) {\n  var Html = {\n    /**\n     * Setup slider HTML nodes.\n     *\n     * @param {Glide} glide\n     */\n    mount: function mount() {\n      this.root = Glide.selector;\n      this.track = this.root.querySelector(TRACK_SELECTOR);\n      this.collectSlides();\n    },\n\n    /**\n     * Collect slides\n     */\n    collectSlides: function collectSlides() {\n      this.slides = toArray(this.wrapper.children).filter(function (slide) {\n        return !slide.classList.contains(Glide.settings.classes.slide.clone);\n      });\n    }\n  };\n  define(Html, 'root', {\n    /**\n     * Gets node of the glide main element.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Html._r;\n    },\n\n    /**\n     * Sets node of the glide main element.\n     *\n     * @return {Object}\n     */\n    set: function set(r) {\n      if (isString(r)) {\n        r = document.querySelector(r);\n      }\n\n      if (r !== null) {\n        Html._r = r;\n      } else {\n        warn('Root element must be a existing Html node');\n      }\n    }\n  });\n  define(Html, 'track', {\n    /**\n     * Gets node of the glide track with slides.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Html._t;\n    },\n\n    /**\n     * Sets node of the glide track with slides.\n     *\n     * @return {Object}\n     */\n    set: function set(t) {\n      Html._t = t;\n    }\n  });\n  define(Html, 'wrapper', {\n    /**\n     * Gets node of the slides wrapper.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Html.track.children[0];\n    }\n  });\n  /**\n   * Add/remove/reorder dynamic slides\n   */\n\n  Events.on('update', function () {\n    Html.collectSlides();\n  });\n  return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n  var Peek = {\n    /**\n     * Setups how much to peek based on settings.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.value = Glide.settings.peek;\n    }\n  };\n  define(Peek, 'value', {\n    /**\n     * Gets value of the peek.\n     *\n     * @returns {Number|Object}\n     */\n    get: function get() {\n      return Peek._v;\n    },\n\n    /**\n     * Sets value of the peek.\n     *\n     * @param {Number|Object} value\n     * @return {Void}\n     */\n    set: function set(value) {\n      if (isObject(value)) {\n        value.before = toInt(value.before);\n        value.after = toInt(value.after);\n      } else {\n        value = toInt(value);\n      }\n\n      Peek._v = value;\n    }\n  });\n  define(Peek, 'reductor', {\n    /**\n     * Gets reduction value caused by peek.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      var value = Peek.value;\n      var perView = Glide.settings.perView;\n\n      if (isObject(value)) {\n        return value.before / perView + value.after / perView;\n      }\n\n      return value * 2 / perView;\n    }\n  });\n  /**\n   * Recalculate peeking sizes on:\n   * - when resizing window to update to proper percents\n   */\n\n  Events.on(['resize', 'update'], function () {\n    Peek.mount();\n  });\n  return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n  var Move = {\n    /**\n     * Constructs move component.\n     *\n     * @returns {Void}\n     */\n    mount: function mount() {\n      this._o = 0;\n    },\n\n    /**\n     * Calculates a movement value based on passed offset and currently active index.\n     *\n     * @param  {Number} offset\n     * @return {Void}\n     */\n    make: function make() {\n      var _this = this;\n\n      var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      this.offset = offset;\n      Events.emit('move', {\n        movement: this.value\n      });\n      Components.Transition.after(function () {\n        Events.emit('move.after', {\n          movement: _this.value\n        });\n      });\n    }\n  };\n  define(Move, 'offset', {\n    /**\n     * Gets an offset value used to modify current translate.\n     *\n     * @return {Object}\n     */\n    get: function get() {\n      return Move._o;\n    },\n\n    /**\n     * Sets an offset value used to modify current translate.\n     *\n     * @return {Object}\n     */\n    set: function set(value) {\n      Move._o = !isUndefined(value) ? toInt(value) : 0;\n    }\n  });\n  define(Move, 'translate', {\n    /**\n     * Gets a raw movement value.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Components.Sizes.slideWidth * Glide.index;\n    }\n  });\n  define(Move, 'value', {\n    /**\n     * Gets an actual movement value corrected by offset.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var offset = this.offset;\n      var translate = this.translate;\n\n      if (Components.Direction.is('rtl')) {\n        return translate + offset;\n      }\n\n      return translate - offset;\n    }\n  });\n  /**\n   * Make movement to proper slide on:\n   * - before build, so glide will start at `startAt` index\n   * - on each standard run to move to newly calculated index\n   */\n\n  Events.on(['build.before', 'run'], function () {\n    Move.make();\n  });\n  return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n  var Sizes = {\n    /**\n     * Setups dimensions of slides.\n     *\n     * @return {Void}\n     */\n    setupSlides: function setupSlides() {\n      var width = \"\".concat(this.slideWidth, \"px\");\n      var slides = Components.Html.slides;\n\n      for (var i = 0; i < slides.length; i++) {\n        slides[i].style.width = width;\n      }\n    },\n\n    /**\n     * Setups dimensions of slides wrapper.\n     *\n     * @return {Void}\n     */\n    setupWrapper: function setupWrapper() {\n      Components.Html.wrapper.style.width = \"\".concat(this.wrapperSize, \"px\");\n    },\n\n    /**\n     * Removes applied styles from HTML elements.\n     *\n     * @returns {Void}\n     */\n    remove: function remove() {\n      var slides = Components.Html.slides;\n\n      for (var i = 0; i < slides.length; i++) {\n        slides[i].style.width = '';\n      }\n\n      Components.Html.wrapper.style.width = '';\n    }\n  };\n  define(Sizes, 'length', {\n    /**\n     * Gets count number of the slides.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Components.Html.slides.length;\n    }\n  });\n  define(Sizes, 'width', {\n    /**\n     * Gets width value of the slider (visible area).\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Components.Html.track.offsetWidth;\n    }\n  });\n  define(Sizes, 'wrapperSize', {\n    /**\n     * Gets size of the slides wrapper.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n    }\n  });\n  define(Sizes, 'slideWidth', {\n    /**\n     * Gets width value of a single slide.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n    }\n  });\n  /**\n   * Apply calculated glide's dimensions:\n   * - before building, so other dimensions (e.g. translate) will be calculated propertly\n   * - when resizing window to recalculate sildes dimensions\n   * - on updating via API, to calculate dimensions based on new options\n   */\n\n  Events.on(['build.before', 'resize', 'update'], function () {\n    Sizes.setupSlides();\n    Sizes.setupWrapper();\n  });\n  /**\n   * Remove calculated glide's dimensions:\n   * - on destoting to bring markup to its inital state\n   */\n\n  Events.on('destroy', function () {\n    Sizes.remove();\n  });\n  return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n  var Build = {\n    /**\n     * Init glide building. Adds classes, sets\n     * dimensions and setups initial state.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      Events.emit('build.before');\n      this.typeClass();\n      this.activeClass();\n      Events.emit('build.after');\n    },\n\n    /**\n     * Adds `type` class to the glide element.\n     *\n     * @return {Void}\n     */\n    typeClass: function typeClass() {\n      Components.Html.root.classList.add(Glide.settings.classes.type[Glide.settings.type]);\n    },\n\n    /**\n     * Sets active class to current slide.\n     *\n     * @return {Void}\n     */\n    activeClass: function activeClass() {\n      var classes = Glide.settings.classes;\n      var slide = Components.Html.slides[Glide.index];\n\n      if (slide) {\n        slide.classList.add(classes.slide.active);\n        siblings(slide).forEach(function (sibling) {\n          sibling.classList.remove(classes.slide.active);\n        });\n      }\n    },\n\n    /**\n     * Removes HTML classes applied at building.\n     *\n     * @return {Void}\n     */\n    removeClasses: function removeClasses() {\n      var _Glide$settings$class = Glide.settings.classes,\n          type = _Glide$settings$class.type,\n          slide = _Glide$settings$class.slide;\n      Components.Html.root.classList.remove(type[Glide.settings.type]);\n      Components.Html.slides.forEach(function (sibling) {\n        sibling.classList.remove(slide.active);\n      });\n    }\n  };\n  /**\n   * Clear building classes:\n   * - on destroying to bring HTML to its initial state\n   * - on updating to remove classes before remounting component\n   */\n\n  Events.on(['destroy', 'update'], function () {\n    Build.removeClasses();\n  });\n  /**\n   * Remount component:\n   * - on resizing of the window to calculate new dimensions\n   * - on updating settings via API\n   */\n\n  Events.on(['resize', 'update'], function () {\n    Build.mount();\n  });\n  /**\n   * Swap active class of current slide:\n   * - after each move to the new index\n   */\n\n  Events.on('move.after', function () {\n    Build.activeClass();\n  });\n  return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n  var Clones = {\n    /**\n     * Create pattern map and collect slides to be cloned.\n     */\n    mount: function mount() {\n      this.items = [];\n\n      if (Glide.isType('carousel')) {\n        this.items = this.collect();\n      }\n    },\n\n    /**\n     * Collect clones with pattern.\n     *\n     * @return {[]}\n     */\n    collect: function collect() {\n      var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var slides = Components.Html.slides;\n      var _Glide$settings = Glide.settings,\n          perView = _Glide$settings.perView,\n          classes = _Glide$settings.classes,\n          cloningRatio = _Glide$settings.cloningRatio;\n\n      if (slides.length > 0) {\n        var peekIncrementer = +!!Glide.settings.peek;\n        var cloneCount = perView + peekIncrementer + Math.round(perView / 2);\n        var append = slides.slice(0, cloneCount).reverse();\n        var prepend = slides.slice(cloneCount * -1);\n\n        for (var r = 0; r < Math.max(cloningRatio, Math.floor(perView / slides.length)); r++) {\n          for (var i = 0; i < append.length; i++) {\n            var clone = append[i].cloneNode(true);\n            clone.classList.add(classes.slide.clone);\n            items.push(clone);\n          }\n\n          for (var _i = 0; _i < prepend.length; _i++) {\n            var _clone = prepend[_i].cloneNode(true);\n\n            _clone.classList.add(classes.slide.clone);\n\n            items.unshift(_clone);\n          }\n        }\n      }\n\n      return items;\n    },\n\n    /**\n     * Append cloned slides with generated pattern.\n     *\n     * @return {Void}\n     */\n    append: function append() {\n      var items = this.items;\n      var _Components$Html = Components.Html,\n          wrapper = _Components$Html.wrapper,\n          slides = _Components$Html.slides;\n      var half = Math.floor(items.length / 2);\n      var prepend = items.slice(0, half).reverse();\n      var append = items.slice(half * -1).reverse();\n      var width = \"\".concat(Components.Sizes.slideWidth, \"px\");\n\n      for (var i = 0; i < append.length; i++) {\n        wrapper.appendChild(append[i]);\n      }\n\n      for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n        wrapper.insertBefore(prepend[_i2], slides[0]);\n      }\n\n      for (var _i3 = 0; _i3 < items.length; _i3++) {\n        items[_i3].style.width = width;\n      }\n    },\n\n    /**\n     * Remove all cloned slides.\n     *\n     * @return {Void}\n     */\n    remove: function remove() {\n      var items = this.items;\n\n      for (var i = 0; i < items.length; i++) {\n        Components.Html.wrapper.removeChild(items[i]);\n      }\n    }\n  };\n  define(Clones, 'grow', {\n    /**\n     * Gets additional dimensions value caused by clones.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n    }\n  });\n  /**\n   * Append additional slide's clones:\n   * - while glide's type is `carousel`\n   */\n\n  Events.on('update', function () {\n    Clones.remove();\n    Clones.mount();\n    Clones.append();\n  });\n  /**\n   * Append additional slide's clones:\n   * - while glide's type is `carousel`\n   */\n\n  Events.on('build.before', function () {\n    if (Glide.isType('carousel')) {\n      Clones.append();\n    }\n  });\n  /**\n   * Remove clones HTMLElements:\n   * - on destroying, to bring HTML to its initial state\n   */\n\n  Events.on('destroy', function () {\n    Clones.remove();\n  });\n  return Clones;\n}\n\nvar EventsBinder = /*#__PURE__*/function () {\n  /**\n   * Construct a EventsBinder instance.\n   */\n  function EventsBinder() {\n    var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, EventsBinder);\n\n    this.listeners = listeners;\n  }\n  /**\n   * Adds events listeners to arrows HTML elements.\n   *\n   * @param  {String|Array} events\n   * @param  {Element|Window|Document} el\n   * @param  {Function} closure\n   * @param  {Boolean|Object} capture\n   * @return {Void}\n   */\n\n\n  _createClass(EventsBinder, [{\n    key: \"on\",\n    value: function on(events, el, closure) {\n      var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n      if (isString(events)) {\n        events = [events];\n      }\n\n      for (var i = 0; i < events.length; i++) {\n        this.listeners[events[i]] = closure;\n        el.addEventListener(events[i], this.listeners[events[i]], capture);\n      }\n    }\n    /**\n     * Removes event listeners from arrows HTML elements.\n     *\n     * @param  {String|Array} events\n     * @param  {Element|Window|Document} el\n     * @param  {Boolean|Object} capture\n     * @return {Void}\n     */\n\n  }, {\n    key: \"off\",\n    value: function off(events, el) {\n      var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      if (isString(events)) {\n        events = [events];\n      }\n\n      for (var i = 0; i < events.length; i++) {\n        el.removeEventListener(events[i], this.listeners[events[i]], capture);\n      }\n    }\n    /**\n     * Destroy collected listeners.\n     *\n     * @returns {Void}\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      delete this.listeners;\n    }\n  }]);\n\n  return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n  var Resize = {\n    /**\n     * Initializes window bindings.\n     */\n    mount: function mount() {\n      this.bind();\n    },\n\n    /**\n     * Binds `rezsize` listener to the window.\n     * It's a costly event, so we are debouncing it.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('resize', window, throttle(function () {\n        Events.emit('resize');\n      }, Glide.settings.throttle));\n    },\n\n    /**\n     * Unbinds listeners from the window.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('resize', window);\n    }\n  };\n  /**\n   * Remove bindings from window:\n   * - on destroying, to remove added EventListener\n   */\n\n  Events.on('destroy', function () {\n    Resize.unbind();\n    Binder.destroy();\n  });\n  return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n  '>': '<',\n  '<': '>',\n  '=': '='\n};\nfunction Direction (Glide, Components, Events) {\n  var Direction = {\n    /**\n     * Setups gap value based on settings.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.value = Glide.settings.direction;\n    },\n\n    /**\n     * Resolves pattern based on direction value\n     *\n     * @param {String} pattern\n     * @returns {String}\n     */\n    resolve: function resolve(pattern) {\n      var token = pattern.slice(0, 1);\n\n      if (this.is('rtl')) {\n        return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n      }\n\n      return pattern;\n    },\n\n    /**\n     * Checks value of direction mode.\n     *\n     * @param {String} direction\n     * @returns {Boolean}\n     */\n    is: function is(direction) {\n      return this.value === direction;\n    },\n\n    /**\n     * Applies direction class to the root HTML element.\n     *\n     * @return {Void}\n     */\n    addClass: function addClass() {\n      Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n    },\n\n    /**\n     * Removes direction class from the root HTML element.\n     *\n     * @return {Void}\n     */\n    removeClass: function removeClass() {\n      Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n    }\n  };\n  define(Direction, 'value', {\n    /**\n     * Gets value of the direction.\n     *\n     * @returns {Number}\n     */\n    get: function get() {\n      return Direction._v;\n    },\n\n    /**\n     * Sets value of the direction.\n     *\n     * @param {String} value\n     * @return {Void}\n     */\n    set: function set(value) {\n      if (VALID_DIRECTIONS.indexOf(value) > -1) {\n        Direction._v = value;\n      } else {\n        warn('Direction value must be `ltr` or `rtl`');\n      }\n    }\n  });\n  /**\n   * Clear direction class:\n   * - on destroy to bring HTML to its initial state\n   * - on update to remove class before reappling bellow\n   */\n\n  Events.on(['destroy', 'update'], function () {\n    Direction.removeClass();\n  });\n  /**\n   * Remount component:\n   * - on update to reflect changes in direction value\n   */\n\n  Events.on('update', function () {\n    Direction.mount();\n  });\n  /**\n   * Apply direction class:\n   * - before building to apply class for the first time\n   * - on updating to reapply direction class that may changed\n   */\n\n  Events.on(['build.before', 'update'], function () {\n    Direction.addClass();\n  });\n  return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n  return {\n    /**\n     * Negates the passed translate if glide is in RTL option.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      if (Components.Direction.is('rtl')) {\n        return -translate;\n      }\n\n      return translate;\n    }\n  };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n  return {\n    /**\n     * Modifies passed translate value with number in the `gap` settings.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      var multiplier = Math.floor(translate / Components.Sizes.slideWidth);\n      return translate + Components.Gaps.value * multiplier;\n    }\n  };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n  return {\n    /**\n     * Adds to the passed translate width of the half of clones.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      return translate + Components.Clones.grow / 2;\n    }\n  };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\n\nfunction Peeking (Glide, Components) {\n  return {\n    /**\n     * Modifies passed translate value with a `peek` setting.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      if (Glide.settings.focusAt >= 0) {\n        var peek = Components.Peek.value;\n\n        if (isObject(peek)) {\n          return translate - peek.before;\n        }\n\n        return translate - peek;\n      }\n\n      return translate;\n    }\n  };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n  return {\n    /**\n     * Modifies passed translate value with index in the `focusAt` setting.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    modify: function modify(translate) {\n      var gap = Components.Gaps.value;\n      var width = Components.Sizes.width;\n      var focusAt = Glide.settings.focusAt;\n      var slideWidth = Components.Sizes.slideWidth;\n\n      if (focusAt === 'center') {\n        return translate - (width / 2 - slideWidth / 2);\n      }\n\n      return translate - slideWidth * focusAt - gap * focusAt;\n    }\n  };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param  {Object} Glide\n * @param  {Object} Components\n * @return {Object}\n */\n\nfunction mutator (Glide, Components, Events) {\n  /**\n   * Merge instance transformers with collection of default transformers.\n   * It's important that the Rtl component be last on the list,\n   * so it reflects all previous transformations.\n   *\n   * @type {Array}\n   */\n  var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n  return {\n    /**\n     * Piplines translate value with registered transformers.\n     *\n     * @param  {Number} translate\n     * @return {Number}\n     */\n    mutate: function mutate(translate) {\n      for (var i = 0; i < TRANSFORMERS.length; i++) {\n        var transformer = TRANSFORMERS[i];\n\n        if (isFunction(transformer) && isFunction(transformer().modify)) {\n          translate = transformer(Glide, Components, Events).modify(translate);\n        } else {\n          warn('Transformer should be a function that returns an object with `modify()` method');\n        }\n      }\n\n      return translate;\n    }\n  };\n}\n\nfunction Translate (Glide, Components, Events) {\n  var Translate = {\n    /**\n     * Sets value of translate on HTML element.\n     *\n     * @param {Number} value\n     * @return {Void}\n     */\n    set: function set(value) {\n      var transform = mutator(Glide, Components).mutate(value);\n      var translate3d = \"translate3d(\".concat(-1 * transform, \"px, 0px, 0px)\");\n      Components.Html.wrapper.style.mozTransform = translate3d; // needed for supported Firefox 10-15\n\n      Components.Html.wrapper.style.webkitTransform = translate3d; // needed for supported Chrome 10-35, Safari 5.1-8, and Opera 15-22\n\n      Components.Html.wrapper.style.transform = translate3d;\n    },\n\n    /**\n     * Removes value of translate from HTML element.\n     *\n     * @return {Void}\n     */\n    remove: function remove() {\n      Components.Html.wrapper.style.transform = '';\n    },\n\n    /**\n     * @return {number}\n     */\n    getStartIndex: function getStartIndex() {\n      var length = Components.Sizes.length;\n      var index = Glide.index;\n      var perView = Glide.settings.perView;\n\n      if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n        return length + (index - perView);\n      } // \"modulo length\" converts an index that equals length to zero\n\n\n      return (index + perView) % length;\n    },\n\n    /**\n     * @return {number}\n     */\n    getTravelDistance: function getTravelDistance() {\n      var travelDistance = Components.Sizes.slideWidth * Glide.settings.perView;\n\n      if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n        // reverse travel distance so that we don't have to change subtract operations\n        return travelDistance * -1;\n      }\n\n      return travelDistance;\n    }\n  };\n  /**\n   * Set new translate value:\n   * - on move to reflect index change\n   * - on updating via API to reflect possible changes in options\n   */\n\n  Events.on('move', function (context) {\n    if (!Glide.isType('carousel') || !Components.Run.isOffset()) {\n      return Translate.set(context.movement);\n    }\n\n    Components.Transition.after(function () {\n      Events.emit('translate.jump');\n      Translate.set(Components.Sizes.slideWidth * Glide.index);\n    });\n    var startWidth = Components.Sizes.slideWidth * Components.Translate.getStartIndex();\n    return Translate.set(startWidth - Components.Translate.getTravelDistance());\n  });\n  /**\n   * Remove translate:\n   * - on destroying to bring markup to its inital state\n   */\n\n  Events.on('destroy', function () {\n    Translate.remove();\n  });\n  return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n  /**\n   * Holds inactivity status of transition.\n   * When true transition is not applied.\n   *\n   * @type {Boolean}\n   */\n  var disabled = false;\n  var Transition = {\n    /**\n     * Composes string of the CSS transition.\n     *\n     * @param {String} property\n     * @return {String}\n     */\n    compose: function compose(property) {\n      var settings = Glide.settings;\n\n      if (disabled) {\n        return \"\".concat(property, \" 0ms \").concat(settings.animationTimingFunc);\n      }\n\n      return \"\".concat(property, \" \").concat(this.duration, \"ms \").concat(settings.animationTimingFunc);\n    },\n\n    /**\n     * Sets value of transition on HTML element.\n     *\n     * @param {String=} property\n     * @return {Void}\n     */\n    set: function set() {\n      var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n      Components.Html.wrapper.style.transition = this.compose(property);\n    },\n\n    /**\n     * Removes value of transition from HTML element.\n     *\n     * @return {Void}\n     */\n    remove: function remove() {\n      Components.Html.wrapper.style.transition = '';\n    },\n\n    /**\n     * Runs callback after animation.\n     *\n     * @param  {Function} callback\n     * @return {Void}\n     */\n    after: function after(callback) {\n      setTimeout(function () {\n        callback();\n      }, this.duration);\n    },\n\n    /**\n     * Enable transition.\n     *\n     * @return {Void}\n     */\n    enable: function enable() {\n      disabled = false;\n      this.set();\n    },\n\n    /**\n     * Disable transition.\n     *\n     * @return {Void}\n     */\n    disable: function disable() {\n      disabled = true;\n      this.set();\n    }\n  };\n  define(Transition, 'duration', {\n    /**\n     * Gets duration of the transition based\n     * on currently running animation type.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var settings = Glide.settings;\n\n      if (Glide.isType('slider') && Components.Run.offset) {\n        return settings.rewindDuration;\n      }\n\n      return settings.animationDuration;\n    }\n  });\n  /**\n   * Set transition `style` value:\n   * - on each moving, because it may be cleared by offset move\n   */\n\n  Events.on('move', function () {\n    Transition.set();\n  });\n  /**\n   * Disable transition:\n   * - before initial build to avoid transitioning from `0` to `startAt` index\n   * - while resizing window and recalculating dimensions\n   * - on jumping from offset transition at start and end edges in `carousel` type\n   */\n\n  Events.on(['build.before', 'resize', 'translate.jump'], function () {\n    Transition.disable();\n  });\n  /**\n   * Enable transition:\n   * - on each running, because it may be disabled by offset move\n   */\n\n  Events.on('run', function () {\n    Transition.enable();\n  });\n  /**\n   * Remove transition:\n   * - on destroying to bring markup to its inital state\n   */\n\n  Events.on('destroy', function () {\n    Transition.remove();\n  });\n  return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\nvar supportsPassive = false;\n\ntry {\n  var opts = Object.defineProperty({}, 'passive', {\n    get: function get() {\n      supportsPassive = true;\n    }\n  });\n  window.addEventListener('testPassive', null, opts);\n  window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\nfunction Swipe (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n  var swipeSin = 0;\n  var swipeStartX = 0;\n  var swipeStartY = 0;\n  var disabled = false;\n  var capture = supportsPassive$1 ? {\n    passive: true\n  } : false;\n  var Swipe = {\n    /**\n     * Initializes swipe bindings.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.bindSwipeStart();\n    },\n\n    /**\n     * Handler for `swipestart` event. Calculates entry points of the user's tap.\n     *\n     * @param {Object} event\n     * @return {Void}\n     */\n    start: function start(event) {\n      if (!disabled && !Glide.disabled) {\n        this.disable();\n        var swipe = this.touches(event);\n        swipeSin = null;\n        swipeStartX = toInt(swipe.pageX);\n        swipeStartY = toInt(swipe.pageY);\n        this.bindSwipeMove();\n        this.bindSwipeEnd();\n        Events.emit('swipe.start');\n      }\n    },\n\n    /**\n     * Handler for `swipemove` event. Calculates user's tap angle and distance.\n     *\n     * @param {Object} event\n     */\n    move: function move(event) {\n      if (!Glide.disabled) {\n        var _Glide$settings = Glide.settings,\n            touchAngle = _Glide$settings.touchAngle,\n            touchRatio = _Glide$settings.touchRatio,\n            classes = _Glide$settings.classes;\n        var swipe = this.touches(event);\n        var subExSx = toInt(swipe.pageX) - swipeStartX;\n        var subEySy = toInt(swipe.pageY) - swipeStartY;\n        var powEX = Math.abs(subExSx << 2);\n        var powEY = Math.abs(subEySy << 2);\n        var swipeHypotenuse = Math.sqrt(powEX + powEY);\n        var swipeCathetus = Math.sqrt(powEY);\n        swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n        if (swipeSin * 180 / Math.PI < touchAngle) {\n          event.stopPropagation();\n          Components.Move.make(subExSx * toFloat(touchRatio));\n          Components.Html.root.classList.add(classes.dragging);\n          Events.emit('swipe.move');\n        } else {\n          return false;\n        }\n      }\n    },\n\n    /**\n     * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n     *\n     * @param {Object} event\n     * @return {Void}\n     */\n    end: function end(event) {\n      if (!Glide.disabled) {\n        var _Glide$settings2 = Glide.settings,\n            perSwipe = _Glide$settings2.perSwipe,\n            touchAngle = _Glide$settings2.touchAngle,\n            classes = _Glide$settings2.classes;\n        var swipe = this.touches(event);\n        var threshold = this.threshold(event);\n        var swipeDistance = swipe.pageX - swipeStartX;\n        var swipeDeg = swipeSin * 180 / Math.PI;\n        this.enable();\n\n        if (swipeDistance > threshold && swipeDeg < touchAngle) {\n          Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n        } else if (swipeDistance < -threshold && swipeDeg < touchAngle) {\n          Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n        } else {\n          // While swipe don't reach distance apply previous transform.\n          Components.Move.make();\n        }\n\n        Components.Html.root.classList.remove(classes.dragging);\n        this.unbindSwipeMove();\n        this.unbindSwipeEnd();\n        Events.emit('swipe.end');\n      }\n    },\n\n    /**\n     * Binds swipe's starting event.\n     *\n     * @return {Void}\n     */\n    bindSwipeStart: function bindSwipeStart() {\n      var _this = this;\n\n      var _Glide$settings3 = Glide.settings,\n          swipeThreshold = _Glide$settings3.swipeThreshold,\n          dragThreshold = _Glide$settings3.dragThreshold;\n\n      if (swipeThreshold) {\n        Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n          _this.start(event);\n        }, capture);\n      }\n\n      if (dragThreshold) {\n        Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n          _this.start(event);\n        }, capture);\n      }\n    },\n\n    /**\n     * Unbinds swipe's starting event.\n     *\n     * @return {Void}\n     */\n    unbindSwipeStart: function unbindSwipeStart() {\n      Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n      Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n    },\n\n    /**\n     * Binds swipe's moving event.\n     *\n     * @return {Void}\n     */\n    bindSwipeMove: function bindSwipeMove() {\n      var _this2 = this;\n\n      Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n        _this2.move(event);\n      }, Glide.settings.throttle), capture);\n    },\n\n    /**\n     * Unbinds swipe's moving event.\n     *\n     * @return {Void}\n     */\n    unbindSwipeMove: function unbindSwipeMove() {\n      Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n    },\n\n    /**\n     * Binds swipe's ending event.\n     *\n     * @return {Void}\n     */\n    bindSwipeEnd: function bindSwipeEnd() {\n      var _this3 = this;\n\n      Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n        _this3.end(event);\n      });\n    },\n\n    /**\n     * Unbinds swipe's ending event.\n     *\n     * @return {Void}\n     */\n    unbindSwipeEnd: function unbindSwipeEnd() {\n      Binder.off(END_EVENTS, Components.Html.wrapper);\n    },\n\n    /**\n     * Normalizes event touches points accorting to different types.\n     *\n     * @param {Object} event\n     */\n    touches: function touches(event) {\n      if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n        return event;\n      }\n\n      return event.touches[0] || event.changedTouches[0];\n    },\n\n    /**\n     * Gets value of minimum swipe distance settings based on event type.\n     *\n     * @return {Number}\n     */\n    threshold: function threshold(event) {\n      var settings = Glide.settings;\n\n      if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n        return settings.dragThreshold;\n      }\n\n      return settings.swipeThreshold;\n    },\n\n    /**\n     * Enables swipe event.\n     *\n     * @return {self}\n     */\n    enable: function enable() {\n      disabled = false;\n      Components.Transition.enable();\n      return this;\n    },\n\n    /**\n     * Disables swipe event.\n     *\n     * @return {self}\n     */\n    disable: function disable() {\n      disabled = true;\n      Components.Transition.disable();\n      return this;\n    }\n  };\n  /**\n   * Add component class:\n   * - after initial building\n   */\n\n  Events.on('build.after', function () {\n    Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n  });\n  /**\n   * Remove swiping bindings:\n   * - on destroying, to remove added EventListeners\n   */\n\n  Events.on('destroy', function () {\n    Swipe.unbindSwipeStart();\n    Swipe.unbindSwipeMove();\n    Swipe.unbindSwipeEnd();\n    Binder.destroy();\n  });\n  return Swipe;\n}\n\nfunction Images (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n  var Images = {\n    /**\n     * Binds listener to glide wrapper.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.bind();\n    },\n\n    /**\n     * Binds `dragstart` event on wrapper to prevent dragging images.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n    },\n\n    /**\n     * Unbinds `dragstart` event on wrapper.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('dragstart', Components.Html.wrapper);\n    },\n\n    /**\n     * Event handler. Prevents dragging.\n     *\n     * @return {Void}\n     */\n    dragstart: function dragstart(event) {\n      event.preventDefault();\n    }\n  };\n  /**\n   * Remove bindings from images:\n   * - on destroying, to remove added EventListeners\n   */\n\n  Events.on('destroy', function () {\n    Images.unbind();\n    Binder.destroy();\n  });\n  return Images;\n}\n\nfunction Anchors (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n  /**\n   * Holds detaching status of anchors.\n   * Prevents detaching of already detached anchors.\n   *\n   * @private\n   * @type {Boolean}\n   */\n\n  var detached = false;\n  /**\n   * Holds preventing status of anchors.\n   * If `true` redirection after click will be disabled.\n   *\n   * @private\n   * @type {Boolean}\n   */\n\n  var prevented = false;\n  var Anchors = {\n    /**\n     * Setups a initial state of anchors component.\n     *\n     * @returns {Void}\n     */\n    mount: function mount() {\n      /**\n       * Holds collection of anchors elements.\n       *\n       * @private\n       * @type {HTMLCollection}\n       */\n      this._a = Components.Html.wrapper.querySelectorAll('a');\n      this.bind();\n    },\n\n    /**\n     * Binds events to anchors inside a track.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('click', Components.Html.wrapper, this.click);\n    },\n\n    /**\n     * Unbinds events attached to anchors inside a track.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('click', Components.Html.wrapper);\n    },\n\n    /**\n     * Handler for click event. Prevents clicks when glide is in `prevent` status.\n     *\n     * @param  {Object} event\n     * @return {Void}\n     */\n    click: function click(event) {\n      if (prevented) {\n        event.stopPropagation();\n        event.preventDefault();\n      }\n    },\n\n    /**\n     * Detaches anchors click event inside glide.\n     *\n     * @return {self}\n     */\n    detach: function detach() {\n      prevented = true;\n\n      if (!detached) {\n        for (var i = 0; i < this.items.length; i++) {\n          this.items[i].draggable = false;\n        }\n\n        detached = true;\n      }\n\n      return this;\n    },\n\n    /**\n     * Attaches anchors click events inside glide.\n     *\n     * @return {self}\n     */\n    attach: function attach() {\n      prevented = false;\n\n      if (detached) {\n        for (var i = 0; i < this.items.length; i++) {\n          this.items[i].draggable = true;\n        }\n\n        detached = false;\n      }\n\n      return this;\n    }\n  };\n  define(Anchors, 'items', {\n    /**\n     * Gets collection of the arrows HTML elements.\n     *\n     * @return {HTMLElement[]}\n     */\n    get: function get() {\n      return Anchors._a;\n    }\n  });\n  /**\n   * Detach anchors inside slides:\n   * - on swiping, so they won't redirect to its `href` attributes\n   */\n\n  Events.on('swipe.move', function () {\n    Anchors.detach();\n  });\n  /**\n   * Attach anchors inside slides:\n   * - after swiping and transitions ends, so they can redirect after click again\n   */\n\n  Events.on('swipe.end', function () {\n    Components.Transition.after(function () {\n      Anchors.attach();\n    });\n  });\n  /**\n   * Unbind anchors inside slides:\n   * - on destroying, to bring anchors to its initial state\n   */\n\n  Events.on('destroy', function () {\n    Anchors.attach();\n    Anchors.unbind();\n    Binder.destroy();\n  });\n  return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\nvar PREVIOUS_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\"<\\\"]\");\nvar NEXT_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\">\\\"]\");\nfunction Controls (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n  var capture = supportsPassive$1 ? {\n    passive: true\n  } : false;\n  var Controls = {\n    /**\n     * Inits arrows. Binds events listeners\n     * to the arrows HTML elements.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      /**\n       * Collection of navigation HTML elements.\n       *\n       * @private\n       * @type {HTMLCollection}\n       */\n      this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n      /**\n       * Collection of controls HTML elements.\n       *\n       * @private\n       * @type {HTMLCollection}\n       */\n\n      this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n      /**\n       * Collection of arrow control HTML elements.\n       *\n       * @private\n       * @type {Object}\n       */\n\n      this._arrowControls = {\n        previous: Components.Html.root.querySelectorAll(PREVIOUS_CONTROLS_SELECTOR),\n        next: Components.Html.root.querySelectorAll(NEXT_CONTROLS_SELECTOR)\n      };\n      this.addBindings();\n    },\n\n    /**\n     * Sets active class to current slide.\n     *\n     * @return {Void}\n     */\n    setActive: function setActive() {\n      for (var i = 0; i < this._n.length; i++) {\n        this.addClass(this._n[i].children);\n      }\n    },\n\n    /**\n     * Removes active class to current slide.\n     *\n     * @return {Void}\n     */\n    removeActive: function removeActive() {\n      for (var i = 0; i < this._n.length; i++) {\n        this.removeClass(this._n[i].children);\n      }\n    },\n\n    /**\n     * Toggles active class on items inside navigation.\n     *\n     * @param  {HTMLElement} controls\n     * @return {Void}\n     */\n    addClass: function addClass(controls) {\n      var settings = Glide.settings;\n      var item = controls[Glide.index];\n\n      if (!item) {\n        return;\n      }\n\n      item.classList.add(settings.classes.nav.active);\n      siblings(item).forEach(function (sibling) {\n        sibling.classList.remove(settings.classes.nav.active);\n      });\n    },\n\n    /**\n     * Removes active class from active control.\n     *\n     * @param  {HTMLElement} controls\n     * @return {Void}\n     */\n    removeClass: function removeClass(controls) {\n      var item = controls[Glide.index];\n      item === null || item === void 0 ? void 0 : item.classList.remove(Glide.settings.classes.nav.active);\n    },\n\n    /**\n     * Calculates, removes or adds `Glide.settings.classes.disabledArrow` class on the control arrows\n     */\n    setArrowState: function setArrowState() {\n      if (Glide.settings.rewind) {\n        return;\n      }\n\n      var next = Controls._arrowControls.next;\n      var previous = Controls._arrowControls.previous;\n      this.resetArrowState(next, previous);\n\n      if (Glide.index === 0) {\n        this.disableArrow(previous);\n      }\n\n      if (Glide.index === Components.Run.length) {\n        this.disableArrow(next);\n      }\n    },\n\n    /**\n     * Removes `Glide.settings.classes.disabledArrow` from given NodeList elements\n     *\n     * @param {NodeList[]} lists\n     */\n    resetArrowState: function resetArrowState() {\n      var settings = Glide.settings;\n\n      for (var _len = arguments.length, lists = new Array(_len), _key = 0; _key < _len; _key++) {\n        lists[_key] = arguments[_key];\n      }\n\n      lists.forEach(function (list) {\n        toArray(list).forEach(function (element) {\n          element.classList.remove(settings.classes.arrow.disabled);\n        });\n      });\n    },\n\n    /**\n     * Adds `Glide.settings.classes.disabledArrow` to given NodeList elements\n     *\n     * @param {NodeList[]} lists\n     */\n    disableArrow: function disableArrow() {\n      var settings = Glide.settings;\n\n      for (var _len2 = arguments.length, lists = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        lists[_key2] = arguments[_key2];\n      }\n\n      lists.forEach(function (list) {\n        toArray(list).forEach(function (element) {\n          element.classList.add(settings.classes.arrow.disabled);\n        });\n      });\n    },\n\n    /**\n     * Adds handles to the each group of controls.\n     *\n     * @return {Void}\n     */\n    addBindings: function addBindings() {\n      for (var i = 0; i < this._c.length; i++) {\n        this.bind(this._c[i].children);\n      }\n    },\n\n    /**\n     * Removes handles from the each group of controls.\n     *\n     * @return {Void}\n     */\n    removeBindings: function removeBindings() {\n      for (var i = 0; i < this._c.length; i++) {\n        this.unbind(this._c[i].children);\n      }\n    },\n\n    /**\n     * Binds events to arrows HTML elements.\n     *\n     * @param {HTMLCollection} elements\n     * @return {Void}\n     */\n    bind: function bind(elements) {\n      for (var i = 0; i < elements.length; i++) {\n        Binder.on('click', elements[i], this.click);\n        Binder.on('touchstart', elements[i], this.click, capture);\n      }\n    },\n\n    /**\n     * Unbinds events binded to the arrows HTML elements.\n     *\n     * @param {HTMLCollection} elements\n     * @return {Void}\n     */\n    unbind: function unbind(elements) {\n      for (var i = 0; i < elements.length; i++) {\n        Binder.off(['click', 'touchstart'], elements[i]);\n      }\n    },\n\n    /**\n     * Handles `click` event on the arrows HTML elements.\n     * Moves slider in direction given via the\n     * `data-glide-dir` attribute.\n     *\n     * @param {Object} event\n     * @return {void}\n     */\n    click: function click(event) {\n      if (!supportsPassive$1 && event.type === 'touchstart') {\n        event.preventDefault();\n      }\n\n      var direction = event.currentTarget.getAttribute('data-glide-dir');\n      Components.Run.make(Components.Direction.resolve(direction));\n    }\n  };\n  define(Controls, 'items', {\n    /**\n     * Gets collection of the controls HTML elements.\n     *\n     * @return {HTMLElement[]}\n     */\n    get: function get() {\n      return Controls._c;\n    }\n  });\n  /**\n   * Swap active class of current navigation item:\n   * - after mounting to set it to initial index\n   * - after each move to the new index\n   */\n\n  Events.on(['mount.after', 'move.after'], function () {\n    Controls.setActive();\n  });\n  /**\n   * Add or remove disabled class of arrow elements\n   */\n\n  Events.on(['mount.after', 'run'], function () {\n    Controls.setArrowState();\n  });\n  /**\n   * Remove bindings and HTML Classes:\n   * - on destroying, to bring markup to its initial state\n   */\n\n  Events.on('destroy', function () {\n    Controls.removeBindings();\n    Controls.removeActive();\n    Binder.destroy();\n  });\n  return Controls;\n}\n\nfunction Keyboard (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n  var Keyboard = {\n    /**\n     * Binds keyboard events on component mount.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      if (Glide.settings.keyboard) {\n        this.bind();\n      }\n    },\n\n    /**\n     * Adds keyboard press events.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      Binder.on('keyup', document, this.press);\n    },\n\n    /**\n     * Removes keyboard press events.\n     *\n     * @return {Void}\n     */\n    unbind: function unbind() {\n      Binder.off('keyup', document);\n    },\n\n    /**\n     * Handles keyboard's arrows press and moving glide foward and backward.\n     *\n     * @param  {Object} event\n     * @return {Void}\n     */\n    press: function press(event) {\n      var perSwipe = Glide.settings.perSwipe;\n      var arrowSymbols = {\n        ArrowRight: '>',\n        ArrowLeft: '<'\n      };\n\n      if (['ArrowRight', 'ArrowLeft'].includes(event.code)) {\n        Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe).concat(arrowSymbols[event.code])));\n      }\n    }\n  };\n  /**\n   * Remove bindings from keyboard:\n   * - on destroying to remove added events\n   * - on updating to remove events before remounting\n   */\n\n  Events.on(['destroy', 'update'], function () {\n    Keyboard.unbind();\n  });\n  /**\n   * Remount component\n   * - on updating to reflect potential changes in settings\n   */\n\n  Events.on('update', function () {\n    Keyboard.mount();\n  });\n  /**\n   * Destroy binder:\n   * - on destroying to remove listeners\n   */\n\n  Events.on('destroy', function () {\n    Binder.destroy();\n  });\n  return Keyboard;\n}\n\nfunction Autoplay (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n  var Autoplay = {\n    /**\n     * Initializes autoplaying and events.\n     *\n     * @return {Void}\n     */\n    mount: function mount() {\n      this.enable();\n      this.start();\n\n      if (Glide.settings.hoverpause) {\n        this.bind();\n      }\n    },\n\n    /**\n     * Enables autoplaying\n     *\n     * @returns {Void}\n     */\n    enable: function enable() {\n      this._e = true;\n    },\n\n    /**\n     * Disables autoplaying.\n     *\n     * @returns {Void}\n     */\n    disable: function disable() {\n      this._e = false;\n    },\n\n    /**\n     * Starts autoplaying in configured interval.\n     *\n     * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n     * @return {Void}\n     */\n    start: function start() {\n      var _this = this;\n\n      if (!this._e) {\n        return;\n      }\n\n      this.enable();\n\n      if (Glide.settings.autoplay) {\n        if (isUndefined(this._i)) {\n          this._i = setInterval(function () {\n            _this.stop();\n\n            Components.Run.make('>');\n\n            _this.start();\n\n            Events.emit('autoplay');\n          }, this.time);\n        }\n      }\n    },\n\n    /**\n     * Stops autorunning of the glide.\n     *\n     * @return {Void}\n     */\n    stop: function stop() {\n      this._i = clearInterval(this._i);\n    },\n\n    /**\n     * Stops autoplaying while mouse is over glide's area.\n     *\n     * @return {Void}\n     */\n    bind: function bind() {\n      var _this2 = this;\n\n      Binder.on('mouseover', Components.Html.root, function () {\n        if (_this2._e) {\n          _this2.stop();\n        }\n      });\n      Binder.on('mouseout', Components.Html.root, function () {\n        if (_this2._e) {\n          _this2.start();\n        }\n      });\n    },\n\n    /**\n     * Unbind mouseover events.\n     *\n     * @returns {Void}\n     */\n    unbind: function unbind() {\n      Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n    }\n  };\n  define(Autoplay, 'time', {\n    /**\n     * Gets time period value for the autoplay interval. Prioritizes\n     * times in `data-glide-autoplay` attrubutes over options.\n     *\n     * @return {Number}\n     */\n    get: function get() {\n      var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n      if (autoplay) {\n        return toInt(autoplay);\n      }\n\n      return toInt(Glide.settings.autoplay);\n    }\n  });\n  /**\n   * Stop autoplaying and unbind events:\n   * - on destroying, to clear defined interval\n   * - on updating via API to reset interval that may changed\n   */\n\n  Events.on(['destroy', 'update'], function () {\n    Autoplay.unbind();\n  });\n  /**\n   * Stop autoplaying:\n   * - before each run, to restart autoplaying\n   * - on pausing via API\n   * - on destroying, to clear defined interval\n   * - while starting a swipe\n   * - on updating via API to reset interval that may changed\n   */\n\n  Events.on(['run.before', 'swipe.start', 'update'], function () {\n    Autoplay.stop();\n  });\n  Events.on(['pause', 'destroy'], function () {\n    Autoplay.disable();\n    Autoplay.stop();\n  });\n  /**\n   * Start autoplaying:\n   * - after each run, to restart autoplaying\n   * - on playing via API\n   * - while ending a swipe\n   */\n\n  Events.on(['run.after', 'swipe.end'], function () {\n    Autoplay.start();\n  });\n  /**\n   * Start autoplaying:\n   * - after each run, to restart autoplaying\n   * - on playing via API\n   * - while ending a swipe\n   */\n\n  Events.on(['play'], function () {\n    Autoplay.enable();\n    Autoplay.start();\n  });\n  /**\n   * Remount autoplaying:\n   * - on updating via API to reset interval that may changed\n   */\n\n  Events.on('update', function () {\n    Autoplay.mount();\n  });\n  /**\n   * Destroy a binder:\n   * - on destroying glide instance to clearup listeners\n   */\n\n  Events.on('destroy', function () {\n    Binder.destroy();\n  });\n  return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\n\nfunction sortBreakpoints(points) {\n  if (isObject(points)) {\n    return sortKeys(points);\n  } else {\n    warn(\"Breakpoints option must be an object\");\n  }\n\n  return {};\n}\n\nfunction Breakpoints (Glide, Components, Events) {\n  /**\n   * Instance of the binder for DOM Events.\n   *\n   * @type {EventsBinder}\n   */\n  var Binder = new EventsBinder();\n  /**\n   * Holds reference to settings.\n   *\n   * @type {Object}\n   */\n\n  var settings = Glide.settings;\n  /**\n   * Holds reference to breakpoints object in settings. Sorts breakpoints\n   * from smaller to larger. It is required in order to proper\n   * matching currently active breakpoint settings.\n   *\n   * @type {Object}\n   */\n\n  var points = sortBreakpoints(settings.breakpoints);\n  /**\n   * Cache initial settings before overwritting.\n   *\n   * @type {Object}\n   */\n\n  var defaults = Object.assign({}, settings);\n  var Breakpoints = {\n    /**\n     * Matches settings for currectly matching media breakpoint.\n     *\n     * @param {Object} points\n     * @returns {Object}\n     */\n    match: function match(points) {\n      if (typeof window.matchMedia !== 'undefined') {\n        for (var point in points) {\n          if (points.hasOwnProperty(point)) {\n            if (window.matchMedia(\"(max-width: \".concat(point, \"px)\")).matches) {\n              return points[point];\n            }\n          }\n        }\n      }\n\n      return defaults;\n    }\n  };\n  /**\n   * Overwrite instance settings with currently matching breakpoint settings.\n   * This happens right after component initialization.\n   */\n\n  Object.assign(settings, Breakpoints.match(points));\n  /**\n   * Update glide with settings of matched brekpoint:\n   * - window resize to update slider\n   */\n\n  Binder.on('resize', window, throttle(function () {\n    Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n  }, Glide.settings.throttle));\n  /**\n   * Resort and update default settings:\n   * - on reinit via API, so breakpoint matching will be performed with options\n   */\n\n  Events.on('update', function () {\n    points = sortBreakpoints(points);\n    defaults = Object.assign({}, settings);\n  });\n  /**\n   * Unbind resize listener:\n   * - on destroying, to bring markup to its initial state\n   */\n\n  Events.on('destroy', function () {\n    Binder.off('resize', window);\n  });\n  return Breakpoints;\n}\n\nvar COMPONENTS = {\n  // Required\n  Html: Html,\n  Translate: Translate,\n  Transition: Transition,\n  Direction: Direction,\n  Peek: Peek,\n  Sizes: Sizes,\n  Gaps: Gaps,\n  Move: Move,\n  Clones: Clones,\n  Resize: Resize,\n  Build: Build,\n  Run: Run,\n  // Optional\n  Swipe: Swipe,\n  Images: Images,\n  Anchors: Anchors,\n  Controls: Controls,\n  Keyboard: Keyboard,\n  Autoplay: Autoplay,\n  Breakpoints: Breakpoints\n};\n\nvar Glide = /*#__PURE__*/function (_Core) {\n  _inherits(Glide, _Core);\n\n  var _super = _createSuper(Glide);\n\n  function Glide() {\n    _classCallCheck(this, Glide);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Glide, [{\n    key: \"mount\",\n    value: function mount() {\n      var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return _get(_getPrototypeOf(Glide.prototype), \"mount\", this).call(this, Object.assign({}, COMPONENTS, extensions));\n    }\n  }]);\n\n  return Glide;\n}(Glide$1);\n\n\n\n\n//# sourceURL=webpack://sinn/./node_modules/@glidejs/glide/dist/glide.esm.js?");

      /***/
    })

    /******/
  };
  /************************************************************************/
  /******/ // The module cache
  /******/
  var __webpack_module_cache__ = {};
  /******/
  /******/ // The require function
  /******/
  function __webpack_require__(moduleId) {
    /******/ // Check if module is in cache
    /******/var cachedModule = __webpack_module_cache__[moduleId];
    /******/
    if (cachedModule !== undefined) {
      /******/return cachedModule.exports;
      /******/
    }
    /******/ // Create a new module (and put it into the cache)
    /******/
    var module = __webpack_module_cache__[moduleId] = {
      /******/ // no module.id needed
      /******/ // no module.loaded needed
      /******/exports: {}
      /******/
    };
    /******/
    /******/ // Execute the module function
    /******/
    __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
    /******/
    /******/ // Return the exports of the module
    /******/
    return module.exports;
    /******/
  }
  /******/
  /************************************************************************/
  /******/ /* webpack/runtime/compat get default export */
  /******/
  (function () {
    /******/ // getDefaultExport function for compatibility with non-harmony modules
    /******/__webpack_require__.n = function (module) {
      /******/var getter = module && module.__esModule ? /******/function () {
        return module['default'];
      } : /******/function () {
        return module;
      };
      /******/
      __webpack_require__.d(getter, {
        a: getter
      });
      /******/
      return getter;
      /******/
    };
    /******/
  })();
  /******/
  /******/ /* webpack/runtime/define property getters */
  /******/
  (function () {
    /******/ // define getter functions for harmony exports
    /******/__webpack_require__.d = function (exports, definition) {
      /******/for (var key in definition) {
        /******/if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
          /******/Object.defineProperty(exports, key, {
            enumerable: true,
            get: definition[key]
          });
          /******/
        }
        /******/
      }
      /******/
    };
    /******/
  })();
  /******/
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
  /******/
  (function () {
    /******/__webpack_require__.o = function (obj, prop) {
      return Object.prototype.hasOwnProperty.call(obj, prop);
    };
    /******/
  })();
  /******/
  /******/ /* webpack/runtime/make namespace object */
  /******/
  (function () {
    /******/ // define __esModule on exports
    /******/__webpack_require__.r = function (exports) {
      /******/if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
        /******/Object.defineProperty(exports, Symbol.toStringTag, {
          value: 'Module'
        });
        /******/
      }
      /******/
      Object.defineProperty(exports, '__esModule', {
        value: true
      });
      /******/
    };
    /******/
  })();
  /******/
  /************************************************************************/
  /******/
  /******/ // startup
  /******/ // Load entry module and return exports
  /******/ // This entry module can't be inlined because the eval devtool is used.
  /******/
  __webpack_require__("./source/out/sinn/src/js/app.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/tables.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/accordion.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/adressform.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/alert.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/amountCounter.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/animateOffcanvas.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/animation.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/breadcrumb.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/cart.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/checkSelectedPayment.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/contactform.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/contentslider.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/countryListNotice.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/datenschutzCBVisibilityControl.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/dropdown.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/etracker.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/filter.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/filterIndicator.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/formValidation.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/input.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/layers.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/lazyload.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/login.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/menuimage.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/miniBasketRenderer.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/minicartflapper.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/navigationDesktop.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/navigationMobile.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/navigationTracking.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/niceSelect.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/order.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/pagination.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/passwordcontrol.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/productDetailScrolling.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/productslider.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/register.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/retailer.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/search.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/shipping.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/stageslider.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/stickyHeader.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/tabs.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/techabc.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/timeline.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/video.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/wristbandSelectionValidation.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/wrists.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/youtubeConsent.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/configurator/configurator.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/configurator/configuratorDropdown.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/configurator/configuratorUtils.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/retailerMap/GoogleMap.js");
  /******/
  __webpack_require__("./source/out/sinn/src/js/modules/retailerMap/GoogleMapsApi.js");
  /******/
  var __webpack_exports__ = __webpack_require__("./source/out/sinn/src/js/modules/retailerMap/config.js");
  /******/
  /******/
})();