{"version":3,"file":"rovenblog.min.js","sources":["rovenblog.js"],"sourcesContent":["/*!\n * FlexMasonry\n * Version: 0.2.3\n * Author: Gilbert Pellegrom \n * License: MIT\n */\nvar FlexMasonry = function(e) {\n var n = {};\n\n function t(r) {\n if (n[r]) return n[r].exports;\n var o = n[r] = {\n i: r,\n l: !1,\n exports: {}\n };\n return e[r].call(o.exports, o, o.exports, t), o.l = !0, o.exports\n }\n return t.m = e, t.c = n, t.d = function(e, n, r) {\n t.o(e, n) || Object.defineProperty(e, n, {\n enumerable: !0,\n get: r\n })\n }, t.r = function(e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n })\n }, t.t = function(e, n) {\n if (1 & n && (e = t(e)), 8 & n) return e;\n if (4 & n && \"object\" == typeof e && e && e.__esModule) return e;\n var r = Object.create(null);\n if (t.r(r), Object.defineProperty(r, \"default\", {\n enumerable: !0,\n value: e\n }), 2 & n && \"string\" != typeof e)\n for (var o in e) t.d(r, o, function(n) {\n return e[n]\n }.bind(null, o));\n return r\n }, t.n = function(e) {\n var n = e && e.__esModule ? function() {\n return e.default\n } : function() {\n return e\n };\n return t.d(n, \"a\", n), n\n }, t.o = function(e, n) {\n return Object.prototype.hasOwnProperty.call(e, n)\n }, t.p = \"\", t(t.s = 0)\n}([function(e, n, t) {\n t(1), e.exports = t(2)\n}, function(e, n, t) {}, function(e, n, t) {\n \"use strict\";\n t.r(n);\n const r = {\n responsive: !0,\n breakpointCols: {\n \"min-width: 1500px\": 6,\n \"min-width: 1200px\": 5,\n \"min-width: 992px\": 4,\n \"min-width: 768px\": 3,\n \"min-width: 576px\": 2\n },\n numCols: 4\n };\n let o = null,\n i = {},\n s = [];\n\n function a() {\n s.forEach(function(e) {\n c(e)\n })\n }\n\n function l() {\n o && window.cancelAnimationFrame(o), o = window.requestAnimationFrame(function() {\n y()\n })\n }\n\n function c(e) {\n if (d() < 2) return void e.style.removeProperty(\"height\");\n let n = [];\n Array.from(e.children).forEach(function(e) {\n if (e.classList.contains(\"flexmasonry-break\")) return;\n const t = window.getComputedStyle(e),\n r = t.getPropertyValue(\"order\"),\n o = t.getPropertyValue(\"height\");\n n[r - 1] || (n[r - 1] = 0), n[r - 1] += Math.ceil(parseFloat(o))\n });\n const t = Math.max(...n);\n e.style.height = t + \"px\"\n }\n\n function f(e) {\n const n = e.querySelectorAll(\".flexmasonry-break\");\n if (Array.from(n).length !== d() - 1)\n for (let n = 1; n < d(); n++) {\n const t = document.createElement(\"div\");\n t.classList.add(\"flexmasonry-break\"), t.classList.add(\"flexmasonry-break-\" + n), e.appendChild(t)\n }\n }\n\n function u(e) {\n e.classList.contains(\"flexmasonry-cols-\" + d()) || (e.className = e.className.replace(/(flexmasonry-cols-\\d+)/, \"\"), e.classList.add(\"flexmasonry-cols-\" + d()))\n }\n\n function d() {\n if (!i.responsive) return i.numCols;\n const e = Object.keys(i.breakpointCols);\n for (const n of e)\n if (window.matchMedia(\"(\" + n + \")\").matches) return i.breakpointCols[n];\n return 1\n }\n\n function m(e, n = {}) {\n return i = Object.assign(r, n), u(e),\n function(e) {\n const n = e.querySelectorAll(\".flexmasonry-break\");\n Array.from(n).length !== d() - 1 && Array.from(n).forEach(function(e) {\n e.parentNode.removeChild(e)\n })\n }(e), f(e), c(e), this\n }\n\n function y(e = {}) {\n return s.forEach(function(n) {\n m(n, e)\n }), this\n }\n n.default = {\n init: function(e, n = {}) {\n return s = \"string\" == typeof e ? document.querySelectorAll(e) : e, i = Object.assign(r, n), s.forEach(function(e) {\n ! function(e) {\n e.classList.add(\"flexmasonry\"), i.responsive && e.classList.add(\"flexmasonry-responsive\"), u(e), Array.from(e.children).forEach(function(e) {\n e.classList.add(\"flexmasonry-item\")\n }), f(e)\n }(e), c(e)\n }), window.addEventListener(\"load\", a), window.addEventListener(\"resize\", l), this\n },\n refresh: m,\n refreshAll: y,\n destroyAll: function() {\n window.removeEventListener(\"load\", a), window.removeEventListener(\"resize\", l)\n }\n }\n}]).default;\n/**\n stickybits - Stickybits is a lightweight alternative to `position: sticky` polyfills\n @version v3.7.11\n @link https://github.com/yowainwright/stickybits#readme\n @author Jeff Wainwright (https://jeffry.in)\n @license MIT\n**/\n(function (factory) {\n typeof define === 'function' && define.amd ? define(factory) :\n factory();\n}((function () { 'use strict';\n\n function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n }\n\n /*\n STICKYBITS πŸ’‰\n --------\n > a lightweight alternative to `position: sticky` polyfills 🍬\n --------\n - each method is documented above it our view the readme\n - Stickybits does not manage polymorphic functionality (position like properties)\n * polymorphic functionality: (in the context of describing Stickybits)\n means making things like `position: sticky` be loosely supported with position fixed.\n It also means that features like `useStickyClasses` takes on styles like `position: fixed`.\n --------\n defaults πŸ”Œ\n --------\n - version = `package.json` version\n - userAgent = viewer browser agent\n - target = DOM element selector\n - noStyles = boolean\n - offset = number\n - parentClass = 'string'\n - scrollEl = window || DOM element selector || DOM element\n - stickyClass = 'string'\n - stuckClass = 'string'\n - useStickyClasses = boolean\n - useFixed = boolean\n - useGetBoundingClientRect = boolean\n - verticalPosition = 'string'\n - applyStyle = function\n --------\n propsπŸ”Œ\n --------\n - p = props {object}\n --------\n instance note\n --------\n - stickybits parent methods return this\n - stickybits instance methods return an instance item\n --------\n nomenclature\n --------\n - target => el => e\n - props => o || p\n - instance => item => it\n --------\n methods\n --------\n - .definePosition = defines sticky or fixed\n - .addInstance = an array of objects for each Stickybits Target\n - .getClosestParent = gets the parent for non-window scroll\n - .getTopPosition = gets the element top pixel position from the viewport\n - .computeScrollOffsets = computes scroll position\n - .toggleClasses = older browser toggler\n - .manageState = manages sticky state\n - .removeInstance = removes an instance\n - .cleanup = removes all Stickybits instances and cleans up dom from stickybits\n */\n var Stickybits = /*#__PURE__*/function () {\n function Stickybits(target, obj) {\n var _this = this;\n\n var o = typeof obj !== 'undefined' ? obj : {};\n this.version = '3.7.11';\n this.userAgent = window.navigator.userAgent || 'no `userAgent` provided by the browser';\n this.props = {\n customStickyChangeNumber: o.customStickyChangeNumber || null,\n noStyles: o.noStyles || false,\n stickyBitStickyOffset: o.stickyBitStickyOffset || 0,\n parentClass: o.parentClass || 'js-stickybit-parent',\n scrollEl: typeof o.scrollEl === 'string' ? document.querySelector(o.scrollEl) : o.scrollEl || window,\n stickyClass: o.stickyClass || 'js-is-sticky',\n stuckClass: o.stuckClass || 'js-is-stuck',\n stickyChangeClass: o.stickyChangeClass || 'js-is-sticky--change',\n useStickyClasses: o.useStickyClasses || false,\n useFixed: o.useFixed || false,\n useGetBoundingClientRect: o.useGetBoundingClientRect || false,\n verticalPosition: o.verticalPosition || 'top',\n applyStyle: o.applyStyle || function (item, style) {\n return _this.applyStyle(item, style);\n }\n };\n /*\n define positionVal after the setting of props, because definePosition looks at the props.useFixed\n ----\n - uses a computed (`.definePosition()`)\n - defined the position\n */\n\n this.props.positionVal = this.definePosition() || 'fixed';\n this.instances = [];\n var _this$props = this.props,\n positionVal = _this$props.positionVal,\n verticalPosition = _this$props.verticalPosition,\n noStyles = _this$props.noStyles,\n stickyBitStickyOffset = _this$props.stickyBitStickyOffset;\n var verticalPositionStyle = verticalPosition === 'top' && !noStyles ? stickyBitStickyOffset + \"px\" : '';\n var positionStyle = positionVal !== 'fixed' ? positionVal : '';\n this.els = typeof target === 'string' ? document.querySelectorAll(target) : target;\n if (!('length' in this.els)) this.els = [this.els];\n\n for (var i = 0; i < this.els.length; i++) {\n var _styles;\n\n var el = this.els[i];\n var instance = this.addInstance(el, this.props); // set vertical position\n\n this.props.applyStyle({\n styles: (_styles = {}, _styles[verticalPosition] = verticalPositionStyle, _styles.position = positionStyle, _styles),\n classes: {}\n }, instance);\n this.manageState(instance); // instances are an array of objects\n\n this.instances.push(instance);\n }\n }\n /*\n setStickyPosition βœ”οΈ\n --------\n β€” most basic thing stickybits does\n => checks to see if position sticky is supported\n => defined the position to be used\n => stickybits works accordingly\n */\n\n\n var _proto = Stickybits.prototype;\n\n _proto.definePosition = function definePosition() {\n var stickyProp;\n\n if (this.props.useFixed) {\n stickyProp = 'fixed';\n } else {\n var prefix = ['', '-o-', '-webkit-', '-moz-', '-ms-'];\n var test = document.head.style;\n\n for (var i = 0; i < prefix.length; i += 1) {\n test.position = prefix[i] + \"sticky\";\n }\n\n stickyProp = test.position ? test.position : 'fixed';\n test.position = '';\n }\n\n return stickyProp;\n }\n /*\n addInstance βœ”οΈ\n --------\n β€” manages instances of items\n - takes in an el and props\n - returns an item object\n ---\n - target = el\n - o = {object} = props\n - scrollEl = 'string' | object\n - verticalPosition = number\n - off = boolean\n - parentClass = 'string'\n - stickyClass = 'string'\n - stuckClass = 'string'\n ---\n - defined later\n - parent = dom element\n - state = 'string'\n - offset = number\n - stickyStart = number\n - stickyStop = number\n - returns an instance object\n */\n ;\n\n _proto.addInstance = function addInstance(el, props) {\n var _this2 = this;\n\n var item = {\n el: el,\n parent: el.parentNode,\n props: props\n };\n\n if (props.positionVal === 'fixed' || props.useStickyClasses) {\n this.isWin = this.props.scrollEl === window;\n var se = this.isWin ? window : this.getClosestParent(item.el, item.props.scrollEl);\n this.computeScrollOffsets(item);\n this.toggleClasses(item.parent, '', props.parentClass);\n item.state = 'default';\n item.stateChange = 'default';\n\n item.stateContainer = function () {\n return _this2.manageState(item);\n };\n\n se.addEventListener('scroll', item.stateContainer);\n }\n\n return item;\n }\n /*\n --------\n getParent πŸ‘¨β€\n --------\n - a helper function that gets the target element's parent selected el\n - only used for non `window` scroll elements\n - supports older browsers\n */\n ;\n\n _proto.getClosestParent = function getClosestParent(el, match) {\n // p = parent element\n var p = match;\n var e = el;\n if (e.parentElement === p) return p; // traverse up the dom tree until we get to the parent\n\n while (e.parentElement !== p) {\n e = e.parentElement;\n } // return parent element\n\n\n return p;\n }\n /*\n --------\n getTopPosition\n --------\n - a helper function that gets the topPosition of a Stickybit element\n - from the top level of the DOM\n */\n ;\n\n _proto.getTopPosition = function getTopPosition(el) {\n if (this.props.useGetBoundingClientRect) {\n return el.getBoundingClientRect().top + (this.props.scrollEl.pageYOffset || document.documentElement.scrollTop);\n }\n\n var topPosition = 0;\n\n do {\n topPosition = el.offsetTop + topPosition;\n } while (el = el.offsetParent);\n\n return topPosition;\n }\n /*\n computeScrollOffsets πŸ“Š\n ---\n computeScrollOffsets for Stickybits\n - defines\n - offset\n - start\n - stop\n */\n ;\n\n _proto.computeScrollOffsets = function computeScrollOffsets(item) {\n var it = item;\n var p = it.props;\n var el = it.el;\n var parent = it.parent;\n var isCustom = !this.isWin && p.positionVal === 'fixed';\n var isTop = p.verticalPosition !== 'bottom';\n var scrollElOffset = isCustom ? this.getTopPosition(p.scrollEl) : 0;\n var stickyStart = isCustom ? this.getTopPosition(parent) - scrollElOffset : this.getTopPosition(parent);\n var stickyChangeOffset = p.customStickyChangeNumber !== null ? p.customStickyChangeNumber : el.offsetHeight;\n var parentBottom = stickyStart + parent.offsetHeight;\n it.offset = !isCustom ? scrollElOffset + p.stickyBitStickyOffset : 0;\n it.stickyStart = isTop ? stickyStart - it.offset : 0;\n it.stickyChange = it.stickyStart + stickyChangeOffset;\n it.stickyStop = isTop ? parentBottom - (el.offsetHeight + it.offset) : parentBottom - window.innerHeight;\n }\n /*\n toggleClasses βš–οΈ\n ---\n toggles classes (for older browser support)\n r = removed class\n a = added class\n */\n ;\n\n _proto.toggleClasses = function toggleClasses(el, r, a) {\n var e = el;\n var cArray = e.className.split(' ');\n if (a && cArray.indexOf(a) === -1) cArray.push(a);\n var rItem = cArray.indexOf(r);\n if (rItem !== -1) cArray.splice(rItem, 1);\n e.className = cArray.join(' ');\n }\n /*\n manageState πŸ“\n ---\n - defines the state\n - normal\n - sticky\n - stuck\n */\n ;\n\n _proto.manageState = function manageState(item) {\n var _this3 = this;\n\n // cache object\n var it = item;\n var p = it.props;\n var state = it.state;\n var stateChange = it.stateChange;\n var start = it.stickyStart;\n var change = it.stickyChange;\n var stop = it.stickyStop; // cache props\n\n var pv = p.positionVal;\n var se = p.scrollEl;\n var sticky = p.stickyClass;\n var stickyChange = p.stickyChangeClass;\n var stuck = p.stuckClass;\n var vp = p.verticalPosition;\n var isTop = vp !== 'bottom';\n var aS = p.applyStyle;\n var ns = p.noStyles;\n /*\n requestAnimationFrame\n ---\n - use rAF\n - or stub rAF\n */\n\n var rAFStub = function rAFDummy(f) {\n f();\n };\n\n var rAF = !this.isWin ? rAFStub : window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || rAFStub;\n /*\n define scroll vars\n ---\n - scroll\n - notSticky\n - isSticky\n - isStuck\n */\n\n var scroll = this.isWin ? window.scrollY || window.pageYOffset : se.scrollTop;\n var notSticky = scroll > start && scroll < stop && (state === 'default' || state === 'stuck');\n var isSticky = isTop && scroll <= start && (state === 'sticky' || state === 'stuck');\n var isStuck = scroll >= stop && state === 'sticky';\n /*\n Unnamed arrow functions within this block\n ---\n - help wanted or discussion\n - view test.stickybits.js\n - `stickybits .manageState `position: fixed` interface` for more awareness πŸ‘€\n */\n\n if (notSticky) {\n it.state = 'sticky';\n } else if (isSticky) {\n it.state = 'default';\n } else if (isStuck) {\n it.state = 'stuck';\n }\n\n var isStickyChange = scroll >= change && scroll <= stop;\n var isNotStickyChange = scroll < change / 2 || scroll > stop;\n\n if (isNotStickyChange) {\n it.stateChange = 'default';\n } else if (isStickyChange) {\n it.stateChange = 'sticky';\n } // Only apply new styles if the state has changed\n\n\n if (state === it.state && stateChange === it.stateChange) return;\n rAF(function () {\n var _styles2, _classes, _styles3, _extends2, _classes2, _style$classes;\n\n var stateStyles = {\n sticky: {\n styles: (_styles2 = {\n position: pv,\n top: '',\n bottom: ''\n }, _styles2[vp] = p.stickyBitStickyOffset + \"px\", _styles2),\n classes: (_classes = {}, _classes[sticky] = true, _classes)\n },\n default: {\n styles: (_styles3 = {}, _styles3[vp] = '', _styles3),\n classes: {}\n },\n stuck: {\n styles: _extends((_extends2 = {}, _extends2[vp] = '', _extends2), pv === 'fixed' && !ns || !_this3.isWin ? {\n position: 'absolute',\n top: '',\n bottom: '0'\n } : {}),\n classes: (_classes2 = {}, _classes2[stuck] = true, _classes2)\n }\n };\n\n if (pv === 'fixed') {\n stateStyles.default.styles.position = '';\n }\n\n var style = stateStyles[it.state];\n style.classes = (_style$classes = {}, _style$classes[stuck] = !!style.classes[stuck], _style$classes[sticky] = !!style.classes[sticky], _style$classes[stickyChange] = isStickyChange, _style$classes);\n aS(style, item);\n });\n }\n /*\n applyStyle\n ---\n - apply the given styles and classes to the element\n */\n ;\n\n _proto.applyStyle = function applyStyle(_ref, item) {\n var styles = _ref.styles,\n classes = _ref.classes;\n // cache object\n var it = item;\n var e = it.el;\n var p = it.props;\n var stl = e.style; // cache props\n\n var ns = p.noStyles;\n var cArray = e.className.split(' '); // Disable due to bug with old versions of eslint-scope and for ... in\n // https://github.com/eslint/eslint/issues/12117\n // eslint-disable-next-line no-unused-vars\n\n for (var cls in classes) {\n var addClass = classes[cls];\n\n if (addClass) {\n if (cArray.indexOf(cls) === -1) cArray.push(cls);\n } else {\n var idx = cArray.indexOf(cls);\n if (idx !== -1) cArray.splice(idx, 1);\n }\n }\n\n e.className = cArray.join(' ');\n\n if (styles['position']) {\n stl['position'] = styles['position'];\n }\n\n if (ns) return; // eslint-disable-next-line no-unused-vars\n\n for (var key in styles) {\n stl[key] = styles[key];\n }\n };\n\n _proto.update = function update(updatedProps) {\n var _this4 = this;\n\n if (updatedProps === void 0) {\n updatedProps = null;\n }\n\n this.instances.forEach(function (instance) {\n _this4.computeScrollOffsets(instance);\n\n if (updatedProps) {\n // eslint-disable-next-line no-unused-vars\n for (var updatedProp in updatedProps) {\n instance.props[updatedProp] = updatedProps[updatedProp];\n }\n }\n });\n return this;\n }\n /*\n removes an instance πŸ‘‹\n --------\n - cleanup instance\n */\n ;\n\n _proto.removeInstance = function removeInstance(instance) {\n var _styles4, _classes3;\n\n var e = instance.el;\n var p = instance.props;\n this.applyStyle({\n styles: (_styles4 = {\n position: ''\n }, _styles4[p.verticalPosition] = '', _styles4),\n classes: (_classes3 = {}, _classes3[p.stickyClass] = '', _classes3[p.stuckClass] = '', _classes3)\n }, instance);\n this.toggleClasses(e.parentNode, p.parentClass);\n }\n /*\n cleanup πŸ›\n --------\n - cleans up each instance\n - clears instance\n */\n ;\n\n _proto.cleanup = function cleanup() {\n for (var i = 0; i < this.instances.length; i += 1) {\n var instance = this.instances[i];\n\n if (instance.stateContainer) {\n instance.props.scrollEl.removeEventListener('scroll', instance.stateContainer);\n }\n\n this.removeInstance(instance);\n }\n\n this.manageState = false;\n this.instances = [];\n };\n\n return Stickybits;\n }();\n /*\n export\n --------\n exports StickBits to be used 🏁\n */\n\n\n function stickybits(target, o) {\n return new Stickybits(target, o);\n }\n\n if (typeof window !== 'undefined') {\n var plugin = window.$ || window.jQuery || window.Zepto;\n\n if (plugin) {\n plugin.fn.stickybits = function stickybitsPlugin(opts) {\n return stickybits(this, opts);\n };\n }\n }\n\n})));\n\n/*! lozad.js - v1.16.0 - 2020-09-10\n* https://github.com/ApoorvSaxena/lozad.js\n* Copyright (c) 2020 Apoorv Saxena; Licensed MIT */\n\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.lozad = factory());\n}(this, (function () { 'use strict';\n\n /**\n * Detect IE browser\n * @const {boolean}\n * @private\n */\n var isIE = typeof document !== 'undefined' && document.documentMode;\n\n /**\n *\n * @param {string} type\n *\n */\n var support = function support(type) {\n return window && window[type];\n };\n\n var validAttribute = ['data-iesrc', 'data-alt', 'data-src', 'data-srcset', 'data-background-image', 'data-toggle-class'];\n\n var defaultConfig = {\n rootMargin: '0px',\n threshold: 0,\n enableAutoReload: false,\n load: function load(element) {\n if (element.nodeName.toLowerCase() === 'picture') {\n var img = element.querySelector('img');\n var append = false;\n\n if (img === null) {\n img = document.createElement('img');\n append = true;\n }\n\n if (isIE && element.getAttribute('data-iesrc')) {\n img.src = element.getAttribute('data-iesrc');\n }\n\n if (element.getAttribute('data-alt')) {\n img.alt = element.getAttribute('data-alt');\n }\n\n if (append) {\n element.append(img);\n }\n }\n\n if (element.nodeName.toLowerCase() === 'video' && !element.getAttribute('data-src')) {\n if (element.children) {\n var childs = element.children;\n var childSrc = void 0;\n for (var i = 0; i <= childs.length - 1; i++) {\n childSrc = childs[i].getAttribute('data-src');\n if (childSrc) {\n childs[i].src = childSrc;\n }\n }\n\n element.load();\n }\n }\n\n if (element.getAttribute('data-poster')) {\n element.poster = element.getAttribute('data-poster');\n }\n\n if (element.getAttribute('data-src')) {\n element.src = element.getAttribute('data-src');\n }\n\n if (element.getAttribute('data-srcset')) {\n element.setAttribute('srcset', element.getAttribute('data-srcset'));\n }\n\n var backgroundImageDelimiter = ',';\n if (element.getAttribute('data-background-delimiter')) {\n backgroundImageDelimiter = element.getAttribute('data-background-delimiter');\n }\n\n if (element.getAttribute('data-background-image')) {\n element.style.backgroundImage = 'url(\\'' + element.getAttribute('data-background-image').split(backgroundImageDelimiter).join('\\'),url(\\'') + '\\')';\n } else if (element.getAttribute('data-background-image-set')) {\n var imageSetLinks = element.getAttribute('data-background-image-set').split(backgroundImageDelimiter);\n var firstUrlLink = imageSetLinks[0].substr(0, imageSetLinks[0].indexOf(' ')) || imageSetLinks[0]; // Substring before ... 1x\n firstUrlLink = firstUrlLink.indexOf('url(') === -1 ? 'url(' + firstUrlLink + ')' : firstUrlLink;\n if (imageSetLinks.length === 1) {\n element.style.backgroundImage = firstUrlLink;\n } else {\n element.setAttribute('style', (element.getAttribute('style') || '') + ('background-image: ' + firstUrlLink + '; background-image: -webkit-image-set(' + imageSetLinks + '); background-image: image-set(' + imageSetLinks + ')'));\n }\n }\n\n if (element.getAttribute('data-toggle-class')) {\n element.classList.toggle(element.getAttribute('data-toggle-class'));\n }\n },\n loaded: function loaded() {}\n };\n\n function markAsLoaded(element) {\n element.setAttribute('data-loaded', true);\n }\n\n function preLoad(element) {\n if (element.getAttribute('data-placeholder-background')) {\n element.style.background = element.getAttribute('data-placeholder-background');\n }\n }\n\n var isLoaded = function isLoaded(element) {\n return element.getAttribute('data-loaded') === 'true';\n };\n\n var onIntersection = function onIntersection(load, loaded) {\n return function (entries, observer) {\n entries.forEach(function (entry) {\n if (entry.intersectionRatio > 0 || entry.isIntersecting) {\n observer.unobserve(entry.target);\n\n if (!isLoaded(entry.target)) {\n load(entry.target);\n markAsLoaded(entry.target);\n loaded(entry.target);\n }\n }\n });\n };\n };\n\n var onMutation = function onMutation(load) {\n return function (entries) {\n entries.forEach(function (entry) {\n if (isLoaded(entry.target) && entry.type === 'attributes' && validAttribute.indexOf(entry.attributeName) > -1) {\n load(entry.target);\n }\n });\n };\n };\n\n var getElements = function getElements(selector) {\n var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n\n if (selector instanceof Element) {\n return [selector];\n }\n\n if (selector instanceof NodeList) {\n return selector;\n }\n\n return root.querySelectorAll(selector);\n };\n\n function lozad () {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.lozad';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var _Object$assign = Object.assign({}, defaultConfig, options),\n root = _Object$assign.root,\n rootMargin = _Object$assign.rootMargin,\n threshold = _Object$assign.threshold,\n enableAutoReload = _Object$assign.enableAutoReload,\n load = _Object$assign.load,\n loaded = _Object$assign.loaded;\n\n var observer = void 0;\n var mutationObserver = void 0;\n if (support('IntersectionObserver')) {\n observer = new IntersectionObserver(onIntersection(load, loaded), {\n root: root,\n rootMargin: rootMargin,\n threshold: threshold\n });\n }\n\n if (support('MutationObserver') && enableAutoReload) {\n mutationObserver = new MutationObserver(onMutation(load, loaded));\n }\n\n var elements = getElements(selector, root);\n for (var i = 0; i < elements.length; i++) {\n preLoad(elements[i]);\n }\n\n return {\n observe: function observe() {\n var elements = getElements(selector, root);\n\n for (var _i = 0; _i < elements.length; _i++) {\n if (isLoaded(elements[_i])) {\n continue;\n }\n\n if (observer) {\n if (mutationObserver && enableAutoReload) {\n mutationObserver.observe(elements[_i], { subtree: true, attributes: true, attributeFilter: validAttribute });\n }\n\n observer.observe(elements[_i]);\n continue;\n }\n\n load(elements[_i]);\n markAsLoaded(elements[_i]);\n loaded(elements[_i]);\n }\n },\n triggerLoad: function triggerLoad(element) {\n if (isLoaded(element)) {\n return;\n }\n\n load(element);\n markAsLoaded(element);\n loaded(element);\n },\n\n observer: observer,\n mutationObserver: mutationObserver\n };\n }\n\n return lozad;\n\n})));\n\n/*\n Version: 1.8.1\n Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n Docs: http://kenwheeler.github.io/slick\n Repo: http://github.com/kenwheeler/slick\n Issues: http://github.com/kenwheeler/slick/issues\n\n */\n! function(i) {\n \"use strict\";\n \"function\" == typeof define && define.amd ? define([\"jquery\"], i) : \"undefined\" != typeof exports ? module.exports = i(require(\"jquery\")) : i(jQuery)\n}(function(i) {\n \"use strict\";\n var e = window.Slick || {};\n (e = function() {\n var e = 0;\n return function(t, o) {\n var s, n = this;\n n.defaults = {\n accessibility: !0,\n adaptiveHeight: !1,\n appendArrows: i(t),\n appendDots: i(t),\n arrows: !0,\n asNavFor: null,\n prevArrow: '',\n nextArrow: '',\n autoplay: !1,\n autoplaySpeed: 3e3,\n centerMode: !1,\n centerPadding: \"50px\",\n cssEase: \"ease\",\n customPaging: function(e, t) {\n return i('