{"version":3,"file":"main.min.js","sources":["../../../Care-4.Frontend/js/utils/onReady.js","../../../Care-4.Frontend/js/utils/elementProperties.js","../../../Care-4.Frontend/js/utils/scrollLock.js","../../../Care-4.Frontend/js/components/nav.js","../../../Care-4.Frontend/js/utils/stickyNavOnScroll.js","../../../Care-4.Frontend/js/utils/scroll.js","../../../Care-4.Frontend/js/utils/animation.js","../../../Care-4.Frontend/js/components/accordion.js","../../../Care-4.Frontend/js/components/toggle.js","../../../Care-4.Frontend/js/utils/scrollTo.js","../../../Care-4.Frontend/js/components/anchors.js","../../../node_modules/lazysizes/lazysizes.js","../../../Care-4.Frontend/js/main.js"],"sourcesContent":["/**\r\n * Handler to trigger callbacks once the browser is ready for them.\r\n *\r\n * You can keep adding references using onReady() even after the page is loaded. In that case they will be\r\n * run at once.\r\n *\r\n * @example\r\n * import { onReady } from './utils/events/onReady';\r\n *\r\n * onReady(yourFunctionHere);\r\n *\r\n */\r\n\r\nlet functionReferences = [];\r\n\r\n// Set the initial readyState based on the browser's current state. If the script has been loaded\r\n// asynchronously, the DOM might be ready for us already, in which case there's no reason to delay\r\n// any further processing. The following will evaluate as true if the DOM is ready, or the page is\r\n// complete.\r\nlet readyState = document.readyState === 'interactive' || document.readyState === 'complete';\r\n\r\n// Defines whether or not the window.onReady event has been bound, so we won't do it twice. That\r\n// would just be stupid.\r\nlet readyEventBound = false;\r\n\r\n/**\r\n * Run the given array of callback functions.\r\n *\r\n * @private\r\n * @param {Array} funcArray\r\n */\r\nfunction runFunctionArray(funcArray) {\r\n funcArray.forEach(funcRef => funcRef());\r\n}\r\n\r\n/**\r\n * Empty the callback arrays\r\n *\r\n * @private\r\n */\r\nfunction emptyCallbackArrays() {\r\n // Keep iterating through the function references until there are none left.\r\n while (functionReferences.length) {\r\n // Set up a temporary array that mirrors the list of callbacks, and empty the real one.\r\n const tempArray = functionReferences.slice(0);\r\n functionReferences = [];\r\n\r\n // Run the callbacks. The callbacks themselves may set up more callbacks, which\r\n // is why we keep looping the array until we're done.\r\n runFunctionArray(tempArray);\r\n }\r\n\r\n // At this point we'll assume we're ready for anything!\r\n readyState = true;\r\n}\r\n\r\n/**\r\n * Make sure the \"ready\"-event is set.\r\n *\r\n * @private\r\n */\r\nfunction bindReadyEvent() {\r\n if (!readyEventBound) {\r\n if (document.readyState === 'loading') {\r\n // loading yet, wait for the event\r\n document.addEventListener('DOMContentLoaded', emptyCallbackArrays);\r\n } else {\r\n // DOM is ready!\r\n emptyCallbackArrays();\r\n }\r\n\r\n readyEventBound = true;\r\n }\r\n}\r\n\r\n/**\r\n * Register a function to run when the page is ready.\r\n *\r\n * @param {Function} functionReference - The function you want to run.\r\n */\r\nexport function onReady(functionReference) {\r\n if (typeof functionReference === 'function') {\r\n if (readyState) {\r\n functionReference();\r\n } else {\r\n bindReadyEvent();\r\n\r\n functionReferences.push(functionReference);\r\n }\r\n }\r\n}\r\n","/**\r\n * Utilities for checking properties and states of elements.\r\n */\r\n\r\n/**\r\n * Check if an element is empty.\r\n *\r\n * @param {Node} element - Check if this element is empty.\r\n * @param {boolean} [strict=true] - Set this to **false** to ignore nodes with whitespace.\r\n * @returns {boolean} **True** if the element is empty.\r\n */\r\nexport function elementIsEmpty(element, strict = true) {\r\n return strict ? !element.childNodes.length : !element.innerHTML.trim().length;\r\n}\r\n\r\n/**\r\n * Check if an element is hidden in the DOM with `display: none;`\r\n *\r\n * @param {HTMLElement} element - The element to check.\r\n * @returns {boolean} **True** if element is hidden, otherwise **false**.\r\n */\r\nexport function elementIsHidden(element) {\r\n return element.offsetParent === null;\r\n}\r\n\r\n/**\r\n * Check if an element is in the viewport\r\n * \r\n * @param {HTMLElement} elem - The element to check \r\n */\r\nexport function isVisible(elem) {\r\n return !!elem && !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\r\n}\r\n\r\n/**\r\n * Find out whether or not the given argument is an element that would react somewhat normally to DOM-manipulations.\r\n *\r\n * @param {*} element - The element to check.\r\n * @returns {boolean} `true` if the given argument is an element (or document, or window), and `false` otherwise.\r\n */\r\nexport function isElement(element) {\r\n return element instanceof Element || element instanceof Document || element instanceof Window;\r\n}\r\n\r\n/**\r\n * Return the position of an element\r\n *\r\n * @param {Element|String} element - The HTML element to work with or its ID\r\n * @param {Element|String|Window} [relativeTo=window] - The HTML element to return the position relative to or its ID\r\n * @returns {{top: Number, left: Number}} An object with top and left positions in pixels\r\n *\r\n *\r\n * @example Basic usage:\r\n * import { getElementPosition } from './utils/dom/elementProperties';\r\n *\r\n * const element = document.querySelector('.anElement');\r\n * getElementPosition(element);\r\n *\r\n *\r\n * @example Perform a search for an element with an ID equal to the string, i.e. 'elementId', and get the position of that:\r\n * import { getElementPosition } from './utils/dom/elementProperties';\r\n *\r\n * getElementPosition('elementId');\r\n */\r\nexport function getElementPosition(element, relativeTo = window) {\r\n const useElement = typeof element === 'string' ? document.getElementById(element) : element;\r\n\r\n // Throw error if element wasn't found\r\n if (!useElement) {\r\n throw 'getElementPosition did not find an element.';\r\n }\r\n\r\n const useRelativeTo = typeof relativeTo === 'string' ? document.getElementById(relativeTo) : relativeTo;\r\n\r\n // Throw error if relative element wasn't found\r\n if (!useRelativeTo) {\r\n throw 'getElementPosition did not find an element to show the position relative to.';\r\n }\r\n\r\n if (relativeTo === window) {\r\n // Return position relative to window\r\n const rect = useElement.getBoundingClientRect();\r\n return {\r\n top: rect.top + (window.pageYOffset || document.documentElement.scrollTop),\r\n left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft)\r\n };\r\n } else {\r\n // Return position relative to declared element\r\n return {\r\n top: useElement.offsetTop - relativeTo.offsetTop,\r\n left: useElement.offsetLeft - relativeTo.offsetLeft\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Get the current scroll values of the given element (or window). Will return an object containing\r\n * \"left\" and \"top\" properties, which are set to the scroll values, or false if no compatible element\r\n * was given.\r\n *\r\n * @param {Element|Window} [element=window]\r\n * @returns {{ left: number, top: number } | boolean}\r\n */\r\nexport function getElementScroll(element = window) {\r\n if (isElement(element)) {\r\n if (element instanceof Window) {\r\n return {\r\n left: element.pageXOffset || document.documentElement.scrollLeft,\r\n top: element.pageYOffset || document.documentElement.scrollTop\r\n };\r\n } else {\r\n return {\r\n left: element.scrollX || element.scrollLeft,\r\n top: element.scrollY || element.scrollTop\r\n };\r\n }\r\n } else {\r\n console.warn('Can\\'t get scroll-position or given argument type.');\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Get both width and height of element\r\n *\r\n * @param {Element} element - The HTML element to work with\r\n * @param {Object} [options={}] - Object of options\r\n * @param {boolean} [options.includePadding=false] - Get size including padding (defaults to true)\r\n * @param {boolean} [options.includeBorder=false] - Get size including border (defaults to true)\r\n * @param {boolean} [options.includeMargin=true] - Get size including margin (defaults to false)\r\n * @param {null|':before'|':after'} [options.pseudoElement=null] - Get size of pseudo element ':before' or ':after'\r\n * @returns {{width: number, height: number}} An object with the width and height as numbers\r\n */\r\nexport function getElementSize(element, options = {}) {\r\n // Get styles\r\n const elementStyle = window.getComputedStyle(element, options.pseudoElement);\r\n\r\n return {\r\n width: getElementWidth(element, options, elementStyle),\r\n height: getElementHeight(element, options, elementStyle)\r\n };\r\n}\r\n\r\n/**\r\n * Get width of element\r\n *\r\n * @param {Element} element - The HTML element to work with\r\n * @param {Object} [options={}] - Object of options\r\n * @param {boolean} [options.includeMargin=false] - Get width including margin (defaults to false)\r\n * @param {boolean} [options.includeBorder=true] - Get width including border (defaults to true)\r\n * @param {boolean} [options.includePadding=true] - Get width including padding (defaults to true)\r\n * @param {null|':before'|':after'} [options.pseudoElement=null] - Get width of pseudo element ':before' or ':after'\r\n * @param {CSSStyleDeclaration} [elementStyle] - Style declaration of element (in case you already have called .getComputedStyle(), pass its returned value here)\r\n * @returns {number} The width as a number\r\n */\r\nexport function getElementWidth(element, options = {}, elementStyle = null) {\r\n // Keep supplied values or set to defaults\r\n options.includeMargin = options.includeMargin === true;\r\n options.includeBorder = options.includeBorder !== false;\r\n options.includePadding = options.includePadding !== false;\r\n\r\n // Get styles\r\n const style = elementStyle || window.getComputedStyle(element, options.pseudoElement);\r\n\r\n // Get width including border and padding\r\n let width = element.offsetWidth;\r\n\r\n // Calculate width with margin\r\n if (options.includeMargin) {\r\n width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);\r\n }\r\n\r\n // Calculate width without border\r\n if (!options.includeBorder) {\r\n width -= parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);\r\n }\r\n\r\n // Calculate width without padding\r\n if (!options.includePadding) {\r\n width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\r\n }\r\n\r\n return width;\r\n}\r\n\r\n/**\r\n * Get height of element\r\n *\r\n * @param {Element} element - The HTML element to work with\r\n * @param {Object} [options={}] - Object of options\r\n * @param {boolean} [options.includeMargin=false] - Get height including margin (defaults to false)\r\n * @param {boolean} [options.includeBorder=true] - Get height including border (defaults to true)\r\n * @param {boolean} [options.includePadding=true] - Get height including padding (defaults to true)\r\n * @param {null|':before'|':after'} [options.pseudoElement=null] - Get height of pseudo element ':before' or ':after'\r\n * @param {CSSStyleDeclaration} [elementStyle] - Style declaration of element (in case you already have called .getComputedStyle(), pass its returned value here)\r\n * @returns {number} The height as a number\r\n */\r\nexport function getElementHeight(element, options = {}, elementStyle = null) {\r\n // Keep supplied values or set to defaults\r\n options.includeMargin = options.includeMargin === true;\r\n options.includeBorder = options.includeBorder !== false;\r\n options.includePadding = options.includePadding !== false;\r\n\r\n // Get styles\r\n const style = elementStyle || window.getComputedStyle(element, options.pseudoElement);\r\n\r\n // Get height including border and padding\r\n let height = element.offsetHeight;\r\n\r\n // Calculate height with margin\r\n if (options.includeMargin) {\r\n height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);\r\n }\r\n\r\n // Calculate height without border\r\n if (!options.includeBorder) {\r\n height -= parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\r\n }\r\n\r\n // Calculate height without padding\r\n if (!options.includePadding) {\r\n height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\r\n }\r\n\r\n return height;\r\n}\r\n","/**\r\n * A utility to **lock the viewport** at the current position in order to **stop scrolling**.\r\n *\r\n * @example Basic usage\r\n * import { enableScrollLock, disableScrollLock } from './utils/dom/scrollLock';\r\n *\r\n * enableScrollLock();\r\n * window.setTimeout(disableScrollLock, 3000);\r\n */\r\n\r\nimport { getElementScroll } from './elementProperties';\r\n\r\nconst className = 'scroll-lock';\r\nlet scrollTop = 0;\r\n\r\n/**\r\n * Get the current state of the scroll lock. `true` if the scroll lock is enabled, otherwise `false`.\r\n *\r\n * @type {boolean}\r\n */\r\nexport let scrollLocked = false;\r\n\r\n/**\r\n * Enable the scroll lock.\r\n */\r\nexport function enableScrollLock() {\r\n if (!scrollLocked) {\r\n // Get scroll position\r\n const scrollPosition = getElementScroll();\r\n\r\n // Reset scroll position\r\n window.scrollTo(scrollPosition.left, 0);\r\n\r\n const htmlTag = document.documentElement;\r\n htmlTag.classList.add(className);\r\n htmlTag.style.marginTop = `${-scrollPosition.top}px`;\r\n htmlTag.style.position = 'fixed';\r\n htmlTag.style.overflow = 'hidden';\r\n htmlTag.style.width = '100%';\r\n document.body.style.overflowY = 'scroll';\r\n\r\n // Remember state\r\n scrollLocked = true;\r\n scrollTop = scrollPosition.top;\r\n }\r\n}\r\n\r\n/**\r\n * @type {function}\r\n * @ignore\r\n */\r\nexport const enable = enableScrollLock;\r\n\r\n/**\r\n * Disable the scroll lock\r\n */\r\nexport function disableScrollLock() {\r\n if (scrollLocked) {\r\n const scrollPosition = getElementScroll();\r\n\r\n const htmlTag = document.documentElement;\r\n htmlTag.classList.remove(className);\r\n htmlTag.style.marginTop = '';\r\n htmlTag.style.position = '';\r\n htmlTag.style.overflow = '';\r\n htmlTag.style.width = '';\r\n document.body.removeAttribute('style');\r\n // Set the scroll position to what it was before\r\n window.scrollTo(scrollPosition.left, scrollTop);\r\n\r\n // Remember state\r\n scrollLocked = false;\r\n }\r\n}\r\n\r\n/**\r\n * @type {function}\r\n * @ignore\r\n */\r\nexport const disable = disableScrollLock;\r\n\r\n/**\r\n * Toggle the scroll lock between on and off\r\n */\r\nexport function toggleScrollLock() {\r\n if (scrollLocked) {\r\n disableScrollLock();\r\n } else {\r\n enableScrollLock();\r\n }\r\n}\r\n\r\n/**\r\n * @type {function}\r\n * @ignore\r\n */\r\nexport const toggle = toggleScrollLock;\r\n\r\nexport default {\r\n enable,\r\n disable,\r\n toggle\r\n};\r\n","import { stickyNavOnScroll } from '../utils/stickyNavOnScroll';\r\nimport { enableScrollLock, disableScrollLock } from '../utils/scrollLock';\r\n\r\nexport let nav;\r\n\r\nexport function toggleMenuOpen() {\r\n if (nav.classList.contains('nav--open')) {\r\n disableScrollLock();\r\n nav.classList.remove('nav--open');\r\n\r\n // if (window.pageYOffset > 50) {\r\n // setTimeout(() => nav.classList.add('going-up'), 40);\r\n // }\r\n } else {\r\n enableScrollLock();\r\n nav.classList.add('nav--open');\r\n }\r\n}\r\n\r\nexport function setupNav(selector = '.nav', sticky = true) {\r\n nav = document.body.querySelector(selector);\r\n\r\n if (nav) {\r\n const navBtn = nav.querySelector('.nav__btn');\r\n\r\n navBtn.addEventListener('click', toggleMenuOpen);\r\n\r\n if (sticky) {\r\n stickyNavOnScroll(nav, 'nav--sticky', 70, 'going-up');\r\n }\r\n }\r\n\r\n function disableDisableScrollLock(x) {\r\n const navSubs = document.querySelectorAll('.nav .nav__sub');\r\n const openButtons = document.querySelectorAll(\r\n '.nav button[data-action*=\"accordion\"]'\r\n );\r\n\r\n if (x.matches) {\r\n // If media query matches\r\n disableScrollLock();\r\n nav.classList.remove('nav--open');\r\n\r\n navSubs.forEach((navsub) => (navsub.style.height = 'auto'));\r\n } else {\r\n navSubs.forEach((navsub) => {\r\n navsub.style.height = '0px';\r\n });\r\n\r\n openButtons.forEach((openButton) => {\r\n openButton.classList.remove('open');\r\n openButton.setAttribute('aria-expanded','false');\r\n });\r\n }\r\n }\r\n\r\n var x = window.matchMedia('(min-width: 1260px)');\r\n disableDisableScrollLock(x); // Call listener function at run time\r\n x.addListener(disableDisableScrollLock); // Attach listener function on state changes\r\n}\r\n","import {\r\n getElementScroll\r\n} from \"./elementProperties\";\r\nimport {\r\n scrollLocked\r\n} from \"./scrollLock\";\r\nimport {\r\n onScroll\r\n} from \"./scroll\";\r\n\r\n/**\r\n *\r\n * @param {HTMLElement} element - element to add sticky class to\r\n * @param {string} className - sticky class name to add on scroll\r\n * @param {number} scrollInPixels - number of pixels before activating scroll\r\n * @param {string} goingUpClass - class added when scrolling up\r\n */\r\n\r\nexport function stickyNavOnScroll(element, className = \"nav--sticky\", scrollInPixels = 52, goingUpClass = \"nav--going-up\") {\r\n var doc = document.documentElement;\r\n var w = window;\r\n\r\n /*\r\n define four variables: curScroll, prevScroll, curDirection, prevDirection\r\n */\r\n\r\n var curScroll;\r\n var prevScroll = w.scrollY || doc.scrollTop;\r\n var curDirection = 0;\r\n var prevDirection = 0;\r\n\r\n /*\r\n how it works:\r\n -------------\r\n create a scroll event listener\r\n create function to check scroll position on each scroll event,\r\n compare curScroll and prevScroll values to find the scroll direction\r\n scroll up - 1, scroll down - 2, initial - 0\r\n then set the direction value to curDirection\r\n compare curDirection and prevDirection\r\n if it is different, call a function to show or hide the header\r\n example:\r\n step 1: user scrolls down: curDirection 2, prevDirection 0 > hide header\r\n step 2: user scrolls down again: curDirection 2, prevDirection 2 > already hidden, do nothing\r\n step 3: user scrolls up: curDirection 1, prevDirection 2 > show header\r\n */\r\n\r\n var header = element;\r\n var toggled;\r\n var threshold = 150;\r\n\r\n // console.log(header);\r\n\r\n var checkScroll = function() {\r\n curScroll = w.scrollY || doc.scrollTop;\r\n if (curScroll > prevScroll) {\r\n // scrolled down\r\n curDirection = 2;\r\n } else {\r\n //scrolled up\r\n curDirection = 1;\r\n }\r\n\r\n if (curDirection !== prevDirection) {\r\n toggled = toggleHeader();\r\n }\r\n\r\n prevScroll = curScroll;\r\n if (toggled) {\r\n prevDirection = curDirection;\r\n }\r\n\r\n\r\n if (curScroll > threshold) {\r\n header.classList.add(className);\r\n } else if (curScroll < threshold) {\r\n header.classList.remove(className);\r\n }\r\n\r\n };\r\n\r\n var toggleHeader = function() {\r\n toggled = true;\r\n\r\n if (curDirection === 2 && curScroll > threshold) {\r\n header.classList.remove(goingUpClass);\r\n } else if (curDirection === 1) {\r\n header.classList.add(goingUpClass);\r\n } else {\r\n toggled = false;\r\n }\r\n return toggled;\r\n };\r\n\r\n window.addEventListener(\"scroll\", checkScroll);\r\n}","export let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\r\n\r\nlet ticking = false;\r\nconst scrollFunctions = [];\r\n\r\nfunction animate() {\r\n scrollFunctions.forEach(funcRef => funcRef());\r\n\r\n ticking = false;\r\n}\r\n\r\nfunction requestTick() {\r\n if (!ticking) {\r\n requestAnimationFrame(animate);\r\n ticking = true;\r\n }\r\n}\r\n\r\nfunction scrollHandler() {\r\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\r\n requestTick();\r\n}\r\n/**\r\n * Adds a function to a function array, executed on a single scroll-event set on window.\r\n * This avoids the memory load and possible hickups of setting multiple eventlisteners for the same event.\r\n * Also this optimizes rendering by utilising the requestAnimationFrame for these scroll-events.\r\n * \r\n * @param {Function} handler - function to be called on scroll \r\n * @param {boolean} triggerNow - Should the function be called at once\r\n */\r\nexport function onScroll(handler, triggerNow = false) {\r\n // if first call: setup eventlistener on window\r\n !scrollFunctions.length ? initScroll() : null;\r\n\r\n // Trigger function\r\n triggerNow ? handler() : null;\r\n\r\n scrollFunctions.push(handler); \r\n}\r\n\r\nexport function initScroll() {\r\n window.addEventListener('scroll', scrollHandler);\r\n}\r\n","export const transitionEndEventName = detectStyleDeclatationName();\r\nexport const animationEndEventName = detectStyleDeclatationName(\"animation\");\r\n\r\n/**\r\n * Detects which prefixed eventName is in CSSStyleDeclaration\r\n *\r\n * @param {string} eventTypeName - choose 'transition' or 'animation'\r\n * @returns {string}\r\n */\r\nexport function detectStyleDeclatationName(eventTypeName = \"transition\") {\r\n const transitions = {\r\n transition: `${eventTypeName}end`,\r\n OTransition: `o${eventTypeName}end`,\r\n MozTransition: `${eventTypeName}end`,\r\n WebkitTransition: `webkit${eventTypeName}end`,\r\n };\r\n\r\n const el = document.createElement(\"div\");\r\n\r\n for (const t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n return transitions[t];\r\n }\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n *\r\n * @param {HTMLElement} container - container to animate height of\r\n * @param {HTMLElement} classTarget [default = container] - target element that gets class\r\n * @param {Boolean} classOnBoth [default = false] - set class on both container and classTarget\r\n */\r\nexport function cssAnimateNewHeight(\r\n container,\r\n classTarget = container,\r\n classOnBoth = false\r\n) {\r\n let newHeight;\r\n const prevHeight = container.offsetHeight;\r\n\r\n const delayedClose = () => {\r\n if (classOnBoth) {\r\n container.classList.remove(\"open\");\r\n classTarget.classList.remove(\"open\");\r\n } else {\r\n classTarget.classList.remove(\"open\");\r\n }\r\n\r\n container.removeEventListener(transitionEndEventName, delayedClose);\r\n };\r\n\r\n container.removeAttribute(\"style\");\r\n\r\n if (classTarget.classList.contains(\"open\")) {\r\n newHeight = 0;\r\n container.addEventListener(transitionEndEventName, delayedClose);\r\n\r\n if (classOnBoth) {\r\n classTarget.classList.remove(\"open\");\r\n }\r\n } else {\r\n classTarget.classList.add(\"open\");\r\n\r\n if (classOnBoth) {\r\n container.classList.add(\"open\");\r\n }\r\n\r\n newHeight = container.offsetHeight;\r\n }\r\n\r\n container.style.height = `${prevHeight}px`;\r\n\r\n setTimeout(() => {\r\n container.style.height = `${newHeight}px`;\r\n }, 15);\r\n}\r\n\r\nexport function scrollAnimations() {\r\n //Scroll trigger for text-image\r\n const blockAnimates = document.querySelectorAll(\".block-animate\");\r\n for (let i = 0; i < blockAnimates.length; i++) {\r\n const blockAnimate = blockAnimates[i];\r\n const aLeft = blockAnimate.querySelectorAll(\".block-animate--left\");\r\n const aRight = blockAnimate.querySelectorAll(\".block-animate--right\");\r\n const img = blockAnimate.querySelector(img);\r\n\r\n if (aLeft || aRight) {\r\n const isReversed = blockAnimate.classList.contains(\r\n \"text-image--reverse\"\r\n );\r\n\r\n const timeLine = gsap.timeline({\r\n scrollTrigger: {\r\n trigger: blockAnimate,\r\n toggleActions: \"play none none none\",\r\n start: \"top bottom\",\r\n // markers: true,\r\n },\r\n });\r\n\r\n if (aLeft) {\r\n for (let i = 0; i < aLeft.length; i++) {\r\n const aLeftElem = aLeft[i];\r\n\r\n timeLine.from(aLeftElem, {\r\n x: isReversed ? 200 : -200,\r\n alpha: 0,\r\n ease: \"power3.out\",\r\n duration: 0.7,\r\n });\r\n }\r\n }\r\n if (aRight) {\r\n for (let i = 0; i < aRight.length; i++) {\r\n const aRightElem = aLeft[i];\r\n\r\n timeLine.from(aRight,{\r\n x: isReversed ? -200 : 200,\r\n alpha: 0,\r\n ease: \"power3.out\",\r\n duration: 0.7,\r\n },\r\n \"-=.7\"\r\n );\r\n }\r\n }\r\n if (img) {\r\n img.addEventListener(\"lazyloaded\", () => {\r\n ScrollTrigger.refresh();\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","import { cssAnimateNewHeight } from '../utils/animation';\r\n\r\n/**\r\n * Attention\r\n * Be aware that this module is dependent on support for Element.prototype.closest\r\n * This is included as default in https://polyfill.io/v3/polyfill.min.js\r\n */\r\n\r\n// Used keycodes\r\nconst keycode = {\r\n space: 32,\r\n arrowUp: 38,\r\n arrowDown: 40,\r\n home: 36,\r\n end: 35\r\n};\r\n\r\nlet activeAccordion;\r\nlet index = 0;\r\n\r\n/**\r\n * The Accordion class uses the cssAnimateNewHeight function to reveal hidden content.\r\n * Default element selector is data-action*=\"accordion\"\r\n * If data-action is set to \"accordion-switch\", active accordions will close when another is opened.\r\n *\r\n * @param {HTMLElement} trigger\r\n * @constructor\r\n */\r\nexport class Accordion {\r\n\r\n /**\r\n * The constructor is fired once the class is instantiated.\r\n *\r\n * @param {HTMLElement} trigger\r\n */\r\n constructor(trigger) {\r\n this.dom = {\r\n trigger,\r\n container: trigger.parentNode.querySelector('.accordion__content') || trigger.nextElementSibling\r\n };\r\n\r\n this.settings = {\r\n type: trigger.getAttribute('data-action')\r\n };\r\n\r\n this.index = index;\r\n\r\n index++;\r\n\r\n this.dom.trigger.addEventListener('click', e => {\r\n if (!(event.ctrlKey || event.metaKey || event.shiftKey)) {\r\n e.preventDefault();\r\n }\r\n if (activeAccordion && this.index !== activeAccordion.index) {\r\n // Dobbelt check added to prevent delayed dobbelt opening\r\n if (activeAccordion.dom.container.classList.contains('open')) {\r\n cssAnimateNewHeight(activeAccordion.dom.container, activeAccordion.dom.trigger, true);\r\n this.dom.container.setAttribute('aria-hidden', true);\r\n activeAccordion.dom.trigger.setAttribute('aria-expanded', 'false');\r\n }\r\n }\r\n\r\n cssAnimateNewHeight(this.dom.container, this.dom.trigger, true);\r\n this.dom.container.setAttribute('aria-hidden', false);\r\n\r\n // Set the inverted value of aria-expanded\r\n const ariaExpanded = this.dom.trigger.getAttribute('aria-expanded') || 'false';\r\n this.dom.trigger.setAttribute('aria-expanded', ariaExpanded === 'false');\r\n\r\n if (this.settings.type === 'accordion-switch') {\r\n activeAccordion = this;\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction openAccordByHashId() {\r\n if (window.location.hash.indexOf('accordion') > -1) {\r\n // const accordionContent = document.getElementById(window.location.hash.replace('#', ''));\r\n const accord = document.getElementById(window.location.hash.replace('#', ''));\r\n if (accord) {\r\n accord.click();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Initialise Accordions with this function\r\n * Will only run if given selector elements are found in DOM\r\n *\r\n * @param {string} selector - element selector string\r\n */\r\n\r\nexport function setupAccordions(selector = '[data-action*=\"accordion\"]') {\r\n const accordions = document.querySelectorAll(selector);\r\n\r\n if (accordions) {\r\n for (let i = 0; i < accordions.length; i++) {\r\n void new Accordion(accordions[i]);\r\n }\r\n\r\n openAccordByHashId();\r\n }\r\n}\r\n\r\nwindow.addEventListener('keydown', event => {\r\n const focusedElement = document.activeElement;\r\n\r\n if (focusedElement) {\r\n /* This code needs to be fixed!\r\n It makes it imposible to type spaces (ex. in input fields)\r\n\r\n if (event.keyCode === keycode.space) {\r\n // Toggle accordion\r\n event.preventDefault();\r\n focusedElement.click();\r\n\r\n } */\r\n if (event.keyCode === keycode.arrowUp) {\r\n // Focus prevoius accordion\r\n if (focusedElement.closest('.accordion').previousElementSibling && focusedElement.closest('.accordion').previousElementSibling.querySelector('.accordion__head')) {\r\n focusedElement.closest('.accordion').previousElementSibling.querySelector('.accordion__head').focus();\r\n }\r\n }\r\n if (event.keyCode === keycode.arrowDown) {\r\n // Focus next accordion\r\n if (focusedElement.closest('.accordion').nextElementSibling && focusedElement.closest('.accordion').nextElementSibling.querySelector('.accordion__head')) {\r\n focusedElement.closest('.accordion').nextElementSibling.querySelector('.accordion__head').focus();\r\n }\r\n }\r\n if (event.keyCode === keycode.home) {\r\n // Focus first accordion\r\n if (focusedElement.closest('.accordion').parentNode.querySelector('.accordion:first-child .accordion__head')) {\r\n event.preventDefault();\r\n focusedElement.closest('.accordion').parentNode.querySelector('.accordion:first-child .accordion__head').focus();\r\n }\r\n }\r\n if (event.keyCode === keycode.end) {\r\n // Focus last accordion\r\n if (focusedElement.closest('.accordion').parentNode.querySelector('.accordion:last-child .accordion__head')) {\r\n event.preventDefault();\r\n focusedElement.closest('.accordion').parentNode.querySelector('.accordion:last-child .accordion__head').focus();\r\n }\r\n }\r\n }\r\n});\r\n","const logWarning = (toggleSelector, type) => {\r\n if (toggleSelector == null || toggleSelector == undefined) {\r\n console.warn(\"'Toggle' can't find element of type: \" + type);\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst toggleStuff = (self, toggleSelector, toggleClass) => {\r\n let type;\r\n\r\n if (toggleSelector === \"sibling\") {\r\n toggleSelector = self.nextElementSibling;\r\n type = \"Sibling\";\r\n } else if (toggleSelector === \"body\") {\r\n toggleSelector = document.body;\r\n type = \"Body\";\r\n } else if (toggleSelector != null && toggleSelector.length > 0) {\r\n switch (toggleSelector.charAt(0)) {\r\n case \"#\":\r\n toggleSelector.substring(1);\r\n toggleSelector = document.getElementById();\r\n type = \"Id\";\r\n break;\r\n\r\n case \".\":\r\n toggleSelector = document.querySelector(toggleSelector);\r\n type = \"Class\";\r\n break;\r\n }\r\n } else {\r\n toggleSelector = self;\r\n }\r\n if (!logWarning(toggleSelector, type)) {\r\n toggleSelector.classList.toggle(toggleClass);\r\n } else {\r\n return;\r\n }\r\n};\r\n\r\n/**\r\n * Toggle have the following attributes\r\n * data-action=\"toggle\"\r\n * data-toggle-class=\"active\"\r\n * data-toggle-selector=\"sibling\" This can be '' for self, 'sibling* for next sibling\r\n * '#something' for ID or '.something' for a class\r\n *\r\n *
\r\n *\r\n * @param {HTMLElement} trigger\r\n * @constructor\r\n */\r\nexport class Toggle {\r\n /**\r\n * The constructor is fired once the class is instantiated.\r\n *\r\n * @param {HTMLElement} trigger\r\n */\r\n constructor(trigger) {\r\n this.dom = {\r\n trigger,\r\n container: trigger.dataset.toggleSelector || null,\r\n };\r\n\r\n // trigger.nextElementSibling\r\n this.settings = {\r\n class: trigger.dataset.toggleClass || \"open\",\r\n };\r\n\r\n this.dom.trigger.addEventListener(\"click\", (e) => {\r\n toggleStuff(trigger, this.dom.container, this.settings.class);\r\n });\r\n }\r\n}\r\n\r\nexport function setupToggles(selector = '[data-action*=\"toggle\"]') {\r\n const toggles = document.querySelectorAll(selector);\r\n\r\n if (toggles) {\r\n for (let i = 0; i < toggles.length; i++) {\r\n void new Toggle(toggles[i]);\r\n }\r\n }\r\n}\r\n","import { getElementPosition } from './elementProperties';\r\n\r\nconst easeInOutQuad = function(currentTime, start, change, duration) {\r\n let time = currentTime;\r\n time /= duration / 2;\r\n if (time < 1) {\r\n return (change / 2) * time * time + start;\r\n }\r\n time--;\r\n return (-change / 2) * (time * (time - 2) - 1) + start;\r\n};\r\n\r\nconst easeInOutQuintic = function(currentTime, start, change, duration) {\r\n let time = currentTime;\r\n const ts = (time /= duration) * time,\r\n tc = ts * time;\r\n return start + change * (6 * tc * ts + -15 * ts * ts + 10 * tc);\r\n};\r\n\r\nexport function scrollTo(to, duration = 750, callback) {\r\n function move(amount) {\r\n if (document.scrollingElement) {\r\n document.scrollingElement.scrollTop = amount;\r\n } else {\r\n document.documentElement.scrollTop = amount;\r\n document.body.parentNode.scrollTop = amount;\r\n document.body.scrollTop = amount;\r\n }\r\n }\r\n function position() {\r\n return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop;\r\n }\r\n\r\n const start = position(),\r\n change = to instanceof Element ? getElementPosition(to).top - start : to - start,\r\n increment = 20;\r\n\r\n\r\n let currentTime = 0;\r\n\r\n const animate = function() {\r\n // increment the time\r\n currentTime += increment;\r\n // find the value with the quadratic in-out easing function\r\n const val = easeInOutQuintic(currentTime, start, change, duration);\r\n // move the document.body\r\n move(val);\r\n // do the animation unless its over\r\n if (currentTime < duration) {\r\n requestAnimationFrame(animate);\r\n } else {\r\n if (callback && typeof callback === 'function') {\r\n // the animation is done so lets callback\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }\r\n }\r\n };\r\n animate();\r\n}\r\n","import { scrollTo } from '../utils/scrollTo';\r\n\r\n/**\r\n * This function strips relative site path from hashlink \r\n * \r\n * @param {string} hashLink \r\n * \r\n * @returns {HTMLElement}\r\n */\r\nfunction returnHashElement(hashLink) {\r\n if (hashLink.indexOf(window.location.pathname) !== -1) {\r\n return document.getElementById(hashLink.replace(window.location.pathname, '').replace('#', ''));\r\n } else {\r\n return document.getElementById(hashLink.replace('#', ''));\r\n }\r\n}\r\n\r\n/**\r\n * Scrolls the viewport to an hash-id\r\n * if found in querystring\r\n */\r\nexport function scrollToUrlHash() {\r\n if (window.location.hash) {\r\n const element = document.getElementById(window.location.hash.replace('#', ''));\r\n\r\n if (element) {\r\n scrollTo(element);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Activate Anchor Link Scroll with this function\r\n * Will only run if given selector elements are found in DOM\r\n * \r\n * @param {string} triggerSelector \r\n */\r\n\r\nexport function setupAnchorLinkScroll(triggerSelector = '[data-action*=\"anchor\"], a[href^=\"#\"]:not([href=\"#\"]):not([role=\"tab\"]):not([data-action*=\"accordion\"])') {\r\n\r\n const triggers = document.querySelectorAll(triggerSelector);\r\n\r\n for (let i = 0; i < triggers.length; i++) {\r\n const trigger = triggers[i];\r\n const hashLink = trigger.getAttribute('href') || trigger.getAttribute('data-target');\r\n\r\n if (hashLink) {\r\n const element = returnHashElement(hashLink);\r\n\r\n trigger.addEventListener('click', e => {\r\n e.preventDefault();\r\n scrollTo(element);\r\n });\r\n }\r\n }\r\n}\r\n","(function(window, factory) {\n\tvar lazySizes = factory(window, window.document, Date);\n\twindow.lazySizes = lazySizes;\n\tif(typeof module == 'object' && module.exports){\n\t\tmodule.exports = lazySizes;\n\t}\n}(typeof window != 'undefined' ?\n window : {}, function l(window, document, Date) { // Pass in the windoe Date function also for SSR because the Date class can be lost\n\t'use strict';\n\t/*jshint eqnull:true */\n\n\tvar lazysizes, lazySizesCfg;\n\n\t(function(){\n\t\tvar prop;\n\n\t\tvar lazySizesDefaults = {\n\t\t\tlazyClass: 'lazyload',\n\t\t\tloadedClass: 'lazyloaded',\n\t\t\tloadingClass: 'lazyloading',\n\t\t\tpreloadClass: 'lazypreload',\n\t\t\terrorClass: 'lazyerror',\n\t\t\t//strictClass: 'lazystrict',\n\t\t\tautosizesClass: 'lazyautosizes',\n\t\t\tfastLoadedClass: 'ls-is-cached',\n\t\t\tiframeLoadMode: 0,\n\t\t\tsrcAttr: 'data-src',\n\t\t\tsrcsetAttr: 'data-srcset',\n\t\t\tsizesAttr: 'data-sizes',\n\t\t\t//preloadAfterLoad: false,\n\t\t\tminSize: 40,\n\t\t\tcustomMedia: {},\n\t\t\tinit: true,\n\t\t\texpFactor: 1.5,\n\t\t\thFac: 0.8,\n\t\t\tloadMode: 2,\n\t\t\tloadHidden: true,\n\t\t\tricTimeout: 0,\n\t\t\tthrottleDelay: 125,\n\t\t};\n\n\t\tlazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n\t\tfor(prop in lazySizesDefaults){\n\t\t\tif(!(prop in lazySizesCfg)){\n\t\t\t\tlazySizesCfg[prop] = lazySizesDefaults[prop];\n\t\t\t}\n\t\t}\n\t})();\n\n\tif (!document || !document.getElementsByClassName) {\n\t\treturn {\n\t\t\tinit: function () {},\n\t\t\tcfg: lazySizesCfg,\n\t\t\tnoSupport: true,\n\t\t};\n\t}\n\n\tvar docElem = document.documentElement;\n\n\tvar supportPicture = window.HTMLPictureElement;\n\n\tvar _addEventListener = 'addEventListener';\n\n\tvar _getAttribute = 'getAttribute';\n\n\t/**\n\t * Update to bind to window because 'this' becomes null during SSR\n\t * builds.\n\t */\n\tvar addEventListener = window[_addEventListener].bind(window);\n\n\tvar setTimeout = window.setTimeout;\n\n\tvar requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n\tvar requestIdleCallback = window.requestIdleCallback;\n\n\tvar regPicture = /^picture$/i;\n\n\tvar loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n\tvar regClassCache = {};\n\n\tvar forEach = Array.prototype.forEach;\n\n\tvar hasClass = function(ele, cls) {\n\t\tif(!regClassCache[cls]){\n\t\t\tregClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n\t\t}\n\t\treturn regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n\t};\n\n\tvar addClass = function(ele, cls) {\n\t\tif (!hasClass(ele, cls)){\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n\t\t}\n\t};\n\n\tvar removeClass = function(ele, cls) {\n\t\tvar reg;\n\t\tif ((reg = hasClass(ele,cls))) {\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n\t\t}\n\t};\n\n\tvar addRemoveLoadEvents = function(dom, fn, add){\n\t\tvar action = add ? _addEventListener : 'removeEventListener';\n\t\tif(add){\n\t\t\taddRemoveLoadEvents(dom, fn);\n\t\t}\n\t\tloadEvents.forEach(function(evt){\n\t\t\tdom[action](evt, fn);\n\t\t});\n\t};\n\n\tvar triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n\t\tvar event = document.createEvent('Event');\n\n\t\tif(!detail){\n\t\t\tdetail = {};\n\t\t}\n\n\t\tdetail.instance = lazysizes;\n\n\t\tevent.initEvent(name, !noBubbles, !noCancelable);\n\n\t\tevent.detail = detail;\n\n\t\telem.dispatchEvent(event);\n\t\treturn event;\n\t};\n\n\tvar updatePolyfill = function (el, full){\n\t\tvar polyfill;\n\t\tif( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n\t\t\tif(full && full.src && !el[_getAttribute]('srcset')){\n\t\t\t\tel.setAttribute('srcset', full.src);\n\t\t\t}\n\t\t\tpolyfill({reevaluate: true, elements: [el]});\n\t\t} else if(full && full.src){\n\t\t\tel.src = full.src;\n\t\t}\n\t};\n\n\tvar getCSS = function (elem, style){\n\t\treturn (getComputedStyle(elem, null) || {})[style];\n\t};\n\n\tvar getWidth = function(elem, parent, width){\n\t\twidth = width || elem.offsetWidth;\n\n\t\twhile(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n\t\t\twidth = parent.offsetWidth;\n\t\t\tparent = parent.parentNode;\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tvar rAF = (function(){\n\t\tvar running, waiting;\n\t\tvar firstFns = [];\n\t\tvar secondFns = [];\n\t\tvar fns = firstFns;\n\n\t\tvar run = function(){\n\t\t\tvar runFns = fns;\n\n\t\t\tfns = firstFns.length ? secondFns : firstFns;\n\n\t\t\trunning = true;\n\t\t\twaiting = false;\n\n\t\t\twhile(runFns.length){\n\t\t\t\trunFns.shift()();\n\t\t\t}\n\n\t\t\trunning = false;\n\t\t};\n\n\t\tvar rafBatch = function(fn, queue){\n\t\t\tif(running && !queue){\n\t\t\t\tfn.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tfns.push(fn);\n\n\t\t\t\tif(!waiting){\n\t\t\t\t\twaiting = true;\n\t\t\t\t\t(document.hidden ? setTimeout : requestAnimationFrame)(run);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trafBatch._lsFlush = run;\n\n\t\treturn rafBatch;\n\t})();\n\n\tvar rAFIt = function(fn, simple){\n\t\treturn simple ?\n\t\t\tfunction() {\n\t\t\t\trAF(fn);\n\t\t\t} :\n\t\t\tfunction(){\n\t\t\t\tvar that = this;\n\t\t\t\tvar args = arguments;\n\t\t\t\trAF(function(){\n\t\t\t\t\tfn.apply(that, args);\n\t\t\t\t});\n\t\t\t}\n\t\t;\n\t};\n\n\tvar throttle = function(fn){\n\t\tvar running;\n\t\tvar lastTime = 0;\n\t\tvar gDelay = lazySizesCfg.throttleDelay;\n\t\tvar rICTimeout = lazySizesCfg.ricTimeout;\n\t\tvar run = function(){\n\t\t\trunning = false;\n\t\t\tlastTime = Date.now();\n\t\t\tfn();\n\t\t};\n\t\tvar idleCallback = requestIdleCallback && rICTimeout > 49 ?\n\t\t\tfunction(){\n\t\t\t\trequestIdleCallback(run, {timeout: rICTimeout});\n\n\t\t\t\tif(rICTimeout !== lazySizesCfg.ricTimeout){\n\t\t\t\t\trICTimeout = lazySizesCfg.ricTimeout;\n\t\t\t\t}\n\t\t\t} :\n\t\t\trAFIt(function(){\n\t\t\t\tsetTimeout(run);\n\t\t\t}, true)\n\t\t;\n\n\t\treturn function(isPriority){\n\t\t\tvar delay;\n\n\t\t\tif((isPriority = isPriority === true)){\n\t\t\t\trICTimeout = 33;\n\t\t\t}\n\n\t\t\tif(running){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trunning = true;\n\n\t\t\tdelay = gDelay - (Date.now() - lastTime);\n\n\t\t\tif(delay < 0){\n\t\t\t\tdelay = 0;\n\t\t\t}\n\n\t\t\tif(isPriority || delay < 9){\n\t\t\t\tidleCallback();\n\t\t\t} else {\n\t\t\t\tsetTimeout(idleCallback, delay);\n\t\t\t}\n\t\t};\n\t};\n\n\t//based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n\tvar debounce = function(func) {\n\t\tvar timeout, timestamp;\n\t\tvar wait = 99;\n\t\tvar run = function(){\n\t\t\ttimeout = null;\n\t\t\tfunc();\n\t\t};\n\t\tvar later = function() {\n\t\t\tvar last = Date.now() - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tsetTimeout(later, wait - last);\n\t\t\t} else {\n\t\t\t\t(requestIdleCallback || run)(run);\n\t\t\t}\n\t\t};\n\n\t\treturn function() {\n\t\t\ttimestamp = Date.now();\n\n\t\t\tif (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar loader = (function(){\n\t\tvar preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n\t\tvar eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n\t\tvar regImg = /^img$/i;\n\t\tvar regIframe = /^iframe$/i;\n\n\t\tvar supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n\t\tvar shrinkExpand = 0;\n\t\tvar currentExpand = 0;\n\n\t\tvar isLoading = 0;\n\t\tvar lowRuns = -1;\n\n\t\tvar resetPreloading = function(e){\n\t\t\tisLoading--;\n\t\t\tif(!e || isLoading < 0 || !e.target){\n\t\t\t\tisLoading = 0;\n\t\t\t}\n\t\t};\n\n\t\tvar isVisible = function (elem) {\n\t\t\tif (isBodyHidden == null) {\n\t\t\t\tisBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n\t\t\t}\n\n\t\t\treturn isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n\t\t};\n\n\t\tvar isNestedVisible = function(elem, elemExpand){\n\t\t\tvar outerRect;\n\t\t\tvar parent = elem;\n\t\t\tvar visible = isVisible(elem);\n\n\t\t\teLtop -= elemExpand;\n\t\t\teLbottom += elemExpand;\n\t\t\teLleft -= elemExpand;\n\t\t\teLright += elemExpand;\n\n\t\t\twhile(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n\t\t\t\tvisible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n\t\t\t\tif(visible && getCSS(parent, 'overflow') != 'visible'){\n\t\t\t\t\touterRect = parent.getBoundingClientRect();\n\t\t\t\t\tvisible = eLright > outerRect.left &&\n\t\t\t\t\t\teLleft < outerRect.right &&\n\t\t\t\t\t\teLbottom > outerRect.top - 1 &&\n\t\t\t\t\t\teLtop < outerRect.bottom + 1\n\t\t\t\t\t;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn visible;\n\t\t};\n\n\t\tvar checkElements = function() {\n\t\t\tvar eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n\t\t\t\tbeforeExpandVal, defaultExpand, preloadExpand, hFac;\n\t\t\tvar lazyloadElems = lazysizes.elements;\n\n\t\t\tif((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n\t\t\t\ti = 0;\n\n\t\t\t\tlowRuns++;\n\n\t\t\t\tfor(; i < eLlen; i++){\n\n\t\t\t\t\tif(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n\t\t\t\t\tif(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n\t\t\t\t\tif(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n\t\t\t\t\t\telemExpand = currentExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!defaultExpand) {\n\t\t\t\t\t\tdefaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n\t\t\t\t\t\t\tdocElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n\t\t\t\t\t\t\tlazySizesCfg.expand;\n\n\t\t\t\t\t\tlazysizes._defEx = defaultExpand;\n\n\t\t\t\t\t\tpreloadExpand = defaultExpand * lazySizesCfg.expFactor;\n\t\t\t\t\t\thFac = lazySizesCfg.hFac;\n\t\t\t\t\t\tisBodyHidden = null;\n\n\t\t\t\t\t\tif(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n\t\t\t\t\t\t\tcurrentExpand = preloadExpand;\n\t\t\t\t\t\t\tlowRuns = 0;\n\t\t\t\t\t\t} else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n\t\t\t\t\t\t\tcurrentExpand = defaultExpand;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentExpand = shrinkExpand;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(beforeExpandVal !== elemExpand){\n\t\t\t\t\t\teLvW = innerWidth + (elemExpand * hFac);\n\t\t\t\t\t\telvH = innerHeight + elemExpand;\n\t\t\t\t\t\telemNegativeExpand = elemExpand * -1;\n\t\t\t\t\t\tbeforeExpandVal = elemExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\trect = lazyloadElems[i].getBoundingClientRect();\n\n\t\t\t\t\tif ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n\t\t\t\t\t\t(eLtop = rect.top) <= elvH &&\n\t\t\t\t\t\t(eLright = rect.right) >= elemNegativeExpand * hFac &&\n\t\t\t\t\t\t(eLleft = rect.left) <= eLvW &&\n\t\t\t\t\t\t(eLbottom || eLright || eLleft || eLtop) &&\n\t\t\t\t\t\t(lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n\t\t\t\t\t\t((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n\t\t\t\t\t\tunveilElement(lazyloadElems[i]);\n\t\t\t\t\t\tloadedSomething = true;\n\t\t\t\t\t\tif(isLoading > 9){break;}\n\t\t\t\t\t} else if(!loadedSomething && isCompleted && !autoLoadElem &&\n\t\t\t\t\t\tisLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n\t\t\t\t\t\t(preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n\t\t\t\t\t\t(preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n\t\t\t\t\t\tautoLoadElem = preloadElems[0] || lazyloadElems[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(autoLoadElem && !loadedSomething){\n\t\t\t\t\tunveilElement(autoLoadElem);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar throttledCheckElements = throttle(checkElements);\n\n\t\tvar switchLoadingClass = function(e){\n\t\t\tvar elem = e.target;\n\n\t\t\tif (elem._lazyCache) {\n\t\t\t\tdelete elem._lazyCache;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresetPreloading(e);\n\t\t\taddClass(elem, lazySizesCfg.loadedClass);\n\t\t\tremoveClass(elem, lazySizesCfg.loadingClass);\n\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass);\n\t\t\ttriggerEvent(elem, 'lazyloaded');\n\t\t};\n\t\tvar rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n\t\tvar rafSwitchLoadingClass = function(e){\n\t\t\trafedSwitchLoadingClass({target: e.target});\n\t\t};\n\n\t\tvar changeIframeSrc = function(elem, src){\n\t\t\tvar loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode;\n\n\t\t\t// loadMode can be also a string!\n\t\t\tif (loadMode == 0) {\n\t\t\t\telem.contentWindow.location.replace(src);\n\t\t\t} else if (loadMode == 1) {\n\t\t\t\telem.src = src;\n\t\t\t}\n\t\t};\n\n\t\tvar handleSources = function(source){\n\t\t\tvar customMedia;\n\n\t\t\tvar sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n\t\t\tif( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n\t\t\t\tsource.setAttribute('media', customMedia);\n\t\t\t}\n\n\t\t\tif(sourceSrcset){\n\t\t\t\tsource.setAttribute('srcset', sourceSrcset);\n\t\t\t}\n\t\t};\n\n\t\tvar lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n\t\t\tvar src, srcset, parent, isPicture, event, firesLoad;\n\n\t\t\tif(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n\t\t\t\tif(sizes){\n\t\t\t\t\tif(isAuto){\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.autosizesClass);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.setAttribute('sizes', sizes);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsrcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n\t\t\t\tsrc = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n\t\t\t\tif(isImg) {\n\t\t\t\t\tparent = elem.parentNode;\n\t\t\t\t\tisPicture = parent && regPicture.test(parent.nodeName || '');\n\t\t\t\t}\n\n\t\t\t\tfiresLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n\t\t\t\tevent = {target: elem};\n\n\t\t\t\taddClass(elem, lazySizesCfg.loadingClass);\n\n\t\t\t\tif(firesLoad){\n\t\t\t\t\tclearTimeout(resetPreloadingTimer);\n\t\t\t\t\tresetPreloadingTimer = setTimeout(resetPreloading, 2500);\n\t\t\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n\t\t\t\t}\n\n\t\t\t\tif(isPicture){\n\t\t\t\t\tforEach.call(parent.getElementsByTagName('source'), handleSources);\n\t\t\t\t}\n\n\t\t\t\tif(srcset){\n\t\t\t\t\telem.setAttribute('srcset', srcset);\n\t\t\t\t} else if(src && !isPicture){\n\t\t\t\t\tif(regIframe.test(elem.nodeName)){\n\t\t\t\t\t\tchangeIframeSrc(elem, src);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.src = src;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(isImg && (srcset || isPicture)){\n\t\t\t\t\tupdatePolyfill(elem, {src: src});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(elem._lazyRace){\n\t\t\t\tdelete elem._lazyRace;\n\t\t\t}\n\t\t\tremoveClass(elem, lazySizesCfg.lazyClass);\n\n\t\t\trAF(function(){\n\t\t\t\t// Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n\t\t\t\tvar isLoaded = elem.complete && elem.naturalWidth > 1;\n\n\t\t\t\tif( !firesLoad || isLoaded){\n\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.fastLoadedClass);\n\t\t\t\t\t}\n\t\t\t\t\tswitchLoadingClass(event);\n\t\t\t\t\telem._lazyCache = true;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tif ('_lazyCache' in elem) {\n\t\t\t\t\t\t\tdelete elem._lazyCache;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 9);\n\t\t\t\t}\n\t\t\t\tif (elem.loading == 'lazy') {\n\t\t\t\t\tisLoading--;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t});\n\n\t\tvar unveilElement = function (elem){\n\t\t\tif (elem._lazyRace) {return;}\n\t\t\tvar detail;\n\n\t\t\tvar isImg = regImg.test(elem.nodeName);\n\n\t\t\t//allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n\t\t\tvar sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n\t\t\tvar isAuto = sizes == 'auto';\n\n\t\t\tif( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n\t\t\tdetail = triggerEvent(elem, 'lazyunveilread').detail;\n\n\t\t\tif(isAuto){\n\t\t\t\t autoSizer.updateElem(elem, true, elem.offsetWidth);\n\t\t\t}\n\n\t\t\telem._lazyRace = true;\n\t\t\tisLoading++;\n\n\t\t\tlazyUnveil(elem, detail, isAuto, sizes, isImg);\n\t\t};\n\n\t\tvar afterScroll = debounce(function(){\n\t\t\tlazySizesCfg.loadMode = 3;\n\t\t\tthrottledCheckElements();\n\t\t});\n\n\t\tvar altLoadmodeScrollListner = function(){\n\t\t\tif(lazySizesCfg.loadMode == 3){\n\t\t\t\tlazySizesCfg.loadMode = 2;\n\t\t\t}\n\t\t\tafterScroll();\n\t\t};\n\n\t\tvar onload = function(){\n\t\t\tif(isCompleted){return;}\n\t\t\tif(Date.now() - started < 999){\n\t\t\t\tsetTimeout(onload, 999);\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tisCompleted = true;\n\n\t\t\tlazySizesCfg.loadMode = 3;\n\n\t\t\tthrottledCheckElements();\n\n\t\t\taddEventListener('scroll', altLoadmodeScrollListner, true);\n\t\t};\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tstarted = Date.now();\n\n\t\t\t\tlazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n\t\t\t\tpreloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n\t\t\t\taddEventListener('scroll', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('resize', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('pageshow', function (e) {\n\t\t\t\t\tif (e.persisted) {\n\t\t\t\t\t\tvar loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n\t\t\t\t\t\tif (loadingElements.length && loadingElements.forEach) {\n\t\t\t\t\t\t\trequestAnimationFrame(function () {\n\t\t\t\t\t\t\t\tloadingElements.forEach( function (img) {\n\t\t\t\t\t\t\t\t\tif (img.complete) {\n\t\t\t\t\t\t\t\t\t\tunveilElement(img);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\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\n\t\t\t\tif(window.MutationObserver){\n\t\t\t\t\tnew MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n\t\t\t\t} else {\n\t\t\t\t\tdocElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n\t\t\t\t\tdocElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n\t\t\t\t\tsetInterval(throttledCheckElements, 999);\n\t\t\t\t}\n\n\t\t\t\taddEventListener('hashchange', throttledCheckElements, true);\n\n\t\t\t\t//, 'fullscreenchange'\n\t\t\t\t['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n\t\t\t\t\tdocument[_addEventListener](name, throttledCheckElements, true);\n\t\t\t\t});\n\n\t\t\t\tif((/d$|^c/.test(document.readyState))){\n\t\t\t\t\tonload();\n\t\t\t\t} else {\n\t\t\t\t\taddEventListener('load', onload);\n\t\t\t\t\tdocument[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n\t\t\t\t\tsetTimeout(onload, 20000);\n\t\t\t\t}\n\n\t\t\t\tif(lazysizes.elements.length){\n\t\t\t\t\tcheckElements();\n\t\t\t\t\trAF._lsFlush();\n\t\t\t\t} else {\n\t\t\t\t\tthrottledCheckElements();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcheckElems: throttledCheckElements,\n\t\t\tunveil: unveilElement,\n\t\t\t_aLSL: altLoadmodeScrollListner,\n\t\t};\n\t})();\n\n\n\tvar autoSizer = (function(){\n\t\tvar autosizesElems;\n\n\t\tvar sizeElement = rAFIt(function(elem, parent, event, width){\n\t\t\tvar sources, i, len;\n\t\t\telem._lazysizesWidth = width;\n\t\t\twidth += 'px';\n\n\t\t\telem.setAttribute('sizes', width);\n\n\t\t\tif(regPicture.test(parent.nodeName || '')){\n\t\t\t\tsources = parent.getElementsByTagName('source');\n\t\t\t\tfor(i = 0, len = sources.length; i < len; i++){\n\t\t\t\t\tsources[i].setAttribute('sizes', width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!event.detail.dataAttr){\n\t\t\t\tupdatePolyfill(elem, event.detail);\n\t\t\t}\n\t\t});\n\t\tvar getSizeElement = function (elem, dataAttr, width){\n\t\t\tvar event;\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif(parent){\n\t\t\t\twidth = getWidth(elem, parent, width);\n\t\t\t\tevent = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n\t\t\t\tif(!event.defaultPrevented){\n\t\t\t\t\twidth = event.detail.width;\n\n\t\t\t\t\tif(width && width !== elem._lazysizesWidth){\n\t\t\t\t\t\tsizeElement(elem, parent, event, width);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar updateElementsSizes = function(){\n\t\t\tvar i;\n\t\t\tvar len = autosizesElems.length;\n\t\t\tif(len){\n\t\t\t\ti = 0;\n\n\t\t\t\tfor(; i < len; i++){\n\t\t\t\t\tgetSizeElement(autosizesElems[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tautosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n\t\t\t\taddEventListener('resize', debouncedUpdateElementsSizes);\n\t\t\t},\n\t\t\tcheckElems: debouncedUpdateElementsSizes,\n\t\t\tupdateElem: getSizeElement\n\t\t};\n\t})();\n\n\tvar init = function(){\n\t\tif(!init.i && document.getElementsByClassName){\n\t\t\tinit.i = true;\n\t\t\tautoSizer._();\n\t\t\tloader._();\n\t\t}\n\t};\n\n\tsetTimeout(function(){\n\t\tif(lazySizesCfg.init){\n\t\t\tinit();\n\t\t}\n\t});\n\n\tlazysizes = {\n\t\tcfg: lazySizesCfg,\n\t\tautoSizer: autoSizer,\n\t\tloader: loader,\n\t\tinit: init,\n\t\tuP: updatePolyfill,\n\t\taC: addClass,\n\t\trC: removeClass,\n\t\thC: hasClass,\n\t\tfire: triggerEvent,\n\t\tgW: getWidth,\n\t\trAF: rAF,\n\t};\n\n\treturn lazysizes;\n}\n));\n","import { onWindowResize, currentBreakpoint, currentBreakpointIndex } from './utils/windowResize';\r\n// import { onScroll, scrollTop } from './utils/scroll';\r\nimport { onReady } from './utils/onReady';\r\nimport { setupNav } from './components/nav';\r\n// import { setupLazyLoading } from './utils/lazyImage';\r\nimport { setupAccordions } from './components/accordion';\r\nimport { setupToggles } from './components/toggle';\r\n// import { setupVideos } from './components/video';\r\n// import { initVhUnitOverwrite, debounce } from './utils/helpers';\r\n// import { version } from '../../package.json';\r\nimport { setupAnchorLinkScroll } from './components/anchors';\r\n// import { setupFilters } from './components/filter';\r\n// import { setupOverlay } from './components/overlay';\r\n// import { setupTabs } from './components/tabs';\r\n// import { setupYTVideos } from './components/video-yt';\r\n// import { setupSliders } from './components/slider';\r\n// import { watchFormFields } from './components/form';\r\nimport { scrollAnimations } from './utils/animation';\r\nimport lazySizes from 'lazysizes';\r\n\r\n// Below are example of how to use import libraries installed via npm.\r\n// import sal from 'sal.js';\r\nlazySizes.cfg.loadMode = 1;\r\nlazySizes.cfg.preloadAfterLoad = false;\r\nlazySizes.autoSizer.checkElems();\r\n\r\nfunction init() {\r\n document.body.classList.remove('standby');\r\n setTimeout(() => {\r\n document.body.classList.remove('standby-animation');\r\n }, 500);\r\n\r\n \r\n setupAnchorLinkScroll(); \r\n\r\n setupNav('.nav');\r\n scrollAnimations();\r\n\r\n onReady(() => { \r\n // initVhUnitOverwrite();\r\n\r\n // setupLazyLoading();\r\n\r\n setupAccordions();\r\n\r\n setupToggles();\r\n\r\n // setupFilters();\r\n\r\n // setupOverlay(); \r\n\r\n // setupVideos();\r\n\r\n // setupYTVideos();\r\n\r\n // setupTabs();\r\n\r\n // setupSliders();\r\n\r\n // watchFormFields();\r\n });\r\n\r\n // Simulated CookieBot function-call via GTM\r\n //window.showCookieBanner();\r\n\r\n // onWindowResize event demo\r\n // I recommend you remove this before going live ;)\r\n // onWindowResize(() => {\r\n // window.console.log('Resize Event (throuttled)', {currentBreakpoint, currentBreakpointIndex});\r\n // });\r\n\r\n // onScroll event demo\r\n // Remove when you get tired of the console spam\r\n // onScroll(() => {\r\n // window.console.log('Scroll Event (RAF)', scrollTop);\r\n // });\r\n\r\n\r\n window.addEventListener('load', () => {\r\n // Polyfill for using svg spritesheet in oldIE\r\n svg4everybody();\r\n });\r\n}\r\n\r\ninit();\r\n"],"names":["functionReferences","readyState","document","readyEventBound","emptyCallbackArrays","length","tempArray","slice","forEach","funcRef","onReady","functionReference","addEventListener","push","getElementScroll","element","window","Element","Document","Window","left","pageXOffset","documentElement","scrollLeft","top","pageYOffset","scrollTop","scrollX","scrollY","console","warn","nav","className","scrollLocked","disableScrollLock","scrollPosition","htmlTag","classList","remove","style","marginTop","position","overflow","width","body","removeAttribute","scrollTo","toggleMenuOpen","contains","add","overflowY","setupNav","selector","sticky","disableDisableScrollLock","x","navSubs","querySelectorAll","openButtons","matches","navsub","height","openButton","setAttribute","querySelector","curScroll","toggled","goingUpClass","doc","w","prevScroll","curDirection","prevDirection","header","toggleHeader","stickyNavOnScroll","matchMedia","addListener","transitionEndEventName","detectStyleDeclatationName","t","eventTypeName","transitions","transition","OTransition","MozTransition","WebkitTransition","el","createElement","undefined","cssAnimateNewHeight","container","newHeight","classTarget","classOnBoth","prevHeight","offsetHeight","delayedClose","removeEventListener","setTimeout","activeAccordion","keycode","index","Accordion","trigger","dom","parentNode","nextElementSibling","settings","type","getAttribute","e","event","ctrlKey","metaKey","shiftKey","preventDefault","_this","ariaExpanded","setupAccordions","accordions","i","location","hash","indexOf","accord","getElementById","replace","click","focusedElement","activeElement","keyCode","closest","previousElementSibling","focus","toggleStuff","self","toggleSelector","toggleClass","charAt","substring","toggle","Toggle","dataset","class","easeInOutQuintic","currentTime","start","change","duration","ts","time","tc","to","callback","relativeTo","useElement","offsetTop","offsetLeft","rect","getBoundingClientRect","getElementPosition","animate","val","amount","scrollingElement","requestAnimationFrame","setupAnchorLinkScroll","triggers","hashLink","pathname","factory","lazySizes","Date","module","exports","lazysizes","lazySizesCfg","prop","lazySizesDefaults","lazyClass","loadedClass","loadingClass","preloadClass","errorClass","autosizesClass","fastLoadedClass","iframeLoadMode","srcAttr","srcsetAttr","sizesAttr","minSize","customMedia","init","expFactor","hFac","loadMode","loadHidden","ricTimeout","throttleDelay","lazySizesConfig","lazysizesConfig","getElementsByClassName","cfg","noSupport","hasClass","ele","cls","regClassCache","RegExp","test","_getAttribute","addClass","trim","removeClass","reg","triggerEvent","elem","name","detail","noBubbles","noCancelable","createEvent","instance","initEvent","dispatchEvent","updatePolyfill","full","polyfill","supportPicture","picturefill","pf","src","reevaluate","elements","getCSS","getComputedStyle","getWidth","parent","offsetWidth","_lazysizesWidth","running","waiting","firstFns","secondFns","fns","docElem","HTMLPictureElement","_addEventListener","bind","requestIdleCallback","regPicture","loadEvents","Array","prototype","addRemoveLoadEvents","fn","action","evt","rAF","rafBatch","_lsFlush","run","runFns","shift","queue","apply","this","arguments","hidden","rAFIt","simple","that","args","debounce","func","timeout","timestamp","later","last","now","preloadElems","isCompleted","resetPreloadingTimer","started","eLvW","elvH","eLtop","eLleft","eLright","eLbottom","isBodyHidden","lastTime","gDelay","rICTimeout","idleCallback","regImg","regIframe","supportScroll","currentExpand","isLoading","lowRuns","throttledCheckElements","rafedSwitchLoadingClass","rafSwitchLoadingClass","lazyUnveil","unveilElement","afterScroll","onload","loader","navigator","userAgent","checkElements","switchLoadingClass","target","isAuto","sizes","isImg","srcset","isPicture","firesLoad","defaultPrevented","nodeName","clearTimeout","resetPreloading","call","getElementsByTagName","handleSources","contentWindow","_lazyRace","isLoaded","complete","naturalWidth","_lazyCache","loading","altLoadmodeScrollListner","_","loadingElements","persisted","img","MutationObserver","observe","childList","subtree","attributes","setInterval","checkElems","isPriority","delay","unveil","autoSizer","updateElem","_aLSL","isVisible","eLlen","autoLoadElem","loadedSomething","elemExpand","elemNegativeExpand","elemExpandVal","beforeExpandVal","defaultExpand","preloadExpand","lazyloadElems","prematureUnveil","expand","clientHeight","clientWidth","_defEx","innerWidth","innerHeight","bottom","right","outerRect","visible","offsetParent","isNestedVisible","preloadAfterLoad","source","sourceSrcset","autosizesElems","sizeElement","debouncedUpdateElementsSizes","sources","len","dataAttr","getSizeElement","uP","aC","rC","hC","fire","gW","blockAnimates","blockAnimate","aLeft","aRight","isReversed","timeLine","gsap","timeline","scrollTrigger","toggleActions","aLeftElem","from","alpha","ease","ScrollTrigger","refresh","scrollAnimations","toggles","setupToggles","svg4everybody"],"mappings":"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"}