{"version":3,"file":"main.min.js","sources":["../../../skalvi.lepalamtodk.Frontend/js/utils/helpers.js","../../../skalvi.lepalamtodk.Frontend/js/utils/onReady.js","../../../skalvi.lepalamtodk.Frontend/js/utils/scrollPosition.js","../../../skalvi.lepalamtodk.Frontend/js/utils/elementProperties.js","../../../skalvi.lepalamtodk.Frontend/js/utils/scrollLock.js","../../../skalvi.lepalamtodk.Frontend/js/modules/navigation.js","../../../skalvi.lepalamtodk.Frontend/js/utils/windowResize.js","../../../node_modules/sal.js/dist/sal.js","../../../skalvi.lepalamtodk.Frontend/js/modules/anchors.js","../../../skalvi.lepalamtodk.Frontend/js/utils/variables.js","../../../node_modules/rellax/rellax.js","../../../skalvi.lepalamtodk.Frontend/js/modules/rellax.js","../../../node_modules/intersection-observer/intersection-observer.js","../../../skalvi.lepalamtodk.Frontend/js/main.js","../../../skalvi.lepalamtodk.Frontend/js/modules/logo.js","../../../skalvi.lepalamtodk.Frontend/js/modules/faq.js"],"sourcesContent":["export const transitionEndEventName = detectTransitionEndEventName();\r\n\r\nexport function detectTransitionEndEventName() {\r\n\r\n const transitions = {\r\n \"transition\": \"transitionend\",\r\n \"OTransition\": \"oTransitionEnd\",\r\n \"MozTransition\": \"transitionend\",\r\n \"WebkitTransition\": \"webkitTransitionEnd\"\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\nexport function isVisible (elem) {\r\n return !!elem && !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\r\n}\r\n\r\nexport function cssAnimateNewHeight(container, classTarget = container, classOnBoth = false) {\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 classTarget.blur(); // removes focus if its a button\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 }, 10);\r\n}\r\n\r\nexport function setupReadmore(selector = '[data-action*=\"readmore\"]') {\r\n const readMoreBtns = document.body.querySelectorAll(selector);\r\n\r\n for (let i = 0; i < readMoreBtns.length; i++) {\r\n const readMoreBtn = readMoreBtns[i];\r\n const readMoreContainer = readMoreBtn.hasAttribute('data-target') ? document.getElementById(readMoreBtn.getAttribute('data-target').replace('#', '')) : readMoreBtn.nextElementSibling;\r\n\r\n if (readMoreContainer != null) {\r\n readMoreBtn.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n\r\n cssAnimateNewHeight(readMoreContainer, readMoreBtn, true);\r\n });\r\n }\r\n\r\n }\r\n}\r\n\r\nexport function polyfillClosest() {\r\n Element.prototype.closest = function (selector) {\r\n const theparent = this.parentNode;\r\n const find = document.querySelectorAll(selector);\r\n\r\n if (theparent !== document.body) {\r\n let found = false;\r\n\r\n for (let a = 0; a < find.length; a++) {\r\n if (find[a] === theparent) {\r\n found = true;\r\n }\r\n }\r\n\r\n if (found) {\r\n return theparent;\r\n } else {\r\n return this.parentNode.closest(selector);\r\n }\r\n } else {\r\n return 0;\r\n }\r\n };\r\n}\r\n\r\nexport function scrollTo(element, to, duration) {\r\n const start = element.scrollTop,\r\n change = to - start,\r\n increment = 20;\r\n\r\n const animateScroll = function (elapsedTime) {\r\n elapsedTime += increment;\r\n const position = easeInOut(elapsedTime, start, change, duration);\r\n element.scrollTop = position;\r\n\r\n if (elapsedTime < duration) {\r\n setTimeout(function () {\r\n animateScroll(elapsedTime);\r\n }, increment);\r\n }\r\n };\r\n\r\n animateScroll(0);\r\n}\r\n\r\nfunction easeInOut(currentTime, start, change, duration) {\r\n currentTime /= duration / 2;\r\n if (currentTime < 1) {\r\n return change / 2 * currentTime * currentTime + start;\r\n }\r\n currentTime -= 1;\r\n return -change / 2 * (currentTime * (currentTime - 2) - 1) + start;\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 ||\r\n element instanceof Document ||\r\n element instanceof Window;\r\n}\r\n","/**\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\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\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/**\r\n * Empty the callback arrays\r\n *\r\n * @private\r\n */\r\nfunction emptyCallbackArrays() {\r\n\r\n // Keep iterating through the function references until there are none left.\r\n while (functionReferences.length) {\r\n\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\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/**\r\n * Make sure the \"ready\"-event is set.\r\n *\r\n * @private\r\n */\r\nfunction bindReadyEvent() {\r\n\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/**\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\r\n if (typeof functionReference === \"function\") {\r\n if (readyState) {\r\n functionReference();\r\n } else {\r\n\r\n bindReadyEvent();\r\n\r\n functionReferences.push(functionReference);\r\n }\r\n }\r\n}\r\n","import {activityThrottler} from \"../utils/trottle\"\r\n\r\n//use window.scrollY\r\nvar scrollpos = window.scrollY;\r\nvar header = document.getElementById(\"header\");\r\n\r\nfunction add_class_on_scroll() {\r\n header.classList.add(\"fade-in\");\r\n}\r\n\r\nfunction remove_class_on_scroll() {\r\n header.classList.remove(\"fade-in\");\r\n}\r\n\r\n\r\nfunction scrollEvent() {\r\n //Here you forgot to update the value\r\n scrollpos = window.scrollY;\r\n\r\n if(scrollpos > 10){\r\n add_class_on_scroll();\r\n }\r\n else {\r\n remove_class_on_scroll();\r\n } \r\n console.log(scrollpos);\r\n};\r\n\r\nexport function initScrollHeader(){\r\n window.addEventListener('scroll', activityThrottler(500,scrollEvent()));\r\n} ","/**\r\n * Utilities for checking properties and states of elements.\r\n */\r\n\r\n\r\nimport { isElement } from \"./helpers\";\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/**\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/**\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\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\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\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\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 return false;\r\n }\r\n}\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\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\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\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\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\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","/**\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\n\r\nconst className = \"scroll-lock\";\r\nlet scrollTop = 0;\r\n\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 currentState = false;\r\n\r\n\r\n/**\r\n * Enable the scroll lock.\r\n */\r\nexport function enableScrollLock() {\r\n if (!currentState) {\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\r\n // Remember state\r\n currentState = true;\r\n scrollTop = scrollPosition.top;\r\n }\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\r\n/**\r\n * Disable the scroll lock\r\n */\r\nexport function disableScrollLock() {\r\n if (currentState) {\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\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 currentState = false;\r\n }\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\r\n/**\r\n * Toggle the scroll lock between on and off\r\n */\r\nexport function toggleScrollLock() {\r\n if (currentState) {\r\n disableScrollLock();\r\n } else {\r\n enableScrollLock();\r\n }\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\n\r\nexport default {\r\n enable,\r\n disable,\r\n toggle\r\n};\r\n","import {disableScrollLock, enableScrollLock} from \"../utils/scrollLock\";\r\n\r\nexport function init() {\r\n //mandrill forms\r\n const navigationTakeoverToggles = document.querySelectorAll('[data-action*=\"navigation-takeover-toggle\"]');\r\n\r\n function navigationToggle (e) {\r\n e.preventDefault();\r\n\r\n if (!document.body.classList.contains('nav-open')) {\r\n enableScrollLock();\r\n document.body.classList.add('nav-open');\r\n } else {\r\n setTimeout(disableScrollLock, 400);\r\n document.body.classList.remove('nav-open');\r\n }\r\n }\r\n\r\n for (let i = 0; i < navigationTakeoverToggles.length; i++) {\r\n navigationTakeoverToggles[i].addEventListener('click', navigationToggle);\r\n }\r\n}\r\n","export const breakpoints = {\r\n \"xxs\": 1,\r\n \"xs\": 480,\r\n \"sm\": 768,\r\n \"md\": 1024,\r\n \"lg\": 1280,\r\n \"xl\": 1540,\r\n \"xxl\": 1840\r\n};\r\n\r\nexport const breakpointKeys = Object.keys(breakpoints);\r\nexport let currentWindowWidth = window.innerWidth;\r\nexport let currentWindowHeight = window.innerHeight;\r\nexport let currentBreakpoint = 0;\r\nlet resizeTimer;\r\n\r\nconst resizeFunctions = [];\r\n\r\n/**\r\n * Get various window sizes - width, height etc.\r\n * This function is fired automatically upon page load. and run each time the window changes size.\r\n *\r\n */\r\nfunction getWindowSizes() {\r\n\r\n currentWindowWidth = window.innerWidth;\r\n currentWindowHeight = window.innerHeight;\r\n\r\n // Calculate which breakpoint is currently active, based on the screen width compared to the breakpoint definitions.\r\n\r\n let lastFoundWidth = 0;\r\n\r\n breakpointKeys.forEach((key, index) => {\r\n const width = breakpoints[key];\r\n if (currentWindowWidth >= width && width > lastFoundWidth) {\r\n lastFoundWidth = width;\r\n currentBreakpoint = index;\r\n }\r\n });\r\n}\r\n\r\nfunction resizeHandler() {\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(() => {\r\n getWindowSizes();\r\n resizeFunctions.forEach(funcRef => funcRef());\r\n }, 100);\r\n}\r\n\r\nexport function onWindowResize(handler) {\r\n resizeFunctions.push(handler);\r\n}\r\n\r\nexport function initWindowResize() {\r\n getWindowSizes();\r\n window.addEventListener('resize', resizeHandler);\r\n window.addEventListener('orientationchange', resizeHandler);\r\n}\r\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.sal=t():e.sal=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"dist/\",n(n.s=0)}([function(e,t,n){\"use strict\";n.r(t);n(1);function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=l.threshold?(!function(e){e.target.classList.add(l.animateClassName),f(l.enterEventName,e)}(e),l.once&&t.unobserve(e.target)):l.once||function(e){e.target.classList.remove(l.animateClassName),f(l.exitEventName,e)}(e)}))},m=function(){d(),c.disconnect(),c=null},y=function(){document.body.classList.remove(l.disabledClassName),c=new IntersectionObserver(p,{rootMargin:l.rootMargin,threshold:l.threshold}),(u=[].filter.call(document.querySelectorAll(l.selector),(function(e){return!function(e){return e.classList.contains(l.animateClassName)}(e,l.animateClassName)}))).forEach((function(e){return c.observe(e)}))};t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l;if(e!==l&&(l=o({},l,{},e)),\"undefined\"==typeof window)return console.warn(a),{elements:u,disable:m,enable:y};if(!window.IntersectionObserver)throw d(),Error(s);return b()?d():y(),{elements:u,disable:m,enable:y}}},function(e,t,n){}]).default}));\n//# sourceMappingURL=sal.js.map","import {scrollTo} from \"../utils/helpers\";\r\n\r\nexport function initAnchorLinkScroll(triggerSelector = '[data-action*=\"anchor\"], a[href^=\"#\"]:not([href=\"#\"])') {\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 let elementId = '';\r\n\r\n if (trigger.hasAttribute('data-action')) {\r\n elementId = trigger.getAttribute('data-target');\r\n } else if (trigger.hasAttribute('href')) {\r\n elementId = trigger.getAttribute('href');\r\n }\r\n\r\n const element = document.getElementById(elementId.replace('#', ''));\r\n if (element) {\r\n trigger.addEventListener('click', (e => {\r\n e.preventDefault();\r\n\r\n scrollToElement(element);\r\n }));\r\n }\r\n }\r\n}\r\n\r\nexport function initScrollByUrlHash () {\r\n if (window.location.hash) {\r\n const element = document.getElementById(window.location.hash.replace('#', ''));\r\n if (element) {\r\n scrollToElement(element);\r\n }\r\n }\r\n}\r\n\r\nfunction scrollToElement (element) {\r\n scrollTo(document.documentElement, element.offsetTop, 1000);\r\n scrollTo(document.body, element.offsetTop, 1000);\r\n}\r\n","export const isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\nexport const windowWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\r\nexport const windowHeight = window.innerHeight;\r\nexport const header = document.querySelector('.header');\r\n","\n// ------------------------------------------\n// Rellax.js\n// Buttery smooth parallax library\n// Copyright (c) 2016 Moe Amaya (@moeamaya)\n// MIT license\n//\n// Thanks to Paraxify.js and Jaime Cabllero\n// for parallax concepts\n// ------------------------------------------\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.Rellax = factory();\n }\n}(typeof window !== \"undefined\" ? window : global, function () {\n var Rellax = function(el, options){\n \"use strict\";\n\n var self = Object.create(Rellax.prototype);\n\n var posY = 0;\n var screenY = 0;\n var posX = 0;\n var screenX = 0;\n var blocks = [];\n var pause = true;\n\n // check what requestAnimationFrame to use, and if\n // it's not supported, use the onscroll event\n var loop = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n function(callback){ return setTimeout(callback, 1000 / 60); };\n\n // store the id for later use\n var loopId = null;\n\n // Test via a getter in the options object to see if the passive property is accessed\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"testPassive\", null, opts);\n window.removeEventListener(\"testPassive\", null, opts);\n } catch (e) {}\n\n // check what cancelAnimation method to use\n var clearLoop = window.cancelAnimationFrame || window.mozCancelAnimationFrame || clearTimeout;\n\n // check which transform property to use\n var transformProp = window.transformProp || (function(){\n var testEl = document.createElement('div');\n if (testEl.style.transform === null) {\n var vendors = ['Webkit', 'Moz', 'ms'];\n for (var vendor in vendors) {\n if (testEl.style[ vendors[vendor] + 'Transform' ] !== undefined) {\n return vendors[vendor] + 'Transform';\n }\n }\n }\n return 'transform';\n })();\n\n // Default Settings\n self.options = {\n speed: -2,\n\t verticalSpeed: null,\n\t horizontalSpeed: null,\n breakpoints: [576, 768, 1201],\n center: false,\n wrapper: null,\n relativeToWrapper: false,\n round: true,\n vertical: true,\n horizontal: false,\n verticalScrollAxis: \"y\",\n horizontalScrollAxis: \"x\",\n callback: function() {},\n };\n\n // User defined options (might have more in the future)\n if (options){\n Object.keys(options).forEach(function(key){\n self.options[key] = options[key];\n });\n }\n\n function validateCustomBreakpoints () {\n if (self.options.breakpoints.length === 3 && Array.isArray(self.options.breakpoints)) {\n var isAscending = true;\n var isNumerical = true;\n var lastVal;\n self.options.breakpoints.forEach(function (i) {\n if (typeof i !== 'number') isNumerical = false;\n if (lastVal !== null) {\n if (i < lastVal) isAscending = false;\n }\n lastVal = i;\n });\n if (isAscending && isNumerical) return;\n }\n // revert defaults if set incorrectly\n self.options.breakpoints = [576, 768, 1201];\n console.warn(\"Rellax: You must pass an array of 3 numbers in ascending order to the breakpoints option. Defaults reverted\");\n }\n\n if (options && options.breakpoints) {\n validateCustomBreakpoints();\n }\n\n // By default, rellax class\n if (!el) {\n el = '.rellax';\n }\n\n // check if el is a className or a node\n var elements = typeof el === 'string' ? document.querySelectorAll(el) : [el];\n\n // Now query selector\n if (elements.length > 0) {\n self.elems = elements;\n }\n\n // The elements don't exist\n else {\n console.warn(\"Rellax: The elements you're trying to select don't exist.\");\n return;\n }\n\n // Has a wrapper and it exists\n if (self.options.wrapper) {\n if (!self.options.wrapper.nodeType) {\n var wrapper = document.querySelector(self.options.wrapper);\n\n if (wrapper) {\n self.options.wrapper = wrapper;\n } else {\n console.warn(\"Rellax: The wrapper you're trying to use doesn't exist.\");\n return;\n }\n }\n }\n\n // set a placeholder for the current breakpoint\n var currentBreakpoint;\n\n // helper to determine current breakpoint\n var getCurrentBreakpoint = function (w) {\n var bp = self.options.breakpoints;\n if (w < bp[0]) return 'xs';\n if (w >= bp[0] && w < bp[1]) return 'sm';\n if (w >= bp[1] && w < bp[2]) return 'md';\n return 'lg';\n };\n\n // Get and cache initial position of all elements\n var cacheBlocks = function() {\n for (var i = 0; i < self.elems.length; i++){\n var block = createBlock(self.elems[i]);\n blocks.push(block);\n }\n };\n\n\n // Let's kick this script off\n // Build array for cached element values\n var init = function() {\n for (var i = 0; i < blocks.length; i++){\n self.elems[i].style.cssText = blocks[i].style;\n }\n\n blocks = [];\n\n screenY = window.innerHeight;\n screenX = window.innerWidth;\n currentBreakpoint = getCurrentBreakpoint(screenX);\n\n setPosition();\n\n cacheBlocks();\n\n animate();\n\n // If paused, unpause and set listener for window resizing events\n if (pause) {\n window.addEventListener('resize', init);\n pause = false;\n // Start the loop\n update();\n }\n };\n\n // We want to cache the parallax blocks'\n // values: base, top, height, speed\n // el: is dom object, return: el cache values\n var createBlock = function(el) {\n var dataPercentage = el.getAttribute( 'data-rellax-percentage' );\n var dataSpeed = el.getAttribute( 'data-rellax-speed' );\n var dataXsSpeed = el.getAttribute( 'data-rellax-xs-speed' );\n var dataMobileSpeed = el.getAttribute( 'data-rellax-mobile-speed' );\n var dataTabletSpeed = el.getAttribute( 'data-rellax-tablet-speed' );\n var dataDesktopSpeed = el.getAttribute( 'data-rellax-desktop-speed' );\n var dataVerticalSpeed = el.getAttribute('data-rellax-vertical-speed');\n var dataHorizontalSpeed = el.getAttribute('data-rellax-horizontal-speed');\n var dataVericalScrollAxis = el.getAttribute('data-rellax-vertical-scroll-axis');\n var dataHorizontalScrollAxis = el.getAttribute('data-rellax-horizontal-scroll-axis');\n var dataZindex = el.getAttribute( 'data-rellax-zindex' ) || 0;\n var dataMin = el.getAttribute( 'data-rellax-min' );\n var dataMax = el.getAttribute( 'data-rellax-max' );\n var dataMinX = el.getAttribute('data-rellax-min-x');\n var dataMaxX = el.getAttribute('data-rellax-max-x');\n var dataMinY = el.getAttribute('data-rellax-min-y');\n var dataMaxY = el.getAttribute('data-rellax-max-y');\n var mapBreakpoints;\n var breakpoints = true;\n\n if (!dataXsSpeed && !dataMobileSpeed && !dataTabletSpeed && !dataDesktopSpeed) {\n breakpoints = false;\n } else {\n mapBreakpoints = {\n 'xs': dataXsSpeed,\n 'sm': dataMobileSpeed,\n 'md': dataTabletSpeed,\n 'lg': dataDesktopSpeed\n };\n }\n\n // initializing at scrollY = 0 (top of browser), scrollX = 0 (left of browser)\n // ensures elements are positioned based on HTML layout.\n //\n // If the element has the percentage attribute, the posY and posX needs to be\n // the current scroll position's value, so that the elements are still positioned based on HTML layout\n var wrapperPosY = self.options.wrapper ? self.options.wrapper.scrollTop : (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);\n // If the option relativeToWrapper is true, use the wrappers offset to top, subtracted from the current page scroll.\n if (self.options.relativeToWrapper) {\n var scrollPosY = (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);\n wrapperPosY = scrollPosY - self.options.wrapper.offsetTop;\n }\n var posY = self.options.vertical ? ( dataPercentage || self.options.center ? wrapperPosY : 0 ) : 0;\n var posX = self.options.horizontal ? ( dataPercentage || self.options.center ? self.options.wrapper ? self.options.wrapper.scrollLeft : (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft) : 0 ) : 0;\n\n var blockTop = posY + el.getBoundingClientRect().top;\n var blockHeight = el.clientHeight || el.offsetHeight || el.scrollHeight;\n\n var blockLeft = posX + el.getBoundingClientRect().left;\n var blockWidth = el.clientWidth || el.offsetWidth || el.scrollWidth;\n\n // apparently parallax equation everyone uses\n var percentageY = dataPercentage ? dataPercentage : (posY - blockTop + screenY) / (blockHeight + screenY);\n var percentageX = dataPercentage ? dataPercentage : (posX - blockLeft + screenX) / (blockWidth + screenX);\n if(self.options.center){ percentageX = 0.5; percentageY = 0.5; }\n\n // Optional individual block speed as data attr, otherwise global speed\n var speed = (breakpoints && mapBreakpoints[currentBreakpoint] !== null) ? Number(mapBreakpoints[currentBreakpoint]) : (dataSpeed ? dataSpeed : self.options.speed);\n var verticalSpeed = dataVerticalSpeed ? dataVerticalSpeed : self.options.verticalSpeed;\n var horizontalSpeed = dataHorizontalSpeed ? dataHorizontalSpeed : self.options.horizontalSpeed;\n\n // Optional individual block movement axis direction as data attr, otherwise gobal movement direction\n var verticalScrollAxis = dataVericalScrollAxis ? dataVericalScrollAxis : self.options.verticalScrollAxis;\n var horizontalScrollAxis = dataHorizontalScrollAxis ? dataHorizontalScrollAxis : self.options.horizontalScrollAxis;\n\n var bases = updatePosition(percentageX, percentageY, speed, verticalSpeed, horizontalSpeed);\n\n // ~~Store non-translate3d transforms~~\n // Store inline styles and extract transforms\n var style = el.style.cssText;\n var transform = '';\n\n // Check if there's an inline styled transform\n var searchResult = /transform\\s*:/i.exec(style);\n if (searchResult) {\n // Get the index of the transform\n var index = searchResult.index;\n\n // Trim the style to the transform point and get the following semi-colon index\n var trimmedStyle = style.slice(index);\n var delimiter = trimmedStyle.indexOf(';');\n\n // Remove \"transform\" string and save the attribute\n if (delimiter) {\n transform = \" \" + trimmedStyle.slice(11, delimiter).replace(/\\s/g,'');\n } else {\n transform = \" \" + trimmedStyle.slice(11).replace(/\\s/g,'');\n }\n }\n\n return {\n baseX: bases.x,\n baseY: bases.y,\n top: blockTop,\n left: blockLeft,\n height: blockHeight,\n width: blockWidth,\n speed: speed,\n verticalSpeed: verticalSpeed,\n horizontalSpeed: horizontalSpeed,\n verticalScrollAxis: verticalScrollAxis,\n horizontalScrollAxis: horizontalScrollAxis,\n style: style,\n transform: transform,\n zindex: dataZindex,\n min: dataMin,\n max: dataMax,\n minX: dataMinX,\n maxX: dataMaxX,\n minY: dataMinY,\n maxY: dataMaxY\n };\n };\n\n // set scroll position (posY, posX)\n // side effect method is not ideal, but okay for now\n // returns true if the scroll changed, false if nothing happened\n var setPosition = function() {\n var oldY = posY;\n var oldX = posX;\n\n posY = self.options.wrapper ? self.options.wrapper.scrollTop : (document.documentElement || document.body.parentNode || document.body).scrollTop || window.pageYOffset;\n posX = self.options.wrapper ? self.options.wrapper.scrollLeft : (document.documentElement || document.body.parentNode || document.body).scrollLeft || window.pageXOffset;\n // If option relativeToWrapper is true, use relative wrapper value instead.\n if (self.options.relativeToWrapper) {\n var scrollPosY = (document.documentElement || document.body.parentNode || document.body).scrollTop || window.pageYOffset;\n posY = scrollPosY - self.options.wrapper.offsetTop;\n }\n\n\n if (oldY != posY && self.options.vertical) {\n // scroll changed, return true\n return true;\n }\n\n if (oldX != posX && self.options.horizontal) {\n // scroll changed, return true\n return true;\n }\n\n // scroll did not change\n return false;\n };\n\n // Ahh a pure function, gets new transform value\n // based on scrollPosition and speed\n // Allow for decimal pixel values\n var updatePosition = function(percentageX, percentageY, speed, verticalSpeed, horizontalSpeed) {\n var result = {};\n var valueX = ((horizontalSpeed ? horizontalSpeed : speed) * (100 * (1 - percentageX)));\n var valueY = ((verticalSpeed ? verticalSpeed : speed) * (100 * (1 - percentageY)));\n\n result.x = self.options.round ? Math.round(valueX) : Math.round(valueX * 100) / 100;\n result.y = self.options.round ? Math.round(valueY) : Math.round(valueY * 100) / 100;\n\n return result;\n };\n\n // Remove event listeners and loop again\n var deferredUpdate = function() {\n window.removeEventListener('resize', deferredUpdate);\n window.removeEventListener('orientationchange', deferredUpdate);\n (self.options.wrapper ? self.options.wrapper : window).removeEventListener('scroll', deferredUpdate);\n (self.options.wrapper ? self.options.wrapper : document).removeEventListener('touchmove', deferredUpdate);\n\n // loop again\n loopId = loop(update);\n };\n\n // Loop\n var update = function() {\n if (setPosition() && pause === false) {\n animate();\n\n // loop again\n loopId = loop(update);\n } else {\n loopId = null;\n\n // Don't animate until we get a position updating event\n window.addEventListener('resize', deferredUpdate);\n window.addEventListener('orientationchange', deferredUpdate);\n (self.options.wrapper ? self.options.wrapper : window).addEventListener('scroll', deferredUpdate, supportsPassive ? { passive: true } : false);\n (self.options.wrapper ? self.options.wrapper : document).addEventListener('touchmove', deferredUpdate, supportsPassive ? { passive: true } : false);\n }\n };\n\n // Transform3d on parallax element\n var animate = function() {\n var positions;\n for (var i = 0; i < self.elems.length; i++){\n // Determine relevant movement directions\n var verticalScrollAxis = blocks[i].verticalScrollAxis.toLowerCase();\n var horizontalScrollAxis = blocks[i].horizontalScrollAxis.toLowerCase();\n var verticalScrollX = verticalScrollAxis.indexOf(\"x\") != -1 ? posY : 0;\n var verticalScrollY = verticalScrollAxis.indexOf(\"y\") != -1 ? posY : 0;\n var horizontalScrollX = horizontalScrollAxis.indexOf(\"x\") != -1 ? posX : 0;\n var horizontalScrollY = horizontalScrollAxis.indexOf(\"y\") != -1 ? posX : 0;\n\n var percentageY = ((verticalScrollY + horizontalScrollY - blocks[i].top + screenY) / (blocks[i].height + screenY));\n var percentageX = ((verticalScrollX + horizontalScrollX - blocks[i].left + screenX) / (blocks[i].width + screenX));\n\n // Subtracting initialize value, so element stays in same spot as HTML\n positions = updatePosition(percentageX, percentageY, blocks[i].speed, blocks[i].verticalSpeed, blocks[i].horizontalSpeed);\n var positionY = positions.y - blocks[i].baseY;\n var positionX = positions.x - blocks[i].baseX;\n\n // The next two \"if\" blocks go like this:\n // Check if a limit is defined (first \"min\", then \"max\");\n // Check if we need to change the Y or the X\n // (Currently working only if just one of the axes is enabled)\n // Then, check if the new position is inside the allowed limit\n // If so, use new position. If not, set position to limit.\n\n // Check if a min limit is defined\n if (blocks[i].min !== null) {\n if (self.options.vertical && !self.options.horizontal) {\n positionY = positionY <= blocks[i].min ? blocks[i].min : positionY;\n }\n if (self.options.horizontal && !self.options.vertical) {\n positionX = positionX <= blocks[i].min ? blocks[i].min : positionX;\n }\n }\n\n // Check if directional min limits are defined\n if (blocks[i].minY != null) {\n positionY = positionY <= blocks[i].minY ? blocks[i].minY : positionY;\n }\n if (blocks[i].minX != null) {\n positionX = positionX <= blocks[i].minX ? blocks[i].minX : positionX;\n }\n\n // Check if a max limit is defined\n if (blocks[i].max !== null) {\n if (self.options.vertical && !self.options.horizontal) {\n positionY = positionY >= blocks[i].max ? blocks[i].max : positionY;\n }\n if (self.options.horizontal && !self.options.vertical) {\n positionX = positionX >= blocks[i].max ? blocks[i].max : positionX;\n }\n }\n\n // Check if directional max limits are defined\n if (blocks[i].maxY != null) {\n positionY = positionY >= blocks[i].maxY ? blocks[i].maxY : positionY;\n }\n if (blocks[i].maxX != null) {\n positionX = positionX >= blocks[i].maxX ? blocks[i].maxX : positionX;\n }\n\n var zindex = blocks[i].zindex;\n\n // Move that element\n // (Set the new translation and append initial inline transforms.)\n var translate = 'translate3d(' + (self.options.horizontal ? positionX : '0') + 'px,' + (self.options.vertical ? positionY : '0') + 'px,' + zindex + 'px) ' + blocks[i].transform;\n self.elems[i].style[transformProp] = translate;\n }\n self.options.callback(positions);\n };\n\n self.destroy = function() {\n for (var i = 0; i < self.elems.length; i++){\n self.elems[i].style.cssText = blocks[i].style;\n }\n\n // Remove resize event listener if not pause, and pause\n if (!pause) {\n window.removeEventListener('resize', init);\n pause = true;\n }\n\n // Clear the animation loop to prevent possible memory leak\n clearLoop(loopId);\n loopId = null;\n };\n\n // Init\n init();\n\n // Allow to recalculate the initial values whenever we want\n self.refresh = init;\n\n return self;\n };\n return Rellax;\n}));\n","import * as variables from '../utils/variables';\r\nimport Rellax from \"rellax\";\r\nimport { onWindowResize, currentWindowWidth } from '../utils/windowResize';\r\n\r\nexport function initRellaxJs () {\r\n let rellaxSelector = '.rellax';\r\n if (variables.header && variables.header.offsetHeight > variables.windowHeight) {\r\n rellaxSelector = '.rellax:not(.header)';\r\n }\r\n\r\n var rellax = new Rellax(rellaxSelector);\r\n onWindowResize((() => {\r\n if (currentWindowWidth > 480 && currentWindowWidth < 768) {\r\n rellax.destroy();\r\n } else {\r\n rellax.refresh();\r\n }\r\n }));\r\n}\r\n\r\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n(function() {\n'use strict';\n\n// Exit early if we're not running in a browser.\nif (typeof window !== 'object') {\n return;\n}\n\n// Exit early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n\n/**\n * A local reference to the document.\n */\nvar document = window.document;\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = entry.rootBounds;\n this.boundingClientRect = entry.boundingClientRect;\n this.intersectionRect = entry.intersectionRect || getEmptyRect();\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (options.root && options.root.nodeType != 1) {\n throw new Error('root must be an Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections();\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n\n return item.element != target;\n });\n if (!this._observationTargets.length) {\n this._unmonitorIntersections();\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n if (!this._monitoringIntersections) {\n this._monitoringIntersections = true;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n this._monitoringInterval = setInterval(\n this._checkForIntersections, this.POLL_INTERVAL);\n }\n else {\n addEvent(window, 'resize', this._checkForIntersections, true);\n addEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n this._domObserver = new MutationObserver(this._checkForIntersections);\n this._domObserver.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n if (this._monitoringIntersections) {\n this._monitoringIntersections = false;\n\n clearInterval(this._monitoringInterval);\n this._monitoringInterval = null;\n\n removeEvent(window, 'resize', this._checkForIntersections, true);\n removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this._domObserver) {\n this._domObserver.disconnect();\n this._domObserver = null;\n }\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, rootRect);\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootRect,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, rootRect) {\n\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var targetRect = getBoundingClientRect(target);\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return;\n\n if (parent == this.root || parent == document) {\n atRoot = true;\n parentRect = rootRect;\n } else {\n // If the element has a non-visible overflow, and it's not the \n // or element, update the intersection rect.\n // Note: and cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n if (parent != document.body &&\n parent != document.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n if (!intersectionRect) break;\n }\n parent = getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use / instead of window since scroll bars affect size.\n var html = document.documentElement;\n var body = document.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detatchEvent == 'function') {\n node.detatchEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n * is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n\n if (parent && parent.assignedSlot) {\n // If the parent is distributed in a , return the parent of a slot.\n return parent.assignedSlot.parentNode;\n }\n\n return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}());\n","import { setupReadmore } from './utils/helpers';\r\nimport { onReady } from \"./utils/onReady\";\r\nimport { initScrollHeader } from \"./utils/scrollPosition\";\r\n// import {setupBgPlayButtons} from \"./modules/video\";\r\n// import {setupFilters} from \"./modules/filter\";\r\nimport * as navigation from \"./modules/navigation\";\r\nimport * as faq from \"./modules/faq\";\r\nimport * as logo from \"./modules/logo\";\r\n// import Rellax from \"rellax\";\r\nimport sal from 'sal.js';\r\n// import * as form from './modules/form';\r\nimport { onWindowResize, currentWindowWidth, initWindowResize } from './utils/windowResize';\r\nimport { initAnchorLinkScroll, initScrollByUrlHash } from './modules/anchors';\r\nimport { initRellaxJs } from './modules/rellax';\r\nimport \"intersection-observer\";\r\n\r\n\r\nonReady(() => {\r\n initWindowResize();\r\n\r\n setTimeout(() => {\r\n document.body.classList.remove(\"loading\");\r\n }, 250);\r\n\r\n // setupBgPlayButtons();\r\n // setupReadmore();\r\n // setupFilters();\r\n navigation.init();\r\n\r\n logo.change();\r\n \r\n \r\n faq.initFaq();\r\n\r\n\r\n initScrollHeader;\r\n\r\n // form.init();\r\n sal({\r\n threshold: .2,\r\n });\r\n initAnchorLinkScroll();\r\n initScrollByUrlHash();\r\n initRellaxJs();\r\n});\r\n","\r\nexport function change() {\r\n\r\n\r\n const options = {\r\n root: document.body, // The document viewport (default)\r\n rootMargin: '0px', // No offset from the root element (default)\r\n threshold: 1.0, // Full intersection into the root element\r\n };\r\n\r\n const stickyContainers = document.querySelectorAll('.bg__change');\r\n const io_options = {\r\n root: document.html,\r\n rootMargin: '0px 0px -90% 0px',\r\n threshold: 0\r\n };\r\n const io_observer = new IntersectionObserver(io_callback, io_options);\r\n\r\n\r\n\r\n function io_callback(entries, observer) {\r\n entries.forEach(entry => {\r\n\r\n if (entry.isIntersecting) {\r\n // console.log(entry.target.getAttribute('data-bg-color'));\r\n if (entry.target.getAttribute('data-bg-color') == 'teal') {\r\n // console.log('add');\r\n document.body.classList.add('l__teal');\r\n }\r\n else {\r\n // console.log('remove');\r\n document.body.classList.remove('l__teal');\r\n\r\n }\r\n }\r\n });\r\n }\r\n\r\n stickyContainers.forEach(element => {\r\n io_observer.observe(element);\r\n });\r\n\r\n}\r\n","// import { cssAnimateNewHeight } from '../utils/helpers';\r\n\r\nexport function initFaq() {\r\n\r\n\r\n function slidetoggle() {\r\n\r\n document.querySelectorAll(this.getAttribute('data-slidetoggle')).forEach(el => {\r\n\r\n\r\n const ch = el.clientHeight,\r\n sh = el.scrollHeight,\r\n isCollapsed = !ch,\r\n noHeightSet = !el.style.height;\r\n\r\n el.style.height = (isCollapsed || noHeightSet ? sh : 0) + \"px\";\r\n if (noHeightSet) return slidetoggle.call(this);\r\n // console.log(\"call\");\r\n\r\n this.classList.toggle('faq-open')\r\n\r\n // if (this.classList.contains('faq-open')) {\r\n // this.classList.remove('faq-open');\r\n // } else {\r\n // this.classList.add('faq-open');\r\n // }\r\n });\r\n\r\n }\r\n\r\n document.querySelectorAll(\"[data-slidetoggle]\").forEach(el => el.addEventListener('click', slidetoggle));\r\n}"],"names":["transitions","el","document","createElement","t","undefined","style","detectTransitionEndEventName","scrollTo","element","to","duration","start","scrollTop","change","animateScroll","elapsedTime","position","currentTime","setTimeout","functionReferences","readyState","readyEventBound","emptyCallbackArrays","length","tempArray","slice","forEach","funcRef","getElementById","getElementScroll","window","Element","Document","Window","left","pageXOffset","documentElement","scrollLeft","top","pageYOffset","scrollX","scrollY","className","currentState","disableScrollLock","scrollPosition","htmlTag","classList","remove","marginTop","overflow","width","init","navigationTakeoverToggles","querySelectorAll","navigationToggle","e","preventDefault","body","contains","add","enableScrollLock","i","addEventListener","resizeTimer","module","n","r","exports","o","l","call","m","c","d","Object","defineProperty","enumerable","get","Symbol","toStringTag","value","__esModule","create","bind","default","prototype","hasOwnProperty","p","s","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","rootMargin","threshold","animateClassName","disabledClassName","enterEventName","exitEventName","selector","once","disabled","u","f","CustomEvent","bubbles","detail","target","dispatchEvent","intersectionRatio","unobserve","disconnect","y","IntersectionObserver","observe","arguments","configurable","writable","getOwnPropertyDescriptors","defineProperties","console","warn","elements","disable","enable","Error","breakpointKeys","currentWindowWidth","innerWidth","resizeFunctions","getWindowSizes","key","index","resizeHandler","clearTimeout","scrollToElement","offsetTop","Math","max","clientWidth","functionReference","windowHeight","innerHeight","header","querySelector","root","factory","global","Rellax","options","self","posY","screenY","posX","screenX","blocks","pause","loop","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","callback","loopId","supportsPassive","opts","removeEventListener","clearLoop","cancelAnimationFrame","mozCancelAnimationFrame","transformProp","testEl","transform","vendors","vendor","speed","verticalSpeed","horizontalSpeed","breakpoints","center","wrapper","relativeToWrapper","round","vertical","horizontal","verticalScrollAxis","horizontalScrollAxis","Array","isArray","lastVal","isAscending","isNumerical","validateCustomBreakpoints","elems","nodeType","currentBreakpoint","cssText","w","bp","setPosition","block","createBlock","cacheBlocks","animate","update","mapBreakpoints","dataPercentage","getAttribute","dataSpeed","dataXsSpeed","dataMobileSpeed","dataTabletSpeed","dataDesktopSpeed","dataVerticalSpeed","dataHorizontalSpeed","dataVericalScrollAxis","dataHorizontalScrollAxis","dataZindex","dataMin","dataMax","dataMinX","dataMaxX","dataMinY","dataMaxY","xs","sm","md","lg","wrapperPosY","blockTop","getBoundingClientRect","blockHeight","clientHeight","offsetHeight","scrollHeight","blockLeft","blockWidth","offsetWidth","scrollWidth","percentageY","percentageX","Number","bases","updatePosition","searchResult","exec","trimmedStyle","delimiter","indexOf","replace","baseX","x","baseY","height","zindex","min","minX","maxX","minY","maxY","oldY","oldX","parentNode","scrollPosY","result","valueX","valueY","deferredUpdate","passive","positions","toLowerCase","verticalScrollX","verticalScrollY","horizontalScrollX","positionY","positionX","translate","destroy","refresh","initRellaxJs","rellaxSelector","variables","handler","rellax","IntersectionObserverEntry","this","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","_observationTargets","some","item","_registerInstance","entry","_monitorIntersections","_checkForIntersections","_unmonitorIntersections","_unregisterInstance","takeRecords","records","_queuedEntries","_initThresholds","opt_threshold","sort","a","isNaN","_parseRootMargin","opt_rootMargin","margins","split","map","margin","parts","parseFloat","unit","_monitoringIntersections","_monitoringInterval","setInterval","addEvent","_domObserver","MutationObserver","attributes","childList","characterData","subtree","clearInterval","removeEvent","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","bottom","right","targetRect","rootContainsTarget","_rootContainsTarget","oldEntry","intersectionRect","_computeTargetAndRootIntersection","newEntry","time","performance","now","boundingClientRect","rootBounds","_hasCrossedThreshold","isIntersecting","_callback","getComputedStyle","display","rect1","rect2","parent","getParentNode","atRoot","parentRect","parentComputedStyle","html","_expandRectByRootMargin","rect","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","targetArea","intersectionArea","toFixed","opt_options","fn","timeout","timer","join","node","event","opt_useCapture","attachEvent","detatchEvent","err","child","host","assignedSlot","stickyContainers","io_options","io_observer","navigation","entries","observer","slidetoggle","ch","sh","isCollapsed","noHeightSet","_this","toggle","faq","sal","triggerSelector","triggers","trigger","elementId","hasAttribute","initAnchorLinkScroll","location","hash","initScrollByUrlHash"],"mappings":"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"}