PageSourceSearch

https://www.olfar.ind.br/wp-content/themes/alp-cody/main/assets/js/scripts.js?v=1790256400&ver=1.0

js olfar.ind.br collected 2026-09-24 13:27:07 UTC 308,644 bytes, 4,060 lines download raw bytes

1// Utility function
2function Util () {};
3
4/* 
5	class manipulation functions
6*/
7Util.hasClass = function(el, className) {
8	if (el.classList) return el.classList.contains(className);
9	else return !!el.getAttribute('class').match(new RegExp('(\\s|^)' + className + '(\\s|$)'));
10};
11
12Util.addClass = function(el, className) {
13	var classList = className.split(' ');
14 	if (el.classList) el.classList.add(classList[0]);
15  else if (!Util.hasClass(el, classList[0])) el.setAttribute('class', el.getAttribute('class') +  " " + classList[0]);
16 	if (classList.length > 1) Util.addClass(el, classList.slice(1).join(' '));
17};
18
19Util.removeClass = function(el, className) {
20	var classList = className.split(' ');
21	if (el.classList) el.classList.remove(classList[0]);	
22	else if(Util.hasClass(el, classList[0])) {
23		var reg = new RegExp('(\\s|^)' + classList[0] + '(\\s|$)');
24    el.setAttribute('class', el.getAttribute('class').replace(reg, ' '));
25	}
26	if (classList.length > 1) Util.removeClass(el, classList.slice(1).join(' '));
27};
28
29Util.toggleClass = function(el, className, bool) {
30	if(bool) Util.addClass(el, className);
31	else Util.removeClass(el, className);
32};
33
34Util.setAttributes = function(el, attrs) {
35  for(var key in attrs) {
36    el.setAttribute(key, attrs[key]);
37  }
38};
39
40/* 
41  DOM manipulation
42*/
43Util.getChildrenByClassName = function(el, className) {
44  var children = el.children,
45    childrenByClass = [];
46  for (var i = 0; i < el.children.length; i++) {
47    if (Util.hasClass(el.children[i], className)) childrenByClass.push(el.children[i]);
48  }
49  return childrenByClass;
50};
51
52Util.is = function(elem, selector) {
53  if(selector.nodeType){
54    return elem === selector;
55  }
56
57  var qa = (typeof(selector) === 'string' ? document.querySelectorAll(selector) : selector),
58    length = qa.length,
59    returnArr = [];
60
61  while(length--){
62    if(qa[length] === elem){
63      return true;
64    }
65  }
66
67  return false;
68};
69
70/* 
71	Animate height of an element
72*/
73Util.setHeight = function(start, to, element, duration, cb) {
74	var change = to - start,
75	    currentTime = null;
76
77  var animateHeight = function(timestamp){  
78    if (!currentTime) currentTime = timestamp;         
79    var progress = timestamp - currentTime;
80    if(progress > duration) progress = duration;
81    var val = parseInt((progress/duration)*change + start);
82    element.style.height = val+"px";
83    if(progress < duration) {
84        window.requestAnimationFrame(animateHeight);
85    } else {
86    	if(cb) cb();
87    }
88  };
89  
90  //set the height of the element before starting animation -> fix bug on Safari
91  element.style.height = start+"px";
92  window.requestAnimationFrame(animateHeight);
93};
94
95/* 
96	Smooth Scroll
97*/
98
99Util.scrollTo = function(final, duration, cb, scrollEl) {
100  var element = scrollEl || window;
101  var start = element.scrollTop || document.documentElement.scrollTop,
102    currentTime = null;
103
104  if(!scrollEl) start = window.scrollY || document.documentElement.scrollTop;
105      
106  var animateScroll = function(timestamp){
107  	if (!currentTime) currentTime = timestamp;        
108    var progress = timestamp - currentTime;
109    if(progress > duration) progress = duration;
110    var val = Math.easeInOutQuad(progress, start, final-start, duration);
111    element.scrollTo(0, val);
112    if(progress < duration) {
113      window.requestAnimationFrame(animateScroll);
114    } else {
115      cb && cb();
116    }
117  };
118
119  window.requestAnimationFrame(animateScroll);
120};
121
122/* 
123  Focus utility classes
124*/
125
126//Move focus to an element
127Util.moveFocus = function (element) {
128  if( !element ) element = document.getElementsByTagName("body")[0];
129  element.focus();
130  if (document.activeElement !== element) {
131    element.setAttribute('tabindex','-1');
132    element.focus();
133  }
134};
135
136/* 
137  Misc
138*/
139
140Util.getIndexInArray = function(array, el) {
141  return Array.prototype.indexOf.call(array, el);
142};
143
144Util.cssSupports = function(property, value) {
145  if('CSS' in window) {
146    return CSS.supports(property, value);
147  } else {
148    var jsProperty = property.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase();});
149    return jsProperty in document.body.style;
150  }
151};
152
153// merge a set of user options into plugin defaults
154// https://gomakethings.com/vanilla-javascript-version-of-jquery-extend/
155Util.extend = function() {
156  // Variables
157  var extended = {};
158  var deep = false;
159  var i = 0;
160  var length = arguments.length;
161
162  // Check if a deep merge
163  if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {
164    deep = arguments[0];
165    i++;
166  }
167
168  // Merge the object into the extended object
169  var merge = function (obj) {
170    for ( var prop in obj ) {
171      if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {
172        // If deep merge and property is an object, merge properties
173        if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {
174          extended[prop] = extend( true, extended[prop], obj[prop] );
175        } else {
176          extended[prop] = obj[prop];
177        }
178      }
179    }
180  };
181
182  // Loop through each object and conduct a merge
183  for ( ; i < length; i++ ) {
184    var obj = arguments[i];
185    merge(obj);
186  }
187
188  return extended;
189};
190
191// Check if Reduced Motion is enabled
192Util.osHasReducedMotion = function() {
193  if(!window.matchMedia) return false;
194  var matchMediaObj = window.matchMedia('(prefers-reduced-motion: reduce)');
195  if(matchMediaObj) return matchMediaObj.matches;
196  return false; // return false if not supported
197}; 
198
199/* 
200	Polyfills
201*/
202//Closest() method
203if (!Element.prototype.matches) {
204	Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
205}
206
207if (!Element.prototype.closest) {
208	Element.prototype.closest = function(s) {
209		var el = this;
210		if (!document.documentElement.contains(el)) return null;
211		do {
212			if (el.matches(s)) return el;
213			el = el.parentElement || el.parentNode;
214		} while (el !== null && el.nodeType === 1); 
215		return null;
216	};
217}
218
219//Custom Event() constructor
220if ( typeof window.CustomEvent !== "function" ) {
221
222  function CustomEvent ( event, params ) {
223    params = params || { bubbles: false, cancelable: false, detail: undefined };
224    var evt = document.createEvent( 'CustomEvent' );
225    evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
226    return evt;
227   }
228
229  CustomEvent.prototype = window.Event.prototype;
230
231  window.CustomEvent = CustomEvent;
232}
233
234/* 
235	Animation curves
236*/
237Math.easeInOutQuad = function (t, b, c, d) {
238	t /= d/2;
239	if (t < 1) return c/2*t*t + b;
240	t--;
241	return -c/2 * (t*(t-2) - 1) + b;
242};
243
244Math.easeInQuart = function (t, b, c, d) {
245	t /= d;
246	return c*t*t*t*t + b;
247};
248
249Math.easeOutQuart = function (t, b, c, d) { 
250  t /= d;
251	t--;
252	return -c * (t*t*t*t - 1) + b;
253};
254
255Math.easeInOutQuart = function (t, b, c, d) {
256	t /= d/2;
257	if (t < 1) return c/2*t*t*t*t + b;
258	t -= 2;
259	return -c/2 * (t*t*t*t - 2) + b;
260};
261
262Math.easeOutElastic = function (t, b, c, d) {
263  var s=1.70158;var p=d*0.7;var a=c;
264  if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
265  if (a < Math.abs(c)) { a=c; var s=p/4; }
266  else var s = p/(2*Math.PI) * Math.asin (c/a);
267  return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
268};
269
270
271/* JS Utility Classes */
272
273// make focus ring visible only for keyboard navigation (i.e., tab key) 
274(function() {
275  var focusTab = document.getElementsByClassName('js-tab-focus'),
276    shouldInit = false,
277    outlineStyle = false,
278    eventDetected = false;
279
280  function detectClick() {
281    if(focusTab.length > 0) {
282      resetFocusStyle(false);
283      window.addEventListener('keydown', detectTab);
284    }
285    window.removeEventListener('mousedown', detectClick);
286    outlineStyle = false;
287    eventDetected = true;
288  };
289
290  function detectTab(event) {
291    if(event.keyCode !== 9) return;
292    resetFocusStyle(true);
293    window.removeEventListener('keydown', detectTab);
294    window.addEventListener('mousedown', detectClick);
295    outlineStyle = true;
296  };
297
298  function resetFocusStyle(bool) {
299    var outlineStyle = bool ? '' : 'none';
300    for(var i = 0; i < focusTab.length; i++) {
301      focusTab[i].style.setProperty('outline', outlineStyle);
302    }
303  };
304
305  function initFocusTabs() {
306    if(shouldInit) {
307      if(eventDetected) resetFocusStyle(outlineStyle);
308      return;
309    }
310    shouldInit = focusTab.length > 0;
311    window.addEventListener('mousedown', detectClick);
312  };
313
314  initFocusTabs();
315  window.addEventListener('initFocusTabs', initFocusTabs);
316}());
317
318function resetFocusTabsStyle() {
319  window.dispatchEvent(new CustomEvent('initFocusTabs'));
320};
321// File#: _1_accordion
322// Usage: codyhouse.co/license
323(function() {
324  var Accordion = function(element) {
325    this.element = element;
326    this.items = Util.getChildrenByClassName(this.element, 'js-accordion__item');
327    this.version = this.element.getAttribute('data-version') ? '-'+this.element.getAttribute('data-version') : '';
328    this.showClass = 'accordion'+this.version+'__item--is-open';
329    this.animateHeight = (this.element.getAttribute('data-animation') == 'on');
330    this.multiItems = !(this.element.getAttribute('data-multi-items') == 'off'); 
331    // deep linking options
332    this.deepLinkOn = this.element.getAttribute('data-deep-link') == 'on';
333    // init accordion
334    this.initAccordion();
335  };
336
337  Accordion.prototype.initAccordion = function() {
338    //set initial aria attributes
339    for( var i = 0; i < this.items.length; i++) {
340      var button = this.items[i].getElementsByTagName('button')[0],
341        content = this.items[i].getElementsByClassName('js-accordion__panel')[0],
342        isOpen = Util.hasClass(this.items[i], this.showClass) ? 'true' : 'false';
343      Util.setAttributes(button, {'aria-expanded': isOpen, 'aria-controls': 'accordion-content-'+i, 'id': 'accordion-header-'+i});
344      Util.addClass(button, 'js-accordion__trigger');
345      Util.setAttributes(content, {'aria-labelledby': 'accordion-header-'+i, 'id': 'accordion-content-'+i});
346    }
347
348    //listen for Accordion events
349    this.initAccordionEvents();
350
351    // check deep linking option
352    this.initDeepLink();
353  };
354
355  Accordion.prototype.initAccordionEvents = function() {
356    var self = this;
357
358    this.element.addEventListener('click', function(event) {
359      var trigger = event.target.closest('.js-accordion__trigger');
360      //check index to make sure the click didn't happen inside a children accordion
361      if( trigger && Util.getIndexInArray(self.items, trigger.parentElement) >= 0) self.triggerAccordion(trigger);
362    });
363  };
364
365  Accordion.prototype.triggerAccordion = function(trigger) {
366    var bool = (trigger.getAttribute('aria-expanded') === 'true');
367
368    this.animateAccordion(trigger, bool, false);
369
370    if(!bool && this.deepLinkOn) {
371      history.replaceState(null, '', '#'+trigger.getAttribute('aria-controls'));
372    }
373  };
374
375  Accordion.prototype.animateAccordion = function(trigger, bool, deepLink) {
376    var self = this;
377    var item = trigger.closest('.js-accordion__item'),
378      content = item.getElementsByClassName('js-accordion__panel')[0],
379      ariaValue = bool ? 'false' : 'true';
380
381    if(!bool) Util.addClass(item, this.showClass);
382    trigger.setAttribute('aria-expanded', ariaValue);
383    self.resetContentVisibility(item, content, bool);
384
385    if( !this.multiItems && !bool || deepLink) this.closeSiblings(item);
386  };
387
388  Accordion.prototype.resetContentVisibility = function(item, content, bool) {
389    Util.toggleClass(item, this.showClass, !bool);
390    content.removeAttribute("style");
391    if(bool && !this.multiItems) { // accordion item has been closed -> check if there's one open to move inside viewport 
392      this.moveContent();
393    }
394  };
395
396  Accordion.prototype.closeSiblings = function(item) {
397    //if only one accordion can be open -> search if there's another one open
398    var index = Util.getIndexInArray(this.items, item);
399    for( var i = 0; i < this.items.length; i++) {
400      if(Util.hasClass(this.items[i], this.showClass) && i != index) {
401        this.animateAccordion(this.items[i].getElementsByClassName('js-accordion__trigger')[0], true, false);
402        return false;
403      }
404    }
405  };
406
407  Accordion.prototype.moveContent = function() { // make sure title of the accordion just opened is inside the viewport
408    var openAccordion = this.element.getElementsByClassName(this.showClass);
409    if(openAccordion.length == 0) return;
410    var boundingRect = openAccordion[0].getBoundingClientRect();
411    if(boundingRect.top < 0 || boundingRect.top > window.innerHeight) {
412      var windowScrollTop = window.scrollY || document.documentElement.scrollTop;
413      window.scrollTo(0, boundingRect.top + windowScrollTop);
414    }
415  };
416
417  Accordion.prototype.initDeepLink = function() {
418    if(!this.deepLinkOn) return;
419    var hash = window.location.hash.substr(1);
420    if(!hash || hash == '') return;
421    var trigger = this.element.querySelector('.js-accordion__trigger[aria-controls="'+hash+'"]');
422    if(trigger && trigger.getAttribute('aria-expanded') !== 'true') {
423      this.animateAccordion(trigger, false, true);
424      setTimeout(function(){trigger.scrollIntoView(true);});
425    }
426  };
427
428  window.Accordion = Accordion;
429  
430  //initialize the Accordion objects
431  var accordions = document.getElementsByClassName('js-accordion');
432  if( accordions.length > 0 ) {
433    for( var i = 0; i < accordions.length; i++) {
434      (function(i){new Accordion(accordions[i]);})(i);
435    }
436  }
437}());
438// File#: _1_countup
439// Usage: codyhouse.co/license
440(function() {	
441  var CountUp = function(opts) {
442    this.options = Util.extend(CountUp.defaults , opts);
443    this.element = this.options.element;
444    this.initialValue = parseFloat(this.options.initial);
445    this.finalValue = parseFloat(this.element.textContent);
446    this.deltaValue = parseFloat(this.options.delta);
447    this.intervalId;
448    this.animationTriggered = false;
449    // animation will run only on browsers supporting IntersectionObserver
450    this.canAnimate = ('IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype);
451    initCountUp(this);
452  };
453
454  CountUp.prototype.reset = function() { // reset element to its initial value
455    if(!this.canAnimate) return;
456    window.cancelAnimationFrame(this.intervalId);
457    this.element.textContent = this.initialValue;
458  };  
459
460  CountUp.prototype.restart = function() { // restart element animation
461    countUpAnimate(this);
462  };
463
464  function initCountUp(countup) {
465    // reset initial value
466    countup.initialValue = getCountupStart(countup);
467    if(!countup.canAnimate) { // IntersectionObserver not supported
468      countUpShow(countup);
469      return;
470    }
471
472    // reset countUp for SR
473    initCountUpSr(countup);
474
475    // listen for the element to enter the viewport -> start animation
476    var observer = new IntersectionObserver(countupObserve.bind(countup), { threshold: [0, 0.1] });
477    observer.observe(countup.element);
478
479    // listen to events
480    countup.element.addEventListener('countUpReset', function(){countup.reset();});
481    countup.element.addEventListener('countUpRestart', function(){countup.restart();});
482  };
483
484  function countUpShow(countup) { // reveal countup after it has been initialized
485    Util.addClass(countup.element.closest('.countup'), 'countup--is-visible');
486  };
487
488  function countupObserve(entries, observer) { // observe countup position -> start animation when inside viewport
489    if(entries[0].intersectionRatio.toFixed(1) > 0 && !this.animationTriggered) {
490      countUpAnimate(this);
491    }
492  };
493
494  function countUpAnimate(countup) { // animate countup
495    countup.element.textContent = countup.initialValue;
496    countUpShow(countup);
497    window.cancelAnimationFrame(countup.intervalId);
498    var currentTime = null;
499
500    function runCountUp(timestamp) {
501      if (!currentTime) currentTime = timestamp;        
502      var progress = timestamp - currentTime;
503      if(progress > countup.options.duration) progress = countup.options.duration;
504      var val = getValEaseOut(progress, countup.initialValue, countup.finalValue - countup.initialValue, countup.options.duration);
505      countup.element.textContent = getCountUpValue(val, countup);
506      if(progress < countup.options.duration) {
507        countup.intervalId = window.requestAnimationFrame(runCountUp);
508      } else {
509        countUpComplete(countup);
510      }
511    };
512
513    countup.intervalId = window.requestAnimationFrame(runCountUp);
514  };
515
516  function getCountUpValue(val, countup) { // reset new countup value to proper decimal places+separator
517    if(countup.options.decimal) {val = parseFloat(val.toFixed(countup.options.decimal));}
518    else {val = parseInt(val);}
519    if(countup.options.separator) val = val.toLocaleString('en');
520    return val;
521  }
522
523  function countUpComplete(countup) { // emit event when animation is over
524    countup.element.dispatchEvent(new CustomEvent('countUpComplete'));
525    countup.animationTriggered = true;
526  };
527
528  function initCountUpSr(countup) { // make sure countup is accessible
529    // hide elements that will be animated to SR
530    countup.element.setAttribute('aria-hidden', 'true');
531    // create new element with visible final value - accessible to SR only
532    var srValue = document.createElement('span');
533    srValue.textContent = countup.finalValue;
534    Util.addClass(srValue, 'sr-only');
535    countup.element.parentNode.insertBefore(srValue, countup.element.nextSibling);
536  };
537
538  function getCountupStart(countup) {
539    return countup.deltaValue > 0 ? countup.finalValue - countup.deltaValue : countup.initialValue;
540  };
541
542  function getValEaseOut(t, b, c, d) { 
543    t /= d;
544    return -c * t*(t-2) + b;
545  };
546
547  CountUp.defaults = {
548    element : '',
549    separator : false,
550    duration: 1500,
551    decimal: false,
552    initial: 0,
553    delta: 0
554  };
555
556  window.CountUp = CountUp;
557
558  //initialize the CountUp objects
559  var countUp = document.getElementsByClassName('js-countup');
560  if( countUp.length > 0 ) {
561    for( var i = 0; i < countUp.length; i++) {(function(i){
562    	var separator = (countUp[i].getAttribute('data-countup-sep')) ? countUp[i].getAttribute('data-countup-sep') : false,
563        duration = (countUp[i].getAttribute('data-countup-duration')) ? countUp[i].getAttribute('data-countup-duration') : CountUp.defaults.duration,
564        decimal = (countUp[i].getAttribute('data-countup-decimal')) ? countUp[i].getAttribute('data-countup-decimal') : false,
565    		initial = (countUp[i].getAttribute('data-countup-start')) ? countUp[i].getAttribute('data-countup-start') : 0,
566        delta = (countUp[i].getAttribute('data-countup-delta')) ? countUp[i].getAttribute('data-countup-delta') : 0;
567    	new CountUp({element: countUp[i], separator : separator, duration: duration, decimal
567: decimal, initial: initial, delta: delta});
568    })(i);}
569  }
570}());
571// File#: _1_filter-navigation
572// Usage: codyhouse.co/license
573(function() {
574  var FilterNav = function(element) {
575    this.element = element;
576    this.wrapper = this.element.getElementsByClassName('js-filter-nav__wrapper')[0];
577    this.nav = this.element.getElementsByClassName('js-filter-nav__nav')[0];
578    this.list = this.nav.getElementsByClassName('js-filter-nav__list')[0];
579    this.control = this.element.getElementsByClassName('js-filter-nav__control')[0];
580    this.modalClose = this.element.getElementsByClassName('js-filter-nav__close-btn')[0];
581    this.placeholder = this.element.getElementsByClassName('js-filter-nav__placeholder')[0];
582    this.marker = this.element.getElementsByClassName('js-filter-nav__marker');
583    this.layout = 'expanded';
584    initFilterNav(this);
585  };
586
587  function initFilterNav(element) {
588    checkLayout(element); // init layout
589    if(element.layout == 'expanded') placeMarker(element);
590    element.element.addEventListener('update-layout', function(event){ // on resize - modify layout
591      checkLayout(element);
592    });
593
594    // update selected item
595    element.wrapper.addEventListener('click', function(event){
596      var newItem = event.target.closest('.js-filter-nav__btn');
597      if(newItem) {
598        updateCurrentItem(element, newItem);
599        return;
600      }
601      // close modal list - mobile version only
602      if(Util.hasClass(event.target, 'js-filter-nav__wrapper') || event.target.closest('.js-filter-nav__close-btn')) toggleModalList(element, false);
603    });
604
605    // open modal list - mobile version only
606    element.control.addEventListener('click', function(event){
607      toggleModalList(element, true);
608    });
609    
610    // listen for key events
611		window.addEventListener('keyup', function(event){
612			// listen for esc key
613			if( (event.keyCode && event.keyCode == 27) || (event.key && event.key.toLowerCase() == 'escape' )) {
614				// close navigation on mobile if open
615				if(element.control.getAttribute('aria-expanded') == 'true' && isVisible(element.control)) {
616					toggleModalList(element, false);
617				}
618			}
619			// listen for tab key
620			if( (event.keyCode && event.keyCode == 9) || (event.key && event.key.toLowerCase() == 'tab' )) {
621				// close navigation on mobile if open when nav loses focus
622				if(element.control.getAttribute('aria-expanded') == 'true' && isVisible(element.control) && !document.activeElement.closest('.js-filter-nav__wrapper')) toggleModalList(element, false);
623			}
624		});
625  };
626
627  function updateCurrentItem(element, btn) {
628    if(btn.getAttribute('aria-current') == 'true') {
629      toggleModalList(element, false);
630      return;
631    }
632    var activeBtn = element.wrapper.querySelector('[aria-current]');
633    if(activeBtn) activeBtn.removeAttribute('aria-current');
634    btn.setAttribute('aria-current', 'true');
635    // update trigger label on selection (visible on mobile only)
636    element.placeholder.textContent = btn.textContent;
637    toggleModalList(element, false);
638    if(element.layout == 'expanded') placeMarker(element);
639  };
640
641  function toggleModalList(element, bool) {
642    element.control.setAttribute('aria-expanded', bool);
643    Util.toggleClass(element.wrapper, 'filter-nav__wrapper--is-visible', bool);
644    if(bool) {
645      element.nav.querySelectorAll('[href], button:not([disabled])')[0].focus();
646    } else if(isVisible(element.control)) {
647      element.control.focus();
648    }
649  };
650
651  function isVisible(element) {
652		return (element.offsetWidth || element.offsetHeight || element.getClientRects().length);
653	};
654
655  function checkLayout(element) {
656    if(element.layout == 'expanded' && switchToCollapsed(element)) { // check if there's enough space 
657      element.layout = 'collapsed';
658      Util.removeClass(element.element, 'filter-nav--expanded');
659      Util.addClass(element.element, 'filter-nav--collapsed');
660      Util.removeClass(element.modalClose, 'is-hidden');
661      Util.removeClass(element.control, 'is-hidden');
662    } else if(element.layout == 'collapsed' && switchToExpanded(element)) {
663      element.layout = 'expanded';
664      Util.addClass(element.element, 'filter-nav--expanded');
665      Util.removeClass(element.element, 'filter-nav--collapsed');
666      Util.addClass(element.modalClose, 'is-hidden');
667      Util.addClass(element.control, 'is-hidden');
668    }
669    // place background element
670    if(element.layout == 'expanded') placeMarker(element);
671  };
672
673  function switchToCollapsed(element) {
674    return element.nav.scrollWidth > element.nav.offsetWidth;
675  };
676
677  function switchToExpanded(element) {
678    element.element.style.visibility = 'hidden';
679    Util.addClass(element.element, 'filter-nav--expanded');
680    Util.removeClass(element.element, 'filter-nav--collapsed');
681    var switchLayout = element.nav.scrollWidth <= element.nav.offsetWidth;
682    Util.removeClass(element.element, 'filter-nav--expanded');
683    Util.addClass(element.element, 'filter-nav--collapsed');
684    element.element.style.visibility = 'visible';
685    return switchLayout;
686  };
687
688  function placeMarker(element) {
689    var activeElement = element.wrapper.querySelector('.js-filter-nav__btn[aria-current="true"]');
690    if(element.marker.length == 0 || !activeElement ) return;
691    element.marker[0].style.width = activeElement.offsetWidth+'px';
692    element.marker[0].style.transform = 'translateX('+(activeElement.getBoundingClientRect().left - element.list.getBoundingClientRect().left)+'px)';
693  };
694
695  var filterNav = document.getElementsByClassName('js-filter-nav');
696  if(filterNav.length > 0) {
697    var filterNavArray = [];
698    for(var i = 0; i < filterNav.length; i++) {
699      filterNavArray.push(new FilterNav(filterNav[i]));
700    }
701
702    var resizingId = false,
703      customEvent = new CustomEvent('update-layout');
704
705    window.addEventListener('resize', function() {
706      clearTimeout(resizingId);
707      resizingId = setTimeout(doneResizing, 100);
708    });
709
710    // wait for font to be loaded
711    if(document.fonts) {
712      document.fonts.onloadingdone = function (fontFaceSetEvent) {
713        doneResizing();
714      };
715    }
716
717    function doneResizing() {
718      for( var i = 0; i < filterNavArray.length; i++) {
719        (function(i){filterNavArray[i].element.dispatchEvent(customEvent)})(i);
720      };
721    };
722  }
723}());
724// File#: _1_filter
725// Usage: codyhouse.co/license
726
727(function() {
728  var Filter = function(opts) {
729    this.options = Util.extend(Filter.defaults , opts); // used to store custom filter/sort functions
730    this.element = this.options.element;
731    this.elementId = this.element.getAttribute('id');
732    this.items = this.element.querySelectorAll('.js-filter__item');
733    this.controllers = document.querySelectorAll('[aria-controls="'+this.elementId+'"]'); // controllers wrappers
734    this.fallbackMessage = document.querySelector('[data-fallback-gallery-id="'+this.elementId+'"]');
735    this.filterString = []; // combination of different filter values
736    this.sortingString = '';  // sort value - will include order and type of argument (e.g., number or string)
737    // store info about sorted/filtered items
738    this.filterList = []; // list of boolean for each this.item -> true if still visible , otherwise false
739    this.sortingList = []; // list of new ordered this.item -> each element is [item, originalIndex]
740    
741    // store grid info for animation
742    this.itemsGrid = []; // grid coordinates
743    this.itemsInitPosition = []; // used to store coordinates of this.items before animation
744    this.itemsIterPosition = []; // used to store coordinates of this.items before animation - intermediate state
745    this.itemsFinalPosition = []; // used to store coordinates of this.items after filtering
746    
747    // animation off
748    this.animateOff = this.element.getAttribute('data-filter-animation') == 'off';
749    // used to update this.itemsGrid on resize
750    this.resizingId = false;
751    // default acceleration style - improve animation
752    this.accelerateStyle = 'will-change: transform, opacity; transform: translateZ(0); backface-visibility: hidden;';
753
754    // handle multiple changes
755    this.animating = false;
756    this.reanimate = false;
757
758    initFilter(this);
759  };
760
761  function initFilter(filter) {
762    resetFilterSortArray(filter, true, true); // init array filter.filterList/filter.sortingList
763    createGridInfo(filter); // store grid coordinates in filter.itemsGrid
764    initItemsOrder(filter); // add data-orders so that we can reset the sorting
765
766    // events handling - filter update
767    for(var i = 0; i < filter.controllers.length; i++) {
768      filter.filterString[i] = ''; // reset filtering
769
770      // get proper filter/sorting string based on selected controllers
771      (function(i){
772        filter.controllers[i].addEventListener('change', function(event) {  
773          if(event.target.tagName.toLowerCase() == 'select') { // select elements
774            (!event.target.getAttribute('data-filter'))
775              ? setSortingString(filter, event.target.value, event.target.options[event.target.selectedIndex])
776              : setFilterString(filter, i, 'select');
777          } else if(event.target.tagName.toLowerCase() == 'input' && (event.target.getAttribute('type') == 'radio' || event.target.getAttribute('type') == 'checkbox') ) { // input (radio/checkboxed) elements
778            (!event.target.getAttribute('data-filter'))
779              ? setSortingString(filter, event.target.getAttribute('data-sort'), event.target)
780              : setFilterString(filter, i, 'input');
781          } else {
782            // generic inout element
783            (!filter.controllers[i].getAttribute('data-filter'))
784              ? setSortingString(filter, filter.controllers[i].getAttribute('data-sort'), filter.controllers[i])
785              : setFilterString(filter, i, 'custom');
786          }
787
788          updateFilterArray(filter);
789        });
790
791        filter.controllers[i].addEventListener('click', function(event) { // retunr if target is select/input elements
792          var filterEl = event.target.closest('[data-filter]');
793          var sortEl = event.target.closest('[data-sort]');
794          if(!filterEl && !sortEl) return;
795          if(filterEl && ( filterEl.tagName.toLowerCase() == 'input' || filterEl.tagName.toLowerCase() == 'select')) return;
796          if(sortEl && (sortEl.tagName.toLowerCase() == 'input' || sortEl.tagName.toLowerCase() == 'select')) return;
797          if(sortEl && Util.hasClass(sortEl, 'js-filter__custom-control')) return;
798          if(filterEl && Util.hasClass(filterEl, 'js-filter__custom-control')) return;
799          // this will be executed only for a list of buttons ->
799 no inputs
800          event.preventDefault();
801          resetControllersList(filter, i, filterEl, sortEl);
802          sortEl 
803            ? setSortingString(filter, sortEl.getAttribute('data-sort'), sortEl)
804            : setFilterString(filter, i, 'button');
805          updateFilterArray(filter);
806        });
807
808        // target search inputs -> update them on 'input'
809        filter.controllers[i].addEventListener('input', function(event) {
810          if(event.target.tagName.toLowerCase() == 'input' && (event.target.getAttribute('type') == 'search' || event.target.getAttribute('type') == 'text') ) {
811            setFilterString(filter, i, 'custom');
812            updateFilterArray(filter);
813          }
814        });
815      })(i);
816    }
817
818    // handle resize - update grid coordinates in filter.itemsGrid
819    window.addEventListener('resize', function() {
820      clearTimeout(filter.resizingId);
821      filter.resizingId = setTimeout(function(){createGridInfo(filter)}, 300);
822    });
823
824    // check if there are filters/sorting values already set
825    checkInitialFiltering(filter);
826
827    // reset filtering results if filter selection was changed by an external control (e.g., form reset) 
828    filter.element.addEventListener('update-filter-results', function(event){
829      // reset filters first
830      for(var i = 0; i < filter.controllers.length; i++) filter.filterString[i] = '';
831      filter.sortingString = '';
832      checkInitialFiltering(filter);
833    });
834  };
835
836  function checkInitialFiltering(filter) {
837    for(var i = 0; i < filter.controllers.length; i++) { // check if there's a selected option
838      // buttons list
839      var selectedButton = filter.controllers[i].getElementsByClassName('js-filter-selected');
840      if(selectedButton.length > 0) {
841        var sort = selectedButton[0].getAttribute('data-sort');
842        sort
843          ? setSortingString(filter, selectedButton[0].getAttribute('data-sort'), selectedButton[0])
844          : setFilterString(filter, i, 'button');
845        continue;
846      }
847
848      // input list
849      var selectedInput = filter.controllers[i].querySelectorAll('input:checked');
850      if(selectedInput.length > 0) {
851        var sort = selectedInput[0].getAttribute('data-sort');
852        sort
853          ? setSortingString(filter, sort, selectedInput[0])
854          : setFilterString(filter, i, 'input');
855        continue;
856      }
857      // select item
858      if(filter.controllers[i].tagName.toLowerCase() == 'select') {
859        var sort = filter.controllers[i].getAttribute('data-sort');
860        sort
861          ? setSortingString(filter, filter.controllers[i].value, filter.controllers[i].options[filter.controllers[i].selectedIndex])
862          : setFilterString(filter, i, 'select');
863         continue;
864      }
865      // check if there's a generic custom input
866      var radioInput = filter.controllers[i].querySelector('input[type="radio"]'),
867        checkboxInput = filter.controllers[i].querySelector('input[type="checkbox"]');
868      if(!radioInput && !checkboxInput) {
869        var sort = filter.controllers[i].getAttribute('data-sort');
870        var filterString = filter.controllers[i].getAttribute('data-filter');
871        if(sort) setSortingString(filter, sort, filter.controllers[i]);
872        else if(filterString) setFilterString(filter, i, 'custom');
873      }
874    }
875
876    updateFilterArray(filter);
877  };
878
879  function setSortingString(filter, value, item) { 
880    // get sorting string value-> sortName:order:type
881    var order = item.getAttribute('data-sort-order') ? 'desc' : 'asc';
882    var type = item.getAttribute('data-sort-number') ? 'number' : 'string';
883    filter.sortingString = value+':'+order+':'+type;
884  };
885
886  function setFilterString(filter, index, type) { 
887    // get filtering array -> [filter1:filter2, filter3, filter4:filter5]
888    if(type == 'input') {
889      var checkedInputs = filter.controllers[index].querySelectorAll('input:checked');
890      filter.filterString[index] = '';
891      for(var i = 0; i < checkedInputs.length; i++) {
892        filter.filterString[index] = filter.filterString[index] + checkedInputs[i].getAttribute('data-filter') + ':';
893      }
894    } else if(type == 'select') {
895      if(filter.controllers[index].multiple) { // select with multiple options
896        filter.filterString[index] = getMultipleSelectValues(filter.controllers[index]);
897      } else { // select with single option
898        filter.filterString[index] = filter.controllers[index].value;
899      }
900    } else if(type == 'button') {
901      var selectedButtons = filter.controllers[index].querySelectorAll('.js-filter-selected');
902      filter.filterString[index] = '';
903      for(var i = 0; i < selectedButtons.length; i++) {
904        filter.filterString[index] = filter.filterString[index] + selectedButtons[i].getAttribute('data-filter') + ':';
905      }
906    } else if(type == 'custom') {
907      filter.filterString[index] = filter.controllers[index].getAttribute('data-filter');
908    }
909  };
910
911  function resetControllersList(filter, index, target1, target2) {
912    // for a <button>s list -> toggle js-filter-selected + custom classes
913    var multi = filter.controllers[index].getAttribute('data-filter-checkbox'),
914      customClass = filter.controllers[index].getAttribute('data-selected-class');
915    
916    customClass = (customClass) ? 'js-filter-selected '+ customClass : 'js-filter-selected';
917    if(multi == 'true') { // multiple options can be on
918      (target1) 
919        ? Util.toggleClass(target1, customClass, !Util.hasClass(target1, 'js-filter-selected'))
920        : Util.toggleClass(target2, customClass, !Util.hasClass(target2, 'js-filter-selected'));
921    } else { // only one element at the time
922      // remove the class from all siblings
923      var selectedOption = filter.controllers[index].querySelector('.js-filter-selected');
924      if(selectedOption) Util.removeClass(selectedOption, customClass);
925      (target1) 
926        ? Util.addClass(target1, customClass)
927        : Util.addClass(target2, customClass);
928    }
929  };
930
931  function updateFilterArray(filter) { // sort/filter strings have been updated -> so you can update the gallery
932    if(filter.animating) {
933      filter.reanimate = true;
934      return;
935    }
936    filter.animating = true;
937    filter.reanimate = false;
938    createGridInfo(filter); // get new grid coordinates
939    sortingGallery(filter); // update sorting list 
940    filteringGallery(filter); // update filter list
941    resetFallbackMessage(filter, true); // toggle fallback message
942    if(reducedMotion || filter.animateOff) {
943      resetItems(filter);
944    } else {
945      updateItemsAttributes(filter);
946    }
947  };
948
949  function sortingGallery(filter) {
950    // use sorting string to reorder gallery
951    var sortOptions = filter.sortingString.split(':');
952    if(sortOptions[0] == '' || sortOptions[0] == '*') {
953      // no sorting needed
954      restoreSortOrder(filter);
955    } else { // need to sort
956      if(filter.options[sortOptions[0]]) { // custom sort function -> user takes care of it
957        filter.sortingList = filter.options[sortOptions[0]](filter.sortingList);
958      } else {
959        filter.sortingList.sort(function(left, right) {
960          var leftVal = left[0].getAttribute('data-sort-'+sortOptions[0]),
961          rightVal = right[0].getAttribute('data-sort-'+sortOptions[0]);
962          if(sortOptions[2] == 'number') {
963            leftVal = parseFloat(leftVal);
964            rightVal = parseFloat(rightVal);
965          }
966          if(sortOptions[1] == 'desc') return leftVal <= rightVal ? 1 : -1;
967          else return leftVal >= rightVal ? 1 : -1;
968        });
969      }
970    }
971  };
972
973  function filteringGallery(filter) {
974    // use filtering string to reorder gallery
975    resetFilterSortArray(filter, true, false);
976    // we can have multiple filters
977    for(var i = 0; i < filter.filterString.length; i++) {
978      //check if multiple filters inside the same controller
979      if(filter.filterString[i] != '' && filter.filterString[i] != '*' && filter.filterString[i] != ' ') {
980        singleFilterGallery(filter, filter.filterString[i].split(':'));
981      }
982    }
983  };
984
985  function singleFilterGallery(filter, subfilter) {
986    if(!subfilter || subfilter == '' || subfilter == '*') return;
987    // check if we have custom options
988    var customFilterArray = [];
989    for(var j = 0; j < subfilter.length; j++) {
990      if(filter.options[subfilter[j]]) { // custom function
991        customFilterArray[subfilter[j]] = filter.options[subfilter[j]](filter.items);
992      }
993    }
994
995    for(var i = 0; i < filter.items.length; i++) {
996      var filterValues = filter.items[i].getAttribute('data-filter').split(' ');
997      var present = false;
998      for(var j = 0; j < subfilter.length; j++) {
999        if(filter.options[subfilter[j]] && customFilterArray[subfilter[j]][i]) { // custom function
1000          present = true;
1001          break;
1002        } else if(subfilter[j] == '*' || filterValues.indexOf(subfilter[j]) > -1) {
1003          present = true;
1004          break;
1005        }
1006      }
1007      filter.filterList[i] = !present ? false : filter.filterList[i];
1008    }
1009  };
1010
1011  function updateItemsAttributes(filter) { // set items before triggering the update animation
1012    // get offset of all elements before animation
1013    storeOffset(filter, filter.itemsInitPosition);
1014    // set height of container
1015    filter.element.setAttribute('style', 'height: '+parseFloat(filter.element.offsetHeight)+'px; width: '+parseFloat(filter.element.offsetWidth)+'px;');
1016
1017    for(var i = 0; i < filter.items.length; i++) { // remove is-hidden class from items now visible and scale to zero
1018      if( Util.hasClass(filter.items[i], 'is-hidden') && filter.filterList[i]) {
1019        filter.items[i].setAttribute('data-scale', 'on');
1020        filter.items[i].setAttribute('style', filter.accelerateStyle+'transform: scale(0.5); opacity: 0;')
1021        Util.removeClass(filter.items[i], 'is-hidden');
1022      }
1023    }
1024    // get new elements offset
1025    storeOffset(filter, filter.itemsIterPosition);
1026    // translate items so that they are in the right initial position
1027    for(var i = 0; i < filter.items.length; i++) {
1028      if( filter.items[i].getAttribute('data-scale') != 'on') {
1029        filter.items[i].setAttribute('style', filter.accelerateStyle+'transform: translateX('+parseInt(filter.itemsInitPosition[i][0] - filter.itemsIterPosition[i][0])+'px) translateY('+parseInt(filter.itemsInitPosition[i][1] - filter.itemsIterPosition[i][1])+'px);');
1030      }
1031    }
1032
1033    animateItems(filter)
1034  };
1035
1036  function animateItems(filter) {
1037    var transitionValue = 'transform '+filter.options.duration+'ms cubic-bezier(0.455, 0.03, 0.515, 0.955), opacity '+filter.options.duration+'ms';
1038
1039    // get new index of items in the list
1040    var j = 0;
1041    for(var i = 0; i < filter.sortingList.length; i++) {
1042      var item = filter.items[filter.sortingList[i][1]];
1043        
1044      if(Util.hasClass(item, 'is-hidden') || !filter.filterList[filter.sortingList[i][1]]) {
1045        // item is hidden or was previously hidden -> final position equal to first one
1046        filter.itemsFinalPosition[filter.sortingList[i][1]] = filter.itemsIterPosition[filter.sortingList[i][1]];
1047        if(item.getAttribute('data-scale') == 'on') j = j + 1; 
1048      } else {
1049        filter.itemsFinalPosition[filter.sortingList[i][1]] = [filter.itemsGrid[j][0], filter.itemsGrid[j][1]]; // left/top
1050        j = j + 1; 
1051      }
1052    } 
1053
1054    setTimeout(function(){
1055      for(var i = 0; i < filter.items.length; i++) {
1056        if(filter.filterList[i] && filter.items[i].getAttribute('data-scale') == 'on') { // scale up item
1057          filter.items[i].setAttribute('style', filter.accelerateStyle+'transition: '+transitionValue+'; transform: translateX('+parseInt(filter.itemsFinalPosition[i][0] - filter.itemsIterPosition[i][0])+'px) translateY('+parseInt(filter.itemsFinalPosition[i][1] - filter.itemsIterPosition[i][1])+'px) scale(1); opacity: 1;');
1058        } else if(filter.filterList[i]) { // translate item
1059          filter.items[i].setAttribute('style', filter.accelerateStyle+'transition: '+transitionValue+'; transform: translateX('+parseInt(filter.itemsFinalPosition[i][0] - filter.itemsIterPosition[i][0])+'px) translateY('+parseInt(filter.itemsFinalPosition[i][1] - filter.itemsIterPosition[i][1])+'px);');
1060        } else { // scale down item
1061          filter.items[i].setAttribute('style', filter.accelerateStyle+'transition: '+transitionValue+'; transform: scale(0.5); opacity: 0;');
1062        }
1063      };
1064    }, 50);  
1065    
1066    // wait for the end of transition of visible elements
1067    setTimeout(function(){
1068      resetItems(filter);
1069    }, (filter.options.duration + 100));
1070  };
1071
1072  function resetItems(filter) {
1073    // animation was off or animation is over -> reset attributes
1074    for(var i = 0; i < filter.items.length; i++) {
1075      filter.items[i].removeAttribute('style');
1076      Util.toggleClass(filter.items[i], 'is-hidden', !filter.filterList[i]);
1077      filter.items[i].removeAttribute('data-scale');
1078    }
1079    
1080    for(var i = 0; i < filter.items.length; i++) {// reorder
1081      filter.element.appendChild(filter.items[filter.sortingList[i][1]]);
1082    }
1083
1084    filter.items = [];
1085    filter.items = filter.element.querySelectorAll('.js-filter__item');
1086    resetFilterSortArray(filter, false, true);
1087    filter.element.removeAttribute('style');
1088    filter.animating = false;
1089    if(filter.reanimate) {
1090      updateFilterArray(filter);
1091    }
1092
1093    resetFallbackMessage(filter, false); // toggle fallback message
1094
1095    // emit custom event - end of filtering
1096    filter.element.dispatchEvent(new CustomEvent('filter-selection-updated'));
1097  };
1098
1099  function resetFilterSortArray(filter, filtering, sorting) {
1100    for(var i = 0; i < filter.items.length; i++) {
1101      if(filtering) filter.filterList[i] = true;
1102      if(sorting) filter.sortingList[i] = [filter.items[i], i];
1103    }
1104  };
1105
1106  function createGridInfo(filter) {
1107    var containerWidth = parseFloat(window.getComputedStyle(filter.element).getPropertyValue('width')),
1108      itemStyle, itemWidth, itemHeight, marginX, marginY, colNumber;
1109
1110    // get offset first visible element
1111    for(var i = 0; i < filter.items.length; i++) {
1112      if( !Util.hasClass(filter.items[i], 'is-hidden') ) {
1113        itemStyle = window.getComputedStyle(filter.items[i]),
1114        itemWidth = parseFloat(itemStyle.getPropertyValue('width')),
1115        itemHeight = parseFloat(itemStyle.getPropertyValue('height')),
1116        marginX = parseFloat(itemStyle.getPropertyValue('margin-left')) + parseFloat(itemStyle.getPropertyValue('margin-right')),
1117        marginY = parseFloat(itemStyle.getPropertyValue('margin-bottom')) + parseFloat(itemStyle.getPropertyValue('margin-top'));
1118        if(marginX == 0 && marginY == 0) {
1119          // grid is set using the gap property and not margins
1120          var margins = resetMarginValues(filter);
1121          marginX = margins[0];
1122          marginY = margins[1];
1123        }
1124        var colNumber = parseInt((containerWidth + marginX)/(itemWidth+marginX));
1125        filter.itemsGrid[0] = [filter.items[i].offsetLeft, filter.items[i].offsetTop]; // left, top
1126        break;
1127      }
1128    }
1129
1130    for(var i = 1; i < filter.items.length; i++) {
1131      var x = i < colNumber ? i : i % colNumber,
1132        y = i < colNumber ? 0 : Math.floor(i/colNumber);
1133      filter.itemsGrid[i] = [filter.itemsGrid[0][0] + x*(itemWidth+marginX), filter.itemsGrid[0][1] + y*(itemHeight+marginY)];
1134    }
1135  };
1136
1137  function storeOffset(filter, array) {
1138    for(var i = 0; i < filter.items.length; i++) {
1139      array[i] = [filter.items[i].offsetLeft, filter.items[i].offsetTop];
1140    }
1141  };
1142
1143  function initItemsOrder(filter) {
1144    for(var i = 0; i < filter.items.length; i++) {
1145      filter.items[i].setAttribute('data-init-sort-order', i);
1146    }
1147  };
1148
1149  function restoreSortOrder(filter) {
1150    for(var i = 0; i < filter.items.length; i++) {
1151      filter.sortingList[parseInt(filter.items[i].getAttribute('data-init-sort-order'))] = [filter.items[i], i];
1152    }
1153  };
1154
1155  function resetFallbackMessage(filter, bool) {
1156    if(!filter.fallbackMessage) return;
1157    var show = true;
1158    for(var i = 0; i < filter.filterList.length; i++) {
1159      if(filter.filterList[i]) {
1160        show = false;
1161        break;
1162      }
1163    };
1164    if(bool) { // reset visibility before animation is triggered
1165      if(!show) Util.addClass(filter.fallbackMessage, 'is-hidden');
1166      return;
1167    }
1168    Util.toggleClass(filter.fallbackMessage, 'is-hidden', !show);
1169  };
1170
1171  function getMultipleSelectValues(multipleSelect) {
1172    // get selected options of a <select multiple> element
1173    var options = multipleSelect.options,
1174      value = '';
1175    for(var i = 0; i < options.length; i++) {
1176      if(options[i].selected) {
1177        if(value != '') value = value + ':';
1178        value = value + options[i].value;
1179      }
1180    }
1181    return value;
1182  };
1183
1184  function resetMarginValues(filter) {
1185    var gapX = getComputedStyle(filter.element).getPropertyValue('--gap-x'),
1186      gapY = getComputedStyle(filter.element).getPropertyValue('--gap-y'),
1187      gap = getComputedStyle(filter.element).getPropertyValue('--gap'),
1188      gridGap = [0, 0];
1189    // tif the gap property is used to create the grid (not margin left/right) -> get gap values rather than margins
1190    // check if the --gap/--gap-x/--gap-y
1191    var newDiv = document.createElement('div'),
1192      cssText = 'position: absolute; opacity: 0; width: 0px; height: 0px';
1193    if(gapX && gapY) {
1194      cssText = 'position: absolute; opacity: 0; width: '+gapX+'; height: '+gapY;
1195    } else if(gap) {
1196      cssText = 'position: absolute; opacity: 0; width: '+gap+'; height: '+gap;
1197    } else if(gapX) {
1198      cssText = 'position: absolute; opacity: 0; width: '+gapX+'; height: 0px';
1199    } else if(gapY) {
1200      cssText = 'position: absolute; opacity: 0; width: 0px; height: '+gapY;
1201    }
1202    newDiv.style.cssText = cssText;
1203    document.body.appendChild(newDiv);
1204    gridGap = [newDiv.offsetWidth, newDiv.offsetHeight];
1205    document.body.removeChild(newDiv);
1206    return gridGap;
1207  };
1208
1209  Filter.defaults = {
1210    element : false,
1211    duration: 400
1212  };
1213
1214  window.Filter = Filter;
1215
1216  // init Filter object
1217  var filterGallery = document.getElementsByClassName('js-filter'),
1218    reducedMotion = Util.osHasReducedMotion();
1219  if( filterGallery.length > 0 ) {
1220    for( var i = 0; i < filterGallery.length; i++) {
1221      var duration = filterGallery[i].getAttribute('data-filter-duration');
1222      if(!duration) duration = Filter.defaults.duration;
1223      new Filter({element: filterGallery[i], duration: duration});
1224    }
1225  }
1226}());
1227// File#: _1_modal-window
1228// Usage: codyhouse.co/license
1229(function() {
1230	var Modal = function(element) {
1231		this.element = element;
1232		this.triggers = document.querySelectorAll('[aria-controls="'+this.element.getAttribute('id')+'"]');
1233		this.firstFocusable = null;
1234		this.lastFocusable = null;
1235		this.moveFocusEl = null; // focus will be moved to this element when modal is open
1236		this.modalFocus = this.element.getAttribute('data-modal-first-focus') ? this.element.querySelector(this.element.getAttribute('data-modal-first-focus')) : null;
1237		this.selectedTrigger = null;
1238		this.preventScrollEl = this.getPreventScrollEl();
1239		this.showClass = "modal--is-visible";
1240		this.initModal();
1241	};
1242
1243	Modal.prototype.getPreventScrollEl = function() {
1244		var scrollEl = false;
1245		var querySelector = this.element.getAttribute('data-modal-prevent-scroll');
1246		if(querySelector) scrollEl = document.querySelector(querySelector);
1247		return scrollEl;
1248	};
1249
1250	Modal.prototype.initModal = function() {
1251		var self = this;
1252		//open modal when clicking on trigger buttons
1253		if ( this.triggers ) {
1254			for(var i = 0; i < this.triggers.length; i++) {
1255				this.triggers[i].addEventListener('click', function(event) {
1256					event.preventDefault();
1257					if(Util.hasClass(self.element, self.showClass)) {
1258						self.closeModal();
1259						return;
1260					}
1261					self.selectedTrigger = event.target;
1262					self.showModal();
1263					self.initModalEvents();
1264				});
1265			}
1266		}
1267
1268		// listen to the openModal event -> open modal without a trigger button
1269		this.element.addEventListener('openModal', function(event){
1270			if(event.detail) self.selectedTrigger = event.detail;
1271			self.showModal();
1272			self.initModalEvents();
1273		});
1274
1275		// listen to the closeModal event -> close modal without a trigger button
1276		this.element.addEventListener('closeModal', function(event){
1277			if(event.detail) self.selectedTrigger = event.detail;
1278			self.closeModal();
1279		});
1280
1281		// if modal is open by default -> initialise modal events
1282		if(Util.hasClass(this.element, this.showClass)) this.initModalEvents();
1283	};
1284
1285	Modal.prototype.showModal = function() {
1286		var self = this;
1287		Util.addClass(this.element, this.showClass);
1288		this.getFocusableElements();
1289		if(this.moveFocusEl) {
1290			this.moveFocusEl.focus();
1291			// wait for the end of transitions before moving focus
1292			this.element.addEventListener("transitionend", function cb(event) {
1293				self.moveFocusEl.focus();
1294				self.element.removeEventListener("transitionend", cb);
1295			});
1296		}
1297		this.emitModalEvents('modalIsOpen');
1298		// change the overflow of the preventScrollEl
1299		if(this.preventScrollEl) this.preventScrollEl.style.overflow = 'hidden';
1300	};
1301
1302	Modal.prototype.closeModal = function() {
1303		if(!Util.hasClass(this.element, this.showClass)) return;
1304		console.log('close')
1305		Util.removeClass(this.element, this.showClass);
1306		this.firstFocusable = null;
1307		this.lastFocusable = null;
1308		this.moveFocusEl = null;
1309		if(this.selectedTrigger) this.selectedTrigger.focus();
1310		//remove listeners
1311		this.cancelModalEvents();
1312		this.emitModalEvents('modalIsClose');
1313		// change the overflow of the preventScrollEl
1314		if(this.preventScrollEl) this.preventScrollEl.style.overflow = '';
1315	};
1316
1317	Modal.prototype.initModalEvents = function() {
1318		//add event listeners
1319		this.element.addEventListener('keydown', this);
1320		this.element.addEventListener('click', this);
1321	};
1322
1323	Modal.prototype.cancelModalEvents = function() {
1324		//remove event listeners
1325		this.element.removeEventListener('keydown', this);
1326		this.element.removeEventListener('click', this);
1327	};
1328
1329	Modal.prototype.handleEvent = function (event) {
1330		switch(event.type) {
1331			case 'click': {
1332				this.initClick(event);
1333			}
1334			case 'keydown': {
1335				this.initKeyDown(event);
1336			}
1337		}
1338	};
1339
1340	Modal.prototype.initKeyDown = function(event) {
1341		if( event.keyCode && event.keyCode == 9 || event.key && event.key == 'Tab' ) {
1342			//trap focus inside modal
1343			this.trapFocus(event);
1344		} else if( (event.keyCode && event.keyCode == 13 || event.key && event.key == 'Enter') && event.target.closest('.js-modal__close')) {
1345			event.preventDefault();
1346			this.closeModal(); // close modal when pressing Enter on close button
1347		}	
1348	};
1349
1350	Modal.prototype.initClick = function(event) {
1351		//close modal when clicking on close button or modal bg layer 
1352		if( !event.target.closest('.js-modal__close') && !Util.hasClass(event.target, 'js-modal') ) return;
1353		event.preventDefault();
1354		this.closeModal();
1355	};
1356
1357	Modal.prototype.trapFocus = function(event) {
1358		if( this.firstFocusable == document.activeElement && event.shiftKey) {
1359			//on Shift+Tab ->
1359 focus last focusable element when focus moves out of modal
1360			event.preventDefault();
1361			this.lastFocusable.focus();
1362		}
1363		if( this.lastFocusable == document.activeElement && !event.shiftKey) {
1364			//on Tab -> focus first focusable element when focus moves out of modal
1365			event.preventDefault();
1366			this.firstFocusable.focus();
1367		}
1368	}
1369
1370	Modal.prototype.getFocusableElements = function() {
1371		//get all focusable elements inside the modal
1372		var allFocusable = this.element.querySelectorAll(focusableElString);
1373		this.getFirstVisible(allFocusable);
1374		this.getLastVisible(allFocusable);
1375		this.getFirstFocusable();
1376	};
1377
1378	Modal.prototype.getFirstVisible = function(elements) {
1379		//get first visible focusable element inside the modal
1380		for(var i = 0; i < elements.length; i++) {
1381			if( isVisible(elements[i]) ) {
1382				this.firstFocusable = elements[i];
1383				break;
1384			}
1385		}
1386	};
1387
1388	Modal.prototype.getLastVisible = function(elements) {
1389		//get last visible focusable element inside the modal
1390		for(var i = elements.length - 1; i >= 0; i--) {
1391			if( isVisible(elements[i]) ) {
1392				this.lastFocusable = elements[i];
1393				break;
1394			}
1395		}
1396	};
1397
1398	Modal.prototype.getFirstFocusable = function() {
1399		if(!this.modalFocus || !Element.prototype.matches) {
1400			this.moveFocusEl = this.firstFocusable;
1401			return;
1402		}
1403		var containerIsFocusable = this.modalFocus.matches(focusableElString);
1404		if(containerIsFocusable) {
1405			this.moveFocusEl = this.modalFocus;
1406		} else {
1407			this.moveFocusEl = false;
1408			var elements = this.modalFocus.querySelectorAll(focusableElString);
1409			for(var i = 0; i < elements.length; i++) {
1410				if( isVisible(elements[i]) ) {
1411					this.moveFocusEl = elements[i];
1412					break;
1413				}
1414			}
1415			if(!this.moveFocusEl) this.moveFocusEl = this.firstFocusable;
1416		}
1417	};
1418
1419	Modal.prototype.emitModalEvents = function(eventName) {
1420		var event = new CustomEvent(eventName, {detail: this.selectedTrigger});
1421		this.element.dispatchEvent(event);
1422	};
1423
1424	function isVisible(element) {
1425		return element.offsetWidth || element.offsetHeight || element.getClientRects().length;
1426	};
1427
1428	window.Modal = Modal;
1429
1430	//initialize the Modal objects
1431	var modals = document.getElementsByClassName('js-modal');
1432	// generic focusable elements string selector
1433	var focusableElString = '[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex]:not([tabindex="-1"]), [contenteditable], audio[controls], video[controls], summary';
1434	if( modals.length > 0 ) {
1435		var modalArrays = [];
1436		for( var i = 0; i < modals.length; i++) {
1437			(function(i){modalArrays.push(new Modal(modals[i]));})(i);
1438		}
1439
1440		window.addEventListener('keydown', function(event){ //close modal window on esc
1441			if(event.keyCode && event.keyCode == 27 || event.key && event.key.toLowerCase() == 'escape') {
1442				for( var i = 0; i < modalArrays.length; i++) {
1443					(function(i){modalArrays[i].closeModal();})(i);
1444				};
1445			}
1446		});
1447	}
1448}());
1449// File#: _1_swipe-content
1450(function() {
1451	var SwipeContent = function(element) {
1452		this.element = element;
1453		this.delta = [false, false];
1454		this.dragging = false;
1455		this.intervalId = false;
1456		initSwipeContent(this);
1457	};
1458
1459	function initSwipeContent(content) {
1460		content.element.addEventListener('mousedown', handleEvent.bind(content));
1461		content.element.addEventListener('touchstart', handleEvent.bind(content));
1462	};
1463
1464	function initDragging(content) {
1465		//add event listeners
1466		content.element.addEventListener('mousemove', handleEvent.bind(content));
1467		content.element.addEventListener('touchmove', handleEvent.bind(content));
1468		content.element.addEventListener('mouseup', handleEvent.bind(content));
1469		content.element.addEventListener('mouseleave', handleEvent.bind(content));
1470		content.element.addEventListener('touchend', handleEvent.bind(content));
1471	};
1472
1473	function cancelDragging(content) {
1474		//remove event listeners
1475		if(content.intervalId) {
1476			(!window.requestAnimationFrame) ? clearInterval(content.intervalId) : window.cancelAnimationFrame(content.intervalId);
1477			content.intervalId = false;
1478		}
1479		content.element.removeEventListener('mousemove', handleEvent.bind(content));
1480		content.element.removeEventListener('touchmove', handleEvent.bind(content));
1481		content.element.removeEventListener('mouseup', handleEvent.bind(content));
1482		content.element.removeEventListener('mouseleave', handleEvent.bind(content));
1483		content.element.removeEventListener('touchend', handleEvent.bind(content));
1484	};
1485
1486	function handleEvent(event) {
1487		switch(event.type) {
1488			case 'mousedown':
1489			case 'touchstart':
1490				startDrag(this, event);
1491				break;
1492			case 'mousemove':
1493			case 'touchmove':
1494				drag(this, event);
1495				break;
1496			case 'mouseup':
1497			case 'mouseleave':
1498			case 'touchend':
1499				endDrag(this, event);
1500				break;
1501		}
1502	};
1503
1504	function startDrag(content, event) {
1505		content.dragging = true;
1506		// listen to drag movements
1507		initDragging(content);
1508		content.delta = [parseInt(unify(event).clientX), parseInt(unify(event).clientY)];
1509		// emit drag start event
1510		emitSwipeEvents(content, 'dragStart', content.delta, event.target);
1511	};
1512
1513	function endDrag(content, event) {
1514		cancelDragging(content);
1515		// credits: https://css-tricks.com/simple-swipe-with-vanilla-javascript/
1516		var dx = parseInt(unify(event).clientX), 
1517	    dy = parseInt(unify(event).clientY);
1518	  
1519	  // check if there was a left/right swipe
1520		if(content.delta && (content.delta[0] || content.delta[0] === 0)) {
1521	    var s = getSign(dx - content.delta[0]);
1522			
1523			if(Math.abs(dx - content.delta[0]) > 30) {
1524				(s < 0) ? emitSwipeEvents(content, 'swipeLeft', [dx, dy]) : emitSwipeEvents(content, 'swipeRight', [dx, dy]);	
1525			}
1526	    
1527	    content.delta[0] = false;
1528	  }
1529		// check if there was a top/bottom swipe
1530	  if(content.delta && (content.delta[1] || content.delta[1] === 0)) {
1531	  	var y = getSign(dy - content.delta[1]);
1532
1533	  	if(Math.abs(dy - content.delta[1]) > 30) {
1534	    	(y < 0) ? emitSwipeEvents(content, 'swipeUp', [dx, dy]) : emitSwipeEvents(content, 'swipeDown', [dx, dy]);
1535	    }
1536
1537	    content.delta[1] = false;
1538	  }
1539		// emit drag end event
1540	  emitSwipeEvents(content, 'dragEnd', [dx, dy]);
1541	  content.dragging = false;
1542	};
1543
1544	function drag(content, event) {
1545		if(!content.dragging) return;
1546		// emit dragging event with coordinates
1547		(!window.requestAnimationFrame) 
1548			? content.intervalId = setTimeout(function(){emitDrag.bind(content, event);}, 250) 
1549			: content.intervalId = window.requestAnimationFrame(emitDrag.bind(content, event));
1550	};
1551
1552	function emitDrag(event) {
1553		emitSwipeEvents(this, 'dragging', [parseInt(unify(event).clientX), parseInt(unify(event).clientY)]);
1554	};
1555
1556	function unify(event) { 
1557		// unify mouse and touch events
1558		return event.changedTouches ? event.changedTouches[0] : event; 
1559	};
1560
1561	function emitSwipeEvents(content, eventName, detail, el) {
1562		var trigger = false;
1563		if(el) trigger = el;
1564		// emit event with coordinates
1565		var event = new CustomEvent(eventName, {detail: {x: detail[0], y: detail[1], origin: trigger}});
1566		content.element.dispatchEvent(event);
1567	};
1568
1569	function getSign(x) {
1570		if(!Math.sign) {
1571			return ((x > 0) - (x < 0)) || +x;
1572		} else {
1573			return Math.sign(x);
1574		}
1575	};
1576
1577	window.SwipeContent = SwipeContent;
1578	
1579	//initialize the SwipeContent objects
1580	var swipe = document.getElementsByClassName('js-swipe-content');
1581	if( swipe.length > 0 ) {
1582		for( var i = 0; i < swipe.length; i++) {
1583			(function(i){new SwipeContent(swipe[i]);})(i);
1584		}
1585	}
1586}());
1587// File#: _2_anim-card
1588// Usage: codyhouse.co/license
1589(function() {
1590  var AnimCards = function(element) {
1591    this.element = element;
1592    this.list = this.element.getElementsByTagName('ul')[0];
1593    this.cards = this.list.children;
1594    this.reverseDirection = Util.hasClass(this.element, 'anim-cards--reverse');
1595    this.translate = 0; // store container translate value
1596    this.animationId = false;
1597    this.animating = false;
1598    this.paused = false;
1599    // change speed of animation  
1600    this.animationSpeed = 1; // > 1 to increse speed, < 1 to reduce; always > 0
1601    initAnimCardsEvents(this);
1602  };
1603
1604  function initAnimCardsEvents(cards) {
1605    // init observer
1606    var observer = new IntersectionObserver(animCardsObserve.bind(cards));
1607    observer.observe(cards.element);
1608
1609    cards.element.addEventListener('update-card-width', function(event){ // reset animation on resize
1610      if(cards.animating) {
1611        cancelPrevAnimation(cards);
1612        if(!cards.paused) initAnimCards(cards);
1613      }
1614    });
1615
1616    // play/pause button
1617    cards.element.addEventListener('anim-cards', function(event) {
1618      playCards(cards);
1619    });
1620    cards.element.addEventListener('pause-cards', function(event) {
1621      pauseCards(cards);
1622    });
1623
1624    // pause on hover
1625    var pauseHover = cards.element.getAttribute('data-anim-cards-pause-hover');
1626    if(pauseHover && pauseHover == 'on') {
1627      cards.element.addEventListener('mouseenter', function(){
1628        pauseCards(cards);
1629      });
1630
1631      cards.element.addEventListener('mouseleave', function(){
1632        playCards(cards);
1633      });
1634    }
1635  };
1636
1637  function pauseCards(cards) { // pause cards - play/pause button or mouseenter
1638    cards.paused = true;
1639    if(cards.animating) {
1640      cancelPrevAnimation(cards);
1641      cards.timestamp = false;
1642    }
1643  };
1644
1645  function playCards(cards) { // play cards - play/pause button or mouseleave
1646    cards.paused = false;
1647    if(cards.animating) initAnimCards(cards);
1648  };
1649
1650  function animCardsObserve(entries) {
1651    if(entries[0].isIntersecting) {
1652      this.animating = true;
1653      if(!this.paused) initAnimCards(this); // init animation
1654    } else {
1655      this.animating = false;
1656      cancelPrevAnimation(this);
1657    }
1658  };
1659
1660  function initAnimCards(cards) {
1661    if(cards.paused) return;
1662    cards.cardWidth = getAnimCardsWidth(cards);
1663    cards.animationId = window.requestAnimationFrame(triggerAnimCards.bind(cards));
1664  };
1665
1666  function triggerAnimCards(timestamp) {
1667    cancelPrevAnimation(this);
1668    if(!this.timestamp) this.timestamp = timestamp;
1669    var translateIncrease = (this.timestamp - timestamp)*0.06*this.animationSpeed;
1670    this.timestamp = timestamp;
1671    updateAnimCardsTranslate(this, translateIncrease);
1672    updateAnimCardsList(this);
1673    setTranslate(this);
1674    this.animationId = window.requestAnimationFrame(triggerAnimCards.bind(this));
1675  };
1676
1677  function updateAnimCardsTranslate(cards, translate) {
1678    cards.translate = cards.reverseDirection ? cards.translate - translate : cards.translate + translate;
1679    cards.translate = Math.round(Math.abs(cards.translate));
1680    if(!cards.reverseDirection) cards.translate = cards.translate*-1;
1681  };
1682
1683  function updateAnimCardsList(cards) {
1684    if(Math.abs(cards.translate) <= cards.cardWidth) return;
1685    // need to remove first item from the list and append it to the end of list
1686    cards.translate = Math.abs(cards.translate) - cards.cardWidth;
1687    if(!cards.reverseDirection) cards.translate = cards.translate*-1;
1688    var clone = cards.cards[0].cloneNode(true);
1689    cards.list.removeChild(cards.cards[0]);
1690    cards.list.appendChild(clone);
1691  };
1692
1693  function setTranslate(cards) {
1694    cards.list.style.transform = 'translateX('+cards.translate+'px)';
1695    cards.list.style.msTransform = 'translateX('+cards.translate+'px)';
1696  };
1697
1698  function getAnimCardsWidth(cards) {
1699    return parseFloat(window.getComputedStyle(cards.cards[0]).marginRight) + cards.cards[0].offsetWidth;
1700  };
1701
1702  function cancelPrevAnimation(cards) {
1703    if(cards.animationId) {
1704      window.cancelAnimationFrame(cards.animationId);
1705      cards.animationId = false;
1706    }
1707  };
1708
1709  function initAnimCardsController(controller) {
1710    // play/pause btn controller
1711    var cardsContainer = document.getElementById(controller.getAttribute('aria-controls'));
1712    if(!cardsContainer) return;
1713    var cardsList = cardsContainer.getElementsByClassName('js-anim-cards');
1714    if(cardsList.length < 1) return;
1715
1716    // detect click
1717    controller.addEventListener('click', function(event){
1718      var playAnimation = controller.getAttribute('aria-pressed') == 'true';
1719      var animEvent = playAnimation ? 'anim-cards' : 'pause-cards';
1720      playAnimation ? controller.setAttribute('aria-pressed', 'false') : controller.setAttribute('aria-pressed', 'true');
1721      for(var i = 0; i < cardsList.length; i++) {
1722        cardsList[i].dispatchEvent(new CustomEvent(animEvent));
1723      }
1724    });
1725  };
1726
1727  //initialize the AnimCards objects
1728  var animCards = document.getElementsByClassName('js-anim-cards'),
1729    requestAnimationFrameSupported = window.requestAnimationFrame,
1730    reducedMotion = Util.osHasReducedMotion(),
1731    intersectionObserverSupported = ('IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype);
1732
1733	if( animCards.length > 0 ) {
1734    var animCardsArray = [];
1735		for( var i = 0; i < animCards.length; i++) {
1736      if(!requestAnimationFrameSupported || reducedMotion || !intersectionObserverSupported) {
1737        // animation is off if requestAnimationFrame/IntersectionObserver is not supported or reduced motion is on
1738        Util.addClass(animCards[i], 'anim-cards--anim-off');
1739      } else {(function(i){animCardsArray.push(new AnimCards(animCards[i]));})(i);}
1740    }
1741
1742    if(animCardsArray.length > 0) {
1743      var resizingId = false,
1744        customEvent = new CustomEvent('update-card-width');
1745      
1746      window.addEventListener('resize', function() {
1747        clearTimeout(resizingId);
1748        resizingId = setTimeout(doneResizing, 500);
1749      });
1750
1751      function doneResizing() {
1752        for( var i = 0; i < animCardsArray.length; i++) {
1753          (function(i){animCardsArray[i].element.dispatchEvent(customEvent)})(i);
1754        };
1755      };
1756    };
1757
1758    // check play/pause buttons
1759    var animCardsControl = document.getElementsByClassName('js-anim-cards-control');
1760    if(animCardsControl.length > 0) {
1761      for( var i = 0; i < animCardsControl.length; i++) {
1762        if(!requestAnimationFrameSupported || reducedMotion || !intersectionObserverSupported) {
1763          Util.addClass(animCardsControl[i], 'is-hidden');
1764        } else {
1765          (function(i){initAnimCardsController(animCardsControl[i]);})(i);
1766        } 
1767      }
1768    }
1769  }
1770}());
1771// File#: _2_carousel
1772// Usage: codyhouse.co/license
1773(function() {
1774  var Carousel = function(opts) {
1775    this.options = Util.extend(Carousel.defaults , opts);
1776    this.element = this.options.element;
1777    this.listWrapper = this.element.getElementsByClassName('carousel__wrapper')[0];
1778    this.list = this.element.getElementsByClassName('carousel__list')[0];
1779    this.items = this.element.getElementsByClassName('carousel__item');
1780    this.initItems = []; // store only the original elements - will need this for cloning
1781    this.itemsNb = this.items.length; //original number of items
1782    this.visibItemsNb = 1; // tot number of visible items
1783    this.itemsWidth = 1; // this will be updated with the right width of items
1784    this.itemOriginalWidth = false; // store the initial width to use it on resize
1785    this.selectedItem = 0; // index of first visible item 
1786    this.translateContainer = 0; // this will be the amount the container has to be translated each time a new group has to be shown (negative)
1787    this.containerWidth = 0; // this will be used to store the total width of the carousel (including the overflowing part)
1788    this.ariaLive = false;
1789    // navigation
1790    this.controls = this.element.getElementsByClassName('js-carousel__control');
1791    this.animating = false;
1792    // autoplay
1793    this.autoplayId = false;
1794    this.autoplayPaused = false;
1795    //drag
1796    this.dragStart = false;
1797    // resize
1798    this.resizeId = false;
1799    // used to re-initialize js
1800    this.cloneList = [];
1801    // store items min-width
1802    this.itemAutoSize = false;
1803    // store translate value (loop = off)
1804    this.totTranslate = 0;
1805    // modify loop option if navigation is on
1806    if(this.options.nav) this.options.loop = false;
1807    // store counter elements (if present)
1808    this.counter = this.element.getElementsByClassName('js-carousel__counter');
1809    this.counterTor = this.element.getElementsByClassName('js-carousel__counter-tot');
1810    initCarouselLayout(this); // get number visible items + width items
1811    setItemsWidth(this, true); 
1812    insertBefore(this, this.visibItemsNb); // insert clones before visible elements
1813    updateCarouselClones(this); // insert clones after visible elements
1814    resetItemsTabIndex(this); // make sure not visible items are not focusable
1815    initAriaLive(this); // set aria-live region for SR
1816    initCarouselEvents(this); // listen to events
1817    initCarouselCounter(this);
1818    Util.addClass(this.element, 'carousel--loaded');
1819  };
1820  
1821  //public carousel functions
1822  Carousel.prototype.showNext = function() {
1823    showNextItems(this);
1824  };
1825
1826  Carousel.prototype.showPrev = function() {
1827    showPrevItems(this);
1828  };
1829
1830  Carousel.prototype.startAutoplay = function() {
1831    startAutoplay(this);
1832  };
1833
1834  Carousel.prototype.pauseAutoplay = function() {
1835    pauseAutoplay(this);
1836  };
1837  
1838  //private carousel functions
1839  function initCarouselLayout(carousel) {
1840    // evaluate size of single elements + number of visible elements
1841    var itemStyle = window.getComputedStyle(carousel.items[0]),
1842      containerStyle = window.getComputedStyle(carousel.listWrapper),
1843      itemWidth = parseFloat(itemStyle.getPropertyValue('width')),
1844      itemMargin = parseFloat(itemStyle.getPropertyValue('margin-right')),
1845      containerPadding = parseFloat(containerStyle.getPropertyValue('padding-left')),
1846      containerWidth = parseFloat(containerStyle.getPropertyValue('width'));
1847
1848    if(!carousel.itemAutoSize) {
1849      carousel.itemAutoSize = itemWidth;
1850    }
1851
1852    // if carousel.listWrapper is hidden -> make sure to retrieve the proper width
1853    containerWidth = getCarouselWidth(carousel, containerWidth);
1854
1855    if( !carousel.itemOriginalWidth) { // on resize -> use initial width of items to recalculate 
1856      carousel.itemOriginalWidth = itemWidth;
1857    } else {
1858      itemWidth = carousel.itemOriginalWidth;
1859    }
1860
1861    if(carousel.itemAutoSize) {
1862      carousel.itemOriginalWidth = parseInt(carousel.itemAutoSize);
1863      itemWidth = carousel.itemOriginalWidth;
1864    }
1865    // make sure itemWidth is smaller than container width
1866    if(containerWidth < itemWidth) {
1867      carousel.itemOriginalWidth = containerWidth
1868      itemWidth = carousel.itemOriginalWidth;
1869    }
1870    // get proper width of elements
1871    carousel.visibItemsNb = parseInt((containerWidth - 2*containerPadding + itemMargin)/(itemWidth+itemMargin));
1872    carousel.itemsWidth = parseFloat( (((containerWidth - 2*containerPadding + itemMargin)/carousel.visibItemsNb) - itemMargin).toFixed(1));
1873    carousel.containerWidth = (carousel.itemsWidth+itemMargin)* carousel.items.length;
1874    carousel.translateContainer = 0 - ((carousel.itemsWidth+itemMargin)* carousel.visibItemsNb);
1875    // flexbox fallback
1876    if(!flexSupported) carousel.list.style.width = (carousel.itemsWidth + itemMargin)*carousel.visibItemsNb*3+'px';
1877    
1878    // this is used when loop == off
1879    carousel.totTranslate = 0 - carousel.selectedItem*(carousel.itemsWidth+itemMargin);
1880    if(carousel.items.length <= carousel.visibItemsNb) carousel.totTranslate = 0;
1881
1882    centerItems(carousel); // center items if carousel.items.length < visibItemsNb
1883    alignControls(carousel); // check if controls need to be aligned to a different element
1884  };
1885
1886  function setItemsWidth(carousel, bool) {
1887    for(var i = 0; i < carousel.items.length; i++) {
1888      carousel.items[i].style.width = carousel.itemsWidth+"px";
1889      if(bool) carousel.initItems.push(carousel.items[i]);
1890    }
1891  };
1892
1893  function updateCarouselClones(carousel) { 
1894    if(!carousel.options.loop) return;
1895    // take care of clones after visible items (needs to run after the update of clones before visible items)
1896    if(carousel.items.length < carousel.visibItemsNb*3) {
1897      insertAfter(carousel, carousel.visibItemsNb*3 - carousel.items.length, carousel.items.length - carousel.visibItemsNb*2);
1898    } else if(carousel.items.length > carousel.visibItemsNb*3 ) {
1899      removeClones(carousel, carousel.visibItemsNb*3, carousel.items.length - carousel.visibItemsNb*3);
1900    }
1901    // set proper translate value for the container
1902    setTranslate(carousel, 'translateX('+carousel.translateContainer+'px)');
1903  };
1904
1905  function initCarouselEvents(carousel) {
1906    // listen for click on previous/next arrow
1907    // dots navigation
1908    if(carousel.options.nav) {
1909      carouselCreateNavigation(carousel);
1910      carouselInitNavigationEvents(carousel);
1911    }
1912
1913    if(carousel.controls.length > 0) {
1914      carousel.controls[0].addEventListener('click', function(event){
1915        event.preventDefault();
1916        showPrevItems(carousel);
1917        updateAriaLive(carousel);
1918      });
1919      carousel.controls[1].addEventListener('click', function(event){
1920        event.preventDefault();
1921        showNextItems(carousel);
1922        updateAriaLive(carousel);
1923      });
1924
1925      // update arrow visility -> loop == off only
1926      resetCarouselControls(carousel);
1927      // emit custom event - items visible
1928      emitCarouselActiveItemsEvent(carousel)
1929    }
1930    // autoplay
1931    if(carousel.options.autoplay) {
1932      startAutoplay(carousel);
1933      // pause autoplay if user is interacting with the carousel
1934      carousel.element.addEventListener('mouseenter', function(event){
1935        pauseAutoplay(carousel);
1936        carousel.autoplayPaused = true;
1937      });
1938      carousel.element.addEventListener('focusin', function(event){
1939        pauseAutoplay(carousel);
1940        carousel.autoplayPaused = true;
1941      });
1942      carousel.element.addEventListener('mouseleave', function(event){
1943        carousel.autoplayPaused = false;
1944        startAutoplay(carousel);
1945      });
1946      carousel.element.addEventListener('focusout', function(event){
1947        carousel.autoplayPaused = false;
1948        startAutoplay(carousel);
1949      });
1950    }
1951    // drag events
1952    if(carousel.options.drag && window.requestAnimationFrame) {
1953      //init dragging
1954      new SwipeContent(carousel.element);
1955      carousel.element.addEventListener('dragStart', function(event){
1956        if(event.detail.origin && event.detail.origin.closest('.js-carousel__control')) return;
1957        if(event.detail.origin && event.detail.origin.closest('.js-carousel__navigation')) return;
1958        if(event.detail.origin && !event.detail.origin.closest('.carousel__wrapper')) return;
1959        Util.addClass(carousel.element, 'carousel--is-dragging');
1960        pauseAutoplay(carousel);
1961        carousel.dragStart = event.detail.x;
1962        animateDragEnd(carousel);
1963      });
1964      carousel.element.addEventListener('dragging', function(event){
1965        if(!carousel.dragStart) return;
1966        if(carousel.animating || Math.abs(event.detail.x - carousel.dragStart) < 10) return;
1967        var translate = event.detail.x - carousel.dragStart + carousel.translateContainer;
1968        if(!carousel.options.loop) {
1969          translate = event.detail.x - carousel.dragStart + carousel.totTranslate; 
1970        }
1971        setTranslate(carousel, 'translateX('+translate+'px)');
1972      });
1973    }
1974    // reset on resize
1975    window.addEventListener('resize', function(event){
1976      pauseAutoplay(carousel);
1977      clearTimeout(carousel.resizeId);
1978      carousel.resizeId = setTimeout(function(){
1979        resetCarouselResize(carousel);
1980        // reset dots navigation
1981        resetDotsNavigation(carousel);
1982        resetCarouselControls(carousel);
1983        setCounterItem(carousel);
1984        startAutoplay(carousel);
1985        centerItems(carousel); // center items if carousel.items.length < visibItemsNb
1986        alignControls(carousel);
1987        // emit custom event - items visible
1988        emitCarouselActiveItemsEvent(carousel)
1989      }, 250)
1990    });
1991    // keyboard navigation
1992    carousel.element.addEventListener('keydown', function(event){
1993			if(event.keyCode && event.keyCode == 39 || event.key && event.key.toLowerCase() == 'arrowright') {
1994				carousel.showNext();
1995			} else if(event.keyCode && event.keyCode == 37 || event.key && event.key.toLowerCase() == 'arrowleft') {
1996				carousel.showPrev();
1997			}
1998		});
1999  };
2000
2001  function showPrevItems(carousel) {
2002    if(carousel.animating) return;
2003    carousel.animating = true;
2004    carousel.selectedItem = getIndex(carousel, carousel.selectedItem - carousel.visibItemsNb);
2005    animateList(carousel, '0', 'prev');
2006  };
2007
2008  function showNextItems(carousel) {
2009    if(carousel.animating) return;
2010    carousel.animating = true;
2011    carousel.selectedItem = getIndex(carousel, carousel.selectedItem + carousel.visibItemsNb);
2012    animateList(carousel, carousel.translateContainer*2+'px', 'next');
2013  };
2014
2015  function animateDragEnd(carousel) { // end-of-dragging animation
2016    carousel.element.addEventListener('dragEnd', function cb(event){
2017      carousel.element.removeEventListener('dragEnd', cb);
2018      Util.removeClass(carousel.element, 'carousel--is-dragging');
2019      if(event.detail.x - carousel.dragStart < -40) {
2020        carousel.animating = false;
2021        showNextItems(carousel);
2022      } else if(event.detail.x - carousel.dragStart > 40) {
2023        carousel.animating = false;
2024        showPrevItems(carousel);
2025      } else if(event.detail.x - carousel.dragStart == 0) { // this is just a click -> no dragging
2026        return;
2027      } else { // not dragged enought -> do not update carousel, just reset
2028        carousel.animating = true;
2029        animateList(carousel, carousel.translateContainer+'px', false);
2030      }
2031      carousel.dragStart = false;
2032    });
2033  };
2034
2035  function animateList(carousel, translate, direction) { // takes care of changing visible items
2036    pauseAutoplay(carousel);
2037    Util.addClass(carousel.list, 'carousel__list--animating');
2038    var initTranslate = carousel.totTranslate;
2039    if(!carousel.options.loop) {
2040      translate = noLoopTranslateValue(carousel, direction);
2041    }
2042    setTimeout(function() {setTranslate(carousel, 'translateX('+translate+')');});
2043    if(transitionSupported) {
2044      carousel.list.addEventListener('transitionend', function cb(event){
2045        if(event.propertyName && event.propertyName != 'transform') return;
2046        Util.removeClass(carousel.list, 'carousel__list--animating');
2047        carousel.list.removeEventListener('transitionend', cb);
2048        animateListCb(carousel, direction);
2049      });
2050    } else {
2051      animateListCb(carousel, direction);
2052    }
2053    if(!carousel.options.loop && (initTranslate == carousel.totTranslate)) {
2054      // translate value was not updated -> trigger transitionend event to restart carousel
2055      carousel.list.dispatchEvent(new CustomEvent('transitionend'));
2056    }
2057    resetCarouselControls(carousel);
2058    setCounterItem(carousel);
2059    // emit custom event - items visible
2060    emitCarouselActiveItemsEvent(carousel)
2061  };
2062
2063  function noLoopTranslateValue(carousel, direction) {
2064    var translate = carousel.totTranslate;
2065    if(direction == 'next') {
2066      translate = carousel.totTranslate + carousel.translateContainer;
2067    } else if(direction == 'prev') {
2068      translate = carousel.totTranslate - carousel.translateContainer;
2069    } else if(direction == 'click') {
2070      translate = carousel.selectedDotIndex*carousel.translateContainer;
2071    }
2072    if(translate > 0)  {
2073      translate = 0;
2074      carousel.selectedItem = 0;
2075    }
2076    if(translate < - carousel.translateContainer - carousel.containerWidth) {
2077      translate = - carousel.translateContainer - carousel.containerWidth;
2078      carousel.selectedItem = carousel.items.length - carousel.visibItemsNb;
2079    }
2080    if(carousel.visibItemsNb > carousel.items.length) translate = 0;
2081    carousel.totTranslate = translate;
2082    return translate + 'px';
2083  };
2084
2085  function animateListCb(carousel, direction) { // reset actions after carousel has been updated
2086    if(direction) updateClones(carousel, direction);
2087    carousel.animating = false;
2088    // reset autoplay
2089    startAutoplay(carousel);
2090    // reset tab index
2091    resetItemsTabIndex(carousel);
2092  };
2093
2094  function updateClones(carousel, direction) {
2095    if(!carousel.options.loop) return;
2096    // at the end of each animation, we need to update the clones before and after the visible items
2097    var index = (direction == 'next') ? 0 : carousel.items.length - carousel.visibItemsNb;
2098    // remove clones you do not need anymore
2099    removeClones(carousel, index, false);
2100    // add new clones 
2101    (direction == 'next') ? insertAfter(carousel, carousel.visibItemsNb, 0) : insertBefore(carousel, carousel.visibItemsNb);
2102    //reset transform
2103    setTranslate(carousel, 'translateX('+carousel.translateContainer+'px)');
2104  };
2105
2106  function insertBefore(carousel, nb, delta) {
2107    if(!carousel.options.loop) return;
2108    var clones = document.createDocumentFragment();
2109    var start = 0;
2110    if(delta) start = delta;
2111    for(var i = start; i < nb; i++) {
2112      var index = getIndex(carousel, carousel.selectedItem - i - 1),
2113        clone = carousel.initItems[index].cloneNode(true);
2114      Util.addClass(clone, 'js-clone');
2115      clones.insertBefore(clone, clones.firstChild);
2116    }
2117    carousel.list.insertBefore(clones, carousel.list.firstChild);
2118    emitCarouselUpdateEvent(carousel);
2119  };
2120
2121  function insertAfter(carousel, nb, init) {
2122    if(!carousel.options.loop) return;
2123    var clones = document.createDocumentFragment();
2124    for(var i = init; i < nb + init; i++) {
2125      var index = getIndex(carousel, carousel.selectedItem + carousel.visibItemsNb + i),
2126        clone = carousel.initItems[index].cloneNode(true);
2127      Util.addClass(clone, 'js-clone');
2128      clones.appendChild(clone);
2129    }
2130    carousel.list.appendChild(clones);
2131    emitCarouselUpdateEvent(carousel);
2132  };
2133
2134  function removeClones(carousel, index, bool) {
2135    if(!carousel.options.loop) return;
2136    if( !bool) {
2137      bool = carousel.visibItemsNb;
2138    }
2139    for(var i = 0; i < bool; i++) {
2140      if(carousel.items[index]) carousel.list.removeChild(carousel.items[index]);
2141    }
2142  };
2143
2144  function resetCarouselResize(carousel) { // reset carousel on resize
2145    var visibleItems = carousel.visibItemsNb;
2146    // get new items min-width value
2147    resetItemAutoSize(carousel);
2148    initCarouselLayout(carousel); 
2149    setItemsWidth(carousel, false);
2150    resetItemsWidth(carousel); // update the array of original items -> array used to create clones
2151    if(carousel.options.loop) {
2152      if(visibleItems > carousel.visibItemsNb) {
2153        removeClones(carousel, 0, visibleItems - carousel.visibItemsNb);
2154      } else if(visibleItems < carousel.visibItemsNb) {
2155        insertBefore(carousel, carousel.visibItemsNb, visibleItems);
2156      }
2157      updateCarouselClones(carousel); // this will take care of translate + after elements
2158    } else {
2159      // reset default translate to a multiple value of (itemWidth + margin)
2160      var translate = noLoopTranslateValue(carousel);
2161      setTranslate(carousel, 'translateX('+translate+')');
2162    }
2163    resetItemsTabIndex(carousel); // reset focusable elements
2164  };
2165
2166  function resetItemAutoSize(carousel) {
2167    if(!cssPropertiesSupported) return;
2168    // remove inline style
2169    carousel.items[0].removeAttribute('style');
2170    // get original item width 
2171    carousel.itemAutoSize = getComputedStyle(carousel.items[0]).getPropertyValue('width');
2172  };
2173
2174  function resetItemsWidth(carousel) {
2175    for(var i = 0; i < carousel.initItems.length; i++) {
2176      carousel.initItems[i].style.width = carousel.itemsWidth+"px";
2177    }
2178  };
2179
2180  function resetItemsTabIndex(carousel) {
2181    var carouselActive = carousel.items.length > carousel.visibItemsNb;
2182    var j = carousel.items.length;
2183    for(var i = 0; i < carousel.items.length; i++) {
2184      if(carousel.options.loop) {
2185        if(i < carousel.visibItemsNb || i >= 2*carousel.visibItemsNb ) {
2186          carousel.items[i].setAttribute('tabindex', '-1');
2187        } else {
2188          if(i < j) j = i;
2189          carousel.items[i].removeAttribute('tabindex');
2190        }
2191      } else {
2192        if( (i < carousel.selectedItem || i >= carousel.selectedItem + carousel.visibItemsNb) && carouselActive) {
2193          carousel.items[i].setAttribute('tabindex', '-1');
2194        } else {
2195          if(i < j) j = i;
2196          carousel.items[i].removeAttribute('tabindex');
2197        }
2198      }
2199    }
2200    resetVisibilityOverflowItems(carousel, j);
2201  };
2202
2203  function startAutoplay(carousel) {
2204    if(carousel.options.autoplay && !carousel.autoplayId && !carousel.autoplayPaused) {
2205      carousel.autoplayId = setInterval(function(){
2206        showNextItems(carousel);
2207      }, carousel.options.autoplayInterval);
2208    }
2209  };
2210
2211  function pauseAutoplay(carousel) {
2212    if(carousel.options.autoplay) {
2213      clearInterval(carousel.autoplayId);
2214      carousel.autoplayId = false;
2215    }
2216  };
2217
2218  function initAriaLive(carousel) { // create an aria-live region for SR
2219    if(!carousel.options.ariaLive) return;
2220    // create an element that will be used to announce the new visible slide to SR
2221    var srLiveArea = document.createElement('div');
2222    Util.setAttributes(srLiveArea, {'class': 'sr-only js-carousel__aria-live', 'aria-live': 'polite', 'aria-atomic': 'true'});
2223    carousel.element.appendChild(srLiveArea);
2224    carousel.ariaLive = srLiveArea;
2225  };
2226
2227  function updateAriaLive(carousel) { // announce to SR which items are now visible
2228    if(!carousel.options.ariaLive) return;
2229    carousel.ariaLive.innerHTML = 'Item '+(carousel.selectedItem + 1)+' selected. '+carousel.visibItemsNb+' items of '+carou
2229sel.initItems.length+' visible';
2230  };
2231
2232  function getIndex(carousel, index) {
2233    if(index < 0) index = getPositiveValue(index, carousel.itemsNb);
2234    if(index >= carousel.itemsNb) index = index % carousel.itemsNb;
2235    return index;
2236  };
2237
2238  function getPositiveValue(value, add) {
2239    value = value + add;
2240    if(value > 0) return value;
2241    else return getPositiveValue(value, add);
2242  };
2243
2244  function setTranslate(carousel, translate) {
2245    carousel.list.style.transform = translate;
2246    carousel.list.style.msTransform = translate;
2247  };
2248
2249  function getCarouselWidth(carousel, computedWidth) { // retrieve carousel width if carousel is initially hidden
2250    var closestHidden = carousel.listWrapper.closest('.sr-only');
2251    if(closestHidden) { // carousel is inside an .sr-only (visually hidden) element
2252      Util.removeClass(closestHidden, 'sr-only');
2253      computedWidth = carousel.listWrapper.offsetWidth;
2254      Util.addClass(closestHidden, 'sr-only');
2255    } else if(isNaN(computedWidth)){
2256      computedWidth = getHiddenParentWidth(carousel.element, carousel);
2257    }
2258    return computedWidth;
2259  };
2260
2261  function getHiddenParentWidth(element, carousel) {
2262    var parent = element.parentElement;
2263    if(parent.tagName.toLowerCase() == 'html') return 0;
2264    var style = window.getComputedStyle(parent);
2265    if(style.display == 'none' || style.visibility == 'hidden') {
2266      parent.setAttribute('style', 'display: block!important; visibility: visible!important;');
2267      var computedWidth = carousel.listWrapper.offsetWidth;
2268      parent.style.display = '';
2269      parent.style.visibility = '';
2270      return computedWidth;
2271    } else {
2272      return getHiddenParentWidth(parent, carousel);
2273    }
2274  };
2275
2276  function resetCarouselControls(carousel) {
2277    if(carousel.options.loop) return;
2278    // update arrows status
2279    if(carousel.controls.length > 0) {
2280      (carousel.totTranslate == 0) 
2281        ? carousel.controls[0].setAttribute('disabled', true) 
2282        : carousel.controls[0].removeAttribute('disabled');
2283      (carousel.totTranslate == (- carousel.translateContainer - carousel.containerWidth) || carousel.items.length <= carousel.visibItemsNb) 
2284        ? carousel.controls[1].setAttribute('disabled', true) 
2285        : carousel.controls[1].removeAttribute('disabled');
2286    }
2287    // update carousel dots
2288    if(carousel.options.nav) {
2289      var selectedDot = carousel.navigation.getElementsByClassName(carousel.options.navigationItemClass+'--selected');
2290      if(selectedDot.length > 0) Util.removeClass(selectedDot[0], carousel.options.navigationItemClass+'--selected');
2291
2292      var newSelectedIndex = getSelectedDot(carousel);
2293      if(carousel.totTranslate == (- carousel.translateContainer - carousel.containerWidth)) {
2294        newSelectedIndex = carousel.navDots.length - 1;
2295      }
2296      Util.addClass(carousel.navDots[newSelectedIndex], carousel.options.navigationItemClass+'--selected');
2297    }
2298
2299    (carousel.totTranslate == 0 && (carousel.totTranslate == (- carousel.translateContainer - carousel.containerWidth) || carousel.items.length <= carousel.visibItemsNb))
2300        ? Util.addClass(carousel.element, 'carousel--hide-controls')
2301        : Util.removeClass(carousel.element, 'carousel--hide-controls');
2302  };
2303
2304  function emitCarouselUpdateEvent(carousel) {
2305    carousel.cloneList = [];
2306    var clones = carousel.element.querySelectorAll('.js-clone');
2307    for(var i = 0; i < clones.length; i++) {
2308      Util.removeClass(clones[i], 'js-clone');
2309      carousel.cloneList.push(clones[i]);
2310    }
2311    emitCarouselEvents(carousel, 'carousel-updated', carousel.cloneList);
2312  };
2313
2314  function carouselCreateNavigation(carousel) {
2315    if(carousel.element.getElementsByClassName('js-carousel__navigation').length > 0) return;
2316  
2317    var navigation = document.createElement('ol'),
2318      navChildren = '';
2319
2320    var navClasses = carousel.options.navigationClass+' js-carousel__navigation';
2321    if(carousel.items.length <= carousel.visibItemsNb) {
2322      navClasses = navClasses + ' is-hidden';
2323    }
2324    navigation.setAttribute('class', navClasses);
2325
2326    var dotsNr = Math.ceil(carousel.items.length/carousel.visibItemsNb),
2327      selectedDot = getSelectedDot(carousel),
2328      indexClass = carousel.options.navigationPagination ? '' : 'sr-only'
2329    for(var i = 0; i < dotsNr; i++) {
2330      var className = (i == selectedDot) ? 'class="'+carousel.options.navigationItemClass+' '+carousel.options.navigationItemClass+'--selected js-carousel__nav-item"' :  'class="'+carousel.options.navigationItemClass+' js-carousel__nav-item"';
2331      navChildren = navChildren + '<li '+className+'><button class="reset js-tab-focus" style="outline: none;"><span class="'+indexClass+'">'+ (i+1) + '</span></button></li>';
2332    }
2333    navigation.innerHTML = navChildren;
2334    carousel.element.appendChild(navigation);
2335  };
2336
2337  function carouselInitNavigationEvents(carousel) {
2338    carousel.navigation = carousel.element.getElementsByClassName('js-carousel__navigation')[0];
2339    carousel.navDots = carousel.element.getElementsByClassName('js-carousel__nav-item');
2340    carousel.navIdEvent = carouselNavigationClick.bind(carousel);
2341    carousel.navigation.addEventListener('click', carousel.navIdEvent);
2342  };
2343
2344  function carouselRemoveNavigation(carousel) {
2345    if(carousel.navigation) carousel.element.removeChild(carousel.navigation);
2346    if(carousel.navIdEvent) carousel.navigation.removeEventListener('click', carousel.navIdEvent);
2347  };
2348
2349  function resetDotsNavigation(carousel) {
2350    if(!carousel.options.nav) return;
2351    carouselRemoveNavigation(carousel);
2352    carouselCreateNavigation(carousel);
2353    carouselInitNavigationEvents(carousel);
2354  };
2355
2356  function carouselNavigationClick(event) {
2357    var dot = event.target.closest('.js-carousel__nav-item');
2358    if(!dot) return;
2359    if(this.animating) return;
2360    this.animating = true;
2361    var index = Util.getIndexInArray(this.navDots, dot);
2362    this.selectedDotIndex = index;
2363    this.selectedItem = index*this.visibItemsNb;
2364    animateList(this, false, 'click');
2365  };
2366
2367  function getSelectedDot(carousel) {
2368    return Math.ceil(carousel.selectedItem/carousel.visibItemsNb);
2369  };
2370
2371  function initCarouselCounter(carousel) {
2372    if(carousel.counterTor.length > 0) carousel.counterTor[0].textContent = carousel.itemsNb;
2373    setCounterItem(carousel);
2374  };
2375
2376  function setCounterItem(carousel) {
2377    if(carousel.counter.length == 0) return;
2378    var totalItems = carousel.selectedItem + carousel.visibItemsNb;
2379    if(totalItems > carousel.items.length) totalItems = carousel.items.length;
2380    carousel.counter[0].textContent = totalItems;
2381  };
2382
2383  function centerItems(carousel) {
2384    if(!carousel.options.justifyContent) return;
2385    Util.toggleClass(carousel.list, 'justify-center', carousel.items.length < carousel.visibItemsNb);
2386  };
2387
2388  function alignControls(carousel) {
2389    if(carousel.controls.length < 1 || !carousel.options.alignControls) return;
2390    if(!carousel.controlsAlignEl) {
2391      carousel.controlsAlignEl = carousel.element.querySelector(carousel.options.alignControls);
2392    }
2393    if(!carousel.controlsAlignEl) return;
2394    var translate = (carousel.element.offsetHeight - carousel.controlsAlignEl.offsetHeight);
2395    for(var i = 0; i < carousel.controls.length; i++) {
2396      carousel.controls[i].style.marginBottom = translate + 'px';
2397    }
2398  };
2399
2400  function emitCarouselActiveItemsEvent(carousel) {
2401    emitCarouselEvents(carousel, 'carousel-active-items', {firstSelectedItem: carousel.selectedItem, visibleItemsNb: carousel.visibItemsNb});
2402  };
2403
2404  function emitCarouselEvents(carousel, eventName, eventDetail) {
2405    var event = new CustomEvent(eventName, {detail: eventDetail});
2406    carousel.element.dispatchEvent(event);
2407  };
2408
2409  function resetVisibilityOverflowItems(carousel, j) {
2410    if(!carousel.options.overflowItems) return;
2411    var itemWidth = carousel.containerWidth/carousel.items.length,
2412      delta = (window.innerWidth - itemWidth*carousel.visibItemsNb)/2,
2413      overflowItems = Math.ceil(delta/itemWidth);
2414
2415    for(var i = 0; i < overflowItems; i++) {
2416      var indexPrev = j - 1 - i; // prev element
2417      if(indexPrev >= 0 ) carousel.items[indexPrev].removeAttribute('tabindex');
2418      var indexNext = j + carousel.visibItemsNb + i; // next element
2419      if(indexNext < carousel.items.length) carousel.items[indexNext].removeAttribute('tabindex');
2420    }
2421  };
2422
2423  Carousel.defaults = {
2424    element : '',
2425    autoplay : false,
2426    autoplayInterval: 5000,
2427    loop: true,
2428    nav: false,
2429    navigationItemClass: 'carousel__nav-item',
2430    navigationClass: 'carousel__navigation',
2431    navigationPagination: false,
2432    drag: false,
2433    justifyContent: false,
2434    alignControls: false,
2435    overflowItems: false
2436  };
2437
2438  window.Carousel = Carousel;
2439
2440  //initialize the Carousel objects
2441  var carousels = document.getElementsByClassName('js-carousel'),
2442    flexSupported = Util.cssSupports('align-items', 'stretch'),
2443    transitionSupported = Util.cssSupports('transition'),
2444    cssPropertiesSupported = ('CSS' in window && CSS.supports('color', 'var(--color-var)'));
2445
2446  if( carousels.length > 0) {
2447    for( var i = 0; i < carousels.length; i++) {
2448      (function(i){
2449        var autoplay = (carousels[i].getAttribute('data-autoplay') && carousels[i].getAttribute('data-autoplay') == 'on') ? true : false,
2450          autoplayInterval = (carousels[i].getAttribute('data-autoplay-interval')) ? carousels[i].getAttribute('data-autoplay-interval') : 5000,
2451          drag = (carousels[i].getAttribute('data-drag') && carousels[i].getAttribute('data-drag') == 'on') ? true : false,
2452          loop = (carousels[i].getAttribute('data-loop') && carousels[i].getAttribute('data-loop') == 'off') ? false : true,
2453          nav = (carousels[i].getAttribute('data-navigation') && carousels[i].getAttribute('data-navigation') == 'on') ? true : false,
2454          navigationItemClass = carousels[i].getAttribute('data-navigation-item-class') ? carousels[i].getAttribute('data-navigation-item-class') : 'carousel__nav-item',
2455          navigationClass = carousels[i].getAttribute('data-navigation-class') ? carousels[i].getAttribute('data-navigation-class') : 'carousel__navigation',
2456          navigationPagination = (carousels[i].getAttribute('data-navigation-pagination') && carousels[i].getAttribute('data-navigation-pagination') == 'on') ? true : false,
2457          overflowItems = (carousels[i].getAttribute('data-overflow-items') && carousels[i].getAttribute('data-overflow-items') == 'on') ? true : false,
2458          alignControls = carousels[i].getAttribute('data-align-controls') ? carousels[i].getAttribute('data-align-controls') : false,
2459          justifyContent = (carousels[i].getAttribute('data-justify-content') && carousels[i].getAttribute('data-justify-content') == 'on') ? true : false;
2460        new Carousel({element: carousels[i], autoplay : autoplay, autoplayInterval : autoplayInterval, drag: drag, ariaLive: true, loop: loop, nav: nav, navigationItemClass: navigationItemClass, navigationPagination: navigationPagination, navigationClass: navigationClass, overflowItems: overflowItems, justifyContent: justifyContent, alignControls: alignControls});
2461      })(i);
2462    }
2463  };
2464}());
2465// File#: _2_filterable-product-gallery
2466// Usage: codyhouse.co/license
2467// File#: _2_slideshow-preview-mode
2468// Usage: codyhouse.co/license
2469(function() {
2470	var SlideshowPrew = function(opts) {
2471		this.options = Util.extend(SlideshowPrew.defaults , opts);
2472		this.element = this.options.element;
2473		this.list = this.element.getElementsByClassName('js-slideshow-pm__list')[0];
2474		this.items = this.list.getElementsByClassName('js-slideshow-pm__item');
2475		this.controls = this.element.getElementsByClassName('js-slideshow-pm__control'); 
2476		this.selectedSlide = 0;
2477		this.autoplayId = false;
2478		this.autoplayPaused = false;
2479		this.navigation = false;
2480		this.navCurrentLabel = false;
2481		this.ariaLive = false;
2482		this.moveFocus = false;
2483		this.animating = false;
2484		this.supportAnimation = Util.cssSupports('transition');
2485		this.itemWidth = false;
2486		this.itemMargin = false;
2487		this.containerWidth = false;
2488		this.resizeId = false;
2489		// we will need this to implement keyboard nav
2490		this.firstFocusable = false;
2491		this.lastFocusable = false;
2492		// fallback for browsers not supporting flexbox
2493		initSlideshow(this);
2494		initSlideshowEvents(this);
2495		initAnimationEndEvents(this);
2496		Util.addClass(this.element, 'slideshow-pm--js-loaded');
2497	};
2498
2499	SlideshowPrew.prototype.showNext = function(autoplay) {
2500		showNewItem(this, this.selectedSlide + 1, 'next', autoplay);
2501	};
2502
2503	SlideshowPrew.prototype.showPrev = function() {
2504		showNewItem(this, this.selectedSlide - 1, 'prev');
2505	};
2506
2507	SlideshowPrew.prototype.showItem = function(index) {
2508		showNewItem(this, index, false);
2509	};
2510
2511	SlideshowPrew.prototype.startAutoplay = function() {
2512		var self = this;
2513		if(this.options.autoplay && !this.autoplayId && !this.autoplayPaused) {
2514			self.autoplayId = setInterval(function(){
2515				self.showNext(true);
2516			}, self.options.autoplayInterval);
2517		}
2518	};
2519
2520	SlideshowPrew.prototype.pauseAutoplay = function() {
2521		var self = this;
2522		if(this.options.autoplay) {
2523			clearInterval(self.autoplayId);
2524			self.autoplayId = false;
2525		}
2526	};
2527
2528	function initSlideshow(slideshow) { // basic slideshow settings
2529		// if no slide has been selected -> select the first one
2530		if(slideshow.element.getElementsByClassName('slideshow-pm__item--selected').length < 1) Util.addClass(slideshow.items[0], 'slideshow-pm__item--selected');
2531		slideshow.selectedSlide = Util.getIndexInArray(slideshow.items, slideshow.element.getElementsByClassName('slideshow-pm__item--selected')[0]);
2532		// now set translate value to the container element
2533		setTranslateValue(slideshow);
2534		setTranslate(slideshow);
2535		resetSlideshowNav(slideshow, 0, slideshow.selectedSlide);
2536		setFocusableElements(slideshow);
2537		// if flexbox is not supported, set a width for the list element
2538		if(!flexSupported) resetSlideshowFlexFallback(slideshow);
2539		// now add class to animate while translating
2540		setTimeout(function(){Util.addClass(slideshow.list, 'slideshow-pm__list--has-transition');}, 50);
2541		// add arai-hidden to not selected slides
2542		for(var i = 0; i < slideshow.items.length; i++) {
2543			(i == slideshow.selectedSlide) ? slideshow.items[i].removeAttribute('aria-hidden') : slideshow.items[i].setAttribute('aria-hidden', 'true');
2544		}
2545		// create an element that will be used to announce the new visible slide to SR
2546		var srLiveArea = document.createElement('div');
2547		Util.setAttributes(srLiveArea, {'class': 'sr-only js-slideshow-pm__aria-live', 'aria-live': 'polite', 'aria-atomic': 'true'});
2548		slideshow.element.appendChild(srLiveArea);
2549		slideshow.ariaLive = srLiveArea;
2550	};
2551
2552	function initSlideshowEvents(slideshow) {
2553		// if slideshow navigation is on -> create navigation HTML and add event listeners
2554		if(slideshow.options.navigation) {
2555			var navigation = document.createElement('ol'),
2556				navChildren = '';
2557			
2558			navigation.setAttribute('class', 'slideshow-pm__navigation');
2559			for(var i = 0; i < slideshow.items.length; i++) {
2560				var className = (i == slideshow.selectedSlide) ? 'class="slideshow-pm__nav-item slideshow-pm__nav-item--selected js-slideshow-pm__nav-item"' :  'class="slideshow-pm__nav-item js-slideshow-pm__nav-item"',
2561					navCurrentLabel = (i == slideshow.selectedSlide) ? '<span class="sr-only js-slideshow-pm__nav-current-label">Current Item</span>' : '';
2562				navChildren = navChildren + '<li '+className+'><button class="reset"><span class="sr-only">'+ (i+1) + '</span>'+navCurrentLabel+'</button></li>';
2563			}
2564
2565			navigation.innerHTML = navChildren;
2566			slideshow.navCurrentLabel = navigation.getElementsByClassName('js-slideshow-pm__nav-current-label')[0]; 
2567			slideshow.element.appendChild(navigation);
2568			slideshow.navigation = slideshow.element.getElementsByClassName('js-slideshow-pm__nav-item');
2569
2570			navigation.addEventListener('click', function(event){
2571				navigateSlide(slideshow, event, true);
2572			});
2573			navigation.addEventListener('keyup', function(event){
2574				navigateSlide(slideshow, event, (event.key.toLowerCase() == 'enter'));
2575			});
2576		}
2577		// slideshow arrow controls
2578		if(slideshow.controls.length > 0) {
2579			slideshow.controls[0].addEventListener('click', function(event){
2580				event.preventDefault();
2581				slideshow.showPrev();
2582				updateAriaLive(slideshow);
2583			});
2584			slideshow.controls[1].addEventListener('click', function(event){
2585				event.preventDefault();
2586				slideshow.showNext(false);
2587				updateAriaLive(slideshow);
2588			});
2589		}
2590		// navigate slideshow when clicking on preview
2591		if(slideshow.options.prewNav) {
2592			slideshow.element.addEventListener('click', function(event){
2593				var item = event.target.closest('.js-slideshow-pm__item');
2594				if(item && !Util.hasClass(item, 'slideshow-pm__item--selected')) {
2595					slideshow.showItem(Util.getIndexInArray(slideshow.items, item));
2596				}
2597			});
2598		}
2599		// swipe events
2600		if(slideshow.options.swipe) {
2601			//init swipe
2602			new SwipeContent(slideshow.element);
2603			slideshow.element.addEventListener('swipeLeft', function(event){
2604				slideshow.showNext(false);
2605			});
2606			slideshow.element.addEventListener('swipeRight', function(event){
2607				slideshow.showPrev();
2608			});
2609		}
2610		// autoplay
2611		if(slideshow.options.autoplay) {
2612			slideshow.startAutoplay();
2613			// pause autoplay if user is interacting with the slideshow
2614			slideshow.element.addEventListener('mouseenter', function(event){
2615				slideshow.pauseAutoplay();
2616				slideshow.autoplayPaused = true;
2617			});
2618			slideshow.element.addEventListener('focusin', function(event){
2619				slideshow.pauseAutoplay();
2620				slideshow.autoplayPaused = true;
2621			});
2622			slideshow.element.addEventListener('mouseleave', function(event){
2623				slideshow.autoplayPaused = false;
2624				slideshow.startAutoplay();
2625			});
2626			slideshow.element.addEventListener('focusout', function(event){
2627				slideshow.autoplayPaused = false;
2628				slideshow.startAutoplay();
2629			});
2630		}
2631		// keyboard navigation
2632		initKeyboardEvents(slideshow);
2633		// reset on resize
2634    window.addEventListener('resize', function(event){
2635    	slideshow.pauseAutoplay();
2636      clearTimeout(slideshow.resizeId);
2637      slideshow.resizeId = setTimeout(function(){
2638        resetSlideshowResize(slideshow);
2639        setTimeout(function(){slideshow.startAutoplay();}, 60);
2640      }, 250)
2641    });
2642	};
2643
2644	function initKeyboardEvents(slideshow) {
2645		// tab on selected slide -> if last focusable -> move to prev or next arrow
2646		// tab + shift selected slide -> if first focusable -> move to container
2647		if(slideshow.controls.length > 0) {
2648			// tab+shift on prev arrow -> move focus to last focusable element inside the selected slide (or to the slider container)
2649			slideshow.controls[0].addEventListener('keydown', function(event){
2650				if( (event.keyCode && event.keyCode == 9 || event.key && event.key == 'Tab') && event.shiftKey ) moveFocusToLast(slideshow);
2651			});
2652			// tab+shift on next arrow -> if first slide selectes -> move focus to last focusable element inside the selected slide (or to the slider container)
2653			slideshow.controls[1].addEventListener('keydown', function(event){
2654				if( (event.keyCode && event.keyCode == 9 || event.key && event.key == 'Tab') && event.shiftKey && (slideshow.selectedSlide == 0)) moveFocusToLast(slideshow);
2655			});
2656		}
2657		// check tab is pressed when focus is inside selected slide
2658		slideshow.element.addEventListener('keydown', function(event){
2659			if( event.keyCode && event.keyCode == 9 || event.key && event.key == 'Tab' ) {
2660				var target = event.target.closest('.js-slideshow-pm__item');
2661				if(target && Util.hasClass(target, 'slideshow-pm__item--selected')) moveFocusOutsideSlide(slideshow, event);
2662				else if(target || Util.hasClass(event.target, 'js-slideshow-pm') && !event.shiftKey) moveFocusToSelectedSlide(slideshow);
2663			} 
2664		});
2665
2666		// detect tab moves to slideshow 
2667		window.addEventListener('keyup', function(event){
2668			if( event.keyCode && event.keyCode == 9 || event.key && event.key == 'Tab') {
2669				var target = event.target.closest('.js-slideshow-prew__item');
2670				if(target || Util.hasClass(event.target, 'js-slideshow-prew') && !event.shiftKey) moveFocusToSelectedSlide(slideshow);
2671			}
2672		});
2673	};
2674
2675	function moveFocusToLast(slideshow) {
2676		event.preventDefault();
2677		if(slideshow.lastFocusable)	{
2678			slideshow.lastFocusable.focus();
2679		} else {
2680			Util.moveFocus(slideshow.element);
2681		}
2682	};
2683
2684	function moveFocusToSelectedSlide(slideshow) { // focus is inside a slide that is not selected
2685		event.preventDefault();
2686		if(slideshow.firstFocusable)	{
2687			slideshow.firstFocusable.focus();
2688		} else if(slideshow.controls.length > 0) {
2689			(slideshow.selectedSlide == 0) ? slideshow.controls[1].getElementsByTagName('button')[0].focus() : slideshow.controls[0].getElementsByTagName('button')[0].focus();
2690		} else if(slideshow.options.navigation) {
2691			slideshow.navigation.getElementsByClassName('js-slideshow-pm__nav-item')[0].getElementsByTagName('button')[0].focus();
2692		}
2693	};
2694
2695	function moveFocusOutsideSlide(slideshow, event) {
2696		if(event.shiftKey && slideshow.firstFocusable && event.target == slideshow.firstFocusable) {
2697			// shift+tab -> focus was on first foucusable element inside selected slide -> move to container
2698			event.preventDefault();
2699			Util.moveFocus(slideshow.element);
2700		} else if( !event.shiftKey && slideshow.lastFocusable && event.target == slideshow.lastFocusable) {
2701			event.preventDefault();
2702			
2703			if(slideshow.selectedSlide != 0) slideshow.controls[0].getElementsByTagName('button')[0].focus();
2704			else slideshow.controls[1].getElementsByTagName('button')[0].focus();
2705		}
2706	};
2707
2708	function initAnimationEndEvents(slideshow) {
2709		slideshow.list.addEventListener('transitionend', function(){
2710			setTimeout(function(){ // add a delay between the end of animation and slideshow reset - improve animation performance
2711				resetAnimationEnd(slideshow);
2712			}, 100);
2713		});
2714	};
2715
2716	function resetAnimationEnd(slideshow) {
2717		if(slideshow.moveFocus) Util.moveFocus(slideshow.items[slideshow.selectedSlide]);
2718		slideshow.items[slideshow.selectedSlide].removeAttribute('aria-hidden');
2719		slideshow.animating = false;
2720		slideshow.moveFocus = false;
2721		slideshow.startAutoplay();
2722	};
2723
2724	function navigateSlide(slideshow, event, keyNav) { 
2725		// user has interacted with the slideshow navigation -> update visible slide
2726		var target = event.target.closest('.js-slideshow-pm__nav-item');
2727		if(keyNav && target && !Util.hasClass(target, 'slideshow-pm__nav-item--selected')) {
2728			slideshow.showItem(Util.getIndexInArray(slideshow.navigation, target));
2729			slideshow.moveFocus = true;
2730			updateAriaLive(slideshow);
2731		}
2732	};
2733
2734	function showNewItem(slideshow, index, bool, autoplay) {
2735		if(slideshow.animating && slideshow.supportAnimation) return;
2736		if(autoplay) {
2737			if(index < 0) index = slideshow.items.length - 1;
2738			else if(index >= slideshow.items.length) index = 0;
2739		}
2740		if(index < 0 || index >= slideshow.items.length) return;
2741		slideshow.animating = true;
2742		Util.removeClass(slideshow.items[slideshow.selectedSlide], 'slideshow-pm__item--selected');
2743		slideshow.items[slideshow.selectedSlide].setAttribute('aria-hidden', 'true'); //hide to sr element that is exiting the viewport
2744		Util.addClass(slideshow.items[index], 'slideshow-pm__item--selected');
2745		resetSlideshowNav(slideshow, index, slideshow.selectedSlide);
2746		slideshow.selectedSlide = index;
2747		setTranslate(slideshow);
2748		slideshow.pauseAutoplay();
2749		setFocusableElements(slideshow);
2750		if(!transitionSupported) resetAnimationEnd(slideshow);
2751	};
2752
2753	function updateAriaLive(slideshow) {
2754		slideshow.ariaLive.innerHTML = 'Item '+(slideshow.selectedSlide + 1)+' of '+slideshow.items.length;
2755	};
2756
2757	function resetSlideshowResize(slideshow) {
2758		Util.removeClass(slideshow.list, 'slideshow-pm__list--has-transition');
2759		setTimeout(function(){
2760			setTranslateValue(slideshow);
2761			setTranslate(slideshow);
2762			Util.addClass(slideshow.list, 'slideshow-pm__list--has-transition');
2763		}, 30)
2764	};
2765
2766	function setTranslateValue(slideshow) {
2767		var itemStyle = window.getComputedStyle(slideshow.items[slideshow.selectedSlide]);
2768
2769		slideshow.itemWidth = parseFloat(itemStyle.getPropertyValue('width'));
2770		slideshow.itemMargin = parseFloat(itemStyle.getPropertyValue('margin-right'));
2771		slideshow.containerWidth = parseFloat(window.getComputedStyle(slideshow.element).getPropertyValue('width'));
2772	};
2773
2774	function setTranslate(slideshow) {
2775		var translate = parseInt(((slideshow.itemWidth + slideshow.itemMargin) * 
2775slideshow.selectedSlide * (-1)) + ((slideshow.containerWidth - slideshow.itemWidth)*0.5));
2776    slideshow.list.style.transform = 'translateX('+translate+'px)';
2777    slideshow.list.style.msTransform = 'translateX('+translate+'px)';
2778  };
2779
2780  function resetSlideshowNav(slideshow, newIndex, oldIndex) {
2781  	if(slideshow.navigation) {
2782			Util.removeClass(slideshow.navigation[oldIndex], 'slideshow-pm__nav-item--selected');
2783			Util.addClass(slideshow.navigation[newIndex], 'slideshow-pm__nav-item--selected');
2784			slideshow.navCurrentLabel.parentElement.removeChild(slideshow.navCurrentLabel);
2785			slideshow.navigation[newIndex].getElementsByTagName('button')[0].appendChild(slideshow.navCurrentLabel);
2786		}
2787		if(slideshow.controls.length > 0) {
2788			Util.toggleClass(slideshow.controls[0], 'slideshow-pm__control--active', newIndex != 0);
2789			Util.toggleClass(slideshow.controls[1], 'slideshow-pm__control--active', newIndex != (slideshow.items.length - 1));
2790  	}
2791  };
2792
2793  function setFocusableElements(slideshow) {
2794  	//get all focusable elements inside the selected slide
2795		var allFocusable = slideshow.items[slideshow.selectedSlide].querySelectorAll('[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex]:not([tabindex="-1"]), [contenteditable], audio[controls], video[controls], summary');
2796		getFirstVisible(slideshow, allFocusable);
2797		getLastVisible(slideshow, allFocusable);
2798  };
2799
2800  function getFirstVisible(slideshow, elements) {
2801  	slideshow.firstFocusable = false;
2802		//get first visible focusable element inside the selected slide
2803		for(var i = 0; i < elements.length; i++) {
2804			if( elements[i].offsetWidth || elements[i].offsetHeight || elements[i].getClientRects().length ) {
2805				slideshow.firstFocusable = elements[i];
2806				return true;
2807			}
2808		}
2809  };
2810
2811  function getLastVisible(slideshow, elements) {
2812  	//get last visible focusable element inside the selected slide
2813  	slideshow.lastFocusable = false;
2814		for(var i = elements.length - 1; i >= 0; i--) {
2815			if( elements[i].offsetWidth || elements[i].offsetHeight || elements[i].getClientRects().length ) {
2816				slideshow.lastFocusable = elements[i];
2817				return true;
2818			}
2819		}
2820  };
2821
2822  function resetSlideshowFlexFallback(slideshow) {
2823		slideshow.list.style.width = ((slideshow.items.length+1)*(slideshow.itemMargin+slideshow.itemWidth))+'px';
2824		for(var i = 0; i < slideshow.items.length; i++) {slideshow.items[i].style.width = slideshow.itemWidth+'px';}
2825  };
2826
2827	SlideshowPrew.defaults = {
2828    element : '',
2829    navigation : true,
2830    autoplay : false,
2831    autoplayInterval: 5000,
2832    prewNav: false,
2833    swipe: false
2834  };
2835
2836  window.SlideshowPrew = SlideshowPrew;
2837	
2838	// initialize the slideshowsPrew objects
2839	var slideshowsPrew = document.getElementsByClassName('js-slideshow-pm'),
2840		flexSupported = Util.cssSupports('align-items', 'stretch'),
2841		transitionSupported = Util.cssSupports('transition');
2842	if( slideshowsPrew.length > 0 ) {
2843		for( var i = 0; i < slideshowsPrew.length; i++) {
2844			(function(i){
2845				var navigation = (slideshowsPrew[i].getAttribute('data-navigation') && slideshowsPrew[i].getAttribute('data-navigation') == 'off') ? false : true,
2846					autoplay = (slideshowsPrew[i].getAttribute('data-autoplay') && slideshowsPrew[i].getAttribute('data-autoplay') == 'on') ? true : false,
2847					autoplayInterval = (slideshowsPrew[i].getAttribute('data-autoplay-interval')) ? slideshowsPrew[i].getAttribute('data-autoplay-interval') : 5000,
2848					prewNav = (slideshowsPrew[i].getAttribute('data-pm-nav') && slideshowsPrew[i].getAttribute('data-pm-nav') == 'on' ) ? true : false, 
2849					swipe = (slideshowsPrew[i].getAttribute('data-swipe') && slideshowsPrew[i].getAttribute('data-swipe') == 'on') ? true : false;
2850				new SlideshowPrew({element: slideshowsPrew[i], navigation: navigation, autoplay : autoplay, autoplayInterval : autoplayInterval, swipe : swipe, prewNav: prewNav});
2851			})(i);
2852		}
2853	}
2854
2855}());
2856
2857/**
2858 * 
2859  - ultra slim jQuery lightbox
2860 * Version 1.7.13 - http://noelboss.github.io/featherlight/
2861 *
2862 * Copyright 2018, Noël Raoul Bossart (http://www.noelboss.com)
2863 * MIT Licensed.
2864**/
2865!function(a){"use strict";function b(a,c){if(!(this instanceof b)){var d=new b(a,c);return d.open(),d}this.id=b.id++,this.setup(a,c),this.chainCallbacks(b._callbackChain)}function c(a,b){var c={};for(var d in a)d in b&&(c[d]=a[d],delete a[d]);return c}function d(a,b){var c={},d=new RegExp("^"+b+"([A-Z])(.*)");for(var e in a){var f=e.match(d);if(f){var g=(f[1]+f[2].replace(/([A-Z])/g,"-$1")).toLowerCase();c[g]=a[e]}}return c}if("undefined"==typeof a)return void("console"in window&&window.console.info("Too much lightness, Featherlight needs jQuery."));if(a.fn.jquery.match(/-ajax/))return void("console"in window&&window.console.info("Featherlight needs regular jQuery, not the slim version."));var e=[],f=function(b){return e=a.grep(e,function(a){return a!==b&&a.$instance.closest("body").length>0})},g={allow:1,allowfullscreen:1,frameborder:1,height:1,longdesc:1,marginheight:1,marginwidth:1,mozallowfullscreen:1,name:1,referrerpolicy:1,sandbox:1,scrolling:1,src:1,srcdoc:1,style:1,webkitallowfullscreen:1,width:1}
vendor: 8,351 bytes, lines 2865-2866
2865,h={keyup:"onKeyUp",resize:"onResize"},i=function(c){a.each(b.opened().reverse(),function(){return c.isDefaultPrevented()||!1!==this[h[c.type]](c)?void 0:(c.preventDefault(),c.stopPropagation(),!1)})},j=function(c){if(c!==b._globalHandlerInstalled){b._globalHandlerInstalled=c;var d=a.map(h,function(a,c){return c+"."+b.prototype.namespace}).join(" ");a(window)[c?"on":"off"](d,i)}};b.prototype={constructor:b,namespace:"featherlight",targetAttr:"data-featherlight",variant:null,resetCss:!1,background:null,openTrigger:"click",closeTrigger:"click",filter:null,root:"body",openSpeed:250,closeSpeed:250,closeOnClick:"background",closeOnEsc:!0,closeIcon:"&#10005;",loading:"",persist:!1,otherClose:null,beforeOpen:a.noop,beforeContent:a.noop,beforeClose:a.noop,afterOpen:a.noop,afterContent:a.noop,afterClose:a.noop,onKeyUp:a.noop,onResize:a.noop,type:null,contentFilters:["jquery","image","html","ajax","iframe","text"],setup:function(b,c){"object"!=typeof b||b instanceof a!=!1||c||(c=b,b=void 0);var d=a.extend(this,c,{target:b}),e=d.resetCss?d.namespace+"-reset":d.namespace,f=a(d.background||['<div class="'+e+"-loading "+e+'">','<div class="'+e+'-content">','<button class="'+e+"-close-icon "+d.namespace+'-close" aria-label="Close">',d.closeIcon,"</button>",'<div class="'+d.namespace+'-inner">'+d.loading+"</div>","</div>","</div>"].join("")),g="."+d.namespace+"-close"+(d.otherClose?","+d.otherClose:"");return d.$instance=f.clone().addClass(d.variant),d.$instance.on(d.closeTrigger+"."+d.namespace,function(b){if(!b.isDefaultPrevented()){var c=a(b.target);("background"===d.closeOnClick&&c.is("."+d.namespace)||"anywhere"===d.closeOnClick||c.closest(g).length)&&(d.close(b),b.preventDefault())}}),this},getContent:function(){if(this.persist!==!1&&this.$content)return this.$content;var b=this,c=this.constructor.contentFilters,d=function(a){return b.$currentTarget&&b.$currentTarget.attr(a)},e=d(b.targetAttr),f=b.target||e||"",g=c[b.type];if(!g&&f in c&&(g=c[f],f=b.target&&e),f=f||d("href")||"",!g)for(var h in c)b[h]&&(g=c[h],f=b[h]);if(!g){var i=f;if(f=null,a.each(b.contentFilters,function(){return g=c[this],g.test&&(f=g.test(i)),!f&&g.regex&&i.match&&i.match(g.regex)&&(f=i),!f}),!f)return"console"in window&&window.console.error("Featherlight: no content filter found "+(i?' for "'+i+'"':" (no target specified)")),!1}return g.process.call(b,f)},setContent:function(b){return this.$instance.removeClass(this.namespace+"-loading"),this.$instance.toggleClass(this.namespace+"-iframe",b.is("iframe")),this.$instance.find("."+this.namespace+"-inner").not(b).slice(1).remove().end().replaceWith(a.contains(this.$instance[0],b[0])?"":b),this.$content=b.addClass(this.namespace+"-inner"),this},open:function(b){var c=this;if(c.$instance.hide().appendTo(c.root),!(b&&b.isDefaultPrevented()||c.beforeOpen(b)===!1)){b&&b.preventDefault();var d=c.getContent();if(d)return e.push(c),j(!0),c.$instance.fadeIn(c.openSpeed),c.beforeContent(b),a.when(d).always(function(a){c.setContent(a),c.afterContent(b)}).then(c.$instance.promise()).done(function(){c.afterOpen(b)})}return c.$instance.detach(),a.Deferred().reject().promise()},close:function(b){var c=this,d=a.Deferred();return c.beforeClose(b)===!1?d.reject():(0===f(c).length&&j(!1),c.$instance.fadeOut(c.closeSpeed,function(){c.$instance.detach(),c.afterClose(b),d.resolve()})),d.promise()},resize:function(a,b){if(a&&b){this.$content.css("width","").css("height","");var c=Math.max(a/(this.$content.parent().width()-1),b/(this.$content.parent().height()-1));c>1&&(c=b/Math.floor(b/c),this.$content.css("width",""+a/c+"px").css("height",""+b/c+"px"))}},chainCallbacks:function(b){for(var c in b)this[c]=a.proxy(b[c],this,a.proxy(this[c],this))}},a.extend(b,{id:0,autoBind:"[data-featherlight]",defaults:b.prototype,contentFilters:{jquery:{regex:/^[#.]\w/,test:function(b){return b instanceof a&&b},process:function(b){return this.persist!==!1?a(b):a(b).clone(!0)}},image:{regex:/\.(png|jpg|jpeg|gif|tiff?|bmp|svg)(\?\S*)?$/i,process:function(b){var c=this,d=a.Deferred(),e=new Image,f=a('<img src="'+b+'" alt="" class="'+c.namespace+'-image" />');return e.onload=function(){f.naturalWidth=e.width,f.naturalHeight=e.height,d.resolve(f)},e.onerror=function(){d.reject(f)},e.src=b,d.promise()}},html:{regex:/^\s*<[\w!][^<]*>/,process:function(b){return a(b)}},ajax:{regex:/./,process:function(b){var c=a.Deferred(),d=a("<div></div>").load(b,function(a,b){"error"!==b&&c.resolve(d.contents()),c.fail()});return c.promise()}},iframe:{process:function(b){var e=new a.Deferred,f=a("<iframe/>"),h=d(this,"iframe"),i=c(h,g);return f.hide().attr("src",b).attr(i).css(h).on("load",function(){e.resolve(f.show())}).appendTo(this.$instance.find("."+this.namespace+"-content")),e.promise()}},text:{process:function(b){return a("<div>",{text:b})}}},functionAttributes:["beforeOpen","afterOpen","beforeContent","afterContent","beforeClose","afterClose"],readElementConfig:function(b,c){var d=this,e=new RegExp("^data-"+c+"-(.*)"),f={};return b&&b.attributes&&a.each(b.attributes,function(){var b=this.name.match(e);if(b){var c=this.value,g=a.camelCase(b[1]);if(a.inArray(g,d.functionAttributes)>=0)c=new Function(c);else try{c=JSON.parse(c)}catch(h){}f[g]=c}}),f},extend:function(b,c){var d=function(){this.constructor=b};return d.prototype=this.prototype,b.prototype=new d,b.__super__=this.prototype,a.extend(b,this,c),b.defaults=b.prototype,b},attach:function(b,c,d){var e=this;"object"!=typeof c||c instanceof a!=!1||d||(d=c,c=void 0),d=a.extend({},d);var f,g=d.namespace||e.defaults.namespace,h=a.extend({},e.defaults,e.readElementConfig(b[0],g),d),i=function(g){var i=a(g.currentTarget),j=a.extend({$source:b,$currentTarget:i},e.readElementConfig(b[0],h.namespace),e.readElementConfig(g.currentTarget,h.namespace),d),k=f||i.data("featherlight-persisted")||new e(c,j);"shared"===k.persist?f=k:k.persist!==!1&&i.data("featherlight-persisted",k),j.$currentTarget.blur&&j.$currentTarget.blur(),k.open(g)};return b.on(h.openTrigger+"."+h.namespace,h.filter,i),{filter:h.filter,handler:i}},current:function(){var a=this.opened();return a[a.length-1]||null},opened:function(){var b=this;return f(),a.grep(e,function(a){return a instanceof b})},close:function(a){var b=this.current();return b?b.close(a):void 0},_onReady:function(){var b=this;if(b.autoBind){var c=a(b.autoBind);c.each(function(){b.attach(a(this))}),a(document).on("click",b.autoBind,function(d){if(!d.isDefaultPrevented()){var e=a(d.currentTarget),f=c.length;if(c=c.add(e),f!==c.length){var g=b.attach(e);(!g.filter||a(d.target).parentsUntil(e,g.filter).length>0)&&g.handler(d)}}})}},_callbackChain:{onKeyUp:function(b,c){return 27===c.keyCode?(this.closeOnEsc&&a.featherlight.close(c),!1):b(c)},beforeOpen:function(b,c){return a(document.documentElement).addClass("with-featherlight"),this._previouslyActive=document.activeElement,this._$previouslyTabbable=a("a, input, select, textarea, iframe, button, iframe, [contentEditable=true]").not("[tabindex]").not(this.$instance.find("button")),this._$previouslyWithTabIndex=a("[tabindex]").not('[tabindex="-1"]'),this._previousWithTabIndices=this._$previouslyWithTabIndex.map(function(b,c){return a(c).attr("tabindex")}),this._$previouslyWithTabIndex.add(this._$previouslyTabbable).attr("tabindex",-1),document.activeElement.blur&&document.activeElement.blur(),b(c)},afterClose:function(c,d){var e=c(d),f=this;return this._$previouslyTabbable.removeAttr("tabindex"),this._$previouslyWithTabIndex.each(function(b,c){a(c).attr("tabindex",f._previousWithTabIndices[b])}),this._previouslyActive.focus(),0===b.opened().length&&a(document.documentElement).removeClass("with-featherlight"),e},onResize:function(a,b){return this.resize(this.$content.naturalWidth,this.$content.naturalHeight),a(b)},afterContent:function(a,b){var c=a(b);return this.$instance.find("[autofocus]:not([disabled])").focus(),this.onResize(b),c}}}),a.featherlight=b,a.fn.featherlight=function(a,c){return b.attach(this,a,c),this},a(document).ready(function(){b._onReady()})}(jQuery);
2866window.FontAwesomeKitConfig = {"asyncLoading":{"enabled":false},"autoA11y":{"enabled":true},"baseUrl":"https://ka-f.fontawesome.com","baseUrlKit":"https://kit.fontawesome.com","detectConflictsUntil":null,"iconUploads":{},"id":84529708,"license":"free","method":"css","minify":{"enabled":true},"token":"b50c4bb10d","v4FontFaceShim":{"enabled":true}
2866,"v4shim":{"enabled":true},"version":"5.15.3"};
2867!function(t){"function"==typeof define&&define.amd?define("kit-loader",t):t()}((function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function n(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function r(t){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?n(Object(o),!0).forEach((function(n){e(t,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}))}return t}function o(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var c,a=t[Symbol.iterator]();!(r=(c=a.next()).done)&&(n.push(c.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{r||null==a.return||a.return()}finally{if(o)throw i}}return n}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function c(t,e){var n=e&&e.addOn||"",r=e&&e.baseFilename||t.license+n,o=e&&e.minify?".min":"",i=e&&e.fileSuffix||t.method,c=e&&e.subdir||t.method;return t.baseUrl+"/releases/"+("latest"===t.version?"latest":"v".concat(t.version))+"/"+c+"/"+r+o+"."+i}function a(t){return t.baseUrlKit+"/"+t.token+"/"+t.id+"/kit-upload.css"}function u(t,e){var n=e||["fa"],r="."+Array.prototype.join.call(n,",."),o=t.querySelectorAll(r);Array.prototype.forEach.call(o,(function(e){var n=e.getAttribute("title");e.setAttribute("aria-hidden","true");var r=!e.nextElementSibling||!e.nextElementSibling.classList.contains("sr-only");if(n&&r){var o=t.createElement("span");o.innerHTML=n,o.classList.add("sr-only"),e.parentNode.insertBefore(o,e.nextSibling)}}))}var f,s=function(){},d="undefined"!=typeof global&&void 0!==global.process&&"function"==typeof global.process.emit,l="undefined"==typeof setImmediate?setTimeout:setImmediate,h=[];function m(){for(var t=0;t<h.length;t++)h[t][0](h[t][1]);h=[],f=!1}function p(t,e){h.push([t,e]),f||(f=!0,l(m,0))}function y(t){var e=t.owner,n=e._state,r=e._data,o=t[n],i=t.then;if("function"==typeof o){n="fulfilled";try{r=o(r)}catch(t){w(i,t)}}b(i,r)||("fulfilled"===n&&v(i,r),"rejected"===n&&w(i,r))}function b(e,n){var r;try{if(e===n)throw new TypeError("A promises callback cannot return that same promise.");if(n&&("function"==typeof n||"object"===t(n))){var o=n.then;if("function"==typeof o)return o.call(n,(function(t){r||(r=!0,n===t?g(e,t):v(e,t))}),(function(t){r||(r=!0,w(e,t))})),!0}}catch(t){return r||w(e,t),!0}return!1}function v(t,e){t!==e&&b(t,e)||g(t,e)}function g(t,e){"pending"===t._state&&(t._state="settled",t._data=e,p(S,t))}function w(t,e){"pending"===t._state&&(t._state="settled",t._data=e,p(O,t))}function A(t){t._then=t._then.forEach(y)}function S(t){t._state="fulfilled",A(t)}function O(t){t._state="rejected",A(t),!t._handled&&d&&global.process.emit("unhandledRejection",t._data,t)}function j(t){global.process.emit("rejectionHandled",t)}function E(t){if("function"!=typeof t)throw new TypeError("Promise resolver "+t+" is not a function");if(this instanceof E==!1)throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object c
2867onstructor cannot be called as a function.");this._then=[],function(t,e){function n(t){w(e,t)}try{t((function(t){v(e,t)}),n)}catch(t){n(t)}}(t,this)}E.prototype={constructor:E,_state:"pending",_then:null,_data:void 0,_handled:!1,then:function(t,e){var n={owner:this,then:new this.constructor(s),fulfilled:t,rejected:e};return!e&&!t||this._handled||(this._handled=!0,"rejected"===this._state&&d&&p(j,this)),"fulfilled"===this._state||"rejected"===this._state?p(y,n):this._then.push(n),n.then},catch:function(t){return this.then(null,t)}},E.all=function(t){if(!Array.isArray(t))throw new TypeError("You must pass an array to Promise.all().");return new E((function(e,n){var r=[],o=0;function i(t){return o++,function(n){r[t]=n,--o||e(r)}}for(var c,a=0;a<t.length;a++)(c=t[a])&&"function"==typeof c.then?c.then(i(a),n):r[a]=c;o||e(r)}))},E.race=function(t){if(!Array.isArray(t))throw new TypeError("You must pass an array to Promise.race().");return new E((function(e,n){for(var r,o=0;o<t.length;o++)(r=t[o])&&"function"==typeof r.then?r.then(e,n):e(r)}))},E.resolve=function(e){return e&&"object"===t(e)&&e.constructor===E?e:new E((function(t){t(e)}))}
2867,E.reject=function(t){return new E((function(e,n){n(t)}))};var _="function"==typeof Promise?Promise:E;function P(t,e){var n=e.fetch,r=e.XMLHttpRequest,o=e.token,i=t;return"URLSearchParams"in window?(i=new URL(t)).searchParams.set("token",o):i=i+"?token="+encodeURIComponent(o),i=i.toString(),new _((function(t,e){if("function"==typeof n)n(i,{mode:"cors",cache:"default"}).then((function(t){if(t.ok)return t.text();throw new Error("")})).then((function(e){t(e)})).catch(e);else if("function"==typeof r){var o=new r;o.addEventListener("loadend",(function(){this.responseText?t(this.responseText):e(new Error(""))}));["abort","error","timeout"].map((function(t){o.addEventListener(t,(function(){e(new Error(""))}))})),o.open("GET",i),o.send()}else{e(new Error(""))}}))}function C(t,e,n){var r=t;return[[/(url\("?)\.\.\/\.\.\/\.\./g,function(t,n){return"".concat(n).concat(e)}],[/(url\("?)\.\.\/webfonts/g,function(t,r){return"".concat(r).concat(e,"/releases/v").concat(n,"/webfonts")}],[/(url\("?)https:\/\/kit-free([^.])*\.fontawesome\.com/g,function(t,n){return"".concat(n).concat(e)}
2867]].forEach((function(t){var e=o(t,2),n=e[0],i=e[1];r=r.replace(n,i)})),r}function F(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},o=e.document||o,i=u.bind(u,o,["fa","fab","fas","far","fal","fad","fak"]),f=Object.keys(t.iconUploads||{}).length>0;t.autoA11y.enabled&&n(i);var s=[{id:"fa-main",addOn:void 0}];t.v4shim.enabled&&s.push({id:"fa-v4-shims",addOn:"-v4-shims"}),t.v4FontFaceShim.enabled&&s.push({id:"fa-v4-font-face",addOn:"-v4-font-face"}),f&&s.push({id:"fa-kit-upload",customCss:!0});var d=s.map((function(n){return new _((function(o,i){P(n.customCss?a(t):c(t,{addOn:n.addOn,minify:t.minify.enabled}),e).then((function(i){o(U(i,r(r({},e),{},{baseUrl:t.baseUrl,version:t.version,id:n.id,contentFilter:function(t,e){return C(t,e.baseUrl,e.version)}})))})).catch(i)}))}));return _.all(d)}function U(t,e){var n=e.contentFilter||function(t,e){return t},r=document.createElement("style"),o=document.createTextNode(n(t,e));return r.appendChild(o),r.media="all",e.id&&r.setAttribute("id",e.id),e&&e.detectingConflicts&&e.detectionIgnoreAttr&&r.setAttributeNode(document.createAttribute(e.detectionIgnoreAttr)),r}function k(t,e){e.autoA11y=t.autoA11y.enabled,"pro"===t.license&&(e.autoFetchSvg=!0,e.fetchSvgFrom=t.baseUrl+"/releases/"+("latest"===t.version?"latest":"v".concat(t.version))+"/svgs",e.fetchUploadedSvgFrom=t.uploadsUrl);var n=[];return t.v4shim.enabled&&n.push(new _((function(n,o){P(c(t,{addOn:"-v4-shims",minify:t.minify.enabled}),e).then((function(t){n(I(t,r(r({},e),{},{id:"fa-v4-shims"})))})).catch(o)}))),n.push(new _((function(n,o){P(c(t,{minify:t.minify.enabled}),e).then((function(t){var o=I(t,r(r({},e),{},{id:"fa-main"}));n(function(t,e){var n=e&&void 0!==e.autoFetchSvg?e.autoFetchSvg:void 0,r=e&&void 0!==e.autoA11y?e.autoA11y:void 0;void 0!==r&&t.setAttribute("data-auto-a11y",r?"true":"false");n&&(t.setAttributeNode(document.createAttribute("data-auto-fetch-svg")),t.setAttribute("data-fetch-svg-from",e.fetchSvgFrom),t.setAttribute("data-fetch-uploaded-svg-from",e.fetchUploadedSvgFrom));return t}(o,e))})).catch(o)}))),_.all(n)}function I(t,e){var n=document.createElement("SCRIPT"),r=document.createTextNode(t);return n.appendChild(r),n.referrerPolicy="strict-origin",e.id&&n.setAttribute("id",e.id),e&&e.detectingConflicts&&e.detectionIgnoreAttr&&n.setAttributeNode(document.createAttribute(e.detectionIgnoreAttr)),n}function L(t){var e,n=[],r=document,o=r.documentElement.doScroll,i=(o?/^loaded|^c/:/^loaded|^i|^c/).test(r.readyState);i||r.addEventListener("DOMContentLoaded",e=function(){for(r.removeEventListener("DOMContentLoaded",e),i=1;e=n.shift();)e()}),i?setTimeout(t,0):n.push(t)}function T(t){"undefined"!=typeof MutationObserver&&new MutationObserver(t).observe(document,{childList:!0,subtree:!0})}try{if(window.FontAwesomeKitConfig){var x=window.FontAwesomeKitConfig,M={detectingConflicts:x.detectConflictsUntil&&new Date<=new Date(x.detectConflictsUntil),detectionIgnoreAttr:"data-fa-detection-ignore",fetch:window.fetch,token:x.token,XMLHttpRequest:window.XMLHttpRequest,document:document},D=document.currentScript,N=D?D.parentElement:document.head;(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"js"===t.method?k(t,e):"css"===t.method?F(t,e,(function(t){L(t),T(t)})):void 0})(x,M).then((function(t){t.map((function(t){try{N.insertBefore(t,D?D.nextSibling:null)}catch(e){N.appendChild(t)}})),M.detectingConflicts&&D&&L((function(){D.setAttributeNode(document.createAttribute(M.detectionIgnoreAttr));var t=function(t,e){var n=document.createElement("script");return e&&e.detectionIgnoreAttr&&n.setAttributeNode(document.createAttribute(e.detectionIgnoreAttr)),n.src=c(t,{baseFilename:"conflict-detection",fileSuffix:"js",subdir:"js",minify:t.minify.enabled}),n}(x,M);document.body.appendChild(t)}))})).catch((function(t){console.error("".concat("Font Awesome Kit:"," ").concat(t))}))}}catch(t){console.error("".concat("Font Awesome Kit:"," ").concat(t))}}));
2868/**
2869* jquery-match-height master by @liabru
2870* http://brm.io/jquery-match-height/
2871* License: MIT
2872*/
2873
2874;(function(factory) { // eslint-disable-line no-extra-semi
2875    'use strict';
2876    if (typeof define === 'function' && define.amd) {
2877        // AMD
2878        define(['jquery'], factory);
2879    } else if (typeof module !== 'undefined' && module.exports) {
2880        // CommonJS
2881        module.exports = factory(require('jquery'));
2882    } else {
2883        // Global
2884        factory(jQuery);
2885    }
2886})(function($) {
2887    /*
2888    *  internal
2889    */
2890
2891    var _previousResizeWidth = -1,
2892        _updateTimeout = -1;
2893
2894    /*
2895    *  _parse
2896    *  value parse utility function
2897    */
2898
2899    var _parse = function(value) {
2900        // parse value and convert NaN to 0
2901        return parseFloat(value) || 0;
2902    };
2903
2904    /*
2905    *  _rows
2906    *  utility function returns array of jQuery selections representing each row
2907    *  (as displayed after float wrapping applied by browser)
2908    */
2909
2910    var _rows = function(elements) {
2911        var tolerance = 1,
2912            $elements = $(elements),
2913            lastTop = null,
2914            rows = [];
2915
2916        // group elements by their top position
2917        $elements.each(function(){
2918            var $that = $(this),
2919                top = $that.offset().top - _parse($that.css('margin-top')),
2920                lastRow = rows.length > 0 ? rows[rows.length - 1] : null;
2921
2922            if (lastRow === null) {
2923                // first item on the row, so just push it
2924                rows.push($that);
2925            } else {
2926                // if the row top is the same, add to the row group
2927                if (Math.floor(Math.abs(lastTop - top)) <= tolerance) {
2928                    rows[rows.length - 1] = lastRow.add($that);
2929                } else {
2930                    // otherwise start a new row group
2931                    rows.push($that);
2932                }
2933            }
2934
2935            // keep track of the last row top
2936            lastTop = top;
2937        });
2938
2939        return rows;
2940    };
2941
2942    /*
2943    *  _parseOptions
2944    *  handle plugin options
2945    */
2946
2947    var _parseOptions = function(options) {
2948        var opts = {
2949            byRow: true,
2950            property: 'height',
2951            target: null,
2952            remove: false
2953        };
2954
2955        if (typeof options === 'object') {
2956            return $.extend(opts, options);
2957        }
2958
2959        if (typeof options === 'boolean') {
2960            opts.byRow = options;
2961        } else if (options === 'remove') {
2962            opts.remove = true;
2963        }
2964
2965        return opts;
2966    };
2967
2968    /*
2969    *  matchHeight
2970    *  plugin definition
2971    */
2972
2973    var matchHeight = $.fn.matchHeight = function(options) {
2974        var opts = _parseOptions(options);
2975
2976        // handle remove
2977        if (opts.remove) {
2978            var that = this;
2979
2980            // remove fixed height from all selected elements
2981            this.css(opts.property, '');
2982
2983            // remove selected elements from all groups
2984            $.each(matchHeight._groups, function(key, group) {
2985                group.elements = group.elements.not(that);
2986            });
2987
2988            // TODO: cleanup empty groups
2989
2990            return this;
2991        }
2992
2993        if (this.length <= 1 && !opts.target) {
2994            return this;
2995        }
2996
2997        // keep track of this group so we can re-apply later on load and resize events
2998        matchHeight._groups.push({
2999            elements: this,
3000            options: opts
3001        });
3002
3003        // match each element's height to the tallest element in the selection
3004        matchHeight._apply(this, opts);
3005
3006        return this;
3007    };
3008
3009    /*
3010    *  plugin global options
3011    */
3012
3013    matchHeight.version = 'master';
3014    matchHeight._groups = [];
3015    matchHeight._throttle = 80;
3016    matchHeight._maintainScroll = false;
3017    matchHeight._beforeUpdate = null;
3018    matchHeight._afterUpdate = null;
3019    matchHeight._rows = _rows;
3020    matchHeight._parse = _parse;
3021    matchHeight._parseOptions = _parseOptions;
3022
3023    /*
3024    *  matchHeight._apply
3025    *  apply matchHeight to given elements
3026    */
3027
3028    matchHeight._apply = function(elements, options) {
3029        var opts = _parseOptions(options),
3030            $elements = $(elements),
3031            rows = [$elements];
3032
3033        // take note of scroll position
3034        var scrollTop = $(window).scrollTop(),
3035            htmlHeight = $('html').outerHeight(true);
3036
3037        // get hidden parents
3038        var $hiddenParents = $elements.parents().filter(':hidden');
3039
3040        // cache the original inline style
3041        $hiddenParents.each(function() {
3042            var $that = $(this);
3043            $that.data('style-cache', $that.attr('style'));
3044        });
3045
3046        // temporarily must force hidden parents visible
3047        $hiddenParents.css('display', 'block');
3048
3049        // get rows if using byRow, otherwise assume one row
3050        if (opts.byRow && !opts.target) {
3051
3052            // must first force an arbitrary equal height so floating elements break evenly
3053            $elements.each(function() {
3054                var $that = $(this),
3055                    display = $that.css('display');
3056
3057                // temporarily force a usable display value
3058                if (display !== 'inline-block' && display !== 'flex' && display !== 'inline-flex') {
3059                    display = 'block';
3060                }
3061
3062                // cache the original inline style
3063                $that.data('style-cache', $that.attr('style'));
3064
3065                $that.css({
3066                    'display': display,
3067                    'padding-top': '0',
3068                    'padding-bottom': '0',
3069                    'margin-top': '0',
3070                    'margin-bottom': '0',
3071                    'border-top-width': '0',
3072                    'border-bottom-width': '0',
3073                    'height': '100px',
3074                    'overflow': 'hidden'
3075                });
3076            });
3077
3078            // get the array of rows (based on element top position)
3079            rows = _rows($elements);
3080
3081            // revert original inline styles
3082            $elements.each(function() {
3083                var $that = $(this);
3084                $that.attr('style', $that.data('style-cache') || '');
3085            });
3086        }
3087
3088        $.each(rows, function(key, row) {
3089            var $row = $(row),
3090                targetHeight = 0;
3091
3092            if (!opts.target) {
3093                // skip apply to rows with only one item
3094                if (opts.byRow && $row.length <= 1) {
3095                    $row.css(opts.property, '');
3096                    return;
3097                }
3098
3099                // iterate the row and find the max height
3100                $row.each(function(){
3101                    var $that = $(this),
3102                        style = $that.attr('style'),
3103                        display = $that.css('display');
3104
3105                    // temporarily force a usable display value
3106                    if (display !== 'inline-block' && display !== 'flex' && display !== 'inline-flex') {
3107                        display = 'block';
3108                    }
3109
3110                    // ensure we get the correct actual height (and not a previously set height value)
3111                    var css = { 'display': display };
3112                    css[opts.property] = '';
3113                    $that.css(css);
3114
3115                    // find the max height (including padding, but not margin)
3116                    if ($that.outerHeight(false) > targetHeight) {
3117                        targetHeight = $that.outerHeight(false);
3118                    }
3119
3120                    // revert styles
3121                    if (style) {
3122                        $that.attr('style', style);
3123                    } else {
3124                        $that.css('display', '');
3125                    }
3126                });
3127            } else {
3128                // if target set, use the height of the target element
3129                targetHeight = opts.target.outerHeight(false);
3130            }
3131
3132            // iterate the row and apply the height to all elements
3133            $row.each(function(){
3134                var $that = $(this),
3135                    verticalPadding = 0;
3136
3137                // don't apply to a target
3138                if (opts.target && $that.is(opts.target)) {
3139                    return;
3140                }
3141
3142                // handle padding and border correctly (required when not using border-box)
3143                if ($that.css('box-sizing') !== 'border-box') {
3144                    verticalPadding += _parse($that.css('border-top-width')) + _parse($that.css('border-bottom-width'));
3145                    verticalPadding += _parse($that.css('padding-top')) + _parse($that.css('padding-bottom'));
3146                }
3147
3148                // set the height (accounting for padding and border)
3149                $that.css(opts.property, (targetHeight - verticalPadding) + 'px');
3150            });
3151        });
3152
3153        // revert hidden parents
3154        $hiddenParents.each(function() {
3155            var $that = $(this);
3156            $that.attr('style', $that.data('style-cache') || null);
3157        });
3158
3159        // restore scroll position if enabled
3160        if (matchHeight._maintainScroll) {
3161            $(window).scrollTop((scrollTop / htmlHeight) * $('html').outerHeight(true));
3162        }
3163
3164        return this;
3165    };
3166
3167    /*
3168    *  matchHeight._applyDataApi
3169    *  applies matchHeight to all elements with a data-match-height attribute
3170    */
3171
3172    matchHeight._applyDataApi = function() {
3173        var groups = {};
3174
3175        // generate groups by their groupId set by elements using data-match-height
3176        $('[data-match-height], [data-mh]').each(function() {
3177            var $this = $(this),
3178                groupId = $this.attr('data-mh') || $this.attr('data-match-height');
3179
3180            if (groupId in groups) {
3181                groups[groupId] = groups[groupId].add($this);
3182            } else {
3183                groups[groupId] = $this;
3184            }
3185        });
3186
3187        // apply matchHeight to each group
3188        $.each(groups, function() {
3189            this.matchHeight(true);
3190        });
3191    };
3192
3193    /*
3194    *  matchHeight._update
3195    *  updates matchHeight on all current groups with their correct options
3196    */
3197
3198
3199    var _update = function(event) {
3200        if (matchHeight._beforeUpdate) {
3201            matchHeight._beforeUpdate(event, matchHeight._groups);
3202        }
3203
3204        $.each(matchHeight._groups, function() {
3205            matchHeight._apply(this.elements, this.options);
3206        });
3207
3208        if (matchHeight._afterUpdate) {
3209            matchHeight._afterUpdate(event, matchHeight._groups);
3210        }
3211    };
3212
3213    matchHeight._update = function(throttle, event) {
3214        // prevent update if fired from a resize event
3215        // where the viewport width hasn't actually changed
3216        // fixes an event looping bug in IE8
3217        if (event && event.type === 'resize') {
3218            var windowWidth = $(window).width();
3219            if (windowWidth === _previousResizeWidth) {
3220                return;
3221            }
3222            _previousResizeWidth = windowWidth;
3223        }
3224
3225        // throttle updates
3226        if (!throttle) {
3227            _update(event);
3228        } else if (_updateTimeout === -1) {
3229            _updateTimeout = setTimeout(function() {
3230                _update(event);
3231                _updateTimeout = -1;
3232            }, matchHeight._throttle);
3233        }
3234    };
3235
3236    /*
3237    *  bind events
3238    */
3239
3240    // apply on DOM ready event
3241    $(matchHeight._applyDataApi);
3242
3243    // use on or bind where supported
3244    var on = $.fn.on ? 'on' : 'bind';
3245
3246    // update heights on load and resize events
3247    $(window)[on]('load', function(event) {
3248        matchHeight._update(false, event);
3249    });
3250
3251    // throttled update heights on resize events
3252    $(window)[on]('resize orientationchange', function(event) {
3253        matchHeight._update(true, event);
3254    });
3255
3256});
3257//
3258// SmoothScroll for websites v1.4.10 (Balazs Galambosi)
3259// http://www.smoothscroll.net/
3260//
3261// Licensed under the terms of the MIT license.
3262//
3263// You may use it in your theme if you credit me. 
3264// It is also free to use on any individual website.
3265//
3266// Exception:
3267// The only restriction is to not publish any  
3268// extension for browsers or native application
3269// without getting a written permission first.
3270//
3271
3272(function () {
3273  
3274// Scroll Variables (tweakable)
3275var defaultOptions = {
3276
3277    // Scrolling Core
3278    frameRate        : 150, // [Hz]
3279    animationTime    : 1000, // [ms]
3280    stepSize         : 50, // [px]
3281
3282    // Pulse (less tweakable)
3283    // ratio of "tail" to "acceleration"
3284    pulseAlgorithm   : true,
3285    pulseScale       : 4,
3286    pulseNormalize   : 1,
3287
3288    // Acceleration
3289    accelerationDelta : 50,  // 50
3290    accelerationMax   : 3,   // 3
3291
3292    // Keyboard Settings
3293    keyboardSupport   : true,  // option
3294    arrowScroll       : 50,    // [px]
3295
3296    // Other
3297    fixedBackground   : true, 
3298    excluded          : ''    
3299};
3300
3301var options = defaultOptions;
3302
3303
3304// Other Variables
3305var isExcluded = false;
3306var isFrame = false;
3307var direction = { x: 0, y: 0 };
3308var initDone  = false;
3309var root = document.documentElement;
3310var activeElement;
3311var observer;
3312var refreshSize;
3313var deltaBuffer = [];
3314var deltaBufferTimer;
3315var isMac = /^Mac/.test(navigator.platform);
3316
3317var key = { left: 37, up: 38, right: 39, down: 40, spacebar: 32, 
3318            pageup: 33, pagedown: 34, end: 35, home: 36 };
3319var arrowKeys = { 37: 1, 38: 1, 39: 1, 40: 1 };
3320
3321/***********************************************
3322 * INITIALIZE
3323 ***********************************************/
3324
3325/**
3326 * Tests if smooth scrolling is allowed. Shuts down everything if not.
3327 */
3328function initTest() {
3329    if (options.keyboardSupport) {
3330        addEvent('keydown', keydown);
3331    }
3332}
3333
3334/**
3335 * Sets up scrolls array, determines if frames are involved.
3336 */
3337function init() {
3338  
3339    if (initDone || !document.body) return;
3340
3341    initDone = true;
3342
3343    var body = document.body;
3344    var html = document.documentElement;
3345    var windowHeight = window.innerHeight; 
3346    var scrollHeight = body.scrollHeight;
3347    
3348    // check compat mode for root element
3349    root = (document.compatMode.indexOf('CSS') >= 0) ? html : body;
3350    activeElement = body;
3351    
3352    initTest();
3353
3354    // Checks if this script is running in a frame
3355    if (top != self) {
3356        isFrame = true;
3357    }
3358
3359    /**
3360     * Safari 10 fixed it, Chrome fixed it in v45:
3361     * This fixes a bug where the areas left and right to 
3362     * the content does not trigger the onmousewheel event
3363     * on some pages. e.g.: html, body { height: 100% }
3364     */
3365    else if (isOldSafari &&
3366             scrollHeight > windowHeight &&
3367            (body.offsetHeight <= windowHeight || 
3368             html.offsetHeight <= windowHeight)) {
3369
3370        var fullPageElem = document.createElement('div');
3371        fullPageElem.style.cssText = 'position:absolute; z-index:-10000; ' +
3372                                     'top:0; left:0; right:0; height:' + 
3373                                      root.scrollHeight + 'px';
3374        document.body.appendChild(fullPageElem);
3375        
3376        // DOM changed (throttled) to fix height
3377        var pendingRefresh;
3378        refreshSize = function () {
3379            if (pendingRefresh) return; // could also be: clearTimeout(pendingRefresh);
3380            pendingRefresh = setTimeout(function () {
3381                if (isExcluded) return; // could be running after cleanup
3382                fullPageElem.style.height = '0';
3383                fullPageElem.style.height = root.scrollHeight + 'px';
3384                pendingRefresh = null;
3385            }, 500); // act rarely to stay fast
3386        };
3387  
3388        setTimeout(refreshSize, 10);
3389
3390        addEvent('resize', refreshSize);
3391
3392        // TODO: attributeFilter?
3393        var config = {
3394            attributes: true, 
3395            childList: true, 
3396            characterData: false 
3397            // subtree: true
3398        };
3399
3400        observer = new MutationObserver(refreshSize);
3401        observer.observe(body, config);
3402
3403        if (root.offsetHeight <= windowHeight) {
3404            var clearfix = document.createElement('div');   
3405            clearfix.style.clear = 'both';
3406            body.appendChild(clearfix);
3407        }
3408    }
3409
3410    // disable fixed background
3411    if (!options.fixedBackground && !isExcluded) {
3412        body.style.backgroundAttachment = 'scroll';
3413        html.style.backgroundAttachment = 'scroll';
3414    }
3415}
3416
3417/**
3418 * Removes event listeners and other traces left on the page.
3419 */
3420function cleanup() {
3421    observer && observer.disconnect();
3422    removeEvent(wheelEvent, wheel);
3423    removeEvent('mousedown', mousedown);
3424    removeEvent('keydown', keydown);
3425    removeEvent('resize', refreshSize);
3426    removeEvent('load', init);
3427}
3428
3429
3430/************************************************
3431 * SCROLLING 
3432 ************************************************/
3433 
3434var que = [];
3435var pending = false;
3436var lastScroll = Date.now();
3437
3438/**
3439 * Pushes scroll actions to the scrolling queue.
3440 */
3441function scrollArray(elem, left, top) {
3442    
3443    directionCheck(left, top);
3444
3445    if (options.accelerationMax != 1) {
3446        var now = Date.now();
3447        var elapsed = now - lastScroll;
3448        if (elapsed < options.accelerationDelta) {
3449            var factor = (1 + (50 / elapsed)) / 2;
3450            if (factor > 1) {
3451                factor = Math.min(factor, options.accelerationMax);
3452                left *= factor;
3453                top  *= factor;
3454            }
3455        }
3456        lastScroll = Date.now();
3457    }          
3458    
3459    // push a scroll command
3460    que.push({
3461        x: left, 
3462        y: top, 
3463        lastX: (left < 0) ? 0.99 : -0.99,
3464        lastY: (top  < 0) ? 0.99 : -0.99, 
3465        start: Date.now()
3466    });
3467        
3468    // don't act if there's a pending queue
3469    if (pending) {
3470        return;
3471    }  
3472
3473    var scrollRoot = getScrollRoot();
3474    var isWindowScroll = (elem === scrollRoot || elem === document.body);
3475    
3476    // if we haven't already fixed the behavior, 
3477    // and it needs fixing for this sesh
3478    if (elem.$scrollBehavior == null && isScrollBehaviorSmooth(elem)) {
3479        elem.$scrollBehavior = elem.style.scrollBehavior;
3480        elem.style.scrollBehavior = 'auto';
3481    }
3482
3483    var step = function (time) {
3484        
3485        var now = Date.now();
3486        var scrollX = 0;
3487        var scrollY = 0; 
3488    
3489        for (var i = 0; i < que.length; i++) {
3490            
3491            var item = que[i];
3492            var elapsed  = now - item.start;
3493            var finished = (elapsed >= options.animationTime);
3494            
3495            // scroll position: [0, 1]
3496            var position = (finished) ? 1 : elapsed / options.animationTime;
3497            
3498            // easing [optional]
3499            if (options.pulseAlgorithm) {
3500                position = pulse(position);
3501            }
3502            
3503            // only need the difference
3504            var x = (item.x * position - item.lastX) >> 0;
3505            var y = (item.y * position - item.lastY) >> 0;
3506            
3507            // add this to the total scrolling
3508            scrollX += x;
3509            scrollY += y;            
3510            
3511            // update last values
3512            item.lastX += x;
3513            item.lastY += y;
3514        
3515            // delete and step back if it's over
3516            if (finished) {
3517                que.splice(i, 1); i--;
3518            }           
3519        }
3520
3521        // scroll left and top
3522        if (isWindowScroll) {
3523            window.scrollBy(scrollX, scrollY);
3524        } 
3525        else {
3526            if (scrollX) elem.scrollLeft += scrollX;
3527            if (scrollY) elem.scrollTop  += scrollY;                    
3528        }
3529        
3530        // clean up if there's nothing left to do
3531        if (!left && !top) {
3532            que = [];
3533        }
3534        
3535        if (que.length) { 
3536            requestFrame(step, elem, (1000 / options.frameRate + 1)); 
3537        } else { 
3538            pending = false;
3539            // restore default behavior at the end of scrolling sesh
3540            if (elem.$scrollBehavior != null) {
3541                elem.style.scrollBehavior = elem.$scrollBehavior;
3542                elem.$scrollBehavior = null;
3543            }
3544        }
3545    };
3546    
3547    // start a new queue of actions
3548    requestFrame(step, elem, 0);
3549    pending = true;
3550}
3551
3552
3553/***********************************************
3554 * EVENTS
3555 ***********************************************/
3556
3557/**
3558 * Mouse wheel handler.
3559 * @param {Object} event
3560 */
3561function wheel(event) {
3562
3563    if (!initDone) {
3564        init();
3565    }
3566    
3567    var target = event.target;
3568
3569    // leave early if default action is prevented   
3570    // or it's a zooming event with CTRL 
3571    if (event.defaultPrevented || event.ctrlKey) {
3572        return true;
3573    }
3574    
3575    // leave embedded content alone (flash & pdf)
3576    if (isNodeName(activeElement, 'embed') || 
3577       (isNodeName(target, 'embed') && /\.pdf/i.test(target.src)) ||
3578        isNodeName(activeElement, 'object') ||
3579        target.shadowRoot) {
3580        return true;
3581    }
3582
3583    var deltaX = -event.wheelDeltaX || event.deltaX || 0;
3584    var deltaY = -event.wheelDeltaY || event.deltaY || 0;
3585    
3586    if (isMac) {
3587        if (event.wheelDeltaX && isDivisible(event.wheelDeltaX, 120)) {
3588            deltaX = -120 * (event.wheelDeltaX / Math.abs(event.wheelDeltaX));
3589        }
3590        if (event.wheelDeltaY && isDivisible(event.wheelDeltaY, 120)) {
3591            deltaY = -120 * (event.wheelDeltaY / Math.abs(event.wheelDeltaY));
3592        }
3593    }
3594    
3595    // use wheelDelta if deltaX/Y is not available
3596    if (!deltaX && !deltaY) {
3597        deltaY = -event.wheelDelta || 0;
3598    }
3599
3600    // line based scrolling (Firefox mostly)
3601    if (event.deltaMode === 1) {
3602        deltaX *= 40;
3603        deltaY *= 40;
3604    }
3605
3606    var overflowing = overflowingAncestor(target);
3607
3608    // nothing to do if there's no element that's scrollable
3609    if (!overflowing) {
3610        // except Chrome iframes seem to eat wheel events, which we need to 
3611        // propagate up, if the iframe has nothing overflowing to scroll
3612        if (isFrame && isChrome)  {
3613            // change target to iframe element itself for the parent frame
3614            Object.defineProperty(event, "target", {value: window.frameElement});
3615            return parent.wheel(event);
3616        }
3617        return true;
3618    }
3619    
3620    // check if it's a touchpad scroll that should be ignored
3621    if (isTouchpad(deltaY)) {
3622        return true;
3623    }
3624
3625    // scale by step size
3626    // delta is 120 most of the time
3627    // synaptics seems to send 1 sometimes
3628    if (Math.abs(deltaX) > 1.2) {
3629        deltaX *= options.stepSize / 120;
3630    }
3631    if (Math.abs(deltaY) > 1.2) {
3632        deltaY *= options.stepSize / 120;
3633    }
3634    
3635    scrollArray(overflowing, deltaX, deltaY);
3636    event.preventDefault();
3637    scheduleClearCache();
3638}
3639
3640/**
3641 * Keydown event handler.
3642 * @param {Object} event
3643 */
3644function keydown(event) {
3645
3646    var target   = event.target;
3647    var modifier = event.ctrlKey || event.altKey || event.metaKey || 
3648                  (event.shiftKey && event.keyCode !== key.spacebar);
3649    
3650    // our own tracked active element could've been removed from the DOM
3651    if (!document.body.contains(activeElement)) {
3652        activeElement = document.activeElement;
3653    }
3654
3655    // do nothing if user is editing text
3656    // or using a modifier key (except shift)
3657    // or in a dropdown
3658    // or inside interactive elements
3659    var inputNodeNames = /^(textarea|select|embed|object)$/i;
3660    var buttonTypes = /^(button|submit|radio|checkbox|file|color|image)$/i;
3661    if ( event.defaultPrevented ||
3662         inputNodeNames.test(target.nodeName) ||
3663         isNodeName(target, 'input') && !buttonTypes.test(target.type) ||
3664         isNodeName(activeElement, 'video') ||
3665         isInsideYoutubeVideo(event) ||
3666         target.isContentEditable || 
3667         modifier ) {
3668      return true;
3669    }
3670
3671    // [spacebar] should trigger button press, leave it alone
3672    if ((isNodeName(target, 'button') ||
3673         isNodeName(target, 'input') && buttonTypes.test(target.type)) &&
3674        event.keyCode === key.spacebar) {
3675      return true;
3676    }
3677
3678    // [arrwow keys] on radio buttons should be left alone
3679    if (isNodeName(target, 'input') && target.type == 'radio' &&
3680        arrowKeys[event.keyCode])  {
3681      return true;
3682    }
3683    
3684    var shift, x = 0, y = 0;
3685    var overflowing = overflowingAncestor(activeElement);
3686
3687    if (!overflowing) {
3688        // Chrome iframes seem to eat key events, which we need to 
3689        // propagate up, if the iframe has nothing overflowing to scroll
3690        return (isFrame && isChrome) ? parent.keydown(event) : true;
3691    }
3692
3693    var clientHeight = overflowing.clientHeight; 
3694
3695    if (overflowing == document.body) {
3696        clientHeight = window.innerHeight;
3697    }
3698
3699    switch (event.keyCode) {
3700        case key.up:
3701            y = -options.arrowScroll;
3702            break;
3703        case key.down:
3704            y = options.arrowScroll;
3705            break;         
3706        case key.spacebar: // (+ shift)
3707            shift = event.shiftKey ? 1 : -1;
3708            y = -shift * clientHeight * 0.9;
3709            break;
3710        case key.pageup:
3711            y = -clientHeight * 0.9;
3712            break;
3713        case key.pagedown:
3714            y = clientHeight * 0.9;
3715            break;
3716        case key.home:
3717            if (overflowing == document.body && document.scrollingElement)
3718                overflowing = document.scrollingElement;
3719            y = -overflowing.scrollTop;
3720            break;
3721        case key.end:
3722            var scroll = overflowing.scrollHeight - overflowing.scrollTop;
3723            var scrollRemaining = scroll - clientHeight;
3724            y = (scrollRemaining > 0) ? scrollRemaining + 10 : 0;
3725            break;
3726        case key.left:
3727            x = -options.arrowScroll;
3728            break;
3729        case key.right:
3730            x = options.arrowScroll;
3731            break;            
3732        default:
3733            return true; // a key we don't care about
3734    }
3735
3736    scrollArray(overflowing, x, y);
3737    event.preventDefault();
3738    scheduleClearCache();
3739}
3740
3741/**
3742 * Mousedown event only for updating activeElement
3743 */
3744function mousedown(event) {
3745    activeElement = event.target;
3746}
3747
3748
3749/***********************************************
3750 * OVERFLOW
3751 ***********************************************/
3752
3753var uniqueID = (function () {
3754    var i = 0;
3755    return function (el) {
3756        return el.uniqueID || (el.uniqueID = i++);
3757    };
3758})();
3759
3760var cacheX = {}; // cleared out after a scrolling session
3761var cacheY = {}; // cleared out after a scrolling session
3762var clearCacheTimer;
3763var smoothBehaviorForElement = {};
3764
3765//setInterval(function () { cache = {}; }, 10 * 1000);
3766
3767function scheduleClearCache() {
3768    clearTimeout(clearCacheTimer);
3769    clearCacheTimer = setInterval(function () { 
3770        cacheX = cacheY = smoothBehaviorForElement = {}; 
3771    }, 1*1000);
3772}
3773
3774function setCache(elems, overflowing, x) {
3775    var cache = x ? cacheX : cacheY;
3776    for (var i = elems.length; i--;)
3777        cache[uniqueID(elems[i])] = overflowing;
3778    return overflowing;
3779}
3780
3781function getCache(el, x) {
3782    return (x ? cacheX : cacheY)[uniqueID(el)];
3783}
3784
3785//  (body)                (root)
3786//         | hidden | visible | scroll |  auto  |
3787// hidden  |   no   |    no   |   YES  |   YES  |
3788// visible |   no   |   YES   |   YES  |   YES  |
3789// scroll  |   no   |   YES   |   YES  |   YES  |
3790// auto    |   no   |   YES   |   YES  |   YES  |
3791
3792function overflowingAncestor(el) {
3793    var elems = [];
3794    var body = document.body;
3795    var rootScrollHeight = root.scrollHeight;
3796    do {
3797        var cached = getCache(el, false);
3798        if (cached) {
3799            return setCache(elems, cached);
3800        }
3801        elems.push(el);
3802        if (rootScrollHeight === el.scrollHeight) {
3803            var topOverflowsNotHidden = overflowNotHidden(root) && overflowNotHidden(body);
3804            var isOverflowCSS = topOverflowsNotHidden || overflowAutoOrScroll(root);
3805            if (isFrame && isContentOverflowing(root) || 
3806               !isFrame && isOverflowCSS) {
3807                return setCache(elems, getScrollRoot()); 
3808            }
3809        } else if (isContentOverflowing(el) && overflowAutoOrScroll(el)) {
3810            return setCache(elems, el);
3811        }
3812    } while ((el = el.parentElement));
3813}
3814
3815function isContentOverflowing(el) {
3816    return (el.clientHeight + 10 < el.scrollHeight);
3817}
3818
3819// typically for <body> and <html>
3820function overflowNotHidden(el) {
3821    var overflow = getComputedStyle(el, '').getPropertyValue('overflow-y');
3822    return (overflow !== 'hidden');
3823}
3824
3825// for all other elements
3826function overflowAutoOrScroll(el) {
3827    var overflow = getComputedStyle(el, '').getPropertyValue('overflow-y');
3828    return (overflow === 'scroll' || overflow === 'auto');
3829}
3830
3831// for all other elements
3832function isScrollBehaviorSmooth(el) {
3833    var id = uniqueID(el);
3834    if (smoothBehaviorForElement[id] == null) {
3835        var scrollBehavior = getComputedStyle(el, '')['scroll-behavior'];
3836        smoothBehaviorForElement[id] = ('smooth' == scrollBehavior);
3837    }
3838    return smoothBehaviorForElement[id];
3839}
3840
3841
3842/***********************************************
3843 * HELPERS
3844 ***********************************************/
3845
3846function addEvent(type, fn, arg) {
3847    window.addEventListener(type, fn, arg || false);
3848}
3849
3850function removeEvent(type, fn, arg) {
3851    window.removeEventListener(type, fn, arg || false);  
3852}
3853
3854function isNodeName(el, tag) {
3855    return el && (el.nodeName||'').toLowerCase() === tag.toLowerCase();
3856}
3857
3858function directionCheck(x, y) {
3859    x = (x > 0) ? 1 : -1;
3860    y = (y > 0) ? 1 : -1;
3861    if (direction.x !== x || direction.y !== y) {
3862        direction.x = x;
3863        direction.y = y;
3864        que = [];
3865        lastScroll = 0;
3866    }
3867}
3868
3869if (window.localStorage && localStorage.SS_deltaBuffer) {
3870    try { // #46 Safari throws in private browsing for localStorage 
3871        deltaBuffer = localStorage.SS_deltaBuffer.split(',');
3872    } catch (e) { } 
3873}
3874
3875function isTouchpad(deltaY) {
3876    if (!deltaY) return;
3877    if (!deltaBuffer.length) {
3878        deltaBuffer = [deltaY, deltaY, deltaY];
3879    }
3880    deltaY = Math.abs(deltaY);
3881    deltaBuffer.push(deltaY);
3882    deltaBuffer.shift();
3883    clearTimeout(deltaBufferTimer);
3884    deltaBufferTimer = setTimeout(function () {
3885        try { // #46 Safari throws in private browsing for localStorage
3886            localStorage.SS_deltaBuffer = deltaBuffer.join(',');
3887        } catch (e) { }  
3888    }, 1000);
3889    var dpiScaledWheelDelta = deltaY > 120 && allDeltasDivisableBy(deltaY); // win64 
3890    var tp = !allDeltasDivisableBy(120) && !allDeltasDivisableBy(100) && !dpiScaledWheelDelta;
3891    if (deltaY < 50) return true;
3892    return tp;
3893} 
3894
3895function isDivisible(n, divisor) {
3896    return (Math.floor(n / divisor) == n / divisor);
3897}
3898
3899function allDeltasDivisableBy(divisor) {
3900    return (isDivisible(deltaBuffer[0], divisor) &&
3901            isDivisible(deltaBuffer[1], divisor) &&
3902            isDivisible(deltaBuffer[2], divisor));
3903}
3904
3905function isInsideYoutubeVideo(event) {
3906    var elem = event.target;
3907    var isControl = false;
3908    if (document.URL.indexOf ('www.youtube.com/watch') != -1) {
3909        do {
3910            isControl = (elem.classList && 
3911                         elem.classList.contains('html5-video-controls'));
3912            if (isControl) break;
3913        } while ((elem = elem.parentNode));
3914    }
3915    return isControl;
3916}
3917
3918var requestFrame = (function () {
3919      return (window.requestAnimationFrame       || 
3920              window.webkitRequestAnimationFrame || 
3921              window.mozRequestAnimationFrame    ||
3922              function (callback, element, delay) {
3923                 window.setTimeout(callback, delay || (1000/60));
3924             });
3925})();
3926
3927var MutationObserver = (window.MutationObserver || 
3928                        window.WebKitMutationObserver ||
3929                        window.MozMutationObserver);  
3930
3931var getScrollRoot = (function() {
3932  var SCROLL_ROOT = document.scrollingElement;
3933  return function() {
3934    if (!SCROLL_ROOT) {
3935      var dummy = document.createElement('div');
3936      dummy.style.cssText = 'height:10000px;width:1px;';
3937      document.body.appendChild(dummy);
3938      var bodyScrollTop  = document.body.scrollTop;
3939      var docElScrollTop = document.documentElement.scrollTop;
3940      window.scrollBy(0, 3);
3941      if (document.body.scrollTop != bodyScrollTop)
3942        (SCROLL_ROOT = document.body);
3943      else 
3944        (SCROLL_ROOT = document.documentElement);
3945      window.scrollBy(0, -3);
3946      document.body.removeChild(dummy);
3947    }
3948    return SCROLL_ROOT;
3949  };
3950})();
3951
3952
3953/***********************************************
3954 * PULSE (by Michael Herf)
3955 ***********************************************/
3956 
3957/**
3958 * Viscous fluid with a pulse for part and decay for the rest.
3959 * - Applies a fixed force over an interval (a damped acceleration), and
3960 * - Lets the exponential bleed away the velocity over a longer interval
3961 * - Michael Herf, http://stereopsis.com/stopping/
3962 */
3963function pulse_(x) {
3964    var val, start, expx;
3965    // test
3966    x = x * options.pulseScale;
3967    if (x < 1) { // acceleartion
3968        val = x - (1 - Math.exp(-x));
3969    } else {     // tail
3970        // the previous animation ended here:
3971        start = Math.exp(-1);
3972        // simple viscous drag
3973        x -= 1;
3974        expx = 1 - Math.exp(-x);
3975        val = start + (expx * (1 - start));
3976    }
3977    return val * options.pulseNormalize;
3978}
3979
3980function pulse(x) {
3981    if (x >= 1) return 1;
3982    if (x <= 0) return 0;
3983
3984    if (options.pulseNormalize == 1) {
3985        options.pulseNormalize /= pulse_(1);
3986    }
3987    return pulse_(x);
3988}
3989
3990
3991/***********************************************
3992 * FIRST RUN
3993 ***********************************************/
3994
3995var userAgent = window.navigator.userAgent;
3996var isEdge    = /Edge/.test(userAgent); // thank you MS
3997var isChrome  = /chrome/i.test(userAgent) && !isEdge; 
3998var isSafari  = /safari/i.test(userAgent) && !isEdge; 
3999var isMobile  = /mobile/i.test(userAgent);
4000var isIEWin7  = /Windows NT 6.1/i.test(userAgent) && /rv:11/i.test(userAgent);
4001var isOldSafari = isSafari && (/Version\/8/i.test(userAgent) || /Version\/9/i.test(userAgent));
4002var isEnabledForBrowser = (isChrome || isSafari || isIEWin7) && !isMobile;
4003
4004var supportsPassive = false;
4005try {
4006  window.addEventListener("test", null, Object.defineProperty({}, 'passive', {
4007    get: function () {
4008            supportsPassive = true;
4009        } 
4010    }));
4011} catch(e) {}
4012
4013var wheelOpt = supportsPassive ? { passive: false } : false;
4014var wheelEvent = 'onwheel' in document.createElement('div') ? 'wheel' : 'mousewheel'; 
4015
4016if (wheelEvent && isEnabledForBrowser) {
4017    addEvent(wheelEvent, wheel, wheelOpt);
4018    addEvent('mousedown', mousedown);
4019    addEvent('load', init);
4020}
4021
4022
4023/***********************************************
4024 * PUBLIC INTERFACE
4025 ***********************************************/
4026
4027function SmoothScroll(optionsToSet) {
4028    for (var key in optionsToSet)
4029        if (defaultOptions.hasOwnProperty(key)) 
4030            options[key] = optionsToSet[key];
4031}
4032SmoothScroll.destroy = cleanup;
4033
4034if (window.SmoothScrollOptions) // async API
4035    SmoothScroll(window.SmoothScrollOptions);
4036
4037if (typeof define === 'function' && define.amd)
4038    define(function() {
4039        return SmoothScroll;
4040    });
4041else if ('object' == typeof exports)
4042    module.exports = SmoothScroll;
4043else
4044    window.SmoothScroll = SmoothScroll;
4045
4046})();
4047/**
4048 * Swiper 7.2.0
4049 * Most modern mobile touch slider and framework with hardware accelerated transitions
4050 * https://swiperjs.com
4051 *
4052 * Copyright 2014-2021 Vladimir Kharlampidi
4053 *
4054 * Released under the MIT License
4055 *
4056 * Released on: October 27, 2021
4057 */
4058
4059!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Swiper=t()}(this,(function(){"use strict";function e(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function t(s={},a={}){Object.keys(a).forEach((i=>{void 0===s[i]?s[i]=a[i]:e(a[i])&&e(s[i])&&Object.keys(a[i]).length>0&&t(s[i],a[i])}))}const s={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector:()=>null,querySelectorAll:()=>[],getElementById:()=>null,createEvent:()=>({initEvent(){}}),createElement:()=>({children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName:()=>[]}),createElementNS:()=>({}),importNode:()=>null,location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function a(){const e="undefined"!=typeof document?document:{};return t(e,s),e}const i={document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle:()=>({getPropertyValue:()=>""}),Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia:()=>({}),requestAnimationFrame:e=>"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0),cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function r(){const e="undefined"!=typeof window?window:{};return t(e,i),e}class n extends Array{constructor(e){super(...e||[]),function(e){const t=e.__proto__;Object.defineProperty(e,"__proto__",{get:()=>t,set(e){t.__proto__=e}})}(this)}}function l(e=[]){const t=[];return e.forEach((e=>{Array.isArray(e)?t.push(...l(e)):t.push(e)})),t}function o(e,t){return Array.prototype.filter.call(e,t)}function d(e,t){const s=r(),i=a();let l=[];if(!t&&e instanceof n)return e;if(!e)return new n(l);if("string"==typeof e){const s=e.trim();if(s.indexOf("<")>=0&&s.indexOf(">")>=0){let e="div";0===s.indexOf("<li")&&(e="ul"),0===s.indexOf("<tr")&&(e="tbody"),0!==s.indexOf("<td")&&0!==s.indexOf("<th")||(e="tr"),0===s.indexOf("<tbody")&&(e="table"),0===s.indexOf("<option")&&(e="select");const t=i.createElement(e);t.innerHTML=s;for(let e=0;e<t.childNodes.length;e+=1)l.push(t.childNodes[e])}else l=function(e,t){if("string"!=typeof e)return[e];const s=[],a=t.querySelectorAll(e);for(let e=0;e<a.length;e+=1)s.push(a[e]);return s}(e.trim(),t||i)}else if(e.nodeType||e===s||e===i)l.push(e);else if(Array.isArray(e)){if(e instanceof n)return e;l=e}return new n(function(e){const t=[];for(let s=0;s<e.length;s+=1)-1===t.indexOf(e[s])&&t.push(e[s]);return t}(l))}d.fn=n.prototype;const c={addClass:function(...e){const t=l(e.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.add(...t)})),this},removeClass:function(...e){const t=l(e.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.remove(...t)})),this},hasClass:function(...e){const t=l(e.map((e=>e.split(" "))));return o(this,(e=>t.filter((t=>e.classList.contains(t))).length>0)).length>0},toggleClass:function(...e){const t=l(e.map((e=>e.split(" "))));this.forEach((e=>{t.forEach((t=>{e.classList.toggle(t)}))}
4059))},attr:function(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(let s=0;s<this.length;s+=1)if(2===arguments.length)this[s].setAttribute(e,t);else for(const t in e)this[s][t]=e[t],this[s].setAttribute(t,e[t]);return this},removeAttr:function(e){for(let t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},transform:function(e){for(let t=0;t<this.length;t+=1)this[t].style.transform=e;return this},transition:function(e){for(let t=0;t<this.length;t+=1)this[t].style.transitionDuration="string"!=typeof e?`${e}ms`:e;return this},on:function(...e){let[t,s,a,i]=e;function r(e){const t=e.target;if(!t)return;const i=e.target.dom7EventData||[];if(i.indexOf(e)<0&&i.unshift(e),d(t).is(s))a.apply(t,i);else{const e=d(t).parents();for(let t=0;t<e.length;t+=1)d(e[t]).is(s)&&a.apply(e[t],i)}}function n(e){const t=e&&e.target&&e.target.dom7EventData||[];t.indexOf(e)<0&&t.unshift(e),a.apply(this,t)}"function"==typeof e[1]&&([t,a,i]=e,s=void 0),i||(i=!1);const l=t.split(" ");let o;for(let e=0;e<this.length;e+=1){const t=this[e];if(s)for(o=0;o<l.length;o+=1){const e=l[o];t.dom7LiveListeners||(t.dom7LiveListeners={}),t.dom7LiveListeners[e]||(t.dom7LiveListeners[e]=[]),t.dom7LiveListeners[e].push({listener:a,proxyListener:r}),t.addEventListener(e,r,i)}else for(o=0;o<l.length;o+=1){const e=l[o];t.dom7Listeners||(t.dom7Listeners={}),t.dom7Listeners[e]||(t.dom7Listeners[e]=[]),t.dom7Listeners[e].push({listener:a,proxyListener:n}),t.addEventListener(e,n,i)}}return this},off:function(...e){let[t,s,a,i]=e;"function"==typeof e[1]&&([t,a,i]=e,s=void 0),i||(i=!1);const r=t.split(" ");for(let e=0;e<r.length;e+=1){const t=r[e];for(let e=0;e<this.length;e+=1){const r=this[e];let n;if(!s&&r.dom7Listeners?n=r.dom7Listeners[t]:s&&r.dom7LiveListeners&&(n=r.dom7LiveListeners[t]),n&&n.length)for(let e=n.length-1;e>=0;e-=1){const s=n[e];a&&s.listener===a||a&&s.listener&&s.listener.dom7proxy&&s.listener.dom7proxy===a?(r.removeEventListener(t,s.proxyListener,i),n.splice(e,1)):a||(r.removeEventListener(t,s.proxyListener,i),n.splice(e,1))}}}return this},trigger:function(...e){const t=r(),s=e[0].split(" "),a=e[1];for(let i=0;i<s.length;i+=1){const r=s[i];for(let s=0;s<this.length;s+=1){const i=this[s];if(t.CustomEvent){const s=new t.CustomEvent(r,{detail:a,bubbles:!0,cancelable:!0});i.dom7EventData=e.filter(((e,t)=>t>0)),i.dispatchEvent(s),i.dom7EventData=[],delete i.dom7EventData}}}return this},transitionEnd:function(e){const t=this;return e&&t.on("transitionend",(function s(a){a.target===this&&(e.call(this,a),t.off("transitionend",s))})),this},outerWidth:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){const e=r();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){const e=r(),t=a(),s=this[0],i=s.getBoundingClientRect(),n=t.body,l=s.clientTop||n.clientTop||0,o=s.clientLeft||n.clientLeft||0,d=s===e?e.scrollY:s.scrollTop,c=s===e?e.scrollX:s.scrollLeft;return{top:i.top+d-l,left:i.left+c-o}}return null},css:function(e,t){const s=r();let a;if(1===arguments.length){if("string"!=typeof e){for(a=0;a<this.length;a+=1)for(const t in e)this[a].style[t]=e[t];return this}if(this[0])return s.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(a=0;a<this.length;a+=1)this[a].style[e]=t;return this}return this},each:function(e){return e?(this.forEach(((t,s)=>{e.apply(t,[t,s])})),this):this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:null;for(let t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(let t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(e){const t=r(),s=a(),i=this[0];let l,o;if(!i||void 0===e)return!1;if("string"==typeof e){if(i.matches)return i.matches(e);if(i.webkitMatchesSelector)return i.webkitMatchesSelector(e);
4059if(i.msMatchesSelector)return i.msMatchesSelector(e);for(l=d(e),o=0;o<l.length;o+=1)if(l[o]===i)return!0;return!1}if(e===s)return i===s;if(e===t)return i===t;if(e.nodeType||e instanceof n){for(l=e.nodeType?[e]:e,o=0;o<l.length;o+=1)if(l[o]===i)return!0;return!1}return!1},index:function(){let e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;const t=this.length;if(e>t-1)return d([]);if(e<0){const s=t+e;return d(s<0?[]:[this[s]])}return d([this[e]])},append:function(...e){let t;const s=a();for(let a=0;a<e.length;a+=1){t=e[a];for(let e=0;e<this.length;e+=1)if("string"==typeof t){const a=s.createElement("div");for(a.innerHTML=t;a.firstChild;)this[e].appendChild(a.firstChild)}else if(t instanceof n)for(let s=0;s<t.length;s+=1)this[e].appendChild(t[s]);else this[e].appendChild(t)}return this},prepend:function(e){const t=a();let s,i;for(s=0;s<this.length;s+=1)if("string"==typeof e){const a=t.createElement("div");for(a.innerHTML=e,i=a.childNodes.length-1;i>=0;i-=1)this[s].insertBefore(a.childNodes[i],this[s].childNodes[0])}else if(e instanceof n)for(i=0;i<e.length;i+=1)this[s].insertBefore(e[i],this[s].childNodes[0]);else this[s].insertBefore(e,this[s].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&d(this[0].nextElementSibling).is(e)?d([this[0].nextElementSibling]):d([]):this[0].nextElementSibling?d([this[0].nextElementSibling]):d([]):d([])},nextAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.nextElementSibling;){const a=s.nextElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},prev:function(e){if(this.length>0){const t=this[0];return e?t.previousElementSibling&&d(t.previousElementSibling).is(e)?d([t.previousElementSibling]):d([]):t.previousElementSibling?d([t.previousElementSibling]):d([])}return d([])},prevAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.previousElementSibling;){const a=s.previousElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},parent:function(e){const t=[];for(let s=0;s<this.length;s+=1)null!==this[s].parentNode&&(e?d(this[s].parentNode).is(e)&&t.push(this[s].parentNode):t.push(this[s].parentNode));return d(t)},parents:function(e){const t=[];for(let s=0;s<this.length;s+=1){let a=this[s].parentNode;for(;a;)e?d(a).is(e)&&t.push(a):t.push(a),a=a.parentNode}return d(t)},closest:function(e){let t=this;return void 0===e?d([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){const t=[];for(let s=0;s<this.length;s+=1){const a=this[s].querySelectorAll(e);for(let e=0;e<a.length;e+=1)t.push(a[e])}return d(t)},children:function(e){const t=[];for(let s=0;s<this.length;s+=1){const a=this[s].children;for(let s=0;s<a.length;s+=1)e&&!d(a[s]).is(e)||t.push(a[s])}return d(t)},filter:function(e){return d(o(this,e))},remove:function(){for(let e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this}};function p(e,t=0){return setTimeout(e,t)}function u(){return Date.now()}function h(e,t="x"){const s=r();let a,i,n;const l=function(e){const t=r();let s;return t.getComputedStyle&&(s=t.getComputedStyle(e,null)),!s&&e.currentStyle&&(s=e.currentStyle),s||(s=e.style),s}(e);return s.WebKitCSSMatrix?(i=l.transform||l.webkitTransform,i.split(",").length>6&&(i=i.split(", ").map((e=>e.replace(",","."))).join(", ")),n=new s.WebKitCSSMatrix("none"===i?"":i)):(n=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),a=n.toString().split(",")),"x"===t&&(i=s.WebKitCSSMatrix?n.m41:16===a.length?parseFloat(a[12]):parseFloat(a[4])),"y"===t&&(i=s.WebKitCSSMatrix?n.m42:16===a.length?parseFloat(a[13]):parseFloat(a[5])),i||0}function m(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function f(...e){const t=Object(e[0]),s=["__proto__","constructor","prototype"];for(let i=1;i<e.length;i+=1){const r=e[i];if(null!=r&&(a=r,!("undefined"!=typeof window&&void 0!==window.HTMLElement?a instanceof HTMLElement:a&&(1===a.nodeType||11===a.nodeType)))){const e=Object.keys(Object(r)).filter((e=>s.indexOf(e)<0));for(let s=0,a=e.length;s<a;s+=1){const a=e[s],i=Object.getOwnPropertyDescriptor(r,a);
4059void 0!==i&&i.enumerable&&(m(t[a])&&m(r[a])?r[a].__swiper__?t[a]=r[a]:f(t[a],r[a]):!m(t[a])&&m(r[a])?(t[a]={},r[a].__swiper__?t[a]=r[a]:f(t[a],r[a])):t[a]=r[a])}}}var a;return t}function g(e,t,s){e.style.setProperty(t,s)}function v({swiper:e,targetPosition:t,side:s}){const a=r(),i=-e.translate;let n,l=null;const o=e.params.speed;e.wrapperEl.style.scrollSnapType="none",a.cancelAnimationFrame(e.cssModeFrameID);const d=t>i?"next":"prev",c=(e,t)=>"next"===d&&e>=t||"prev"===d&&e<=t,p=()=>{n=(new Date).getTime(),null===l&&(l=n);const r=Math.max(Math.min((n-l)/o,1),0),d=.5-Math.cos(r*Math.PI)/2;let u=i+d*(t-i);if(c(u,t)&&(u=t),e.wrapperEl.scrollTo({[s]:u}),c(u,t))return e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.scrollSnapType="",setTimeout((()=>{e.wrapperEl.style.overflow="",e.wrapperEl.scrollTo({[s]:u})})),void a.cancelAnimationFrame(e.cssModeFrameID);e.cssModeFrameID=a.requestAnimationFrame(p)};p()}let w,b,x;function y(){return w||(w=function(){const e=r(),t=a();return{smoothScroll:t.documentElement&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch),passiveListener:function(){let t=!1;try{const s=Object.defineProperty({},"passive",{get(){t=!0}});e.addEventListener("testPassiveListener",null,s)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),w}function E(e={}){return b||(b=function({userAgent:e}={}){const t=y(),s=r(),a=s.navigator.platform,i=e||s.navigator.userAgent,n={ios:!1,android:!1},l=s.screen.width,o=s.screen.height,d=i.match(/(Android);?[\s\/]+([\d.]+)?/);let c=i.match(/(iPad).*OS\s([\d_]+)/);const p=i.match(/(iPod)(.*OS\s([\d_]+))?/),u=!c&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/),h="Win32"===a;let m="MacIntel"===a;return!c&&m&&t.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(`${l}x${o}`)>=0&&(c=i.match(/(Version)\/([\d.]+)/),c||(c=[0,1,"13_0_0"]),m=!1),d&&!h&&(n.os="android",n.android=!0),(c||u||p)&&(n.os="ios",n.ios=!0),n}(e)),b}function T(){return x||(x=function(){const e=r();return{isSafari:function(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}(),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),x}Object.keys(c).forEach((e=>{Object.defineProperty(d.fn,e,{value:c[e],writable:!0})}));var C={on(e,t,s){const a=this;if("function"!=typeof t)return a;const i=s?"unshift":"push";return e.split(" ").forEach((e=>{a.eventsListeners[e]||(a.eventsListeners[e]=[]),a.eventsListeners[e][i](t)})),a},once(e,t,s){const a=this;if("function"!=typeof t)return a;function i(...s){a.off(e,i),i.__emitterProxy&&delete i.__emitterProxy,t.apply(a,s)}return i.__emitterProxy=t,a.on(e,i,s)},onAny(e,t){const s=this;if("function"!=typeof e)return s;const a=t?"unshift":"push";return s.eventsAnyListeners.indexOf(e)<0&&s.eventsAnyListeners[a](e),s},offAny(e){const t=this;if(!t.eventsAnyListeners)return t;const s=t.eventsAnyListeners.indexOf(e);return s>=0&&t.eventsAnyListeners.splice(s,1),t},off(e,t){const s=this;return s.eventsListeners?(e.split(" ").forEach((e=>{void 0===t?s.eventsListeners[e]=[]:s.eventsListeners[e]&&s.eventsListeners[e].forEach(((a,i)=>{(a===t||a.__emitterProxy&&a.__emitterProxy===t)&&s.eventsListeners[e].splice(i,1)}))})),s):s},emit(...e){const t=this;if(!t.eventsListeners)return t;let s,a,i;"string"==typeof e[0]||Array.isArray(e[0])?(s=e[0],a=e.slice(1,e.length),i=t):(s=e[0].events,a=e[0].data,i=e[0].context||t),a.unshift(i);return(Array.isArray(s)?s:s.split(" ")).forEach((e=>{t.eventsAnyListeners&&t.eventsAnyListeners.length&&t.eventsAnyListeners.forEach((t=>{t.apply(i,[e,...a])})),t.eventsListeners&&t.eventsListeners[e]&&t.eventsListeners[e].forEach((e=>{e.apply(i,a)}))})),t}};function $({swiper:e,runCallbacks:t,direction:s,step:a}){const{activeIndex:i,previousIndex:r}=e;let n=s;if(n||(n=i>r?"next":i<r?"prev":"reset"),e.emit(`transition${a}`),t&&i!==r){if("reset"===n)return void e.emit(`slideResetTransition${a}`);e.emit(`slideChangeTransition${a}`),"next"===n?e.emit(`slideNextTransition${a}`):e.emit(`slidePrevTransition${a}`)}}function S(e){const t=this,s=a(),i=r(),n=t.touchEventsData,{params:l,touches:o,enabled:c}=t;if(!c)return;if(t.animating&&l.preventInteractionOnTransition)return;!t.animating&&l.cssMode&&l.loop&&t.loopFix();let p=e;p.originalEvent&&(p=p.originalEvent);let h=d(p.target);if("wrapper"===l.touchEventsTarget&&!h.closest(t.wrapperEl).length)return;if(n.isTouchEvent="touchstart"===p.type,!n.isTouchEvent&&"which"in p&&3===p.which)return;if(!n.isTouchEvent&&"button"in p&&p.button>0)return;if(n.isTouched&&n.isMoved)return;
4059!!l.noSwipingClass&&""!==l.noSwipingClass&&p.target&&p.target.shadowRoot&&e.path&&e.path[0]&&(h=d(e.path[0]));const m=l.noSwipingSelector?l.noSwipingSelector:`.${l.noSwipingClass}`,f=!(!p.target||!p.target.shadowRoot);if(l.noSwiping&&(f?function(e,t=this){return function t(s){return s&&s!==a()&&s!==r()?(s.assignedSlot&&(s=s.assignedSlot),s.closest(e)||t(s.getRootNode().host)):null}(t)}(m,p.target):h.closest(m)[0]))return void(t.allowClick=!0);if(l.swipeHandler&&!h.closest(l.swipeHandler)[0])return;o.currentX="touchstart"===p.type?p.targetTouches[0].pageX:p.pageX,o.currentY="touchstart"===p.type?p.targetTouches[0].pageY:p.pageY;const g=o.currentX,v=o.currentY,w=l.edgeSwipeDetection||l.iOSEdgeSwipeDetection,b=l.edgeSwipeThreshold||l.iOSEdgeSwipeThreshold;if(w&&(g<=b||g>=i.innerWidth-b)){if("prevent"!==w)return;e.preventDefault()}if(Object.assign(n,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=g,o.startY=v,n.touchStartTime=u(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,l.threshold>0&&(n.allowThresholdMove=!1),"touchstart"!==p.type){let e=!0;h.is(n.focusableElements)&&(e=!1),s.activeElement&&d(s.activeElement).is(n.focusableElements)&&s.activeElement!==h[0]&&s.activeElement.blur();const a=e&&t.allowTouchMove&&l.touchStartPreventDefault;!l.touchStartForcePreventDefault&&!a||h[0].isContentEditable||p.preventDefault()}t.emit("touchStart",p)}function M(e){const t=a(),s=this,i=s.touchEventsData,{params:r,touches:n,rtlTranslate:l,enabled:o}=s;if(!o)return;let c=e;if(c.originalEvent&&(c=c.originalEvent),!i.isTouched)return void(i.startMoving&&i.isScrolling&&s.emit("touchMoveOpposite",c));if(i.isTouchEvent&&"touchmove"!==c.type)return;const p="touchmove"===c.type&&c.targetTouches&&(c.targetTouches[0]||c.changedTouches[0]),h="touchmove"===c.type?p.pageX:c.pageX,m="touchmove"===c.type?p.pageY:c.pageY;if(c.preventedByNestedSwiper)return n.startX=h,void(n.startY=m);if(!s.allowTouchMove)return s.allowClick=!1,void(i.isTouched&&(Object.assign(n,{startX:h,startY:m,currentX:h,currentY:m}),i.touchStartTime=u()));if(i.isTouchEvent&&r.touchReleaseOnEdges&&!r.loop)if(s.isVertical()){if(m<n.startY&&s.translate<=s.maxTranslate()||m>n.startY&&s.translate>=s.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(h<n.startX&&s.translate<=s.maxTranslate()||h>n.startX&&s.translate>=s.minTranslate())return;if(i.isTouchEvent&&t.activeElement&&c.target===t.activeElement&&d(c.target).is(i.focusableElements))return i.isMoved=!0,void(s.allowClick=!1);if(i.allowTouchCallbacks&&s.emit("touchMove",c),c.targetTouches&&c.targetTouches.length>1)return;n.currentX=h,n.currentY=m;const f=n.currentX-n.startX,g=n.currentY-n.startY;if(s.params.threshold&&Math.sqrt(f**2+g**2)<s.params.threshold)return;if(void 0===i.isScrolling){let e;s.isHorizontal()&&n.currentY===n.startY||s.isVertical()&&n.currentX===n.startX?i.isScrolling=!1:f*f+g*g>=25&&(e=180*Math.atan2(Math.abs(g),Math.abs(f))/Math.PI,i.isScrolling=s.isHorizontal()?e>r.touchAngle:90-e>r.touchAngle)}if(i.isScrolling&&s.emit("touchMoveOpposite",c),void 0===i.startMoving&&(n.currentX===n.startX&&n.currentY===n.startY||(i.startMoving=!0)),i.isScrolling)return void(i.isTouched=!1);if(!i.startMoving)return;s.allowClick=!1,!r.cssMode&&c.cancelable&&c.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&c.stopPropagation(),i.isMoved||(r.loop&&!r.cssMode&&s.loopFix(),i.startTranslate=s.getTranslate(),s.setTransition(0),s.animating&&s.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!r.grabCursor||!0!==s.allowSlideNext&&!0!==s.allowSlidePrev||s.setGrabCursor(!0),s.emit("sliderFirstMove",c)),s.emit("sliderMove",c),i.isMoved=!0;let v=s.isHorizontal()?f:g;n.diff=v,v*=r.touchRatio,l&&(v=-v),s.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;let w=!0,b=r.resistanceRatio;if(r.touchReleaseOnEdges&&(b=0),v>0&&i.currentTranslate>s.minTranslate()?(w=!1,r.resistance&&(i.currentTranslate=s.minTranslate()-1+(-s.minTranslate()+i.startTranslate+v)**b)):v<0&&i.currentTranslate<s.maxTranslate()&&(w=!1,r.resistance&&(i.currentTranslate=s.maxTranslate()+1-(s.maxTranslate()-i.startTranslate-v)**b)),w&&(c.preventedByNestedSwiper=!0),!s.allowSlideNext&&"next"===s.swipeDirection&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!s.allowSlidePrev&&"prev"===s.swipeDirection&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),s.allowSlidePrev||s.allowSlideNext||(i.currentTranslate=i.startTranslate),r.threshold>0){if(!(Math.abs(v)>r.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);
4059if(!i.allowThresholdMove)return i.allowThresholdMove=!0,n.startX=n.currentX,n.startY=n.currentY,i.currentTranslate=i.startTranslate,void(n.diff=s.isHorizontal()?n.currentX-n.startX:n.currentY-n.startY)}r.followFinger&&!r.cssMode&&((r.freeMode&&r.freeMode.enabled&&s.freeMode||r.watchSlidesProgress)&&(s.updateActiveIndex(),s.updateSlidesClasses()),s.params.freeMode&&r.freeMode.enabled&&s.freeMode&&s.freeMode.onTouchMove(),s.updateProgress(i.currentTranslate),s.setTranslate(i.currentTranslate))}function P(e){const t=this,s=t.touchEventsData,{params:a,touches:i,rtlTranslate:r,slidesGrid:n,enabled:l}=t;if(!l)return;let o=e;if(o.originalEvent&&(o=o.originalEvent),s.allowTouchCallbacks&&t.emit("touchEnd",o),s.allowTouchCallbacks=!1,!s.isTouched)return s.isMoved&&a.grabCursor&&t.setGrabCursor(!1),s.isMoved=!1,void(s.startMoving=!1);a.grabCursor&&s.isMoved&&s.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const d=u(),c=d-s.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(o),t.emit("tap click",o),c<300&&d-s.lastClickTime<300&&t.emit("doubleTap doubleClick",o)),s.lastClickTime=u(),p((()=>{t.destroyed||(t.allowClick=!0)})),!s.isTouched||!s.isMoved||!t.swipeDirection||0===i.diff||s.currentTranslate===s.startTranslate)return s.isTouched=!1,s.isMoved=!1,void(s.startMoving=!1);let h;if(s.isTouched=!1,s.isMoved=!1,s.startMoving=!1,h=a.followFinger?r?t.translate:-t.translate:-s.currentTranslate,a.cssMode)return;if(t.params.freeMode&&a.freeMode.enabled)return void t.freeMode.onTouchEnd({currentPos:h});let m=0,f=t.slidesSizesGrid[0];for(let e=0;e<n.length;e+=e<a.slidesPerGroupSkip?1:a.slidesPerGroup){const t=e<a.slidesPerGroupSkip-1?1:a.slidesPerGroup;void 0!==n[e+t]?h>=n[e]&&h<n[e+t]&&(m=e,f=n[e+t]-n[e]):h>=n[e]&&(m=e,f=n[n.length-1]-n[n.length-2])}const g=(h-n[m])/f,v=m<a.slidesPerGroupSkip-1?1:a.slidesPerGroup;if(c>a.longSwipesMs){if(!a.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(g>=a.longSwipesRatio?t.slideTo(m+v):t.slideTo(m)),"prev"===t.swipeDirection&&(g>1-a.longSwipesRatio?t.slideTo(m+v):t.slideTo(m))}else{if(!a.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(o.target===t.navigation.nextEl||o.target===t.navigation.prevEl)?o.target===t.navigation.nextEl?t.slideTo(m+v):t.slideTo(m):("next"===t.swipeDirection&&t.slideTo(m+v),"prev"===t.swipeDirection&&t.slideTo(m))}}function k(){const e=this,{params:t,el:s}=e;if(s&&0===s.offsetWidth)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:a,allowSlidePrev:i,snapGrid:r}=e;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=i,e.allowSlideNext=a,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}function z(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function O(){const e=this,{wrapperEl:t,rtlTranslate:s,enabled:a}=e;if(!a)return;let i;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,-0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const r=e.maxTranslate()-e.minTranslate();i=0===r?0:(e.translate-e.minTranslate())/r,i!==e.progress&&e.updateProgress(s?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}let I=!1;function L(){}const A=(e,t)=>{const s=a(),{params:i,touchEvents:r,el:n,wrapperEl:l,device:o,support:d}=e,c=!!i.nested,p="on"===t?"addEventListener":"removeEventListener",u=t;if(d.touch){const t=!("touchstart"!==r.start||!d.passiveListener||!i.passiveListeners)&&{passive:!0,capture:!1};n[p](r.start,e.onTouchStart,t),n[p](r.move,e.onTouchMove,d.passiveListener?{passive:!1,capture:c}:c),n[p](r.end,e.onTouchEnd,t),r.cancel&&n[p](r.cancel,e.onTouchEnd,t)}else n[p](r.start,e.onTouchStart,!1),s[p](r.move,e.onTouchMove,c),s[p](r.end,e.onTouchEnd,!1);(i.preventClicks||i.preventClicksPropagation)&&n[p]("click",e.onClick,!0),i.cssMode&&l[p]("scroll",e.onScroll),i.updateOnWindowResize?e[u](o.ios||o.android?"resize orientationchange observerUpdate":"resize observerUpdate",k,!0):e[u]("observerUpdate",k,!0)};const D=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var G={init:!0,direction:"horizontal",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",
4059spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};function N(e,t){return function(s={}){const a=Object.keys(s)[0],i=s[a];"object"==typeof i&&null!==i?(["navigation","pagination","scrollbar"].indexOf(a)>=0&&!0===e[a]&&(e[a]={auto:!0}),a in e&&"enabled"in i?(!0===e[a]&&(e[a]={enabled:!0}),"object"!=typeof e[a]||"enabled"in e[a]||(e[a].enabled=!0),e[a]||(e[a]={enabled:!1}),f(t,s)):f(t,s)):f(t,s)}}const B={eventsEmitter:C,update:{updateSize:function(){const e=this;let t,s;const a=e.$el;t=void 0!==e.params.width&&null!==e.params.width?e.params.width:a[0].clientWidth,s=void 0!==e.params.height&&null!==e.params.height?e.params.height:a[0].clientHeight,0===t&&e.isHorizontal()||0===s&&e.isVertical()||(t=t-parseInt(a.css("padding-left")||0,10)-parseInt(a.css("padding-right")||0,10),s=s-parseInt(a.css("padding-top")||0,10)-parseInt(a.css("padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(s)&&(s=0),Object.assign(e,{width:t,height:s,size:e.isHorizontal()?t:s}))},updateSlides:function(){const e=this;function t(t){return e.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}function s(e,s){return parseFloat(e.getPropertyValue(t(s))||0)}const a=e.params,{$wrapperEl:i,size:r,rtlTranslate:n,wrongRTL:l}=e,o=e.virtual&&a.virtual.enabled,d=o?e.virtual.slides.length:e.slides.length,c=i.children(`.${e.params.slideClass}`),p=o?e.virtual.slides.length:c.length;let u=[];const h=[],m=[];let f=a.slidesOffsetBefore;"function"==typeof f&&(f=a.slidesOffsetBefore.call(e));let v=a.slidesOffsetAfter;"function"==typeof v&&(v=a.slidesOffsetAfter.call(e));const w=e.snapGrid.length,b=e.slidesGrid.length;let x=a.spaceBetween,y=-f,E=0,T=0;if(void 0===r)return;"string"==typeof x&&x.indexOf("%")>=0&&(x=parseFloat(x.replace("%",""))/100*r),e.virtualSize=-x,n?c.css({marginLeft:"",marginBottom:"",marginTop:""}):c.css({marginRight:"",marginBottom:"",marginTop:""}),a.centeredSlides&&a.cssMode&&(g(e.wrapperEl,"--swiper-centered-offset-before",""),g(e.wrapperEl,"--swiper-centered-offset-after",""));const C=a.grid&&a.grid.rows>1&&e.grid;let $;C&&e.grid.initSlides(p);const S="auto"===a.slidesPerView&&a.breakpoints&&Object.keys(a.breakpoints).filter((e=>void 0!==a.breakpoints[e].slidesPerView)).length>0;for(let i=0;i<p;i+=1){$=0;const n=c.eq(i);if(C&&e.grid.updateSlide(i,n,p,t),"none"!==n.css("display")){if("auto"===a.slidesPerView){S&&(c[i].style[t("width")]="");const r=getComputedStyle(n[0]),l=n[0].style.transform,o=n[0].style.webkitTransform;if(l&&(n[0].style.transform="none"),o&&(n[0].style.webkitTransform="none"),a.roundLengths)$=e.isHorizontal()?n.outerWidth(!0):n.outerHeight(!0);else{const e=s(r,"width"),t=s(r,"padding-left"),a=s(r,"padding-right"),i=s(r,"margin-left"),l=s(r,"margin-right"),o=r.getPropertyValue("box-sizing");if(o&&"border-box"===o)$=e+i+l;else{const{clientWidth:s,offsetWidth:r}=n[0];$=e+t+a+i+l+(r-s)}}l&&(n[0].style.transform=l),o&&(n[0].style.webkitTransform=o),a.roundLengths&&($=Math.floor($))}else $=(r-(a.slidesPerView-1)*x)/a.slidesPerView,a.roundLengths&&($=Math.floor($)),c[i]&&(c[i].style[t("width")]=`${$}px`);c[i]&&(c[i].swiperSlideSize=$),m.push($),a.centeredSlides?(y=y+$/2+E/2+x,0===E&&0!==i&&(y=y-r/2-x),0===i&&(y=y-r/2-x),Math.abs(y)<.001&&(y=0),a.roundLengths&&(y=Math.floor(y)),T%a.slidesPerGroup==0&&u.push(y),h.push(y)):(a.roun
4059dLengths&&(y=Math.floor(y)),(T-Math.min(e.params.slidesPerGroupSkip,T))%e.params.slidesPerGroup==0&&u.push(y),h.push(y),y=y+$+x),e.virtualSize+=$+x,E=$,T+=1}}if(e.virtualSize=Math.max(e.virtualSize,r)+v,n&&l&&("slide"===a.effect||"coverflow"===a.effect)&&i.css({width:`${e.virtualSize+a.spaceBetween}px`}),a.setWrapperSize&&i.css({[t("width")]:`${e.virtualSize+a.spaceBetween}px`}),C&&e.grid.updateWrapperSize($,u,t),!a.centeredSlides){const t=[];for(let s=0;s<u.length;s+=1){let i=u[s];a.roundLengths&&(i=Math.floor(i)),u[s]<=e.virtualSize-r&&t.push(i)}u=t,Math.floor(e.virtualSize-r)-Math.floor(u[u.length-1])>1&&u.push(e.virtualSize-r)}if(0===u.length&&(u=[0]),0!==a.spaceBetween){const s=e.isHorizontal()&&n?"marginLeft":t("marginRight");c.filter(((e,t)=>!a.cssMode||t!==c.length-1)).css({[s]:`${x}px`})}if(a.centeredSlides&&a.centeredSlidesBounds){let e=0;m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween;const t=e-r;u=u.map((e=>e<0?-f:e>t?t+v:e))}if(a.centerInsufficientSlides){let e=0;if(m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween,e<r){const t=(r-e)/2;u.forEach(((e,s)=>{u[s]=e-t})),h.forEach(((e,s)=>{h[s]=e+t}))}}if(Object.assign(e,{slides:c,snapGrid:u,slidesGrid:h,slidesSizesGrid:m}),a.centeredSlides&&a.cssMode&&!a.centeredSlidesBounds){g(e.wrapperEl,"--swiper-centered-offset-before",-u[0]+"px"),g(e.wrapperEl,"--swiper-centered-offset-after",e.size/2-m[m.length-1]/2+"px");const t=-e.snapGrid[0],s=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map((e=>e+t)),e.slidesGrid=e.slidesGrid.map((e=>e+s))}p!==d&&e.emit("slidesLengthChange"),u.length!==w&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),h.length!==b&&e.emit("slidesGridLengthChange"),a.watchSlidesProgress&&e.updateSlidesOffset()},updateAutoHeight:function(e){const t=this,s=[],a=t.virtual&&t.params.virtual.enabled;let i,r=0;"number"==typeof e?t.setTransition(e):!0===e&&t.setTransition(t.params.speed);const n=e=>a?t.slides.filter((t=>parseInt(t.getAttribute("data-swiper-slide-index"),10)===e))[0]:t.slides.eq(e)[0];if("auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)t.visibleSlides.each((e=>{s.push(e)}));else for(i=0;i<Math.ceil(t.params.slidesPerView);i+=1){const e=t.activeIndex+i;if(e>t.slides.length&&!a)break;s.push(n(e))}else s.push(n(t.activeIndex));for(i=0;i<s.length;i+=1)if(void 0!==s[i]){const e=s[i].offsetHeight;r=e>r?e:r}r&&t.$wrapperEl.css("height",`${r}px`)},updateSlidesOffset:function(){const e=this,t=e.slides;for(let s=0;s<t.length;s+=1)t[s].swiperSlideOffset=e.isHorizontal()?t[s].offsetLeft:t[s].offsetTop},updateSlidesProgress:function(e=this&&this.translate||0){const t=this,s=t.params,{slides:a,rtlTranslate:i,snapGrid:r}=t;if(0===a.length)return;void 0===a[0].swiperSlideOffset&&t.updateSlidesOffset();let n=-e;i&&(n=e),a.removeClass(s.slideVisibleClass),t.visibleSlidesIndexes=[],t.visibleSlides=[];for(let e=0;e<a.length;e+=1){const l=a[e];let o=l.swiperSlideOffset;s.cssMode&&s.centeredSlides&&(o-=a[0].swiperSlideOffset);const d=(n+(s.centeredSlides?t.minTranslate():0)-o)/(l.swiperSlideSize+s.spaceBetween),c=(n-r[0]+(s.centeredSlides?t.minTranslate():0)-o)/(l.swiperSlideSize+s.spaceBetween),p=-(n-o),u=p+t.slidesSizesGrid[e];(p>=0&&p<t.size-1||u>1&&u<=t.size||p<=0&&u>=t.size)&&(t.visibleSlides.push(l),t.visibleSlidesIndexes.push(e),a.eq(e).addClass(s.slideVisibleClass)),l.progress=i?-d:d,l.originalProgress=i?-c:c}t.visibleSlides=d(t.visibleSlides)},updateProgress:function(e){const t=this;if(void 0===e){const s=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*s||0}const s=t.params,a=t.maxTranslate()-t.minTranslate();let{progress:i,isBeginning:r,isEnd:n}=t;const l=r,o=n;0===a?(i=0,r=!0,n=!0):(i=(e-t.minTranslate())/a,r=i<=0,n=i>=1),Object.assign(t,{progress:i,isBeginning:r,isEnd:n}),(s.watchSlidesProgress||s.centeredSlides&&s.autoHeight)&&t.updateSlidesProgress(e),r&&!l&&t.emit("reachBeginning toEdge"),n&&!o&&t.emit("reachEnd toEdge"),(l&&!r||o&&!n)&&t.emit("fromEdge"),t.emit("progress",i)},updateSlidesClasses:function(){const e=this,{slides:t,params:s,$wrapperEl:a,activeIndex:i,realIndex:r}=e,n=e.virtual&&s.virtual.enabled;let l;t.removeClass(`${s.slideActiveClass} ${s.slideNextClass} ${s.slidePrevClass} ${s.slideDuplicateActiveClass} ${s.slideDuplicateNextClass} ${s.slideDuplicatePrevClass}`),l=n?e.$wrapperEl.find(`.${s.slideClass}[data-swiper-slide-index="${i}"]`):t.eq(i),l.addClass(s.slideActiveClass),s.loop&&(l.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass));let o=l.nextAll(`.${s.slideClass}`).eq(0).addClass(s.slideNextClass);s.loop&&0===o.length&&(o=t.eq(0),o.addClass(s.slideNextClass));let d=l.prevAll(`.${s.slideClass}`).eq(0).addClass(s.slidePrevClass);s.loop&&0===d.length&&(d=t.eq(-1),d.addClass(s.slidePrevClass)),s.loop&&(o.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass),d.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass)),e.emitSlidesClasses()},updateActiveIndex:function(e){const t=this,s=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:a,snapGrid:i,params:r,activeIndex:n,realIndex:l,snapIndex:o}=t;let d,c=e;if(void 0===c){for(let e=0;e<a.length;e+=1)void 0!==a[e+1]?s>=a[e]&&s<a[e+1]-(a[e+1]-a[e])/2?c=e:s>
4059=a[e]&&s<a[e+1]&&(c=e+1):s>=a[e]&&(c=e);r.normalizeSlideIndex&&(c<0||void 0===c)&&(c=0)}if(i.indexOf(s)>=0)d=i.indexOf(s);else{const e=Math.min(r.slidesPerGroupSkip,c);d=e+Math.floor((c-e)/r.slidesPerGroup)}if(d>=i.length&&(d=i.length-1),c===n)return void(d!==o&&(t.snapIndex=d,t.emit("snapIndexChange")));const p=parseInt(t.slides.eq(c).attr("data-swiper-slide-index")||c,10);Object.assign(t,{snapIndex:d,realIndex:p,previousIndex:n,activeIndex:c}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),l!==p&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange")},updateClickedSlide:function(e){const t=this,s=t.params,a=d(e.target).closest(`.${s.slideClass}`)[0];let i,r=!1;if(a)for(let e=0;e<t.slides.length;e+=1)if(t.slides[e]===a){r=!0,i=e;break}if(!a||!r)return t.clickedSlide=void 0,void(t.clickedIndex=void 0);t.clickedSlide=a,t.virtual&&t.params.virtual.enabled?t.clickedIndex=parseInt(d(a).attr("data-swiper-slide-index"),10):t.clickedIndex=i,s.slideToClickedSlide&&void 0!==t.clickedIndex&&t.clickedIndex!==t.activeIndex&&t.slideToClickedSlide()}},translate:{getTranslate:function(e=(this.isHorizontal()?"x":"y")){const{params:t,rtlTranslate:s,translate:a,$wrapperEl:i}=this;if(t.virtualTranslate)return s?-a:a;if(t.cssMode)return a;let r=h(i[0],e);return s&&(r=-r),r||0},setTranslate:function(e,t){const s=this,{rtlTranslate:a,params:i,$wrapperEl:r,wrapperEl:n,progress:l}=s;let o,d=0,c=0;s.isHorizontal()?d=a?-e:e:c=e,i.roundLengths&&(d=Math.floor(d),c=Math.floor(c)),i.cssMode?n[s.isHorizontal()?"scrollLeft":"scrollTop"]=s.isHorizontal()?-d:-c:i.virtualTranslate||r.transform(`translate3d(${d}px, ${c}px, 0px)`),s.previousTranslate=s.translate,s.translate=s.isHorizontal()?d:c;const p=s.maxTranslate()-s.minTranslate();o=0===p?0:(e-s.minTranslate())/p,o!==l&&s.updateProgress(e),s.emit("setTranslate",s.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]},translateTo:function(e=0,t=this.params.speed,s=!0,a=!0,i){const r=this,{params:n,wrapperEl:l}=r;if(r.animating&&n.preventInteractionOnTransition)return!1;const o=r.minTranslate(),d=r.maxTranslate();let c;if(c=a&&e>o?o:a&&e<d?d:e,r.updateProgress(c),n.cssMode){const e=r.isHorizontal();if(0===t)l[e?"scrollLeft":"scrollTop"]=-c;else{if(!r.support.smoothScroll)return v({swiper:r,targetPosition:-c,side:e?"left":"top"}),!0;l.scrollTo({[e?"left":"top"]:-c,behavior:"smooth"})}return!0}return 0===t?(r.setTransition(0),r.setTranslate(c),s&&(r.emit("beforeTransitionStart",t,i),r.emit("transitionEnd"))):(r.setTransition(t),r.setTranslate(c),s&&(r.emit("beforeTransitionStart",t,i),r.emit("transitionStart")),r.animating||(r.animating=!0,r.onTranslateToWrapperTransitionEnd||(r.onTranslateToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onTranslateToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onTranslateToWrapperTransitionEnd),r.onTranslateToWrapperTransitionEnd=null,delete r.onTranslateToWrapperTransitionEnd,s&&r.emit("transitionEnd"))}),r.$wrapperEl[0].addEventListener("transitionend",r.onTranslateToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onTranslateToWrapperTransitionEnd))),!0}},transition:{setTransition:function(e,t){const s=this;s.params.cssMode||s.$wrapperEl.transition(e),s.emit("setTransition",e,t)},transitionStart:function(e=!0,t){const s=this,{params:a}=s;a.cssMode||(a.autoHeight&&s.updateAutoHeight(),$({swiper:s,runCallbacks:e,direction:t,step:"Start"}))},transitionEnd:function(e=!0,t){const s=this,{params:a}=s;s.animating=!1,a.cssMode||(s.setTransition(0),$({swiper:s,runCallbacks:e,direction:t,step:"End"}))}},slide:{slideTo:function(e=0,t=this.params.speed,s=!0,a,i){if("number"!=typeof e&&"string"!=typeof e)throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof e}] given.`);if("string"==typeof e){const t=parseInt(e,10);if(!isFinite(t))throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`);e=t}const r=this;let n=e;n<0&&(n=0);const{params:l,snapGrid:o,slidesGrid:d,previousIndex:c,activeIndex:p,rtlTranslate:u,wrapperEl:h,enabled:m}=r;if(r.animating&&l.preventInteractionOnTransition||!m&&!a&&!i)return!1;const f=Math.min(r.params.slidesPerGroupSkip,n);let g=f+Math.floor((n-f)/r.params.slidesPerGroup);g>=o.length&&(g=o.length-1),(p||l.initialSlide||0)===(c||0)&&s&&r.emit("beforeSlideChangeStart");const w=-o[g];if(r.updateProgress(w),l.normalizeSlideIndex)for(let e=0;e<d.length;e+=1){const t=-Math.floor(100*w),s=Math.floor(100*d[e]),a=Math.floor(100*d[e+1]);void 0!==d[e+1]?t>=s&&t<a-(a-s)/2?n=e:t>=s&&t<a&&(n=e+1):t>=s&&(n=e)}if(r.initialized&&n!==p){if(!r.allowSlideNext&&w<r.translate&&w<r.minTranslate())return!1;if(!r.allowSlidePrev&&w>r.translate&&w>r.maxTranslate()&&(p||0)!==n)return!1}let b;if(b=n>p?"next":n<p?"prev":"reset",u&&-w===r.translate||!u&&w===r.translate)return r.updateActiveIndex(n),l.autoHeight&&r.updateAutoHeight(),r.updateSlidesClasses(),"slide"!==l.effect&&r.setTranslate(w),"reset"!==b&&(r.transitionStart(s,b),r.transitionEnd(s,b)),!1;
4059if(l.cssMode){const e=r.isHorizontal(),s=u?w:-w;if(0===t){const t=r.virtual&&r.params.virtual.enabled;t&&(r.wrapperEl.style.scrollSnapType="none",r._immediateVirtual=!0),h[e?"scrollLeft":"scrollTop"]=s,t&&requestAnimationFrame((()=>{r.wrapperEl.style.scrollSnapType="",r._swiperImmediateVirtual=!1}))}else{if(!r.support.smoothScroll)return v({swiper:r,targetPosition:s,side:e?"left":"top"}),!0;h.scrollTo({[e?"left":"top"]:s,behavior:"smooth"})}return!0}return 0===t?(r.setTransition(0),r.setTranslate(w),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),r.transitionEnd(s,b)):(r.setTransition(t),r.setTranslate(w),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(s,b))}),r.$wrapperEl[0].addEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd))),!0},slideToLoop:function(e=0,t=this.params.speed,s=!0,a){const i=this;let r=e;return i.params.loop&&(r+=i.loopedSlides),i.slideTo(r,t,s,a)},slideNext:function(e=this.params.speed,t=!0,s){const a=this,{animating:i,enabled:r,params:n}=a;if(!r)return a;let l=n.slidesPerGroup;"auto"===n.slidesPerView&&1===n.slidesPerGroup&&n.slidesPerGroupAuto&&(l=Math.max(a.slidesPerViewDynamic("current",!0),1));const o=a.activeIndex<n.slidesPerGroupSkip?1:l;if(n.loop){if(i&&n.loopPreventsSlide)return!1;a.loopFix(),a._clientLeft=a.$wrapperEl[0].clientLeft}return a.slideTo(a.activeIndex+o,e,t,s)},slidePrev:function(e=this.params.speed,t=!0,s){const a=this,{params:i,animating:r,snapGrid:n,slidesGrid:l,rtlTranslate:o,enabled:d}=a;if(!d)return a;if(i.loop){if(r&&i.loopPreventsSlide)return!1;a.loopFix(),a._clientLeft=a.$wrapperEl[0].clientLeft}function c(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}const p=c(o?a.translate:-a.translate),u=n.map((e=>c(e)));let h=n[u.indexOf(p)-1];if(void 0===h&&i.cssMode){let e;
4059n.forEach(((t,s)=>{p>=t&&(e=s)})),void 0!==e&&(h=n[e>0?e-1:e])}let m=0;return void 0!==h&&(m=l.indexOf(h),m<0&&(m=a.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(m=m-a.slidesPerViewDynamic("previous",!0)+1,m=Math.max(m,0))),a.slideTo(m,e,t,s)},slideReset:function(e=this.params.speed,t=!0,s){return this.slideTo(this.activeIndex,e,t,s)},slideToClosest:function(e=this.params.speed,t=!0,s,a=.5){const i=this;let r=i.activeIndex;const n=Math.min(i.params.slidesPerGroupSkip,r),l=n+Math.floor((r-n)/i.params.slidesPerGroup),o=i.rtlTranslate?i.translate:-i.translate;if(o>=i.snapGrid[l]){const e=i.snapGrid[l];o-e>(i.snapGrid[l+1]-e)*a&&(r+=i.params.slidesPerGroup)}else{const e=i.snapGrid[l-1];o-e<=(i.snapGrid[l]-e)*a&&(r-=i.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,i.slidesGrid.length-1),i.slideTo(r,e,t,s)},slideToClickedSlide:function(){const e=this,{params:t,$wrapperEl:s}=e,a="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let i,r=e.clickedIndex;if(t.loop){if(e.animating)return;i=parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10),t.centeredSlides?r<e.loopedSlides-a/2||r>e.slides.length-e.loopedSlides+a/2?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r):r>e.slides.length-a?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r)}else e.slideTo(r)}},loop:{loopCreate:function(){const e=this,t=a(),{params:s,$wrapperEl:i}=e,r=d(i.children()[0].parentNode);r.children(`.${s.slideClass}.${s.slideDuplicateClass}`).remove();let n=r.children(`.${s.slideClass}`);if(s.loopFillGroupWithBlank){const e=s.slidesPerGroup-n.length%s.slidesPerGroup;if(e!==s.slidesPerGroup){for(let a=0;a<e;a+=1){const e=d(t.createElement("div")).addClass(`${s.slideClass} ${s.slideBlankClass}`);r.append(e)}n=r.children(`.${s.slideClass}`)}}"auto"!==s.slidesPerView||s.loopedSlides||(s.loopedSlides=n.length),e.loopedSlides=Math.ceil(parseFloat(s.loopedSlides||s.slidesPerView,10)),e.loopedSlides+=s.loopAdditionalSlides,e.loopedSlides>n.length&&(e.loopedSlides=n.length);const l=[],o=[];n.each(((t,s)=>{const a=d(t);s<e.loopedSlides&&o.push(t),s<n.length&&s>=n.length-e.loopedSlides&&l.push(t),a.attr("data-swiper-slide-index",s)}));for(let e=0;e<o.length;e+=1)r.append(d(o[e].cloneNode(!0)).addClass(s.slideDuplicateClass));for(let e=l.length-1;e>=0;e-=1)r.prepend(d(l[e].cloneNode(!0)).addClass(s.slideDuplicateClass))},loopFix:function(){const e=this;e.emit("beforeLoopFix");const{activeIndex:t,slides:s,loopedSlides:a,allowSlidePrev:i,allowSlideNext:r,snapGrid:n,rtlTranslate:l}=e;let o;e.allowSlidePrev=!0,e.allowSlideNext=!0;const d=-n[t]-e.getTranslate();if(t<a){o=s.length-3*a+t,o+=a;e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}else if(t>=s.length-a){o=-s.length+t+a,o+=a;e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}e.allowSlidePrev=i,e.allowSlideNext=r,e.emit("loopFix")},loopDestroy:function(){const{$wrapperEl:e,params:t,slides:s}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(),s.removeAttr("data-swiper-slide-index")}},grabCursor:{setGrabCursor:function(e){const t=this;if(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const s="container"===t.params.touchEventsTarget?t.el:t.wrapperEl;s.style.cursor="move",s.style.cursor=e?"-webkit-grabbing":"-webkit-grab",s.style.cursor=e?"-moz-grabbin":"-moz-grab",s.style.cursor=e?"grabbing":"grab"},unsetGrabCursor:function(){const e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="")}},events:{attachEvents:function(){const e=this,t=a(),{params:s,support:i}=e;e.onTouchStart=S.bind(e),e.onTouchMove=M.bind(e),e.onTouchEnd=P.bind(e),s.cssMode&&(e.onScroll=O.bind(e)),e.onClick=z.bind(e),i.touch&&!I&&(t.addEventListener("touchstart",L),I=!0),A(e,"on")},detachEvents:function(){A(this,"off")}},breakpoints:{setBreakpoint:function(){const e=this,{activeIndex:t,initialized:s,loopedSlides:a=0,params:i,$el:r}=e,n=i.breakpoints;if(!n||n&&0===Object.keys(n).length)return;
4059const l=e.getBreakpoint(n,e.params.breakpointsBase,e.el);if(!l||e.currentBreakpoint===l)return;const o=(l in n?n[l]:void 0)||e.originalParams,d=D(e,i),c=D(e,o),p=i.enabled;d&&!c?(r.removeClass(`${i.containerModifierClass}grid ${i.containerModifierClass}grid-column`),e.emitContainerClasses()):!d&&c&&(r.addClass(`${i.containerModifierClass}grid`),(o.grid.fill&&"column"===o.grid.fill||!o.grid.fill&&"column"===i.grid.fill)&&r.addClass(`${i.containerModifierClass}grid-column`),e.emitContainerClasses());const u=o.direction&&o.direction!==i.direction,h=i.loop&&(o.slidesPerView!==i.slidesPerView||u);u&&s&&e.changeDirection(),f(e.params,o);const m=e.params.enabled;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),p&&!m?e.disable():!p&&m&&e.enable(),e.currentBreakpoint=l,e.emit("_beforeBreakpoint",o),h&&s&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-a+e.loopedSlides,0,!1)),e.emit("breakpoint",o)},getBreakpoint:function(e,t="window",s){if(!e||"container"===t&&!s)return;let a=!1;const i=r(),n="window"===t?i.innerHeight:s.clientHeight,l=Object.keys(e).map((e=>{if("string"==typeof e&&0===e.indexOf("@")){const t=parseFloat(e.substr(1));return{value:n*t,point:e}}return{value:e,point:e}}));l.sort(((e,t)=>parseInt(e.value,10)-parseInt(t.value,10)));for(let e=0;e<l.length;e+=1){const{point:r,value:n}=l[e];"window"===t?i.matchMedia(`(min-width: ${n}px)`).matches&&(a=r):n<=s.clientWidth&&(a=r)}return a||"max"}},checkOverflow:{checkOverflow:function(){const e=this,{isLocked:t,params:s}=e,{slidesOffsetBefore:a}=s;if(a){const t=e.slides.length-1,s=e.slidesGrid[t]+e.slidesSizesGrid[t]+2*a;e.isLocked=e.size>s}else e.isLocked=1===e.snapGrid.length;!0===s.allowSlideNext&&(e.allowSlideNext=!e.isLocked),!0===s.allowSlidePrev&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}},classes:{addClasses:function(){const e=this,{classNames:t,params:s,rtl:a,$el:i,device:r,support:n}=e,l=function(e,t){const s=[];return e.forEach((e=>{"object"==typeof e?Object.keys(e).forEach((a=>{e[a]&&s.push(t+a)})):"string"==typeof e&&s.push(t+e)})),s}(["initialized",s.direction,{"pointer-events":!n.touch},{"free-mode":e.params.freeMode&&s.freeMode.enabled},{autoheight:s.autoHeight},{rtl:a},{grid:s.grid&&s.grid.rows>1},{"grid-column":s.grid&&s.grid.rows>1&&"column"===s.grid.fill},{android:r.android},{ios:r.ios},{"css-mode":s.cssMode},{centered:s.cssMode&&s.centeredSlides}],s.containerModifierClass);t.push(...l),i.addClass([...t].join(" ")),e.emitContainerClasses()},removeClasses:function(){const{$el:e,classNames:t}=this;e.removeClass(t.join(" ")),this.emitContainerClasses()}},images:{loadImage:function(e,t,s,a,i,n){const l=r();let o;function c(){n&&n()}d(e).parent("picture")[0]||e.complete&&i?c():t?(o=new l.Image,o.onload=c,o.onerror=c,a&&(o.sizes=a),s&&(o.srcset=s),t&&(o.src=t)):c()},preloadImages:function(){const e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(let s=0;s<e.imagesToLoad.length;s+=1){const a=e.imagesToLoad[s];e.loadImage(a,a.currentSrc||a.getAttribute("src"),a.srcset||a.getAttribute("srcset"),a.sizes||a.getAttribute("sizes"),!0,t)}}}},X={};class H{constructor(...e){let t,s;if(1===e.length&&e[0].constructor&&"Object"===Object.prototype.toString.call(e[0]).slice(8,-1)?s=e[0]:[t,s]=e,s||(s={}),s=f({},s),t&&!s.el&&(s.el=t),s.el&&d(s.el).length>1){const e=[];return d(s.el).each((t=>{const a=f({},s,{el:t});e.push(new H(a))})),e}const a=this;a.__swiper__=!0,a.support=y(),a.device=E({userAgent:s.userAgent}),a.browser=T(),a.eventsListeners={},a.eventsAnyListeners=[],a.modules=[...a.__modules__],s.modules&&Array.isArray(s.modules)&&a.modules.push(...s.modules);const i={};a.modules.forEach((e=>{e({swiper:a,extendParams:N(s,i),on:a.on.bind(a),once:a.once.bind(a),off:a.off.bind(a),emit:a.emit.bind(a)})}));const r=f({},G,i);return a.params=f({},r,X,s),a.originalParams=f({},a.params),a.passedParams=f({}
4059,s),a.params&&a.params.on&&Object.keys(a.params.on).forEach((e=>{a.on(e,a.params.on[e])})),a.params&&a.params.onAny&&a.onAny(a.params.onAny),a.$=d,Object.assign(a,{enabled:a.params.enabled,el:t,classNames:[],slides:d(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===a.params.direction,isVertical:()=>"vertical"===a.params.direction,activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:a.params.allowSlideNext,allowSlidePrev:a.params.allowSlidePrev,touchEvents:function(){const e=["touchstart","touchmove","touchend","touchcancel"],t=["pointerdown","pointermove","pointerup"];return a.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},a.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},a.support.touch||!a.params.simulateTouch?a.touchEventsTouch:a.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:a.params.focusableElements,lastClickTime:u(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:a.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),a.emit("_swiper"),a.params.init&&a.init(),a}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const s=this;e=Math.min(Math.max(e,0),1);const a=s.minTranslate(),i=(s.maxTranslate()-a)*e+a;s.translateTo(i,void 0===t?0:t),s.updateActiveIndex(),s.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter((t=>0===t.indexOf("swiper")||0===t.indexOf(e.params.containerModifierClass)));e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return e.className.split(" ").filter((e=>0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass))).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.each((s=>{const a=e.getSlideClasses(s);t.push({slideEl:s,classNames:a}),e.emit("_slideClass",s,a)})),e.emit("_slideClasses",t)}slidesPerViewDynamic(e="current",t=!1){const{params:s,slides:a,slidesGrid:i,slidesSizesGrid:r,size:n,activeIndex:l}=this;let o=1;if(s.centeredSlides){let e,t=a[l].swiperSlideSize;for(let s=l+1;s<a.length;s+=1)a[s]&&!e&&(t+=a[s].swiperSlideSize,o+=1,t>n&&(e=!0));for(let s=l-1;s>=0;s-=1)a[s]&&!e&&(t+=a[s].swiperSlideSize,o+=1,t>n&&(e=!0))}else if("current"===e)for(let e=l+1;e<a.length;e+=1){(t?i[e]+r[e]-i[l]<n:i[e]-i[l]<n)&&(o+=1)}else for(let e=l-1;e>=0;e-=1){i[l]-i[e]<n&&(o+=1)}return o}update(){const e=this;if(!e||e.destroyed)return;const{snapGrid:t,params:s}=e;function a(){const t=e.rtlTranslate?-1*e.translate:e.translate,s=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(s),e.updateActiveIndex(),e.updateSlidesClasses()}let i;s.breakpoints&&e.setBreakpoint(),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode&&e.params.freeMode.enabled?(a(),e.params.autoHeight&&e.updateAutoHeight()):(i=("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),i||a()),s.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t=!0){const s=this,a=s.params.direction;return e||(e="horizontal"===a?"vertical":"horizontal"),e===a||"horizontal"!==e&&"vertical"!==e||(s.$el.removeClass(`${s.params.containerModifierClass}${a}`).addClass(`${s.params.containerModifierClass}${e}`),s.emitContainerClasses(),s.params.direction=e,s.slides.each((t=>{"vertical"===e?t.style.width="":t.style.height=""})),s.emit("changeDirection"),t&&s.update()),s}mount(e){const t=this;if(t.mounted)return!0;const s=d(e||t.params.el);if(!(e=s[0]))return!1;e.swiper=t;const i=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let r=(()=>
4059{if(e&&e.shadowRoot&&e.shadowRoot.querySelector){const t=d(e.shadowRoot.querySelector(i()));return t.children=e=>s.children(e),t}return s.children(i())})();if(0===r.length&&t.params.createElements){const e=a().createElement("div");r=d(e),e.className=t.params.wrapperClass,s.append(e),s.children(`.${t.params.slideClass}`).each((e=>{r.append(e)}))}return Object.assign(t,{$el:s,el:e,$wrapperEl:r,wrapperEl:r[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction")),wrongRTL:"-webkit-box"===r.css("display")}),!0}init(e){const t=this;if(t.initialized)return t;return!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t}destroy(e=!0,t=!0){const s=this,{params:a,$el:i,$wrapperEl:r,slides:n}=s;return void 0===s.params||s.destroyed||(s.emit("beforeDestroy"),s.initialized=!1,s.detachEvents(),a.loop&&s.loopDestroy(),t&&(s.removeClasses(),i.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([a.slideVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),s.emit("destroy"),Object.keys(s.eventsListeners).forEach((e=>{s.off(e)})),!1!==e&&(s.$el[0].swiper=null,function(e){const t=e;Object.keys(t).forEach((e=>{try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))}(s)),s.destroyed=!0),null}static extendDefaults(e){f(X,e)}static get extendedDefaults(){return X}static get defaults(){return G}static installModule(e){H.prototype.__modules__||(H.prototype.__modules__=[]);const t=H.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>H.installModule(e))),H):(H.installModule(e),H)}}function Y(e,t,s,i){const r=a();
4059return e.params.createElements&&Object.keys(i).forEach((a=>{if(!s[a]&&!0===s.auto){let n=e.$el.children(`.${i[a]}`)[0];n||(n=r.createElement("div"),n.className=i[a],e.$el.append(n)),s[a]=n,t[a]=n}})),s}function W(e=""){return`.${e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}`}function R(e){const t=this,{$wrapperEl:s,params:a}=t;if(a.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(let t=0;t<e.length;t+=1)e[t]&&s.append(e[t]);else s.append(e);a.loop&&t.loopCreate(),a.observer||t.update()}function j(e){const t=this,{params:s,$wrapperEl:a,activeIndex:i}=t;s.loop&&t.loopDestroy();let r=i+1;if("object"==typeof e&&"length"in e){for(let t=0;t<e.length;t+=1)e[t]&&a.prepend(e[t]);r=i+e.length}else a.prepend(e);s.loop&&t.loopCreate(),s.observer||t.update(),t.slideTo(r,0,!1)}function _(e,t){const s=this,{$wrapperEl:a,params:i,activeIndex:r}=s;let n=r;i.loop&&(n-=s.loopedSlides,s.loopDestroy(),s.slides=a.children(`.${i.slideClass}`));const l=s.slides.length;if(e<=0)return void s.prependSlide(t);if(e>=l)return void s.appendSlide(t);let o=n>e?n+1:n;const d=[];for(let t=l-1;t>=e;t-=1){const e=s.slides.eq(t);e.remove(),d.unshift(e)}if("object"==typeof t&&"length"in t){for(let e=0;e<t.length;e+=1)t[e]&&a.append(t[e]);o=n>e?n+t.length:n}else a.append(t);for(let e=0;e<d.length;e+=1)a.append(d[e]);i.loop&&s.loopCreate(),i.observer||s.update(),i.loop?s.slideTo(o+s.loopedSlides,0,!1):s.slideTo(o,0,!1)}function V(e){const t=this,{params:s,$wrapperEl:a,activeIndex:i}=t;let r=i;s.loop&&(r-=t.loopedSlides,t.loopDestroy(),t.slides=a.children(`.${s.slideClass}`));let n,l=r;if("object"==typeof e&&"length"in e){for(let s=0;s<e.length;s+=1)n=e[s],t.slides[n]&&t.slides.eq(n).remove(),n<l&&(l-=1);l=Math.max(l,0)}else n=e,t.slides[n]&&t.slides.eq(n).remove(),n<l&&(l-=1),l=Math.max(l,0);s.loop&&t.loopCreate(),s.observer||t.update(),s.loop?t.slideTo(l+t.loopedSlides,0,!1):t.slideTo(l,0,!1)}function q(){const e=this,t=[];for(let s=0;s<e.slides.length;s+=1)t.push(s);e.removeSlide(t)}function F(e){const{effect:t,swiper:s,on:a,setTranslate:i,setTransition:r,overwriteParams:n,perspective:l}=e;a("beforeInit",(()=>{if(s.params.effect!==t)return;s.classNames.push(`${s.params.containerModifierClass}${t}`),l&&l()&&s.classNames.push(`${s.params.containerModifierClass}3d`);const e=n?n():{};Object.assign(s.params,e),Object.assign(s.originalParams,e)})),a("setTranslate",(()=>{s.params.effect===t&&i()})),a("setTransition",((e,a)=>{s.params.effect===t&&r(a)}))}function U(e,t){return e.transformEl?t.find(e.transformEl).css({"backface-visibility":"hidden","-webkit-backface-visibility":"hidden"}):t}function K({swiper:e,duration:t,transformEl:s,allSlides:a}){const{slides:i,activeIndex:r,$wrapperEl:n}=e;if(e.params.virtualTranslate&&0!==t){let t,l=!1;t=a?s?i.find(s):i:s?i.eq(r).find(s):i.eq(r),t.transitionEnd((()=>{if(l)return;if(!e||e.destroyed)return;l=!0,e.animating=!1;const t=["webkitTransitionEnd","transitionend"];for(let e=0;e<t.length;e+=1)n.trigger(t[e])}))}}function Z(e,t,s){const a="swiper-slide-shadow"+(s?`-${s}`:""),i=e.transformEl?t.find(e.transformEl):t;let r=i.children(`.${a}`);return r.length||(r=d(`<div class="swiper-slide-shadow${s?`-${s}`:""}"></div>`),i.append(r)),r}Object.keys(B).forEach((e=>{Object.keys(B[e]).forEach((t=>{H.prototype[t]=B[e][t]}))})),H.use([function({swiper:e,on:t,emit:s}){const a=r();let i=null;const n=()=>{e&&!e.destroyed&&e.initialized&&(s("beforeResize"),s("resize"))},l=()=>{e&&!e.destroyed&&e.initialized&&s("orientationchange")};t("init",(()=>{e.params.resizeObserver&&void 0!==a.ResizeObserver?e&&!e.destroyed&&e.initialized&&(i=new ResizeObserver((t=>{const{width:s,height:a}=e;let i=s,r=a;t.forEach((({contentBoxSize:t,contentRect:s,target:a})=>{a&&a!==e.el||(i=s?s.width:(t[0]||t).inlineSize,r=s?s.height:(t[0]||t).blockSize)})),i===s&&r===a||n()})),i.observe(e.el)):(a.addEventListener("resize",n),a.addEventListener("orientationchange",l))})),t("destroy",(()=>{i&&i.unobserve&&e.el&&(i.unobserve(e.el),i=null),a.removeEventListener("resize",n),a.removeEventListener("orientationchange",l)}))},function({swiper:e,extendParams:t,on:s,emit:a}){const i=[],n=r(),l=(e,t={})=>{const s=new(n.MutationObserver||n.WebkitMutationObserver)((e=>{if(1===e.length)return void a("observerUpdate",e[0]);const t=function(){a("observerUpdate",e[0])};n.requestAnimationFrame?n.requestAnimationFrame(t):n.setTimeout(t,0)}));s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.push(s)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),s("init",(()=>{if(e.params.observer){if(e.params.observeParents){const t=e.$el.parents();for(let e=0;e<t.length;e+=1)l(t[e])}l(e.$el[0],{childList:e.params.observeSlideChildren}),l(e.$wrapperEl[0],{attributes:!1})}})),s("destroy",(()=>
4059{i.forEach((e=>{e.disconnect()})),i.splice(0,i.length)}))}]);const J=[function({swiper:e,extendParams:t,on:s}){let a;function i(t,s){const a=e.params.virtual;if(a.cache&&e.virtual.cache[s])return e.virtual.cache[s];const i=a.renderSlide?d(a.renderSlide.call(e,t,s)):d(`<div class="${e.params.slideClass}" data-swiper-slide-index="${s}">${t}</div>`);return i.attr("data-swiper-slide-index")||i.attr("data-swiper-slide-index",s),a.cache&&(e.virtual.cache[s]=i),i}function r(t){const{slidesPerView:s,slidesPerGroup:a,centeredSlides:r}=e.params,{addSlidesBefore:n,addSlidesAfter:l}=e.params.virtual,{from:o,to:d,slides:c,slidesGrid:p,offset:u}=e.virtual;e.params.cssMode||e.updateActiveIndex();const h=e.activeIndex||0;let m,f,g;m=e.rtlTranslate?"right":e.isHorizontal()?"left":"top",r?(f=Math.floor(s/2)+a+l,g=Math.floor(s/2)+a+n):(f=s+(a-1)+l,g=a+n);const v=Math.max((h||0)-g,0),w=Math.min((h||0)+f,c.length-1),b=(e.slidesGrid[v]||0)-(e.slidesGrid[0]||0);function x(){e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.lazy&&e.params.lazy.enabled&&e.lazy.load()}if(Object.assign(e.virtual,{from:v,to:w,offset:b,slidesGrid:e.slidesGrid}),o===v&&d===w&&!t)return e.slidesGrid!==p&&b!==u&&e.slides.css(m,`${b}px`),void e.updateProgress();if(e.params.virtual.renderExternal)return e.params.virtual.renderExternal.call(e,{offset:b,from:v,to:w,slides:function(){const e=[];for(let t=v;t<=w;t+=1)e.push(c[t]);return e}()}),void(e.params.virtual.renderExternalUpdate&&x());const y=[],E=[];if(t)e.$wrapperEl.find(`.${e.params.slideClass}`).remove();else for(let t=o;t<=d;t+=1)(t<v||t>w)&&e.$wrapperEl.find(`.${e.params.slideClass}[data-swiper-slide-index="${t}"]`).remove();for(let e=0;e<c.length;e+=1)e>=v&&e<=w&&(void 0===d||t?E.push(e):(e>d&&E.push(e),e<o&&y.push(e)));E.forEach((t=>{e.$wrapperEl.append(i(c[t],t))})),y.sort(((e,t)=>t-e)).forEach((t=>{e.$wrapperEl.prepend(i(c[t],t))})),e.$wrapperEl.children(".swiper-slide").css(m,`${b}px`),x()}t({virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,renderExternalUpdate:!0,addSlidesBefore:0,addSlidesAfter:0}}),e.virtual={cache:{},from:void 0,to:void 0,slides:[],offset:0,slidesGrid:[]},s("beforeInit",(()=>{e.params.virtual.enabled&&(e.virtual.slides=e.params.virtual.slides,e.classNames.push(`${e.params.containerModifierClass}virtual`),e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0,e.params.initialSlide||r())})),s("setTranslate",(()=>{e.params.virtual.enabled&&(e.params.cssMode&&!e._immediateVirtual?(clearTimeout(a),a=setTimeout((()=>{r()}),100)):r())})),s("init update resize",(()=>{e.params.virtual.enabled&&e.params.cssMode&&g(e.wrapperEl,"--swiper-virtual-size",`${e.virtualSize}px`)})),Object.assign(e.virtual,{appendSlide:function(t){if("object"==typeof t&&"length"in t)for(let s=0;s<t.length;s+=1)t[s]&&e.virtual.slides.push(t[s]);else e.virtual.slides.push(t);r(!0)},prependSlide:function(t){const s=e.activeIndex;let a=s+1,i=1;if(Array.isArray(t)){for(let s=0;s<t.length;s+=1)t[s]&&e.virtual.slides.unshift(t[s]);a=s+t.length,i=t.length}else e.virtual.slides.unshift(t);if(e.params.virtual.cache){const t=e.virtual.cache,s={};Object.keys(t).forEach((e=>{const a=t[e],r=a.attr("data-swiper-slide-index");r&&a.attr("data-swiper-slide-index",parseInt(r,10)+i),s[parseInt(e,10)+i]=a})),e.virtual.cache=s}r(!0),e.slideTo(a,0)},removeSlide:function(t){if(null==t)return;let s=e.activeIndex;if(Array.isArray(t))for(let a=t.length-1;a>=0;a-=1)e.virtual.slides.splice(t[a],1),e.params.virtual.cache&&delete e.virtual.cache[t[a]],t[a]<s&&(s-=1),s=Math.max(s,0);else e.virtual.slides.splice(t,1),e.params.virtual.cache&&delete e.virtual.cache[t],t<s&&(s-=1),s=Math.max(s,0);r(!0),e.slideTo(s,0)},removeAllSlides:function(){e.virtual.slides=[],e.params.virtual.cache&&(e.virtual.cache={}),r(!0),e.slideTo(0,0)},update:r})},function({swiper:e,extendParams:t,on:s,emit:i}){const n=a(),l=r();function o(t){if(!e.enabled)return;const{rtlTranslate:s}=e;let a=t;a.originalEvent&&(a=a.originalEvent);const r=a.keyCode||a.charCode,o=e.params.keyboard.pageUpDown,d=o&&33===r,c=o&&34===r,p=37===r,u=39===r,h=38===r,m=40===r;if(!e.allowSlideNext&&(e.isHorizontal()&&u||e.isVertical()&&m||c))return!1;if(!e.allowSlidePrev&&(e.isHorizontal()&&p||e.isVertical()&&h||d))return!1;if(!(a.shiftKey||a.altKey||a.ctrlKey||a.metaKey||n.activeElement&&n.activeElement.nodeName&&("input"===n.activeElement.nodeName.toLowerCase()||"textarea"===n.activeElement.nodeName.toLowerCase()))){if(e.params.keyboard.onlyInViewport&&(d||c||p||u||h||m)){let t=!1;if(e.$el.parents(`.${e.params.slideClass}`).length>0&&0===e.$el.parents(`.${e.params.slideActiveClass}`).length)return;
4059const a=e.$el,i=a[0].clientWidth,r=a[0].clientHeight,n=l.innerWidth,o=l.innerHeight,d=e.$el.offset();s&&(d.left-=e.$el[0].scrollLeft);const c=[[d.left,d.top],[d.left+i,d.top],[d.left,d.top+r],[d.left+i,d.top+r]];for(let e=0;e<c.length;e+=1){const s=c[e];if(s[0]>=0&&s[0]<=n&&s[1]>=0&&s[1]<=o){if(0===s[0]&&0===s[1])continue;t=!0}}if(!t)return}e.isHorizontal()?((d||c||p||u)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),((c||u)&&!s||(d||p)&&s)&&e.slideNext(),((d||p)&&!s||(c||u)&&s)&&e.slidePrev()):((d||c||h||m)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),(c||m)&&e.slideNext(),(d||h)&&e.slidePrev()),i("keyPress",r)}}function c(){e.keyboard.enabled||(d(n).on("keydown",o),e.keyboard.enabled=!0)}function p(){e.keyboard.enabled&&(d(n).off("keydown",o),e.keyboard.enabled=!1)}e.keyboard={enabled:!1},t({keyboard:{enabled:!1,onlyInViewport:!0,pageUpDown:!0}}),s("init",(()=>{e.params.keyboard.enabled&&c()})),s("destroy",(()=>{e.keyboard.enabled&&p()})),Object.assign(e.keyboard,{enable:c,disable:p})},function({swiper:e,extendParams:t,on:s,emit:a}){const i=r();let n;t({mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarget:"container",thresholdDelta:null,thresholdTime:null}}),e.mousewheel={enabled:!1};let l,o=u();const c=[];function h(){e.enabled&&(e.mouseEntered=!0)}function m(){e.enabled&&(e.mouseEntered=!1)}function f(t){return!(e.params.mousewheel.thresholdDelta&&t.delta<e.params.mousewheel.thresholdDelta)&&(!(e.params.mousewheel.thresholdTime&&u()-o<e.params.mousewheel.thresholdTime)&&(t.delta>=6&&u()-o<60||(t.direction<0?e.isEnd&&!e.params.loop||e.animating||(e.slideNext(),a("scroll",t.raw)):e.isBeginning&&!e.params.loop||e.animating||(e.slidePrev(),a("scroll",t.raw)),o=(new i.Date).getTime(),!1)))}function g(t){let s=t,i=!0;if(!e.enabled)return;const r=e.params.mousewheel;e.params.cssMode&&s.preventDefault();let o=e.$el;if("container"!==e.params.mousewheel.eventsTarget&&(o=d(e.params.mousewheel.eventsTarget)),!e.mouseEntered&&!o[0].contains(s.target)&&!r.releaseOnEdges)return!0;s.originalEvent&&(s=s.originalEvent);let h=0;const m=e.rtlTranslate?-1:1,g=function(e){let t=0,s=0,a=0,i=0;return"detail"in e&&(s=e.detail),"wheelDelta"in e&&(s=-e.wheelDelta/120),"wheelDeltaY"in e&&(s=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=s,s=0),a=10*t,i=10*s,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(a=e.deltaX),e.shiftKey&&!a&&(a=i,i=0),(a||i)&&e.deltaMode&&(1===e.deltaMode?(a*=40,i*=40):(a*=800,i*=800)),a&&!t&&(t=a<1?-1:1),i&&!s&&(s=i<1?-1:1),{spinX:t,spinY:s,pixelX:a,pixelY:i}}(s);if(r.forceToAxis)if(e.isHorizontal()){if(!(Math.abs(g.pixelX)>Math.abs(g.pixelY)))return!0;h=-g.pixelX*m}else{if(!(Math.abs(g.pixelY)>Math.abs(g.pixelX)))return!0;h=-g.pixelY}else h=Math.abs(g.pixelX)>Math.abs(g.pixelY)?-g.pixelX*m:-g.pixelY;if(0===h)return!0;r.invert&&(h=-h);let v=e.getTranslate()+h*r.sensitivity;if(v>=e.minTranslate()&&(v=e.minTranslate()),v<=e.maxTranslate()&&(v=e.maxTranslate()),i=!!e.params.loop||!(v===e.minTranslate()||v===e.maxTranslate()),i&&e.params.nested&&s.stopPropagation(),e.params.freeMode&&e.params.freeMode.enabled){const t={time:u(),delta:Math.abs(h),direction:Math.sign(h)},i=l&&t.time<l.time+500&&t.delta<=l.delta&&t.direction===l.direction;if(!i){l=void 0,e.params.loop&&e.loopFix();let o=e.getTranslate()+h*r.sensitivity;const d=e.isBeginning,u=e.isEnd;if(o>=e.minTranslate()&&(o=e.minTranslate()),o<=e.maxTranslate()&&(o=e.maxTranslate()),e.setTransition(0),e.setTranslate(o),e.updateProgress(),e.updateActiveIndex(),e.updateSlidesClasses(),(!d&&e.isBeginning||!u&&e.isEnd)&&e.updateSlidesClasses(),e.params.freeMode.sticky){clearTimeout(n),n=void 0,c.length>=15&&c.shift();const s=c.length?c[c.length-1]:void 0,a=c[0];if(c.push(t),s&&(t.delta>s.delta||t.direction!==s.direction))c.splice(0);else if(c.length>=15&&t.time-a.time<500&&a.delta-t.delta>=1&&t.delta<=6){const s=h>0?.8:.2;l=t,c.splice(0),n=p((()=>{e.slideToClosest(e.params.speed,!0,void 0,s)}),0)}n||(n=p((()=>{l=t,c.splice(0),e.slideToClosest(e.params.speed,!0,void 0,.5)}),500))}if(i||a("scroll",s),e.params.autoplay&&e.params.autoplayDisableOnInteraction&&e.autoplay.stop(),o===e.minTranslate()||o===e.maxTranslate())return!0}}else{const s={time:u(),delta:Math.abs(h),direction:Math.sign(h),raw:t};c.length>=2&&c.shift();const a=c.length?c[c.length-1]:void 0;if(c.push(s),a?(s.direction!==a.direction||s.delta>a.delta||s.time>a.time+150)&&f(s):f(s),function(t){const s=e.params.mousewheel;if(t.direction<0){if(e.isEnd&&!e.params.loop&&s.releaseOnEdges)return!0}else if(e.isBeginning&&!e.params.loop&&s.releaseOnEdges)return!0;return!1}(s))return!0}return s.preventDefault?s.preventDefault():s.returnValue=!1,!1}function v(t){let s=e.$el;"container"!==e.params.mousewheel.eventsTarget&&(s=d(e.params.mousewheel.eventsTarget)),s[t]("mouseenter",h),s[t]("mouseleave",m),s[t]("wheel",g)}function w(){return e.params.cssMode?(e.wrapperEl.removeEventListener("wheel",g),!0):!e.mousewheel.enabled&&(v("on"),e.mousewheel.enabled=!0,!0)}function b(){return e.params.cssMode?(e.wrapperEl.addEventListener(event,g),!0):!!e.mousewheel.enabled&&(v("off"),e.mousewheel.enabled=!1,!0)}s("init",(()=>{!e.params.mousewheel.enabled&&e.params.cssMode&&b(),e.params.mousewheel.enabled&&w()})),s("destroy",(()=>{e.params.cssMode&&w(),e.mousewheel.enabled&&b()})),Object.assign(e.mousewheel,{enable:w,disable:b})},function({swiper:e,extendParams:t,on:s,emit:a}){function i(t){let s;return t&&(s=d(t),e.params.uniqueNavElements&&"string"==typeof t&&s.length>1&&1===e.$el.find(t).length&&(s=e.$el.find(t))),s}function r(t,s){const a=e.params.navigation;t&&t.length>0&&(t[s?"addClass":"removeClass"](a.disabledClass),t[0]&&"BUTTON"===t[0].tagName&&(t[0].disabled=s),e.params.watchOverflow&&e.enabled&&t[e.isLocked?"addClass":"removeClass"](a.lockClass))}function n(){if(e.params.loop)return;const{$nextEl:t,$prevEl:s}=e.navigation;r(s,e.isBeginning),r(t,e.isEnd)}function l(t){t.preventDefault(),e.isBeginning&&!e.params.loop||e.slidePrev()}function o(t){t.preventDefault(),e.isEnd&&!e.params.loop||e.slideNext()}function c(){const t=e.params.navigation;if(e.params.navigation=Y(e,e.originalParams.navigation,e.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!t.nextEl&&!t.prevEl)return;const s=i(t.nextEl),a=i(t.prevEl);s&&s.length>0&&s.on("click",o),a&&a.length>0&&a.on("click",l),Object.assign(e.navigation,{$nextEl:s,nextEl:s&&s[0],$prevEl:a,prevEl:a&&a[0]}),e.enabled||(s&&s.addClass(t.lockClass),a&&a.addClass(t.lockClass))}function p(){const{$nextEl:t,$prevEl:s}=e.navigation;t&&t.length&&(t.off("click",o),t.removeClass(e.params.navigation.disabledClass)),s&&s.length&&(s.off("
4059click",l),s.removeClass(e.params.navigation.disabledClass))}t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}}),e.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},s("init",(()=>{c(),n()})),s("toEdge fromEdge lock unlock",(()=>{n()})),s("destroy",(()=>{p()})),s("enable disable",(()=>{const{$nextEl:t,$prevEl:s}=e.navigation;t&&t[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass),s&&s[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass)})),s("click",((t,s)=>{const{$nextEl:i,$prevEl:r}=e.navigation,n=s.target;if(e.params.navigation.hideOnClick&&!d(n).is(r)&&!d(n).is(i)){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===n||e.pagination.el.contains(n)))return;let t;i?t=i.hasClass(e.params.navigation.hiddenClass):r&&(t=r.hasClass(e.params.navigation.hiddenClass)),a(!0===t?"navigationShow":"navigationHide"),i&&i.toggleClass(e.params.navigation.hiddenClass),r&&r.toggleClass(e.params.navigation.hiddenClass)}})),Object.assign(e.navigation,{update:n,init:c,destroy:p})},function({swiper:e,extendParams:t,on:s,emit:a}){const i="swiper-pagination";let r;t({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${i}-bullet`,bulletActiveClass:`${i}-bullet-active`,modifierClass:`${i}-`,currentClass:`${i}-current`,totalClass:`${i}-total`,hiddenClass:`${i}-hidden`,progressbarFillClass:`${i}-progressbar-fill`,progressbarOppositeClass:`${i}-progressbar-opposite`,clickableClass:`${i}-clickable`,lockClass:`${i}-lock`,horizontalClass:`${i}-horizontal`,verticalClass:`${i}-vertical`}}),e.pagination={el:null,$el:null,bullets:[]};let n=0;function l(){return!e.params.pagination.el||!e.pagination.el||!e.pagination.$el||0===e.pagination.$el.length}function o(t,s){const{bulletActiveClass:a}=e.params.pagination;t[s]().addClass(`${a}-${s}`)[s]().addClass(`${a}-${s}-${s}`)}function c(){const t=e.rtl,s=e.params.pagination;if(l())return;const i=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,c=e.pagination.$el;let p;const u=e.params.loop?Math.ceil((i-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?(p=Math.ceil((e.activeIndex-e.loopedSlides)/e.params.slidesPerGroup),p>i-1-2*e.loopedSlides&&(p-=i-2*e.loopedSlides),p>u-1&&(p-=u),p<0&&"bullets"!==e.params.paginationType&&(p=u+p)):p=void 0!==e.snapIndex?e.snapIndex:e.activeIndex||0,"bullets"===s.type&&e.pagination.bullets&&e.pagination.bullets.length>0){const a=e.pagination.bullets;let i,l,u;if(s.dynamicBullets&&(r=a.eq(0)[e.isHorizontal()?"outerWidth":"outerHeight"](!0),c.css(e.isHorizontal()?"width":"height",r*(s.dynamicMainBullets+4)+"px"),s.dynamicMainBullets>1&&void 0!==e.previousIndex&&(n+=p-e.previousIndex,n>s.dynamicMainBullets-1?n=s.dynamicMainBullets-1:n<0&&(n=0)),i=p-n,l=i+(Math.min(a.length,s.dynamicMainBullets)-1),u=(l+i)/2),a.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${s.bulletActiveClass}${e}`)).join(" ")),c.length>1)a.each((e=>{const t=d(e),a=t.index();a===p&&t.addClass(s.bulletActiveClass),s.dynamicBullets&&(a>=i&&a<=l&&t.addClass(`${s.bulletActiveClass}-main`),a===i&&o(t,"prev"),a===l&&o(t,"next"))}));else{const t=a.eq(p),r=t.index();if(t.addClass(s.bulletActiveClass),s.dynamicBullets){const t=a.eq(i),n=a.eq(l);for(let e=i;e<=l;e+=1)a.eq(e).addClass(`${s.bulletActiveClass}-main`);if(e.params.loop)if(r>=a.length-s.dynamicMainBullets){for(let e=s.dynamicMainBullets;e>=0;e-=1)a.eq(a.length-e).addClass(`${s.bulletActiveClass}-main`);a.eq(a.length-s.dynamicMainBullets-1).addClass(`${s.bulletActiveClass}-prev`)}else o(t,"prev"),o(n,"next");else o(t,"prev"),o(n,"next")}}if(s.dynamicBullets){const i=Math.min(a.length,s.dynamicMainBullets+4),n=(r*i-r)/2-u*r,l=t?"right":"left";a.css(e.isHorizontal()?l:"top",`${n}px`)}}if("fraction"===s.type&&(c.find(W(s.currentClass)).text(s.formatFractionCurrent(p+1)),c.find(W(s.totalClass)).text(s.formatFractionTotal(u))),"progressbar"===s.type){let t;t=s.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";const a=(p+1)/u;let i=1,r=1;"horizontal"===t?i=a:r=a,c.find(W(s.progressbarFillClass)).transform(`translate3d(0,
40590,0) scaleX(${i}) scaleY(${r})`).transition(e.params.speed)}"custom"===s.type&&s.renderCustom?(c.html(s.renderCustom(e,p+1,u)),a("paginationRender",c[0])):a("paginationUpdate",c[0]),e.params.watchOverflow&&e.enabled&&c[e.isLocked?"addClass":"removeClass"](s.lockClass)}function p(){const t=e.params.pagination;if(l())return;const s=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,i=e.pagination.$el;let r="";if("bullets"===t.type){let a=e.params.loop?Math.ceil((s-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;e.params.freeMode&&e.params.freeMode.enabled&&!e.params.loop&&a>s&&(a=s);for(let s=0;s<a;s+=1)t.renderBullet?r+=t.renderBullet.call(e,s,t.bulletClass):r+=`<${t.bulletElement} class="${t.bulletClass}"></${t.bulletElement}>`;i.html(r),e.pagination.bullets=i.find(W(t.bulletClass))}"fraction"===t.type&&(r=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):`<span class="${t.currentClass}"></span> / <span class="${t.totalClass}"></span>`,i.html(r)),"progressbar"===t.type&&(r=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):`<span class="${t.progressbarFillClass}"></span>`,i.html(r)),"custom"!==t.type&&a("paginationRender",e.pagination.$el[0])}function u(){e.params.pagination=Y(e,e.originalParams.pagination,e.params.pagination,{el:"swiper-pagination"});const t=e.params.pagination;if(!t.el)return;let s=d(t.el);0!==s.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&s.length>1&&(s=e.$el.find(t.el),s.length>1&&(s=s.filter((t=>d(t).parents(".swiper")[0]===e.el)))),"bullets"===t.type&&t.clickable&&s.addClass(t.clickableClass),s.addClass(t.modifierClass+t.type),s.addClass(t.modifierClass+e.params.direction),"bullets"===t.type&&t.dynamicBullets&&(s.addClass(`${t.modifierClass}${t.type}-dynamic`),n=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&s.addClass(t.progressbarOppositeClass),t.clickable&&s.on("click",W(t.bulletClass),(function(t){t.preventDefault();let s=d(this).index()*e.params.slidesPerGroup;e.params.loop&&(s+=e.loopedSlides),e.slideTo(s)})),Object.assign(e.pagination,{$el:s,el:s[0]}),e.enabled||s.addClass(t.lockClass))}function h(){const t=e.params.pagination;if(l())return;const s=e.pagination.$el;s.removeClass(t.hiddenClass),s.removeClass(t.modifierClass+t.type),s.removeClass(t.modifierClass+e.params.direction),e.pagination.bullets&&e.pagination.bullets.removeClass&&e.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&s.off("click",W(t.bulletClass))}s("init",(()=>{u(),p(),c()})),s("activeIndexChange",(()=>{(e.params.loop||void 0===e.snapIndex)&&c()})),s("snapIndexChange",(()=>{e.params.loop||c()})),s("slidesLengthChange",(()=>{e.params.loop&&(p(),c())})),s("snapGridLengthChange",(()=>{e.params.loop||(p(),c())})),s("destroy",(()=>{h()})),s("enable disable",(()=>{const{$el:t}=e.pagination;t&&t[e.enabled?"removeClass":"addClass"](e.params.pagination.lockClass)})),s("lock unlock",(()=>{c()})),s("click",((t,s)=>{const i=s.target,{$el:r}=e.pagination;if(e.params.pagination.el&&e.params.pagination.hideOnClick&&r.length>0&&!d(i).hasClass(e.params.pagination.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&i===e.navigation.nextEl||e.navigation.prevEl&&i===e.navigation.prevEl))return;const t=r.hasClass(e.params.pagination.hiddenClass);a(!0===t?"paginationShow":"paginationHide"),r.toggleClass(e.params.pagination.hiddenClass)}})),Object.assign(e.pagination,{render:p,update:c,init:u,destroy:h})},function({swiper:e,extendParams:t,on:s,emit:i}){const r=a();let n,l,o,c,u=!1,h=null,m=null;function f(){if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t,rtlTranslate:s,progress:a}=e,{$dragEl:i,$el:r}=t,n=e.params.scrollbar;let d=l,c=(o-l)*a;s?(c=-c,c>0?(d=l-c,c=0):-c+l>o&&(d=o+c)):c<0?(d=l+c,c=0):c+l>o&&(d=o-c),e.isHorizontal()?(i.transform(`translate3d(${c}px, 0, 0)`),i[0].style.width=`${d}px`):(i.transform(`translate3d(0px, ${c}px, 0)`),i[0].style.height=`${d}px`),n.hide&&(clearTimeout(h),r[0].style.opacity=1,h=setTimeout((()=>{r[0].style.opacity=0,r.transition(400)}),1e3))}function g(){if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t}=e,{$dragEl:s,$el:a}=t;s[0].style.width="",s[0].style.height="",o=e.isHorizontal()?a[0].offsetWidth:a[0].offsetHeight,c=e.size/(e.virtualSize+e.params.slidesOffsetBefore-(e.params.centeredSlides?e.snapGrid[0]:0)),l="auto"===e.params.scrollbar.dragSize?o*c:parseInt(e.params.scrollbar.dragSize,10),e.isHorizontal()?s[0].style.width=`${l}px`:s[0].style.height=`${l}px`,a[0].style.display=c>=1?"none":"",e.params.scrollbar.hide&&(a[0].style.opacity=0),e.params.watchOverflow&&e.enabled&&t.$el[e.isLocked?"addClass":"removeClass"](e.params.scrollbar.lockClass)}function v(t){return e.isHorizontal()?"touchstart"===t.type||"touchmove"===t.type?t.targetTouches[0].clientX:t.clientX:"touchstart"===t.type||"touchmove"===t.type?t.targetTouches[0].clientY:t.clientY}function w(t){const{scrollbar:s,rtlTranslate:a}=e,{$el:i}=s;let r;r=(v(t)-i.offset()[e.isHorizontal()?"left":"top"]-(null!==n?n:l/2))/(o-l),r=Math.max(Math.min(r,1),0),a&&(r=1-r);const d=e.minTranslate()+(e.maxTranslate()-e.minTranslate())*r;e.updateProgress(d),e.setTranslate(d),e.updateActiveIndex(),e.updateSlidesClasses()}function b(t){const s=e.params.scrollbar,{scrollbar:a,$wrapperEl:r}=e,{$el:l,$dragEl:o}=a;u=!0,n=t.target===o[0]||t.target===o?v(t)-t.target.getBoundingClientRect()[e.isHorizontal()?"left":"top"]:null,t.preventDefault(),t.stopPropagation(),r.transition(100),o.transition(100),w(t),
4059clearTimeout(m),l.transition(0),s.hide&&l.css("opacity",1),e.params.cssMode&&e.$wrapperEl.css("scroll-snap-type","none"),i("scrollbarDragStart",t)}function x(t){const{scrollbar:s,$wrapperEl:a}=e,{$el:r,$dragEl:n}=s;u&&(t.preventDefault?t.preventDefault():t.returnValue=!1,w(t),a.transition(0),r.transition(0),n.transition(0),i("scrollbarDragMove",t))}function y(t){const s=e.params.scrollbar,{scrollbar:a,$wrapperEl:r}=e,{$el:n}=a;u&&(u=!1,e.params.cssMode&&(e.$wrapperEl.css("scroll-snap-type",""),r.transition("")),s.hide&&(clearTimeout(m),m=p((()=>{n.css("opacity",0),n.transition(400)}),1e3)),i("scrollbarDragEnd",t),s.snapOnRelease&&e.slideToClosest())}function E(t){const{scrollbar:s,touchEventsTouch:a,touchEventsDesktop:i,params:n,support:l}=e,o=s.$el[0],d=!(!l.passiveListener||!n.passiveListeners)&&{passive:!1,capture:!1},c=!(!l.passiveListener||!n.passiveListeners)&&{passive:!0,capture:!1};if(!o)return;const p="on"===t?"addEventListener":"removeEventListener";l.touch?(o[p](a.start,b,d),o[p](a.move,x,d),o[p](a.end,y,c)):(o[p](i.start,b,d),r[p](i.move,x,d),r[p](i.end,y,c))}function T(){const{scrollbar:t,$el:s}=e;e.params.scrollbar=Y(e,e.originalParams.scrollbar,e.params.scrollbar,{el:"swiper-scrollbar"});const a=e.params.scrollbar;if(!a.el)return;let i=d(a.el);e.params.uniqueNavElements&&"string"==typeof a.el&&i.length>1&&1===s.find(a.el).length&&(i=s.find(a.el));let r=i.find(`.${e.params.scrollbar.dragClass}`);0===r.length&&(r=d(`<div class="${e.params.scrollbar.dragClass}"></div>`),i.append(r)),Object.assign(t,{$el:i,el:i[0],$dragEl:r,dragEl:r[0]}),a.draggable&&e.params.scrollbar.el&&E("on"),i&&i[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)}function C(){e.params.scrollbar.el&&E("off")}t({scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}}),e.scrollbar={el:null,dragEl:null,$el:null,$dragEl:null},s("init",(()=>{T(),g(),f()})),s("update resize observerUpdate lock unlock",(()=>{g()})),s("setTranslate",(()=>{f()})),s("setTransition",((t,s)=>{!function(t){e.params.scrollbar.el&&e.scrollbar.el&&e.scrollbar.$dragEl.transition(t)}(s)})),s("enable disable",(()=>{const{$el:t}=e.scrollbar;t&&t[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)})),s("destroy",(()=>{C()})),Object.assign(e.scrollbar,{updateSize:g,setTranslate:f,init:T,destroy:C})},function({swiper:e,extendParams:t,on:s}){t({parallax:{enabled:!1}});const a=(t,s)=>{const{rtl:a}=e,i=d(t),r=a?-1:1,n=i.attr("data-swiper-parallax")||"0";let l=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y");const c=i.attr("data-swiper-parallax-scale"),p=i.attr("data-swiper-parallax-opacity");if(l||o?(l=l||"0",o=o||"0"):e.isHorizontal()?(l=n,o="0"):(o=n,l="0"),l=l.indexOf("%")>=0?parseInt(l,10)*s*r+"%":l*s*r+"px",o=o.indexOf("%")>=0?parseInt(o,10)*s+"%":o*s+"px",null!=p){const e=p-(p-1)*(1-Math.abs(s));i[0].style.opacity=e}if(null==c)i.transform(`translate3d(${l}, ${o}, 0px)`);else{const e=c-(c-1)*(1-Math.abs(s));i.transform(`translate3d(${l}, ${o}, 0px) scale(${e})`)}},i=()=>{const{$el:t,slides:s,progress:i,snapGrid:r}=e;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{a(e,i)})),s.each(((t,s)=>{let n=t.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(n+=Math.ceil(s/2)-i*(r.length-1)),n=Math.min(Math.max(n,-1),1),d(t).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{a(e,n)}))}))};s("beforeInit",(()=>{e.params.parallax.enabled&&(e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)})),s("init",(()=>{e.params.parallax.enabled&&i()})),s("setTranslate",(()=>{e.params.parallax.enabled&&i()})),s("setTransition",((t,s)=>{e.params.parallax.enabled&&((t=e.params.speed)=>{const{$el:s}=e;s.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{const s=d(e);let a=parseInt(s.attr("data-swiper-parallax-duration"),10)||t;0===t&&(a=0),s.transition(a)}))})(s)}))},function({swiper:e,extendParams:t,on:s,emit:a}){const i=r();t({zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}}),e.zoom={enabled:!1};let n,l,o,c=1,p=!1;const u={$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},m={isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},f={x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0};let g=1;function v(e){if(e.targetTouches.length<2)return 1;const t=e.targetTouches[0].pageX,s=e.targetTouches[0].pageY,a=e.targetTouches[1].pageX,i=e.targetTouches[1].pageY;return Math.sqrt((a-t)**2+(i-s)**2)}function w(t){const s=e.support,a=e.params.zoom;if(l=!1,o=!1,!s.gestures){if("touchstart"!==t.type||"touchstart"===t.type&&t.targetTouches.length<2)return;l=!0,u.scaleStart=v(t)}u.$slideEl&&u.$slideEl.length||(u.$slideEl=d(t.target).closest(`.${e.params.slideClass}`),0===u.$slideEl.length&&(u.$slideEl=e.slides.eq(e.activeIndex)),u.$imageEl=u.$slideEl.find(`.${a.containerClass}`).eq(0).find("img, svg, canvas, picture, .swiper-zoom-target"),u.$imageWrapEl=u.$imageEl.parent(`.${a.containerClass}`),u.maxRatio=u.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,0!==u.$imageWrapEl.length)?(u.$imageEl&&u.$imageEl.transition(0),p=!0):u.$imageEl=void 0}function b(t){const s=e.support,a=e.params.zoom,i=e.zoom;if(!s.gestures){if("touchmove"!==t.type||"touchmove"===t.type&&t.targetTouches.length<2)return;o=!0,u.scaleMove=v(t)}u.$imageEl&&0!==u.$imageEl.length?(s.gestures?i.scale=t.scale*c:i.scale=u.scaleMove/u.scaleStart*c,i.scale>u.maxRatio&&(i.scale=u.maxRatio-1+(i.scale-u.maxRatio+1)**.5),i.scale<a.minRatio&&(i.scale=a.minRatio+1-(a.minRatio-i.scale+1)**.5),u.$imageEl.transform(`translate3d(0,
40590,0) scale(${i.scale})`)):"gesturechange"===t.type&&w(t)}function x(t){const s=e.device,a=e.support,i=e.params.zoom,r=e.zoom;if(!a.gestures){if(!l||!o)return;if("touchend"!==t.type||"touchend"===t.type&&t.changedTouches.length<2&&!s.android)return;l=!1,o=!1}u.$imageEl&&0!==u.$imageEl.length&&(r.scale=Math.max(Math.min(r.scale,u.maxRatio),i.minRatio),u.$imageEl.transition(e.params.speed).transform(`translate3d(0,0,0) scale(${r.scale})`),c=r.scale,p=!1,1===r.scale&&(u.$slideEl=void 0))}function y(t){const s=e.zoom;if(!u.$imageEl||0===u.$imageEl.length)return;if(e.allowClick=!1,!m.isTouched||!u.$slideEl)return;m.isMoved||(m.width=u.$imageEl[0].offsetWidth,m.height=u.$imageEl[0].offsetHeight,m.startX=h(u.$imageWrapEl[0],"x")||0,m.startY=h(u.$imageWrapEl[0],"y")||0,u.slideWidth=u.$slideEl[0].offsetWidth,u.slideHeight=u.$slideEl[0].offsetHeight,u.$imageWrapEl.transition(0));const a=m.width*s.scale,i=m.height*s.scale;if(!(a<u.slideWidth&&i<u.slideHeight)){if(m.minX=Math.min(u.slideWidth/2-a/2,0),m.maxX=-m.minX,m.minY=Math.min(u.slideHeight/2-i/2,0),m.maxY=-m.minY,m.touchesCurrent.x="touchmove"===t.type?t.targetTouches[0].pageX:t.pageX,m.touchesCurrent.y="touchmove"===t.type?t.targetTouches[0].pageY:t.pageY,!m.isMoved&&!p){if(e.isHorizontal()&&(Math.floor(m.minX)===Math.floor(m.startX)&&m.touchesCurrent.x<m.touchesStart.x||Math.floor(m.maxX)===Math.floor(m.startX)&&m.touchesCurrent.x>m.touchesStart.x))return void(m.isTouched=!1);if(!e.isHorizontal()&&(Math.floor(m.minY)===Math.floor(m.startY)&&m.touchesCurrent.y<m.touchesStart.y||Math.floor(m.maxY)===Math.floor(m.startY)&&m.touchesCurrent.y>m.touchesStart.y))return void(m.isTouched=!1)}t.cancelable&&t.preventDefault(),t.stopPropagation(),m.isMoved=!0,m.currentX=m.touchesCurrent.x-m.touchesStart.x+m.startX,m.currentY=m.touchesCurrent.y-m.touchesStart.y+m.startY,m.currentX<m.minX&&(m.currentX=m.minX+1-(m.minX-m.currentX+1)**.8),m.currentX>m.maxX&&(m.currentX=m.maxX-1+(m.currentX-m.maxX+1)**.8),m.currentY<m.minY&&(m.currentY=m.minY+1-(m.minY-m.currentY+1)**.8),m.currentY>m.maxY&&(m.currentY=m.maxY-1+(m.currentY-m.maxY+1)**.8),f.prevPositionX||(f.prevPositionX=m.touchesCurrent.x),f.prevPositionY||(f.prevPositionY=m.touchesCurrent.y),f.prevTime||(f.prevTime=Date.now()),f.x=(m.touchesCurrent.x-f.prevPositionX)/(Date.now()-f.prevTime)/2,f.y=(m.touchesCurrent.y-f.prevPositionY)/(Date.now()-f.prevTime)/2,Math.abs(m.touchesCurrent.x-f.prevPositionX)<2&&(f.x=0),Math.abs(m.touchesCurrent.y-f.prevPositionY)<2&&(f.y=0),f.prevPositionX=m.touchesCurrent.x,f.prevPositionY=m.touchesCurrent.y,f.prevTime=Date.now(),u.$imageWrapEl.transform(`translate3d(${m.currentX}px, ${m.currentY}px,0)`)}}function E(){const t=e.zoom;u.$slideEl&&e.previousIndex!==e.activeIndex&&(u.$imageEl&&u.$imageEl.transform("translate3d(0,0,0) scale(1)"),u.$imageWrapEl&&u.$imageWrapEl.transform("translate3d(0,0,0)"),t.scale=1,c=1,u.$slideEl=void 0,u.$imageEl=void 0,u.$imageWrapEl=void 0)}function T(t){const s=e.zoom,a=e.params.zoom;if(u.$slideEl||(t&&t.target&&(u.$slideEl=d(t.target).closest(`.${e.params.slideClass}`)),u.$slideEl||(e.params.virtual&&e.params.virtual.enabled&&e.virtual?u.$slideEl=e.$wrapperEl.children(`.${e.params.slideActiveClass}`):u.$slideEl=e.slides.eq(e.activeIndex)),u.$imageEl=u.$slideEl.find(`.${a.containerClass}`).eq(0).find("img, svg, canvas, picture, .swiper-zoom-target"),u.$imageWrapEl=u.$imageEl.parent(`.${a.containerClass}`)),!u.$imageEl||0===u.$imageEl.length||!u.$imageWrapEl||0===u.$imageWrapEl.length)return;let r,n,l,o,p,h,f,g,v,w,b,x,y,E,T,C,$,S;e.params.cssMode&&(e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.touchAction="none"),u.$slideEl.addClass(`${a.zoomedSlideClass}`),void 0===m.touchesStart.x&&t?(r="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,n="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(r=m.touchesStart.x,n=m.touchesStart.y),s.scale=u.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,c=u.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,t?($=u.$slideEl[0].offsetWidth,S=u.$slideEl[0].offsetHeight,l=u.$slideEl.offset().left+i.scrollX,o=u.$slideEl.offset().top+i.scrollY,p=l+$/2-r,h=o+S/2-n,v=u.$imageEl[0].offsetWidth,w=u.$imageEl[0].offsetHeight,b=v*s.scale,x=w*s.scale,y=Math.min($/2-b/2,0),E=Math.min(S/2-x/2,0),T=-y,C=-E,f=p*s.scale,g=h*s.scale,f<y&&(f=y),f>T&&(f=T),g<E&&(g=E),g>C&&(g=C)):(f=0,g=0),u.$imageWrapEl.transition(300).transform(`translate3d(${f}px, ${g}
4059px,0)`),u.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${s.scale})`)}function C(){const t=e.zoom,s=e.params.zoom;u.$slideEl||(e.params.virtual&&e.params.virtual.enabled&&e.virtual?u.$slideEl=e.$wrapperEl.children(`.${e.params.slideActiveClass}`):u.$slideEl=e.slides.eq(e.activeIndex),u.$imageEl=u.$slideEl.find(`.${s.containerClass}`).eq(0).find("img, svg, canvas, picture, .swiper-zoom-target"),u.$imageWrapEl=u.$imageEl.parent(`.${s.containerClass}`)),u.$imageEl&&0!==u.$imageEl.length&&u.$imageWrapEl&&0!==u.$imageWrapEl.length&&(e.params.cssMode&&(e.wrapperEl.style.overflow="",e.wrapperEl.style.touchAction=""),t.scale=1,c=1,u.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),u.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),u.$slideEl.removeClass(`${s.zoomedSlideClass}`),u.$slideEl=void 0)}function $(t){const s=e.zoom;s.scale&&1!==s.scale?C():T(t)}function S(){const t=e.support;return{passiveListener:!("touchstart"!==e.touchEvents.start||!t.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1},activeListenerWithCapture:!t.passiveListener||{passive:!1,capture:!0}}}function M(){return`.${e.params.slideClass}`}function P(t){const{passiveListener:s}=S(),a=M();e.$wrapperEl[t]("gesturestart",a,w,s),e.$wrapperEl[t]("gesturechange",a,b,s),e.$wrapperEl[t]("gestureend",a,x,s)}function k(){n||(n=!0,P("on"))}function z(){n&&(n=!1,P("off"))}function O(){const t=e.zoom;if(t.enabled)return;t.enabled=!0;const s=e.support,{passiveListener:a,activeListenerWithCapture:i}=S(),r=M();s.gestures?(e.$wrapperEl.on(e.touchEvents.start,k,a),e.$wrapperEl.on(e.touchEvents.end,z,a)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.on(e.touchEvents.start,r,w,a),e.$wrapperEl.on(e.touchEvents.move,r,b,i),e.$wrapperEl.on(e.touchEvents.end,r,x,a),e.touchEvents.cancel&&e.$wrapperEl.on(e.touchEvents.cancel,r,x,a)),e.$wrapperEl.on(e.touchEvents.move,`.${e.params.zoom.containerClass}`,y,i)}function I(){const t=e.zoom;if(!t.enabled)return;const s=e.support;t.enabled=!1;const{passiveListener:a,activeListenerWithCapture:i}=S(),r=M();s.gestures?(e.$wrapperEl.off(e.touchEvents.start,k,a),e.$wrapperEl.off(e.touchEvents.end,z,a)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.off(e.touchEvents.start,r,w,a),e.$wrapperEl.off(e.touchEvents.move,r,b,i),e.$wrapperEl.off(e.touchEvents.end,r,x,a),e.touchEvents.cancel&&e.$wrapperEl.off(e.touchEvents.cancel,r,x,a)),e.$wrapperEl.off(e.touchEvents.move,`.${e.params.zoom.containerClass}`,y,i)}Object.defineProperty(e.zoom,"scale",{get:()=>g,set(e){if(g!==e){const t=u.$imageEl?u.$imageEl[0]:void 0,s=u.$slideEl?u.$slideEl[0]:void 0;a("zoomChange",e,t,s)}g=e}}),s("init",(()=>{e.params.zoom.enabled&&O()})),s("destroy",(()=>{I()})),s("touchStart",((t,s)=>{e.zoom.enabled&&function(t){const s=e.device;u.$imageEl&&0!==u.$imageEl.length&&(m.isTouched||(s.android&&t.cancelable&&t.preventDefault(),m.isTouched=!0,m.touchesStart.x="touchstart"===t.type?t.targetTouches[0].pageX:t.pageX,m.touchesStart.y="touchstart"===t.type?t.targetTouches[0].pageY:t.pageY))}(s)})),s("touchEnd",((t,s)=>{e.zoom.enabled&&function(){const t=e.zoom;if(!u.$imageEl||0===u.$imageEl.length)return;if(!m.isTouched||!m.isMoved)return m.isTouched=!1,void(m.isMoved=!1);m.isTouched=!1,m.isMoved=!1;let s=300,a=300;const i=f.x*s,r=m.currentX+i,n=f.y*a,l=m.currentY+n;0!==f.x&&(s=Math.abs((r-m.currentX)/f.x)),0!==f.y&&(a=Math.abs((l-m.currentY)/f.y));const o=Math.max(s,a);m.currentX=r,m.currentY=l;const d=m.width*t.scale,c=m.height*t.scale;m.minX=Math.min(u.slideWidth/2-d/2,0),m.maxX=-m.minX,m.minY=Math.min(u.slideHeight/2-c/2,0),m.maxY=-m.minY,m.currentX=Math.max(Math.min(m.currentX,m.maxX),m.minX),m.currentY=Math.max(Math.min(m.currentY,m.maxY),m.minY),u.$imageWrapEl.transition(o).transform(`translate3d(${m.currentX}px, ${m.currentY}px,0)`)}()})),s("doubleTap",((t,s)=>{!e.animating&&e.params.zoom.enabled&&e.zoom.enabled&&e.params.zoom.toggle&&$(s)})),s("transitionEnd",(()=>{e.zoom.enabled&&e.params.zoom.enabled&&E()})),s("slideChange",(()=>{e.zoom.enabled&&e.params.zoom.enabled&&e.params.cssMode&&E()})),Object.assign(e.zoom,{enable:O,disable:I,in:T,out:C,toggle:$})},function({swiper:e,extendParams:t,on:s,emit:a}){t({lazy:{checkInView:!1,enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,scrollingElement:"",elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}}),e.lazy={};let i=!1,n=!1;function l(t,s=!0){const i=e.params.lazy;if(void 0===t)return;if(0===e.slides.length)return;const r=e.virtual&&e.params.virtual.enabled?e.$wrapperEl.children(`.${e.params.slideClass}[data-swiper-slide-index="${t}"]`):e.slides.eq(t),n=r.find(`.${i.elementClass}:not(.${i.loadedClass}):not(.${i.loadingClass})`);!r.hasClass(i.elementClass)||r.hasClass(i.loadedClass)||r.hasClass(i.loadingClass)||n.push(r[0]),0!==n.length&&n.each((t=>{const n=d(t);n.addClass(i.loadingClass);const o=n.attr("data-background"),c=n.attr("data-src"),p=n.attr("data-srcset"),u=n.attr("data-sizes"),h=n.parent("picture");
4059e.loadImage(n[0],c||o,p,u,!1,(()=>{if(null!=e&&e&&(!e||e.params)&&!e.destroyed){if(o?(n.css("background-image",`url("${o}")`),n.removeAttr("data-background")):(p&&(n.attr("srcset",p),n.removeAttr("data-srcset")),u&&(n.attr("sizes",u),n.removeAttr("data-sizes")),h.length&&h.children("source").each((e=>{const t=d(e);t.attr("data-srcset")&&(t.attr("srcset",t.attr("data-srcset")),t.removeAttr("data-srcset"))})),c&&(n.attr("src",c),n.removeAttr("data-src"))),n.addClass(i.loadedClass).removeClass(i.loadingClass),r.find(`.${i.preloaderClass}`).remove(),e.params.loop&&s){const t=r.attr("data-swiper-slide-index");if(r.hasClass(e.params.slideDuplicateClass)){l(e.$wrapperEl.children(`[data-swiper-slide-index="${t}"]:not(.${e.params.slideDuplicateClass})`).index(),!1)}else{l(e.$wrapperEl.children(`.${e.params.slideDuplicateClass}[data-swiper-slide-index="${t}"]`).index(),!1)}}a("lazyImageReady",r[0],n[0]),e.params.autoHeight&&e.updateAutoHeight()}})),a("lazyImageLoad",r[0],n[0])}))}function o(){const{$wrapperEl:t,params:s,slides:a,activeIndex:i}=e,r=e.virtual&&s.virtual.enabled,o=s.lazy;let c=s.slidesPerView;function p(e){if(r){if(t.children(`.${s.slideClass}[data-swiper-slide-index="${e}"]`).length)return!0}else if(a[e])return!0;return!1}function u(e){return r?d(e).attr("data-swiper-slide-index"):d(e).index()}if("auto"===c&&(c=0),n||(n=!0),e.params.watchSlidesProgress)t.children(`.${s.slideVisibleClass}`).each((e=>{l(r?d(e).attr("data-swiper-slide-index"):d(e).index())}));else if(c>1)for(let e=i;e<i+c;e+=1)p(e)&&l(e);else l(i);if(o.loadPrevNext)if(c>1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){const e=o.loadPrevNextAmount,t=c,s=Math.min(i+t+Math.max(e,t),a.length),r=Math.max(i-Math.max(t,e),
40590);for(let e=i+c;e<s;e+=1)p(e)&&l(e);for(let e=r;e<i;e+=1)p(e)&&l(e)}else{const e=t.children(`.${s.slideNextClass}`);e.length>0&&l(u(e));const a=t.children(`.${s.slidePrevClass}`);a.length>0&&l(u(a))}}function c(){const t=r();if(!e||e.destroyed)return;const s=e.params.lazy.scrollingElement?d(e.params.lazy.scrollingElement):d(t),a=s[0]===t,n=a?t.innerWidth:s[0].offsetWidth,l=a?t.innerHeight:s[0].offsetHeight,p=e.$el.offset(),{rtlTranslate:u}=e;let h=!1;u&&(p.left-=e.$el[0].scrollLeft);const m=[[p.left,p.top],[p.left+e.width,p.top],[p.left,p.top+e.height],[p.left+e.width,p.top+e.height]];for(let e=0;e<m.length;e+=1){const t=m[e];if(t[0]>=0&&t[0]<=n&&t[1]>=0&&t[1]<=l){if(0===t[0]&&0===t[1])continue;h=!0}}const f=!("touchstart"!==e.touchEvents.start||!e.support.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1};h?(o(),s.off("scroll",c,f)):i||(i=!0,s.on("scroll",c,f))}s("beforeInit",(()=>{e.params.lazy.enabled&&e.params.preloadImages&&(e.params.preloadImages=!1)})),s("init",(()=>{e.params.lazy.enabled&&(e.params.lazy.checkInView?c():o())})),s("scroll",(()=>{e.params.freeMode&&e.params.freeMode.enabled&&!e.params.freeMode.sticky&&o()})),s("scrollbarDragMove resize _freeModeNoMomentumRelease",(()=>{e.params.lazy.enabled&&(e.params.lazy.checkInView?c():o())})),s("transitionStart",(()=>{e.params.lazy.enabled&&(e.params.lazy.loadOnTransitionStart||!e.params.lazy.loadOnTransitionStart&&!n)&&(e.params.lazy.checkInView?c():o())})),s("transitionEnd",(()=>{e.params.lazy.enabled&&!e.params.lazy.loadOnTransitionStart&&(e.params.lazy.checkInView?c():o())})),s("slideChange",(()=>{const{lazy:t,cssMode:s,watchSlidesProgress:a,touchReleaseOnEdges:i,resistanceRatio:r}=e.params;t.enabled&&(s||a&&(i||0===r))&&o()})),Object.assign(e.lazy,{load:o,loadInSlide:l})},function({swiper:e,extendParams:t,on:s}){function a(e,t){const s=function(){let e,t,s;return(a,i)=>{for(t=-1,e=a.length;e-t>1;)s=e+t>>1,a[s]<=i?t=s:e=s;return e}}();let a,i;return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(i=s(this.x,e),a=i-1,(e-this.x[a])*(this.y[i]-this.y[a])/(this.x[i]-this.x[a])+this.y[a]):0},this}function i(){e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)}t({controller:{control:void 0,inverse:!1,by:"slide"}}),e.controller={control:void 0},s("beforeInit",(()=>{e.controller.control=e.params.controller.control})),s("update",(()=>{i()})),s("resize",(()=>{i()})),s("observerUpdate",(()=>{i()})),s("setTranslate",((t,s,a)=>{e.controller.control&&e.controller.setTranslate(s,a)})),s("setTransition",((t,s,a)=>{e.controller.control&&e.controller.setTransition(s,a)})),Object.assign(e.controller,{setTranslate:function(t,s){const i=e.controller.control;let r,n;const l=e.constructor;function o(t){const s=e.rtlTranslate?-e.translate:e.translate;"slide"===e.params.controller.by&&(!function(t){e.controller.spline||(e.controller.spline=e.params.loop?new a(e.slidesGrid,t.slidesGrid):new a(e.snapGrid,t.snapGrid))}(t),n=-e.controller.spline.interpolate(-s)),n&&"container"!==e.params.controller.by||(r=(t.maxTranslate()-t.minTranslate())/(e.maxTranslate()-e.minTranslate()),n=(s-e.minTranslate())*r+t.minTranslate()),e.params.controller.inverse&&(n=t.maxTranslate()-n),t.updateProgress(n),t.setTranslate(n,e),t.updateActiveIndex(),t.updateSlidesClasses()}if(Array.isArray(i))for(let e=0;e<i.length;e+=1)i[e]!==s&&i[e]instanceof l&&o(i[e]);else i instanceof l&&s!==i&&o(i)},setTransition:function(t,s){const a=e.constructor,i=e.controller.control;let r;function n(s){s.setTransition(t,e),0!==t&&(s.transitionStart(),s.params.autoHeight&&p((()=>{s.updateAutoHeight()})),s.$wrapperEl.transitionEnd((()=>{i&&(s.params.loop&&"slide"===e.params.controller.by&&s.loopFix(),s.transitionEnd())})))}if(Array.isArray(i))for(r=0;r<i.length;r+=1)i[r]!==s&&i[r]instanceof a&&n(i[r]);else i instanceof a&&s!==i&&n(i)}})},function({swiper:e,extendParams:t,on:s}){t({a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",slideLabelMessage:"{{index}} / {{slidesLength}}",containerMessage:null,containerRoleDescriptionMessage:null,itemRoleDescriptionMessage:null,slideRole:"group"}});let a=null;function i(e){const t=a;0!==t.length&&(t.html(""),t.html(e))}function r(e){e.attr("tabIndex","0")}function n(e){e.attr("tabIndex","-1")}function l(e,t){e.attr("role",t)}function o(e,t){e.attr("aria-roledescription",t)}function c(e,t){e.attr("aria-label",t)}function p(e){e.attr("aria-disabled",!0)}function u(e){e.attr("aria-disabled",!1)}function h(t){if(13!==t.keyCode&&32!==t.keyCode)return;const s=e.params.a11y,a=d(t.target);e.navigation&&e.navigation.$nextEl&&a.is(e.navigation.$nextEl)&&(e.isEnd&&!e.params.loop||e.slideNext(),e.isEnd?i(s.lastSlideMessage):i(s.nextSlideMessage)),e.navigation&&e.navigation.$prevEl&&a.is(e.navigation.$prevEl)&&(e.isBeginning&&!e.params.loop||e.slidePrev(),e.isBeginning?i(s.firstSlideMessage):i(s.prevSlideMessage)),e.pagination&&a.is(W(e.params.pagination.bulletClass))&&a[0].click()}function m(){if(e.params.loop||!e.navigation)return;const{$nextEl:t,$prevEl:s}=e.navigation;s&&s.length>0&&(e.isBeginning?(p(s),n(s)):(u(s),r(s))),t&&t.length>0&&(e.isEnd?(p(t),n(t)):(u(t),r(t)))}function f(){return e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length}const g=(e,t,s)=>
4059{r(e),"BUTTON"!==e[0].tagName&&(l(e,"button"),e.on("keydown",h)),c(e,s),function(e,t){e.attr("aria-controls",t)}(e,t)};function v(){const t=e.params.a11y;e.$el.append(a);const s=e.$el;t.containerRoleDescriptionMessage&&o(s,t.containerRoleDescriptionMessage),t.containerMessage&&c(s,t.containerMessage);const i=e.$wrapperEl,r=i.attr("id")||`swiper-wrapper-${function(e=16){return"x".repeat(e).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}(16)}`,n=e.params.autoplay&&e.params.autoplay.enabled?"off":"polite";var p;p=r,i.attr("id",p),function(e,t){e.attr("aria-live",t)}(i,n),t.itemRoleDescriptionMessage&&o(d(e.slides),t.itemRoleDescriptionMessage),l(d(e.slides),t.slideRole);const u=e.params.loop?e.slides.filter((t=>!t.classList.contains(e.params.slideDuplicateClass))).length:e.slides.length;let m,v;e.slides.each(((s,a)=>{const i=d(s),r=e.params.loop?parseInt(i.attr("data-swiper-slide-index"),10):a;c(i,t.slideLabelMessage.replace(/\{\{index\}\}/,r+1).replace(/\{\{slidesLength\}\}/,u))})),e.navigation&&e.navigation.$nextEl&&(m=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(v=e.navigation.$prevEl),m&&m.length&&g(m,r,t.nextSlideMessage),v&&v.length&&g(v,r,t.prevSlideMessage),f()&&e.pagination.$el.on("keydown",W(e.params.pagination.bulletClass),h)}s("beforeInit",(()=>{a=d(`<span class="${e.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`)})),s("afterInit",(()=>{e.params.a11y.enabled&&(v(),m())})),s("toEdge",(()=>{e.params.a11y.enabled&&m()})),s("fromEdge",(()=>{e.params.a11y.enabled&&m()})),s("paginationUpdate",(()=>{e.params.a11y.enabled&&function(){const t=e.params.a11y;f()&&e.pagination.bullets.each((s=>{const a=d(s);r(a),e.params.pagination.renderBullet||(l(a,"button"),c(a,t.paginationBulletMessage.replace(/\{\{index\}\}/,a.index()+1)))}))}()})),s("destroy",(()=>{e.params.a11y.enabled&&function(){let t,s;a&&a.length>0&&a.remove(),e.navigation&&e.navigation.$nextEl&&(t=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(s=e.navigation.$prevEl),t&&t.off("keydown",h),s&&s.off("keydown",h),f()&&e.pagination.$el.off("keydown",W(e.params.pagination.bulletClass),h)}()}))},function({swiper:e,extendParams:t,on:s}){t({history:{enabled:!1,root:"",replaceState:!1,key:"slides"}});let a=!1,i={};const n=e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),l=e=>{const t=r();let s;s=e?new URL(e):t.location;const a=s.pathname.slice(1).split("/").filter((e=>""!==e)),i=a.length;return{key:a[i-2],value:a[i-1]}},o=(t,s)=>{const i=r();if(!a||!e.params.history.enabled)return;let l;l=e.params.url?new URL(e.params.url):i.location;const o=e.slides.eq(s);let d=n(o.attr("data-history"));if(e.params.history.root.length>0){let s=e.params.history.root;"/"===s[s.length-1]&&(s=s.slice(0,s.length-1)),d=`${s}/${t}/${d}`}else l.pathname.includes(t)||(d=`${t}/${d}`);const c=i.history.state;c&&c.value===d||(e.params.history.replaceState?i.history.replaceState({value:d},null,d):i.history.pushState({value:d},null,d))},d=(t,s,a)=>{if(s)for(let i=0,r=e.slides.length;i<r;i+=1){const r=e.slides.eq(i);if(n(r.attr("data-history"))===s&&!r.hasClass(e.params.slideDuplicateClass)){const s=r.index();e.slideTo(s,t,a)}}else e.slideTo(0,t,a)},c=()=>{i=l(e.params.url),d(e.params.speed,e.paths.value,!1)};s("init",(()=>{e.params.history.enabled&&(()=>{const t=r();if(e.params.history){if(!t.history||!t.history.pushState)return e.params.history.enabled=!1,void(e.params.hashNavigation.enabled=!0);a=!0,i=l(e.params.url),(i.key||i.value)&&(d(0,i.value,e.params.runCallbacksOnInit),e.params.history.replaceState||t.addEventListener("popstate",c))}})()})),s("destroy",(()=>{e.params.history.enabled&&(()=>{const t=r();e.params.history.replaceState||t.removeEventListener("popstate",c)})()})),s("transitionEnd _freeModeNoMomentumRelease",(()=>{a&&o(e.params.history.key,e.activeIndex)})),s("slideChange",(()=>{a&&e.params.cssMode&&o(e.params.history.key,e.activeIndex)}))},function({swiper:e,extendParams:t,emit:s,on:i}){let n=!1;const l=a(),o=r();t({hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}});const c=()=>{s("hashChange");const t=l.location.hash.replace("#","");if(t!==e.slides.eq(e.activeIndex).attr("data-hash")){const s=e.$wrapperEl.children(`.${e.params.slideClass}[data-hash="${t}"]`).index();if(void 0===s)return;e.slideTo(s)}},p=()=>
4059{if(n&&e.params.hashNavigation.enabled)if(e.params.hashNavigation.replaceState&&o.history&&o.history.replaceState)o.history.replaceState(null,null,`#${e.slides.eq(e.activeIndex).attr("data-hash")}`||""),s("hashSet");else{const t=e.slides.eq(e.activeIndex),a=t.attr("data-hash")||t.attr("data-history");l.location.hash=a||"",s("hashSet")}};i("init",(()=>{e.params.hashNavigation.enabled&&(()=>{if(!e.params.hashNavigation.enabled||e.params.history&&e.params.history.enabled)return;n=!0;const t=l.location.hash.replace("#","");if(t){const s=0;for(let a=0,i=e.slides.length;a<i;a+=1){const i=e.slides.eq(a);if((i.attr("data-hash")||i.attr("data-history"))===t&&!i.hasClass(e.params.slideDuplicateClass)){const t=i.index();e.slideTo(t,s,e.params.runCallbacksOnInit,!0)}}}e.params.hashNavigation.watchState&&d(o).on("hashchange",c)})()})),i("destroy",(()=>{e.params.hashNavigation.enabled&&e.params.hashNavigation.watchState&&d(o).off("hashchange",c)})),i("transitionEnd _freeModeNoMomentumRelease",(()=>{n&&p()})),i("slideChange",(()=>{n&&e.params.cssMode&&p()}))},function({swiper:e,extendParams:t,on:s,emit:i}){let r;function n(){const t=e.slides.eq(e.activeIndex);let s=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(s=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),clearTimeout(r),r=p((()=>{let t;e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),t=e.slidePrev(e.params.speed,!0,!0),i("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?o():(t=e.slideTo(e.slides.length-1,e.params.speed,!0,!0),i("autoplay")):(t=e.slidePrev(e.params.speed,!0,!0),i("autoplay")):e.params.loop?(e.loopFix(),t=e.slideNext(e.params.speed,!0,!0),i("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?o():(t=e.slideTo(0,e.params.speed,!0,!0),i("autoplay")):(t=e.slideNext(e.params.speed,!0,!0),i("autoplay")),(e.params.cssMode&&e.autoplay.running||!1===t)&&n()}),s)}function l(){return void 0===r&&(!e.autoplay.running&&(e.autoplay.running=!0,i("autoplayStart"),n(),!0))}function o(){return!!e.autoplay.running&&(void 0!==r&&(r&&(clearTimeout(r),r=void 0),e.autoplay.running=!1,i("autoplayStop"),!0))}function d(t){e.autoplay.running&&(e.autoplay.paused||(r&&clearTimeout(r),e.autoplay.paused=!0,0!==t&&e.params.autoplay.waitForTransition?["transitionend","webkitTransitionEnd"].forEach((t=>{e.$wrapperEl[0].addEventListener(t,u)})):(e.autoplay.paused=!1,n())))}function c(){const t=a();"hidden"===t.visibilityState&&e.autoplay.running&&d(),"visible"===t.visibilityState&&e.autoplay.paused&&(n(),e.autoplay.paused=!1)}function u(t){e&&!e.destroyed&&e.$wrapperEl&&t.target===e.$wrapperEl[0]&&(["transitionend","webkitTransitionEnd"].forEach((t=>{e.$wrapperEl[0].removeEventListener(t,u)})),e.autoplay.paused=!1,e.autoplay.running?n():o())}function h(){e.params.autoplay.disableOnInteraction?o():d(),["transitionend","webkitTransitionEnd"].forEach((t=>{e.$wrapperEl[0].removeEventListener(t,u)}))}function m(){e.params.autoplay.disableOnInteraction||(e.autoplay.paused=!1,n())}e.autoplay={running:!1,paused:!1},t({autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}}),s("init",(()=>{if(e.params.autoplay.enabled){l();a().addEventListener("visibilitychange",c),e.params.autoplay.pauseOnMouseEnter&&(e.$el.on("mouseenter",h),e.$el.on("mouseleave",m))}})),s("beforeTransitionStart",((t,s,a)=>{e.autoplay.running&&(a||!e.params.autoplay.disableOnInteraction?e.autoplay.pause(s):o())})),s("sliderFirstMove",(()=>{e.autoplay.running&&(e.params.autoplay.disableOnInteraction?o():d())})),s("touchEnd",(()=>{e.params.cssMode&&e.autoplay.paused&&!e.params.autoplay.disableOnInteraction&&n()})),s("destroy",(()=>{e.$el.off("mouseenter",h),e.$el.off("mouseleave",m),e.autoplay.running&&o();a().removeEventListener("visibilitychange",c)})),Object.assign(e.autoplay,{pause:d,run:n,start:l,stop:o})},function({swiper:e,extendParams:t,on:s}){t({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let a=!1,i=!1;function r(){const t=e.thumbs.swiper;if(!t)return;const s=t.clickedIndex,a=t.clickedSlide;if(a&&d(a).hasClass(e.params.thumbs.slideThumbActiveClass))return;if(null==s)return;let i;if(i=t.params.loop?parseInt(d(t.clickedSlide).attr("data-swiper-slide-index"),10):s,e.params.loop){let t=e.activeIndex;e.slides.eq(t).hasClass(e.params.slideDuplicateClass)&&(e.loopFix(),e._clientLeft=e.$wrapperEl[0].clientLeft,t=e.activeIndex);const s=e.slides.eq(t).prevAll(`[data-swiper-slide-index="${i}"]`).eq(0).index(),a=e.slides.eq(t).nextAll(`[data-swiper-slide-index="${i}"]`).eq(0).index();i=void 0===s?a:void 0===a?s:a-t<t-s?a:s}e.slideTo(i)}function n(){const{thumbs:t}=e.params;if(a)return!1;a=!0;const s=e.constructor;if(t.swiper instanceof s)e.thumbs.swiper=t.swiper,Object.assign(e.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),Object.assign(e.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1});else if(m(t.swiper)){const a=Object.assign({},t.swiper);Object.assign(a,{watchSlidesProgress:!0,slideToClickedSlide:!1}),e.thumbs.swiper=new s(a),i=!0}return e.thumbs.swiper.$el.addClass(e.params.thumbs.thumbsContainerClass),e.thumbs.swiper.on("tap",r),!0}function l(t){const s=e.thumbs.swiper;if(!s)return;const a="auto"===s.params.slidesPerView?s.slidesPerViewDynamic():s.params.slidesPerView,i=e.params.thumbs.autoScrollOffset,r=i&&!s.params.loop;if(e.realIndex!==s.realIndex||r){let n,l,o=s.activeIndex;if(s.params.loop){s.slides.eq(o).hasClass(s.params.slideDuplicateClass)&&(s.loopFix(),s._clientLeft=s.$wrapperEl[0].clientLeft,o=s.activeIndex);const t=s.slides.eq(o).prevAll(`[data-swiper-slide-index="${e.realIndex}"]`).eq(0).index(),a=s.slides.eq(o).nextAll(`[data-swiper-slide-index="${e.realIndex}"]`).eq(0).index();n=void 0===t?a:void 0===a?t:a-o==o-t?s.params.slidesPerGroup>1?a:o:a-o<o-t?a:t,l=e.activeIndex>e.previousIndex?"next":"prev"}else n=e.realIndex,l=n>e.previousIndex?"next":"prev";r&&(n+="next"===l?i:-1*i),s.visibleSlidesIndexes&&s.visibleSlidesIndexes.indexOf(n)<0&&(s.params.centeredSlides?n=n>o?n-Math.floor(a/2)+1:n+Math.floor(a/2)-1:n>o&&s.params.slidesPerGroup,s.slideTo(n,t?0:void 0))}let n=1;const l=e.params.thumbs.slideThumbActiveClass;if(e.params.slidesPerView>1&&!e.params.centeredSlides&&(n=e.params.slidesPerView),e.params.thumbs.multipleActiveThumbs||(n=1),n=Math.floor(n),s.slides.removeClass(l),s.params.loop||s.params.virtual&&s.params.virtual.enabled)for(let t=0;t<n;t+=1)s.$wrapperEl.children(`[data-swiper-slide-index="${e.realIndex+t}"]`).addClass(l);else for(let t=0;t<n;t+=1)s.slides.eq(e.realIndex+t).addClass(l)}e.thumbs={swiper:null},s("beforeInit",(()=>{const{thumbs:t}=e.params;t&&t.swiper&&(n(),l(!0))})),s("slideChange update resize observerUpdate",(()=>{e.thumbs.swiper&&l()})),s("setTransition",((t,s)=>{const a=e.thumbs.swiper;a&&a.setTransition(s)})),s("beforeDestroy",(()=>{const t=e.thumbs.swiper;t&&i&&t&&t.destroy()})),Object.assign(e.thumbs,{init:n,update:l})},function({swiper:e,extendParams:t,emit:s,once:a}){t({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}}),Object.assign(e,{freeMode:{onTouchMove:function(){const{touchEventsData:t,touches:s}=e;
40590===t.velocities.length&&t.velocities.push({position:s[e.isHorizontal()?"startX":"startY"],time:t.touchStartTime}),t.velocities.push({position:s[e.isHorizontal()?"currentX":"currentY"],time:u()})},onTouchEnd:function({currentPos:t}){const{params:i,$wrapperEl:r,rtlTranslate:n,snapGrid:l,touchEventsData:o}=e,d=u()-o.touchStartTime;if(t<-e.minTranslate())e.slideTo(e.activeIndex);else if(t>-e.maxTranslate())e.slides.length<l.length?e.slideTo(l.length-1):e.slideTo(e.slides.length-1);else{if(i.freeMode.momentum){if(o.velocities.length>1){const t=o.velocities.pop(),s=o.velocities.pop(),a=t.position-s.position,r=t.time-s.time;e.velocity=a/r,e.velocity/=2,Math.abs(e.velocity)<i.freeMode.minimumVelocity&&(e.velocity=0),(r>150||u()-t.time>300)&&(e.velocity=0)}else e.velocity=0;e.velocity*=i.freeMode.momentumVelocityRatio,o.velocities.length=0;let t=1e3*i.freeMode.momentumRatio;const d=e.velocity*t;let c=e.translate+d;n&&(c=-c);let p,h=!1;const m=20*Math.abs(e.velocity)*i.freeMode.momentumBounceRatio;let f;if(c<e.maxTranslate())i.freeMode.momentumBounce?(c+e.maxTranslate()<-m&&(c=e.maxTranslate()-m),p=e.maxTranslate(),h=!0,o.allowMomentumBounce=!0):c=e.maxTranslate(),i.loop&&i.centeredSlides&&(f=!0);else if(c>e.minTranslate())i.freeMode.momentumBounce?(c-e.minTranslate()>m&&(c=e.minTranslate()+m),p=e.minTranslate(),h=!0,o.allowMomentumBounce=!0):c=e.minTranslate(),i.loop&&i.centeredSlides&&(f=!0);else if(i.freeMode.sticky){let t;for(let e=0;e<l.length;e+=1)if(l[e]>-c){t=e;break}c=Math.abs(l[t]-c)<Math.abs(l[t-1]-c)||"next"===e.swipeDirection?l[t]:l[t-1],c=-c}if(f&&a("transitionEnd",(()=>{e.loopFix()})),0!==e.velocity){if(t=n?Math.abs((-c-e.translate)/e.velocity):Math.abs((c-e.translate)/e.velocity),i.freeMode.sticky){const s=Math.abs((n?-c:c)-e.translate),a=e.slidesSizesGrid[e.activeIndex];t=s<a?i.speed:s<2*a?1.5*i.speed:2.5*i.speed}}else if(i.freeMode.sticky)return void e.slideToClosest();i.freeMode.momentumBounce&&h?(e.updateProgress(p),e.setTransition(t),e.setTranslate(c),e.transitionStart(!0,e.swipeDirection),e.animating=!0,r.transitionEnd((()=>{e&&!e.destroyed&&o.allowMomentumBounce&&(s("momentumBounce"),e.setTransition(i.speed),setTimeout((()=>{e.setTranslate(p),r.transitionEnd((()=>{e&&!e.destroyed&&e.transitionEnd()}))}),0))}))):e.velocity?(s("_freeModeNoMomentumRelease"),e.updateProgress(c),e.setTransition(t),e.setTranslate(c),e.transitionStart(!0,e.swipeDirection),e.animating||(e.animating=!0,r.transitionEnd((()=>{e&&!e.destroyed&&e.transitionEnd()})))):e.updateProgress(c),e.updateActiveIndex(),e.updateSlidesClasses()}else{if(i.freeMode.sticky)return void e.slideToClosest();i.freeMode&&s("_freeModeNoMomentumRelease")}(!i.freeMode.momentum||d>=i.longSwipesMs)&&(e.updateProgress(),e.updateActiveIndex(),e.updateSlidesClasses())}}}})},function({swiper:e,extendParams:t}){let s,a,i;t({grid:{rows:1,fill:"column"}}),e.grid={initSlides:t=>{const{slidesPerView:r}=e.params,{rows:n,fill:l}=e.params.grid;a=s/n,i=Math.floor(t/n),s=Math.floor(t/n)===t/n?t:Math.ceil(t/n)*n,"auto"!==r&&"row"===l&&(s=Math.max(s,r*n))},updateSlide:(t,r,n,l)=>{const{slidesPerGroup:o,spaceBetween:d}=e.params,{rows:c,fill:p}=e.params.grid;let u,h,m;if("row"===p&&o>1){const e=Math.floor(t/(o*c)),a=t-c*o*e,i=0===e?o:Math.min(Math.ceil((n-e*c*o)/c),o);m=Math.floor(a/i),h=a-m*i+e*o,u=h+m*s/c,r.css({"-webkit-order":u,order:u})}else"column"===p?(h=Math.floor(t/c),m=t-h*c,(h>i||h===i&&m===c-1)&&(m+=1,m>=c&&(m=0,h+=1))):(m=Math.floor(t/a),h=t-m*a);r.css(l("margin-top"),0!==m?d&&`${d}px`:"")},updateWrapperSize:(t,a,i)=>{const{spaceBetween:r,centeredSlides:n,roundLengths:l}=e.params,{rows:o}=e.params.grid;if(e.virtualSize=(t+r)*s,e.virtualSize=Math.ceil(e.virtualSize/o)-r,e.$wrapperEl.css({[i("width")]:`${e.virtualSize+r}px`}),n){a.splice(0,a.length);const t=[];for(let s=0;s<a.length;s+=1){let i=a[s];l&&(i=Math.floor(i)),a[s]<e.virtualSize+a[0]&&t.push(i)}a.push(...t)}}}},function({swiper:e}){Object.assign(e,{appendSlide:R.bind(e),prependSlide:j.bind(e),addSlide:_.bind(e),removeSlide:V.bind(e),removeAllSlides:q.bind(e)})},function({swiper:e,extendParams:t,on:s}){t({fadeEffect:{crossFade:!1,transformEl:null}}),F({effect:"fade",swiper:e,on:s,setTranslate:()=>{const{slides:t}=e,s=e.params.fadeEffect;for(let a=0;a<t.length;a+=1){const t=e.slides.eq(a);let i=-t[0].swiperSlideOffset;e.params.virtualTranslate||(i-=e.translate);let r=0;e.isHorizontal()||(r=i,i=0);const n=e.params.fadeEffect.crossFade?Math.max(1-Math.abs(t[0].progress),0):1+Math.min(Math.max(t[0].progress,-1),0);
4059U(s,t).css({opacity:n}).transform(`translate3d(${i}px, ${r}px, 0px)`)}},setTransition:t=>{const{transformEl:s}=e.params.fadeEffect;(s?e.slides.find(s):e.slides).transition(t),K({swiper:e,duration:t,transformEl:s,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!e.params.cssMode})})},function({swiper:e,extendParams:t,on:s}){t({cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}}),F({effect:"cube",swiper:e,on:s,setTranslate:()=>{const{$el:t,$wrapperEl:s,slides:a,width:i,height:r,rtlTranslate:n,size:l,browser:o}=e,c=e.params.cubeEffect,p=e.isHorizontal(),u=e.virtual&&e.params.virtual.enabled;let h,m=0;c.shadow&&(p?(h=s.find(".swiper-cube-shadow"),0===h.length&&(h=d('<div class="swiper-cube-shadow"></div>'),s.append(h)),h.css({height:`${i}px`})):(h=t.find(".swiper-cube-shadow"),0===h.length&&(h=d('<div class="swiper-cube-shadow"></div>'),t.append(h))));for(let e=0;e<a.length;e+=1){const t=a.eq(e);let s=e;u&&(s=parseInt(t.attr("data-swiper-slide-index"),10));let i=90*s,r=Math.floor(i/360);n&&(i=-i,r=Math.floor(-i/360));const o=Math.max(Math.min(t[0].progress,1),-1);let h=0,f=0,g=0;s%4==0?(h=4*-r*l,g=0):(s-1)%4==0?(h=0,g=4*-r*l):(s-2)%4==0?(h=l+4*r*l,g=l):(s-3)%4==0&&(h=-l,g=3*l+4*l*r),n&&(h=-h),p||(f=h,h=0);const v=`rotateX(${p?0:-i}deg) rotateY(${p?i:0}deg) translate3d(${h}px, ${f}px, ${g}px)`;if(o<=1&&o>-1&&(m=90*s+90*o,n&&(m=90*-s-90*o)),t.transform(v),c.slideShadows){let e=p?t.find(".swiper-slide-shadow-left"):t.find(".swiper-slide-shadow-top"),s=p?t.find(".swiper-slide-shadow-right"):t.find(".swiper-slide-shadow-bottom");0===e.length&&(e=d(`<div class="swiper-slide-shadow-${p?"left":"top"}"></div>`),t.append(e)),0===s.length&&(s=d(`<div class="swiper-slide-shadow-${p?"right":"bottom"}"></div>`),t.append(s)),e.length&&(e[0].style.opacity=Math.max(-o,0)),s.length&&(s[0].style.opacity=Math.max(o,0))}}if(s.css({"-webkit-transform-origin":`50% 50% -${l/2}px`,"transform-origin":`50% 50% -${l/2}px`}),c.shadow)if(p)h.transform(`translate3d(0px, ${i/2+c.shadowOffset}px, ${-i/2}px) rotateX(90deg) rotateZ(0deg) scale(${c.shadowScale})`);else{const e=Math.abs(m)-90*Math.floor(Math.abs(m)/90),t=1.5-(Math.sin(2*e*Math.PI/360)/2+Math.cos(2*e*Math.PI/360)/2),s=c.shadowScale,a=c.shadowScale/t,i=c.shadowOffset;h.transform(`scale3d(${s}, 1, ${a}) translate3d(0px, ${r/2+i}px, ${-r/2/a}px) rotateX(-90deg)`)}const f=o.isSafari||o.isWebView?-l/2:0;s.transform(`translate3d(0px,0,${f}px) rotateX(${e.isHorizontal()?0:m}deg) rotateY(${e.isHorizontal()?-m:0}deg)`)},setTransition:t=>{const{$el:s,slides:a}=e;a.transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t),e.params.cubeEffect.shadow&&!e.isHorizontal()&&s.find(".swiper-cube-shadow").transition(t)},perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0})})},function({swiper:e,extendParams:t,on:s}){t({flipEffect:{slideShadows:!0,limitRotation:!0,transformEl:null}}),F({effect:"flip",swiper:e,on:s,setTranslate:()=>{const{slides:t,rtlTranslate:s}=e,a=e.params.flipEffect;for(let i=0;i<t.length;i+=1){const r=t.eq(i);let n=r[0].progress;e.params.flipEffect.limitRotation&&(n=Math.max(Math.min(r[0].progress,1),-1));const l=r[0].swiperSlideOffset;let o=-180*n,d=0,c=e.params.cssMode?-l-e.translate:-l,p=0;if(e.isHorizontal()?s&&(o=-o):(p=c,c=0,d=-o,o=0),r[0].style.zIndex=-Math.abs(Math.round(n))+t.length,a.slideShadows){let t=e.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),s=e.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===t.length&&(t=Z(a,r,e.isHorizontal()?"left":"top")),0===s.length&&(s=Z(a,r,e.isHorizontal()?"right":"bottom")),t.length&&(t[0].style.opacity=Math.max(-n,0)),s.length&&(s[0].style.opacity=Math.max(n,0))}const u=`translate3d(${c}px, ${p}px, 0px) rotateX(${d}deg) rotateY(${o}deg)`;U(a,r).transform(u)}},setTransition:t=>{const{transformEl:s}=e.params.flipEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t),K({swiper:e,duration:t,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!e.params.cssMode})})},function({swiper:e,extendParams:t,on:s}){t({coverflowEffect:{rotate:50,stretch:0,depth:100,scale:1,modifier:1,slideShadows:!0,transformEl:null}}),F({effect:"coverflow",swiper:e,on:s,setTranslate:()=>{const{width:t,height:s,slides:a,slidesSizesGrid:i}=e,r=e.params.coverflowEffect,n=e.isHorizontal(),l=e.translate,o=n?t/2-l:s/2-l,d=n?r.rotate:-r.rotate,c=r.depth;for(let e=0,t=a.length;e<t;e+=1){const t=a.eq(e),s=i[e],l=(o-t[0].swiperSlideOffset-s/2)/s*r.modifier;let p=n?d*l:0,u=n?0:d*l,h=-c*Math.abs(l),m=r.stretch;"string"==typeof m&&-1!==m.indexOf("%")&&(m=parseFloat(r.stretch)/100*s);let f=n?0:m*l,g=n?m*l:0,v=1-(1-r.scale)*Math.abs(l);Math.abs(g)<.001&&(g=0),Math.abs(f)<.001&&(f=0),Math.abs(h)<.001&&(h=0),Math.abs(p)<.001&&(p=0),Math.abs(u)<.001&&(u=0),Math.abs(v)<.001&&(v=0);const w=`translate3d(${g}px,${f}px,${h}px)  rotateX(${u}deg) rotateY(${p}deg) scale(${v})`;if(U(r,t).transform(w),t[0].style.zIndex=1-Math.abs(Math.round(l)),r.slideShadows){let e=n?t.find(".swiper-slide-shadow-left"):t.find(".swiper-slide-shadow-top"),s=n?t.find(".swiper-slide-shadow-right"):t.find(".swiper-slide-shadow-bottom");0===e.length&&(e=Z(r,t,n?"left":"top")),0===s.length&&(s=Z(r,t,n?"right":"bottom")),e.length&&(e[0].style.opacity=l>0?l:0),s.length&&(s[0].style.opacity=-l>0?-l:0)}}},setTransition:t=>{const{transformEl:s}=e.params.coverflowEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t)},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0})})},function({swiper:e,extendParams:t,on:s}){t({creativeEffect:{transformEl:null,limitProgress:1,shadowPerProgress:!1,progressMultiplier:1,perspective:!0,prev:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1},next:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1}}});const a=e=>"string"==typeof e?e:`${e}px`;F({effect:"creative",swiper:e,on:s,setTranslate:()=>{const{slides:t,$wrapperEl:s,slidesSizesGrid:i}=e,r=e.params.creativeEffect,{progressMultiplier:n}=r,l=e.params.centeredSlides;if(l){const t=i[0]/2-e.params.slidesOffsetBefore||0;s.transform(`translateX(calc(50% - ${t}px))`)}for(let s=0;s<t.length;s+=1){const i=t.eq(s),o=i[0].progress,d=Math.min(Math.max(i[0].progress,-r.limitProgress),r.limitProgress);let c=d;l||(c=Math.min(Math.max(i[0].originalProgress,-r.limitProgress),r.limitProgress));const p=i[0].swiperSlideOffset,u=[e.params.cssMode?-p-e.translate:-p,0,0],h=[0,0,0];let m=!1;e.isHorizontal()||(u[1]=u[0],u[0]=0);
4059let f={translate:[0,0,0],rotate:[0,0,0],scale:1,opacity:1};d<0?(f=r.next,m=!0):d>0&&(f=r.prev,m=!0),u.forEach(((e,t)=>{u[t]=`calc(${e}px + (${a(f.translate[t])} * ${Math.abs(d*n)}))`})),h.forEach(((e,t)=>{h[t]=f.rotate[t]*Math.abs(d*n)})),i[0].style.zIndex=-Math.abs(Math.round(o))+t.length;const g=u.join(", "),v=`rotateX(${h[0]}deg) rotateY(${h[1]}deg) rotateZ(${h[2]}deg)`,w=c<0?`scale(${1+(1-f.scale)*c*n})`:`scale(${1-(1-f.scale)*c*n})`,b=c<0?1+(1-f.opacity)*c*n:1-(1-f.opacity)*c*n,x=`translate3d(${g}) ${v} ${w}`;if(m&&f.shadow||!m){let e=i.children(".swiper-slide-shadow");if(0===e.length&&f.shadow&&(e=Z(r,i)),e.length){const t=r.shadowPerProgress?d*(1/r.limitProgress):d;e[0].style.opacity=Math.min(Math.max(Math.abs(t),0),1)}}const y=U(r,i);y.transform(x).css({opacity:b}),f.origin&&y.css("transform-origin",f.origin)}},setTransition:t=>{const{transformEl:s}=e.params.creativeEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow").transition(t),K({swiper:e,duration:t,transformEl:s,allSlides:!0})},perspective:()=>e.params.creativeEffect.perspective,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!e.params.cssMode})})},function({swiper:e,extendParams:t,on:s}){t({cardsEffect:{slideShadows:!0,transformEl:null}}),F({effect:"cards",swiper:e,on:s,setTranslate:()=>{const{slides:t,activeIndex:s}=e,a=e.params.cardsEffect,{startTranslate:i,isTouched:r}=e.touchEventsData,n=e.translate;for(let l=0;l<t.length;l+=1){const o=t.eq(l),d=o[0].progress,c=Math.min(Math.max(d,-4),4);let p=o[0].swiperSlideOffset;e.params.centeredSlides&&!e.params.cssMode&&e.$wrapperEl.transform(`translateX(${e.minTranslate()}px)`),e.params.centeredSlides&&e.params.cssMode&&(p-=t[0].swiperSlideOffset);let u=e.params.cssMode?-p-e.translate:-p,h=0;const m=-100*Math.abs(c);let f=1,g=-2*c,v=8-.75*Math.abs(c);const w=(l===s||l===s-1)&&c>0&&c<1&&(r||e.params.cssMode)&&n<i,b=(l===s||l===s+1)&&c<0&&c>-1&&(r||e.params.cssMode)&&n>i;if(w||b){const e=(1-Math.abs((Math.abs(c)-.5)/.5))**.5;g+=-28*c*e,f+=-.5*e,v+=96*e,h=-25*e*Math.abs(c)+"%"}if(u=c<0?`calc(${u}px + (${v*Math.abs(c)}%))`:c>0?`calc(${u}px + (-${v*Math.abs(c)}%))`:`${u}px`,!e.isHorizontal()){const e=h;h=u,u=e}const x=`\n        translate3d(${u}, ${h}, ${m}px)\n        rotateZ(${g}deg)\n        scale(${c<0?""+(1+(1-f)*c):""+(1-(1-f)*c)})\n      `;if(a.slideShadows){let e=o.find(".swiper-slide-shadow");0===e.length&&(e=Z(a,o)),e.length&&(e[0].style.opacity=Math.min(Math.max((Math.abs(c)-.5)/.5,0),1))}o[0].style.zIndex=-Math.abs(Math.round(d))+t.length;U(a,o).transform(x)}},setTransition:t=>{const{transformEl:s}=e.params.cardsEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow").transition(t),K({swiper:e,duration:t,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!e.params.cssMode})})}];return H.use(J),H}));
4060//# sourceMappingURL=swiper-bundle.min.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.