Difference between revisions of "Team:Danzi Kesh 8"

Line 265: Line 265:
 
   </script>
 
   </script>
  
 
<script type="text/javascript">
 
 
/*!
 
* Webflow: Front-end site library
 
* @license MIT
 
* Inline scripts may access the api using an async handler:
 
*  var Webflow = Webflow || [];
 
*  Webflow.push(readyFunction);
 
*/
 
/******/ (function(modules) { // webpackBootstrap
 
/******/ // The module cache
 
/******/ var installedModules = {};
 
 
/******/ // The require function
 
/******/ function __webpack_require__(moduleId) {
 
 
/******/ // Check if module is in cache
 
/******/ if(installedModules[moduleId])
 
/******/ return installedModules[moduleId].exports;
 
 
/******/ // Create a new module (and put it into the cache)
 
/******/ var module = installedModules[moduleId] = {
 
/******/ exports: {},
 
/******/ id: moduleId,
 
/******/ loaded: false
 
/******/ };
 
 
/******/ // Execute the module function
 
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
 
 
/******/ // Flag the module as loaded
 
/******/ module.loaded = true;
 
 
/******/ // Return the exports of the module
 
/******/ return module.exports;
 
/******/ }
 
 
 
/******/ // expose the modules object (__webpack_modules__)
 
/******/ __webpack_require__.m = modules;
 
 
/******/ // expose the module cache
 
/******/ __webpack_require__.c = installedModules;
 
 
/******/ // __webpack_public_path__
 
/******/ __webpack_require__.p = "/";
 
 
/******/ // Load entry module and return exports
 
/******/ return __webpack_require__(0);
 
/******/ })
 
/************************************************************************/
 
