From 507e186713aa5d956d4cd209c3d1c6bb336dfaf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Thu, 23 Feb 2017 18:22:33 +0100 Subject: [PATCH 1/8] FEATURE #2341 @4h: add basics for template --- templates/PragueTennisCamp/Handler.php | 111 + .../Providers/ServiceProvider.php | 24 + .../Resources/assets/css/app.css | 83 + .../Resources/assets/css/foundation.css | 4037 +++++++ .../Resources/assets/css/foundation.min.css | 2 + .../Resources/assets/css/images/bg.png | Bin 0 -> 7165 bytes .../Resources/assets/images/avatar.png | Bin 0 -> 9118 bytes .../Resources/assets/images/logo.png | Bin 0 -> 118220 bytes .../Resources/assets/js/BLightBox.js | 289 + .../Resources/assets/js/app.js | 21 + .../Resources/assets/js/vendor/foundation.js | 8057 ++++++++++++++ .../assets/js/vendor/foundation.min.js | 4 + .../Resources/assets/js/vendor/jquery.js | 9814 +++++++++++++++++ .../Resources/assets/js/vendor/jquery.min.js | 5 + .../Resources/assets/js/vendor/what-input.js | 335 + .../assets/js/vendor/what-input.min.js | 1 + .../contactform/_partials/form.blade.php | 16 + .../contactform/visitor/default.blade.php | 61 + .../visitor/emails/default.blade.php | 0 .../staticpages/visitor/default.blade.php | 14 + .../staticpages/visitor/homepage.blade.php | 50 + .../staticpages/visitor/trainer.blade.php | 19 + .../views/visitor/defaultLayout.blade.php | 68 + .../views/visitor/errors/404.blade.php | 8 + .../views/visitor/errors/503.blade.php | 6 + .../errors/homepageNotAvailable.blade.php | 6 + .../views/visitor/errors/layout.blade.php | 100 + .../views/visitor/metaInformation.blade.php | 9 + .../visitor/widgets/contact/form.blade.php | 8 + templates/PragueTennisCamp/config.php | 9 + 30 files changed, 23157 insertions(+) create mode 100644 templates/PragueTennisCamp/Handler.php create mode 100644 templates/PragueTennisCamp/Providers/ServiceProvider.php create mode 100644 templates/PragueTennisCamp/Resources/assets/css/app.css create mode 100644 templates/PragueTennisCamp/Resources/assets/css/foundation.css create mode 100644 templates/PragueTennisCamp/Resources/assets/css/foundation.min.css create mode 100644 templates/PragueTennisCamp/Resources/assets/css/images/bg.png create mode 100644 templates/PragueTennisCamp/Resources/assets/images/avatar.png create mode 100644 templates/PragueTennisCamp/Resources/assets/images/logo.png create mode 100644 templates/PragueTennisCamp/Resources/assets/js/BLightBox.js create mode 100644 templates/PragueTennisCamp/Resources/assets/js/app.js create mode 100644 templates/PragueTennisCamp/Resources/assets/js/vendor/foundation.js create mode 100644 templates/PragueTennisCamp/Resources/assets/js/vendor/foundation.min.js create mode 100644 templates/PragueTennisCamp/Resources/assets/js/vendor/jquery.js create mode 100644 templates/PragueTennisCamp/Resources/assets/js/vendor/jquery.min.js create mode 100644 templates/PragueTennisCamp/Resources/assets/js/vendor/what-input.js create mode 100644 templates/PragueTennisCamp/Resources/assets/js/vendor/what-input.min.js create mode 100644 templates/PragueTennisCamp/Resources/views/modules/contactform/_partials/form.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/modules/contactform/visitor/default.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/modules/contactform/visitor/emails/default.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/modules/staticpages/visitor/default.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/modules/staticpages/visitor/homepage.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/modules/staticpages/visitor/trainer.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/visitor/defaultLayout.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/visitor/errors/404.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/visitor/errors/503.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/visitor/errors/homepageNotAvailable.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/visitor/errors/layout.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/visitor/metaInformation.blade.php create mode 100644 templates/PragueTennisCamp/Resources/views/visitor/widgets/contact/form.blade.php create mode 100644 templates/PragueTennisCamp/config.php diff --git a/templates/PragueTennisCamp/Handler.php b/templates/PragueTennisCamp/Handler.php new file mode 100644 index 00000000..08b377c8 --- /dev/null +++ b/templates/PragueTennisCamp/Handler.php @@ -0,0 +1,111 @@ + 0, 'code' => 'mainMenu', 'name' => 'Menu']); + } + + /** + * Uninstall template + * + * Delete some items in database, delete files etc. + * + * @param Module $template + */ + public static function uninstall(Module $template) + { + WidgetArea::where('code', 'mainMenu') + ->delete(); + } + + /** + * Get list of registered templates and supported modules. + * + * Returned array is expected to be array of arrays with following items: module, namespace and templateName. + * Example: + * return [ + * ['module' => 'Article', 'templateName' => 'article::template.name'] + * ]; + * + * When no "namespace" is specified, value strtolower(module) is used instaed. + * + * @return array + */ + public static function getPublicTemplatePaths() + { + return [ + [ + 'module' => 'StaticPages', + 'templateName' => 'staticpages::admin.templatePath' + ], + [ + 'module' => 'ContactForm', + 'templateName' => 'contactform::admin/adminMenu.templatePath' + ], + ]; + } + + /** + * Prepare Content object to be rendered using Blade template + * + * @param Content $content + */ + public static function beforeRender(Content & $content) + { + if ($content->isHomepage) { + $category = Category::where('url', 'trenersky-tym') + ->first(); + + $content->traineeTeamCategory = $category; + } + } + + /** + * Modify input data into format which can be understood by edit template + * + * @param Content $content + */ + public static function beforePopulatingEditForm(Content & $content) + { + } + + /** + * Slightly modify Content object before saving into database. + * + * This way we can do almost whatever we want - even in template + * + * @param Content $content + * @param $request + */ + public static function beforeSave(Content & $content, $inputData) + { + } +} \ No newline at end of file diff --git a/templates/PragueTennisCamp/Providers/ServiceProvider.php b/templates/PragueTennisCamp/Providers/ServiceProvider.php new file mode 100644 index 00000000..798462ba --- /dev/null +++ b/templates/PragueTennisCamp/Providers/ServiceProvider.php @@ -0,0 +1,24 @@ + [type='checkbox'], +label > [type='radio'] { + margin-right: 0.5rem; } + +[type='file'] { + width: 100%; } + +label { + display: block; + margin: 0; + font-size: 0.875rem; + font-weight: normal; + line-height: 1.8; + color: #0a0a0a; } + label.middle { + margin: 0 0 1rem; + padding: 0.5625rem 0; } + +.help-text { + margin-top: -0.5rem; + font-size: 0.8125rem; + font-style: italic; + color: #0a0a0a; } + +.input-group { + display: table; + width: 100%; + margin-bottom: 1rem; } + .input-group > :first-child { + border-radius: 3px 0 0 3px; } + .input-group > :last-child > * { + border-radius: 0 3px 3px 0; } + +.input-group-label, .input-group-field, .input-group-button, .input-group-button a, +.input-group-button input, +.input-group-button button, +.input-group-button label { + margin: 0; + white-space: nowrap; + display: table-cell; + vertical-align: middle; } + +.input-group-label { + padding: 0 1rem; + border: 1px solid #cacaca; + background: #e6e6e6; + color: #0a0a0a; + text-align: center; + white-space: nowrap; + width: 1%; + height: 100%; } + .input-group-label:first-child { + border-right: 0; } + .input-group-label:last-child { + border-left: 0; } + +.input-group-field { + border-radius: 0; + height: 2.5rem; } + +.input-group-button { + padding-top: 0; + padding-bottom: 0; + text-align: center; + width: 1%; + height: 100%; } + .input-group-button a, + .input-group-button input, + .input-group-button button, + .input-group-button label { + height: 2.5rem; + padding-top: 0; + padding-bottom: 0; + font-size: 1rem; } + +.input-group .input-group-button { + display: table-cell; } + +fieldset { + margin: 0; + padding: 0; + border: 0; } + +legend { + max-width: 100%; + margin-bottom: 0.5rem; } + +.fieldset { + margin: 1.125rem 0; + padding: 1.25rem; + border: 1px solid #cacaca; } + .fieldset legend { + margin: 0; + margin-left: -0.1875rem; + padding: 0 0.1875rem; + background: #fefefe; } + +select { + height: 2.4375rem; + margin: 0 0 1rem; + padding: 0.5rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: 1px solid #cacaca; + border-radius: 3px; + background-color: #fefefe; + font-family: inherit; + font-size: 1rem; + line-height: normal; + color: #0a0a0a; + background-image: url("data:image/svg+xml;utf8,"); + background-origin: content-box; + background-position: right -1rem center; + background-repeat: no-repeat; + background-size: 9px 6px; + padding-right: 1.5rem; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; } + @media screen and (min-width: 0\0) { + select { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg=="); } } + select:focus { + outline: none; + border: 1px solid #8a8a8a; + background-color: #fefefe; + box-shadow: 0 0 5px #cacaca; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; } + select:disabled { + background-color: #e6e6e6; + cursor: not-allowed; } + select::-ms-expand { + display: none; } + select[multiple] { + height: auto; + background-image: none; } + +.is-invalid-input:not(:focus) { + border-color: #c60f13; + background-color: #f8e6e7; } + .is-invalid-input:not(:focus)::-webkit-input-placeholder { + color: #c60f13; } + .is-invalid-input:not(:focus)::-moz-placeholder { + color: #c60f13; } + .is-invalid-input:not(:focus):-ms-input-placeholder { + color: #c60f13; } + .is-invalid-input:not(:focus)::placeholder { + color: #c60f13; } + +.is-invalid-label { + color: #c60f13; } + +.form-error { + display: none; + margin-top: -0.5rem; + margin-bottom: 1rem; + font-size: 0.75rem; + font-weight: bold; + color: #c60f13; } + .form-error.is-visible { + display: block; } + +.float-left { + float: left !important; } + +.float-right { + float: right !important; } + +.float-center { + display: block; + margin-right: auto; + margin-left: auto; } + +.clearfix::before, .clearfix::after { + display: table; + content: ' '; } + +.clearfix::after { + clear: both; } + +.hide { + display: none !important; } + +.invisible { + visibility: hidden; } + +@media screen and (max-width: 39.9375em) { + .hide-for-small-only { + display: none !important; } } + +@media screen and (max-width: 0em), screen and (min-width: 40em) { + .show-for-small-only { + display: none !important; } } + +@media print, screen and (min-width: 40em) { + .hide-for-medium { + display: none !important; } } + +@media screen and (max-width: 39.9375em) { + .show-for-medium { + display: none !important; } } + +@media screen and (min-width: 40em) and (max-width: 63.9375em) { + .hide-for-medium-only { + display: none !important; } } + +@media screen and (max-width: 39.9375em), screen and (min-width: 64em) { + .show-for-medium-only { + display: none !important; } } + +@media print, screen and (min-width: 64em) { + .hide-for-large { + display: none !important; } } + +@media screen and (max-width: 63.9375em) { + .show-for-large { + display: none !important; } } + +@media screen and (min-width: 64em) and (max-width: 74.9375em) { + .hide-for-large-only { + display: none !important; } } + +@media screen and (max-width: 63.9375em), screen and (min-width: 75em) { + .show-for-large-only { + display: none !important; } } + +.show-for-sr, +.show-on-focus { + position: absolute !important; + width: 1px; + height: 1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); } + +.show-on-focus:active, .show-on-focus:focus { + position: static !important; + width: auto; + height: auto; + overflow: visible; + clip: auto; } + +.show-for-landscape, +.hide-for-portrait { + display: block !important; } + @media screen and (orientation: landscape) { + .show-for-landscape, + .hide-for-portrait { + display: block !important; } } + @media screen and (orientation: portrait) { + .show-for-landscape, + .hide-for-portrait { + display: none !important; } } + +.hide-for-landscape, +.show-for-portrait { + display: none !important; } + @media screen and (orientation: landscape) { + .hide-for-landscape, + .show-for-portrait { + display: none !important; } } + @media screen and (orientation: portrait) { + .hide-for-landscape, + .show-for-portrait { + display: block !important; } } + +.button { + display: inline-block; + vertical-align: middle; + margin: 0 0 1rem 0; + padding: 0.85em 1em; + -webkit-appearance: none; + border: 1px solid transparent; + border-radius: 3px; + transition: background-color 0.25s ease-out, color 0.25s ease-out; + font-size: 0.9rem; + line-height: 1; + text-align: center; + cursor: pointer; + background-color: #2ba6cb; + color: #fefefe; } + [data-whatinput='mouse'] .button { + outline: 0; } + .button:hover, .button:focus { + background-color: #258dad; + color: #fefefe; } + .button.tiny { + font-size: 0.6rem; } + .button.small { + font-size: 0.75rem; } + .button.large { + font-size: 1.25rem; } + .button.expanded { + display: block; + width: 100%; + margin-right: 0; + margin-left: 0; } + .button.primary { + background-color: #2ba6cb; + color: #0a0a0a; } + .button.primary:hover, .button.primary:focus { + background-color: #2285a2; + color: #0a0a0a; } + .button.secondary { + background-color: #e9e9e9; + color: #0a0a0a; } + .button.secondary:hover, .button.secondary:focus { + background-color: #bababa; + color: #0a0a0a; } + .button.alert { + background-color: #c60f13; + color: #fefefe; } + .button.alert:hover, .button.alert:focus { + background-color: #9e0c0f; + color: #fefefe; } + .button.success { + background-color: #5da423; + color: #0a0a0a; } + .button.success:hover, .button.success:focus { + background-color: #4a831c; + color: #0a0a0a; } + .button.warning { + background-color: #ffae00; + color: #0a0a0a; } + .button.warning:hover, .button.warning:focus { + background-color: #cc8b00; + color: #0a0a0a; } + .button.body-font { + background-color: #222222; + color: #fefefe; } + .button.body-font:hover, .button.body-font:focus { + background-color: #1b1b1b; + color: #fefefe; } + .button.header { + background-color: #222222; + color: #fefefe; } + .button.header:hover, .button.header:focus { + background-color: #1b1b1b; + color: #fefefe; } + .button.hollow { + border: 1px solid #2ba6cb; + color: #2ba6cb; } + .button.hollow, .button.hollow:hover, .button.hollow:focus { + background-color: transparent; } + .button.hollow:hover, .button.hollow:focus { + border-color: #165366; + color: #165366; } + .button.hollow.primary { + border: 1px solid #2ba6cb; + color: #2ba6cb; } + .button.hollow.primary:hover, .button.hollow.primary:focus { + border-color: #165366; + color: #165366; } + .button.hollow.secondary { + border: 1px solid #e9e9e9; + color: #e9e9e9; } + .button.hollow.secondary:hover, .button.hollow.secondary:focus { + border-color: #757575; + color: #757575; } + .button.hollow.alert { + border: 1px solid #c60f13; + color: #c60f13; } + .button.hollow.alert:hover, .button.hollow.alert:focus { + border-color: #63080a; + color: #63080a; } + .button.hollow.success { + border: 1px solid #5da423; + color: #5da423; } + .button.hollow.success:hover, .button.hollow.success:focus { + border-color: #2f5212; + color: #2f5212; } + .button.hollow.warning { + border: 1px solid #ffae00; + color: #ffae00; } + .button.hollow.warning:hover, .button.hollow.warning:focus { + border-color: #805700; + color: #805700; } + .button.hollow.body-font { + border: 1px solid #222222; + color: #222222; } + .button.hollow.body-font:hover, .button.hollow.body-font:focus { + border-color: #111111; + color: #111111; } + .button.hollow.header { + border: 1px solid #222222; + color: #222222; } + .button.hollow.header:hover, .button.hollow.header:focus { + border-color: #111111; + color: #111111; } + .button.disabled, .button[disabled] { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: #2ba6cb; + color: #fefefe; } + .button.disabled.primary, .button[disabled].primary { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.primary:hover, .button.disabled.primary:focus, .button[disabled].primary:hover, .button[disabled].primary:focus { + background-color: #2ba6cb; + color: #fefefe; } + .button.disabled.secondary, .button[disabled].secondary { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #e9e9e9; + color: #fefefe; } + .button.disabled.alert, .button[disabled].alert { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #c60f13; + color: #fefefe; } + .button.disabled.success, .button[disabled].success { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #5da423; + color: #fefefe; } + .button.disabled.warning, .button[disabled].warning { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning:hover, .button[disabled].warning:focus { + background-color: #ffae00; + color: #fefefe; } + .button.disabled.body-font, .button[disabled].body-font { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.body-font:hover, .button.disabled.body-font:focus, .button[disabled].body-font:hover, .button[disabled].body-font:focus { + background-color: #222222; + color: #fefefe; } + .button.disabled.header, .button[disabled].header { + opacity: 0.25; + cursor: not-allowed; } + .button.disabled.header:hover, .button.disabled.header:focus, .button[disabled].header:hover, .button[disabled].header:focus { + background-color: #222222; + color: #fefefe; } + .button.dropdown::after { + display: block; + width: 0; + height: 0; + border: inset 0.4em; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #fefefe transparent transparent; + position: relative; + top: 0.4em; + display: inline-block; + float: right; + margin-left: 1em; } + .button.arrow-only::after { + top: -0.1em; + float: none; + margin-left: 0; } + +.close-button { + position: absolute; + color: #8a8a8a; + cursor: pointer; } + [data-whatinput='mouse'] .close-button { + outline: 0; } + .close-button:hover, .close-button:focus { + color: #0a0a0a; } + .close-button.small { + right: 0.66rem; + top: 0.33em; + font-size: 1.5em; + line-height: 1; } + .close-button, .close-button.medium { + right: 1rem; + top: 0.5rem; + font-size: 2em; + line-height: 1; } + +.button-group { + margin-bottom: 1rem; + font-size: 0; } + .button-group::before, .button-group::after { + display: table; + content: ' '; } + .button-group::after { + clear: both; } + .button-group .button { + margin: 0; + margin-right: 1px; + margin-bottom: 1px; + font-size: 0.9rem; } + .button-group .button:last-child { + margin-right: 0; } + .button-group.tiny .button { + font-size: 0.6rem; } + .button-group.small .button { + font-size: 0.75rem; } + .button-group.large .button { + font-size: 1.25rem; } + .button-group.expanded { + margin-right: -1px; } + .button-group.expanded::before, .button-group.expanded::after { + display: none; } + .button-group.expanded .button:first-child:nth-last-child(2), .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button { + display: inline-block; + width: calc(50% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(2):last-child, .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button:last-child { + margin-right: -6px; } + .button-group.expanded .button:first-child:nth-last-child(3), .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button { + display: inline-block; + width: calc(33.33333% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(3):last-child, .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button:last-child { + margin-right: -6px; } + .button-group.expanded .button:first-child:nth-last-child(4), .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button { + display: inline-block; + width: calc(25% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(4):last-child, .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button:last-child { + margin-right: -6px; } + .button-group.expanded .button:first-child:nth-last-child(5), .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button { + display: inline-block; + width: calc(20% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(5):last-child, .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button:last-child { + margin-right: -6px; } + .button-group.expanded .button:first-child:nth-last-child(6), .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button { + display: inline-block; + width: calc(16.66667% - 1px); + margin-right: 1px; } + .button-group.expanded .button:first-child:nth-last-child(6):last-child, .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button:last-child { + margin-right: -6px; } + .button-group.primary .button { + background-color: #2ba6cb; + color: #0a0a0a; } + .button-group.primary .button:hover, .button-group.primary .button:focus { + background-color: #2285a2; + color: #0a0a0a; } + .button-group.secondary .button { + background-color: #e9e9e9; + color: #0a0a0a; } + .button-group.secondary .button:hover, .button-group.secondary .button:focus { + background-color: #bababa; + color: #0a0a0a; } + .button-group.alert .button { + background-color: #c60f13; + color: #fefefe; } + .button-group.alert .button:hover, .button-group.alert .button:focus { + background-color: #9e0c0f; + color: #fefefe; } + .button-group.success .button { + background-color: #5da423; + color: #0a0a0a; } + .button-group.success .button:hover, .button-group.success .button:focus { + background-color: #4a831c; + color: #0a0a0a; } + .button-group.warning .button { + background-color: #ffae00; + color: #0a0a0a; } + .button-group.warning .button:hover, .button-group.warning .button:focus { + background-color: #cc8b00; + color: #0a0a0a; } + .button-group.body-font .button { + background-color: #222222; + color: #fefefe; } + .button-group.body-font .button:hover, .button-group.body-font .button:focus { + background-color: #1b1b1b; + color: #fefefe; } + .button-group.header .button { + background-color: #222222; + color: #fefefe; } + .button-group.header .button:hover, .button-group.header .button:focus { + background-color: #1b1b1b; + color: #fefefe; } + .button-group.stacked .button, .button-group.stacked-for-small .button, .button-group.stacked-for-medium .button { + width: 100%; } + .button-group.stacked .button:last-child, .button-group.stacked-for-small .button:last-child, .button-group.stacked-for-medium .button:last-child { + margin-bottom: 0; } + @media print, screen and (min-width: 40em) { + .button-group.stacked-for-small .button { + width: auto; + margin-bottom: 0; } } + @media print, screen and (min-width: 64em) { + .button-group.stacked-for-medium .button { + width: auto; + margin-bottom: 0; } } + @media screen and (max-width: 39.9375em) { + .button-group.stacked-for-small.expanded { + display: block; } + .button-group.stacked-for-small.expanded .button { + display: block; + margin-right: 0; } } + +.slider { + position: relative; + height: 0.5rem; + margin-top: 1.25rem; + margin-bottom: 2.25rem; + background-color: #e6e6e6; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -ms-touch-action: none; + touch-action: none; } + +.slider-fill { + position: absolute; + top: 0; + left: 0; + display: inline-block; + max-width: 100%; + height: 0.5rem; + background-color: #cacaca; + transition: all 0.2s ease-in-out; } + .slider-fill.is-dragging { + transition: all 0s linear; } + +.slider-handle { + position: absolute; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); + position: absolute; + left: 0; + z-index: 1; + display: inline-block; + width: 1.4rem; + height: 1.4rem; + border-radius: 3px; + background-color: #2ba6cb; + transition: all 0.2s ease-in-out; + -ms-touch-action: manipulation; + touch-action: manipulation; } + [data-whatinput='mouse'] .slider-handle { + outline: 0; } + .slider-handle:hover { + background-color: #258dad; } + .slider-handle.is-dragging { + transition: all 0s linear; } + +.slider.disabled, +.slider[disabled] { + opacity: 0.25; + cursor: not-allowed; } + +.slider.vertical { + display: inline-block; + width: 0.5rem; + height: 12.5rem; + margin: 0 1.25rem; + -ms-transform: scale(1, -1); + transform: scale(1, -1); } + .slider.vertical .slider-fill { + top: 0; + width: 0.5rem; + max-height: 100%; } + .slider.vertical .slider-handle { + position: absolute; + top: 0; + left: 50%; + width: 1.4rem; + height: 1.4rem; + -ms-transform: translateX(-50%); + transform: translateX(-50%); } + +.switch { + height: 2rem; + position: relative; + margin-bottom: 1rem; + outline: 0; + font-size: 0.875rem; + font-weight: bold; + color: #fefefe; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.switch-input { + position: absolute; + margin-bottom: 0; + opacity: 0; } + +.switch-paddle { + position: relative; + display: block; + width: 4rem; + height: 2rem; + border-radius: 3px; + background: #cacaca; + transition: all 0.25s ease-out; + font-weight: inherit; + color: inherit; + cursor: pointer; } + input + .switch-paddle { + margin: 0; } + .switch-paddle::after { + position: absolute; + top: 0.25rem; + left: 0.25rem; + display: block; + width: 1.5rem; + height: 1.5rem; + transform: translate3d(0, 0, 0); + border-radius: 3px; + background: #fefefe; + transition: all 0.25s ease-out; + content: ''; } + input:checked ~ .switch-paddle { + background: #2ba6cb; } + input:checked ~ .switch-paddle::after { + left: 2.25rem; } + [data-whatinput='mouse'] input:focus ~ .switch-paddle { + outline: 0; } + +.switch-active, .switch-inactive { + position: absolute; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + +.switch-active { + left: 8%; + display: none; } + input:checked + label > .switch-active { + display: block; } + +.switch-inactive { + right: 15%; } + input:checked + label > .switch-inactive { + display: none; } + +.switch.tiny { + height: 1.5rem; } + .switch.tiny .switch-paddle { + width: 3rem; + height: 1.5rem; + font-size: 0.625rem; } + .switch.tiny .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 1rem; + height: 1rem; } + .switch.tiny input:checked ~ .switch-paddle::after { + left: 1.75rem; } + +.switch.small { + height: 1.75rem; } + .switch.small .switch-paddle { + width: 3.5rem; + height: 1.75rem; + font-size: 0.75rem; } + .switch.small .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 1.25rem; + height: 1.25rem; } + .switch.small input:checked ~ .switch-paddle::after { + left: 2rem; } + +.switch.large { + height: 2.5rem; } + .switch.large .switch-paddle { + width: 5rem; + height: 2.5rem; + font-size: 1rem; } + .switch.large .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 2rem; + height: 2rem; } + .switch.large input:checked ~ .switch-paddle::after { + left: 2.75rem; } + +.menu { + margin: 0; + list-style-type: none; } + .menu > li { + display: table-cell; + vertical-align: middle; } + [data-whatinput='mouse'] .menu > li { + outline: 0; } + .menu > li > a { + display: block; + padding: 0.7rem 1rem; + line-height: 1; } + .menu input, + .menu select, + .menu a, + .menu button { + margin-bottom: 0; } + .menu > li > a img, + .menu > li > a i, + .menu > li > a svg { + vertical-align: middle; } + .menu > li > a img + span, + .menu > li > a i + span, + .menu > li > a svg + span { + vertical-align: middle; } + .menu > li > a img, + .menu > li > a i, + .menu > li > a svg { + margin-right: 0.25rem; + display: inline-block; } + .menu > li, .menu.horizontal > li { + display: table-cell; } + .menu.expanded { + display: table; + width: 100%; + table-layout: fixed; } + .menu.expanded > li:first-child:last-child { + width: 100%; } + .menu.vertical > li { + display: block; } + @media print, screen and (min-width: 40em) { + .menu.medium-horizontal > li { + display: table-cell; } + .menu.medium-expanded { + display: table; + width: 100%; + table-layout: fixed; } + .menu.medium-expanded > li:first-child:last-child { + width: 100%; } + .menu.medium-vertical > li { + display: block; } } + @media print, screen and (min-width: 64em) { + .menu.large-horizontal > li { + display: table-cell; } + .menu.large-expanded { + display: table; + width: 100%; + table-layout: fixed; } + .menu.large-expanded > li:first-child:last-child { + width: 100%; } + .menu.large-vertical > li { + display: block; } } + .menu.simple li { + display: inline-block; + margin-right: 1rem; + line-height: 1; } + .menu.simple a { + padding: 0; } + .menu.align-right::before, .menu.align-right::after { + display: table; + content: ' '; } + .menu.align-right::after { + clear: both; } + .menu.align-right > li { + float: right; } + .menu.icon-top > li > a { + text-align: center; } + .menu.icon-top > li > a img, + .menu.icon-top > li > a i, + .menu.icon-top > li > a svg { + display: block; + margin: 0 auto 0.25rem; } + .menu.icon-top.vertical a > span { + margin: auto; } + .menu.nested { + margin-left: 1rem; } + .menu .active > a { + background: #2ba6cb; + color: #fefefe; } + .menu.menu-bordered li { + border: 1px solid #e6e6e6; } + .menu.menu-bordered li:not(:first-child) { + border-top: 0; } + .menu.menu-hover li:hover { + background-color: #e6e6e6; } + +.menu-text { + padding-top: 0; + padding-bottom: 0; + padding: 0.7rem 1rem; + font-weight: bold; + line-height: 1; + color: inherit; } + +.menu-centered { + text-align: center; } + .menu-centered > .menu { + display: inline-block; } + +.no-js [data-responsive-menu] ul { + display: none; } + +.is-drilldown { + position: relative; + overflow: hidden; } + .is-drilldown li { + display: block; } + .is-drilldown.animate-height { + transition: height 0.5s; } + +.is-drilldown-submenu { + position: absolute; + top: 0; + left: 100%; + z-index: -1; + width: 100%; + background: #fefefe; + transition: transform 0.15s linear; } + .is-drilldown-submenu.is-active { + z-index: 1; + display: block; + -ms-transform: translateX(-100%); + transform: translateX(-100%); } + .is-drilldown-submenu.is-closing { + -ms-transform: translateX(100%); + transform: translateX(100%); } + +.drilldown-submenu-cover-previous { + min-height: 100%; } + +.is-drilldown-submenu-parent > a { + position: relative; } + .is-drilldown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #2ba6cb; + position: absolute; + top: 50%; + margin-top: -6px; + right: 1rem; } + +.js-drilldown-back > a::before { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #2ba6cb transparent transparent; + border-left-width: 0; + display: inline-block; + vertical-align: middle; + margin-right: 0.75rem; + border-left-width: 0; } + +.is-accordion-submenu-parent > a { + position: relative; } + .is-accordion-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #2ba6cb transparent transparent; + position: absolute; + top: 50%; + margin-top: -3px; + right: 1rem; } + +.is-accordion-submenu-parent[aria-expanded='true'] > a::after { + -ms-transform: rotate(180deg); + transform: rotate(180deg); + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; } + +.dropdown.menu > li.opens-left > .is-dropdown-submenu { + top: 100%; + right: 0; + left: auto; } + +.dropdown.menu > li.opens-right > .is-dropdown-submenu { + top: 100%; + right: auto; + left: 0; } + +.dropdown.menu > li.is-dropdown-submenu-parent > a { + position: relative; + padding-right: 1.5rem; } + +.dropdown.menu > li.is-dropdown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #2ba6cb transparent transparent; + right: 5px; + margin-top: -3px; } + +[data-whatinput='mouse'] .dropdown.menu a { + outline: 0; } + +.no-js .dropdown.menu ul { + display: none; } + +.dropdown.menu.vertical > li .is-dropdown-submenu { + top: 0; } + +.dropdown.menu.vertical > li.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } + +.dropdown.menu.vertical > li.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + +.dropdown.menu.vertical > li > a::after { + right: 14px; } + +.dropdown.menu.vertical > li.opens-left > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #2ba6cb transparent transparent; } + +.dropdown.menu.vertical > li.opens-right > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #2ba6cb; } + +@media print, screen and (min-width: 40em) { + .dropdown.menu.medium-horizontal > li.opens-left > .is-dropdown-submenu { + top: 100%; + right: 0; + left: auto; } + .dropdown.menu.medium-horizontal > li.opens-right > .is-dropdown-submenu { + top: 100%; + right: auto; + left: 0; } + .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a { + position: relative; + padding-right: 1.5rem; } + .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #2ba6cb transparent transparent; + right: 5px; + margin-top: -3px; } + .dropdown.menu.medium-vertical > li .is-dropdown-submenu { + top: 0; } + .dropdown.menu.medium-vertical > li.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } + .dropdown.menu.medium-vertical > li.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + .dropdown.menu.medium-vertical > li > a::after { + right: 14px; } + .dropdown.menu.medium-vertical > li.opens-left > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #2ba6cb transparent transparent; } + .dropdown.menu.medium-vertical > li.opens-right > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #2ba6cb; } } + +@media print, screen and (min-width: 64em) { + .dropdown.menu.large-horizontal > li.opens-left > .is-dropdown-submenu { + top: 100%; + right: 0; + left: auto; } + .dropdown.menu.large-horizontal > li.opens-right > .is-dropdown-submenu { + top: 100%; + right: auto; + left: 0; } + .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a { + position: relative; + padding-right: 1.5rem; } + .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #2ba6cb transparent transparent; + right: 5px; + margin-top: -3px; } + .dropdown.menu.large-vertical > li .is-dropdown-submenu { + top: 0; } + .dropdown.menu.large-vertical > li.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } + .dropdown.menu.large-vertical > li.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + .dropdown.menu.large-vertical > li > a::after { + right: 14px; } + .dropdown.menu.large-vertical > li.opens-left > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #2ba6cb transparent transparent; } + .dropdown.menu.large-vertical > li.opens-right > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #2ba6cb; } } + +.dropdown.menu.align-right .is-dropdown-submenu.first-sub { + top: 100%; + right: 0; + left: auto; } + +.is-dropdown-menu.vertical { + width: 100px; } + .is-dropdown-menu.vertical.align-right { + float: right; } + +.is-dropdown-submenu-parent { + position: relative; } + .is-dropdown-submenu-parent a::after { + position: absolute; + top: 50%; + right: 5px; + margin-top: -6px; } + .is-dropdown-submenu-parent.opens-inner > .is-dropdown-submenu { + top: 100%; + left: auto; } + .is-dropdown-submenu-parent.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } + .is-dropdown-submenu-parent.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + +.is-dropdown-submenu { + position: absolute; + top: 0; + left: 100%; + z-index: 1; + display: none; + min-width: 200px; + border: 1px solid #cacaca; + background: #fefefe; } + .is-dropdown-submenu .is-dropdown-submenu-parent > a::after { + right: 14px; } + .is-dropdown-submenu .is-dropdown-submenu-parent.opens-left > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #2ba6cb transparent transparent; } + .is-dropdown-submenu .is-dropdown-submenu-parent.opens-right > a::after { + display: block; + width: 0; + height: 0; + border: inset 6px; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #2ba6cb; } + .is-dropdown-submenu .is-dropdown-submenu { + margin-top: -1px; } + .is-dropdown-submenu > li { + width: 100%; } + .is-dropdown-submenu.js-dropdown-active { + display: block; } + +.title-bar { + padding: 0.5rem; + background: #0a0a0a; + color: #fefefe; } + .title-bar::before, .title-bar::after { + display: table; + content: ' '; } + .title-bar::after { + clear: both; } + .title-bar .menu-icon { + margin-left: 0.25rem; + margin-right: 0.25rem; } + +.title-bar-left { + float: left; } + +.title-bar-right { + float: right; + text-align: right; } + +.title-bar-title { + display: inline-block; + vertical-align: middle; + font-weight: bold; } + +.top-bar { + padding: 0.5rem; } + .top-bar::before, .top-bar::after { + display: table; + content: ' '; } + .top-bar::after { + clear: both; } + .top-bar, + .top-bar ul { + background-color: #e6e6e6; } + .top-bar input { + max-width: 200px; + margin-right: 1rem; } + .top-bar .input-group-field { + width: 100%; + margin-right: 0; } + .top-bar input.button { + width: auto; } + .top-bar .top-bar-left, + .top-bar .top-bar-right { + width: 100%; } + @media print, screen and (min-width: 40em) { + .top-bar .top-bar-left, + .top-bar .top-bar-right { + width: auto; } } + @media screen and (max-width: 63.9375em) { + .top-bar.stacked-for-medium .top-bar-left, + .top-bar.stacked-for-medium .top-bar-right { + width: 100%; } } + @media screen and (max-width: 74.9375em) { + .top-bar.stacked-for-large .top-bar-left, + .top-bar.stacked-for-large .top-bar-right { + width: 100%; } } + +.top-bar-title { + display: inline-block; + float: left; + padding: 0.5rem 1rem 0.5rem 0; } + .top-bar-title .menu-icon { + bottom: 2px; } + +.top-bar-left { + float: left; } + +.top-bar-right { + float: right; } + +.breadcrumbs { + margin: 0 0 1rem 0; + list-style: none; } + .breadcrumbs::before, .breadcrumbs::after { + display: table; + content: ' '; } + .breadcrumbs::after { + clear: both; } + .breadcrumbs li { + float: left; + font-size: 0.6875rem; + color: #0a0a0a; + cursor: default; + text-transform: uppercase; } + .breadcrumbs li:not(:last-child)::after { + position: relative; + top: 1px; + margin: 0 0.75rem; + opacity: 1; + content: "/"; + color: #cacaca; } + .breadcrumbs a { + color: #2ba6cb; } + .breadcrumbs a:hover { + text-decoration: underline; } + .breadcrumbs .disabled { + color: #cacaca; + cursor: not-allowed; } + +.pagination { + margin-left: 0; + margin-bottom: 1rem; } + .pagination::before, .pagination::after { + display: table; + content: ' '; } + .pagination::after { + clear: both; } + .pagination li { + margin-right: 0.0625rem; + border-radius: 3px; + font-size: 0.875rem; + display: none; } + .pagination li:last-child, .pagination li:first-child { + display: inline-block; } + @media print, screen and (min-width: 40em) { + .pagination li { + display: inline-block; } } + .pagination a, + .pagination button { + display: block; + padding: 0.1875rem 0.625rem; + border-radius: 3px; + color: #0a0a0a; } + .pagination a:hover, + .pagination button:hover { + background: #e6e6e6; } + .pagination .current { + padding: 0.1875rem 0.625rem; + background: #2ba6cb; + color: #fefefe; + cursor: default; } + .pagination .disabled { + padding: 0.1875rem 0.625rem; + color: #cacaca; + cursor: not-allowed; } + .pagination .disabled:hover { + background: transparent; } + .pagination .ellipsis::after { + padding: 0.1875rem 0.625rem; + content: '\2026'; + color: #0a0a0a; } + +.pagination-previous a::before, +.pagination-previous.disabled::before { + display: inline-block; + margin-right: 0.5rem; + content: '\00ab'; } + +.pagination-next a::after, +.pagination-next.disabled::after { + display: inline-block; + margin-left: 0.5rem; + content: '\00bb'; } + +.dropdown-pane { + position: absolute; + z-index: 10; + display: block; + width: 300px; + padding: 1rem; + visibility: hidden; + border: 1px solid #cacaca; + border-radius: 3px; + background-color: #fefefe; + font-size: 1rem; } + .dropdown-pane.is-open { + visibility: visible; } + +.dropdown-pane.tiny { + width: 100px; } + +.dropdown-pane.small { + width: 200px; } + +.dropdown-pane.large { + width: 400px; } + +.callout { + position: relative; + margin: 0 0 1rem 0; + padding: 1rem; + border: 1px solid rgba(10, 10, 10, 0.25); + border-radius: 3px; + background-color: white; + color: #0a0a0a; } + .callout > :first-child { + margin-top: 0; } + .callout > :last-child { + margin-bottom: 0; } + .callout.primary { + background-color: #def2f8; + color: #0a0a0a; } + .callout.secondary { + background-color: #fcfcfc; + color: #0a0a0a; } + .callout.alert { + background-color: #fcd6d6; + color: #0a0a0a; } + .callout.success { + background-color: #e6f7d9; + color: #0a0a0a; } + .callout.warning { + background-color: #fff3d9; + color: #0a0a0a; } + .callout.body-font { + background-color: #dedede; + color: #0a0a0a; } + .callout.header { + background-color: #dedede; + color: #0a0a0a; } + .callout.small { + padding-top: 0.5rem; + padding-right: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 0.5rem; } + .callout.large { + padding-top: 3rem; + padding-right: 3rem; + padding-bottom: 3rem; + padding-left: 3rem; } + +.card { + margin-bottom: 1rem; + border: 1px solid #e6e6e6; + border-radius: 3px; + background: #fefefe; + box-shadow: none; + overflow: hidden; + color: #0a0a0a; } + .card > :last-child { + margin-bottom: 0; } + +.card-divider { + padding: 1rem; + background: #e6e6e6; } + .card-divider > :last-child { + margin-bottom: 0; } + +.card-section { + padding: 1rem; } + .card-section > :last-child { + margin-bottom: 0; } + +.media-object { + display: block; + margin-bottom: 1rem; } + .media-object img { + max-width: none; } + @media screen and (max-width: 39.9375em) { + .media-object.stack-for-small .media-object-section { + padding: 0; + padding-bottom: 1rem; + display: block; } + .media-object.stack-for-small .media-object-section img { + width: 100%; } } + +.media-object-section { + display: table-cell; + vertical-align: top; } + .media-object-section:first-child { + padding-right: 1rem; } + .media-object-section:last-child:not(:nth-child(2)) { + padding-left: 1rem; } + .media-object-section > :last-child { + margin-bottom: 0; } + .media-object-section.middle { + vertical-align: middle; } + .media-object-section.bottom { + vertical-align: bottom; } + +body.is-reveal-open { + overflow: hidden; } + +html.is-reveal-open, +html.is-reveal-open body { + min-height: 100%; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.reveal-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1005; + display: none; + background-color: rgba(10, 10, 10, 0.45); + overflow-y: scroll; } + +.reveal { + z-index: 1006; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + display: none; + padding: 1rem; + border: 1px solid #cacaca; + border-radius: 3px; + background-color: #fefefe; + position: relative; + top: 100px; + margin-right: auto; + margin-left: auto; + overflow-y: auto; } + [data-whatinput='mouse'] .reveal { + outline: 0; } + @media print, screen and (min-width: 40em) { + .reveal { + min-height: 0; } } + .reveal .column, .reveal .columns, + .reveal .columns { + min-width: 0; } + .reveal > :last-child { + margin-bottom: 0; } + @media print, screen and (min-width: 40em) { + .reveal { + width: 600px; + max-width: 62.5rem; } } + @media print, screen and (min-width: 40em) { + .reveal .reveal { + right: auto; + left: auto; + margin: 0 auto; } } + .reveal.collapse { + padding: 0; } + @media print, screen and (min-width: 40em) { + .reveal.tiny { + width: 30%; + max-width: 62.5rem; } } + @media print, screen and (min-width: 40em) { + .reveal.small { + width: 50%; + max-width: 62.5rem; } } + @media print, screen and (min-width: 40em) { + .reveal.large { + width: 90%; + max-width: 62.5rem; } } + .reveal.full { + top: 0; + left: 0; + width: 100%; + max-width: none; + height: 100%; + height: 100vh; + min-height: 100vh; + margin-left: 0; + border: 0; + border-radius: 0; } + @media screen and (max-width: 39.9375em) { + .reveal { + top: 0; + left: 0; + width: 100%; + max-width: none; + height: 100%; + height: 100vh; + min-height: 100vh; + margin-left: 0; + border: 0; + border-radius: 0; } } + .reveal.without-overlay { + position: fixed; } + +table { + width: 100%; + margin-bottom: 1rem; + border-radius: 3px; } + table thead, + table tbody, + table tfoot { + border: 1px solid #f1f1f1; + background-color: #fefefe; } + table caption { + padding: 0.5rem 0.625rem 0.625rem; + font-weight: bold; } + table thead { + background: #f8f8f8; + color: #0a0a0a; } + table tfoot { + background: #f1f1f1; + color: #0a0a0a; } + table thead tr, + table tfoot tr { + background: transparent; } + table thead th, + table thead td, + table tfoot th, + table tfoot td { + padding: 0.5rem 0.625rem 0.625rem; + font-weight: bold; + text-align: left; } + table tbody th, + table tbody td { + padding: 0.5rem 0.625rem 0.625rem; } + table tbody tr:nth-child(even) { + border-bottom: 0; + background-color: #f1f1f1; } + table.unstriped tbody { + background-color: #fefefe; } + table.unstriped tbody tr { + border-bottom: 0; + border-bottom: 1px solid #f1f1f1; + background-color: #fefefe; } + +@media screen and (max-width: 63.9375em) { + table.stack thead { + display: none; } + table.stack tfoot { + display: none; } + table.stack tr, + table.stack th, + table.stack td { + display: block; } + table.stack td { + border-top: 0; } } + +table.scroll { + display: block; + width: 100%; + overflow-x: auto; } + +table.hover thead tr:hover { + background-color: #f3f3f3; } + +table.hover tfoot tr:hover { + background-color: #ececec; } + +table.hover tbody tr:hover { + background-color: #f9f9f9; } + +table.hover:not(.unstriped) tr:nth-of-type(even):hover { + background-color: #ececec; } + +.table-scroll { + overflow-x: auto; } + .table-scroll table { + width: auto; } + +.badge { + display: inline-block; + min-width: 2.1em; + padding: 0.3em; + border-radius: 50%; + font-size: 0.6rem; + text-align: center; + background: #2ba6cb; + color: #fefefe; } + .badge.primary { + background: #2ba6cb; + color: #0a0a0a; } + .badge.secondary { + background: #e9e9e9; + color: #0a0a0a; } + .badge.alert { + background: #c60f13; + color: #fefefe; } + .badge.success { + background: #5da423; + color: #0a0a0a; } + .badge.warning { + background: #ffae00; + color: #0a0a0a; } + .badge.body-font { + background: #222222; + color: #fefefe; } + .badge.header { + background: #222222; + color: #fefefe; } + +.label { + display: inline-block; + padding: 0.33333rem 0.5rem; + border-radius: 3px; + font-size: 0.8rem; + line-height: 1; + white-space: nowrap; + cursor: default; + background: #2ba6cb; + color: #fefefe; } + .label.primary { + background: #2ba6cb; + color: #0a0a0a; } + .label.secondary { + background: #e9e9e9; + color: #0a0a0a; } + .label.alert { + background: #c60f13; + color: #fefefe; } + .label.success { + background: #5da423; + color: #0a0a0a; } + .label.warning { + background: #ffae00; + color: #0a0a0a; } + .label.body-font { + background: #222222; + color: #fefefe; } + .label.header { + background: #222222; + color: #fefefe; } + +.has-tip { + position: relative; + display: inline-block; + border-bottom: dotted 1px #8a8a8a; + font-weight: bold; + cursor: help; } + +.tooltip { + position: absolute; + top: calc(100% + 0.6495rem); + z-index: 1200; + max-width: 10rem; + padding: 0.75rem; + border-radius: 3px; + background-color: #0a0a0a; + font-size: 80%; + color: #fefefe; } + .tooltip::before { + display: block; + width: 0; + height: 0; + border: inset 0.75rem; + content: ''; + border-top-width: 0; + border-bottom-style: solid; + border-color: transparent transparent #0a0a0a; + position: absolute; + bottom: 100%; + left: 50%; + -ms-transform: translateX(-50%); + transform: translateX(-50%); } + .tooltip.top::before { + display: block; + width: 0; + height: 0; + border: inset 0.75rem; + content: ''; + border-bottom-width: 0; + border-top-style: solid; + border-color: #0a0a0a transparent transparent; + top: 100%; + bottom: auto; } + .tooltip.left::before { + display: block; + width: 0; + height: 0; + border: inset 0.75rem; + content: ''; + border-right-width: 0; + border-left-style: solid; + border-color: transparent transparent transparent #0a0a0a; + top: 50%; + bottom: auto; + left: 100%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + .tooltip.right::before { + display: block; + width: 0; + height: 0; + border: inset 0.75rem; + content: ''; + border-left-width: 0; + border-right-style: solid; + border-color: transparent #0a0a0a transparent transparent; + top: 50%; + right: 100%; + bottom: auto; + left: auto; + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + +.orbit { + position: relative; } + +.orbit-container { + position: relative; + height: 0; + margin: 0; + list-style: none; + overflow: hidden; } + +.orbit-slide { + width: 100%; } + .orbit-slide.no-motionui.is-active { + top: 0; + left: 0; } + +.orbit-figure { + margin: 0; } + +.orbit-image { + width: 100%; + max-width: 100%; + margin: 0; } + +.orbit-caption { + position: absolute; + bottom: 0; + width: 100%; + margin-bottom: 0; + padding: 1rem; + background-color: rgba(10, 10, 10, 0.5); + color: #fefefe; } + +.orbit-previous, .orbit-next { + position: absolute; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); + z-index: 10; + padding: 1rem; + color: #fefefe; } + [data-whatinput='mouse'] .orbit-previous, [data-whatinput='mouse'] .orbit-next { + outline: 0; } + .orbit-previous:hover, .orbit-next:hover, .orbit-previous:active, .orbit-next:active, .orbit-previous:focus, .orbit-next:focus { + background-color: rgba(10, 10, 10, 0.5); } + +.orbit-previous { + left: 0; } + +.orbit-next { + left: auto; + right: 0; } + +.orbit-bullets { + position: relative; + margin-top: 0.8rem; + margin-bottom: 0.8rem; + text-align: center; } + [data-whatinput='mouse'] .orbit-bullets { + outline: 0; } + .orbit-bullets button { + width: 1.2rem; + height: 1.2rem; + margin: 0.1rem; + border-radius: 50%; + background-color: #cacaca; } + .orbit-bullets button:hover { + background-color: #8a8a8a; } + .orbit-bullets button.is-active { + background-color: #8a8a8a; } + +.thumbnail { + display: inline-block; + max-width: 100%; + margin-bottom: 1rem; + border: solid 4px #fefefe; + border-radius: 3px; + box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); + line-height: 0; } + +a.thumbnail { + transition: box-shadow 200ms ease-out; } + a.thumbnail:hover, a.thumbnail:focus { + box-shadow: 0 0 6px 1px rgba(43, 166, 203, 0.5); } + a.thumbnail image { + box-shadow: none; } + +.row { + max-width: 62.5rem; + margin-right: auto; + margin-left: auto; } + .row::before, .row::after { + display: table; + content: ' '; } + .row::after { + clear: both; } + .row.collapse > .column, .row.collapse > .columns { + padding-right: 0; + padding-left: 0; } + .row .row { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } + @media print, screen and (min-width: 40em) { + .row .row { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } + @media print, screen and (min-width: 64em) { + .row .row { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } + .row .row.collapse { + margin-right: 0; + margin-left: 0; } + .row.expanded { + max-width: none; } + .row.expanded .row { + margin-right: auto; + margin-left: auto; } + +.column, .columns { + width: 100%; + float: left; + padding-right: 0.9375rem; + padding-left: 0.9375rem; } + .column:last-child:not(:first-child), .columns:last-child:not(:first-child) { + float: right; } + .column.end:last-child:last-child, .end.columns:last-child:last-child { + float: left; } + +.column.row.row, .row.row.columns { + float: none; } + +.row .column.row.row, .row .row.row.columns { + margin-right: 0; + margin-left: 0; + padding-right: 0; + padding-left: 0; } + +.small-1 { + width: 8.33333%; } + +.small-push-1 { + position: relative; + left: 8.33333%; } + +.small-pull-1 { + position: relative; + left: -8.33333%; } + +.small-offset-0 { + margin-left: 0%; } + +.small-2 { + width: 16.66667%; } + +.small-push-2 { + position: relative; + left: 16.66667%; } + +.small-pull-2 { + position: relative; + left: -16.66667%; } + +.small-offset-1 { + margin-left: 8.33333%; } + +.small-3 { + width: 25%; } + +.small-push-3 { + position: relative; + left: 25%; } + +.small-pull-3 { + position: relative; + left: -25%; } + +.small-offset-2 { + margin-left: 16.66667%; } + +.small-4 { + width: 33.33333%; } + +.small-push-4 { + position: relative; + left: 33.33333%; } + +.small-pull-4 { + position: relative; + left: -33.33333%; } + +.small-offset-3 { + margin-left: 25%; } + +.small-5 { + width: 41.66667%; } + +.small-push-5 { + position: relative; + left: 41.66667%; } + +.small-pull-5 { + position: relative; + left: -41.66667%; } + +.small-offset-4 { + margin-left: 33.33333%; } + +.small-6 { + width: 50%; } + +.small-push-6 { + position: relative; + left: 50%; } + +.small-pull-6 { + position: relative; + left: -50%; } + +.small-offset-5 { + margin-left: 41.66667%; } + +.small-7 { + width: 58.33333%; } + +.small-push-7 { + position: relative; + left: 58.33333%; } + +.small-pull-7 { + position: relative; + left: -58.33333%; } + +.small-offset-6 { + margin-left: 50%; } + +.small-8 { + width: 66.66667%; } + +.small-push-8 { + position: relative; + left: 66.66667%; } + +.small-pull-8 { + position: relative; + left: -66.66667%; } + +.small-offset-7 { + margin-left: 58.33333%; } + +.small-9 { + width: 75%; } + +.small-push-9 { + position: relative; + left: 75%; } + +.small-pull-9 { + position: relative; + left: -75%; } + +.small-offset-8 { + margin-left: 66.66667%; } + +.small-10 { + width: 83.33333%; } + +.small-push-10 { + position: relative; + left: 83.33333%; } + +.small-pull-10 { + position: relative; + left: -83.33333%; } + +.small-offset-9 { + margin-left: 75%; } + +.small-11 { + width: 91.66667%; } + +.small-push-11 { + position: relative; + left: 91.66667%; } + +.small-pull-11 { + position: relative; + left: -91.66667%; } + +.small-offset-10 { + margin-left: 83.33333%; } + +.small-12 { + width: 100%; } + +.small-offset-11 { + margin-left: 91.66667%; } + +.small-up-1 > .column, .small-up-1 > .columns { + float: left; + width: 100%; } + .small-up-1 > .column:nth-of-type(1n), .small-up-1 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-1 > .column:nth-of-type(1n+1), .small-up-1 > .columns:nth-of-type(1n+1) { + clear: both; } + .small-up-1 > .column:last-child, .small-up-1 > .columns:last-child { + float: left; } + +.small-up-2 > .column, .small-up-2 > .columns { + float: left; + width: 50%; } + .small-up-2 > .column:nth-of-type(1n), .small-up-2 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-2 > .column:nth-of-type(2n+1), .small-up-2 > .columns:nth-of-type(2n+1) { + clear: both; } + .small-up-2 > .column:last-child, .small-up-2 > .columns:last-child { + float: left; } + +.small-up-3 > .column, .small-up-3 > .columns { + float: left; + width: 33.33333%; } + .small-up-3 > .column:nth-of-type(1n), .small-up-3 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-3 > .column:nth-of-type(3n+1), .small-up-3 > .columns:nth-of-type(3n+1) { + clear: both; } + .small-up-3 > .column:last-child, .small-up-3 > .columns:last-child { + float: left; } + +.small-up-4 > .column, .small-up-4 > .columns { + float: left; + width: 25%; } + .small-up-4 > .column:nth-of-type(1n), .small-up-4 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-4 > .column:nth-of-type(4n+1), .small-up-4 > .columns:nth-of-type(4n+1) { + clear: both; } + .small-up-4 > .column:last-child, .small-up-4 > .columns:last-child { + float: left; } + +.small-up-5 > .column, .small-up-5 > .columns { + float: left; + width: 20%; } + .small-up-5 > .column:nth-of-type(1n), .small-up-5 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-5 > .column:nth-of-type(5n+1), .small-up-5 > .columns:nth-of-type(5n+1) { + clear: both; } + .small-up-5 > .column:last-child, .small-up-5 > .columns:last-child { + float: left; } + +.small-up-6 > .column, .small-up-6 > .columns { + float: left; + width: 16.66667%; } + .small-up-6 > .column:nth-of-type(1n), .small-up-6 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-6 > .column:nth-of-type(6n+1), .small-up-6 > .columns:nth-of-type(6n+1) { + clear: both; } + .small-up-6 > .column:last-child, .small-up-6 > .columns:last-child { + float: left; } + +.small-up-7 > .column, .small-up-7 > .columns { + float: left; + width: 14.28571%; } + .small-up-7 > .column:nth-of-type(1n), .small-up-7 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-7 > .column:nth-of-type(7n+1), .small-up-7 > .columns:nth-of-type(7n+1) { + clear: both; } + .small-up-7 > .column:last-child, .small-up-7 > .columns:last-child { + float: left; } + +.small-up-8 > .column, .small-up-8 > .columns { + float: left; + width: 12.5%; } + .small-up-8 > .column:nth-of-type(1n), .small-up-8 > .columns:nth-of-type(1n) { + clear: none; } + .small-up-8 > .column:nth-of-type(8n+1), .small-up-8 > .columns:nth-of-type(8n+1) { + clear: both; } + .small-up-8 > .column:last-child, .small-up-8 > .columns:last-child { + float: left; } + +.small-collapse > .column, .small-collapse > .columns { + padding-right: 0; + padding-left: 0; } + +.small-collapse .row { + margin-right: 0; + margin-left: 0; } + +.expanded.row .small-collapse.row { + margin-right: 0; + margin-left: 0; } + +.small-uncollapse > .column, .small-uncollapse > .columns { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } + +.small-centered { + margin-right: auto; + margin-left: auto; } + .small-centered, .small-centered:last-child:not(:first-child) { + float: none; + clear: both; } + +.small-uncentered, +.small-push-0, +.small-pull-0 { + position: static; + float: left; + margin-right: 0; + margin-left: 0; } + +@media print, screen and (min-width: 40em) { + .medium-1 { + width: 8.33333%; } + .medium-push-1 { + position: relative; + left: 8.33333%; } + .medium-pull-1 { + position: relative; + left: -8.33333%; } + .medium-offset-0 { + margin-left: 0%; } + .medium-2 { + width: 16.66667%; } + .medium-push-2 { + position: relative; + left: 16.66667%; } + .medium-pull-2 { + position: relative; + left: -16.66667%; } + .medium-offset-1 { + margin-left: 8.33333%; } + .medium-3 { + width: 25%; } + .medium-push-3 { + position: relative; + left: 25%; } + .medium-pull-3 { + position: relative; + left: -25%; } + .medium-offset-2 { + margin-left: 16.66667%; } + .medium-4 { + width: 33.33333%; } + .medium-push-4 { + position: relative; + left: 33.33333%; } + .medium-pull-4 { + position: relative; + left: -33.33333%; } + .medium-offset-3 { + margin-left: 25%; } + .medium-5 { + width: 41.66667%; } + .medium-push-5 { + position: relative; + left: 41.66667%; } + .medium-pull-5 { + position: relative; + left: -41.66667%; } + .medium-offset-4 { + margin-left: 33.33333%; } + .medium-6 { + width: 50%; } + .medium-push-6 { + position: relative; + left: 50%; } + .medium-pull-6 { + position: relative; + left: -50%; } + .medium-offset-5 { + margin-left: 41.66667%; } + .medium-7 { + width: 58.33333%; } + .medium-push-7 { + position: relative; + left: 58.33333%; } + .medium-pull-7 { + position: relative; + left: -58.33333%; } + .medium-offset-6 { + margin-left: 50%; } + .medium-8 { + width: 66.66667%; } + .medium-push-8 { + position: relative; + left: 66.66667%; } + .medium-pull-8 { + position: relative; + left: -66.66667%; } + .medium-offset-7 { + margin-left: 58.33333%; } + .medium-9 { + width: 75%; } + .medium-push-9 { + position: relative; + left: 75%; } + .medium-pull-9 { + position: relative; + left: -75%; } + .medium-offset-8 { + margin-left: 66.66667%; } + .medium-10 { + width: 83.33333%; } + .medium-push-10 { + position: relative; + left: 83.33333%; } + .medium-pull-10 { + position: relative; + left: -83.33333%; } + .medium-offset-9 { + margin-left: 75%; } + .medium-11 { + width: 91.66667%; } + .medium-push-11 { + position: relative; + left: 91.66667%; } + .medium-pull-11 { + position: relative; + left: -91.66667%; } + .medium-offset-10 { + margin-left: 83.33333%; } + .medium-12 { + width: 100%; } + .medium-offset-11 { + margin-left: 91.66667%; } + .medium-up-1 > .column, .medium-up-1 > .columns { + float: left; + width: 100%; } + .medium-up-1 > .column:nth-of-type(1n), .medium-up-1 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-1 > .column:nth-of-type(1n+1), .medium-up-1 > .columns:nth-of-type(1n+1) { + clear: both; } + .medium-up-1 > .column:last-child, .medium-up-1 > .columns:last-child { + float: left; } + .medium-up-2 > .column, .medium-up-2 > .columns { + float: left; + width: 50%; } + .medium-up-2 > .column:nth-of-type(1n), .medium-up-2 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-2 > .column:nth-of-type(2n+1), .medium-up-2 > .columns:nth-of-type(2n+1) { + clear: both; } + .medium-up-2 > .column:last-child, .medium-up-2 > .columns:last-child { + float: left; } + .medium-up-3 > .column, .medium-up-3 > .columns { + float: left; + width: 33.33333%; } + .medium-up-3 > .column:nth-of-type(1n), .medium-up-3 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-3 > .column:nth-of-type(3n+1), .medium-up-3 > .columns:nth-of-type(3n+1) { + clear: both; } + .medium-up-3 > .column:last-child, .medium-up-3 > .columns:last-child { + float: left; } + .medium-up-4 > .column, .medium-up-4 > .columns { + float: left; + width: 25%; } + .medium-up-4 > .column:nth-of-type(1n), .medium-up-4 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-4 > .column:nth-of-type(4n+1), .medium-up-4 > .columns:nth-of-type(4n+1) { + clear: both; } + .medium-up-4 > .column:last-child, .medium-up-4 > .columns:last-child { + float: left; } + .medium-up-5 > .column, .medium-up-5 > .columns { + float: left; + width: 20%; } + .medium-up-5 > .column:nth-of-type(1n), .medium-up-5 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-5 > .column:nth-of-type(5n+1), .medium-up-5 > .columns:nth-of-type(5n+1) { + clear: both; } + .medium-up-5 > .column:last-child, .medium-up-5 > .columns:last-child { + float: left; } + .medium-up-6 > .column, .medium-up-6 > .columns { + float: left; + width: 16.66667%; } + .medium-up-6 > .column:nth-of-type(1n), .medium-up-6 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-6 > .column:nth-of-type(6n+1), .medium-up-6 > .columns:nth-of-type(6n+1) { + clear: both; } + .medium-up-6 > .column:last-child, .medium-up-6 > .columns:last-child { + float: left; } + .medium-up-7 > .column, .medium-up-7 > .columns { + float: left; + width: 14.28571%; } + .medium-up-7 > .column:nth-of-type(1n), .medium-up-7 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-7 > .column:nth-of-type(7n+1), .medium-up-7 > .columns:nth-of-type(7n+1) { + clear: both; } + .medium-up-7 > .column:last-child, .medium-up-7 > .columns:last-child { + float: left; } + .medium-up-8 > .column, .medium-up-8 > .columns { + float: left; + width: 12.5%; } + .medium-up-8 > .column:nth-of-type(1n), .medium-up-8 > .columns:nth-of-type(1n) { + clear: none; } + .medium-up-8 > .column:nth-of-type(8n+1), .medium-up-8 > .columns:nth-of-type(8n+1) { + clear: both; } + .medium-up-8 > .column:last-child, .medium-up-8 > .columns:last-child { + float: left; } + .medium-collapse > .column, .medium-collapse > .columns { + padding-right: 0; + padding-left: 0; } + .medium-collapse .row { + margin-right: 0; + margin-left: 0; } + .expanded.row .medium-collapse.row { + margin-right: 0; + margin-left: 0; } + .medium-uncollapse > .column, .medium-uncollapse > .columns { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } + .medium-centered { + margin-right: auto; + margin-left: auto; } + .medium-centered, .medium-centered:last-child:not(:first-child) { + float: none; + clear: both; } + .medium-uncentered, + .medium-push-0, + .medium-pull-0 { + position: static; + float: left; + margin-right: 0; + margin-left: 0; } } + +@media print, screen and (min-width: 64em) { + .large-1 { + width: 8.33333%; } + .large-push-1 { + position: relative; + left: 8.33333%; } + .large-pull-1 { + position: relative; + left: -8.33333%; } + .large-offset-0 { + margin-left: 0%; } + .large-2 { + width: 16.66667%; } + .large-push-2 { + position: relative; + left: 16.66667%; } + .large-pull-2 { + position: relative; + left: -16.66667%; } + .large-offset-1 { + margin-left: 8.33333%; } + .large-3 { + width: 25%; } + .large-push-3 { + position: relative; + left: 25%; } + .large-pull-3 { + position: relative; + left: -25%; } + .large-offset-2 { + margin-left: 16.66667%; } + .large-4 { + width: 33.33333%; } + .large-push-4 { + position: relative; + left: 33.33333%; } + .large-pull-4 { + position: relative; + left: -33.33333%; } + .large-offset-3 { + margin-left: 25%; } + .large-5 { + width: 41.66667%; } + .large-push-5 { + position: relative; + left: 41.66667%; } + .large-pull-5 { + position: relative; + left: -41.66667%; } + .large-offset-4 { + margin-left: 33.33333%; } + .large-6 { + width: 50%; } + .large-push-6 { + position: relative; + left: 50%; } + .large-pull-6 { + position: relative; + left: -50%; } + .large-offset-5 { + margin-left: 41.66667%; } + .large-7 { + width: 58.33333%; } + .large-push-7 { + position: relative; + left: 58.33333%; } + .large-pull-7 { + position: relative; + left: -58.33333%; } + .large-offset-6 { + margin-left: 50%; } + .large-8 { + width: 66.66667%; } + .large-push-8 { + position: relative; + left: 66.66667%; } + .large-pull-8 { + position: relative; + left: -66.66667%; } + .large-offset-7 { + margin-left: 58.33333%; } + .large-9 { + width: 75%; } + .large-push-9 { + position: relative; + left: 75%; } + .large-pull-9 { + position: relative; + left: -75%; } + .large-offset-8 { + margin-left: 66.66667%; } + .large-10 { + width: 83.33333%; } + .large-push-10 { + position: relative; + left: 83.33333%; } + .large-pull-10 { + position: relative; + left: -83.33333%; } + .large-offset-9 { + margin-left: 75%; } + .large-11 { + width: 91.66667%; } + .large-push-11 { + position: relative; + left: 91.66667%; } + .large-pull-11 { + position: relative; + left: -91.66667%; } + .large-offset-10 { + margin-left: 83.33333%; } + .large-12 { + width: 100%; } + .large-offset-11 { + margin-left: 91.66667%; } + .large-up-1 > .column, .large-up-1 > .columns { + float: left; + width: 100%; } + .large-up-1 > .column:nth-of-type(1n), .large-up-1 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-1 > .column:nth-of-type(1n+1), .large-up-1 > .columns:nth-of-type(1n+1) { + clear: both; } + .large-up-1 > .column:last-child, .large-up-1 > .columns:last-child { + float: left; } + .large-up-2 > .column, .large-up-2 > .columns { + float: left; + width: 50%; } + .large-up-2 > .column:nth-of-type(1n), .large-up-2 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-2 > .column:nth-of-type(2n+1), .large-up-2 > .columns:nth-of-type(2n+1) { + clear: both; } + .large-up-2 > .column:last-child, .large-up-2 > .columns:last-child { + float: left; } + .large-up-3 > .column, .large-up-3 > .columns { + float: left; + width: 33.33333%; } + .large-up-3 > .column:nth-of-type(1n), .large-up-3 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-3 > .column:nth-of-type(3n+1), .large-up-3 > .columns:nth-of-type(3n+1) { + clear: both; } + .large-up-3 > .column:last-child, .large-up-3 > .columns:last-child { + float: left; } + .large-up-4 > .column, .large-up-4 > .columns { + float: left; + width: 25%; } + .large-up-4 > .column:nth-of-type(1n), .large-up-4 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-4 > .column:nth-of-type(4n+1), .large-up-4 > .columns:nth-of-type(4n+1) { + clear: both; } + .large-up-4 > .column:last-child, .large-up-4 > .columns:last-child { + float: left; } + .large-up-5 > .column, .large-up-5 > .columns { + float: left; + width: 20%; } + .large-up-5 > .column:nth-of-type(1n), .large-up-5 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-5 > .column:nth-of-type(5n+1), .large-up-5 > .columns:nth-of-type(5n+1) { + clear: both; } + .large-up-5 > .column:last-child, .large-up-5 > .columns:last-child { + float: left; } + .large-up-6 > .column, .large-up-6 > .columns { + float: left; + width: 16.66667%; } + .large-up-6 > .column:nth-of-type(1n), .large-up-6 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-6 > .column:nth-of-type(6n+1), .large-up-6 > .columns:nth-of-type(6n+1) { + clear: both; } + .large-up-6 > .column:last-child, .large-up-6 > .columns:last-child { + float: left; } + .large-up-7 > .column, .large-up-7 > .columns { + float: left; + width: 14.28571%; } + .large-up-7 > .column:nth-of-type(1n), .large-up-7 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-7 > .column:nth-of-type(7n+1), .large-up-7 > .columns:nth-of-type(7n+1) { + clear: both; } + .large-up-7 > .column:last-child, .large-up-7 > .columns:last-child { + float: left; } + .large-up-8 > .column, .large-up-8 > .columns { + float: left; + width: 12.5%; } + .large-up-8 > .column:nth-of-type(1n), .large-up-8 > .columns:nth-of-type(1n) { + clear: none; } + .large-up-8 > .column:nth-of-type(8n+1), .large-up-8 > .columns:nth-of-type(8n+1) { + clear: both; } + .large-up-8 > .column:last-child, .large-up-8 > .columns:last-child { + float: left; } + .large-collapse > .column, .large-collapse > .columns { + padding-right: 0; + padding-left: 0; } + .large-collapse .row { + margin-right: 0; + margin-left: 0; } + .expanded.row .large-collapse.row { + margin-right: 0; + margin-left: 0; } + .large-uncollapse > .column, .large-uncollapse > .columns { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } + .large-centered { + margin-right: auto; + margin-left: auto; } + .large-centered, .large-centered:last-child:not(:first-child) { + float: none; + clear: both; } + .large-uncentered, + .large-push-0, + .large-pull-0 { + position: static; + float: left; + margin-right: 0; + margin-left: 0; } } + +.column-block { + margin-bottom: 1.875rem; } + .column-block > :last-child { + margin-bottom: 0; } + +.menu-icon { + position: relative; + display: inline-block; + vertical-align: middle; + width: 20px; + height: 16px; + cursor: pointer; } + .menu-icon::after { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 2px; + background: #fefefe; + box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; + content: ''; } + .menu-icon:hover::after { + background: #cacaca; + box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; } + +.menu-icon.dark { + position: relative; + display: inline-block; + vertical-align: middle; + width: 20px; + height: 16px; + cursor: pointer; } + .menu-icon.dark::after { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 2px; + background: #0a0a0a; + box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; + content: ''; } + .menu-icon.dark:hover::after { + background: #8a8a8a; + box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; } + +.slide-in-down.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateY(-100%); + transform: translateY(-100%); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-in-down.mui-enter.mui-enter-active { + -ms-transform: translateY(0); + transform: translateY(0); } + +.slide-in-left.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateX(-100%); + transform: translateX(-100%); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-in-left.mui-enter.mui-enter-active { + -ms-transform: translateX(0); + transform: translateX(0); } + +.slide-in-up.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateY(100%); + transform: translateY(100%); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-in-up.mui-enter.mui-enter-active { + -ms-transform: translateY(0); + transform: translateY(0); } + +.slide-in-right.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateX(100%); + transform: translateX(100%); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-in-right.mui-enter.mui-enter-active { + -ms-transform: translateX(0); + transform: translateX(0); } + +.slide-out-down.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateY(0); + transform: translateY(0); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-out-down.mui-leave.mui-leave-active { + -ms-transform: translateY(100%); + transform: translateY(100%); } + +.slide-out-right.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateX(0); + transform: translateX(0); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-out-right.mui-leave.mui-leave-active { + -ms-transform: translateX(100%); + transform: translateX(100%); } + +.slide-out-up.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateY(0); + transform: translateY(0); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-out-up.mui-leave.mui-leave-active { + -ms-transform: translateY(-100%); + transform: translateY(-100%); } + +.slide-out-left.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: translateX(0); + transform: translateX(0); + transition-property: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.slide-out-left.mui-leave.mui-leave-active { + -ms-transform: translateX(-100%); + transform: translateX(-100%); } + +.fade-in.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + opacity: 0; + transition-property: opacity; } + +.fade-in.mui-enter.mui-enter-active { + opacity: 1; } + +.fade-out.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + opacity: 1; + transition-property: opacity; } + +.fade-out.mui-leave.mui-leave-active { + opacity: 0; } + +.hinge-in-from-top.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateX(-90deg); + -ms-transform-origin: top; + transform-origin: top; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-top.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-right.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateY(-90deg); + -ms-transform-origin: right; + transform-origin: right; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-right.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-bottom.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateX(90deg); + -ms-transform-origin: bottom; + transform-origin: bottom; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-bottom.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-left.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateY(90deg); + -ms-transform-origin: left; + transform-origin: left; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-left.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-middle-x.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateX(-90deg); + -ms-transform-origin: center; + transform-origin: center; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-middle-x.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-in-from-middle-y.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotateY(-90deg); + -ms-transform-origin: center; + transform-origin: center; + transition-property: transform, opacity; + opacity: 0; } + +.hinge-in-from-middle-y.mui-enter.mui-enter-active { + transform: perspective(2000px) rotate(0deg); + opacity: 1; } + +.hinge-out-from-top.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: top; + transform-origin: top; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-top.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateX(-90deg); + opacity: 0; } + +.hinge-out-from-right.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: right; + transform-origin: right; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-right.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateY(-90deg); + opacity: 0; } + +.hinge-out-from-bottom.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: bottom; + transform-origin: bottom; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-bottom.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateX(90deg); + opacity: 0; } + +.hinge-out-from-left.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: left; + transform-origin: left; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-left.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateY(90deg); + opacity: 0; } + +.hinge-out-from-middle-x.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: center; + transform-origin: center; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-middle-x.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateX(-90deg); + opacity: 0; } + +.hinge-out-from-middle-y.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + transform: perspective(2000px) rotate(0deg); + -ms-transform-origin: center; + transform-origin: center; + transition-property: transform, opacity; + opacity: 1; } + +.hinge-out-from-middle-y.mui-leave.mui-leave-active { + transform: perspective(2000px) rotateY(-90deg); + opacity: 0; } + +.scale-in-up.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: scale(0.5); + transform: scale(0.5); + transition-property: transform, opacity; + opacity: 0; } + +.scale-in-up.mui-enter.mui-enter-active { + -ms-transform: scale(1); + transform: scale(1); + opacity: 1; } + +.scale-in-down.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: scale(1.5); + transform: scale(1.5); + transition-property: transform, opacity; + opacity: 0; } + +.scale-in-down.mui-enter.mui-enter-active { + -ms-transform: scale(1); + transform: scale(1); + opacity: 1; } + +.scale-out-up.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: scale(1); + transform: scale(1); + transition-property: transform, opacity; + opacity: 1; } + +.scale-out-up.mui-leave.mui-leave-active { + -ms-transform: scale(1.5); + transform: scale(1.5); + opacity: 0; } + +.scale-out-down.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: scale(1); + transform: scale(1); + transition-property: transform, opacity; + opacity: 1; } + +.scale-out-down.mui-leave.mui-leave-active { + -ms-transform: scale(0.5); + transform: scale(0.5); + opacity: 0; } + +.spin-in.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: rotate(-0.75turn); + transform: rotate(-0.75turn); + transition-property: transform, opacity; + opacity: 0; } + +.spin-in.mui-enter.mui-enter-active { + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; } + +.spin-out.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: rotate(0); + transform: rotate(0); + transition-property: transform, opacity; + opacity: 1; } + +.spin-out.mui-leave.mui-leave-active { + -ms-transform: rotate(0.75turn); + transform: rotate(0.75turn); + opacity: 0; } + +.spin-in-ccw.mui-enter { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: rotate(0.75turn); + transform: rotate(0.75turn); + transition-property: transform, opacity; + opacity: 0; } + +.spin-in-ccw.mui-enter.mui-enter-active { + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; } + +.spin-out-ccw.mui-leave { + transition-duration: 500ms; + transition-timing-function: linear; + -ms-transform: rotate(0); + transform: rotate(0); + transition-property: transform, opacity; + opacity: 1; } + +.spin-out-ccw.mui-leave.mui-leave-active { + -ms-transform: rotate(-0.75turn); + transform: rotate(-0.75turn); + opacity: 0; } + +.slow { + transition-duration: 750ms !important; } + +.fast { + transition-duration: 250ms !important; } + +.linear { + transition-timing-function: linear !important; } + +.ease { + transition-timing-function: ease !important; } + +.ease-in { + transition-timing-function: ease-in !important; } + +.ease-out { + transition-timing-function: ease-out !important; } + +.ease-in-out { + transition-timing-function: ease-in-out !important; } + +.bounce-in { + transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; } + +.bounce-out { + transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; } + +.bounce-in-out { + transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; } + +.short-delay { + transition-delay: 300ms !important; } + +.long-delay { + transition-delay: 700ms !important; } + +.shake { + animation-name: shake-7; } + +@keyframes shake-7 { + 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% { + transform: translateX(7%); } + 5%, 15%, 25%, 35%, 45%, 55%, 65%, 75%, 85%, 95% { + transform: translateX(-7%); } } + +.spin-cw { + animation-name: spin-cw-1turn; } + +@keyframes spin-cw-1turn { + 0% { + transform: rotate(-1turn); } + 100% { + transform: rotate(0); } } + +.spin-ccw { + animation-name: spin-cw-1turn; } + +@keyframes spin-cw-1turn { + 0% { + transform: rotate(0); } + 100% { + transform: rotate(1turn); } } + +.wiggle { + animation-name: wiggle-7deg; } + +@keyframes wiggle-7deg { + 40%, 50%, 60% { + transform: rotate(7deg); } + 35%, 45%, 55%, 65% { + transform: rotate(-7deg); } + 0%, 30%, 70%, 100% { + transform: rotate(0); } } + +.shake, +.spin-cw, +.spin-ccw, +.wiggle { + animation-duration: 500ms; } + +.infinite { + animation-iteration-count: infinite; } + +.slow { + animation-duration: 750ms !important; } + +.fast { + animation-duration: 250ms !important; } + +.linear { + animation-timing-function: linear !important; } + +.ease { + animation-timing-function: ease !important; } + +.ease-in { + animation-timing-function: ease-in !important; } + +.ease-out { + animation-timing-function: ease-out !important; } + +.ease-in-out { + animation-timing-function: ease-in-out !important; } + +.bounce-in { + animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; } + +.bounce-out { + animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; } + +.bounce-in-out { + animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; } + +.short-delay { + animation-delay: 300ms !important; } + +.long-delay { + animation-delay: 700ms !important; } diff --git a/templates/PragueTennisCamp/Resources/assets/css/foundation.min.css b/templates/PragueTennisCamp/Resources/assets/css/foundation.min.css new file mode 100644 index 00000000..5032c756 --- /dev/null +++ b/templates/PragueTennisCamp/Resources/assets/css/foundation.min.css @@ -0,0 +1,2 @@ +@charset "UTF-8"; +/*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */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{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}main{display:block}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{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}input{overflow:visible}[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}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;display:table;max-width:100%;padding:0;color:inherit;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}details{display:block}summary{display:list-item}menu{display:block}canvas{display:inline-block}[hidden],template{display:none}.foundation-mq{font-family:"small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"}html{box-sizing:border-box;font-size:100%}*,:after,:before{box-sizing:inherit}body{margin:0;padding:0;background:#fefefe;font-family:Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-weight:400;line-height:1.5;color:#0a0a0a;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle;max-width:100%;height:auto;-ms-interpolation-mode:bicubic}textarea{height:auto;min-height:50px}select,textarea{border-radius:3px}select{width:100%}.map_canvas embed,.map_canvas img,.map_canvas object,.mqa-display embed,.mqa-display img,.mqa-display object{max-width:none!important}button{padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-radius:3px;background:transparent;line-height:1}[data-whatinput=mouse] button{outline:0}.is-visible{display:block!important}.is-hidden{display:none!important}blockquote,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,li,ol,p,pre,td,th,ul{margin:0;padding:0}p{margin-bottom:1rem;font-size:inherit;line-height:1.6;text-rendering:optimizeLegibility}em,i{font-style:italic}b,em,i,strong{line-height:inherit}b,strong{font-weight:700}small{font-size:80%;line-height:inherit}h1,h2,h3,h4,h5,h6{font-family:Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:400;color:inherit;text-rendering:optimizeLegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{line-height:0;color:#cacaca}h1{font-size:1.5rem}h1,h2{line-height:1.4;margin-top:0;margin-bottom:.5rem}h2{font-size:1.25rem}h3{font-size:1.1875rem}h3,h4{line-height:1.4;margin-top:0;margin-bottom:.5rem}h4{font-size:1.125rem}h5{font-size:1.0625rem}h5,h6{line-height:1.4;margin-top:0;margin-bottom:.5rem}h6{font-size:1rem}@media print,screen and (min-width:40em){h1{font-size:3rem}h2{font-size:2.5rem}h3{font-size:1.9375rem}h4{font-size:1.5625rem}h5{font-size:1.25rem}h6{font-size:1rem}}a{line-height:inherit;color:#2ba6cb;text-decoration:none;cursor:pointer}a:focus,a:hover{color:#258faf}a img{border:0}hr{clear:both;max-width:62.5rem;height:0;margin:1.25rem auto;border-top:0;border-right:0;border-bottom:1px solid #cacaca;border-left:0}dl,ol,ul{margin-bottom:1rem;list-style-position:outside;line-height:1.6}li{font-size:inherit}ul{list-style-type:disc}ol,ul{margin-left:1.25rem}ol ol,ol ul,ul ol,ul ul{margin-left:1.25rem;margin-bottom:0}dl{margin-bottom:1rem}dl dt{margin-bottom:.3rem;font-weight:700}blockquote{margin:0 0 1rem;padding:.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #cacaca}blockquote,blockquote p{line-height:1.6;color:#8a8a8a}cite{display:block;font-size:.8125rem;color:#8a8a8a}cite:before{content:"— "}abbr{border-bottom:1px dotted #0a0a0a;color:#0a0a0a;cursor:help}figure{margin:0}code{padding:.125rem .3125rem .0625rem;border:1px solid #cacaca;font-weight:400}code,kbd{background-color:#e6e6e6;font-family:Consolas,Liberation Mono,Courier,monospace;color:#0a0a0a}kbd{margin:0;padding:.125rem .25rem 0;border-radius:3px}.subheader{margin-top:.2rem;margin-bottom:.5rem;font-weight:400;line-height:1.4;color:#8a8a8a}.lead{font-size:125%;line-height:1.6}.stat{font-size:2.5rem;line-height:1}p+.stat{margin-top:-1rem}.no-bullet{margin-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}@media print,screen and (min-width:40em){.medium-text-left{text-align:left}.medium-text-right{text-align:right}.medium-text-center{text-align:center}.medium-text-justify{text-align:justify}}@media print,screen and (min-width:64em){.large-text-left{text-align:left}.large-text-right{text-align:right}.large-text-center{text-align:center}.large-text-justify{text-align:justify}}.show-for-print{display:none!important}@media print{*{background:transparent!important;box-shadow:none!important;color:#000!important;text-shadow:none!important}.show-for-print{display:block!important}.hide-for-print{display:none!important}table.show-for-print{display:table!important}thead.show-for-print{display:table-header-group!important}tbody.show-for-print{display:table-row-group!important}tr.show-for-print{display:table-row!important}td.show-for-print,th.show-for-print{display:table-cell!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}abbr[title]:after{content:" (" attr(title) ")"}blockquote,pre{border:1px solid #8a8a8a;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}}[type=color],[type=date],[type=datetime-local],[type=datetime],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],textarea{display:block;box-sizing:border-box;width:100%;height:2.4375rem;margin:0 0 1rem;padding:.5rem;border:1px solid #cacaca;border-radius:3px;background-color:#fefefe;box-shadow:inset 0 1px 2px hsla(0,0%,4%,.1);font-family:inherit;font-size:1rem;font-weight:400;color:#0a0a0a;transition:box-shadow .5s,border-color .25s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}[type=color]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=datetime]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,textarea:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;box-shadow:0 0 5px #cacaca;transition:box-shadow .5s,border-color .25s ease-in-out}textarea{max-width:100%}textarea[rows]{height:auto}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#cacaca}input::-moz-placeholder,textarea::-moz-placeholder{color:#cacaca}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#cacaca}input::placeholder,textarea::placeholder{color:#cacaca}input:disabled,input[readonly],textarea:disabled,textarea[readonly]{background-color:#e6e6e6;cursor:not-allowed}[type=button],[type=submit]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:3px}input[type=search]{box-sizing:border-box}[type=checkbox],[type=file],[type=radio]{margin:0 0 1rem}[type=checkbox]+label,[type=radio]+label{display:inline-block;vertical-align:baseline;margin-left:.5rem;margin-right:1rem;margin-bottom:0}[type=checkbox]+label[for],[type=radio]+label[for]{cursor:pointer}label>[type=checkbox],label>[type=radio]{margin-right:.5rem}[type=file]{width:100%}label{display:block;margin:0;font-size:.875rem;font-weight:400;line-height:1.8;color:#0a0a0a}label.middle{margin:0 0 1rem;padding:.5625rem 0}.help-text{margin-top:-.5rem;font-size:.8125rem;font-style:italic;color:#0a0a0a}.input-group{display:table;width:100%;margin-bottom:1rem}.input-group>:first-child{border-radius:3px 0 0 3px}.input-group>:last-child>*{border-radius:0 3px 3px 0}.input-group-button,.input-group-button a,.input-group-button button,.input-group-button input,.input-group-button label,.input-group-field,.input-group-label{margin:0;white-space:nowrap;display:table-cell;vertical-align:middle}.input-group-label{padding:0 1rem;border:1px solid #cacaca;background:#e6e6e6;color:#0a0a0a;text-align:center;white-space:nowrap;width:1%;height:100%}.input-group-label:first-child{border-right:0}.input-group-label:last-child{border-left:0}.input-group-field{border-radius:0;height:2.5rem}.input-group-button{padding-top:0;padding-bottom:0;text-align:center;width:1%;height:100%}.input-group-button a,.input-group-button button,.input-group-button input,.input-group-button label{height:2.5rem;padding-top:0;padding-bottom:0;font-size:1rem}.input-group .input-group-button{display:table-cell}fieldset{margin:0;padding:0;border:0}legend{max-width:100%;margin-bottom:.5rem}.fieldset{margin:1.125rem 0;padding:1.25rem;border:1px solid #cacaca}.fieldset legend{margin:0;margin-left:-.1875rem;padding:0 .1875rem;background:#fefefe}select{height:2.4375rem;margin:0 0 1rem;padding:.5rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #cacaca;border-radius:3px;background-color:#fefefe;font-family:inherit;font-size:1rem;line-height:normal;color:#0a0a0a;background-image:url("data:image/svg+xml;utf8,");background-origin:content-box;background-position:right -1rem center;background-repeat:no-repeat;background-size:9px 6px;padding-right:1.5rem;transition:box-shadow .5s,border-color .25s ease-in-out}@media screen and (min-width:0\0){select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==")}}select:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;box-shadow:0 0 5px #cacaca;transition:box-shadow .5s,border-color .25s ease-in-out}select:disabled{background-color:#e6e6e6;cursor:not-allowed}select::-ms-expand{display:none}select[multiple]{height:auto;background-image:none}.is-invalid-input:not(:focus){border-color:#c60f13;background-color:#f8e6e7}.is-invalid-input:not(:focus)::-webkit-input-placeholder{color:#c60f13}.is-invalid-input:not(:focus)::-moz-placeholder{color:#c60f13}.is-invalid-input:not(:focus):-ms-input-placeholder{color:#c60f13}.form-error,.is-invalid-input:not(:focus)::placeholder,.is-invalid-label{color:#c60f13}.form-error{display:none;margin-top:-.5rem;margin-bottom:1rem;font-size:.75rem;font-weight:700}.form-error.is-visible{display:block}.float-left{float:left!important}.float-right{float:right!important}.float-center{display:block;margin-right:auto;margin-left:auto}.clearfix:after,.clearfix:before{display:table;content:" "}.clearfix:after{clear:both}.hide{display:none!important}.invisible{visibility:hidden}@media screen and (max-width:39.9375em){.hide-for-small-only{display:none!important}}@media screen and (max-width:0em),screen and (min-width:40em){.show-for-small-only{display:none!important}}@media print,screen and (min-width:40em){.hide-for-medium{display:none!important}}@media screen and (max-width:39.9375em){.show-for-medium{display:none!important}}@media screen and (min-width:40em) and (max-width:63.9375em){.hide-for-medium-only{display:none!important}}@media screen and (max-width:39.9375em),screen and (min-width:64em){.show-for-medium-only{display:none!important}}@media print,screen and (min-width:64em){.hide-for-large{display:none!important}}@media screen and (max-width:63.9375em){.show-for-large{display:none!important}}@media screen and (min-width:64em) and (max-width:74.9375em){.hide-for-large-only{display:none!important}}@media screen and (max-width:63.9375em),screen and (min-width:75em){.show-for-large-only{display:none!important}}.show-for-sr,.show-on-focus{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.show-on-focus:active,.show-on-focus:focus{position:static!important;width:auto;height:auto;overflow:visible;clip:auto}.hide-for-portrait,.show-for-landscape{display:block!important}@media screen and (orientation:landscape){.hide-for-portrait,.show-for-landscape{display:block!important}}@media screen and (orientation:portrait){.hide-for-portrait,.show-for-landscape{display:none!important}}.hide-for-landscape,.show-for-portrait{display:none!important}@media screen and (orientation:landscape){.hide-for-landscape,.show-for-portrait{display:none!important}}@media screen and (orientation:portrait){.hide-for-landscape,.show-for-portrait{display:block!important}}.button{display:inline-block;vertical-align:middle;margin:0 0 1rem;padding:.85em 1em;-webkit-appearance:none;border:1px solid transparent;border-radius:3px;transition:background-color .25s ease-out,color .25s ease-out;font-size:.9rem;line-height:1;text-align:center;cursor:pointer;background-color:#2ba6cb;color:#fefefe}[data-whatinput=mouse] .button{outline:0}.button:focus,.button:hover{background-color:#258dad;color:#fefefe}.button.tiny{font-size:.6rem}.button.small{font-size:.75rem}.button.large{font-size:1.25rem}.button.expanded{display:block;width:100%;margin-right:0;margin-left:0}.button.primary{background-color:#2ba6cb;color:#0a0a0a}.button.primary:focus,.button.primary:hover{background-color:#2285a2;color:#0a0a0a}.button.secondary{background-color:#e9e9e9;color:#0a0a0a}.button.secondary:focus,.button.secondary:hover{background-color:#bababa;color:#0a0a0a}.button.alert{background-color:#c60f13;color:#fefefe}.button.alert:focus,.button.alert:hover{background-color:#9e0c0f;color:#fefefe}.button.success{background-color:#5da423;color:#0a0a0a}.button.success:focus,.button.success:hover{background-color:#4a831c;color:#0a0a0a}.button.warning{background-color:#ffae00;color:#0a0a0a}.button.warning:focus,.button.warning:hover{background-color:#cc8b00;color:#0a0a0a}.button.body-font{background-color:#222;color:#fefefe}.button.body-font:focus,.button.body-font:hover{background-color:#1b1b1b;color:#fefefe}.button.header{background-color:#222;color:#fefefe}.button.header:focus,.button.header:hover{background-color:#1b1b1b;color:#fefefe}.button.hollow{border:1px solid #2ba6cb;color:#2ba6cb}.button.hollow,.button.hollow:focus,.button.hollow:hover{background-color:transparent}.button.hollow:focus,.button.hollow:hover{border-color:#165366;color:#165366}.button.hollow.primary{border:1px solid #2ba6cb;color:#2ba6cb}.button.hollow.primary:focus,.button.hollow.primary:hover{border-color:#165366;color:#165366}.button.hollow.secondary{border:1px solid #e9e9e9;color:#e9e9e9}.button.hollow.secondary:focus,.button.hollow.secondary:hover{border-color:#757575;color:#757575}.button.hollow.alert{border:1px solid #c60f13;color:#c60f13}.button.hollow.alert:focus,.button.hollow.alert:hover{border-color:#63080a;color:#63080a}.button.hollow.success{border:1px solid #5da423;color:#5da423}.button.hollow.success:focus,.button.hollow.success:hover{border-color:#2f5212;color:#2f5212}.button.hollow.warning{border:1px solid #ffae00;color:#ffae00}.button.hollow.warning:focus,.button.hollow.warning:hover{border-color:#805700;color:#805700}.button.hollow.body-font{border:1px solid #222;color:#222}.button.hollow.body-font:focus,.button.hollow.body-font:hover{border-color:#111;color:#111}.button.hollow.header{border:1px solid #222;color:#222}.button.hollow.header:focus,.button.hollow.header:hover{border-color:#111;color:#111}.button.disabled,.button[disabled]{opacity:.25;cursor:not-allowed}.button.disabled:focus,.button.disabled:hover,.button[disabled]:focus,.button[disabled]:hover{background-color:#2ba6cb;color:#fefefe}.button.disabled.primary,.button[disabled].primary{opacity:.25;cursor:not-allowed}.button.disabled.primary:focus,.button.disabled.primary:hover,.button[disabled].primary:focus,.button[disabled].primary:hover{background-color:#2ba6cb;color:#fefefe}.button.disabled.secondary,.button[disabled].secondary{opacity:.25;cursor:not-allowed}.button.disabled.secondary:focus,.button.disabled.secondary:hover,.button[disabled].secondary:focus,.button[disabled].secondary:hover{background-color:#e9e9e9;color:#fefefe}.button.disabled.alert,.button[disabled].alert{opacity:.25;cursor:not-allowed}.button.disabled.alert:focus,.button.disabled.alert:hover,.button[disabled].alert:focus,.button[disabled].alert:hover{background-color:#c60f13;color:#fefefe}.button.disabled.success,.button[disabled].success{opacity:.25;cursor:not-allowed}.button.disabled.success:focus,.button.disabled.success:hover,.button[disabled].success:focus,.button[disabled].success:hover{background-color:#5da423;color:#fefefe}.button.disabled.warning,.button[disabled].warning{opacity:.25;cursor:not-allowed}.button.disabled.warning:focus,.button.disabled.warning:hover,.button[disabled].warning:focus,.button[disabled].warning:hover{background-color:#ffae00;color:#fefefe}.button.disabled.body-font,.button[disabled].body-font{opacity:.25;cursor:not-allowed}.button.disabled.body-font:focus,.button.disabled.body-font:hover,.button[disabled].body-font:focus,.button[disabled].body-font:hover{background-color:#222;color:#fefefe}.button.disabled.header,.button[disabled].header{opacity:.25;cursor:not-allowed}.button.disabled.header:focus,.button.disabled.header:hover,.button[disabled].header:focus,.button[disabled].header:hover{background-color:#222;color:#fefefe}.button.dropdown:after{display:block;width:0;height:0;border:.4em inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#fefefe transparent transparent;position:relative;top:.4em;display:inline-block;float:right;margin-left:1em}.button.arrow-only:after{top:-.1em;float:none;margin-left:0}.close-button{position:absolute;color:#8a8a8a;cursor:pointer}[data-whatinput=mouse] .close-button{outline:0}.close-button:focus,.close-button:hover{color:#0a0a0a}.close-button.small{right:.66rem;top:.33em;font-size:1.5em;line-height:1}.close-button,.close-button.medium{right:1rem;top:.5rem;font-size:2em;line-height:1}.button-group{margin-bottom:1rem;font-size:0}.button-group:after,.button-group:before{display:table;content:" "}.button-group:after{clear:both}.button-group .button{margin:0;margin-right:1px;margin-bottom:1px;font-size:.9rem}.button-group .button:last-child{margin-right:0}.button-group.tiny .button{font-size:.6rem}.button-group.small .button{font-size:.75rem}.button-group.large .button{font-size:1.25rem}.button-group.expanded{margin-right:-1px}.button-group.expanded:after,.button-group.expanded:before{display:none}.button-group.expanded .button:first-child:nth-last-child(2),.button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2)~.button{display:inline-block;width:calc(50% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(2):last-child{margin-right:-6px}.button-group.expanded .button:first-child:nth-last-child(3),.button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3)~.button{display:inline-block;width:calc(33.33333% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(3):last-child{margin-right:-6px}.button-group.expanded .button:first-child:nth-last-child(4),.button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4)~.button{display:inline-block;width:calc(25% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(4):last-child{margin-right:-6px}.button-group.expanded .button:first-child:nth-last-child(5),.button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5)~.button{display:inline-block;width:calc(20% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(5):last-child{margin-right:-6px}.button-group.expanded .button:first-child:nth-last-child(6),.button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6)~.button{display:inline-block;width:calc(16.66667% - 1px);margin-right:1px}.button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6)~.button:last-child,.button-group.expanded .button:first-child:nth-last-child(6):last-child{margin-right:-6px}.button-group.primary .button{background-color:#2ba6cb;color:#0a0a0a}.button-group.primary .button:focus,.button-group.primary .button:hover{background-color:#2285a2;color:#0a0a0a}.button-group.secondary .button{background-color:#e9e9e9;color:#0a0a0a}.button-group.secondary .button:focus,.button-group.secondary .button:hover{background-color:#bababa;color:#0a0a0a}.button-group.alert .button{background-color:#c60f13;color:#fefefe}.button-group.alert .button:focus,.button-group.alert .button:hover{background-color:#9e0c0f;color:#fefefe}.button-group.success .button{background-color:#5da423;color:#0a0a0a}.button-group.success .button:focus,.button-group.success .button:hover{background-color:#4a831c;color:#0a0a0a}.button-group.warning .button{background-color:#ffae00;color:#0a0a0a}.button-group.warning .button:focus,.button-group.warning .button:hover{background-color:#cc8b00;color:#0a0a0a}.button-group.body-font .button{background-color:#222;color:#fefefe}.button-group.body-font .button:focus,.button-group.body-font .button:hover{background-color:#1b1b1b;color:#fefefe}.button-group.header .button{background-color:#222;color:#fefefe}.button-group.header .button:focus,.button-group.header .button:hover{background-color:#1b1b1b;color:#fefefe}.button-group.stacked-for-medium .button,.button-group.stacked-for-small .button,.button-group.stacked .button{width:100%}.button-group.stacked-for-medium .button:last-child,.button-group.stacked-for-small .button:last-child,.button-group.stacked .button:last-child{margin-bottom:0}@media print,screen and (min-width:40em){.button-group.stacked-for-small .button{width:auto;margin-bottom:0}}@media print,screen and (min-width:64em){.button-group.stacked-for-medium .button{width:auto;margin-bottom:0}}@media screen and (max-width:39.9375em){.button-group.stacked-for-small.expanded{display:block}.button-group.stacked-for-small.expanded .button{display:block;margin-right:0}}.slider{position:relative;height:.5rem;margin-top:1.25rem;margin-bottom:2.25rem;background-color:#e6e6e6;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none}.slider-fill{position:absolute;top:0;left:0;display:inline-block;max-width:100%;height:.5rem;background-color:#cacaca;transition:all .2s ease-in-out}.slider-fill.is-dragging{transition:all 0s linear}.slider-handle{top:50%;transform:translateY(-50%);position:absolute;left:0;z-index:1;display:inline-block;width:1.4rem;height:1.4rem;border-radius:3px;background-color:#2ba6cb;transition:all .2s ease-in-out;-ms-touch-action:manipulation;touch-action:manipulation}[data-whatinput=mouse] .slider-handle{outline:0}.slider-handle:hover{background-color:#258dad}.slider-handle.is-dragging{transition:all 0s linear}.slider.disabled,.slider[disabled]{opacity:.25;cursor:not-allowed}.slider.vertical{display:inline-block;width:.5rem;height:12.5rem;margin:0 1.25rem;transform:scaleY(-1)}.slider.vertical .slider-fill{top:0;width:.5rem;max-height:100%}.slider.vertical .slider-handle{position:absolute;top:0;left:50%;width:1.4rem;height:1.4rem;transform:translateX(-50%)}.switch{height:2rem;position:relative;margin-bottom:1rem;outline:0;font-size:.875rem;font-weight:700;color:#fefefe;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-input{position:absolute;margin-bottom:0;opacity:0}.switch-paddle{position:relative;display:block;width:4rem;height:2rem;border-radius:3px;background:#cacaca;transition:all .25s ease-out;font-weight:inherit;color:inherit;cursor:pointer}input+.switch-paddle{margin:0}.switch-paddle:after{position:absolute;top:.25rem;left:.25rem;display:block;width:1.5rem;height:1.5rem;transform:translateZ(0);border-radius:3px;background:#fefefe;transition:all .25s ease-out;content:""}input:checked~.switch-paddle{background:#2ba6cb}input:checked~.switch-paddle:after{left:2.25rem}[data-whatinput=mouse] input:focus~.switch-paddle{outline:0}.switch-active,.switch-inactive{position:absolute;top:50%;transform:translateY(-50%)}.switch-active{left:8%;display:none}input:checked+label>.switch-active{display:block}.switch-inactive{right:15%}input:checked+label>.switch-inactive{display:none}.switch.tiny{height:1.5rem}.switch.tiny .switch-paddle{width:3rem;height:1.5rem;font-size:.625rem}.switch.tiny .switch-paddle:after{top:.25rem;left:.25rem;width:1rem;height:1rem}.switch.tiny input:checked~.switch-paddle:after{left:1.75rem}.switch.small{height:1.75rem}.switch.small .switch-paddle{width:3.5rem;height:1.75rem;font-size:.75rem}.switch.small .switch-paddle:after{top:.25rem;left:.25rem;width:1.25rem;height:1.25rem}.switch.small input:checked~.switch-paddle:after{left:2rem}.switch.large{height:2.5rem}.switch.large .switch-paddle{width:5rem;height:2.5rem;font-size:1rem}.switch.large .switch-paddle:after{top:.25rem;left:.25rem;width:2rem;height:2rem}.switch.large input:checked~.switch-paddle:after{left:2.75rem}.menu{margin:0;list-style-type:none}.menu>li{display:table-cell;vertical-align:middle}[data-whatinput=mouse] .menu>li{outline:0}.menu>li>a{display:block;padding:.7rem 1rem;line-height:1}.menu a,.menu button,.menu input,.menu select{margin-bottom:0}.menu>li>a i,.menu>li>a i+span,.menu>li>a img,.menu>li>a img+span,.menu>li>a svg,.menu>li>a svg+span{vertical-align:middle}.menu>li>a i,.menu>li>a img,.menu>li>a svg{margin-right:.25rem;display:inline-block}.menu.horizontal>li,.menu>li{display:table-cell}.menu.expanded{display:table;width:100%;table-layout:fixed}.menu.expanded>li:first-child:last-child{width:100%}.menu.vertical>li{display:block}@media print,screen and (min-width:40em){.menu.medium-horizontal>li{display:table-cell}.menu.medium-expanded{display:table;width:100%;table-layout:fixed}.menu.medium-expanded>li:first-child:last-child{width:100%}.menu.medium-vertical>li{display:block}}@media print,screen and (min-width:64em){.menu.large-horizontal>li{display:table-cell}.menu.large-expanded{display:table;width:100%;table-layout:fixed}.menu.large-expanded>li:first-child:last-child{width:100%}.menu.large-vertical>li{display:block}}.menu.simple li{display:inline-block;margin-right:1rem;line-height:1}.menu.simple a{padding:0}.menu.align-right:after,.menu.align-right:before{display:table;content:" "}.menu.align-right:after{clear:both}.menu.align-right>li{float:right}.menu.icon-top>li>a{text-align:center}.menu.icon-top>li>a i,.menu.icon-top>li>a img,.menu.icon-top>li>a svg{display:block;margin:0 auto .25rem}.menu.icon-top.vertical a>span{margin:auto}.menu.nested{margin-left:1rem}.menu .active>a{background:#2ba6cb;color:#fefefe}.menu.menu-bordered li{border:1px solid #e6e6e6}.menu.menu-bordered li:not(:first-child){border-top:0}.menu.menu-hover li:hover{background-color:#e6e6e6}.menu-text{padding-top:0;padding-bottom:0;padding:.7rem 1rem;font-weight:700;line-height:1;color:inherit}.menu-centered{text-align:center}.menu-centered>.menu{display:inline-block}.no-js [data-responsive-menu] ul{display:none}.is-drilldown{position:relative;overflow:hidden}.is-drilldown li{display:block}.is-drilldown.animate-height{transition:height .5s}.is-drilldown-submenu{position:absolute;top:0;left:100%;z-index:-1;width:100%;background:#fefefe;transition:transform .15s linear}.is-drilldown-submenu.is-active{z-index:1;display:block;transform:translateX(-100%)}.is-drilldown-submenu.is-closing{transform:translateX(100%)}.drilldown-submenu-cover-previous{min-height:100%}.is-drilldown-submenu-parent>a{position:relative}.is-drilldown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #2ba6cb;position:absolute;top:50%;margin-top:-6px;right:1rem}.js-drilldown-back>a:before{display:block;width:0;height:0;border:6px inset;content:"";border-right-style:solid;border-color:transparent #2ba6cb transparent transparent;display:inline-block;vertical-align:middle;margin-right:.75rem;border-left-width:0}.is-accordion-submenu-parent>a{position:relative}.is-accordion-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#2ba6cb transparent transparent;position:absolute;top:50%;margin-top:-3px;right:1rem}.is-accordion-submenu-parent[aria-expanded=true]>a:after{transform:rotate(180deg);transform-origin:50% 50%}.dropdown.menu>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu>li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#2ba6cb transparent transparent;right:5px;margin-top:-3px}[data-whatinput=mouse] .dropdown.menu a{outline:0}.no-js .dropdown.menu ul{display:none}.dropdown.menu.vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.vertical>li.opens-left>.is-dropdown-submenu{right:100%;left:auto}.dropdown.menu.vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.vertical>li>a:after{right:14px}.dropdown.menu.vertical>li.opens-left>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-left-width:0;border-right-style:solid;border-color:transparent #2ba6cb transparent transparent}.dropdown.menu.vertical>li.opens-right>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #2ba6cb}@media print,screen and (min-width:40em){.dropdown.menu.medium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.medium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#2ba6cb transparent transparent;right:5px;margin-top:-3px}.dropdown.menu.medium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.medium-vertical>li.opens-left>.is-dropdown-submenu{right:100%;left:auto}.dropdown.menu.medium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.medium-vertical>li>a:after{right:14px}.dropdown.menu.medium-vertical>li.opens-left>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-left-width:0;border-right-style:solid;border-color:transparent #2ba6cb transparent transparent}.dropdown.menu.medium-vertical>li.opens-right>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #2ba6cb}}@media print,screen and (min-width:64em){.dropdown.menu.large-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.large-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#2ba6cb transparent transparent;right:5px;margin-top:-3px}.dropdown.menu.large-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.large-vertical>li.opens-left>.is-dropdown-submenu{right:100%;left:auto}.dropdown.menu.large-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.large-vertical>li>a:after{right:14px}.dropdown.menu.large-vertical>li.opens-left>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-left-width:0;border-right-style:solid;border-color:transparent #2ba6cb transparent transparent}.dropdown.menu.large-vertical>li.opens-right>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #2ba6cb}}.dropdown.menu.align-right .is-dropdown-submenu.first-sub{top:100%;right:0;left:auto}.is-dropdown-menu.vertical{width:100px}.is-dropdown-menu.vertical.align-right{float:right}.is-dropdown-submenu-parent{position:relative}.is-dropdown-submenu-parent a:after{position:absolute;top:50%;right:5px;margin-top:-6px}.is-dropdown-submenu-parent.opens-inner>.is-dropdown-submenu{top:100%;left:auto}.is-dropdown-submenu-parent.opens-left>.is-dropdown-submenu{right:100%;left:auto}.is-dropdown-submenu-parent.opens-right>.is-dropdown-submenu{right:auto;left:100%}.is-dropdown-submenu{position:absolute;top:0;left:100%;z-index:1;display:none;min-width:200px;border:1px solid #cacaca;background:#fefefe}.is-dropdown-submenu .is-dropdown-submenu-parent>a:after{right:14px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-left>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-left-width:0;border-right-style:solid;border-color:transparent #2ba6cb transparent transparent}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-right>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #2ba6cb}.is-dropdown-submenu .is-dropdown-submenu{margin-top:-1px}.is-dropdown-submenu>li{width:100%}.is-dropdown-submenu.js-dropdown-active{display:block}.title-bar{padding:.5rem;background:#0a0a0a;color:#fefefe}.title-bar:after,.title-bar:before{display:table;content:" "}.title-bar:after{clear:both}.title-bar .menu-icon{margin-left:.25rem;margin-right:.25rem}.title-bar-left{float:left}.title-bar-right{float:right;text-align:right}.title-bar-title{display:inline-block;vertical-align:middle;font-weight:700}.top-bar{padding:.5rem}.top-bar:after,.top-bar:before{display:table;content:" "}.top-bar:after{clear:both}.top-bar,.top-bar ul{background-color:#e6e6e6}.top-bar input{max-width:200px;margin-right:1rem}.top-bar .input-group-field{width:100%;margin-right:0}.top-bar input.button{width:auto}.top-bar .top-bar-left,.top-bar .top-bar-right{width:100%}@media print,screen and (min-width:40em){.top-bar .top-bar-left,.top-bar .top-bar-right{width:auto}}@media screen and (max-width:63.9375em){.top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right{width:100%}}@media screen and (max-width:74.9375em){.top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right{width:100%}}.top-bar-title{display:inline-block;float:left;padding:.5rem 1rem .5rem 0}.top-bar-title .menu-icon{bottom:2px}.top-bar-left{float:left}.top-bar-right{float:right}.breadcrumbs{margin:0 0 1rem;list-style:none}.breadcrumbs:after,.breadcrumbs:before{display:table;content:" "}.breadcrumbs:after{clear:both}.breadcrumbs li{float:left;font-size:.6875rem;color:#0a0a0a;cursor:default;text-transform:uppercase}.breadcrumbs li:not(:last-child):after{position:relative;top:1px;margin:0 .75rem;opacity:1;content:"/";color:#cacaca}.breadcrumbs a{color:#2ba6cb}.breadcrumbs a:hover{text-decoration:underline}.breadcrumbs .disabled{color:#cacaca;cursor:not-allowed}.pagination{margin-left:0;margin-bottom:1rem}.pagination:after,.pagination:before{display:table;content:" "}.pagination:after{clear:both}.pagination li{margin-right:.0625rem;border-radius:3px;font-size:.875rem;display:none}.pagination li:first-child,.pagination li:last-child{display:inline-block}@media print,screen and (min-width:40em){.pagination li{display:inline-block}}.pagination a,.pagination button{display:block;padding:.1875rem .625rem;border-radius:3px;color:#0a0a0a}.pagination a:hover,.pagination button:hover{background:#e6e6e6}.pagination .current{padding:.1875rem .625rem;background:#2ba6cb;color:#fefefe;cursor:default}.pagination .disabled{padding:.1875rem .625rem;color:#cacaca;cursor:not-allowed}.pagination .disabled:hover{background:transparent}.pagination .ellipsis:after{padding:.1875rem .625rem;content:"\2026";color:#0a0a0a}.pagination-previous.disabled:before,.pagination-previous a:before{display:inline-block;margin-right:.5rem;content:"\00ab"}.pagination-next.disabled:after,.pagination-next a:after{display:inline-block;margin-left:.5rem;content:"\00bb"}.dropdown-pane{position:absolute;z-index:10;display:block;width:300px;padding:1rem;visibility:hidden;border:1px solid #cacaca;border-radius:3px;background-color:#fefefe;font-size:1rem}.dropdown-pane.is-open{visibility:visible}.dropdown-pane.tiny{width:100px}.dropdown-pane.small{width:200px}.dropdown-pane.large{width:400px}.callout{position:relative;margin:0 0 1rem;padding:1rem;border:1px solid hsla(0,0%,4%,.25);border-radius:3px;background-color:#fff;color:#0a0a0a}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout.primary{background-color:#def2f8;color:#0a0a0a}.callout.secondary{background-color:#fcfcfc;color:#0a0a0a}.callout.alert{background-color:#fcd6d6;color:#0a0a0a}.callout.success{background-color:#e6f7d9;color:#0a0a0a}.callout.warning{background-color:#fff3d9;color:#0a0a0a}.callout.body-font,.callout.header{background-color:#dedede;color:#0a0a0a}.callout.small{padding:.5rem}.callout.large{padding:3rem}.card{margin-bottom:1rem;border:1px solid #e6e6e6;border-radius:3px;background:#fefefe;box-shadow:none;overflow:hidden;color:#0a0a0a}.card>:last-child{margin-bottom:0}.card-divider{padding:1rem;background:#e6e6e6}.card-divider>:last-child{margin-bottom:0}.card-section{padding:1rem}.card-section>:last-child{margin-bottom:0}.media-object{display:block;margin-bottom:1rem}.media-object img{max-width:none}@media screen and (max-width:39.9375em){.media-object.stack-for-small .media-object-section{padding:0;padding-bottom:1rem;display:block}.media-object.stack-for-small .media-object-section img{width:100%}}.media-object-section{display:table-cell;vertical-align:top}.media-object-section:first-child{padding-right:1rem}.media-object-section:last-child:not(:nth-child(2)){padding-left:1rem}.media-object-section>:last-child{margin-bottom:0}.media-object-section.middle{vertical-align:middle}.media-object-section.bottom{vertical-align:bottom}body.is-reveal-open{overflow:hidden}html.is-reveal-open,html.is-reveal-open body{min-height:100%;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.reveal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1005;display:none;background-color:hsla(0,0%,4%,.45);overflow-y:scroll}.reveal{z-index:1006;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;padding:1rem;border:1px solid #cacaca;border-radius:3px;background-color:#fefefe;position:relative;top:100px;margin-right:auto;margin-left:auto;overflow-y:auto}[data-whatinput=mouse] .reveal{outline:0}@media print,screen and (min-width:40em){.reveal{min-height:0}}.reveal .column,.reveal .columns{min-width:0}.reveal>:last-child{margin-bottom:0}@media print,screen and (min-width:40em){.reveal{width:600px;max-width:62.5rem}}@media print,screen and (min-width:40em){.reveal .reveal{right:auto;left:auto;margin:0 auto}}.reveal.collapse{padding:0}@media print,screen and (min-width:40em){.reveal.tiny{width:30%;max-width:62.5rem}}@media print,screen and (min-width:40em){.reveal.small{width:50%;max-width:62.5rem}}@media print,screen and (min-width:40em){.reveal.large{width:90%;max-width:62.5rem}}.reveal.full{top:0;left:0;width:100%;max-width:none;height:100%;height:100vh;min-height:100vh;margin-left:0;border:0;border-radius:0}@media screen and (max-width:39.9375em){.reveal{top:0;left:0;width:100%;max-width:none;height:100%;height:100vh;min-height:100vh;margin-left:0;border:0;border-radius:0}}.reveal.without-overlay{position:fixed}table{width:100%;margin-bottom:1rem;border-radius:3px}table tbody,table tfoot,table thead{border:1px solid #f1f1f1;background-color:#fefefe}table caption{padding:.5rem .625rem .625rem;font-weight:700}table thead{background:#f8f8f8;color:#0a0a0a}table tfoot{background:#f1f1f1;color:#0a0a0a}table tfoot tr,table thead tr{background:transparent}table tfoot td,table tfoot th,table thead td,table thead th{padding:.5rem .625rem .625rem;font-weight:700;text-align:left}table tbody td,table tbody th{padding:.5rem .625rem .625rem}table tbody tr:nth-child(even){border-bottom:0;background-color:#f1f1f1}table.unstriped tbody{background-color:#fefefe}table.unstriped tbody tr{border-bottom:0;border-bottom:1px solid #f1f1f1;background-color:#fefefe}@media screen and (max-width:63.9375em){table.stack tfoot,table.stack thead{display:none}table.stack td,table.stack th,table.stack tr{display:block}table.stack td{border-top:0}}table.scroll{display:block;width:100%;overflow-x:auto}table.hover thead tr:hover{background-color:#f3f3f3}table.hover tfoot tr:hover{background-color:#ececec}table.hover tbody tr:hover{background-color:#f9f9f9}table.hover:not(.unstriped) tr:nth-of-type(even):hover{background-color:#ececec}.table-scroll{overflow-x:auto}.table-scroll table{width:auto}.badge{display:inline-block;min-width:2.1em;padding:.3em;border-radius:50%;font-size:.6rem;text-align:center;background:#2ba6cb;color:#fefefe}.badge.primary{background:#2ba6cb;color:#0a0a0a}.badge.secondary{background:#e9e9e9;color:#0a0a0a}.badge.alert{background:#c60f13;color:#fefefe}.badge.success{background:#5da423;color:#0a0a0a}.badge.warning{background:#ffae00;color:#0a0a0a}.badge.body-font,.badge.header{background:#222;color:#fefefe}.label{display:inline-block;padding:.33333rem .5rem;border-radius:3px;font-size:.8rem;line-height:1;white-space:nowrap;cursor:default;background:#2ba6cb;color:#fefefe}.label.primary{background:#2ba6cb;color:#0a0a0a}.label.secondary{background:#e9e9e9;color:#0a0a0a}.label.alert{background:#c60f13;color:#fefefe}.label.success{background:#5da423;color:#0a0a0a}.label.warning{background:#ffae00;color:#0a0a0a}.label.body-font,.label.header{background:#222;color:#fefefe}.has-tip{position:relative;display:inline-block;border-bottom:1px dotted #8a8a8a;font-weight:700;cursor:help}.tooltip{position:absolute;top:calc(100% + .6495rem);z-index:1200;max-width:10rem;padding:.75rem;border-radius:3px;background-color:#0a0a0a;font-size:80%;color:#fefefe}.tooltip:before{border:.75rem inset;border-top-width:0;border-bottom-style:solid;border-color:transparent transparent #0a0a0a;position:absolute;bottom:100%;left:50%;transform:translateX(-50%)}.tooltip.top:before,.tooltip:before{display:block;width:0;height:0;content:""}.tooltip.top:before{border:.75rem inset;border-bottom-width:0;border-top-style:solid;border-color:#0a0a0a transparent transparent;top:100%;bottom:auto}.tooltip.left:before{border:.75rem inset;border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0a0a0a;left:100%}.tooltip.left:before,.tooltip.right:before{display:block;width:0;height:0;content:"";top:50%;bottom:auto;transform:translateY(-50%)}.tooltip.right:before{border:.75rem inset;border-left-width:0;border-right-style:solid;border-color:transparent #0a0a0a transparent transparent;right:100%;left:auto}.orbit,.orbit-container{position:relative}.orbit-container{height:0;margin:0;list-style:none;overflow:hidden}.orbit-slide{width:100%}.orbit-slide.no-motionui.is-active{top:0;left:0}.orbit-figure{margin:0}.orbit-image{width:100%;max-width:100%;margin:0}.orbit-caption{bottom:0;width:100%;margin-bottom:0;background-color:hsla(0,0%,4%,.5)}.orbit-caption,.orbit-next,.orbit-previous{position:absolute;padding:1rem;color:#fefefe}.orbit-next,.orbit-previous{top:50%;transform:translateY(-50%);z-index:10}[data-whatinput=mouse] .orbit-next,[data-whatinput=mouse] .orbit-previous{outline:0}.orbit-next:active,.orbit-next:focus,.orbit-next:hover,.orbit-previous:active,.orbit-previous:focus,.orbit-previous:hover{background-color:hsla(0,0%,4%,.5)}.orbit-previous{left:0}.orbit-next{left:auto;right:0}.orbit-bullets{position:relative;margin-top:.8rem;margin-bottom:.8rem;text-align:center}[data-whatinput=mouse] .orbit-bullets{outline:0}.orbit-bullets button{width:1.2rem;height:1.2rem;margin:.1rem;border-radius:50%;background-color:#cacaca}.orbit-bullets button.is-active,.orbit-bullets button:hover{background-color:#8a8a8a}.thumbnail{display:inline-block;max-width:100%;margin-bottom:1rem;border:4px solid #fefefe;border-radius:3px;box-shadow:0 0 0 1px hsla(0,0%,4%,.2);line-height:0}a.thumbnail{transition:box-shadow .2s ease-out}a.thumbnail:focus,a.thumbnail:hover{box-shadow:0 0 6px 1px rgba(43,166,203,.5)}a.thumbnail image{box-shadow:none}.row{max-width:62.5rem;margin-right:auto;margin-left:auto}.row:after,.row:before{display:table;content:" "}.row:after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-right:0;padding-left:0}.row .row{margin-right:-.9375rem;margin-left:-.9375rem}@media print,screen and (min-width:40em){.row .row{margin-right:-.9375rem;margin-left:-.9375rem}}@media print,screen and (min-width:64em){.row .row{margin-right:-.9375rem;margin-left:-.9375rem}}.row .row.collapse{margin-right:0;margin-left:0}.row.expanded{max-width:none}.row.expanded .row{margin-right:auto;margin-left:auto}.column,.columns{width:100%;float:left;padding-right:.9375rem;padding-left:.9375rem}.column:last-child:not(:first-child),.columns:last-child:not(:first-child){float:right}.column.end:last-child:last-child,.end.columns:last-child:last-child{float:left}.column.row.row,.row.row.columns{float:none}.row .column.row.row,.row .row.row.columns{margin-right:0;margin-left:0;padding-right:0;padding-left:0}.small-1{width:8.33333%}.small-push-1{position:relative;left:8.33333%}.small-pull-1{position:relative;left:-8.33333%}.small-offset-0{margin-left:0}.small-2{width:16.66667%}.small-push-2{position:relative;left:16.66667%}.small-pull-2{position:relative;left:-16.66667%}.small-offset-1{margin-left:8.33333%}.small-3{width:25%}.small-push-3{position:relative;left:25%}.small-pull-3{position:relative;left:-25%}.small-offset-2{margin-left:16.66667%}.small-4{width:33.33333%}.small-push-4{position:relative;left:33.33333%}.small-pull-4{position:relative;left:-33.33333%}.small-offset-3{margin-left:25%}.small-5{width:41.66667%}.small-push-5{position:relative;left:41.66667%}.small-pull-5{position:relative;left:-41.66667%}.small-offset-4{margin-left:33.33333%}.small-6{width:50%}.small-push-6{position:relative;left:50%}.small-pull-6{position:relative;left:-50%}.small-offset-5{margin-left:41.66667%}.small-7{width:58.33333%}.small-push-7{position:relative;left:58.33333%}.small-pull-7{position:relative;left:-58.33333%}.small-offset-6{margin-left:50%}.small-8{width:66.66667%}.small-push-8{position:relative;left:66.66667%}.small-pull-8{position:relative;left:-66.66667%}.small-offset-7{margin-left:58.33333%}.small-9{width:75%}.small-push-9{position:relative;left:75%}.small-pull-9{position:relative;left:-75%}.small-offset-8{margin-left:66.66667%}.small-10{width:83.33333%}.small-push-10{position:relative;left:83.33333%}.small-pull-10{position:relative;left:-83.33333%}.small-offset-9{margin-left:75%}.small-11{width:91.66667%}.small-push-11{position:relative;left:91.66667%}.small-pull-11{position:relative;left:-91.66667%}.small-offset-10{margin-left:83.33333%}.small-12{width:100%}.small-offset-11{margin-left:91.66667%}.small-up-1>.column,.small-up-1>.columns{float:left;width:100%}.small-up-1>.column:nth-of-type(1n),.small-up-1>.columns:nth-of-type(1n){clear:none}.small-up-1>.column:nth-of-type(1n+1),.small-up-1>.columns:nth-of-type(1n+1){clear:both}.small-up-1>.column:last-child,.small-up-1>.columns:last-child{float:left}.small-up-2>.column,.small-up-2>.columns{float:left;width:50%}.small-up-2>.column:nth-of-type(1n),.small-up-2>.columns:nth-of-type(1n){clear:none}.small-up-2>.column:nth-of-type(2n+1),.small-up-2>.columns:nth-of-type(2n+1){clear:both}.small-up-2>.column:last-child,.small-up-2>.columns:last-child{float:left}.small-up-3>.column,.small-up-3>.columns{float:left;width:33.33333%}.small-up-3>.column:nth-of-type(1n),.small-up-3>.columns:nth-of-type(1n){clear:none}.small-up-3>.column:nth-of-type(3n+1),.small-up-3>.columns:nth-of-type(3n+1){clear:both}.small-up-3>.column:last-child,.small-up-3>.columns:last-child{float:left}.small-up-4>.column,.small-up-4>.columns{float:left;width:25%}.small-up-4>.column:nth-of-type(1n),.small-up-4>.columns:nth-of-type(1n){clear:none}.small-up-4>.column:nth-of-type(4n+1),.small-up-4>.columns:nth-of-type(4n+1){clear:both}.small-up-4>.column:last-child,.small-up-4>.columns:last-child{float:left}.small-up-5>.column,.small-up-5>.columns{float:left;width:20%}.small-up-5>.column:nth-of-type(1n),.small-up-5>.columns:nth-of-type(1n){clear:none}.small-up-5>.column:nth-of-type(5n+1),.small-up-5>.columns:nth-of-type(5n+1){clear:both}.small-up-5>.column:last-child,.small-up-5>.columns:last-child{float:left}.small-up-6>.column,.small-up-6>.columns{float:left;width:16.66667%}.small-up-6>.column:nth-of-type(1n),.small-up-6>.columns:nth-of-type(1n){clear:none}.small-up-6>.column:nth-of-type(6n+1),.small-up-6>.columns:nth-of-type(6n+1){clear:both}.small-up-6>.column:last-child,.small-up-6>.columns:last-child{float:left}.small-up-7>.column,.small-up-7>.columns{float:left;width:14.28571%}.small-up-7>.column:nth-of-type(1n),.small-up-7>.columns:nth-of-type(1n){clear:none}.small-up-7>.column:nth-of-type(7n+1),.small-up-7>.columns:nth-of-type(7n+1){clear:both}.small-up-7>.column:last-child,.small-up-7>.columns:last-child{float:left}.small-up-8>.column,.small-up-8>.columns{float:left;width:12.5%}.small-up-8>.column:nth-of-type(1n),.small-up-8>.columns:nth-of-type(1n){clear:none}.small-up-8>.column:nth-of-type(8n+1),.small-up-8>.columns:nth-of-type(8n+1){clear:both}.small-up-8>.column:last-child,.small-up-8>.columns:last-child{float:left}.small-collapse>.column,.small-collapse>.columns{padding-right:0;padding-left:0}.expanded.row .small-collapse.row,.small-collapse .row{margin-right:0;margin-left:0}.small-uncollapse>.column,.small-uncollapse>.columns{padding-right:.9375rem;padding-left:.9375rem}.small-centered{margin-right:auto;margin-left:auto}.small-centered,.small-centered:last-child:not(:first-child){float:none;clear:both}.small-pull-0,.small-push-0,.small-uncentered{position:static;float:left;margin-right:0;margin-left:0}@media print,screen and (min-width:40em){.medium-1{width:8.33333%}.medium-push-1{position:relative;left:8.33333%}.medium-pull-1{position:relative;left:-8.33333%}.medium-offset-0{margin-left:0}.medium-2{width:16.66667%}.medium-push-2{position:relative;left:16.66667%}.medium-pull-2{position:relative;left:-16.66667%}.medium-offset-1{margin-left:8.33333%}.medium-3{width:25%}.medium-push-3{position:relative;left:25%}.medium-pull-3{position:relative;left:-25%}.medium-offset-2{margin-left:16.66667%}.medium-4{width:33.33333%}.medium-push-4{position:relative;left:33.33333%}.medium-pull-4{position:relative;left:-33.33333%}.medium-offset-3{margin-left:25%}.medium-5{width:41.66667%}.medium-push-5{position:relative;left:41.66667%}.medium-pull-5{position:relative;left:-41.66667%}.medium-offset-4{margin-left:33.33333%}.medium-6{width:50%}.medium-push-6{position:relative;left:50%}.medium-pull-6{position:relative;left:-50%}.medium-offset-5{margin-left:41.66667%}.medium-7{width:58.33333%}.medium-push-7{position:relative;left:58.33333%}.medium-pull-7{position:relative;left:-58.33333%}.medium-offset-6{margin-left:50%}.medium-8{width:66.66667%}.medium-push-8{position:relative;left:66.66667%}.medium-pull-8{position:relative;left:-66.66667%}.medium-offset-7{margin-left:58.33333%}.medium-9{width:75%}.medium-push-9{position:relative;left:75%}.medium-pull-9{position:relative;left:-75%}.medium-offset-8{margin-left:66.66667%}.medium-10{width:83.33333%}.medium-push-10{position:relative;left:83.33333%}.medium-pull-10{position:relative;left:-83.33333%}.medium-offset-9{margin-left:75%}.medium-11{width:91.66667%}.medium-push-11{position:relative;left:91.66667%}.medium-pull-11{position:relative;left:-91.66667%}.medium-offset-10{margin-left:83.33333%}.medium-12{width:100%}.medium-offset-11{margin-left:91.66667%}.medium-up-1>.column,.medium-up-1>.columns{float:left;width:100%}.medium-up-1>.column:nth-of-type(1n),.medium-up-1>.columns:nth-of-type(1n){clear:none}.medium-up-1>.column:nth-of-type(1n+1),.medium-up-1>.columns:nth-of-type(1n+1){clear:both}.medium-up-1>.column:last-child,.medium-up-1>.columns:last-child{float:left}.medium-up-2>.column,.medium-up-2>.columns{float:left;width:50%}.medium-up-2>.column:nth-of-type(1n),.medium-up-2>.columns:nth-of-type(1n){clear:none}.medium-up-2>.column:nth-of-type(2n+1),.medium-up-2>.columns:nth-of-type(2n+1){clear:both}.medium-up-2>.column:last-child,.medium-up-2>.columns:last-child{float:left}.medium-up-3>.column,.medium-up-3>.columns{float:left;width:33.33333%}.medium-up-3>.column:nth-of-type(1n),.medium-up-3>.columns:nth-of-type(1n){clear:none}.medium-up-3>.column:nth-of-type(3n+1),.medium-up-3>.columns:nth-of-type(3n+1){clear:both}.medium-up-3>.column:last-child,.medium-up-3>.columns:last-child{float:left}.medium-up-4>.column,.medium-up-4>.columns{float:left;width:25%}.medium-up-4>.column:nth-of-type(1n),.medium-up-4>.columns:nth-of-type(1n){clear:none}.medium-up-4>.column:nth-of-type(4n+1),.medium-up-4>.columns:nth-of-type(4n+1){clear:both}.medium-up-4>.column:last-child,.medium-up-4>.columns:last-child{float:left}.medium-up-5>.column,.medium-up-5>.columns{float:left;width:20%}.medium-up-5>.column:nth-of-type(1n),.medium-up-5>.columns:nth-of-type(1n){clear:none}.medium-up-5>.column:nth-of-type(5n+1),.medium-up-5>.columns:nth-of-type(5n+1){clear:both}.medium-up-5>.column:last-child,.medium-up-5>.columns:last-child{float:left}.medium-up-6>.column,.medium-up-6>.columns{float:left;width:16.66667%}.medium-up-6>.column:nth-of-type(1n),.medium-up-6>.columns:nth-of-type(1n){clear:none}.medium-up-6>.column:nth-of-type(6n+1),.medium-up-6>.columns:nth-of-type(6n+1){clear:both}.medium-up-6>.column:last-child,.medium-up-6>.columns:last-child{float:left}.medium-up-7>.column,.medium-up-7>.columns{float:left;width:14.28571%}.medium-up-7>.column:nth-of-type(1n),.medium-up-7>.columns:nth-of-type(1n){clear:none}.medium-up-7>.column:nth-of-type(7n+1),.medium-up-7>.columns:nth-of-type(7n+1){clear:both}.medium-up-7>.column:last-child,.medium-up-7>.columns:last-child{float:left}.medium-up-8>.column,.medium-up-8>.columns{float:left;width:12.5%}.medium-up-8>.column:nth-of-type(1n),.medium-up-8>.columns:nth-of-type(1n){clear:none}.medium-up-8>.column:nth-of-type(8n+1),.medium-up-8>.columns:nth-of-type(8n+1){clear:both}.medium-up-8>.column:last-child,.medium-up-8>.columns:last-child{float:left}.medium-collapse>.column,.medium-collapse>.columns{padding-right:0;padding-left:0}.expanded.row .medium-collapse.row,.medium-collapse .row{margin-right:0;margin-left:0}.medium-uncollapse>.column,.medium-uncollapse>.columns{padding-right:.9375rem;padding-left:.9375rem}.medium-centered{margin-right:auto;margin-left:auto}.medium-centered,.medium-centered:last-child:not(:first-child){float:none;clear:both}.medium-pull-0,.medium-push-0,.medium-uncentered{position:static;float:left;margin-right:0;margin-left:0}}@media print,screen and (min-width:64em){.large-1{width:8.33333%}.large-push-1{position:relative;left:8.33333%}.large-pull-1{position:relative;left:-8.33333%}.large-offset-0{margin-left:0}.large-2{width:16.66667%}.large-push-2{position:relative;left:16.66667%}.large-pull-2{position:relative;left:-16.66667%}.large-offset-1{margin-left:8.33333%}.large-3{width:25%}.large-push-3{position:relative;left:25%}.large-pull-3{position:relative;left:-25%}.large-offset-2{margin-left:16.66667%}.large-4{width:33.33333%}.large-push-4{position:relative;left:33.33333%}.large-pull-4{position:relative;left:-33.33333%}.large-offset-3{margin-left:25%}.large-5{width:41.66667%}.large-push-5{position:relative;left:41.66667%}.large-pull-5{position:relative;left:-41.66667%}.large-offset-4{margin-left:33.33333%}.large-6{width:50%}.large-push-6{position:relative;left:50%}.large-pull-6{position:relative;left:-50%}.large-offset-5{margin-left:41.66667%}.large-7{width:58.33333%}.large-push-7{position:relative;left:58.33333%}.large-pull-7{position:relative;left:-58.33333%}.large-offset-6{margin-left:50%}.large-8{width:66.66667%}.large-push-8{position:relative;left:66.66667%}.large-pull-8{position:relative;left:-66.66667%}.large-offset-7{margin-left:58.33333%}.large-9{width:75%}.large-push-9{position:relative;left:75%}.large-pull-9{position:relative;left:-75%}.large-offset-8{margin-left:66.66667%}.large-10{width:83.33333%}.large-push-10{position:relative;left:83.33333%}.large-pull-10{position:relative;left:-83.33333%}.large-offset-9{margin-left:75%}.large-11{width:91.66667%}.large-push-11{position:relative;left:91.66667%}.large-pull-11{position:relative;left:-91.66667%}.large-offset-10{margin-left:83.33333%}.large-12{width:100%}.large-offset-11{margin-left:91.66667%}.large-up-1>.column,.large-up-1>.columns{float:left;width:100%}.large-up-1>.column:nth-of-type(1n),.large-up-1>.columns:nth-of-type(1n){clear:none}.large-up-1>.column:nth-of-type(1n+1),.large-up-1>.columns:nth-of-type(1n+1){clear:both}.large-up-1>.column:last-child,.large-up-1>.columns:last-child{float:left}.large-up-2>.column,.large-up-2>.columns{float:left;width:50%}.large-up-2>.column:nth-of-type(1n),.large-up-2>.columns:nth-of-type(1n){clear:none}.large-up-2>.column:nth-of-type(2n+1),.large-up-2>.columns:nth-of-type(2n+1){clear:both}.large-up-2>.column:last-child,.large-up-2>.columns:last-child{float:left}.large-up-3>.column,.large-up-3>.columns{float:left;width:33.33333%}.large-up-3>.column:nth-of-type(1n),.large-up-3>.columns:nth-of-type(1n){clear:none}.large-up-3>.column:nth-of-type(3n+1),.large-up-3>.columns:nth-of-type(3n+1){clear:both}.large-up-3>.column:last-child,.large-up-3>.columns:last-child{float:left}.large-up-4>.column,.large-up-4>.columns{float:left;width:25%}.large-up-4>.column:nth-of-type(1n),.large-up-4>.columns:nth-of-type(1n){clear:none}.large-up-4>.column:nth-of-type(4n+1),.large-up-4>.columns:nth-of-type(4n+1){clear:both}.large-up-4>.column:last-child,.large-up-4>.columns:last-child{float:left}.large-up-5>.column,.large-up-5>.columns{float:left;width:20%}.large-up-5>.column:nth-of-type(1n),.large-up-5>.columns:nth-of-type(1n){clear:none}.large-up-5>.column:nth-of-type(5n+1),.large-up-5>.columns:nth-of-type(5n+1){clear:both}.large-up-5>.column:last-child,.large-up-5>.columns:last-child{float:left}.large-up-6>.column,.large-up-6>.columns{float:left;width:16.66667%}.large-up-6>.column:nth-of-type(1n),.large-up-6>.columns:nth-of-type(1n){clear:none}.large-up-6>.column:nth-of-type(6n+1),.large-up-6>.columns:nth-of-type(6n+1){clear:both}.large-up-6>.column:last-child,.large-up-6>.columns:last-child{float:left}.large-up-7>.column,.large-up-7>.columns{float:left;width:14.28571%}.large-up-7>.column:nth-of-type(1n),.large-up-7>.columns:nth-of-type(1n){clear:none}.large-up-7>.column:nth-of-type(7n+1),.large-up-7>.columns:nth-of-type(7n+1){clear:both}.large-up-7>.column:last-child,.large-up-7>.columns:last-child{float:left}.large-up-8>.column,.large-up-8>.columns{float:left;width:12.5%}.large-up-8>.column:nth-of-type(1n),.large-up-8>.columns:nth-of-type(1n){clear:none}.large-up-8>.column:nth-of-type(8n+1),.large-up-8>.columns:nth-of-type(8n+1){clear:both}.large-up-8>.column:last-child,.large-up-8>.columns:last-child{float:left}.large-collapse>.column,.large-collapse>.columns{padding-right:0;padding-left:0}.expanded.row .large-collapse.row,.large-collapse .row{margin-right:0;margin-left:0}.large-uncollapse>.column,.large-uncollapse>.columns{padding-right:.9375rem;padding-left:.9375rem}.large-centered{margin-right:auto;margin-left:auto}.large-centered,.large-centered:last-child:not(:first-child){float:none;clear:both}.large-pull-0,.large-push-0,.large-uncentered{position:static;float:left;margin-right:0;margin-left:0}}.column-block{margin-bottom:1.875rem}.column-block>:last-child{margin-bottom:0}.menu-icon{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon:after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#fefefe;box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;content:""}.menu-icon:hover:after{background:#cacaca;box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca}.menu-icon.dark{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon.dark:after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#0a0a0a;box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;content:""}.menu-icon.dark:hover:after{background:#8a8a8a;box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a}.slide-in-down.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:translateY(-100%);transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden}.slide-in-down.mui-enter.mui-enter-active{transform:translateY(0)}.slide-in-left.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:translateX(-100%);transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden}.slide-in-left.mui-enter.mui-enter-active{transform:translateX(0)}.slide-in-up.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:translateY(100%);transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden}.slide-in-up.mui-enter.mui-enter-active{transform:translateY(0)}.slide-in-right.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:translateX(100%);transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden}.slide-in-right.mui-enter.mui-enter-active{transform:translateX(0)}.slide-out-down.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:translateY(0);transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden}.slide-out-down.mui-leave.mui-leave-active{transform:translateY(100%)}.slide-out-right.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:translateX(0);transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden}.slide-out-right.mui-leave.mui-leave-active{transform:translateX(100%)}.slide-out-up.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:translateY(0);transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden}.slide-out-up.mui-leave.mui-leave-active{transform:translateY(-100%)}.slide-out-left.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:translateX(0);transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden}.slide-out-left.mui-leave.mui-leave-active{transform:translateX(-100%)}.fade-in.mui-enter{transition-duration:.5s;transition-timing-function:linear;opacity:0;transition-property:opacity}.fade-in.mui-enter.mui-enter-active{opacity:1}.fade-out.mui-leave{transition-duration:.5s;transition-timing-function:linear;opacity:1;transition-property:opacity}.fade-out.mui-leave.mui-leave-active{opacity:0}.hinge-in-from-top.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotateX(-90deg);transform-origin:top;transition-property:transform,opacity;opacity:0}.hinge-in-from-top.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-right.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotateY(-90deg);transform-origin:right;transition-property:transform,opacity;opacity:0}.hinge-in-from-right.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-bottom.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotateX(90deg);transform-origin:bottom;transition-property:transform,opacity;opacity:0}.hinge-in-from-bottom.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-left.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotateY(90deg);transform-origin:left;transition-property:transform,opacity;opacity:0}.hinge-in-from-left.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-middle-x.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotateX(-90deg);transform-origin:center;transition-property:transform,opacity;opacity:0}.hinge-in-from-middle-x.mui-enter.mui-enter-active{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-in-from-middle-y.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotateY(-90deg);transform-origin:center;transition-property:transform,opacity;opacity:0}.hinge-in-from-middle-y.mui-enter.mui-enter-active,.hinge-out-from-top.mui-leave{transform:perspective(2000px) rotate(0deg);opacity:1}.hinge-out-from-top.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform-origin:top;transition-property:transform,opacity}.hinge-out-from-top.mui-leave.mui-leave-active{transform:perspective(2000px) rotateX(-90deg);opacity:0}.hinge-out-from-right.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:right;transition-property:transform,opacity;opacity:1}.hinge-out-from-right.mui-leave.mui-leave-active{transform:perspective(2000px) rotateY(-90deg);opacity:0}.hinge-out-from-bottom.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:bottom;transition-property:transform,opacity;opacity:1}.hinge-out-from-bottom.mui-leave.mui-leave-active{transform:perspective(2000px) rotateX(90deg);opacity:0}.hinge-out-from-left.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:left;transition-property:transform,opacity;opacity:1}.hinge-out-from-left.mui-leave.mui-leave-active{transform:perspective(2000px) rotateY(90deg);opacity:0}.hinge-out-from-middle-x.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:center;transition-property:transform,opacity;opacity:1}.hinge-out-from-middle-x.mui-leave.mui-leave-active{transform:perspective(2000px) rotateX(-90deg);opacity:0}.hinge-out-from-middle-y.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:perspective(2000px) rotate(0deg);transform-origin:center;transition-property:transform,opacity;opacity:1}.hinge-out-from-middle-y.mui-leave.mui-leave-active{transform:perspective(2000px) rotateY(-90deg);opacity:0}.scale-in-up.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:scale(.5);transition-property:transform,opacity;opacity:0}.scale-in-up.mui-enter.mui-enter-active{transform:scale(1);opacity:1}.scale-in-down.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:scale(1.5);transition-property:transform,opacity;opacity:0}.scale-in-down.mui-enter.mui-enter-active,.scale-out-up.mui-leave{transform:scale(1);opacity:1}.scale-out-up.mui-leave{transition-duration:.5s;transition-timing-function:linear;transition-property:transform,opacity}.scale-out-up.mui-leave.mui-leave-active{transform:scale(1.5);opacity:0}.scale-out-down.mui-leave{transition-duration:.5s;transition-timing-function:linear;transform:scale(1);transition-property:transform,opacity;opacity:1}.scale-out-down.mui-leave.mui-leave-active{transform:scale(.5);opacity:0}.spin-in.mui-enter{transition-duration:.5s;transition-timing-function:linear;transform:rotate(-270deg);transition-property:transform,opacity;opacity:0}.spin-in.mui-enter.mui-enter-active,.spin-out.mui-leave{transform:rotate(0);opacity:1}.spin-out.mui-leave{transition-duration:.5s;transition-timing-function:linear;transition-property:transform,opacity}.spin-in-ccw.mui-enter,.spin-out.mui-leave.mui-leave-active{transform:rotate(270deg);opacity:0}.spin-in-ccw.mui-enter{transition-duration:.5s;transition-timing-function:linear;transition-property:transform,opacity}.spin-in-ccw.mui-enter.mui-enter-active,.spin-out-ccw.mui-leave{transform:rotate(0);opacity:1}.spin-out-ccw.mui-leave{transition-duration:.5s;transition-timing-function:linear;transition-property:transform,opacity}.spin-out-ccw.mui-leave.mui-leave-active{transform:rotate(-270deg);opacity:0}.slow{transition-duration:.75s!important}.fast{transition-duration:.25s!important}.linear{transition-timing-function:linear!important}.ease{transition-timing-function:ease!important}.ease-in{transition-timing-function:ease-in!important}.ease-out{transition-timing-function:ease-out!important}.ease-in-out{transition-timing-function:ease-in-out!important}.bounce-in{transition-timing-function:cubic-bezier(.485,.155,.24,1.245)!important}.bounce-out{transition-timing-function:cubic-bezier(.485,.155,.515,.845)!important}.bounce-in-out{transition-timing-function:cubic-bezier(.76,-.245,.24,1.245)!important}.short-delay{transition-delay:.3s!important}.long-delay{transition-delay:.7s!important}.shake{animation-name:a}@keyframes a{0%,10%,20%,30%,40%,50%,60%,70%,80%,90%{transform:translateX(7%)}5%,15%,25%,35%,45%,55%,65%,75%,85%,95%{transform:translateX(-7%)}}.spin-ccw,.spin-cw{animation-name:b}@keyframes b{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.wiggle{animation-name:c}@keyframes c{40%,50%,60%{transform:rotate(7deg)}35%,45%,55%,65%{transform:rotate(-7deg)}0%,30%,70%,to{transform:rotate(0)}}.shake,.spin-ccw,.spin-cw,.wiggle{animation-duration:.5s}.infinite{animation-iteration-count:infinite}.slow{animation-duration:.75s!important}.fast{animation-duration:.25s!important}.linear{animation-timing-function:linear!important}.ease{animation-timing-function:ease!important}.ease-in{animation-timing-function:ease-in!important}.ease-out{animation-timing-function:ease-out!important}.ease-in-out{animation-timing-function:ease-in-out!important}.bounce-in{animation-timing-function:cubic-bezier(.485,.155,.24,1.245)!important}.bounce-out{animation-timing-function:cubic-bezier(.485,.155,.515,.845)!important}.bounce-in-out{animation-timing-function:cubic-bezier(.76,-.245,.24,1.245)!important}.short-delay{animation-delay:.3s!important}.long-delay{animation-delay:.7s!important} \ No newline at end of file diff --git a/templates/PragueTennisCamp/Resources/assets/css/images/bg.png b/templates/PragueTennisCamp/Resources/assets/css/images/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb1fd129e458475d4ee2f3b5629be6d3324720b GIT binary patch literal 7165 zcmVWFU8GbZ8()Nlj2>E@cM*02^URL_t(|+Lc|$b{x5u zM0#(_8;Yc)Znb&6d}q#V=KudnvuJ=F6^x6lUg%IPR%HRWKCXfL`SYj4f6lp)e$V0m zmH)Xo=X(GD)c>rVbCq*$@0@G=YZ-jDbk3#DxxzWOI_K{A9{=$0Yz+MvP+(6I1!G6#5w<&y9tSS6$h1XJJPc9FOQ=1YWc!3Rs zpJ(UX-v5902XXbk-_-^Jv7K{=uvsKJ9O9lg2EPZUNQemd`^7nTgx?$I+zULvA*QSG z9Gr8-22*_TM9l*ug?-?9!x}uJ6?i6r5q|#s={^?ee-7cN=jhxoxS>T{#KKbe>>0ka zg!i=mz*^^A21KlY*kkMff;9P`dyu{lCUMSPJ!7;=+Wq&Z{ykS9NN09OnB%}17zilwb71cIKeh!3~#OK1<)gb8uitz;`rS)Q% z0QVkY0e^`vXmDfxi&ob8o^UCMdxrWPb-&>7)^DQl#O{QI-uyF1=iDq*S_NzQ?$`ON ze_l!I>KpuiM#4MizQIAZAhk7|1-`!%uhn$618$_;;$k?k8V)Xed5?C$6K>}Z=c^?V zWKSxzJ0PWl-!vQ9H4wwU=SnKA64G-3LcPGDq63l{>#NDe1!*hjy#+Wb$N)Kh-oO6# zKqU1bTEyxPB?aP*U~j4jA#38gFSOu6=-O{ASrMatfbR*!Nrc2@@b?1MqdHWtdQMyHZ;KRffz^7m8oIudlXCfo)!)z2kxyv0&jwQ zd*aeTsDKn0>I8>?&q-srJB(F2t5h2U%h0EB#~!t%N{m`Z#oe-%_PowL zHVBmXXDk>Fu)PzWUvPN-Hl)JeUsM2vde-pFuHp+nqIV$Z84mLj!J`_qRZn19IjuF} zg8>45hp0V?7<Pf4=vJmw2_BlgbN#XcmjbB2dwt&qUefAbD{34Y}1*Ajpwi z$DOhR7z6_6Oyq)g%-N*ZQ^nn0b-jwuv`X@X-J1+MRYCMVTJTIbD0qLp3a%T``_Lpxn8s3+SUN_H>c0O?sEzU!&B;=PXL_}MIG0c_dqa-M6}&|6g!_As<$Q!g@lP6Caj~afDkS7rGJFZ;(@R4ymIe|$Kul1> zK{jC6F<;WbdqMz~vWmpu*1OYt3}^wa2x-RQPBGk-~^iz}P!tvIoE~=+s#pZvHQDo*axL+NLjl0i$#7{}5^bm9kYFH^f|O z&P=36~8)zW>a57m-<9Q3MkP00l?qsJZ}du1UpJ z5tlb`-5<{q7>xf4#A7>^`6zj!SR}QG8WL!vCKrF;g>nw8QY8!NHkhUscCB&FwY*^~ z+^>W`e+D3}us}g2+Ek)*paOwwNC(s5S5Pk%%7-dZ*OeJWXrC!ZC5c&sV*!bzl9+Xc z!oS)Z>rPar+`!u^#hGPMFAK{kiA(xOnb1sj<_(kh3NZAZsxDu=K9w1|5g8|&D zz#dH`g}G76Q$YS=4^F|JeEAB}J@H6a4;6fk-Fty{|;L zMW~yCDoiXwHBk1NlC#ixo0%K-=m^q0iSJIV@>TNKTpPS72yn33=0&Kj68^szF6YRV zdRX5T`cZ^FJ`4E1BE37t(#(QGU*Yp7EF-0Zn89}Rs%q0~jwE6iW>Di57Bg%G%!p+j zz?iR;q{{q4ZyRj^W8@1O&P@xBuS6x^jW}$tdMZf0rd)0WggJ+zI3q&G)`gldxmq+0 zA7i`$`^5Vor%37UaR@1A+GjY5PPROQ8h&=WYsujnv z(DjS4u^uJBNa^+<8LcS3Kx3<_3-6@Irw!+%Ag0TJaHC*kl&If4quoKvbV2hxd=3&d z=~g-t0YJZ?NyHwzXR64#aKg~rK_Xv`^8EmJUq!#jAc!>yggO@YWCBFRTzhMv1fBnT zOR#Ijv^+gwCu-5zG?8P_`JY##ktbFC@yZxe3-|nN)eLxw zH8+6*V}&f}B%BZ~8_J;G;3TSFdT>5iGdygrig+0R1srOCqOc?Q-9tpb$2xh>!V_94 z@A8TxoBRP*q@H@A*HmMw3eHyxU~v*P zy`vHBw_LRjQy>bXW-8liULr8@A;l~}(w6LD@Jweao_qE2%0HM8_g2%P6y75`^H3Rq z&wN80L^^pP{r_hG5@{*}26nH)o^>0lq7iF5JLmo*av;6oRxds$-oXH#9O{*i*oJ{g zC!<+4=LFiPeOZn8R3g)2zqhCGo>H=Zfg$6r-V!3#Jr&HYVAu=d{Hx%~7N8kxj8b8> z(;0#24T9bTN;^Al2M?7e(8}FBqn1haA`m-L&c_W@j`B(dDK*^9hq52ws5Bh1n$-wB z*(0@hh3J3Af-=j-sCD`89)(-FP(a&L9FPgfCzN*{w!o`Nt!qqtQs*tH z;}wPlbXM+1e6Jpx^vrz3CmK6@aiD)a@wwU>L_iblI_}I8(f3(M+3ej-Yzrs|7D-Wp zF`EcXlSP_+a?&&l7v|A(+J|XCP)A!am?yZV^BY=}%SZs^N9+=5{#-1{6XTTXf5R{& zNjKyBgP~>>%o#t7{?8sxnXDj`>ITwSQ2imrq-RT!|NYcEPOhstwUjGUxDA1F+~Gh{ zfE{kAqA>5`pZOacR?C2>5s$2ZykZLBJE*qK!nr6%zmm!-3`u|S27IRH6p|oV=jsX2 zMN+jqJO$g@ax5c?P3$q6Z<38BpeoY1Qwxu(#_S$oQ$2C)jjAgvV>o8dEzeIN$ZtLl zLxwLYAJpJ9pjtd+Zy375;FuhW7xu~ze~3o^mW2O(0#Zqg_PCSCi!7Msd$P-GfYico zWVplgeg|8!<#A;KYfC7_kQsy;?lR+D^SQx#6vBsDTovZ;s|^NeSP2wSoT zWVnYoC{^>U{Cg4u?%)BHEwvI%T$y5ERac6;27pX{-9n0i(K6I?VS`ub)tHRlixl*D z?M3oHI(%p4maSYjwJNW%l2E^qFFZYgxN{XYr341qkv$u&^4Sn?fW!xfrKLvMiCp(E zuX3Wb{h%_{4=?MyRcl549tBTS1KcXLs>{hB%8Ap)Ak1DJu;|z-BJ&+9;eKBu)8Z;p zH=(Au!PjsG96Cdc}=kuQR0MJGqtjhzD0g5-N|?IzexF8kxlXyB{PlS)*!c7FI**^niDT zi2Ad|8}f_M8JzHlC^H#I?%E~H4B0?Ud&537z;Syqw5;PMOmzth4-2DcdEn{S*l+~T zKL{+VB9*$QLsN}CEg1A%V1ErU)1KV@5A4p!#G-^;@rzS2&!mTfgo81IutMA6j6upg zava>kTwptmkg$s|%&{7$AEZ7n1}u|^>83rbvo@soPRMv62%Pemb7LOxUgbk-3W!o` z!%*R#VO0lomkuO3E5$ko==ep0I|~^|&m5NEY zKPdZ`!fIP%tgc3N>ZiCheTp;95kc!Fgs+8cnFBX^5`Ul zQ_f;YS{KsBIBbB3F_M~C$k>)Klo+RUgOs&`_%$I7wfj8q{~%hbc^vu-Hf#;H6!zEh zwD3>vzOgxT7NT)5t1+b^@rQo{^|l(du&FqlRn+=U8#Puf1!J=S7jd}3jq>98zZiD8 z4@Mcdy%9lg2V(qY(9xC=ag@j8K40or3UH!1Z$6t!8bR7 z&Amb?)B(LwP=^<%CKWii7f=OTM!qC5rl%dTM#_LXYA7!%Xe>qv2Yn!TBd0^_saq?H z)c;PTQW~p=g}SRcgqN^&E)o`$n92p_Sp@T&Q>&)Xt&}be5#S8xqDJaI*burIEgayCxpSWIPe9=G#60vnxXySpLP~jXzJllu z#R3ZjV66dW;`Kx0GlOo7M%4%8mfEz#?K}&d(`?mYZQS7%uCA3Lbs{2}?a$O_eImkT z3_3=JK^CyEBvO#~CwCt`VH<7{y}v*~TmmCSnn)3yYEh`Eu`@`~nF=WS4O{u?=9>f- zdhr}_Gj6>pxuVhFvI-}MV$uupF?UhQ*{L25bwl+NcT?@aM%}P`i*UHYxJc4ssvd0= zRk@5JUO93P473yO7=KxeSRjq~@<)OXije!DVuHk|OfN+ss9fX=A<@=FFE;_3Sbgs} z*{;Sad>o)08}S4xK0rlFq@IhbCx4N%PQrMpBZxKLMZn%T_6mh}hpjU!K91oJ2Lr7co44d7`Mfu_oXdNJ0~vzZD{Xf5`99 zf{|c`(S5$Qq6P^G8OKT>A4f`xrO_E9@cO&a^U+d|M-_obIA^Y|R+<3U8F?Cy7^2oe zuoe3ZdT=i%^wt>AaAf@tr09X7g23t zj5}Q;aP<#RLFraiJE^qUazFjE&n`0i-4pLj>+Q&EY`u-hDfhoqb!=h^UbAIix!7D@ z=;9YqgRy$^1RKO6O5%_lUcVTJ_K_t7jz{o~>woi&m?YiEi(Cm+u&$4o5ue-2g9yy; z3Jlh7-F<6~!{r23xL9(>$f{63GuWM-RkCkD6%+m3xyLIrx@W4&t#P)-z|BOUs!61* zC?U1d@Hzd9;W|8gx)hA{aVDw;mS?qR!aYlZdb8kkzR$|w@YVe@GkzB7%|cv57e@c> zppfkd5|u$=LKgA<2EHJZ2B%e#>s8AQ=fdhxKESlQ-jLXj#k`Xk--J3lJi!?~j9FEa z5{_cXOllQ7JmD#Y*(x}FG~{4r0gc~`tL;YP$|LNM?ciYXx~0KrW~!(bZ4{wEPg5Qq zZ?Syh078FWwRN*6l%Dp~4z}C4bBc#8FV^sWzB2?kJ4{R{B7sRNMit9cZe*~|R1ME?c|`$J0)@(9nn7;e<|zQo5q$bE zSAIvhn7W~Qq-*N>Ey4(t;zYfQgRrGxNM;d<@JGXYoUtvsju_HD){nh4DaaX@%hQ;< zyEEqb3Wp$9t!t`@6umw}8ooyMvQpBF(SqF2C^OxRT|-0Dl{1|WWl4{8p&E(vJ)o z6`EiGw%Nn|Ax5oK?+4BlkQq$a$Z^`#7`<0;CzAs92opNNCRcI!%!%^-y`D1JpgrY z|;h-;Ok!T~peVS;$Sk;J?KL8<^&Mw<0MO&EeTtz1Y= zj1f9*ccOWyd~$@;=f)oNyPwc^ttf#>HVA<8xTcK}8a>{LC18k?l~3Qutyck)6Zh6; zgtKAr*OARAH^wi`hHd4TsRWeb=)d=yb1wgXq`WZ@Kc&<^00000NkvXXu0mjfNKJcJ literal 0 HcmV?d00001 diff --git a/templates/PragueTennisCamp/Resources/assets/images/avatar.png b/templates/PragueTennisCamp/Resources/assets/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..448b553edd5a15422114277c16fc7a849a848bbf GIT binary patch literal 9118 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

U_GT20sz^DH+~tEe zxeJX=yQp*_x%pKPVq^oD-WzUS+}kdO`?}0(X&cZ7t>K-$o&w%@Jh>nX`|_>d>PytO ztk!X_Qq%aeA@iSQOZ0&R0rSXKhRf~+G9gItiEM_|B+{-4?zSj(Jb}EYt#eHVUgz=B zt@^v0&*IqcM>oH=c_9Dx_qXxL=wV%0`)oZ%++Tg2;93bKQ?$36GvgF{m=I@P^CzB0 z+`d#QBSzl$mIgrJ1gJ<-i38BASx?|3diA7^?bB@z;aV|O;*T#JJNfO(Q8I==UJkwu zJrmPjHlUSMJI2FLMdy(2xXf9I{)sp!r}$kjZhReXH;O=Nyc*LYz94;(yRmG6OoVRr z(xs6sq~Kg(h?^YQWx8iUvH@i}h0id1c|y?3R7iyQdqvfERYOCvjD=@n)|5)|i?6JqOI_JlV(VEilU7ss zZKZ-TI2zB$=(T#{*-rt!Qq9hlmc59{0ZK~>tdq<`(4(b*C|zw~(=bC*``d;Q3_w;C z)>X?a(7Urm-bi&wQRvl*Hh;lKN8Z#?;}g&Z(>KZ9e*IyuzMt@@Xgj&$&lEb1C5KKlOLda!vWRVGod9iVV04 zOeAllg*j05W5aH2Ols?N!~$P{0{csFG>%wO6M#rhwnY#H?tgMhbfjGydu3Vbo;qy= zqj6NL&s`-`e5*WTb9ZXlXgIHLFFjAfbveg%A-3Qgnw)A~U&hKjG}QibBn&J+N{u<> zfT>M)e+gL&B%`YNyyRqZze4KW)cA~eRW*7onRfZnUGDI%jI7=k$SQ9tEhmg5^kYarjPqp~ETL&O&~qpMR<*~d+i|w$zgV<# ze-=TXg3LqV$`<+EDW|i8a5vcYrg-mAp!x9baOqcfV_Zrp{mO9juL7ZV8sdcSCk(`@*rSs|F ztWv&KSbWr>&=j5ZXQq|ZVN04YLj~>Ig62V}o2&!^^*o9g9ON))smpsbwrPA>>DAZj zHtYqjq=As=EpMP?HBP%qv_L}U+y$87K)i6h{MlM3y(h&4;-r0Q!=d@)41%p);XGHp ze5rgdZ^nqpKK@Ua-L8+##0yB+2NpMK?y3W1G0n{`uMunFR^WVd5s@yDUuRDdkBdHe z*OG{%3P~&4Ck7iT^TSdvPxX@=P=bCHE;6;79y4zB)>|xp6Be?Vi!s+UdY<6rNZk-G zPvJLpfm7q?olH+YStC#rU&yxgc!__)e3Zkw=3}%$_3nJB&KF0n@sYhdtFv0j+=h?| zK?b!uyI&TDIr#+oQmux3()Yb8B!0NOhQZNyN@QPr5X(%gO{Y-{iV=@ zF01>sAp@(WsBdyi)#vO^nqM}(^&{Bi zkQak0=eh=;2z86wsxc`I-}T9kXFzM(dKZr2=u!u`R(wrB}>!s2SDBPcfp2i{Pxv+O;}n$6rFPUm)9P` z_h@qbH%b9#v%t4&hf53xfAU|n_>5&erH_eupH8cA#yooe=clj%m$(xY`c-$satis( zw=Y0skvyXxA)12rWMw*jWQE-bvZ|tc#!vh|_-kZgOUQeKp9OB{jt0_%7I26yCUcJ1 z=E(2Mt^pl^pKmc4YB0Vty8;P85|oX`Cf3(@)Hmt8h-fFVLFecPdUV=C<9=ACCRUDV z?00Ox5XkGDFXMw7_29(}Xm9pYn6Oc&#=*r)K~^0Qtu6O_O`$ zvWqJa2jor)k0}#hlqj{6uNtcf$wcH$E>lfW0yO)A9C)r;8&8(9e~J!_Qt7T(p$y0; z7jEI;ceA!XUaSuZge~j|Zr*Hase>ae$tmxO8eo%$iaq#0C>i0HT;sD2&p)A7{vj8p z?YOR>N14a`qq}uxR@{t<+@RtnC`O5?Y_W+Ig`QzczBsAfucdH+3WD-Pm9`mr|4PLi z05g~l?Q}CMj>#&0ih1>m2x$nF&nE4K0n&%1{$z&Z|dY~yp^v;OF^c86)v#EF4 zt!fG>f;+-No5vK8W2%_0>Vo0C4v6dOw&Ci}AYa7&R)eoA`=Dz1{xM`BoGn(Y4yA)| znF7jj{wXtwB;^^lKYY;3L^jDEYC-~} zZC6X!bd7p)xRkCX&3Bk`n~HPC_)@p}7;YY_f6eqBd~i?ZW%6aCR%`s_SmC56QOs*; zL%91IzmPf!XWr}|ISm*PX;l9e;<4x4>jg-<$~OfCDm$khp3 z-lUcJ>IgSGeeg;plH2cYf5z!#P=$m4yZ;eP^lS5th-gu@Za1y6uXpG)gffDkUn4CA zv!dC%=BI>TrbNYRR6VglYJ(OnrwOZWASC{de<>aqQC44dpwkXWfh8L@2y;c>3?wo ziHJk26zDxQ5-7i+=nnLHRYD<1Z=wf|%}E|4*}-fheIv2YF_T zJcFREN%^={6x>g7XpQHpVA7*ufpe+#SQFa|D!fW&ee{sFgWgAwEp!UVoil^kmlo@P z_=B4n-e3Y?37nw+C!_awuJD?BjF3+5va)ShJ3XP!nbeS>LLFZH{^C@$LkOy>7f=pY z=a08I=l-e~&~~3?#FFsvsfHhQ9hAUL6@s;w5A9jNOA^I+jxiO*@Ktof0etv9)oV~Zb z3M9#PNUh@JVba?UH}eYcJ$mZK4@Z({e?=`a>tUobL|}EPMt}31hj6PFHy1~^ODe)u zK}B>$lt}a0pBMBzoz4|Z3TSMB1#sT^_vbV;V#K_+B3T#sS=<9W_-MBk-O*MS%B+WCC40|sml1B^;yv%a8nkpjN zEeJ|w-~N!F`kK`AtxLdu2HlnHRUqHC{kLIkKk>Px`6rPkRtvXuy{YI@vmPbx1{74n zZ&*$t!p&UJ_uyv$XMML4f!=}|xVLewFZ^Q^QcBj~OsOiwe4F7@rO-JVG8lh{QF^IG zkoYD9_lA76{8)M--}`@LbaC8mGzZ)*iJQ`p0O>d6gQdCFuX%&9;Vxp8*V1wLoIw&o^s z?2_H!&kwhnJ#gIl=TG&e;QUXvcFj;9%u#~!&ruA-OU_Gr8L%=WSo{;$5hFUvVmI2^ z!@I1by(vIQNbX*T8*5Wyru?j%7&BSYQr|;xXZV?<@SR9Q^p6-k0RncWmPl`6C@!A0 zBEwhF45(a1_X6h#26@ggGwwm%ADnAC4tY$mBKLi&k{<#I6@?0x_ZC&b7T-Fq&Iu4v zZ&A_$0-Ii&pQzPR^feq?bN>}gQ(cQ}>)I5o2x`o0kgBIZ0^O`wU*H^qZJ0Kad5_vv z=Fwjq7NXw+>CEI)ghJN}9RAmXt(ICaw$m$T6yk&u%Uvo7(oU*vT$dO9*XW;tmw2dm zs6o9WLnA6^DiUN$01&l`_57Wx2VA=R`@^8&y2L>kU3m(TM3u8U5!kPDENm*RaI*dL zb|MpwsSS6De3ip)py>XyfoeQQ+v3Ii4@~J!1IIG#vnhc5LG~CjTafamOmBFgWFW|J z=Zn4C-asVjA;+i5jHEw@_-hV)^j3cYiXyE}m`R{muU*?wRa?dFaM$Jw+~LO`(_}nK z+KwxnNdPp3YL{|#D`f>=3*!wM@zfn%|6SRw;pUCN^TbO#Lr4b6Bnd+P$v~3o0RGHn zA)Kjez~!9Y1V% z;Fr+x;A(lf40&(mf5hGH3dtb3555m=e0PJG`Fp+WgNn^NDC6karEi$ zEe_4kWV&D+S6`u|S>T>nMTmE-D!l6F7nBc5VNfSN%&iQ=%5c(pV&|m$rC)vh=g$Pl zJh-5=wm{vN_OGCMwD&8g`nx4}f%<^_B~^z$%?>F_uTc_DN}_u z&^3XHiGPuCZq~e)5mBP`0FpWUnYrtd~@P(H0~lM;I(xtT#>9M zr$RMq6fk!B7Pbyc4s~c{(HZGiY_ZS>DG8AgYA1I{WHApfM^O$F5lhLQe^WE;Ljy5Y z!$kw&3k6qu{{FaD6bizcCETo~%urE$e|^#p%4bT@T;tt#^45Dn|4B?$#*OXqmijQp zo<%Xi{02SVW~aX0rd6<3zEm0uNeGSH8MKC*XNBP!^d7*4z9*M}65Q&4bgQ5G*)W^q z<{9y%><_nwXP;2iYO}(Pth-UhpaNQE8k^d-bvZwzw;C_L7TAUA&Dy`180pdn?g$}_5X+(GsgMmA)La#jfx zao#CDsMp1rt0`SuYz<(ec`iZ|65A~tB|U~5+l~0>kKbCw9%MmsqUnRae$Uz0w9;RZ zMjqNHLYy&<8J#KiKqgdLs76K3{E#u@e_^X$QJjqz~ms|V{?C+^PLKRBX~ zQCWNu)-~?=GhP$B;miW4FcDCP1e>z3nZ0%;h9$7!qfK_}2hbda$0BjNf;SnN-@h-Y zK=M9RVQ7^J<75}#$_v5-ktD7Tu3#fXAL6UB%CS+9gQRC&IR|``(6EF5U&~iwmvw^_He;@JAP&-ki9)`| zMPiv!e$&>;^Z%wKTFZdh*u`iWB-Giv_>-edas#)$ch+UViZgorzJ87ffu7NgUmHy6q01uU>){ zEeP>iX6RGGlj2)cAO$WQUx?31xO#ClT_Y2b5qof?2+t*{lphqU%WPh zf4DE4lv&dHYsunBvJ&*>kscv|+TD%(3%1eTT@F%P7fmu)EDw^ewm6Lu|1yO9i)|jo zAn8NV%Y>bFvZ;IMVPFl8BSoo!WH0&OG!M51&Z{lZM17RA%(wYtZ7B!2Gpka}Mo*A> zEmc!=unHhM2a>82ibWp4mk(=7x1N}k^o;2Bi$KZK{r!&Kq#DBEGOo(G)svyjZR5-7 z^o=>LF(6KpP8mc%XhWW0JX@l;+qrw}~R-39Y-@(ya`K=FL9q!VS~EKWNR0 zlZ~CiF^79#@^6+jp>=^&nlUfkrJOgI)HDFVDhmu zU=9^trIa_;2p46vGxt^@jpIe8($x23G;lkd{FkeB$r35uUps-Uvgl#m%;PIFL@a5^ zS9z`_e;0AD_{)E^ygSgOPO5Du554zrauE6np$T=hT&BAStt!NV_B_cdyU>rX=-z@f*$GX-+$Umz49zs4u+M^ZSO9Da*YCw@G2rU&> zf)>q)INTL9@8gq>?|0$OYn4RypU^=aJsd7zd9V6OH!sNc&C)Hfid6Py^$bSB<2>q= z!$wAy>Us)y2swZG2XsTCj_IU?ew2X9O*>-djBAB&QDfMveeN&e{%%(1zYHkRH`VpmrNpky zuZRP+$ARd$tlznHE+Df~PxC)#_n(M3y~}9cAL46cQZhn+`QW9y=&Vf)SKHY_x!WkzZ|0wYx3&a z_%+h3#3Ne9mw!MX5ZvlfIoozOQuX(9wZ9Vi{z4^>_`E55Xf_am`t_6FPyy9DA`O42 z9nGvcVc0-Y|G5AoDlcK}FJ~kvG1_<;K;}bJBqcmk_8BuM0$-fQW`ArfyhBNg8A`&{ z!_gLdrXHaU#{^n&s9dN*eIca|0Z1sH!8qqJyZ}jD07;nNy5FO}Nd$VuVctU-I<<`f z(@9OAsY2;*N}#yqHx|ai=<#`}RIoxX~*(b-cMmQl8uxB-1m89ll=-y9hLif%cptW4?RffF?b`IOyC1waPMSXcW%4(RAPpn;GVa8B^1d zX6-hW2QE6Gt^WZ#^D|6hvCyIptzH_ZFm>}qA==AHs3Q^Oyih6@Zm8DwX%(52)ZbUa zD8Myly=SIP*Fc!9hb1n)%Exv!#%ST1d(4cR$z?R=4STB@^pyPpZ^;sS!gg;d^GE70 zxlZ+s#rlOS7%d;P^M4`xNuI4ldWd8>#XLEaf6#HE4%~p!l8ER8Ko}sE5JCLZ@Ie>4 zne-rrGguga0o1HUq5eFOqAsuNZkCccw*lA5fB=0MikDFJjF7u>apt8T?KiJd@7sa| zc^St&`0#QWY;D^@=0Do>17EWc-;jd-$$|#Spc%bBdT=ltli$;Q?$4a7{)(za z4C@ho;&J|D5oy8E2gDb*%i-e2I^mG$Z{>d&^yjmX+)T$p!Kv2DV}$%Q{&IPBN81;s zQRJK6v>5M}!9YZY_U`N@xnHHbPK)l~CoI?85@^uXhy(S+oc@KbKH-qe8w^yAXmzQn z+x4=DpL@8`dKN_fv!byx#Wv0$0#!LtYs<%)h+?QGB{6|7t5A|O1gV*Ge?V}WhVJZz^)(iZfi!(Eu@!umt^wS@Q+4nmXUw@=!vH;5l@$*XJp3H@GOzjS=Dhj~Fu z)_x1b)Kt_*7{4G;IY+oBi8;?aHn+#+K9h>4^w{gr)tnE5JOx{pD|}|FcXE!MJl?#qExVgv@ut$LG@=M_pL8^`IeX+cVWkXE#ts{*~#in74qP!Do;&L@&Jxux-JxPFVH)VcKd6 zkhTLcd&RZ|bZG|%NKU;UE-!6CS>cEwU_Sov>no&vo&O8rvt7J9Qe1pIzk~PGL_~`E z&zuopJ%Wlr-QfELH#h$Ob{ADKKx`9ni-)#CQphJA<3L40l{7=et8cbh%t~-nAwwi$ zpCcOM4Ky{RU2|_;&{#P2mg=~C3Uuq??XLE#G4Ue@p3&#@Jm zpi>ZNpk~f;DX^d45FbrZ$OWo?-%>}bcc~H6k4vYU)T>7~UFw9R&Gr&EHNEpIYy_s2 z_ud^_jlJ$$njY<_El-bz4-p($NY-h6@Z*tGgo$qbtn64)jk9$+*DkI|cPd7EjnMU`?HFNH~ z=ZD6o@49*J1MU|5k3!||F%fWXBc_wlA&JL=;EgM%q5~oygw0cacbg7#6g?7^hRMeX<6xcMsk;bLbx2Z2OCvm z6qLATRJ3^!DWHRRhBD964eK0ZZs;Q5Ws^VqX<7-)1vdY0h~>hpO+U{#Q8wg^0~Fv~$&;wqX>xh)GW)rAi_(zj>ZC=Mt~R`&tggVUYa+{P$i9*{J+5<0GUD1hsPhS~d$2BJ z*Z!yyQ=3n>g|zMH<%*39w1zS!PQL0kn9r%&HRnVR;2(8VUbJvnq9mGRHz z^jznkEwVn@^66aarZ%h6&6e_E@{c1Em4+)48CSytWN1~}>7#_-qz8?2?0BnNNg6}L zMVlMB)fTTfsYfP^yQ# zUo)Cjz|dIKF`Mc*-0?n^Kc?lrM}dQ6nf+tEj)iu!K}Ej9f#aMzV_iTR@f#IwohxVY zmn>>)t}Za{|9(TIor^S3dSHOUcr6nQBtkd(EZWsZo^|EPu5~q^?uedwxx@$qH4hN^ zJeTSG@D42Pc&5(>T@Jr1x@c63q`uIpwnIl(+dlt_c|GBwaLC6-8#Wr@ydEMfzDATG zzzWK_n;P2Ms3SM0Lr3D_oyum4t=iz_oCbw^CPCH0Uq(B=xg8RA zVH56FhtKEE%egb+^pVTSs(wGfj^y~}q|d$$s?yg)9Kc~}7NqIsR-5V9g~(kFhj&Es zvaO`=tXUIL(0a4t^`whcnxzWKYO~bs#;3{iKA1Zu6t$uB+`b&t?^$`S+V)`kIXe6CCIz#VA#J(j&tnmKjNh$frKcB;jxw2A+Gfel zwkQ5(GibW|XE!FSnYIQmkSD5W_^4S4+Vd^d)ik@pa~A1AeG*IEQJg(r+S6qZPuEkQ z{qBfFi8C=j*q)}BApLjTOqf{V6`< zxkyuMubbemmvN_AUWhO1wHBQ+tj|y96WMrDY437dcQ~0@$qo03E;lolmH*tn z{}wfH!sV9dcJBqqw6w16$SN>#Dt`uVoSYw`U^3YhklYr<6TN@J?o$p2exf(}Wa5ow z)5=b2R70s7Pj#f+&N3BP9{tbMZGgOTj^`tGy&u3QWhSau8NcL*kFEu)TqA_p|9pHq zOZKYbj#*->KmWR)>psv!e_9j+u>8S|zznARIF%TbsDh667Zfy!-B)5?C^==&_egJ3 ztU7XcON8hdO5H2jB+Ox!a=x}T>;18OF)gly;#Q~LPS^+=bU2>PB6P=wZ7vu0e+4M^ zWFS9DnwCnHe#i>TF*#iffcT?GCXEIzS?LFZr03c*=bnAKzMUF)MSi%~(r9MARHQ8M zF+~1e^eMdln`fO>tQG)reEmy~?$Z8Y{=X_$sONbeEEC*Z?f+G0rN6Y}+0o{(b0);) z+MuHV)n<&b8o@^p+<+?83Z`W{6-lunk z9?Y$Wukk&W+?3MHCZfshCE$WgI%vn2H`?)nnWo}&>c2&t>8+#2KmFBB2SclZ!BPmT z#v{ih*lUw}l@JFT5<2@$8yL$_BXT|uT1XG~;78<;AwoNdvCu^pkr z{P6Ro2;M6(j>qUmb&W@`-B_F9xrfiFNmePzoX%iG|8oIHif!O~D)tkrXGG>tYHDv- zkI`Ifp*FeE5E)fxICk9TEa_=Og{((APf9SJ{)DV#HS%*k(SG_@Hy3?n^*OP^Nh6VY<=rbE@iE!n=i4O2lJmth=9Dif=*C`(-fvd>xU*v2dF+UdFu4m|M0c1~ zVDU$X-??LyMWl4>+aJ*wIV4pW7zpeyKM9OlZOF&Cct8E}&ItDZ6*|W>s!RAK(5a4G zxgPj_7bZQ(I|VmiS$D5?G@r}Rjvllx3kjm+l_m@B)|Dww;fMYQETg_ z4&%;V&!f}2f^&Lo1!5fYTm)dOd!os_NMwwa=#(D(X@`1gpf*+3Fr|!O=xyi1< z@tTe-&+ouvfELK3+|SSXc%B3E09qis+zp7VfK1dxJY9JBxVORvmF|`(tEaRRdb{o! zObgP-u4m5_`{qaZTorOZHYn_#o;3?q21onHy~9~$;)6Hp-Gr;n$9|X0G%)Yq78zT& zOC(&$PKRx4)mc*pYH;;8HBioq>WCCkM-pJpq)l_2EDXOJ?YraEpI!W{v9=!-bS%NE zAzm9lS|!;?ep(HmAHJv2tCw7h#o0OV$&Q!&3f;!#p9=-4X?IC(J*=|zu5gU9#qum? z^nO-dM2^rDH`A9fKJ=28eM5D1TEpB9RDG^jH>q9p%|)#TfOq=C#zi~b^=HD`5?pc| zD1ud!8~Eg;o6eS!mq@pw4w+@uo2d-1?`+%yqcqEFKOYq%fI4M3P$b`bxalnXaNO|( zuUfe_+tTo6B8xeAj#yk;Zs<_w?yFYvGYr!I+&DYvtZrp`Z!rg+C@>QB;U{u7axzJ+ zf&HIDMO&^)itDlV>F=Op>5tF9GWkBPG0~q{^(Q%-ZfxCp|6#M0)}M08lF}(@#g7ba z&myr;7GdXZq;aC+Yg%?!Qiy?}P`ff&oV1dexF3MU?`FkYeYWCk%V6&Rgq@>FQsa6qX1WBFOLpf$U@V@JAby?T8KqI{(e z+d8lpb++?-I7G%u)wbvGhAo7eknreI?TB=J_UQf5LpR%MC}pLaJPysDn*%^VwBo(AIS zB3NmBLuYIwTj8gjxo(&kJn;Oe;L+jK+ZF*tBNF~AgUtYKa?p9o?s0FqzfP>Jw$+I5 zA1^{LQTcTX7!~z~R(_t`-U?pR&F|&8ZnO6xP^st&tb-NeZ-AcY#~!qJ7{uBRLOZ?{&f_~A?H54r>tZLYpPCSZ>W%-J!q`K0>z z#_ypybd}>xB@po=jeI;1_4!t^$&zfYeM6<)c@786LMi9Z{&pX_oeThd7|tW@NTi-;L+QHJ7}*VMNpv{sfK{q=A~;CAOo4*E42lZpR-+ZEmnQ)-Df8^Idb0 zBAHv3dhUaHC6XTnwkF!6=a4H;Y>Vz@@kW2?yeBzz62K7QY`25$*!Ji3#~K%3%C(&C z(1l?w^G6_=Qy6J|=?kV)a82|>pf7~;#nVk|-&;%9jR?gBJ1^Xm^p@L*w`R1VJu&UJ zY*n^AEGnOn`%=awT`j~x?Coe#+o}~!_MR`DDk0Rr#v@93`l8h~xvM32zzv~~yk9-q zAY^RZ;x3o`fI&??>wC@(iAXhjELfc%V&&`5TQ^5kRYs^y|2R0M*~O(HzSKFwjwLvh zKK>#GXo{XGuH}w((;i9U<&P=nZoLz8PjpIxr)jNeJ}g({$%@ zR!Zl19A}rAN0!Hfg7`_(Txl9AT~~zF6{j0@H=h+0R#ji=*&Qf}Dv~*L;^dT2jAOnj zxW&0DGf%!s`%e{wR%h9G3{oPJQQLc1+qwV+TBuFL%s?l+7dS`~UK? zGf8P4nim&B>G3GcR_=@wLY6Uf< z37SZ52@~$TSMsWkFPguwwEUVy~9x=u5PBYukPzOhIPSm?DVJ&s`OKKgal`_ zl=C46yM|1A-N3LN;`ysCJ&haaQmFM=_uFGM@;7=S8o^$If~vN%9Vq6XVrxz|N=Vcu zim+oinIz4wIk0PMvCUOn2-?~HYkY?eEty!i|Gau_y@a%~5JmBjQ`W;ufqM$6IyVmW zt~-q#MLeN&2)t0_h`$-Qh1oH7v&!k`lzif-XJBoaJf4^H4o?}1`YdYR&!2tT{67b3 za>SO2p{<@aTP*wU3{2AXe%I=GG$KZ6L#ydf&yhuD276ZaNufR8XVj2~~r%Q-d) zA01r}OOxfQ4%!K*O=pn;f%io=MYXH+->Tk7wAUz5ldlsK0OlHk)#G3yFEMs;5@_UN zk}{iN8g&aABX`y&bnm()vHkQrpeO~#=0i55S#DDl=7?bxTaY}&lC$Q%r*4qYJG#QF zK}guay}?$%9(jUUdOHSr+xPA#7XAMF^+{0?tpagRN7zTBYc=WFbKa<;?+RK zU@=@ML%oBtzeX79a1*?>ADJ+Bk@wk|%1M}M1e(y>Z4{VKNUI@UT*AjEij2ZVH8xF) z8^UVs&RRRhWTO?I!}61DlOyuuhACKtT=dDRnCR_Xgg36ByVWL?}yVkGqE96 zY!)HEner$vQZPWAjiko-RW3GPiF&SPe-ZNa@67|O;B2vO`8ij3FEL3iT}IpI-Hi^b z4JuCBeb*FHRd&J`dy`1ZWHIBXd2O{em6!<2WGfC#)-j#4FYI$YbOv>w zSHa^SAn}?z= zPWaH8>~8`!A8g64U9c5v-L?9(nKdd&&58%sDk?-}3Nn57R9QXY9Nqxl9;u}(=scd5 z_MyYd!{sw(+lLg;+zjMFz`fe(&lb9Z4Yzx|k$sf*YP>_K2sGga0_< zOzb?xwUExbzg@sf?=rt#!T39Dvr{j5sKUk#(`3)jPSgjH)he&?8DaaP7pz7sUV6H1 z(>(dAq|AWE$uMlbBI3|$=i0@^VUQ>tc*zk&!H0UL%EJXa zkmL{#nG&RCwYVAe3vG&HXXJ0_0%@CmVmHu{7xY0EFDapY)_mk)BFm^vX<0;z^0o{Z zz*eZcvne)LE`O2$ZItIpc^}EyT6Ky9tEl^Ut++^Op*tpPt~+&OB^ta$H5O{pbM*7Qs5Ih$oX~lK2ncZDFj=Dmx3) zpk^{RYJU|7zXgA#T-AdJ`Lmw4NMf@Z@y-~{zcOv#2N$OrmB*;Dv25KIzBk&9bCKX{ z)?7QjW&uJoL@6E^m}Eq$Sz-2Wi|zJ=Z~DRV`!;_@UR)YJ2eYN(X|nL`S>w}XYut4l z3y7w?B1t?#F-u-*a|STxJyD+qy9_0~3_QSe$l?ES_1%F~w&DMeyitj!LP>+NN`>SQ z8WJ+HH-)T>IQD*fOA=*g9F%d4916*b(z5rSm38bbgx__aKgDmdT1yI|#qM>_esAQ-{n+^P5Tt*aDs3MOSaEXURi_qV zjyGI`yx+}_0pDr)v)F@I-9U$0lO}|HeA#u^W7PQTTwHziOu;ELNW=q&>s_M*anFR~ znrvXTHhICrTm^+x>n!Vdce{y}nlpSTLV{_DuIjE<8XEXC6{$#Lb0b``vqT`Cn{asw z!h_l8YTxb*(p=nT-e7iBJLxL4mwoP6n~p%d;*Q847+Ij*A0oKtUxkh~`6{cWifLJk*R(sMN9w zI(jj+ImW4Mie`-t-1S57M7zGu9jUiGQrlf!;$Z)S>s;Jb8L_C(4ji$!V2O#NxRz?) zVu6Z>n`uVp%X4R=8VI)4({!ba<6BYXy*^z>EO62XWu`Q{4h^gqr{d|LSiza8sV9Tg zypfIgceNx){-fDdiz-&Sbyu zpDXIaS(`8PNPHR00ac6q`Lpkd_#M{uz^MeWdr47SJMRZmH0kX>77X8ghu^mLW#441 zqpJH{n{2Q4CI(A|-=Zo#-UFC*8UA=Tv!Elzp)-dI)$|8No(_k>h{N#@i-Y6VLbFkv zx|?cU%cMXet7`g@d${7u)1&;gk^;cw3&>{RcV;s=&gQGG&O$Xe0(Y44{EVHmPmuE} zqS{-1A5d?6Vkr_()a-E_(?X>{?8QYf0AX7+d+OX6xD-QpDupC?)cHk> zKB52$LHLqQjT^Lwh(NQ`HtMb30T>E3J020ulZ09~!JD<7XSCl}Pq}5;B_x;%2q|wC zFti3jB;=5Oa>V+RKnmA>YA}@52gBYH`>3$8h`2a(O3t~y&*OE_tCYo|bj~_HYThvK z2Ox@>N%IztTYBOq4CWRF2^oNRNz5Q?@LckVvaPr;EfgNePjyg{YBWB*YU(FC&O6<@ zVC{b8k7cn)ZnR;|oAORvj>rqj(;eRaS+WWeLD>zhs2`+DRmPHxicBR1-JJi6aDjvmVYBS+rf znbd-det6>9cW6vSDAIJMl4f($N|s9+*{9=oj^M+{V{?}*hAKJBH#ayb1hx5f=MvEe zSNovMzM!pNfS5yxn!GXC;DqDg=U$XnL)T?J^i(&QJ9K!cNj>~uBQLxa9;oYm8Ui3o zo%{ESUs>O~=X=0SyK9_(E_0}kEJTOL)lQbX-U>(T0*WdL?m~1VeLc>Oc*3=k!WO?T0L%#{iWx?JEmMQ7 znpiK)MM-*Wyw3C@;dj{G^%xqtGiitVJM3HfzHh~`SEx>+ca|xnr3c^ZS@(t}#3k^V zZ*zaAR8y?OO*6-4FcNxdytFuWtEC^s+!dvpSuw7zzur2>bGE!AcYkkq`G*yUsMb78K+E^5FAIPe^1hJlWTlZtwbU{F5?ke?O=R?BgyK)T*sN z2_il3J#g@C;h#5+JY`V}6^Q`_Ib#mEC{SzX7Xzo5*PBpm()ESzGSl8 zTy)-jdJ$3!&ni|F2=O>ruIm+6?KaUCf}H!M8?8RuqJFEjQn|5iC`3dzALC|^=hEl~WE zi(>xtK6-s)w8qY+BS;VRyDr$csyW5Z`R`=xO9L0DYIgs}7bxsybZW99f@o?((rZ;A z*#{=Y&cXE)fi#;(TW~e8Rwi`kW_8n<1w>ZY?|75)A$o9FfjXIq+81XZBXAU4yip9?~@=Q^}kM6^S6zL$o-3 zGkZgW=L5!@GIe6Dj(9U{wmPsXh@A3H>p2dkcXf(}FNQiDlZ}0HUXy06iWUcr$V~5( z#eXPj;wWY7oIhvGCX+EHa@J++>7!3N*O3hPLJfUlwCMBvQ_EzkKP;_xM^Q6o+5Y6{b%}5jXKMD_ zpTcPS{%n_%Uaap&2YF)s^|*WVA)M;#czfF;x;R=zKd^YqeZ!_F1HrXW%(wrf+SQJ? zYhOAfX6nF_epNX2Zxj^1Ij6+KPD6xOv;pq}>kFXfRb`Ba4i{QOc^6XC6~|T@G0Ek4 z;GjWl2e9{gMI`)AWsRKl*~dLa4zHkJc1AL-eji)R>}O8H&9MxR5^yfUzf?D(!I6eh z)h+5YVg?%|&v*_?sShVZ59MVedp*+!T0-182kS{4NVQov%hEMcLwgjWD^A2rLTZ0O zSAX4T=$UwPi|91RsK?50ok{%qvNmdYLU4>b_eOvt?SGImU-TnzsW!+#!c=@p6r}Q@ zLQZ}72eerIX$W!WU4;a05csHZTS_vW;#?YmQc<$lc{98gU|Ca+p3x@sMO_qtI)Y|m zV7s$h?T?JPi5g#z;}t1X_0)!5bHbCCP@dal>6Hh8LVF#Un@Meo z?K#=|D%N#4j(Gqf7e*CsJx4l}b-$k~>07`Wt$>M#NmXjY!A;%R=s0vXPM$cl#ztxrY9m#B3idNKU4GlhBSoJ+`ltKzdT}P6K6d+= zda^9A3%76YU2<{%C2IFzl-K)?I5Cp7o~&K8WL78# z>!hycvA}=VSmIl|PZWRdl|0`A&eEqP3 zVNB_bSzybM$4Ka6Wa>MUDAxDl<4Xqcp?9q^;_Lnd)0v4N|nC{24T7Q(a&FCxu;;ciK7EN&?fX{z^{C&&MUAY=tY=p zk}vpB2rbv04Pt*VF7Xns#I$7o(thEo7jd9Z8Mk!=@3?;Zj^U)PdKxq*qlUH+KAZ*A z$j)|ct~TcBy+T9qZ#=(Tcj@RayFd!|VCL|9QKom-XU%_!u6^2y^Grku(a|Yc`)8XV zsDL?zcR{86VE9nbS!)gteBv1T{Dw#*MaqA}2wC9+2GEwVAn(4YyK`hdyu9shdek4? zkRECPPuR!E*mn$aGeuxwCbg|X| z33<3V`+L@N~DQzrM+^=H8|`6*d7>zwg7 z&g)PST>CEljWDnpw^1}9@2~Yq{v!YO?CSgG%!dHsr2-Rs!y_8FEpq1)n%YvbDjui| z)=>4+e-HX)@}S)i-;cVHAgj^VD+lg+UxH3BP>^_HhM$JRD*Ny^qV0$-Kru^Uvd%EM zc9SOa$uT|(ecPKe>A>2XqFe=d)(>Ma??*sI^X9kO(t5Dy3-Ay)@?nwCm zCROco5W;F-X6k6idf&Qh=EYqjY^c5SwJKrwCQwZBW>OY$c7B}ny9WMFuN{=VK;^1@ zoVv1?k3s*qk}?95s|}-2)f~&o)IP?DO{C&@O$pFjjmMOu8SppG=ZR=Sk64RZ4|Jwk zKD~<{=3?z}^`9xGKOO&P_3&Ef5?h^bldxbtN+G5>^b*Q9&UzlTRV2_;lOCTYVWHUv zXa;8I&PhH5|AjQlL<76GI)G_aSatB*sih&$G2hivH z0{|)m06{|w%3x2`IgVy0umTAaRfFhhH$WZ3R1?2$2bOwEsJfZ#a0$+-7JpSCN<@mu^|fM0~-kDXc) z3yb`R*9~JUPFEM<}XnXD|qPoO~V*>PFE$Ef}@N~O&g}agu=(`g6(SN z`_R!#l=}O7d86Li6%cKk+VZOZrR9QjIepw#TzLHJ{_8gJ9eX|T5%&`=J3URBvy;TVCekZhZmoOW_C(el~@K&(tu(xKI`x9R~bVh zYD(##o97I5=7Ecl*Vg_3t?l|44ITAKr`leRV*EBdjzj667-e;f)~l{sA!F1su|A$H zkbwATXyp=-nt0E{Gjf5{uww?C};zk zSYA+lsj>EpwLJdQ9}3{LUA^K30=v$z)AWE>?7pe$ZZEAqyq#(}BfFr{klAGz4b80! zaZ3ph7l%haP6@}+nspA-N6fxx+*7Xrnmvu5?kpzB9WkI_-lrFa*r1mAaPC2QJ{7%k z2cBIL3t$kCZR91uHR7Qb17||rXQLXAQ6E>^HT))Rj!ebx{3}%OOHgZ>dSE+Y4x)|! z%pZfN!(~xG?ia&8MGuZ-Gx=rJ=8MonqTjH&&qrU&uDzRZQ2=5Z74G1{XEX;tciSeD zlpw2JDbIj`0q^i29~%=XKgZ~T3%gQ7OZ`hJ^NX=5!GTK^&}ERNG_0&!Eo)7Fj3nm3 zh?G1LTl=M&`J;Ow*5T(qv1}%A5suOAk)@fTebfm}sipMvzz*E{6PWq)qZqlH41^p4 zAR^`fU9>AeqqT03AL`=T{+Ct`7W#ve)Sxi}Y-fHICGi;f8>~(nW)6U38-{Kf@K3cg zD>w89FC%&(Su7!@K+3O4SzX&o%~ctOGAJF(kpt>b5UaqP4{(VIE#c417W*e0Mt{e{ zu^6%Hj_dUZalxwGL7go9=-H&so77>%+v- zFv^rJ&C0Ftv9a*(+oOLDLrPat=EG#I(w3I8Yrr;rfM#>qhbg79VFdJoRB;aljVxwr z5F(p1VYt9&9iQIveOElRMxfR)xGm*(A-V*YSVdbLMSR#Ky~hH3r&s+`z_1fH}hJ zy)=dgq51kxBWt}CTQY4z+s(KbB~A4s)cIJS^K^7|HH-e7%lbb^X|u$Zp;Q#jUv`n-PnqPZRfQ-fEWQcGm7HKp*mm1>}Jb>b?7ZQ zpm*X&qHngUlTt%xGr#Qg;8e3;DIQT3hfaS#XlloDY5 z|6*<6sGBH|Jh8yq5nKM~kPrKC%Bl~)O$>n6IMWC{7*ozbf1ayF_`jtW5hj8CV3wFq zRT$>OAl2lHuY?|psr5orvMRPNAMTNCP{n@IHuP$;ZUP5O{SW@Mv7Oa=G0w@AB~(Xg zSEU}<0F%$A7w&lhm)}VW|MD>M?o4}*YFkyZF}6+|EDSDEny6rg_z5%UKlpKWN4sQ3 z_2LFDP&fU4`O$T+vykpS_xYKYS$eO(#naF4>+@wY zYv?VBl0P9CIk4GcvI#=mnimMo2!sY{O;y8#J}Ys0TnpdRVY@|;^On1$iZ#gA4|>z1 z6dBiwhK~y8LUsmr!yCZ;u-D8aKC6KdWkB@%%Rp5H#a3Sucz=`+Hr>ZEmGC@@c6p+( zc8VI7`eUrSXH$V%@k?XVMMC2v_7av8pUGvoLhHMXF+C(JDO^l3HZls(^=#*e@(rk9 zC7$Q2Rjg49QK*|Yoyp&p`DdEKvuvB^qs8sV zk0`&(Juvq}Z8?tWe%EYZj1`EIpF4NP!PGO9c?IVgpdkq3hY-x)-%<}ZjBbx>zVqO zv^P1vKTEDHf9gRA*9?+_FDn~AEaNFaB9KySpHyx%8AV{i)E8^h_9&Nrnj zD9=yUtf~z2P~+Q51>`Lizne=@CYiR+J0j6=RRYq7)9abSVSX%iFJb1|kLkR_QE%-w zR})IE>|@YsK3@Hf-8&BG9TeR1q6HC^{?=oZ9pGt0%F1LMI+I_h{y_!z*Y92M$_Mt*=@2}EFcgH_duSg7SrkX>cX1Ibb zNBm40ptmH&pvK?0u6lg_8B3k7&HUFM_t`&5e87K0vO0wG z$l=f3f+}r9AXU2WsLzI{*Akqj>hRU#Z9)pKo_7olNxbQq zf{w|HyK{VKtUIV~9g?LHjZ;mPO00D+=fED%*i8p?s51_h%i2)ubExP3Tk*;Vc!&SW zDUHyu0*EAL?p;Oox9JcdCZ?0!gq>q>l78}jSpHKQ z_Cn?V&vnF}zFO}59huMdoyU(&>)xvTlm4Ii8YB z^k$RH4^w0nXC%DVC>LDA8vhnk#wGadI%}Md>+%1_miggwE1S0gRadcd2{PR45g|`aEcfs`( z32IM#+s1Hi3#Z}kIfil{CbjGz-#;7B=KFPcNNvf|VE_@l=1!qL~*WBz) z_n&bXD1Qn!goHhv!B;#uc=mG}gmqMe=QNOEFd-Yg@vo9kh zd@6E(UeM+3gE`Ou%)9*M4+osGoG@Q}}F9Y+B;hC`NFs9^PuLb56XMWF@=)_Ga>{hl&d0c+_nlDr^l2(j zY~!;5_=1=^hf}6Es`)2zZ)V%~t#CDRnDV&|nPk;NVRe*)bR*<+_LSsW5stiNqEXfX zjWc)V$y*t3U2B)O%A_R87#8=0VXs`SLBO_ZGf{R zB|~OO*AL^q1PhS+S7+}%4}o1_SXj7Lk9^p@Qq^GdXO27MxcQlQLUGz1QMPcHW|_*Y zVrP9v;%T@~FyguqJ7#2o&uqFn>z2o9vq1eW)AV?HN;rpxRofCvUB*qP6`N!_COE}V zd9C=2kvM(&p;Ps~ydt?*zi~JBgdE?LT7r}Gt5x0(FCs_{G`)TKY$9MxNYE8-x54;D z1@wywWr(@}GPGkxmR?d*ag*@oXN3tD03Iq1Ri_62zKg_lW|h|Tx=6a#NRA?nPxA0W zOYIT%sn{oQd}YLeXLj_KQf67C@FvrLpMLk(<$#b3iHvJqHBX1tKd;7~{8rcYyPl7w zj;8rZ{6CIv48KH`4_)+SYThYJ= z|HW)y`VQVaIQzJ6>`TT{+dd>JdRmaO zYl)lNt}yvQs<%$(8&+oTdi?Ro7xuCF$AIubu#e^!zBIygqCEoShyRML@YWod1(={I5pmq2hzQFHi1_7o_Uc0H*xBQxCq8b!<4>)TBxZXM_a*T|((!=-K?YE`qExVQDnIh*E z;5c)tFH$}R0^<{Cee${Ji|+9Zza_!w!;*$g`{Kg}G956Z4pDLw;S#Q?kk;ok9Ufzw zY|<^k`~AL2K{e*^_-kC+wbcV(ehOrRtOgxQ)$ZaS>{#xDH~WNBoXKJ5-86YYT~}#R zb7XV}9DO%G;^($yR3N50E(idixL-z9#0Z^RS6sIHgxiXZyIk78YoW2#GaR6%EaCExn9s&H zQD#+DH*`7z)eZQZ9{y=*xtywln}RQ>kKew3ttkGYMpQEo+>B+}bHW$T3A!%*yd95u zn~vY&n%mPel{~CV^}IfV2Lmsu`Y)a?9xJXiG5bKeIlBMhm)qcWvlm@LJvnUZ&l*j&1n1f#-6(ok#0fLI+6?S z?*mIc&3MCi#fgIl7OtYRIVp-ZviLk^m}as%vE#TEoSVZdkySD8CmjAkP32=D9aed{ zR{k4lvOy&CDi$UJC~;uxOnac#yu_86y9v?cUwV3gvRlSK^<;e=ndFk5ZIj>J(Y6oEBa~Ha^_7%5H{1l{qZSiDJmUnmvSmxu`;7j~}pUtdp z*N!F>mZMEKMAX_?+bQxF*C(a2JUhw zTTT}M&ZgChKSW12%ECVn{N0p@9k`dObWpDF-=nX@^UTLPiju@l5bS5857sOI@bjWLY6%VuDa$@ z`7W6>KeC;7z{?73Y;aUkElbnc(V`L-J$OfoKAXF@igAgI6D3$~iaP12x#p{h>n+0T zaNU{Q$!7eJp>V;f=d6SkJ1sU?F=jTSER#E#k?Xj_r}8VjzJX$-&T?)!o2t&^H`w6i z>ax|`t!)k7jOV}#)&J5Wao2hg9C5`(y1yU*@ESs_OqdlV-m#Rk4aGnE_xbMyIN^K` zz0-uH^KqKN9cf}=Y#wLe#M|+Xa*3=HtaUVDJ5JTpgjJXMusw+VaEv^-3G(JANOJFN zZwal7faHSD9&Wm3nRAy2_p@)oOlxGll~W^~ClhZ2ELtAWuuI9pEng;Q>PxH0%9}_@ z*S|VEbmLfhIb3IT28^`jAv|BfXw$@d5c0}6W2)?= zgm?Vy#MNo5qF;WFqB^3m=z3jr-0xgC84H9*lH?yXwOVXpLcf6AL`(E!WL`ojx}dM1n1{cOrX_LQ5vt0 zzH@8WcMI>$&GV`YIr)T4=?uOrlZ8P8-c<4l8j<3!8cm%W)|WmV4KeatEgkhnmHB`SO6Egu;>az8 zODntp?T5AROGGd>O<*EN6D=JzCXZx9OLTB=VkLIfyr>juLUP#?~Ry( z=+1hJ3Y7TH9QI)bm7Nu=Cz{bW(*Dn>BH6pIY49{Sg^scrz`<*Kc?P_R)u1qk(p;pl zFo(t%G52{cz*=4a4ZBa;M=$n~;tzcPle1Lu^iErHb=j!zCPR8D>!P6Kp%VIQxN4Pk zj0H=*ChA)9CPUNk4J^A0V#t ztg3)+j3vxxmopSIDUh&1LN3J>!)DRTROM8_?u_8BospB^6k0`_iQ?vI<-ebwOvT~bc zST@Vdqr|X#Mbej(s=!$K*Iu7=HcTZ~tE2PUu~ZY)-m$z4_k~L!{og=9W0j3|r3ODs zJ{-GFIR`>&t3Am8;;Fjv&%^h(lW_a(OK+hxd3F~RQBuh<+hT(zM_PA5Jnm1M9%Gm4 zVCy6utR(CHBv3v;_SvyFkUiC8RYUq0I;EQv3g9zs&65G>KxR6OSHDwM#(8l>27K%^ z9&{I$=PPkZ^7&+V^IfX+%HlSqS2d_t;#vnZAI@w>+#1pOf zv4dbBXAgq-m~R^u#W7!md?0Ys$$OvawF?We&gXq>*XJy}4OPG~;e_>9$m9alxY-L* zWJ)2O@hJh5O}O)PyxHsattD9@7|-3{6fnvb1c#x^?iULGa4l3g z^mX&Uvj9Z`5tQ=S^89YM5_^R#FF3dcW1xrw#hown)~D7srI}FJB3yjk|DEpsYdBEH zmM@ zNp`TjC!q>!2z6L!J;&`kJ|79ckbd?sDxlJTB^mDjg|n<-n>ogizzd~8DjO}WCEm4X zqS(Ni3W?O4my=XM1Zr*5Y+%nmy9A?Iy!{{w!G$3{=>xGJIBLiX)~kFdR40D|ou=RG zN+}$A@!=@hk?O~NDplI-a`#&2b3evw5flEJ?cm_ORCw#lC%A41OVwEV=YGlk8a4$8 zfKohLTWK(5xz(wxdyu+JH}?Gd3;lW}(Ylgp;p~Rs%D40m1JO~!cF1ijWH0>8#JZFe zyf_pXmZ-o`uW*<4L#1>6rVJ}JDKeZ?5pqg^Fp}_mLn&ECN%`246?(scK^vGfepn4* zJQ+9|_yJL7Tv6WT#=y}8A4387pJKeL*|Q6RakQy- zA#^LZ6h|H+HzoIy<2Rk*Ab^p#!ztq@qYM=7e?56fs7$)RBjO&9@KdzpxG=JJY#XL! z369M2lU;o8MDjELx=Sd{O|@`j%u;_faTgL6uDis^#?S4nJIdjzEiCnJue@32WCIbL zn33pNPMTEKtDZR7#)W?g4xd4AKG8a7G>zxTKSQ(z8OrZNNkr;M^F}0vrKX+YDMzO< zlq+eS`J;;|t3Jvf)0&#M4H?}up{f&Xl3EpunNW|(4cskFtR6YZ98iRUey8c+LJG;i z6K-t5BK85`qM;5gkDX_ht=W`S@<8*8i!$JW!x7%JIH$~nMZG?xoFYY_syU%kp_1HA zvgt7co2v>0n^9nEe|hz9<-X^+m6Sd{rtEe(NxlM1&h{eQ5yz$ceNB$suutv#22^KQ zdR*w&lC}o@61RHz-~0%$+O%B@ugl0?A+4L`q#Tj-!%;4`=k?J~mzu(}Qq$(Y35R=? z!Zl3aFsailD%WJ3fJ6cpZiI481@}LDG6SwTW+j;cNrwIod@G<6&eJ1(9cub)npLSu zsinJs5rgyoF-vK~-3`I)W4SdT0sa}KEmAdySd`tLH;Hhu-=P|e)(eQdl&nPzp5Qtw z=$Zq3*f9=86aq4TXI)W~A?au6qXmEfFwRRe?!pJh7EERRHa9R-jzWL5hQZ0<(bvY= zH*U{tH~p%p?zB>cj9%U=?Age|SgS=fte}#H7Ki=Gx9(DFJKUrn5|l$tA*xS5#`92M zmjym>yNTK4t&@&#A^ii`H8T;j253v*D7hN6paKZuK9avmj+d_$8Z^poYLTefHthy+ zNM*M+WPZ}KUUJ~I8mm7qz!{xP=qKv%q&C*tG;;!!KL5Zj*8g6zKe4uw8ri#Q~34tt>-DDSSEqV42pYa7^4LM#;3WrrWF z;$tJ<$)!^>Fdv)w@2S{Eg@xSNw z-cVr1z%aadGhxqrMf$-4(o>^KZ%4obIijM9&5$nAU%)$=CpgQN4=ah_wAHpi5O0@% zCYfS(eT%26N)~kkYJ$UTE#3A7Y|%=Qrj(C}@M_{fA zDqsU;;!p2sYI1w3EBaBRsFd)Nukl2a)dSMT^jbutV2>BK?vC@a>% zg|dzC#{ioHw^50{lKop8(YZcb)2uFD_g{?J|JMW@z?O7n{TPJX)aR>#Xy56|io;Hh zV~F8Yu3+)NjDjDn<~6wY9Q~Kf2>(=Y9cs*%kA`aC>0ITeC_X5#ufRP9K>)e%1;s;} z&SMVfaWZ5M34c9WUErNske1y}T|BpQ!|y)sjt|le?KyDN+>I}vm>_ZG6=k z1pjCB$jt4X7#9>v7}xn+Rr-QgAATg~QEf&!E|zWIaJt1H7Zr3uVtG(42@aG)L60@_ zpPEofZF8DT>;nx+!wX?N~Q%Urh0DwumMS z@qEOLDr8HyZDG%`ETKbMj|Qzv`BTd5S4CXxn{3Wt!hdjAS<{_?w+#JsT$d4hF}tFZ zePyG);U%#ASn35|I6YD=1}Hs61+s9+`3kc9ny zPs1=i+F~8vFmkVf=f5pLQPE>sr!Ab=wiTLSETW`hHz+t31LA1=?Nw+$$bIMbraR*gxSM#%{o? z#z6U!$mHQzZ`!i+tlclK>Zc0G>uma~WR3rmqZkE4epCOsy+d%^aPO=n z1GW6XgCpIU=2}IzUf;2j9=iUOx_`Nk1#ZH59ybGP%$~?AgrDXQ;ts`0cSKRH6<^@;y;SxY4_n@y zr2~DJ#hVbCcnCd(P3Zm15HncVCfn$y93Ld%sN!osblD_)ueC@9#7<;-9*Z(ibgI3X zP6hP#D_y50{=yY5Tt(tH1@Rl*qqsb0`B5rA;&aJgq*w=u|5_oeo(0jM^gx5&RB0%r z!;Z=tbp4%b(Dg>K3ndY7L^G`vE6b>A7PQ~of~YR<4;Qd{xw9(5Cwq^bIi>#Y%6e%S zYfpm5cQdwEWmQo;Ab z^<@>{wk49^d^`xv1u541iusTu0ttJq*!MRf`52<>NSc{Gqr@5t~t@Vq~{KS zu={_qf4^@`3k{1YXoHYHz2WMr-`ZXu@b>*#Xy;LE<4v~}SN=}Ypo%{41eMlP-K`C` z^hr)tS$Iz}px6_Q%!DqC1@8x69(^3JY^&rtB5BA}qzBO>CVuXn5(RKatc#g|AxV zqZHNVZnyAQUAS6EntQ-2kwT7g0LKN)X{$ToU7=<^*blY{r!`<|&p%2K$VnNTo93_f z?x;B=yL2tWM}TpW-Yy(opr=|S5CWGOuwZ4OjNiu?QO*bG&4$y&X%ar|luS9{nNTOU zNn0eGhla80t2HO-<4`weZ~Jnk^n6+%^n3b{5Zk==ZpZ&gUtoiPhgB;9If}iAul2;+ zCZ$5~Ay5G5v*XttOP%FCz$(L(;U|cdq~`vQkmM^rifytMG{}N>BGAH69;7NO{V}L{ z=+-mJ8JCZ~A~#YD9`TYRb*5|mQHC2Yudt*D1$VygAPXSzuj^bkm?Dq1r~`0)9wO=Q z7%J(uD?Rgk{@9EfWhh-K@ufv*v~E^}g8~BIc(n-dy05b@qU7qgm9f2>v1a~c4lJFY zB06g0`t;8d3S+VUltF{HVUe{(k|V&9 zVf;ss==}jd0{o*@Axu=SZzN!_ah|JlQkk<5T5JK&>(*{Uvcx;EVFd4Yu{7MlmiH#{ zYA9NNWB>h9OqmNBGQkPA1nl<;d_o^rS?Z`kzONxay!LdMIWr**8Xy;b-+`7Dw^FZY zNokI*Et1{nCnUS`6jt0r)Kg34b0IxETsG@}ZRr-Zh5c6X$ z;0+Gp+!ss%yHaEXyl}P-QettFhCm**y3=x7;Jd)xu)D}KSM}Ok!;UtPsvn}q-|J%Yoa7=8?6y@t$9;kUX-F#(u{$aCTNMezs`6bsOjK=E`KpPJN1mE?=k6=vI8U89DAahhkR9HP6| z41nSO8yN1&7m*|a_ee6b26t#qW5VXE_0+>bn;7!ww=76d9Z+Et8q7SB@HWGJ$~fd8)l?&SDTQJ0II%GyamOP#O5$?xZa z0G#uGyjrm*+5e3ow3<=mA!^z+F0=Qnz`Qe3ADqNQgN1NTF|&@gtrGArlgcP4PE}tB zv{idGA!z?m4qSjTOOVx_@txpAQ1;WF^YU!{p|;m;yMVRA2BAZOO>9!j8;l?&Y03%6vacK02GpD5eAJ@>e4TyzLW2%6quP@~k|$Q3k!9<$9@hZo+}8hFC76i6?%|Pj%aMT=5zup4y4X5}5Kcop!m#i*Nf}(ED z^(Mf)&nzmv+WFu{tTTI>m<@2$EFe{_HdEPQOx@BP2k|oiithkQ@qHH(56u0-Y4SMf zNDrbPQx8KL11(KT+n$hgk`jv(LO%Z#P=4hZ@Cwa88To#)Q;TX&t5k&J#J6H+^ZiPi zVl_xQA&hK?lD#g)S?is5Bs zK|upQ_)r8|ll$PsTUlXriZe^eJ!>B&0r9bCzShd!;T7|9Aq(8#7FWq+U`{RW{&b@- zr`cvjB~57=MGLOT5u*Mg#$Va*L>P&cIGxr&c{TSb$3X9_Yh8iRDnk&ISlx$;C#`l= z^S^u7?&u0(mB|-+I42?Q?Tj` zqdpf_Tjvjn?6hp`7kM2Mw_;-*d`*UFx8B!zNMX;VG_%!5u8W_0(x(l=M~_05P@W{4U&rz6weEZ@7oJ^B29 zrj2|`=A>9gKMSv>_8~A7{a&KS&My2up>xoGlu1^AO5>~pbq;M;XC5|5IHsQAKlQkg zjrJ7&R-2ptBwYLj{?Hl{Gwj72stE`JWZIBdU(t2LsTPWiH8DWMJdCx<4*Iy|pC2zy zst_%lRveH&Dw)e>aJ(`su>vOtBl9-9gGSt$7HMwRPy;m};BA*ChdyUYj%+40AsO~Tp zPMMovP^MJoFqoX4+umIFBVVYjD?D z-pQ1C6LASEHAh^n!9)DhsM3Vpkb0-tz2G){Jeywe(9$=)vDW_ci6wC@aBa6`DMh;RM@|;Mx zfQ4&;1y+eAR0|0aUQ;HWLIDg%&AUPhOh+#&hEA0EX z`K%B{WayaBrGu{_M{#QrS?2)P_D`MF`L$y(EgGtpO#=UD{aK9grcl=q6-f#E5th`A zQw_61+X6#ylo(}n!eB{-t8+??QYbJ$mS;d^RS}%q4=Kho8si*l*aCH6vC6zCyr!Q& zo3MC8vCYN*7s?NWxnNlHAWR@`fe|8>>KK?+fEic!kp zFar5^F==u0j;aU^&dx+&H6h7`i(9vD3!s%FLN~=B3*~uJ-OOJdFA!^Ku$Cw2**vF- z#!hnskt*^w3X1pxQF{Ao0Y@zqUJ%xcPpZT)KQgAEh*6B3TYJP4QOZ8aF#Ln1TJ}~2 z&RgU-7wV}bI_`qi%aw24&ZQ%nw!(Y}N=!`RCiKN4pfdwAECA!o<;S%;`HI~$e_^R^ zXz$TyDdP-1+?!)GTCrL^8!)SzalFA3Jzvm44~@9gJ1l=;S3{<%j|`pDIjw zHV5dbuR98R<+CV>Ravk9wN@DKgA_LlZV}r8U2%14R~$Kxp$n-}F-5Io8OVsWfZoEI zUxOd)FCm3c``VBMx4FauJH);1cZY^6G{s5v&6D22)av|jF3SdpaEC#W0H((RTEo&Y6w`x(}tudHUXNQ0tcH{HPeBFVAAt^BZ z!GG?9nUtRG&N@-twh-b*$;~ZgcazoLPH22N6ofLffx90v5v%$WdWo1(U2#&(XmM{- zV@3~T6s-=X+ zzb?lBn$k%#THuGuss|Qes8_RB34w8O{LH~o0%6s>9hssW%F@cV?3^ce>>-X7w^dOz z!Yf_8Zbun}bA1H6;NfTDqjIgNLR`G(-tXupll8%reG5!{pj6q&7y7cJP1lF<1xZe0 z6Q9+qFzhHMd+o9s(#_jJ7?bn5!51E~lma6g$j7H@ivwClBY zq6LyHFDnE&ECBf5&R1JK)f#1g7BOR3zwGgbwJ^Or^*6s?w(`6<#i3|^=MOtXst%Mc zoidPgFxY4=c;e9u=e%!^A}(|PvwmHJAeqx?!Kf{ z@XwG`;(C)}d)o>O;_Vfs(JIonqE&DWc$3=ec}tpH^*Lc66r7aL)`Ohk<|T>?e7)cy zmuFoSQu?x>0m}J~1>-g}FyuSn_>~fC_rq^6qTi4=>Obd5uNWWJG)8gq5vs2zzo1z^ z&Q4$>U3vfS>=Pzl0{6-FbR-HOHc~kg;Z*BNd6(nsUHH7>R!SDnpNYO{fcd4VQ23_d zV=+uW=>gc6Dk;-XWvUDWy#DJ{2Aw7KPADXNED@htw)YV0E!F!v9QekLpO)t#@wyTW zHxmIPpt0l(;w1j3qVKo3NRI3snhX0@s`i+7Ss-Und%`2gQ>BR2D4aIb4W%hoIYm63Ym+EpJH&Ese$F2N$|Q_ z+{4k$-7D}#2m$U$a-IEQWBRqWe!Q8I%d0YQ_3Z!Z_%T|T4drhMttfvpG8)8u$FS$>hTGxv+XT`f_32IIy##2IO#(Se(n9oc2 zE@ddmit|zxY!3XBuLfstGK_=WICGc%f$Q}8#yjWX+fES=d%l$}In<6<$(|3b;N;}I z&9}GvR<4eoWlyS3UY0xeHffJ=%VgfI3?zY8&$L5N7`CN4rirQK7w(tVJGS4n;{0>d z7ZoP8tsP))Up?8OfPEtK=qPcu%2tJZQO8_3BJwsX=ESm=VsB6 zq@qLHeCOPmhK&tK`XNcVhwHgyDJTEYnB`XUkJ|-HYdkirHQ6jvkPO z*H~J*;s`yF&rN&MRPj>wUn_0R?zL_Ge35{=9)fq4te_Pzd=ni{WP<0t2jC`HmB5bs zhm@YOPSFL)_Z*iEIq+_`&WP3@MIBu2r~KWc@_BFlXUlkQDy^M$e8Nedr1Noz%pBTB z*+l2BhAd85Veacs#4g;w;LG46o#xId+xSWK-h0X9WKETOT9G(udh~{QV+Q zm3Sj$UF}GJd0_C|!7NkFQ5M+{d>xWR`fc6(MuNheM!(Qe`JNN7iod0-zExQm{<(0) zT#-GI_W3Yv7=4|IZN+tK~(J}lo@S#f^;!Owh(o^rN??3jL;@_j2s5Gy~C zAPM9t;w6sZcwg@=Y^qDJu$2Q>_DuxzUa=a^n700V<-DNd>GB6-X|;dOAW=8kbs-Zn}p}xK6YsVe~dVV>i4NJ|4(=T(z z?nLXv6F{S!=g-aVx&Em3*w>lnb0JARyfkM>7wmsLVcwa9VChhfr0JUEeWJv*|8!ZJ zRK!J)X3LAOL*ME<99bX!OmF7FVXls1gCCosqJLi>-7njCWDn`MUF~d3_lrVlSixy} zyllwOOKV*ht?#ZJ(~p}^hj6AHfNQ_z-8$ulw>)el-#kn9@Mh~y7m|LVy@7R*{Wi?SgBsW1QzvOu>7YC;a0f{q(=yk)j ze}8(o0{V%w>_66Of<*)jsz@LfPI5m|h=p%^Vff@Hp{!@qOH#(8M*#8D|GW-`-$*K$ zc!+-FPV8MU(5K;jOao~SoE9$w_I%LdwzH|@wUI^GWMW6MIPhX!BB(N>n2~DcLQAlT zq-M{p4}b1Kzribbh~2?jREldjuC~%Q9#^{b#*K zobQvaZ=wo9w>wc;Pui@_ROo`_NyjHlQhALsuG4BMr%GdR(jf;5Z^4)2TYK{?nfIj` zbIPjdpjG%Y9x@-d98SJwK#wO*0#tI^npf`OiX`MBPAh^+&Wbv19V7^x7%EaB-e|m{ zK_j8vCGq)tZRB~; z#g1m4klg2A{$EvB;!pMVwardukty>z88T&xbPVB=StubxBx7cohjT?G(Lr1? zWGKRkaF97kB}ay$i<2Q_diVaizu)`5e?a@Q*ILhd*0Y}d?LavulADfsZRNw7lr^Y6 zHUcC$5iWJxjaHT_kNz4$S^1vsk*M5BYjf|d=kSoxw5bxTAK%y_qzey`9YK7|vVET! zLN^~FYo`7xkKte)n6@XlSb|2y#A<;icXwRp(snl#D6~oR|8uw?kXI;7lg;wm`H??4 zr!(V;Vd`ElPX^z^7?j_D$?#}vxbd}&@(T-pCMZc!{7I>Gi^boZfO8-^Pbuy(_EP^S zd;9q>n9g#$J6E20Gv_noun?Z*QOF6GoQqz#FqX21Q9r{5r+^w6SoZZm)~kG`6r6bd zY3~Q}Cmw-Twy(w@fwp%V^g~AnE4tcAmE>Dtlrbih(h925GBVzs+Qm?P zANL%W@lGAIuu5k_aC(M=LCy3&M5vga<^XX>>h3n+F#}uo646NE(*eW(p^S|_KpB`x z@erS@e<%k~;zx1LuvHcv9~aL^t8ulZvF!@hhvThxBv-I$Wk2OgP4PwXVyrl$ies`@ z{4sVG-HtqNh>d&Iga#xm zBaM^OSM}ZY^f3mprOva$UQ;T)`MHbQrOPfh4c6AmjPH?6Fw!@$%UhD6pw%Xf|t$e1B_rQ&PQ`hznb&f3SVS{W9tmWXPjsE4Xiv@Cv>#gUlf@H z>2vJQ`3CNhm$PxVDir}X$`k@Q=5QNtjUB;^PUT8G?o7Jha(gYFjc5sT8UGp$OQl z!rGu(4oHF(Ysr2PdLJJ{_a0usL)JBZ?oeeNK?*8V@@mantXtLy z++fZ2)|4wwWs`s4n25Ov9DXz~jGrs6&Liliz4oQc*&qrf z_3fzMxKfL!-mpj3CS*j&CF&hv$S4`HN6L}SQC)adU*!jG4Tpxf40^2XUJ~`QZRDf> zX~FRE+dQQ_pEl&c7&zjfemRvTk<&>=;Vh)9d+ z)l91zP6C}3skO-2Z{a#0o-t*-rlK`K6*PA+oW+>2SL!;y8L4y3NZ;Wbq_ivjXUb(hM!}i}eW~=~BWT%{_@^xs)HWC;B>2E65bPed+kxS(A^xX9R zdWL3zR`4&Nuj-yDpVmwmsOpp8v@SLsmNrSY*9-eL@g`CgG-khw3I(@}UH>=i3@GH7 z6zof@MrX`F-)B5@2gFy&AdaH=lJh%%GkQqvDVjql5Z7{(nDRPjx7r{*Y|ryiam$>| zss2~v1vw(r9|k2J8@ifWFb%M-(!sGrFNt7BQ=QTLQg{cmEB$1W$LttTOBj!R)D?k1 zS=-i(6>uQNAX^F{U5AO9EPeJfn(dZQVa=D$H+&m@IooloG96@sZAP_Fr`k1gmYQUM zPgUYxh2!VoQsp!^WZcyGY&c4@GaG!qick))l2x=aKqjmXwB1WxdLleLV*EiNN8YXn zr_;Z;%z7yaGeJK}mm!%|> z_`yd1+~TVD*3%@GHg<&i%R^>#H8Q@v3hcytBcdYc8G=dL>14ah7bR9x2vgKca1d^Y z4t?A{`H_21Q=7c=Z1G%ufK&(dkF2aFFyS#{&Gv-0PTnt#yY9<~Yz}&Yq?ER}I_1Ru ziw<1V-cB9>9TrQy3@zzR8U`+XX@Dg%0QL702dvp=+yUQ}yM1yYP2L}keDTA*7s&~W zGAwSL@Qq1BufOIyDF-N#E*;A#$tVRFGpN-z14+?#m^>FoW-1YD%>aD0IMIb#`70?h za>-T<@)f2SD)3aUIv&YizVk2H9jLLwU?569Wy^MV3}SzpTm437{`V>6eb?TzgP7`H z5Fp|8B7{HGE4IB+R&aa(wrHjVVATRL#{?@+w|^v58w4{_U=1X=#pW^2<3fP&pR=t2 zH98gb>kJ6(P#j5M`jiR#K3)Quj0W?_(ucbEvW0?&krCsBPJPGy^5x zK@}(i^1XU}v5i+yHQsaXJrF5Yz9q4JlH|NE7q8^Qky^$Di-TF}6li>QQfifza)3q+ z?i2G4M6Th9VEO*12jbum^uQ^#UAnG>DF!Rcad4HFih3GWv8)@Ft`Sf!71<)}S0@yw zGHT-ies5`uUbF%d&%B<_XrUy)d_ia^Oswm?9uOK?S^Iy$@`$S>5F)w*W$l|YpcVv> zAi(DJ$oLwpv@SRIQa*r%{1`T0M1_{!LNJ(X0_Mg7g?oufDX;Q@=DF)H3Ixhn-1*s0 zysx|#_*&=o`awcik|6L$TAoF5q=>IFP{lAK!t1%EgrI5JP5@uFAXqG(Kd@eL3MDC( zh#!Cvg&Ct>@dZUyqDNA?90wJ!RE`Nr=`kAA)?+2x?jU2JD&=VHAArRf(`NEru91sp zw+CQKfBbft?Xa1R>q~ahN3s!)hyx{hI^UAO65;}l0}DSMwBEYDNZm-yY)f5TJ|3yA zeR@c1PESoA*i|i_Hsc8qVga&i`|}_Xf!#^SVtB}jp^raV z>*V&WwaFfKW(H&tS)H&sCAtGzfpqE?`>M*8}$x*wO{ zWq{M{m0E4qT>Jc@vN=hZ4zLO+V#%T>6;+A=)@_6AVp;n+x8MB7Irpzr>DBPX+kjNdGMH`=yIn{f zEnXkM>H&~duxd{W;Cd_JbgjD@`76(vdxT-YMP-7=_>v32io<-L6;7$Yc=j-0UlX36 zgY}h)=A#mlHd~u0OzAQT0Nr~6LAw>TGv-rkmbk0m&0FG>Hj82g<@7R3rJ%xlw}$f6 z{@B4IK7zC7E+f1PmobI)EROZ*<^Dm0MHW(!ta!dn?&m)@kR|WOHPqdT@}(3UZxA z0^oY?00(W-N~{GawP7LXyel8MTLdLal82+;8r%1gN#S6%hlnd%=XimsUd12Ne|83L z3aQr-*p?-G1A0B(zjpW4EkXyNfsq0WiK@S!|4;zp77UD?i(p{LfIo|?XbuO288>65|K~I)wsvZ+MTPj{?AXiydhfH6jHa=w*q49bRr+5bo*OvZ=Y_U05Iq^U8Hd9$=` zU6J#6GN{oWvEq{?Yu@X3Z^l6*j}+9NXfM4J8M$qH`Y@W$2ynA+!}b2{wjC*nXPa?1 zBEP7K-F+#P7c4)fsQxmSIw9aO{EZD23)6T2h7L=^0)^wibXrTr%ab&#@6G{EP*aUW zUj&89`_zPY(IKrM7!UQSVA-4M({z%k$$W?k8W-nkb2 zVTA4t=<^Y7q+*8xk=yKqA03(V@q;FyvZ{d(2$)*$(q)KUdBqKM0=;R0?F3v2Su!q= zdMWZRHzar=<7;6EiODv0`Ez@s;kBqcISl-dn)FAgxcIChpKdWhUUccvP+4=}0eMVIaHjlSx6Z)F zCj>{3!dLLj3*%nibuq}oH=C^XS5>-l-(rtO}gn(}U zjUNkFR(+8jv^Lp1AuZ3iXmazZ0jWTjhdbv(yk25_1deS}8Nzxz5j!>$0i9Tfu< z)5tD+t*KgO;RahSkL_>vSk)02tOV#C?!IbJGjU4REA1K~6}5p~4oJ(#IG zY+#n?d{fX^)gWU`3^qp@-Lte-l&EeeAhjcLM)WBRjhH2x%;leTs97^Tf7 z(USMsvVj3>YJ1ip@pf+gQ-wVvWWAX0g1s&5LnWJnH z8_1VMn0`T9!Rm-nY}Z7$ar^Io<>hTY| zm(`l(3e7KPfm8$eQuJ!gxTNa-KSbI|zPzFGTuEy6 zAD&PazoW?u76K9@t>2mJ9uCmfzLWoW8+a6!g4oz(I9#hvzWv9bdRlR*@%rlWMf&{efe8t1@oj z#DQMmCm>7e%#MM-C4#S+z87lrWLj)O7gPk?N~GGS5F4sy z$uR{CC65BsdOXqkZltSI&dO7}?x01Oat~Pq10D{E`1W7@Ih>+{!sH;Q8;fFP4odYo z#%|-{L zaq`$#8fzK#3_Ox43x>lx4c+`==uu8gBc3@!lSdWW?(wb2RE zhlW?p-|w1F`~FW;lJ-wB2(2RL=V~+WWUz+3DbNU3ZC!UG9}%pz2gWl5UMC-hCIbz9 zFbuB#xMbU*l!7LYi>zLAGFcQ`_#z4VmkK;hP=cq4kM}%X8RuSGX65ZVfGlk+aEVT# z@YN~w(a&zmq#b5F92snwNk%)B0B<@ok(nM{Q>tt*Aa+0pm%NKQ!)%fQ#8A{<{LMM5 z1DWh=(|~jryH&}1s3~dA7v*lp8jDy!bg7FEp?F9Q5?VTQcCUsqj|$7HdNMd|y-m4M zJrle#h+Vq}c5u1XNO5$WoNK^tAYjX}+mB*>6LKoBeZX5W$Ub|RApRdKGfzApim&j# z6S}u)YOO6&H(WCtRae&r44Ge7!@qha(3_#FeN1vi%Wg8~JC03LP%urvZvm*MnDG^X zFFc{VLM}CrMkdOF@W&VU`3yon$Ci|+8HFI#wX){AQ(%$SE!#0nWbOtOw}W4m8A-6nlR2}J7>}-o7u&LlT-Hpq2QwUE`-eupR}bE zI>(F8;@Wyi{_I?(J{D1ZwLWUinx>Y0qabJ1a8f-So>tMy0g_nq>1&E9^r`^E?zh^G zm&%8vH-vPufwCx=d8hrU$e|>E8o~HYvvEpy?`Zzw#)O%$a3jn>1@%Z)c zVPjKfXI-#rgP~0LwAkB}%w^3%-<29QZi5w^4X)sI+?E`U#n@1~uzF3KgdB(cwv$G-96SX(ah@B&nMYpY`0&tF|B*0~T>J95ymJ6?f1SnC>FaL^MvH@;3M#0dHE{v-@&jIXDNGgCH}+hIax!o0f9${h|mrMsguab08r4 z^Ye@!I>P@(JA~{_sa(%+8Y~r7s&@%!>fNwg^i-Yi?0;L@yax|xCjgTHz3}UA09s)C zDJt%*fnr>*X1Kz-`+%t2DXRJ1p;Mr&5L^#ajEo`70&9bBsf;Q4ne$1)qT7Wcj?wkw@e_9f#OAAhnaMvj^e-cG(ePm=S75h3~C6kS|O`kukpxY zyc;#~_dCfZdU@#IyBa6kgC)t9*h?6szLH5Ftv4{3QSEAZ*j#IIhjE_aMo%>K@7jp? zX}=AVz;VRVQ{E{19QOkZz$^T{oY6$!U_QckcL^o)Hb;*MwZsRKDp) zWLMt`oyyq-r)*4sI&T|_eD6Wv(uneBHb8V&VLiB55I`IBygC1Kz=S`aUXThap)1Hq z%?d2QMuC%u3b+|{^>vKUIg@hZgY0SChSl{dV7vFL6tYJjBW233u1T*}G+W`ALXw1NwhaMC`%F2olF z5Bv)=9bs+ihLBazz?R(LQ+(FgKa#Gyi{MY#qvAh)buKFG3tKj@MPzN&9MtrSv%$Ng zqT0G=m%auK5c4Ai0rY;Bu|TYwQ2LZ#+FD9PPoy5E(-Vi_60`J2jONlq|KuLg?puUm z_GH@RiM8*a$E#&dR~8-`C7PJ0YNr%OH4CxN@_OI;0+OZgP$D;@+L-+;QJ>T4qwV;= zl@xa?q^g<1I(cRt9z4kimxU7n#za*yz2qZ!7Zg7;Kc$j#JvLXngZ*0k94A9x&+>1w z#qyDhJjYw_4BPwCoGf!G+HqDRbfFsAUYybM=?U;j=2eli>(5|&Qo@2zZ}=gy3<4$e z+TYvRWF1pgph?E~VYZi3(ELZF84B)J4jEliO{#pB)Sf4_vcIi>^?r1Athb+uHK!fC zse;AixiYOcjSrgK%=7ZZz0cY>yYNdjXK30O!S^-r?PcW+6oexpK|4!9$4XWdsyb{* zeop;)LdOrbe7QH77GuKcA_|`6RKECA+D@+^l*i^hb%97{Ul|AfF8&_;_=l$(v_{B7 z>c-myG1BRqDRalEy_s;InyhPNXq-p1AxLbU4vDKw@6Gv}-2#>Fm9=8+wxV95mDe|2 zm_v?#h>?46Ec}=M>4+7fu1&UV)&(y^nd;@o$kyO!miu?SN5Uj^n4{nXzmpNlyP&sZ zh;Sn$W1<$m+N0q_{*P2J2o}|=#c70BTx3b%mC_k7RJfG({7-`6P1dCrt*gF+c-MO? z0jGBoBLpY!NgXLzdeBl8=jyquDFNQlUxm8?@82eQbywa;AQE-p zZQ)_UiY5;AZc!LUFEQlvIbWUljx|EBbge?Wp_2`&G6^quGv-Tc^|vDh_bWqr;=Oro zer~$eR6q91d_M8KJ)qXRMa7<{aNn?|h?myMw*>yVL?B;Mz7=6P0Ju@+cD ze~qYXTKW$XTECht_c%yMi%Tu+(@* zd)+2<5bfpmWqpr9m*HhM)V26Lb(fu9b)l(^e|~*Y-}G5IaqBwx`bR|pdi|qq#_Q$5 zLKkBTP&!vPUB0bo?(e09U6Y6_cpz`y!;3mb7m?yD3_cPFMbfluoS@IFp=ORvr84AZ-t^Im$0uh!LwvGZba*1~Z`9$$L3Sgv1zF(Lg~>`n|4 z)H4JW4$sD$e2OXQ4e>k|kBIre)h7=Wk1FatQLwoGkLO=k-4|+-Fj2=~z?jMSLk{uy zG7%!fAnJQD=o=cPHjE$Gx69$MO_Awku3T|kr7I*$BJ542Q3@) zxAyAi?5LF}b=|LTx*tS{>`r_Cj^MibGkP_I_E*&P;9DL}|Hx`83oNgO-QsmxXT9)@ z@eWOw^FR>lEnCRJ8rH>qP>!#UYBX$siMLQ!kJ@++H%-C8Yi#QFkEgp+dE=&8YXiKb e!CKb=y;~aoc2hCe8}RKng~1=Dx>edvfBp|)Q%D8? literal 0 HcmV?d00001 diff --git a/templates/PragueTennisCamp/Resources/assets/js/BLightBox.js b/templates/PragueTennisCamp/Resources/assets/js/BLightBox.js new file mode 100644 index 00000000..2ba24f05 --- /dev/null +++ b/templates/PragueTennisCamp/Resources/assets/js/BLightBox.js @@ -0,0 +1,289 @@ +/** + * Lightbox library created by binarity s.r.o. + * www.binarity.cz + * version 1.0.0 + * + * Vanilla JavaScript lightbox plugin. + * + * Can use custom invoker passed as first argument or uses a default one - .b-lightbox. + * This allows to have more lightbox instances on one site to categorize items. + * + * Default behaviour: + * - Hides on escape keydown event - settable (options.allow_escape). + * - Hides on background click - settable (options.allow_backgroundclick). + * - Hide button in top right corner - settable (options.close_text). + * - Allows usage of arrow keys (left/right) to navigate through images - settable (option.allow_arrows). + * + * @param options + * @param autorun + * @constructor + */ +function BLightBox(options, autorun) { + // Instance and instance variables. + var BLightBox = this, + escape_key_allowed = (!(options !== undefined && options.allow_escape === false)), + hide_on_holder_allowed = (!(options !== undefined && options.allow_backgroundclick === false)), + arrows_allowed = (!(options !== undefined && options.allow_arrows === false)), + close_text = (options !== undefined && options.close_text !== undefined) ? options.close_text : 'Close', + + // DOM + lightbox_holder = document.createElement('div'), + invoker_string = (options !== undefined && options.invoker !== undefined) ? options.invoker : '.b-lightbox', + invokers = document.querySelectorAll(invoker_string), + invokers_length = invokers.length, + lightbox_image = document.createElement('img'), + close_label = document.createElement('a'), + previous_button = document.createElement('a'), + next_button = document.createElement('a'), + lightbox_label = document.createElement('span'); + + // BLightBox DOM default settings. + lightbox_holder.className = 'b-lightbox-holder'; + lightbox_image.className = 'b-lightbox-image'; + close_label.className = 'b-lightbox-close-button'; + close_label.textContent = close_text; + previous_button.className = 'b-lightbox-direction previous'; + previous_button.innerHTML = '‹'; + next_button.className = 'b-lightbox-direction next'; + next_button.innerHTML = '›'; + lightbox_label.className = 'b-lightbox-label'; + + /** + * Show new image according to data-newindex attribute on directional button + */ + this.loadNewImage = function(event) { + event.stopPropagation(); + var index = event.target.getAttribute('data-newindex'), + label = invokers[index].getAttribute('data-label'); + + if(invokers[index]) { + lightbox_image.style.display = 'none'; + this.decideFromLoad(invokers[index]); + lightbox_image.style.display = 'block'; + if(label != '') { + lightbox_label.innerHTML = label; + } + } + + this.lightboxImageCenter(label != ''); // Center image. + + // Change indexes to be opened. + previous_button.setAttribute('data-newindex', this.getPreviousIndex(index)); + next_button.setAttribute('data-newindex', this.getNextIndex(index)); + }; + + /** + * Returns first next index possible, or return very first index to allow rotation. + * @param index + * @returns {number} + */ + this.getNextIndex = function(index) { + // Skip to last image if we are on the first. + return (index == invokers_length - 1) ? 0 : parseInt(index) + 1; + }; + + /** + * Returns first previous index possible, or returns last array index to allow rotation. + * @param index + * @returns {number} + */ + this.getPreviousIndex = function(index) { + // Skip to last image if we are on the first. + return (index == 0) ? invokers_length - 1 : index - 1; + }; + + /** + * Reset ivokers_length variable for re-use. + */ + this.resetInvokersLength = function() { + invokers_length = invokers.length; + }; + + /** + * Provides code for closing a lightbox and hiding images. + */ + this.listenActionClose = function(event) { + lightbox_holder.style.display = 'none'; + lightbox_image.style.display = 'none'; + }; + + /** + * Adds src to lightbox image from element's style background-image. + * Removes url() par of the string. + * @param el + */ + this.loadImageFromBackgroundImage = function(el) { + lightbox_image.src = el.style.backgroundImage.replace(/url\("?(.*[^"])"?\)/, '$1'); + }; + + /** + * Adds src to lightbox image from element's child img tag. + * @param el + */ + this.loadImageFromChildImg = function(el) { + var img = el.querySelector('img'); + if(img) { + lightbox_image.src = img.src; + } + }; + + /** + * Move lightbox image to the center of screen. + */ + this.lightboxImageCenter = function(bool_label) { + // Image + lightbox_image.style.left = ((lightbox_holder.offsetWidth - lightbox_image.offsetWidth) / 2) + 'px'; + lightbox_image.style.top = ((lightbox_holder.offsetHeight - lightbox_image.offsetHeight) / 2) + 'px'; + + // Image label. + if(bool_label === true) { + lightbox_label.style.width = lightbox_image.offsetWidth + 'px'; + lightbox_label.style.left = ((lightbox_holder.offsetWidth - lightbox_image.offsetWidth) / 2) + 'px'; + lightbox_label.style.display = 'block'; + lightbox_label.style.top = (lightbox_image.offsetTop + lightbox_image.offsetHeight - lightbox_label.offsetHeight) + 'px'; + } + }; + + /** + * Returns index in invokers array or false on unsuccessful attempt to find the element. + * @param el + * @returns {*} + */ + this.getIndexInInvokers = function(el) { + var inv_length = invokers_length; + while(inv_length--) { + if(invokers[inv_length].isEqualNode(el)) { + return inv_length; + } + } + return false; + }; + + /** + * This method decides from where to load src attribute into lightbox_image. + * @param el + */ + this.decideFromLoad = function(el) { + // Decide from which source to get image url. + if(el.hasAttribute('data-background')) { + this.loadImageFromBackgroundImage(el); + } else if(el.hasAttribute('data-img')) { + this.loadImageFromChildImg(el); + } + + lightbox_label.style.display = 'none'; + lightbox_label.innerHTML = ''; + }; + + /** + * Provides code for opening a lightbox and displaying images. + */ + this.listenActionOpen = function(el, app, event) { + var label = el.getAttribute('data-label'); + + event.stopPropagation(); + event.preventDefault(); // If element is a-tag, prevent from href requesting. + + app.decideFromLoad(el); // Load image into lightbox_image. + + // Change indexes to be opened. + previous_button.setAttribute('data-newindex', app.getPreviousIndex(app.getIndexInInvokers(el))); + next_button.setAttribute('data-newindex', app.getNextIndex(app.getIndexInInvokers(el))); + + // Show lightbox and image. + lightbox_holder.style.display = 'block'; + lightbox_image.style.display = 'block'; + if(label != '') { + lightbox_label.innerHTML = label; + } + + // Center lightbox within the screen. + app.lightboxImageCenter(label != ''); + }; + + /** + * Add lightbox closing method listener to given element. + * @param el + */ + this.addCloseListenerFor = function(el) { + el.addEventListener('click', this.listenActionClose.bind(this)); + }; + + /** + * Add lightbox opening method listener to given element. + * @param el + */ + this.addOpenListenerFor = function(el) { + var app = this; + el.addEventListener('click', app.listenActionOpen.bind(app, el, this), true); + }; + + /** + * Initializes all possible listeners at once on class instance creation. + */ + this.initiateListeners = function() { + // Open Listeners. + while(invokers_length--) { + this.addOpenListenerFor(invokers[invokers_length]); + } + this.resetInvokersLength(); + + // Close Listeners. + // On background click. + if(hide_on_holder_allowed){ + this.addCloseListenerFor(lightbox_holder); + } + // On escape key hit, if requested. + if(escape_key_allowed) { + window.addEventListener('keydown', function (event) { + if(event.keyCode === 27) { + BLightBox.listenActionClose(); + } + }); + } + + // Directional buttons. + previous_button.addEventListener('click',this.loadNewImage.bind(this)); + next_button.addEventListener('click',this.loadNewImage.bind(this)); + // Allow directing with arrows when enabled. + if(arrows_allowed) { + window.addEventListener('keydown', function arrowDirections(event) { + if(event.keyCode === 37) { + previous_button.click(); + } else if(event.keyCode === 39) { + next_button.click(); + } + }); + } + }; + + /** + * Initialization method that starts BLightBox instance. + * @returns {*} + */ + this.init = function() { + // Append lightbox background. + document.body.appendChild(lightbox_holder); + lightbox_holder.appendChild(previous_button); + lightbox_holder.appendChild(lightbox_image); + lightbox_holder.appendChild(next_button); + lightbox_holder.appendChild(close_label); + lightbox_holder.appendChild(lightbox_label); + // Add event listeners for invokers. + this.initiateListeners(); + + // Auto centering on window.resize; + window.addEventListener('resize', function() { + BLightBox.lightboxImageCenter(); + }); + + return BLightBox; + }; + + // If autorun is requested, create instance. + if(autorun !== undefined && autorun === true) { + return this.init(); + } else { + return this; + } +} \ No newline at end of file diff --git a/templates/PragueTennisCamp/Resources/assets/js/app.js b/templates/PragueTennisCamp/Resources/assets/js/app.js new file mode 100644 index 00000000..441b9994 --- /dev/null +++ b/templates/PragueTennisCamp/Resources/assets/js/app.js @@ -0,0 +1,21 @@ +$(document).foundation() + +$ ('#formSend').click (function () { + $ (this).value = 'Odesílám...'; + + var form = $(this).closest('form'); + + $.ajax ({ + url: form.attr('action'), + method: 'post', + data: form.serialize () + }).done (function (resp) { + if (resp.status == 'success') { + alert ('Zpráva úspěšně odeslána. Odpovíme co nejdříve!'); + window.top.location.reload (); + } else { + alert (resp.message); + } + $ (this).value = "ODESLAT"; + }); +}); \ No newline at end of file diff --git a/templates/PragueTennisCamp/Resources/assets/js/vendor/foundation.js b/templates/PragueTennisCamp/Resources/assets/js/vendor/foundation.js new file mode 100644 index 00000000..9b95e09f --- /dev/null +++ b/templates/PragueTennisCamp/Resources/assets/js/vendor/foundation.js @@ -0,0 +1,8057 @@ +!function ($) { + + "use strict"; + + var FOUNDATION_VERSION = '6.3.0'; + + // Global Foundation object + // This is attached to the window, or used as a module for AMD/Browserify + var Foundation = { + version: FOUNDATION_VERSION, + + /** + * Stores initialized plugins. + */ + _plugins: {}, + + /** + * Stores generated unique ids for plugin instances + */ + _uuids: [], + + /** + * Returns a boolean for RTL support + */ + rtl: function () { + return $('html').attr('dir') === 'rtl'; + }, + /** + * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing. + * @param {Object} plugin - The constructor of the plugin. + */ + plugin: function (plugin, name) { + // Object key to use when adding to global Foundation object + // Examples: Foundation.Reveal, Foundation.OffCanvas + var className = name || functionName(plugin); + // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin + // Examples: data-reveal, data-off-canvas + var attrName = hyphenate(className); + + // Add to the Foundation object and the plugins list (for reflowing) + this._plugins[attrName] = this[className] = plugin; + }, + /** + * @function + * Populates the _uuids array with pointers to each individual plugin instance. + * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls. + * Also fires the initialization event for each plugin, consolidating repetitive code. + * @param {Object} plugin - an instance of a plugin, usually `this` in context. + * @param {String} name - the name of the plugin, passed as a camelCased string. + * @fires Plugin#init + */ + registerPlugin: function (plugin, name) { + var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase(); + plugin.uuid = this.GetYoDigits(6, pluginName); + + if (!plugin.$element.attr('data-' + pluginName)) { + plugin.$element.attr('data-' + pluginName, plugin.uuid); + } + if (!plugin.$element.data('zfPlugin')) { + plugin.$element.data('zfPlugin', plugin); + } + /** + * Fires when the plugin has initialized. + * @event Plugin#init + */ + plugin.$element.trigger('init.zf.' + pluginName); + + this._uuids.push(plugin.uuid); + + return; + }, + /** + * @function + * Removes the plugins uuid from the _uuids array. + * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute. + * Also fires the destroyed event for the plugin, consolidating repetitive code. + * @param {Object} plugin - an instance of a plugin, usually `this` in context. + * @fires Plugin#destroyed + */ + unregisterPlugin: function (plugin) { + var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor)); + + this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1); + plugin.$element.removeAttr('data-' + pluginName).removeData('zfPlugin') + /** + * Fires when the plugin has been destroyed. + * @event Plugin#destroyed + */ + .trigger('destroyed.zf.' + pluginName); + for (var prop in plugin) { + plugin[prop] = null; //clean up script to prep for garbage collection. + } + return; + }, + + /** + * @function + * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc. + * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'` + * @default If no argument is passed, reflow all currently active plugins. + */ + reInit: function (plugins) { + var isJQ = plugins instanceof $; + try { + if (isJQ) { + plugins.each(function () { + $(this).data('zfPlugin')._init(); + }); + } else { + var type = typeof plugins, + _this = this, + fns = { + 'object': function (plgs) { + plgs.forEach(function (p) { + p = hyphenate(p); + $('[data-' + p + ']').foundation('_init'); + }); + }, + 'string': function () { + plugins = hyphenate(plugins); + $('[data-' + plugins + ']').foundation('_init'); + }, + 'undefined': function () { + this['object'](Object.keys(_this._plugins)); + } + }; + fns[type](plugins); + } + } catch (err) { + console.error(err); + } finally { + return plugins; + } + }, + + /** + * returns a random base-36 uid with namespacing + * @function + * @param {Number} length - number of random base-36 digits desired. Increase for more random strings. + * @param {String} namespace - name of plugin to be incorporated in uid, optional. + * @default {String} '' - if no plugin name is provided, nothing is appended to the uid. + * @returns {String} - unique id + */ + GetYoDigits: function (length, namespace) { + length = length || 6; + return Math.round(Math.pow(36, length + 1) - Math.random() * Math.pow(36, length)).toString(36).slice(1) + (namespace ? '-' + namespace : ''); + }, + /** + * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized. + * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object. + * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything. + */ + reflow: function (elem, plugins) { + + // If plugins is undefined, just grab everything + if (typeof plugins === 'undefined') { + plugins = Object.keys(this._plugins); + } + // If plugins is a string, convert it to an array with one item + else if (typeof plugins === 'string') { + plugins = [plugins]; + } + + var _this = this; + + // Iterate through each plugin + $.each(plugins, function (i, name) { + // Get the current plugin + var plugin = _this._plugins[name]; + + // Localize the search to all elements inside elem, as well as elem itself, unless elem === document + var $elem = $(elem).find('[data-' + name + ']').addBack('[data-' + name + ']'); + + // For each plugin found, initialize it + $elem.each(function () { + var $el = $(this), + opts = {}; + // Don't double-dip on plugins + if ($el.data('zfPlugin')) { + console.warn("Tried to initialize " + name + " on an element that already has a Foundation plugin."); + return; + } + + if ($el.attr('data-options')) { + var thing = $el.attr('data-options').split(';').forEach(function (e, i) { + var opt = e.split(':').map(function (el) { + return el.trim(); + }); + if (opt[0]) opts[opt[0]] = parseValue(opt[1]); + }); + } + try { + $el.data('zfPlugin', new plugin($(this), opts)); + } catch (er) { + console.error(er); + } finally { + return; + } + }); + }); + }, + getFnName: functionName, + transitionend: function ($elem) { + var transitions = { + 'transition': 'transitionend', + 'WebkitTransition': 'webkitTransitionEnd', + 'MozTransition': 'transitionend', + 'OTransition': 'otransitionend' + }; + var elem = document.createElement('div'), + end; + + for (var t in transitions) { + if (typeof elem.style[t] !== 'undefined') { + end = transitions[t]; + } + } + if (end) { + return end; + } else { + end = setTimeout(function () { + $elem.triggerHandler('transitionend', [$elem]); + }, 1); + return 'transitionend'; + } + } + }; + + Foundation.util = { + /** + * Function for applying a debounce effect to a function call. + * @function + * @param {Function} func - Function to be called at end of timeout. + * @param {Number} delay - Time in ms to delay the call of `func`. + * @returns function + */ + throttle: function (func, delay) { + var timer = null; + + return function () { + var context = this, + args = arguments; + + if (timer === null) { + timer = setTimeout(function () { + func.apply(context, args); + timer = null; + }, delay); + } + }; + } + }; + + // TODO: consider not making this a jQuery function + // TODO: need way to reflow vs. re-initialize + /** + * The Foundation jQuery method. + * @param {String|Array} method - An action to perform on the current jQuery object. + */ + var foundation = function (method) { + var type = typeof method, + $meta = $('meta.foundation-mq'), + $noJS = $('.no-js'); + + if (!$meta.length) { + $('').appendTo(document.head); + } + if ($noJS.length) { + $noJS.removeClass('no-js'); + } + + if (type === 'undefined') { + //needs to initialize the Foundation object, or an individual plugin. + Foundation.MediaQuery._init(); + Foundation.reflow(this); + } else if (type === 'string') { + //an individual method to invoke on a plugin or group of plugins + var args = Array.prototype.slice.call(arguments, 1); //collect all the arguments, if necessary + var plugClass = this.data('zfPlugin'); //determine the class of plugin + + if (plugClass !== undefined && plugClass[method] !== undefined) { + //make sure both the class and method exist + if (this.length === 1) { + //if there's only one, call it directly. + plugClass[method].apply(plugClass, args); + } else { + this.each(function (i, el) { + //otherwise loop through the jQuery collection and invoke the method on each + plugClass[method].apply($(el).data('zfPlugin'), args); + }); + } + } else { + //error for no class or no method + throw new ReferenceError("We're sorry, '" + method + "' is not an available method for " + (plugClass ? functionName(plugClass) : 'this element') + '.'); + } + } else { + //error for invalid argument type + throw new TypeError('We\'re sorry, ' + type + ' is not a valid parameter. You must use a string representing the method you wish to invoke.'); + } + return this; + }; + + window.Foundation = Foundation; + $.fn.foundation = foundation; + + // Polyfill for requestAnimationFrame + (function () { + if (!Date.now || !window.Date.now) window.Date.now = Date.now = function () { + return new Date().getTime(); + }; + + var vendors = ['webkit', 'moz']; + for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) { + var vp = vendors[i]; + window.requestAnimationFrame = window[vp + 'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame']; + } + if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) { + var lastTime = 0; + window.requestAnimationFrame = function (callback) { + var now = Date.now(); + var nextTime = Math.max(lastTime + 16, now); + return setTimeout(function () { + callback(lastTime = nextTime); + }, nextTime - now); + }; + window.cancelAnimationFrame = clearTimeout; + } + /** + * Polyfill for performance.now, required by rAF + */ + if (!window.performance || !window.performance.now) { + window.performance = { + start: Date.now(), + now: function () { + return Date.now() - this.start; + } + }; + } + })(); + if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + if (typeof this !== 'function') { + // closest thing possible to the ECMAScript 5 + // internal IsCallable function + throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + return fToBind.apply(this instanceof fNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + if (this.prototype) { + // native functions don't have a prototype + fNOP.prototype = this.prototype; + } + fBound.prototype = new fNOP(); + + return fBound; + }; + } + // Polyfill to get the name of a function in IE9 + function functionName(fn) { + if (Function.prototype.name === undefined) { + var funcNameRegex = /function\s([^(]{1,})\(/; + var results = funcNameRegex.exec(fn.toString()); + return results && results.length > 1 ? results[1].trim() : ""; + } else if (fn.prototype === undefined) { + return fn.constructor.name; + } else { + return fn.prototype.constructor.name; + } + } + function parseValue(str) { + if ('true' === str) return true;else if ('false' === str) return false;else if (!isNaN(str * 1)) return parseFloat(str); + return str; + } + // Convert PascalCase to kebab-case + // Thank you: http://stackoverflow.com/a/8955580 + function hyphenate(str) { + return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); + } +}(jQuery); +'use strict'; + +!function ($) { + + // Default set of media queries + var defaultQueries = { + 'default': 'only screen', + landscape: 'only screen and (orientation: landscape)', + portrait: 'only screen and (orientation: portrait)', + retina: 'only screen and (-webkit-min-device-pixel-ratio: 2),' + 'only screen and (min--moz-device-pixel-ratio: 2),' + 'only screen and (-o-min-device-pixel-ratio: 2/1),' + 'only screen and (min-device-pixel-ratio: 2),' + 'only screen and (min-resolution: 192dpi),' + 'only screen and (min-resolution: 2dppx)' + }; + + var MediaQuery = { + queries: [], + + current: '', + + /** + * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher. + * @function + * @private + */ + _init: function () { + var self = this; + var extractedStyles = $('.foundation-mq').css('font-family'); + var namedQueries; + + namedQueries = parseStyleToObject(extractedStyles); + + for (var key in namedQueries) { + if (namedQueries.hasOwnProperty(key)) { + self.queries.push({ + name: key, + value: 'only screen and (min-width: ' + namedQueries[key] + ')' + }); + } + } + + this.current = this._getCurrentSize(); + + this._watcher(); + }, + + + /** + * Checks if the screen is at least as wide as a breakpoint. + * @function + * @param {String} size - Name of the breakpoint to check. + * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller. + */ + atLeast: function (size) { + var query = this.get(size); + + if (query) { + return window.matchMedia(query).matches; + } + + return false; + }, + + + /** + * Checks if the screen matches to a breakpoint. + * @function + * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method. + * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not. + */ + is: function (size) { + size = size.trim().split(' '); + if (size.length > 1 && size[1] === 'only') { + if (size[0] === this._getCurrentSize()) return true; + } else { + return this.atLeast(size[0]); + } + return false; + }, + + + /** + * Gets the media query of a breakpoint. + * @function + * @param {String} size - Name of the breakpoint to get. + * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist. + */ + get: function (size) { + for (var i in this.queries) { + if (this.queries.hasOwnProperty(i)) { + var query = this.queries[i]; + if (size === query.name) return query.value; + } + } + + return null; + }, + + + /** + * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one). + * @function + * @private + * @returns {String} Name of the current breakpoint. + */ + _getCurrentSize: function () { + var matched; + + for (var i = 0; i < this.queries.length; i++) { + var query = this.queries[i]; + + if (window.matchMedia(query.value).matches) { + matched = query; + } + } + + if (typeof matched === 'object') { + return matched.name; + } else { + return matched; + } + }, + + + /** + * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes. + * @function + * @private + */ + _watcher: function () { + var _this = this; + + $(window).on('resize.zf.mediaquery', function () { + var newSize = _this._getCurrentSize(), + currentSize = _this.current; + + if (newSize !== currentSize) { + // Change the current media query + _this.current = newSize; + + // Broadcast the media query change on the window + $(window).trigger('changed.zf.mediaquery', [newSize, currentSize]); + } + }); + } + }; + + Foundation.MediaQuery = MediaQuery; + + // matchMedia() polyfill - Test a CSS media type/query in JS. + // Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license + window.matchMedia || (window.matchMedia = function () { + 'use strict'; + + // For browsers that support matchMedium api such as IE 9 and webkit + + var styleMedia = window.styleMedia || window.media; + + // For those that don't support matchMedium + if (!styleMedia) { + var style = document.createElement('style'), + script = document.getElementsByTagName('script')[0], + info = null; + + style.type = 'text/css'; + style.id = 'matchmediajs-test'; + + script && script.parentNode && script.parentNode.insertBefore(style, script); + + // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers + info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle; + + styleMedia = { + matchMedium: function (media) { + var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }'; + + // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers + if (style.styleSheet) { + style.styleSheet.cssText = text; + } else { + style.textContent = text; + } + + // Test if media query is true or false + return info.width === '1px'; + } + }; + } + + return function (media) { + return { + matches: styleMedia.matchMedium(media || 'all'), + media: media || 'all' + }; + }; + }()); + + // Thank you: https://github.com/sindresorhus/query-string + function parseStyleToObject(str) { + var styleObject = {}; + + if (typeof str !== 'string') { + return styleObject; + } + + str = str.trim().slice(1, -1); // browsers re-quote string style values + + if (!str) { + return styleObject; + } + + styleObject = str.split('&').reduce(function (ret, param) { + var parts = param.replace(/\+/g, ' ').split('='); + var key = parts[0]; + var val = parts[1]; + key = decodeURIComponent(key); + + // missing `=` should be `null`: + // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters + val = val === undefined ? null : decodeURIComponent(val); + + if (!ret.hasOwnProperty(key)) { + ret[key] = val; + } else if (Array.isArray(ret[key])) { + ret[key].push(val); + } else { + ret[key] = [ret[key], val]; + } + return ret; + }, {}); + + return styleObject; + } + + Foundation.MediaQuery = MediaQuery; +}(jQuery); +'use strict'; + +!function ($) { + + Foundation.Box = { + ImNotTouchingYou: ImNotTouchingYou, + GetDimensions: GetDimensions, + GetOffsets: GetOffsets + }; + + /** + * Compares the dimensions of an element to a container and determines collision events with container. + * @function + * @param {jQuery} element - jQuery object to test for collisions. + * @param {jQuery} parent - jQuery object to use as bounding container. + * @param {Boolean} lrOnly - set to true to check left and right values only. + * @param {Boolean} tbOnly - set to true to check top and bottom values only. + * @default if no parent object passed, detects collisions with `window`. + * @returns {Boolean} - true if collision free, false if a collision in any direction. + */ + function ImNotTouchingYou(element, parent, lrOnly, tbOnly) { + var eleDims = GetDimensions(element), + top, + bottom, + left, + right; + + if (parent) { + var parDims = GetDimensions(parent); + + bottom = eleDims.offset.top + eleDims.height <= parDims.height + parDims.offset.top; + top = eleDims.offset.top >= parDims.offset.top; + left = eleDims.offset.left >= parDims.offset.left; + right = eleDims.offset.left + eleDims.width <= parDims.width + parDims.offset.left; + } else { + bottom = eleDims.offset.top + eleDims.height <= eleDims.windowDims.height + eleDims.windowDims.offset.top; + top = eleDims.offset.top >= eleDims.windowDims.offset.top; + left = eleDims.offset.left >= eleDims.windowDims.offset.left; + right = eleDims.offset.left + eleDims.width <= eleDims.windowDims.width; + } + + var allDirs = [bottom, top, left, right]; + + if (lrOnly) { + return left === right === true; + } + + if (tbOnly) { + return top === bottom === true; + } + + return allDirs.indexOf(false) === -1; + }; + + /** + * Uses native methods to return an object of dimension values. + * @function + * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window. + * @returns {Object} - nested object of integer pixel values + * TODO - if element is window, return only those values. + */ + function GetDimensions(elem, test) { + elem = elem.length ? elem[0] : elem; + + if (elem === window || elem === document) { + throw new Error("I'm sorry, Dave. I'm afraid I can't do that."); + } + + var rect = elem.getBoundingClientRect(), + parRect = elem.parentNode.getBoundingClientRect(), + winRect = document.body.getBoundingClientRect(), + winY = window.pageYOffset, + winX = window.pageXOffset; + + return { + width: rect.width, + height: rect.height, + offset: { + top: rect.top + winY, + left: rect.left + winX + }, + parentDims: { + width: parRect.width, + height: parRect.height, + offset: { + top: parRect.top + winY, + left: parRect.left + winX + } + }, + windowDims: { + width: winRect.width, + height: winRect.height, + offset: { + top: winY, + left: winX + } + } + }; + } + + /** + * Returns an object of top and left integer pixel values for dynamically rendered elements, + * such as: Tooltip, Reveal, and Dropdown + * @function + * @param {jQuery} element - jQuery object for the element being positioned. + * @param {jQuery} anchor - jQuery object for the element's anchor point. + * @param {String} position - a string relating to the desired position of the element, relative to it's anchor + * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element. + * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element. + * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset. + * TODO alter/rewrite to work with `em` values as well/instead of pixels + */ + function GetOffsets(element, anchor, position, vOffset, hOffset, isOverflow) { + var $eleDims = GetDimensions(element), + $anchorDims = anchor ? GetDimensions(anchor) : null; + + switch (position) { + case 'top': + return { + left: Foundation.rtl() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width : $anchorDims.offset.left, + top: $anchorDims.offset.top - ($eleDims.height + vOffset) + }; + break; + case 'left': + return { + left: $anchorDims.offset.left - ($eleDims.width + hOffset), + top: $anchorDims.offset.top + }; + break; + case 'right': + return { + left: $anchorDims.offset.left + $anchorDims.width + hOffset, + top: $anchorDims.offset.top + }; + break; + case 'center top': + return { + left: $anchorDims.offset.left + $anchorDims.width / 2 - $eleDims.width / 2, + top: $anchorDims.offset.top - ($eleDims.height + vOffset) + }; + break; + case 'center bottom': + return { + left: isOverflow ? hOffset : $anchorDims.offset.left + $anchorDims.width / 2 - $eleDims.width / 2, + top: $anchorDims.offset.top + $anchorDims.height + vOffset + }; + break; + case 'center left': + return { + left: $anchorDims.offset.left - ($eleDims.width + hOffset), + top: $anchorDims.offset.top + $anchorDims.height / 2 - $eleDims.height / 2 + }; + break; + case 'center right': + return { + left: $anchorDims.offset.left + $anchorDims.width + hOffset + 1, + top: $anchorDims.offset.top + $anchorDims.height / 2 - $eleDims.height / 2 + }; + break; + case 'center': + return { + left: $eleDims.windowDims.offset.left + $eleDims.windowDims.width / 2 - $eleDims.width / 2, + top: $eleDims.windowDims.offset.top + $eleDims.windowDims.height / 2 - $eleDims.height / 2 + }; + break; + case 'reveal': + return { + left: ($eleDims.windowDims.width - $eleDims.width) / 2, + top: $eleDims.windowDims.offset.top + vOffset + }; + case 'reveal full': + return { + left: $eleDims.windowDims.offset.left, + top: $eleDims.windowDims.offset.top + }; + break; + case 'left bottom': + return { + left: $anchorDims.offset.left, + top: $anchorDims.offset.top + $anchorDims.height + vOffset + }; + break; + case 'right bottom': + return { + left: $anchorDims.offset.left + $anchorDims.width + hOffset - $eleDims.width, + top: $anchorDims.offset.top + $anchorDims.height + vOffset + }; + break; + default: + return { + left: Foundation.rtl() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width : $anchorDims.offset.left + hOffset, + top: $anchorDims.offset.top + $anchorDims.height + vOffset + }; + } + } +}(jQuery); +//************************************************** +//**Work inspired by multiple jquery swipe plugins** +//**Done by Yohai Ararat *************************** +//************************************************** +(function ($) { + + $.spotSwipe = { + version: '1.0.0', + enabled: 'ontouchstart' in document.documentElement, + preventDefault: false, + moveThreshold: 75, + timeThreshold: 200 + }; + + var startPosX, + startPosY, + startTime, + elapsedTime, + isMoving = false; + + function onTouchEnd() { + // alert(this); + this.removeEventListener('touchmove', onTouchMove); + this.removeEventListener('touchend', onTouchEnd); + isMoving = false; + } + + function onTouchMove(e) { + if ($.spotSwipe.preventDefault) { + e.preventDefault(); + } + if (isMoving) { + var x = e.touches[0].pageX; + var y = e.touches[0].pageY; + var dx = startPosX - x; + var dy = startPosY - y; + var dir; + elapsedTime = new Date().getTime() - startTime; + if (Math.abs(dx) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) { + dir = dx > 0 ? 'left' : 'right'; + } + // else if(Math.abs(dy) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) { + // dir = dy > 0 ? 'down' : 'up'; + // } + if (dir) { + e.preventDefault(); + onTouchEnd.call(this); + $(this).trigger('swipe', dir).trigger('swipe' + dir); + } + } + } + + function onTouchStart(e) { + if (e.touches.length == 1) { + startPosX = e.touches[0].pageX; + startPosY = e.touches[0].pageY; + isMoving = true; + startTime = new Date().getTime(); + this.addEventListener('touchmove', onTouchMove, false); + this.addEventListener('touchend', onTouchEnd, false); + } + } + + function init() { + this.addEventListener && this.addEventListener('touchstart', onTouchStart, false); + } + + function teardown() { + this.removeEventListener('touchstart', onTouchStart); + } + + $.event.special.swipe = { setup: init }; + + $.each(['left', 'up', 'down', 'right'], function () { + $.event.special['swipe' + this] = { setup: function () { + $(this).on('swipe', $.noop); + } }; + }); +})(jQuery); +/**************************************************** + * Method for adding psuedo drag events to elements * + ***************************************************/ +!function ($) { + $.fn.addTouch = function () { + this.each(function (i, el) { + $(el).bind('touchstart touchmove touchend touchcancel', function () { + //we pass the original event object because the jQuery event + //object is normalized to w3c specs and does not provide the TouchList + handleTouch(event); + }); + }); + + var handleTouch = function (event) { + var touches = event.changedTouches, + first = touches[0], + eventTypes = { + touchstart: 'mousedown', + touchmove: 'mousemove', + touchend: 'mouseup' + }, + type = eventTypes[event.type], + simulatedEvent; + + if ('MouseEvent' in window && typeof window.MouseEvent === 'function') { + simulatedEvent = new window.MouseEvent(type, { + 'bubbles': true, + 'cancelable': true, + 'screenX': first.screenX, + 'screenY': first.screenY, + 'clientX': first.clientX, + 'clientY': first.clientY + }); + } else { + simulatedEvent = document.createEvent('MouseEvent'); + simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0 /*left*/, null); + } + first.target.dispatchEvent(simulatedEvent); + }; + }; +}(jQuery); + +//********************************** +//**From the jQuery Mobile Library** +//**need to recreate functionality** +//**and try to improve if possible** +//********************************** + +/* Removing the jQuery function **** +************************************ + +(function( $, window, undefined ) { + + var $document = $( document ), + // supportTouch = $.mobile.support.touch, + touchStartEvent = 'touchstart'//supportTouch ? "touchstart" : "mousedown", + touchStopEvent = 'touchend'//supportTouch ? "touchend" : "mouseup", + touchMoveEvent = 'touchmove'//supportTouch ? "touchmove" : "mousemove"; + + // setup new event shortcuts + $.each( ( "touchstart touchmove touchend " + + "swipe swipeleft swiperight" ).split( " " ), function( i, name ) { + + $.fn[ name ] = function( fn ) { + return fn ? this.bind( name, fn ) : this.trigger( name ); + }; + + // jQuery < 1.8 + if ( $.attrFn ) { + $.attrFn[ name ] = true; + } + }); + + function triggerCustomEvent( obj, eventType, event, bubble ) { + var originalType = event.type; + event.type = eventType; + if ( bubble ) { + $.event.trigger( event, undefined, obj ); + } else { + $.event.dispatch.call( obj, event ); + } + event.type = originalType; + } + + // also handles taphold + + // Also handles swipeleft, swiperight + $.event.special.swipe = { + + // More than this horizontal displacement, and we will suppress scrolling. + scrollSupressionThreshold: 30, + + // More time than this, and it isn't a swipe. + durationThreshold: 1000, + + // Swipe horizontal displacement must be more than this. + horizontalDistanceThreshold: window.devicePixelRatio >= 2 ? 15 : 30, + + // Swipe vertical displacement must be less than this. + verticalDistanceThreshold: window.devicePixelRatio >= 2 ? 15 : 30, + + getLocation: function ( event ) { + var winPageX = window.pageXOffset, + winPageY = window.pageYOffset, + x = event.clientX, + y = event.clientY; + + if ( event.pageY === 0 && Math.floor( y ) > Math.floor( event.pageY ) || + event.pageX === 0 && Math.floor( x ) > Math.floor( event.pageX ) ) { + + // iOS4 clientX/clientY have the value that should have been + // in pageX/pageY. While pageX/page/ have the value 0 + x = x - winPageX; + y = y - winPageY; + } else if ( y < ( event.pageY - winPageY) || x < ( event.pageX - winPageX ) ) { + + // Some Android browsers have totally bogus values for clientX/Y + // when scrolling/zooming a page. Detectable since clientX/clientY + // should never be smaller than pageX/pageY minus page scroll + x = event.pageX - winPageX; + y = event.pageY - winPageY; + } + + return { + x: x, + y: y + }; + }, + + start: function( event ) { + var data = event.originalEvent.touches ? + event.originalEvent.touches[ 0 ] : event, + location = $.event.special.swipe.getLocation( data ); + return { + time: ( new Date() ).getTime(), + coords: [ location.x, location.y ], + origin: $( event.target ) + }; + }, + + stop: function( event ) { + var data = event.originalEvent.touches ? + event.originalEvent.touches[ 0 ] : event, + location = $.event.special.swipe.getLocation( data ); + return { + time: ( new Date() ).getTime(), + coords: [ location.x, location.y ] + }; + }, + + handleSwipe: function( start, stop, thisObject, origTarget ) { + if ( stop.time - start.time < $.event.special.swipe.durationThreshold && + Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold && + Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) { + var direction = start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight"; + + triggerCustomEvent( thisObject, "swipe", $.Event( "swipe", { target: origTarget, swipestart: start, swipestop: stop }), true ); + triggerCustomEvent( thisObject, direction,$.Event( direction, { target: origTarget, swipestart: start, swipestop: stop } ), true ); + return true; + } + return false; + + }, + + // This serves as a flag to ensure that at most one swipe event event is + // in work at any given time + eventInProgress: false, + + setup: function() { + var events, + thisObject = this, + $this = $( thisObject ), + context = {}; + + // Retrieve the events data for this element and add the swipe context + events = $.data( this, "mobile-events" ); + if ( !events ) { + events = { length: 0 }; + $.data( this, "mobile-events", events ); + } + events.length++; + events.swipe = context; + + context.start = function( event ) { + + // Bail if we're already working on a swipe event + if ( $.event.special.swipe.eventInProgress ) { + return; + } + $.event.special.swipe.eventInProgress = true; + + var stop, + start = $.event.special.swipe.start( event ), + origTarget = event.target, + emitted = false; + + context.move = function( event ) { + if ( !start || event.isDefaultPrevented() ) { + return; + } + + stop = $.event.special.swipe.stop( event ); + if ( !emitted ) { + emitted = $.event.special.swipe.handleSwipe( start, stop, thisObject, origTarget ); + if ( emitted ) { + + // Reset the context to make way for the next swipe event + $.event.special.swipe.eventInProgress = false; + } + } + // prevent scrolling + if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) { + event.preventDefault(); + } + }; + + context.stop = function() { + emitted = true; + + // Reset the context to make way for the next swipe event + $.event.special.swipe.eventInProgress = false; + $document.off( touchMoveEvent, context.move ); + context.move = null; + }; + + $document.on( touchMoveEvent, context.move ) + .one( touchStopEvent, context.stop ); + }; + $this.on( touchStartEvent, context.start ); + }, + + teardown: function() { + var events, context; + + events = $.data( this, "mobile-events" ); + if ( events ) { + context = events.swipe; + delete events.swipe; + events.length--; + if ( events.length === 0 ) { + $.removeData( this, "mobile-events" ); + } + } + + if ( context ) { + if ( context.start ) { + $( this ).off( touchStartEvent, context.start ); + } + if ( context.move ) { + $document.off( touchMoveEvent, context.move ); + } + if ( context.stop ) { + $document.off( touchStopEvent, context.stop ); + } + } + } + }; + $.each({ + swipeleft: "swipe.left", + swiperight: "swipe.right" + }, function( event, sourceEvent ) { + + $.event.special[ event ] = { + setup: function() { + $( this ).bind( sourceEvent, $.noop ); + }, + teardown: function() { + $( this ).unbind( sourceEvent ); + } + }; + }); +})( jQuery, this ); +*/ +'use strict'; + +!function ($) { + + /** + * Motion module. + * @module foundation.motion + */ + + var initClasses = ['mui-enter', 'mui-leave']; + var activeClasses = ['mui-enter-active', 'mui-leave-active']; + + var Motion = { + animateIn: function (element, animation, cb) { + animate(true, element, animation, cb); + }, + + animateOut: function (element, animation, cb) { + animate(false, element, animation, cb); + } + }; + + function Move(duration, elem, fn) { + var anim, + prog, + start = null; + // console.log('called'); + + if (duration === 0) { + fn.apply(elem); + elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]); + return; + } + + function move(ts) { + if (!start) start = ts; + // console.log(start, ts); + prog = ts - start; + fn.apply(elem); + + if (prog < duration) { + anim = window.requestAnimationFrame(move, elem); + } else { + window.cancelAnimationFrame(anim); + elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]); + } + } + anim = window.requestAnimationFrame(move); + } + + /** + * Animates an element in or out using a CSS transition class. + * @function + * @private + * @param {Boolean} isIn - Defines if the animation is in or out. + * @param {Object} element - jQuery or HTML object to animate. + * @param {String} animation - CSS class to use. + * @param {Function} cb - Callback to run when animation is finished. + */ + function animate(isIn, element, animation, cb) { + element = $(element).eq(0); + + if (!element.length) return; + + var initClass = isIn ? initClasses[0] : initClasses[1]; + var activeClass = isIn ? activeClasses[0] : activeClasses[1]; + + // Set up the animation + reset(); + + element.addClass(animation).css('transition', 'none'); + + requestAnimationFrame(function () { + element.addClass(initClass); + if (isIn) element.show(); + }); + + // Start the animation + requestAnimationFrame(function () { + element[0].offsetWidth; + element.css('transition', '').addClass(activeClass); + }); + + // Clean up the animation when it finishes + element.one(Foundation.transitionend(element), finish); + + // Hides the element (for out animations), resets the element, and runs a callback + function finish() { + if (!isIn) element.hide(); + reset(); + if (cb) cb.apply(element); + } + + // Resets transitions and removes motion-specific classes + function reset() { + element[0].style.transitionDuration = 0; + element.removeClass(initClass + ' ' + activeClass + ' ' + animation); + } + } + + Foundation.Move = Move; + Foundation.Motion = Motion; +}(jQuery); +'use strict'; + +!function ($) { + + var MutationObserver = function () { + var prefixes = ['WebKit', 'Moz', 'O', 'Ms', '']; + for (var i = 0; i < prefixes.length; i++) { + if (prefixes[i] + 'MutationObserver' in window) { + return window[prefixes[i] + 'MutationObserver']; + } + } + return false; + }(); + + var triggers = function (el, type) { + el.data(type).split(' ').forEach(function (id) { + $('#' + id)[type === 'close' ? 'trigger' : 'triggerHandler'](type + '.zf.trigger', [el]); + }); + }; + // Elements with [data-open] will reveal a plugin that supports it when clicked. + $(document).on('click.zf.trigger', '[data-open]', function () { + triggers($(this), 'open'); + }); + + // Elements with [data-close] will close a plugin that supports it when clicked. + // If used without a value on [data-close], the event will bubble, allowing it to close a parent component. + $(document).on('click.zf.trigger', '[data-close]', function () { + var id = $(this).data('close'); + if (id) { + triggers($(this), 'close'); + } else { + $(this).trigger('close.zf.trigger'); + } + }); + + // Elements with [data-toggle] will toggle a plugin that supports it when clicked. + $(document).on('click.zf.trigger', '[data-toggle]', function () { + var id = $(this).data('toggle'); + if (id) { + triggers($(this), 'toggle'); + } else { + $(this).trigger('toggle.zf.trigger'); + } + }); + + // Elements with [data-closable] will respond to close.zf.trigger events. + $(document).on('close.zf.trigger', '[data-closable]', function (e) { + e.stopPropagation(); + var animation = $(this).data('closable'); + + if (animation !== '') { + Foundation.Motion.animateOut($(this), animation, function () { + $(this).trigger('closed.zf'); + }); + } else { + $(this).fadeOut().trigger('closed.zf'); + } + }); + + $(document).on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', function () { + var id = $(this).data('toggle-focus'); + $('#' + id).triggerHandler('toggle.zf.trigger', [$(this)]); + }); + + /** + * Fires once after all other scripts have loaded + * @function + * @private + */ + $(window).on('load', function () { + checkListeners(); + }); + + function checkListeners() { + eventsListener(); + resizeListener(); + scrollListener(); + mutateListener(); + closemeListener(); + } + + //******** only fires this function once on load, if there's something to watch ******** + function closemeListener(pluginName) { + var yetiBoxes = $('[data-yeti-box]'), + plugNames = ['dropdown', 'tooltip', 'reveal']; + + if (pluginName) { + if (typeof pluginName === 'string') { + plugNames.push(pluginName); + } else if (typeof pluginName === 'object' && typeof pluginName[0] === 'string') { + plugNames.concat(pluginName); + } else { + console.error('Plugin names must be strings'); + } + } + if (yetiBoxes.length) { + var listeners = plugNames.map(function (name) { + return 'closeme.zf.' + name; + }).join(' '); + + $(window).off(listeners).on(listeners, function (e, pluginId) { + var plugin = e.namespace.split('.')[0]; + var plugins = $('[data-' + plugin + ']').not('[data-yeti-box="' + pluginId + '"]'); + + plugins.each(function () { + var _this = $(this); + + _this.triggerHandler('close.zf.trigger', [_this]); + }); + }); + } + } + + function resizeListener(debounce) { + var timer = void 0, + $nodes = $('[data-resize]'); + if ($nodes.length) { + $(window).off('resize.zf.trigger').on('resize.zf.trigger', function (e) { + if (timer) { + clearTimeout(timer); + } + + timer = setTimeout(function () { + + if (!MutationObserver) { + //fallback for IE 9 + $nodes.each(function () { + $(this).triggerHandler('resizeme.zf.trigger'); + }); + } + //trigger all listening elements and signal a resize event + $nodes.attr('data-events', "resize"); + }, debounce || 10); //default time to emit resize event + }); + } + } + + function scrollListener(debounce) { + var timer = void 0, + $nodes = $('[data-scroll]'); + if ($nodes.length) { + $(window).off('scroll.zf.trigger').on('scroll.zf.trigger', function (e) { + if (timer) { + clearTimeout(timer); + } + + timer = setTimeout(function () { + + if (!MutationObserver) { + //fallback for IE 9 + $nodes.each(function () { + $(this).triggerHandler('scrollme.zf.trigger'); + }); + } + //trigger all listening elements and signal a scroll event + $nodes.attr('data-events', "scroll"); + }, debounce || 10); //default time to emit scroll event + }); + } + } + + function mutateListener(debounce) { + var $nodes = $('[data-mutate]'); + if ($nodes.length && MutationObserver) { + //trigger all listening elements and signal a mutate event + //no IE 9 or 10 + $nodes.each(function () { + $(this).triggerHandler('mutateme.zf.trigger'); + }); + } + } + + function eventsListener() { + if (!MutationObserver) { + return false; + } + var nodes = document.querySelectorAll('[data-resize], [data-scroll], [data-mutate]'); + + //element callback + var listeningElementsMutation = function (mutationRecordsList) { + var $target = $(mutationRecordsList[0].target); + + //trigger the event handler for the element depending on type + switch (mutationRecordsList[0].type) { + + case "attributes": + if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") { + $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]); + } + if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") { + $target.triggerHandler('resizeme.zf.trigger', [$target]); + } + if (mutationRecordsList[0].attributeName === "style") { + $target.closest("[data-mutate]").attr("data-events", "mutate"); + $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]); + } + break; + + case "childList": + $target.closest("[data-mutate]").attr("data-events", "mutate"); + $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]); + break; + + default: + return false; + //nothing + } + }; + + if (nodes.length) { + //for each element that needs to listen for resizing, scrolling, or mutation add a single observer + for (var i = 0; i <= nodes.length - 1; i++) { + var elementObserver = new MutationObserver(listeningElementsMutation); + elementObserver.observe(nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: ["data-events", "style"] }); + } + } + } + + // ------------------------------------ + + // [PH] + // Foundation.CheckWatchers = checkWatchers; + Foundation.IHearYou = checkListeners; + // Foundation.ISeeYou = scrollListener; + // Foundation.IFeelYou = closemeListener; +}(jQuery); + +// function domMutationObserver(debounce) { +// // !!! This is coming soon and needs more work; not active !!! // +// var timer, +// nodes = document.querySelectorAll('[data-mutate]'); +// // +// if (nodes.length) { +// // var MutationObserver = (function () { +// // var prefixes = ['WebKit', 'Moz', 'O', 'Ms', '']; +// // for (var i=0; i < prefixes.length; i++) { +// // if (prefixes[i] + 'MutationObserver' in window) { +// // return window[prefixes[i] + 'MutationObserver']; +// // } +// // } +// // return false; +// // }()); +// +// +// //for the body, we need to listen for all changes effecting the style and class attributes +// var bodyObserver = new MutationObserver(bodyMutation); +// bodyObserver.observe(document.body, { attributes: true, childList: true, characterData: false, subtree:true, attributeFilter:["style", "class"]}); +// +// +// //body callback +// function bodyMutation(mutate) { +// //trigger all listening elements and signal a mutation event +// if (timer) { clearTimeout(timer); } +// +// timer = setTimeout(function() { +// bodyObserver.disconnect(); +// $('[data-mutate]').attr('data-events',"mutate"); +// }, debounce || 150); +// } +// } +// } +/******************************************* + * * + * This util was created by Marius Olbertz * + * Please thank Marius on GitHub /owlbertz * + * or the web http://www.mariusolbertz.de/ * + * * + ******************************************/ + +'use strict'; + +!function ($) { + + var keyCodes = { + 9: 'TAB', + 13: 'ENTER', + 27: 'ESCAPE', + 32: 'SPACE', + 37: 'ARROW_LEFT', + 38: 'ARROW_UP', + 39: 'ARROW_RIGHT', + 40: 'ARROW_DOWN' + }; + + var commands = {}; + + var Keyboard = { + keys: getKeyCodes(keyCodes), + + /** + * Parses the (keyboard) event and returns a String that represents its key + * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE + * @param {Event} event - the event generated by the event handler + * @return String key - String that represents the key pressed + */ + parseKey: function (event) { + var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase(); + + // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events + key = key.replace(/\W+/, ''); + + if (event.shiftKey) key = 'SHIFT_' + key; + if (event.ctrlKey) key = 'CTRL_' + key; + if (event.altKey) key = 'ALT_' + key; + + // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`) + key = key.replace(/_$/, ''); + + return key; + }, + + + /** + * Handles the given (keyboard) event + * @param {Event} event - the event generated by the event handler + * @param {String} component - Foundation component's name, e.g. Slider or Reveal + * @param {Objects} functions - collection of functions that are to be executed + */ + handleKey: function (event, component, functions) { + var commandList = commands[component], + keyCode = this.parseKey(event), + cmds, + command, + fn; + + if (!commandList) return console.warn('Component not defined!'); + + if (typeof commandList.ltr === 'undefined') { + // this component does not differentiate between ltr and rtl + cmds = commandList; // use plain list + } else { + // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa + if (Foundation.rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl);else cmds = $.extend({}, commandList.rtl, commandList.ltr); + } + command = cmds[keyCode]; + + fn = functions[command]; + if (fn && typeof fn === 'function') { + // execute function if exists + var returnValue = fn.apply(); + if (functions.handled || typeof functions.handled === 'function') { + // execute function when event was handled + functions.handled(returnValue); + } + } else { + if (functions.unhandled || typeof functions.unhandled === 'function') { + // execute function when event was not handled + functions.unhandled(); + } + } + }, + + + /** + * Finds all focusable elements within the given `$element` + * @param {jQuery} $element - jQuery object to search within + * @return {jQuery} $focusable - all focusable elements within `$element` + */ + findFocusable: function ($element) { + if (!$element) { + return false; + } + return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function () { + if (!$(this).is(':visible') || $(this).attr('tabindex') < 0) { + return false; + } //only have visible elements and those that have a tabindex greater or equal 0 + return true; + }); + }, + + + /** + * Returns the component name name + * @param {Object} component - Foundation component, e.g. Slider or Reveal + * @return String componentName + */ + + register: function (componentName, cmds) { + commands[componentName] = cmds; + }, + + + /** + * Traps the focus in the given element. + * @param {jQuery} $element jQuery object to trap the foucs into. + */ + trapFocus: function ($element) { + var $focusable = Foundation.Keyboard.findFocusable($element), + $firstFocusable = $focusable.eq(0), + $lastFocusable = $focusable.eq(-1); + + $element.on('keydown.zf.trapfocus', function (event) { + if (event.target === $lastFocusable[0] && Foundation.Keyboard.parseKey(event) === 'TAB') { + event.preventDefault(); + $firstFocusable.focus(); + } else if (event.target === $firstFocusable[0] && Foundation.Keyboard.parseKey(event) === 'SHIFT_TAB') { + event.preventDefault(); + $lastFocusable.focus(); + } + }); + }, + + /** + * Releases the trapped focus from the given element. + * @param {jQuery} $element jQuery object to release the focus for. + */ + releaseFocus: function ($element) { + $element.off('keydown.zf.trapfocus'); + } + }; + + /* + * Constants for easier comparing. + * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE + */ + function getKeyCodes(kcs) { + var k = {}; + for (var kc in kcs) { + k[kcs[kc]] = kcs[kc]; + }return k; + } + + Foundation.Keyboard = Keyboard; +}(jQuery); +'use strict'; + +!function ($) { + + var Nest = { + Feather: function (menu) { + var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'zf'; + + menu.attr('role', 'menubar'); + + var items = menu.find('li').attr({ 'role': 'menuitem' }), + subMenuClass = 'is-' + type + '-submenu', + subItemClass = subMenuClass + '-item', + hasSubClass = 'is-' + type + '-submenu-parent'; + + items.each(function () { + var $item = $(this), + $sub = $item.children('ul'); + + if ($sub.length) { + $item.addClass(hasSubClass).attr({ + 'aria-haspopup': true, + 'aria-label': $item.children('a:first').text() + }); + // Note: Drilldowns behave differently in how they hide, and so need + // additional attributes. We should look if this possibly over-generalized + // utility (Nest) is appropriate when we rework menus in 6.4 + if (type === 'drilldown') { + $item.attr({ 'aria-expanded': false }); + } + + $sub.addClass('submenu ' + subMenuClass).attr({ + 'data-submenu': '', + 'role': 'menu' + }); + if (type === 'drilldown') { + $sub.attr({ 'aria-hidden': true }); + } + } + + if ($item.parent('[data-submenu]').length) { + $item.addClass('is-submenu-item ' + subItemClass); + } + }); + + return; + }, + Burn: function (menu, type) { + var //items = menu.find('li'), + subMenuClass = 'is-' + type + '-submenu', + subItemClass = subMenuClass + '-item', + hasSubClass = 'is-' + type + '-submenu-parent'; + + menu.find('>li, .menu, .menu > li').removeClass(subMenuClass + ' ' + subItemClass + ' ' + hasSubClass + ' is-submenu-item submenu is-active').removeAttr('data-submenu').css('display', ''); + + // console.log( menu.find('.' + subMenuClass + ', .' + subItemClass + ', .has-submenu, .is-submenu-item, .submenu, [data-submenu]') + // .removeClass(subMenuClass + ' ' + subItemClass + ' has-submenu is-submenu-item submenu') + // .removeAttr('data-submenu')); + // items.each(function(){ + // var $item = $(this), + // $sub = $item.children('ul'); + // if($item.parent('[data-submenu]').length){ + // $item.removeClass('is-submenu-item ' + subItemClass); + // } + // if($sub.length){ + // $item.removeClass('has-submenu'); + // $sub.removeClass('submenu ' + subMenuClass).removeAttr('data-submenu'); + // } + // }); + } + }; + + Foundation.Nest = Nest; +}(jQuery); +'use strict'; + +!function ($) { + + function Timer(elem, options, cb) { + var _this = this, + duration = options.duration, + //options is an object for easily adding features later. + nameSpace = Object.keys(elem.data())[0] || 'timer', + remain = -1, + start, + timer; + + this.isPaused = false; + + this.restart = function () { + remain = -1; + clearTimeout(timer); + this.start(); + }; + + this.start = function () { + this.isPaused = false; + // if(!elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things. + clearTimeout(timer); + remain = remain <= 0 ? duration : remain; + elem.data('paused', false); + start = Date.now(); + timer = setTimeout(function () { + if (options.infinite) { + _this.restart(); //rerun the timer. + } + if (cb && typeof cb === 'function') { + cb(); + } + }, remain); + elem.trigger('timerstart.zf.' + nameSpace); + }; + + this.pause = function () { + this.isPaused = true; + //if(elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things. + clearTimeout(timer); + elem.data('paused', true); + var end = Date.now(); + remain = remain - (end - start); + elem.trigger('timerpaused.zf.' + nameSpace); + }; + } + + /** + * Runs a callback function when images are fully loaded. + * @param {Object} images - Image(s) to check if loaded. + * @param {Func} callback - Function to execute when image is fully loaded. + */ + function onImagesLoaded(images, callback) { + var self = this, + unloaded = images.length; + + if (unloaded === 0) { + callback(); + } + + images.each(function () { + // Check if image is loaded + if (this.complete || this.readyState === 4 || this.readyState === 'complete') { + singleImageLoaded(); + } + // Force load the image + else { + // fix for IE. See https://css-tricks.com/snippets/jquery/fixing-load-in-ie-for-cached-images/ + var src = $(this).attr('src'); + $(this).attr('src', src + '?' + new Date().getTime()); + $(this).one('load', function () { + singleImageLoaded(); + }); + } + }); + + function singleImageLoaded() { + unloaded--; + if (unloaded === 0) { + callback(); + } + } + } + + Foundation.Timer = Timer; + Foundation.onImagesLoaded = onImagesLoaded; +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Slider module. + * @module foundation.slider + * @requires foundation.util.motion + * @requires foundation.util.triggers + * @requires foundation.util.keyboard + * @requires foundation.util.touch + */ + + var Slider = function () { + /** + * Creates a new instance of a slider control. + * @class + * @param {jQuery} element - jQuery object to make into a slider control. + * @param {Object} options - Overrides to the default plugin settings. + */ + function Slider(element, options) { + _classCallCheck(this, Slider); + + this.$element = element; + this.options = $.extend({}, Slider.defaults, this.$element.data(), options); + + this._init(); + + Foundation.registerPlugin(this, 'Slider'); + Foundation.Keyboard.register('Slider', { + 'ltr': { + 'ARROW_RIGHT': 'increase', + 'ARROW_UP': 'increase', + 'ARROW_DOWN': 'decrease', + 'ARROW_LEFT': 'decrease', + 'SHIFT_ARROW_RIGHT': 'increase_fast', + 'SHIFT_ARROW_UP': 'increase_fast', + 'SHIFT_ARROW_DOWN': 'decrease_fast', + 'SHIFT_ARROW_LEFT': 'decrease_fast' + }, + 'rtl': { + 'ARROW_LEFT': 'increase', + 'ARROW_RIGHT': 'decrease', + 'SHIFT_ARROW_LEFT': 'increase_fast', + 'SHIFT_ARROW_RIGHT': 'decrease_fast' + } + }); + } + + /** + * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s). + * @function + * @private + */ + + + _createClass(Slider, [{ + key: '_init', + value: function _init() { + this.inputs = this.$element.find('input'); + this.handles = this.$element.find('[data-slider-handle]'); + + this.$handle = this.handles.eq(0); + this.$input = this.inputs.length ? this.inputs.eq(0) : $('#' + this.$handle.attr('aria-controls')); + this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0); + + var isDbl = false, + _this = this; + if (this.options.disabled || this.$element.hasClass(this.options.disabledClass)) { + this.options.disabled = true; + this.$element.addClass(this.options.disabledClass); + } + if (!this.inputs.length) { + this.inputs = $().add(this.$input); + this.options.binding = true; + } + + this._setInitAttr(0); + + if (this.handles[1]) { + this.options.doubleSided = true; + this.$handle2 = this.handles.eq(1); + this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : $('#' + this.$handle2.attr('aria-controls')); + + if (!this.inputs[1]) { + this.inputs = this.inputs.add(this.$input2); + } + isDbl = true; + + // this.$handle.triggerHandler('click.zf.slider'); + this._setInitAttr(1); + } + + // Set handle positions + this.setHandles(); + + this._events(); + } + }, { + key: 'setHandles', + value: function setHandles() { + var _this2 = this; + + if (this.handles[1]) { + this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true, function () { + _this2._setHandlePos(_this2.$handle2, _this2.inputs.eq(1).val(), true); + }); + } else { + this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true); + } + } + }, { + key: '_reflow', + value: function _reflow() { + this.setHandles(); + } + /** + * @function + * @private + * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value) + */ + + }, { + key: '_pctOfBar', + value: function _pctOfBar(value) { + var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start); + + switch (this.options.positionValueFunction) { + case "pow": + pctOfBar = this._logTransform(pctOfBar); + break; + case "log": + pctOfBar = this._powTransform(pctOfBar); + break; + } + + return pctOfBar.toFixed(2); + } + + /** + * @function + * @private + * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value + */ + + }, { + key: '_value', + value: function _value(pctOfBar) { + switch (this.options.positionValueFunction) { + case "pow": + pctOfBar = this._powTransform(pctOfBar); + break; + case "log": + pctOfBar = this._logTransform(pctOfBar); + break; + } + var value = (this.options.end - this.options.start) * pctOfBar + this.options.start; + + return value; + } + + /** + * @function + * @private + * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function + */ + + }, { + key: '_logTransform', + value: function _logTransform(value) { + return baseLog(this.options.nonLinearBase, value * (this.options.nonLinearBase - 1) + 1); + } + + /** + * @function + * @private + * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function + */ + + }, { + key: '_powTransform', + value: function _powTransform(value) { + return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1); + } + + /** + * Sets the position of the selected handle and fill bar. + * @function + * @private + * @param {jQuery} $hndl - the selected handle to move. + * @param {Number} location - floating point between the start and end values of the slider bar. + * @param {Function} cb - callback function to fire on completion. + * @fires Slider#moved + * @fires Slider#changed + */ + + }, { + key: '_setHandlePos', + value: function _setHandlePos($hndl, location, noInvert, cb) { + // don't move if the slider has been disabled since its initialization + if (this.$element.hasClass(this.options.disabledClass)) { + return; + } + //might need to alter that slightly for bars that will have odd number selections. + location = parseFloat(location); //on input change events, convert string to number...grumble. + + // prevent slider from running out of bounds, if value exceeds the limits set through options, override the value to min/max + if (location < this.options.start) { + location = this.options.start; + } else if (location > this.options.end) { + location = this.options.end; + } + + var isDbl = this.options.doubleSided; + + if (isDbl) { + //this block is to prevent 2 handles from crossing eachother. Could/should be improved. + if (this.handles.index($hndl) === 0) { + var h2Val = parseFloat(this.$handle2.attr('aria-valuenow')); + location = location >= h2Val ? h2Val - this.options.step : location; + } else { + var h1Val = parseFloat(this.$handle.attr('aria-valuenow')); + location = location <= h1Val ? h1Val + this.options.step : location; + } + } + + //this is for single-handled vertical sliders, it adjusts the value to account for the slider being "upside-down" + //for click and drag events, it's weird due to the scale(-1, 1) css property + if (this.options.vertical && !noInvert) { + location = this.options.end - location; + } + + var _this = this, + vert = this.options.vertical, + hOrW = vert ? 'height' : 'width', + lOrT = vert ? 'top' : 'left', + handleDim = $hndl[0].getBoundingClientRect()[hOrW], + elemDim = this.$element[0].getBoundingClientRect()[hOrW], + + //percentage of bar min/max value based on click or drag point + pctOfBar = this._pctOfBar(location), + + //number of actual pixels to shift the handle, based on the percentage obtained above + pxToMove = (elemDim - handleDim) * pctOfBar, + + //percentage of bar to shift the handle + movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal); + //fixing the decimal value for the location number, is passed to other methods as a fixed floating-point value + location = parseFloat(location.toFixed(this.options.decimal)); + // declare empty object for css adjustments, only used with 2 handled-sliders + var css = {}; + + this._setValues($hndl, location); + + // TODO update to calculate based on values set to respective inputs?? + if (isDbl) { + var isLeftHndl = this.handles.index($hndl) === 0, + + //empty variable, will be used for min-height/width for fill bar + dim, + + //percentage w/h of the handle compared to the slider bar + handlePct = ~~(percent(handleDim, elemDim) * 100); + //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar + if (isLeftHndl) { + //left or top percentage value to apply to the fill bar. + css[lOrT] = movement + '%'; + //calculate the new min-height/width for the fill bar. + dim = parseFloat(this.$handle2[0].style[lOrT]) - movement + handlePct; + //this callback is necessary to prevent errors and allow the proper placement and initialization of a 2-handled slider + //plus, it means we don't care if 'dim' isNaN on init, it won't be in the future. + if (cb && typeof cb === 'function') { + cb(); + } //this is only needed for the initialization of 2 handled sliders + } else { + //just caching the value of the left/bottom handle's left/top property + var handlePos = parseFloat(this.$handle[0].style[lOrT]); + //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0 + //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself + dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start) / ((this.options.end - this.options.start) / 100) : handlePos) + handlePct; + } + // assign the min-height/width to our css object + css['min-' + hOrW] = dim + '%'; + } + + this.$element.one('finished.zf.animate', function () { + /** + * Fires when the handle is done moving. + * @event Slider#moved + */ + _this.$element.trigger('moved.zf.slider', [$hndl]); + }); + + //because we don't know exactly how the handle will be moved, check the amount of time it should take to move. + var moveTime = this.$element.data('dragging') ? 1000 / 60 : this.options.moveTime; + + Foundation.Move(moveTime, $hndl, function () { + // adjusting the left/top property of the handle, based on the percentage calculated above + // if movement isNaN, that is because the slider is hidden and we cannot determine handle width, + // fall back to next best guess. + if (isNaN(movement)) { + $hndl.css(lOrT, pctOfBar * 100 + '%'); + } else { + $hndl.css(lOrT, movement + '%'); + } + + if (!_this.options.doubleSided) { + //if single-handled, a simple method to expand the fill bar + _this.$fill.css(hOrW, pctOfBar * 100 + '%'); + } else { + //otherwise, use the css object we created above + _this.$fill.css(css); + } + }); + + /** + * Fires when the value has not been change for a given time. + * @event Slider#changed + */ + clearTimeout(_this.timeout); + _this.timeout = setTimeout(function () { + _this.$element.trigger('changed.zf.slider', [$hndl]); + }, _this.options.changedDelay); + } + + /** + * Sets the initial attribute for the slider element. + * @function + * @private + * @param {Number} idx - index of the current handle/input to use. + */ + + }, { + key: '_setInitAttr', + value: function _setInitAttr(idx) { + var initVal = idx === 0 ? this.options.initialStart : this.options.initialEnd; + var id = this.inputs.eq(idx).attr('id') || Foundation.GetYoDigits(6, 'slider'); + this.inputs.eq(idx).attr({ + 'id': id, + 'max': this.options.end, + 'min': this.options.start, + 'step': this.options.step + }); + this.inputs.eq(idx).val(initVal); + this.handles.eq(idx).attr({ + 'role': 'slider', + 'aria-controls': id, + 'aria-valuemax': this.options.end, + 'aria-valuemin': this.options.start, + 'aria-valuenow': initVal, + 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal', + 'tabindex': 0 + }); + } + + /** + * Sets the input and `aria-valuenow` values for the slider element. + * @function + * @private + * @param {jQuery} $handle - the currently selected handle. + * @param {Number} val - floating point of the new value. + */ + + }, { + key: '_setValues', + value: function _setValues($handle, val) { + var idx = this.options.doubleSided ? this.handles.index($handle) : 0; + this.inputs.eq(idx).val(val); + $handle.attr('aria-valuenow', val); + } + + /** + * Handles events on the slider element. + * Calculates the new location of the current handle. + * If there are two handles and the bar was clicked, it determines which handle to move. + * @function + * @private + * @param {Object} e - the `event` object passed from the listener. + * @param {jQuery} $handle - the current handle to calculate for, if selected. + * @param {Number} val - floating point number for the new value of the slider. + * TODO clean this up, there's a lot of repeated code between this and the _setHandlePos fn. + */ + + }, { + key: '_handleEvent', + value: function _handleEvent(e, $handle, val) { + var value, hasVal; + if (!val) { + //click or drag events + e.preventDefault(); + var _this = this, + vertical = this.options.vertical, + param = vertical ? 'height' : 'width', + direction = vertical ? 'top' : 'left', + eventOffset = vertical ? e.pageY : e.pageX, + halfOfHandle = this.$handle[0].getBoundingClientRect()[param] / 2, + barDim = this.$element[0].getBoundingClientRect()[param], + windowScroll = vertical ? $(window).scrollTop() : $(window).scrollLeft(); + + var elemOffset = this.$element.offset()[direction]; + + // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates... + // best way to guess this is simulated is if clientY == pageY + if (e.clientY === e.pageY) { + eventOffset = eventOffset + windowScroll; + } + var eventFromBar = eventOffset - elemOffset; + var barXY; + if (eventFromBar < 0) { + barXY = 0; + } else if (eventFromBar > barDim) { + barXY = barDim; + } else { + barXY = eventFromBar; + } + var offsetPct = percent(barXY, barDim); + + value = this._value(offsetPct); + + // turn everything around for RTL, yay math! + if (Foundation.rtl() && !this.options.vertical) { + value = this.options.end - value; + } + + value = _this._adjustValue(null, value); + //boolean flag for the setHandlePos fn, specifically for vertical sliders + hasVal = false; + + if (!$handle) { + //figure out which handle it is, pass it to the next function. + var firstHndlPos = absPosition(this.$handle, direction, barXY, param), + secndHndlPos = absPosition(this.$handle2, direction, barXY, param); + $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2; + } + } else { + //change event on input + value = this._adjustValue(null, val); + hasVal = true; + } + + this._setHandlePos($handle, value, hasVal); + } + + /** + * Adjustes value for handle in regard to step value. returns adjusted value + * @function + * @private + * @param {jQuery} $handle - the selected handle. + * @param {Number} value - value to adjust. used if $handle is falsy + */ + + }, { + key: '_adjustValue', + value: function _adjustValue($handle, value) { + var val, + step = this.options.step, + div = parseFloat(step / 2), + left, + prev_val, + next_val; + if (!!$handle) { + val = parseFloat($handle.attr('aria-valuenow')); + } else { + val = value; + } + left = val % step; + prev_val = val - left; + next_val = prev_val + step; + if (left === 0) { + return val; + } + val = val >= prev_val + div ? next_val : prev_val; + return val; + } + + /** + * Adds event listeners to the slider elements. + * @function + * @private + */ + + }, { + key: '_events', + value: function _events() { + this._eventsForHandle(this.$handle); + if (this.handles[1]) { + this._eventsForHandle(this.$handle2); + } + } + + /** + * Adds event listeners a particular handle + * @function + * @private + * @param {jQuery} $handle - the current handle to apply listeners to. + */ + + }, { + key: '_eventsForHandle', + value: function _eventsForHandle($handle) { + var _this = this, + curHandle, + timer; + + this.inputs.off('change.zf.slider').on('change.zf.slider', function (e) { + var idx = _this.inputs.index($(this)); + _this._handleEvent(e, _this.handles.eq(idx), $(this).val()); + }); + + if (this.options.clickSelect) { + this.$element.off('click.zf.slider').on('click.zf.slider', function (e) { + if (_this.$element.data('dragging')) { + return false; + } + + if (!$(e.target).is('[data-slider-handle]')) { + if (_this.options.doubleSided) { + _this._handleEvent(e); + } else { + _this._handleEvent(e, _this.$handle); + } + } + }); + } + + if (this.options.draggable) { + this.handles.addTouch(); + + var $body = $('body'); + $handle.off('mousedown.zf.slider').on('mousedown.zf.slider', function (e) { + $handle.addClass('is-dragging'); + _this.$fill.addClass('is-dragging'); // + _this.$element.data('dragging', true); + + curHandle = $(e.currentTarget); + + $body.on('mousemove.zf.slider', function (e) { + e.preventDefault(); + _this._handleEvent(e, curHandle); + }).on('mouseup.zf.slider', function (e) { + _this._handleEvent(e, curHandle); + + $handle.removeClass('is-dragging'); + _this.$fill.removeClass('is-dragging'); + _this.$element.data('dragging', false); + + $body.off('mousemove.zf.slider mouseup.zf.slider'); + }); + }) + // prevent events triggered by touch + .on('selectstart.zf.slider touchmove.zf.slider', function (e) { + e.preventDefault(); + }); + } + + $handle.off('keydown.zf.slider').on('keydown.zf.slider', function (e) { + var _$handle = $(this), + idx = _this.options.doubleSided ? _this.handles.index(_$handle) : 0, + oldValue = parseFloat(_this.inputs.eq(idx).val()), + newValue; + + // handle keyboard event with keyboard util + Foundation.Keyboard.handleKey(e, 'Slider', { + decrease: function () { + newValue = oldValue - _this.options.step; + }, + increase: function () { + newValue = oldValue + _this.options.step; + }, + decrease_fast: function () { + newValue = oldValue - _this.options.step * 10; + }, + increase_fast: function () { + newValue = oldValue + _this.options.step * 10; + }, + handled: function () { + // only set handle pos when event was handled specially + e.preventDefault(); + _this._setHandlePos(_$handle, newValue, true); + } + }); + /*if (newValue) { // if pressed key has special function, update value + e.preventDefault(); + _this._setHandlePos(_$handle, newValue); + }*/ + }); + } + + /** + * Destroys the slider plugin. + */ + + }, { + key: 'destroy', + value: function destroy() { + this.handles.off('.zf.slider'); + this.inputs.off('.zf.slider'); + this.$element.off('.zf.slider'); + + clearTimeout(this.timeout); + + Foundation.unregisterPlugin(this); + } + }]); + + return Slider; + }(); + + Slider.defaults = { + /** + * Minimum value for the slider scale. + * @option + * @example 0 + */ + start: 0, + /** + * Maximum value for the slider scale. + * @option + * @example 100 + */ + end: 100, + /** + * Minimum value change per change event. + * @option + * @example 1 + */ + step: 1, + /** + * Value at which the handle/input *(left handle/first input)* should be set to on initialization. + * @option + * @example 0 + */ + initialStart: 0, + /** + * Value at which the right handle/second input should be set to on initialization. + * @option + * @example 100 + */ + initialEnd: 100, + /** + * Allows the input to be located outside the container and visible. Set to by the JS + * @option + * @example false + */ + binding: false, + /** + * Allows the user to click/tap on the slider bar to select a value. + * @option + * @example true + */ + clickSelect: true, + /** + * Set to true and use the `vertical` class to change alignment to vertical. + * @option + * @example false + */ + vertical: false, + /** + * Allows the user to drag the slider handle(s) to select a value. + * @option + * @example true + */ + draggable: true, + /** + * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`. + * @option + * @example false + */ + disabled: false, + /** + * Allows the use of two handles. Double checked by the JS. Changes some logic handling. + * @option + * @example false + */ + doubleSided: false, + /** + * Potential future feature. + */ + // steps: 100, + /** + * Number of decimal places the plugin should go to for floating point precision. + * @option + * @example 2 + */ + decimal: 2, + /** + * Time delay for dragged elements. + */ + // dragDelay: 0, + /** + * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings. + * @option + * @example 200 + */ + moveTime: 200, //update this if changing the transition time in the sass + /** + * Class applied to disabled sliders. + * @option + * @example 'disabled' + */ + disabledClass: 'disabled', + /** + * Will invert the default layout for a vertical slider. + * @option + * @example false + */ + invertVertical: false, + /** + * Milliseconds before the `changed.zf-slider` event is triggered after value change. + * @option + * @example 500 + */ + changedDelay: 500, + /** + * Basevalue for non-linear sliders + * @option + * @example 5 + */ + nonLinearBase: 5, + /** + * Basevalue for non-linear sliders, possible values are: 'linear', 'pow' & 'log'. Pow and Log use the nonLinearBase setting. + * @option + * @example 'linear' + */ + positionValueFunction: 'linear' + }; + + function percent(frac, num) { + return frac / num; + } + function absPosition($handle, dir, clickPos, param) { + return Math.abs($handle.position()[dir] + $handle[param]() / 2 - clickPos); + } + function baseLog(base, value) { + return Math.log(value) / Math.log(base); + } + + // Window exports + Foundation.plugin(Slider, 'Slider'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Drilldown module. + * @module foundation.drilldown + * @requires foundation.util.keyboard + * @requires foundation.util.motion + * @requires foundation.util.nest + */ + + var Drilldown = function () { + /** + * Creates a new instance of a drilldown menu. + * @class + * @param {jQuery} element - jQuery object to make into an accordion menu. + * @param {Object} options - Overrides to the default plugin settings. + */ + function Drilldown(element, options) { + _classCallCheck(this, Drilldown); + + this.$element = element; + this.options = $.extend({}, Drilldown.defaults, this.$element.data(), options); + + Foundation.Nest.Feather(this.$element, 'drilldown'); + + this._init(); + + Foundation.registerPlugin(this, 'Drilldown'); + Foundation.Keyboard.register('Drilldown', { + 'ENTER': 'open', + 'SPACE': 'open', + 'ARROW_RIGHT': 'next', + 'ARROW_UP': 'up', + 'ARROW_DOWN': 'down', + 'ARROW_LEFT': 'previous', + 'ESCAPE': 'close', + 'TAB': 'down', + 'SHIFT_TAB': 'up' + }); + } + + /** + * Initializes the drilldown by creating jQuery collections of elements + * @private + */ + + + _createClass(Drilldown, [{ + key: '_init', + value: function _init() { + this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a'); + this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]'); + this.$menuItems = this.$element.find('li').not('.js-drilldown-back').attr('role', 'menuitem').find('a'); + this.$element.attr('data-mutate', this.$element.attr('data-drilldown') || Foundation.GetYoDigits(6, 'drilldown')); + + this._prepareMenu(); + this._registerEvents(); + + this._keyboardEvents(); + } + + /** + * prepares drilldown menu by setting attributes to links and elements + * sets a min height to prevent content jumping + * wraps the element if not already wrapped + * @private + * @function + */ + + }, { + key: '_prepareMenu', + value: function _prepareMenu() { + var _this = this; + // if(!this.options.holdOpen){ + // this._menuLinkEvents(); + // } + this.$submenuAnchors.each(function () { + var $link = $(this); + var $sub = $link.parent(); + if (_this.options.parentLink) { + $link.clone().prependTo($sub.children('[data-submenu]')).wrap('

  • '); + } + $link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0); + $link.children('[data-submenu]').attr({ + 'aria-hidden': true, + 'tabindex': 0, + 'role': 'menu' + }); + _this._events($link); + }); + this.$submenus.each(function () { + var $menu = $(this), + $back = $menu.find('.js-drilldown-back'); + if (!$back.length) { + switch (_this.options.backButtonPosition) { + case "bottom": + $menu.append(_this.options.backButton); + break; + case "top": + $menu.prepend(_this.options.backButton); + break; + default: + console.error("Unsupported backButtonPosition value '" + _this.options.backButtonPosition + "'"); + } + } + _this._back($menu); + }); + + if (!this.options.autoHeight) { + this.$submenus.addClass('drilldown-submenu-cover-previous'); + } + + if (!this.$element.parent().hasClass('is-drilldown')) { + this.$wrapper = $(this.options.wrapper).addClass('is-drilldown'); + if (this.options.animateHeight) this.$wrapper.addClass('animate-height'); + this.$wrapper = this.$element.wrap(this.$wrapper).parent().css(this._getMaxDims()); + } + } + }, { + key: '_resize', + value: function _resize() { + this.$wrapper.css({ 'max-width': 'none', 'min-height': 'none' }); + // _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths + this.$wrapper.css(this._getMaxDims()); + } + + /** + * Adds event handlers to elements in the menu. + * @function + * @private + * @param {jQuery} $elem - the current menu item to add handlers to. + */ + + }, { + key: '_events', + value: function _events($elem) { + var _this = this; + + $elem.off('click.zf.drilldown').on('click.zf.drilldown', function (e) { + if ($(e.target).parentsUntil('ul', 'li').hasClass('is-drilldown-submenu-parent')) { + e.stopImmediatePropagation(); + e.preventDefault(); + } + + // if(e.target !== e.currentTarget.firstElementChild){ + // return false; + // } + _this._show($elem.parent('li')); + + if (_this.options.closeOnClick) { + var $body = $('body'); + $body.off('.zf.drilldown').on('click.zf.drilldown', function (e) { + if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target)) { + return; + } + e.preventDefault(); + _this._hideAll(); + $body.off('.zf.drilldown'); + }); + } + }); + this.$element.on('mutateme.zf.trigger', this._resize.bind(this)); + } + + /** + * Adds event handlers to the menu element. + * @function + * @private + */ + + }, { + key: '_registerEvents', + value: function _registerEvents() { + if (this.options.scrollTop) { + this._bindHandler = this._scrollTop.bind(this); + this.$element.on('open.zf.drilldown hide.zf.drilldown closed.zf.drilldown', this._bindHandler); + } + } + + /** + * Scroll to Top of Element or data-scroll-top-element + * @function + * @fires Drilldown#scrollme + */ + + }, { + key: '_scrollTop', + value: function _scrollTop() { + var _this = this; + var $scrollTopElement = _this.options.scrollTopElement != '' ? $(_this.options.scrollTopElement) : _this.$element, + scrollPos = parseInt($scrollTopElement.offset().top + _this.options.scrollTopOffset); + $('html, body').stop(true).animate({ scrollTop: scrollPos }, _this.options.animationDuration, _this.options.animationEasing, function () { + /** + * Fires after the menu has scrolled + * @event Drilldown#scrollme + */ + if (this === $('html')[0]) _this.$element.trigger('scrollme.zf.drilldown'); + }); + } + + /** + * Adds keydown event listener to `li`'s in the menu. + * @private + */ + + }, { + key: '_keyboardEvents', + value: function _keyboardEvents() { + var _this = this; + + this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function (e) { + var $element = $(this), + $elements = $element.parent('li').parent('ul').children('li').children('a'), + $prevElement, + $nextElement; + + $elements.each(function (i) { + if ($(this).is($element)) { + $prevElement = $elements.eq(Math.max(0, i - 1)); + $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)); + return; + } + }); + + Foundation.Keyboard.handleKey(e, 'Drilldown', { + next: function () { + if ($element.is(_this.$submenuAnchors)) { + _this._show($element.parent('li')); + $element.parent('li').one(Foundation.transitionend($element), function () { + $element.parent('li').find('ul li a').filter(_this.$menuItems).first().focus(); + }); + return true; + } + }, + previous: function () { + _this._hide($element.parent('li').parent('ul')); + $element.parent('li').parent('ul').one(Foundation.transitionend($element), function () { + setTimeout(function () { + $element.parent('li').parent('ul').parent('li').children('a').first().focus(); + }, 1); + }); + return true; + }, + up: function () { + $prevElement.focus(); + return true; + }, + down: function () { + $nextElement.focus(); + return true; + }, + close: function () { + _this._back(); + //_this.$menuItems.first().focus(); // focus to first element + }, + open: function () { + if (!$element.is(_this.$menuItems)) { + // not menu item means back button + _this._hide($element.parent('li').parent('ul')); + $element.parent('li').parent('ul').one(Foundation.transitionend($element), function () { + setTimeout(function () { + $element.parent('li').parent('ul').parent('li').children('a').first().focus(); + }, 1); + }); + return true; + } else if ($element.is(_this.$submenuAnchors)) { + _this._show($element.parent('li')); + $element.parent('li').one(Foundation.transitionend($element), function () { + $element.parent('li').find('ul li a').filter(_this.$menuItems).first().focus(); + }); + return true; + } + }, + handled: function (preventDefault) { + if (preventDefault) { + e.preventDefault(); + } + e.stopImmediatePropagation(); + } + }); + }); // end keyboardAccess + } + + /** + * Closes all open elements, and returns to root menu. + * @function + * @fires Drilldown#closed + */ + + }, { + key: '_hideAll', + value: function _hideAll() { + var $elem = this.$element.find('.is-drilldown-submenu.is-active').addClass('is-closing'); + if (this.options.autoHeight) this.$wrapper.css({ height: $elem.parent().closest('ul').data('calcHeight') }); + $elem.one(Foundation.transitionend($elem), function (e) { + $elem.removeClass('is-active is-closing'); + }); + /** + * Fires when the menu is fully closed. + * @event Drilldown#closed + */ + this.$element.trigger('closed.zf.drilldown'); + } + + /** + * Adds event listener for each `back` button, and closes open menus. + * @function + * @fires Drilldown#back + * @param {jQuery} $elem - the current sub-menu to add `back` event. + */ + + }, { + key: '_back', + value: function _back($elem) { + var _this = this; + $elem.off('click.zf.drilldown'); + $elem.children('.js-drilldown-back').on('click.zf.drilldown', function (e) { + e.stopImmediatePropagation(); + // console.log('mouseup on back'); + _this._hide($elem); + + // If there is a parent submenu, call show + var parentSubMenu = $elem.parent('li').parent('ul').parent('li'); + if (parentSubMenu.length) { + _this._show(parentSubMenu); + } + }); + } + + /** + * Adds event listener to menu items w/o submenus to close open menus on click. + * @function + * @private + */ + + }, { + key: '_menuLinkEvents', + value: function _menuLinkEvents() { + var _this = this; + this.$menuItems.not('.is-drilldown-submenu-parent').off('click.zf.drilldown').on('click.zf.drilldown', function (e) { + // e.stopImmediatePropagation(); + setTimeout(function () { + _this._hideAll(); + }, 0); + }); + } + + /** + * Opens a submenu. + * @function + * @fires Drilldown#open + * @param {jQuery} $elem - the current element with a submenu to open, i.e. the `li` tag. + */ + + }, { + key: '_show', + value: function _show($elem) { + if (this.options.autoHeight) this.$wrapper.css({ height: $elem.children('[data-submenu]').data('calcHeight') }); + $elem.attr('aria-expanded', true); + $elem.children('[data-submenu]').addClass('is-active').attr('aria-hidden', false); + /** + * Fires when the submenu has opened. + * @event Drilldown#open + */ + this.$element.trigger('open.zf.drilldown', [$elem]); + } + }, { + key: '_hide', + + + /** + * Hides a submenu + * @function + * @fires Drilldown#hide + * @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag. + */ + value: function _hide($elem) { + if (this.options.autoHeight) this.$wrapper.css({ height: $elem.parent().closest('ul').data('calcHeight') }); + var _this = this; + $elem.parent('li').attr('aria-expanded', false); + $elem.attr('aria-hidden', true).addClass('is-closing'); + $elem.addClass('is-closing').one(Foundation.transitionend($elem), function () { + $elem.removeClass('is-active is-closing'); + $elem.blur(); + }); + /** + * Fires when the submenu has closed. + * @event Drilldown#hide + */ + $elem.trigger('hide.zf.drilldown', [$elem]); + } + + /** + * Iterates through the nested menus to calculate the min-height, and max-width for the menu. + * Prevents content jumping. + * @function + * @private + */ + + }, { + key: '_getMaxDims', + value: function _getMaxDims() { + var maxHeight = 0, + result = {}, + _this = this; + this.$submenus.add(this.$element).each(function () { + var numOfElems = $(this).children('li').length; + var height = Foundation.Box.GetDimensions(this).height; + maxHeight = height > maxHeight ? height : maxHeight; + if (_this.options.autoHeight) { + $(this).data('calcHeight', height); + if (!$(this).hasClass('is-drilldown-submenu')) result['height'] = height; + } + }); + + if (!this.options.autoHeight) result['min-height'] = maxHeight + 'px'; + + result['max-width'] = this.$element[0].getBoundingClientRect().width + 'px'; + + return result; + } + + /** + * Destroys the Drilldown Menu + * @function + */ + + }, { + key: 'destroy', + value: function destroy() { + if (this.options.scrollTop) this.$element.off('.zf.drilldown', this._bindHandler); + this._hideAll(); + this.$element.off('mutateme.zf.trigger'); + Foundation.Nest.Burn(this.$element, 'drilldown'); + this.$element.unwrap().find('.js-drilldown-back, .is-submenu-parent-item').remove().end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').end().find('[data-submenu]').removeAttr('aria-hidden tabindex role'); + this.$submenuAnchors.each(function () { + $(this).off('.zf.drilldown'); + }); + + this.$submenus.removeClass('drilldown-submenu-cover-previous'); + + this.$element.find('a').each(function () { + var $link = $(this); + $link.removeAttr('tabindex'); + if ($link.data('savedHref')) { + $link.attr('href', $link.data('savedHref')).removeData('savedHref'); + } else { + return; + } + }); + Foundation.unregisterPlugin(this); + } + }]); + + return Drilldown; + }(); + + Drilldown.defaults = { + /** + * Markup used for JS generated back button. Prepended or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\`) if copy and pasting. + * @option + * @example '<\li><\a>Back<\/a><\/li>' + */ + backButton: '
  • Back
  • ', + /** + * Position the back button either at the top or bottom of drilldown submenus. + * @option + * @example bottom + */ + backButtonPosition: 'top', + /** + * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\`) if copy and pasting. + * @option + * @example '<\div class="is-drilldown"><\/div>' + */ + wrapper: '
    ', + /** + * Adds the parent link to the submenu. + * @option + * @example false + */ + parentLink: false, + /** + * Allow the menu to return to root list on body click. + * @option + * @example false + */ + closeOnClick: false, + /** + * Allow the menu to auto adjust height. + * @option + * @example false + */ + autoHeight: false, + /** + * Animate the auto adjust height. + * @option + * @example false + */ + animateHeight: false, + /** + * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button + * @option + * @example false + */ + scrollTop: false, + /** + * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken + * @option + * @example '' + */ + scrollTopElement: '', + /** + * ScrollTop offset + * @option + * @example 100 + */ + scrollTopOffset: 0, + /** + * Scroll animation duration + * @option + * @example 500 + */ + animationDuration: 500, + /** + * Scroll animation easing + * @option + * @example 'swing' + */ + animationEasing: 'swing' + // holdOpen: false + }; + + // Window exports + Foundation.plugin(Drilldown, 'Drilldown'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * AccordionMenu module. + * @module foundation.accordionMenu + * @requires foundation.util.keyboard + * @requires foundation.util.motion + * @requires foundation.util.nest + */ + + var AccordionMenu = function () { + /** + * Creates a new instance of an accordion menu. + * @class + * @fires AccordionMenu#init + * @param {jQuery} element - jQuery object to make into an accordion menu. + * @param {Object} options - Overrides to the default plugin settings. + */ + function AccordionMenu(element, options) { + _classCallCheck(this, AccordionMenu); + + this.$element = element; + this.options = $.extend({}, AccordionMenu.defaults, this.$element.data(), options); + + Foundation.Nest.Feather(this.$element, 'accordion'); + + this._init(); + + Foundation.registerPlugin(this, 'AccordionMenu'); + Foundation.Keyboard.register('AccordionMenu', { + 'ENTER': 'toggle', + 'SPACE': 'toggle', + 'ARROW_RIGHT': 'open', + 'ARROW_UP': 'up', + 'ARROW_DOWN': 'down', + 'ARROW_LEFT': 'close', + 'ESCAPE': 'closeAll' + }); + } + + /** + * Initializes the accordion menu by hiding all nested menus. + * @private + */ + + + _createClass(AccordionMenu, [{ + key: '_init', + value: function _init() { + this.$element.find('[data-submenu]').not('.is-active').slideUp(0); //.find('a').css('padding-left', '1rem'); + this.$element.attr({ + 'role': 'menu', + 'aria-multiselectable': this.options.multiOpen + }); + + this.$menuLinks = this.$element.find('.is-accordion-submenu-parent'); + this.$menuLinks.each(function () { + var linkId = this.id || Foundation.GetYoDigits(6, 'acc-menu-link'), + $elem = $(this), + $sub = $elem.children('[data-submenu]'), + subId = $sub[0].id || Foundation.GetYoDigits(6, 'acc-menu'), + isActive = $sub.hasClass('is-active'); + $elem.attr({ + 'aria-controls': subId, + 'aria-expanded': isActive, + 'role': 'menuitem', + 'id': linkId + }); + $sub.attr({ + 'aria-labelledby': linkId, + 'aria-hidden': !isActive, + 'role': 'menu', + 'id': subId + }); + }); + var initPanes = this.$element.find('.is-active'); + if (initPanes.length) { + var _this = this; + initPanes.each(function () { + _this.down($(this)); + }); + } + this._events(); + } + + /** + * Adds event handlers for items within the menu. + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this = this; + + this.$element.find('li').each(function () { + var $submenu = $(this).children('[data-submenu]'); + + if ($submenu.length) { + $(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) { + e.preventDefault(); + + _this.toggle($submenu); + }); + } + }).on('keydown.zf.accordionmenu', function (e) { + var $element = $(this), + $elements = $element.parent('ul').children('li'), + $prevElement, + $nextElement, + $target = $element.children('[data-submenu]'); + + $elements.each(function (i) { + if ($(this).is($element)) { + $prevElement = $elements.eq(Math.max(0, i - 1)).find('a').first(); + $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)).find('a').first(); + + if ($(this).children('[data-submenu]:visible').length) { + // has open sub menu + $nextElement = $element.find('li:first-child').find('a').first(); + } + if ($(this).is(':first-child')) { + // is first element of sub menu + $prevElement = $element.parents('li').first().find('a').first(); + } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) { + // if previous element has open sub menu + $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first(); + } + if ($(this).is(':last-child')) { + // is last element of sub menu + $nextElement = $element.parents('li').first().next('li').find('a').first(); + } + + return; + } + }); + + Foundation.Keyboard.handleKey(e, 'AccordionMenu', { + open: function () { + if ($target.is(':hidden')) { + _this.down($target); + $target.find('li').first().find('a').first().focus(); + } + }, + close: function () { + if ($target.length && !$target.is(':hidden')) { + // close active sub of this item + _this.up($target); + } else if ($element.parent('[data-submenu]').length) { + // close currently open sub + _this.up($element.parent('[data-submenu]')); + $element.parents('li').first().find('a').first().focus(); + } + }, + up: function () { + $prevElement.focus(); + return true; + }, + down: function () { + $nextElement.focus(); + return true; + }, + toggle: function () { + if ($element.children('[data-submenu]').length) { + _this.toggle($element.children('[data-submenu]')); + } + }, + closeAll: function () { + _this.hideAll(); + }, + handled: function (preventDefault) { + if (preventDefault) { + e.preventDefault(); + } + e.stopImmediatePropagation(); + } + }); + }); //.attr('tabindex', 0); + } + + /** + * Closes all panes of the menu. + * @function + */ + + }, { + key: 'hideAll', + value: function hideAll() { + this.up(this.$element.find('[data-submenu]')); + } + + /** + * Opens all panes of the menu. + * @function + */ + + }, { + key: 'showAll', + value: function showAll() { + this.down(this.$element.find('[data-submenu]')); + } + + /** + * Toggles the open/close state of a submenu. + * @function + * @param {jQuery} $target - the submenu to toggle + */ + + }, { + key: 'toggle', + value: function toggle($target) { + if (!$target.is(':animated')) { + if (!$target.is(':hidden')) { + this.up($target); + } else { + this.down($target); + } + } + } + + /** + * Opens the sub-menu defined by `$target`. + * @param {jQuery} $target - Sub-menu to open. + * @fires AccordionMenu#down + */ + + }, { + key: 'down', + value: function down($target) { + var _this = this; + + if (!this.options.multiOpen) { + this.up(this.$element.find('.is-active').not($target.parentsUntil(this.$element).add($target))); + } + + $target.addClass('is-active').attr({ 'aria-hidden': false }).parent('.is-accordion-submenu-parent').attr({ 'aria-expanded': true }); + + //Foundation.Move(this.options.slideSpeed, $target, function() { + $target.slideDown(_this.options.slideSpeed, function () { + /** + * Fires when the menu is done opening. + * @event AccordionMenu#down + */ + _this.$element.trigger('down.zf.accordionMenu', [$target]); + }); + //}); + } + + /** + * Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well. + * @param {jQuery} $target - Sub-menu to close. + * @fires AccordionMenu#up + */ + + }, { + key: 'up', + value: function up($target) { + var _this = this; + //Foundation.Move(this.options.slideSpeed, $target, function(){ + $target.slideUp(_this.options.slideSpeed, function () { + /** + * Fires when the menu is done collapsing up. + * @event AccordionMenu#up + */ + _this.$element.trigger('up.zf.accordionMenu', [$target]); + }); + //}); + + var $menus = $target.find('[data-submenu]').slideUp(0).addBack().attr('aria-hidden', true); + + $menus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false); + } + + /** + * Destroys an instance of accordion menu. + * @fires AccordionMenu#destroyed + */ + + }, { + key: 'destroy', + value: function destroy() { + this.$element.find('[data-submenu]').slideDown(0).css('display', ''); + this.$element.find('a').off('click.zf.accordionMenu'); + + Foundation.Nest.Burn(this.$element, 'accordion'); + Foundation.unregisterPlugin(this); + } + }]); + + return AccordionMenu; + }(); + + AccordionMenu.defaults = { + /** + * Amount of time to animate the opening of a submenu in ms. + * @option + * @example 250 + */ + slideSpeed: 250, + /** + * Allow the menu to have multiple open panes. + * @option + * @example true + */ + multiOpen: true + }; + + // Window exports + Foundation.plugin(AccordionMenu, 'AccordionMenu'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * DropdownMenu module. + * @module foundation.dropdown-menu + * @requires foundation.util.keyboard + * @requires foundation.util.box + * @requires foundation.util.nest + */ + + var DropdownMenu = function () { + /** + * Creates a new instance of DropdownMenu. + * @class + * @fires DropdownMenu#init + * @param {jQuery} element - jQuery object to make into a dropdown menu. + * @param {Object} options - Overrides to the default plugin settings. + */ + function DropdownMenu(element, options) { + _classCallCheck(this, DropdownMenu); + + this.$element = element; + this.options = $.extend({}, DropdownMenu.defaults, this.$element.data(), options); + + Foundation.Nest.Feather(this.$element, 'dropdown'); + this._init(); + + Foundation.registerPlugin(this, 'DropdownMenu'); + Foundation.Keyboard.register('DropdownMenu', { + 'ENTER': 'open', + 'SPACE': 'open', + 'ARROW_RIGHT': 'next', + 'ARROW_UP': 'up', + 'ARROW_DOWN': 'down', + 'ARROW_LEFT': 'previous', + 'ESCAPE': 'close' + }); + } + + /** + * Initializes the plugin, and calls _prepareMenu + * @private + * @function + */ + + + _createClass(DropdownMenu, [{ + key: '_init', + value: function _init() { + var subs = this.$element.find('li.is-dropdown-submenu-parent'); + this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub'); + + this.$menuItems = this.$element.find('[role="menuitem"]'); + this.$tabs = this.$element.children('[role="menuitem"]'); + this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass); + + if (this.$element.hasClass(this.options.rightClass) || this.options.alignment === 'right' || Foundation.rtl() || this.$element.parents('.top-bar-right').is('*')) { + this.options.alignment = 'right'; + subs.addClass('opens-left'); + } else { + subs.addClass('opens-right'); + } + this.changed = false; + this._events(); + } + }, { + key: '_isVertical', + value: function _isVertical() { + return this.$tabs.css('display') === 'block'; + } + + /** + * Adds event listeners to elements within the menu + * @private + * @function + */ + + }, { + key: '_events', + value: function _events() { + var _this = this, + hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined', + parClass = 'is-dropdown-submenu-parent'; + + // used for onClick and in the keyboard handlers + var handleClickFn = function (e) { + var $elem = $(e.target).parentsUntil('ul', '.' + parClass), + hasSub = $elem.hasClass(parClass), + hasClicked = $elem.attr('data-is-click') === 'true', + $sub = $elem.children('.is-dropdown-submenu'); + + if (hasSub) { + if (hasClicked) { + if (!_this.options.closeOnClick || !_this.options.clickOpen && !hasTouch || _this.options.forceFollow && hasTouch) { + return; + } else { + e.stopImmediatePropagation(); + e.preventDefault(); + _this._hide($elem); + } + } else { + e.preventDefault(); + e.stopImmediatePropagation(); + _this._show($sub); + $elem.add($elem.parentsUntil(_this.$element, '.' + parClass)).attr('data-is-click', true); + } + } + }; + + if (this.options.clickOpen || hasTouch) { + this.$menuItems.on('click.zf.dropdownmenu touchstart.zf.dropdownmenu', handleClickFn); + } + + // Handle Leaf element Clicks + if (_this.options.closeOnClickInside) { + this.$menuItems.on('click.zf.dropdownmenu touchend.zf.dropdownmenu', function (e) { + var $elem = $(this), + hasSub = $elem.hasClass(parClass); + if (!hasSub) { + _this._hide(); + } + }); + } + + if (!this.options.disableHover) { + this.$menuItems.on('mouseenter.zf.dropdownmenu', function (e) { + var $elem = $(this), + hasSub = $elem.hasClass(parClass); + + if (hasSub) { + clearTimeout($elem.data('_delay')); + $elem.data('_delay', setTimeout(function () { + _this._show($elem.children('.is-dropdown-submenu')); + }, _this.options.hoverDelay)); + } + }).on('mouseleave.zf.dropdownmenu', function (e) { + var $elem = $(this), + hasSub = $elem.hasClass(parClass); + if (hasSub && _this.options.autoclose) { + if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) { + return false; + } + + clearTimeout($elem.data('_delay')); + $elem.data('_delay', setTimeout(function () { + _this._hide($elem); + }, _this.options.closingTime)); + } + }); + } + this.$menuItems.on('keydown.zf.dropdownmenu', function (e) { + var $element = $(e.target).parentsUntil('ul', '[role="menuitem"]'), + isTab = _this.$tabs.index($element) > -1, + $elements = isTab ? _this.$tabs : $element.siblings('li').add($element), + $prevElement, + $nextElement; + + $elements.each(function (i) { + if ($(this).is($element)) { + $prevElement = $elements.eq(i - 1); + $nextElement = $elements.eq(i + 1); + return; + } + }); + + var nextSibling = function () { + if (!$element.is(':last-child')) { + $nextElement.children('a:first').focus(); + e.preventDefault(); + } + }, + prevSibling = function () { + $prevElement.children('a:first').focus(); + e.preventDefault(); + }, + openSub = function () { + var $sub = $element.children('ul.is-dropdown-submenu'); + if ($sub.length) { + _this._show($sub); + $element.find('li > a:first').focus(); + e.preventDefault(); + } else { + return; + } + }, + closeSub = function () { + //if ($element.is(':first-child')) { + var close = $element.parent('ul').parent('li'); + close.children('a:first').focus(); + _this._hide(close); + e.preventDefault(); + //} + }; + var functions = { + open: openSub, + close: function () { + _this._hide(_this.$element); + _this.$menuItems.find('a:first').focus(); // focus to first element + e.preventDefault(); + }, + handled: function () { + e.stopImmediatePropagation(); + } + }; + + if (isTab) { + if (_this._isVertical()) { + // vertical menu + if (Foundation.rtl()) { + // right aligned + $.extend(functions, { + down: nextSibling, + up: prevSibling, + next: closeSub, + previous: openSub + }); + } else { + // left aligned + $.extend(functions, { + down: nextSibling, + up: prevSibling, + next: openSub, + previous: closeSub + }); + } + } else { + // horizontal menu + if (Foundation.rtl()) { + // right aligned + $.extend(functions, { + next: prevSibling, + previous: nextSibling, + down: openSub, + up: closeSub + }); + } else { + // left aligned + $.extend(functions, { + next: nextSibling, + previous: prevSibling, + down: openSub, + up: closeSub + }); + } + } + } else { + // not tabs -> one sub + if (Foundation.rtl()) { + // right aligned + $.extend(functions, { + next: closeSub, + previous: openSub, + down: nextSibling, + up: prevSibling + }); + } else { + // left aligned + $.extend(functions, { + next: openSub, + previous: closeSub, + down: nextSibling, + up: prevSibling + }); + } + } + Foundation.Keyboard.handleKey(e, 'DropdownMenu', functions); + }); + } + + /** + * Adds an event handler to the body to close any dropdowns on a click. + * @function + * @private + */ + + }, { + key: '_addBodyHandler', + value: function _addBodyHandler() { + var $body = $(document.body), + _this = this; + $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu').on('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu', function (e) { + var $link = _this.$element.find(e.target); + if ($link.length) { + return; + } + + _this._hide(); + $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu'); + }); + } + + /** + * Opens a dropdown pane, and checks for collisions first. + * @param {jQuery} $sub - ul element that is a submenu to show + * @function + * @private + * @fires DropdownMenu#show + */ + + }, { + key: '_show', + value: function _show($sub) { + var idx = this.$tabs.index(this.$tabs.filter(function (i, el) { + return $(el).find($sub).length > 0; + })); + var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent'); + this._hide($sibs, idx); + $sub.css('visibility', 'hidden').addClass('js-dropdown-active').parent('li.is-dropdown-submenu-parent').addClass('is-active'); + var clear = Foundation.Box.ImNotTouchingYou($sub, null, true); + if (!clear) { + var oldClass = this.options.alignment === 'left' ? '-right' : '-left', + $parentLi = $sub.parent('.is-dropdown-submenu-parent'); + $parentLi.removeClass('opens' + oldClass).addClass('opens-' + this.options.alignment); + clear = Foundation.Box.ImNotTouchingYou($sub, null, true); + if (!clear) { + $parentLi.removeClass('opens-' + this.options.alignment).addClass('opens-inner'); + } + this.changed = true; + } + $sub.css('visibility', ''); + if (this.options.closeOnClick) { + this._addBodyHandler(); + } + /** + * Fires when the new dropdown pane is visible. + * @event DropdownMenu#show + */ + this.$element.trigger('show.zf.dropdownmenu', [$sub]); + } + + /** + * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything. + * @function + * @param {jQuery} $elem - element with a submenu to hide + * @param {Number} idx - index of the $tabs collection to hide + * @private + */ + + }, { + key: '_hide', + value: function _hide($elem, idx) { + var $toClose; + if ($elem && $elem.length) { + $toClose = $elem; + } else if (idx !== undefined) { + $toClose = this.$tabs.not(function (i, el) { + return i === idx; + }); + } else { + $toClose = this.$element; + } + var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0; + + if (somethingToClose) { + $toClose.find('li.is-active').add($toClose).attr({ + 'data-is-click': false + }).removeClass('is-active'); + + $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active'); + + if (this.changed || $toClose.find('opens-inner').length) { + var oldClass = this.options.alignment === 'left' ? 'right' : 'left'; + $toClose.find('li.is-dropdown-submenu-parent').add($toClose).removeClass('opens-inner opens-' + this.options.alignment).addClass('opens-' + oldClass); + this.changed = false; + } + /** + * Fires when the open menus are closed. + * @event DropdownMenu#hide + */ + this.$element.trigger('hide.zf.dropdownmenu', [$toClose]); + } + } + + /** + * Destroys the plugin. + * @function + */ + + }, { + key: 'destroy', + value: function destroy() { + this.$menuItems.off('.zf.dropdownmenu').removeAttr('data-is-click').removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner'); + $(document.body).off('.zf.dropdownmenu'); + Foundation.Nest.Burn(this.$element, 'dropdown'); + Foundation.unregisterPlugin(this); + } + }]); + + return DropdownMenu; + }(); + + /** + * Default settings for plugin + */ + + + DropdownMenu.defaults = { + /** + * Disallows hover events from opening submenus + * @option + * @example false + */ + disableHover: false, + /** + * Allow a submenu to automatically close on a mouseleave event, if not clicked open. + * @option + * @example true + */ + autoclose: true, + /** + * Amount of time to delay opening a submenu on hover event. + * @option + * @example 50 + */ + hoverDelay: 50, + /** + * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu. + * @option + * @example true + */ + clickOpen: false, + /** + * Amount of time to delay closing a submenu on a mouseleave event. + * @option + * @example 500 + */ + + closingTime: 500, + /** + * Position of the menu relative to what direction the submenus should open. Handled by JS. + * @option + * @example 'left' + */ + alignment: 'left', + /** + * Allow clicks on the body to close any open submenus. + * @option + * @example true + */ + closeOnClick: true, + /** + * Allow clicks on leaf anchor links to close any open submenus. + * @option + * @example true + */ + closeOnClickInside: true, + /** + * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class. + * @option + * @example 'vertical' + */ + verticalClass: 'vertical', + /** + * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class. + * @option + * @example 'align-right' + */ + rightClass: 'align-right', + /** + * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile. + * @option + * @example false + */ + forceFollow: true + }; + + // Window exports + Foundation.plugin(DropdownMenu, 'DropdownMenu'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Magellan module. + * @module foundation.magellan + */ + + var Magellan = function () { + /** + * Creates a new instance of Magellan. + * @class + * @fires Magellan#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + function Magellan(element, options) { + _classCallCheck(this, Magellan); + + this.$element = element; + this.options = $.extend({}, Magellan.defaults, this.$element.data(), options); + + this._init(); + this.calcPoints(); + + Foundation.registerPlugin(this, 'Magellan'); + } + + /** + * Initializes the Magellan plugin and calls functions to get equalizer functioning on load. + * @private + */ + + + _createClass(Magellan, [{ + key: '_init', + value: function _init() { + var id = this.$element[0].id || Foundation.GetYoDigits(6, 'magellan'); + var _this = this; + this.$targets = $('[data-magellan-target]'); + this.$links = this.$element.find('a'); + this.$element.attr({ + 'data-resize': id, + 'data-scroll': id, + 'id': id + }); + this.$active = $(); + this.scrollPos = parseInt(window.pageYOffset, 10); + + this._events(); + } + + /** + * Calculates an array of pixel values that are the demarcation lines between locations on the page. + * Can be invoked if new elements are added or the size of a location changes. + * @function + */ + + }, { + key: 'calcPoints', + value: function calcPoints() { + var _this = this, + body = document.body, + html = document.documentElement; + + this.points = []; + this.winHeight = Math.round(Math.max(window.innerHeight, html.clientHeight)); + this.docHeight = Math.round(Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight)); + + this.$targets.each(function () { + var $tar = $(this), + pt = Math.round($tar.offset().top - _this.options.threshold); + $tar.targetPoint = pt; + _this.points.push(pt); + }); + } + + /** + * Initializes events for Magellan. + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this = this, + $body = $('html, body'), + opts = { + duration: _this.options.animationDuration, + easing: _this.options.animationEasing + }; + $(window).one('load', function () { + if (_this.options.deepLinking) { + if (location.hash) { + _this.scrollToLoc(location.hash); + } + } + _this.calcPoints(); + _this._updateActive(); + }); + + this.$element.on({ + 'resizeme.zf.trigger': this.reflow.bind(this), + 'scrollme.zf.trigger': this._updateActive.bind(this) + }).on('click.zf.magellan', 'a[href^="#"]', function (e) { + e.preventDefault(); + var arrival = this.getAttribute('href'); + _this.scrollToLoc(arrival); + }); + $(window).on('popstate', function (e) { + if (_this.options.deepLinking) { + _this.scrollToLoc(window.location.hash); + } + }); + } + + /** + * Function to scroll to a given location on the page. + * @param {String} loc - a properly formatted jQuery id selector. Example: '#foo' + * @function + */ + + }, { + key: 'scrollToLoc', + value: function scrollToLoc(loc) { + // Do nothing if target does not exist to prevent errors + if (!$(loc).length) { + return false; + } + this._inTransition = true; + var _this = this, + scrollPos = Math.round($(loc).offset().top - this.options.threshold / 2 - this.options.barOffset); + + $('html, body').stop(true).animate({ scrollTop: scrollPos }, this.options.animationDuration, this.options.animationEasing, function () { + _this._inTransition = false;_this._updateActive(); + }); + } + + /** + * Calls necessary functions to update Magellan upon DOM change + * @function + */ + + }, { + key: 'reflow', + value: function reflow() { + this.calcPoints(); + this._updateActive(); + } + + /** + * Updates the visibility of an active location link, and updates the url hash for the page, if deepLinking enabled. + * @private + * @function + * @fires Magellan#update + */ + + }, { + key: '_updateActive', + value: function _updateActive() /*evt, elem, scrollPos*/{ + if (this._inTransition) { + return; + } + var winPos = /*scrollPos ||*/parseInt(window.pageYOffset, 10), + curIdx; + + if (winPos + this.winHeight === this.docHeight) { + curIdx = this.points.length - 1; + } else if (winPos < this.points[0]) { + curIdx = undefined; + } else { + var isDown = this.scrollPos < winPos, + _this = this, + curVisible = this.points.filter(function (p, i) { + return isDown ? p - _this.options.barOffset <= winPos : p - _this.options.barOffset - _this.options.threshold <= winPos; + }); + curIdx = curVisible.length ? curVisible.length - 1 : 0; + } + + this.$active.removeClass(this.options.activeClass); + this.$active = this.$links.filter('[href="#' + this.$targets.eq(curIdx).data('magellan-target') + '"]').addClass(this.options.activeClass); + + if (this.options.deepLinking) { + var hash = ""; + if (curIdx != undefined) { + hash = this.$active[0].getAttribute('href'); + } + if (hash !== window.location.hash) { + if (window.history.pushState) { + window.history.pushState(null, null, hash); + } else { + window.location.hash = hash; + } + } + } + + this.scrollPos = winPos; + /** + * Fires when magellan is finished updating to the new active element. + * @event Magellan#update + */ + this.$element.trigger('update.zf.magellan', [this.$active]); + } + + /** + * Destroys an instance of Magellan and resets the url of the window. + * @function + */ + + }, { + key: 'destroy', + value: function destroy() { + this.$element.off('.zf.trigger .zf.magellan').find('.' + this.options.activeClass).removeClass(this.options.activeClass); + + if (this.options.deepLinking) { + var hash = this.$active[0].getAttribute('href'); + window.location.hash.replace(hash, ''); + } + + Foundation.unregisterPlugin(this); + } + }]); + + return Magellan; + }(); + + /** + * Default settings for plugin + */ + + + Magellan.defaults = { + /** + * Amount of time, in ms, the animated scrolling should take between locations. + * @option + * @example 500 + */ + animationDuration: 500, + /** + * Animation style to use when scrolling between locations. + * @option + * @example 'ease-in-out' + */ + animationEasing: 'linear', + /** + * Number of pixels to use as a marker for location changes. + * @option + * @example 50 + */ + threshold: 50, + /** + * Class applied to the active locations link on the magellan container. + * @option + * @example 'active' + */ + activeClass: 'active', + /** + * Allows the script to manipulate the url of the current page, and if supported, alter the history. + * @option + * @example true + */ + deepLinking: false, + /** + * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar. + * @option + * @example 25 + */ + barOffset: 0 + }; + + // Window exports + Foundation.plugin(Magellan, 'Magellan'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * ResponsiveMenu module. + * @module foundation.responsiveMenu + * @requires foundation.util.triggers + * @requires foundation.util.mediaQuery + * @requires foundation.util.accordionMenu + * @requires foundation.util.drilldown + * @requires foundation.util.dropdown-menu + */ + + var ResponsiveMenu = function () { + /** + * Creates a new instance of a responsive menu. + * @class + * @fires ResponsiveMenu#init + * @param {jQuery} element - jQuery object to make into a dropdown menu. + * @param {Object} options - Overrides to the default plugin settings. + */ + function ResponsiveMenu(element, options) { + _classCallCheck(this, ResponsiveMenu); + + this.$element = $(element); + this.rules = this.$element.data('responsive-menu'); + this.currentMq = null; + this.currentPlugin = null; + + this._init(); + this._events(); + + Foundation.registerPlugin(this, 'ResponsiveMenu'); + } + + /** + * Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element. + * @function + * @private + */ + + + _createClass(ResponsiveMenu, [{ + key: '_init', + value: function _init() { + // The first time an Interchange plugin is initialized, this.rules is converted from a string of "classes" to an object of rules + if (typeof this.rules === 'string') { + var rulesTree = {}; + + // Parse rules from "classes" pulled from data attribute + var rules = this.rules.split(' '); + + // Iterate through every rule found + for (var i = 0; i < rules.length; i++) { + var rule = rules[i].split('-'); + var ruleSize = rule.length > 1 ? rule[0] : 'small'; + var rulePlugin = rule.length > 1 ? rule[1] : rule[0]; + + if (MenuPlugins[rulePlugin] !== null) { + rulesTree[ruleSize] = MenuPlugins[rulePlugin]; + } + } + + this.rules = rulesTree; + } + + if (!$.isEmptyObject(this.rules)) { + this._checkMediaQueries(); + } + // Add data-mutate since children may need it. + this.$element.attr('data-mutate', this.$element.attr('data-mutate') || Foundation.GetYoDigits(6, 'responsive-menu')); + } + + /** + * Initializes events for the Menu. + * @function + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this = this; + + $(window).on('changed.zf.mediaquery', function () { + _this._checkMediaQueries(); + }); + // $(window).on('resize.zf.ResponsiveMenu', function() { + // _this._checkMediaQueries(); + // }); + } + + /** + * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out. + * @function + * @private + */ + + }, { + key: '_checkMediaQueries', + value: function _checkMediaQueries() { + var matchedMq, + _this = this; + // Iterate through each rule and find the last matching rule + $.each(this.rules, function (key) { + if (Foundation.MediaQuery.atLeast(key)) { + matchedMq = key; + } + }); + + // No match? No dice + if (!matchedMq) return; + + // Plugin already initialized? We good + if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return; + + // Remove existing plugin-specific CSS classes + $.each(MenuPlugins, function (key, value) { + _this.$element.removeClass(value.cssClass); + }); + + // Add the CSS class for the new plugin + this.$element.addClass(this.rules[matchedMq].cssClass); + + // Create an instance of the new plugin + if (this.currentPlugin) this.currentPlugin.destroy(); + this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {}); + } + + /** + * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out. + * @function + */ + + }, { + key: 'destroy', + value: function destroy() { + this.currentPlugin.destroy(); + $(window).off('.zf.ResponsiveMenu'); + Foundation.unregisterPlugin(this); + } + }]); + + return ResponsiveMenu; + }(); + + ResponsiveMenu.defaults = {}; + + // The plugin matches the plugin classes with these plugin instances. + var MenuPlugins = { + dropdown: { + cssClass: 'dropdown', + plugin: Foundation._plugins['dropdown-menu'] || null + }, + drilldown: { + cssClass: 'drilldown', + plugin: Foundation._plugins['drilldown'] || null + }, + accordion: { + cssClass: 'accordion-menu', + plugin: Foundation._plugins['accordion-menu'] || null + } + }; + + // Window exports + Foundation.plugin(ResponsiveMenu, 'ResponsiveMenu'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Dropdown module. + * @module foundation.dropdown + * @requires foundation.util.keyboard + * @requires foundation.util.box + * @requires foundation.util.triggers + */ + + var Dropdown = function () { + /** + * Creates a new instance of a dropdown. + * @class + * @param {jQuery} element - jQuery object to make into a dropdown. + * Object should be of the dropdown panel, rather than its anchor. + * @param {Object} options - Overrides to the default plugin settings. + */ + function Dropdown(element, options) { + _classCallCheck(this, Dropdown); + + this.$element = element; + this.options = $.extend({}, Dropdown.defaults, this.$element.data(), options); + this._init(); + + Foundation.registerPlugin(this, 'Dropdown'); + Foundation.Keyboard.register('Dropdown', { + 'ENTER': 'open', + 'SPACE': 'open', + 'ESCAPE': 'close' + }); + } + + /** + * Initializes the plugin by setting/checking options and attributes, adding helper variables, and saving the anchor. + * @function + * @private + */ + + + _createClass(Dropdown, [{ + key: '_init', + value: function _init() { + var $id = this.$element.attr('id'); + + this.$anchor = $('[data-toggle="' + $id + '"]').length ? $('[data-toggle="' + $id + '"]') : $('[data-open="' + $id + '"]'); + this.$anchor.attr({ + 'aria-controls': $id, + 'data-is-focus': false, + 'data-yeti-box': $id, + 'aria-haspopup': true, + 'aria-expanded': false + + }); + + if (this.options.parentClass) { + this.$parent = this.$element.parents('.' + this.options.parentClass); + } else { + this.$parent = null; + } + this.options.positionClass = this.getPositionClass(); + this.counter = 4; + this.usedPositions = []; + this.$element.attr({ + 'aria-hidden': 'true', + 'data-yeti-box': $id, + 'data-resize': $id, + 'aria-labelledby': this.$anchor[0].id || Foundation.GetYoDigits(6, 'dd-anchor') + }); + this._events(); + } + + /** + * Helper function to determine current orientation of dropdown pane. + * @function + * @returns {String} position - string value of a position class. + */ + + }, { + key: 'getPositionClass', + value: function getPositionClass() { + var verticalPosition = this.$element[0].className.match(/(top|left|right|bottom)/g); + verticalPosition = verticalPosition ? verticalPosition[0] : ''; + var horizontalPosition = /float-(\S+)/.exec(this.$anchor[0].className); + horizontalPosition = horizontalPosition ? horizontalPosition[1] : ''; + var position = horizontalPosition ? horizontalPosition + ' ' + verticalPosition : verticalPosition; + + return position; + } + + /** + * Adjusts the dropdown panes orientation by adding/removing positioning classes. + * @function + * @private + * @param {String} position - position class to remove. + */ + + }, { + key: '_reposition', + value: function _reposition(position) { + this.usedPositions.push(position ? position : 'bottom'); + //default, try switching to opposite side + if (!position && this.usedPositions.indexOf('top') < 0) { + this.$element.addClass('top'); + } else if (position === 'top' && this.usedPositions.indexOf('bottom') < 0) { + this.$element.removeClass(position); + } else if (position === 'left' && this.usedPositions.indexOf('right') < 0) { + this.$element.removeClass(position).addClass('right'); + } else if (position === 'right' && this.usedPositions.indexOf('left') < 0) { + this.$element.removeClass(position).addClass('left'); + } + + //if default change didn't work, try bottom or left first + else if (!position && this.usedPositions.indexOf('top') > -1 && this.usedPositions.indexOf('left') < 0) { + this.$element.addClass('left'); + } else if (position === 'top' && this.usedPositions.indexOf('bottom') > -1 && this.usedPositions.indexOf('left') < 0) { + this.$element.removeClass(position).addClass('left'); + } else if (position === 'left' && this.usedPositions.indexOf('right') > -1 && this.usedPositions.indexOf('bottom') < 0) { + this.$element.removeClass(position); + } else if (position === 'right' && this.usedPositions.indexOf('left') > -1 && this.usedPositions.indexOf('bottom') < 0) { + this.$element.removeClass(position); + } + //if nothing cleared, set to bottom + else { + this.$element.removeClass(position); + } + this.classChanged = true; + this.counter--; + } + + /** + * Sets the position and orientation of the dropdown pane, checks for collisions. + * Recursively calls itself if a collision is detected, with a new position class. + * @function + * @private + */ + + }, { + key: '_setPosition', + value: function _setPosition() { + if (this.$anchor.attr('aria-expanded') === 'false') { + return false; + } + var position = this.getPositionClass(), + $eleDims = Foundation.Box.GetDimensions(this.$element), + $anchorDims = Foundation.Box.GetDimensions(this.$anchor), + _this = this, + direction = position === 'left' ? 'left' : position === 'right' ? 'left' : 'top', + param = direction === 'top' ? 'height' : 'width', + offset = param === 'height' ? this.options.vOffset : this.options.hOffset; + + if ($eleDims.width >= $eleDims.windowDims.width || !this.counter && !Foundation.Box.ImNotTouchingYou(this.$element, this.$parent)) { + var newWidth = $eleDims.windowDims.width, + parentHOffset = 0; + if (this.$parent) { + var $parentDims = Foundation.Box.GetDimensions(this.$parent), + parentHOffset = $parentDims.offset.left; + if ($parentDims.width < newWidth) { + newWidth = $parentDims.width; + } + } + + this.$element.offset(Foundation.Box.GetOffsets(this.$element, this.$anchor, 'center bottom', this.options.vOffset, this.options.hOffset + parentHOffset, true)).css({ + 'width': newWidth - this.options.hOffset * 2, + 'height': 'auto' + }); + this.classChanged = true; + return false; + } + + this.$element.offset(Foundation.Box.GetOffsets(this.$element, this.$anchor, position, this.options.vOffset, this.options.hOffset)); + + while (!Foundation.Box.ImNotTouchingYou(this.$element, this.$parent, true) && this.counter) { + this._reposition(position); + this._setPosition(); + } + } + + /** + * Adds event listeners to the element utilizing the triggers utility library. + * @function + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this = this; + this.$element.on({ + 'open.zf.trigger': this.open.bind(this), + 'close.zf.trigger': this.close.bind(this), + 'toggle.zf.trigger': this.toggle.bind(this), + 'resizeme.zf.trigger': this._setPosition.bind(this) + }); + + if (this.options.hover) { + this.$anchor.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () { + var bodyData = $('body').data(); + if (typeof bodyData.whatinput === 'undefined' || bodyData.whatinput === 'mouse') { + clearTimeout(_this.timeout); + _this.timeout = setTimeout(function () { + _this.open(); + _this.$anchor.data('hover', true); + }, _this.options.hoverDelay); + } + }).on('mouseleave.zf.dropdown', function () { + clearTimeout(_this.timeout); + _this.timeout = setTimeout(function () { + _this.close(); + _this.$anchor.data('hover', false); + }, _this.options.hoverDelay); + }); + if (this.options.hoverPane) { + this.$element.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () { + clearTimeout(_this.timeout); + }).on('mouseleave.zf.dropdown', function () { + clearTimeout(_this.timeout); + _this.timeout = setTimeout(function () { + _this.close(); + _this.$anchor.data('hover', false); + }, _this.options.hoverDelay); + }); + } + } + this.$anchor.add(this.$element).on('keydown.zf.dropdown', function (e) { + + var $target = $(this), + visibleFocusableElements = Foundation.Keyboard.findFocusable(_this.$element); + + Foundation.Keyboard.handleKey(e, 'Dropdown', { + open: function () { + if ($target.is(_this.$anchor)) { + _this.open(); + _this.$element.attr('tabindex', -1).focus(); + e.preventDefault(); + } + }, + close: function () { + _this.close(); + _this.$anchor.focus(); + } + }); + }); + } + + /** + * Adds an event handler to the body to close any dropdowns on a click. + * @function + * @private + */ + + }, { + key: '_addBodyHandler', + value: function _addBodyHandler() { + var $body = $(document.body).not(this.$element), + _this = this; + $body.off('click.zf.dropdown').on('click.zf.dropdown', function (e) { + if (_this.$anchor.is(e.target) || _this.$anchor.find(e.target).length) { + return; + } + if (_this.$element.find(e.target).length) { + return; + } + _this.close(); + $body.off('click.zf.dropdown'); + }); + } + + /** + * Opens the dropdown pane, and fires a bubbling event to close other dropdowns. + * @function + * @fires Dropdown#closeme + * @fires Dropdown#show + */ + + }, { + key: 'open', + value: function open() { + // var _this = this; + /** + * Fires to close other open dropdowns + * @event Dropdown#closeme + */ + this.$element.trigger('closeme.zf.dropdown', this.$element.attr('id')); + this.$anchor.addClass('hover').attr({ 'aria-expanded': true }); + // this.$element/*.show()*/; + this._setPosition(); + this.$element.addClass('is-open').attr({ 'aria-hidden': false }); + + if (this.options.autoFocus) { + var $focusable = Foundation.Keyboard.findFocusable(this.$element); + if ($focusable.length) { + $focusable.eq(0).focus(); + } + } + + if (this.options.closeOnClick) { + this._addBodyHandler(); + } + + if (this.options.trapFocus) { + Foundation.Keyboard.trapFocus(this.$element); + } + + /** + * Fires once the dropdown is visible. + * @event Dropdown#show + */ + this.$element.trigger('show.zf.dropdown', [this.$element]); + } + + /** + * Closes the open dropdown pane. + * @function + * @fires Dropdown#hide + */ + + }, { + key: 'close', + value: function close() { + if (!this.$element.hasClass('is-open')) { + return false; + } + this.$element.removeClass('is-open').attr({ 'aria-hidden': true }); + + this.$anchor.removeClass('hover').attr('aria-expanded', false); + + if (this.classChanged) { + var curPositionClass = this.getPositionClass(); + if (curPositionClass) { + this.$element.removeClass(curPositionClass); + } + this.$element.addClass(this.options.positionClass) + /*.hide()*/.css({ height: '', width: '' }); + this.classChanged = false; + this.counter = 4; + this.usedPositions.length = 0; + } + this.$element.trigger('hide.zf.dropdown', [this.$element]); + + if (this.options.trapFocus) { + Foundation.Keyboard.releaseFocus(this.$element); + } + } + + /** + * Toggles the dropdown pane's visibility. + * @function + */ + + }, { + key: 'toggle', + value: function toggle() { + if (this.$element.hasClass('is-open')) { + if (this.$anchor.data('hover')) return; + this.close(); + } else { + this.open(); + } + } + + /** + * Destroys the dropdown. + * @function + */ + + }, { + key: 'destroy', + value: function destroy() { + this.$element.off('.zf.trigger').hide(); + this.$anchor.off('.zf.dropdown'); + + Foundation.unregisterPlugin(this); + } + }]); + + return Dropdown; + }(); + + Dropdown.defaults = { + /** + * Class that designates bounding container of Dropdown (Default: window) + * @option + * @example 'dropdown-parent' + */ + parentClass: null, + /** + * Amount of time to delay opening a submenu on hover event. + * @option + * @example 250 + */ + hoverDelay: 250, + /** + * Allow submenus to open on hover events + * @option + * @example false + */ + hover: false, + /** + * Don't close dropdown when hovering over dropdown pane + * @option + * @example true + */ + hoverPane: false, + /** + * Number of pixels between the dropdown pane and the triggering element on open. + * @option + * @example 1 + */ + vOffset: 1, + /** + * Number of pixels between the dropdown pane and the triggering element on open. + * @option + * @example 1 + */ + hOffset: 1, + /** + * Class applied to adjust open position. JS will test and fill this in. + * @option + * @example 'top' + */ + positionClass: '', + /** + * Allow the plugin to trap focus to the dropdown pane if opened with keyboard commands. + * @option + * @example false + */ + trapFocus: false, + /** + * Allow the plugin to set focus to the first focusable element within the pane, regardless of method of opening. + * @option + * @example true + */ + autoFocus: false, + /** + * Allows a click on the body to close the dropdown. + * @option + * @example false + */ + closeOnClick: false + }; + + // Window exports + Foundation.plugin(Dropdown, 'Dropdown'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Reveal module. + * @module foundation.reveal + * @requires foundation.util.keyboard + * @requires foundation.util.box + * @requires foundation.util.triggers + * @requires foundation.util.mediaQuery + * @requires foundation.util.motion if using animations + */ + + var Reveal = function () { + /** + * Creates a new instance of Reveal. + * @class + * @param {jQuery} element - jQuery object to use for the modal. + * @param {Object} options - optional parameters. + */ + function Reveal(element, options) { + _classCallCheck(this, Reveal); + + this.$element = element; + this.options = $.extend({}, Reveal.defaults, this.$element.data(), options); + this._init(); + + Foundation.registerPlugin(this, 'Reveal'); + Foundation.Keyboard.register('Reveal', { + 'ENTER': 'open', + 'SPACE': 'open', + 'ESCAPE': 'close' + }); + } + + /** + * Initializes the modal by adding the overlay and close buttons, (if selected). + * @private + */ + + + _createClass(Reveal, [{ + key: '_init', + value: function _init() { + this.id = this.$element.attr('id'); + this.isActive = false; + this.cached = { mq: Foundation.MediaQuery.current }; + this.isMobile = mobileSniff(); + + this.$anchor = $('[data-open="' + this.id + '"]').length ? $('[data-open="' + this.id + '"]') : $('[data-toggle="' + this.id + '"]'); + this.$anchor.attr({ + 'aria-controls': this.id, + 'aria-haspopup': true, + 'tabindex': 0 + }); + + if (this.options.fullScreen || this.$element.hasClass('full')) { + this.options.fullScreen = true; + this.options.overlay = false; + } + if (this.options.overlay && !this.$overlay) { + this.$overlay = this._makeOverlay(this.id); + } + + this.$element.attr({ + 'role': 'dialog', + 'aria-hidden': true, + 'data-yeti-box': this.id, + 'data-resize': this.id + }); + + if (this.$overlay) { + this.$element.detach().appendTo(this.$overlay); + } else { + this.$element.detach().appendTo($(this.options.appendTo)); + this.$element.addClass('without-overlay'); + } + this._events(); + if (this.options.deepLink && window.location.hash === '#' + this.id) { + $(window).one('load.zf.reveal', this.open.bind(this)); + } + } + + /** + * Creates an overlay div to display behind the modal. + * @private + */ + + }, { + key: '_makeOverlay', + value: function _makeOverlay() { + return $('
    ').addClass('reveal-overlay').appendTo(this.options.appendTo); + } + + /** + * Updates position of modal + * TODO: Figure out if we actually need to cache these values or if it doesn't matter + * @private + */ + + }, { + key: '_updatePosition', + value: function _updatePosition() { + var width = this.$element.outerWidth(); + var outerWidth = $(window).width(); + var height = this.$element.outerHeight(); + var outerHeight = $(window).height(); + var left, top; + if (this.options.hOffset === 'auto') { + left = parseInt((outerWidth - width) / 2, 10); + } else { + left = parseInt(this.options.hOffset, 10); + } + if (this.options.vOffset === 'auto') { + if (height > outerHeight) { + top = parseInt(Math.min(100, outerHeight / 10), 10); + } else { + top = parseInt((outerHeight - height) / 4, 10); + } + } else { + top = parseInt(this.options.vOffset, 10); + } + this.$element.css({ top: top + 'px' }); + // only worry about left if we don't have an overlay or we havea horizontal offset, + // otherwise we're perfectly in the middle + if (!this.$overlay || this.options.hOffset !== 'auto') { + this.$element.css({ left: left + 'px' }); + this.$element.css({ margin: '0px' }); + } + } + + /** + * Adds event handlers for the modal. + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this2 = this; + + var _this = this; + + this.$element.on({ + 'open.zf.trigger': this.open.bind(this), + 'close.zf.trigger': function (event, $element) { + if (event.target === _this.$element[0] || $(event.target).parents('[data-closable]')[0] === $element) { + // only close reveal when it's explicitly called + return _this2.close.apply(_this2); + } + }, + 'toggle.zf.trigger': this.toggle.bind(this), + 'resizeme.zf.trigger': function () { + _this._updatePosition(); + } + }); + + if (this.$anchor.length) { + this.$anchor.on('keydown.zf.reveal', function (e) { + if (e.which === 13 || e.which === 32) { + e.stopPropagation(); + e.preventDefault(); + _this.open(); + } + }); + } + + if (this.options.closeOnClick && this.options.overlay) { + this.$overlay.off('.zf.reveal').on('click.zf.reveal', function (e) { + if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target) || !$.contains(document, e.target)) { + return; + } + _this.close(); + }); + } + if (this.options.deepLink) { + $(window).on('popstate.zf.reveal:' + this.id, this._handleState.bind(this)); + } + } + + /** + * Handles modal methods on back/forward button clicks or any other event that triggers popstate. + * @private + */ + + }, { + key: '_handleState', + value: function _handleState(e) { + if (window.location.hash === '#' + this.id && !this.isActive) { + this.open(); + } else { + this.close(); + } + } + + /** + * Opens the modal controlled by `this.$anchor`, and closes all others by default. + * @function + * @fires Reveal#closeme + * @fires Reveal#open + */ + + }, { + key: 'open', + value: function open() { + var _this3 = this; + + if (this.options.deepLink) { + var hash = '#' + this.id; + + if (window.history.pushState) { + window.history.pushState(null, null, hash); + } else { + window.location.hash = hash; + } + } + + this.isActive = true; + + // Make elements invisible, but remove display: none so we can get size and positioning + this.$element.css({ 'visibility': 'hidden' }).show().scrollTop(0); + if (this.options.overlay) { + this.$overlay.css({ 'visibility': 'hidden' }).show(); + } + + this._updatePosition(); + + this.$element.hide().css({ 'visibility': '' }); + + if (this.$overlay) { + this.$overlay.css({ 'visibility': '' }).hide(); + if (this.$element.hasClass('fast')) { + this.$overlay.addClass('fast'); + } else if (this.$element.hasClass('slow')) { + this.$overlay.addClass('slow'); + } + } + + if (!this.options.multipleOpened) { + /** + * Fires immediately before the modal opens. + * Closes any other modals that are currently open + * @event Reveal#closeme + */ + this.$element.trigger('closeme.zf.reveal', this.id); + } + + var _this = this; + + function addRevealOpenClasses() { + if (_this.isMobile) { + if (!_this.originalScrollPos) { + _this.originalScrollPos = window.pageYOffset; + } + $('html, body').addClass('is-reveal-open'); + } else { + $('body').addClass('is-reveal-open'); + } + } + // Motion UI method of reveal + if (this.options.animationIn) { + (function () { + var afterAnimation = function () { + _this.$element.attr({ + 'aria-hidden': false, + 'tabindex': -1 + }).focus(); + addRevealOpenClasses(); + Foundation.Keyboard.trapFocus(_this.$element); + }; + + if (_this3.options.overlay) { + Foundation.Motion.animateIn(_this3.$overlay, 'fade-in'); + } + Foundation.Motion.animateIn(_this3.$element, _this3.options.animationIn, function () { + if (_this3.$element) { + // protect against object having been removed + _this3.focusableElements = Foundation.Keyboard.findFocusable(_this3.$element); + afterAnimation(); + } + }); + })(); + } + // jQuery method of reveal + else { + if (this.options.overlay) { + this.$overlay.show(0); + } + this.$element.show(this.options.showDelay); + } + + // handle accessibility + this.$element.attr({ + 'aria-hidden': false, + 'tabindex': -1 + }).focus(); + Foundation.Keyboard.trapFocus(this.$element); + + /** + * Fires when the modal has successfully opened. + * @event Reveal#open + */ + this.$element.trigger('open.zf.reveal'); + + addRevealOpenClasses(); + + setTimeout(function () { + _this3._extraHandlers(); + }, 0); + } + + /** + * Adds extra event handlers for the body and window if necessary. + * @private + */ + + }, { + key: '_extraHandlers', + value: function _extraHandlers() { + var _this = this; + if (!this.$element) { + return; + } // If we're in the middle of cleanup, don't freak out + this.focusableElements = Foundation.Keyboard.findFocusable(this.$element); + + if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) { + $('body').on('click.zf.reveal', function (e) { + if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target) || !$.contains(document, e.target)) { + return; + } + _this.close(); + }); + } + + if (this.options.closeOnEsc) { + $(window).on('keydown.zf.reveal', function (e) { + Foundation.Keyboard.handleKey(e, 'Reveal', { + close: function () { + if (_this.options.closeOnEsc) { + _this.close(); + _this.$anchor.focus(); + } + } + }); + }); + } + + // lock focus within modal while tabbing + this.$element.on('keydown.zf.reveal', function (e) { + var $target = $(this); + // handle keyboard event with keyboard util + Foundation.Keyboard.handleKey(e, 'Reveal', { + open: function () { + if (_this.$element.find(':focus').is(_this.$element.find('[data-close]'))) { + setTimeout(function () { + // set focus back to anchor if close button has been activated + _this.$anchor.focus(); + }, 1); + } else if ($target.is(_this.focusableElements)) { + // dont't trigger if acual element has focus (i.e. inputs, links, ...) + _this.open(); + } + }, + close: function () { + if (_this.options.closeOnEsc) { + _this.close(); + _this.$anchor.focus(); + } + }, + handled: function (preventDefault) { + if (preventDefault) { + e.preventDefault(); + } + } + }); + }); + } + + /** + * Closes the modal. + * @function + * @fires Reveal#closed + */ + + }, { + key: 'close', + value: function close() { + if (!this.isActive || !this.$element.is(':visible')) { + return false; + } + var _this = this; + + // Motion UI method of hiding + if (this.options.animationOut) { + if (this.options.overlay) { + Foundation.Motion.animateOut(this.$overlay, 'fade-out', finishUp); + } else { + finishUp(); + } + + Foundation.Motion.animateOut(this.$element, this.options.animationOut); + } + // jQuery method of hiding + else { + if (this.options.overlay) { + this.$overlay.hide(0, finishUp); + } else { + finishUp(); + } + + this.$element.hide(this.options.hideDelay); + } + + // Conditionals to remove extra event listeners added on open + if (this.options.closeOnEsc) { + $(window).off('keydown.zf.reveal'); + } + + if (!this.options.overlay && this.options.closeOnClick) { + $('body').off('click.zf.reveal'); + } + + this.$element.off('keydown.zf.reveal'); + + function finishUp() { + if (_this.isMobile) { + $('html, body').removeClass('is-reveal-open'); + if (_this.originalScrollPos) { + $('body').scrollTop(_this.originalScrollPos); + _this.originalScrollPos = null; + } + } else { + $('body').removeClass('is-reveal-open'); + } + + Foundation.Keyboard.releaseFocus(_this.$element); + + _this.$element.attr('aria-hidden', true); + + /** + * Fires when the modal is done closing. + * @event Reveal#closed + */ + _this.$element.trigger('closed.zf.reveal'); + } + + /** + * Resets the modal content + * This prevents a running video to keep going in the background + */ + if (this.options.resetOnClose) { + this.$element.html(this.$element.html()); + } + + this.isActive = false; + if (_this.options.deepLink) { + if (window.history.replaceState) { + window.history.replaceState('', document.title, window.location.href.replace('#' + this.id, '')); + } else { + window.location.hash = ''; + } + } + } + + /** + * Toggles the open/closed state of a modal. + * @function + */ + + }, { + key: 'toggle', + value: function toggle() { + if (this.isActive) { + this.close(); + } else { + this.open(); + } + } + }, { + key: 'destroy', + + + /** + * Destroys an instance of a modal. + * @function + */ + value: function destroy() { + if (this.options.overlay) { + this.$element.appendTo($(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin() + this.$overlay.hide().off().remove(); + } + this.$element.hide().off(); + this.$anchor.off('.zf'); + $(window).off('.zf.reveal:' + this.id); + + Foundation.unregisterPlugin(this); + } + }]); + + return Reveal; + }(); + + Reveal.defaults = { + /** + * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide. + * @option + * @example 'slide-in-left' + */ + animationIn: '', + /** + * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide. + * @option + * @example 'slide-out-right' + */ + animationOut: '', + /** + * Time, in ms, to delay the opening of a modal after a click if no animation used. + * @option + * @example 10 + */ + showDelay: 0, + /** + * Time, in ms, to delay the closing of a modal after a click if no animation used. + * @option + * @example 10 + */ + hideDelay: 0, + /** + * Allows a click on the body/overlay to close the modal. + * @option + * @example true + */ + closeOnClick: true, + /** + * Allows the modal to close if the user presses the `ESCAPE` key. + * @option + * @example true + */ + closeOnEsc: true, + /** + * If true, allows multiple modals to be displayed at once. + * @option + * @example false + */ + multipleOpened: false, + /** + * Distance, in pixels, the modal should push down from the top of the screen. + * @option + * @example auto + */ + vOffset: 'auto', + /** + * Distance, in pixels, the modal should push in from the side of the screen. + * @option + * @example auto + */ + hOffset: 'auto', + /** + * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well. + * @option + * @example false + */ + fullScreen: false, + /** + * Percentage of screen height the modal should push up from the bottom of the view. + * @option + * @example 10 + */ + btmOffsetPct: 10, + /** + * Allows the modal to generate an overlay div, which will cover the view when modal opens. + * @option + * @example true + */ + overlay: true, + /** + * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background. + * @option + * @example false + */ + resetOnClose: false, + /** + * Allows the modal to alter the url on open/close, and allows the use of the `back` button to close modals. ALSO, allows a modal to auto-maniacally open on page load IF the hash === the modal's user-set id. + * @option + * @example false + */ + deepLink: false, + /** + * Allows the modal to append to custom div. + * @option + * @example false + */ + appendTo: "body" + + }; + + // Window exports + Foundation.plugin(Reveal, 'Reveal'); + + function iPhoneSniff() { + return (/iP(ad|hone|od).*OS/.test(window.navigator.userAgent) + ); + } + + function androidSniff() { + return (/Android/.test(window.navigator.userAgent) + ); + } + + function mobileSniff() { + return iPhoneSniff() || androidSniff(); + } +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Tooltip module. + * @module foundation.tooltip + * @requires foundation.util.box + * @requires foundation.util.mediaQuery + * @requires foundation.util.triggers + */ + + var Tooltip = function () { + /** + * Creates a new instance of a Tooltip. + * @class + * @fires Tooltip#init + * @param {jQuery} element - jQuery object to attach a tooltip to. + * @param {Object} options - object to extend the default configuration. + */ + function Tooltip(element, options) { + _classCallCheck(this, Tooltip); + + this.$element = element; + this.options = $.extend({}, Tooltip.defaults, this.$element.data(), options); + + this.isActive = false; + this.isClick = false; + this._init(); + + Foundation.registerPlugin(this, 'Tooltip'); + } + + /** + * Initializes the tooltip by setting the creating the tip element, adding it's text, setting private variables and setting attributes on the anchor. + * @private + */ + + + _createClass(Tooltip, [{ + key: '_init', + value: function _init() { + var elemId = this.$element.attr('aria-describedby') || Foundation.GetYoDigits(6, 'tooltip'); + + this.options.positionClass = this.options.positionClass || this._getPositionClass(this.$element); + this.options.tipText = this.options.tipText || this.$element.attr('title'); + this.template = this.options.template ? $(this.options.template) : this._buildTemplate(elemId); + + if (this.options.allowHtml) { + this.template.appendTo(document.body).html(this.options.tipText).hide(); + } else { + this.template.appendTo(document.body).text(this.options.tipText).hide(); + } + + this.$element.attr({ + 'title': '', + 'aria-describedby': elemId, + 'data-yeti-box': elemId, + 'data-toggle': elemId, + 'data-resize': elemId + }).addClass(this.options.triggerClass); + + //helper variables to track movement on collisions + this.usedPositions = []; + this.counter = 4; + this.classChanged = false; + + this._events(); + } + + /** + * Grabs the current positioning class, if present, and returns the value or an empty string. + * @private + */ + + }, { + key: '_getPositionClass', + value: function _getPositionClass(element) { + if (!element) { + return ''; + } + // var position = element.attr('class').match(/top|left|right/g); + var position = element[0].className.match(/\b(top|left|right)\b/g); + position = position ? position[0] : ''; + return position; + } + }, { + key: '_buildTemplate', + + /** + * builds the tooltip element, adds attributes, and returns the template. + * @private + */ + value: function _buildTemplate(id) { + var templateClasses = (this.options.tooltipClass + ' ' + this.options.positionClass + ' ' + this.options.templateClasses).trim(); + var $template = $('
    ').addClass(templateClasses).attr({ + 'role': 'tooltip', + 'aria-hidden': true, + 'data-is-active': false, + 'data-is-focus': false, + 'id': id + }); + return $template; + } + + /** + * Function that gets called if a collision event is detected. + * @param {String} position - positioning class to try + * @private + */ + + }, { + key: '_reposition', + value: function _reposition(position) { + this.usedPositions.push(position ? position : 'bottom'); + + //default, try switching to opposite side + if (!position && this.usedPositions.indexOf('top') < 0) { + this.template.addClass('top'); + } else if (position === 'top' && this.usedPositions.indexOf('bottom') < 0) { + this.template.removeClass(position); + } else if (position === 'left' && this.usedPositions.indexOf('right') < 0) { + this.template.removeClass(position).addClass('right'); + } else if (position === 'right' && this.usedPositions.indexOf('left') < 0) { + this.template.removeClass(position).addClass('left'); + } + + //if default change didn't work, try bottom or left first + else if (!position && this.usedPositions.indexOf('top') > -1 && this.usedPositions.indexOf('left') < 0) { + this.template.addClass('left'); + } else if (position === 'top' && this.usedPositions.indexOf('bottom') > -1 && this.usedPositions.indexOf('left') < 0) { + this.template.removeClass(position).addClass('left'); + } else if (position === 'left' && this.usedPositions.indexOf('right') > -1 && this.usedPositions.indexOf('bottom') < 0) { + this.template.removeClass(position); + } else if (position === 'right' && this.usedPositions.indexOf('left') > -1 && this.usedPositions.indexOf('bottom') < 0) { + this.template.removeClass(position); + } + //if nothing cleared, set to bottom + else { + this.template.removeClass(position); + } + this.classChanged = true; + this.counter--; + } + + /** + * sets the position class of an element and recursively calls itself until there are no more possible positions to attempt, or the tooltip element is no longer colliding. + * if the tooltip is larger than the screen width, default to full width - any user selected margin + * @private + */ + + }, { + key: '_setPosition', + value: function _setPosition() { + var position = this._getPositionClass(this.template), + $tipDims = Foundation.Box.GetDimensions(this.template), + $anchorDims = Foundation.Box.GetDimensions(this.$element), + direction = position === 'left' ? 'left' : position === 'right' ? 'left' : 'top', + param = direction === 'top' ? 'height' : 'width', + offset = param === 'height' ? this.options.vOffset : this.options.hOffset, + _this = this; + + if ($tipDims.width >= $tipDims.windowDims.width || !this.counter && !Foundation.Box.ImNotTouchingYou(this.template)) { + this.template.offset(Foundation.Box.GetOffsets(this.template, this.$element, 'center bottom', this.options.vOffset, this.options.hOffset, true)).css({ + // this.$element.offset(Foundation.GetOffsets(this.template, this.$element, 'center bottom', this.options.vOffset, this.options.hOffset, true)).css({ + 'width': $anchorDims.windowDims.width - this.options.hOffset * 2, + 'height': 'auto' + }); + return false; + } + + this.template.offset(Foundation.Box.GetOffsets(this.template, this.$element, 'center ' + (position || 'bottom'), this.options.vOffset, this.options.hOffset)); + + while (!Foundation.Box.ImNotTouchingYou(this.template) && this.counter) { + this._reposition(position); + this._setPosition(); + } + } + + /** + * reveals the tooltip, and fires an event to close any other open tooltips on the page + * @fires Tooltip#closeme + * @fires Tooltip#show + * @function + */ + + }, { + key: 'show', + value: function show() { + if (this.options.showOn !== 'all' && !Foundation.MediaQuery.is(this.options.showOn)) { + // console.error('The screen is too small to display this tooltip'); + return false; + } + + var _this = this; + this.template.css('visibility', 'hidden').show(); + this._setPosition(); + + /** + * Fires to close all other open tooltips on the page + * @event Closeme#tooltip + */ + this.$element.trigger('closeme.zf.tooltip', this.template.attr('id')); + + this.template.attr({ + 'data-is-active': true, + 'aria-hidden': false + }); + _this.isActive = true; + // console.log(this.template); + this.template.stop().hide().css('visibility', '').fadeIn(this.options.fadeInDuration, function () { + //maybe do stuff? + }); + /** + * Fires when the tooltip is shown + * @event Tooltip#show + */ + this.$element.trigger('show.zf.tooltip'); + } + + /** + * Hides the current tooltip, and resets the positioning class if it was changed due to collision + * @fires Tooltip#hide + * @function + */ + + }, { + key: 'hide', + value: function hide() { + // console.log('hiding', this.$element.data('yeti-box')); + var _this = this; + this.template.stop().attr({ + 'aria-hidden': true, + 'data-is-active': false + }).fadeOut(this.options.fadeOutDuration, function () { + _this.isActive = false; + _this.isClick = false; + if (_this.classChanged) { + _this.template.removeClass(_this._getPositionClass(_this.template)).addClass(_this.options.positionClass); + + _this.usedPositions = []; + _this.counter = 4; + _this.classChanged = false; + } + }); + /** + * fires when the tooltip is hidden + * @event Tooltip#hide + */ + this.$element.trigger('hide.zf.tooltip'); + } + + /** + * adds event listeners for the tooltip and its anchor + * TODO combine some of the listeners like focus and mouseenter, etc. + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this = this; + var $template = this.template; + var isFocus = false; + + if (!this.options.disableHover) { + + this.$element.on('mouseenter.zf.tooltip', function (e) { + if (!_this.isActive) { + _this.timeout = setTimeout(function () { + _this.show(); + }, _this.options.hoverDelay); + } + }).on('mouseleave.zf.tooltip', function (e) { + clearTimeout(_this.timeout); + if (!isFocus || _this.isClick && !_this.options.clickOpen) { + _this.hide(); + } + }); + } + + if (this.options.clickOpen) { + this.$element.on('mousedown.zf.tooltip', function (e) { + e.stopImmediatePropagation(); + if (_this.isClick) { + //_this.hide(); + // _this.isClick = false; + } else { + _this.isClick = true; + if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) { + _this.show(); + } + } + }); + } else { + this.$element.on('mousedown.zf.tooltip', function (e) { + e.stopImmediatePropagation(); + _this.isClick = true; + }); + } + + if (!this.options.disableForTouch) { + this.$element.on('tap.zf.tooltip touchend.zf.tooltip', function (e) { + _this.isActive ? _this.hide() : _this.show(); + }); + } + + this.$element.on({ + // 'toggle.zf.trigger': this.toggle.bind(this), + // 'close.zf.trigger': this.hide.bind(this) + 'close.zf.trigger': this.hide.bind(this) + }); + + this.$element.on('focus.zf.tooltip', function (e) { + isFocus = true; + if (_this.isClick) { + // If we're not showing open on clicks, we need to pretend a click-launched focus isn't + // a real focus, otherwise on hover and come back we get bad behavior + if (!_this.options.clickOpen) { + isFocus = false; + } + return false; + } else { + _this.show(); + } + }).on('focusout.zf.tooltip', function (e) { + isFocus = false; + _this.isClick = false; + _this.hide(); + }).on('resizeme.zf.trigger', function () { + if (_this.isActive) { + _this._setPosition(); + } + }); + } + + /** + * adds a toggle method, in addition to the static show() & hide() functions + * @function + */ + + }, { + key: 'toggle', + value: function toggle() { + if (this.isActive) { + this.hide(); + } else { + this.show(); + } + } + + /** + * Destroys an instance of tooltip, removes template element from the view. + * @function + */ + + }, { + key: 'destroy', + value: function destroy() { + this.$element.attr('title', this.template.text()).off('.zf.trigger .zf.tooltip').removeClass('has-tip top right left').removeAttr('aria-describedby aria-haspopup data-disable-hover data-resize data-toggle data-tooltip data-yeti-box'); + + this.template.remove(); + + Foundation.unregisterPlugin(this); + } + }]); + + return Tooltip; + }(); + + Tooltip.defaults = { + disableForTouch: false, + /** + * Time, in ms, before a tooltip should open on hover. + * @option + * @example 200 + */ + hoverDelay: 200, + /** + * Time, in ms, a tooltip should take to fade into view. + * @option + * @example 150 + */ + fadeInDuration: 150, + /** + * Time, in ms, a tooltip should take to fade out of view. + * @option + * @example 150 + */ + fadeOutDuration: 150, + /** + * Disables hover events from opening the tooltip if set to true + * @option + * @example false + */ + disableHover: false, + /** + * Optional addtional classes to apply to the tooltip template on init. + * @option + * @example 'my-cool-tip-class' + */ + templateClasses: '', + /** + * Non-optional class added to tooltip templates. Foundation default is 'tooltip'. + * @option + * @example 'tooltip' + */ + tooltipClass: 'tooltip', + /** + * Class applied to the tooltip anchor element. + * @option + * @example 'has-tip' + */ + triggerClass: 'has-tip', + /** + * Minimum breakpoint size at which to open the tooltip. + * @option + * @example 'small' + */ + showOn: 'small', + /** + * Custom template to be used to generate markup for tooltip. + * @option + * @example '<div class="tooltip"></div>' + */ + template: '', + /** + * Text displayed in the tooltip template on open. + * @option + * @example 'Some cool space fact here.' + */ + tipText: '', + touchCloseText: 'Tap to close.', + /** + * Allows the tooltip to remain open if triggered with a click or touch event. + * @option + * @example true + */ + clickOpen: true, + /** + * Additional positioning classes, set by the JS + * @option + * @example 'top' + */ + positionClass: '', + /** + * Distance, in pixels, the template should push away from the anchor on the Y axis. + * @option + * @example 10 + */ + vOffset: 10, + /** + * Distance, in pixels, the template should push away from the anchor on the X axis, if aligned to a side. + * @option + * @example 12 + */ + hOffset: 12, + /** + * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips, + * allowing HTML may open yourself up to XSS attacks. + * @option + * @example false + */ + allowHtml: false + }; + + /** + * TODO utilize resize event trigger + */ + + // Window exports + Foundation.plugin(Tooltip, 'Tooltip'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Orbit module. + * @module foundation.orbit + * @requires foundation.util.keyboard + * @requires foundation.util.motion + * @requires foundation.util.timerAndImageLoader + * @requires foundation.util.touch + */ + + var Orbit = function () { + /** + * Creates a new instance of an orbit carousel. + * @class + * @param {jQuery} element - jQuery object to make into an Orbit Carousel. + * @param {Object} options - Overrides to the default plugin settings. + */ + function Orbit(element, options) { + _classCallCheck(this, Orbit); + + this.$element = element; + this.options = $.extend({}, Orbit.defaults, this.$element.data(), options); + + this._init(); + + Foundation.registerPlugin(this, 'Orbit'); + Foundation.Keyboard.register('Orbit', { + 'ltr': { + 'ARROW_RIGHT': 'next', + 'ARROW_LEFT': 'previous' + }, + 'rtl': { + 'ARROW_LEFT': 'next', + 'ARROW_RIGHT': 'previous' + } + }); + } + + /** + * Initializes the plugin by creating jQuery collections, setting attributes, and starting the animation. + * @function + * @private + */ + + + _createClass(Orbit, [{ + key: '_init', + value: function _init() { + // @TODO: consider discussion on PR #9278 about DOM pollution by changeSlide + this._reset(); + + this.$wrapper = this.$element.find('.' + this.options.containerClass); + this.$slides = this.$element.find('.' + this.options.slideClass); + + var $images = this.$element.find('img'), + initActive = this.$slides.filter('.is-active'), + id = this.$element[0].id || Foundation.GetYoDigits(6, 'orbit'); + + this.$element.attr({ + 'data-resize': id, + 'id': id + }); + + if (!initActive.length) { + this.$slides.eq(0).addClass('is-active'); + } + + if (!this.options.useMUI) { + this.$slides.addClass('no-motionui'); + } + + if ($images.length) { + Foundation.onImagesLoaded($images, this._prepareForOrbit.bind(this)); + } else { + this._prepareForOrbit(); //hehe + } + + if (this.options.bullets) { + this._loadBullets(); + } + + this._events(); + + if (this.options.autoPlay && this.$slides.length > 1) { + this.geoSync(); + } + + if (this.options.accessible) { + // allow wrapper to be focusable to enable arrow navigation + this.$wrapper.attr('tabindex', 0); + } + } + + /** + * Creates a jQuery collection of bullets, if they are being used. + * @function + * @private + */ + + }, { + key: '_loadBullets', + value: function _loadBullets() { + this.$bullets = this.$element.find('.' + this.options.boxOfBullets).find('button'); + } + + /** + * Sets a `timer` object on the orbit, and starts the counter for the next slide. + * @function + */ + + }, { + key: 'geoSync', + value: function geoSync() { + var _this = this; + this.timer = new Foundation.Timer(this.$element, { + duration: this.options.timerDelay, + infinite: false + }, function () { + _this.changeSlide(true); + }); + this.timer.start(); + } + + /** + * Sets wrapper and slide heights for the orbit. + * @function + * @private + */ + + }, { + key: '_prepareForOrbit', + value: function _prepareForOrbit() { + var _this = this; + this._setWrapperHeight(); + } + + /** + * Calulates the height of each slide in the collection, and uses the tallest one for the wrapper height. + * @function + * @private + * @param {Function} cb - a callback function to fire when complete. + */ + + }, { + key: '_setWrapperHeight', + value: function _setWrapperHeight(cb) { + //rewrite this to `for` loop + var max = 0, + temp, + counter = 0, + _this = this; + + this.$slides.each(function () { + temp = this.getBoundingClientRect().height; + $(this).attr('data-slide', counter); + + if (_this.$slides.filter('.is-active')[0] !== _this.$slides.eq(counter)[0]) { + //if not the active slide, set css position and display property + $(this).css({ 'position': 'relative', 'display': 'none' }); + } + max = temp > max ? temp : max; + counter++; + }); + + if (counter === this.$slides.length) { + this.$wrapper.css({ 'height': max }); //only change the wrapper height property once. + if (cb) { + cb(max); + } //fire callback with max height dimension. + } + } + + /** + * Sets the max-height of each slide. + * @function + * @private + */ + + }, { + key: '_setSlideHeight', + value: function _setSlideHeight(height) { + this.$slides.each(function () { + $(this).css('max-height', height); + }); + } + + /** + * Adds event listeners to basically everything within the element. + * @function + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this = this; + + //*************************************** + //**Now using custom event - thanks to:** + //** Yohai Ararat of Toronto ** + //*************************************** + // + this.$element.off('.resizeme.zf.trigger').on({ + 'resizeme.zf.trigger': this._prepareForOrbit.bind(this) + }); + if (this.$slides.length > 1) { + + if (this.options.swipe) { + this.$slides.off('swipeleft.zf.orbit swiperight.zf.orbit').on('swipeleft.zf.orbit', function (e) { + e.preventDefault(); + _this.changeSlide(true); + }).on('swiperight.zf.orbit', function (e) { + e.preventDefault(); + _this.changeSlide(false); + }); + } + //*************************************** + + if (this.options.autoPlay) { + this.$slides.on('click.zf.orbit', function () { + _this.$element.data('clickedOn', _this.$element.data('clickedOn') ? false : true); + _this.timer[_this.$element.data('clickedOn') ? 'pause' : 'start'](); + }); + + if (this.options.pauseOnHover) { + this.$element.on('mouseenter.zf.orbit', function () { + _this.timer.pause(); + }).on('mouseleave.zf.orbit', function () { + if (!_this.$element.data('clickedOn')) { + _this.timer.start(); + } + }); + } + } + + if (this.options.navButtons) { + var $controls = this.$element.find('.' + this.options.nextClass + ', .' + this.options.prevClass); + $controls.attr('tabindex', 0) + //also need to handle enter/return and spacebar key presses + .on('click.zf.orbit touchend.zf.orbit', function (e) { + e.preventDefault(); + _this.changeSlide($(this).hasClass(_this.options.nextClass)); + }); + } + + if (this.options.bullets) { + this.$bullets.on('click.zf.orbit touchend.zf.orbit', function () { + if (/is-active/g.test(this.className)) { + return false; + } //if this is active, kick out of function. + var idx = $(this).data('slide'), + ltr = idx > _this.$slides.filter('.is-active').data('slide'), + $slide = _this.$slides.eq(idx); + + _this.changeSlide(ltr, $slide, idx); + }); + } + + if (this.options.accessible) { + this.$wrapper.add(this.$bullets).on('keydown.zf.orbit', function (e) { + // handle keyboard event with keyboard util + Foundation.Keyboard.handleKey(e, 'Orbit', { + next: function () { + _this.changeSlide(true); + }, + previous: function () { + _this.changeSlide(false); + }, + handled: function () { + // if bullet is focused, make sure focus moves + if ($(e.target).is(_this.$bullets)) { + _this.$bullets.filter('.is-active').focus(); + } + } + }); + }); + } + } + } + + /** + * Resets Orbit so it can be reinitialized + */ + + }, { + key: '_reset', + value: function _reset() { + // Don't do anything if there are no slides (first run) + if (typeof this.$slides == 'undefined') { + return; + } + + if (this.$slides.length > 1) { + // Remove old events + this.$element.off('.zf.orbit').find('*').off('.zf.orbit'); + + // Restart timer if autoPlay is enabled + if (this.options.autoPlay) { + this.timer.restart(); + } + + // Reset all sliddes + this.$slides.each(function (el) { + $(el).removeClass('is-active is-active is-in').removeAttr('aria-live').hide(); + }); + + // Show the first slide + this.$slides.first().addClass('is-active').show(); + + // Triggers when the slide has finished animating + this.$element.trigger('slidechange.zf.orbit', [this.$slides.first()]); + + // Select first bullet if bullets are present + if (this.options.bullets) { + this._updateBullets(0); + } + } + } + + /** + * Changes the current slide to a new one. + * @function + * @param {Boolean} isLTR - flag if the slide should move left to right. + * @param {jQuery} chosenSlide - the jQuery element of the slide to show next, if one is selected. + * @param {Number} idx - the index of the new slide in its collection, if one chosen. + * @fires Orbit#slidechange + */ + + }, { + key: 'changeSlide', + value: function changeSlide(isLTR, chosenSlide, idx) { + if (!this.$slides) { + return; + } // Don't freak out if we're in the middle of cleanup + var $curSlide = this.$slides.filter('.is-active').eq(0); + + if (/mui/g.test($curSlide[0].className)) { + return false; + } //if the slide is currently animating, kick out of the function + + var $firstSlide = this.$slides.first(), + $lastSlide = this.$slides.last(), + dirIn = isLTR ? 'Right' : 'Left', + dirOut = isLTR ? 'Left' : 'Right', + _this = this, + $newSlide; + + if (!chosenSlide) { + //most of the time, this will be auto played or clicked from the navButtons. + $newSlide = isLTR ? //if wrapping enabled, check to see if there is a `next` or `prev` sibling, if not, select the first or last slide to fill in. if wrapping not enabled, attempt to select `next` or `prev`, if there's nothing there, the function will kick out on next step. CRAZY NESTED TERNARIES!!!!! + this.options.infiniteWrap ? $curSlide.next('.' + this.options.slideClass).length ? $curSlide.next('.' + this.options.slideClass) : $firstSlide : $curSlide.next('.' + this.options.slideClass) : //pick next slide if moving left to right + this.options.infiniteWrap ? $curSlide.prev('.' + this.options.slideClass).length ? $curSlide.prev('.' + this.options.slideClass) : $lastSlide : $curSlide.prev('.' + this.options.slideClass); //pick prev slide if moving right to left + } else { + $newSlide = chosenSlide; + } + + if ($newSlide.length) { + /** + * Triggers before the next slide starts animating in and only if a next slide has been found. + * @event Orbit#beforeslidechange + */ + this.$element.trigger('beforeslidechange.zf.orbit', [$curSlide, $newSlide]); + + if (this.options.bullets) { + idx = idx || this.$slides.index($newSlide); //grab index to update bullets + this._updateBullets(idx); + } + + if (this.options.useMUI && !this.$element.is(':hidden')) { + Foundation.Motion.animateIn($newSlide.addClass('is-active').css({ 'position': 'absolute', 'top': 0 }), this.options['animInFrom' + dirIn], function () { + $newSlide.css({ 'position': 'relative', 'display': 'block' }).attr('aria-live', 'polite'); + }); + + Foundation.Motion.animateOut($curSlide.removeClass('is-active'), this.options['animOutTo' + dirOut], function () { + $curSlide.removeAttr('aria-live'); + if (_this.options.autoPlay && !_this.timer.isPaused) { + _this.timer.restart(); + } + //do stuff? + }); + } else { + $curSlide.removeClass('is-active is-in').removeAttr('aria-live').hide(); + $newSlide.addClass('is-active is-in').attr('aria-live', 'polite').show(); + if (this.options.autoPlay && !this.timer.isPaused) { + this.timer.restart(); + } + } + /** + * Triggers when the slide has finished animating in. + * @event Orbit#slidechange + */ + this.$element.trigger('slidechange.zf.orbit', [$newSlide]); + } + } + + /** + * Updates the active state of the bullets, if displayed. + * @function + * @private + * @param {Number} idx - the index of the current slide. + */ + + }, { + key: '_updateBullets', + value: function _updateBullets(idx) { + var $oldBullet = this.$element.find('.' + this.options.boxOfBullets).find('.is-active').removeClass('is-active').blur(), + span = $oldBullet.find('span:last').detach(), + $newBullet = this.$bullets.eq(idx).addClass('is-active').append(span); + } + + /** + * Destroys the carousel and hides the element. + * @function + */ + + }, { + key: 'destroy', + value: function destroy() { + this.$element.off('.zf.orbit').find('*').off('.zf.orbit').end().hide(); + Foundation.unregisterPlugin(this); + } + }]); + + return Orbit; + }(); + + Orbit.defaults = { + /** + * Tells the JS to look for and loadBullets. + * @option + * @example true + */ + bullets: true, + /** + * Tells the JS to apply event listeners to nav buttons + * @option + * @example true + */ + navButtons: true, + /** + * motion-ui animation class to apply + * @option + * @example 'slide-in-right' + */ + animInFromRight: 'slide-in-right', + /** + * motion-ui animation class to apply + * @option + * @example 'slide-out-right' + */ + animOutToRight: 'slide-out-right', + /** + * motion-ui animation class to apply + * @option + * @example 'slide-in-left' + * + */ + animInFromLeft: 'slide-in-left', + /** + * motion-ui animation class to apply + * @option + * @example 'slide-out-left' + */ + animOutToLeft: 'slide-out-left', + /** + * Allows Orbit to automatically animate on page load. + * @option + * @example true + */ + autoPlay: true, + /** + * Amount of time, in ms, between slide transitions + * @option + * @example 5000 + */ + timerDelay: 5000, + /** + * Allows Orbit to infinitely loop through the slides + * @option + * @example true + */ + infiniteWrap: true, + /** + * Allows the Orbit slides to bind to swipe events for mobile, requires an additional util library + * @option + * @example true + */ + swipe: true, + /** + * Allows the timing function to pause animation on hover. + * @option + * @example true + */ + pauseOnHover: true, + /** + * Allows Orbit to bind keyboard events to the slider, to animate frames with arrow keys + * @option + * @example true + */ + accessible: true, + /** + * Class applied to the container of Orbit + * @option + * @example 'orbit-container' + */ + containerClass: 'orbit-container', + /** + * Class applied to individual slides. + * @option + * @example 'orbit-slide' + */ + slideClass: 'orbit-slide', + /** + * Class applied to the bullet container. You're welcome. + * @option + * @example 'orbit-bullets' + */ + boxOfBullets: 'orbit-bullets', + /** + * Class applied to the `next` navigation button. + * @option + * @example 'orbit-next' + */ + nextClass: 'orbit-next', + /** + * Class applied to the `previous` navigation button. + * @option + * @example 'orbit-previous' + */ + prevClass: 'orbit-previous', + /** + * Boolean to flag the js to use motion ui classes or not. Default to true for backwards compatability. + * @option + * @example true + */ + useMUI: true + }; + + // Window exports + Foundation.plugin(Orbit, 'Orbit'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Interchange module. + * @module foundation.interchange + * @requires foundation.util.mediaQuery + * @requires foundation.util.timerAndImageLoader + */ + + var Interchange = function () { + /** + * Creates a new instance of Interchange. + * @class + * @fires Interchange#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + function Interchange(element, options) { + _classCallCheck(this, Interchange); + + this.$element = element; + this.options = $.extend({}, Interchange.defaults, options); + this.rules = []; + this.currentPath = ''; + + this._init(); + this._events(); + + Foundation.registerPlugin(this, 'Interchange'); + } + + /** + * Initializes the Interchange plugin and calls functions to get interchange functioning on load. + * @function + * @private + */ + + + _createClass(Interchange, [{ + key: '_init', + value: function _init() { + this._addBreakpoints(); + this._generateRules(); + this._reflow(); + } + + /** + * Initializes events for Interchange. + * @function + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this2 = this; + + $(window).on('resize.zf.interchange', Foundation.util.throttle(function () { + _this2._reflow(); + }, 50)); + } + + /** + * Calls necessary functions to update Interchange upon DOM change + * @function + * @private + */ + + }, { + key: '_reflow', + value: function _reflow() { + var match; + + // Iterate through each rule, but only save the last match + for (var i in this.rules) { + if (this.rules.hasOwnProperty(i)) { + var rule = this.rules[i]; + if (window.matchMedia(rule.query).matches) { + match = rule; + } + } + } + + if (match) { + this.replace(match.path); + } + } + + /** + * Gets the Foundation breakpoints and adds them to the Interchange.SPECIAL_QUERIES object. + * @function + * @private + */ + + }, { + key: '_addBreakpoints', + value: function _addBreakpoints() { + for (var i in Foundation.MediaQuery.queries) { + if (Foundation.MediaQuery.queries.hasOwnProperty(i)) { + var query = Foundation.MediaQuery.queries[i]; + Interchange.SPECIAL_QUERIES[query.name] = query.value; + } + } + } + + /** + * Checks the Interchange element for the provided media query + content pairings + * @function + * @private + * @param {Object} element - jQuery object that is an Interchange instance + * @returns {Array} scenarios - Array of objects that have 'mq' and 'path' keys with corresponding keys + */ + + }, { + key: '_generateRules', + value: function _generateRules(element) { + var rulesList = []; + var rules; + + if (this.options.rules) { + rules = this.options.rules; + } else { + rules = this.$element.data('interchange').match(/\[.*?\]/g); + } + + for (var i in rules) { + if (rules.hasOwnProperty(i)) { + var rule = rules[i].slice(1, -1).split(', '); + var path = rule.slice(0, -1).join(''); + var query = rule[rule.length - 1]; + + if (Interchange.SPECIAL_QUERIES[query]) { + query = Interchange.SPECIAL_QUERIES[query]; + } + + rulesList.push({ + path: path, + query: query + }); + } + } + + this.rules = rulesList; + } + + /** + * Update the `src` property of an image, or change the HTML of a container, to the specified path. + * @function + * @param {String} path - Path to the image or HTML partial. + * @fires Interchange#replaced + */ + + }, { + key: 'replace', + value: function replace(path) { + if (this.currentPath === path) return; + + var _this = this, + trigger = 'replaced.zf.interchange'; + + // Replacing images + if (this.$element[0].nodeName === 'IMG') { + this.$element.attr('src', path).on('load', function () { + _this.currentPath = path; + }).trigger(trigger); + } + // Replacing background images + else if (path.match(/\.(gif|jpg|jpeg|png|svg|tiff)([?#].*)?/i)) { + this.$element.css({ 'background-image': 'url(' + path + ')' }).trigger(trigger); + } + // Replacing HTML + else { + $.get(path, function (response) { + _this.$element.html(response).trigger(trigger); + $(response).foundation(); + _this.currentPath = path; + }); + } + + /** + * Fires when content in an Interchange element is done being loaded. + * @event Interchange#replaced + */ + // this.$element.trigger('replaced.zf.interchange'); + } + + /** + * Destroys an instance of interchange. + * @function + */ + + }, { + key: 'destroy', + value: function destroy() { + //TODO this. + } + }]); + + return Interchange; + }(); + + /** + * Default settings for plugin + */ + + + Interchange.defaults = { + /** + * Rules to be applied to Interchange elements. Set with the `data-interchange` array notation. + * @option + */ + rules: null + }; + + Interchange.SPECIAL_QUERIES = { + 'landscape': 'screen and (orientation: landscape)', + 'portrait': 'screen and (orientation: portrait)', + 'retina': 'only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)' + }; + + // Window exports + Foundation.plugin(Interchange, 'Interchange'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * ResponsiveToggle module. + * @module foundation.responsiveToggle + * @requires foundation.util.mediaQuery + */ + + var ResponsiveToggle = function () { + /** + * Creates a new instance of Tab Bar. + * @class + * @fires ResponsiveToggle#init + * @param {jQuery} element - jQuery object to attach tab bar functionality to. + * @param {Object} options - Overrides to the default plugin settings. + */ + function ResponsiveToggle(element, options) { + _classCallCheck(this, ResponsiveToggle); + + this.$element = $(element); + this.options = $.extend({}, ResponsiveToggle.defaults, this.$element.data(), options); + + this._init(); + this._events(); + + Foundation.registerPlugin(this, 'ResponsiveToggle'); + } + + /** + * Initializes the tab bar by finding the target element, toggling element, and running update(). + * @function + * @private + */ + + + _createClass(ResponsiveToggle, [{ + key: '_init', + value: function _init() { + var targetID = this.$element.data('responsive-toggle'); + if (!targetID) { + console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.'); + } + + this.$targetMenu = $('#' + targetID); + this.$toggler = this.$element.find('[data-toggle]'); + this.options = $.extend({}, this.options, this.$targetMenu.data()); + + // If they were set, parse the animation classes + if (this.options.animate) { + var input = this.options.animate.split(' '); + + this.animationIn = input[0]; + this.animationOut = input[1] || null; + } + + this._update(); + } + + /** + * Adds necessary event handlers for the tab bar to work. + * @function + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this = this; + + this._updateMqHandler = this._update.bind(this); + + $(window).on('changed.zf.mediaquery', this._updateMqHandler); + + this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this)); + } + + /** + * Checks the current media query to determine if the tab bar should be visible or hidden. + * @function + * @private + */ + + }, { + key: '_update', + value: function _update() { + // Mobile + if (!Foundation.MediaQuery.atLeast(this.options.hideFor)) { + this.$element.show(); + this.$targetMenu.hide(); + } + + // Desktop + else { + this.$element.hide(); + this.$targetMenu.show(); + } + } + + /** + * Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it. + * @function + * @fires ResponsiveToggle#toggled + */ + + }, { + key: 'toggleMenu', + value: function toggleMenu() { + var _this2 = this; + + if (!Foundation.MediaQuery.atLeast(this.options.hideFor)) { + if (this.options.animate) { + if (this.$targetMenu.is(':hidden')) { + Foundation.Motion.animateIn(this.$targetMenu, this.animationIn, function () { + /** + * Fires when the element attached to the tab bar toggles. + * @event ResponsiveToggle#toggled + */ + _this2.$element.trigger('toggled.zf.responsiveToggle'); + _this2.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger'); + }); + } else { + Foundation.Motion.animateOut(this.$targetMenu, this.animationOut, function () { + /** + * Fires when the element attached to the tab bar toggles. + * @event ResponsiveToggle#toggled + */ + _this2.$element.trigger('toggled.zf.responsiveToggle'); + }); + } + } else { + this.$targetMenu.toggle(0); + this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger'); + + /** + * Fires when the element attached to the tab bar toggles. + * @event ResponsiveToggle#toggled + */ + this.$element.trigger('toggled.zf.responsiveToggle'); + } + } + } + }, { + key: 'destroy', + value: function destroy() { + this.$element.off('.zf.responsiveToggle'); + this.$toggler.off('.zf.responsiveToggle'); + + $(window).off('changed.zf.mediaquery', this._updateMqHandler); + + Foundation.unregisterPlugin(this); + } + }]); + + return ResponsiveToggle; + }(); + + ResponsiveToggle.defaults = { + /** + * The breakpoint after which the menu is always shown, and the tab bar is hidden. + * @option + * @example 'medium' + */ + hideFor: 'medium', + + /** + * To decide if the toggle should be animated or not. + * @option + * @example false + */ + animate: false + }; + + // Window exports + Foundation.plugin(ResponsiveToggle, 'ResponsiveToggle'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Toggler module. + * @module foundation.toggler + * @requires foundation.util.motion + * @requires foundation.util.triggers + */ + + var Toggler = function () { + /** + * Creates a new instance of Toggler. + * @class + * @fires Toggler#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + function Toggler(element, options) { + _classCallCheck(this, Toggler); + + this.$element = element; + this.options = $.extend({}, Toggler.defaults, element.data(), options); + this.className = ''; + + this._init(); + this._events(); + + Foundation.registerPlugin(this, 'Toggler'); + } + + /** + * Initializes the Toggler plugin by parsing the toggle class from data-toggler, or animation classes from data-animate. + * @function + * @private + */ + + + _createClass(Toggler, [{ + key: '_init', + value: function _init() { + var input; + // Parse animation classes if they were set + if (this.options.animate) { + input = this.options.animate.split(' '); + + this.animationIn = input[0]; + this.animationOut = input[1] || null; + } + // Otherwise, parse toggle class + else { + input = this.$element.data('toggler'); + // Allow for a . at the beginning of the string + this.className = input[0] === '.' ? input.slice(1) : input; + } + + // Add ARIA attributes to triggers + var id = this.$element[0].id; + $('[data-open="' + id + '"], [data-close="' + id + '"], [data-toggle="' + id + '"]').attr('aria-controls', id); + // If the target is hidden, add aria-hidden + this.$element.attr('aria-expanded', this.$element.is(':hidden') ? false : true); + } + + /** + * Initializes events for the toggle trigger. + * @function + * @private + */ + + }, { + key: '_events', + value: function _events() { + this.$element.off('toggle.zf.trigger').on('toggle.zf.trigger', this.toggle.bind(this)); + } + + /** + * Toggles the target class on the target element. An event is fired from the original trigger depending on if the resultant state was "on" or "off". + * @function + * @fires Toggler#on + * @fires Toggler#off + */ + + }, { + key: 'toggle', + value: function toggle() { + this[this.options.animate ? '_toggleAnimate' : '_toggleClass'](); + } + }, { + key: '_toggleClass', + value: function _toggleClass() { + this.$element.toggleClass(this.className); + + var isOn = this.$element.hasClass(this.className); + if (isOn) { + /** + * Fires if the target element has the class after a toggle. + * @event Toggler#on + */ + this.$element.trigger('on.zf.toggler'); + } else { + /** + * Fires if the target element does not have the class after a toggle. + * @event Toggler#off + */ + this.$element.trigger('off.zf.toggler'); + } + + this._updateARIA(isOn); + this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger'); + } + }, { + key: '_toggleAnimate', + value: function _toggleAnimate() { + var _this = this; + + if (this.$element.is(':hidden')) { + Foundation.Motion.animateIn(this.$element, this.animationIn, function () { + _this._updateARIA(true); + this.trigger('on.zf.toggler'); + this.find('[data-mutate]').trigger('mutateme.zf.trigger'); + }); + } else { + Foundation.Motion.animateOut(this.$element, this.animationOut, function () { + _this._updateARIA(false); + this.trigger('off.zf.toggler'); + this.find('[data-mutate]').trigger('mutateme.zf.trigger'); + }); + } + } + }, { + key: '_updateARIA', + value: function _updateARIA(isOn) { + this.$element.attr('aria-expanded', isOn ? true : false); + } + + /** + * Destroys the instance of Toggler on the element. + * @function + */ + + }, { + key: 'destroy', + value: function destroy() { + this.$element.off('.zf.toggler'); + Foundation.unregisterPlugin(this); + } + }]); + + return Toggler; + }(); + + Toggler.defaults = { + /** + * Tells the plugin if the element should animated when toggled. + * @option + * @example false + */ + animate: false + }; + + // Window exports + Foundation.plugin(Toggler, 'Toggler'); +}(jQuery); +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +!function ($) { + + /** + * Abide module. + * @module foundation.abide + */ + + var Abide = function () { + /** + * Creates a new instance of Abide. + * @class + * @fires Abide#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + function Abide(element) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + _classCallCheck(this, Abide); + + this.$element = element; + this.options = $.extend({}, Abide.defaults, this.$element.data(), options); + + this._init(); + + Foundation.registerPlugin(this, 'Abide'); + } + + /** + * Initializes the Abide plugin and calls functions to get Abide functioning on load. + * @private + */ + + + _createClass(Abide, [{ + key: '_init', + value: function _init() { + this.$inputs = this.$element.find('input, textarea, select'); + + this._events(); + } + + /** + * Initializes events for Abide. + * @private + */ + + }, { + key: '_events', + value: function _events() { + var _this2 = this; + + this.$element.off('.abide').on('reset.zf.abide', function () { + _this2.resetForm(); + }).on('submit.zf.abide', function () { + return _this2.validateForm(); + }); + + if (this.options.validateOn === 'fieldChange') { + this.$inputs.off('change.zf.abide').on('change.zf.abide', function (e) { + _this2.validateInput($(e.target)); + }); + } + + if (this.options.liveValidate) { + this.$inputs.off('input.zf.abide').on('input.zf.abide', function (e) { + _this2.validateInput($(e.target)); + }); + } + + if (this.options.validateOnBlur) { + this.$inputs.off('blur.zf.abide').on('blur.zf.abide', function (e) { + _this2.validateInput($(e.target)); + }); + } + } + + /** + * Calls necessary functions to update Abide upon DOM change + * @private + */ + + }, { + key: '_reflow', + value: function _reflow() { + this._init(); + } + + /** + * Checks whether or not a form element has the required attribute and if it's checked or not + * @param {Object} element - jQuery object to check for required attribute + * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty + */ + + }, { + key: 'requiredCheck', + value: function requiredCheck($el) { + if (!$el.attr('required')) return true; + + var isGood = true; + + switch ($el[0].type) { + case 'checkbox': + isGood = $el[0].checked; + break; + + case 'select': + case 'select-one': + case 'select-multiple': + var opt = $el.find('option:selected'); + if (!opt.length || !opt.val()) isGood = false; + break; + + default: + if (!$el.val() || !$el.val().length) isGood = false; + } + + return isGood; + } + + /** + * Based on $el, get the first element with selector in this order: + * 1. The element's direct sibling('s). + * 3. The element's parent's children. + * + * This allows for multiple form errors per input, though if none are found, no form errors will be shown. + * + * @param {Object} $el - jQuery object to use as reference to find the form error selector. + * @returns {Object} jQuery object with the selector. + */ + + }, { + key: 'findFormError', + value: function findFormError($el) { + var $error = $el.siblings(this.options.formErrorSelector); + + if (!$error.length) { + $error = $el.parent().find(this.options.formErrorSelector); + } + + return $error; + } + + /** + * Get the first element in this order: + * 2. The