From 375b64f81ce07aa735889371b48624c6df261a47 Mon Sep 17 00:00:00 2001 From: Chris Carlevato Date: Sat, 18 Mar 2017 12:06:11 -0700 Subject: [PATCH] Add v0.4 updates - Updated unit tests for PHPUnit 6 - Updated node packages - Updated Libraries -- jQuery v3.2 -- Featherlight v1.7.1 -- Parsley v2.7.0 - Finally added a (somewhat) helpful README --- ReadMe.md | 60 ++- _build/javascript/featherlight.js | 4 +- _build/javascript/jQuery.js | 308 +++++++------ _build/javascript/parsley.js | 535 +++++++++++++---------- _build/package.json | 4 +- _build/sass/featherlight.scss | 19 +- _tests/system/SystemRequirementsTest.php | 12 +- _tests/unit/AjaxHandlerTest.php | 2 +- _tests/unit/ConfigurationTest.php | 2 +- _tests/unit/FunctionsIncludeTest.php | 4 +- css/styles.css | 2 +- css/styles.css.map | 2 +- include/config.inc.dist.php | 4 +- include/functions.inc.php | 4 +- js/global.min.js | 10 +- 15 files changed, 557 insertions(+), 415 deletions(-) diff --git a/ReadMe.md b/ReadMe.md index e614025..324e557 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,5 +1,63 @@ # ChristopherL + A website. [See it in action.](http://christopherl.com) +### Contents +- [Build](#build) +- [Tests](#tests) +- [Libraries](#libraries) +- [Requirements](#requirements) +- [Feedback](#feedback) +- [License](#license) + +## Build + +Gulp is used to automate creation of JavaScript and CSS assets. + +#### CSS + +* Source: `/_build/sass/` +* Output: `/css/` + +#### JavaScript + +* Source: `/_build/javascript/` +* Output: `/js/` + +## Tests + +Unit tests are included at `/_tests/`. + +Test classes are written for PHPUnit v6.0+. They might work with 5.7 thanks to it's forward compatibility, but are not developed or tested against the 5.x branch. + +## Libraries + +This code is better because of the the generosity of a whole bunch of people. + +* [Smarty](http://www.smarty.net/) +* [jQuery](https://jquery.com/) +* [Parsley](http://parsleyjs.org/) +* [Featherlight](https://noelboss.github.io/featherlight/) +* [Skeleton](http://getskeleton.com/) +* [include-media](http://include-media.com/) +* [Normalize.css](https://necolas.github.io/normalize.css/) + + +## Requirements + +PHP. 7.0+ is required. While 5.6 probably works (for the site, tests require 7+) 5.x releases are not used in development or testing. + +Node is required for local build process. `npm install` from inside `/_build/` should get you up and running. + +Finished site should be well behaved in all modern browsers, desktop and mobile. + +Additionally, if you use this code you are required to have fun while you do it. Seriously. This is very important. + +## Feedback + +If you have something nice to say about this code, [please do so publicly](https://twitter.com/intent/tweet?original_referer=http://github.com/chrislarrycarl/ChristopherL&text=.%40chrislarrycarl%20Was%20checking%20out%20your%20ChristopherL%20repo%20and...). + +If you have some insight for improvement, [please submit it here](https://github.com/chrislarrycarl/ChristopherL/issues). + ## License -[GNU GPL 2.0](http://www.gnu.org/licenses/gpl-2.0.html) +[Built with love](https://www.youtube.com/watch?v=Xe1TZaElTAs) and shared under [GNU GPL 2.0](http://www.gnu.org/licenses/gpl-2.0.html) diff --git a/_build/javascript/featherlight.js b/_build/javascript/featherlight.js index 1b1ca22..b27bd41 100644 --- a/_build/javascript/featherlight.js +++ b/_build/javascript/featherlight.js @@ -1,8 +1,8 @@ /** * Featherlight - ultra slim jQuery lightbox - * Version 1.7.0 - http://noelboss.github.io/featherlight/ + * Version 1.7.1 - http://noelboss.github.io/featherlight/ * - * Copyright 2016, Noël Raoul Bossart (http://www.noelboss.com) + * Copyright 2017, Noël Raoul Bossart (http://www.noelboss.com) * MIT Licensed. **/ (function($) { diff --git a/_build/javascript/jQuery.js b/_build/javascript/jQuery.js index ccfbd4c..e10309d 100644 --- a/_build/javascript/jQuery.js +++ b/_build/javascript/jQuery.js @@ -1,15 +1,15 @@ /*! - * jQuery JavaScript Library v3.1.1 + * jQuery JavaScript Library v3.2.0 * https://jquery.com/ * * Includes Sizzle.js * https://sizzlejs.com/ * - * Copyright jQuery Foundation and other contributors + * Copyright JS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * - * Date: 2016-09-22T22:30Z + * Date: 2017-03-16T21:26Z */ ( function( global, factory ) { @@ -88,7 +88,7 @@ var - version = "3.1.1", + version = "3.2.0", // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -236,11 +236,11 @@ // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + ( copyIsArray = Array.isArray( copy ) ) ) ) { if ( copyIsArray ) { copyIsArray = false; - clone = src && jQuery.isArray( src ) ? src : []; + clone = src && Array.isArray( src ) ? src : []; } else { clone = src && jQuery.isPlainObject( src ) ? src : {}; @@ -279,8 +279,6 @@ return jQuery.type( obj ) === "function"; }, - isArray: Array.isArray, - isWindow: function( obj ) { return obj != null && obj === obj.window; }, @@ -355,10 +353,6 @@ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - each: function( obj, callback ) { var length, i = 0; @@ -2843,6 +2837,13 @@ var rneedsContext = jQuery.expr.match.needsContext; + + + function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + + }; var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); @@ -3194,7 +3195,18 @@ return siblings( elem.firstChild ); }, contents: function( elem ) { - return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { @@ -3292,7 +3304,7 @@ fire = function() { // Enforce single-firing - locked = options.once; + locked = locked || options.once; // Execute callbacks for all pending executions, // respecting firingIndex overrides and runtime changes @@ -3461,7 +3473,7 @@ throw ex; } - function adoptValue( value, resolve, reject ) { + function adoptValue( value, resolve, reject, noValue ) { var method; try { @@ -3477,9 +3489,10 @@ // Other non-thenables } else { - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - resolve.call( undefined, value ); + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); } // For Promises/A+, convert exceptions into rejections @@ -3489,7 +3502,7 @@ // Support: Android 4.0 only // Strict mode functions invoked without .call/.apply get global-object context - reject.call( undefined, value ); + reject.apply( undefined, [ value ] ); } } @@ -3814,7 +3827,8 @@ // Single- and empty arguments are adopted like Promise.resolve if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject ); + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); // Use .then() to unwrap secondary thenables (cf. gh-3000) if ( master.state() === "pending" || @@ -3886,15 +3900,6 @@ // the ready event fires. See #6781 readyWait: 1, - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - // Handle when the DOM is ready ready: function( wait ) { @@ -4130,7 +4135,7 @@ if ( key !== undefined ) { // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { + if ( Array.isArray( key ) ) { // If key is an array of keys... // We always set camelCase keys, so remove that. @@ -4356,7 +4361,7 @@ // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { + if ( !queue || Array.isArray( data ) ) { queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); } else { queue.push( data ); @@ -4733,7 +4738,7 @@ ret = []; } - if ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) { + if ( tag === undefined || tag && nodeName( context, tag ) ) { return jQuery.merge( [ context ], ret ); } @@ -5338,9 +5343,11 @@ }, click: { - // For checkbox, fire native event so checked state will be right + // For checkable types, fire native event so checked state will be right trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + if ( rcheckableType.test( this.type ) && + this.click && nodeName( this, "input" ) ) { + this.click(); return false; } @@ -5348,7 +5355,7 @@ // For cross-browser consistency, don't fire native .click() on links _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); + return nodeName( event.target, "a" ); } }, @@ -5625,11 +5632,12 @@ rscriptTypeMasked = /^true\/(.*)/, rcleanScript = /^\s*\s*$/g; +// Prefer a tbody over its parent table for containing new rows function manipulationTarget( elem, content ) { - if ( jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - return elem.getElementsByTagName( "tbody" )[ 0 ] || elem; + return jQuery( ">tbody", elem )[ 0 ] || elem; } return elem; @@ -6163,8 +6171,9 @@ computed = computed || getStyles( elem ); - // Support: IE <=9 only - // getPropertyValue is only needed for .css('filter') (#12537) + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) if ( computed ) { ret = computed.getPropertyValue( name ) || computed[ name ]; @@ -6230,6 +6239,7 @@ // except "table", "table-cell", or "table-caption" // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = { letterSpacing: "0", @@ -6259,6 +6269,16 @@ } } +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. + function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; + } + function setPositiveNumber( elem, value, subtract ) { // Any relative (+/-) values have already been @@ -6319,43 +6339,24 @@ function getWidthOrHeight( elem, name, extra ) { - // Start with offset property, which is equivalent to the border-box value - var val, - valueIsBorderBox = true, + // Start with computed style + var valueIsBorderBox, styles = getStyles( elem ), + val = curCSS( elem, name, styles ), isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - if ( elem.getClientRects().length ) { - val = elem.getBoundingClientRect()[ name ]; + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; } - // Some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test( val ) ) { - return val; - } + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; // Use the active box-sizing model to add/subtract irrelevant styles return ( val + @@ -6420,10 +6421,15 @@ // Make sure that we're working with the right name var ret, type, hooks, origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), style = elem.style; - name = jQuery.cssProps[ origName ] || - ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } // Gets hook for the prefixed version, then unprefixed version hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; @@ -6459,7 +6465,11 @@ if ( !hooks || !( "set" in hooks ) || ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - style[ name ] = value; + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } } } else { @@ -6478,11 +6488,15 @@ css: function( elem, name, extra, styles ) { var val, num, hooks, - origName = jQuery.camelCase( name ); + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || - ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } // Try prefixed name followed by the unprefixed name hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; @@ -6507,6 +6521,7 @@ num = parseFloat( val ); return extra === true || isFinite( num ) ? num || 0 : val; } + return val; } } ); @@ -6606,7 +6621,7 @@ map = {}, i = 0; - if ( jQuery.isArray( name ) ) { + if ( Array.isArray( name ) ) { styles = getStyles( elem ); len = name.length; @@ -6744,13 +6759,18 @@ var - fxNow, timerId, + fxNow, inProgress, rfxtypes = /^(?:toggle|show|hide)$/, rrun = /queueHooks$/; - function raf() { - if ( timerId ) { - window.requestAnimationFrame( raf ); + function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + jQuery.fx.tick(); } } @@ -6977,7 +6997,7 @@ name = jQuery.camelCase( index ); easing = specialEasing[ name ]; value = props[ index ]; - if ( jQuery.isArray( value ) ) { + if ( Array.isArray( value ) ) { easing = value[ 1 ]; value = props[ index ] = value[ 0 ]; } @@ -7036,12 +7056,19 @@ deferred.notifyWith( elem, [ animation, percent, remaining ] ); + // If there's more to do, yield if ( percent < 1 && length ) { return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; }, animation = deferred.promise( { elem: elem, @@ -7106,6 +7133,13 @@ animation.opts.start.call( elem, animation ); } + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + jQuery.fx.timer( jQuery.extend( tick, { elem: elem, @@ -7114,11 +7148,7 @@ } ) ); - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); + return animation; } jQuery.Animation = jQuery.extend( Animation, { @@ -7169,8 +7199,8 @@ easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing }; - // Go to the end state if fx are off or if document is hidden - if ( jQuery.fx.off || document.hidden ) { + // Go to the end state if fx are off + if ( jQuery.fx.off ) { opt.duration = 0; } else { @@ -7362,7 +7392,7 @@ for ( ; i < timers.length; i++ ) { timer = timers[ i ]; - // Checks the timer has not already been removed + // Run the timer and safely remove it when done (allowing for external removal) if ( !timer() && timers[ i ] === timer ) { timers.splice( i--, 1 ); } @@ -7376,30 +7406,21 @@ jQuery.fx.timer = function( timer ) { jQuery.timers.push( timer ); - if ( timer() ) { - jQuery.fx.start(); - } else { - jQuery.timers.pop(); - } + jQuery.fx.start(); }; jQuery.fx.interval = 13; jQuery.fx.start = function() { - if ( !timerId ) { - timerId = window.requestAnimationFrame ? - window.requestAnimationFrame( raf ) : - window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); + if ( inProgress ) { + return; } + + inProgress = true; + schedule(); }; jQuery.fx.stop = function() { - if ( window.cancelAnimationFrame ) { - window.cancelAnimationFrame( timerId ); - } else { - window.clearInterval( timerId ); - } - - timerId = null; + inProgress = null; }; jQuery.fx.speeds = { @@ -7516,7 +7537,7 @@ type: { set: function( elem, value ) { if ( !support.radioValue && value === "radio" && - jQuery.nodeName( elem, "input" ) ) { + nodeName( elem, "input" ) ) { var val = elem.value; elem.setAttribute( "type", value ); if ( val ) { @@ -7947,7 +7968,7 @@ } else if ( typeof val === "number" ) { val += ""; - } else if ( jQuery.isArray( val ) ) { + } else if ( Array.isArray( val ) ) { val = jQuery.map( val, function( value ) { return value == null ? "" : value + ""; } ); @@ -8006,7 +8027,7 @@ // Don't return options that are disabled or in a disabled optgroup !option.disabled && ( !option.parentNode.disabled || - !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + !nodeName( option.parentNode, "optgroup" ) ) ) { // Get the specific value for the option value = jQuery( option ).val(); @@ -8058,7 +8079,7 @@ jQuery.each( [ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = { set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { + if ( Array.isArray( value ) ) { return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); } } @@ -8353,7 +8374,7 @@ function buildParams( prefix, obj, traditional, add ) { var name; - if ( jQuery.isArray( obj ) ) { + if ( Array.isArray( obj ) ) { // Serialize array item. jQuery.each( obj, function( i, v ) { @@ -8405,7 +8426,7 @@ }; // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { // Serialize the form elements jQuery.each( a, function() { @@ -8451,7 +8472,7 @@ return null; } - if ( jQuery.isArray( val ) ) { + if ( Array.isArray( val ) ) { return jQuery.map( val, function( val ) { return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; } ); @@ -9876,13 +9897,6 @@ - /** - * Gets a window from an element - */ - function getWindow( elem ) { - return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; - } - jQuery.offset = { setOffset: function( elem, options, i ) { var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, @@ -9947,13 +9961,14 @@ } ); } - var docElem, win, rect, doc, + var doc, docElem, rect, win, elem = this[ 0 ]; if ( !elem ) { return; } + // Return zeros for disconnected and hidden (display: none) elements (gh-2310) // Support: IE <=11 only // Running getBoundingClientRect on a // disconnected node in IE throws an error @@ -9963,20 +9978,14 @@ rect = elem.getBoundingClientRect(); - // Make sure element is not hidden (display: none) - if ( rect.width || rect.height ) { - doc = elem.ownerDocument; - win = getWindow( doc ); - docElem = doc.documentElement; + doc = elem.ownerDocument; + docElem = doc.documentElement; + win = doc.defaultView; - return { - top: rect.top + win.pageYOffset - docElem.clientTop, - left: rect.left + win.pageXOffset - docElem.clientLeft - }; - } - - // Return zeros for disconnected and hidden elements (gh-2310) - return rect; + return { + top: rect.top + win.pageYOffset - docElem.clientTop, + left: rect.left + win.pageXOffset - docElem.clientLeft + }; }, position: function() { @@ -10002,7 +10011,7 @@ // Get correct offsets offset = this.offset(); - if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + if ( !nodeName( offsetParent[ 0 ], "html" ) ) { parentOffset = offsetParent.offset(); } @@ -10049,7 +10058,14 @@ jQuery.fn[ method ] = function( val ) { return access( this, function( elem, method, val ) { - var win = getWindow( elem ); + + // Coalesce documents and windows + var win; + if ( jQuery.isWindow( elem ) ) { + win = elem; + } else if ( elem.nodeType === 9 ) { + win = elem.defaultView; + } if ( val === undefined ) { return win ? win[ prop ] : elem[ method ]; @@ -10155,10 +10171,19 @@ return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } } } ); + jQuery.isArray = Array.isArray; jQuery.parseJSON = JSON.parse; + jQuery.nodeName = nodeName; @@ -10215,6 +10240,5 @@ - return jQuery; } ); diff --git a/_build/javascript/parsley.js b/_build/javascript/parsley.js index a2b1fff..c5dbe80 100644 --- a/_build/javascript/parsley.js +++ b/_build/javascript/parsley.js @@ -1,6 +1,6 @@ /*! * Parsley.js - * Version 2.6.2 - built Wed, Jan 4th 2017, 8:58 am + * Version 2.7.0 - built Wed, Mar 1st 2017, 3:53 pm * http://parsleyjs.org * Guillaume Potier - * Marc-Andre Lafortune - @@ -12,6 +12,8 @@ // var _slice = Array.prototype.slice; +var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); + function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } (function (global, factory) { @@ -22,7 +24,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr var globalID = 1; var pastWarnings = {}; - var ParsleyUtils__ParsleyUtils = { + var Utils__Utils = { // Parsley DOM-API // returns object from dom attributes and values attr: function attr($element, namespace, obj) { @@ -109,6 +111,70 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr return string.replace(/^\s+|\s+$/g, ''); }, + parse: { + date: function date(string) { + var parsed = string.match(/^(\d{4,})-(\d\d)-(\d\d)$/); + if (!parsed) return null; + + var _parsed$map = parsed.map(function (x) { + return parseInt(x, 10); + }); + + var _parsed$map2 = _slicedToArray(_parsed$map, 4); + + var _ = _parsed$map2[0]; + var year = _parsed$map2[1]; + var month = _parsed$map2[2]; + var day = _parsed$map2[3]; + + var date = new Date(year, month - 1, day); + if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) return null; + return date; + }, + string: function string(_string) { + return _string; + }, + integer: function integer(string) { + if (isNaN(string)) return null; + return parseInt(string, 10); + }, + number: function number(string) { + if (isNaN(string)) throw null; + return parseFloat(string); + }, + 'boolean': function _boolean(string) { + return !/^\s*false\s*$/i.test(string); + }, + object: function object(string) { + return Utils__Utils.deserializeValue(string); + }, + regexp: function regexp(_regexp) { + var flags = ''; + + // Test if RegExp is literal, if not, nothing to be done, otherwise, we need to isolate flags and pattern + if (/^\/.*\/(?:[gimy]*)$/.test(_regexp)) { + // Replace the regexp literal string with the first match group: ([gimy]*) + // If no flag is present, this will be a blank string + flags = _regexp.replace(/.*\/([gimy]*)$/, '$1'); + // Again, replace the regexp literal string with the first match group: + // everything excluding the opening and closing slashes and the flags + _regexp = _regexp.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1'); + } else { + // Anchor regexp: + _regexp = '^' + _regexp + '$'; + } + return new RegExp(_regexp, flags); + } + }, + + parseRequirement: function parseRequirement(requirementType, string) { + var converter = this.parse[requirementType || 'string']; + if (!converter) throw 'Unknown requirement specification: "' + requirementType + '"'; + var converted = converter(string); + if (converted === null) throw 'Requirement is not a ' + requirementType + ': "' + string + '"'; + return converted; + }, + namespaceEvents: function namespaceEvents(events, namespace) { events = this.trimString(events || '').split(/\s+/); if (!events[0]) return ''; @@ -152,14 +218,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr _SubmitSelector: 'input[type="submit"], button:submit' }; - var ParsleyUtils__default = ParsleyUtils__ParsleyUtils; + var Utils__default = Utils__Utils; // All these options could be overriden and specified directly in DOM using // `data-parsley-` default DOM-API // eg: `inputs` can be set in DOM using `data-parsley-inputs="input, textarea"` // eg: `data-parsley-stop-on-first-failing-constraint="false"` - var ParsleyDefaults = { + var Defaults = { // ### General // Default data-namespace for DOM API @@ -206,11 +272,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Return the `$element` that will receive these above success or error classes // Could also be (and given directly from DOM) a valid selector like `'#div'` - classHandler: function classHandler(ParsleyField) {}, + classHandler: function classHandler(Field) {}, // Return the `$element` where errors will be appended // Could also be (and given directly from DOM) a valid selector like `'#div'` - errorsContainer: function errorsContainer(ParsleyField) {}, + errorsContainer: function errorsContainer(Field) {}, // ul elem that would receive errors' list errorsWrapper: '
    ', @@ -219,11 +285,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr errorTemplate: '
  • ' }; - var ParsleyAbstract = function ParsleyAbstract() { - this.__id__ = ParsleyUtils__default.generateID(); + var Base = function Base() { + this.__id__ = Utils__default.generateID(); }; - ParsleyAbstract.prototype = { + Base.prototype = { asyncSupport: true, // Deprecated _pipeAccordingToValidationResult: function _pipeAccordingToValidationResult() { @@ -238,14 +304,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }, actualizeOptions: function actualizeOptions() { - ParsleyUtils__default.attr(this.$element, this.options.namespace, this.domOptions); + Utils__default.attr(this.$element, this.options.namespace, this.domOptions); if (this.parent && this.parent.actualizeOptions) this.parent.actualizeOptions(); return this; }, _resetOptions: function _resetOptions(initOptions) { - this.domOptions = ParsleyUtils__default.objectCreate(this.parent.options); - this.options = ParsleyUtils__default.objectCreate(this.domOptions); + this.domOptions = Utils__default.objectCreate(this.parent.options); + this.options = Utils__default.objectCreate(this.domOptions); // Shallow copy of ownProperties of initOptions: for (var i in initOptions) { if (initOptions.hasOwnProperty(i)) this.options[i] = initOptions[i]; @@ -310,41 +376,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr return true; }, - // Reset UI - reset: function reset() { - // Field case: just emit a reset event for UI - if ('ParsleyForm' !== this.__class__) { - this._resetUI(); - return this._trigger('reset'); - } - - // Form case: emit a reset event for each field - for (var i = 0; i < this.fields.length; i++) this.fields[i].reset(); - - this._trigger('reset'); - }, - - // Destroy Parsley instance (+ UI) - destroy: function destroy() { - // Field case: emit destroy event to clean UI and then destroy stored instance - this._destroyUI(); - if ('ParsleyForm' !== this.__class__) { - this.$element.removeData('Parsley'); - this.$element.removeData('ParsleyFieldMultiple'); - this._trigger('destroy'); - - return; - } - - // Form case: destroy all its fields and then destroy stored instance - for (var i = 0; i < this.fields.length; i++) this.fields[i].destroy(); - - this.$element.removeData('Parsley'); - this._trigger('destroy'); - }, - asyncIsValid: function asyncIsValid(group, force) { - ParsleyUtils__default.warnOnce("asyncIsValid is deprecated; please use whenValid instead"); + Utils__default.warnOnce("asyncIsValid is deprecated; please use whenValid instead"); return this.whenValid({ group: group, force: force }); }, @@ -353,73 +386,24 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr } }; - var requirementConverters = { - string: function string(_string) { - return _string; - }, - integer: function integer(string) { - if (isNaN(string)) throw 'Requirement is not an integer: "' + string + '"'; - return parseInt(string, 10); - }, - number: function number(string) { - if (isNaN(string)) throw 'Requirement is not a number: "' + string + '"'; - return parseFloat(string); - }, - reference: function reference(string) { - // Unused for now - var result = $(string); - if (result.length === 0) throw 'No such reference: "' + string + '"'; - return result; - }, - boolean: function boolean(string) { - return string !== 'false'; - }, - object: function object(string) { - return ParsleyUtils__default.deserializeValue(string); - }, - regexp: function regexp(_regexp) { - var flags = ''; - - // Test if RegExp is literal, if not, nothing to be done, otherwise, we need to isolate flags and pattern - if (/^\/.*\/(?:[gimy]*)$/.test(_regexp)) { - // Replace the regexp literal string with the first match group: ([gimy]*) - // If no flag is present, this will be a blank string - flags = _regexp.replace(/.*\/([gimy]*)$/, '$1'); - // Again, replace the regexp literal string with the first match group: - // everything excluding the opening and closing slashes and the flags - _regexp = _regexp.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1'); - } else { - // Anchor regexp: - _regexp = '^' + _regexp + '$'; - } - return new RegExp(_regexp, flags); - } - }; - var convertArrayRequirement = function convertArrayRequirement(string, length) { var m = string.match(/^\s*\[(.*)\]\s*$/); if (!m) throw 'Requirement is not an array: "' + string + '"'; - var values = m[1].split(',').map(ParsleyUtils__default.trimString); + var values = m[1].split(',').map(Utils__default.trimString); if (values.length !== length) throw 'Requirement has ' + values.length + ' values when ' + length + ' are needed'; return values; }; - var convertRequirement = function convertRequirement(requirementType, string) { - var converter = requirementConverters[requirementType || 'string']; - if (!converter) throw 'Unknown requirement specification: "' + requirementType + '"'; - return converter(string); - }; - var convertExtraOptionRequirement = function convertExtraOptionRequirement(requirementSpec, string, extraOptionReader) { var main = null; var extra = {}; for (var key in requirementSpec) { if (key) { var value = extraOptionReader(key); - if ('string' === typeof value) value = convertRequirement(requirementSpec[key], value); + if ('string' === typeof value) value = Utils__default.parseRequirement(requirementSpec[key], value); extra[key] = value; } else { - main = convertRequirement(requirementSpec[key], string); + main = Utils__default.parseRequirement(requirementSpec[key], string); } } return [main, extra]; @@ -427,11 +411,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // A Validator needs to implement the methods `validate` and `parseRequirements` - var ParsleyValidator = function ParsleyValidator(spec) { + var Validator = function Validator(spec) { $.extend(true, this, spec); }; - ParsleyValidator.prototype = { + Validator.prototype = { // Returns `true` iff the given `value` is valid according the given requirements. validate: function validate(value, requirementFirstArg) { if (this.fn) { @@ -439,13 +423,19 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr if (arguments.length > 3) // If more args then value, requirement, instance... requirementFirstArg = [].slice.call(arguments, 1, -1); // Skip first arg (value) and last (instance), combining the rest - return this.fn.call(this, value, requirementFirstArg); + return this.fn(value, requirementFirstArg); } if ($.isArray(value)) { if (!this.validateMultiple) throw 'Validator `' + this.name + '` does not handle multiple values'; return this.validateMultiple.apply(this, arguments); } else { + var instance = arguments[arguments.length - 1]; + if (this.validateDate && instance._isDateInput()) { + arguments[0] = Utils__default.parse.date(arguments[0]); + if (arguments[0] === null) return false; + return this.validateDate.apply(this, arguments); + } if (this.validateNumber) { if (isNaN(value)) return false; arguments[0] = parseFloat(arguments[0]); @@ -469,12 +459,12 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr var type = this.requirementType; if ($.isArray(type)) { var values = convertArrayRequirement(requirements, type.length); - for (var i = 0; i < values.length; i++) values[i] = convertRequirement(type[i], values[i]); + for (var i = 0; i < values.length; i++) values[i] = Utils__default.parseRequirement(type[i], values[i]); return values; } else if ($.isPlainObject(type)) { return convertExtraOptionRequirement(type, requirements, extraOptionReader); } else { - return [convertRequirement(type, requirements)]; + return [Utils__default.parseRequirement(type, requirements)]; } }, // Defaults: @@ -484,8 +474,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }; - var ParsleyValidatorRegistry = function ParsleyValidatorRegistry(validators, catalog) { - this.__class__ = 'ParsleyValidatorRegistry'; + var ValidatorRegistry = function ValidatorRegistry(validators, catalog) { + this.__class__ = 'ValidatorRegistry'; // Default Parsley locale is en this.locale = 'en'; @@ -493,7 +483,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr this.init(validators || {}, catalog || {}); }; - var typeRegexes = { + var typeTesters = { email: /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i, // Follow https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers @@ -505,6 +495,12 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr alphanum: /^\w+$/i, + date: { + test: function test(value) { + return Utils__default.parse.date(value) !== null; + } + }, + url: new RegExp("^" + // protocol identifier "(?:(?:https?|ftp)://)?" + // ** mod: make scheme optional @@ -532,7 +528,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // resource path "(?:/\\S*)?" + "$", 'i') }; - typeRegexes.range = typeRegexes.number; + typeTesters.range = typeTesters.number; // See http://stackoverflow.com/a/10454560/8279 var decimalPlaces = function decimalPlaces(num) { @@ -547,7 +543,32 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr match[2] ? +match[2] : 0)); }; - ParsleyValidatorRegistry.prototype = { + // parseArguments('number', ['1', '2']) => [1, 2] + var ValidatorRegistry__parseArguments = function ValidatorRegistry__parseArguments(type, args) { + return args.map(Utils__default.parse[type]); + }; + // operatorToValidator returns a validating function for an operator function, applied to the given type + var ValidatorRegistry__operatorToValidator = function ValidatorRegistry__operatorToValidator(type, operator) { + return function (value) { + for (var _len = arguments.length, requirementsAndInput = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + requirementsAndInput[_key - 1] = arguments[_key]; + } + + requirementsAndInput.pop(); // Get rid of `input` argument + return operator.apply(undefined, [value].concat(_toConsumableArray(ValidatorRegistry__parseArguments(type, requirementsAndInput)))); + }; + }; + + var ValidatorRegistry__comparisonOperator = function ValidatorRegistry__comparisonOperator(operator) { + return { + validateDate: ValidatorRegistry__operatorToValidator('date', operator), + validateNumber: ValidatorRegistry__operatorToValidator('number', operator), + requirementType: operator.length <= 2 ? 'string' : ['string', 'string'], // Support operators with a 1 or 2 requirement(s) + priority: 30 + }; + }; + + ValidatorRegistry.prototype = { init: function init(validators, catalog) { this.catalog = catalog; // Copy prototype's validators: @@ -607,8 +628,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Old API was addValidator(name, function, priority) // addValidator: function addValidator(name, arg1, arg2) { - if (this.validators[name]) ParsleyUtils__default.warn('Validator "' + name + '" is already defined.');else if (ParsleyDefaults.hasOwnProperty(name)) { - ParsleyUtils__default.warn('"' + name + '" is a restricted keyword and is not a valid validator name.'); + if (this.validators[name]) Utils__default.warn('Validator "' + name + '" is already defined.');else if (Defaults.hasOwnProperty(name)) { + Utils__default.warn('"' + name + '" is a restricted keyword and is not a valid validator name.'); return; } return this._setValidator.apply(this, arguments); @@ -616,14 +637,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr updateValidator: function updateValidator(name, arg1, arg2) { if (!this.validators[name]) { - ParsleyUtils__default.warn('Validator "' + name + '" is not already defined.'); + Utils__default.warn('Validator "' + name + '" is not already defined.'); return this.addValidator.apply(this, arguments); } return this._setValidator.apply(this, arguments); }, removeValidator: function removeValidator(name) { - if (!this.validators[name]) ParsleyUtils__default.warn('Validator "' + name + '" is not defined.'); + if (!this.validators[name]) Utils__default.warn('Validator "' + name + '" is not defined.'); delete this.validators[name]; @@ -639,7 +660,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }; } if (!validator.validate) { - validator = new ParsleyValidator(validator); + validator = new Validator(validator); } this.validators[name] = validator; @@ -705,11 +726,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr var _ref$base = _ref.base; var base = _ref$base === undefined ? 0 : _ref$base; - var regex = typeRegexes[type]; - if (!regex) { + var tester = typeTesters[type]; + if (!tester) { throw new Error('validator type `' + type + '` is not supported'); } - if (!regex.test(value)) return false; + if (!tester.test(value)) return false; if ('number' === type) { if (!/^any$/i.test(step || '')) { var nb = Number(value); @@ -781,27 +802,15 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr requirementType: ['integer', 'integer'], priority: 30 }, - min: { - validateNumber: function validateNumber(value, requirement) { - return value >= requirement; - }, - requirementType: 'number', - priority: 30 - }, - max: { - validateNumber: function validateNumber(value, requirement) { - return value <= requirement; - }, - requirementType: 'number', - priority: 30 - }, - range: { - validateNumber: function validateNumber(value, min, max) { - return value >= min && value <= max; - }, - requirementType: ['number', 'number'], - priority: 30 - }, + min: ValidatorRegistry__comparisonOperator(function (value, requirement) { + return value >= requirement; + }), + max: ValidatorRegistry__comparisonOperator(function (value, requirement) { + return value <= requirement; + }), + range: ValidatorRegistry__comparisonOperator(function (value, min, max) { + return value >= min && value <= max; + }), equalto: { validateString: function validateString(value, refOrValue) { var $reference = $(refOrValue); @@ -812,7 +821,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr } }; - var ParsleyUI = {}; + var UI = {}; var diffResults = function diffResults(newResult, oldResult, deep) { var added = []; @@ -836,7 +845,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }; }; - ParsleyUI.Form = { + UI.Form = { _actualizeTriggers: function _actualizeTriggers() { var _this2 = this; @@ -844,7 +853,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr this.$element.on('submit.Parsley', function (evt) { _this2.onSubmitValidate(evt); }); - this.$element.on('click.Parsley', ParsleyUtils__default._SubmitSelector, function (evt) { + this.$element.on('click.Parsley', Utils__default._SubmitSelector, function (evt) { _this2.onSubmitButton(evt); }); @@ -879,7 +888,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }; - ParsleyUI.Field = { + UI.Field = { _reflowUI: function _reflowUI() { this._buildUI(); @@ -1075,7 +1084,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr if (0 !== this._ui.$errorsWrapper.parent().length) return this._ui.$errorsWrapper.parent(); if ('string' === typeof this.options.errorsContainer) { - if ($(this.options.errorsContainer).length) return $(this.options.errorsContainer).append(this._ui.$errorsWrapper);else ParsleyUtils__default.warn('The errors container `' + this.options.errorsContainer + '` does not exist in DOM'); + if ($(this.options.errorsContainer).length) return $(this.options.errorsContainer).append(this._ui.$errorsWrapper);else Utils__default.warn('The errors container `' + this.options.errorsContainer + '` does not exist in DOM'); } else if ('function' === typeof this.options.errorsContainer) $errorsContainer = this.options.errorsContainer.call(this, this); if ('undefined' !== typeof $errorsContainer && $errorsContainer.length) return $errorsContainer.append(this._ui.$errorsWrapper); @@ -1091,9 +1100,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Remove Parsley events already bound on this field $toBind.off('.Parsley'); - if (this._failedOnce) $toBind.on(ParsleyUtils__default.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), function () { + if (this._failedOnce) $toBind.on(Utils__default.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), function () { _this3._validateIfNeeded(); - });else if (trigger = ParsleyUtils__default.namespaceEvents(this.options.trigger, 'Parsley')) { + });else if (trigger = Utils__default.namespaceEvents(this.options.trigger, 'Parsley')) { $toBind.on(trigger, function (event) { _this3._validateIfNeeded(event); }); @@ -1156,8 +1165,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr } }; - var ParsleyForm = function ParsleyForm(element, domOptions, options) { - this.__class__ = 'ParsleyForm'; + var Form = function Form(element, domOptions, options) { + this.__class__ = 'Form'; this.$element = $(element); this.domOptions = domOptions; @@ -1168,9 +1177,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr this.validationResult = null; }; - var ParsleyForm__statusMapping = { pending: null, resolved: true, rejected: false }; + var Form__statusMapping = { pending: null, resolved: true, rejected: false }; - ParsleyForm.prototype = { + Form.prototype = { onSubmitValidate: function onSubmitValidate(event) { var _this5 = this; @@ -1178,7 +1187,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr if (true === event.parsley) return; // If we didn't come here through a submit button, use the first one in the form - var $submitSource = this._$submitSource || this.$element.find(ParsleyUtils__default._SubmitSelector).first(); + var $submitSource = this._$submitSource || this.$element.find(Utils__default._SubmitSelector).first(); this._$submitSource = null; this.$element.find('.parsley-synthetic-submit-button').prop('disabled', true); if ($submitSource.is('[formnovalidate]')) return; @@ -1226,7 +1235,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Consider using `whenValidate` instead. validate: function validate(options) { if (arguments.length >= 1 && !$.isPlainObject(options)) { - ParsleyUtils__default.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.'); + Utils__default.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.'); var _arguments = _slice.call(arguments); @@ -1236,11 +1245,11 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr options = { group: group, force: force, event: event }; } - return ParsleyForm__statusMapping[this.whenValidate(options).state()]; + return Form__statusMapping[this.whenValidate(options).state()]; }, whenValidate: function whenValidate() { - var _ParsleyUtils__default$all$done$fail$always, + var _Utils__default$all$done$fail$always, _this6 = this; var _ref7 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; @@ -1252,7 +1261,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr this.submitEvent = event; if (event) { this.submitEvent = $.extend({}, event, { preventDefault: function preventDefault() { - ParsleyUtils__default.warnOnce("Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`"); + Utils__default.warnOnce("Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`"); _this6.validationResult = false; } }); } @@ -1270,7 +1279,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }); }); - return (_ParsleyUtils__default$all$done$fail$always = ParsleyUtils__default.all(promises).done(function () { + return (_Utils__default$all$done$fail$always = Utils__default.all(promises).done(function () { _this6._trigger('success'); }).fail(function () { _this6.validationResult = false; @@ -1278,7 +1287,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr _this6._trigger('error'); }).always(function () { _this6._trigger('validated'); - })).pipe.apply(_ParsleyUtils__default$all$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult())); + })).pipe.apply(_Utils__default$all$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult())); }, // Iterate over refreshed fields, and stop on first failure. @@ -1287,7 +1296,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Prefer using `whenValid` instead. isValid: function isValid(options) { if (arguments.length >= 1 && !$.isPlainObject(options)) { - ParsleyUtils__default.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.'); + Utils__default.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.'); var _arguments2 = _slice.call(arguments); @@ -1296,7 +1305,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr options = { group: group, force: force }; } - return ParsleyForm__statusMapping[this.whenValid(options).state()]; + return Form__statusMapping[this.whenValid(options).state()]; }, // Iterate over refreshed fields and validate them. @@ -1317,7 +1326,27 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr return field.whenValid({ group: group, force: force }); }); }); - return ParsleyUtils__default.all(promises); + return Utils__default.all(promises); + }, + + // Reset UI + reset: function reset() { + // Form case: emit a reset event for each field + for (var i = 0; i < this.fields.length; i++) this.fields[i].reset(); + + this._trigger('reset'); + }, + + // Destroy Parsley instance (+ UI) + destroy: function destroy() { + // Field case: emit destroy event to clean UI and then destroy stored instance + this._destroyUI(); + + // Form case: destroy all its fields and then destroy stored instance + for (var i = 0; i < this.fields.length; i++) this.fields[i].destroy(); + + this.$element.removeData('Parsley'); + this._trigger('destroy'); }, _refreshFields: function _refreshFields() { @@ -1336,15 +1365,18 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr _this8.$element.find(_this8.options.inputs).not(_this8.options.excluded).each(function (_, element) { var fieldInstance = new window.Parsley.Factory(element, {}, _this8); - // Only add valid and not excluded `ParsleyField` and `ParsleyFieldMultiple` children - if (('ParsleyField' === fieldInstance.__class__ || 'ParsleyFieldMultiple' === fieldInstance.__class__) && true !== fieldInstance.options.excluded) if ('undefined' === typeof _this8.fieldsMappedById[fieldInstance.__class__ + '-' + fieldInstance.__id__]) { - _this8.fieldsMappedById[fieldInstance.__class__ + '-' + fieldInstance.__id__] = fieldInstance; - _this8.fields.push(fieldInstance); + // Only add valid and not excluded `Field` and `FieldMultiple` children + if (('Field' === fieldInstance.__class__ || 'FieldMultiple' === fieldInstance.__class__) && true !== fieldInstance.options.excluded) { + var uniqueId = fieldInstance.__class__ + '-' + fieldInstance.__id__; + if ('undefined' === typeof _this8.fieldsMappedById[uniqueId]) { + _this8.fieldsMappedById[uniqueId] = fieldInstance; + _this8.fields.push(fieldInstance); + } } }); - $.each(ParsleyUtils__default.difference(oldFields, _this8.fields), function (_, field) { - field._trigger('reset'); + $.each(Utils__default.difference(oldFields, _this8.fields), function (_, field) { + field.reset(); }); }); return this; @@ -1376,11 +1408,9 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }; - var ConstraintFactory = function ConstraintFactory(parsleyField, name, requirements, priority, isDomConstraint) { - if (!/ParsleyField/.test(parsleyField.__class__)) throw new Error('ParsleyField or ParsleyFieldMultiple instance expected'); - + var Constraint = function Constraint(parsleyField, name, requirements, priority, isDomConstraint) { var validatorSpec = window.Parsley._validatorRegistry.validators[name]; - var validator = new ParsleyValidator(validatorSpec); + var validator = new Validator(validatorSpec); $.extend(this, { validator: validator, @@ -1397,7 +1427,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr return cap + str.slice(1); }; - ConstraintFactory.prototype = { + Constraint.prototype = { validate: function validate(value, instance) { var _validator; @@ -1413,8 +1443,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr } }; - var ParsleyField = function ParsleyField(field, domOptions, options, parsleyFormInstance) { - this.__class__ = 'ParsleyField'; + var Field = function Field(field, domOptions, options, parsleyFormInstance) { + this.__class__ = 'Field'; this.$element = $(field); @@ -1437,14 +1467,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr var parsley_field__statusMapping = { pending: null, resolved: true, rejected: false }; - ParsleyField.prototype = { + Field.prototype = { // # Public API - // Validate field and trigger some events for mainly `ParsleyUI` + // Validate field and trigger some events for mainly `UI` // @returns `true`, an array of the validators that failed, or // `null` if validation is not finished. Prefer using whenValidate validate: function validate(options) { if (arguments.length >= 1 && !$.isPlainObject(options)) { - ParsleyUtils__default.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.'); + Utils__default.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.'); options = { options: options }; } var promise = this.whenValidate(options); @@ -1460,7 +1490,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr } }, - // Validate field and trigger some events for mainly `ParsleyUI` + // Validate field and trigger some events for mainly `UI` // @returns a promise that succeeds only when all validations do // or `undefined` if field is not in the given `group`. whenValidate: function whenValidate() { @@ -1518,7 +1548,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // See also `whenValid`. isValid: function isValid(options) { if (arguments.length >= 1 && !$.isPlainObject(options)) { - ParsleyUtils__default.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.'); + Utils__default.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.'); var _arguments3 = _slice.call(arguments); @@ -1569,13 +1599,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr $.each(groupedConstraints, function (_, constraints) { // Process one group of constraints at a time, we validate the constraints // and combine the promises together. - var promise = ParsleyUtils__default.all($.map(constraints, function (constraint) { + var promise = Utils__default.all($.map(constraints, function (constraint) { return _this11._validateConstraint(value, constraint); })); promises.push(promise); if (promise.state() === 'rejected') return false; // Interrupt processing if a group has already failed }); - return ParsleyUtils__default.all(promises); + return Utils__default.all(promises); }, // @returns a promise @@ -1586,7 +1616,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Map false to a failed promise if (false === result) result = $.Deferred().reject(); // Make sure we return a promise and that we record failures - return ParsleyUtils__default.all([result]).fail(function (errorMessage) { + return Utils__default.all([result]).fail(function (errorMessage) { if (!(_this12.validationResult instanceof Array)) _this12.validationResult = []; _this12.validationResult.push({ assert: constraint, @@ -1608,6 +1638,21 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr return this._handleWhitespace(value); }, + // Reset UI + reset: function reset() { + this._resetUI(); + return this._trigger('reset'); + }, + + // Destroy Parsley instance (+ UI) + destroy: function destroy() { + // Field case: emit destroy event to clean UI and then destroy stored instance + this._destroyUI(); + this.$element.removeData('Parsley'); + this.$element.removeData('FieldMultiple'); + this._trigger('destroy'); + }, + // Actualize options that could have change since previous validation // Re-bind accordingly constraints (could be some new, removed or updated) refreshConstraints: function refreshConstraints() { @@ -1625,7 +1670,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr addConstraint: function addConstraint(name, requirements, priority, isDomConstraint) { if (window.Parsley._validatorRegistry.validators[name]) { - var constraint = new ConstraintFactory(this, name, requirements, priority, isDomConstraint); + var constraint = new Constraint(this, name, requirements, priority, isDomConstraint); // if constraint already exist, delete it and push new version if ('undefined' !== this.constraintsByName[constraint.name]) this.removeConstraint(constraint.name); @@ -1686,13 +1731,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr if ('string' === typeof this.$element.attr('pattern')) this.addConstraint('pattern', this.$element.attr('pattern'), undefined, true); // range - if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('min') && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('range', [this.$element.attr('min'), this.$element.attr('max')], undefined, true); + if ('undefined' !== typeof this.$element.attr('min') && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('range', [this.$element.attr('min'), this.$element.attr('max')], undefined, true); // HTML5 min - else if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('min')) this.addConstraint('min', this.$element.attr('min'), undefined, true); + else if ('undefined' !== typeof this.$element.attr('min')) this.addConstraint('min', this.$element.attr('min'), undefined, true); // HTML5 max - else if (this.$element.attr('type') !== 'date' && 'undefined' !== typeof this.$element.attr('max')) this.addConstraint('max', this.$element.attr('max'), undefined, true); + else if ('undefined' !== typeof this.$element.attr('max')) this.addConstraint('max', this.$element.attr('max'), undefined, true); // length if ('undefined' !== typeof this.$element.attr('minlength') && 'undefined' !== typeof this.$element.attr('maxlength')) this.addConstraint('length', [this.$element.attr('minlength'), this.$element.attr('maxlength')], undefined, true); @@ -1715,7 +1760,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr base: this.$element.attr('min') || this.$element.attr('value') }], undefined, true); // Regular other HTML5 supported types - } else if (/^(email|url|range)$/i.test(type)) { + } else if (/^(email|url|range|date)$/i.test(type)) { return this.addConstraint('type', type, undefined, true); } return this; @@ -1740,15 +1785,20 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Use `data-parsley-whitespace="squish"` to auto squish input value // Use `data-parsley-whitespace="trim"` to auto trim input value _handleWhitespace: function _handleWhitespace(value) { - if (true === this.options.trimValue) ParsleyUtils__default.warnOnce('data-parsley-trim-value="true" is deprecated, please use data-parsley-whitespace="trim"'); + if (true === this.options.trimValue) Utils__default.warnOnce('data-parsley-trim-value="true" is deprecated, please use data-parsley-whitespace="trim"'); if ('squish' === this.options.whitespace) value = value.replace(/\s{2,}/g, ' '); - if ('trim' === this.options.whitespace || 'squish' === this.options.whitespace || true === this.options.trimValue) value = ParsleyUtils__default.trimString(value); + if ('trim' === this.options.whitespace || 'squish' === this.options.whitespace || true === this.options.trimValue) value = Utils__default.trimString(value); return value; }, + _isDateInput: function _isDateInput() { + var c = this.constraintsByName.type; + return c && c.requirements === 'date'; + }, + // Internal only. // Returns the constraints, grouped by descending priority. // The result is thus an array of arrays of constraints. @@ -1774,13 +1824,13 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }; - var parsley_field = ParsleyField; + var parsley_field = Field; - var ParsleyMultiple = function ParsleyMultiple() { - this.__class__ = 'ParsleyFieldMultiple'; + var Multiple = function Multiple() { + this.__class__ = 'FieldMultiple'; }; - ParsleyMultiple.prototype = { + Multiple.prototype = { // Add new `$element` sibling for multiple field addElement: function addElement($element) { this.$elements.push($element); @@ -1788,7 +1838,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr return this; }, - // See `ParsleyField.refreshConstraints()` + // See `Field.refreshConstraints()` refreshConstraints: function refreshConstraints() { var fieldConstraints; @@ -1810,7 +1860,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr continue; } - fieldConstraints = this.$elements[i].data('ParsleyFieldMultiple').refreshConstraints().constraints; + fieldConstraints = this.$elements[i].data('FieldMultiple').refreshConstraints().constraints; for (var j = 0; j < fieldConstraints.length; j++) this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint); } @@ -1818,7 +1868,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr return this; }, - // See `ParsleyField.getValue()` + // See `Field.getValue()` getValue: function getValue() { // Value could be overriden in DOM if ('function' === typeof this.options.value) return this.options.value(this);else if ('undefined' !== typeof this.options.value) return this.options.value; @@ -1851,14 +1901,14 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr } }; - var ParsleyFactory = function ParsleyFactory(element, options, parsleyFormInstance) { + var Factory = function Factory(element, options, parsleyFormInstance) { this.$element = $(element); // If the element has already been bound, returns its saved Parsley instance var savedparsleyFormInstance = this.$element.data('Parsley'); if (savedparsleyFormInstance) { - // If the saved instance has been bound without a ParsleyForm parent and there is one given in this call, add it + // If the saved instance has been bound without a Form parent and there is one given in this call, add it if ('undefined' !== typeof parsleyFormInstance && savedparsleyFormInstance.parent === window.Parsley) { savedparsleyFormInstance.parent = parsleyFormInstance; savedparsleyFormInstance._resetOptions(savedparsleyFormInstance.options); @@ -1874,25 +1924,25 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Parsley must be instantiated with a DOM element or jQuery $element if (!this.$element.length) throw new Error('You must bind Parsley on an existing element.'); - if ('undefined' !== typeof parsleyFormInstance && 'ParsleyForm' !== parsleyFormInstance.__class__) throw new Error('Parent instance must be a ParsleyForm instance'); + if ('undefined' !== typeof parsleyFormInstance && 'Form' !== parsleyFormInstance.__class__) throw new Error('Parent instance must be a Form instance'); this.parent = parsleyFormInstance || window.Parsley; return this.init(options); }; - ParsleyFactory.prototype = { + Factory.prototype = { init: function init(options) { this.__class__ = 'Parsley'; - this.__version__ = '2.6.2'; - this.__id__ = ParsleyUtils__default.generateID(); + this.__version__ = '2.7.0'; + this.__id__ = Utils__default.generateID(); // Pre-compute options this._resetOptions(options); - // A ParsleyForm instance is obviously a `
    ` element but also every node that is not an input and has the `data-parsley-validate` attribute - if (this.$element.is('form') || ParsleyUtils__default.checkAttr(this.$element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)) return this.bind('parsleyForm'); + // A Form instance is obviously a `` element but also every node that is not an input and has the `data-parsley-validate` attribute + if (this.$element.is('form') || Utils__default.checkAttr(this.$element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)) return this.bind('parsleyForm'); - // Every other element is bound as a `ParsleyField` or `ParsleyFieldMultiple` + // Every other element is bound as a `Field` or `FieldMultiple` return this.isMultiple() ? this.handleMultiple() : this.bind('parsleyField'); }, @@ -1920,7 +1970,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Else for radio / checkboxes, we need a `name` or `data-parsley-multiple` to properly bind it } else if (!this.options.multiple) { - ParsleyUtils__default.warn('To be bound by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.', this.$element); + Utils__default.warn('To be bound by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.', this.$element); return this; } @@ -1940,7 +1990,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr parsleyMultipleInstance = $($previouslyRelated.get(i)).data('Parsley'); if ('undefined' !== typeof parsleyMultipleInstance) { - if (!this.$element.data('ParsleyFieldMultiple')) { + if (!this.$element.data('FieldMultiple')) { parsleyMultipleInstance.addElement(this.$element); } @@ -1948,35 +1998,35 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr } } - // Create a secret ParsleyField instance for every multiple field. It will be stored in `data('ParsleyFieldMultiple')` - // And will be useful later to access classic `ParsleyField` stuff while being in a `ParsleyFieldMultiple` instance + // Create a secret Field instance for every multiple field. It will be stored in `data('FieldMultiple')` + // And will be useful later to access classic `Field` stuff while being in a `FieldMultiple` instance this.bind('parsleyField', true); return parsleyMultipleInstance || this.bind('parsleyFieldMultiple'); }, - // Return proper `ParsleyForm`, `ParsleyField` or `ParsleyFieldMultiple` + // Return proper `Form`, `Field` or `FieldMultiple` bind: function bind(type, doNotStore) { var parsleyInstance; switch (type) { case 'parsleyForm': - parsleyInstance = $.extend(new ParsleyForm(this.$element, this.domOptions, this.options), new ParsleyAbstract(), window.ParsleyExtend)._bindFields(); + parsleyInstance = $.extend(new Form(this.$element, this.domOptions, this.options), new Base(), window.ParsleyExtend)._bindFields(); break; case 'parsleyField': - parsleyInstance = $.extend(new parsley_field(this.$element, this.domOptions, this.options, this.parent), new ParsleyAbstract(), window.ParsleyExtend); + parsleyInstance = $.extend(new parsley_field(this.$element, this.domOptions, this.options, this.parent), new Base(), window.ParsleyExtend); break; case 'parsleyFieldMultiple': - parsleyInstance = $.extend(new parsley_field(this.$element, this.domOptions, this.options, this.parent), new ParsleyMultiple(), new ParsleyAbstract(), window.ParsleyExtend)._init(); + parsleyInstance = $.extend(new parsley_field(this.$element, this.domOptions, this.options, this.parent), new Multiple(), new Base(), window.ParsleyExtend)._init(); break; default: throw new Error(type + 'is not a supported Parsley type'); } - if (this.options.multiple) ParsleyUtils__default.setAttr(this.$element, this.options.namespace, 'multiple', this.options.multiple); + if (this.options.multiple) Utils__default.setAttr(this.$element, this.options.namespace, 'multiple', this.options.multiple); if ('undefined' !== typeof doNotStore) { - this.$element.data('ParsleyFieldMultiple', parsleyInstance); + this.$element.data('FieldMultiple', parsleyInstance); return parsleyInstance; } @@ -1984,7 +2034,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Store the freshly bound instance in a DOM element for later access using jQuery `data()` this.$element.data('Parsley', parsleyInstance); - // Tell the world we have a new ParsleyForm or ParsleyField instance! + // Tell the world we have a new Form or Field instance! parsleyInstance._actualizeTriggers(); parsleyInstance._trigger('init'); @@ -1997,23 +2047,23 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr throw "The loaded version of jQuery is too old. Please upgrade to 1.8.x or better."; } if (!vernums.forEach) { - ParsleyUtils__default.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim'); + Utils__default.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim'); } // Inherit `on`, `off` & `trigger` to Parsley: - var Parsley = $.extend(new ParsleyAbstract(), { + var Parsley = $.extend(new Base(), { $element: $(document), actualizeOptions: null, _resetOptions: null, - Factory: ParsleyFactory, - version: '2.6.2' + Factory: Factory, + version: '2.7.0' }); - // Supplement ParsleyField and Form with ParsleyAbstract + // Supplement Field and Form with Base // This way, the constructors will have access to those methods - $.extend(parsley_field.prototype, ParsleyUI.Field, ParsleyAbstract.prototype); - $.extend(ParsleyForm.prototype, ParsleyUI.Form, ParsleyAbstract.prototype); + $.extend(parsley_field.prototype, UI.Field, Base.prototype); + $.extend(Form.prototype, UI.Form, Base.prototype); // Inherit actualizeOptions and _resetOptions: - $.extend(ParsleyFactory.prototype, ParsleyAbstract.prototype); + $.extend(Factory.prototype, Base.prototype); // ### jQuery API // `$('.elem').parsley(options)` or `$('.elem').psly(options)` @@ -2030,58 +2080,67 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr // Return undefined if applied to non existing DOM element if (!$(this).length) { - ParsleyUtils__default.warn('You must bind Parsley on an existing element.'); + Utils__default.warn('You must bind Parsley on an existing element.'); return; } - return new ParsleyFactory(this, options); + return new Factory(this, options); }; - // ### ParsleyField and ParsleyForm extension + // ### Field and Form extension // Ensure the extension is now defined if it wasn't previously if ('undefined' === typeof window.ParsleyExtend) window.ParsleyExtend = {}; // ### Parsley config // Inherit from ParsleyDefault, and copy over any existing values - Parsley.options = $.extend(ParsleyUtils__default.objectCreate(ParsleyDefaults), window.ParsleyConfig); + Parsley.options = $.extend(Utils__default.objectCreate(Defaults), window.ParsleyConfig); window.ParsleyConfig = Parsley.options; // Old way of accessing global options // ### Globals window.Parsley = window.psly = Parsley; - window.ParsleyUtils = ParsleyUtils__default; + Parsley.Utils = Utils__default; + window.ParsleyUtils = {}; + $.each(Utils__default, function (key, value) { + if ('function' === typeof value) { + window.ParsleyUtils[key] = function () { + Utils__default.warnOnce('Accessing `window.ParsleyUtils` is deprecated. Use `window.Parsley.Utils` instead.'); + return Utils__default[key].apply(Utils__default, arguments); + }; + } + }); // ### Define methods that forward to the registry, and deprecate all access except through window.Parsley - var registry = window.Parsley._validatorRegistry = new ParsleyValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n); + var registry = window.Parsley._validatorRegistry = new ValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n); window.ParsleyValidator = {}; $.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator'.split(' '), function (i, method) { window.Parsley[method] = $.proxy(registry, method); window.ParsleyValidator[method] = function () { var _window$Parsley; - ParsleyUtils__default.warnOnce('Accessing the method \'' + method + '\' through ParsleyValidator is deprecated. Simply call \'window.Parsley.' + method + '(...)\''); + Utils__default.warnOnce('Accessing the method \'' + method + '\' through Validator is deprecated. Simply call \'window.Parsley.' + method + '(...)\''); return (_window$Parsley = window.Parsley)[method].apply(_window$Parsley, arguments); }; }); - // ### ParsleyUI + // ### UI // Deprecated global object - window.Parsley.UI = ParsleyUI; + window.Parsley.UI = UI; window.ParsleyUI = { removeError: function removeError(instance, name, doNotUpdateClass) { var updateClass = true !== doNotUpdateClass; - ParsleyUtils__default.warnOnce('Accessing ParsleyUI is deprecated. Call \'removeError\' on the instance directly. Please comment in issue 1073 as to your need to call this method.'); + Utils__default.warnOnce('Accessing UI is deprecated. Call \'removeError\' on the instance directly. Please comment in issue 1073 as to your need to call this method.'); return instance.removeError(name, { updateClass: updateClass }); }, getErrorsMessages: function getErrorsMessages(instance) { - ParsleyUtils__default.warnOnce('Accessing ParsleyUI is deprecated. Call \'getErrorsMessages\' on the instance directly.'); + Utils__default.warnOnce('Accessing UI is deprecated. Call \'getErrorsMessages\' on the instance directly.'); return instance.getErrorsMessages(); } }; $.each('addError updateError'.split(' '), function (i, method) { window.ParsleyUI[method] = function (instance, name, message, assert, doNotUpdateClass) { var updateClass = true !== doNotUpdateClass; - ParsleyUtils__default.warnOnce('Accessing ParsleyUI is deprecated. Call \'' + method + '\' on the instance directly. Please comment in issue 1073 as to your need to call this method.'); + Utils__default.warnOnce('Accessing UI is deprecated. Call \'' + method + '\' on the instance directly. Please comment in issue 1073 as to your need to call this method.'); return instance[method](name, { message: message, assert: assert, updateClass: updateClass }); }; }); @@ -2097,7 +2156,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr var o = $({}); var deprecated = function deprecated() { - ParsleyUtils__default.warnOnce("Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley"); + Utils__default.warnOnce("Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley"); }; // Returns an event handler that calls `fn` with the arguments it expects @@ -2136,7 +2195,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr $.listenTo = function (instance, name, fn) { deprecated(); - if (!(instance instanceof parsley_field) && !(instance instanceof ParsleyForm)) throw new Error('Must give Parsley instance'); + if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance'); if ('string' !== typeof name || 'function' !== typeof fn) throw new Error('Wrong parameters'); @@ -2151,7 +2210,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr $.unsubscribeTo = function (instance, name) { deprecated(); - if (!(instance instanceof parsley_field) && !(instance instanceof ParsleyForm)) throw new Error('Must give Parsley instance'); + if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance'); instance.off(eventName(name)); }; @@ -2171,7 +2230,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr var _instance; deprecated(); - var instanceGiven = instance instanceof parsley_field || instance instanceof ParsleyForm; + var instanceGiven = instance instanceof parsley_field || instance instanceof Form; var args = Array.prototype.slice.call(arguments, instanceGiven ? 2 : 1); args.unshift(eventName(name)); if (!instanceGiven) { @@ -2279,7 +2338,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr }); window.ParsleyExtend.addAsyncValidator = function () { - ParsleyUtils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`'); + Utils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`'); return Parsley.addAsyncValidator.apply(Parsley, arguments); }; diff --git a/_build/package.json b/_build/package.json index 71932ec..0e29993 100644 --- a/_build/package.json +++ b/_build/package.json @@ -19,7 +19,7 @@ }, "homepage": "http://christopherl.com", "dependencies": { - "fs-extra": "^2.0.0", + "fs-extra": "^2.1.2", "gulp": "^3.9.1", "gulp-autoprefixer": "^3.1.1", "gulp-cssnano": "^2.1.2", @@ -30,6 +30,6 @@ }, "devDependencies": { "gulp-concat": "^2.6.0", - "gulp-uglify": "^2.0.0" + "gulp-uglify": "^2.1.0" } } diff --git a/_build/sass/featherlight.scss b/_build/sass/featherlight.scss index bc0e997..4de735e 100644 --- a/_build/sass/featherlight.scss +++ b/_build/sass/featherlight.scss @@ -1,11 +1,10 @@ /** * Featherlight – ultra slim jQuery lightbox - * Version 1.5.0 - http://noelboss.github.io/featherlight/ + * Version 1.7.1 - http://noelboss.github.io/featherlight/ * - * Copyright 2016, Noël Raoul Bossart (http://www.noelboss.com) + * Copyright 2017, Noël Raoul Bossart (http://www.noelboss.com) * MIT Licensed. **/ - @media all { .featherlight { display: none; @@ -39,7 +38,6 @@ display: inline-block; height: 100%; vertical-align: middle; - margin-right: -0.25em; } .featherlight .featherlight-content { @@ -93,8 +91,15 @@ background: #fff; /* Set the background in case it overlaps the content */ background: rgba(255, 255, 255, 0.3); color: #000; + border: none; + padding: 0; } + /* See http://stackoverflow.com/questions/16077341/how-to-reset-all-default-styles-of-the-html5-button-element */ + .featherlight .featherlight-close-icon::-moz-focus-inner { + border: 0; + padding: 0; + } .featherlight .featherlight-image { /* styling */ @@ -106,6 +111,8 @@ /* removed the border for image croping since iframe is edge to edge */ border-bottom: 0; padding: 0; + -webkit-overflow-scrolling: touch; + overflow-y: scroll; } .featherlight iframe { @@ -124,8 +131,8 @@ @media only screen and (max-width: 1024px) { .featherlight .featherlight-content { /* dimensions: maximize lightbox with for small screens */ - margin-left: 10px; - margin-right: 10px; + margin-left: 0; + margin-right: 0; max-height: 98%; padding: 10px 10px 0; diff --git a/_tests/system/SystemRequirementsTest.php b/_tests/system/SystemRequirementsTest.php index e95f924..880f704 100644 --- a/_tests/system/SystemRequirementsTest.php +++ b/_tests/system/SystemRequirementsTest.php @@ -8,18 +8,11 @@ * testSmartyVersion Verifies Smarty is version 3 or newer * testCompleteInstall Verifies all files exist */ -class SystemRequirementsTest extends PHPUnit_Framework_TestCase +class SystemRequirementsTest extends PHPUnit\Framework\TestCase { public function testPHPUnitVersion() { - // we'd really prefer you use PHPUnit 5 - if (floatval(PHPUnit_Runner_Version::id() > 4.9)) { - $this->assertGreaterThanOrEqual(5.3, floatval(PHPUnit_Runner_Version::id()), '---Please upgrade to PHPUnit 5.3 or newer.'); - } - // but for you old-timers 4.8 still works, probably - else { - $this->assertGreaterThanOrEqual(4.8, floatval(PHPUnit_Runner_Version::id()), '---Please upgrade to PHPUnit 4.8 or newer.'); - } + $this->assertGreaterThanOrEqual(6.0, floatval(PHPUnit\Runner\Version::id()), '---Please upgrade to PHPUnit 6.0 or newer.'); } /** @@ -49,6 +42,7 @@ public function testCompleteInstall() $files = array( '.htaccess', '404.php', + 'LICENSE', 'ReadMe.md', '_build/gulpfile.js', '_build/javascript/core.js', diff --git a/_tests/unit/AjaxHandlerTest.php b/_tests/unit/AjaxHandlerTest.php index fd505c7..6c58fc1 100644 --- a/_tests/unit/AjaxHandlerTest.php +++ b/_tests/unit/AjaxHandlerTest.php @@ -5,7 +5,7 @@ * Tests include: * testEmptyRequest Verifies that a methodless request results in a 404 error response */ -class AjaxHandlerTest extends PHPUnit_Framework_TestCase +class AjaxHandlerTest extends PHPUnit\Framework\TestCase { /** * @runInSeparateProcess diff --git a/_tests/unit/ConfigurationTest.php b/_tests/unit/ConfigurationTest.php index 2fccd55..6c492e2 100644 --- a/_tests/unit/ConfigurationTest.php +++ b/_tests/unit/ConfigurationTest.php @@ -6,7 +6,7 @@ * testConfigFileStructure Verifies config file structure to ensure settings are named correctly * testConfigFileContents Verifies config file contents to ensure setting values are valid */ -class ConfigurationTest extends PHPUnit_Framework_TestCase +class ConfigurationTest extends PHPUnit\Framework\TestCase { public function testConfigFileStructure() { diff --git a/_tests/unit/FunctionsIncludeTest.php b/_tests/unit/FunctionsIncludeTest.php index 5a4e282..d323f59 100644 --- a/_tests/unit/FunctionsIncludeTest.php +++ b/_tests/unit/FunctionsIncludeTest.php @@ -7,7 +7,7 @@ * testResponseFeedback Verifies feedback is set in response correctly * testPackageFormSubmission Verifies correct form submission filtering and packaging */ -class FunctionsIncludeTest extends PHPUnit_Framework_TestCase +class FunctionsIncludeTest extends PHPUnit\Framework\TestCase { public function testResponseError() { @@ -190,4 +190,4 @@ public function testPackageFormSubmission() $this->assertEquals('just kidding this is plain text', $cleaned_data['malicious_php_array_input'][1]); $this->assertEquals('; eval(header("Location: http:christopherl.com");', $cleaned_data['malicious_php_array_input'][2]); } -} \ No newline at end of file +} diff --git a/css/styles.css b/css/styles.css index c4f8123..d92cc4d 100644 --- a/css/styles.css +++ b/css/styles.css @@ -1,7 +1,7 @@ /*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none} .container{position:relative;max-width:960px;margin:0 auto;padding:0 20px}.column,.columns,.container{width:100%;box-sizing:border-box}.column,.columns{float:left}@media (min-width:400px){.container{width:85%;padding:0}}@media (min-width:550px){.container{width:80%}.column,.columns{margin-left:4%}.column:first-child,.columns:first-child{margin-left:0}.one.column,.one.columns{width:4.66666666667%}.two.columns{width:13.3333333333%}.three.columns{width:22%}.four.columns{width:30.6666666667%}.five.columns{width:39.3333333333%}.six.columns{width:48%}.seven.columns{width:56.6666666667%}.eight.columns{width:65.3333333333%}.nine.columns{width:74%}.ten.columns{width:82.6666666667%}.eleven.columns{width:91.3333333333%}.twelve.columns{width:100%;margin-left:0}.one-third.column{width:30.6666666667%}.two-thirds.column{width:65.3333333333%}.one-half.column{width:48%}.offset-by-one.column,.offset-by-one.columns{margin-left:8.66666666667%}.offset-by-two.column,.offset-by-two.columns{margin-left:17.3333333333%}.offset-by-three.column,.offset-by-three.columns{margin-left:26%}.offset-by-four.column,.offset-by-four.columns{margin-left:34.6666666667%}.offset-by-five.column,.offset-by-five.columns{margin-left:43.3333333333%}.offset-by-six.column,.offset-by-six.columns{margin-left:52%}.offset-by-seven.column,.offset-by-seven.columns{margin-left:60.6666666667%}.offset-by-eight.column,.offset-by-eight.columns{margin-left:69.3333333333%}.offset-by-nine.column,.offset-by-nine.columns{margin-left:78%}.offset-by-ten.column,.offset-by-ten.columns{margin-left:86.6666666667%}.offset-by-eleven.column,.offset-by-eleven.columns{margin-left:95.3333333333%}.offset-by-one-third.column,.offset-by-one-third.columns{margin-left:34.6666666667%}.offset-by-two-thirds.column,.offset-by-two-thirds.columns{margin-left:69.3333333333%}.offset-by-one-half.column,.offset-by-one-half.columns{margin-left:52%}}html{font-size:62.5%}body{font-size:1.5em;line-height:1.6;font-weight:400;font-family:Raleway,HelveticaNeue,Helvetica Neue,Helvetica,Arial,sans-serif;color:#222}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:2rem;font-weight:300}h1{font-size:4rem;line-height:1.2}h1,h2{letter-spacing:-.1rem}h2{font-size:3.6rem;line-height:1.25}h3{font-size:3rem;line-height:1.3;letter-spacing:-.1rem}h4{font-size:2.4rem;line-height:1.35;letter-spacing:-.08rem}h5{font-size:1.8rem;line-height:1.5;letter-spacing:-.05rem}h6{font-size:1.5rem;line-height:1.6;letter-spacing:0}@media (min-width:550px){h1{font-size:5rem}h2{font-size:4.2rem}h3{font-size:3.6rem}h4{font-size:3rem}h5{font-size:2.4rem}h6{font-size:1.5rem}}p{margin-top:0}a{color:#1eaedb}a:hover{color:#0fa0ce}.button,button,input[type=button],input[type=reset],input[type=submit]{display:inline-block;height:38px;padding:0 30px;color:#555;text-align:center;font-size:11px;font-weight:600;line-height:38px;letter-spacing:.1rem;text-transform:uppercase;text-decoration:none;white-space:nowrap;background-color:transparent;border-radius:4px;border:1px solid #bbb;cursor:pointer;box-sizing:border-box}.button:focus,.button:hover,button:focus,button:hover,input[type=button]:focus,input[type=button]:hover,input[type=reset]:focus,input[type=reset]:hover,input[type=submit]:focus,input[type=submit]:hover{color:#333;border-color:#888;outline:0}.button.button-primary,button.button-primary,input[type=button].button-primary,input[type=reset].button-primary,input[type=submit].button-primary{color:#fff;background-color:#33c3f0;border-color:#33c3f0}.button.button-primary:focus,.button.button-primary:hover,button.button-primary:focus,button.button-primary:hover,input[type=button].button-primary:focus,input[type=button].button-primary:hover,input[type=reset].button-primary:focus,input[type=reset].button-primary:hover,input[type=submit].button-primary:focus,input[type=submit].button-primary:hover{color:#fff;background-color:#1eaedb;border-color:#1eaedb}input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{height:38px;padding:6px 10px;background-color:#fff;border:1px solid #d1d1d1;border-radius:4px;box-shadow:none;box-sizing:border-box}input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}textarea{min-height:65px;padding-top:6px;padding-bottom:6px}input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{border:1px solid #33c3f0;outline:0}label,legend{display:block;margin-bottom:.5rem;font-weight:600}fieldset{padding:0;border-width:0}input[type=checkbox],input[type=radio]{display:inline}label>.label-body{display:inline-block;margin-left:.5rem;font-weight:400}ul{list-style:circle inside}ol{list-style:decimal inside}ol,ul{padding-left:0;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin:1.5rem 0 1.5rem 3rem;font-size:90%}li{margin-bottom:1rem}code{padding:.2rem .5rem;margin:0 .2rem;font-size:90%;white-space:nowrap;background:#f1f1f1;border:1px solid #e1e1e1;border-radius:4px}pre>code{display:block;padding:1rem 1.5rem;white-space:pre}td,th{padding:12px 15px;text-align:left;border-bottom:1px solid #e1e1e1}td:first-child,th:first-child{padding-left:0}td:last-child,th:last-child{padding-right:0}.button,button{margin-bottom:1rem}fieldset,input,select,textarea{margin-bottom:1.5rem}blockquote,dl,figure,form,ol,p,pre,table,ul{margin-bottom:2.5rem}.u-full-width{width:100%;box-sizing:border-box}.u-max-full-width{max-width:100%;box-sizing:border-box}.u-pull-right{float:right}.u-pull-left{float:left}hr{margin-top:3rem;margin-bottom:3.5rem;border-width:0;border-top:1px solid #e1e1e1}.container:after,.row:after,.u-cf{content:"";display:table;clear:both} -@media{.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:transparent}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:"";display:inline-block;height:100%;vertical-align:middle;margin-right:-.25em}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight .featherlight-close-icon{position:absolute;z-index:1;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font-family:Arial,sans-serif;background:#fff;background:hsla(0,0%,100%,.3);color:#000}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0}.featherlight iframe{border:none}.featherlight *{box-sizing:border-box}}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:10px;margin-right:10px;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}} +@media{.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:transparent}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:"";display:inline-block;height:100%;vertical-align:middle}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight .featherlight-close-icon{position:absolute;z-index:1;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font-family:Arial,sans-serif;background:#fff;background:hsla(0,0%,100%,.3);color:#000;border:none;padding:0}.featherlight .featherlight-close-icon::-moz-focus-inner{border:0;padding:0}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0;-webkit-overflow-scrolling:touch;overflow-y:scroll}.featherlight iframe{border:none}.featherlight *{box-sizing:border-box}}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:0;margin-right:0;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}} #mc_embed_signup form{display:block;position:relative;text-align:left;padding:10px 0 10px 3%}#mc_embed_signup h2{font-weight:700;padding:0;margin:15px 0;font-size:1.4em}#mc_embed_signup input{border:1px solid #999;-webkit-appearance:none}#mc_embed_signup input[type=checkbox]{-webkit-appearance:checkbox}#mc_embed_signup input[type=radio]{-webkit-appearance:radio}#mc_embed_signup input:focus{border-color:#333}#mc_embed_signup .button{clear:both;background-color:#aaa;border:0 none;border-radius:4px;letter-spacing:.03em;color:#fff;cursor:pointer;display:inline-block;font-size:15px;height:32px;line-height:32px;margin:0 5px 10px 0;padding:0;text-align:center;text-decoration:none;vertical-align:top;white-space:nowrap;width:auto;transition:all .23s ease-in-out 0s}#mc_embed_signup .button:hover{background-color:#777}#mc_embed_signup .small-meta{font-size:11px}#mc_embed_signup .nowrap{white-space:nowrap}#mc_embed_signup .clear{clear:none;display:inline}#mc_embed_signup label{display:block;font-size:16px;padding-bottom:10px;font-weight:700}#mc_embed_signup input.email{font-family:Open Sans,Helvetica Neue,Arial,Helvetica,Verdana,sans-serif;font-size:15px;display:block;padding:0 .4em;margin:0 4% 10px 0;min-height:32px;width:58%;min-width:130px;border-radius:3px}#mc_embed_signup input.button{display:block;width:35%;margin:0 0 10px;min-width:90px}#mc_embed_signup div#mce-responses{float:left;top:-1.4em;padding:0 .5em;overflow:hidden;width:90%;margin:0 5%;clear:both}#mc_embed_signup div.response{margin:1em 0;padding:1em .5em .5em 0;font-weight:700;float:left;top:-1.5em;z-index:1;width:80%}#mc_embed_signup #mce-error-response{display:none}#mc_embed_signup #mce-success-response{color:#529214;display:none}#mc_embed_signup label.error{display:block;float:none;width:auto;margin-left:1.05em;text-align:left;padding:.5em 0}#mc-embedded-subscribe,#mce-EMAIL{margin:auto!important;display:block}#mce-EMAIL{max-width:350px;text-align:center}#mc-embedded-subscribe{margin-top:2%!important;background-color:#d8d8d8!important;padding-top:2px;line-height:2.4em;border:1px solid #888!important;font-size:1em;font-weight:400;line-height:2.5em;max-width:200px}#mc-embedded-subscribe:hover{background-color:#1eaedb!important;color:#fff!important} @charset "UTF-8";@font-face{font-family:fontello;src:url(font/fontello.eot?84475532);src:url(font/fontello.eot?84475532#iefix) format("embedded-opentype"),url(font/fontello.woff2?84475532) format("woff2"),url(font/fontello.woff?84475532) format("woff"),url(font/fontello.ttf?84475532) format("truetype"),url(font/fontello.svg?84475532#fontello) format("svg");font-weight:400;font-style:normal}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:fontello;src:url(../font/fontello.svg?84475532#fontello) format("svg")}}.parsley-errors-list{margin:0}.parsley-errors-list li{list-style-type:none;font-style:italic;color:#dc143c}.featherlight-close-icon{border:0;background:none;width:15px;font-size:20px;line-height:0;margin-top:0;margin:-5px -10px 0 0;background:none!important}.error,.parsley-error{border:1px solid #dc143c!important}#feedback{border-left:2px solid #006400;background:#cce0cc}#feedback,#feedback.incomplete{padding:1%;margin:-2% 0 1%;color:#222}#feedback.incomplete{border-left:2px solid #dc143c;background:#f8d0d8}.fl{display:none;max-width:100%}.fl img,.fl span{display:block;clear:both;margin:auto;text-align:center}.hidden,.hidden-phone{display:none}@media (min-width:768px){.hidden-phone{display:inline-block}}@media (min-width:768px){.hidden-tablet{display:none!important}}@media (min-width:1024px){.hidden-desktop{display:none!important}}.the-outer-limits{width:90%;max-width:1024px;display:block;margin:auto}.lightbox{cursor:pointer}.strikethrough{text-decoration:line-through}.video-container{position:relative;padding-bottom:56.25%;padding-top:35px;height:0;overflow:hidden}.video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.wide-stance{display:block;position:relative;margin:auto;float:none;max-width:100%}@media (min-width:1024px){.image-left p{width:80%}}.image-left img{display:block;margin:auto}@media (min-width:1024px){.image-left img{float:left}}@media (min-width:1024px){.image-right p{width:75%}}.image-right img{display:block;margin:auto}@media (min-width:1024px){.image-right img{float:right;margin:0 0 3% 3%}}.center{display:block;margin-left:auto;margin-right:auto;text-align:center}@media (min-width:1024px){.action-mobile{display:none}}.action-desktop{display:none}@media (min-width:1024px){.action-desktop{display:inline-block}}body,html{height:100%;margin:0;padding:0}body{font-family:Noto Sans,sans-serif;background:#f7f7f7;border-top:3px solid #222}a{text-decoration:none}a:hover{text-decoration:underline;color:#0fa0ce!important}h1,h2,h3,h4,h5{font-family:Sacramento,cursive}h1{font-size:1em}header{background:#fff;padding:1% 0 0}@media (min-width:1024px){header{padding:1% 0;height:75px}}header img{display:block;margin:0 auto}@media (min-width:1024px){header img{float:left}}nav{width:100%;display:block;clear:both;height:auto;margin:0;padding:0}@media (min-width:1024px){nav{float:right;margin:2% 2% 0 0;width:55%;text-align:right;clear:none;display:inline}}nav .active a{color:#1eaedb}@media (min-width:1024px){nav .active{border-bottom:1px solid #1eaedb}}nav a{font-size:2em;color:#222;display:block;text-align:center;width:100%;margin:0;padding:0}@media (min-width:1024px){nav a{font-size:1.4em}}nav a span{display:none}@media (min-width:1024px){nav a span{display:inline;min-width:100px}}nav a:hover{text-decoration:none}nav ul{display:inline-block;list-style-type:none;margin:0;padding:0;width:100%}@media (min-width:1024px){nav ul{right:0}}nav ul li{display:inline;list-style-type:none;float:left;width:20%;margin:0;padding:0}@media (min-width:1024px){nav ul li{width:auto;margin:0 2%}}nav ul li a{margin:0;padding:0}nav ul li:first-child a:before{content:""}nav ul li:nth-child(2) a:before{content:""}nav ul li:nth-child(3) a:before{content:""}nav ul li:nth-child(4) a:before{content:""}nav ul li:nth-child(5) a:before{content:""}nav ul li a:before{font-family:fontello}@media (min-width:1024px){nav ul li a:before{content:""!important}}.hero,.hero_contact{background-size:cover;background-repeat:no-repeat;background-position:50%;display:block;width:100%;min-height:150px;clear:both}@media (min-width:768px){.hero,.hero_contact{min-height:250px}}@media (min-width:1024px){.hero,.hero_contact{min-height:350px}}.hero_contact{background-position:100%}@media (min-width:1024px){.hero_contact{background-position:50%}}img{max-width:100%}section{display:block;clear:both;padding-top:2%}section h1{font-size:4rem}section ul{margin-left:3%}#map,section.highlight{background:#d8d8d8;padding:1% 0;border-top:1px solid #222;border-bottom:1px solid #222}#map h3,#map p,section.highlight h3,section.highlight p{text-align:center}#map,fieldset textarea{width:100%;height:200px}@media (min-width:768px){fieldset textarea{width:50%}}fieldset #g-recaptcha{width:302px}fieldset #submit{clear:both;display:block;margin-top:2%!important;background-color:#d8d8d8!important;transition:all .23s;color:#fff}fieldset #submit:hover{background-color:#1eaedb!important;color:#fff!important}aside.contact{background:#d8d8d8;border:1px solid #6a6a6a;padding:2%;text-align:center;margin:0 0 5% 5%!important;float:none;width:90%}@media (min-width:768px){aside.contact{float:right;width:25%;min-width:250px}}aside.contact h3{margin-bottom:0!important}aside.contact a{font-size:2em}aside.contact span{display:block;font-size:.7em;margin:2% auto}.button-links a{display:block;width:80%;text-align:center;padding:2% 0;border:1px solid #1eaedb;margin:5% auto}.button-links a:hover{background:#1eaedb;color:#fff!important;text-decoration:none}.logos img{margin:2% auto;display:block;vertical-align:middle}.shia{width:auto;background-repeat:no-repeat;width:160px;height:305px;margin:auto}.shia .play-button{margin:125px 0 0 50px;display:block;position:absolute}@media (min-width:1024px){.shia{float:right;margin:-220px 5% 0 0!important}}footer{width:100%;background:#222;color:#fff;padding-top:2%}.addthis_horizontal_follow_toolbox p,footer h4{margin:0 0 5%;padding:0;line-height:1.35}.addthis_horizontal_follow_toolbox{font-family:Sacramento,cursive;font-size:3rem;margin-bottom:7%}footer .head{display:block;margin:2% auto 0;width:100px}.copyright{clear:both;display:block;width:auto;margin:auto;text-align:center;padding-top:2%;font-size:.9em}@media (min-width:768px){.copyright{font-size:1em}}.copyright span{transform:scaleX(-1);display:inline-block}.copyright:after,.copyright:before{content:"";display:inline-block;vertical-align:top;width:5%;height:1px;background:#fafafa;opacity:.8;position:relative;top:.65em;margin:0 5%}@media (min-width:768px){.copyright:after,.copyright:before{width:20%}}.addthis-mobile-shim{display:block;width:100%;height:45px}@media (min-width:1024px){.addthis-mobile-shim{display:none;height:0}}.egg{display:block;width:50%;font-size:.5em;text-align:center;margin:1% auto!important}.play-button{height:40px;width:65px;background-color:hsla(0,0%,100%,.9);border-radius:5px;position:relative;cursor:pointer}.play-button:after{content:"";display:block;position:absolute;top:10.5px;left:24px;margin:0 auto;border-style:solid;border-width:9.5px 0 9.5px 17px;border-color:transparent transparent transparent rgba(0,173,239,.7)}.play-button:hover{background:#00adef}.play-button:hover:after{border-color:transparent transparent transparent #fff}.twitter-timeline{height:350px!important;display:block!important;margin:0 auto 2%!important} /*# sourceMappingURL=styles.css.map */ diff --git a/css/styles.css.map b/css/styles.css.map index f3c7827..2b90fa9 100644 --- a/css/styles.css.map +++ b/css/styles.css.map @@ -1 +1 @@ -{"version":3,"sources":["media.css","normalize.scss","normalize.css","skeleton.scss","featherlight.scss","mailchimp.scss","christopherl.scss"],"names":[],"mappings":"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","file":"styles.css","sourcesContent":[null,"/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Correct the line height in all browsers.\n * 3. Prevent adjustments of font size after orientation changes in\n * IE on Windows Phone and in iOS.\n */\n\n/* Document\n ========================================================================== */\n\nhtml {\n font-family: sans-serif; /* 1 */\n line-height: 1.15; /* 2 */\n -ms-text-size-adjust: 100%; /* 3 */\n -webkit-text-size-adjust: 100%; /* 3 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain { /* 1 */\n display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n background-color: transparent; /* 1 */\n -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n outline-width: 0;\n}\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n background-color: #ff0;\n color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: sans-serif; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n * controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Scripting\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n display: none;\n}\n\n/* Hidden\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n display: none;\n}\n","/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Correct the line height in all browsers.\n * 3. Prevent adjustments of font size after orientation changes in\n * IE on Windows Phone and in iOS.\n */\n/* Document\n ========================================================================== */\nhtml {\n font-family: sans-serif;\n /* 1 */\n line-height: 1.15;\n /* 2 */\n -ms-text-size-adjust: 100%;\n /* 3 */\n -webkit-text-size-adjust: 100%;\n /* 3 */ }\n\n/* Sections\n ========================================================================== */\n/**\n * Remove the margin in all browsers (opinionated).\n */\nbody {\n margin: 0; }\n\n/**\n * Add the correct display in IE 9-.\n */\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n display: block; }\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\n/* Grouping content\n ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\nfigcaption,\nfigure,\nmain {\n /* 1 */\n display: block; }\n\n/**\n * Add the correct margin in IE 8.\n */\nfigure {\n margin: 1em 40px; }\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\nhr {\n box-sizing: content-box;\n /* 1 */\n height: 0;\n /* 1 */\n overflow: visible;\n /* 2 */ }\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\npre {\n font-family: monospace, monospace;\n /* 1 */\n font-size: 1em;\n /* 2 */ }\n\n/* Text-level semantics\n ========================================================================== */\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\na {\n background-color: transparent;\n /* 1 */\n -webkit-text-decoration-skip: objects;\n /* 2 */ }\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\na:active,\na:hover {\n outline-width: 0; }\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\nabbr[title] {\n border-bottom: none;\n /* 1 */\n text-decoration: underline;\n /* 2 */\n text-decoration: underline dotted;\n /* 2 */ }\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\nb,\nstrong {\n font-weight: inherit; }\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\nb,\nstrong {\n font-weight: bolder; }\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n /* 1 */\n font-size: 1em;\n /* 2 */ }\n\n/**\n * Add the correct font style in Android 4.3-.\n */\ndfn {\n font-style: italic; }\n\n/**\n * Add the correct background and color in IE 9-.\n */\nmark {\n background-color: #ff0;\n color: #000; }\n\n/**\n * Add the correct font size in all browsers.\n */\nsmall {\n font-size: 80%; }\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsub {\n bottom: -0.25em; }\n\nsup {\n top: -0.5em; }\n\n/* Embedded content\n ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n */\naudio,\nvideo {\n display: inline-block; }\n\n/**\n * Add the correct display in iOS 4-7.\n */\naudio:not([controls]) {\n display: none;\n height: 0; }\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\nimg {\n border-style: none; }\n\n/**\n * Hide the overflow in IE.\n */\nsvg:not(:root) {\n overflow: hidden; }\n\n/* Forms\n ========================================================================== */\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: sans-serif;\n /* 1 */\n font-size: 100%;\n /* 1 */\n line-height: 1.15;\n /* 1 */\n margin: 0;\n /* 2 */ }\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\nbutton,\ninput {\n /* 1 */\n overflow: visible; }\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\nbutton,\nselect {\n /* 1 */\n text-transform: none; }\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n * controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n /* 2 */ }\n\n/**\n * Remove the inner border and padding in Firefox.\n */\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0; }\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText; }\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em; }\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\nlegend {\n box-sizing: border-box;\n /* 1 */\n color: inherit;\n /* 2 */\n display: table;\n /* 1 */\n max-width: 100%;\n /* 1 */\n padding: 0;\n /* 3 */\n white-space: normal;\n /* 1 */ }\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\nprogress {\n display: inline-block;\n /* 1 */\n vertical-align: baseline;\n /* 2 */ }\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\ntextarea {\n overflow: auto; }\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box;\n /* 1 */\n padding: 0;\n /* 2 */ }\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto; }\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n[type=\"search\"] {\n -webkit-appearance: textfield;\n /* 1 */\n outline-offset: -2px;\n /* 2 */ }\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none; }\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n::-webkit-file-upload-button {\n -webkit-appearance: button;\n /* 1 */\n font: inherit;\n /* 2 */ }\n\n/* Interactive\n ========================================================================== */\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\ndetails,\nmenu {\n display: block; }\n\n/*\n * Add the correct display in all browsers.\n */\nsummary {\n display: list-item; }\n\n/* Scripting\n ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n */\ncanvas {\n display: inline-block; }\n\n/**\n * Add the correct display in IE.\n */\ntemplate {\n display: none; }\n\n/* Hidden\n ========================================================================== */\n/**\n * Add the correct display in IE 10-.\n */\n[hidden] {\n display: none; }\n","/*\n* Skeleton V2.0.4\n* Copyright 2014, Dave Gamache\n* www.getskeleton.com\n* Free to use under the MIT license.\n* http://www.opensource.org/licenses/mit-license.php\n* 12/29/2014\n*/\n\n\n/* Table of contents\n––––––––––––––––––––––––––––––––––––––––––––––––––\n- Grid\n- Base Styles\n- Typography\n- Links\n- Buttons\n- Forms\n- Lists\n- Code\n- Tables\n- Spacing\n- Utilities\n- Clearing\n- Media Queries\n*/\n\n\n/* Grid\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n.container {\n position: relative;\n width: 100%;\n max-width: 960px;\n margin: 0 auto;\n padding: 0 20px;\n box-sizing: border-box; }\n.column,\n.columns {\n width: 100%;\n float: left;\n box-sizing: border-box; }\n\n/* For devices larger than 400px */\n@media (min-width: 400px) {\n .container {\n width: 85%;\n padding: 0; }\n}\n\n/* For devices larger than 550px */\n@media (min-width: 550px) {\n .container {\n width: 80%; }\n .column,\n .columns {\n margin-left: 4%; }\n .column:first-child,\n .columns:first-child {\n margin-left: 0; }\n\n .one.column,\n .one.columns { width: 4.66666666667%; }\n .two.columns { width: 13.3333333333%; }\n .three.columns { width: 22%; }\n .four.columns { width: 30.6666666667%; }\n .five.columns { width: 39.3333333333%; }\n .six.columns { width: 48%; }\n .seven.columns { width: 56.6666666667%; }\n .eight.columns { width: 65.3333333333%; }\n .nine.columns { width: 74.0%; }\n .ten.columns { width: 82.6666666667%; }\n .eleven.columns { width: 91.3333333333%; }\n .twelve.columns { width: 100%; margin-left: 0; }\n\n .one-third.column { width: 30.6666666667%; }\n .two-thirds.column { width: 65.3333333333%; }\n\n .one-half.column { width: 48%; }\n\n /* Offsets */\n .offset-by-one.column,\n .offset-by-one.columns { margin-left: 8.66666666667%; }\n .offset-by-two.column,\n .offset-by-two.columns { margin-left: 17.3333333333%; }\n .offset-by-three.column,\n .offset-by-three.columns { margin-left: 26%; }\n .offset-by-four.column,\n .offset-by-four.columns { margin-left: 34.6666666667%; }\n .offset-by-five.column,\n .offset-by-five.columns { margin-left: 43.3333333333%; }\n .offset-by-six.column,\n .offset-by-six.columns { margin-left: 52%; }\n .offset-by-seven.column,\n .offset-by-seven.columns { margin-left: 60.6666666667%; }\n .offset-by-eight.column,\n .offset-by-eight.columns { margin-left: 69.3333333333%; }\n .offset-by-nine.column,\n .offset-by-nine.columns { margin-left: 78.0%; }\n .offset-by-ten.column,\n .offset-by-ten.columns { margin-left: 86.6666666667%; }\n .offset-by-eleven.column,\n .offset-by-eleven.columns { margin-left: 95.3333333333%; }\n\n .offset-by-one-third.column,\n .offset-by-one-third.columns { margin-left: 34.6666666667%; }\n .offset-by-two-thirds.column,\n .offset-by-two-thirds.columns { margin-left: 69.3333333333%; }\n\n .offset-by-one-half.column,\n .offset-by-one-half.columns { margin-left: 52%; }\n\n}\n\n\n/* Base Styles\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n/* NOTE\nhtml is set to 62.5% so that all the REM measurements throughout Skeleton\nare based on 10px sizing. So basically 1.5rem = 15px :) */\nhtml {\n font-size: 62.5%; }\nbody {\n font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */\n line-height: 1.6;\n font-weight: 400;\n font-family: \"Raleway\", \"HelveticaNeue\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: #222; }\n\n\n/* Typography\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 2rem;\n font-weight: 300; }\nh1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;}\nh2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }\nh3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; }\nh4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }\nh5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; }\nh6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; }\n\n/* Larger than phablet */\n@media (min-width: 550px) {\n h1 { font-size: 5.0rem; }\n h2 { font-size: 4.2rem; }\n h3 { font-size: 3.6rem; }\n h4 { font-size: 3.0rem; }\n h5 { font-size: 2.4rem; }\n h6 { font-size: 1.5rem; }\n}\n\np {\n margin-top: 0; }\n\n\n/* Links\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\na {\n color: #1EAEDB; }\na:hover {\n color: #0FA0CE; }\n\n\n/* Buttons\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n.button,\nbutton,\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n display: inline-block;\n height: 38px;\n padding: 0 30px;\n color: #555;\n text-align: center;\n font-size: 11px;\n font-weight: 600;\n line-height: 38px;\n letter-spacing: .1rem;\n text-transform: uppercase;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border-radius: 4px;\n border: 1px solid #bbb;\n cursor: pointer;\n box-sizing: border-box; }\n.button:hover,\nbutton:hover,\ninput[type=\"submit\"]:hover,\ninput[type=\"reset\"]:hover,\ninput[type=\"button\"]:hover,\n.button:focus,\nbutton:focus,\ninput[type=\"submit\"]:focus,\ninput[type=\"reset\"]:focus,\ninput[type=\"button\"]:focus {\n color: #333;\n border-color: #888;\n outline: 0; }\n.button.button-primary,\nbutton.button-primary,\ninput[type=\"submit\"].button-primary,\ninput[type=\"reset\"].button-primary,\ninput[type=\"button\"].button-primary {\n color: #FFF;\n background-color: #33C3F0;\n border-color: #33C3F0; }\n.button.button-primary:hover,\nbutton.button-primary:hover,\ninput[type=\"submit\"].button-primary:hover,\ninput[type=\"reset\"].button-primary:hover,\ninput[type=\"button\"].button-primary:hover,\n.button.button-primary:focus,\nbutton.button-primary:focus,\ninput[type=\"submit\"].button-primary:focus,\ninput[type=\"reset\"].button-primary:focus,\ninput[type=\"button\"].button-primary:focus {\n color: #FFF;\n background-color: #1EAEDB;\n border-color: #1EAEDB; }\n\n\n/* Forms\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\ninput[type=\"email\"],\ninput[type=\"number\"],\ninput[type=\"search\"],\ninput[type=\"text\"],\ninput[type=\"tel\"],\ninput[type=\"url\"],\ninput[type=\"password\"],\ntextarea,\nselect {\n height: 38px;\n padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */\n background-color: #fff;\n border: 1px solid #D1D1D1;\n border-radius: 4px;\n box-shadow: none;\n box-sizing: border-box; }\n/* Removes awkward default styles on some inputs for iOS */\ninput[type=\"email\"],\ninput[type=\"number\"],\ninput[type=\"search\"],\ninput[type=\"text\"],\ninput[type=\"tel\"],\ninput[type=\"url\"],\ninput[type=\"password\"],\ntextarea {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none; }\ntextarea {\n min-height: 65px;\n padding-top: 6px;\n padding-bottom: 6px; }\ninput[type=\"email\"]:focus,\ninput[type=\"number\"]:focus,\ninput[type=\"search\"]:focus,\ninput[type=\"text\"]:focus,\ninput[type=\"tel\"]:focus,\ninput[type=\"url\"]:focus,\ninput[type=\"password\"]:focus,\ntextarea:focus,\nselect:focus {\n border: 1px solid #33C3F0;\n outline: 0; }\nlabel,\nlegend {\n display: block;\n margin-bottom: .5rem;\n font-weight: 600; }\nfieldset {\n padding: 0;\n border-width: 0; }\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n display: inline; }\nlabel > .label-body {\n display: inline-block;\n margin-left: .5rem;\n font-weight: normal; }\n\n\n/* Lists\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nul {\n list-style: circle inside; }\nol {\n list-style: decimal inside; }\nol, ul {\n padding-left: 0;\n margin-top: 0; }\nul ul,\nul ol,\nol ol,\nol ul {\n margin: 1.5rem 0 1.5rem 3rem;\n font-size: 90%; }\nli {\n margin-bottom: 1rem; }\n\n\n/* Code\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\ncode {\n padding: .2rem .5rem;\n margin: 0 .2rem;\n font-size: 90%;\n white-space: nowrap;\n background: #F1F1F1;\n border: 1px solid #E1E1E1;\n border-radius: 4px; }\npre > code {\n display: block;\n padding: 1rem 1.5rem;\n white-space: pre; }\n\n\n/* Tables\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nth,\ntd {\n padding: 12px 15px;\n text-align: left;\n border-bottom: 1px solid #E1E1E1; }\nth:first-child,\ntd:first-child {\n padding-left: 0; }\nth:last-child,\ntd:last-child {\n padding-right: 0; }\n\n\n/* Spacing\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nbutton,\n.button {\n margin-bottom: 1rem; }\ninput,\ntextarea,\nselect,\nfieldset {\n margin-bottom: 1.5rem; }\npre,\nblockquote,\ndl,\nfigure,\ntable,\np,\nul,\nol,\nform {\n margin-bottom: 2.5rem; }\n\n\n/* Utilities\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n.u-full-width {\n width: 100%;\n box-sizing: border-box; }\n.u-max-full-width {\n max-width: 100%;\n box-sizing: border-box; }\n.u-pull-right {\n float: right; }\n.u-pull-left {\n float: left; }\n\n\n/* Misc\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nhr {\n margin-top: 3rem;\n margin-bottom: 3.5rem;\n border-width: 0;\n border-top: 1px solid #E1E1E1; }\n\n\n/* Clearing\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n\n/* Self Clearing Goodness */\n.container:after,\n.row:after,\n.u-cf {\n content: \"\";\n display: table;\n clear: both; }\n\n\n/* Media Queries\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n/*\nNote: The best way to structure the use of media queries is to create the queries\nnear the relevant code. For example, if you wanted to change the styles for buttons\non small devices, paste the mobile query code up in the buttons section and style it\nthere.\n*/\n\n\n/* Larger than mobile */\n@media (min-width: 400px) {}\n\n/* Larger than phablet (also point when grid becomes active) */\n@media (min-width: 550px) {}\n\n/* Larger than tablet */\n@media (min-width: 750px) {}\n\n/* Larger than desktop */\n@media (min-width: 1000px) {}\n\n/* Larger than Desktop HD */\n@media (min-width: 1200px) {}\n","/**\n * Featherlight – ultra slim jQuery lightbox\n * Version 1.5.0 - http://noelboss.github.io/featherlight/\n *\n * Copyright 2016, Noël Raoul Bossart (http://www.noelboss.com)\n * MIT Licensed.\n**/\n\n@media all {\n .featherlight {\n display: none;\n\n /* dimensions: spanning the background from edge to edge */\n position:fixed;\n top: 0; right: 0; bottom: 0; left: 0;\n z-index: 2147483647; /* z-index needs to be >= elements on the site. */\n\n /* position: centering content */\n text-align: center;\n\n /* insures that the ::before pseudo element doesn't force wrap with fixed width content; */\n white-space: nowrap;\n\n /* styling */\n cursor: pointer;\n background: #333;\n /* IE8 \"hack\" for nested featherlights */\n background: rgba(0, 0, 0, 0);\n }\n\n /* support for nested featherlights. Does not work in IE8 (use JS to fix) */\n .featherlight:last-of-type {\n background: rgba(0, 0, 0, 0.8);\n }\n\n .featherlight:before {\n /* position: trick to center content vertically */\n content: '';\n display: inline-block;\n height: 100%;\n vertical-align: middle;\n margin-right: -0.25em;\n }\n\n .featherlight .featherlight-content {\n /* make content container for positioned elements (close button) */\n position: relative;\n\n /* position: centering vertical and horizontal */\n text-align: left;\n vertical-align: middle;\n display: inline-block;\n\n /* dimensions: cut off images */\n overflow: auto;\n padding: 25px 25px 0;\n border-bottom: 25px solid transparent;\n\n /* dimensions: handling large content */\n margin-left: 5%;\n margin-right: 5%;\n max-height: 95%;\n\n /* styling */\n background: #fff;\n cursor: auto;\n\n /* reset white-space wrapping */\n white-space: normal;\n }\n\n /* contains the content */\n .featherlight .featherlight-inner {\n /* make sure its visible */\n display: block;\n }\n\n .featherlight .featherlight-close-icon {\n /* position: centering vertical and horizontal */\n position: absolute;\n z-index: 9999;\n top: 0;\n right: 0;\n\n /* dimensions: 25px x 25px */\n line-height: 25px;\n width: 25px;\n\n /* styling */\n cursor: pointer;\n text-align: center;\n font-family: Arial, sans-serif;\n background: #fff; /* Set the background in case it overlaps the content */\n background: rgba(255, 255, 255, 0.3);\n color: #000;\n }\n\n\n .featherlight .featherlight-image {\n /* styling */\n width: 100%;\n }\n\n\n .featherlight-iframe .featherlight-content {\n /* removed the border for image croping since iframe is edge to edge */\n border-bottom: 0;\n padding: 0;\n }\n\n .featherlight iframe {\n /* styling */\n border: none;\n }\n\n .featherlight * { /* See https://github.com/noelboss/featherlight/issues/42 */\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n }\n}\n\n/* handling phones and small screens */\n@media only screen and (max-width: 1024px) {\n .featherlight .featherlight-content {\n /* dimensions: maximize lightbox with for small screens */\n margin-left: 10px;\n margin-right: 10px;\n max-height: 98%;\n\n padding: 10px 10px 0;\n border-bottom: 10px solid transparent;\n }\n}\n","/**\n * MailChimp Form Embed Code - Slim - 12/15/2015 v10.7\n * Default Styles, taken from //cdn-images.mailchimp.com/embedcode/slim-10_7.css\n*/\n\n#mc_embed_signup form {display:block; position:relative; text-align:left; padding:10px 0 10px 3%}\n#mc_embed_signup h2 {font-weight:bold; padding:0; margin:15px 0; font-size:1.4em;}\n#mc_embed_signup input {border:1px solid #999; -webkit-appearance:none;}\n#mc_embed_signup input[type=checkbox]{-webkit-appearance:checkbox;}\n#mc_embed_signup input[type=radio]{-webkit-appearance:radio;}\n#mc_embed_signup input:focus {border-color:#333;}\n#mc_embed_signup .button {clear:both; background-color: #aaa; border: 0 none; border-radius:4px; letter-spacing:.03em; color: #FFFFFF; cursor: pointer; display: inline-block; font-size:15px; height: 32px; line-height: 32px; margin: 0 5px 10px 0; padding:0; text-align: center; text-decoration: none; vertical-align: top; white-space: nowrap; width: auto; transition: all 0.23s ease-in-out 0s;}\n#mc_embed_signup .button:hover {background-color:#777;}\n#mc_embed_signup .small-meta {font-size: 11px;}\n#mc_embed_signup .nowrap {white-space:nowrap;}\n#mc_embed_signup .clear {clear:none; display:inline;}\n#mc_embed_signup label {display:block; font-size:16px; padding-bottom:10px; font-weight:bold;}\n#mc_embed_signup input.email {font-family:\"Open Sans\",\"Helvetica Neue\",Arial,Helvetica,Verdana,sans-serif; font-size: 15px; display:block; padding:0 0.4em; margin:0 4% 10px 0; min-height:32px; width:58%; min-width:130px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;}\n#mc_embed_signup input.button {display:block; width:35%; margin:0 0 10px 0; min-width:90px;}\n#mc_embed_signup div#mce-responses {float:left; top:-1.4em; padding:0em .5em 0em .5em; overflow:hidden; width:90%;margin: 0 5%; clear: both;}\n#mc_embed_signup div.response {margin:1em 0; padding:1em .5em .5em 0; font-weight:bold; float:left; top:-1.5em; z-index:1; width:80%;}\n#mc_embed_signup #mce-error-response {display:none;}\n#mc_embed_signup #mce-success-response {color:#529214; display:none;}\n#mc_embed_signup label.error {display:block; float:none; width:auto; margin-left:1.05em; text-align:left; padding:.5em 0;}\n\n\n/* ChristopherL Customizations */\n#mce-EMAIL,\n#mc-embedded-subscribe {\n margin: auto !important;\n display: block;\n}\n#mce-EMAIL {\n max-width: 350px;\n text-align: center;\n}\n#mc-embedded-subscribe {\n margin-top: 2% !important;\n background-color: #D8D8D8 !important;\n padding-top: 2px;\n line-height: 2.4em;\n border: solid 1px #888888 !important;\n font-size: 1em;\n font-weight: 400;\n line-height: 2.5em;\n max-width: 200px;\n\n &:hover {\n background-color: #1EAEDB !important;\n color: #FFFFFF !important;\n }\n}\n","/**\n * Base Sass Stylesheet - Makes things purdy.\n *\n * @package ChristopherL.com\n * @copyright 2016-2017 ChristopherL (https://github.com/chrislarrycarl)\n * @license http://www.gnu.org/licenses/gpl-2.0.html\n */\n\n@font-face {\n font-family: 'fontello';\n src: url('font/fontello.eot?84475532');\n src: url('font/fontello.eot?84475532#iefix') format('embedded-opentype'),\n url('font/fontello.woff2?84475532') format('woff2'),\n url('font/fontello.woff?84475532') format('woff'),\n url('font/fontello.ttf?84475532') format('truetype'),\n url('font/fontello.svg?84475532#fontello') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */\n/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n @font-face {\n font-family: 'fontello';\n src: url('../font/fontello.svg?84475532#fontello') format('svg');\n }\n}\n\n// Icons\n$home_icon: '\\e800';\n$development_icon: '\\e801';\n$marketing_icon: '\\e802';\n$about_icon: '\\e803';\n$contact_icon: '\\e804';\n\n// Typography\n// Note: These are Google fonts, their stylesheet is included in of /include/templates/base.tpl\n$primary_font: 'Noto Sans', sans-serif;\n$header_font: 'Sacramento', cursive;\n$icon_font: 'fontello';\n\n// Constraints\n$maximum_content_width: 1024px;\n\n// Media Query Mixins\n@mixin tablet {\n @media (min-width: 768px) {\n @content;\n }\n}\n@mixin desktop {\n @media (min-width: 1024px) {\n @content;\n }\n}\n\n// Parsley Feedback Styles\n.parsley-errors-list {\n margin: 0;\n\n li {\n list-style-type: none;\n font-style: italic;\n color: #DC143C;\n }\n}\n\n// Featherlight lightbox Styles\n.featherlight-close-icon {\n border: 0;\n background: none;\n width: 15px;\n font-size: 20px;\n line-height: 0px;\n margin-top: 0;\n margin: -5px -10px 0 0;\n background: none !important;\n}\n\n// Utility Styles\n.parsley-error,\n.error {\n border: solid 1px #DC143C !important;\n}\n#feedback {\n border-left: solid 2px #006400;\n padding: 1%;\n margin: -2% 0 1% 0;\n background: #cce0cc;\n color: #222222;\n\n &.incomplete {\n border-left: solid 2px #DC143C;\n padding: 1%;\n margin: -2% 0 1% 0;\n background: #f8d0d8;\n color: #222222;\n }\n}\n.fl {\n display: none;\n max-width: 100%;\n}\n.fl img,\n.fl span {\n display: block;\n clear: both;\n margin: auto;\n text-align: center;\n}\n.hidden {\n display: none;\n}\n.hidden-phone {\n display: none;\n\n @include tablet {\n display: inline-block;\n }\n}\n.hidden-tablet {\n @include tablet {\n display: none !important;\n }\n}\n.hidden-desktop {\n @include desktop {\n display: none !important;\n }\n}\n.the-outer-limits {\n width: 90%;\n max-width: $maximum_content_width;\n display: block;\n margin: auto;\n}\n.lightbox {\n cursor: pointer;\n}\n.strikethrough {\n text-decoration: line-through;\n}\n.video-container {\n position: relative;\n padding-bottom: 56.25%;\n padding-top: 35px;\n height: 0;\n overflow: hidden;\n\n iframe {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n.wide-stance {\n display: block;\n position: relative;\n margin: auto;\n float: none;\n max-width: 100%;\n}\n.image-left {\n p {\n @include desktop {\n width: 80%;\n }\n }\n img {\n display: block;\n margin: auto;\n\n @include desktop {\n float: left;\n }\n }\n}\n.image-right {\n p {\n @include desktop {\n width: 75%;\n }\n }\n img {\n display: block;\n margin: auto;\n\n @include desktop {\n float: right;\n margin: 0 0 3% 3%;\n }\n }\n}\n.center {\n display: block;\n margin-left: auto;\n margin-right: auto;\n text-align: center;\n}\n.action-mobile {\n @include desktop {\n display: none;\n }\n}\n.action-desktop {\n display: none;\n\n @include desktop {\n display: inline-block;\n }\n}\n\n// Styles\nhtml,\nbody {\n height: 100%;\n margin: 0;\n padding: 0;\n}\nbody {\n font-family: $primary_font;\n background: #F7F7F7;\n border-top: solid 3px #222222;\n}\na {\n text-decoration: none;\n}\na:active {\n}\na:visited {\n}\na:hover {\n text-decoration: underline;\n color: #0FA0CE !important;\n}\nh1,\nh2,\nh3,\nh4,\nh5 {\n font-family: $header_font;\n}\nh1 {\n font-size: 1em;\n}\nheader {\n background: #FFFFFF;\n padding: 1% 0 0 0;\n\n @include desktop {\n padding: 1% 0 1% 0;\n height: 75px;\n }\n\n img {\n display: block;\n margin: 0 auto 0 auto;\n\n @include desktop {\n float: left;\n }\n }\n}\nnav {\n width: 100%;\n display: block;\n clear: both;\n height: auto;\n margin: 0;\n padding: 0;\n\n @include desktop {\n float: right;\n margin: 2% 2% 0 0;\n width: 55%;\n text-align: right;\n clear: none;\n display: inline;\n }\n\n .active {\n a {\n color: #1EAEDB;\n }\n\n @include desktop {\n border-bottom: solid 1px #1EAEDB;\n }\n }\n a {\n font-size: 2em;\n color: #222222;\n display: block;\n text-align: center;\n width: 100%;\n margin: 0;\n padding: 0;\n\n @include desktop {\n font-size: 1.4em;\n }\n span {\n display: none;\n\n @include desktop {\n display: inline;\n min-width: 100px;\n }\n }\n }\n a:hover {\n text-decoration: none;\n }\n ul {\n display: inline-block;\n list-style-type: none;\n margin: 0;\n padding: 0;\n width: 100%;\n\n @include desktop {\n right: 0;\n }\n\n li {\n display: inline;\n list-style-type: none;\n float: left;\n width: 20%;\n margin: 0;\n padding: 0;\n\n @include desktop {\n width: auto;\n margin: 0 2% 0 2%;\n }\n\n a {\n margin: 0;\n padding: 0;\n }\n }\n li:first-child a:before {\n content: $home_icon;\n }\n li:nth-child(2) a:before {\n content: $development_icon;\n }\n li:nth-child(3) a:before {\n content: $marketing_icon;\n }\n li:nth-child(4) a:before {\n content: $about_icon;\n }\n li:nth-child(5) a:before {\n content: $contact_icon;\n }\n li a:before {\n font-family: $icon_font;\n\n @include desktop {\n content: '' !important;\n }\n }\n }\n}\n.hero {\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n display: block;\n width: 100%;\n min-height: 150px;\n clear: both;\n\n @include tablet {\n min-height: 250px;\n }\n\n @include desktop {\n min-height: 350px;\n }\n}\n.hero_contact {\n @extend .hero;\n background-position: right center;\n\n @include desktop {\n background-position: center center;\n }\n}\nimg {\n max-width: 100%;\n}\nsection {\n display: block;\n clear: both;\n padding-top: 2%;\n\n h1 {\n font-size: 4rem;\n }\n ul {\n margin-left: 3%;\n }\n}\nsection.highlight,\n#map {\n background: #D8D8D8;\n padding: 1% 0;\n border-top: solid 1px #222222;\n border-bottom: solid 1px #222222;\n\n h3,\n p {\n text-align: center;\n }\n}\n#map {\n width: 100%;\n height: 200px;\n}\nfieldset {\n textarea {\n width: 100%;\n height: 200px;\n\n @include tablet {\n width: 50%;\n }\n\n }\n #g-recaptcha {\n width: 302px;\n }\n #submit {\n clear: both;\n display: block;\n margin-top: 2% !important;\n background-color: #D8D8D8 !important;\n transition: all 0.23s;\n color: #FFFFFF;\n\n &:hover {\n background-color: #1EAEDB !important;\n color: #FFFFFF !important;\n }\n }\n}\naside.contact {\n background: #D8D8D8;\n border: solid 1px #6A6A6A;\n padding: 2%;\n text-align: center;\n margin: 0 0 5% 5% !important;\n float: none;\n width: 90%;\n\n @include tablet {\n float: right;\n width: 25%;\n min-width: 250px;\n }\n\n h3 {\n margin-bottom: 0 !important;\n }\n a {\n font-size: 2em;\n }\n span {\n display: block;\n font-size: 0.7em;\n margin: 2% auto;\n }\n}\n.button-links a {\n display: block;\n width: 80%;\n text-align: center;\n padding: 2% 0px;\n border: 1px solid #1EAEDB;\n margin: 5% auto;\n\n &:hover {\n background: #1EAEDB;\n color: #FFFFFF !important;\n text-decoration: none;\n }\n}\n.logos img {\n margin: 2% auto;\n display: block;\n vertical-align: middle;\n}\n.shia {\n width: auto;\n background-repeat: no-repeat;\n width: 160px;\n height: 305px;\n margin: auto;\n\n .play-button {\n margin: 125px 0 0 50px;\n display: block;\n position: absolute;\n }\n\n @include desktop {\n float: right;\n margin: -220px 5% 0 0 !important;\n }\n}\nfooter {\n width: 100%;\n background: #222222;\n color: #FFFFFF;\n padding-top: 2%;\n}\nfooter h4,\n.addthis_horizontal_follow_toolbox p {\n margin: 0 0 5% 0;\n padding: 0;\n line-height: 1.35;\n}\n.addthis_horizontal_follow_toolbox {\n font-family: $header_font;\n font-size: 3.0rem;\n margin-bottom: 7%;\n}\nfooter .head {\n display: block;\n margin: 2% auto 0 auto;\n width: 100px;\n}\n.copyright {\n clear: both;\n display: block;\n width: auto;\n margin: auto;\n text-align: center;\n padding-top: 2%;\n font-size: 0.9em;\n\n @include tablet {\n font-size: 1em;\n }\n}\n.copyright span {\n -moz-transform: scaleX(-1);\n -o-transform: scaleX(-1);\n -webkit-transform: scaleX(-1);\n transform: scaleX(-1);\n display: inline-block;\n}\n.copyright:before,\n.copyright:after {\n content: '';\n display: inline-block;\n vertical-align: top;\n width: 5%;\n height: 1px;\n background: #FAFAFA;\n opacity: .8;\n position: relative;\n top: .65em;\n margin: 0 5%;\n\n @include tablet {\n width: 20%;\n }\n}\n.addthis-mobile-shim {\n display: block;\n width: 100%;\n height: 45px;\n\n @include desktop {\n display: none;\n height: 0;\n }\n}\n.egg {\n display: block;\n width: 50%;\n font-size: 0.5em;\n text-align: center;\n margin: 1% auto !important;\n}\n.play-button {\n height: 40px;\n width: 65px;\n background-color: rgba(255, 255, 255, 0.9);\n border-radius: 5px;\n position: relative;\n cursor: pointer;\n\n &:after {\n content: \"\";\n display: block;\n position: absolute;\n top: 10.5px;\n left: 24px;\n margin: 0 auto;\n border-style: solid;\n border-width: 9.5px 0 9.5px 17px;\n border-color: transparent transparent transparent rgba(0, 173, 239, 0.7);\n }\n\n &:hover {\n background: rgba(0, 173, 239, 1);\n\n &:after {\n border-color: transparent transparent transparent rgba(255, 255, 255, 1);\n }\n }\n}\n\n// Integrations/Widgets\n\n.twitter-timeline {\n height: 350px !important;\n display: block !important;\n margin: 0 auto 2% auto !important;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["media.css","normalize.scss","normalize.css","skeleton.scss","featherlight.scss","mailchimp.scss","christopherl.scss"],"names":[],"mappings":"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","file":"styles.css","sourcesContent":[null,"/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Correct the line height in all browsers.\n * 3. Prevent adjustments of font size after orientation changes in\n * IE on Windows Phone and in iOS.\n */\n\n/* Document\n ========================================================================== */\n\nhtml {\n font-family: sans-serif; /* 1 */\n line-height: 1.15; /* 2 */\n -ms-text-size-adjust: 100%; /* 3 */\n -webkit-text-size-adjust: 100%; /* 3 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain { /* 1 */\n display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n background-color: transparent; /* 1 */\n -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n outline-width: 0;\n}\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n background-color: #ff0;\n color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: sans-serif; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n * controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Scripting\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n display: none;\n}\n\n/* Hidden\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n display: none;\n}\n","/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Correct the line height in all browsers.\n * 3. Prevent adjustments of font size after orientation changes in\n * IE on Windows Phone and in iOS.\n */\n/* Document\n ========================================================================== */\nhtml {\n font-family: sans-serif;\n /* 1 */\n line-height: 1.15;\n /* 2 */\n -ms-text-size-adjust: 100%;\n /* 3 */\n -webkit-text-size-adjust: 100%;\n /* 3 */ }\n\n/* Sections\n ========================================================================== */\n/**\n * Remove the margin in all browsers (opinionated).\n */\nbody {\n margin: 0; }\n\n/**\n * Add the correct display in IE 9-.\n */\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n display: block; }\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\n/* Grouping content\n ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\nfigcaption,\nfigure,\nmain {\n /* 1 */\n display: block; }\n\n/**\n * Add the correct margin in IE 8.\n */\nfigure {\n margin: 1em 40px; }\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\nhr {\n box-sizing: content-box;\n /* 1 */\n height: 0;\n /* 1 */\n overflow: visible;\n /* 2 */ }\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\npre {\n font-family: monospace, monospace;\n /* 1 */\n font-size: 1em;\n /* 2 */ }\n\n/* Text-level semantics\n ========================================================================== */\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\na {\n background-color: transparent;\n /* 1 */\n -webkit-text-decoration-skip: objects;\n /* 2 */ }\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\na:active,\na:hover {\n outline-width: 0; }\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\nabbr[title] {\n border-bottom: none;\n /* 1 */\n text-decoration: underline;\n /* 2 */\n text-decoration: underline dotted;\n /* 2 */ }\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\nb,\nstrong {\n font-weight: inherit; }\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\nb,\nstrong {\n font-weight: bolder; }\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n /* 1 */\n font-size: 1em;\n /* 2 */ }\n\n/**\n * Add the correct font style in Android 4.3-.\n */\ndfn {\n font-style: italic; }\n\n/**\n * Add the correct background and color in IE 9-.\n */\nmark {\n background-color: #ff0;\n color: #000; }\n\n/**\n * Add the correct font size in all browsers.\n */\nsmall {\n font-size: 80%; }\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsub {\n bottom: -0.25em; }\n\nsup {\n top: -0.5em; }\n\n/* Embedded content\n ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n */\naudio,\nvideo {\n display: inline-block; }\n\n/**\n * Add the correct display in iOS 4-7.\n */\naudio:not([controls]) {\n display: none;\n height: 0; }\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\nimg {\n border-style: none; }\n\n/**\n * Hide the overflow in IE.\n */\nsvg:not(:root) {\n overflow: hidden; }\n\n/* Forms\n ========================================================================== */\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: sans-serif;\n /* 1 */\n font-size: 100%;\n /* 1 */\n line-height: 1.15;\n /* 1 */\n margin: 0;\n /* 2 */ }\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\nbutton,\ninput {\n /* 1 */\n overflow: visible; }\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\nbutton,\nselect {\n /* 1 */\n text-transform: none; }\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n * controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n /* 2 */ }\n\n/**\n * Remove the inner border and padding in Firefox.\n */\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0; }\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText; }\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em; }\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\nlegend {\n box-sizing: border-box;\n /* 1 */\n color: inherit;\n /* 2 */\n display: table;\n /* 1 */\n max-width: 100%;\n /* 1 */\n padding: 0;\n /* 3 */\n white-space: normal;\n /* 1 */ }\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\nprogress {\n display: inline-block;\n /* 1 */\n vertical-align: baseline;\n /* 2 */ }\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\ntextarea {\n overflow: auto; }\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box;\n /* 1 */\n padding: 0;\n /* 2 */ }\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto; }\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n[type=\"search\"] {\n -webkit-appearance: textfield;\n /* 1 */\n outline-offset: -2px;\n /* 2 */ }\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none; }\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n::-webkit-file-upload-button {\n -webkit-appearance: button;\n /* 1 */\n font: inherit;\n /* 2 */ }\n\n/* Interactive\n ========================================================================== */\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\ndetails,\nmenu {\n display: block; }\n\n/*\n * Add the correct display in all browsers.\n */\nsummary {\n display: list-item; }\n\n/* Scripting\n ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n */\ncanvas {\n display: inline-block; }\n\n/**\n * Add the correct display in IE.\n */\ntemplate {\n display: none; }\n\n/* Hidden\n ========================================================================== */\n/**\n * Add the correct display in IE 10-.\n */\n[hidden] {\n display: none; }\n","/*\n* Skeleton V2.0.4\n* Copyright 2014, Dave Gamache\n* www.getskeleton.com\n* Free to use under the MIT license.\n* http://www.opensource.org/licenses/mit-license.php\n* 12/29/2014\n*/\n\n\n/* Table of contents\n––––––––––––––––––––––––––––––––––––––––––––––––––\n- Grid\n- Base Styles\n- Typography\n- Links\n- Buttons\n- Forms\n- Lists\n- Code\n- Tables\n- Spacing\n- Utilities\n- Clearing\n- Media Queries\n*/\n\n\n/* Grid\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n.container {\n position: relative;\n width: 100%;\n max-width: 960px;\n margin: 0 auto;\n padding: 0 20px;\n box-sizing: border-box; }\n.column,\n.columns {\n width: 100%;\n float: left;\n box-sizing: border-box; }\n\n/* For devices larger than 400px */\n@media (min-width: 400px) {\n .container {\n width: 85%;\n padding: 0; }\n}\n\n/* For devices larger than 550px */\n@media (min-width: 550px) {\n .container {\n width: 80%; }\n .column,\n .columns {\n margin-left: 4%; }\n .column:first-child,\n .columns:first-child {\n margin-left: 0; }\n\n .one.column,\n .one.columns { width: 4.66666666667%; }\n .two.columns { width: 13.3333333333%; }\n .three.columns { width: 22%; }\n .four.columns { width: 30.6666666667%; }\n .five.columns { width: 39.3333333333%; }\n .six.columns { width: 48%; }\n .seven.columns { width: 56.6666666667%; }\n .eight.columns { width: 65.3333333333%; }\n .nine.columns { width: 74.0%; }\n .ten.columns { width: 82.6666666667%; }\n .eleven.columns { width: 91.3333333333%; }\n .twelve.columns { width: 100%; margin-left: 0; }\n\n .one-third.column { width: 30.6666666667%; }\n .two-thirds.column { width: 65.3333333333%; }\n\n .one-half.column { width: 48%; }\n\n /* Offsets */\n .offset-by-one.column,\n .offset-by-one.columns { margin-left: 8.66666666667%; }\n .offset-by-two.column,\n .offset-by-two.columns { margin-left: 17.3333333333%; }\n .offset-by-three.column,\n .offset-by-three.columns { margin-left: 26%; }\n .offset-by-four.column,\n .offset-by-four.columns { margin-left: 34.6666666667%; }\n .offset-by-five.column,\n .offset-by-five.columns { margin-left: 43.3333333333%; }\n .offset-by-six.column,\n .offset-by-six.columns { margin-left: 52%; }\n .offset-by-seven.column,\n .offset-by-seven.columns { margin-left: 60.6666666667%; }\n .offset-by-eight.column,\n .offset-by-eight.columns { margin-left: 69.3333333333%; }\n .offset-by-nine.column,\n .offset-by-nine.columns { margin-left: 78.0%; }\n .offset-by-ten.column,\n .offset-by-ten.columns { margin-left: 86.6666666667%; }\n .offset-by-eleven.column,\n .offset-by-eleven.columns { margin-left: 95.3333333333%; }\n\n .offset-by-one-third.column,\n .offset-by-one-third.columns { margin-left: 34.6666666667%; }\n .offset-by-two-thirds.column,\n .offset-by-two-thirds.columns { margin-left: 69.3333333333%; }\n\n .offset-by-one-half.column,\n .offset-by-one-half.columns { margin-left: 52%; }\n\n}\n\n\n/* Base Styles\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n/* NOTE\nhtml is set to 62.5% so that all the REM measurements throughout Skeleton\nare based on 10px sizing. So basically 1.5rem = 15px :) */\nhtml {\n font-size: 62.5%; }\nbody {\n font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */\n line-height: 1.6;\n font-weight: 400;\n font-family: \"Raleway\", \"HelveticaNeue\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: #222; }\n\n\n/* Typography\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 2rem;\n font-weight: 300; }\nh1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;}\nh2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }\nh3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; }\nh4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }\nh5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; }\nh6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; }\n\n/* Larger than phablet */\n@media (min-width: 550px) {\n h1 { font-size: 5.0rem; }\n h2 { font-size: 4.2rem; }\n h3 { font-size: 3.6rem; }\n h4 { font-size: 3.0rem; }\n h5 { font-size: 2.4rem; }\n h6 { font-size: 1.5rem; }\n}\n\np {\n margin-top: 0; }\n\n\n/* Links\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\na {\n color: #1EAEDB; }\na:hover {\n color: #0FA0CE; }\n\n\n/* Buttons\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n.button,\nbutton,\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n display: inline-block;\n height: 38px;\n padding: 0 30px;\n color: #555;\n text-align: center;\n font-size: 11px;\n font-weight: 600;\n line-height: 38px;\n letter-spacing: .1rem;\n text-transform: uppercase;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border-radius: 4px;\n border: 1px solid #bbb;\n cursor: pointer;\n box-sizing: border-box; }\n.button:hover,\nbutton:hover,\ninput[type=\"submit\"]:hover,\ninput[type=\"reset\"]:hover,\ninput[type=\"button\"]:hover,\n.button:focus,\nbutton:focus,\ninput[type=\"submit\"]:focus,\ninput[type=\"reset\"]:focus,\ninput[type=\"button\"]:focus {\n color: #333;\n border-color: #888;\n outline: 0; }\n.button.button-primary,\nbutton.button-primary,\ninput[type=\"submit\"].button-primary,\ninput[type=\"reset\"].button-primary,\ninput[type=\"button\"].button-primary {\n color: #FFF;\n background-color: #33C3F0;\n border-color: #33C3F0; }\n.button.button-primary:hover,\nbutton.button-primary:hover,\ninput[type=\"submit\"].button-primary:hover,\ninput[type=\"reset\"].button-primary:hover,\ninput[type=\"button\"].button-primary:hover,\n.button.button-primary:focus,\nbutton.button-primary:focus,\ninput[type=\"submit\"].button-primary:focus,\ninput[type=\"reset\"].button-primary:focus,\ninput[type=\"button\"].button-primary:focus {\n color: #FFF;\n background-color: #1EAEDB;\n border-color: #1EAEDB; }\n\n\n/* Forms\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\ninput[type=\"email\"],\ninput[type=\"number\"],\ninput[type=\"search\"],\ninput[type=\"text\"],\ninput[type=\"tel\"],\ninput[type=\"url\"],\ninput[type=\"password\"],\ntextarea,\nselect {\n height: 38px;\n padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */\n background-color: #fff;\n border: 1px solid #D1D1D1;\n border-radius: 4px;\n box-shadow: none;\n box-sizing: border-box; }\n/* Removes awkward default styles on some inputs for iOS */\ninput[type=\"email\"],\ninput[type=\"number\"],\ninput[type=\"search\"],\ninput[type=\"text\"],\ninput[type=\"tel\"],\ninput[type=\"url\"],\ninput[type=\"password\"],\ntextarea {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none; }\ntextarea {\n min-height: 65px;\n padding-top: 6px;\n padding-bottom: 6px; }\ninput[type=\"email\"]:focus,\ninput[type=\"number\"]:focus,\ninput[type=\"search\"]:focus,\ninput[type=\"text\"]:focus,\ninput[type=\"tel\"]:focus,\ninput[type=\"url\"]:focus,\ninput[type=\"password\"]:focus,\ntextarea:focus,\nselect:focus {\n border: 1px solid #33C3F0;\n outline: 0; }\nlabel,\nlegend {\n display: block;\n margin-bottom: .5rem;\n font-weight: 600; }\nfieldset {\n padding: 0;\n border-width: 0; }\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n display: inline; }\nlabel > .label-body {\n display: inline-block;\n margin-left: .5rem;\n font-weight: normal; }\n\n\n/* Lists\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nul {\n list-style: circle inside; }\nol {\n list-style: decimal inside; }\nol, ul {\n padding-left: 0;\n margin-top: 0; }\nul ul,\nul ol,\nol ol,\nol ul {\n margin: 1.5rem 0 1.5rem 3rem;\n font-size: 90%; }\nli {\n margin-bottom: 1rem; }\n\n\n/* Code\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\ncode {\n padding: .2rem .5rem;\n margin: 0 .2rem;\n font-size: 90%;\n white-space: nowrap;\n background: #F1F1F1;\n border: 1px solid #E1E1E1;\n border-radius: 4px; }\npre > code {\n display: block;\n padding: 1rem 1.5rem;\n white-space: pre; }\n\n\n/* Tables\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nth,\ntd {\n padding: 12px 15px;\n text-align: left;\n border-bottom: 1px solid #E1E1E1; }\nth:first-child,\ntd:first-child {\n padding-left: 0; }\nth:last-child,\ntd:last-child {\n padding-right: 0; }\n\n\n/* Spacing\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nbutton,\n.button {\n margin-bottom: 1rem; }\ninput,\ntextarea,\nselect,\nfieldset {\n margin-bottom: 1.5rem; }\npre,\nblockquote,\ndl,\nfigure,\ntable,\np,\nul,\nol,\nform {\n margin-bottom: 2.5rem; }\n\n\n/* Utilities\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n.u-full-width {\n width: 100%;\n box-sizing: border-box; }\n.u-max-full-width {\n max-width: 100%;\n box-sizing: border-box; }\n.u-pull-right {\n float: right; }\n.u-pull-left {\n float: left; }\n\n\n/* Misc\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\nhr {\n margin-top: 3rem;\n margin-bottom: 3.5rem;\n border-width: 0;\n border-top: 1px solid #E1E1E1; }\n\n\n/* Clearing\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n\n/* Self Clearing Goodness */\n.container:after,\n.row:after,\n.u-cf {\n content: \"\";\n display: table;\n clear: both; }\n\n\n/* Media Queries\n–––––––––––––––––––––––––––––––––––––––––––––––––– */\n/*\nNote: The best way to structure the use of media queries is to create the queries\nnear the relevant code. For example, if you wanted to change the styles for buttons\non small devices, paste the mobile query code up in the buttons section and style it\nthere.\n*/\n\n\n/* Larger than mobile */\n@media (min-width: 400px) {}\n\n/* Larger than phablet (also point when grid becomes active) */\n@media (min-width: 550px) {}\n\n/* Larger than tablet */\n@media (min-width: 750px) {}\n\n/* Larger than desktop */\n@media (min-width: 1000px) {}\n\n/* Larger than Desktop HD */\n@media (min-width: 1200px) {}\n","/**\n * Featherlight – ultra slim jQuery lightbox\n * Version 1.7.1 - http://noelboss.github.io/featherlight/\n *\n * Copyright 2017, Noël Raoul Bossart (http://www.noelboss.com)\n * MIT Licensed.\n**/\n@media all {\n .featherlight {\n display: none;\n\n /* dimensions: spanning the background from edge to edge */\n position:fixed;\n top: 0; right: 0; bottom: 0; left: 0;\n z-index: 2147483647; /* z-index needs to be >= elements on the site. */\n\n /* position: centering content */\n text-align: center;\n\n /* insures that the ::before pseudo element doesn't force wrap with fixed width content; */\n white-space: nowrap;\n\n /* styling */\n cursor: pointer;\n background: #333;\n /* IE8 \"hack\" for nested featherlights */\n background: rgba(0, 0, 0, 0);\n }\n\n /* support for nested featherlights. Does not work in IE8 (use JS to fix) */\n .featherlight:last-of-type {\n background: rgba(0, 0, 0, 0.8);\n }\n\n .featherlight:before {\n /* position: trick to center content vertically */\n content: '';\n display: inline-block;\n height: 100%;\n vertical-align: middle;\n }\n\n .featherlight .featherlight-content {\n /* make content container for positioned elements (close button) */\n position: relative;\n\n /* position: centering vertical and horizontal */\n text-align: left;\n vertical-align: middle;\n display: inline-block;\n\n /* dimensions: cut off images */\n overflow: auto;\n padding: 25px 25px 0;\n border-bottom: 25px solid transparent;\n\n /* dimensions: handling large content */\n margin-left: 5%;\n margin-right: 5%;\n max-height: 95%;\n\n /* styling */\n background: #fff;\n cursor: auto;\n\n /* reset white-space wrapping */\n white-space: normal;\n }\n\n /* contains the content */\n .featherlight .featherlight-inner {\n /* make sure its visible */\n display: block;\n }\n\n .featherlight .featherlight-close-icon {\n /* position: centering vertical and horizontal */\n position: absolute;\n z-index: 9999;\n top: 0;\n right: 0;\n\n /* dimensions: 25px x 25px */\n line-height: 25px;\n width: 25px;\n\n /* styling */\n cursor: pointer;\n text-align: center;\n font-family: Arial, sans-serif;\n background: #fff; /* Set the background in case it overlaps the content */\n background: rgba(255, 255, 255, 0.3);\n color: #000;\n border: none;\n padding: 0;\n }\n\n /* See http://stackoverflow.com/questions/16077341/how-to-reset-all-default-styles-of-the-html5-button-element */\n .featherlight .featherlight-close-icon::-moz-focus-inner {\n border: 0;\n padding: 0;\n }\n\n .featherlight .featherlight-image {\n /* styling */\n width: 100%;\n }\n\n\n .featherlight-iframe .featherlight-content {\n /* removed the border for image croping since iframe is edge to edge */\n border-bottom: 0;\n padding: 0;\n -webkit-overflow-scrolling: touch;\n overflow-y: scroll;\n }\n\n .featherlight iframe {\n /* styling */\n border: none;\n }\n\n .featherlight * { /* See https://github.com/noelboss/featherlight/issues/42 */\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n }\n}\n\n/* handling phones and small screens */\n@media only screen and (max-width: 1024px) {\n .featherlight .featherlight-content {\n /* dimensions: maximize lightbox with for small screens */\n margin-left: 0;\n margin-right: 0;\n max-height: 98%;\n\n padding: 10px 10px 0;\n border-bottom: 10px solid transparent;\n }\n}\n","/**\n * MailChimp Form Embed Code - Slim - 12/15/2015 v10.7\n * Default Styles, taken from //cdn-images.mailchimp.com/embedcode/slim-10_7.css\n*/\n\n#mc_embed_signup form {display:block; position:relative; text-align:left; padding:10px 0 10px 3%}\n#mc_embed_signup h2 {font-weight:bold; padding:0; margin:15px 0; font-size:1.4em;}\n#mc_embed_signup input {border:1px solid #999; -webkit-appearance:none;}\n#mc_embed_signup input[type=checkbox]{-webkit-appearance:checkbox;}\n#mc_embed_signup input[type=radio]{-webkit-appearance:radio;}\n#mc_embed_signup input:focus {border-color:#333;}\n#mc_embed_signup .button {clear:both; background-color: #aaa; border: 0 none; border-radius:4px; letter-spacing:.03em; color: #FFFFFF; cursor: pointer; display: inline-block; font-size:15px; height: 32px; line-height: 32px; margin: 0 5px 10px 0; padding:0; text-align: center; text-decoration: none; vertical-align: top; white-space: nowrap; width: auto; transition: all 0.23s ease-in-out 0s;}\n#mc_embed_signup .button:hover {background-color:#777;}\n#mc_embed_signup .small-meta {font-size: 11px;}\n#mc_embed_signup .nowrap {white-space:nowrap;}\n#mc_embed_signup .clear {clear:none; display:inline;}\n#mc_embed_signup label {display:block; font-size:16px; padding-bottom:10px; font-weight:bold;}\n#mc_embed_signup input.email {font-family:\"Open Sans\",\"Helvetica Neue\",Arial,Helvetica,Verdana,sans-serif; font-size: 15px; display:block; padding:0 0.4em; margin:0 4% 10px 0; min-height:32px; width:58%; min-width:130px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;}\n#mc_embed_signup input.button {display:block; width:35%; margin:0 0 10px 0; min-width:90px;}\n#mc_embed_signup div#mce-responses {float:left; top:-1.4em; padding:0em .5em 0em .5em; overflow:hidden; width:90%;margin: 0 5%; clear: both;}\n#mc_embed_signup div.response {margin:1em 0; padding:1em .5em .5em 0; font-weight:bold; float:left; top:-1.5em; z-index:1; width:80%;}\n#mc_embed_signup #mce-error-response {display:none;}\n#mc_embed_signup #mce-success-response {color:#529214; display:none;}\n#mc_embed_signup label.error {display:block; float:none; width:auto; margin-left:1.05em; text-align:left; padding:.5em 0;}\n\n\n/* ChristopherL Customizations */\n#mce-EMAIL,\n#mc-embedded-subscribe {\n margin: auto !important;\n display: block;\n}\n#mce-EMAIL {\n max-width: 350px;\n text-align: center;\n}\n#mc-embedded-subscribe {\n margin-top: 2% !important;\n background-color: #D8D8D8 !important;\n padding-top: 2px;\n line-height: 2.4em;\n border: solid 1px #888888 !important;\n font-size: 1em;\n font-weight: 400;\n line-height: 2.5em;\n max-width: 200px;\n\n &:hover {\n background-color: #1EAEDB !important;\n color: #FFFFFF !important;\n }\n}\n","/**\n * Base Sass Stylesheet - Makes things purdy.\n *\n * @package ChristopherL.com\n * @copyright 2016-2017 ChristopherL (https://github.com/chrislarrycarl)\n * @license http://www.gnu.org/licenses/gpl-2.0.html\n */\n\n@font-face {\n font-family: 'fontello';\n src: url('font/fontello.eot?84475532');\n src: url('font/fontello.eot?84475532#iefix') format('embedded-opentype'),\n url('font/fontello.woff2?84475532') format('woff2'),\n url('font/fontello.woff?84475532') format('woff'),\n url('font/fontello.ttf?84475532') format('truetype'),\n url('font/fontello.svg?84475532#fontello') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */\n/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n @font-face {\n font-family: 'fontello';\n src: url('../font/fontello.svg?84475532#fontello') format('svg');\n }\n}\n\n// Icons\n$home_icon: '\\e800';\n$development_icon: '\\e801';\n$marketing_icon: '\\e802';\n$about_icon: '\\e803';\n$contact_icon: '\\e804';\n\n// Typography\n// Note: These are Google fonts, their stylesheet is included in of /include/templates/base.tpl\n$primary_font: 'Noto Sans', sans-serif;\n$header_font: 'Sacramento', cursive;\n$icon_font: 'fontello';\n\n// Constraints\n$maximum_content_width: 1024px;\n\n// Media Query Mixins\n@mixin tablet {\n @media (min-width: 768px) {\n @content;\n }\n}\n@mixin desktop {\n @media (min-width: 1024px) {\n @content;\n }\n}\n\n// Parsley Feedback Styles\n.parsley-errors-list {\n margin: 0;\n\n li {\n list-style-type: none;\n font-style: italic;\n color: #DC143C;\n }\n}\n\n// Featherlight lightbox Styles\n.featherlight-close-icon {\n border: 0;\n background: none;\n width: 15px;\n font-size: 20px;\n line-height: 0px;\n margin-top: 0;\n margin: -5px -10px 0 0;\n background: none !important;\n}\n\n// Utility Styles\n.parsley-error,\n.error {\n border: solid 1px #DC143C !important;\n}\n#feedback {\n border-left: solid 2px #006400;\n padding: 1%;\n margin: -2% 0 1% 0;\n background: #cce0cc;\n color: #222222;\n\n &.incomplete {\n border-left: solid 2px #DC143C;\n padding: 1%;\n margin: -2% 0 1% 0;\n background: #f8d0d8;\n color: #222222;\n }\n}\n.fl {\n display: none;\n max-width: 100%;\n}\n.fl img,\n.fl span {\n display: block;\n clear: both;\n margin: auto;\n text-align: center;\n}\n.hidden {\n display: none;\n}\n.hidden-phone {\n display: none;\n\n @include tablet {\n display: inline-block;\n }\n}\n.hidden-tablet {\n @include tablet {\n display: none !important;\n }\n}\n.hidden-desktop {\n @include desktop {\n display: none !important;\n }\n}\n.the-outer-limits {\n width: 90%;\n max-width: $maximum_content_width;\n display: block;\n margin: auto;\n}\n.lightbox {\n cursor: pointer;\n}\n.strikethrough {\n text-decoration: line-through;\n}\n.video-container {\n position: relative;\n padding-bottom: 56.25%;\n padding-top: 35px;\n height: 0;\n overflow: hidden;\n\n iframe {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n.wide-stance {\n display: block;\n position: relative;\n margin: auto;\n float: none;\n max-width: 100%;\n}\n.image-left {\n p {\n @include desktop {\n width: 80%;\n }\n }\n img {\n display: block;\n margin: auto;\n\n @include desktop {\n float: left;\n }\n }\n}\n.image-right {\n p {\n @include desktop {\n width: 75%;\n }\n }\n img {\n display: block;\n margin: auto;\n\n @include desktop {\n float: right;\n margin: 0 0 3% 3%;\n }\n }\n}\n.center {\n display: block;\n margin-left: auto;\n margin-right: auto;\n text-align: center;\n}\n.action-mobile {\n @include desktop {\n display: none;\n }\n}\n.action-desktop {\n display: none;\n\n @include desktop {\n display: inline-block;\n }\n}\n\n// Styles\nhtml,\nbody {\n height: 100%;\n margin: 0;\n padding: 0;\n}\nbody {\n font-family: $primary_font;\n background: #F7F7F7;\n border-top: solid 3px #222222;\n}\na {\n text-decoration: none;\n}\na:active {\n}\na:visited {\n}\na:hover {\n text-decoration: underline;\n color: #0FA0CE !important;\n}\nh1,\nh2,\nh3,\nh4,\nh5 {\n font-family: $header_font;\n}\nh1 {\n font-size: 1em;\n}\nheader {\n background: #FFFFFF;\n padding: 1% 0 0 0;\n\n @include desktop {\n padding: 1% 0 1% 0;\n height: 75px;\n }\n\n img {\n display: block;\n margin: 0 auto 0 auto;\n\n @include desktop {\n float: left;\n }\n }\n}\nnav {\n width: 100%;\n display: block;\n clear: both;\n height: auto;\n margin: 0;\n padding: 0;\n\n @include desktop {\n float: right;\n margin: 2% 2% 0 0;\n width: 55%;\n text-align: right;\n clear: none;\n display: inline;\n }\n\n .active {\n a {\n color: #1EAEDB;\n }\n\n @include desktop {\n border-bottom: solid 1px #1EAEDB;\n }\n }\n a {\n font-size: 2em;\n color: #222222;\n display: block;\n text-align: center;\n width: 100%;\n margin: 0;\n padding: 0;\n\n @include desktop {\n font-size: 1.4em;\n }\n span {\n display: none;\n\n @include desktop {\n display: inline;\n min-width: 100px;\n }\n }\n }\n a:hover {\n text-decoration: none;\n }\n ul {\n display: inline-block;\n list-style-type: none;\n margin: 0;\n padding: 0;\n width: 100%;\n\n @include desktop {\n right: 0;\n }\n\n li {\n display: inline;\n list-style-type: none;\n float: left;\n width: 20%;\n margin: 0;\n padding: 0;\n\n @include desktop {\n width: auto;\n margin: 0 2% 0 2%;\n }\n\n a {\n margin: 0;\n padding: 0;\n }\n }\n li:first-child a:before {\n content: $home_icon;\n }\n li:nth-child(2) a:before {\n content: $development_icon;\n }\n li:nth-child(3) a:before {\n content: $marketing_icon;\n }\n li:nth-child(4) a:before {\n content: $about_icon;\n }\n li:nth-child(5) a:before {\n content: $contact_icon;\n }\n li a:before {\n font-family: $icon_font;\n\n @include desktop {\n content: '' !important;\n }\n }\n }\n}\n.hero {\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n display: block;\n width: 100%;\n min-height: 150px;\n clear: both;\n\n @include tablet {\n min-height: 250px;\n }\n\n @include desktop {\n min-height: 350px;\n }\n}\n.hero_contact {\n @extend .hero;\n background-position: right center;\n\n @include desktop {\n background-position: center center;\n }\n}\nimg {\n max-width: 100%;\n}\nsection {\n display: block;\n clear: both;\n padding-top: 2%;\n\n h1 {\n font-size: 4rem;\n }\n ul {\n margin-left: 3%;\n }\n}\nsection.highlight,\n#map {\n background: #D8D8D8;\n padding: 1% 0;\n border-top: solid 1px #222222;\n border-bottom: solid 1px #222222;\n\n h3,\n p {\n text-align: center;\n }\n}\n#map {\n width: 100%;\n height: 200px;\n}\nfieldset {\n textarea {\n width: 100%;\n height: 200px;\n\n @include tablet {\n width: 50%;\n }\n\n }\n #g-recaptcha {\n width: 302px;\n }\n #submit {\n clear: both;\n display: block;\n margin-top: 2% !important;\n background-color: #D8D8D8 !important;\n transition: all 0.23s;\n color: #FFFFFF;\n\n &:hover {\n background-color: #1EAEDB !important;\n color: #FFFFFF !important;\n }\n }\n}\naside.contact {\n background: #D8D8D8;\n border: solid 1px #6A6A6A;\n padding: 2%;\n text-align: center;\n margin: 0 0 5% 5% !important;\n float: none;\n width: 90%;\n\n @include tablet {\n float: right;\n width: 25%;\n min-width: 250px;\n }\n\n h3 {\n margin-bottom: 0 !important;\n }\n a {\n font-size: 2em;\n }\n span {\n display: block;\n font-size: 0.7em;\n margin: 2% auto;\n }\n}\n.button-links a {\n display: block;\n width: 80%;\n text-align: center;\n padding: 2% 0px;\n border: 1px solid #1EAEDB;\n margin: 5% auto;\n\n &:hover {\n background: #1EAEDB;\n color: #FFFFFF !important;\n text-decoration: none;\n }\n}\n.logos img {\n margin: 2% auto;\n display: block;\n vertical-align: middle;\n}\n.shia {\n width: auto;\n background-repeat: no-repeat;\n width: 160px;\n height: 305px;\n margin: auto;\n\n .play-button {\n margin: 125px 0 0 50px;\n display: block;\n position: absolute;\n }\n\n @include desktop {\n float: right;\n margin: -220px 5% 0 0 !important;\n }\n}\nfooter {\n width: 100%;\n background: #222222;\n color: #FFFFFF;\n padding-top: 2%;\n}\nfooter h4,\n.addthis_horizontal_follow_toolbox p {\n margin: 0 0 5% 0;\n padding: 0;\n line-height: 1.35;\n}\n.addthis_horizontal_follow_toolbox {\n font-family: $header_font;\n font-size: 3.0rem;\n margin-bottom: 7%;\n}\nfooter .head {\n display: block;\n margin: 2% auto 0 auto;\n width: 100px;\n}\n.copyright {\n clear: both;\n display: block;\n width: auto;\n margin: auto;\n text-align: center;\n padding-top: 2%;\n font-size: 0.9em;\n\n @include tablet {\n font-size: 1em;\n }\n}\n.copyright span {\n -moz-transform: scaleX(-1);\n -o-transform: scaleX(-1);\n -webkit-transform: scaleX(-1);\n transform: scaleX(-1);\n display: inline-block;\n}\n.copyright:before,\n.copyright:after {\n content: '';\n display: inline-block;\n vertical-align: top;\n width: 5%;\n height: 1px;\n background: #FAFAFA;\n opacity: .8;\n position: relative;\n top: .65em;\n margin: 0 5%;\n\n @include tablet {\n width: 20%;\n }\n}\n.addthis-mobile-shim {\n display: block;\n width: 100%;\n height: 45px;\n\n @include desktop {\n display: none;\n height: 0;\n }\n}\n.egg {\n display: block;\n width: 50%;\n font-size: 0.5em;\n text-align: center;\n margin: 1% auto !important;\n}\n.play-button {\n height: 40px;\n width: 65px;\n background-color: rgba(255, 255, 255, 0.9);\n border-radius: 5px;\n position: relative;\n cursor: pointer;\n\n &:after {\n content: \"\";\n display: block;\n position: absolute;\n top: 10.5px;\n left: 24px;\n margin: 0 auto;\n border-style: solid;\n border-width: 9.5px 0 9.5px 17px;\n border-color: transparent transparent transparent rgba(0, 173, 239, 0.7);\n }\n\n &:hover {\n background: rgba(0, 173, 239, 1);\n\n &:after {\n border-color: transparent transparent transparent rgba(255, 255, 255, 1);\n }\n }\n}\n\n// Integrations/Widgets\n\n.twitter-timeline {\n height: 350px !important;\n display: block !important;\n margin: 0 auto 2% auto !important;\n}\n"]} \ No newline at end of file diff --git a/include/config.inc.dist.php b/include/config.inc.dist.php index 6bb4c05..1ff44c7 100644 --- a/include/config.inc.dist.php +++ b/include/config.inc.dist.php @@ -9,8 +9,8 @@ $config = array( - // used for cache busting in query string of core CSS & JS files, increment as needed - 'site_version' => '0.3', + // not really that important, make it anything you want (used in generator meta) + 'site_version' => '0.4', // Some resources (canonical url, social sharing images) require a complete URL diff --git a/include/functions.inc.php b/include/functions.inc.php index 2a81a6b..7f206bb 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -33,8 +33,8 @@ function smarty_scaffolding() { // Initialize Page settings from $config $smarty->assign('site_version', $config['site_version']); - $smarty->assign('css_version', sha1_file('css/styles.css')); - $smarty->assign('js_version', sha1_file('js/global.min.js')); + $smarty->assign('css_version', hash_file('sha1', 'css/styles.css')); + $smarty->assign('js_version', hash_file('sha1', 'js/global.min.js')); $smarty->assign('site_domain', $config['site_domain']); $smarty->assign('site_root', $config['site_root']); $smarty->assign('image_root', complete_url('', 1)); diff --git a/js/global.min.js b/js/global.min.js index bdd45ee..a156234 100644 --- a/js/global.min.js +++ b/js/global.min.js @@ -1,5 +1,5 @@ -function _toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&t-1 in e)}function r(e,t,n){return he.isFunction(t)?he.grep(e,function(e,i){return!!t.call(e,i,e)!==n}):t.nodeType?he.grep(e,function(e){return e===t!==n}):"string"!=typeof t?he.grep(e,function(e){return se.call(t,e)>-1!==n}):Te.test(t)?he.filter(t,e,n):(t=he.filter(t,e),he.grep(e,function(e){return se.call(t,e)>-1!==n&&1===e.nodeType}))}function o(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function s(e){var t={};return he.each(e.match(Se)||[],function(e,n){t[n]=!0}),t}function a(e){return e}function u(e){throw e}function l(e,t,n){var i;try{e&&he.isFunction(i=e.promise)?i.call(e).done(t).fail(n):e&&he.isFunction(i=e.then)?i.call(e,t,n):t.call(void 0,e)}catch(e){n.call(void 0,e)}}function c(){te.removeEventListener("DOMContentLoaded",c),e.removeEventListener("load",c),he.ready()}function d(){this.expando=he.expando+d.uid++}function f(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Re.test(e)?JSON.parse(e):e)}function p(e,t,n){var i;if(void 0===n&&1===e.nodeType)if(i="data-"+t.replace(Me,"-$&").toLowerCase(),n=e.getAttribute(i),"string"==typeof n){try{n=f(n)}catch(e){}Oe.set(e,t,n)}else n=void 0;return n}function h(e,t,n,i){var r,o=1,s=20,a=i?function(){return i.cur()}:function(){return he.css(e,t,"")},u=a(),l=n&&n[3]||(he.cssNumber[t]?"":"px"),c=(he.cssNumber[t]||"px"!==l&&+u)&&Le.exec(he.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do o=o||".5",c/=o,he.style(e,t,c+l);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(c=+c||+u||0,r=n[1]?c+(n[1]+1)*n[2]:+n[2],i&&(i.unit=l,i.start=c,i.end=r)),r}function m(e){var t,n=e.ownerDocument,i=e.nodeName,r=ze[i];return r?r:(t=n.body.appendChild(n.createElement(i)),r=he.css(t,"display"),t.parentNode.removeChild(t),"none"===r&&(r="block"),ze[i]=r,r)}function g(e,t){for(var n,i,r=[],o=0,s=e.length;o-1)r&&r.push(o);else if(l=he.contains(o.ownerDocument,o),s=v(d.appendChild(o),"script"),l&&y(s),n)for(c=0;o=s[c++];)Xe.test(o.type||"")&&n.push(o);return d}function x(){return!0}function w(){return!1}function C(){try{return te.activeElement}catch(e){}}function _(e,t,n,i,r,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(i=i||n,n=void 0);for(a in t)_(e,a,n,i,t[a],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),r===!1)r=w;else if(!r)return e;return 1===o&&(s=r,r=function(e){return he().off(e),s.apply(this,arguments)},r.guid=s.guid||(s.guid=he.guid++)),e.each(function(){he.event.add(this,t,r,i,n)})}function T(e,t){return he.nodeName(e,"table")&&he.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e:e}function E(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function F(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function k(e,t){var n,i,r,o,s,a,u,l;if(1===t.nodeType){if(qe.hasData(e)&&(o=qe.access(e),s=qe.set(t,o),l=o.events)){delete s.handle,s.events={};for(r in l)for(n=0,i=l[r].length;n1&&"string"==typeof h&&!fe.checkClone&&nt.test(h))return e.each(function(n){var o=e.eq(n);m&&(t[0]=h.call(this,n,o.html())),D(o,t,i,r)});if(f&&(o=b(t,e[0].ownerDocument,!1,e,r),s=o.firstChild,1===o.childNodes.length&&(o=s),s||r)){for(a=he.map(v(o,"script"),E),u=a.length;d=0&&n_.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[L]=!0,e}function r(e){var t=N.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),i=n.length;i--;)_.attrHandle[n[i]]=t}function s(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function l(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Te(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function c(e){return i(function(t){return t=+t,i(function(n,i){for(var r,o=e([],n.length,t),s=o.length;s--;)n[r=o[s]]&&(n[r]=!(i[r]=n[r]))})})}function d(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function f(){}function p(e){for(var t=0,n=e.length,i="";t1?function(t,n,i){for(var r=e.length;r--;)if(!e[r](t,n,i))return!1;return!0}:e[0]}function g(e,n,i){for(var r=0,o=n.length;r-1&&(i[l]=!(s[l]=d))}}else b=v(b===s?b.splice(h,b.length):b),o?o(null,s,b,u):K.apply(s,b)})}function b(e){for(var t,n,i,r=e.length,o=_.relative[e[0].type],s=o||_.relative[" "],a=o?1:0,u=h(function(e){return e===t},s,!0),l=h(function(e){return ee(t,e)>-1},s,!0),c=[function(e,n,i){var r=!o&&(i||n!==D)||((t=n).nodeType?u(e,n,i):l(e,n,i));return t=null,r}];a1&&m(c),a>1&&p(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ae,"$1"),n,a0,o=e.length>0,s=function(i,s,a,u,l){var c,d,f,p=0,h="0",m=i&&[],g=[],y=D,b=i||o&&_.find.TAG("*",l),x=V+=null==y?1:Math.random()||.1,w=b.length;for(l&&(D=s===N||s||l);h!==w&&null!=(c=b[h]);h++){if(o&&c){for(d=0,s||c.ownerDocument===N||(j(c),a=!q);f=e[d++];)if(f(c,s||N,a)){u.push(c);break}l&&(V=x)}r&&((c=!f&&c)&&p--,i&&m.push(c))}if(p+=h,r&&h!==p){for(d=0;f=n[d++];)f(m,g,s,a);if(i){if(p>0)for(;h--;)m[h]||g[h]||(g[h]=Q.call(u));g=v(g)}K.apply(u,g),l&&!i&&g.length>0&&p+n.length>1&&t.uniqueSort(u)}return l&&(V=x,D=y),m};return r?i(s):s}var w,C,_,T,E,F,k,$,D,S,A,j,N,P,q,O,R,M,I,L="sizzle"+1*new Date,H=e.document,V=0,W=0,z=n(),B=n(),U=n(),X=function(e,t){return e===t&&(A=!0),0},G={}.hasOwnProperty,Y=[],Q=Y.pop,J=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,i=e.length;n+~]|"+ne+")"+ne+"*"),ce=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),de=new RegExp(oe),fe=new RegExp("^"+ie+"$"),pe={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+re),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),xe=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Ce=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},_e=function(){j()},Te=h(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{K.apply(Y=Z.call(H.childNodes),H.childNodes),Y[H.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){J.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}C=t.support={},E=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},j=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:H;return i!==N&&9===i.nodeType&&i.documentElement?(N=i,P=N.documentElement,q=!E(N),H!==N&&(n=N.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",_e,!1):n.attachEvent&&n.attachEvent("onunload",_e)),C.attributes=r(function(e){return e.className="i",!e.getAttribute("className")}),C.getElementsByTagName=r(function(e){return e.appendChild(N.createComment("")),!e.getElementsByTagName("*").length}),C.getElementsByClassName=ge.test(N.getElementsByClassName),C.getById=r(function(e){return P.appendChild(e).id=L,!N.getElementsByName||!N.getElementsByName(L).length}),C.getById?(_.filter.ID=function(e){var t=e.replace(be,xe);return function(e){return e.getAttribute("id")===t}},_.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&q){var n=t.getElementById(e);return n?[n]:[]}}):(_.filter.ID=function(e){var t=e.replace(be,xe);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},_.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&q){var n,i,r,o=t.getElementById(e);if(o){if(n=o.getAttributeNode("id"),n&&n.value===e)return[o];for(r=t.getElementsByName(e),i=0;o=r[i++];)if(n=o.getAttributeNode("id"),n&&n.value===e)return[o]}return[]}}),_.find.TAG=C.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):C.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},_.find.CLASS=C.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&q)return t.getElementsByClassName(e)},R=[],O=[],(C.qsa=ge.test(N.querySelectorAll))&&(r(function(e){P.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&O.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||O.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+L+"-]").length||O.push("~="),e.querySelectorAll(":checked").length||O.push(":checked"),e.querySelectorAll("a#"+L+"+*").length||O.push(".#.+[+~]")}),r(function(e){e.innerHTML="";var t=N.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&O.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&O.push(":enabled",":disabled"),P.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&O.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),O.push(",.*:")})),(C.matchesSelector=ge.test(M=P.matches||P.webkitMatchesSelector||P.mozMatchesSelector||P.oMatchesSelector||P.msMatchesSelector))&&r(function(e){C.disconnectedMatch=M.call(e,"*"),M.call(e,"[s!='']:x"),R.push("!=",oe)}),O=O.length&&new RegExp(O.join("|")),R=R.length&&new RegExp(R.join("|")),t=ge.test(P.compareDocumentPosition),I=t||ge.test(P.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},X=t?function(e,t){if(e===t)return A=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!C.sortDetached&&t.compareDocumentPosition(e)===n?e===N||e.ownerDocument===H&&I(H,e)?-1:t===N||t.ownerDocument===H&&I(H,t)?1:S?ee(S,e)-ee(S,t):0:4&n?-1:1)}:function(e,t){if(e===t)return A=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!r||!o)return e===N?-1:t===N?1:r?-1:o?1:S?ee(S,e)-ee(S,t):0;if(r===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[i]===u[i];)i++;return i?s(a[i],u[i]):a[i]===H?-1:u[i]===H?1:0},N):N},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==N&&j(e),n=n.replace(ce,"='$1']"),C.matchesSelector&&q&&!U[n+" "]&&(!R||!R.test(n))&&(!O||!O.test(n)))try{var i=M.call(e,n);if(i||C.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return t(n,N,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==N&&j(e),I(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==N&&j(e);var n=_.attrHandle[t.toLowerCase()],i=n&&G.call(_.attrHandle,t.toLowerCase())?n(e,t,!q):void 0;return void 0!==i?i:C.attributes||!q?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.escape=function(e){return(e+"").replace(we,Ce)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,r=0;if(A=!C.detectDuplicates,S=!C.sortStable&&e.slice(0),e.sort(X),A){for(;t=e[r++];)t===e[r]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return S=null,e},T=t.getText=function(e){var t,n="",i=0,r=e.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=T(e)}else if(3===r||4===r)return e.nodeValue}else for(;t=e[i++];)n+=T(t);return n},_=t.selectors={cacheLength:50,createPseudo:i,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,xe),e[3]=(e[3]||e[4]||e[5]||"").replace(be,xe),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=F(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,xe).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(r){var o=t.attr(r,e);return null==o?"!="===n:!n||(o+="","="===n?o===i:"!="===n?o!==i:"^="===n?i&&0===o.indexOf(i):"*="===n?i&&o.indexOf(i)>-1:"$="===n?i&&o.slice(-i.length)===i:"~="===n?(" "+o.replace(se," ")+" ").indexOf(i)>-1:"|="===n&&(o===i||o.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,r){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,u){var l,c,d,f,p,h,m=o!==s?"nextSibling":"previousSibling",g=t.parentNode,v=a&&t.nodeName.toLowerCase(),y=!u&&!a,b=!1;if(g){if(o){for(;m;){for(f=t;f=f[m];)if(a?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?g.firstChild:g.lastChild],s&&y){for(f=g,d=f[L]||(f[L]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),l=c[e]||[],p=l[0]===V&&l[1],b=p&&l[2],f=p&&g.childNodes[p];f=++p&&f&&f[m]||(b=p=0)||h.pop();)if(1===f.nodeType&&++b&&f===t){c[e]=[V,p,b];break}}else if(y&&(f=t,d=f[L]||(f[L]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),l=c[e]||[],p=l[0]===V&&l[1],b=p),b===!1)for(;(f=++p&&f&&f[m]||(b=p=0)||h.pop())&&((a?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++b||(y&&(d=f[L]||(f[L]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),c[e]=[V,b]),f!==t)););return b-=r,b===i||b%i===0&&b/i>=0}}},PSEUDO:function(e,n){var r,o=_.pseudos[e]||_.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[L]?o(n):o.length>1?(r=[e,e,"",n],_.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,r=o(e,n),s=r.length;s--;)i=ee(e,r[s]),e[i]=!(t[i]=r[s])}):function(e){return o(e,0,r)}):o}},pseudos:{not:i(function(e){var t=[],n=[],r=k(e.replace(ae,"$1"));return r[L]?i(function(e,t,n,i){for(var o,s=r(e,null,i,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(be,xe),function(t){return(t.textContent||t.innerText||T(t)).indexOf(e)>-1}}),lang:i(function(e){return fe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(be,xe).toLowerCase(),function(t){var n;do if(n=q?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(), -n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===P},focus:function(e){return e===N.activeElement&&(!N.hasFocus||N.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:l(!1),disabled:l(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!_.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[n<0?n+t:n]}),even:c(function(e,t){for(var n=0;n=0;)e.push(i);return e}),gt:c(function(e,t,n){for(var i=n<0?n+t:n;++i2&&"ID"===(s=o[0]).type&&9===t.nodeType&&q&&_.relative[o[1].type]){if(t=(_.find.ID(s.matches[0].replace(be,xe),t)||[])[0],!t)return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(r=pe.needsContext.test(e)?0:o.length;r--&&(s=o[r],!_.relative[a=s.type]);)if((u=_.find[a])&&(i=u(s.matches[0].replace(be,xe),ye.test(o[0].type)&&d(t.parentNode)||t))){if(o.splice(r,1),e=i.length&&p(o),!e)return K.apply(n,i),n;break}}return(l||k(e,c))(i,t,!q,n,!t||ye.test(e)&&d(t.parentNode)||t),n},C.sortStable=L.split("").sort(X).join("")===L,C.detectDuplicates=!!A,j(),C.sortDetached=r(function(e){return 1&e.compareDocumentPosition(N.createElement("fieldset"))}),r(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),C.attributes&&r(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),r(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var i;if(!n)return e[t]===!0?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(e);he.find=be,he.expr=be.selectors,he.expr[":"]=he.expr.pseudos,he.uniqueSort=he.unique=be.uniqueSort,he.text=be.getText,he.isXMLDoc=be.isXML,he.contains=be.contains,he.escapeSelector=be.escape;var xe=function(e,t,n){for(var i=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&he(e).is(n))break;i.push(e)}return i},we=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Ce=he.expr.match.needsContext,_e=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Te=/^.[^:#\[\.,]*$/;he.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?he.find.matchesSelector(i,e)?[i]:[]:he.find.matches(e,he.grep(t,function(e){return 1===e.nodeType}))},he.fn.extend({find:function(e){var t,n,i=this.length,r=this;if("string"!=typeof e)return this.pushStack(he(e).filter(function(){for(t=0;t1?he.uniqueSort(n):n},filter:function(e){return this.pushStack(r(this,e||[],!1))},not:function(e){return this.pushStack(r(this,e||[],!0))},is:function(e){return!!r(this,"string"==typeof e&&Ce.test(e)?he(e):e||[],!1).length}});var Ee,Fe=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,ke=he.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||Ee,"string"==typeof e){if(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Fe.exec(e),!i||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof he?t[0]:t,he.merge(this,he.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:te,!0)),_e.test(i[1])&&he.isPlainObject(t))for(i in t)he.isFunction(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return r=te.getElementById(i[2]),r&&(this[0]=r,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):he.isFunction(e)?void 0!==n.ready?n.ready(e):e(he):he.makeArray(e,this)};ke.prototype=he.fn,Ee=he(te);var $e=/^(?:parents|prev(?:Until|All))/,De={children:!0,contents:!0,next:!0,prev:!0};he.fn.extend({has:function(e){var t=he(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&he.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?he.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(he(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(he.uniqueSort(he.merge(this.get(),he(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),he.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return xe(e,"parentNode")},parentsUntil:function(e,t,n){return xe(e,"parentNode",n)},next:function(e){return o(e,"nextSibling")},prev:function(e){return o(e,"previousSibling")},nextAll:function(e){return xe(e,"nextSibling")},prevAll:function(e){return xe(e,"previousSibling")},nextUntil:function(e,t,n){return xe(e,"nextSibling",n)},prevUntil:function(e,t,n){return xe(e,"previousSibling",n)},siblings:function(e){return we((e.parentNode||{}).firstChild,e)},children:function(e){return we(e.firstChild)},contents:function(e){return e.contentDocument||he.merge([],e.childNodes)}},function(e,t){he.fn[e]=function(n,i){var r=he.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=he.filter(i,r)),this.length>1&&(De[e]||he.uniqueSort(r),$e.test(e)&&r.reverse()),this.pushStack(r)}});var Se=/[^\x20\t\r\n\f]+/g;he.Callbacks=function(e){e="string"==typeof e?s(e):he.extend({},e);var t,n,i,r,o=[],a=[],u=-1,l=function(){for(r=e.once,i=t=!0;a.length;u=-1)for(n=a.shift();++u-1;)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?he.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return r=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return r=a=[],n||t||(o=n=""),this},locked:function(){return!!r},fireWith:function(e,n){return r||(n=n||[],n=[e,n.slice?n.slice():n],a.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!i}};return c},he.extend({Deferred:function(t){var n=[["notify","progress",he.Callbacks("memory"),he.Callbacks("memory"),2],["resolve","done",he.Callbacks("once memory"),he.Callbacks("once memory"),0,"resolved"],["reject","fail",he.Callbacks("once memory"),he.Callbacks("once memory"),1,"rejected"]],i="pending",r={state:function(){return i},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return r.then(null,e)},pipe:function(){var e=arguments;return he.Deferred(function(t){he.each(n,function(n,i){var r=he.isFunction(e[i[4]])&&e[i[4]];o[i[1]](function(){var e=r&&r.apply(this,arguments);e&&he.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[i[0]+"With"](this,r?[e]:arguments)})}),e=null}).promise()},then:function(t,i,r){function o(t,n,i,r){return function(){var l=this,c=arguments,d=function(){var e,d;if(!(t=s&&(i!==u&&(l=void 0,c=[e]),n.rejectWith(l,c))}};t?f():(he.Deferred.getStackHook&&(f.stackTrace=he.Deferred.getStackHook()),e.setTimeout(f))}}var s=0;return he.Deferred(function(e){n[0][3].add(o(0,e,he.isFunction(r)?r:a,e.notifyWith)),n[1][3].add(o(0,e,he.isFunction(t)?t:a)),n[2][3].add(o(0,e,he.isFunction(i)?i:u))}).promise()},promise:function(e){return null!=e?he.extend(e,r):r}},o={};return he.each(n,function(e,t){var s=t[2],a=t[5];r[t[1]]=s.add,a&&s.add(function(){i=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),r.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,i=Array(n),r=ie.call(arguments),o=he.Deferred(),s=function(e){return function(n){i[e]=this,r[e]=arguments.length>1?ie.call(arguments):n,--t||o.resolveWith(i,r)}};if(t<=1&&(l(e,o.done(s(n)).resolve,o.reject),"pending"===o.state()||he.isFunction(r[n]&&r[n].then)))return o.then();for(;n--;)l(r[n],s(n),o.reject);return o.promise()}});var Ae=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;he.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Ae.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},he.readyException=function(t){e.setTimeout(function(){throw t})};var je=he.Deferred();he.fn.ready=function(e){return je.then(e).catch(function(e){he.readyException(e)}),this},he.extend({isReady:!1,readyWait:1,holdReady:function(e){e?he.readyWait++:he.ready(!0)},ready:function(e){(e===!0?--he.readyWait:he.isReady)||(he.isReady=!0,e!==!0&&--he.readyWait>0||je.resolveWith(te,[he]))}}),he.ready.then=je.then,"complete"===te.readyState||"loading"!==te.readyState&&!te.documentElement.doScroll?e.setTimeout(he.ready):(te.addEventListener("DOMContentLoaded",c),e.addEventListener("load",c));var Ne=function(e,t,n,i,r,o,s){var a=0,u=e.length,l=null==n;if("object"===he.type(n)){r=!0;for(a in n)Ne(e,t,a,n[a],!0,o,s)}else if(void 0!==i&&(r=!0,he.isFunction(i)||(s=!0),l&&(s?(t.call(e,i),t=null):(l=t,t=function(e,t,n){return l.call(he(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){Oe.remove(this,e)})}}),he.extend({queue:function(e,t,n){var i;if(e)return t=(t||"fx")+"queue",i=qe.get(e,t),n&&(!i||he.isArray(n)?i=qe.access(e,t,he.makeArray(n)):i.push(n)),i||[]},dequeue:function(e,t){t=t||"fx";var n=he.queue(e,t),i=n.length,r=n.shift(),o=he._queueHooks(e,t),s=function(){he.dequeue(e,t)};"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete o.stop,r.call(e,s,o)),!i&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return qe.get(e,n)||qe.access(e,n,{empty:he.Callbacks("once memory").add(function(){qe.remove(e,[t+"queue",n])})})}}),he.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Xe=/^$|\/(?:java|ecma)script/i,Ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};Ge.optgroup=Ge.option,Ge.tbody=Ge.tfoot=Ge.colgroup=Ge.caption=Ge.thead,Ge.th=Ge.td;var Ye=/<|&#?\w+;/;!function(){var e=te.createDocumentFragment(),t=e.appendChild(te.createElement("div")),n=te.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),fe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",fe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Qe=te.documentElement,Je=/^key/,Ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\.(.+)|)/;he.event={global:{},add:function(e,t,n,i,r){var o,s,a,u,l,c,d,f,p,h,m,g=qe.get(e);if(g)for(n.handler&&(o=n,n=o.handler,r=o.selector),r&&he.find.matchesSelector(Qe,r),n.guid||(n.guid=he.guid++),(u=g.events)||(u=g.events={}),(s=g.handle)||(s=g.handle=function(t){return"undefined"!=typeof he&&he.event.triggered!==t.type?he.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(Se)||[""],l=t.length;l--;)a=Ze.exec(t[l])||[],p=m=a[1],h=(a[2]||"").split(".").sort(),p&&(d=he.event.special[p]||{},p=(r?d.delegateType:d.bindType)||p,d=he.event.special[p]||{},c=he.extend({type:p,origType:m,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&he.expr.match.needsContext.test(r),namespace:h.join(".")},o),(f=u[p])||(f=u[p]=[],f.delegateCount=0,d.setup&&d.setup.call(e,i,h,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),d.add&&(d.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),r?f.splice(f.delegateCount++,0,c):f.push(c),he.event.global[p]=!0)},remove:function(e,t,n,i,r){var o,s,a,u,l,c,d,f,p,h,m,g=qe.hasData(e)&&qe.get(e);if(g&&(u=g.events)){for(t=(t||"").match(Se)||[""],l=t.length;l--;)if(a=Ze.exec(t[l])||[],p=m=a[1],h=(a[2]||"").split(".").sort(),p){for(d=he.event.special[p]||{},p=(i?d.delegateType:d.bindType)||p,f=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;o--;)c=f[o],!r&&m!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||i&&i!==c.selector&&("**"!==i||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,d.remove&&d.remove.call(e,c));s&&!f.length&&(d.teardown&&d.teardown.call(e,h,g.handle)!==!1||he.removeEvent(e,p,g.handle),delete u[p])}else for(p in u)he.event.remove(e,p+t[l],n,i,!0);he.isEmptyObject(u)&&qe.remove(e,"handle events")}},dispatch:function(e){var t,n,i,r,o,s,a=he.event.fix(e),u=new Array(arguments.length),l=(qe.get(this,"events")||{})[a.type]||[],c=he.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||l.disabled!==!0)){for(o=[],s={},n=0;n-1:he.find(r,this,null,[l]).length),s[r]&&o.push(i);o.length&&a.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,tt=/\s*$/g;he.extend({htmlPrefilter:function(e){return e.replace(et,"<$1>")},clone:function(e,t,n){var i,r,o,s,a=e.cloneNode(!0),u=he.contains(e.ownerDocument,e);if(!(fe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||he.isXMLDoc(e)))for(s=v(a),o=v(e),i=0,r=o.length;i0&&y(s,!u&&v(e,"script")),a},cleanData:function(e){for(var t,n,i,r=he.event.special,o=0;void 0!==(n=e[o]);o++)if(Pe(n)){if(t=n[qe.expando]){if(t.events)for(i in t.events)r[i]?he.event.remove(n,i):he.removeEvent(n,i,t.handle);n[qe.expando]=void 0}n[Oe.expando]&&(n[Oe.expando]=void 0)}}}),he.fn.extend({detach:function(e){return S(this,e,!0)},remove:function(e){return S(this,e)},text:function(e){return Ne(this,function(e){return void 0===e?he.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return D(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.appendChild(e)}})},prepend:function(){return D(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return D(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return D(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(he.cleanData(v(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return he.clone(this,e,t)})},html:function(e){return Ne(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!tt.test(e)&&!Ge[(Ue.exec(e)||["",""])[1].toLowerCase()]){e=he.htmlPrefilter(e);try{for(;n1)}}),he.Tween=R,R.prototype={constructor:R,init:function(e,t,n,i,r,o){this.elem=e,this.prop=n,this.easing=r||he.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=o||(he.cssNumber[n]?"":"px")},cur:function(){var e=R.propHooks[this.prop];return e&&e.get?e.get(this):R.propHooks._default.get(this)},run:function(e){var t,n=R.propHooks[this.prop];return this.options.duration?this.pos=t=he.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=he.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){he.fx.step[e.prop]?he.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[he.cssProps[e.prop]]&&!he.cssHooks[e.prop]?e.elem[e.prop]=e.now:he.style(e.elem,e.prop,e.now+e.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},he.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},he.fx=R.prototype.init,he.fx.step={};var pt,ht,mt=/^(?:toggle|show|hide)$/,gt=/queueHooks$/;he.Animation=he.extend(z,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return h(n.elem,e,Le.exec(t),n),n}]},tweener:function(e,t){he.isFunction(e)?(t=e,e=["*"]):e=e.match(Se);for(var n,i=0,r=e.length;i1)},removeAttr:function(e){return this.each(function(){he.removeAttr(this,e)})}}),he.extend({attr:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?he.prop(e,t,n):(1===o&&he.isXMLDoc(e)||(r=he.attrHooks[t.toLowerCase()]||(he.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void he.removeAttr(e,t):r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:(e.setAttribute(t,n+""),n):r&&"get"in r&&null!==(i=r.get(e,t))?i:(i=he.find.attr(e,t),null==i?void 0:i))},attrHooks:{type:{set:function(e,t){if(!fe.radioValue&&"radio"===t&&he.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i=0,r=t&&t.match(Se);if(r&&1===e.nodeType)for(;n=r[i++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?he.removeAttr(e,n):e.setAttribute(n,n),n}},he.each(he.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||he.find.attr;yt[t]=function(e,t,i){var r,o,s=t.toLowerCase();return i||(o=yt[s],yt[s]=r,r=null!=n(e,t,i)?s:null,yt[s]=o),r}});var bt=/^(?:input|select|textarea|button)$/i,xt=/^(?:a|area)$/i;he.fn.extend({prop:function(e,t){return Ne(this,he.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[he.propFix[e]||e]})}}),he.extend({prop:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&he.isXMLDoc(e)||(t=he.propFix[t]||t,r=he.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:e[t]=n:r&&"get"in r&&null!==(i=r.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=he.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||xt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),fe.optSelected||(he.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),he.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){he.propFix[this.toLowerCase()]=this}),he.fn.extend({addClass:function(e){var t,n,i,r,o,s,a,u=0;if(he.isFunction(e))return this.each(function(t){he(this).addClass(e.call(this,t,U(this)))});if("string"==typeof e&&e)for(t=e.match(Se)||[];n=this[u++];)if(r=U(n),i=1===n.nodeType&&" "+B(r)+" "){for(s=0;o=t[s++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");a=B(i),r!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,i,r,o,s,a,u=0;if(he.isFunction(e))return this.each(function(t){he(this).removeClass(e.call(this,t,U(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(Se)||[];n=this[u++];)if(r=U(n),i=1===n.nodeType&&" "+B(r)+" "){for(s=0;o=t[s++];)for(;i.indexOf(" "+o+" ")>-1;)i=i.replace(" "+o+" "," ");a=B(i),r!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):he.isFunction(e)?this.each(function(n){he(this).toggleClass(e.call(this,n,U(this),t),t)}):this.each(function(){var t,i,r,o;if("string"===n)for(i=0,r=he(this),o=e.match(Se)||[];t=o[i++];)r.hasClass(t)?r.removeClass(t):r.addClass(t);else void 0!==e&&"boolean"!==n||(t=U(this),t&&qe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":qe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,i=0;for(t=" "+e+" ";n=this[i++];)if(1===n.nodeType&&(" "+B(U(n))+" ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g;he.fn.extend({val:function(e){var t,n,i,r=this[0];{if(arguments.length)return i=he.isFunction(e),this.each(function(n){var r;1===this.nodeType&&(r=i?e.call(this,n,he(this).val()):e,null==r?r="":"number"==typeof r?r+="":he.isArray(r)&&(r=he.map(r,function(e){return null==e?"":e+""})),t=he.valHooks[this.type]||he.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))});if(r)return t=he.valHooks[r.type]||he.valHooks[r.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:(n=r.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),he.extend({valHooks:{option:{get:function(e){var t=he.find.attr(e,"value");return null!=t?t:B(he.text(e))}},select:{get:function(e){var t,n,i,r=e.options,o=e.selectedIndex,s="select-one"===e.type,a=s?null:[],u=s?o+1:r.length;for(i=o<0?u:s?o:0;i-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),he.each(["radio","checkbox"],function(){he.valHooks[this]={set:function(e,t){if(he.isArray(t))return e.checked=he.inArray(he(e).val(),t)>-1}},fe.checkOn||(he.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Ct=/^(?:focusinfocus|focusoutblur)$/;he.extend(he.event,{trigger:function(t,n,i,r){var o,s,a,u,l,c,d,f=[i||te],p=le.call(t,"type")?t.type:t,h=le.call(t,"namespace")?t.namespace.split("."):[];if(s=a=i=i||te,3!==i.nodeType&&8!==i.nodeType&&!Ct.test(p+he.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),l=p.indexOf(":")<0&&"on"+p,t=t[he.expando]?t:new he.Event(p,"object"==typeof t&&t),t.isTrigger=r?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:he.makeArray(n,[t]),d=he.event.special[p]||{},r||!d.trigger||d.trigger.apply(i,n)!==!1)){if(!r&&!d.noBubble&&!he.isWindow(i)){for(u=d.delegateType||p,Ct.test(u+p)||(s=s.parentNode);s;s=s.parentNode)f.push(s),a=s;a===(i.ownerDocument||te)&&f.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=f[o++])&&!t.isPropagationStopped();)t.type=o>1?u:d.bindType||p,c=(qe.get(s,"events")||{})[t.type]&&qe.get(s,"handle"),c&&c.apply(s,n),c=l&&s[l],c&&c.apply&&Pe(s)&&(t.result=c.apply(s,n),t.result===!1&&t.preventDefault());return t.type=p,r||t.isDefaultPrevented()||d._default&&d._default.apply(f.pop(),n)!==!1||!Pe(i)||l&&he.isFunction(i[p])&&!he.isWindow(i)&&(a=i[l],a&&(i[l]=null),he.event.triggered=p,i[p](),he.event.triggered=void 0,a&&(i[l]=a)),t.result}},simulate:function(e,t,n){var i=he.extend(new he.Event,n,{type:e,isSimulated:!0});he.event.trigger(i,null,t)}}),he.fn.extend({trigger:function(e,t){return this.each(function(){he.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return he.event.trigger(e,t,n,!0)}}),he.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){he.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),he.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),fe.focusin="onfocusin"in e,fe.focusin||he.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){he.event.simulate(t,e.target,he.event.fix(e))};he.event.special[t]={setup:function(){var i=this.ownerDocument||this,r=qe.access(i,t);r||i.addEventListener(e,n,!0),qe.access(i,t,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=qe.access(i,t)-1;r?qe.access(i,t,r):(i.removeEventListener(e,n,!0),qe.remove(i,t))}}});var _t=e.location,Tt=he.now(),Et=/\?/;he.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||he.error("Invalid XML: "+t),n};var Ft=/\[\]$/,kt=/\r?\n/g,$t=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;he.param=function(e,t){var n,i=[],r=function(e,t){var n=he.isFunction(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(he.isArray(e)||e.jquery&&!he.isPlainObject(e))he.each(e,function(){r(this.name,this.value)});else for(n in e)X(n,e[n],t,r);return i.join("&")},he.fn.extend({serialize:function(){return he.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=he.prop(this,"elements");return e?he.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!he(this).is(":disabled")&&Dt.test(this.nodeName)&&!$t.test(e)&&(this.checked||!Be.test(e))}).map(function(e,t){var n=he(this).val();return null==n?null:he.isArray(n)?he.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var St=/%20/g,At=/#.*$/,jt=/([?&])_=[^&]*/,Nt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,qt=/^(?:GET|HEAD)$/,Ot=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Lt=te.createElement("a");Lt.href=_t.href,he.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:_t.href,type:"GET",isLocal:Pt.test(_t.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":he.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Q(Q(e,he.ajaxSettings),t):Q(he.ajaxSettings,e)},ajaxPrefilter:G(Rt),ajaxTransport:G(Mt),ajax:function(t,n){function i(t,n,i,a){var l,f,p,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),r=void 0,s=a||"",_.readyState=t>0?4:0,l=t>=200&&t<300||304===t,i&&(x=J(h,_,i)),x=K(h,x,_,l),l?(h.ifModified&&(w=_.getResponseHeader("Last-Modified"),w&&(he.lastModified[o]=w),w=_.getResponseHeader("etag"),w&&(he.etag[o]=w)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=x.state,f=x.data,p=x.error,l=!p)):(p=C,!t&&C||(C="error",t<0&&(t=0))),_.status=t,_.statusText=(n||C)+"",l?v.resolveWith(m,[f,C,_]):v.rejectWith(m,[_,C,p]),_.statusCode(b),b=void 0,d&&g.trigger(l?"ajaxSuccess":"ajaxError",[_,h,l?f:p]),y.fireWith(m,[_,C]),d&&(g.trigger("ajaxComplete",[_,h]),--he.active||he.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var r,o,s,a,u,l,c,d,f,p,h=he.ajaxSetup({},n),m=h.context||h,g=h.context&&(m.nodeType||m.jquery)?he(m):he.event,v=he.Deferred(),y=he.Callbacks("once memory"),b=h.statusCode||{},x={},w={},C="canceled",_={readyState:0,getResponseHeader:function(e){var t;if(c){if(!a)for(a={};t=Nt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?s:null},setRequestHeader:function(e,t){return null==c&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,x[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)_.always(e[_.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||C;return r&&r.abort(t),i(0,t),this}};if(v.promise(_),h.url=((t||h.url||_t.href)+"").replace(Ot,_t.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(Se)||[""],null==h.crossDomain){l=te.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Lt.protocol+"//"+Lt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=he.param(h.data,h.traditional)),Y(Rt,h,n,_),c)return _;d=he.event&&h.global,d&&0===he.active++&&he.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!qt.test(h.type),o=h.url.replace(At,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(St,"+")):(p=h.url.slice(o.length),h.data&&(o+=(Et.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(o=o.replace(jt,"$1"),p=(Et.test(o)?"&":"?")+"_="+Tt++ +p),h.url=o+p),h.ifModified&&(he.lastModified[o]&&_.setRequestHeader("If-Modified-Since",he.lastModified[o]),he.etag[o]&&_.setRequestHeader("If-None-Match",he.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&_.setRequestHeader("Content-Type",h.contentType),_.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+It+"; q=0.01":""):h.accepts["*"]);for(f in h.headers)_.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(h.beforeSend.call(m,_,h)===!1||c))return _.abort();if(C="abort",y.add(h.complete),_.done(h.success),_.fail(h.error),r=Y(Mt,h,n,_)){if(_.readyState=1,d&&g.trigger("ajaxSend",[_,h]),c)return _;h.async&&h.timeout>0&&(u=e.setTimeout(function(){_.abort("timeout")},h.timeout));try{c=!1,r.send(x,i)}catch(e){if(c)throw e;i(-1,e)}}else i(-1,"No Transport");return _},getJSON:function(e,t,n){return he.get(e,t,n,"json")},getScript:function(e,t){return he.get(e,void 0,t,"script")}}),he.each(["get","post"],function(e,t){he[t]=function(e,n,i,r){return he.isFunction(n)&&(r=r||i,i=n,n=void 0),he.ajax(he.extend({url:e,type:t,dataType:r,data:n,success:i},he.isPlainObject(e)&&e))}}),he._evalUrl=function(e){return he.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},he.fn.extend({wrapAll:function(e){var t;return this[0]&&(he.isFunction(e)&&(e=e.call(this[0])),t=he(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return he.isFunction(e)?this.each(function(t){he(this).wrapInner(e.call(this,t))}):this.each(function(){var t=he(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=he.isFunction(e);return this.each(function(n){he(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){he(this).replaceWith(this.childNodes)}),this}}),he.expr.pseudos.hidden=function(e){return!he.expr.pseudos.visible(e)},he.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},he.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Ht={0:200,1223:204},Vt=he.ajaxSettings.xhr();fe.cors=!!Vt&&"withCredentials"in Vt,fe.ajax=Vt=!!Vt,he.ajaxTransport(function(t){var n,i;if(fe.cors||Vt&&!t.crossDomain)return{send:function(r,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest");for(s in r)a.setRequestHeader(s,r[s]);n=function(e){return function(){n&&(n=i=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Ht[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),i=a.onerror=n("error"),void 0!==a.onabort?a.onabort=i:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&i()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),he.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),he.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return he.globalEval(e),e}}}),he.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),he.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,r){t=he("