/******/ ([
 
/* 0 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
__webpack_require__(4);
 
__webpack_require__(5);
 
__webpack_require__(6);
 
__webpack_require__(7);
 
__webpack_require__(8);
 
__webpack_require__(9);
 
__webpack_require__(1);
 
__webpack_require__(10);
 
__webpack_require__(11);
 
__webpack_require__(12);
 
__webpack_require__(13);
 
__webpack_require__(14);
 
__webpack_require__(15);
 
__webpack_require__(16);
 
module.exports = __webpack_require__(17);
 
 
 
/***/ },
 
/* 1 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Core site library
 
*/
 
 
var Webflow = {};
 
var modules = {};
 
var primary = [];
 
var secondary = window.Webflow || [];
 
var $ = window.jQuery;
 
var $win = $(window);
 
var $doc = $(document);
 
var isFunction = $.isFunction;
 
var _ = Webflow._ = __webpack_require__(18);
 
var tram = __webpack_require__(3) && $.tram;
 
var domready = false;
 
var destroyed = false;
 
var Modernizr = window.Modernizr;
 
var noop = function() {};
 
tram.config.hideBackface = false;
 
tram.config.keepInherited = true;
 
 
/**
 
* Webflow.define - Define a named module
 
* @param  {string} name
 
* @param  {function} factory
 
* @return {object}
 
*/
 
Webflow.define = function(name, factory) {
 
  if (modules[name]) unbindModule(modules[name]);
 
  var instance = modules[name] = factory($, _) || {};
 
  bindModule(instance);
 
  return instance;
 
};
 
 
/**
 
* Webflow.require - Require a named module
 
* @param  {string} name
 
* @return {object}
 
*/
 
Webflow.require = function(name) {
 
  return modules[name];
 
};
 
 
function bindModule(module) {
 
  // If running in Webflow app, subscribe to design/preview events
 
  if (Webflow.env()) {
 
    isFunction(module.design) && $win.on('__wf_design', module.design);
 
    isFunction(module.preview) && $win.on('__wf_preview', module.preview);
 
  }
 
  // Subscribe to front-end destroy event
 
  isFunction(module.destroy) && $win.on('__wf_destroy', module.destroy);
 
  // Look for ready method on module
 
  if (module.ready && isFunction(module.ready)) {
 
    addReady(module);
 
  }
 
}
 
 
function addReady(module) {
 
  // If domready has already happened, run ready method
 
  if (domready) {
 
    module.ready();
 
    return;
 
  }
 
  // Otherwise add ready method to the primary queue (only once)
 
  if (_.contains(primary, module.ready)) return;
 
  primary.push(module.ready);
 
}
 
 
function unbindModule(module) {
 
  // Unsubscribe module from window events
 
  isFunction(module.design) && $win.off('__wf_design', module.design);
 
  isFunction(module.preview) && $win.off('__wf_preview', module.preview);
 
  isFunction(module.destroy) && $win.off('__wf_destroy', module.destroy);
 
  // Remove ready method from primary queue
 
  if (module.ready && isFunction(module.ready)) {
 
    removeReady(module);
 
  }
 
}
 
 
function removeReady(module) {
 
  primary = _.filter(primary, function(readyFn) {
 
    return readyFn !== module.ready;
 
  });
 
}
 
 
/**
 
* Webflow.push - Add a ready handler into secondary queue
 
* @param {function} ready  Callback to invoke on domready
 
*/
 
Webflow.push = function(ready) {
 
  // If domready has already happened, invoke handler
 
  if (domready) {
 
    isFunction(ready) && ready();
 
    return;
 
  }
 
  // Otherwise push into secondary queue
 
  secondary.push(ready);
 
};
 
 
/**
 
* Webflow.env - Get the state of the Webflow app
 
* @param {string} mode [optional]
 
* @return {boolean}
 
*/
 
Webflow.env = function(mode) {
 
  var designFlag = window.__wf_design;
 
  var inApp = typeof designFlag !== 'undefined';
 
  if (!mode) return inApp;
 
  if (mode === 'design') return inApp && designFlag;
 
  if (mode === 'preview') return inApp && !designFlag;
 
  if (mode === 'slug') return inApp && window.__wf_slug;
 
  if (mode === 'editor') return window.WebflowEditor;
 
  if (mode === 'test') return window.__wf_test;
 
};
 
 
// Feature detects + browser sniffs  ಠ_ಠ
 
var userAgent = navigator.userAgent.toLowerCase();
 
var appVersion = navigator.appVersion.toLowerCase();
 
var touch = Webflow.env.touch = ('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch;
 
var chrome = Webflow.env.chrome = /chrome/.test(userAgent) && /Google/.test(navigator.vendor) && parseInt(appVersion.match(/chrome\/(\d+)\./)[1], 10);
 
var ios = Webflow.env.ios = Modernizr && Modernizr.ios;
 
Webflow.env.safari = /safari/.test(userAgent) && !chrome && !ios;
 
 
// Maintain current touch target to prevent late clicks on touch devices
 
var touchTarget;
 
// Listen for both events to support touch/mouse hybrid devices
 
touch && $doc.on('touchstart mousedown', function(evt) {
 
  touchTarget = evt.target;
 
});
 
 
/**
 
* Webflow.validClick - validate click target against current touch target
 
* @param  {HTMLElement} clickTarget  Element being clicked
 
* @return {Boolean}  True if click target is valid (always true on non-touch)
 
*/
 
Webflow.validClick = touch ? function(clickTarget) {
 
  return clickTarget === touchTarget || $.contains(clickTarget, touchTarget);
 
} : function() { return true; };
 
 
/**
 
* Webflow.resize, Webflow.scroll - throttled event proxies
 
*/
 
var resizeEvents = 'resize.webflow orientationchange.webflow load.webflow';
 
var scrollEvents = 'scroll.webflow ' + resizeEvents;
 
Webflow.resize = eventProxy($win, resizeEvents);
 
Webflow.scroll = eventProxy($win, scrollEvents);
 
Webflow.redraw = eventProxy();
 
 
// Create a proxy instance for throttled events
 
function eventProxy(target, types) {
 
 
  // Set up throttled method (using custom frame-based _.throttle)
 
  var handlers = [];
 
  var proxy = {};
 
  proxy.up = _.throttle(function(evt) {
 
    _.each(handlers, function(h) { h(evt); });
 
  });
 
 
  // Bind events to target
 
  if (target && types) target.on(types, proxy.up);
 
 
  /**
 
  * Add an event handler
 
  * @param  {function} handler
 
  */
 
  proxy.on = function(handler) {
 
    if (typeof handler !== 'function') return;
 
    if (_.contains(handlers, handler)) return;
 
    handlers.push(handler);
 
  };
 
 
  /**
 
  * Remove an event handler
 
  * @param  {function} handler
 
  */
 
  proxy.off = function(handler) {
 
    // If no arguments supplied, clear all handlers
 
    if (!arguments.length) {
 
      handlers = [];
 
      return;
 
    }
 
    // Otherwise, remove handler from the list
 
    handlers = _.filter(handlers, function(h) {
 
      return h !== handler;
 
    });
 
  };
 
 
  return proxy;
 
}
 
 
// Webflow.location - Wrap window.location in api
 
Webflow.location = function(url) {
 
  window.location = url;
 
};
 
 
// Webflow.app - Designer-specific methods
 
Webflow.app = Webflow.env() ? {} : null;
 
if (Webflow.app) {
 
 
  // Trigger redraw for specific elements
 
  var redraw = new Event('__wf_redraw');
 
  Webflow.app.redrawElement = function(i, el) { el.dispatchEvent(redraw); };
 
 
  // Webflow.location - Re-route location change to trigger an event
 
  Webflow.location = function(url) {
 
    window.dispatchEvent(new CustomEvent('__wf_location', { detail: url }));
 
  };
 
}
 
 
// Webflow.ready - Call primary and secondary handlers
 
Webflow.ready = function() {
 
  domready = true;
 
 
  // Restore modules after destroy
 
  if (destroyed) {
 
    restoreModules();
 
 
  // Otherwise run primary ready methods
 
  } else {
 
    _.each(primary, callReady);
 
  }
 
 
  // Run secondary ready methods
 
  _.each(secondary, callReady);
 
 
  // Trigger resize
 
  Webflow.resize.up();
 
};
 
 
function callReady(readyFn) {
 
  isFunction(readyFn) && readyFn();
 
}
 
 
function restoreModules() {
 
  destroyed = false;
 
  _.each(modules, bindModule);
 
}
 
 
/**
 
* Webflow.load - Add a window load handler that will run even if load event has already happened
 
* @param  {function} handler
 
*/
 
var deferLoad;
 
Webflow.load = function(handler) {
 
  deferLoad.then(handler);
 
};
 
 
function bindLoad() {
 
  // Reject any previous deferred (to support destroy)
 
  if (deferLoad) {
 
    deferLoad.reject();
 
    $win.off('load', deferLoad.resolve);
 
  }
 
  // Create deferred and bind window load event
 
  deferLoad = new $.Deferred();
 
  $win.on('load', deferLoad.resolve);
 
}
 
 
// Webflow.destroy - Trigger a destroy event for all modules
 
Webflow.destroy = function(options) {
 
  options = options || {};
 
  destroyed = true;
 
  $win.triggerHandler('__wf_destroy');
 
 
  // Allow domready reset for tests
 
  if (options.domready != null) {
 
    domready = options.domready;
 
  }
 
 
  // Unbind modules
 
  _.each(modules, unbindModule);
 
 
  // Clear any proxy event handlers
 
  Webflow.resize.off();
 
  Webflow.scroll.off();
 
  Webflow.redraw.off();
 
 
  // Clear any queued ready methods
 
  primary = [];
 
  secondary = [];
 
 
  // If load event has not yet fired, replace the deferred
 
  if (deferLoad.state() === 'pending') bindLoad();
 
};
 
 
// Listen for domready
 
$(Webflow.ready);
 
 
// Listen for window.onload and resolve deferred
 
bindLoad();
 
 
// Export commonjs module
 
module.exports = window.Webflow = Webflow;
 
 
 
/***/ },
 
/* 2 */
 
/***/ function(module, exports) {
 
 
'use strict';
 
 
/**
 
* Webflow: IX Event triggers for other modules
 
*/
 
 
var $ = window.jQuery;
 
var api = {};
 
var eventQueue = [];
 
var namespace = '.w-ix';
 
 
var eventTriggers = {
 
  reset: function(i, el) {
 
    el.__wf_intro = null;
 
  },
 
  intro: function(i, el) {
 
    if (el.__wf_intro) return;
 
    el.__wf_intro = true;
 
    $(el).triggerHandler(api.types.INTRO);
 
  },
 
  outro: function(i, el) {
 
    if (!el.__wf_intro) return;
 
    el.__wf_intro = null;
 
    $(el).triggerHandler(api.types.OUTRO);
 
  }
 
};
 
 
api.triggers = {};
 
 
api.types = {
 
  INTRO: 'w-ix-intro' + namespace,
 
  OUTRO: 'w-ix-outro' + namespace
 
};
 
 
// Trigger any events in queue + restore trigger methods
 
api.init = function() {
 
  var count = eventQueue.length;
 
  for (var i = 0; i < count; i++) {
 
    var memo = eventQueue[i];
 
    memo[0](0, memo[1]);
 
  }
 
  eventQueue = [];
 
  $.extend(api.triggers, eventTriggers);
 
};
 
 
// Replace all triggers with async wrapper to queue events until init
 
api.async = function() {
 
  for (var key in eventTriggers) {
 
    var func = eventTriggers[key];
 
    if (!eventTriggers.hasOwnProperty(key)) continue;
 
 
    // Replace trigger method with async wrapper
 
    api.triggers[key] = function(i, el) {
 
      eventQueue.push([func, el]);
 
    };
 
  }
 
};
 
 
// Default triggers to async queue
 
api.async();
 
 
module.exports = api;
 
 
 
/***/ },
 
/* 3 */
 
/***/ function(module, exports) {
 
 
/*!
 
* tram.js v0.8.1-global
 
* Cross-browser CSS3 transitions in JavaScript
 
* https://github.com/bkwld/tram
 
* MIT License
 
*/
 
window.tram=function(a){function b(a,b){var c=new L.Bare;return c.init(a,b)}function c(a){return a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()})}function d(a){var b=parseInt(a.slice(1),16),c=b>>16&255,d=b>>8&255,e=255&b;return[c,d,e]}function e(a,b,c){return"#"+(1<<24|a<<16|b<<8|c).toString(16).slice(1)}function f(){}function g(a,b){_("Type warning: Expected: ["+a+"] Got: ["+typeof b+"] "+b)}function h(a,b,c){_("Units do not match ["+a+"]: "+b+", "+c)}function i(a,b,c){if(void 0!==b&&(c=b),void 0===a)return c;var d=c;return Z.test(a)||!$.test(a)?d=parseInt(a,10):$.test(a)&&(d=1e3*parseFloat(a)),0>d&&(d=0),d===d?d:c}function j(a){for(var b=-1,c=a?a.length:0,d=[];++b<c;){var e=a[b];e&&d.push(e)}return d}var k=function(a,b,c){function d(a){return"object"==typeof a}function e(a){return"function"==typeof a}function f(){}function g(h,i){function j(){var a=new k;return e(a.init)&&a.init.apply(a,arguments),a}function k(){}i===c&&(i=h,h=Object),j.Bare=k;var l,m=f[a]=h[a],n=k[a]=j[a]=new f;return n.constructor=j,j.mixin=function(b){return k[a]=j[a]=g(j,b)[a],j},j.open=function(a){if(l={},e(a)?l=a.call(j,n,m,j,h):d(a)&&(l=a),d(l))for(var c in l)b.call(l,c)&&(n[c]=l[c]);return e(n.init)||(n.init=h),j},j.open(i)}return g}("prototype",{}.hasOwnProperty),l={ease:["ease",function(a,b,c,d){var e=(a/=d)*a,f=e*a;return b+c*(-2.75*f*e+11*e*e+-15.5*f+8*e+.25*a)}],"ease-in":["ease-in",function(a,b,c,d){var e=(a/=d)*a,f=e*a;return b+c*(-1*f*e+3*e*e+-3*f+2*e)}],"ease-out":["ease-out",function(a,b,c,d){var e=(a/=d)*a,f=e*a;return b+c*(.3*f*e+-1.6*e*e+2.2*f+-1.8*e+1.9*a)}],"ease-in-out":["ease-in-out",function(a,b,c,d){var e=(a/=d)*a,f=e*a;return b+c*(2*f*e+-5*e*e+2*f+2*e)}],linear:["linear",function(a,b,c,d){return c*a/d+b}],"ease-in-quad":["cubic-bezier(0.550, 0.085, 0.680, 0.530)",function(a,b,c,d){return c*(a/=d)*a+b}],"ease-out-quad":["cubic-bezier(0.250, 0.460, 0.450, 0.940)",function(a,b,c,d){return-c*(a/=d)*(a-2)+b}],"ease-in-out-quad":["cubic-bezier(0.455, 0.030, 0.515, 0.955)",function(a,b,c,d){return(a/=d/2)<1?c/2*a*a+b:-c/2*(--a*(a-2)-1)+b}],"ease-in-cubic":["cubic-bezier(0.550, 0.055, 0.675, 0.190)",function(a,b,c,d){return c*(a/=d)*a*a+b}],"ease-out-cubic":["cubic-bezier(0.215, 0.610, 0.355, 1)",function(a,b,c,d){return c*((a=a/d-1)*a*a+1)+b}],"ease-in-out-cubic":["cubic-bezier(0.645, 0.045, 0.355, 1)",function(a,b,c,d){return(a/=d/2)<1?c/2*a*a*a+b:c/2*((a-=2)*a*a+2)+b}],"ease-in-quart":["cubic-bezier(0.895, 0.030, 0.685, 0.220)",function(a,b,c,d){return c*(a/=d)*a*a*a+b}],"ease-out-quart":["cubic-bezier(0.165, 0.840, 0.440, 1)",function(a,b,c,d){return-c*((a=a/d-1)*a*a*a-1)+b}],"ease-in-out-quart":["cubic-bezier(0.770, 0, 0.175, 1)",function(a,b,c,d){return(a/=d/2)<1?c/2*a*a*a*a+b:-c/2*((a-=2)*a*a*a-2)+b}],"ease-in-quint":["cubic-bezier(0.755, 0.050, 0.855, 0.060)",function(a,b,c,d){return c*(a/=d)*a*a*a*a+b}],"ease-out-quint":["cubic-bezier(0.230, 1, 0.320, 1)",function(a,b,c,d){return c*((a=a/d-1)*a*a*a*a+1)+b}],"ease-in-out-quint":["cubic-bezier(0.860, 0, 0.070, 1)",function(a,b,c,d){return(a/=d/2)<1?c/2*a*a*a*a*a+b:c/2*((a-=2)*a*a*a*a+2)+b}],"ease-in-sine":["cubic-bezier(0.470, 0, 0.745, 0.715)",function(a,b,c,d){return-c*Math.cos(a/d*(Math.PI/2))+c+b}],"ease-out-sine":["cubic-bezier(0.390, 0.575, 0.565, 1)",function(a,b,c,d){return c*Math.sin(a/d*(Math.PI/2))+b}],"ease-in-out-sine":["cubic-bezier(0.445, 0.050, 0.550, 0.950)",function(a,b,c,d){return-c/2*(Math.cos(Math.PI*a/d)-1)+b}],"ease-in-expo":["cubic-bezier(0.950, 0.050, 0.795, 0.035)",function(a,b,c,d){return 0===a?b:c*Math.pow(2,10*(a/d-1))+b}],"ease-out-expo":["cubic-bezier(0.190, 1, 0.220, 1)",function(a,b,c,d){return a===d?b+c:c*(-Math.pow(2,-10*a/d)+1)+b}],"ease-in-out-expo":["cubic-bezier(1, 0, 0, 1)",function(a,b,c,d){return 0===a?b:a===d?b+c:(a/=d/2)<1?c/2*Math.pow(2,10*(a-1))+b:c/2*(-Math.pow(2,-10*--a)+2)+b}],"ease-in-circ":["cubic-bezier(0.600, 0.040, 0.980, 0.335)",function(a,b,c,d){return-c*(Math.sqrt(1-(a/=d)*a)-1)+b}],"ease-out-circ":["cubic-bezier(0.075, 0.820, 0.165, 1)",function(a,b,c,d){return c*Math.sqrt(1-(a=a/d-1)*a)+b}],"ease-in-out-circ":["cubic-bezier(0.785, 0.135, 0.150, 0.860)",function(a,b,c,d){return(a/=d/2)<1?-c/2*(Math.sqrt(1-a*a)-1)+b:c/2*(Math.sqrt(1-(a-=2)*a)+1)+b}],"ease-in-back":["cubic-bezier(0.600, -0.280, 0.735, 0.045)",function(a,b,c,d,e){return void 0===e&&(e=1.70158),c*(a/=d)*a*((e+1)*a-e)+b}],"ease-out-back":["cubic-bezier(0.175, 0.885, 0.320, 1.275)",function(a,b,c,d,e){return void 0===e&&(e=1.70158),c*((a=a/d-1)*a*((e+1)*a+e)+1)+b}],"ease-in-out-back":["cubic-bezier(0.680, -0.550, 0.265, 1.550)",function(a,b,c,d,e){return void 0===e&&(e=1.70158),(a/=d/2)<1?c/2*a*a*(((e*=1.525)+1)*a-e)+b:c/2*((a-=2)*a*(((e*=1.525)+1)*a+e)+2)+b}]},m={"ease-in-back":"cubic-bezier(0.600, 0, 0.735, 0.045)","ease-out-back":"cubic-bezier(0.175, 0.885, 0.320, 1)","ease-in-out-back":"cubic-bezier(0.680, 0, 0.265, 1)"},n=document,o=window,p="bkwld-tram",q=/[\-\.0-9]/g,r=/[A-Z]/,s="number",t=/^(rgb|#)/,u=/(em|cm|mm|in|pt|pc|px)$/,v=/(em|cm|mm|in|pt|pc|px|%)$/,w=/(deg|rad|turn)$/,x="unitless",y=/(all|none) 0s ease 0s/,z=/^(width|height)$/,A=" ",B=n.createElement("a"),C=["Webkit","Moz","O","ms"],D=["-webkit-","-moz-","-o-","-ms-"],E=function(a){if(a in B.style)return{dom:a,css:a};var b,c,d="",e=a.split("-");for(b=0;b<e.length;b++)d+=e[b].charAt(0).toUpperCase()+e[b].slice(1);for(b=0;b<C.length;b++)if(c=C[b]+d,c in B.style)return{dom:c,css:D[b]+a}},F=b.support={bind:Function.prototype.bind,transform:E("transform"),transition:E("transition"),backface:E("backface-visibility"),timing:E("transition-timing-function")};if(F.transition){var G=F.timing.dom;if(B.style[G]=l["ease-in-back"][0],!B.style[G])for(var H in m)l[H][0]=m[H]}var I=b.frame=function(){var a=o.requestAnimationFrame||o.webkitRequestAnimationFrame||o.mozRequestAnimationFrame||o.oRequestAnimationFrame||o.msRequestAnimationFrame;return a&&F.bind?a.bind(o):function(a){o.setTimeout(a,16)}}(),J=b.now=function(){var a=o.performance,b=a&&(a.now||a.webkitNow||a.msNow||a.mozNow);return b&&F.bind?b.bind(a):Date.now||function(){return+new Date}}(),K=k(function(b){function d(a,b){var c=j((""+a).split(A)),d=c[0];b=b||{};var e=X[d];if(!e)return _("Unsupported property: "+d);if(!b.weak||!this.props[d]){var f=e[0],g=this.props[d];return g||(g=this.props[d]=new f.Bare),g.init(this.$el,c,e,b),g}}function e(a,b,c){if(a){var e=typeof a;if(b||(this.timer&&this.timer.destroy(),this.queue=[],this.active=!1),"number"==e&&b)return this.timer=new R({duration:a,context:this,complete:h}),void(this.active=!0);if("string"==e&&b){switch(a){case"hide":n.call(this);break;case"stop":k.call(this);break;case"redraw":o.call(this);break;default:d.call(this,a,c&&c[1])}return h.call(this)}if("function"==e)return void a.call(this,this);if("object"==e){var f=0;t.call(this,a,function(a,b){a.span>f&&(f=a.span),a.stop(),a.animate(b)},function(a){"wait"in a&&(f=i(a.wait,0))}),s.call(this),f>0&&(this.timer=new R({duration:f,context:this}),this.active=!0,b&&(this.timer.complete=h));var g=this,j=!1,l={};I(function(){t.call(g,a,function(a){a.active&&(j=!0,l[a.name]=a.nextStyle)}),j&&g.$el.css(l)})}}}function f(a){a=i(a,0),this.active?this.queue.push({options:a}):(this.timer=new R({duration:a,context:this,complete:h}),this.active=!0)}function g(a){return this.active?(this.queue.push({options:a,args:arguments}),void(this.timer.complete=h)):_("No active transition timer. Use start() or wait() before then().")}function h(){if(this.timer&&this.timer.destroy(),this.active=!1,this.queue.length){var a=this.queue.shift();e.call(this,a.options,!0,a.args)}}function k(a){this.timer&&this.timer.destroy(),this.queue=[],this.active=!1;var b;"string"==typeof a?(b={},b[a]=1):b="object"==typeof a&&null!=a?a:this.props,t.call(this,b,u),s.call(this)}function l(a){k.call(this,a),t.call(this,a,v,w)}function m(a){"string"!=typeof a&&(a="block"),this.el.style.display=a}function n(){k.call(this),this.el.style.display="none"}function o(){this.el.offsetHeight}function q(){k.call(this),a.removeData(this.el,p),this.$el=this.el=null}function s(){var a,b,c=[];this.upstream&&c.push(this.upstream);for(a in this.props)b=this.props[a],b.active&&c.push(b.string);c=c.join(","),this.style!==c&&(this.style=c,this.el.style[F.transition.dom]=c)}function t(a,b,e){var f,g,h,i,j=b!==u,k={};for(f in a)h=a[f],f in Y?(k.transform||(k.transform={}),k.transform[f]=h):(r.test(f)&&(f=c(f)),f in X?k[f]=h:(i||(i={}),i[f]=h));for(f in k){if(h=k[f],g=this.props[f],!g){if(!j)continue;g=d.call(this,f)}b.call(this,g,h)}e&&i&&e.call(this,i)}function u(a){a.stop()}function v(a,b){a.set(b)}function w(a){this.$el.css(a)}function x(a,c){b[a]=function(){return this.children?z.call(this,c,arguments):(this.el&&c.apply(this,arguments),this)}}function z(a,b){var c,d=this.children.length;for(c=0;d>c;c++)a.apply(this.children[c],b);return this}b.init=function(b){if(this.$el=a(b),this.el=this.$el[0],this.props={},this.queue=[],this.style="",this.active=!1,T.keepInherited&&!T.fallback){var c=V(this.el,"transition");c&&!y.test(c)&&(this.upstream=c)}F.backface&&T.hideBackface&&U(this.el,F.backface.css,"hidden")},x("add",d),x("start",e),x("wait",f),x("then",g),x("next",h),x("stop",k),x("set",l),x("show",m),x("hide",n),x("redraw",o),x("destroy",q)}),L=k(K,function(b){function c(b,c){var d=a.data(b,p)||a.data(b,p,new K.Bare);return d.el||d.init(b),c?d.start(c):d}b.init=function(b,d){var e=a(b);if(!e.length)return this;if(1===e.length)return c(e[0],d);var f=[];return e.each(function(a,b){f.push(c(b,d))}),this.children=f,this}}),M=k(function(a){function b(){var a=this.get();this.update("auto");var b=this.get();return this.update(a),b}function c(a,b,c){return void 0!==b&&(c=b),a in l?a:c}function d(a){var b=/rgba?\((\d+),\s*(\d+),\s*(\d+)/.exec(a);return(b?e(b[1],b[2],b[3]):a).replace(/#(\w)(\w)(\w)$/,"#$1$1$2$2$3$3")}var f={duration:500,ease:"ease",delay:0};a.init=function(a,b,d,e){this.$el=a,this.el=a[0];var g=b[0];d[2]&&(g=d[2]),W[g]&&(g=W[g]),this.name=g,this.type=d[1],this.duration=i(b[1],this.duration,f.duration),this.ease=c(b[2],this.ease,f.ease),this.delay=i(b[3],this.delay,f.delay),this.span=this.duration+this.delay,this.active=!1,this.nextStyle=null,this.auto=z.test(this.name),this.unit=e.unit||this.unit||T.defaultUnit,this.angle=e.angle||this.angle||T.defaultAngle,T.fallback||e.fallback?this.animate=this.fallback:(this.animate=this.transition,this.string=this.name+A+this.duration+"ms"+("ease"!=this.ease?A+l[this.ease][0]:"")+(this.delay?A+this.delay+"ms":""))},a.set=function(a){a=this.convert(a,this.type),this.update(a),this.redraw()},a.transition=function(a){this.active=!0,a=this.convert(a,this.type),this.auto&&("auto"==this.el.style[this.name]&&(this.update(this.get()),this.redraw()),"auto"==a&&(a=b.call(this))),this.nextStyle=a},a.fallback=function(a){var c=this.el.style[this.name]||this.convert(this.get(),this.type);a=this.convert(a,this.type),this.auto&&("auto"==c&&(c=this.convert(this.get(),this.type)),"auto"==a&&(a=b.call(this))),this.tween=new Q({from:c,to:a,duration:this.duration,delay:this.delay,ease:this.ease,update:this.update,context:this})},a.get=function(){return V(this.el,this.name)},a.update=function(a){U(this.el,this.name,a)},a.stop=function(){(this.active||this.nextStyle)&&(this.active=!1,this.nextStyle=null,U(this.el,this.name,this.get()));var a=this.tween;a&&a.context&&a.destroy()},a.convert=function(a,b){if("auto"==a&&this.auto)return a;var c,e="number"==typeof a,f="string"==typeof a;switch(b){case s:if(e)return a;if(f&&""===a.replace(q,""))return+a;c="number(unitless)";break;case t:if(f){if(""===a&&this.original)return this.original;if(b.test(a))return"#"==a.charAt(0)&&7==a.length?a:d(a)}c="hex or rgb string";break;case u:if(e)return a+this.unit;if(f&&b.test(a))return a;c="number(px) or string(unit)";break;case v:if(e)return a+this.unit;if(f&&b.test(a))return a;c="number(px) or string(unit or %)";break;case w:if(e)return a+this.angle;if(f&&b.test(a))return a;c="number(deg) or string(angle)";break;case x:if(e)return a;if(f&&v.test(a))return a;c="number(unitless) or string(unit or %)"}return g(c,a),a},a.redraw=function(){this.el.offsetHeight}}),N=k(M,function(a,b){a.init=function(){b.init.apply(this,arguments),this.original||(this.original=this.convert(this.get(),t))}}),O=k(M,function(a,b){a.init=function(){b.init.apply(this,arguments),this.animate=this.fallback},a.get=function(){return this.$el[this.name]()},a.update=function(a){this.$el[this.name](a)}}),P=k(M,function(a,b){function c(a,b){var c,d,e,f,g;for(c in a)f=Y[c],e=f[0],d=f[1]||c,g=this.convert(a[c],e),b.call(this,d,g,e)}a.init=function(){b.init.apply(this,arguments),this.current||(this.current={},Y.perspective&&T.perspective&&(this.current.perspective=T.perspective,U(this.el,this.name,this.style(this.current)),this.redraw()))},a.set=function(a){c.call(this,a,function(a,b){this.current[a]=b}),U(this.el,this.name,this.style(this.current)),this.redraw()},a.transition=function(a){var b=this.values(a);this.tween=new S({current:this.current,values:b,duration:this.duration,delay:this.delay,ease:this.ease});var c,d={};for(c in this.current)d[c]=c in b?b[c]:this.current[c];this.active=!0,this.nextStyle=this.style(d)},a.fallback=function(a){var b=this.values(a);this.tween=new S({current:this.current,values:b,duration:this.duration,delay:this.delay,ease:this.ease,update:this.update,context:this})},a.update=function(){U(this.el,this.name,this.style(this.current))},a.style=function(a){var b,c="";for(b in a)c+=b+"("+a[b]+") ";return c},a.values=function(a){var b,d={};return c.call(this,a,function(a,c,e){d[a]=c,void 0===this.current[a]&&(b=0,~a.indexOf("scale")&&(b=1),this.current[a]=this.convert(b,e))}),d}}),Q=k(function(b){function c(a){1===n.push(a)&&I(g)}function g(){var a,b,c,d=n.length;if(d)for(I(g),b=J(),a=d;a--;)c=n[a],c&&c.render(b)}function i(b){var c,d=a.inArray(b,n);d>=0&&(c=n.slice(d+1),n.length=d,c.length&&(n=n.concat(c)))}function j(a){return Math.round(a*o)/o}function k(a,b,c){return e(a[0]+c*(b[0]-a[0]),a[1]+c*(b[1]-a[1]),a[2]+c*(b[2]-a[2]))}var m={ease:l.ease[1],from:0,to:1};b.init=function(a){this.duration=a.duration||0,this.delay=a.delay||0;var b=a.ease||m.ease;l[b]&&(b=l[b][1]),"function"!=typeof b&&(b=m.ease),this.ease=b,this.update=a.update||f,this.complete=a.complete||f,this.context=a.context||this,this.name=a.name;var c=a.from,d=a.to;void 0===c&&(c=m.from),void 0===d&&(d=m.to),this.unit=a.unit||"","number"==typeof c&&"number"==typeof d?(this.begin=c,this.change=d-c):this.format(d,c),this.value=this.begin+this.unit,this.start=J(),a.autoplay!==!1&&this.play()},b.play=function(){this.active||(this.start||(this.start=J()),this.active=!0,c(this))},b.stop=function(){this.active&&(this.active=!1,i(this))},b.render=function(a){var b,c=a-this.start;if(this.delay){if(c<=this.delay)return;c-=this.delay}if(c<this.duration){var d=this.ease(c,0,1,this.duration);return b=this.startRGB?k(this.startRGB,this.endRGB,d):j(this.begin+d*this.change),this.value=b+this.unit,void this.update.call(this.context,this.value)}b=this.endHex||this.begin+this.change,this.value=b+this.unit,this.update.call(this.context,this.value),this.complete.call(this.context),this.destroy()},b.format=function(a,b){if(b+="",a+="","#"==a.charAt(0))return this.startRGB=d(b),this.endRGB=d(a),this.endHex=a,this.begin=0,void(this.change=1);if(!this.unit){var c=b.replace(q,""),e=a.replace(q,"");c!==e&&h("tween",b,a),this.unit=c}b=parseFloat(b),a=parseFloat(a),this.begin=this.value=b,this.change=a-b},b.destroy=function(){this.stop(),this.context=null,this.ease=this.update=this.complete=f};var n=[],o=1e3}),R=k(Q,function(a){a.init=function(a){this.duration=a.duration||0,this.complete=a.complete||f,this.context=a.context,this.play()},a.render=function(a){var b=a-this.start;b<this.duration||(this.complete.call(this.context),this.destroy())}}),S=k(Q,function(a,b){a.init=function(a){this.context=a.context,this.update=a.update,this.tweens=[],this.current=a.current;var b,c;for(b in a.values)c=a.values[b],this.current[b]!==c&&this.tweens.push(new Q({name:b,from:this.current[b],to:c,duration:a.duration,delay:a.delay,ease:a.ease,autoplay:!1}));this.play()},a.render=function(a){var b,c,d=this.tweens.length,e=!1;for(b=d;b--;)c=this.tweens[b],c.context&&(c.render(a),this.current[c.name]=c.value,e=!0);return e?void(this.update&&this.update.call(this.context)):this.destroy()},a.destroy=function(){if(b.destroy.call(this),this.tweens){var a,c=this.tweens.length;for(a=c;a--;)this.tweens[a].destroy();this.tweens=null,this.current=null}}}),T=b.config={defaultUnit:"px",defaultAngle:"deg",keepInherited:!1,hideBackface:!1,perspective:"",fallback:!F.transition,agentTests:[]};b.fallback=function(a){if(!F.transition)return T.fallback=!0;T.agentTests.push("("+a+")");var b=new RegExp(T.agentTests.join("|"),"i");T.fallback=b.test(navigator.userAgent)},b.fallback("6.0.[2-5] Safari"),b.tween=function(a){return new Q(a)},b.delay=function(a,b,c){return new R({complete:b,duration:a,context:c})},a.fn.tram=function(a){return b.call(null,this,a)};var U=a.style,V=a.css,W={transform:F.transform&&F.transform.css},X={color:[N,t],background:[N,t,"background-color"],"outline-color":[N,t],"border-color":[N,t],"border-top-color":[N,t],"border-right-color":[N,t],"border-bottom-color":[N,t],"border-left-color":[N,t],"border-width":[M,u],"border-top-width":[M,u],"border-right-width":[M,u],"border-bottom-width":[M,u],"border-left-width":[M,u],"border-spacing":[M,u],"letter-spacing":[M,u],margin:[M,u],"margin-top":[M,u],"margin-right":[M,u],"margin-bottom":[M,u],"margin-left":[M,u],padding:[M,u],"padding-top":[M,u],"padding-right":[M,u],"padding-bottom":[M,u],"padding-left":[M,u],"outline-width":[M,u],opacity:[M,s],top:[M,v],right:[M,v],bottom:[M,v],left:[M,v],"font-size":[M,v],"text-indent":[M,v],"word-spacing":[M,v],width:[M,v],"min-width":[M,v],"max-width":[M,v],height:[M,v],"min-height":[M,v],"max-height":[M,v],"line-height":[M,x],"scroll-top":[O,s,"scrollTop"],"scroll-left":[O,s,"scrollLeft"]},Y={};F.transform&&(X.transform=[P],Y={x:[v,"translateX"],y:[v,"translateY"],rotate:[w],rotateX:[w],rotateY:[w],scale:[s],scaleX:[s],scaleY:[s],skew:[w],skewX:[w],skewY:[w]}),F.transform&&F.backface&&(Y.z=[v,"translateZ"],Y.rotateZ=[w],Y.scaleZ=[s],Y.perspective=[u]);var Z=/ms/,$=/s|\./,_=function(){var a="warn",b=window.console;return b&&b[a]?function(c){b[a](c)}:f}();return a.tram=b}(window.jQuery);
 
 
 
/***/ },
 
/* 4 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Brand pages on the subdomain
 
*/
 
 
var Webflow = __webpack_require__(1);
 
 
Webflow.define('brand', module.exports = function($, _) {
 
  var api = {};
 
  var $html = $('html');
 
  var $body = $('body');
 
  var location = window.location;
 
  var inApp = Webflow.env();
 
 
  // -----------------------------------
 
  // Module methods
 
 
  api.ready = function() {
 
    var doBranding = $html.attr('data-wf-status');
 
 
    if (doBranding) {
 
      var $branding = $('<div></div>');
 
      var $link = $('<a></a>');
 
      $link.attr('href', 'http://webflow.com?utm_campaign=brandjs');
 
 
      $branding.css({
 
        position: 'fixed',
 
        bottom: 0,
 
        right: 0,
 
        borderTop: '5px solid #2b3239',
 
        borderLeft: '5px solid #2b3239',
 
        borderTopLeftRadius: '5px',
 
        backgroundColor: '#2b3239',
 
        padding: '5px 5px 5px 10px',
 
        fontFamily: 'Arial',
 
        fontSize: '10px',
 
        textTransform: 'uppercase',
 
        opacity: '0',
 
        transition: 'opacity 0.50s ease-in-out'
 
      });
 
 
      $link.css({
 
        color: '#AAADB0',
 
        textDecoration: 'none'
 
      });
 
 
      var $webflowLogo = $('<img>');
 
      $webflowLogo.attr('src', 'https://daks2k3a4ib2z.cloudfront.net/54153e6a3d25f2755b1f14ed/5445a4b1944ecdaa4df86d3e_subdomain-brand.svg');
 
      $webflowLogo.css({
 
        opacity: 0.9,
 
        width: '55px',
 
        verticalAlign: 'middle',
 
        paddingLeft: '4px',
 
        paddingBottom: '3px'
 
      });
 
 
      $branding.text('Built with');
 
      $branding.append($webflowLogo);
 
      $link.append($branding);
 
 
      $body.append($link);
 
 
      if (/PhantomJS/.test(window.navigator.userAgent)) {
 
        return;
 
      }
 
 
      $branding.css({
 
        opacity: '1.0'
 
      });
 
    }
 
  };
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 5 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Dropdown component
 
*/
 
 
var Webflow = __webpack_require__(1);
 
var IXEvents = __webpack_require__(2);
 
 
Webflow.define('dropdown', module.exports = function($, _) {
 
  var api = {};
 
  var tram = $.tram;
 
  var $doc = $(document);
 
  var $dropdowns;
 
  var designer;
 
  var inApp = Webflow.env();
 
  var namespace = '.w-dropdown';
 
  var stateOpen = 'w--open';
 
  var closeEvent = 'w-close' + namespace;
 
  var ix = IXEvents.triggers;
 
 
  // -----------------------------------
 
  // Module methods
 
 
  api.ready = api.design = api.preview = init;
 
 
  // -----------------------------------
 
  // Private methods
 
 
  function init() {
 
    designer = inApp && Webflow.env('design');
 
 
    // Find all instances on the page
 
    $dropdowns = $doc.find(namespace);
 
    $dropdowns.each(build);
 
  }
 
 
  function build(i, el) {
 
    var $el = $(el);
 
 
    // Store state in data
 
    var data = $.data(el, namespace);
 
    if (!data) data = $.data(el, namespace, { open: false, el: $el, config: {} });
 
    data.list = $el.children('.w-dropdown-list');
 
    data.toggle = $el.children('.w-dropdown-toggle');
 
    data.links = data.list.children('.w-dropdown-link');
 
    data.outside = outside(data);
 
    data.complete = complete(data);
 
 
    // Remove old events
 
    $el.off(namespace);
 
    data.toggle.off(namespace);
 
 
    // Set config from data attributes
 
    configure(data);
 
 
    if (data.nav) data.nav.off(namespace);
 
    data.nav = $el.closest('.w-nav');
 
    data.nav.on(closeEvent, handler(data));
 
 
    // Add events based on mode
 
    if (designer) {
 
      $el.on('setting' + namespace, handler(data));
 
    } else {
 
      data.toggle.on('tap' + namespace, toggle(data));
 
      $el.on(closeEvent, handler(data));
 
      // Close in preview mode
 
      inApp && close(data);
 
    }
 
  }
 
 
  function configure(data) {
 
    data.config = {
 
      hover: +data.el.attr('data-hover'),
 
      delay: +data.el.attr('data-delay') || 0
 
    };
 
  }
 
 
  function handler(data) {
 
    return function(evt, options) {
 
      options = options || {};
 
 
      if (evt.type === 'w-close') {
 
        return close(data);
 
      }
 
 
      if (evt.type === 'setting') {
 
        configure(data);
 
        options.open === true && open(data, true);
 
        options.open === false && close(data, true);
 
        return;
 
      }
 
    };
 
  }
 
 
  function toggle(data) {
 
    return _.debounce(function(evt) {
 
      data.open ? close(data) : open(data);
 
    });
 
  }
 
 
  function open(data, immediate) {
 
    if (data.open) return;
 
    closeOthers(data);
 
    data.open = true;
 
    data.list.addClass(stateOpen);
 
    data.toggle.addClass(stateOpen);
 
    ix.intro(0, data.el[0]);
 
    Webflow.redraw.up();
 
 
    // Listen for tap outside events
 
    if (!designer) $doc.on('tap' + namespace, data.outside);
 
 
    // Clear previous delay
 
    window.clearTimeout(data.delayId);
 
  }
 
 
  function close(data, immediate) {
 
    if (!data.open) return;
 
    data.open = false;
 
    var config = data.config;
 
    ix.outro(0, data.el[0]);
 
 
    // Stop listening for tap outside events
 
    $doc.off('tap' + namespace, data.outside);
 
 
    // Clear previous delay
 
    window.clearTimeout(data.delayId);
 
 
    // Skip delay during immediate
 
    if (!config.delay || immediate) return data.complete();
 
 
    // Optionally wait for delay before close
 
    data.delayId = window.setTimeout(data.complete, config.delay);
 
  }
 
 
  function closeOthers(data) {
 
    var self = data.el[0];
 
    $dropdowns.each(function(i, other) {
 
      var $other = $(other);
 
      if ($other.is(self) || $other.has(self).length) return;
 
      $other.triggerHandler(closeEvent);
 
    });
 
  }
 
 
  function outside(data) {
 
    // Unbind previous tap handler if it exists
 
    if (data.outside) $doc.off('tap' + namespace, data.outside);
 
 
    // Close menu when tapped outside
 
    return _.debounce(function(evt) {
 
      if (!data.open) return;
 
      var $target = $(evt.target);
 
      if ($target.closest('.w-dropdown-toggle').length) return;
 
      if (!data.el.is($target.closest(namespace))) {
 
        close(data);
 
      }
 
    });
 
  }
 
 
  function complete(data) {
 
    return function() {
 
      data.list.removeClass(stateOpen);
 
      data.toggle.removeClass(stateOpen);
 
    };
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 6 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Editor loader
 
*/
 
 
var Webflow = __webpack_require__(1);
 
 
Webflow.define('edit', module.exports = function($, _) {
 
  var api = {};
 
  var $win = $(window);
 
  var noop = function() {};
 
  var location = document.location;
 
  var hashchange = 'hashchange';
 
  var loaded;
 
 
  // Only allow editor to load outside test env
 
  var loadEditor = Webflow.env('test') ? noop : load;
 
 
  // Check localStorage for editor data
 
  if (localStorage && localStorage.getItem && localStorage.getItem('WebflowEditor')) {
 
    loadEditor();
 
 
  } else if (location.search) {
 
    // Check url query for `edit` parameter or an invalid query ending in `?edit`
 
    if (/[?&](edit)(?:[=&]|$)/.test(location.search) || /\?edit$/.test(location.search)) {
 
      loadEditor();
 
    }
 
 
  } else {
 
    // Check hash fragment to support `#hash?edit`
 
    $win.on(hashchange, checkHash).triggerHandler(hashchange);
 
  }
 
 
  function checkHash() {
 
    if (loaded) return;
 
    // Load editor when hash contains `?edit`
 
    if (/\?edit/.test(location.hash)) loadEditor();
 
  }
 
 
  function load() {
 
    loaded = true;
 
    // Predefine global immediately to benefit Webflow.env
 
    window.WebflowEditor = true;
 
    $win.off(hashchange, checkHash);
 
    $.ajax({
 
      url: cleanSlashes(("https://webflow.com") + '/api/editor/view'),
 
      xhrFields: { withCredentials: true },
 
      dataType: 'json',
 
      crossDomain: true,
 
      success: success
 
    });
 
  }
 
 
  function success(data) {
 
    if (!data) {
 
      console.error('Could not load editor data');
 
      return;
 
    }
 
    getScript(prefix(data.scriptPath), function () {
 
      window.WebflowEditor(data);
 
    });
 
  }
 
 
  function getScript(url, done) {
 
    $.ajax({ type: 'GET', url: url, dataType: 'script', cache: true }).then(done, error);
 
  }
 
 
  function error(jqXHR, textStatus, errorThrown) {
 
    console.error('Could not load editor script: ' + textStatus);
 
    throw errorThrown;
 
  }
 
 
  function prefix(url) {
 
    return (url.indexOf('//') >= 0) ? url : cleanSlashes(("https://webflow.com") + url);
 
  }
 
 
  function cleanSlashes(url) {
 
    return url.replace(/([^:])\/\//g, '$1/');
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 7 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
/**
 
* Webflow: Forms
 
*/
 
 
var Webflow = __webpack_require__(1);
 
 
Webflow.define('forms', module.exports = function($, _) {
 
  var api = {};
 
 
  // Cross-Domain AJAX for IE8
 
  __webpack_require__(19);
 
 
  var $doc = $(document);
 
  var $forms;
 
  var loc = window.location;
 
  var retro = window.XDomainRequest && !window.atob;
 
  var namespace = '.w-form';
 
  var siteId;
 
  var emailField = /e(\-)?mail/i;
 
  var emailValue = /^\S+@\S+$/;
 
  var alert = window.alert;
 
  var listening;
 
 
  // MailChimp domains: list-manage.com + mirrors
 
  var chimpRegex = /list-manage[1-9]?.com/i;
 
 
  var disconnected = _.debounce(function() {
 
    alert('Oops! This page has improperly configured forms. Please contact your website administrator to fix this issue.');
 
  }, 100);
 
 
  api.ready = function() {
 
    // Init forms
 
    init();
 
 
    // Wire document events once
 
    if (!listening) addListeners();
 
  };
 
 
  api.preview = api.design = function() {
 
    init();
 
  };
 
 
  function init() {
 
    siteId = $('html').attr('data-wf-site');
 
 
    $forms = $(namespace + ' form');
 
    if (!$forms.length) return;
 
    $forms.each(build);
 
  }
 
 
  function build(i, el) {
 
    // Store form state using namespace
 
    var $el = $(el);
 
    var data = $.data(el, namespace);
 
    if (!data) data = $.data(el, namespace, { form: $el }); // data.form
 
 
    reset(data);
 
    var wrap = $el.closest('div.w-form');
 
    data.done = wrap.find('> .w-form-done');
 
    data.fail = wrap.find('> .w-form-fail');
 
 
    var action = data.action = $el.attr('action');
 
    data.handler = null;
 
    data.redirect = $el.attr('data-redirect');
 
 
    // MailChimp form
 
    if (chimpRegex.test(action)) { data.handler = submitMailChimp; return; }
 
 
    // Custom form action
 
    if (action) return;
 
 
    // Webflow form
 
    if (siteId) { data.handler = submitWebflow; return; }
 
 
    // Alert for disconnected Webflow forms
 
    disconnected();
 
  }
 
 
  function addListeners() {
 
    listening = true;
 
 
    // Handle form submission for Webflow forms
 
    $doc.on('submit', namespace + ' form', function(evt) {
 
      var data = $.data(this, namespace);
 
      if (data.handler) {
 
        data.evt = evt;
 
        data.handler(data);
 
      }
 
    });
 
  }
 
 
  // Reset data common to all submit handlers
 
  function reset(data) {
 
    var btn = data.btn = data.form.find(':input[type="submit"]');
 
    data.wait = data.btn.attr('data-wait') || null;
 
    data.success = false;
 
    btn.prop('disabled', false);
 
    data.label && btn.val(data.label);
 
  }
 
 
  // Disable submit button
 
  function disableBtn(data) {
 
    var btn = data.btn;
 
    var wait = data.wait;
 
    btn.prop('disabled', true);
 
    // Show wait text and store previous label
 
    if (wait) {
 
      data.label = btn.val();
 
      btn.val(wait);
 
    }
 
  }
 
 
  // Find form fields, validate, and set value pairs
 
  function findFields(form, result) {
 
    var status = null;
 
    result = result || {};
 
 
    // The ":input" selector is a jQuery shortcut to select all inputs, selects, textareas
 
    form.find(':input:not([type="submit"])').each(function(i, el) {
 
      var field = $(el);
 
      var type = field.attr('type');
 
      var name = field.attr('data-name') || field.attr('name') || ('Field ' + (i + 1));
 
      var value = field.val();
 
 
      if (type === 'checkbox') {
 
        value = field.is(':checked');
 
      } if (type === 'radio') {
 
        // Radio group value already processed
 
        if (result[name] === null || typeof result[name] === 'string') {
 
          return;
 
        }
 
 
        value = form.find('input[name="' + field.attr('name') + '"]:checked').val() || null;
 
      }
 
 
      if (typeof value === 'string') value = $.trim(value);
 
      result[name] = value;
 
      status = status || getStatus(field, name, value);
 
    });
 
 
    return status;
 
  }
 
 
  function getStatus(field, name, value) {
 
    var status = null;
 
    if (!field.attr('required')) return null;
 
    if (!value) status = 'Please fill out the required field: ' + name;
 
    else if (emailField.test(name) || emailField.test(field.attr('type'))) {
 
      if (!emailValue.test(value)) status = 'Please enter a valid email address for: ' + name;
 
    }
 
    return status;
 
  }
 
 
  // Submit form to Webflow
 
  function submitWebflow(data) {
 
    reset(data);
 
 
    var form = data.form;
 
    var payload = {
 
      name: form.attr('data-name') || form.attr('name') || 'Untitled Form',
 
      source: loc.href,
 
      test: Webflow.env(),
 
      fields: {}
 
    };
 
 
    preventDefault(data);
 
 
    // Find & populate all fields
 
    var status = findFields(form, payload.fields);
 
    if (status) return alert(status);
 
 
    // Disable submit button
 
    disableBtn(data);
 
 
    // Read site ID
 
    // NOTE: If this site is exported, the HTML tag must retain the data-wf-site attribute for forms to work
 
    if (!siteId) { afterSubmit(data); return; }
 
    var url = ("https://webflow.com") + '/api/v1/form/' + siteId;
 
 
    // Work around same-protocol IE XDR limitation - without this IE9 and below forms won't submit
 
    if (retro && url.indexOf(("https://webflow.com")) >= 0) {
 
      url = url.replace(("https://webflow.com"), ("http://formdata.webflow.com"));
 
    }
 
 
    $.ajax({
 
      url: url,
 
      type: 'POST',
 
      data: payload,
 
      dataType: 'json',
 
      crossDomain: true
 
    }).done(function() {
 
      data.success = true;
 
      afterSubmit(data);
 
    }).fail(function(response, textStatus, jqXHR) {
 
      afterSubmit(data);
 
    });
 
  }
 
 
  // Submit form to MailChimp
 
  function submitMailChimp(data) {
 
    reset(data);
 
 
    var form = data.form;
 
    var payload = {};
 
 
    // Skip Ajax submission if http/s mismatch, fallback to POST instead
 
    if (/^https/.test(loc.href) && !/^https/.test(data.action)) {
 
      form.attr('method', 'post');
 
      return;
 
    }
 
 
    preventDefault(data);
 
 
    // Find & populate all fields
 
    var status = findFields(form, payload);
 
    if (status) return alert(status);
 
 
    // Disable submit button
 
    disableBtn(data);
 
 
    // Use special format for MailChimp params
 
    var fullName;
 
    _.each(payload, function(value, key) {
 
      if (emailField.test(key)) payload.EMAIL = value;
 
      if (/^((full[ _-]?)?name)$/i.test(key)) fullName = value;
 
      if (/^(first[ _-]?name)$/i.test(key)) payload.FNAME = value;
 
      if (/^(last[ _-]?name)$/i.test(key)) payload.LNAME = value;
 
    });
 
 
    if (fullName && !payload.FNAME) {
 
      fullName = fullName.split(' ');
 
      payload.FNAME = fullName[0];
 
      payload.LNAME = payload.LNAME || fullName[1];
 
    }
 
 
    // Use the (undocumented) MailChimp jsonp api
 
    var url = data.action.replace('/post?', '/post-json?') + '&c=?';
 
    // Add special param to prevent bot signups
 
    var userId = url.indexOf('u=') + 2;
 
    userId = url.substring(userId, url.indexOf('&', userId));
 
    var listId = url.indexOf('id=') + 3;
 
    listId = url.substring(listId, url.indexOf('&', listId));
 
    payload['b_' + userId + '_' + listId] = '';
 
 
    $.ajax({
 
      url: url,
 
      data: payload,
 
      dataType: 'jsonp'
 
    }).done(function(resp) {
 
      data.success = (resp.result === 'success' || /already/.test(resp.msg));
 
      if (!data.success) console.info('MailChimp error: ' + resp.msg);
 
      afterSubmit(data);
 
    }).fail(function(response, textStatus, jqXHR) {
 
      afterSubmit(data);
 
    });
 
  }
 
 
  // Common callback which runs after all Ajax submissions
 
  function afterSubmit(data) {
 
    var form = data.form;
 
    var wrap = form.closest('div.w-form');
 
    var redirect = data.redirect;
 
    var success = data.success;
 
 
    // Redirect to a success url if defined
 
    if (success && redirect) {
 
      Webflow.location(redirect);
 
      return;
 
    }
 
 
    // Show or hide status divs
 
    data.done.toggle(success);
 
    data.fail.toggle(!success);
 
 
    // Hide form on success
 
    form.toggle(!success);
 
 
    // Reset data and enable submit button
 
    reset(data);
 
  }
 
 
  function preventDefault(data) {
 
    data.evt && data.evt.preventDefault();
 
    data.evt = null;
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 8 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Google+ widget
 
*/
 
 
var Webflow = __webpack_require__(1);
 
 
Webflow.define('gplus', module.exports = function($, _) {
 
  var $doc = $(document);
 
  var api = {};
 
  var loaded;
 
 
  api.ready = function() {
 
    // Load Google+ API on the front-end
 
    if (!Webflow.env() && !loaded) init();
 
  };
 
 
  function init() {
 
    $doc.find('.w-widget-gplus').length && load();
 
  }
 
 
  function load() {
 
    loaded = true;
 
    $.getScript('https://apis.google.com/js/plusone.js');
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 9 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Interactions
 
*/
 
 
var Webflow = __webpack_require__(1);
 
var IXEvents = __webpack_require__(2);
 
 
Webflow.define('ix', module.exports = function($, _) {
 
  var api = {};
 
  var designer;
 
  var $win = $(window);
 
  var namespace = '.w-ix';
 
  var tram = $.tram;
 
  var env = Webflow.env;
 
  var inApp = env();
 
  var emptyFix = env.chrome && env.chrome < 35;
 
  var transNone = 'none 0s ease 0s';
 
  var fallbackProps = /width|height/;
 
  var $subs = $();
 
  var config = {};
 
  var anchors = [];
 
  var loads = [];
 
  var readys = [];
 
  var destroyed;
 
  var readyDelay = 1;
 
 
  // Component types and proxy selectors
 
  var components = {
 
    tabs: '.w-tab-link, .w-tab-pane',
 
    dropdown: '.w-dropdown',
 
    slider: '.w-slide',
 
    navbar: '.w-nav'
 
  };
 
 
  // -----------------------------------
 
  // Module methods
 
 
  api.init = function(list) {
 
    setTimeout(function() { configure(list); }, 1);
 
  };
 
 
  api.preview = function() {
 
    designer = false;
 
    readyDelay = 100;
 
    setTimeout(function() { configure(window.__wf_ix); }, 1);
 
  };
 
 
  api.design = function() {
 
    designer = true;
 
    api.destroy();
 
  };
 
 
  api.destroy = function() {
 
    destroyed = true;
 
    $subs.each(teardown);
 
    Webflow.scroll.off(scroll);
 
    IXEvents.async();
 
    anchors = [];
 
    loads = [];
 
    readys = [];
 
  };
 
 
  api.ready = function() {
 
    // Ready should only be used after destroy, as a way to re-init
 
    if (config && destroyed) {
 
      destroyed = false;
 
      init();
 
    }
 
  };
 
 
  api.run = run;
 
  api.style = inApp ? styleApp : stylePub;
 
 
  // -----------------------------------
 
  // Private methods
 
 
  function configure(list) {
 
    if (!list) return;
 
 
    // Map all interactions by slug
 
    config = {};
 
    _.each(list, function(item) {
 
      config[item.slug] = item.value;
 
    });
 
 
    // Init ix after config
 
    init();
 
  }
 
 
  function init() {
 
    // Build each element's interaction keying from data attribute
 
    var els = $('[data-ix]');
 
    if (!els.length) return;
 
    els.each(teardown);
 
    els.each(build);
 
 
    // Listen for scroll events if any anchors exist
 
    if (anchors.length) {
 
      Webflow.scroll.on(scroll);
 
      setTimeout(scroll, 1);
 
    }
 
 
    // Handle loads or readys if they exist
 
    if (loads.length) Webflow.load(runLoads);
 
    if (readys.length) setTimeout(runReadys, readyDelay);
 
 
    // Trigger queued events, must happen after init
 
    IXEvents.init();
 
 
    // Trigger a redraw to ensure all IX intros play
 
    Webflow.redraw.up();
 
  }
 
 
  function build(i, el) {
 
    var $el = $(el);
 
    var id = $el.attr('data-ix');
 
    var ix = config[id];
 
    if (!ix) return;
 
    var triggers = ix.triggers;
 
    if (!triggers) return;
 
 
    // Set styles immediately to provide tram with starting transform values
 
    api.style($el, ix.style);
 
 
    _.each(triggers, function(trigger) {
 
      var state = {};
 
      var type = trigger.type;
 
      var stepsB = trigger.stepsB && trigger.stepsB.length;
 
 
      function runA() { run(trigger, $el, { group: 'A' }); }
 
      function runB() { run(trigger, $el, { group: 'B' }); }
 
 
      if (type === 'load') {
 
        (trigger.preload && !inApp) ? loads.push(runA) : readys.push(runA);
 
        return;
 
      }
 
 
      if (type === 'click') {
 
        $el.on('click' + namespace, function(evt) {
 
          // Avoid late clicks on touch devices
 
          if (!Webflow.validClick(evt.currentTarget)) return;
 
 
          // Prevent default on empty hash urls
 
          if ($el.attr('href') === '#') evt.preventDefault();
 
 
          run(trigger, $el, { group: state.clicked ? 'B' : 'A' });
 
          if (stepsB) state.clicked = !state.clicked;
 
        });
 
        $subs = $subs.add($el);
 
        return;
 
      }
 
 
      if (type === 'hover') {
 
        $el.on('mouseenter' + namespace, runA);
 
        $el.on('mouseleave' + namespace, runB);
 
        $subs = $subs.add($el);
 
        return;
 
      }
 
 
      if (type === 'scroll') {
 
        anchors.push({
 
          el: $el, trigger: trigger, state: { active: false },
 
          offsetTop: convert(trigger.offsetTop),
 
          offsetBot: convert(trigger.offsetBot)
 
        });
 
        return;
 
      }
 
 
      // Check for a proxy component selector
 
      // type == [tabs, dropdown, slider, navbar]
 
      var proxy = components[type];
 
      if (proxy) {
 
        var $proxy = $el.closest(proxy);
 
        $proxy.on(IXEvents.types.INTRO, runA).on(IXEvents.types.OUTRO, runB);
 
        $subs = $subs.add($proxy);
 
        return;
 
      }
 
    });
 
  }
 
 
  function convert(offset) {
 
    if (!offset) return 0;
 
    offset = offset + '';
 
    var result = parseInt(offset, 10);
 
    if (result !== result) return 0;
 
    if (offset.indexOf('%') > 0) {
 
      result = result / 100;
 
      if (result >= 1) result = 0.999;
 
    }
 
    return result;
 
  }
 
 
  function teardown(i, el) {
 
    $(el).off(namespace);
 
  }
 
 
  function scroll() {
 
    var viewTop = $win.scrollTop();
 
    var viewHeight = $win.height();
 
 
    // Check each anchor for a valid scroll trigger
 
    var count = anchors.length;
 
    for (var i = 0; i < count; i++) {
 
      var anchor = anchors[i];
 
      var $el = anchor.el;
 
      var trigger = anchor.trigger;
 
      var stepsB = trigger.stepsB && trigger.stepsB.length;
 
      var state = anchor.state;
 
      var top = $el.offset().top;
 
      var height = $el.outerHeight();
 
      var offsetTop = anchor.offsetTop;
 
      var offsetBot = anchor.offsetBot;
 
      if (offsetTop < 1 && offsetTop > 0) offsetTop *= viewHeight;
 
      if (offsetBot < 1 && offsetBot > 0) offsetBot *= viewHeight;
 
      var active = (top + height - offsetTop >= viewTop && top + offsetBot <= viewTop + viewHeight);
 
      if (active === state.active) continue;
 
      if (active === false && !stepsB) continue;
 
      state.active = active;
 
      run(trigger, $el, { group: active ? 'A' : 'B' });
 
    }
 
  }
 
 
  function runLoads() {
 
    var count = loads.length;
 
    for (var i = 0; i < count; i++) {
 
      loads[i]();
 
    }
 
  }
 
 
  function runReadys() {
 
    var count = readys.length;
 
    for (var i = 0; i < count; i++) {
 
      readys[i]();
 
    }
 
  }
 
 
  function run(trigger, $el, opts, replay) {
 
    opts = opts || {};
 
    var done = opts.done;
 
 
    // Do not run in designer unless forced
 
    if (designer && !opts.force) return;
 
 
    // Operate on a set of grouped steps
 
    var group = opts.group || 'A';
 
    var loop = trigger['loop' + group];
 
    var steps = trigger['steps' + group];
 
    if (!steps || !steps.length) return;
 
    if (steps.length < 2) loop = false;
 
 
    // One-time init before any loops
 
    if (!replay) {
 
 
      // Find selector within element descendants, siblings, or query whole document
 
      var selector = trigger.selector;
 
      if (selector) {
 
        $el = (
 
          trigger.descend ? $el.find(selector) :
 
          trigger.siblings ? $el.siblings(selector) :
 
          $(selector)
 
        );
 
        if (inApp) $el.attr('data-ix-affect', 1);
 
      }
 
 
      // Apply empty fix for certain Chrome versions
 
      if (emptyFix) $el.addClass('w-ix-emptyfix');
 
    }
 
 
    var _tram = tram($el);
 
 
    // Add steps
 
    var meta = {};
 
    for (var i = 0; i < steps.length; i++) {
 
      addStep(_tram, steps[i], meta);
 
    }
 
 
    function fin() {
 
      // Run trigger again if looped
 
      if (loop) return run(trigger, $el, opts, true);
 
 
      // Reset any 'auto' values
 
      if (meta.width === 'auto') _tram.set({ width: 'auto' });
 
      if (meta.height === 'auto') _tram.set({ height: 'auto' });
 
 
      // Run callback
 
      done && done();
 
    }
 
 
    // Add final step to queue if tram has started
 
    meta.start ? _tram.then(fin) : fin();
 
  }
 
 
  function addStep(_tram, step, meta) {
 
    var addMethod = 'add';
 
    var startMethod = 'start';
 
 
    // Once the transition has started, we will always use then() to add to the queue.
 
    if (meta.start) addMethod = startMethod = 'then';
 
 
    // Parse transitions string on the current step
 
    var transitions = step.transition;
 
    if (transitions) {
 
      transitions = transitions.split(',');
 
      for (var i = 0; i < transitions.length; i++) {
 
        var transition = transitions[i];
 
        var options = fallbackProps.test(transition) ? { fallback: true } : null;
 
        _tram[addMethod](transition, options);
 
      }
 
    }
 
 
    // Build a clean object to pass to the tram method
 
    var clean = tramify(step) || {};
 
 
    // Store last width and height values
 
    if (clean.width != null) meta.width = clean.width;
 
    if (clean.height != null) meta.height = clean.height;
 
 
    // When transitions are not present, set values immediately and continue queue.
 
    if (transitions == null) {
 
 
      // If we have started, wrap set() in then() and reset queue
 
      if (meta.start) {
 
        _tram.then(function() {
 
          var queue = this.queue;
 
          this.set(clean);
 
          if (clean.display) {
 
            _tram.redraw();
 
            Webflow.redraw.up();
 
          }
 
          this.queue = queue;
 
          this.next();
 
        });
 
      } else {
 
        _tram.set(clean);
 
 
        // Always redraw after setting display
 
        if (clean.display) {
 
          _tram.redraw();
 
          Webflow.redraw.up();
 
        }
 
      }
 
 
      // Use the wait() method to kick off queue in absence of transitions.
 
      var wait = clean.wait;
 
      if (wait != null) {
 
        _tram.wait(wait);
 
        meta.start = true;
 
      }
 
 
    // Otherwise, when transitions are present
 
    } else {
 
 
      // If display is present, handle it separately
 
      if (clean.display) {
 
        var display = clean.display;
 
        delete clean.display;
 
 
        // If we've already started, we need to wrap it in a then()
 
        if (meta.start) {
 
          _tram.then(function() {
 
            var queue = this.queue;
 
            this.set({ display: display }).redraw();
 
            Webflow.redraw.up();
 
            this.queue = queue;
 
            this.next();
 
          });
 
        } else {
 
          _tram.set({ display: display }).redraw();
 
          Webflow.redraw.up();
 
        }
 
      }
 
 
      // Otherwise, start a transition using the current start method.
 
      _tram[startMethod](clean);
 
      meta.start = true;
 
    }
 
  }
 
 
  // (In app) Set styles immediately and manage upstream transition
 
  function styleApp(el, data) {
 
    var _tram = tram(el);
 
 
    // Get computed transition value
 
    el.css('transition', '');
 
    var computed = el.css('transition');
 
 
    // If computed is set to none, clear upstream
 
    if (computed === transNone) computed = _tram.upstream = null;
 
 
    // Set upstream transition to none temporarily
 
    _tram.upstream = transNone;
 
 
    // Set values immediately
 
    _tram.set(tramify(data));
 
 
    // Only restore upstream in preview mode
 
    _tram.upstream = computed;
 
  }
 
 
  // (Published) Set styles immediately on specified jquery element
 
  function stylePub(el, data) {
 
    tram(el).set(tramify(data));
 
  }
 
 
  // Build a clean object for tram
 
  function tramify(obj) {
 
    var result = {};
 
    var found = false;
 
    for (var x in obj) {
 
      if (x === 'transition') continue;
 
      result[x] = obj[x];
 
      found = true;
 
    }
 
    // If empty, return null for tram.set/stop compliance
 
    return found ? result : null;
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 10 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
/*eslint
 
  no-use-before-define: 0,
 
  no-shadow: 0
 
*/
 
 
/**
 
* Webflow: Lightbox component
 
*/
 
 
var Webflow = __webpack_require__(1);
 
 
function createLightbox(window, document, $) {
 
  var tram = $.tram;
 
  var isArray = Array.isArray;
 
  var namespace = 'w-lightbox';
 
  var prefix = namespace + '-';
 
  var prefixRegex = /(^|\s+)/g;
 
 
  // Array of objects describing items to be displayed.
 
  var items = [];
 
 
  // Index of the currently displayed item.
 
  var currentIndex;
 
 
  // Object holding references to jQuery wrapped nodes.
 
  var $refs;
 
 
  // Instance of Spinner
 
  var spinner;
 
 
  function lightbox(thing, index) {
 
    items = isArray(thing) ? thing : [thing];
 
 
    if (!$refs) {
 
      lightbox.build();
 
    }
 
 
    if (items.length > 1) {
 
      $refs.items = $refs.empty;
 
 
      items.forEach(function (item) {
 
        var $thumbnail = dom('thumbnail');
 
        var $item = dom('item').append($thumbnail);
 
 
        $refs.items = $refs.items.add($item);
 
 
        loadImage(item.thumbnailUrl || item.url, function ($image) {
 
          if ($image.prop('width') > $image.prop('height')) {
 
            addClass($image, 'wide');
 
          } else {
 
            addClass($image, 'tall');
 
          }
 
          $thumbnail.append(addClass($image, 'thumbnail-image'));
 
        });
 
      });
 
 
      $refs.strip.empty().append($refs.items);
 
      addClass($refs.content, 'group');
 
    }
 
 
    tram(
 
      // Focus the lightbox to receive keyboard events.
 
      removeClass($refs.lightbox, 'hide').focus()
 
    )
 
      .add('opacity .3s')
 
      .start({opacity: 1});
 
 
    // Prevent document from scrolling while lightbox is active.
 
    addClass($refs.html, 'noscroll');
 
 
    return lightbox.show(index || 0);
 
  }
 
 
  /**
 
  * Creates the DOM structure required by the lightbox.
 
  */
 
  lightbox.build = function () {
 
    // In case `build` is called more than once.
 
    lightbox.destroy();
 
 
    $refs = {
 
      html: $(document.documentElement),
 
      // Empty jQuery object can be used to build new ones using `.add`.
 
      empty: $()
 
    };
 
 
    $refs.arrowLeft = dom('control left inactive');
 
    $refs.arrowRight = dom('control right inactive');
 
    $refs.close = dom('control close');
 
 
    $refs.spinner = dom('spinner');
 
    $refs.strip = dom('strip');
 
 
    spinner = new Spinner($refs.spinner, prefixed('hide'));
 
 
    $refs.content = dom('content')
 
      .append($refs.spinner, $refs.arrowLeft, $refs.arrowRight, $refs.close);
 
 
    $refs.container = dom('container')
 
      .append($refs.content, $refs.strip);
 
 
    $refs.lightbox = dom('backdrop hide')
 
      .append($refs.container);
 
 
    // We are delegating events for performance reasons and also
 
    // to not have to reattach handlers when images change.
 
    $refs.strip.on('tap', selector('item'), itemTapHandler);
 
    $refs.content
 
      .on('swipe', swipeHandler)
 
      .on('tap', selector('left'), handlerPrev)
 
      .on('tap', selector('right'), handlerNext)
 
      .on('tap', selector('close'), handlerHide)
 
      .on('tap', selector('image, caption'), handlerNext);
 
    $refs.container
 
      .on('tap', selector('view, strip'), handlerHide)
 
      // Prevent images from being dragged around.
 
      .on('dragstart', selector('img'), preventDefault);
 
    $refs.lightbox
 
      .on('keydown', keyHandler)
 
      // IE loses focus to inner nodes without letting us know.
 
      .on('focusin', focusThis);
 
 
    // The `tabindex` attribute is needed to enable non-input elements
 
    // to receive keyboard events.
 
    $('body').append($refs.lightbox.prop('tabIndex', 0));
 
 
    return lightbox;
 
  };
 
 
  /**
 
  * Dispose of DOM nodes created by the lightbox.
 
  */
 
  lightbox.destroy = function () {
 
    if (!$refs) {
 
      return;
 
    }
 
 
    // Event handlers are also removed.
 
    removeClass($refs.html, 'noscroll');
 
    $refs.lightbox.remove();
 
    $refs = undefined;
 
  };
 
 
  /**
 
  * Show a specific item.
 
  */
 
  lightbox.show = function (index) {
 
    // Bail if we are already showing this item.
 
    if (index === currentIndex) {
 
      return;
 
    }
 
 
    var item = items[index];
 
    if (!item) { return lightbox.hide(); }
 
 
    var previousIndex = currentIndex;
 
    currentIndex = index;
 
    spinner.show();
 
 
    // For videos, load an empty SVG with the video dimensions to preserve
 
    // the video’s aspect ratio while being responsive.
 
    var url = item.html && svgDataUri(item.width, item.height) || item.url;
 
    loadImage(url, function ($image) {
 
      // Make sure this is the last item requested to be shown since
 
      // images can finish loading in a different order than they were
 
      // requested in.
 
      if (index !== currentIndex) {
 
        return;
 
      }
 
 
      var $figure = dom('figure', 'figure').append(addClass($image, 'image'));
 
      var $frame = dom('frame').append($figure);
 
      var $newView = dom('view').append($frame);
 
      var $html, isIframe;
 
 
      if (item.html) {
 
        $html = $(item.html);
 
        isIframe = $html.is('iframe');
 
 
        if (isIframe) {
 
          $html.on('load', transitionToNewView);
 
        }
 
 
        $figure.append(addClass($html, 'embed'));
 
      }
 
 
      if (item.caption) {
 
        $figure.append(dom('caption', 'figcaption').text(item.caption));
 
      }
 
 
      $refs.spinner.before($newView);
 
 
      if (!isIframe) {
 
        transitionToNewView();
 
      }
 
 
      function transitionToNewView() {
 
        spinner.hide();
 
 
        if (index !== currentIndex) {
 
          $newView.remove();
 
          return;
 
        }
 
 
 
        toggleClass($refs.arrowLeft, 'inactive', index <= 0);
 
        toggleClass($refs.arrowRight, 'inactive', index >= items.length - 1);
 
 
        if ($refs.view) {
 
          tram($refs.view)
 
            .add('opacity .3s')
 
            .start({opacity: 0})
 
            .then(remover($refs.view));
 
 
          tram($newView)
 
            .add('opacity .3s')
 
            .add('transform .3s')
 
            .set({x: index > previousIndex ? '80px' : '-80px'})
 
            .start({opacity: 1, x: 0});
 
        } else {
 
          $newView.css('opacity', 1);
 
        }
 
 
        $refs.view = $newView;
 
 
        if ($refs.items) {
 
          // Mark proper thumbnail as active
 
          addClass(removeClass($refs.items, 'active').eq(index), 'active');
 
        }
 
      }
 
    });
 
 
    return lightbox;
 
  };
 
 
  /**
 
  * Hides the lightbox.
 
  */
 
  lightbox.hide = function () {
 
    tram($refs.lightbox)
 
      .add('opacity .3s')
 
      .start({opacity: 0})
 
      .then(hideLightbox);
 
 
    return lightbox;
 
  };
 
 
  lightbox.prev = function () {
 
    if (currentIndex > 0) {
 
      lightbox.show(currentIndex - 1);
 
    }
 
  };
 
 
  lightbox.next = function () {
 
    if (currentIndex < items.length - 1) {
 
      lightbox.show(currentIndex + 1);
 
    }
 
  };
 
 
  function createHandler(action) {
 
    return function (event) {
 
      // We only care about events triggered directly on the bound selectors.
 
      if (this !== event.target) {
 
        return;
 
      }
 
 
      event.stopPropagation();
 
      event.preventDefault();
 
 
      action();
 
    };
 
  }
 
 
  var handlerPrev = createHandler(lightbox.prev);
 
  var handlerNext = createHandler(lightbox.next);
 
  var handlerHide = createHandler(lightbox.hide);
 
 
  var itemTapHandler = function(event) {
 
    var index = $(this).index();
 
 
    event.preventDefault();
 
    lightbox.show(index);
 
  };
 
 
  var swipeHandler = function (event, data) {
 
    // Prevent scrolling.
 
    event.preventDefault();
 
 
    if (data.direction === 'left') {
 
      lightbox.next();
 
    } else if (data.direction === 'right') {
 
      lightbox.prev();
 
    }
 
  };
 
 
  var focusThis = function () {
 
    this.focus();
 
  };
 
 
  function preventDefault(event) {
 
    event.preventDefault();
 
  }
 
 
  function keyHandler(event) {
 
    var keyCode = event.keyCode;
 
 
    // [esc]
 
    if (keyCode === 27) {
 
      lightbox.hide();
 
    }
 
 
    // [◀]
 
    else if (keyCode === 37) {
 
      lightbox.prev();
 
    }
 
 
    // [▶]
 
    else if (keyCode === 39) {
 
      lightbox.next();
 
    }
 
  }
 
 
  function hideLightbox() {
 
    // If the lightbox hasn't been destroyed already
 
    if ($refs) {
 
      removeClass($refs.html, 'noscroll');
 
      addClass($refs.lightbox, 'hide');
 
      $refs.strip.empty();
 
      $refs.view && $refs.view.remove();
 
 
      // Reset some stuff
 
      removeClass($refs.content, 'group');
 
      addClass($refs.arrowLeft, 'inactive');
 
      addClass($refs.arrowRight, 'inactive');
 
 
      currentIndex = $refs.view = undefined;
 
    }
 
  }
 
 
  function loadImage(url, callback) {
 
    var $image = dom('img', 'img');
 
 
    $image.one('load', function () {
 
      callback($image);
 
    });
 
 
    // Start loading image.
 
    $image.attr('src', url);
 
 
    return $image;
 
  }
 
 
  function remover($element) {
 
    return function () {
 
      $element.remove();
 
    };
 
  }
 
 
  /**
 
  * Spinner
 
  */
 
  function Spinner($spinner, className, delay) {
 
    this.$element = $spinner;
 
    this.className = className;
 
    this.delay = delay || 200;
 
    this.hide();
 
  }
 
 
  Spinner.prototype.show = function () {
 
    var spinner = this;
 
 
    // Bail if we are already showing the spinner.
 
    if (spinner.timeoutId) {
 
      return;
 
    }
 
 
    spinner.timeoutId = setTimeout(function () {
 
      spinner.$element.removeClass(spinner.className);
 
      delete spinner.timeoutId;
 
    }, spinner.delay);
 
  };
 
 
  Spinner.prototype.hide = function () {
 
    var spinner = this;
 
    if (spinner.timeoutId) {
 
      clearTimeout(spinner.timeoutId);
 
      delete spinner.timeoutId;
 
      return;
 
    }
 
 
    spinner.$element.addClass(spinner.className);
 
  };
 
 
  function prefixed(string, isSelector) {
 
    return string.replace(prefixRegex, (isSelector ? ' .' : ' ') + prefix);
 
  }
 
 
  function selector(string) {
 
    return prefixed(string, true);
 
  }
 
 
  /**
 
  * jQuery.addClass with auto-prefixing
 
  * @param  {jQuery} Element to add class to
 
  * @param  {string} Class name that will be prefixed and added to element
 
  * @return {jQuery}
 
  */
 
  function addClass($element, className) {
 
    return $element.addClass(prefixed(className));
 
  }
 
 
  /**
 
  * jQuery.removeClass with auto-prefixing
 
  * @param  {jQuery} Element to remove class from
 
  * @param  {string} Class name that will be prefixed and removed from element
 
  * @return {jQuery}
 
  */
 
  function removeClass($element, className) {
 
    return $element.removeClass(prefixed(className));
 
  }
 
 
  /**
 
  * jQuery.toggleClass with auto-prefixing
 
  * @param  {jQuery}  Element where class will be toggled
 
  * @param  {string}  Class name that will be prefixed and toggled
 
  * @param  {boolean} Optional boolean that determines if class will be added or removed
 
  * @return {jQuery}
 
  */
 
  function toggleClass($element, className, shouldAdd) {
 
    return $element.toggleClass(prefixed(className), shouldAdd);
 
  }
 
 
  /**
 
  * Create a new DOM element wrapped in a jQuery object,
 
  * decorated with our custom methods.
 
  * @param  {string} className
 
  * @param  {string} [tag]
 
  * @return {jQuery}
 
  */
 
  function dom(className, tag) {
 
    return addClass($(document.createElement(tag || 'div')), className);
 
  }
 
 
  function isObject(value) {
 
    return typeof value === 'object' && value != null && !isArray(value);
 
  }
 
 
  function svgDataUri(width, height) {
 
    var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + width + '" height="' + height + '"/>';
 
    return 'data:image/svg+xml;charset=utf-8,' + encodeURI(svg);
 
  }
 
 
  // Compute some dimensions manually for iOS, because of buggy support for VH.
 
  // Also, Android built-in browser does not support viewport units.
 
  (function () {
 
    var ua = window.navigator.userAgent;
 
    var iOS = /(iPhone|iPod|iPad).+AppleWebKit/i.test(ua);
 
    var android = ua.indexOf('Android ') > -1 && ua.indexOf('Chrome') === -1;
 
 
    if (!iOS && !android) {
 
      return;
 
    }
 
 
    var styleNode = document.createElement('style');
 
    document.head.appendChild(styleNode);
 
    window.addEventListener('orientationchange', refresh, true);
 
 
    function refresh() {
 
      var vh = window.innerHeight;
 
      var vw = window.innerWidth;
 
      var content =
 
        '.w-lightbox-content, .w-lightbox-view, .w-lightbox-view:before {' +
 
          'height:' + vh + 'px' +
 
        '}' +
 
        '.w-lightbox-view {' +
 
          'width:' + vw + 'px' +
 
        '}' +
 
        '.w-lightbox-group, .w-lightbox-group .w-lightbox-view, .w-lightbox-group .w-lightbox-view:before {' +
 
          'height:' + (0.86 * vh) + 'px' +
 
        '}' +
 
        '.w-lightbox-image {' +
 
          'max-width:' + vw + 'px;' +
 
          'max-height:' + vh + 'px' +
 
        '}' +
 
        '.w-lightbox-group .w-lightbox-image {' +
 
          'max-height:' + (0.86 * vh) + 'px' +
 
        '}' +
 
        '.w-lightbox-strip {' +
 
          'padding: 0 ' + (0.01 * vh) + 'px' +
 
        '}' +
 
        '.w-lightbox-item {' +
 
          'width:' + (0.1 * vh) + 'px;' +
 
          'padding:' + (0.02 * vh) + 'px ' + (0.01 * vh) + 'px' +
 
        '}' +
 
        '.w-lightbox-thumbnail {' +
 
          'height:' + (0.1 * vh) + 'px' +
 
        '}' +
 
        '@media (min-width: 768px) {' +
 
          '.w-lightbox-content, .w-lightbox-view, .w-lightbox-view:before {' +
 
            'height:' + (0.96 * vh) + 'px' +
 
          '}' +
 
          '.w-lightbox-content {' +
 
            'margin-top:' + (0.02 * vh) + 'px' +
 
          '}' +
 
          '.w-lightbox-group, .w-lightbox-group .w-lightbox-view, .w-lightbox-group .w-lightbox-view:before {' +
 
            'height:' + (0.84 * vh) + 'px' +
 
          '}' +
 
          '.w-lightbox-image {' +
 
            'max-width:' + (0.96 * vw) + 'px;' +
 
            'max-height:' + (0.96 * vh) + 'px' +
 
          '}' +
 
          '.w-lightbox-group .w-lightbox-image {' +
 
            'max-width:' + (0.823 * vw) + 'px;' +
 
            'max-height:' + (0.84 * vh) + 'px' +
 
          '}' +
 
        '}';
 
 
      styleNode.textContent = content;
 
    }
 
 
    refresh();
 
  })();
 
 
  return lightbox;
 
}
 
 
Webflow.define('lightbox', module.exports = function($, _) {
 
  var api = {};
 
  var lightbox = createLightbox(window, document, $);
 
  var $doc = $(document);
 
  var $body;
 
  var $lightboxes;
 
  var designer;
 
  var inApp = Webflow.env();
 
  var namespace = '.w-lightbox';
 
  var groups;
 
 
  // -----------------------------------
 
  // Module methods
 
 
  api.ready = api.design = api.preview = init;
 
 
  // -----------------------------------
 
  // Private methods
 
 
  function init() {
 
    designer = inApp && Webflow.env('design');
 
    $body = $(document.body);
 
 
    // Reset Lightbox
 
    lightbox.destroy();
 
 
    // Reset groups
 
    groups = {};
 
 
    // Find all instances on the page
 
    $lightboxes = $doc.find(namespace);
 
 
    // Instantiate all lighboxes
 
    $lightboxes.webflowLightBox();
 
  }
 
 
  jQuery.fn.extend({
 
    webflowLightBox: function() {
 
      var $el = this;
 
      $.each($el, function(i, el) {
 
        // Store state in data
 
        var data = $.data(el, namespace);
 
        if (!data) {
 
          data = $.data(el, namespace, {
 
            el: $(el),
 
            mode: 'images',
 
            images: [],
 
            embed: ''
 
          });
 
        }
 
 
        // Remove old events
 
        data.el.off(namespace);
 
 
        // Set config from json script tag
 
        configure(data);
 
 
        // Add events based on mode
 
        if (designer) {
 
          data.el.on('setting' + namespace, configure.bind(null, data));
 
        } else {
 
          data.el
 
            .on('tap' + namespace, tapHandler(data))
 
            // Prevent page scrolling to top when clicking on lightbox triggers.
 
            .on('click' + namespace, function (e) { e.preventDefault(); });
 
        }
 
      });
 
    }
 
  });
 
 
  function configure(data) {
 
    var json = data.el.children('.w-json').html();
 
    var groupName, groupItems;
 
 
    if (!json) {
 
      data.items = [];
 
      return;
 
    }
 
 
    try {
 
      json = JSON.parse(json);
 
    } catch(e) {
 
      console.error('Malformed lightbox JSON configuration.', e);
 
    }
 
 
    supportOldLightboxJson(json);
 
 
    groupName = json.group;
 
 
    if (groupName) {
 
      groupItems = groups[groupName];
 
      if (!groupItems) {
 
        groupItems = groups[groupName] = [];
 
      }
 
 
      data.items = groupItems;
 
 
      if (json.items.length) {
 
        data.index = groupItems.length;
 
        groupItems.push.apply(groupItems, json.items);
 
      }
 
    } else {
 
      data.items = json.items;
 
    }
 
  }
 
 
  function tapHandler(data) {
 
    return function () {
 
      data.items.length && lightbox(data.items, data.index || 0);
 
    };
 
  }
 
 
  function supportOldLightboxJson(data) {
 
    if (data.images) {
 
      data.images.forEach(function (item) {
 
        item.type = 'image';
 
      });
 
      data.items = data.images;
 
    }
 
 
    if (data.embed) {
 
      data.embed.type = 'video';
 
      data.items = [data.embed];
 
    }
 
 
    if (data.groupId) {
 
      data.group = data.groupId;
 
    }
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 11 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Auto-select links to current page or section
 
*/
 
 
var Webflow = __webpack_require__(1);
 
 
Webflow.define('links', module.exports = function($, _) {
 
  var api = {};
 
  var $win = $(window);
 
  var designer;
 
  var inApp = Webflow.env();
 
  var location = window.location;
 
  var tempLink = document.createElement('a');
 
  var linkCurrent = 'w--current';
 
  var validHash = /^#[a-zA-Z][\w:.-]*$/;
 
  var indexPage = /index\.(html|php)$/;
 
  var dirList = /\/$/;
 
  var anchors;
 
  var slug;
 
 
  // -----------------------------------
 
  // Module methods
 
 
  api.ready = api.design = api.preview = init;
 
 
  // -----------------------------------
 
  // Private methods
 
 
  function init() {
 
    designer = inApp && Webflow.env('design');
 
    slug = Webflow.env('slug') || location.pathname || '';
 
 
    // Reset scroll listener, init anchors
 
    Webflow.scroll.off(scroll);
 
    anchors = [];
 
 
    // Test all links for a selectable href
 
    var links = document.links;
 
    for (var i = 0; i < links.length; ++i) {
 
      select(links[i]);
 
    }
 
 
    // Listen for scroll if any anchors exist
 
    if (anchors.length) {
 
      Webflow.scroll.on(scroll);
 
      scroll();
 
    }
 
  }
 
 
  function select(link) {
 
    var href = (designer && link.getAttribute('href-disabled')) || link.getAttribute('href');
 
    tempLink.href = href;
 
 
    // Ignore any hrefs with a colon to safely avoid all uri schemes
 
    if (href.indexOf(':') >= 0) return;
 
 
    var $link = $(link);
 
 
    // Check for valid hash links w/ sections and use scroll anchor
 
    if (href.indexOf('#') === 0 && validHash.test(href)) {
 
      var $section = $(href);
 
      $section.length && anchors.push({ link: $link, sec: $section, active: false });
 
      return;
 
    }
 
 
    // Ignore empty # links
 
    if (href === '#') return;
 
 
    // Determine whether the link should be selected
 
    var match = (tempLink.href === location.href) || (href === slug) || (indexPage.test(href) && dirList.test(slug));
 
    setClass($link, linkCurrent, match);
 
  }
 
 
  function scroll() {
 
    var viewTop = $win.scrollTop();
 
    var viewHeight = $win.height();
 
 
    // Check each anchor for a section in view
 
    _.each(anchors, function(anchor) {
 
      var $link = anchor.link;
 
      var $section = anchor.sec;
 
      var top = $section.offset().top;
 
      var height = $section.outerHeight();
 
      var offset = viewHeight * 0.5;
 
      var active = ($section.is(':visible') &&
 
        top + height - offset >= viewTop &&
 
        top + offset <= viewTop + viewHeight);
 
      if (anchor.active === active) return;
 
      anchor.active = active;
 
      setClass($link, linkCurrent, active);
 
      if (designer) $link[0].__wf_current = active;
 
    });
 
  }
 
 
  function setClass($elem, className, add) {
 
    var exists = $elem.hasClass(className);
 
    if (add && exists) return;
 
    if (!add && !exists) return;
 
    add ? $elem.addClass(className) : $elem.removeClass(className);
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 12 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Maps widget
 
*/
 
 
var Webflow = __webpack_require__(1);
 
 
Webflow.define('maps', module.exports = function($, _) {
 
  var api = {};
 
  var $doc = $(document);
 
  var google = null;
 
  var $maps;
 
  var namespace = '.w-widget-map';
 
 
  // -----------------------------------
 
  // Module methods
 
 
  api.ready = function() {
 
    // Init Maps on the front-end
 
    if (!Webflow.env()) initMaps();
 
  };
 
 
  api.preview = function() {
 
    // Update active map nodes
 
    $maps = $doc.find(namespace);
 
    // Listen for resize events
 
    Webflow.resize.off(triggerRedraw);
 
    if ($maps.length) {
 
      Webflow.resize.on(triggerRedraw);
 
      triggerRedraw();
 
    }
 
  };
 
 
  api.design = function(evt) {
 
    // Update active map nodes
 
    $maps = $doc.find(namespace);
 
    // Stop listening for resize events
 
    Webflow.resize.off(triggerRedraw);
 
    // Redraw to account for page changes
 
    $maps.length && _.defer(triggerRedraw);
 
  };
 
 
  api.destroy = removeListeners;
 
 
  // -----------------------------------
 
  // Private methods
 
 
  // Trigger redraw in designer or preview mode
 
  function triggerRedraw() {
 
    if ($maps.length && Webflow.app) {
 
      $maps.each(Webflow.app.redrawElement);
 
    }
 
  }
 
 
  function initMaps() {
 
    $maps = $doc.find(namespace);
 
    if (!$maps.length) return;
 
 
    if (google === null) {
 
      $.getScript('https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=_wf_maps_loaded');
 
      window._wf_maps_loaded = mapsLoaded;
 
    } else {
 
      mapsLoaded();
 
    }
 
 
    function mapsLoaded() {
 
      window._wf_maps_loaded = function() {};
 
      google = window.google;
 
      $maps.each(renderMap);
 
      removeListeners();
 
      addListeners();
 
    }
 
  }
 
 
  function removeListeners() {
 
    Webflow.resize.off(resizeMaps);
 
    Webflow.redraw.off(resizeMaps);
 
  }
 
 
  function addListeners() {
 
    Webflow.resize.on(resizeMaps);
 
    Webflow.redraw.on(resizeMaps);
 
  }
 
 
  // Render map onto each element
 
  function renderMap(i, el) {
 
    var data = $(el).data();
 
    getState(el, data);
 
  }
 
 
  function resizeMaps() {
 
    $maps.each(resizeMap);
 
  }
 
 
  // Resize map when window changes
 
  function resizeMap(i, el) {
 
    var state = getState(el);
 
    google.maps.event.trigger(state.map, 'resize');
 
    state.setMapPosition();
 
  }
 
 
  // Store state on element data
 
  var store = 'w-widget-map';
 
  function getState(el, data) {
 
 
    var state = $.data(el, store);
 
    if (state) return state;
 
 
    var $el = $(el);
 
    state = $.data(el, store, {
 
      // Default options
 
      latLng: '51.511214,-0.119824',
 
      tooltip: '',
 
      style: 'roadmap',
 
      zoom: 12,
 
 
      // Marker
 
      marker: new google.maps.Marker({
 
        draggable: false
 
      }),
 
 
      // Tooltip infowindow
 
      infowindow: new google.maps.InfoWindow({
 
        disableAutoPan: true
 
      })
 
    });
 
 
    // LatLng center point
 
    var latLng = data.widgetLatlng || state.latLng;
 
    state.latLng = latLng;
 
    var coords = latLng.split(',');
 
    var latLngObj = new google.maps.LatLng(coords[0], coords[1]);
 
    state.latLngObj = latLngObj;
 
 
    // Disable touch events
 
    var mapDraggable = (Webflow.env.touch && data.disableTouch) ? false : true;
 
 
    // Map instance
 
    state.map = new google.maps.Map(el, {
 
      center: state.latLngObj,
 
      zoom: state.zoom,
 
      maxZoom: 18,
 
      mapTypeControl: false,
 
      panControl: false,
 
      streetViewControl: false,
 
      scrollwheel: !data.disableScroll,
 
      draggable: mapDraggable,
 
      zoomControl: true,
 
      zoomControlOptions: {
 
        style: google.maps.ZoomControlStyle.SMALL
 
      },
 
      mapTypeId: state.style
 
    });
 
    state.marker.setMap(state.map);
 
 
    // Set map position and offset
 
    state.setMapPosition = function() {
 
      state.map.setCenter(state.latLngObj);
 
      var offsetX = 0;
 
      var offsetY = 0;
 
      var padding = $el.css(['paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft']);
 
      offsetX -= parseInt(padding.paddingLeft, 10);
 
      offsetX += parseInt(padding.paddingRight, 10);
 
      offsetY -= parseInt(padding.paddingTop, 10);
 
      offsetY += parseInt(padding.paddingBottom, 10);
 
      if (offsetX || offsetY) {
 
        state.map.panBy(offsetX, offsetY);
 
      }
 
      $el.css('position', ''); // Remove injected position
 
    };
 
 
    // Fix position after first tiles have loaded
 
    google.maps.event.addListener(state.map, 'tilesloaded', function() {
 
      google.maps.event.clearListeners(state.map, 'tilesloaded');
 
      state.setMapPosition();
 
    });
 
 
    // Set initial position
 
    state.setMapPosition();
 
    state.marker.setPosition(state.latLngObj);
 
    state.infowindow.setPosition(state.latLngObj);
 
 
    // Draw tooltip
 
    var tooltip = data.widgetTooltip;
 
    if (tooltip) {
 
      state.tooltip = tooltip;
 
      state.infowindow.setContent(tooltip);
 
      if (!state.infowindowOpen) {
 
        state.infowindow.open(state.map, state.marker);
 
        state.infowindowOpen = true;
 
      }
 
    }
 
 
    // Map style - options.style
 
    var style = data.widgetStyle;
 
    if (style) {
 
      state.map.setMapTypeId(style);
 
    }
 
 
    // Zoom - options.zoom
 
    var zoom = data.widgetZoom;
 
    if (zoom != null) {
 
      state.zoom = zoom;
 
      state.map.setZoom(+zoom);
 
    }
 
 
    // Click marker to open in google maps
 
    google.maps.event.addListener(state.marker, 'click', function() {
 
      window.open('https://maps.google.com/?z=' + state.zoom + '&daddr=' + state.latLng);
 
    });
 
 
    return state;
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 13 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Navbar component
 
*/
 
 
var Webflow = __webpack_require__(1);
 
var IXEvents = __webpack_require__(2);
 
 
Webflow.define('navbar', module.exports = function($, _) {
 
  var api = {};
 
  var tram = $.tram;
 
  var $win = $(window);
 
  var $doc = $(document);
 
  var $body;
 
  var $navbars;
 
  var designer;
 
  var inApp = Webflow.env();
 
  var overlay = '<div class="w-nav-overlay" data-wf-ignore />';
 
  var namespace = '.w-nav';
 
  var buttonOpen = 'w--open';
 
  var menuOpen = 'w--nav-menu-open';
 
  var linkOpen = 'w--nav-link-open';
 
  var ix = IXEvents.triggers;
 
 
  // -----------------------------------
 
  // Module methods
 
 
  api.ready = api.design = api.preview = init;
 
  api.destroy = removeListeners;
 
 
  // -----------------------------------
 
  // Private methods
 
 
  function init() {
 
    designer = inApp && Webflow.env('design');
 
    $body = $(document.body);
 
 
    // Find all instances on the page
 
    $navbars = $doc.find(namespace);
 
    if (!$navbars.length) return;
 
    $navbars.each(build);
 
 
    // Wire events
 
    removeListeners();
 
    addListeners();
 
  }
 
 
  function removeListeners() {
 
    Webflow.resize.off(resizeAll);
 
  }
 
 
  function addListeners() {
 
    Webflow.resize.on(resizeAll);
 
  }
 
 
  function resizeAll() {
 
    $navbars.each(resize);
 
  }
 
 
  function build(i, el) {
 
    var $el = $(el);
 
 
    // Store state in data
 
    var data = $.data(el, namespace);
 
    if (!data) data = $.data(el, namespace, { open: false, el: $el, config: {} });
 
    data.menu = $el.find('.w-nav-menu');
 
    data.links = data.menu.find('.w-nav-link');
 
    data.dropdowns = data.menu.find('.w-dropdown');
 
    data.button = $el.find('.w-nav-button');
 
    data.container = $el.find('.w-container');
 
    data.outside = outside(data);
 
 
    // Remove old events
 
    data.el.off(namespace);
 
    data.button.off(namespace);
 
    data.menu.off(namespace);
 
 
    // Set config from data attributes
 
    configure(data);
 
 
    // Add events based on mode
 
    if (designer) {
 
      removeOverlay(data);
 
      data.el.on('setting' + namespace, handler(data));
 
    } else {
 
      addOverlay(data);
 
      data.button.on('tap' + namespace, toggle(data));
 
      data.menu.on('click' + namespace, 'a', navigate(data));
 
    }
 
 
    // Trigger initial resize
 
    resize(i, el);
 
  }
 
 
  function removeOverlay(data) {
 
    if (!data.overlay) return;
 
    close(data, true);
 
    data.overlay.remove();
 
    data.overlay = null;
 
  }
 
 
  function addOverlay(data) {
 
    if (data.overlay) return;
 
    data.overlay = $(overlay).appendTo(data.el);
 
    data.parent = data.menu.parent();
 
    close(data, true);
 
  }
 
 
  function configure(data) {
 
    var config = {};
 
    var old = data.config || {};
 
 
    // Set config options from data attributes
 
    var animation = config.animation = data.el.attr('data-animation') || 'default';
 
    config.animOver = /^over/.test(animation);
 
    config.animDirect = /left$/.test(animation) ? -1 : 1;
 
 
    // Re-open menu if the animation type changed
 
    if (old.animation !== animation) {
 
      data.open && _.defer(reopen, data);
 
    }
 
 
    config.easing = data.el.attr('data-easing') || 'ease';
 
    config.easing2 = data.el.attr('data-easing2') || 'ease';
 
 
    var duration = data.el.attr('data-duration');
 
    config.duration = duration != null ? +duration : 400;
 
 
    config.docHeight = data.el.attr('data-doc-height');
 
 
    // Store config in data
 
    data.config = config;
 
  }
 
 
  function handler(data) {
 
    return function(evt, options) {
 
      options = options || {};
 
      var winWidth = $win.width();
 
      configure(data);
 
      options.open === true && open(data, true);
 
      options.open === false && close(data, true);
 
      // Reopen if media query changed after setting
 
      data.open && _.defer(function() {
 
        if (winWidth !== $win.width()) reopen(data);
 
      });
 
    };
 
  }
 
 
  function reopen(data) {
 
    if (!data.open) return;
 
    close(data, true);
 
    open(data, true);
 
  }
 
 
  function toggle(data) {
 
    // Debounce toggle to wait for accurate open state
 
    return _.debounce(function(evt) {
 
      data.open ? close(data) : open(data);
 
    });
 
  }
 
 
  function navigate(data) {
 
    return function(evt) {
 
      var link = $(this);
 
      var href = link.attr('href');
 
 
      // Avoid late clicks on touch devices
 
      if (!Webflow.validClick(evt.currentTarget)) {
 
        evt.preventDefault();
 
        return;
 
      }
 
 
      // Close when navigating to an in-page anchor
 
      if (href && href.indexOf('#') === 0 && data.open) {
 
        close(data);
 
      }
 
    };
 
  }
 
 
  function outside(data) {
 
    // Unbind previous tap handler if it exists
 
    if (data.outside) $doc.off('tap' + namespace, data.outside);
 
 
    // Close menu when tapped outside, debounced to wait for state
 
    return _.debounce(function(evt) {
 
      if (!data.open) return;
 
      var menu = $(evt.target).closest('.w-nav-menu');
 
      if (!data.menu.is(menu)) {
 
        close(data);
 
      }
 
    });
 
  }
 
 
  function resize(i, el) {
 
    var data = $.data(el, namespace);
 
    // Check for collapsed state based on button display
 
    var collapsed = data.collapsed = data.button.css('display') !== 'none';
 
    // Close menu if button is no longer visible (and not in designer)
 
    if (data.open && !collapsed && !designer) close(data, true);
 
    // Set max-width of links + dropdowns to match container
 
    if (data.container.length) {
 
      var updateEachMax = updateMax(data);
 
      data.links.each(updateEachMax);
 
      data.dropdowns.each(updateEachMax);
 
    }
 
    // If currently open, update height to match body
 
    if (data.open) {
 
      setOverlayHeight(data);
 
    }
 
  }
 
 
  var maxWidth = 'max-width';
 
  function updateMax(data) {
 
    // Set max-width of each element to match container
 
    var containMax = data.container.css(maxWidth);
 
    if (containMax === 'none') containMax = '';
 
    return function(i, link) {
 
      link = $(link);
 
      link.css(maxWidth, '');
 
      // Don't set the max-width if an upstream value exists
 
      if (link.css(maxWidth) === 'none') link.css(maxWidth, containMax);
 
    };
 
  }
 
 
  function open(data, immediate) {
 
    if (data.open) return;
 
    data.open = true;
 
    data.menu.addClass(menuOpen);
 
    data.links.addClass(linkOpen);
 
    data.button.addClass(buttonOpen);
 
    var config = data.config;
 
    var animation = config.animation;
 
    if (animation === 'none' || !tram.support.transform) immediate = true;
 
    var bodyHeight = setOverlayHeight(data);
 
    var menuHeight = data.menu.outerHeight(true);
 
    var menuWidth = data.menu.outerWidth(true);
 
    var navHeight = data.el.height();
 
    var navbarEl = data.el[0];
 
    resize(0, navbarEl);
 
    ix.intro(0, navbarEl);
 
    Webflow.redraw.up();
 
 
    // Listen for tap outside events
 
    if (!designer) $doc.on('tap' + namespace, data.outside);
 
 
    // No transition for immediate
 
    if (immediate) return;
 
 
    var transConfig = 'transform ' + config.duration + 'ms ' + config.easing;
 
 
    // Add menu to overlay
 
    if (data.overlay) {
 
      data.overlay.show().append(data.menu);
 
    }
 
 
    // Over left/right
 
    if (config.animOver) {
 
      tram(data.menu)
 
      .add(transConfig)
 
      .set({ x: config.animDirect * menuWidth, height: bodyHeight }).start({ x: 0 });
 
      data.overlay && data.overlay.width(menuWidth);
 
      return;
 
    }
 
 
    // Drop Down
 
    var offsetY = navHeight + menuHeight;
 
    tram(data.menu)
 
      .add(transConfig)
 
      .set({ y: -offsetY }).start({ y: 0 });
 
  }
 
 
  function setOverlayHeight(data) {
 
    var config = data.config;
 
    var bodyHeight = config.docHeight ? $doc.height() : $body.height();
 
    if (config.animOver) {
 
      data.menu.height(bodyHeight);
 
    } else if (data.el.css('position') !== 'fixed') {
 
      bodyHeight -= data.el.height();
 
    }
 
    data.overlay && data.overlay.height(bodyHeight);
 
    return bodyHeight;
 
  }
 
 
  function close(data, immediate) {
 
    if (!data.open) return;
 
    data.open = false;
 
    data.button.removeClass(buttonOpen);
 
    var config = data.config;
 
    if (config.animation === 'none' || !tram.support.transform) immediate = true;
 
    var animation = config.animation;
 
    ix.outro(0, data.el[0]);
 
 
    // Stop listening for tap outside events
 
    $doc.off('tap' + namespace, data.outside);
 
 
    if (immediate) {
 
      tram(data.menu).stop();
 
      complete();
 
      return;
 
    }
 
 
    var transConfig = 'transform ' + config.duration + 'ms ' + config.easing2;
 
    var menuHeight = data.menu.outerHeight(true);
 
    var menuWidth = data.menu.outerWidth(true);
 
    var navHeight = data.el.height();
 
 
    // Over left/right
 
    if (config.animOver) {
 
      tram(data.menu)
 
        .add(transConfig)
 
        .start({ x: menuWidth * config.animDirect }).then(complete);
 
      return;
 
    }
 
 
    // Drop Down
 
    var offsetY = navHeight + menuHeight;
 
    tram(data.menu)
 
      .add(transConfig)
 
      .start({ y: -offsetY }).then(complete);
 
 
    function complete() {
 
      data.menu.height('');
 
      tram(data.menu).set({ x: 0, y: 0 });
 
      data.menu.removeClass(menuOpen);
 
      data.links.removeClass(linkOpen);
 
      if (data.overlay && data.overlay.children().length) {
 
        // Move menu back to parent
 
        data.menu.appendTo(data.parent);
 
        data.overlay.attr('style', '').hide();
 
      }
 
 
      // Trigger event so other components can hook in (dropdown)
 
      data.el.triggerHandler('w-close');
 
    }
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 14 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Smooth scroll
 
*/
 
 
var Webflow = __webpack_require__(1);
 
 
Webflow.define('scroll', module.exports = function($, _) {
 
  var $doc = $(document);
 
  var win = window;
 
  var loc = win.location;
 
  var history = inIframe() ? null : win.history;
 
  var validHash = /^[a-zA-Z][\w:.-]*$/;
 
 
  function inIframe() {
 
    try {
 
      return !!win.frameElement;
 
    } catch (e) {
 
      return true;
 
    }
 
  }
 
 
  function ready() {
 
    // If hash is already present on page load, scroll to it right away
 
    if (loc.hash) {
 
      findEl(loc.hash.substring(1));
 
    }
 
 
    // When clicking on a link, check if it links to another part of the page
 
    $doc.on('click', 'a', function(e) {
 
      if (Webflow.env('design')) {
 
        return;
 
      }
 
 
      // Ignore links being used by jQuery mobile
 
      if (window.$.mobile && $(e.currentTarget).hasClass('ui-link')) return;
 
 
      // Ignore empty # links
 
      if (this.getAttribute('href') === '#') {
 
        e.preventDefault();
 
        return;
 
      }
 
 
      var hash = this.hash ? this.hash.substring(1) : null;
 
      if (hash) {
 
        findEl(hash, e);
 
      }
 
    });
 
  }
 
 
  function findEl(hash, e) {
 
    if (!validHash.test(hash)) return;
 
 
    var el = $('#' + hash);
 
    if (!el.length) {
 
      return;
 
    }
 
 
    if (e) {
 
      e.preventDefault();
 
      e.stopPropagation();
 
    }
 
 
    // Push new history state
 
    if (loc.hash !== hash && history && history.pushState) {
 
      var oldHash = history.state && history.state.hash;
 
      if (oldHash !== hash) {
 
        history.pushState({ hash: hash }, '', '#' + hash);
 
      }
 
    }
 
 
    // If a fixed header exists, offset for the height
 
    var rootTag = Webflow.env('editor') ? '.w-editor-body' : 'body';
 
    var header = $('header, ' + rootTag + ' > .header, ' + rootTag + ' > .w-nav:not([data-no-scroll])');
 
    var offset = header.css('position') === 'fixed' ? header.outerHeight() : 0;
 
 
    win.setTimeout(function() {
 
      scroll(el, offset);
 
    }, e ? 0 : 300);
 
  }
 
 
  function scroll(el, offset){
 
    var start = $(win).scrollTop();
 
    var end = el.offset().top - offset;
 
 
    // If specified, scroll so that the element ends up in the middle of the viewport
 
    if (el.data('scroll') === 'mid') {
 
      var available = $(win).height() - offset;
 
      var elHeight = el.outerHeight();
 
      if (elHeight < available) {
 
        end -= Math.round((available - elHeight) / 2);
 
      }
 
    }
 
 
    var mult = 1;
 
 
    // Check for custom time multiplier on the body and the element
 
    $('body').add(el).each(function(i) {
 
      var time = parseFloat($(this).attr('data-scroll-time'), 10);
 
      if (!isNaN(time) && (time === 0 || time > 0)) {
 
        mult = time;
 
      }
 
    });
 
 
    // Shim for IE8 and below
 
    if (!Date.now) {
 
      Date.now = function() { return new Date().getTime(); };
 
    }
 
 
    var clock = Date.now();
 
    var animate = win.requestAnimationFrame || win.mozRequestAnimationFrame || win.webkitRequestAnimationFrame || function(fn) { win.setTimeout(fn, 15); };
 
    var duration = (472.143 * Math.log(Math.abs(start - end) +125) - 2000) * mult;
 
 
    var step = function() {
 
      var elapsed = Date.now() - clock;
 
      win.scroll(0, getY(start, end, elapsed, duration));
 
 
      if (elapsed <= duration) {
 
        animate(step);
 
      }
 
    };
 
 
    step();
 
  }
 
 
  function getY(start, end, elapsed, duration) {
 
    if (elapsed > duration) {
 
      return end;
 
    }
 
 
    return start + (end - start) * ease(elapsed / duration);
 
  }
 
 
  function ease(t) {
 
    return t<0.5 ? 4 * t * t * t : (t-1) * (2 * t-2) * (2 * t-2)+1;
 
  }
 
 
  // Export module
 
  return { ready: ready };
 
});
 
 
 
/***/ },
 
/* 15 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Slider component
 
*/
 
 
var Webflow = __webpack_require__(1);
 
var IXEvents = __webpack_require__(2);
 
 
Webflow.define('slider', module.exports = function($, _) {
 
  var api = {};
 
  var tram = $.tram;
 
  var $doc = $(document);
 
  var $sliders;
 
  var designer;
 
  var inApp = Webflow.env();
 
  var namespace = '.w-slider';
 
  var dot = '<div class="w-slider-dot" data-wf-ignore />';
 
  var ix = IXEvents.triggers;
 
  var fallback;
 
  var inRedraw;
 
 
  // -----------------------------------
 
  // Module methods
 
 
  api.ready = function() {
 
    init();
 
  };
 
 
  api.design = function() {
 
    designer = true;
 
    init();
 
  };
 
 
  api.preview = function() {
 
    designer = false;
 
    init();
 
  };
 
 
  api.redraw = function() {
 
    inRedraw = true;
 
    init();
 
  };
 
 
  api.destroy = removeListeners;
 
 
  // -----------------------------------
 
  // Private methods
 
 
  function init() {
 
    // Find all sliders on the page
 
    $sliders = $doc.find(namespace);
 
    if (!$sliders.length) return;
 
    $sliders.filter(':visible').each(build);
 
    inRedraw = null;
 
    if (fallback) return;
 
 
    removeListeners();
 
    addListeners();
 
  }
 
 
  function removeListeners() {
 
    Webflow.resize.off(renderAll);
 
    Webflow.redraw.off(api.redraw);
 
  }
 
 
  function addListeners() {
 
    Webflow.resize.on(renderAll);
 
    Webflow.redraw.on(api.redraw);
 
  }
 
 
  function renderAll() {
 
    $sliders.filter(':visible').each(render);
 
  }
 
 
  function build(i, el) {
 
    var $el = $(el);
 
 
    // Store slider state in data
 
    var data = $.data(el, namespace);
 
    if (!data) {
 
      data = $.data(el, namespace, {
 
        index: 0,
 
        depth: 1,
 
        el: $el,
 
        config: {}
 
      });
 
    }
 
    data.mask = $el.children('.w-slider-mask');
 
    data.left = $el.children('.w-slider-arrow-left');
 
    data.right = $el.children('.w-slider-arrow-right');
 
    data.nav = $el.children('.w-slider-nav');
 
    data.slides = data.mask.children('.w-slide');
 
    data.slides.each(ix.reset);
 
    if (inRedraw) data.maskWidth = 0;
 
 
    // Disable in old browsers
 
    if (!tram.support.transform) {
 
      data.left.hide();
 
      data.right.hide();
 
      data.nav.hide();
 
      fallback = true;
 
      return;
 
    }
 
 
    // Remove old events
 
    data.el.off(namespace);
 
    data.left.off(namespace);
 
    data.right.off(namespace);
 
    data.nav.off(namespace);
 
 
    // Set config from data attributes
 
    configure(data);
 
 
    // Add events based on mode
 
    if (designer) {
 
      data.el.on('setting' + namespace, handler(data));
 
      stopTimer(data);
 
      data.hasTimer = false;
 
    } else {
 
      data.el.on('swipe' + namespace, handler(data));
 
      data.left.on('tap' + namespace, previousFunction(data));
 
      data.right.on('tap' + namespace, next(data));
 
 
      // Start timer if autoplay is true, only once
 
      if (data.config.autoplay && !data.hasTimer) {
 
        data.hasTimer = true;
 
        data.timerCount = 1;
 
        startTimer(data);
 
      }
 
    }
 
 
    // Listen to nav events
 
    data.nav.on('tap' + namespace, '> div', handler(data));
 
 
    // Remove gaps from formatted html (for inline-blocks)
 
    if (!inApp) {
 
      data.mask.contents().filter(function() {
 
        return this.nodeType === 3;
 
      }).remove();
 
    }
 
 
    // Run first render
 
    render(i, el);
 
  }
 
 
  function configure(data) {
 
    var config = {};
 
 
    config.crossOver = 0;
 
 
    // Set config options from data attributes
 
    config.animation = data.el.attr('data-animation') || 'slide';
 
    if (config.animation === 'outin') {
 
      config.animation = 'cross';
 
      config.crossOver = 0.5;
 
    }
 
    config.easing = data.el.attr('data-easing') || 'ease';
 
 
    var duration = data.el.attr('data-duration');
 
    config.duration = duration != null ? +duration : 500;
 
 
    if (+data.el.attr('data-infinite')) config.infinite = true;
 
    if (+data.el.attr('data-disable-swipe')) config.disableSwipe = true;
 
 
    if (+data.el.attr('data-hide-arrows')) {
 
      config.hideArrows = true;
 
    } else if (data.config.hideArrows) {
 
      data.left.show();
 
      data.right.show();
 
    }
 
 
    if (+data.el.attr('data-autoplay')) {
 
      config.autoplay = true;
 
      config.delay = +data.el.attr('data-delay') || 2000;
 
      config.timerMax = +data.el.attr('data-autoplay-limit');
 
      // Disable timer on first touch or mouse down
 
      var touchEvents = 'mousedown' + namespace + ' touchstart' + namespace;
 
      if (!designer) {
 
        data.el.off(touchEvents).one(touchEvents, function() {
 
          stopTimer(data);
 
        });
 
      }
 
    }
 
 
    // Use edge buffer to help calculate page count
 
    var arrowWidth = data.right.width();
 
    config.edge = arrowWidth ? arrowWidth + 40 : 100;
 
 
    // Store config in data
 
    data.config = config;
 
  }
 
 
  function previousFunction(data) {
 
    return function(evt) {
 
      change(data, { index: data.index - 1, vector: -1 });
 
    };
 
  }
 
 
  function next(data) {
 
    return function(evt) {
 
      change(data, { index: data.index + 1, vector: 1 });
 
    };
 
  }
 
 
  function select(data, value) {
 
    // Select page based on slide element index
 
    var found = null;
 
    if (value === data.slides.length) {
 
      init(); layout(data); // Rebuild and find new slides
 
    }
 
    _.each(data.anchors, function(anchor, index) {
 
      $(anchor.els).each(function(i, el) {
 
        if ($(el).index() === value) found = index;
 
      });
 
    });
 
    if (found != null) change(data, { index: found, immediate: true });
 
  }
 
 
  function startTimer(data) {
 
    stopTimer(data);
 
    var config = data.config;
 
    var timerMax = config.timerMax;
 
    if (timerMax && data.timerCount++ > timerMax) return;
 
    data.timerId = window.setTimeout(function() {
 
      if (data.timerId == null || designer) return;
 
      next(data)();
 
      startTimer(data);
 
    }, config.delay);
 
  }
 
 
  function stopTimer(data) {
 
    window.clearTimeout(data.timerId);
 
    data.timerId = null;
 
  }
 
 
  function handler(data) {
 
    return function(evt, options) {
 
      options = options || {};
 
      var config = data.config;
 
 
      // Designer settings
 
      if (designer && evt.type === 'setting') {
 
        if (options.select === 'prev') return previousFunction(data)();
 
        if (options.select === 'next') return next(data)();
 
        configure(data);
 
        layout(data);
 
        if (options.select == null) return;
 
        select(data, options.select);
 
        return;
 
      }
 
 
      // Swipe event
 
      if (evt.type === 'swipe') {
 
        if (config.disableSwipe) return;
 
        if (Webflow.env('editor')) return;
 
        if (options.direction === 'left') return next(data)();
 
        if (options.direction === 'right') return previousFunction(data)();
 
        return;
 
      }
 
 
      // Page buttons
 
      if (data.nav.has(evt.target).length) {
 
        change(data, { index: $(evt.target).index() });
 
      }
 
    };
 
  }
 
 
  function change(data, options) {
 
    options = options || {};
 
    var config = data.config;
 
    var anchors = data.anchors;
 
 
    // Set new index
 
    data.previous = data.index;
 
    var index = options.index;
 
    var shift = {};
 
    if (index < 0) {
 
      index = anchors.length - 1;
 
      if (config.infinite) {
 
        // Shift first slide to the end
 
        shift.x = -data.endX;
 
        shift.from = 0;
 
        shift.to = anchors[0].width;
 
      }
 
    } else if (index >= anchors.length) {
 
      index = 0;
 
      if (config.infinite) {
 
        // Shift last slide to the start
 
        shift.x = anchors[anchors.length - 1].width;
 
        shift.from = -anchors[anchors.length - 1].x;
 
        shift.to = shift.from - shift.x;
 
      }
 
    }
 
    data.index = index;
 
 
    // Select page nav
 
    var active = data.nav.children().eq(data.index).addClass('w-active');
 
    data.nav.children().not(active).removeClass('w-active');
 
 
    // Hide arrows
 
    if (config.hideArrows) {
 
      data.index === anchors.length - 1 ? data.right.hide() : data.right.show();
 
      data.index === 0 ? data.left.hide() : data.left.show();
 
    }
 
 
    // Get page offset from anchors
 
    var lastOffsetX = data.offsetX || 0;
 
    var offsetX = data.offsetX = -anchors[data.index].x;
 
    var resetConfig = { x: offsetX, opacity: 1, visibility: '' };
 
 
    // Transition slides
 
    var targets = $(anchors[data.index].els);
 
    var prevTargs = $(anchors[data.previous] && anchors[data.previous].els);
 
    var others = data.slides.not(targets);
 
    var animation = config.animation;
 
    var easing = config.easing;
 
    var duration = Math.round(config.duration);
 
    var vector = options.vector || (data.index > data.previous ? 1 : -1);
 
    var fadeRule = 'opacity ' + duration + 'ms ' + easing;
 
    var slideRule = 'transform ' + duration + 'ms ' + easing;
 
 
    // Trigger IX events
 
    if (!designer) {
 
      targets.each(ix.intro);
 
      others.each(ix.outro);
 
    }
 
 
    // Set immediately after layout changes (but not during redraw)
 
    if (options.immediate && !inRedraw) {
 
      tram(targets).set(resetConfig);
 
      resetOthers();
 
      return;
 
    }
 
 
    // Exit early if index is unchanged
 
    if (data.index === data.previous) return;
 
 
    // Cross Fade / Out-In
 
    if (animation === 'cross') {
 
      var reduced = Math.round(duration - duration * config.crossOver);
 
      var wait = Math.round(duration - reduced);
 
      fadeRule = 'opacity ' + reduced + 'ms ' + easing;
 
      tram(prevTargs)
 
        .set({ visibility: '' })
 
        .add(fadeRule)
 
        .start({ opacity: 0 });
 
      tram(targets)
 
        .set({ visibility: '', x: offsetX, opacity: 0, zIndex: data.depth++ })
 
        .add(fadeRule)
 
        .wait(wait)
 
        .then({ opacity: 1 })
 
        .then(resetOthers);
 
      return;
 
    }
 
 
    // Fade Over
 
    if (animation === 'fade') {
 
      tram(prevTargs)
 
        .set({ visibility: '' })
 
        .stop();
 
      tram(targets)
 
        .set({ visibility: '', x: offsetX, opacity: 0, zIndex: data.depth++ })
 
        .add(fadeRule)
 
        .start({ opacity: 1 })
 
        .then(resetOthers);
 
      return;
 
    }
 
 
    // Slide Over
 
    if (animation === 'over') {
 
      resetConfig = { x: data.endX };
 
      tram(prevTargs)
 
        .set({ visibility: '' })
 
        .stop();
 
      tram(targets)
 
        .set({ visibility: '', zIndex: data.depth++, x: offsetX + anchors[data.index].width * vector })
 
        .add(slideRule)
 
        .start({ x: offsetX })
 
        .then(resetOthers);
 
      return;
 
    }
 
 
    // Slide - infinite scroll
 
    if (config.infinite && shift.x) {
 
      tram(data.slides.not(prevTargs))
 
        .set({ visibility: '', x: shift.x })
 
        .add(slideRule)
 
        .start({ x: offsetX });
 
      tram(prevTargs)
 
        .set({ visibility: '', x: shift.from })
 
        .add(slideRule)
 
        .start({ x: shift.to });
 
      data.shifted = prevTargs;
 
 
    } else {
 
      if (config.infinite && data.shifted) {
 
        tram(data.shifted).set({ visibility: '', x: lastOffsetX });
 
        data.shifted = null;
 
      }
 
 
      // Slide - basic scroll
 
      tram(data.slides)
 
        .set({ visibility: '' })
 
        .add(slideRule)
 
        .start({ x: offsetX });
 
    }
 
 
    // Helper to move others out of view
 
    function resetOthers() {
 
      targets = $(anchors[data.index].els);
 
      others = data.slides.not(targets);
 
      if (animation !== 'slide') resetConfig.visibility = 'hidden';
 
      tram(others).set(resetConfig);
 
    }
 
  }
 
 
  function render(i, el) {
 
    var data = $.data(el, namespace);
 
    if (maskChanged(data)) return layout(data);
 
    if (designer && slidesChanged(data)) layout(data);
 
  }
 
 
  function layout(data) {
 
    // Determine page count from width of slides
 
    var pages = 1;
 
    var offset = 0;
 
    var anchor = 0;
 
    var width = 0;
 
    var maskWidth = data.maskWidth;
 
    var threshold = maskWidth - data.config.edge;
 
    if (threshold < 0) threshold = 0;
 
    data.anchors = [{ els: [], x: 0, width: 0 }];
 
    data.slides.each(function(i, el) {
 
      if (anchor - offset > threshold) {
 
        pages++;
 
        offset += maskWidth;
 
        // Store page anchor for transition
 
        data.anchors[pages - 1] = { els: [], x: anchor, width: 0 };
 
      }
 
      // Set next anchor using current width + margin
 
      width = $(el).outerWidth(true);
 
      anchor += width;
 
      data.anchors[pages - 1].width += width;
 
      data.anchors[pages - 1].els.push(el);
 
    });
 
    data.endX = anchor;
 
 
    // Build dots if nav exists and needs updating
 
    if (designer) data.pages = null;
 
    if (data.nav.length && data.pages !== pages){
 
      data.pages = pages;
 
      buildNav(data);
 
    }
 
 
    // Make sure index is still within range and call change handler
 
    var index = data.index;
 
    if (index >= pages) index = pages - 1;
 
    change(data, { immediate: true, index: index });
 
  }
 
 
  function buildNav(data) {
 
    var dots = [];
 
    var $dot;
 
    var spacing = data.el.attr('data-nav-spacing');
 
    if (spacing) spacing = parseFloat(spacing) + 'px';
 
    for (var i = 0; i < data.pages; i++) {
 
      $dot = $(dot);
 
      if (data.nav.hasClass('w-num')) $dot.text(i + 1);
 
      if (spacing != null) {
 
        $dot.css({
 
          'margin-left': spacing,
 
          'margin-right': spacing
 
        });
 
      }
 
      dots.push($dot);
 
    }
 
    data.nav.empty().append(dots);
 
  }
 
 
  function maskChanged(data) {
 
    var maskWidth = data.mask.width();
 
    if (data.maskWidth !== maskWidth) {
 
      data.maskWidth = maskWidth;
 
      return true;
 
    }
 
    return false;
 
  }
 
 
  function slidesChanged(data) {
 
    var slidesWidth = 0;
 
    data.slides.each(function(i, el) {
 
      slidesWidth += $(el).outerWidth(true);
 
    });
 
    if (data.slidesWidth !== slidesWidth) {
 
      data.slidesWidth = slidesWidth;
 
      return true;
 
    }
 
    return false;
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 16 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Tabs component
 
*/
 
 
var Webflow = __webpack_require__(1);
 
var IXEvents = __webpack_require__(2);
 
 
Webflow.define('tabs', module.exports = function($, _) {
 
  var api = {};
 
  var tram = $.tram;
 
  var $win = $(window);
 
  var $doc = $(document);
 
  var $tabs;
 
  var design;
 
  var env = Webflow.env;
 
  var safari = env.safari;
 
  var inApp = env();
 
  var tabAttr = 'data-w-tab';
 
  var namespace = '.w-tabs';
 
  var linkCurrent = 'w--current';
 
  var tabActive = 'w--tab-active';
 
  var ix = IXEvents.triggers;
 
  var inRedraw;
 
 
  // -----------------------------------
 
  // Module methods
 
 
  api.ready = api.design = api.preview = init;
 
 
  api.redraw = function() {
 
    inRedraw = true;
 
    init();
 
  };
 
 
  api.destroy = function() {
 
    $tabs = $doc.find(namespace);
 
    if (!$tabs.length) return;
 
    $tabs.each(resetIX);
 
    removeListeners();
 
  };
 
 
  // -----------------------------------
 
  // Private methods
 
 
  function init() {
 
    design = inApp && Webflow.env('design');
 
 
    // Find all instances on the page
 
    $tabs = $doc.find(namespace);
 
    if (!$tabs.length) return;
 
    $tabs.each(build);
 
    Webflow.env('preview') && $tabs.each(resetIX);
 
    inRedraw = null;
 
 
    removeListeners();
 
    addListeners();
 
  }
 
 
  function removeListeners() {
 
    Webflow.redraw.off(api.redraw);
 
  }
 
 
  function addListeners() {
 
    Webflow.redraw.on(api.redraw);
 
  }
 
 
  function resetIX(i, el) {
 
    var $el = $(el);
 
    var data = $.data(el, namespace);
 
    if (!data) return;
 
    data.links && data.links.each(ix.reset);
 
    data.panes && data.panes.each(ix.reset);
 
  }
 
 
  function build(i, el) {
 
    var $el = $(el);
 
 
    // Store state in data
 
    var data = $.data(el, namespace);
 
    if (!data) data = $.data(el, namespace, { el: $el, config: {} });
 
    data.current = null;
 
    data.menu = $el.children('.w-tab-menu');
 
    data.links = data.menu.children('.w-tab-link');
 
    data.content = $el.children('.w-tab-content');
 
    data.panes = data.content.children('.w-tab-pane');
 
 
    // Remove old events
 
    data.el.off(namespace);
 
    data.links.off(namespace);
 
 
    // Set config from data attributes
 
    configure(data);
 
 
    // Wire up events when not in design mode
 
    if (!design) {
 
      data.links.on('click' + namespace, linkSelect(data));
 
 
      // Trigger first intro event from current tab
 
      var $link = data.links.filter('.' + linkCurrent);
 
      var tab = $link.attr(tabAttr);
 
      tab && changeTab(data, { tab: tab, immediate: true });
 
    }
 
  }
 
 
  function configure(data) {
 
    var config = {};
 
    var old = data.config || {};
 
 
    // Set config options from data attributes
 
    config.easing = data.el.attr('data-easing') || 'ease';
 
 
    var intro = +data.el.attr('data-duration-in');
 
    intro = config.intro = intro === intro ? intro : 0;
 
 
    var outro = +data.el.attr('data-duration-out');
 
    outro = config.outro = outro === outro ? outro : 0;
 
 
    config.immediate = !intro && !outro;
 
 
    // Store config in data
 
    data.config = config;
 
  }
 
 
  function linkSelect(data) {
 
    return function(evt) {
 
      var tab = evt.currentTarget.getAttribute(tabAttr);
 
      tab && changeTab(data, { tab: tab });
 
    };
 
  }
 
 
  function changeTab(data, options) {
 
    options = options || {};
 
 
    var config = data.config;
 
    var easing = config.easing;
 
    var tab = options.tab;
 
 
    // Don't select the same tab twice
 
    if (tab === data.current) return;
 
    data.current = tab;
 
 
    // Select the current link
 
    data.links.each(function(i, el) {
 
      var $el = $(el);
 
      if (el.getAttribute(tabAttr) === tab) $el.addClass(linkCurrent).each(ix.intro);
 
      else if ($el.hasClass(linkCurrent)) $el.removeClass(linkCurrent).each(ix.outro);
 
    });
 
 
    // Find the new tab panes and keep track of previous
 
    var targets = [];
 
    var previous = [];
 
    data.panes.each(function(i, el) {
 
      var $el = $(el);
 
      if (el.getAttribute(tabAttr) === tab) {
 
        targets.push(el);
 
      } else if ($el.hasClass(tabActive)) {
 
        previous.push(el);
 
      }
 
    });
 
 
    var $targets = $(targets);
 
    var $previous = $(previous);
 
 
    // Switch tabs immediately and bypass transitions
 
    if (options.immediate || config.immediate) {
 
      $targets.addClass(tabActive).each(ix.intro);
 
      $previous.removeClass(tabActive);
 
      // Redraw to benefit components in the hidden tab pane
 
      // But only if not currently in the middle of a redraw
 
      if (!inRedraw) Webflow.redraw.up();
 
      return;
 
    }
 
 
    // Fade out the currently active tab before intro
 
    if ($previous.length && config.outro) {
 
      $previous.each(ix.outro);
 
      tram($previous)
 
        .add('opacity ' + config.outro + 'ms ' + easing, { fallback: safari })
 
        .start({ opacity: 0 })
 
        .then(intro);
 
    } else {
 
      // Skip the outro and play intro
 
      intro();
 
    }
 
 
    // Fade in the new target
 
    function intro() {
 
      // Clear previous active class + inline style
 
      $previous.removeClass(tabActive).removeAttr('style');
 
 
      // Add active class to new target
 
      $targets.addClass(tabActive).each(ix.intro);
 
      Webflow.redraw.up();
 
 
      // Set opacity immediately if intro is zero
 
      if (!config.intro) return tram($targets).set({ opacity: 1 });
 
 
      // Otherwise fade in opacity
 
      tram($targets)
 
        .set({ opacity: 0 })
 
        .redraw()
 
        .add('opacity ' + config.intro + 'ms ' + easing, { fallback: safari })
 
        .start({ opacity: 1 });
 
    }
 
  }
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 17 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/**
 
* Webflow: Touch events
 
*/
 
 
var Webflow = __webpack_require__(1);
 
 
Webflow.define('touch', module.exports = function($, _) {
 
  var api = {};
 
  var fallback = !document.addEventListener;
 
  var getSelection = window.getSelection;
 
 
  // Fallback to click events in old IE
 
  if (fallback) {
 
    $.event.special.tap = { bindType: 'click', delegateType: 'click' };
 
  }
 
 
  api.init = function(el) {
 
    if (fallback) return null;
 
    el = typeof el === 'string' ? $(el).get(0) : el;
 
    return el ? new Touch(el) : null;
 
  };
 
 
  function Touch(el) {
 
    var active = false;
 
    var dirty = false;
 
    var useTouch = false;
 
    var thresholdX = Math.min(Math.round(window.innerWidth * 0.04), 40);
 
    var startX, startY, lastX;
 
 
    el.addEventListener('touchstart', start, false);
 
    el.addEventListener('touchmove', move, false);
 
    el.addEventListener('touchend', end, false);
 
    el.addEventListener('touchcancel', cancel, false);
 
    el.addEventListener('mousedown', start, false);
 
    el.addEventListener('mousemove', move, false);
 
    el.addEventListener('mouseup', end, false);
 
    el.addEventListener('mouseout', cancel, false);
 
 
    function start(evt) {
 
      // We don’t handle multi-touch events yet.
 
      var touches = evt.touches;
 
      if (touches && touches.length > 1) {
 
        return;
 
      }
 
 
      active = true;
 
      dirty = false;
 
 
      if (touches) {
 
        useTouch = true;
 
        startX = touches[0].clientX;
 
        startY = touches[0].clientY;
 
      } else {
 
        startX = evt.clientX;
 
        startY = evt.clientY;
 
      }
 
 
      lastX = startX;
 
    }
 
 
    function move(evt) {
 
      if (!active) return;
 
 
      if (useTouch && evt.type === 'mousemove') {
 
        evt.preventDefault();
 
        evt.stopPropagation();
 
        return;
 
      }
 
 
      var touches = evt.touches;
 
      var x = touches ? touches[0].clientX : evt.clientX;
 
      var y = touches ? touches[0].clientY : evt.clientY;
 
 
      var velocityX = x - lastX;
 
      lastX = x;
 
 
      // Allow swipes while pointer is down, but prevent them during text selection
 
      if (Math.abs(velocityX) > thresholdX && getSelection && getSelection() + '' === '') {
 
        triggerEvent('swipe', evt, { direction: velocityX > 0 ? 'right' : 'left' });
 
        cancel();
 
      }
 
 
      // If pointer moves more than 10px flag to cancel tap
 
      if (Math.abs(x - startX) > 10 || Math.abs(y - startY) > 10) {
 
        dirty = true;
 
      }
 
    }
 
 
    function end(evt) {
 
      if (!active) return;
 
      active = false;
 
 
      if (useTouch && evt.type === 'mouseup') {
 
        evt.preventDefault();
 
        evt.stopPropagation();
 
        useTouch = false;
 
        return;
 
      }
 
 
      if (!dirty) triggerEvent('tap', evt);
 
    }
 
 
    function cancel(evt) {
 
      active = false;
 
    }
 
 
    function destroy() {
 
      el.removeEventListener('touchstart', start, false);
 
      el.removeEventListener('touchmove', move, false);
 
      el.removeEventListener('touchend', end, false);
 
      el.removeEventListener('touchcancel', cancel, false);
 
      el.removeEventListener('mousedown', start, false);
 
      el.removeEventListener('mousemove', move, false);
 
      el.removeEventListener('mouseup', end, false);
 
      el.removeEventListener('mouseout', cancel, false);
 
      el = null;
 
    }
 
 
    // Public instance methods
 
    this.destroy = destroy;
 
  }
 
 
  // Wrap native event to supoprt preventdefault + stopPropagation
 
  function triggerEvent(type, evt, data) {
 
    var newEvent = $.Event(type, { originalEvent: evt });
 
    $(evt.target).trigger(newEvent, data);
 
  }
 
 
  // Listen for touch events on all nodes by default.
 
  api.instance = api.init(document);
 
 
  // Export module
 
  return api;
 
});
 
 
 
/***/ },
 
/* 18 */
 
/***/ function(module, exports, __webpack_require__) {
 
 
'use strict';
 
 
/*jshint -W054 */
 
 
// Include tram for frame-throttling
 
var $ = window.$;
 
var tram = __webpack_require__(3) && $.tram;
 
 
/*!
 
* Webflow._ (aka) Underscore.js 1.6.0 (custom build)
 
* _.each
 
* _.map
 
* _.find
 
* _.filter
 
* _.any
 
* _.contains
 
* _.delay
 
* _.defer
 
* _.throttle (webflow)
 
* _.debounce
 
* _.keys
 
* _.has
 
* _.now
 
*
 
* http://underscorejs.org
 
* (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 
* Underscore may be freely distributed under the MIT license.
 
* @license MIT
 
*/
 
module.exports = (function() {
 
  var _ = {};
 
 
  // Current version.
 
  _.VERSION = '1.6.0-Webflow';
 
 
  // Establish the object that gets returned to break out of a loop iteration.
 
  var breaker = {};
 
 
  // Save bytes in the minified (but not gzipped) version:
 
  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
 
 
  // Create quick reference variables for speed access to core prototypes.
 
  var
 
    push            = ArrayProto.push,
 
    slice            = ArrayProto.slice,
 
    concat          = ArrayProto.concat,
 
    toString        = ObjProto.toString,
 
    hasOwnProperty  = ObjProto.hasOwnProperty;
 
 
  // All **ECMAScript 5** native function implementations that we hope to use
 
  // are declared here.
 
  var
 
    nativeForEach      = ArrayProto.forEach,
 
    nativeMap          = ArrayProto.map,
 
    nativeReduce      = ArrayProto.reduce,
 
    nativeReduceRight  = ArrayProto.reduceRight,
 
    nativeFilter      = ArrayProto.filter,
 
    nativeEvery        = ArrayProto.every,
 
    nativeSome        = ArrayProto.some,
 
    nativeIndexOf      = ArrayProto.indexOf,
 
    nativeLastIndexOf  = ArrayProto.lastIndexOf,
 
    nativeIsArray      = Array.isArray,
 
    nativeKeys        = Object.keys,
 
    nativeBind        = FuncProto.bind;
 
 
  // Collection Functions
 
  // --------------------
 
 
  // The cornerstone, an `each` implementation, aka `forEach`.
 
  // Handles objects with the built-in `forEach`, arrays, and raw objects.
 
  // Delegates to **ECMAScript 5**'s native `forEach` if available.
 
  var each = _.each = _.forEach = function(obj, iterator, context) {
 
    /* jshint shadow:true */
 
    if (obj == null) return obj;
 
    if (nativeForEach && obj.forEach === nativeForEach) {
 
      obj.forEach(iterator, context);
 
    } else if (obj.length === +obj.length) {
 
      for (var i = 0, length = obj.length; i < length; i++) {
 
        if (iterator.call(context, obj[i], i, obj) === breaker) return;
 
      }
 
    } else {
 
      var keys = _.keys(obj);
 
      for (var i = 0, length = keys.length; i < length; i++) {
 
        if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
 
      }
 
    }
 
    return obj;
 
  };
 
 
  // Return the results of applying the iterator to each element.
 
  // Delegates to **ECMAScript 5**'s native `map` if available.
 
  _.map = _.collect = function(obj, iterator, context) {
 
    var results = [];
 
    if (obj == null) return results;
 
    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
 
    each(obj, function(value, index, list) {
 
      results.push(iterator.call(context, value, index, list));
 
    });
 
    return results;
 
  };
 
 
  // Return the first value which passes a truth test. Aliased as `detect`.
 
  _.find = _.detect = function(obj, predicate, context) {
 
    var result;
 
    any(obj, function(value, index, list) {
 
      if (predicate.call(context, value, index, list)) {
 
        result = value;
 
        return true;
 
      }
 
    });
 
    return result;
 
  };
 
 
  // Return all the elements that pass a truth test.
 
  // Delegates to **ECMAScript 5**'s native `filter` if available.
 
  // Aliased as `select`.
 
  _.filter = _.select = function(obj, predicate, context) {
 
    var results = [];
 
    if (obj == null) return results;
 
    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(predicate, context);
 
    each(obj, function(value, index, list) {
 
      if (predicate.call(context, value, index, list)) results.push(value);
 
    });
 
    return results;
 
  };
 
 
  // Determine if at least one element in the object matches a truth test.
 
  // Delegates to **ECMAScript 5**'s native `some` if available.
 
  // Aliased as `any`.
 
  var any = _.some = _.any = function(obj, predicate, context) {
 
    predicate || (predicate = _.identity);
 
    var result = false;
 
    if (obj == null) return result;
 
    if (nativeSome && obj.some === nativeSome) return obj.some(predicate, context);
 
    each(obj, function(value, index, list) {
 
      if (result || (result = predicate.call(context, value, index, list))) return breaker;
 
    });
 
    return !!result;
 
  };
 
 
  // Determine if the array or object contains a given value (using `===`).
 
  // Aliased as `include`.
 
  _.contains = _.include = function(obj, target) {
 
    if (obj == null) return false;
 
    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
 
    return any(obj, function(value) {
 
      return value === target;
 
    });
 
  };
 
 
  // Function (ahem) Functions
 
  // --------------------
 
 
  // Delays a function for the given number of milliseconds, and then calls
 
  // it with the arguments supplied.
 
  _.delay = function(func, wait) {
 
    var args = slice.call(arguments, 2);
 
    return setTimeout(function(){ return func.apply(null, args); }, wait);
 
  };
 
 
  // Defers a function, scheduling it to run after the current call stack has
 
  // cleared.
 
  _.defer = function(func) {
 
    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
 
  };
 
 
  // Returns a function, that, when invoked, will only be triggered once every
 
  // browser animation frame - using tram's requestAnimationFrame polyfill.
 
  _.throttle = function(func) {
 
    var wait, args, context;
 
    return function() {
 
      if (wait) return;
 
      wait = true;
 
      args = arguments;
 
      context = this;
 
      tram.frame(function() {
 
        wait = false;
 
        func.apply(context, args);
 
      });
 
    };
 
  };
 
 
  // Returns a function, that, as long as it continues to be invoked, will not
 
  // be triggered. The function will be called after it stops being called for
 
  // N milliseconds. If `immediate` is passed, trigger the function on the
 
  // leading edge, instead of the trailing.
 
  _.debounce = function(func, wait, immediate) {
 
    var timeout, args, context, timestamp, result;
 
 
    var later = function() {
 
      var last = _.now() - timestamp;
 
      if (last < wait) {
 
        timeout = setTimeout(later, wait - last);
 
      } else {
 
        timeout = null;
 
        if (!immediate) {
 
          result = func.apply(context, args);
 
          context = args = null;
 
        }
 
      }
 
    };
 
 
    return function() {
 
      context = this;
 
      args = arguments;
 
      timestamp = _.now();
 
      var callNow = immediate && !timeout;
 
      if (!timeout) {
 
        timeout = setTimeout(later, wait);
 
      }
 
      if (callNow) {
 
        result = func.apply(context, args);
 
        context = args = null;
 
      }
 
 
      return result;
 
    };
 
  };
 
 
  // Object Functions
 
  // ----------------
 
 
  // Fill in a given object with default properties.
 
  _.defaults = function(obj) {
 
    if (!_.isObject(obj)) return obj;
 
    for (var i = 1, length = arguments.length; i < length; i++) {
 
      var source = arguments[i];
 
      for (var prop in source) {
 
        if (obj[prop] === void 0) obj[prop] = source[prop];
 
      }
 
    }
 
    return obj;
 
  };
 
 
  // Retrieve the names of an object's properties.
 
  // Delegates to **ECMAScript 5**'s native `Object.keys`
 
  _.keys = function(obj) {
 
    if (!_.isObject(obj)) return [];
 
    if (nativeKeys) return nativeKeys(obj);
 
    var keys = [];
 
    for (var key in obj) if (_.has(obj, key)) keys.push(key);
 
    return keys;
 
  };
 
 
  // Shortcut function for checking if an object has a given property directly
 
  // on itself (in other words, not on a prototype).
 
  _.has = function(obj, key) {
 
    return hasOwnProperty.call(obj, key);
 
  };
 
 
  // Is a given variable an object?
 
  _.isObject = function(obj) {
 
    return obj === Object(obj);
 
  };
 
 
  // Utility Functions
 
  // -----------------
 
 
  // A (possibly faster) way to get the current timestamp as an integer.
 
  _.now = Date.now || function() { return new Date().getTime(); };
 
 
  // By default, Underscore uses ERB-style template delimiters, change the
 
  // following template settings to use alternative delimiters.
 
  _.templateSettings = {
 
    evaluate    : /<%([\s\S]+?)%>/g,
 
    interpolate : /<%=([\s\S]+?)%>/g,
 
    escape      : /<%-([\s\S]+?)%>/g
 
  };
 
 
  // When customizing `templateSettings`, if you don't want to define an
 
  // interpolation, evaluation or escaping regex, we need one that is
 
  // guaranteed not to match.
 
  var noMatch = /(.)^/;
 
 
  // Certain characters need to be escaped so that they can be put into a
 
  // string literal.
 
  var escapes = {
 
    "'":      "'",
 
    '\\':    '\\',
 
    '\r':    'r',
 
    '\n':    'n',
 
    '\u2028': 'u2028',
 
    '\u2029': 'u2029'
 
  };
 
 
  var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
 
 
  var escapeChar = function(match) {
 
    return '\\' + escapes[match];
 
  };
 
 
  // JavaScript micro-templating, similar to John Resig's implementation.
 
  // Underscore templating handles arbitrary delimiters, preserves whitespace,
 
  // and correctly escapes quotes within interpolated code.
 
  // NB: `oldSettings` only exists for backwards compatibility.
 
  _.template = function(text, settings, oldSettings) {
 
    if (!settings && oldSettings) settings = oldSettings;
 
    settings = _.defaults({}, settings, _.templateSettings);
 
 
    // Combine delimiters into one regular expression via alternation.
 
    var matcher = RegExp([
 
      (settings.escape || noMatch).source,
 
      (settings.interpolate || noMatch).source,
 
      (settings.evaluate || noMatch).source
 
    ].join('|') + '|$', 'g');
 
 
    // Compile the template source, escaping string literals appropriately.
 
    var index = 0;
 
    var source = "__p+='";
 
    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
 
      source += text.slice(index, offset).replace(escaper, escapeChar);
 
      index = offset + match.length;
 
 
      if (escape) {
 
        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
 
      } else if (interpolate) {
 
        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
 
      } else if (evaluate) {
 
        source += "';\n" + evaluate + "\n__p+='";
 
      }
 
 
      // Adobe VMs need the match returned to produce the correct offest.
 
      return match;
 
    });
 
    source += "';\n";
 
 
    // If a variable is not specified, place data values in local scope.
 
    if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
 
 
    source = "var __t,__p='',__j=Array.prototype.join," +
 
      "print=function(){__p+=__j.call(arguments,'');};\n" +
 
      source + 'return __p;\n';
 
 
    try {
 
      var render = new Function(settings.variable || 'obj', '_', source);
 
    } catch (e) {
 
      e.source = source;
 
      throw e;
 
    }
 
 
    var template = function(data) {
 
      return render.call(this, data, _);
 
    };
 
 
    // Provide the compiled source as a convenience for precompilation.
 
    var argument = settings.variable || 'obj';
 
    template.source = 'function(' + argument + '){\n' + source + '}';
 
 
    return template;
 
  };
 
 
  // Export underscore
 
  return _;
 
}());
 
 
 
/***/ },
 
/* 19 */
 
/***/ function(module, exports) {
 
 
/*!
 
* jQuery-ajaxTransport-XDomainRequest - v1.0.3
 
* 2014-12-16 WEBFLOW - Removed UMD wrapper
 
* https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
 
* Copyright (c) 2014 Jason Moon (@JSONMOON)
 
* @license MIT (/blob/master/LICENSE.txt)
 
*/
 
module.exports=function($){if($.support.cors||!$.ajaxTransport||!window.XDomainRequest){return}var httpRegEx=/^https?:\/\//i;var getOrPostRegEx=/^get|post$/i;var sameSchemeRegEx=new RegExp("^"+location.protocol,"i");$.ajaxTransport("* text html xml json",function(options,userOptions,jqXHR){if(!options.crossDomain||!options.async||!getOrPostRegEx.test(options.type)||!httpRegEx.test(options.url)||!sameSchemeRegEx.test(options.url)){return}var xdr=null;return{send:function(headers,complete){var postData="";var userType=(userOptions.dataType||"").toLowerCase();xdr=new XDomainRequest;if(/^\d+$/.test(userOptions.timeout)){xdr.timeout=userOptions.timeout}xdr.ontimeout=function(){complete(500,"timeout")};xdr.onload=function(){var allResponseHeaders="Content-Length: "+xdr.responseText.length+"\r\nContent-Type: "+xdr.contentType;var status={code:200,message:"success"};var responses={text:xdr.responseText};try{if(userType==="html"||/text\/html/i.test(xdr.contentType)){responses.html=xdr.responseText}else if(userType==="json"||userType!=="text"&&/\/json/i.test(xdr.contentType)){try{responses.json=$.parseJSON(xdr.responseText)}catch(e){status.code=500;status.message="parseerror"}}else if(userType==="xml"||userType!=="text"&&/\/xml/i.test(xdr.contentType)){var doc=new ActiveXObject("Microsoft.XMLDOM");doc.async=false;try{doc.loadXML(xdr.responseText)}catch(e){doc=undefined}if(!doc||!doc.documentElement||doc.getElementsByTagName("parsererror").length){status.code=500;status.message="parseerror";throw"Invalid XML: "+xdr.responseText}responses.xml=doc}}catch(parseMessage){throw parseMessage}finally{complete(status.code,status.message,responses,allResponseHeaders)}};xdr.onprogress=function(){};xdr.onerror=function(){complete(500,"error",{text:xdr.responseText})};if(userOptions.data){postData=$.type(userOptions.data)==="string"?userOptions.data:$.param(userOptions.data)}xdr.open(options.type,options.url);xdr.send(postData)},abort:function(){if(xdr){xdr.abort()}}}})}(window.jQuery);
 
 
/***/ }
 
/******/ ]);/**
 
* ----------------------------------------------------------------------
 
* Webflow: Interactions: Init
 
*/
 
Webflow.require('ix').init([
 
  {"slug":"hero-title","name":"Hero title","value":{"style":{"opacity":0},"triggers":[{"type":"load","stepsA":[{"wait":100},{"opacity":1,"transition":"opacity 500ms ease 0ms"}],"stepsB":[]}]}},
 
  {"slug":"hero-title-2","name":"Hero title 2","value":{"style":{"opacity":0,"x":"-20px","y":"0px"},"triggers":[{"type":"load","stepsA":[{"wait":300},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"hero-title-3","name":"Hero title 3","value":{"style":{"opacity":0,"x":"-20px","y":"0px"},"triggers":[{"type":"load","stepsA":[{"wait":500},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"hero-title-4","name":"Hero title 4","value":{"style":{"opacity":0,"x":"-20px","y":"0px"},"triggers":[{"type":"load","stepsA":[{"wait":700},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"hero-title-5","name":"Hero title 5","value":{"style":{"opacity":0,"x":"-20px","y":"0px"},"triggers":[{"type":"load","stepsA":[{"wait":900},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"hero-title-6","name":"Hero title 6","value":{"style":{"opacity":0,"x":"0px","y":"20px"},"triggers":[{"type":"load","stepsA":[{"wait":1100},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"hero-button","name":"Hero button","value":{"style":{"opacity":0,"x":"0px","y":"20px"},"triggers":[{"type":"load","stepsA":[{"wait":1500},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"hero-button-2","name":"Hero button 2","value":{"style":{"opacity":0,"x":"0px","y":"20px"},"triggers":[{"type":"load","stepsA":[{"wait":1800},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"hero-image","name":"Hero image","value":{"style":{"opacity":0,"x":"50px","y":"0px"},"triggers":[{"type":"load","stepsA":[{"wait":1700},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"hero-image-2","name":"Hero image 2","value":{"style":{"opacity":0,"x":"50px","y":"0px"},"triggers":[{"type":"load","stepsA":[{"wait":1900},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"hero-image-3","name":"Hero image 3","value":{"style":{"opacity":0,"x":"50px","y":"0px"},"triggers":[{"type":"load","stepsA":[{"wait":2200},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"model-title-slide","name":"Model title slide","value":{"style":{"opacity":0,"x":"20px","y":"0px"},"triggers":[{"type":"slider","stepsA":[{"wait":200},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[{"opacity":0,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"20px","y":"0px"}]}]}},
 
  {"slug":"model-title-slide-2","name":"Model title slide 2","value":{"style":{"opacity":0,"x":"20px","y":"0px"},"triggers":[{"type":"slider","stepsA":[{"wait":400},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[{"opacity":0,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"20px","y":"0px"}]}]}},
 
  {"slug":"testimonial-image","name":"Testimonial image","value":{"style":{"opacity":0.4},"triggers":[]}},
 
  {"slug":"show-testimonial-image","name":"Show testimonial image","value":{"style":{},"triggers":[{"type":"hover","selector":".testimonial-image","descend":true,"stepsA":[{"opacity":1,"transition":"opacity 500ms ease 0ms"}],"stepsB":[{"opacity":0.4,"transition":"opacity 500ms ease 0ms"}]}]}},
 
  {"slug":"page-title","name":"Page title","value":{"style":{"opacity":0,"x":"0px","y":"-20px"},"triggers":[{"type":"load","stepsA":[{"wait":300},{"opacity":1,"transition":"transform 500ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"page-title-2","name":"Page title 2","value":{"style":{"opacity":0,"x":"0px","y":"20px"},"triggers":[{"type":"load","stepsA":[{"wait":600},{"opacity":1,"transition":"transform 500ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"fade-in-on-load","name":"Fade in on Load","value":{"style":{"opacity":0,"x":"0px","y":"30px"},"triggers":[{"type":"load","stepsA":[{"wait":200},{"opacity":1,"transition":"transform 500ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"fade-in-on-load-2","name":"Fade in on Load 2","value":{"style":{"opacity":0,"x":"0px","y":"30px"},"triggers":[{"type":"load","stepsA":[{"wait":400},{"opacity":1,"transition":"transform 500ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"fade-in-on-load-3","name":"Fade in on Load 3","value":{"style":{"opacity":0,"x":"0px","y":"30px"},"triggers":[{"type":"load","stepsA":[{"wait":600},{"opacity":1,"transition":"transform 500ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"fade-in-on-load-4","name":"Fade in on Load 4","value":{"style":{"opacity":0,"x":"0px","y":"30px"},"triggers":[{"type":"load","stepsA":[{"wait":800},{"opacity":1,"transition":"transform 500ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"fade-in-on-load-5","name":"Fade in on Load 5","value":{"style":{"opacity":0,"x":"0px","y":"30px"},"triggers":[{"type":"load","stepsA":[{"wait":1000},{"opacity":1,"transition":"transform 500ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"fade-on-scroll","name":"Fade on scroll","value":{"style":{"opacity":0.02,"x":"-50px","y":"0px"},"triggers":[{"type":"scroll","offsetBot":"20%","stepsA":[{"opacity":1,"transition":"transform 500ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"fade-on-scroll-right","name":"Fade on scroll (right)","value":{"style":{"opacity":0.02,"x":"30px","y":"0px"},"triggers":[{"type":"scroll","offsetBot":"20%","stepsA":[{"opacity":1,"transition":"transform 500ms ease 0ms, opacity 500ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"stats-fade-in","name":"Stats fade in","value":{"style":{"opacity":0,"x":"-50px","y":"0px"},"triggers":[{"type":"scroll","offsetBot":"20%","stepsA":[{"wait":200},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"stats-fade-in-2","name":"Stats fade in 2","value":{"style":{"opacity":0,"x":"-50px","y":"0px"},"triggers":[{"type":"scroll","offsetBot":"20%","stepsA":[{"wait":400},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"stats-fade-in-3","name":"Stats fade in 3","value":{"style":{"opacity":0,"x":"50px","y":"0px"},"triggers":[{"type":"scroll","offsetBot":"20%","stepsA":[{"wait":400},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"stats-fade-in-4","name":"Stats fade in 4","value":{"style":{"opacity":0,"x":"50px","y":"0px"},"triggers":[{"type":"scroll","offsetBot":"20%","stepsA":[{"wait":600},{"opacity":1,"transition":"transform 700ms ease 0ms, opacity 700ms ease 0ms","x":"0px","y":"0px"}],"stepsB":[]}]}},
 
  {"slug":"process-bar-fill-70","name":"Process bar fill (70%)","value":{"style":{"width":"0%"},"triggers":[{"type":"load","stepsA":[{"wait":300},{"width":"70%","transition":"width 700ms ease 0ms"}],"stepsB":[]}]}},
 
  {"slug":"process-bar-fill-50","name":"Process bar fill (50%)","value":{"style":{"width":"0%"},"triggers":[{"type":"load","stepsA":[{"wait":300},{"width":"50%","transition":"width 700ms ease 0ms"}],"stepsB":[]}]}},
 
  {"slug":"process-bar-fill-30","name":"Process bar fill (30%)","value":{"style":{"width":"0%"},"triggers":[{"type":"load","stepsA":[{"wait":300},{"width":"30%","transition":"width 700ms ease 0ms"}],"stepsB":[]}]}}
 
]);
 
 
 
 
</script>
 
  
 
</body>
 
</body>
 
</html>
 
</html>

Revision as of 21:31, 16 September 2015


Danzi

Welcome to ALERGLN

Research,

STUDY, Fun

& Creativity

we are Team DANZI-KESH-8,
a biotechnology class from Danziger High School, 
Kiryat Shmona, Israel .

Alergln project

The aim of our project is to create a personal kit, one that identifies gluten in food, reliably and in reasonable time. This kit will allow easing the celiac patient’s life and reducing their expenses to a great extent. 

The "Alergln" Kit is based on a fascinating innovative technology in the diagnostic world, just as the kit to identify pregnancy brought with it a series of scientific technology; equally, this kit brings innovation and a breakthrough in a way of thinking and designing the kit. In the future, we believe that the idea can be implemented and utilized as well in areas to identify other substances, not necessarily food materials.

The "Alergln Project" was created after the realization that the number of people diagnosed in having gluten sensitivity (celiac disease) increases from year to year. The number of diagnosed celiac patient’s increases annually worldwide mostly due to awareness of this phenomenon. This awareness eases and enables many people real quality of life without the horrendous stomach pains. Celiac disease patients are not treated with drugs because the drug is not available; these patients simply avoid eating gluten. Therefore, they must verify whether the food they intend eating has gluten or not. The scales to check are often complicated and not necessarily accurate.

The "Alergln" kit will serve the above population, prevent them from concern for the presence of gluten in food and can eat with peace of mind and without worrying about their lives.

The success of the project will allow patients to eat foods that "may contain gluten," but there is no gluten, the difference in prices is very high and hence the kit cancels the presence of gluten in regular foods and allows the patient to eat without any concern, and at a lower cost. 

Team DANZI-KESH-8

Team DANZI-KESH-8 is a biotechnology class from Danziger High School, the high school is situated in the northernmost part of Israel. The school is located in a small town Kiryat Shmona.

We, 23 students aged 16 and majoring in biotechnology, may be young but full of ambition and motivation for success and learning different fields of science. The entire school staff is recruited together with us to prepare for competition - the English teacher, science teacher, math teacher, and of course the school administration.

Watch our journey album