From 97ef401aa577b287e0fa645258670efea4e6576b Mon Sep 17 00:00:00 2001 From: Ioannis Igoumenos Date: Fri, 11 Mar 2022 14:25:45 +0200 Subject: [PATCH] Initial Commit.Custom theme for SimplesamlPHP --- composer.json | 20 + default-enable | 0 dictionaries/consent.definition.json | 29 + dictionaries/discopower.definition.json | 12 + dictionaries/discopower_tabs.definition.json | 47 + dictionaries/userid_error.definition.json | 20 + themes/ssp/authX509/X509error.php | 41 + themes/ssp/authorize/authorize_403.php | 28 + themes/ssp/consent/consentform.php | 326 +++++++ themes/ssp/consent/logout_completed.php | 9 + themes/ssp/consent/noconsent.php | 38 + themes/ssp/core/no_cookie.tpl.php | 22 + themes/ssp/core/no_metadata.tpl.php | 9 + themes/ssp/core/no_state.tpl.php | 15 + themes/ssp/default/error.php | 78 ++ themes/ssp/default/includes/footer.php | 30 + themes/ssp/default/includes/header.php | 141 +++ themes/ssp/discopower/disco-tpl.php | 307 ++++++ themes/ssp/userid/error.tpl.php | 42 + www/resources/OpenMinTeD_Logo-300x300.png | Bin 0 -> 25252 bytes www/resources/OpenMinTeD_Logo-50x50.png | Bin 0 -> 2614 bytes www/resources/OpenMinTeD_Logo-80x60.png | Bin 0 -> 3099 bytes www/resources/OpenMinTeD_Logo-90x90.png | Bin 0 -> 4364 bytes .../glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../glyphicons-halflings-regular.svg | 288 ++++++ .../glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../images/OpenAIRE_Logo-120x120.png | Bin 0 -> 4287 bytes .../images/OpenAIRE_Logo-300x300.png | Bin 0 -> 19431 bytes www/resources/images/OpenAIRE_Logo-50x50.png | Bin 0 -> 2007 bytes www/resources/images/OpenAIRE_Logo-80x60.png | Bin 0 -> 1925 bytes www/resources/images/edugain.png | Bin 0 -> 4807 bytes www/resources/images/facebook.jpg | Bin 0 -> 9553 bytes www/resources/images/favicon.ico | Bin 0 -> 5430 bytes www/resources/images/google.jpg | Bin 0 -> 23652 bytes www/resources/images/linkedin.jpg | Bin 0 -> 13004 bytes www/resources/images/logo.png | Bin 0 -> 12549 bytes www/resources/images/openaire.png | Bin 0 -> 4287 bytes www/resources/images/orcid.jpg | Bin 0 -> 2066 bytes www/resources/js/.theme.js.un~ | Bin 0 -> 573 bytes www/resources/js/dropdown.js | 165 ++++ www/resources/js/modal.js | 339 +++++++ www/resources/js/theme.js | 191 ++++ www/resources/js/tooltip.js | 514 ++++++++++ www/resources/sass/_bootstrap-custom.scss | 56 ++ www/resources/sass/_extra.scss | 479 ++++++++++ www/resources/sass/_loader.scss | 136 +++ www/resources/sass/_settings.scss | 28 + www/resources/sass/_settings_custom.scss | 15 + www/resources/sass/app.scss | 5 + www/resources/sass/bootstrap/_alerts.scss | 73 ++ www/resources/sass/bootstrap/_badges.scss | 68 ++ .../sass/bootstrap/_breadcrumbs.scss | 28 + .../sass/bootstrap/_button-groups.scss | 244 +++++ www/resources/sass/bootstrap/_buttons.scss | 168 ++++ www/resources/sass/bootstrap/_carousel.scss | 270 ++++++ www/resources/sass/bootstrap/_close.scss | 36 + www/resources/sass/bootstrap/_code.scss | 69 ++ .../sass/bootstrap/_component-animations.scss | 37 + www/resources/sass/bootstrap/_dropdowns.scss | 216 +++++ www/resources/sass/bootstrap/_forms.scss | 617 +++++++++++++ www/resources/sass/bootstrap/_glyphicons.scss | 307 ++++++ www/resources/sass/bootstrap/_grid.scss | 84 ++ .../sass/bootstrap/_input-groups.scss | 171 ++++ www/resources/sass/bootstrap/_jumbotron.scss | 54 ++ www/resources/sass/bootstrap/_labels.scss | 66 ++ www/resources/sass/bootstrap/_list-group.scss | 130 +++ www/resources/sass/bootstrap/_media.scss | 66 ++ www/resources/sass/bootstrap/_mixins.scss | 40 + www/resources/sass/bootstrap/_modals.scss | 150 +++ www/resources/sass/bootstrap/_navbar.scss | 662 +++++++++++++ www/resources/sass/bootstrap/_navs.scss | 242 +++++ www/resources/sass/bootstrap/_normalize.scss | 424 +++++++++ www/resources/sass/bootstrap/_pager.scss | 54 ++ www/resources/sass/bootstrap/_pagination.scss | 89 ++ www/resources/sass/bootstrap/_panels.scss | 271 ++++++ www/resources/sass/bootstrap/_popovers.scss | 131 +++ www/resources/sass/bootstrap/_print.scss | 101 ++ .../sass/bootstrap/_progress-bars.scss | 87 ++ .../sass/bootstrap/_responsive-embed.scss | 35 + .../sass/bootstrap/_responsive-utilities.scss | 179 ++++ .../sass/bootstrap/_scaffolding.scss | 161 ++++ www/resources/sass/bootstrap/_tables.scss | 234 +++++ www/resources/sass/bootstrap/_theme.scss | 291 ++++++ www/resources/sass/bootstrap/_thumbnails.scss | 38 + www/resources/sass/bootstrap/_tooltip.scss | 101 ++ www/resources/sass/bootstrap/_type.scss | 298 ++++++ www/resources/sass/bootstrap/_utilities.scss | 55 ++ www/resources/sass/bootstrap/_variables.scss | 874 ++++++++++++++++++ www/resources/sass/bootstrap/_wells.scss | 29 + .../sass/bootstrap/mixins/_alerts.scss | 14 + .../bootstrap/mixins/_background-variant.scss | 12 + .../sass/bootstrap/mixins/_border-radius.scss | 18 + .../sass/bootstrap/mixins/_buttons.scss | 65 ++ .../sass/bootstrap/mixins/_center-block.scss | 7 + .../sass/bootstrap/mixins/_clearfix.scss | 22 + .../sass/bootstrap/mixins/_forms.scss | 88 ++ .../sass/bootstrap/mixins/_gradients.scss | 58 ++ .../bootstrap/mixins/_grid-framework.scss | 81 ++ .../sass/bootstrap/mixins/_grid.scss | 122 +++ .../sass/bootstrap/mixins/_hide-text.scss | 21 + .../sass/bootstrap/mixins/_image.scss | 33 + .../sass/bootstrap/mixins/_labels.scss | 12 + .../sass/bootstrap/mixins/_list-group.scss | 32 + .../sass/bootstrap/mixins/_nav-divider.scss | 10 + .../bootstrap/mixins/_nav-vertical-align.scss | 9 + .../sass/bootstrap/mixins/_opacity.scss | 8 + .../sass/bootstrap/mixins/_pagination.scss | 24 + .../sass/bootstrap/mixins/_panels.scss | 24 + .../sass/bootstrap/mixins/_progress-bar.scss | 10 + .../sass/bootstrap/mixins/_reset-filter.scss | 8 + .../sass/bootstrap/mixins/_reset-text.scss | 18 + .../sass/bootstrap/mixins/_resize.scss | 6 + .../mixins/_responsive-visibility.scss | 21 + .../sass/bootstrap/mixins/_size.scss | 10 + .../sass/bootstrap/mixins/_tab-focus.scss | 9 + .../sass/bootstrap/mixins/_table-row.scss | 28 + .../sass/bootstrap/mixins/_text-emphasis.scss | 12 + .../sass/bootstrap/mixins/_text-overflow.scss | 8 + .../bootstrap/mixins/_vendor-prefixes.scss | 222 +++++ 121 files changed, 11692 insertions(+) create mode 100644 composer.json create mode 100644 default-enable create mode 100644 dictionaries/consent.definition.json create mode 100644 dictionaries/discopower.definition.json create mode 100644 dictionaries/discopower_tabs.definition.json create mode 100644 dictionaries/userid_error.definition.json create mode 100644 themes/ssp/authX509/X509error.php create mode 100644 themes/ssp/authorize/authorize_403.php create mode 100644 themes/ssp/consent/consentform.php create mode 100644 themes/ssp/consent/logout_completed.php create mode 100644 themes/ssp/consent/noconsent.php create mode 100644 themes/ssp/core/no_cookie.tpl.php create mode 100644 themes/ssp/core/no_metadata.tpl.php create mode 100644 themes/ssp/core/no_state.tpl.php create mode 100644 themes/ssp/default/error.php create mode 100644 themes/ssp/default/includes/footer.php create mode 100644 themes/ssp/default/includes/header.php create mode 100644 themes/ssp/discopower/disco-tpl.php create mode 100644 themes/ssp/userid/error.tpl.php create mode 100644 www/resources/OpenMinTeD_Logo-300x300.png create mode 100644 www/resources/OpenMinTeD_Logo-50x50.png create mode 100644 www/resources/OpenMinTeD_Logo-80x60.png create mode 100644 www/resources/OpenMinTeD_Logo-90x90.png create mode 100644 www/resources/fonts/bootstrap/glyphicons-halflings-regular.eot create mode 100644 www/resources/fonts/bootstrap/glyphicons-halflings-regular.svg create mode 100644 www/resources/fonts/bootstrap/glyphicons-halflings-regular.ttf create mode 100644 www/resources/fonts/bootstrap/glyphicons-halflings-regular.woff create mode 100644 www/resources/fonts/bootstrap/glyphicons-halflings-regular.woff2 create mode 100644 www/resources/images/OpenAIRE_Logo-120x120.png create mode 100644 www/resources/images/OpenAIRE_Logo-300x300.png create mode 100644 www/resources/images/OpenAIRE_Logo-50x50.png create mode 100644 www/resources/images/OpenAIRE_Logo-80x60.png create mode 100644 www/resources/images/edugain.png create mode 100644 www/resources/images/facebook.jpg create mode 100644 www/resources/images/favicon.ico create mode 100644 www/resources/images/google.jpg create mode 100644 www/resources/images/linkedin.jpg create mode 100644 www/resources/images/logo.png create mode 100644 www/resources/images/openaire.png create mode 100644 www/resources/images/orcid.jpg create mode 100644 www/resources/js/.theme.js.un~ create mode 100644 www/resources/js/dropdown.js create mode 100644 www/resources/js/modal.js create mode 100644 www/resources/js/theme.js create mode 100644 www/resources/js/tooltip.js create mode 100644 www/resources/sass/_bootstrap-custom.scss create mode 100644 www/resources/sass/_extra.scss create mode 100644 www/resources/sass/_loader.scss create mode 100644 www/resources/sass/_settings.scss create mode 100644 www/resources/sass/_settings_custom.scss create mode 100644 www/resources/sass/app.scss create mode 100644 www/resources/sass/bootstrap/_alerts.scss create mode 100644 www/resources/sass/bootstrap/_badges.scss create mode 100644 www/resources/sass/bootstrap/_breadcrumbs.scss create mode 100644 www/resources/sass/bootstrap/_button-groups.scss create mode 100644 www/resources/sass/bootstrap/_buttons.scss create mode 100644 www/resources/sass/bootstrap/_carousel.scss create mode 100644 www/resources/sass/bootstrap/_close.scss create mode 100644 www/resources/sass/bootstrap/_code.scss create mode 100644 www/resources/sass/bootstrap/_component-animations.scss create mode 100644 www/resources/sass/bootstrap/_dropdowns.scss create mode 100644 www/resources/sass/bootstrap/_forms.scss create mode 100644 www/resources/sass/bootstrap/_glyphicons.scss create mode 100644 www/resources/sass/bootstrap/_grid.scss create mode 100644 www/resources/sass/bootstrap/_input-groups.scss create mode 100644 www/resources/sass/bootstrap/_jumbotron.scss create mode 100644 www/resources/sass/bootstrap/_labels.scss create mode 100644 www/resources/sass/bootstrap/_list-group.scss create mode 100644 www/resources/sass/bootstrap/_media.scss create mode 100644 www/resources/sass/bootstrap/_mixins.scss create mode 100644 www/resources/sass/bootstrap/_modals.scss create mode 100644 www/resources/sass/bootstrap/_navbar.scss create mode 100644 www/resources/sass/bootstrap/_navs.scss create mode 100644 www/resources/sass/bootstrap/_normalize.scss create mode 100644 www/resources/sass/bootstrap/_pager.scss create mode 100644 www/resources/sass/bootstrap/_pagination.scss create mode 100644 www/resources/sass/bootstrap/_panels.scss create mode 100644 www/resources/sass/bootstrap/_popovers.scss create mode 100644 www/resources/sass/bootstrap/_print.scss create mode 100644 www/resources/sass/bootstrap/_progress-bars.scss create mode 100644 www/resources/sass/bootstrap/_responsive-embed.scss create mode 100644 www/resources/sass/bootstrap/_responsive-utilities.scss create mode 100644 www/resources/sass/bootstrap/_scaffolding.scss create mode 100644 www/resources/sass/bootstrap/_tables.scss create mode 100644 www/resources/sass/bootstrap/_theme.scss create mode 100644 www/resources/sass/bootstrap/_thumbnails.scss create mode 100644 www/resources/sass/bootstrap/_tooltip.scss create mode 100644 www/resources/sass/bootstrap/_type.scss create mode 100644 www/resources/sass/bootstrap/_utilities.scss create mode 100644 www/resources/sass/bootstrap/_variables.scss create mode 100644 www/resources/sass/bootstrap/_wells.scss create mode 100644 www/resources/sass/bootstrap/mixins/_alerts.scss create mode 100644 www/resources/sass/bootstrap/mixins/_background-variant.scss create mode 100644 www/resources/sass/bootstrap/mixins/_border-radius.scss create mode 100644 www/resources/sass/bootstrap/mixins/_buttons.scss create mode 100644 www/resources/sass/bootstrap/mixins/_center-block.scss create mode 100644 www/resources/sass/bootstrap/mixins/_clearfix.scss create mode 100644 www/resources/sass/bootstrap/mixins/_forms.scss create mode 100644 www/resources/sass/bootstrap/mixins/_gradients.scss create mode 100644 www/resources/sass/bootstrap/mixins/_grid-framework.scss create mode 100644 www/resources/sass/bootstrap/mixins/_grid.scss create mode 100644 www/resources/sass/bootstrap/mixins/_hide-text.scss create mode 100644 www/resources/sass/bootstrap/mixins/_image.scss create mode 100644 www/resources/sass/bootstrap/mixins/_labels.scss create mode 100644 www/resources/sass/bootstrap/mixins/_list-group.scss create mode 100644 www/resources/sass/bootstrap/mixins/_nav-divider.scss create mode 100644 www/resources/sass/bootstrap/mixins/_nav-vertical-align.scss create mode 100644 www/resources/sass/bootstrap/mixins/_opacity.scss create mode 100644 www/resources/sass/bootstrap/mixins/_pagination.scss create mode 100644 www/resources/sass/bootstrap/mixins/_panels.scss create mode 100644 www/resources/sass/bootstrap/mixins/_progress-bar.scss create mode 100644 www/resources/sass/bootstrap/mixins/_reset-filter.scss create mode 100644 www/resources/sass/bootstrap/mixins/_reset-text.scss create mode 100644 www/resources/sass/bootstrap/mixins/_resize.scss create mode 100644 www/resources/sass/bootstrap/mixins/_responsive-visibility.scss create mode 100644 www/resources/sass/bootstrap/mixins/_size.scss create mode 100644 www/resources/sass/bootstrap/mixins/_tab-focus.scss create mode 100644 www/resources/sass/bootstrap/mixins/_table-row.scss create mode 100644 www/resources/sass/bootstrap/mixins/_text-emphasis.scss create mode 100644 www/resources/sass/bootstrap/mixins/_text-overflow.scss create mode 100644 www/resources/sass/bootstrap/mixins/_vendor-prefixes.scss diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..1f77fee --- /dev/null +++ b/composer.json @@ -0,0 +1,20 @@ +{ + "name": "grent/simplesamlphp-module-themeopenaire", + "description": "A theme for SimpleSAMLphp based on Bootstrap", + "type": "simplesamlphp-module", + "keywords": ["simplesamlphp", "module", "theme", "bootstrap"], + "license": "Apache License 2.0", + "authors": [ + { + "name": "Athina Bekakou", + "email": "athinabek@grnet.gr" + }, + { + "name": "Nicolas Liampotis", + "email": "nliam@grnet.gr" + } + ], + "require": { + "simplesamlphp/composer-module-installer": "~1.0" + } +} diff --git a/default-enable b/default-enable new file mode 100644 index 0000000..e69de29 diff --git a/dictionaries/consent.definition.json b/dictionaries/consent.definition.json new file mode 100644 index 0000000..1b7f30c --- /dev/null +++ b/dictionaries/consent.definition.json @@ -0,0 +1,29 @@ +{ + "mandatory_field_error": { + "en": "Mandatory field!" + }, + "mail_field_error": { + "en": "Error in email" + }, + "terms_field_error": { + "en": "You must agree to continue" + }, + "affiliation_input_label": { + "en": "Organisation name" + }, + "header": { + "en": "We will be using the information below" + }, + "subheader": { + "en": "Please fill all missing information" + }, + "multiple_mails_tip": { + "en": "Choose your primary email address" + }, + "accept_terms_tip": { + "en": "Before continuing, you must agree to these terms. Please read them carefully" + }, + "terms_link_tip": { + "en": "here" + } +} diff --git a/dictionaries/discopower.definition.json b/dictionaries/discopower.definition.json new file mode 100644 index 0000000..3111b4a --- /dev/null +++ b/dictionaries/discopower.definition.json @@ -0,0 +1,12 @@ +{ + "header": { + "en": "Single Sign On" + }, + "subheader": { + "en": "Use the same credentials for all our services" + }, + "sign_up_url": { + "en": "https://beta.services.openaire.eu/uoa-user-management/register.jsp" + } +} + diff --git a/dictionaries/discopower_tabs.definition.json b/dictionaries/discopower_tabs.definition.json new file mode 100644 index 0000000..54f5c0e --- /dev/null +++ b/dictionaries/discopower_tabs.definition.json @@ -0,0 +1,47 @@ +{ + "norway": { + "en": "Norway" + }, + "kalmar": { + "en": "Kalmar" + }, + "finland": { + "en": "Finland" + }, + "sweden": { + "en": "Sweden" + }, + "iceland": { + "en": "Iceland" + }, + "denmark": { + "en": "Denmark" + }, + "switzerland": { + "en": "Switzerland" + }, + "edugain": { + "en": "Use your eduGAIN account" + }, + "misc": { + "en": "Miscellaneous" + }, + "incommon": { + "en": "InCommon" + }, + "ukacessfederation": { + "en": "UK Access Federation" + }, + "all": { + "en": "All" + }, + "social": { + "en": "Social Networks" + }, + "idps_with_logos": { + "en": "Use your account in social and other networks" + }, + "local": { + "en": "Use your OpenAIRE account" + } +} diff --git a/dictionaries/userid_error.definition.json b/dictionaries/userid_error.definition.json new file mode 100644 index 0000000..05f4832 --- /dev/null +++ b/dictionaries/userid_error.definition.json @@ -0,0 +1,20 @@ +{ + "friendly_title": { + "en": "Sorry, we were not able to log you in" + }, + "friendly_description": { + "en": "What is the problem? %IDP% does not return a persistent identifier to help us uniquely identify you." + }, + "resolution_description": { + "en": "What can you do? At the moment, the only way to log in is to use/create an OpenAIRE or social account. For future use, you may ask your institution administrator to release the required information, by sending them a print screen of this error, or asking them to contact our support at aai@openaire.eu." + }, + "details_title": { + "en": "Error details" + }, + "details_description": { + "en": "Your identity provider needs to release any of the following user identifiers to help us uniquely identify you:" + }, + "go2disco": { + "en": "Log in with a different account" + } +} diff --git a/themes/ssp/authX509/X509error.php b/themes/ssp/authX509/X509error.php new file mode 100644 index 0000000..b1e2f68 --- /dev/null +++ b/themes/ssp/authX509/X509error.php @@ -0,0 +1,41 @@ +data['header'] = $this->t('{authX509:X509error:certificate_header}'); + +$this->includeAtTemplateBase('includes/header.php'); + +?> + +data['errorcode'] !== NULL) { +?> +
+ +

t('{login:error_header}'); ?>

+

t('{errors:title_' . $this->data['errorcode'] . '}'); ?>

+

t('{errors:descr_' . $this->data['errorcode'] . '}'); ?>

+
+ +

t('{authX509:X509error:certificate_header}'); ?>

+ +

t('{authX509:X509error:certificate_text}'); ?>

+ + + t('{login:login_button}'); ?> + + +data['links'])) { + echo ''; +} + + + + +$this->includeAtTemplateBase('includes/footer.php'); diff --git a/themes/ssp/authorize/authorize_403.php b/themes/ssp/authorize/authorize_403.php new file mode 100644 index 0000000..08f8cad --- /dev/null +++ b/themes/ssp/authorize/authorize_403.php @@ -0,0 +1,28 @@ +data['403_header'] = $this->t('{authorize:Authorize:403_header}'); +$this->data['403_text'] = $this->t('{authorize:Authorize:403_text}'); + +$this->includeAtTemplateBase('includes/header.php'); +?> +

data['403_header']; ?>

+

data['403_text']; ?>

+data['LogoutURL'])) { +?> +

t('{status:logout}'); ?>

+ +includeAtTemplateBase('includes/footer.php'); diff --git a/themes/ssp/consent/consentform.php b/themes/ssp/consent/consentform.php new file mode 100644 index 0000000..9468bf1 --- /dev/null +++ b/themes/ssp/consent/consentform.php @@ -0,0 +1,326 @@ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+data["srcMetadata"])'); +assert('is_array($this->data["dstMetadata"])'); +assert('is_string($this->data["yesTarget"])'); +assert('is_array($this->data["yesData"])'); +assert('is_string($this->data["noTarget"])'); +assert('is_array($this->data["noData"])'); +assert('is_array($this->data["attributes"])'); +assert('is_array($this->data["hiddenAttributes"])'); +assert('$this->data["sppp"] === false || is_string($this->data["sppp"])'); + +// Parse parameters +if (array_key_exists('name', $this->data['srcMetadata'])) { + $srcName = $this->data['srcMetadata']['name']; +} elseif (array_key_exists('OrganizationDisplayName', $this->data['srcMetadata'])) { + $srcName = $this->data['srcMetadata']['OrganizationDisplayName']; +} else { + $srcName = $this->data['srcMetadata']['entityid']; +} + +if (is_array($srcName)) { + $srcName = $this->t($srcName); +} + +if (array_key_exists('name', $this->data['dstMetadata'])) { + $dstName = $this->data['dstMetadata']['name']; +} elseif (array_key_exists('OrganizationDisplayName', $this->data['dstMetadata'])) { + $dstName = $this->data['dstMetadata']['OrganizationDisplayName']; +} else { + $dstName = $this->data['dstMetadata']['entityid']; +} + +if (is_array($dstName)) { + $dstName = $this->t($dstName); +} + +$srcName = htmlspecialchars($srcName); +$dstName = htmlspecialchars($dstName); + +$attributes = $this->data['attributes']; + +$this->data['header'] = $this->t('{consent:consent:consent_header}'); +$this->data['jquery'] = array('core' => TRUE); + +$this->includeAtTemplateBase('includes/header.php'); +?> + +data['sppp'] !== false) { + echo "

" . htmlspecialchars($this->t('{consent:consent:consent_privacypolicy}')) . " "; + echo "" . $dstName . ""; + echo "

"; +} + +/** + * Recursive attribute array listing function + * + * @param SimpleSAML_XHTML_Template $t Template object + * @param array $attributes Attributes to be presented + * @param string $nameParent Name of parent element + * + * @return string HTML representation of the attributes + */ +function present_attributes($t, $attributes, $nameParent) +{ + $alternate = array('ssp-table--tr__odd', 'ssp-table--tr__even'); + $i = 0; + $summary = 'summary="' . $t->t('{consent:consent:table_summary}') . '"'; + + if (strlen($nameParent) > 0) { + $parentStr = strtolower($nameParent) . '_'; + $str = '
'; + } else { + $parentStr = ''; + $str = '
'; + } + + $mandatoryAttributeNames = array("sn", "mail", "givenName"); + $mandatoryAttributes = array(); + $editableAttributes = array("consentO"); + foreach($mandatoryAttributeNames as $el) { + $mandatoryAttributes[$el] = array(""); + } + if (empty($attributes['consentO']) && empty($attributes['o']) && empty($attributes['eduPersonScopedAffiliation']) && empty($attributes['eduPersonEntitlement'])) { + $attributes['consentO'] = array(""); + } + + $attributes = array_merge($mandatoryAttributes, $attributes); + + $attributeOrder = array( + 'sn', + 'givenName', + 'displayName', + 'mail', + 'eduPersonScopedAffiliation', + 'o', + 'consentO', + 'eduPersonEntitlement', + 'Entitlement', + 'eduPersonAssurance', + 'eduPersonUniqueId', + 'termsAccepted', + ); + $newAttributes = array(); + foreach ($attributeOrder as $attrKey) { + if (!empty($attributes[$attrKey])) { + $newAttributes[$attrKey] = $attributes[$attrKey]; + unset($attributes[$attrKey]); + } + } + $attributes = array_merge($newAttributes, $attributes); + + + + foreach ($attributes as $name => $value) { + $nameraw = $name; + $affliation = $name === 'eduPersonScopedAffiliation'; + $name = $t->getAttributeTranslation($parentStr . $nameraw); + $missing = $value[0] === '' && in_array($nameraw, $mandatoryAttributeNames); + $editable = in_array($nameraw, $editableAttributes); + $isHidden = in_array($nameraw, $t->data['hiddenAttributes'], true); + + + + if ($isHidden) { + continue; + } + + if (preg_match('/^child_/', $nameraw)) { + // insert child table + $parentName = preg_replace('/^child_/', '', $nameraw); + foreach ($value as $child) { + $str .= "\n" . ''; + } + } else { + // insert values directly + + if ($affliation) { + $str .= "\n" . ''; + } // end else: not child table + } // end foreach + $str .= isset($attributes)? '
' . + present_attributes($t, $child, $parentName) . '
' . $t->t('{themeopenaire:consent:affiliation_input_label}'); + } else { + $str .= "\n" . '
' . htmlspecialchars($name); + } + if ($missing) { + $str .= ' (*)'; + } + $str.= '
'; + + $str .= '
'; + + if (sizeof($value) > 1) { + // we hawe several values + $str .= '
    '; + $index = 0; + foreach ($value as $listitem) { + $index++; + if ($nameraw === 'jpegPhoto') { + $str .= '
  • User photo
  • '; + } elseif ($nameraw === 'mail') { + $str .= '
  • '; + $str .= '
'; + if ($nameraw === 'mail') { + $str .=''; + $str .= $t->t('{themeopenaire:consent:multiple_mails_tip}'); + $str .=''; + } + } elseif (isset($value[0])) { + // we hawe only one value + if ($nameraw === 'jpegPhoto') { + $str .= 'User photo'; + } elseif ($nameraw === 'termsAccepted') { + $str .='
data['termsName'])) { + $str .=' ' . $t->data['termsName']; + } + $str .= ''. + $t->t('{themeopenaire:consent:terms_field_error}'). + ''; + $str .= '
'; + if (!empty($t->data['termsUrl'])) { + $str .='
'; + $str .= $t->t('{themeopenaire:consent:accept_terms_tip}'); + $str .= ' '.$t->t('{themeopenaire:consent:terms_link_tip}').'.
'; + } + } elseif ($editable) { + $str .='
'; + } elseif ($missing) { + $str .='
'; + $str .=''. + $t->t('{themeopenaire:consent:mandatory_field_error}'). + ''; + if ($nameraw === 'mail') { + $str .= ''. + $t->t('{themeopenaire:consent:mail_field_error}'). + ''; + } + $str .='
'; + } else { + $str .= htmlspecialchars($value[0]); + } + + } // end of if multivalue + $str .= '
'; + $str .= '
':''; + return $str; +} + + echo '

' . + $this->t( + '{themeopenaire:consent:header}', + array( 'SPNAME' => $dstName, 'IDPNAME' => $srcName)). + '' . + $this->t( + '{themeopenaire:consent:subheader}', + array( 'SPNAME' => $dstName, 'IDPNAME' => $srcName)). + + '' . + '

+
+
'; +?> + + + +
+
+

+ +data['usestorage']) { + $checked = ($this->data['checked'] ? 'checked="checked"' : ''); + echo ' ' . $this->t('{consent:consent:remember}'); +} + +// Embed hidden fields... +foreach ($this->data['yesData'] as $name => $value) { + echo ''; +} +?> + +

+ + + +
+ +data['noData'] as $name => $value) { + echo(''); +} +?> + +
+
+
+
+includeAtTemplateBase('includes/footer.php'); +?> diff --git a/themes/ssp/consent/logout_completed.php b/themes/ssp/consent/logout_completed.php new file mode 100644 index 0000000..978931c --- /dev/null +++ b/themes/ssp/consent/logout_completed.php @@ -0,0 +1,9 @@ +data['header'] = $this->t('{logout:title}'); +$this->includeAtTemplateBase('includes/header.php'); + +echo('

' . $this->data['header'] . '

'); +echo('

' . $this->t('{logout:logged_out_text}') . '

'); + +$this->includeAtTemplateBase('includes/footer.php'); diff --git a/themes/ssp/consent/noconsent.php b/themes/ssp/consent/noconsent.php new file mode 100644 index 0000000..d4bc8fa --- /dev/null +++ b/themes/ssp/consent/noconsent.php @@ -0,0 +1,38 @@ +data['dstMetadata'])) { + $dstName = $this->data['dstMetadata']['name']; +} elseif (array_key_exists('OrganizationDisplayName', $this->data['dstMetadata'])) { + $dstName = $this->data['dstMetadata']['OrganizationDisplayName']; +} else { + $dstName = $this->data['dstMetadata']['entityid']; +} +if (is_array($dstName)) { + $dstName = $this->t($dstName); +} +$dstName = htmlspecialchars($dstName); + + +$this->data['header'] = $this->t('{consent:consent:noconsent_title}');; + +$this->includeAtTemplateBase('includes/header.php'); + +echo '

' . $this->data['header'] . '

'; +echo '

' . $this->t('{consent:consent:noconsent_text}', array('SPNAME' => $dstName)) . '

'; + +echo '
'; +if ($this->data['resumeFrom']) { + echo(''); + echo($this->t('{consent:consent:noconsent_return}')); + echo(''); +} + +if ($this->data['aboutService']) { + echo(''); + echo($this->t('{consent:consent:noconsent_goto_about}')); + echo(''); +} +echo('' . $this->t('{consent:consent:abort}', array('SPNAME' => $dstName)) . ''); +echo '
'; //ssp-btns-container + +$this->includeAtTemplateBase('includes/footer.php'); diff --git a/themes/ssp/core/no_cookie.tpl.php b/themes/ssp/core/no_cookie.tpl.php new file mode 100644 index 0000000..3836fa9 --- /dev/null +++ b/themes/ssp/core/no_cookie.tpl.php @@ -0,0 +1,22 @@ +data)'); +$retryURL = $this->data['retryURL']; + +$header = htmlspecialchars($this->t('{core:no_cookie:header}')); +$description = htmlspecialchars($this->t('{core:no_cookie:description}')); +$retry = htmlspecialchars($this->t('{core:no_cookie:retry}')); + +$this->data['header'] = $header; +$this->includeAtTemplateBase('includes/header.php'); + +echo('

' . $header . '

'); +echo('

' . $description . '

'); + +if ($retryURL !== NULL) { + echo(''); +} + +$this->includeAtTemplateBase('includes/footer.php'); diff --git a/themes/ssp/core/no_metadata.tpl.php b/themes/ssp/core/no_metadata.tpl.php new file mode 100644 index 0000000..dd38399 --- /dev/null +++ b/themes/ssp/core/no_metadata.tpl.php @@ -0,0 +1,9 @@ +' . $this->t('{core:no_metadata:config_problem}') . '

'); + +echo(''); + diff --git a/themes/ssp/core/no_state.tpl.php b/themes/ssp/core/no_state.tpl.php new file mode 100644 index 0000000..f8ba2d6 --- /dev/null +++ b/themes/ssp/core/no_state.tpl.php @@ -0,0 +1,15 @@ +' . $this->t('{core:no_state:suggestions}') . ''); +echo(''); + +echo('

' . $this->t('{core:no_state:causes}') . '

'); +echo(''); + diff --git a/themes/ssp/default/error.php b/themes/ssp/default/error.php new file mode 100644 index 0000000..30e3303 --- /dev/null +++ b/themes/ssp/default/error.php @@ -0,0 +1,78 @@ +data['header'] = $this->t($this->data['dictTitle']); +$this->data['jquery'] = array('core' => TRUE); + +$this->data['head'] = << + +EOF; + +$this->includeAtTemplateBase('includes/header.php'); +?> +

t($this->data['dictTitle']); ?>

+t($this->data['dictDescr'], $this->data['parameters'])); + +// include optional information for error +if (isset($this->data['includeTemplate'])) { + $this->includeAtTemplateBase($this->data['includeTemplate']); +} +?> +
+

t('report_trackid'); ?>

+
+ + + +
+
+data['showerrors']) { +?> +

t('debuginfo_header'); ?>

+

t('debuginfo_text'); ?>

+ +
+

data['error']['exceptionMsg']); ?>

+
data['error']['exceptionTrace']); ?>
+
+data['errorReportAddress'])) { +?> +

t('report_header'); ?>

+
+

t('report_text'); ?>

+

t('report_email'); ?> + +

+

+ +

+

+ + +

+
+ +

t('howto_header'); ?>

+

t('howto_text'); ?>

+ +includeAtTemplateBase('includes/footer.php'); diff --git a/themes/ssp/default/includes/footer.php b/themes/ssp/default/includes/footer.php new file mode 100644 index 0000000..eb68779 --- /dev/null +++ b/themes/ssp/default/includes/footer.php @@ -0,0 +1,30 @@ + +data['htmlinject']['htmlContentPost'])) { + foreach($this->data['htmlinject']['htmlContentPost'] AS $c) { + echo $c; + } +} +?> + +
+ +
+ + + + + + + diff --git a/themes/ssp/default/includes/header.php b/themes/ssp/default/includes/header.php new file mode 100644 index 0000000..260077a --- /dev/null +++ b/themes/ssp/default/includes/header.php @@ -0,0 +1,141 @@ +data['htmlinject'] = array( + 'htmlContentPre' => array(), + 'htmlContentPost' => array(), + 'htmlContentHead' => array(), +); + + +$jquery = array(); +if (array_key_exists('jquery', $this->data)) $jquery = $this->data['jquery']; + +if (array_key_exists('pageid', $this->data)) { + $hookinfo = array( + 'pre' => &$this->data['htmlinject']['htmlContentPre'], + 'post' => &$this->data['htmlinject']['htmlContentPost'], + 'head' => &$this->data['htmlinject']['htmlContentHead'], + 'jquery' => &$jquery, + 'page' => $this->data['pageid'] + ); + + SimpleSAML_Module::callHooks('htmlinject', $hookinfo); +} +// - o - o - o - o - o - o - o - o - o - o - o - o - + +/** + * Do not allow to frame SimpleSAMLphp pages from another location. + * This prevents clickjacking attacks in modern browsers. + * + * If you don't want any framing at all you can even change this to + * 'DENY', or comment it out if you actually want to allow foreign + * sites to put SimpleSAMLphp in a frame. The latter is however + * probably not a good security practice. + */ +header('X-Frame-Options: SAMEORIGIN'); + +?> + + + + + +OpenAIRE Single Sign-On Service | <?php +if(array_key_exists('header', $this->data)) { + echo $this->data['header']; +} else { + echo 'SimpleSAMLphp'; +} +?> + + + + +data['baseurlpath'] . 'resources/jquery-1.8.js">' . "\n"); + + if (isset($jquery['ui']) && $jquery['ui']) + echo('' . "\n"); + + if (isset($jquery['css']) && $jquery['css']) + echo('' . "\n"); + } +} + +if (isset($this->data['clipboard.js'])) { + echo ''."\n"; +} + +if(!empty($this->data['htmlinject']['htmlContentHead'])) { + foreach($this->data['htmlinject']['htmlContentHead'] AS $c) { + echo $c; + } +} + + + + +if ($this->isLanguageRTL()) { +?> + + + + + + + +data)) { + echo '' . $this->data['head'] . ''; +} +?> + +data)) { + $onLoad .= 'SimpleSAML_focus(\'' . $this->data['autofocus'] . '\');'; +} +if (isset($this->data['onLoad'])) { + $onLoad .= $this->data['onLoad']; +} + +if($onLoad !== '') { + $onLoad = ' onload="' . $onLoad . '"'; +} +?> +> + +
+ +
+
+ + +data['htmlinject']['htmlContentPre'])) { + foreach($this->data['htmlinject']['htmlContentPre'] AS $c) { + echo $c; + } +} diff --git a/themes/ssp/discopower/disco-tpl.php b/themes/ssp/discopower/disco-tpl.php new file mode 100644 index 0000000..c02155a --- /dev/null +++ b/themes/ssp/discopower/disco-tpl.php @@ -0,0 +1,307 @@ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+data['idplist'] AS $tab => $slist) { + if (!empty($this->data['preferredidp']) && array_key_exists($this->data['preferredidp'], $slist)) + $faventry = $slist[$this->data['preferredidp']]; +} + + +if(!array_key_exists('header', $this->data)) { + $this->data['header'] = 'selectidp'; +} +$this->data['header'] = $this->t($this->data['header']); +$this->data['jquery'] = array('core' => TRUE, 'ui' => TRUE, 'css' => TRUE); + + +$this->data['head'] = ''; +$this->data['head'] .= ''; + +if (!empty($faventry)) $this->data['autofocus'] = 'favouritesubmit'; + +$this->includeAtTemplateBase('includes/header.php'); + +echo '

' . $this->t('{themeopenaire:discopower:header}') . '

'; + +$languages_html = ''; +$includeLanguageBar = TRUE; +if (!empty($_POST)) + $includeLanguageBar = FALSE; +if (isset($this->data['hideLanguageBar']) && $this->data['hideLanguageBar'] === TRUE) + $includeLanguageBar = FALSE; + +if ($includeLanguageBar) { + + $languages = $this->getLanguageList(); + if ( count($languages) > 1 ) { + $languages_html .= '
+
'; + $langnames = array( + 'no' => 'Bokmål', // Norwegian Bokmål + 'nn' => 'Nynorsk', // Norwegian Nynorsk + 'se' => 'Sámegiella', // Northern Sami + 'sam' => 'Åarjelh-saemien giele', // Southern Sami + 'da' => 'Dansk', // Danish + 'en' => 'English', + 'de' => 'Deutsch', // German + 'sv' => 'Svenska', // Swedish + 'fi' => 'Suomeksi', // Finnish + 'es' => 'Español', // Spanish + 'fr' => 'Français', // French + 'it' => 'Italiano', // Italian + 'nl' => 'Nederlands', // Dutch + 'lb' => 'Lëtzebuergesch', // Luxembourgish + 'cs' => 'Čeština', // Czech + 'sl' => 'Slovenščina', // Slovensk + 'lt' => 'Lietuvių kalba', // Lithuanian + 'hr' => 'Hrvatski', // Croatian + 'hu' => 'Magyar', // Hungarian + 'pl' => 'Język polski', // Polish + 'pt' => 'Português', // Portuguese + 'pt-br' => 'Português brasileiro', // Portuguese + 'ru' => 'русский язык', // Russian + 'et' => 'eesti keel', // Estonian + 'tr' => 'Türkçe', // Turkish + 'el' => 'ελληνικά', // Greek + 'ja' => '日本語', // Japanese + 'zh' => '简体中文', // Chinese (simplified) + 'zh-tw' => '繁體中文', // Chinese (traditional) + 'ar' => 'العربية', // Arabic + 'fa' => 'پارسی', // Persian + 'ur' => 'اردو', // Urdu + 'he' => 'עִבְרִית', // Hebrew + 'id' => 'Bahasa Indonesia', // Indonesian + 'sr' => 'Srpski', // Serbian + 'lv' => 'Latviešu', // Latvian + 'ro' => 'Românește', // Romanian + 'eu' => 'Euskara', // Basque + ); + + $textarray = array(); + foreach ($languages AS $lang => $current) { + $lang = strtolower($lang); + if ($current) { + $lang_current = $langnames[$lang]; + } else { + $textarray[] = '
  • ' . + $langnames[$lang] . '
  • '; + } + } + $languages_html .= ' +
    '; // /dropup /ssp-lang-container + } +} + + + +function showEntry($t, $metadata, $favourite = FALSE) { + + $basequerystring = '?' . + 'entityID=' . urlencode($t->data['entityID']) . '&' . + 'return=' . urlencode($t->data['return']) . '&' . + 'returnIDParam=' . urlencode($t->data['returnIDParam']) . '&idpentityid='; + + $providersOnlyIcon = array("google", "linkedin", "facebook", "orcid", "igtf_certificate_proxy"); + $providerLocal = "openaire"; + $namelower_dasherize = str_replace(' ', '_', strtolower(getTranslatedName($t, $metadata))); + + + if(in_array($namelower_dasherize, $providersOnlyIcon)) { + $html = ''; + $html .= 'Identity Provider'; + $html .= ''; + } + else if($namelower_dasherize == $providerLocal) { + $html = ''; + $html .= 'Identity Provider'; + $html .= 'OpenAIRE account'; + $html .= ''; + } + else { + $html = ''; + $html .= htmlspecialchars(getTranslatedName($t, $metadata)) . ''; + + if(array_key_exists('icon', $metadata) && $metadata['icon'] !== NULL) { + $iconUrl = \SimpleSAML\Utils\HTTP::resolveURL($metadata['icon']); + $html .= 'Identity Provider'; + } + + $html .= ''; + } + + + + return $html; +} + +?> + + + + translation + if (!empty($displayName)) { + return $t->getTranslation($displayName); + } + } + + if (array_key_exists('name', $metadata)) { + if (is_array($metadata['name'])) { + return $t->getTranslation($metadata['name']); + } else { + return $metadata['name']; + } + } + return $metadata['entityid']; +} + + +echo('
    '); + +$or_html = '
    +
    or
    +
    '; + +$edugain_html = ''; +$local_html =''; +$idps_with_logo_html = ''; +if (!empty($faventry)) { + echo(' + + '); +} + + +foreach( $this->data['idplist'] AS $tab => $slist) { + if ($tab !== 'all') { + if (!empty($slist)) { + if($tab == 'edugain') { + $edugainList = '
    '; + if (!empty($this->data['preferredidp']) && array_key_exists($this->data['preferredidp'], $slist)) { + $idpentry = $slist[$this->data['preferredidp']]; + $edugainList .= (showEntry($this, $idpentry, TRUE)); + } + + foreach ($slist AS $idpentry) { + if ($idpentry['entityid'] != $this->data['preferredidp']) { + $edugainList .= (showEntry($this, $idpentry)); + } + } + $edugainList .= '
    '; // /metalist + $buttonOpenEdugain = '

    Log in with

    '; + $edugain_html .= ' + '; + $edugain_html .= $buttonOpenEdugain; + } + else if($tab == "idps_with_logos") { + $providers = ''; + if (!empty($this->data['preferredidp']) && array_key_exists($this->data['preferredidp'], $slist)) { + $idpentry = $slist[$this->data['preferredidp']]; + $providers .= (showEntry($this, $idpentry, TRUE)); + } + + foreach ($slist AS $idpentry) { + if ($idpentry['entityid'] != $this->data['preferredidp']) { + $providers .= (showEntry($this, $idpentry)); + } + } + $idps_with_logo_html .= '
    ' + . $providers . + '
    '; + } + else if($tab == "local") { + $providers = ''; + // Should be 1 provider in the list + foreach ($slist AS $idpentry) { + $providers .= (showEntry($this, $idpentry)); + } + $local_html .= '
    ' + . $providers . + '
    '; + } + } + } +} + echo $edugain_html . $idps_with_logo_html . $or_html . $local_html; +?> + +
    + +includeAtTemplateBase('includes/footer.php'); diff --git a/themes/ssp/userid/error.tpl.php b/themes/ssp/userid/error.tpl.php new file mode 100644 index 0000000..4ebd363 --- /dev/null +++ b/themes/ssp/userid/error.tpl.php @@ -0,0 +1,42 @@ +data['header'] = $this->t('{userid:error:header}'); +$this->data['jquery'] = array('core' => TRUE); + +$this->data['head'] = << + +EOF; + +$this->includeAtTemplateBase('includes/header.php'); +$retryUrl = $this->data['parameters']['%BASEDIR%'] . 'saml2/idp/initSLO.php?RelayState=' . urlencode($this->data['parameters']['%RESTARTURL%']); +?> +
    +
    + ' . $this->t('{themeopenaire:userid_error:friendly_title}') . ''; + echo $friendly_title; + ?> +

    t('{themeopenaire:userid_error:friendly_description}', $this->data['parameters']); ?>

    +

    t('{themeopenaire:userid_error:resolution_description}', array('%RETRY_URL%' => $retryUrl)); ?>

    +
    +
    + +
    +
    +

    t('{themeopenaire:userid_error:details_title}'); ?>

    +

    t('{themeopenaire:userid_error:details_description}'); ?>

    +
    +      data['parameters']['%ATTRIBUTES%'] as $attr) echo $attr . '
    '; ?> +
    +
    +
    +includeAtTemplateBase('includes/footer.php'); diff --git a/www/resources/OpenMinTeD_Logo-300x300.png b/www/resources/OpenMinTeD_Logo-300x300.png new file mode 100644 index 0000000000000000000000000000000000000000..f228c43d5562527e809ba99316a905e4e869ce79 GIT binary patch literal 25252 zcmXtg1yoes`}G~VQ$j)->FyRrX$k3Wq$Ng%9+eoB5Rn>EkcOe8h8jvF6air*lrB*i zKnW$j`~LpxLs+dOyLU6H+qsXa+I>|X1~p0Ta-6pB%`lK#`A=qUyIv8TbS5xO!s_@ zG+N7E$kfh`qBGd%jrhB_3E3w&4QE69hYu+POt}?5WGyA~XL`seI)|NPs4J$6pGy?B z#Ksl$Y`PD-8@8nhM11SG7n%>e%~d9MVMhe=E@(qPPAn0X-0dBPNbzxH0*T2FS+P>Gr_!M$SR&bUZ<)NC z*WtUETYS8_WUB-SS5`W0u|1U03=v?HZFv%f>FV-%_z*dJ{OQyEA-5(n+01~&;|({~ zd!mRx=sh&)=XxKz^w;BFfISdKXC{jfl5Gc&1l&LiPyrZ89}Dv`Kwo=pY4A2DKNKsx zzirSfY5+xh+DZWY4CEd%dD!i{CML8TBgu3bUba@fP^w zP)FKGqa}+V16Z^mTFh7c&@f?yA*6t`gjB1RLlyFQ;~8^@;EB4!xoKZ9(IZx@EO0AZGo75L zIhNSd3)dD9UXJVVp1fsbWb{t@m;|8rN&}D#W{mU!K%;)zB}=v^=fRI319-fY(M-xi z)V*iVo)Is1wCN4>+KhRz$ez-fC7Cd9ejpKO4i=d5M(zlE#lFttdhB@m8T_h>Tl@6s zlgdaMr~8bYDDS$#=c%bDb8~aZJxpW3;$ci2sq85LmzM2&jg$ahzS^*e{B|{xx0S#b z$3^;x4(krw;x4T`I`39jQ~N2h=H_J;-^1a*@Q%E`zCIuMkWq2)GAu+&) zmzUSRYVcZo8Inc|O14@|7|c7JcdiYv5Pl_eX?LjO6$tqpeHz!KT;icdxk4tZ30b-2 z6|0sxO7-`*e2ovv-Ilo+7VpWLNP>u`OKT1U9LQGecq7#jFMxNXYE-&t30j6JT0rfg z?Ht1S4&;VaX|B4uy7Wk}2GL5KzNoi4qQl|ReVXk9!5NHah&FTd?fVH2+ibpiljp;3 zQF-U`06Hi0-8aRX&jwf#NkFvy%)73c-FE=OLZqCDf|!hFX@5UZPEpa_#iayw{1hqV zW@`ljJ}GZ=1cZcy(9-uXVDo`)A}w7+sFEbhy91fyQ$X#F-i%a=-h&63GdP^}VbbI9 z@DbjO56*N`mJ@2CEHxd!sT|HP$Z@cSNe`L9YK!My-rlyh&B;*SYM+HH;5)$zg^xb5 zGU*ZUH}_l>=nYsriRB9RnYEcP&z)@QJAt?1=AHg>;i(YZn(53gBw7;N(WzA0JxEhI;ZHl+k9ptSsuNK<0w6qZ33}kD2d)!N8ATj=4Cj;&aHwm8Ec;<0iYb)oc z&5*%Phcw1yD1Xj)utbiIxA$#9K|ztfpMNd3yFYq_C-x}c!+ih#{mRViiV|qBCpP?N zWJ9}B4xs&lf{MSj1uSM}dn(WSGbg&5D&*IP-Rh>rTKSlnC6_lqasm9Yzrw$i*Q2$N z3nuzY1;oCC$#YW0>kA z>>x%sl|`8Sjp>=VXx-i2Z8-V;I}AY3J)M1TK%A>S7;Sni^=ZPsoa4JdeV28StC0nv zvct&4wLj~70YFMlZphKm(Qk6Vyo>+Ag9l%`!h_zHmv5fto=bXS--QiVWpx=));UB$ z95~ZQXgyozd;Jy058(xChe~6Pjxo%0FLKUs-U|y0ML4-%4}jRpd!oB}8*5yHUOc_-3rMg2MX>pL;a7)IJy+8w-UG|N8lJ=)(uHFh`tBUdlq&B{!mBV9}%cPq)oO z4TrIbo?pLyoq|&(8|N$B`L&UyO#7X(#L&(ngSb~x8@dZu`%buGXg(J^U83^&MIgXp za5E((J>4DjbxJXRe=l&0&B(p5$0WKAfhR7=Yin{~(W{=c)Xv~eI|1BM?Up9$qZh4L zi|x>QFa@Gf5a>=pekYeya;EiwRp>8jLvf&OQE!EGUe5bxgSItP{Hh815V*X&lrnyB zT>dhe0b6{&v}~}Q5VvjkEB25e-GIF0ciaiVj(<>4pJ?Iz$*~(mxfPu|ylq6T)d!C} z>-JUPcg`ZGX^%RaNe~LgGyAzkMO!nKChn*E-;`iKEZn=|lc59x{iBmo$CXwO)y3X% z9*E(Wt`*Ur%S&D*2LNXnSJoiYeZ*1-x?(;?nZ9RMccaSG_M3o5qj}!hCQKKl7~=8DNHF7mr7NnUVw#9*@Jt9HiCvVh_i#FE=#nev3rW=V8B2PlF927Ry}kv! zo$RMloh4ZjID}tp&-*K6e)O7}nb9%qB=WSgu?R64yXmeh zGsT?opw(lVJ$>Y0!mFk81x+2jO=tD# zGeF{Mc@5RyTg=^s=ym+Gd__6aqJ_3oAaO{C(yeq&a30!f<;IwQC$gA(o*nULI`Tml9tE4T4e8#E|=ZO%!;dBluEHCIQuQ*P&l0rf#3Y81KjT) zcSgPJpRiS?M{OAN&^VRu-h=DI7MVM2?eY}$E)N0$#r%qM_H55oDjJ%jG)~n=zjvle z92#YXYpp`W*YPshCgaOlMifVtg5vF7!kLeSX=8|G%ueyXURMAD^qL~SPfpC^;xvnS z)PV73Q=uDVKz>C8M0S}!xuGDUU*m|lJLQrP_zQ5jZSkQh$bm|Zk(-24H&gF%;$X>n ze9$i-#|$4qJ(fBq2Aqf_ zH{C{L>YV|29B;6WhK{vP8b(#543} zlcKeyrKPpHde;{SdNqdY(c(BZf)_?lE?0s^%+K&yE?|D7Gh3Q8aaEv`22i5lre3*0 zUzj}-c!a8G+QazvKbJlBiir2Fj23FHp!fp`IgG03ttD!$_DGi=y z)tl&*z)_07j6gWuRC>J#5d}l?&?c(FQ8IaZje_YN_ozm_&qBl7ncdrf(-%0qL#~^tCSZcQ_v(-*SF#ZdJ`)chpvG?)gk^ zu|eaFShAHKZRG0kC#tas{7VN8ukzcC4q#pt2%IugBqV`f>Ehcuk&%&WY3mNe2SojU zat-;ap(dvgcqQGMi_ZJT$f&5`pI@crAyj~(;T;PDt8~JS2w&eHvY-!*QtOHrZi)H# zI1C1J9ZaNV<>Yh}Lkl*~|5OK0Q~3CSYWu($xqdhT965z>7f-GaP)ZJgDQAeg&8Cnj zVFxvqi=3x78$6xhC!H7gaC5OeD5=87+ep#H%cEsJOdL)pz}8-#qPZUg1(~ z#2(|$&d%^(zka1$Q|@%22?z+V6U=m-kyC`6rM!dZyiz@9ZjfZ6NcgW_0n^fmZA37b zow;~;y!G!7{Mra%aSWU4rn>Z3SX>6fy*r$=dQuek2Ec<(M!nHzM)2LccVf9(T@$QU z)&B2S3Q=dT>DG!{=6@cqudg$X&(1bAHQiKB-$#zD|6BcKS|QRXMXn_)t64a{Sww=^ z+VWCLdjNAH_s_wf9j?cEp2@@W1~y6PW;+5i>n=?y?-!yJWx;Br%|Bvwx3ITYgG1?& z%bgav3_UH}AM?`@NuF7GBY!e6gGFET?QYb$|gii2g z@HdtvLgSe)-5nIze9^|U+sGZ-c)H?Sw{A)7hnz85(sF4yWIP%f89Cf3OJ{cX>y40} znBamuGRfm&B7Afc0G(QCb+vGn@}nErYbNarG~HU>bllJV{d?Zt-ksS@kAHqOi##|8 zb39cn&v*RPW4-=^yOg)nIre-r)!j9(B02N6NzJk%!I?XJe!H^Qd5(((f#{Ya%k}H;CH=!yW8>BN3ebs*-8Oz!h7xTtR-YRK-e8-_T*D4 z@SnAr0N7v-BNG$rnE{da2gsdFZDd1%M$Ez?qn1qG&{Uaj4wEi;Hn2N8La#>oFOnPQ z{U56^zxc-VVpwIv?LnFvx4vJDuI@NttcY5)dWPQ10@2R4wl?=8x>)6r;Q}yHC4p~K4gMw${cYvqN{=Xm z{*Fta3x6$PWgrQre&ZT!@(K!xU_j@~GI-P4+S>6I%pRt|8@%5dc6UB~iTL2va$T*b zN=8(aw29eol_{~;m-^F}cYZnxu^*KBAVme1+F5@MZ{IIKc-rQoP^k7A3Z8uud=$Q| zC(93$`}51x^IGGXB?1>S#ju1k#_{G}L8dGf6_w|6GcA)EU2C)^l{1ZEl!>lbIb#CE zgUb7x^2S|e@5jc{B4m!w!QJQ{MjFq&J6siK{UM>&?$A|t%%2KdDK?H7F|oj)b;z1{dstan5dn+7hkQP+R|HsV z1MwY!#(BAqY24@hbOT2tL&-Z#xwYM<_c=VkjJ++O3(mF#bEI(_8EzJn3KjOb)VkGX z$z1i|eeQ#a3xmFVO94f#)yKv&R|X=!Z>y`5MU!VN2zZDbaGrPVjx4TNR)5`-xVuIX zfHx?f$V~D<$tf#WZ$$8PFL-(G-as^PDTjDee1TEYb^Bx*$c#ARL)x;nDG{OkyPcM- zxBrPX#xZJNBo#O2qfpt7oa;t!2)(?D_hY%fqoX@tSdw-ZzJJdvwoK9Zk;N1?Zg$`6 zihaEKq?-KG1c!&EArBE~l-+0P6+X^6nPI|QPNPAx2He}uCZi*4J+4m?AXz>?EyLFba(M=t;g<^Az}8q9Q!W|mBoMafn)d){bX{rY-W0RPx-tQB3vUmEl;xeg`zArJqvWs;XIRT~HMq}c{82)j2_ z1L#FxLZN2AeyfSN+Bzs2Z14WVRHQDa6jbJt5|0@-U)#1%zdT~FG&zlCV~wT5g9 zq-3e;=gXi&?3XVV8Nf3V`X+vS8Q#|>>#hxY@A3FvT{a9>>}hNA&zb6J-Hp;Ip^^1q zmDr089Vo4Kpj6fqE3d#Hp#hQkv86rPf8(|Ry#n!iwMrj-nTQ|6cB4vUPEK^-odTP$ z0<7iO)cY2Aw0QqI31;T)|NQx-bgJr^B@z93J(?6yGwWYe^h0HfoU8qLQYfV9xDq=O zeCuSgft!)>Qb<2f=+rP%L-d)Io(=HmdESfQTCh&?&=vto`ue!Q03uR-flMjRTBoj? zk*lwNLslE_@u_;H{`RUslEjTcTP8A|=RUM~MuMb4emGm+?9GNPe5nYn50|VaDbQqN zWG{Z#Qm=BRyqZBXhq>J9{iV;7@Fijd&c=Oju0HLZTBK?0z(%Hyj?Vg((zx#%{*t)T ziFViZOTf}gp|8L8#za{#WGj~CqZZ7r_FamjODLq@WZ7|4ikdE^0#X_p`w}e* zuQg*WjbucPBb@{$#uCaLG|0aYeIe-XSJ}!@bE2Z5S67#kTJisev8-){m0KNAvny<@ za0-zyYYL%1yp_!|kSD}mUH-FHNgVVnrn@8}Sh zcmY52_MG#+vI#YA>lM9vrU%3NG@L3#a8E<8F}dZ%qw{F*tVC(D1|uV5amp29)jpr) zC0k#YLiFDIw*#U#Ewydj9zNW;@dJQ{l{yR@9lRDUbrP(|i}2vti_1!`b(l+a+12?e zs_nArncL~8Kql_zhC%1wjd25#}I!4T#HRk^0B;Xbr1c@{+y3U$9uMsLtnx(E3DIIZ7U{*P`7< z8=eulb_3$>{SpH8@A<@deMcPrJS)G#B~I|4R5E`d%vIKb8hR>cn%q>h+^tO?94911 zpfY9&lz6_){;~PXA9us)O$Yr*u+3Nt`Q}0CWwR@57nmpHn-1D-#l*y*9U32JoiopJ zgnK18J93xiu`LI&ggVBG1PidgXf(B@?aBPH6;gj$oG@awPwkfhb)-%i5G`jo!^-W=*_|smLUN8CynESAXfQ@q&AcT zB3->Cvgs;mnYx_XGw-CmBwn8%%>G^tZL;ydClaAYl_ZPLWr2+aH^MR1fGB=Mv zb>k!%@g8OztoDulpU0Pes74X9CE?do9`Ei^s5th2Ew$vY+r7HFddi{m?ZY#qpmex} zd-anZ7ns+U!4}7xd*4Q_mArYIIfCW)IeCV8#MHyZg!w4?nUmg7aDFH7kyaj_aLayiTLmhW!+ueAK=!|KKbP)L!C1Vd=K2iJQK z?JokZS%quk6XM{;o14VLRufnv7dB`4C2^_2qGX>X6Sf$p>sSVA`19vIx2Azhi=EE+ zD%}B8y%sr&?}$}pHu27)? zK$hDG_}jRCH*i4?yRnOWEqz>*tJs2WZ&#dKUM_C9O$qLu6|b+zOaRPc`WFa2?S9DM zo0w?vbfWE7WrkUNnz_e~$c?_>5H(?=ZW@cX95u`TI88h@yEx>r^-)N((*HTKW;Vg? zfkv@2=>hzndS|?6u?r%HMuq|aV_8ke-i>ZYT!_ZHy*AR`<9O=cqn0mAAKe4J^K?)? zz`(13=1NniI}Q63uU%Tjp9k`aREkOiMlzwTG<$)so5xGLdl9t>AMrF&Iewno{D+wZ zEI)$8J$t#dk%=i$qnJP*S4(<3#Pgzr@U1$I++0;7duwK9`aGe&=WFlk@-3*t`u8-} z$sfX0hF?Fs58oyn@3bzPUJwf8pfeMYkzup#)Nc0W9;kWCL5c{N=%xmEGxU1CZE$+p z-0+>~{IiF%-h17g+->W*S*WFDp^R7^Pq)G zV0kl5v~d=rR#QyR9)^5k)+d~~3H^GFdC#S_wZ0=l4{8?1xvsVo$re zOk)pwYyoYu)oi;rxuU8)H_Y)_5BB%>Y2+37>s+Lil$3a^zlOMR0*?gf10Zy8_OiPl zQAM30>l4w$hyX)}XXZm@aC&j ztLp4L&jaKCZTcQo0F|FlS>a>;k~5B_MFHlh2Z+p}Og}3aPl~j`k8=!%qJE=?^YI@~2y7B=sFj)Aul81(+uCNBA=IXn_6h@k_|{v)euMM*ZRKs35(pw(EZ=^N2F*+Tu**pToaLN*4hjRDiQ^+xxic`>6>DH1$HlssRh zQnVgZ8_z(+n2$5hyMX8q;U72Y<^~hA-x~`Qf5#53JJO zr4i<_`zC$SwP+N3vAK*^q*@O*o-qO|>=2QxQVWp;yULj8G!4 z#0nodC8ZC*=lS`Y-dp*Qi!>8umKL-_g!(1)cSEm@iTvH&>qci1sj|JlT=Q+;B;!{s zMDBtBTEVDC$({$xl7tQH$(D7OC8l9TofVcwvT+-M%2mB&1Tb1OHEzPr+myT zjDy)qKyOnIo^b&|qM=pn$eqwcSC0g`<<@|F>cJ8{{sEAe>{xp)ieGs~Yn4?elSc(| z#+HN+TB`!www8(TNkCgCx{DlZOh`!Rj}n}9#Z}5DU@0y@xPvce90Di=EO44acfg5uWq7=?`GdEQ z>gPmBJ)7NBLG15uj71imRq)PlDK`uVZ*mF5tB9)EpD6(PEQ zcm`L<|F+$i^!#D?!FNZai~1Wu(d+ENXZY1MCCClW93#Pe@FMoS^H4y8D#GCfQo_g2 zZx1BJCcRqbBSHf*BJfT(Lmqu9dFFeSN_gffk)ztUFhrL=(h8C>A>9omk0SDddT!@` z{J#7s9{fPy27@mHu3qyYJesc?kP%HpP`kDMXtZI2-g=$cG?6D1+tYJtndj1|N8dSN?qb_;IwY zO`)>B{+EqJj=fayufq|pVqL4)yK2wW7Qm_*HWAH-NO#@W`fKj78Fv|~jf~2=+x__z z#71~>#=-Bx?2rg|Vi_c1hs3RPc5vd{S3LtEqZC>hbp{^I%D2+{vh(6-v6T=9Q;Y)R z)H!&?s=tEj>+wynaE_0++?H^a*4px$0ikA1U({o9`kp{?+#{ZDVk~UpLT5(qz;)|# zB6_Ip*Q&w$mWbo6itOy{*Aqp(7Vm2$>haAS#Y{B7s-l({e9_GqBgdxmY&t_~P zl3lisT8oQbJ%IJS8E_Ne!#^&lKvn?_N0l{KUqzUrMZ2GMb-m4MDHx26wZ_Ngo?HFV z7Gqv#v#|I|vEq0X{1ize(;`K+&MI3hSV|60O7)I0;7YKT@LmT$Vdd-5PJH3K{Zp~Y z-+!qPeT`zGeD3OR3BFKLOv5;_hQZ*Clbh=Eb`^`&jfB|SkZvyQvqV=l@$E#HEqCC) zZrK!v>?DZTP2N&{JhA)pX9~1zN)QJtgMO*;vFi$xZ`a4k?PB%=;mY1wKYw@MpLu5z z^u7Ds9dsaQS5^^XerOq8HXT7S^y&JcQuDl+|6=cm+{a1jV`q1XN^fP=ti{d2bb8>y zL_v;~sS$dJUCO%8=kCQG`yPZBbB8S0u2Tav%~qPWz%1GiU&nmou9xkyVeIrg8G2B@ zj1Q%jiXIX-ZL^29kzF7$#t1k&ZH0#e@XTmL-VFZL16_&)ZDwqk7<0Zfm5#WQF<6d? zY!3^RI1od*vJQVu^R#uArE+ISu;;9@ zNyz&U$}-2e-vBgxZ0FX2&x?zOpyzd%9%-~&o)zkNme;2Rm7?M!C^5Y+f%3F1012=P z^b!U{+xZdcR)e*J4mS&Ci6CdWuB;%BP=vf!_Qyi_v9XKg-(U1o-O&YLoe{%~-5v{5 z{sHk#VMe5r@$^c%bIPfzj$1n2ovj#JpZ0|on*99-L~9rM0q4oJ#h z69HiEdp|+@iD%|)N!|3+>gwtw;hA>f*ajDJCnnodz4C)^6Zb!J%7xyTfB0mRXaW$1 zdC(TH3>?7cLa9r1o&i^^SXJ?H3?V+GzoN2o5D~@4n2pK>l=6&9%ZL3?yzys}#xvi^ zS0(`}TwZh$0iMU}3dCOfOtUQ|a@@V{VHf8Dz!ylMD^ARbk^BJ_oP?ZdX%t^K3Iy#K zd>BiQJI{&hKl!z&|LH}L%y9!j2h-*$iOuXT)rw^9Ij1&Kl8ndyrXYBSWVSGcnPXjK zgW_UahLK=Xz@kD2+EAP9e&tLO59F8@S2%H1p6W{@kmw|2Z-W>TlrLn8iG2X^ zV4GCws^8?`5~ZT|(&?w7fNrMVZ&=GAdf@s#bh$}v&j;(5rXnLVFw0$QB={_qT@l3c zlbIk3ZI?em{_VO8OguFa;X+s9LVeIsQ#b*Z7IL9ScKGtIJE*%VR0@8Y*IB^lUQ?hu z!*JS53=s^sM%ZXw+h50ThSEZ8BM?aL+dDD#?SV0kpejHWK)Y;-u3D1Yq_WA9Lew@e z`_G`iK|q-FGP9|np`qfCY_W~&TeIi5q@A5zFL6WT%B;CU03`O84?qia?QN?TeoVUD_nhLq~Z6Cl<(0`g{oynhuVUT^yXl1Vvf zbaJfNSb&xg{t|hs9n9e(dPBGGqjGasMo0CF3JQicHaz72pq*5l{2-S>?sVB)HRexU zS#P`;{=B?=fL)BhOyciv?emtZPeeny6X{e}I8AIvQ#o>&b&C0GE&&=0I!Y;X^oAnj zi-9JXSoQSuSXR&Ua_nHx!*0^ISXn<1p4~(g=T)3H0FPyk1BEkh@&0h#B9aY1TNurG z!O^``4uOlW6}xW@qAEBoMoSC?LHhxb;fVi8emLG`)(_96x+OmgMt1k*ZXvy+XzmQX z3sw3;9cb4IOn!k-QnKL{vxm3bNiKM1{zBAfS8Tm*J^DX2*K22*iHYa$M71DTYe)g1 z6c$&CML{nkYg}>z?zf3ZGYd7|Dm)!Y}^9 z=s_)=eQpFJg2wB+0hGNwg7Y|Uk*1sKz!pw@AIyeECn_N+bW{3X8WQoWBAhxhd2hj; z`Q+82v|SJ?B`w{w2G8e0_7Q{5tnl%$o$E#fT3cH`kYoF% z4b9Js;FE14UI4r_s_oA4U*Nm*)-1iK@9{H6mnxkelb15gj=$-oBE^9tg;;s~<$rehXiY z$t@^=%3&H)*D(^{9ZjC&%xV|-!RR@<>~v62$loJVsCwC_!QAi;xp&O+@DfF#$ORW#8%m=()NC_&}lS{Qp z&n|VWrYx3Im+hVkN&z~N4K;P)zZMd7l4!*Jx&gW&v(|?_3}Ef?GD57tpd1tvd}y&C zPg|!0K6%KX_b_7dxm80wydp=8va-AxWFR%JKt(80;$+-Rflak)Vgl73k2sQ$WJjgg z2`ChdEc@o2S{ZsoU^dORWgW8#l9%9vBuzK$UNM>eTpI*zL`bAt?BK%8FFHX9jF=9! ztdMN6A6Sma$;y_U(=@hJ_<*27z1836bZ)lHR^pi0N^@Zjl`yjHq9_T$+qbhmWo;Ue zD1T2h82;83E?E>a7rGl28ToQ@n`e|1N~GMR$GqciDXz`DM@S#c&v3`tnajM|g04Kp zdU(KYj9}D5=4)r@f3mI;q!C4hP4{P*<3rT@sfRbtqhmi7MC|?i36*2B%=uZ&a##B{ zuT`A&(TDBh=!>)9_^Kc%yHDfuIz+^`2L?=?V#DAf)I1?J_a!fszloD^iL2P7mYrnh zuoHSp$DmSW)Id$M8HtJEZ3%Kx5dXJ?(>UyD-dL=w;P#@(X2 z%M8wEnc&J=Lt;L>v%7l-+^z&x-gqc$n6rAg)cy_du3oeV(B~b42X|R+j8c^@N`xIRI2j z5SCCng-*_5BZX(8#%w&hKw1z`u?~(l|Nir5Q}xVj63KpLl9fV0!+dix9MVmX za14=T<}?+knmuo0@j*Qe7b4T0JC;wdLJcB zA7g;~v(?{!$NE94>>k&h2#W_}S$vdFQhL znyPZe*3ixxl&VQ!c1n@F;*K~S@_NX?QT_}IC_kxvVZ@v)mr`=MzXCeHGJM--zSSFQ zqWXrbgttwKE)bIhm3D&ON%5ABqLe@z1n$SjkiDExSX2~C?Axx&TH1?G0v7{aCkBA9 z$4!Ise)1Pm?S_XTGjfv<#FHlwxq;{4KiC?XzV2W{+`Qk{!sbgXo4h0Fh*K1u_Vx9p zShuCVZ*$eO@3o~U>CyQ`)UB!0_d_z&tt*UFCm#I<)s3T{;;Lp58waoSi*MwB&!0C) zQ_vKT-EwTj$>kifKx?ZQ;Z``oFL< zBoh@y?JENa^q%-D&=cSXi5rXZG|Tt?4v&pZ%LVj5+vRbUr+MBV&MSgR0MA&hGvwcW zP#(+#ps6bzk+Lqd^xu|dXPHR5;o0j-u4=XY;$kqh9hpI?695Zlwm%e(d)~gE6g4eQ zLh5{RqMhxI1>@`G+en@iZ+Q*ZYUyIqm7Eu1TVK4F&01en@BNhk8ptahkaxRDTN$qw zD}1g{lQOqws1&o&o8%|+%`#_Bgt4|aF^S5`{QKh*;MK2RRUDOSYD%B%#N zb7Iye0a7MZkv@Rtyz1xOfecMef7I3t2$it_;PC~c_R@~$z~sFFbE~=YiD-31ubap{}l$YVaY8b_zMqmV87NF{p`oQl^_;Lk?3$7_u8T%3R&c_B1B6 zsUB7FV0}OO@>zE33s8YkU0b`S2+Fa%XLjXIfB$|t`IMHt){F``KQ@O;mtF(D&c`v4 zktm?i2bG`O$x|=7Yt`bf&(wcJu#cj1doPt@49q2Tw}?q_!=fA6!nCbjxz35IH{E*us-%y( zaw{S}H`gsfT-@B&>OAoGlFZ}BLAayyue&%6l!bzL2a^`2^6{0C^OGOH8WWVF-Y{>a zPDDTRL2VOYK@G#FwguY-HcVn6;M8zsGi~5!DW#_7z>)6C$^z-o_|i&e$t%Xx5J@k) z{CQ@k#p&a5OZAh4wtMKZT#c7iW~I-;K$qFreC9;5vSfaUC`t8dzisIKrC<_@>E#?{0$QJMPzpTWdrc%p$8CI$um)-Z3UgHlYvKLhg&(axgr z<~7zP^BLY^xgPjiL~Uc4+p^x+FF+T#Tu#m`>pmN#`a}6Sh*{!`Vak=O!{DcV=;LL z=JF>5P}MG^;Gwrrz-VTiGJ-%nDF9YvtZZx)kMz+0ob zZzkSp3t-_7b|f#U99!?>1lwokk}%7S58K2*yyx$$g5??|XVcG+rCdFJD&Q*y=2s%U z)RNkWL>3V~Dh|3^Bk1F(54|f|yCC0e(dc-KG}152)19z`5_@R6&CbUDHsLxP=;gU) zmh1IvefPh($)&X#^-Gb0hk=oX8pFyUjnL99vCBEV0zJVgWIgm!M5i5AG0jlQ5?i5j)fRP>YWd4>;g^ z7Pj_ksRzG0%4Z8q$I}s?|C_}V6jm`$F-(PvkF(KyxJzTkSC!BV@?;H=i)R<1axOT$ z9S{e=J+nZjN~bIF&r2n?jM&F)*g{Cm$oNX@0)c7PjU?o|cbMGsU$N-w0UHyyKt|pn zyCdp6c|a-hw-DphHlVhVuXyLx+<)y3`R0>0xIc*k^^x3SC$`MXB#%l_bI)mUp!^Z7 zgqWS3y$j-dX$6QJtg5Pw@zSc&r(V+@oS=7Jg?`AC5n%^8wh7QTjB#Q_n6M`XSBDwC zSSKU*BYx=XyFe=eTS<7+7dazq3gHLw}%G;ENjJ-J!D;3S&3_v3&YJ+o$eW^~qC`d~NBTKXf(WXf?Q<8^tGAxF zB;+|mfYaqT&FlyIAmaQHJeF_eI~cL-HDXUmkvkctl{g6xrBbDa+qZ8A5#v85sHKU# z${yGQRe%ug%+Zdtb-5+mHOx(Xg>n8D^rAXIL(;THH{}O&)U>{GI`nR^Z@=FnCMvlc zCysz--Ja*n_WYCJ+jH{9oC@SaC;$!Gl~KS^M^nR%^?idO<>V}^=Z#)%APIZwJ$;#L zI)o~LU9f~eX^yC7?=&AJs-k-0L;~ou^L*e$H+2cPuqHCs{9Z_)BbcCKx?t8;qm?Ym zqJH`A%XU5CBQON8=&L_s7cR0?eBQ5iaJ59U5~dY<*$Q@!`~n(5rlwg_HP2`uxZo*2 z+7RMkz8QQ8VArQ3Df83N!JsPZYum?a3xkZg)5gfdIuL+)5EK-o3f!O|_I+*T3Tu5; zn?Eu!$=gwXiMz|2F%FbeS64G=3v_l(6RcRT%r4b1Qvmx-VtywXy0`k18EG#}JrpSiL|jbHu*k;({FaR5_m^fr8< zP5f;wR{jSud+9yAcp{y)+TesDB$w>JMGXKRWxBF%L$tt-Li+>#a@a`KkGh%Pzuyr{ zW;4ZS!K6I~Dm`uY&C3-*5(fZAJwia_zZDfs;-xV$aS90~ZIR70sv7pDry4ZvKS2JL z3M9ps`+jO6cF-v|*(U6$29x+d_|-wMzPEd6Y(K~0N=;4u9}I3%s4@)1VkasIFg^`? zpy&`lfZE@HrcpT!4YY4t9~G9^vP~q;WAUU6kWyAApBEP!vL)gnI{7(I2vQs~a%Cat zZxkzr1yOaE-(a2OohZE+`;-x z9$rl)Zpkr7wDp58qGEZNC5bJXdF_jEkfX#63UEO|xwrB!%)U5KLW&90t-0Rl~K(`T@FR=;MBCzFvb4 zQtagqeX#H?g0Cf;MonrLC(C%OxE9Z#WnYK%od19=H3e~kwnoOr=RsfdrC9tMvWX+o=}K(~BH(bPFH0?~ zZ2>ws7--;eYI_Pm++z}Jv>lqq(6LL2A$jTR)YKFKfU1~v)NuKRiAV3LyxJ89+KD&D z4~QS-UEHdC*H|2|NCj?gGbh%*COX+f_Sj@L(^v5W*;L2dEQ4|v+iZ8%dr*c^=YGFA zhIpC@zB{~;IFN&gCB-Ye)gBNb1al)$EgV8UXbSnzl^dZ{!n9?a=<1)vY$6@;sn`xw zV8{cXYMWs&Yr#yj?U9=A+zjnc3NL+iVyG)*GV6RpPfpI~qML_tBc< z;cUJ502>?I0GRXHc)bEkIvt>w>odi%9o&cJks}L>6P)M2BRU$F`JJSs=lOC3h1L{i zp~c&zs+{M!Qp6EIs5$^ScQ@$+tpvI?79cRu`ktE5f9su)7bHzJ`1-GP70YyueU4O? z0Z;LyYPE$($i>+q*nBwb(7EDE5yXk``>&@jb5yC)q2%3@mb$5D%5BDBsA6#qpw+q5Ao+Gb5OQqlj4eM9z#!L6f z$J+wtVCsUSd$C>`9CXrG%|58a>mc-AFUfb;?HbH8ZDjAXr5qF~^IK~+Wf64FOcufc z*8@w0D_*=9R;-1d&8D8oT$0fr?8Z4j_aIw9XSJiBrihm(X^+k0F z@3VQVa^6`4>+%c*0KFViid7x6<@o7Hln!W6d$@*h57Q-q((C>u{S)8uHEK|%C=Gz* zWDebw=TU2P)>40Qz{0y~8?f~aNFXzVJZI9DH~trbaD8PS`!M6hW8-fFiQIJ{T6s=O ze4zVin{t`s#ju5FM!P%uj<0-OtqA>#wwogg`?6{(vinBalpRIXA*a0f49|O3vx?0~4yLY^<^v&?DmWg!Z;nZ*H z#CV1>@oTn>-h-`*DRZFQqIoRZdrMc^dZ}Td_WiZnR=PWy?|!S*>wgJ!Iw2RcI~ts8 zV)rzPy}5j1ULdbz`0G@DFK<$-#Geme)+GBuqRF&$nU?N&cB<2^#C_p1oD@qWGizG& zwVRTEJ=sUK62;>>n{&NiL-+>&c=0~z!sxl)|JMTG<;?*5)nCZEcSDJh2jITx#?-o3 z1@lnaqU8ljWZ=mf$qblSh^&D2TQEEDmvvF(+I% zA(xz8#oKkwCGyvSbz?GAn|S$vRLY?;1f&JupxjD(depz5>7HnjK}Ld0?83--ZavGf zP;q1^B_pq81|yRM0Crp-@ReSp%idHc2XpjVkPJ%wCt*)SG4Y!Ihvgh;UV8)1#|c7g zMeo?M8$rCjv#jh{8i%qB^~xs|%uQd8bV4%OMV-16ZJNPcQ5AEc8&@~5>2nl5@^#Fd zN{;~0o^JynhhhfyeeOM}lRG~KJIVNgpI@8!sM?Zjn5d|zs^H8JEFO<12Ne5jZ!lou zTjTdI62RBCLa(jJuS{nBCzUH%VI%+;1rks<+-6;DnUBuZYJJ16cv zzvc9_G@7ND({B>pN^?f_TS*t4k~!nweih5{Xnz@#CqjJx?gR_lX6=Ss4U$-l3s4RZ znGl}UT*Qg@*-9~q5Q)&{*HYa%#bxHLuKD4ON3%1WSi{!l0DfO#7q){ zQg&mf#%^pyB1?rbB-tvmBzvJBS;P5u&UKwXU@m6nec$i%-1q&tXZ=efeZb|z?0otKea5XafMZV`!a-0QR4sDBjo01#FUQ;uRMtSDk{ z;+#iP>k5QRT+`_yEAWwFH+w>J3H5}EC3#$IZ@%}>EF{H)|pV7SscKQ;=Xd0$aMCLEjRDc_lKPJ%f?w)^JG$1 zD+f$Q84*d{iO&as`_}sNmVd?~7-=-#$VJo5w3(+Ci_Ck4y|kkI(hG- z(;n1@IDluTkdE0Ly!>^nLQVxsCxMxuUZHiNE-o1| z{XXsdX{iirBH~Z%T<;?=_~!yU71C}f2MUcxUGf>o}KUGdV{iGOzY8KVoEQ1P|HdgHl4WhFCg#s^| zN5hdN1;Vj2K*NU~8#41`u0#E^&l`1#_s z6_1+b%0TdrhWq~xL-(Tz#OUe*I2+r20Yu5H(?sZy;`OrOdyodL(=#DGA45(HKfl`J zHE5F-I||HSNA+ZvH6|^^ zqNY2HGptSV1E$*5^q;=gyT(WCH$z7QJAw9A);?orrSzuS3^=bVzSF0lIK8yAgk#^> zX9E)fj~sBis;dPFw$LSOW6EsKStYZ|@17>J?vIDP~6>SOPqz_uR zOp~}9bH?ihTx)jZDRDly$0SYWnVZaB<_1cFoSARI(y3ol9SPmER1xOh206It#n$&# z#Y>|o$uKq~k22(}hzhR;0b>=ILzlv1ey%y$ms7G`P26->BhlAp)r* z5}?T9&=Sb&s-9_?YJRC>As70`B;MB6(svu3wytV&--oa+kSTqf>Ro4OE?9_vAkF6K z))gSAn_?l#xhH@;)GWM(GEX&Zm3@mXFsgNX4TR4ZGcl}n_~U4B5r2|<;Mb?8aeqEP z%NtnRl+~%Vq>O;hW%vQK^?DWe-DO@)30_3o=~{K!3=UCNc`g_p&?9}b<{Z7Ae=Qfy zX0#vAPn|Xozw~xoGL^Vb+H=@zNi%=(mnXb~egDUh+{?80H^J`N3cP%fn!nix;yy@I zE_4}mz4~LIsCc34h5&n(Zvw^ZH4WjGQWA(z0t*0`&w!NmleSzYkpQ!C1ei>A2*5PP zmwsbDHg2qDs~HXgF%nhMX*>^fO@&CO&D;9(O(m3bKOvQ<{p?0TlGk0Fz3XkVgN4)E%8GIv09MZ9n@4TT0T&ntHqe^@e?VPge0M}$Lk0#{{k z39(CZsNR@K-mdu5G9<%rbiDmRU4>HBJ~uu6ZS+lQhE?jHuj*m*@z>8Ok$OVE$39km z3;`GW>Er*z1}>K!#%mJ9KRz4Qif7Jmy75(0L3&v<{~SF_EaF^G!d#mp-*??xy?WK} z#--CV8z8X0{!SJ3*>l&d;pEn_=C1Fd%Oaqee<`eJ0q;-7FK6glBQ`NWkw1 zL7GrqkJ)TYI9F%z zG7Ddw&5t@o>z_k3f~hEiN$HY;0v0?_FX6K%M@HzV4Kpf6IxLyO--W~I@IK|yD}QRz zlWa0cXebZlT(1bf4S?8@Zcv`TpvTSjYkRpA--)=@my!j@O0%xM+|Y(IcXT6er@Tp` zAvA7$uo2I`pL`!ty^39YdZKO4X4FV)T85)diP~Qa!|5;u&~=(ZwE$)n(gQG z>b>h`eMHlp*djYu2ao$&%04x@)k@1tJp}g6AhU4voBj>}9@o-NRl2I?_kfnERpUw7 z$haU8D~5Z{?dR+$e%CP|+q4bg8rs{BNO$kv{ZdxAjgkZ%E!s>ll#NoaTbuyHz1jRT zkY$&F{_kmUd&&sE)%`j#u?o$MRNUyUL1+>85*|Es;)lm^gQ$5Zv{PgAd_@z4{XQH6 zX&!WAFhD@?6X;UlgS)-C4;{sl@M5vMl#fl`!NDi6`eI~Mh|SeHIKvy4CD?}HKhpj- z`%7u)M208-zt#8#wqXGQ~$7f(>hoLfAY&kxyaMi9!7|Vi9&K_UZ zPq31T0|Bj*T@pbqrO9lH5;l&!T7T~!(~gIvQ0Fu4I%Cw*l6TxtOzBFcnueHj{}mVW z=um0=<9#Q_X&s6#kB4Mkx?or5wCrEaW-cS=JUhPX&>O%G@}}iihG+;v?nhS@NIz)+ zHLa{U5&AxFXQR=vGe^-!PDv?~)}Li6VQrbE)`YC7t4tUbKJwEP?3Y6yPvYyFn|Xof zRw}NmJNW?WOU+GK3WcWW3H$pIKsW(q1@GvR{+-0R#)TSDnrO|6Qwfzb`oXX~*9Bk9 z)()g3-1g!|bXoY(WJ}PaUD?b8s{rn>74y66wRRe=isND8cTAb;ZT0tZ!FPU^jdf7c z3hdt%W-P5?>kNeIc5`|yq7U>`>(-C zj=AvGF*pjnX^m37jPZM&gs|z0bahYmlHZ>2cqN3quzJ9ger#rVnxM(BaT4M?eOecl zVr91VX_F<>cLMAypX*&28@^PV(?7J+6VE`nND~H^W!0p@=9PQ0viG`*ma>o>w7Z!{ zYbUF2w#Uxsyg9|9vh*J=2xAT5Z7nT#T#8LRWq-ethmuHhF#04|xk!mB6teG8l~8`e z*e{sons*A0m$0o65MBr*yEEiF5iTw?04E(%kb3qg|hPClJn6y*4D;ZBZq&_Z#%~V!VY(_5V4PXR+t*&Z=;t*&iS#7QJ)y`C8 zQq!>W09s7iDn0|N`NvW4)G6uaN>7&HHShf+>sAk$M!`sVh<9n9a=s+>+w@;)ox5)< zFqku_+qZ57JK_&RKv`Md5NdgGMK$<$H?L+O(Dg#eX1oMy!qOZ>*_pO1Iw}cuIo;%Y zpqo4=i2GUJTM}S3`nn}3h_^X%{ngGn$TEJ?+GYRuzrED_n9(hJu4d^mIo+JJSqJBe z*+~*q4+yTB$SB4sl-Wp0 zh;&=^LL}Jvir;d7%TZb6>0i2nDWs`8iwT=wIY#Saj^{dn1$Es|KK&FhZ1luE5}2BN z)1rOrfKw8RldmZ$psp~~u|XiwT!yXCxp=RV3)Z32doKF>V`CP> zYVdg}yPq#*K&uN4Vca3ow+W;!SD_=czx*Tb=OL}W6Tc#eR#^CMC9jlv`_5hz@E3zE zk0wVi5EzXME?uOBKyESk$2;V(B;3tVDYqLuH&jxtAs|8Zh-XFV`##WM>}TDnWP{m! z85kttmh!Zc-e5hNBcunOC&Z&QVC#=Hq`|cQ*ZlL^3Lo-NW#eUlWn3aa zL#|Y`XiN3q;aK?KezmLh)`Y{2m5+_y^pY?1l@%5LL_^APyXzNcCyI*9_}dFj-V>FLu=PD5=6a`B+-j_bUU*=X4Gr%zali@E9AMB%a9g1CFKRQ5@9Sa4Wa zE$CD8AcbF1TdnfG#up6NBJ!vU!nyF@nl<@0`yNG}M*V@tFe9H=t8ijByyJhjn~|m5 zZznAI+7nwoYIC2p1ILdHdWSaqq35;F0J)L<_{e9_dGCO7VLj<`-OASC+Vyk891yrS zK-z_MtO`2fcX%^{7wuI9-ZI0_m;Di_ydEVqF|j04>jR+$;@3tuizaHJ`rZ0yrwp1Tj^>@70*#qgS5 zxCJg*SsR&Ga6yKBgqWVVBg01Ei9e#TyOQqhjeY&2>VN+Hk%iu6rS8b2y%&@AFM~~T z&z~HbH^brr@LP%uvK9I_=-li&`>SGZH@nBhf(D$fo&d$R-67MBwkfmtf&!tOW)y$l zN1-^ZxKz^=u2`Mivr%?2J6yow=_fHJma!Ph1#=NARrK>|rfH5M<+u2C<&~iRJC3UP z77&mqw0wVJ`>uud4N_?>A5O^fsP}Sq(J$t=+frs;s&i*Jbs0EYH2kWvFS<3dDk#TbM3$f1=RTA-Q$y>KBM)+~U5(6|LB2aSpE+7vb z@!2|Lf(9Pf`S@c;7}CC+bT$2jx4krb(lh@Mk-sgHj{DPutk@G|J0v`gr3_K*)NT6x zwPQCc7>i;%Y6zrS?H9KEF>5Ql*gmeW_NH=1ZCxfIb5~yRb@j726uc=H^J>L(v+{UV zHAWxqn{T){bff$&{UpfI|FLVi%kl9T>m5G#rt=96-Il=ZF+7=(Cy!A7*@jmYgIq&NF9iXsl{>eoCaMxbzYS`-PGLrzsXRgSWDkRha4r8~8ra67_ zH0ReQNxRO0B`!@P$~R2^RZDTGN|Gs%zX4`#MHnTqkjvpdE6?W*9lt)Md%-yelHImy zucWVPY54-yZ;6y^Bec6rZJXDe@p>Rp5FqH$*YqoU_2qr+CokDd0DtIkdPF&3Xd0#8 z_#Y+9g=NYaVFr-g=zE+yxNgZhlr&C$R90szqEbBH0Eq<9k4mCu#Pjrf_2SCH~@BZ6%6cM{cC_3smC85z0)jo zxc>tbDMmm88_CjA)@|7&fE^L+$9?m{?pNIu*gEtQ`EQo>r zDoqg>>xm>yZc~16+FgV^fd^+G&Wc7;Cu#wwDbT45tG*Y8)qw9@-iRTq(>XQrywNwl z=Da+ZF>L9B{=vqq*;3(VZKz+7OibjD=Zy~Unzrp`vOuMr5qG;{xe$WcT9cC%gPHEu z&#BNtKt{8NBvVu?X{SOTiYfi(@rqGVlV?o8-EB29u>CA zbnAvra3)|l2)0l7YH9t6p3OqhJ;Tev&fkFIi7fXMa45}iP`}lvwg2GvOvZI4Q)%&z zNh_%Zc0hE>Wj}HL{Uh+AC95Up?A6Q6fqf0tjh8dr27s$7JpBvg{4l|;;QRLI|LNyu z(wTVnB)K!}Mm*6Xh@8IXz3O?j`nBs^&%^pV8Xe-V^Vgo}SERBpTD)zF!(F=l56l3{ z$Vp_B(iu6yR28Vx%l(Lyu22Y=a!{e@?$KI&u4UsjE9@UkFWrAfFII=mO@Wkv-4C>8 zwUEfr0s*SL283_7t@fGtmh?jdlxh)m7SK80p4n*|22S`kU*TZ1&EEUYlq9jn%i{j3 z(y9wwdF8dWk1i(9m0~LxaKbk&z-Wu$J5oPGzBDm0;j`R%zyMx5ZXdRXYDgg}Va(v# z9&g7cG9+w4AI%9cBP22NWMFMK#vYb9zpPTnZ28zHCy05MTj%7yGW?aRtrHVT>WYfs7K=ji zD9)%=W5o=*{zG%48_9)!bQ`+hzRQALq6J4vFE~!W^tzT?PvPd+I@axJW*V51RD1fr zRQg+yt}`_G-Z+=``_Zf&<4h`Xa@3fdUb`||1m=t!a#dB8C*79!-xcD%AS6h=so?Ra zytLs|=DE^u=I03$s6fk$B@0wTt!;L`h-vTck*1H81C?~)E+Ma|7w zV0Zt&&jHlQk~5A1p>c304T9n!hr|sD7df*St1J5N_X9-Gc>2y9rh{%_sQ0c*Y-%5m z6xr;Sr{^``I8v-ztE}iUl(jKxfE)1urg;sZEYX4&Mg&28wf){cx_^KdUBW!k_=uP+ zU22>)KO~5kcpvi3V5WxssasGUw$;@VRe^1)Oi5bHHraq-m#4=JWfF{6M}IZ*|k z#5L)O-jZ)1r26cH3)jYg$?~l)4fJ5fREhqJ`~5u2A!1p&<4L?jyNT~m+zbdG_bXpP zCXV`%_N<{7OC?GEfX7We*8Rd{A*IACa$P*+6yXdZ`@ zzWKmO;LUK%1ZCSIm~K>m*hT92e6}}_5={h36g}&h)|(tNPGGn`3<(K|A<`kq+2Lpc z751}pa_!H2>2yPN{!yASet$S=|Gb;974WD3xpAvKq5K3Nl*EcNNY9RKkG!ao0H=`e z=jT4-;dsAaU!Mc*$?8>vq9V|lM@C1xX({c3XQ1mCc~s?ju$)PahgiZu?(ZDRhF+G< z@+2WN%AnK0sUZavw!HV)(^Ji#Y8}C2d16LCf41uHE*q4yM+_ix!r0i^3#xt}-Ff0W z5$4TkYk9V?!U*5hnt@dVw2Go+>>2#d_PS>n4>St8Vf*@c>Pj%_Bp9RGeiBuTfhs$8|PTM;@L}o-?C3fls~b(c?3*O9Wn; zi-{jXh{Ww(V^AS$h^{o^X)WsfXq^f#R)A(AmxK4=Gd1sIGPvzg%mpGY3$}92=S4^K zj8Xd;b1ID259IkWAA$#VQ^)^os`H2^(gMA4f_yf4AmM zB!wLqgDSU7J1?M{wcU|Td;iz6o{OFBe#8Bn-E^x!Na^kcHRj{4GJ-yz4`PKb1}*e+ z9i@R*z~OXwoIgnuwLh*^>|b^)O1d6H(zaf*slQka&Y>=@n1k{3 z`4U~jTm?RqNcR21)1VTtLrFm)kbMKC9V>1jxm*`x%dbIOWZ5Ca`W#X6EqQLYWw3uT zqYLq{DuS!Cd2{b?2O9^6q_4hMzEOO%i_;f+16vGU@*dmFxx*(~@76tJ(Y%8mQf^^2 zT~0V#OL{00_BS7_iVz3|I|l~-*H#9XxLTKv?K<_YkgjgeS3(#rl!k3z(3E#^lZ)-M zM(x80>uSm9rPfLiWJ*?OUTpZ_42F7c?FNctN3{e9Tcg2thP#|9&HY=7otR zhHtH}kV#Oa<2nlLo!yLoUVhp4Rq{T zAQ8H4>d3A>ZAG}SwILK5U(&q!+V_#h=`=z29z{khoqK+eRF>drg{L%@A9Y3=xMj4T z9$egnL##-d<1jl=y1Qfum4!_7XWa!o*697K`%#7~y_DO$9$UV7#2!+39;p}hfaV>I ziVkKNa!sgIX9!6K16km=TtdQ6+D^02Ik&w>noPXf}@ LF~U%^oMQe5Kx)w@ literal 0 HcmV?d00001 diff --git a/www/resources/OpenMinTeD_Logo-50x50.png b/www/resources/OpenMinTeD_Logo-50x50.png new file mode 100644 index 0000000000000000000000000000000000000000..f4306af7adb97280f1a10e40590aac039d9948a7 GIT binary patch literal 2614 zcmV-63d!|}P)8AF7*c#7kE(8QD(Lfcpi8Q=tjE0BEITG+%Bn0(o#t$N$LfD4=gdWV}Ma#*8^PS zXBhB3Pxi4h%q(k3h`+4IIkaBVS^lhIW?imMr~B07yl;4ao}}l@tjo;GuA-L%4*~m_ z*F{m^^LsBE!^EF@~6+%kL zZ0}!pmgMoE+r`_!44?}L9Mr!(&_cPtj04}GvWkmzgo-OC3guLnfUO^(2N+n;r zc5P6-itFweuqE2GCkBkZzCMPAhKP)F)QQTSoAX=}shYnA%x4GMBto(*doj;*fMbJ1 zTt|^K4!qyd>q$v(m|5AEe%w{A;!r#8&zE>V2s{gX1ZYZnvgkl&cHoW>GD*({2M0F; ze+A~7*-A6(mNYJD+|2d^uJ@@odmjk7%*;L|sUC)oM-J=x8>T7{eShd(g~shvKQ`(&@g__+5xv+aT8`r9|Zs3{b2FPHky0|TIXE~NgTN%`Tb;1JDdP8#zyBF5$g zPBUguBWzHLLWTI#G_&3$%*@_&*v|{>>iT3a zfKtk_F-NN4(7w}3?fUxq!q+c2@=f@s3DlgJM#TMkG>2&aIECHP2lHdc9>_DQ@Vsw2b+E~MxaRCKPZCm z2tHqtwB8*m1;*R%T&w!~`zw<2g$oz%5Fz7{-X3da1F?FU+5VBiHWQt18$nFbMu0aW zqWkhZzZGC~bhNS~gseyoaBkukJ|F4xCg3mZnzjY_vNI>Z?@}}SMv~xlOvrt}!_oN3 zX4Vr)B~JYR=#`LN(PnvF;EM?;EH|^m+a*>-glzIaE;jnlxKuvjscSIYUq_+J&bB77 zr=*o$5+ZufosrZ!CZw9@`SJvj&hh^IXzc@%UQVHKCtJyZ;#7~QORi%3n%R|+-|2{u znL|TEb>NQ3>n}F5<2@S;?Ye0ib0;lEwxx+WeJfJCX~FN06NtUZ6Pp~^BI#=0rRK5R zQ^1)KGXeTKA*3tr^E`hXcq|FqbLY@+3%IyTn#WotNh>^aoDzP+Asz#+BTATRpgrF z`ISkkSxMA0E0AKj#e2&|YbDWaHba*9G;nrNDJ#wpy9sUcwNq)0Z)uLn*vv)RDEU2>g7(`8^-(m{TZt3ARVX`zmFe?9~} z<3+xECDr1~qgEmKylF6_CwgH|1k0VYISEr}6XwhX`W=iyaqj|2SH}g4l#q!w`9)em z9B%=Yr4EUiw*x*XM8xxftITW;$%6dIoM>CuyRfR`eay^WcXi8wL$?)n+TpVo=ROGhDL1)WB}qe(GvI_-7f zEJ;6Wdl~Bg4 Y0epy8xa~0!Gynhq07*qoM6N<$g1{LD2LJ#7 literal 0 HcmV?d00001 diff --git a/www/resources/OpenMinTeD_Logo-80x60.png b/www/resources/OpenMinTeD_Logo-80x60.png new file mode 100644 index 0000000000000000000000000000000000000000..c561ef2eb371f5ef87c2046eeffc08e6df52c066 GIT binary patch literal 3099 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 literal 0 HcmV?d00001 diff --git a/www/resources/OpenMinTeD_Logo-90x90.png b/www/resources/OpenMinTeD_Logo-90x90.png new file mode 100644 index 0000000000000000000000000000000000000000..7830b33d93950267f83033d5714dab316b93cce2 GIT binary patch literal 4364 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/resources/fonts/bootstrap/glyphicons-halflings-regular.ttf b/www/resources/fonts/bootstrap/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b GIT binary patch literal 45404 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 G`u_lkUM?>H literal 0 HcmV?d00001 diff --git a/www/resources/fonts/bootstrap/glyphicons-halflings-regular.woff2 b/www/resources/fonts/bootstrap/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0 GIT binary patch literal 18028 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 literal 0 HcmV?d00001 diff --git a/www/resources/images/OpenAIRE_Logo-120x120.png b/www/resources/images/OpenAIRE_Logo-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..aa66f655c69d6f19e5fc5b47f51bf339de5a7e87 GIT binary patch literal 4287 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 literal 0 HcmV?d00001 diff --git a/www/resources/images/OpenAIRE_Logo-80x60.png b/www/resources/images/OpenAIRE_Logo-80x60.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6bdbc619c5717d251fb8a3ecbb86f38d2e543d GIT binary patch literal 1925 zcmV;02YUF4P) zhW{D_`jnRI_W}4eaFR)x!zy6*i~<|CSDD;q5tujUSl=yeHdQX<0P9%b^S}kbSAq5h zx&R}<6EiRT)H+jmwE%iAnZh-5+u1%?rXYwcG3(u9;^4O4+SUF^$TFl%cf&_W{>Wq#WTm6pxt>fw?0F z<9s%hF9E;JHHbLEyBSaug$FQsdMCokbhP`P$uEndFQM@#xIwfsXJNr2!AXvaN9kvSC%@i>DusZ9zed{*AT9f^F@U z*3(sBMrXsYT+Gx09pNnoel~$3)&cJVL*d+X5-{_lX^U1P$9?i3A;~x5lG;LyB3+&Gfpd-BRHUV!CcocY8Y57{i@(bP^ z%eH@P+1C91xp5G{dpk8h`P0B&W86d6PN%EAK9#w1`2d5%qj_zcM(_aErVh{%o&}r} zPCQNJzreLh%co5~TBfz-J{IC@;buh=2jn;SZt2EmGsgvZMMV1ItR`x{TUrOq0DjqI5vzcceYf<$ zgx2XX+_wz85TPcNmNhb#vRf$vcLDQ(sg|(oyEj1q7Ff28-6p6GD~2}qvAgg61@HXz z;s=wcJI+!rYVdwO4|t(9?gkbB3ockX*tK@qbHA|*VxE0ifnY?V28Y>Q*}lKTs?Xh`KobQXT-KHWFqz!kg0q?%M^N5~22N<^YwJn}D4WYInDQ_1zMYu9cRr z=V5_R-!f_>mpQ^aAxG=$0B(y=dpyZH;{r6j5wj37*pVZ(1 zM*!Ol*1m5jEl*9l4b9$-`Ie#HMn`z(q-cOA8o~qkW*QA>3ZT+*JLV7lUUY=_qZF*~ z2H-!2@a|Gtu1*7>HNj5241C&9eLe6ErRA#=tn=f*BbeP#2!KsW%h_qUfR%tHm|Qd( zE3W{Hm6p%MtmkatPU0O1DWFqn`C%&qoC<6v#>MPVJ_x5o{|uLjZzwIdg=HQ={i#72 z_#7~o(RXxlS$ zo3p4e@#n6N@K%N{mxrtd&QMzFtSU_9y>NI1__2)PEmT_GoAo!A+Jo!xjN}2}s+9Zi z1ofvA+ww5^)L*PS!s`a^2QE*z=oLV((sE6nkt(w%|KZ!=E2-aeZgzS17O(_(RB1Wf z3ZXui-%JQM0nTIeCz@ta|K*Hg*rwe;ANBWh>#3i|_-Rgvo0b0qY@QUiSO9ZH00000 LNkvXXu0mjfu``x9 literal 0 HcmV?d00001 diff --git a/www/resources/images/edugain.png b/www/resources/images/edugain.png new file mode 100644 index 0000000000000000000000000000000000000000..552ed85eef482635a0da682cf5d0d4a7dbddbff6 GIT binary patch literal 4807 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 Q=dUFzb6c|-6R)^`0Z;G6XaE2J literal 0 HcmV?d00001 diff --git a/www/resources/images/facebook.jpg b/www/resources/images/facebook.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b37d9de6709b419237fc9916f6ddf8e8091179e8 GIT binary patch literal 9553 zcmeHL2UL^Wvfiom5}KeM2mu8_>AfX15u|s-LV$n~LLwl&s??*>l`2IA8%j|S0Y$_D zA}UxwP~m_aQA7nq%F_~yYIer&;0+|d-lvXvu9?{4||2)O&aXIkWKUh3ld6S+1hU~?**-N zaq~$92M5aqE6Y*+z2y}(H8mMNl$16=hz$Xueu2c04SoR<-#i$R0zCZ5v_LY|56kdK zbf@kK)Wt!O&ZR)1eRsQLt$qSpSo}4VLSYnu={6wHmh>auB^?LYhtf#$wxj^+9)AxK z1eahK)3glzNyI>^zde=e`>l%BJE?)xfSptt*3eE3EA2$~^P~m`tYhLWEVNAh0s@JC z9wbvET^!^=j!gE{QdKZ8)KuT7rlG8)uc&COq;IICrfF=TsjR4AWT2|9{LR*g>amAH z@(cWC>-oc0eOX&ZD^O_A&PF7EauCULqd%2`Wu~k}UOpC;W&O?DdM+P}>aw=-P%!e0 zgZ=5CzloskVX)uZ7Fv97e3Bp3?fy_()5pMCX0rm%Cg}5lA%GwffoA6d0P_L>L3aSe zIssT?Mehas0Rqk-Xhfh82m}g+L?DnTG>SoJRx}GlXjWD>c6N3)R!$~yGl=&)!4OC! z8ja>;W##1K=H%uRU}yv|Og(09;+>zq+x&^4HvL441s~sTfl4R+lOL; z!G8Q%U|~hD!Qf~V5(Y{CqycC+5(Pu>0)RlVAQ1qLn6t8mQdfX0v0xPWp`6qR$^t9g z#Py5#QU!%D5Eg;rgc3x}Z2^OftdRF@ZTLF*j}ZrON)pO} zvBmCt?F1x?3`&}f?D?R=LVNunn6;a@0<8!GQk(bz4918AigYdm7_feiQLI!Ti0j)B zce}-=6<>SsVW0@hOQSypoCqja3<3%X7XNPWhr_?Qf8z?UJop@We9Vsy>N=lJYS97p zMLYq3vOQhSUt1Q1jTrfI<*`h7t%|>v*s;|ykp9WV(I}mYML?G7&S$lqfja^QCmA}f z@a?w-?<_(gx^}(Y=KPv^Vxpa)LpPrH`0z4jA&fhsZRD1Hc)^BLh6b_yN#*o-(?Srk zx^<-2bl05N=jjw))OjHUTuK)hx5Cqy@|9DKDYp(Ugun{LN}I56szYBfHL7pJ#ZuNU z1R=U!zums`G&7pzGW)1i@02ccoN2mD#JZN}9t|a*f*=@gD>K~diD=O%fZWkF{NY{9 zf-PaM_XM4nbl3y{%aNXGn|hb+x{J>S{6HZC?st_5PAu@kSpJ0BbHA(f;}RGiT@Y5V z?M&+mYY6@eb)+lob1Hx>jEP6L+ny^0yE?xS^7_km09H;nrY@ukR@QP)UA zB8hYH1?uOse^$=(Y$iv#YSS~J73PVdW!@9!XSV={Ja%WKx77@ivc4%Uvv@PSK+jmh zZC*~k9XbJV$mQAyz@*1#g2ruQAhgyiGSo#7w}>)BBeg@<5g45os4~(R(XW9IQ4+KgR*!cY46nv$|-y_p~aHMTFOZ_D9=GLlMu-b?M+78A_q*Lw7`PO(#c+@&+?c5Qh zB<`+UvNiSy#H;(H8P|mgYRA?)WdzCuBZAJa-BTxn&MTH_wC+nTtO|Awm)cYNV-k5v zgpitjGx=e9`^Y)TlPs*sP2u zF?nvpehe9v^-QLqDW$Xigxw`R2QhNbXk_X0TTdy_^we?uzUtY*0xR1#vWUFLTeT^@ zF6yG`z}o|AdH%IfRLNa_j>APCFk2{XeGf%(vKDo&x%*m-$+fZp)**@IYA^kE@n8f? z`^p&!UFglKJE>#j_^&a270qlI_*}!7VE9G7gmfO%rmgb0+5MqLhm!K05ze>4sDx&y zUD#vHj!sri4BbQrr;IT)@A@!E6;=Cr;A!9VlI=zS zpQgd?tu2tXlcGeXl;HoWFe-sr7sOm$jM?(|(A~&xg&KhkaU4X0ZtL$%Ws)IV9wCXp z3uA#Fy}^}ozArB7v8OI9LGUYEf|R-evGwl#Z2thQgSKmL zseOMGCWiw=x(!aXzjQIS%W11hE>q4TO>2GuvmhGaW5k+x`dQv1reSgJ&D|9>>o@$$ zA>iqEVAR*yRY>SYTqSXyIiShWcSid3iaJLddwKt}B`3E-{;V4zf5qWhBte5uGHo(( zV-A@P{{+~#&Vi%x@N1`?%2KbYeRBL#!2v3`HpmLW+(e7k9a^I`P{~S_QzEnyU#D6 z)vgO}>^PeDY1eEl4Y$R-X}=Q5ROyf7SQtUCDO0bqx*tx%FgUHHF>lp>!rdFIYGi)b0zV1 z-+7j=$n=!c7iF2tF7A!l{wmkgN>?9L7}|qYAm@7JlxF6XGG}u3%*~DwPPc0Tj3S61 z5SH_R@;t7%57i#&;T;&S;8vFcl_K>f=L$tAw@%?}dxxPqUp5q0*m~=+TJR)$Lc>%}h^Sh=@X9;%4RW?z?mi9=^VvP|KSI#J+!P&<&&nDXMJwB!Xwa{cANN#st$ zaGo2QlC@bQ=CI4DDqQd+GqWDuM~~jvC3)<1x!IJJ`$ayRkB%q8r7E{1Nza_I zZOrH{H_D83IJLcX)Um`&@ASj-p8vOw`gY9yw@1M6;&i}e4NK>L_)8lro3bK|Loz^g zn&T;r4jN&+x9UuM5B2;~rR^DX`)yjU1mGp0*#N6bWzxX4hpW}u@1D82b|P4psXb_{Oiw0KL_s0s4fxuRrUNKC%fI&?ieAqsd|dbS^u?5$U= zZskmcOJYG^CUPTiNo}%>=l)%LU$v`F2THh2nk9A^b)%=eFr_zHxY;VMW%O~!C;p1r zo!p}h!n#|x<@Q`h<0Lf_!&gXo)dVECW>mXsUN6r%=hobO;$S!O4bt7ePOR`?lufks z)yy4j@-GFtuB8uUSLbW>xCuB*r0Lg#66aP)oPp$_;}^GT^{nRJcerBU@twzH;b?us z8FsPz*0X!r%Ge&?DX3JK-J38efG;ZkisE@C%}{d|4V+HsKm03YfYPv`Hm+uUA`86c zxlnI&Z-^_EV@|q%^l>Zq%Ja_K3UYhIuRFZqsIGRE)Y#QX3<~n`OyF`lE7x(?H+A6j z$GD!J^7PfJ+bim|RjUl+&pck??Nzgh_9(1*6mr48iZ`+dL|-qvcNB4^xhdOF8&`9~ zn75gj?QB)37x8)Gnmn!9IDfM9&KuQVyEe<8eJpRW{z|oTqe|7xUH5;9xZEE^* zD7#GF^c$WAGA~O0{P2-c$wc8@N&NgfB_D`fNo=9)wE(wdaB9C(~TU`b}p}6Hb>+>kISrWEoZQov73vK zm%)O;G^?t{v8~7EMrvw?t1QX4oVn&oc71tYp!QDDI_eRE?F+e>6IZsuAQ$k%p94`F z#$U1jBkFT=pA=%g0=6xI_dD>@lt+Jl%sXZG=3+tC@w5H8}q)ZUThpHm?7Qd!HPsBq?ytxM_S}SQx4Y3smFt(mI4~2}$Ct z`N3}1E;r!9vBNMoR$eS277i1V&t`>7=7UGaS9KuZrNWz@=CS7Ure9}4nP(Truc_CM zrHS~$2I}7*Mpb&KG_h^c7ROGsYwTw;kg|(Og@NbOa_no^k*nE0bsxgAw^i<|EWDZA zlKy-;tn0S0j(H4tMBLcOA1CQ<)Xkqwp@Uc@Y0d~j(3Zn=&`dz)gB*jDd@K>h*{}VZ zD;>Z;<1iX)f?i$L2nW-2NE8{@oqBUa@g$lT;OO2 z{>`lvQ60~bD7bWy=K9~|&Pa@7+i~pZ5Pl5_+M$ijXHAjmUR%y>b0m04_FEFZT+F|m z7n5JOf9Q*p)PN?Q6_J{B+<qoGLtw8@`X z+gzJQFm8j@KT{E5@5vW@A?x}^O^wVez0%KZ;JEE7$ zuCka|;q-T3T)o?R^&ES~Ywl&$L=<7M9aBR3y13o_?$&@6eZHa!PqCm9Np^N-GBPsK z4Zq6dX4*5!#h9<8q~w^l;2g=un{Isj-y2-5#3?#)7siFUZd;RJx2uFWH-G#l_(`V^ zM7ll;IjE|Zjjunw%g1WS#s1;r!rN7+PL<=+pn$eST59AGg{IvUMhXx=3WZcbg z4cL(2igly!X!cvnsvED_c*nILI|TGUTMbMWULV0HbVl#^yzSdK&t4CQp=xA#W$Au~L+uO>j%uqV>j|r#6VMBNb`_B*7o%8oUR>`ohyf>w0 yFQ8gD>U&b!2jAUeZT&d9vZ|=~EFE}2(YVasY}*@O{qg&%~g79!wBiB4mtmPLh*A58`V0wM|` zARt1Z(Tb+U5a5c4fQYgZngTMiEJ*tSyRfdX?!xZg&V9_?x$pUQMY5f_d+t5=cYf!* z`|dmEzQ-`5n9+>0GXv6v**b<{W-<)p;xaTAgZ?n+TtNq2Kn&?Y2>uX43~9X&IwzM# zM#U#DSafIKwCTpkS7#VfKlE$37rEgAf84%4>1iiU63rJIdq+!llHs1v3}2e zAC_qz7#Ks(Yx<7DOY7&Mi`#-4 ztb?Yp7*`g5Fap~jUAXuTUS}a&eP!NmMXVp9Ti1!LH!KFdvtF%!3GWTeA>O=2JYX~U67StVi~VC~zoEe#bd#*}VzHW2J5YZ^2{I{~(ZjOz zp%@M<>m&A9_Gz>)Rvby*ow*{QI_`}(Rj}6-C0kbBCh@D&KSTP8Y+L-AQ`;r9y-?q3 z9vIu5v#pwN*kt^2gXzH?Pazw=&hq%tL|y5TBxO>tLIE*rPKHTfUA-_)=fg1aDGYNh zkzo?AG0YSt!}vU++5^yCfw>64Kn9URGeSfApj8d!85bBYfQIvty&pd&{&>)28gs9# z%(rm&o}^<-m)FF&xp%>RFyaQyhR#WI?2KhiPm*|AqMGPfS| z^per{-BCYz!NP`y-_8YF%;x_TM`uHWJ8-ejpCfr*lczr8V@5hIj@ZXp+pNIgC+aHr<~;L|S41QA$G3y}5lUZM+LEPGK8EkVNg{b} z{;Q9rf5-EGgYO^bRT@*9^RvVA9^c;4_|LsRCD7d2!K+L8_!B|FoIP^(o6syiW+Y=c z+e|1338+o?c0-9Cv(Ub&)6gF~cO~<=B>TC~DXt}u_c&)wzKx?XoV`4>;yne5IFZ42 zCWCXP?5D-3H8r%*{80TeZ4YNrPkN1Tzd9r1D;hJLKF;s@%G@wT+>!y>FTbx$@Yfic zt9%J3J~JI%w3u_&fHlxSu6m~PgT5;7JH9Ww<2aGgD3i`7G5l304<;Y^}WBu~~V9#-}v3`2umzF*49h2a^P-xF5t&e|w2A>n*7~tBFuH*{t=El!H|zua(h$={|m*8%s(>nf@y{^_lif`Yk^!v43^Jwy(2WQn$13(!?*3T_?Uo#fQ-y2q;q1BJX{`Lfpk7skkKa!nWw};8;7j8IXSTnfyB+~gmvSP(J2<`#zi6d m3s+FZs0tJ@N**4;=q3(*lQ6@_2ZWm(9KbvR90EK7-hTm~hJs%J literal 0 HcmV?d00001 diff --git a/www/resources/images/google.jpg b/www/resources/images/google.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7873e85b17645e41bc76d8a12b23c437e4e35580 GIT binary patch literal 23652 zcmeEugMVGk_Vf6BNH1lS3+Ym3oCm*;!mBu#DrF+e8d`T za*T40B4(CWlHSf{D&F#{Cf+tCT&BbV{Di!o+@5xhc4n?dgr0V`_AcC>e8fMMa|8P? zFat5+PZn1jK4PI4tAv_zii9E#&Sr#c^el8Hj7&^~?CkVRtZeM;Otgf|j7-c7jKIcD z$HdCb#?H;mLHL`9f!3T&&AF9D#edrZj`)aw2j$`6LGQsr@8E2~z{JJH^`e8BnGVQ7 z=i+7WYUD|0??Up222nE?6K5+&S1Sj5!WWH3#tv?-e8fOce}!P@_@~tEPU;h4A#V)E|j%EzXW-bnH&L(C+c9IuiM{W^kGb2|AXH^FW+ds0X zXzAeU;9}|ENGPJhPDrU?WpC=>;X?J3Urvr&%HGA*$lk;KgETh{b{`@;4=Wf_3ZFuW}6-xm502v|KY-9O6~ zIQX;h&Fq2I?hGvJAC~~~pT!C=?E`Kf5HJ8bI2a`CD*yoh6ab**0sus!003R%ADe(+ z02t^C0k2>XU|?Vn5a3{7;1G}yF9Zn<2?ZobXlNK%SXdZn_@9LELP&oS2pBjxBqSs} zG&DR40z3i=+RF?Y^3QqXUpJ)Rw?Ae6(fKg|K!yedfC9ikkO82`AYjNKKZXELz`YOj z3FNO+0RROJ0SUAQ3Idz~177|j2uLt+C=gI2000665*Pu>-Y-nUS2oM0+izZNDn!u5X2$_VG=23{5kr)LPjhq4#3L5&A zol!|xAcTz*8%0!HlF&$5cY_KCOwjWe-l6~iU{IitFZO=B1Aj&^SVfAzroLP$AjL$*@jVnVgzcvd){loj3wLr zdDTFb0k88XX34r2%?2=mPTO_gN6W{`X!PSu%i=RJ@0nyF2oocbpqyV-Ws>t^WXQNroDIRorq5%Hx$4pw^D`@{-|C{|8 z0M<7hZ9Kj7pNfE*zffrBUg&lKs6SIQ8`s+h008hGrrfgLIn_gkpj!l1K63(}db!^= zX^!DRYZiFaIS|%t&ZwII(1}K^bZ7e+p|C=|1%JP?PmS$MOm8Z z?P&mS`>j~KhaCd_Yy*kubS=oPktaGx1#StDys_k9a6x5V}gikbGEDVhX<*)l3j&;qsRN-m;iZnyuIGZ zH2`oU7?)6+Zn*!d3I(l2-L>gf5P)Or76e^&w~fK~-}t~1M|HUfW;@{lVCZkXdzZOW zyDO;w(<;C3)7a6{w5^1hJF7Fco4edt1d2ZJtn&KK+?QfsP%5GMA2MIwCu#U3*Vrqw zUDSD_5@jjAaPad!1$^ulk&I~w_@@9!_IgZeS$XGqjmf9&gyVQWMe zH~mpI)7M#@XLxOVqDe=m0RV1)XARglx~nZ@g8$G1a(APXS17&M9M|hF&H{NL1LhOE zXXj@iU{I-*v)fT*SXekQiCtt%Rm1^2+CuHN6&lr z2SEP;vZjblw-W!?a{-JhOL|`Kp&bWJEf=!tZs+fYAbqTvr*t1qzzmjBYS3l|e;4*2 zhk{7U**6U+_rFU3EZ9wKmltDS*12-Ye)I5Q>gP0kte%XF=U!19dSu#q{nOWfm_h9I zw{trSyMOit5IsFVQ3Z7dya<5`r&i9S`dhMMRf)b*Ki&GL5I}y#--1v^EdXDDizY{; z#>U(Er&8ci)0jptkh>9mZM37+b?@vsz!D&ND2q@i<;o&C^U-v$(vM z}=YA8%y7bT|%OeBe8xIbzSt8xrcOSJ;yIx%5 zkixkeHp;ifb<&5|QAF1$w|>WB_=ni9JD6)ioqVdl)#YS00PJ;`jmms>-^U3P$4fWg z=jX4tpC+q-Zf_nCGHbO!hM`-8*yNzTjhUPTRb@M{rY>b+dx|edvHPdYvY51z&0>=jYq`IcdNGtq0y9 zNa%Z7Gsv9)EDkihU^lNgnkgR%B{2yQ{)@&pi~BqIX_{Cc(vpS-wet@EROtGt8%3=H+Piv9pI0Mk8WcYOQRXw>5%>?kBfe_*0jP7X7FN0Usa8AV zyF#%URawja$@HMV^JVvifOh%)-Ka=3rQ?kL(WBS0UqGJwy1?mmUVQm#NW77=H76N~ zGa~}RrlfjK%YJcsi}S8TtRw2LJerJ~`FM$X#$LJ8@E1*b_^$C8K>S)&op!ClYiG)d z#`fz%#4Ks?_6RTEU?r7-5e#zf>BSCT!@Gf>wexU-T|%Un|BgPPgAQfIs5)C`Eab8@ zGm5J9eoS1az0Hs!{FgshNizkiaS0aWA)|CzUE&fZ2=;{L+HpdC%E-*MRVca!lv6yYjN9t ze*X5@+^2&|OqY&~H!kjy*ufHI+-uVyoSRt>P@~5>ssKWId(K5^F_)V3UUihq!;OKH z0Z_0RcHMBc_->xo%*nSS_C>2lJLFWY-^R(Y^%J8lsDr0)+toT!jU-3MxQbi5ZkBS# zGx$)Ay2^7(t7Rt7@}r79Ah)#fwmOP1>!xN+1k|%^$5g4hd>{iOozaCa<=!#DI=7E$ zVLQdFH`GuD6Pq=7K(mwN9Kwb$^s3`%c+ONvgep?}1XMog5B+SPV@~R=qZx*$IL( zc+n>7x~J4P%|;A7J7s#3n3;L)+<-I2z5j-pj_w1@S>QpZQdkJ0?b|ryaEmmMh64x+ z^~;7yhZ|93Oq%3;;mvnYln9ViZ!nbKf2<9cmjcyu@!$X@?qUGVbASJE#^yze+$^Wd zCGFg4Z7$yqz2uug!$)oOWnAh;n3A$QF+__d>jS0W7UYC6J?Z%eln-zSa!sTlOJ>7~ zasw*$QNkS~a%>pND6|R4cc1s*aV2}Tm5#~7l6Xb#)Z|=ixh>y+MD@|z(tO$@|5_+H%T%#F%9iKw0(qzom9<5rV!s(GfYGtaCaYB?H5vfnG|h_#uW_MVud{% zIWtvK1TQU+(WY;;z!|vXjPEel9U~XApquR?hz!J1^4AhoQwR7s){$XUBv;@;$78le z`12%rlMLd20Dd0opuZ0F9O6==d~4QMQFV>ak@YV;{&8a45>3-)?*aMVRb}N}jm(ZrvpB{U~W^Ajr(=7$jJ{j31ioM&&n< z=PhsR2+A@rJtUB#)&j|XtyduMtm=cJvT)W_$1&B*z^|=vaN+QyfIdzenyM_&V^}B= zeKjxD%mJtNjz$J<+t)Rt`q`(5X2TKXU8n8e)6^ySUAG=z9U_A%MH0;@t0?Mo0hS7l zZR(wD>!;exmn+sWW6F`;TJ z&JT(lSyNFr~zy(!QG<98H$4UpX;p~kr**d37ldqY^Sx1)o5YyEvj z5+rB2I~xXyMEiJs9OcWFs(?KD+>L7Y7g1&cKww6V;zrE4@L8fGT~tQ3qwm`!4tBG4 zq8!THz){&u;b_}{qb1%9mQy6W%W%L#c!X1egj^7pa^=|}WmW0p9OZlhqY*OLD`ZBx zP)0O#RfUNKO&Kx9SJ#xU;G8w0^eI=Pt*_A;NVB|)sC0+gc34-9^8A+X=?MYdJ+ z?nTKF5=nG8VoC+>^>dZp!1}jQTq&p#(GG2SWsUQ5xIkH1Lp)X7dn2_vPGLZrgXV%D z+H`}G;$E0~H!G|J&$`Go484~I@S~Gx8^h4701LBFA3&0&90@^Y#%O8~k08iq=Jv?s zB04M8p3?>Z`d`Z^U0h%41_`>sI~6aYW`M)S>w8YzQg~mDE-d-@I-h}xaSa_c1aV6R zJhle5gURW-Nd@tz7H#h5Ff8*$plV&oDl$^1$FJhjE$~A>X~#Ll#Op}W#nIasNs*=N z8J9NKL%k@nX<@6fwQzwxSWFY~k>(SlUhDPt=WmeK#0So?_38m)a=O9Xs1SD1evHLBK^9MsBdOuYZw< zf9~#gi6hhE1a_+O>dHK3B=GwR?N}x5K8yjD^uvJ02ucrQ%5`wNeZlR*u#6lr^Nx6jSf8B<-VU;iH)kDX{hvPOuNvHQ6M%%EGfT#SWcSriCI3a z2tHpYu{K3b4*~s^>ydF1Z$3Y<{zMhxjsBj1Uui9+#KMqNVH=tuWu^fQ=^;ts)G7DD zW?2sXnZN8d2x;R8@jbW<65<9mxI#j}^|A6ww9C-1CBa2kR3jnh02X`+nV54zm7-Fb zY;$n}XsV+dEnp_I0o245wKm9YP9Xs=gp&@3)fubZHuG*U6B;nTR%neiusR&$tGO6z zCYgp+Qlsxi>O1Squ$sg7N!PMXPTq}BH}&20Wv&}>YN5XE)wr@X+U^WK$0@;$3^tSf zL1h>Vb1@y(V9-#Uu@phQjzrvQ)s-}I-($^<y|LwTOASSQbgqai)O&-vL5luJ%AFFUiQVq0|taKLIEw4tf0qDrxfiJ73N zsyVP+&mtK{S$Q{4;R1c)Q3I*L(|%VR}K%aOt`Hg?a^R7x#ivnn>aITRi8oGmDaS!z#m z!*b}+58stGqbI!ibu#`AUybRb@Y_3j2TB?h`w?2>5e$hl1JJUX5WP|&m#QfrNe!aK z)NqmQ6UCOcIh`aOXJP~5AzI-$rwhW5Xm=YzFx?NnK(sgQ;XY0U*86hLAMbKx+HLPE z!Ti}^Xt8|!$fB8n$p(*u0OFUH4WJmFdH=n;=PmSjYPozu;n42XI{z$BqjokVa}c}J zr;0uk#G7&4K?{5j?5LkqFJ8C@q@701H>u(857$!;z7WiJuzLD-PBu}bakSsZ@@moM z9E>bLD>z-?_g>V5IbWSLn0Re%n{05w+p(*L?m3on*!0qPy@|8@-UW(FE#zb+Yd7-2 z?S0-7BwsPUSMYcW(WQZK23+KU$V$l4V9qeg@?K9qvc1~!$R3)+@qsWiA?(NFZZz|q2#3?ID!)DzH ztY%oW&3!IH!wYdz+>JJ!Uyk59<)3UcGWO_hNXd%mx8twF_R>k`%n?gFq?xErX_#waM;Wp z|IWirI=wa`{ESAqT{f#A*0?poSETgwSa*9+$7 z!v>aKV1sBga&Z1OCefW|q7>S-ygg2Hc_ZOti4I@LIq*zn*m(q*RE)DCup_$vKkcygp9V>DuL6zFY>M_QJ&&9#+ zPW}lc?Jez{X&fflsZQBnYRxbaVjvhd?9xX~ck;xPTzh()mMq!rFNB+RO_n%5MRn;F zcfgugimD~hS-0BVg~blI>~o#jAgYkFQFwklg8TqIigs2?-{by;!4hp~F?`d+HWIxT z#sSIiYlQyJZlw9qtM?()ZHeVAXtC1U(gjSfHH7%G)}?ywk;C{unAx$*D7mT+i`mh& zQ*9&q?WeTbeGaW$MQ}j#m+57!A3f;2g@ZTYHQg&IVN>2;&^blK4?Z4oSy@5!pvAx4 zUUK)$H!A_bwY4L*#M_!TZhhZ*R-dpcYud^;i3!4Zz8)9)P_R&?f(qv`P0KE`#|(Bq z`Jpv;TK%I}m$r@{(SCjQ!;JSvml@7D-f{L30`442<6!uvm0)Sy9D8?kt@~t~M{^{} zch_|l#tBoLuYv=q)R5@|YAAF|vDE_jTNTdx_|sH9@z-nez7~9Txruq`;k%U28F<3uCxb);rp@CX6(;3S%!F$7w2eOcQ* z#JO+V5fOVpg?_H4`j096^=|{Q=iiMa+}|)3n%nEb;8~&tsxI3s-7HjDjY7a#Z(M0M z`mTlrYsf;TaqFqoOj`A|viMsTlwGLmVR*}XPnJ{k;CysXdmoqvf!9i()=4OED4xMa zpZ}E%HOmlUa}ea<6Q?#2&|KDm3zw_?fEg&AU!@ z#L4I?>lkcMdgj&0X8r%p{Z0ItxgSxAix$9uK%I!PkeP@2fz_(3yj4ZHHU5<5|OagCmD9|tOxXY*g{XPecUpn%jG!(^L&O(dNyUoqWW?b?C%17QAeu9bkR zydUdF^33`dza5Dkja+jm1=L0)^~L+$25*H4(vp%cD{bKjGVl}>ebt5HVctX)gAE$P z^UX6s*7RY7>F(TXs?>{VvcKx^Q*e9l$I*Lv9fl{_GBf7xy3FIV5&`~-#JSIgJx=Of z7_V>5B2%&Smy#x&=>LqAQb1vId z&|+5xHP)TmWG#M0zxK>KES=K2X8~d$`H=#$RwKu6qXu?v4_hIzvzGkb)G#e=-@z$~+5hJl-Zm?^30e zx^Y4iOHUbNDr1ELt1_6Po!TtFLBU9#CF^gq%~*7+{}}Q*^UD;a3fl;Ab%b5z8LX^S zdktrr^5uqJu+8w>DhB`eM(WyE-N7T`YSy$Q(=Ap#`u|0Cw$bfvc zbaBx&+qJI16N@HAsahUlt*Yn6g^3Z6IrZ>1g!bv^D|T`7#lRY+met5p8>*M`6Wx1H z5r|cOskneA5JDTCp zrT1LNl$pm%e*m28P$aC_Vdf$9HL*vIQ|vkMwTZDlXx{~;rGq;)l?U3<(hj0^koTyq z+`}QX?Ts@k*hZRu+6bmv4GBI9)p90PzDgeW0Vq)GViiMK*m;jPFS?lgiYd5~NJl#1 zGjoM(M%{#3M~jaR|9sEP*|8!y{+I*>|HU?UzQSfG5(ttQ9kFUApXp%G+HHj8ek2Za zy1^|@+e-LXEmpZS#CQ|Z{@U<27qVvZ9bYX8NTWN-WPrvbe2+^tjb2rxK`1XnDl+%b ziO6qYUVzwr(1&9-+8qUxhF1SbOM|h_Tj8QpaXPAbsX-Q<5 z>p@$aI<2rD)xT!YzN{x0FWmD=$oArX-@PPZ`~fSs2WVR_C+G z?lA&#<|1xX#@cUPOuLc~8{Cw9$ayf@Skm0w0P@ncn!4>GuIjkiX;V&A8#?8!h;>YY zy@@s~(o!Nx_zmCBbTLp-`A?ve>`-XhJQO>3Lpu;DG*@NqK9vN2n0q>{u8}EgVM3I$ z3PE8fX!*$9*U4T@X5)k^#rhQVHJ>arFmYxSx7WBr7OyD! z+OK z2~7}Qj(-X7+)<>qoCQpOHH$vnPCKE#X+z&477TsiT5|IoNlZ?ICdFYzddjg5<0%EL zS}7cDWLB6WV5RD{28YmeragOFQi?0gmvNAKY01z6qgKX|2=-zeZc6>!_KLEH+ku3~t)_NppHe}6I+5@PAcQG#6 zvs-vfqV)@V$6acfC$v+W;cFBK1L72J)LhZq>vT3!9;e z?0q~7XqqJr?A%c5*DCnYA1|db$oh2yH#MIkR+%QpWrTU8s(*dd1Of&kKm_~|oQ^(f2Up(; zBJ^^M=092>Ho9L&yEF`A)nQ2n|~q1}_Lf;xCrTbU=xJ=^CQ6^w__Rf8%Iz)>9mQtn?^ zBP1ukwZ4t_q(rr}Ks9y-yTwf{RY-kMo~#_xb0vQBN;H@o{}Z%I4U1Z4i~AP>y_mtQ zHKnQX1}JuK8b~WxllZl(T89utoKtXc8FU3*zJ*w(#M6{@9D;bgb3IACS!;FSvTC^d zB#BQ~J>yA?LPf7R3&uJwcOpLX!eez4QA0-h=8UG9I3C@D_f^E}d&m2aiqS;w^`KzD z?8$<%eH(@nzpvN58IEyRM6u=|{3s&uMd+RSP1{eeR;wvB7dava zZ{WVgf2*a5+IMLcY(nRyjj=c&ByW24aXtk{?u2WbFX=mYMTDqi3Pf%+=vm(2#Fm#k z2ZDocaH2jkA!ofKis>-z!r=4ulpJRhSQc!k-8An^k8HetJM+6ar6}L7NvZNha~06` z?<^MLq!`vT?MeiQN$of1_IMxKON%qBbNJ<{8lqXQEZlDc+ZI$S4($wPPmdfuZghmHd(8)pyQ3lk6E9vunRH-I6n}OcBHt4Kv8ZpwEw;3 z_D%K6jvATf2$D}1@B8-rz3m*$Vc{^8(T^y9gR<}g_>K=}o*z8PWkkyDBNpEm>!g#; zSV)-e`DtR#rbnV>z!By@fb4f}lY?PtZU6$W77%y#U`{7Y09*ANQg-6@%r{%eojse(X2}tm zUL;P3Yg=61woBHinUCZPA8InsugRTn=Hd?Y61-U5S>it(T=I6}hH=znmnB7|2%TY& zpr;fik4(d(rYV2EfE8VC6HVB8G=M`fA6lEpW@OVww#Q=bA5$6sy;L6P=6eFTTNi{I z<8MMPUfy*`KLb_o4@A-NH!eW|Mah}h*_sO%05Ci|BNdma9z+R z6bcoqNSf0{-K+9Kz%ik;nOH?g>j(}#j;Jm;6}XNrZfpDYXKL0}Zob{eX(ql$_fW>O zs8Q~ASx{ZD=ux_R_*uj(vXO*(dZ};qi$+jh2`n6iEKra$7bgsT1!WR?o!-{Pn818y za;4HYnqw|lS%qrO(&%m6tw#t*5NtStB`j2RBk}3k|JioIiG(fR^$hk^VvSR>8g`M# zx3+kp21I%~&FJgaEXcomtjW^tUZP^lT1o_0yh3b`?ZOWQ4`C_tLyp+O>>E1VqD%!L z(=e@7K-qI`hXerfHNWI*2lKSJYaw$)No;o?A?s7~kQcAfeh;$XtVs|<2~U>z5bGt{ z*sy6SGn~LraA?HM2P))*%YRFcOzv!HuemASUu+fyChAHlb~9O0`vv@;ZH zHW{4ihLCPo7f&NMPfm|8hBEi2mf%>w@-W&hAnjuyl)Q`|dBZk0PH9eutO#7Bs+ zcp>5Z=>uA2LMEo1l8l(7lw|zJFWZvca`_kyx0EROO*uy*-W~Jz$vwNbHUND9vTNB$ znx#rKI^$SAB*1eD=|k0lnx<(dA^75*up6zJ7k`xtv14THG`YxG=TZWkt{< zP#~p~>b#?%Oa;{zot(~>qLMc}X5-VJhXJHx2HX#uf7ltf4 zN9ZKifw0S>zrI2(;VSFA+N{jgtjVQ->kT6d_~_j3owqy4^V@r6OlMGLSCRltW$8qZg+qYO z0~Qs}q#kUvQYPE_V3H+Z!Go(4d+Y?(Zk?dWLwZ+o3!elD1-A}^50}Z+7i4V`m;Qc1 zjI97;PFn5x2cWNH_glpyDD*5m5JNIxVE zCBfbrPO2$*R+AqunI-=KT_=;~ObJtJbcY&jMmEzt%vW`a zRE;;=`7!t{Ci%Cp2~P21U3*_k*u<;F2buv2Xmv~Hfk(fnUmsNeezC9`dcK?yXIcRB zss{(@i=j*;jUbl%eTnLoEJ0)c9KJ%L84*0W_K_8TZ_D#69&$F7c1eY5^)+G7sN+}I zo6yqZ9n&=(w}vdHQy4y;t!rfHxCDx?W89#@y7I4y>V}D z8+|-XTf2O%-?+6W?0K?(Jf1Sbb6&h3(s~nh?txfWupbxw13-~{gGm@{JKr!k!O*b9 z|E_WH*jRaWGP!AK1HbwsZ_x{j^uVv_&7yP+M-2`9?RQ{y(UTG zHFIDJyXZF?{Hdlu%#w>(7__18@&JPZnNLZ_}4r;^=O+X}#h&SkFR7o{O{MY@4NThoZ0B2Ooge*HruLJ@e>x?RWo~s?Y706E z?W*}mcFz;Gs_(1NU1>f$`}I)Xi>iTxE-sG}n5U;B6?!2l+u#FP1w!-$lsb&UQH3v) zFDklSnF3JR%}Oy-=g<>y0~xU2P^7<@3XEY6qG)86HGgFC4h_~qV?Py(*=Y=(`1ZJQ z*-(3ibJ;U=zLamb3O=ncnfpD?4b5DfiJvJvxIPtSW@0;r?^1jE2OuOezyQ%Fr@y80 zn&k(;?<~5<{fynCi-f_;smpyZ8Lg)2iwxtyj%7bg32y)l<8t2q=K1NsWirm^D5qo6 zJ$s9X``H$8OCLd*A^W%5T|@$sqEwNX!#MG;QsG!~*I*bIt_C+GM^Byu(jrt8qk9=6 z?R+zB41&S7O^6HXuwMMMYV7?)Wy9xJA`9t=a<}2QY9y1jE}>%XXmt{Gu6E=@orY>g zfqI@BD!6KFbzYFfsY1~dbbR7TG7{T)eg2K95mc5xl)#gQWTc-9j_v$(TM#CTd^~d3 zfE9KuW-KiLrhd{xz-k-jO_tk2w9)PEp`N8f@N4-VR8h1=hHaa|mIpzWO`XLM?fApc z3Y-ILBw9nA=_nk1R_}CY|Dj($==fv%6j~;s7|TjUFp-lErN4A#HqY^HsP6;xJQw#E zg(mMAqW1SN{hJVca1tv1-Vh9EH^uC1*g0Q!$`$zvnEY&pQ^pE)4U3hRJ-qKm(6G@s z_V?J*#Oa1^4)$z~!Dt260Hiwh$58tw^}asv8;(pKGnA=gUuOrz&HJd2i!Q#MVQ6mi z49zul8IZaZeT$@tN<(!qHA7<^7)yJ4jN3>4wnqu7OLefd^Uc;BG0t%Ma&)t7ipi@k z(5Bj?2~*%!u09brjeoj!wzKYbbh4xWVeR}iL2sD}$1SJltpUytfZG@UTsh{-CxKXe zc13eBt0tG(ewh#pUIwOL2L7-LS^b=SJsu zSvyoPrvE`V*+?Svb(XSH@71;f`LCF~&)X>-*&*bXdFzb_6whl_%*9O~-d}4URD>o} zyOL<0h&Rl|m=xfQ3ghh;)MJrGYW^Cr#Rl8pL$7cng`#NB-970G98H6{DKJ}K`+r%# z=qZac_4P(LTby+h`E+J3Ri4u|{>ZLp)3na(L$W{Tp`SZ)#>0&f|LBWO(KB_)5!H+u z;~>n|4ZU(lqB95VVq@O1Q#2{sn&5m0w(&-;IT3Fw0Co{^sn_mq$;bRItTVQX4kNC! zc+m{%djAMzokr@ecIn894vpPdJ4wARC_2od5Y%$psJHZ*4# zvFMnfmC3+f4d_3o&ue(AXN0q3VZq}Cg&_s0`RMrV^x{~N-&>y{3>|T;f9rMi-dEml z2PzB@fo;4lXBThPbklwSxQ3Zy)6O2DOCM^8YZE*W7zPA*{fBq-84ij7zQa+);!y<< zlKP^?9ZQZ=pITu^E+qdx7UyRnP)>d%2k$MEJ|i|v11 zAtR7qKp^83nEWbI9IqEfYdWjpZOdiC@BO-gf-wR z^M~9|g9x3kXdu+{ssZ3ZquI$vJf9=9Kh8XykIyEZKHpo53+_gJZX%y4TXhh8np~g3 z++ruQk-a!ylr4Ae^^5Tmel0?ZNqJ>A|G4%jfY>7x#fPTKmCwx#H?AaE=ZpKZu8DAiwYZQH0XFC8eV2P*Imu}#+8Y%00pyH3t2$G|KKL)v1iqg=LebH?s~e9#nfz=y;4h9E z=|N`S8z17@N4HD2XzbnDdFNnYGZ6j2`^H#?^kR!7SifY*UmEwyaQH&}!GG`@CBys= z013Ra|L~RXn{|o6`=Lt7%j=)7I)D9*Arfh#)c>{r%fP=gkOcgDVF1AS-?c&aB@I|F z35HT!!0rB5flOO&Wv(#3BEUrxeFKOA(C+{u@u?P4uWPMUDXC?2^A?_~oj5Bk*qg ztN)KHmyBurf5S5-=vr8UoBB6;^$EIpLS&uf9vCK25s2r1N4$^i^hnKqH={$cPT2Sl^W1cD-`}3zFeOs@GkoAwsoE%7T%> z*1mj~ZD9KYQ0>#Ku!bUCSRx)`Y`-EQ?ol;$5TniH#vkE4DO`^=0tYCa!+&dCTJJY-KwrL0HJJ#T7l+@ik) zjKh$VD`*_GuuIG~-zKR3Xp7idP3vKbC=VWqX@~4UH+nz{1xBxg2zQoAv{l5&3%;B( zd>l(oHQOR0WSJ}rcXm_Y40%6z20t=Dj9xtqiTUfrYGl0!hq7Ys@9Ta7mmywd1EY+oCs}Cr7{^mC&Ep0pOXfX zcwLNI4Jv51b529u$rQnivH^=msaS|67|xtYQ7@XTrw9&<>K+sVi$)K@V^l82=Eswq zRGFb5SG*^Rm1|U7l$LtT?9KIIlL!}Wbj@U=_j6!-Yhl5LGEBZTYJb&)mxr|SyD}3~ zpGbJpSJm4sZ_e_TndT=!!r0@eWQw?ODQ&=MK4zi3t#~WmIZm`5#INS|3S09wb>z+K zA=a6Ac-4@J19JI-f-sSdAAmDYCvr^yMLyzNYc*r!g3frAU1u+q3o^*Z)B+v=dAjRq zzfAY-{pk0OS#tW)3=g76qw-3}IkH|Q8dUSjG%J{8Pk=0vp@lU@K`J!HIdrG-*i#m> zuTDF9z}1QvS1#BXuZ5NA17vaENi7UEmm;Fw4?qozj5al>6%9h82_I;HQlb`449+M;8B%P!6k!H+3<%J)& z&g3O@o}08dTPnCSPi~&)-N%P`XZq!H1f`VgC($#!j9@o^ z=(Ji(K10bjCN=OlUFY-@;x^6{%2Ie}Z^;Eg`xL)a;A)b`Tj}IZNK@OE>wkdi4j3x0 zJBuCLwbs&TvA#BnFiotDXG11U=l@J{7SP!T`NP^23QEYuQ=m3sf?!Farnrwd*DD3Ca*ufRHn-K0{5b;`S z+ruKo$|Em?(&CIMCwemR5~B@R4R@L0>JB$4zZStP<5%1nO zPHgvO^{X;6rf=W&Dw9wJh?+*Tu_4u#S1(hxy2Z7mm^QHxIZM-qsYX&47B|`?N}x{y z^jIkaKn90tkL06PA|b;128kw&STboTNRIQcQ7F|r>Y(~Ym~^oR49`$AKY!xJ61JVT zr~;UkRU}W;&y&Ghk47j$WE}N3f`iIhlO0uT3>CL%es>catKytP z#NA$9qXUCmCBiyrCHn(+s|NIFLLF&?EOmCRLLdcZDC4Snm_e;o+QQvqZN76o-?h zxymx0l(3T#A7KTQ;}J+{=1`VZa67wl0=!bfS;PiY0&hU$bHpHQ779ZG z8PDrODb3)=Cl)w+k+)@Z5noZsr$HSt8&^3ooZIl_r&euRHMydp8gocfNOGa^{9qEe zO+XpQeB}d|NI}%pnamwis1_FZClzj@-lMn_vMIQSyyIaILV0D0IqX8_++V9oknLK1qeOmLzTx# z(7K024sHxH9cZ;Xnje$QPEJ@%=RNKh%)(@gMtj_q5MafdMv|(<7s=8UyZ`lj%D{iZ z^z)U`iY0>BR5l`knOt-%1NCQDz+OviHPsH`DvJXAyV+~r*W+T~9B$pg&NJbV9N*X9}2gt7%-+9lGJCZRV8(gi~3<$*LQib@fX-g^-w zfC)voAvC24380Ad9xeg`(gcDa2xtfpT9A(Pl2GpBjlP-t-pu!7cjwIRIdk^R*_}O$ z(os}MA)Wmq!E#MClK;evD`brWo9btO^7PHKdd}T>QgAcV7TTQFWR9`J>EXk?t*OPR z&4A?dgnP=(JU=K+7CRbtEa$oEzMG_ah#VISftSgRMwv9#hV_Gkwa0DpfjRsv-;VAY z-GYPwm7>3?y*LLQX%$~|XBe-KVE^hRP0j&NX>V(F;ua}0iu-2_2WJ|!? zzf@DgHEqj#KL3&KDZwtslA*Dwh&kP3ElMQ~3wuX^26vrX=FhZ&N~NzqL6eV(Vgu z`2MCCk#U?Z>;Egl&%}bT8Hp>*@Ima?cPJcIis$0I7q_LK>pl^XnWqmFmCC^9mZ-qW zpJp+BMxwpit;eDDC5JAi>wTzia2xFUrlc-7f96*|1yac!V5vA;#aGok*im>l(InFM zi*I7jvN6Z>$rh%IhODVU+&k4U1u`5SV^mzzVDkEbsyB}@vu%<6KaQY$23Sn>I;}@e zuW;Dk6iV(|SG(V+4)@ic8|-P7T^Jk+3|zb=2~5C*D7?KlDNT*SY5!+fgq*e{c7@LV zU~g$S+RqDP#$+yy4fWmC*1Tv#*_r33>=srN^;*Zh@7h!%?r(o)o9_s7{Yls6u)p%# zMdYb0SqgWS?dXg?o*-#fW5uX)9tEnw*M7dQ+o@Tv#(G=m8?A0d_b(r zKt7vOqXd`R!vG^J|MgAcxKTO}>#~{Hpwp|Kf;+i|+v$R0jZBU~46W5?u2~Z&{-pvk zzx}w(^FediY$tkIDGcfp#Fc5r%uMp*rmLax_%wd*ez1EpuX$+{XQxccZZ1^gA!<3k zmDoO#f94!s60VGr7&4&c44IXKIjN#6!s6>gVZvuBca|lVk7CD+dmQeuB z%}$Vc;)lnHSCUZ$duCe!fVJJGD74*ih){$PX=3O&M&Cs=COv*6F?lO?p<@FuIr;ADMOT4n7MmoA<%>%^C{jsPptSb=ThaOVwzmxxIbfR3 zQTUp;%x!kg&H?@wS(c*J6FLz)gTW7?0x#9v>&qFR0t)-lFGk+(o$j2R~{_{&l0 zi1ft)!eiLvj8G0;v!L6LaM+ya6~Kxi?KoeN3H>gt=_pPITz_4({vN)8oJZJC7ERa-MeMxB zMDgY3y4#!Y<12JIzIC4dz$gQmts*+$rsFLcoNM7Z(y3eqEt}&RQ1sT6E%#$tPwCZ% zckV7al<(G&0octd8Nu~V3MpTeK+SW`)YOC1$s%`_kF{=SHBk|WH(ByB3=nU+edbS( zY!VHizHt2^)yo>t>CyEoq{5^@d7x{c__I@q^e+DN|3rRfOzBth+UmWBY2jyuDG$09 z5ac6h>%m^ne)b^6tFH))pWCGlh3ccGo>xVZHc%e}Xg>?aEHnI*7X~Gj#QHeGuXE1hARAp&hBCdecdbXPzCRv^sMc)F)KZBKzk4ido67+O zUdZk<0U>+z4YC}!`aa4|6cyk&!lTk?Qv_#U2wG1oeN5J<(doW5f40VUuHcJhxyCu( zdGUpTE%z)DP~5k3p@W!B8!D`_N9#MV!k5$m$+*=ovR~Q!AoZQUlMVInWaA_ymvHSJ z_r3ptUUsXq34sv2;6RUwPrc139(h`52sJs(6F)DS>Xd4JYF-ijwXB=&fsey0rtGQIoX}YAFshFX2o3!~AsM~w ziGfr0tuC?DwP<}(v`zzMrvMA+srzMdm_}@vE7ShD1UriHGy55kmeQPZ(QjZln5y!+ zck}iJNCD#MMw=e{CIPC!klEDvR{koJjxA+eDW-C87T5$~Hh)}$@moYzm4_lo?6}nd zDK37{&4F>i!$%R6`mTIj2b^=f$$P%BMk2Rl#N@a+HJS4>ynX~QPV*#!YP2h~O@kTQ z-n@E8Ej8m0bs~m3ultO`DGXVa+0`OIQD4m0$|fd|1uEtWltoq^TvI9^_N6A0z`zvr zkic*KgX2~_Wp@Jk;I<^{mCxDa!;Kb=zVX+U5Qd|1?5}mI=^7AH6I&Yiwj;5n9GFzg zpX(TG27CGKAfTG~dFg)0Nz}iT^-LfPR@QU1W&gx5#o5l^mR0hq8%?svvyQj_;7u2! zAvAJQfTg!GGVskK*d2VeJP z5FYgrarQ-3YDek3nA6S=#Wp}@>wWkAz3>FTl%5Qnf@FK!=+w>U0$n3BZa=OLdq4pX z4kjaLV$m~CN%wzkvml4d0tsD<O1Lj=GCZ6bwgBcg*JMH6A z&-oRn^cafM1HN;fN!yBl8i-Euo6r1XB-#d=$3Ti4SL!2SH`xx^f;vnBEz-$P5_G|? z1U&zKL%^dG*8#Df3fT2du zFuBdX7kiQ7<{GMw8k`-LJamA19K#&fs>fJuMDg4-=h)BJ^^=S6&59b2hRFS%xZ z@z@6BMiGw4Q2m~tE7XJrEC_YYf*n82f`y%A#Hk3Mw6~?RbmdVtHWR_mEd$yGziUZO zyCSTQYRJb;7>trR{C@9p4ye6}ZBlHzk<$i3%;9Ia0@pJ_+*9B+kFW?aKK{U)<0o8! z<1dYSN0=A4DqE5Z2W?-W@_ebJj~I&YYpX}S-V2(3M?}P=_x^MeM|;xaz@+Q9j#b{N zSg6HEv7sR#v}UX(4Pb~mvR8nbHd$7_gx@&$4-O3p?9g z{`k=q5h-&W>Y1_^r1BnR{LaZV0sF0QVC@U`6kYuR-HwBIHdvU|9 zXV0_;S=^S-)cJUm6|Cpaa#QI{OJsEN`cqP`nE+8Zd?!UoHWPVD(vI7CcJw_*nAosV zbN1#Y*b9*GR6z1c<+5Xh^UqY93UwdWM2LU?cwTw;2V)K}D#oD_53l+&&kAh98!7Nc z_A0Z-5LX;DrDvV}sN**b#D<|!_z#Cd}XAivB8g84nU~+=V zRK)wdl;tzI$y9%-h|v{2m<)FP3Dd|Fwgp}+eDO=$^?h`N0NsJI0OfhMy*Gk@zImUFw(Sby^|jVdv0ryz zb3!1T33Zqw_iT&R(KFva#}J5Ey~cE&5}9>n^DpU?rpmNuQ@Z+S#CvsntIiUX;i+Bh zM&_euD+)_J!UmY?n;{wgrc(;tl+RfWXz<3CM(qaI-qNr(`1LnE3AWaAB_+i?sGvPx zZ2sD1;Bw&O2^~zoZf!ZB$+kF*)IQ3)VO*lSkznk0<%K9ppPf-EJVHU(;^As&%M|@U zdG7t%^f5PT&P2;}<2(V#sotF6QlgZ-O$YT@J~g<`yN}9@rQ3Z@$K0pTcuvJ$eT9kJ zhFFFNE6o)035|{N7G5c|mSd44aXrcT<>$nb{iN8U^Up1DqTHKue1sfCE2| zt!aQ#&Ckx|EC2$ac=J&J*cychIQsf}%8Q7&`v}|Ed)T6d?L6E>0&F}*#Dqmf00rd$ zPa8WIv@gOIecH)gk^S@iMs|dgy&}80l&+|*rz+afNi)zJZ5*g)Vi)LQCuh&Dtb|Yq zkPmS4bVK{vAOhT6-F@T(6xnygw)5{8L&;Oj2G-T3%cRv3IcJqj}pq$Q!9??8U-gDYEYs z@Okg;eA>}OioU2TSHu22#*l*IqU9g6CmX7!|`1~4eev+?d0j}t563T~eG$ZBYBr!#1K4Q~%O#7@cbPJhou@~?V(T>HQ0BK23U2tFB+ z?TOtt(cew@)w4bPv25`dKNddP9lzSW@ymK^7U14ltblzJe*1tR01XrZBPIm^nj8RN zdI$i#g8(4jvGo!N2O!|>1OG3C00My!5I`XiC;^OM`+&h=g!lsnhZ7MK6BEHnb`G-b zgW|^lfooCC!r!EA)}(+_E1yq_$hZ!6nm#1oL>f8EdV7P41fU$h!Ox(f*_Qj zEgZ0l-}_()2n721vOow2Lt!9-Z6gQ|-sgc4fFV#2Aq4Sq)00jLWbXN#K7>J2d zTC-7jVlf8+5C}>H-7aUh8hoJ$HZg-al%b8+wW?+c(U8Qxc_en!+H>m#K!VR5ObMaH zPh7n479jPr0skHS=XC(m`lfjBRYhk+u~H-QPw9b11?*>g(y4Pjiu=dk6MpW#N$qX9 z1r)da5zKbl#iH~C5_n(FV&P*4`RYCPC)fc+k<&a5E*PN9&(QGOWrIIqge(hhhvk+4 z;Hv)CM{DWWKVh;(Kk{@DTLT*n^F`90tW1qve?pPJi9c*8;PQG^60`Ab{-&={70cuO zZ`VIL=hhLYKl$b8pUG9KT{t2#8mNHz>HI&BAgv>(kbuJ&Or${x16q)29$h*2?dIL~ z+1I1buk}=IA#v{DV*<6#xO)Jz$K8jf{A2Qs zJPi-K2Ue^OA%OAv9Qc9Y)0p0l#a}dz9zT3W+xY)^zu+Gw;Iz-)e3 z3HCbc_S2!m%x5tGi<0>#qI6?-pWgj+A{QR_c3pD}?21z6VXv>V?(9LiCD~rQ7)b8o z+2Ht7?pweqM*tvM}MCQ^z zUQ8>h-?*Owtx3LXUsT=%Ihw0`sCHvThElO-Ku)S-xtcrrrP-4LMbp;!2p%XgT@*{0N~lMaWCsQ z)qe8ds}^{fYb0h#4Nubi1}au&{74K zIX=PyWOQ$?7`w0|_mO{JFUmcGy0s|)=uwc*Cv{(5-~f@LsibW$KzQJDXK76$VjubU z^_~0vQ_+Yv0F2ewEwSID1_;7)$}+_q0m#Lb$$=Mb3H!)@nCOKiV|Om#=R~*Yo9fcv z2L7pu7KAQYKEKqkv#I~(xw=H4cwEZ%^Pk#%U%Y4tw=ZpgG>3Vm_6&wFK9}Quey{t| z@{HFzfc462WtqDL0POQAhi5EJ+b_9a>+ARTYQMyP$Nvc(V8!2!!SVNOAOi3=;tMPK zM+ZKoI$VDF=Dv%a`JiF(hkIrzQQ{mzcIXe8WqvnEmqTa2KDQv2x}hUKd-;uJf7#Pg zl^gS|aoQ2DY1f_8?kBAd`xzU%9!PXfS|Oc(e6P%)a-dW%PVuy%;t7)mrf1iO8eY7* zUh~NeZ%vZ9Jg-+`-p7#maed0OQd>^3M|&fqOt41L$83mv^FvpRMA452C(PdPs@V5O z1~<%t_Et$Mi{eNs#}<&~Qe_^0mrM36cFN+cozMIee$$#<;2A;Qbb_>i3d3a`#(U2jL!9yrLt+Y<|*}ImNTRL~VE+iegpjTS% zBzWvjzeO;!-PxJ3KB)uoalx)4L6V)P>AotzomJ$LA4=RzZGGG*O;?|ZzIACMai~JQ zM&`s8;C9DIjst1<@qXBm!7Tu`(7)N}WohZMU=#Gb=!9%zJMI0OlD)@W7+>e#G_T@z zGHZV|D8)g?BPD#7j&WnyYS}5RTjY!SJ--^4%u1%(>rd|!rYylw6VAt%Hy`~BmoRJ2 z?}VjW6jt)|TORg*;o}x`>1T#)uXB&lF^JquKlFL&H#_|@==Bz0UR%4b;EzioUh&rd z7ifCAZ=Rp^uOEmF0zO|TANf)5!y2;1wWiwEO0t!;`XBkn9ya(Fzz4Pfgn#i6!DB^? zf8*e+u;llte2$+=YfHQN(VcoqSCu5dt6sA=E zs?k2o4zgWd>EmL}3`;fbTfo`N61$eM=$wF)Dmuc|DV&2wwpVRUyWSZTGg-#OE;&zz zDK$pKxukYo)03{FqUr5g%N@%%7PE9m6MNP4teOm_nlojnWV`vS%A*WS0?{g^rOKf( z_lm}Rc#Y$3YJ@Y!!8t=~gu`6@cVOP~njJ{-DPrLW+67C!ZH>0lE7Lp#>k;8A2e);+ z`6Z&e*{&(#_A(griE`BUl1t%x{ER(cHhYZm;K(kmq?Kv`M|@~=l{?N`YC8M59eigJoOyqVvK1ts^Zj*)hhzLO9}4Xbf(%{z`2iyI0}3( zC-y4tp7;v#L!E0EW8$@IO}S`#ht3r;Xp5(yc{>aWt{kWV|;Zz zV~8}bsPo6%cp@XA)l%o?!2iV{KNEg0m~m0qEcv4Mi!RfH8GQOG8+v@`!*KJ zon6uACp~oor}Rg@h0g?hp5yastztP@Seo2Krc|h>OBcrIJ*!jugpMI^Y=PU-%D(eb zSBBTwWML5ru6Onix~^m-Er?s$-ms`~9=tPHZdO5BZg%5TOYTkp5D1_3Hv;+Epu`hK z9s<#YUyjVudzCvH`Hm0tc!;AXO;c}^<2?O?TBPi`5}w^P&%Tg8*=*Q>D3Mw-?>?PD z6VRXD`mtC;9gUt?6F4-hvijNKHQw}ilH5l=e7m}@NmV9Ux$DR`((`TtGN+FME0nMc{`-s(Dm2%nK zXkgfC89`6`y@k}R@+)=k`0fY8XVG(lNyT-e}Ji)B~vHf^nKj@ zMojG1-7X#1nT3N)htJ`*4Wjc@GZQNHYAXnvoRueqezGw&N#y0^HhR(;{jlhjBq}A0&&XFO4ZqE#+zDuau7-Unly~!c~~SRB=0J#n<-u-bkz_TR9tn&@#SbBo0lrc9wS)hb z)#y|9nZL)4)Wj!)Uwzr1wS}MNj2-FH+c$Z+$^-a9{+3nGVriZBcDH^uLwusV9DRh% z*qKi%fWza$jZ=bdpO?xf1)y|Om=<&nnOFJxYy%{!4rMmCRCs!OD+ zGdB!>`XA%(<}4bHy?ire-pLfS>HO9D_QuO@HmfA+u_z^oPLbJnQcviP-fwujo!GRe zvixuYPgO1)?E_ ztH-Q+b!f7$1$|JHLZG4q37!(M(6wLU;xj}k-i6<>NtJX+r^?c3fmRZ^XoLFhfy1K= zzCPeZZvg`q6w7?sQ!t7Ro3ztnX9bEJ=n`9p8xIS9uFgas%SXNdKrx`{xmPOTq*`(? z<0h?a5XW1-qzQ;@Nz`pgWQQhPr?pSaZ5H%_4WLc3rtcZQZ+OA$xx8a+(qKYpuUaOR z2#h0Z+6*EEIP2IZCSvEP`pry%^Bga7SG>SFFA1lm$%kE8D~FYBDuW-|Y}RqZ+`^Wb z_L)QAK-QH~gj$LXAH5p}adY?-*c9^#*nz(ngvsTOr9D={}ht&uJc|9(0CnB7%7a3x?H( zcm-gpJ=fSYb$i&!peqBXqBEAE7qW?@C{zAsM5rq?aK*EJ0F!0-7F!qcfXt*lSl*T|c%#W~5E7 zUu?}_`I_}2)lM9z;|e)-vIH#)*0#5!xim?irRNVc5*u?KKv9xF8{r`^Sx!$4TM;-r zmpetCIsd(N$HV;X03YU{px(qC{=ROnc7n_Ao;-h>6?0?e z)S3A9Z4L4!v*n8WM<#YseJc=T{wn{=P9sYyCafCtrhbqPxiGzYR&)NvuAKak%>4@I z_1nRErhd!4e%C$xtp-;dH?qs7X0THkkEYgV>&s{Rz7lQsZ>YTPm5cGKJa5u0LFzUw zxI&ffqf77zFx(oI?s-%Y(}vQ1*hwpRtQtN<-XBfTpgJ8s!Dnz552EF&z{Z+!>i6y4 zfbHxp8u$zeDTiLnu!X}^OoS=1^9k|!R1)HgMJBpE*QwiZt5Zexs}H~__VV_CN~@Hy;i_W9Db6-E&!kPr>Qy39#Brhqen6{tE?4tmOt@O@Q48;;QemDytKY9RJ z;ON9q&({71TEdOvQcRV6a)3joK<;oeN%|Da2%^g%Ng_}+`5Prg@6KQuh(e6w&aS6@lydb;dU@(U#@@N985x$lX!v`FU~P%ow6A79M$&ZBWoD6xWKGqCyKeR zcA&cJPBvWrYTIU#gVLZ%Qj9Canh7c=xjO)cVUPs!CwLQn)FchU*b{yz+`U)beQoOt zxh{wj)63~#L{6P%vqu#beIY0H;nhadSgjR`8#Dy+Wu!hE9Rv8#+V?g?k zt@G{Vsx$0BMdT}v9cb|kog(9?-LuL>tQhHKfzc>N2i_2vKs;##6NxmvtLU&z+Nd4F z5{T=kA(YoNkTE=qMYdj=C6k+-*DdT}zqp-Jb%6KM8CO+fZU8Y|Tw$@6N>mvT=%90Y zNT19~3|wW+IfKK+{j^;m(hRiaRs7EN83y=VZEGtZ_fHm+wcNc&ZaufymELnbhq(bO zcwXN?Guf73K$@Ifr#*J9eYEqd>E)})_LZCy9bv-?iW1xsQ#_F(jP^ z7M6@;hNa|(SITdl8z6oNTlt+uKT;$R)y+Xd%m3!^*A8g?@;%TG7S6f2w02j zFL;3;nEeCD`M3Ko|EaM7Kn+=H!u*1z+X7axB3r;5EoV~ZFCMTKH|8v7I0I*r7jnO2 z+wR1PY3EGR{)0V9i!({n;CFnIsbrEC;&*#8g+!7T{C9gO0Hf0SWv}eU#eefdr6u}1 zJ{$nNwRrz%Px}97XW+!g{ewQy|0BE8|E}{(ABeTMuzZ}^0PyA4zU}YHf5-m`9oYQ< z3V+u?u}R%b2Yr|TPrDsb$Ps1TLY@AwnWPNKKw)BRkKshJYbB5<Z&3^p|OUO7h0-&crg^ z_@6t00V3d|D#a2DuR2m2p5=(^kv7Z)Qrb+wWA;R~r06*otq_nzw|aDu&b`ptVS$f6 zBz=bEqeUvir2x32C=}duM!}0lJ0Y+Md=y%GXy{Ssv{^>hi+(f#30#~Ljta3hu0%n# zDCv044wTnOD_8p);*dl(wyhGj!GmkSt7FHI z7bg!=vc-y`KlBR8CW86s-YLJjsKE^+fX>xeO_r?)nb$ejcbd)~W5zCivt$P)a{&!6 zD!d1S(#l760D`jT5r>by_P0aXmdJ+NPd6YH6#`S01a(+plTul zZY>oyCz}og1+ST;?7+vhXh4&ITBwGleLV-#bj8X@9 z$P>DP--_yXXa-wmDqVsUlYr7&C)+%a zBT9}dN3o}KgV>R=K?iIw>}+aC6ajTv=Tqq!Mjj40RxqYU<#f1X3Uo6*B~LwtH#745 zRnAeif-10#zBZSxzre4Wc%>UeDp)p2vZqP5@vQz2Sw7o?*wcu-=gF zrf?4e3L$93ZH4NG3|VbSI0eV3rX+~E+wnk+SIKI9Bpp;Ow!{x%ngAgt-u9y;fik9E zUY68WdPmcvNh;x)2^}$;w(1x@gvT80&V_k1tHisjkQ2(Q+m&yCZscxkSNaVY>iNcx z&;JwDHfI9iUVLT`N$_$H37*+Qg3jzAt@GgD)Qg#vR|7dQYAIoXX0MQ?r+vkVjM@kE zKV)m1@P-eYfR03v(2H8%Y(`LEu%X1X0DwVIK}y6Ol_sEIWayP0Z*n@Z7eIocAW^f&hE$m$Pd5!X}G~(7>$_YljGwQb5|uEfpZ zphiJJK65k2bkn%s*Y5CsX%Xj$StoLG4Qqnos?mX*H&+DJBj2y9>`^1*TNINyQX2({ zdjlOF%^19T!Zu!+L?kP^gm6$MZh}*N31;*Jooj7qN$+y~#zk1rcO!7T^2d4JuKTuw5>3f0r<~TswWL|LW^k zv)IKamtI`EpQ-xr#dy^PJ^vv8dtpDyb-Da#Q|{FdsoLQD-%$sC*Yj))%k%^`Y?88}xR^$zqael29K)r14X zns?>Le}A{%$Y>Lo5PDroh;9}!PwU{rnu8#^o62M33h~@dn8U~&lVZNcV?r3Tl`X(76mM-D{Bi#?apN5wFao-g{=K-oC({R zX(f?C3UTS#D#Eu08efHqyHX8vRUWlYYZeN%gxWJf?-1=;D0Nt{2f3rN;}kp1NT@*> z%mU|2t@ALp&NxbWW-P$|QhJlZBad_u)et4q2cv)MP-)qJ@7kyeH%w^H zwuX44Mt=vOKPK!OLgbiXR+$Ad!M)|`7J-P8&Rrl+TUHV5o~f#i$gmLc6Uy{A;!|*y zmQ0JCZ>e6)4?!M=f+;F-p|rxSLM29M$NGUgPOnmUz)3uOM17H=7}ImhQBXEVRlf)p zX{~G5xXmuTI_hwBwS-adbo#l@PJ~g|o~#=&4iFN25S}->A*N12pD5rPpWkW&<+NTn zG!TG&x66B>UNucO)ZYO+RatrRRCVB0BNZIVlWDGp)hjya7)xQ@ci?lBpfQDYg#Pqm zr97uSq7r$G@ayPX;8jzvkAV7Y;Vr#sY!OlOEOQmV=|tr%%9&ADi7Hgr4Z3@2PYzed zMYL|Dv)af88KX*5^Hz+W7oRb#9R618y<8M#yhqQssoM0MoY939?Pm5|X_o)a1-RDjoZ2k}N_sCEhY6vncT%R81>m zt}&R5ZeffNhO3f9Gf5dtmPHDg$T?r@G$lLks!A1niY0=9N_yw|JEJ;1f-`6PLxAW1 E1561N3;+NC literal 0 HcmV?d00001 diff --git a/www/resources/images/logo.png b/www/resources/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..797a31bf0c08ba7276e93a6dc92d3acbf34050af GIT binary patch literal 12549 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 literal 0 HcmV?d00001 diff --git a/www/resources/images/openaire.png b/www/resources/images/openaire.png new file mode 100644 index 0000000000000000000000000000000000000000..aa66f655c69d6f19e5fc5b47f51bf339de5a7e87 GIT binary patch literal 4287 zcmV;w5J2yVP) zCoGFwib@a)*9WTxc^rYG8x}z{D3Jw?kd`1K!2kmU5)wKgWG0zRW+qcJw`>2n)v?m) zo=4xRex<(W%xPvw-@0|b_xHN@cYjwSM$u@o)1>TV@b`LPG%yzU0PsQJ2w)nJ2z+%f zuo-v_c-H^y1Ugc7Qe@i(4rsp^XfaLdsoz{UC;8x(|56z~kf?M*U19D2J^SCL;T(h9f}0FX1jZm& zm_`Q{1NH#>fbIUzo4_lsu=;|}nERDCv+DVVs3v@OugAP&>p5avf4Rw(y z&q=@%U|H7eXq8B&FJ*>rLMHnj?U}&oz<9++bpcNSPXfPmh4o6yf2RK#jh{s&xi>8y z%jwe__W$jhk96?M=ekKmr$3ugcCx$0PM2STv&6c>!Ze%&Fb6mh_zmR0)O*N<&d;{CvEHW_fn1+({ zaPBlyWe4goU4dL&VR@$E{0DG1Rhb=9+&mD0Pxj*<_CvWWNFX#Yn-z|7cecyOTq6o?LOvAYvx#UwUi#&xVfJ`tcAWxrl-+Uze&l7+PLA#{4y|cNlslMn?DWOB_w!VQvZH}H;m-p|j z+xmEMi#uTZ3f^-Tt%+fhi)lFL1OMe~k|>?3Ex@0FyIf)YxfDF*@e{UT! z_v)JZaTomD%Xo{UH1S$_-Oj)1!zA~3;7%nEWeBqlxzqF^S6H9Sk{jG=94fha$R^lU zVnqFFY8x99!ys1!{s1&b)R|qtRj#n^%OzBW)IvnJ*lF;*^(D|m<-*HAr#_UyFb&55 z9tS2w(2;iFHsEkqSofKRGb|NcEc_(*?ZBoQmEQHhp2T3%>*Fe9!duvQ0=U8z)~my{ zts#-TwZ%@i0!P&txf$S(DLdJ(52l*^5aXL6cR&CuTw$G&B{ys}JPfRiG&uJL57;BX zKIF;B!mCe#!F~W}4DsP@z`wY{x-6fqEd%Zcx}$2mqbG9^p*^lgdsimPcUqIOlbc%X zbbf-fgYGXwhFNH&2ROwQ)&r%owFALV4tJwku+e}gHuUhuI|nXkJoaJ_n|Jm{`D*{l zV4;p_I8%|kLt*75Zw6+$!rEPKV)GEK`(AwL8J!-`FW{n6nmB4gf;Ol`X zA-@EhhSLn}4$+}H+7;HON+UOi=w{$K;C)r>J>QeElb;LL?I`4Atq5yP0hm_>Hx-472vXB=a+%b9r zSg82WmB7V7U$v2&qpCq3HveOVO7a~kJGo@AN_RmOJ;C?HRL~2Y?h0!yRgOUAok_qC zE6gU}0DQ}j-v>m{iw>hU)DyKpZjNWY-H$4kRzSBpfcd~TQg$*^NG%s4__HB&;7imH z0;;bsWhWirBW1G7y~wTA<5PC>={)@#m|)XzW*|!^s9=>Vtkw$H9g0$#A449?`2w;? zcPX$II4@-<&q&$HZNshjo|WMFsGs)#TEH8xWs*CAAExZ&VZb%Wl-K$fX^%R=OtuSoVHpeIG>jtDCK(*@Cjr}?t6iHG!0G5Zut8l>i+C6 z&HvCqm%sIO?W1?sUb?sMqV2C6>DaVwm0;O9%D1lgH8URd2`UzMxx%`XLkxNDO_~Hu z(hU6{y0*4`y1%FQ?1pipNQ`Vi(=`%}_4If5;)x8s9bJ;pZS8cu-G;lTo4!5W^mq4y zuAyn#9^gHy;ihI9&P3#WJ(G)ULjV`M!umNe0;JoM>u5?#!S(W}PEAU)rlA#1o}S_g zE3MKW9a(Z`vO*gkvP44+Uu{cA)83{T`WDU5(GBCEAI;FwbbTOl0Y0qSA02sSM+I-I z&axWD1B%~2IShhlD7Nvtn8yPVu$hl2HZ?m8f{#^f^Kk{aJpLqeQUk?$KXj z9uJ03N-yw^N;9f!3p(=rtcp5%EvB=enijy@iW5cYxR8!o{pC(o6;k8K0NWJXc#kT< zDl?>ARfW_zJY)fK6^vCSxL)D=dt(jPJTx2c>OKu4yy7K<@4hl7%%TJoY@m0%S++8lEjX_T@*6jkZKR>eR(8S^;c_#UCs zfGe!6svUSs@g-)*Jm#JF+3}sC7-lKYuvZn^I4!0#ujGMx!u*CX2yRtuccGT8Zvbb+ zlpchORLwZDa7`!#t2$aIn}#zcw!;VD!VuK6@{L`(UvBq#dB0$Pzd%vp9WMfA-FR3ruT;|_+iOv5?hP_)H?cfK=( z=I#&6+-1)P;|gmt@Sz z`7q#%AvCwr6;?-BW2fiXkf)Gk?p2^6kE2rSBnPjq2d+mJPgli_VM*@+1iQk*71lg8d_oGrtJjo3A?X_(q=CXsr~W5lUb5$ zh1{HwXnsgd+pe(ohAjwMf!V3~YG+AE&shtc33SyE(JO%qLTc`HS6IhH(N8^}UGdjI zZzsHy3-gc{OOCEqn;cNfhG{rXh~xrX9#y{wx>jdB@Y4{Vbpi0WX*g4=(Iy8p&;Ovl z)*Qrdfi+Q$hc<+n+m7N1w;XInmibTTv1t`+Z%xA)1N???uNle!GhJbAD7gd&X4FRr z_p+|3!0V>re5%qHLjvT^^VbJX4*3z+yTaNK<@;+xu{*#mgkNn{01qK=LF=z1NzRen zn~}9CM~3{Ehk;LqvFEF#qWzbwN9O28apg=ma4ztBS6HH4YCE{>=-(RtUSyS=84)~g z8?XR)E$a8whB})~!#NsRaAj0PeR%}9-4)jAa@uCoaONQEb}otVF^gSctt`d+3{`@& zBrgD-B)UV*J;*J~t6X6{Q({#-75K5gaM2XuW3P0D_1~qMu-b43!@scd#uD`HWn_us zwZOZsu=a&TrvG~axzhFl;A)^0R{-7P3hQ&F)J|HFgY|9T+7eB|9muTDXOS0VJmU(h zqsV^O0Ve^c_@5^NN0#V4)&L)Mh1Ep~p%p6yrr~@CSrEHa@cg(jgWR)z8kv~(vhTEP z&H1+zkeQ9gBGY+CE7Hc!~I2(YpL!M zh~EWPxWam=(#b6e!MS83cWS=oOLR5iSIBc$=}PgCOKyXQXs5eeVJ!v50n01gpV+@uLvmon5j+U_XCaSaE^71pj=BDSIl&XawSbVXk>cp4UWhe;KoC1C=IBoYWoxRh`OOpFy1k^!cWOqfhe5XI<< zR_h9AS&v$wRcZmPais|5ibu1>E*?~Q1fCkxGE@#5hFPm8(Et!0Y1XUMxd;JfBH5^p4-Gc8K_IH( zLo&7`SfUppIcVH^9FeY1OjEDVRdY2^WCR#)=8*(igiwKIZJy4+GxMRBygYL5*k(fD zOA{iO5B(aHT#^imFdPBdjF2F8Fbsnn4g(Hlb2#w3AS)PVF@wpM69k9y*c={fDfsGv zNN>0%i6+~JD847fS${eIK(5D&1 zh(V2`dIH6Cpo3ABi5Uq#L`M2+3R?YZTAkrlnaF}M%_=<;W&}G@nl_Y3{@7HjeQj+Z zQjy={{as>1T7e#6rXmK+h^xuQWzik3^gI!cs0a*C!?3*RDkkS(1ZK#=^q@$}0hh>7 zodz=*0$$onB)oW?fl%qxNW7R2kqitJ)$lk`LNQAyT*?X#;lgk8$q-QaLqw5e&4325RmnrkmnPXwk$oC4XnK>5D zj94Za4Aarr|7-O07O5V`^tEis#cSasI#TU8DQotLth)d}*%mL3N;BX1t*( zAmH@7i!tU<<2dr-zD@9hJTwf7#0K+z+G$u(i&7fIU$7&5D!g4c_3l`=`@+}%yuG2d zsYMD=R$-Hq14YGp5cX{mxmzzKhZ&y?$liLeynd4IW?c~$e7rI6l$%q=-O)FwcNSGu z6i}{52PSrO3DG}0ty`toc&fhK*j#4~Kiw#qZ{3wPaq_gM>*|TSqdlYJv{{)9uDSe^ z(k=eiyqQz~kp-NI_~Bb^?_aAwz*+K&y)sYV+CVo)Cbmt7x4M44XLE@AUR{N(b3zd} za+W8bEGy4E-Z1iTEWy&`4|emt-QRX^ozki^n1YeBN5I}CF6YnLn}4pdo`jbbHAO;9 z+DCI^{lB@;xm;m?beNcf3ks?eLw^jL8pfwSdjG1kQ+LmrlZiXGeOQ)HF<18qd&fo$ zB~`0I+jo_rJ{5m=kMig~Rd?{q&n+nGzE$Dczg?NzJV9l)HGb^D^KQEg*=RI@*YX1j zdVC3{c}(K-Vu6yINZde>W@bF`5fNZP^ExR=-KOfJE@xkA0%Ps@uB*~m%hE# zb}h0PXlj0rC*1>Ya5L#tzsgyzsa}3I-hm%o(j!VQcA5PJ7LlUc>xDggC-shHu2)Si_?Q9UT>K|Kd@DW_S25aNd=|ZS6BZti5Wu z-?ueS;+O5C6AdH%d&|m({GxlL zetQdZ^iPT{o3=HrX(xOA+~;Ik#IxOx*aJsqYraVD5EWMSwSDEe!Doe_e}kr}jd^Y5 z?aYjRZeHUgDc+S+R?m0uDE?d4HMJHh>8ek1&*{uwb2GMXLFL?KsribU0&1lwrjgZc zJl027&j0x4IDTT)e&f^uN$V`^Y5(_e@1XN57Cp|j*%?DE4du`4VN7p0|0cDxou7ja zgpC#DKbCI%%kgsch*dnFa&3*QVP&b=`ShoMaH?lK@3B9f0bGDcpsIvkyD!~wOUFki KioX;pxBL%j&?blg literal 0 HcmV?d00001 diff --git a/www/resources/js/.theme.js.un~ b/www/resources/js/.theme.js.un~ new file mode 100644 index 0000000000000000000000000000000000000000..50f0f9d9cde2a10bd143620f20ef49aecadf19b9 GIT binary patch literal 573 zcmWH`%$*;a=aT=FfoXTV;2V9-4N@P2x;qz4p1${Sz~0GHzv>@%t|+kT$UPUwz`)P| z#F7d?prWCkVW?1?o0yZMuBn%inUboZX$_RL0%A@eW`trO1!sfA7@|ab%UK|@@fSb> xXaFPyGlbzk5P-F#DH`QcD+GYiQ3j2UuM$8*ErA#mj}1T!iVED3ZQA&J6#(7)FRK6m literal 0 HcmV?d00001 diff --git a/www/resources/js/dropdown.js b/www/resources/js/dropdown.js new file mode 100644 index 0000000..04e9c2d --- /dev/null +++ b/www/resources/js/dropdown.js @@ -0,0 +1,165 @@ +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.7 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.7' + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) + }) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(document.createElement('div')) + .addClass('dropdown-backdrop') + .insertAfter($(this)) + .on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger($.Event('shown.bs.dropdown', relatedTarget)) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive && e.which != 27 || isActive && e.which == 27) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.disabled):visible a' + var $items = $parent.find('.dropdown-menu' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) + +}(jQuery); diff --git a/www/resources/js/modal.js b/www/resources/js/modal.js new file mode 100644 index 0000000..f84142d --- /dev/null +++ b/www/resources/js/modal.js @@ -0,0 +1,339 @@ +/* ======================================================================== + * Bootstrap: modal.js v3.3.7 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$dialog = this.$element.find('.modal-dialog') + this.$backdrop = null + this.isShown = null + this.originalBodyPad = null + this.scrollbarWidth = 0 + this.ignoreBackdropClick = false + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.7' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.$dialog.on('mousedown.dismiss.bs.modal', function () { + that.$element.one('mouseup.dismiss.bs.modal', function (e) { + if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true + }) + }) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$dialog // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .off('click.dismiss.bs.modal') + .off('mouseup.dismiss.bs.modal') + + this.$dialog.off('mousedown.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (document !== e.target && + this.$element[0] !== e.target && + !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $(document.createElement('div')) + .addClass('modal-backdrop ' + animate) + .appendTo(this.$body) + + this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { + if (this.ignoreBackdropClick) { + this.ignoreBackdropClick = false + return + } + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus() + : this.hide() + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + this.adjustDialog() + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + var fullWindowWidth = window.innerWidth + if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect() + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) + } + this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + this.originalBodyPad = document.body.style.paddingRight || '' + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', this.originalBodyPad) + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(jQuery); diff --git a/www/resources/js/theme.js b/www/resources/js/theme.js new file mode 100644 index 0000000..a93b4e3 --- /dev/null +++ b/www/resources/js/theme.js @@ -0,0 +1,191 @@ +// Make one element to get all the available height +function spreadHeight($el2spread) { + var el2spread_height = $el2spread.height(), + $parent = $el2spread.parent(), + parent_height = $parent.height(), + $siblings = $el2spread.siblings().not('.modal'), + siblings_height = 0, + available_height = 0; + + if ($siblings.length > 0 ) { + $siblings.each(function() { + siblings_height += $(this).outerHeight(true); + }); + } + available_height = parent_height - siblings_height; + if(available_height > el2spread_height ){ + $el2spread.outerHeight(available_height); + } +}; + +// Apply spreadHeight in html of discopower and consent +function resizeAll() { + // If there is an element with the particular selector, do the resizing + if($('.js-spread').length > 0) { + var $spread_els = $('.js-spread'); + $spread_els.each(function() { + spreadHeight($(this)); + }); + } +}; + +// Toggle error class to input parent div if empty +function handleMandatory(el) { + if ($(el).siblings('span.mandatory').length >0) { + if (el.val().trim().length === 0) { + el.parent('div').addClass('error-mandatory'); + } else { + el.parent('div').removeClass('error-mandatory'); + } + } +} + +// Toggle error class to input parent div if mail invalid +function handleMail(el) { + var regex = new RegExp(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i); + var res = regex.test(el.val().trim()); + if (!res) { + el.parent('div').addClass('error-mail'); + } else { + el.parent('div').removeClass('error-mail'); + } +} + +function handleTerms(el) { + if (el.is(':checked')) { + el.parent('div').removeClass('error-mandatory'); + } else { + el.parent('div').addClass('error-mandatory'); + } +} + +function getCookie(cname) { + var name = cname + "="; + var decodedCookie = decodeURIComponent(document.cookie); + var ca = decodedCookie.split(';'); + for(var i = 0; i 0; + if (!has_form) { + $('h2 small').hide(); + } + + + + $('[data-toggle="tooltip"]').tooltip(); + + resizeAll(); + // loader for discopower view + $('#loader').delay(300).fadeOut('slow', function() { + $('#loader').siblings().show(); + var setLang = getCookie('setLang'); + if (setLang) { + $('#edugain-modal').modal('show'); + deleteCookie('setLang'); + } else { + $('#favourite-modal').modal('show'); + } + }); + + // hide modal smoothly + $('.js-close-custom').click(function() { + $modal = $(this).closest('.modal.fade'); + $modal.slideUp(450, function() { + $modal.modal('hide'); + }); + }); + + $(window).resize(function() { + resizeAll(); + }); + + $('button[name="yes"]').click(function(e){ + var inputs = $('input.form-control'); + // Check if mandatory input field is empty + inputs.each(function(key, input) { + handleMandatory($(input)); + }); + // Check if mail field is properly formatted + var mailInputs = $('input[name="mail"]'); + mailInputs.each(function(key, input) { + handleMail($(input)); + }); + // If termsAccepted checkbox exists, check if the user has accepted terms + var termsInput = $('input[name="termsAccepted"]')[0]; + if (termsInput) { + handleTerms($(termsInput)); + } + + // Do not submit form if there are any errors + if (parseInt($('.error-mandatory').length) + parseInt($('.error-mail').length)>0) { + return false; + } + + // If the user has filled in inputs, show loader and fill hiden + // `userData` input with user data + if (inputs.length > 0) { + var data = {}; + inputs.each(function(key, input) { + var name = $(input).attr('name'); + var value = $(input).val().trim(); + data[name] = value; + }); + var mailRadio = $('input[type="radio"][name="mail"]:checked') + var hasMultiple = mailRadio.length > 0; + if (hasMultiple) { + data['mail'] = mailRadio.val(); + } + $('input[name="userData"]').val(JSON.stringify(data)); + $('#loader').show(); + + $('#loader').siblings().hide(); + } + + }) + + $('input.form-control').bind("keyup change", function(e) { + handleMandatory($(this)); + }) + + $('input[name="mail"]').bind("keyup change", function(e) { + handleMail($(this)); + }) + + $('input[name="termsAccepted"]').bind("keyup change", function(e) { + handleTerms($(this)); + }) + + $('#edugain-modal').on('shown.bs.modal', function(e) { + $('#query_edugain').liveUpdate('#list_edugain'); + }); + + $('.js-pick-language').click(function(e) { + e.preventDefault(); + setCookie('setLang', true) + window.location = $(this).attr('href'); + }); + +}); diff --git a/www/resources/js/tooltip.js b/www/resources/js/tooltip.js new file mode 100644 index 0000000..7094b34 --- /dev/null +++ b/www/resources/js/tooltip.js @@ -0,0 +1,514 @@ +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.6 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = null + this.options = null + this.enabled = null + this.timeout = null + this.hoverState = null + this.$element = null + this.inState = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.6' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) + this.inState = { click: false, hover: false, focus: false } + + if (this.$element[0] instanceof document.constructor && !this.options.selector) { + throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') + } + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true + } + + if (self.tip().hasClass('in') || self.hoverState == 'in') { + self.hoverState = 'in' + return + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.isInStateTrue = function () { + for (var key in this.inState) { + if (this.inState[key]) return true + } + + return false + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false + } + + if (self.isInStateTrue()) return + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + this.$element.trigger('inserted.bs.' + this.type) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var viewportDim = this.getPosition(this.$viewport) + + placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top += marginTop + offset.left += marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { + this.arrow() + .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isVertical ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = $(this.$tip) + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && $tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var elOffset = isBody ? { top: 0, left: 0 } : $element.offset() + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + if (e) { + self.inState.click = !self.inState.click + if (self.isInStateTrue()) self.enter(self) + else self.leave(self) + } else { + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + if (that.$tip) { + that.$tip.detach() + } + that.$tip = null + that.$arrow = null + that.$viewport = null + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(jQuery); diff --git a/www/resources/sass/_bootstrap-custom.scss b/www/resources/sass/_bootstrap-custom.scss new file mode 100644 index 0000000..5cb3df5 --- /dev/null +++ b/www/resources/sass/_bootstrap-custom.scss @@ -0,0 +1,56 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// Core variables and mixins +@import "bootstrap/variables"; +@import "bootstrap/mixins"; + +// Reset and dependencies +@import "bootstrap/normalize"; +@import "bootstrap/print"; +@import "bootstrap/glyphicons"; + +// Core CSS +@import "bootstrap/scaffolding"; +@import "bootstrap/type"; +@import "bootstrap/code"; +@import "bootstrap/grid"; +@import "bootstrap/tables"; +@import "bootstrap/forms"; +@import "bootstrap/buttons"; + +// Components +// @import "bootstrap/component-animations"; +@import "bootstrap/dropdowns"; +// @import "bootstrap/button-groups"; +@import "bootstrap/input-groups"; +// @import "bootstrap/navs"; +// @import "bootstrap/navbar"; +// @import "bootstrap/breadcrumbs"; +// @import "bootstrap/pagination"; +// @import "bootstrap/pager"; +// @import "bootstrap/labels"; +// @import "bootstrap/badges"; +// @import "bootstrap/jumbotron"; +// @import "bootstrap/thumbnails"; +// @import "bootstrap/alerts"; +// @import "bootstrap/progress-bars"; +// @import "bootstrap/media"; +// @import "bootstrap/list-group"; +@import "bootstrap/panels"; +// @import "bootstrap/responsive-embed"; +// @import "bootstrap/wells"; +@import "bootstrap/close"; + +// Components w/ JavaScript +@import "bootstrap/modals"; +@import "bootstrap/tooltip"; +// @import "bootstrap/popovers"; +// @import "bootstrap/carousel"; + +// Utility classes +// @import "bootstrap/utilities"; +// @import "bootstrap/responsive-utilities"; diff --git a/www/resources/sass/_extra.scss b/www/resources/sass/_extra.scss new file mode 100644 index 0000000..10d7c48 --- /dev/null +++ b/www/resources/sass/_extra.scss @@ -0,0 +1,479 @@ +/* + * Naming conventions: BEM with prefix "b" (b comes from bem). + * Using this method can also separate the custom css rules from bootstrap's + * rules. + * Form: + * block--modifier__element + + */ +@import url('https://fonts.googleapis.com/css?family=Lato:400,300,300i'); +@import url('https://fonts.googleapis.com/css?family=Raleway|Raleway+Dots'); +@import url('https://fonts.googleapis.com/css?family=Roboto:300,400|Roboto+Condensed:300,400,700|Open+Sans:300, 600'); +$lato : 'Lato', serif; +$openSans: 'Open Sans', sans-serif; +$raleway: 'Raleway', sans-serif; +$roboto: 'Roboto', sans-serif; + +// Overall + +.font-smooth { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing:grayscale; +} + +body { + width: 100%; + margin: 0; + display: flex; + min-height: 100vh; + flex-direction: column; + +} + +.ssp-container { + flex: 1; +} + +.header, .ssp-footer { + flex: none; +} + +a { + border: 1px solid transparent; + @extend .font-smooth; + &:hover, &:active, &:focus { + color: $link-color-hover; + text-decoration: none; + } +} +*:focus { + outline: none !important; + border:1px solid $silver !important; + box-shadow: 0 0 10px $btn-action !important; +} + +form { + margin: 0; +} + +.ssp-text-left { + text-align: left!important; +} + + +// Headings +// No use of bem, when we want to override every instance of them + +$header-font-weight: 300; +$headers_margin_top: 50px; +.ssp-logo { + margin-top: $headers_margin_top; + a { + display: inline-block; + padding: 10px; + &:hover { + text-decoration: none; + } + } + img { + width: $logo-width; + } +} + +.headers-text { + font-weight: $header-font-weight; + font-family: $lato; + margin-top: $headers_margin_top; +} + +h1 { + @extend .headers-text; + font-size: 36px; + text-transform: none!important; + margin: 0; + &.disco { + color: $alt-text; + font-family: $openSans; + } +} + + +h1 small { + display: block; + font-size: 14px; + line-height: 1.4; + color: #ccc; + text-transform: none; + letter-spacing: 0; + font-style: italic; + margin-top: 10px; +} + +h2 { + @extend .headers-text; + font-size: 18px; + text-transform: none!important; +} + +h3 { + @extend .headers-text; + font-size: 16px; + &.disco { + @extend .font-smooth; + font-family: $raleway; + color: $light-gray; + margin-top: 20px; + } +} + +h4 { + @extend .headers-text; + font-size: 14px; +} + +h5, h6 { + @extend .headers-text; +} + +h2.subtle { + small { + color: #ccc; + display: block; + font-size: 14px; + margin-top: 10px; + } +} + +// Bottom + +.ssp-footer { + @extend .font-smooth; + background: $footer-bg; + color: $footer-text; + font-weight: 300; + &--container { + padding: 16px; + } +} + +.ssp-lang-container { + display: inline-block; + // position: absolute; + // bottom: -10px; + // right: 24px; +} + + +// Buttons + +$margin-btn: 20px; +$btn-distance: 10px; +$btn-img-height: 36px; +$btn-img-copy-height: 20px; +.ssp-btn { + @extend .font-smooth; + border-radius: 2px; + letter-spacing: 1px; + font-size: 13px; + padding: 15px; + line-height: 40px; + box-shadow: 0 3px 12px rgba(0,0,0,0.07); + border: 0 none; + margin-bottom: $margin-btn; + white-space: normal; + color: $scorpion; + font-family: $roboto; + &:hover, &:focus, &:active { + color: $btn-action; + box-shadow: 0 6px 50px rgba(0,0,0,0.05); + } + .caret { + margin-left: 12px; + } + @at-root &__lg { + width: 100%; + margin: 0; + } + @at-root &__action { + &:focus, &:active, &:hover { + color: $btn-action; + } + } + @at-root &__secondary { + &:focus, &:active, &:hover { + color: $mouse; + } + } + @at-root &__warning { + color: $btn-warning; + } + @at-root &__lg { + img { + height: $btn-img-height; + margin-right: $btn-distance; + &.round { + border-radius: $btn-img-height/2; + } + } + } + @at-root &__footer { + background-color: transparent; + color: $btn-footer; + border-color: transparent; + &:focus, &:active, &:hover { + color: $link-color-hover; + border-color: $silver; + } + } + &--round-icon { + padding: 0; + display: inline-block; + margin-top: $btn-distance/2; + margin-bottom: $btn-distance/2; + border-radius: $btn-img-height/2; + &:not(:last-child) { + margin-right: $btn-distance*2; + } + img { + height: $btn-img-height; + border-radius: $btn-img-height/2; + } + } + &--horizontal-icon { + padding: 6px 34px; + img { + height: $btn-img-height; + } + } + &--copy { + img { + height: $btn-img-copy-height; + } + } +} + +.ssp-btns-container { + text-align: center; + @at-root &--btn__right.ssp-btn { + margin-left: $btn-distance; + } + @at-root &--btn__left.ssp-btn { + margin-right: $btn-distance; + } +} + + +.ssp-dropdown__two_cols { + width: 320px; + padding: 6px; + @at-root &--item { + width: 50%; + float: left; + display: inline-block; + height: 30px; + } +} + +.ssp-btn__show-more { + color: $text-color; + &:hover { + color: $jacksons-purple; + } + +} + +// Content + +.ssp-content-group { + margin-bottom: 18px; + margin-top: 18px; + &__provider-list { + overflow: auto; + &--edugain { + padding: 6px 6px 6px 42px; + height: 400px; + a { + display: block; + position: relative; + padding: 4px 12px; + &:hover { + background-color: $alabaster; + } + } + } + &--other { + a { + display: inline-block; + position: relative; + padding: 0; + } + } + &--local { + padding: 2px 6px 2px 54px; + a { + display: inline-block; + position: relative; + } + } + } +} + +.ssp-attrs--container { + padding: 16px; + margin-bottom: 32px; +} + +.ssp-table { + margin-bottom: 0; + font-size: 13px; + @at-root &--tr__odd { + background-color: lighten($alabaster, 1%); + } + @at-root &--attrname { + width: 35%; + overflow: hidden; + float: left; + word-break: break-word; + text-align: right; + padding-right: 20px; + font-weight: bold; + } + @at-root &--attrvalue { + overflow: hidden; + word-break: break-word; + @at-root &--list--item { + border-bottom: 1px solid $gray-lighter; + padding: 6px 0; + } + } +} + +.ssp-or { + @extend .font-smooth; + font-family: $raleway; + font-size: 16px; + color: $manatee; + margin-top: 40px; + margin-bottom: 40px; +} + +body .ssp-modal-body { + padding: 30px; +} + +.ssp-error-code { + padding: 18px; + white-space: pre-line; +} + +.form-control ~span { + color: $state-danger-text; + font-size: 13px; + display: none; +} + +.error-mandatory input, +.error-mail input { + border-color: $alert-danger-text; +} + +.error-mandatory span.mandatory { + display: block; +} + +.error-mail span.mail { + display: block; +} + +input.form-control[type="radio"], input.form-control[type="checkbox"] { + margin: 4px 8px; + width: auto; + display: inline-block; + height: auto; + border: 0 none; +} + +.ssp-form--hint { + color: #989393; +} + +@keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} + +/* Firefox < 16 */ +@-moz-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} + +/* Safari, Chrome and Opera > 12.1 */ +@-webkit-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} + +/* Internet Explorer */ +@-ms-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} + +/* Opera < 12.1 */ +@-o-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} + + .modal.fade .modal-dialog { +// When fading in the modal, animate it to slide down + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); // IE9 only + transform: translate(0, 0); +} + .modal.fade.in .modal-dialog { + -webkit-animation: fadein 0.5s; /* Safari, Chrome and Opera > 12.1 */ + -moz-animation: fadein 0.5s; /* Firefox < 16 */ + -ms-animation: fadein 0.5s; /* Internet Explorer */ + -o-animation: fadein 0.5s; /* Opera < 12.1 */ + animation: fadein 0.5s; + } + + .container { + // max-width: 375px; + } + + .ssp-link-forgot { + @extend .font-smooth; + &.pull-right { + float: right; + } + &.pull-left { + float: left; + } + } + + .ssp-btn__login { + margin-top: 18px; + } + + .ssp-container-small { + max-width: 280px; + margin: 0 auto; + } + + .ssp-signup { + @extend .font-smooth; + padding: 6px; + color: $text-color; + font-size: 15px; + a { + color: $link-color; + &:hover { + color: $link-color-hover; + } + } + + + } diff --git a/www/resources/sass/_loader.scss b/www/resources/sass/_loader.scss new file mode 100644 index 0000000..584230d --- /dev/null +++ b/www/resources/sass/_loader.scss @@ -0,0 +1,136 @@ +// Loader from http://tobiasahlin.com/spinkit/ + +#loader { + position: absolute; + width: 100%; + height: 100%; + // background: $mouse; + background: $white; + z-index: 10; + display: flex; + align-items: center; + justify-content: center; +} + +.sk-circle { + margin: 100px auto; + width: 100px; + height: 100px; + position: relative; +} +.sk-circle .sk-child { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; +} +.sk-circle .sk-child:before { + content: ''; + display: block; + margin: 0 auto; + width: 15%; + height: 15%; + background-color: $btn-action; + border-radius: 100%; + -webkit-animation: sk-circleBounceDelay 1.2s infinite ease-in-out both; + animation: sk-circleBounceDelay 1.2s infinite ease-in-out both; +} +.sk-circle .sk-circle2 { + -webkit-transform: rotate(30deg); + -ms-transform: rotate(30deg); + transform: rotate(30deg); } +.sk-circle .sk-circle3 { + -webkit-transform: rotate(60deg); + -ms-transform: rotate(60deg); + transform: rotate(60deg); } +.sk-circle .sk-circle4 { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); } +.sk-circle .sk-circle5 { + -webkit-transform: rotate(120deg); + -ms-transform: rotate(120deg); + transform: rotate(120deg); } +.sk-circle .sk-circle6 { + -webkit-transform: rotate(150deg); + -ms-transform: rotate(150deg); + transform: rotate(150deg); } +.sk-circle .sk-circle7 { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); } +.sk-circle .sk-circle8 { + -webkit-transform: rotate(210deg); + -ms-transform: rotate(210deg); + transform: rotate(210deg); } +.sk-circle .sk-circle9 { + -webkit-transform: rotate(240deg); + -ms-transform: rotate(240deg); + transform: rotate(240deg); } +.sk-circle .sk-circle10 { + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); } +.sk-circle .sk-circle11 { + -webkit-transform: rotate(300deg); + -ms-transform: rotate(300deg); + transform: rotate(300deg); } +.sk-circle .sk-circle12 { + -webkit-transform: rotate(330deg); + -ms-transform: rotate(330deg); + transform: rotate(330deg); } +.sk-circle .sk-circle2:before { + -webkit-animation-delay: -1.1s; + animation-delay: -1.1s; } +.sk-circle .sk-circle3:before { + -webkit-animation-delay: -1s; + animation-delay: -1s; } +.sk-circle .sk-circle4:before { + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; } +.sk-circle .sk-circle5:before { + -webkit-animation-delay: -0.8s; + animation-delay: -0.8s; } +.sk-circle .sk-circle6:before { + -webkit-animation-delay: -0.7s; + animation-delay: -0.7s; } +.sk-circle .sk-circle7:before { + -webkit-animation-delay: -0.6s; + animation-delay: -0.6s; } +.sk-circle .sk-circle8:before { + -webkit-animation-delay: -0.5s; + animation-delay: -0.5s; } +.sk-circle .sk-circle9:before { + -webkit-animation-delay: -0.4s; + animation-delay: -0.4s; } +.sk-circle .sk-circle10:before { + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; } +.sk-circle .sk-circle11:before { + -webkit-animation-delay: -0.2s; + animation-delay: -0.2s; } +.sk-circle .sk-circle12:before { + -webkit-animation-delay: -0.1s; + animation-delay: -0.1s; } + +@-webkit-keyframes sk-circleBounceDelay { + 0%, 80%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } 40% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes sk-circleBounceDelay { + 0%, 80%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } 40% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + diff --git a/www/resources/sass/_settings.scss b/www/resources/sass/_settings.scss new file mode 100644 index 0000000..23c2335 --- /dev/null +++ b/www/resources/sass/_settings.scss @@ -0,0 +1,28 @@ +// Colors +// Color names from: http://chir.ag/projects/name-that-color + +$tradewind: #68b8b3; //green blue +$white: #fff; +$black: #333; +$denim: #0d6fcc; +$mariner: #2d72d6; +$punch: #d53b23; +$jacksons-purple: #232080; +$cerulean: #00a0de; +$blue-marine: #040067; +// Gray +$alabaster: #f7f7f7; +$silver: #cdc9c9; +$scorpion: #5b5b5b;; +$manatee: #90929D; +$mouse: #848484; +$light-gray: #767779; + +// Bootstrap variables +$link-color: $mariner; +$table-border-color: transparent; +$container-lg: 970px; + +// tooltip colors +$tooltip-bg: $tradewind; +$tooltip-color: $white; diff --git a/www/resources/sass/_settings_custom.scss b/www/resources/sass/_settings_custom.scss new file mode 100644 index 0000000..7098a01 --- /dev/null +++ b/www/resources/sass/_settings_custom.scss @@ -0,0 +1,15 @@ +// background color of primary button +$btn-action: $cerulean; +$btn-warning: $punch; +$footer-bg: $white; +$footer-text: #333; +$headers-color: $scorpion; +$link-color-hover: $cerulean; +// text and border color of button that is in the footer +$btn-footer: #333; + +$logo-height: 65px; +$logo-width: 200px; + +// h1 font color +$alt-text: $blue-marine; diff --git a/www/resources/sass/app.scss b/www/resources/sass/app.scss new file mode 100644 index 0000000..cdc7188 --- /dev/null +++ b/www/resources/sass/app.scss @@ -0,0 +1,5 @@ +@import "settings"; +@import "settings_custom"; +@import "bootstrap-custom"; +@import "extra"; +@import "loader"; diff --git a/www/resources/sass/bootstrap/_alerts.scss b/www/resources/sass/bootstrap/_alerts.scss new file mode 100644 index 0000000..7d1e1fd --- /dev/null +++ b/www/resources/sass/bootstrap/_alerts.scss @@ -0,0 +1,73 @@ +// +// Alerts +// -------------------------------------------------- + + +// Base styles +// ------------------------- + +.alert { + padding: $alert-padding; + margin-bottom: $line-height-computed; + border: 1px solid transparent; + border-radius: $alert-border-radius; + + // Headings for larger alerts + h4 { + margin-top: 0; + // Specified for the h4 to prevent conflicts of changing $headings-color + color: inherit; + } + + // Provide class for links that match alerts + .alert-link { + font-weight: $alert-link-font-weight; + } + + // Improve alignment and spacing of inner content + > p, + > ul { + margin-bottom: 0; + } + + > p + p { + margin-top: 5px; + } +} + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. +.alert-dismissible { + padding-right: ($alert-padding + 20); + + // Adjust close link position + .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } +} + +// Alternate styles +// +// Generate contextual modifier classes for colorizing the alert. + +.alert-success { + @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); +} + +.alert-info { + @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); +} + +.alert-warning { + @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); +} + +.alert-danger { + @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); +} diff --git a/www/resources/sass/bootstrap/_badges.scss b/www/resources/sass/bootstrap/_badges.scss new file mode 100644 index 0000000..70002e0 --- /dev/null +++ b/www/resources/sass/bootstrap/_badges.scss @@ -0,0 +1,68 @@ +// +// Badges +// -------------------------------------------------- + + +// Base class +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: $font-size-small; + font-weight: $badge-font-weight; + color: $badge-color; + line-height: $badge-line-height; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: $badge-bg; + border-radius: $badge-border-radius; + + // Empty badges collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for badges in buttons + .btn & { + position: relative; + top: -1px; + } + + .btn-xs &, + .btn-group-xs > .btn & { + top: 0; + padding: 1px 5px; + } + + // [converter] extracted a& to a.badge + + // Account for badges in navs + .list-group-item.active > &, + .nav-pills > .active > a > & { + color: $badge-active-color; + background-color: $badge-active-bg; + } + + .list-group-item > & { + float: right; + } + + .list-group-item > & + & { + margin-right: 5px; + } + + .nav-pills > li > a > & { + margin-left: 3px; + } +} + +// Hover state, but only for links +a.badge { + &:hover, + &:focus { + color: $badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } +} diff --git a/www/resources/sass/bootstrap/_breadcrumbs.scss b/www/resources/sass/bootstrap/_breadcrumbs.scss new file mode 100644 index 0000000..b61f0c7 --- /dev/null +++ b/www/resources/sass/bootstrap/_breadcrumbs.scss @@ -0,0 +1,28 @@ +// +// Breadcrumbs +// -------------------------------------------------- + + +.breadcrumb { + padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal; + margin-bottom: $line-height-computed; + list-style: none; + background-color: $breadcrumb-bg; + border-radius: $border-radius-base; + + > li { + display: inline-block; + + + li:before { + // [converter] Workaround for https://github.com/sass/libsass/issues/1115 + $nbsp: "\00a0"; + content: "#{$breadcrumb-separator}#{$nbsp}"; // Unicode space added since inline-block means non-collapsing white-space + padding: 0 5px; + color: $breadcrumb-color; + } + } + + > .active { + color: $breadcrumb-active-color; + } +} diff --git a/www/resources/sass/bootstrap/_button-groups.scss b/www/resources/sass/bootstrap/_button-groups.scss new file mode 100644 index 0000000..4b385f5 --- /dev/null +++ b/www/resources/sass/bootstrap/_button-groups.scss @@ -0,0 +1,244 @@ +// +// Button groups +// -------------------------------------------------- + +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; // match .btn alignment given font-size hack above + > .btn { + position: relative; + float: left; + // Bring the "active" button to the front + &:hover, + &:focus, + &:active, + &.active { + z-index: 2; + } + } +} + +// Prevent double borders when buttons are next to each other +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: -1px; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + margin-left: -5px; // Offset the first child's margin + @include clearfix; + + .btn, + .btn-group, + .input-group { + float: left; + } + > .btn, + > .btn-group, + > .input-group { + margin-left: 5px; + } +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match +.btn-group > .btn:first-child { + margin-left: 0; + &:not(:last-child):not(.dropdown-toggle) { + @include border-right-radius(0); + } +} +// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + @include border-left-radius(0); +} + +// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + @include border-right-radius(0); + } +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + @include border-left-radius(0); +} + +// On active and open, don't show outline +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-xs > .btn { @extend .btn-xs; } +.btn-group-sm > .btn { @extend .btn-sm; } +.btn-group-lg > .btn { @extend .btn-lg; } + + +// Split button dropdowns +// ---------------------- + +// Give the line between buttons some depth +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +// The clickable button for toggling the menu +// Remove the gradient and set the same inset shadow as the :active state +.btn-group.open .dropdown-toggle { + @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + @include box-shadow(none); + } +} + + +// Reposition the caret +.btn .caret { + margin-left: 0; +} +// Carets in other button sizes +.btn-lg .caret { + border-width: $caret-width-large $caret-width-large 0; + border-bottom-width: 0; +} +// Upside down carets for .dropup +.dropup .btn-lg .caret { + border-width: 0 $caret-width-large $caret-width-large; +} + + +// Vertical button groups +// ---------------------- + +.btn-group-vertical { + > .btn, + > .btn-group, + > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + } + + // Clear floats so dropdown menus can be properly placed + > .btn-group { + @include clearfix; + > .btn { + float: none; + } + } + + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } +} + +.btn-group-vertical > .btn { + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child:not(:last-child) { + @include border-top-radius($btn-border-radius-base); + @include border-bottom-radius(0); + } + &:last-child:not(:first-child) { + @include border-top-radius(0); + @include border-bottom-radius($btn-border-radius-base); + } +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + @include border-bottom-radius(0); + } +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + @include border-top-radius(0); +} + + +// Justified button groups +// ---------------------- + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; + > .btn, + > .btn-group { + float: none; + display: table-cell; + width: 1%; + } + > .btn-group .btn { + width: 100%; + } + + > .btn-group .dropdown-menu { + left: auto; + } +} + + +// Checkbox and radio options +// +// In order to support the browser's form validation feedback, powered by the +// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use +// `display: none;` or `visibility: hidden;` as that also hides the popover. +// Simply visually hiding the inputs via `opacity` would leave them clickable in +// certain cases which is prevented by using `clip` and `pointer-events`. +// This way, we ensure a DOM element is visible to position the popover from. +// +// See https://github.com/twbs/bootstrap/pull/12794 and +// https://github.com/twbs/bootstrap/pull/14559 for more information. + +[data-toggle="buttons"] { + > .btn, + > .btn-group > .btn { + input[type="radio"], + input[type="checkbox"] { + position: absolute; + clip: rect(0,0,0,0); + pointer-events: none; + } + } +} diff --git a/www/resources/sass/bootstrap/_buttons.scss b/www/resources/sass/bootstrap/_buttons.scss new file mode 100644 index 0000000..6452b70 --- /dev/null +++ b/www/resources/sass/bootstrap/_buttons.scss @@ -0,0 +1,168 @@ +// +// Buttons +// -------------------------------------------------- + + +// Base styles +// -------------------------------------------------- + +.btn { + display: inline-block; + margin-bottom: 0; // For input.btn + font-weight: $btn-font-weight; + text-align: center; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + white-space: nowrap; + @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base); + @include user-select(none); + + &, + &:active, + &.active { + &:focus, + &.focus { + @include tab-focus; + } + } + + &:hover, + &:focus, + &.focus { + color: $btn-default-color; + text-decoration: none; + } + + &:active, + &.active { + outline: 0; + background-image: none; + @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + cursor: $cursor-disabled; + @include opacity(.65); + @include box-shadow(none); + } + + // [converter] extracted a& to a.btn +} + +a.btn { + &.disabled, + fieldset[disabled] & { + pointer-events: none; // Future-proof disabling of clicks on `` elements + } +} + + +// Alternate buttons +// -------------------------------------------------- + +.btn-default { + @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border); +} +.btn-primary { + @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border); +} +// Success appears as green +.btn-success { + @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border); +} +// Info appears as blue-green +.btn-info { + @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border); +} +// Warning appears as orange +.btn-warning { + @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border); +} +// Danger and error appear as red +.btn-danger { + @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border); +} + + +// Link buttons +// ------------------------- + +// Make a button look and behave like a link +.btn-link { + color: $link-color; + font-weight: normal; + border-radius: 0; + + &, + &:active, + &.active, + &[disabled], + fieldset[disabled] & { + background-color: transparent; + @include box-shadow(none); + } + &, + &:hover, + &:focus, + &:active { + border-color: transparent; + } + &:hover, + &:focus { + color: $link-hover-color; + text-decoration: $link-hover-decoration; + background-color: transparent; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: $btn-link-disabled-color; + text-decoration: none; + } + } +} + + +// Button Sizes +// -------------------------------------------------- + +.btn-lg { + // line-height: ensure even-numbered height of button next to large input + @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large); +} +.btn-sm { + // line-height: ensure proper height of button next to small input + @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small); +} +.btn-xs { + @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small); +} + + +// Block button +// -------------------------------------------------- + +.btn-block { + display: block; + width: 100%; +} + +// Vertically space out multiple block buttons +.btn-block + .btn-block { + margin-top: 5px; +} + +// Specificity overrides +input[type="submit"], +input[type="reset"], +input[type="button"] { + &.btn-block { + width: 100%; + } +} diff --git a/www/resources/sass/bootstrap/_carousel.scss b/www/resources/sass/bootstrap/_carousel.scss new file mode 100644 index 0000000..753d881 --- /dev/null +++ b/www/resources/sass/bootstrap/_carousel.scss @@ -0,0 +1,270 @@ +// +// Carousel +// -------------------------------------------------- + + +// Wrapper for the slide container and indicators +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + + > .item { + display: none; + position: relative; + @include transition(.6s ease-in-out left); + + // Account for jankitude on images + > img, + > a > img { + @include img-responsive; + line-height: 1; + } + + // WebKit CSS3 transforms for supported devices + @media all and (transform-3d), (-webkit-transform-3d) { + @include transition-transform(0.6s ease-in-out); + @include backface-visibility(hidden); + @include perspective(1000px); + + &.next, + &.active.right { + @include translate3d(100%, 0, 0); + left: 0; + } + &.prev, + &.active.left { + @include translate3d(-100%, 0, 0); + left: 0; + } + &.next.left, + &.prev.right, + &.active { + @include translate3d(0, 0, 0); + left: 0; + } + } + } + + > .active, + > .next, + > .prev { + display: block; + } + + > .active { + left: 0; + } + + > .next, + > .prev { + position: absolute; + top: 0; + width: 100%; + } + + > .next { + left: 100%; + } + > .prev { + left: -100%; + } + > .next.left, + > .prev.right { + left: 0; + } + + > .active.left { + left: -100%; + } + > .active.right { + left: 100%; + } + +} + +// Left/right controls for nav +// --------------------------- + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: $carousel-control-width; + @include opacity($carousel-control-opacity); + font-size: $carousel-control-font-size; + color: $carousel-control-color; + text-align: center; + text-shadow: $carousel-text-shadow; + background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug + // We can't have this transition here because WebKit cancels the carousel + // animation if you trip this while in the middle of another animation. + + // Set gradients for backgrounds + &.left { + @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001)); + } + &.right { + left: auto; + right: 0; + @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5)); + } + + // Hover/focus state + &:hover, + &:focus { + outline: 0; + color: $carousel-control-color; + text-decoration: none; + @include opacity(.9); + } + + // Toggles + .icon-prev, + .icon-next, + .glyphicon-chevron-left, + .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; + } + .icon-prev, + .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + .icon-prev, + .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; + } + + + .icon-prev { + &:before { + content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + } + } + .icon-next { + &:before { + content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + } + } +} + +// Optional indicator pips +// +// Add an unordered list with the following class and add a list item for each +// slide your carousel holds. + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; + + li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid $carousel-indicator-border-color; + border-radius: 10px; + cursor: pointer; + + // IE8-9 hack for event handling + // + // Internet Explorer 8-9 does not support clicks on elements without a set + // `background-color`. We cannot use `filter` since that's not viewed as a + // background color by the browser. Thus, a hack is needed. + // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer + // + // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we + // set alpha transparency for the best results possible. + background-color: #000 \9; // IE8 + background-color: rgba(0,0,0,0); // IE9 + } + .active { + margin: 0; + width: 12px; + height: 12px; + background-color: $carousel-indicator-active-bg; + } +} + +// Optional captions +// ----------------------------- +// Hidden by default for smaller viewports +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: $carousel-caption-color; + text-align: center; + text-shadow: $carousel-text-shadow; + & .btn { + text-shadow: none; // No shadow for button elements in carousel-caption + } +} + + +// Scale up controls for tablets and up +@media screen and (min-width: $screen-sm-min) { + + // Scale up the controls a smidge + .carousel-control { + .glyphicon-chevron-left, + .glyphicon-chevron-right, + .icon-prev, + .icon-next { + width: ($carousel-control-font-size * 1.5); + height: ($carousel-control-font-size * 1.5); + margin-top: ($carousel-control-font-size / -2); + font-size: ($carousel-control-font-size * 1.5); + } + .glyphicon-chevron-left, + .icon-prev { + margin-left: ($carousel-control-font-size / -2); + } + .glyphicon-chevron-right, + .icon-next { + margin-right: ($carousel-control-font-size / -2); + } + } + + // Show and left align the captions + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + // Move up the indicators + .carousel-indicators { + bottom: 20px; + } +} diff --git a/www/resources/sass/bootstrap/_close.scss b/www/resources/sass/bootstrap/_close.scss new file mode 100644 index 0000000..3b74d8a --- /dev/null +++ b/www/resources/sass/bootstrap/_close.scss @@ -0,0 +1,36 @@ +// +// Close icons +// -------------------------------------------------- + + +.close { + float: right; + font-size: ($font-size-base * 1.5); + font-weight: $close-font-weight; + line-height: 1; + color: $close-color; + text-shadow: $close-text-shadow; + @include opacity(.2); + + &:hover, + &:focus { + color: $close-color; + text-decoration: none; + cursor: pointer; + @include opacity(.5); + } + + // [converter] extracted button& to button.close +} + +// Additional properties for button version +// iOS requires the button element instead of an anchor tag. +// If you want the anchor version, it requires `href="#"`. +// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} diff --git a/www/resources/sass/bootstrap/_code.scss b/www/resources/sass/bootstrap/_code.scss new file mode 100644 index 0000000..caa5f06 --- /dev/null +++ b/www/resources/sass/bootstrap/_code.scss @@ -0,0 +1,69 @@ +// +// Code (inline and block) +// -------------------------------------------------- + + +// Inline and block code styles +code, +kbd, +pre, +samp { + font-family: $font-family-monospace; +} + +// Inline code +code { + padding: 2px 4px; + font-size: 90%; + color: $code-color; + background-color: $code-bg; + border-radius: $border-radius-base; +} + +// User input typically entered via keyboard +kbd { + padding: 2px 4px; + font-size: 90%; + color: $kbd-color; + background-color: $kbd-bg; + border-radius: $border-radius-small; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); + + kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; + } +} + +// Blocks of code +pre { + display: block; + padding: (($line-height-computed - 1) / 2); + margin: 0 0 ($line-height-computed / 2); + font-size: ($font-size-base - 1); // 14px to 13px + line-height: $line-height-base; + word-break: break-all; + word-wrap: break-word; + color: $pre-color; + background-color: $pre-bg; + border: 1px solid $pre-border-color; + border-radius: $border-radius-base; + + // Account for some code outputs that place code tags in pre tags + code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: $pre-scrollable-max-height; + overflow-y: scroll; +} diff --git a/www/resources/sass/bootstrap/_component-animations.scss b/www/resources/sass/bootstrap/_component-animations.scss new file mode 100644 index 0000000..ca3b43c --- /dev/null +++ b/www/resources/sass/bootstrap/_component-animations.scss @@ -0,0 +1,37 @@ +// +// Component animations +// -------------------------------------------------- + +// Heads up! +// +// We don't use the `.opacity()` mixin here since it causes a bug with text +// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. + +.fade { + opacity: 0; + @include transition(opacity .15s linear); + &.in { + opacity: 1; + } +} + +.collapse { + display: none; + + &.in { display: block; } + // [converter] extracted tr&.in to tr.collapse.in + // [converter] extracted tbody&.in to tbody.collapse.in +} + +tr.collapse.in { display: table-row; } + +tbody.collapse.in { display: table-row-group; } + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + @include transition-property(height, visibility); + @include transition-duration(.35s); + @include transition-timing-function(ease); +} diff --git a/www/resources/sass/bootstrap/_dropdowns.scss b/www/resources/sass/bootstrap/_dropdowns.scss new file mode 100644 index 0000000..aac8459 --- /dev/null +++ b/www/resources/sass/bootstrap/_dropdowns.scss @@ -0,0 +1,216 @@ +// +// Dropdown menus +// -------------------------------------------------- + + +// Dropdown arrow/caret +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: $caret-width-base dashed; + border-top: $caret-width-base solid \9; // IE8 + border-right: $caret-width-base solid transparent; + border-left: $caret-width-base solid transparent; +} + +// The dropdown wrapper (div) +.dropup, +.dropdown { + position: relative; +} + +// Prevent the focus on the dropdown toggle when closing dropdowns +.dropdown-toggle:focus { + outline: 0; +} + +// The dropdown menu (ul) +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: $zindex-dropdown; + display: none; // none by default, but block on "open" of the menu + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; // override default ul + list-style: none; + font-size: $font-size-base; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + background-color: $dropdown-bg; + border: 1px solid $dropdown-fallback-border; // IE8 fallback + border: 1px solid $dropdown-border; + border-radius: $border-radius-base; + @include box-shadow(0 6px 12px rgba(0,0,0,.175)); + background-clip: padding-box; + + // Aligns the dropdown menu to right + // + // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` + &.pull-right { + right: 0; + left: auto; + } + + // Dividers (basically an hr) within the dropdown + .divider { + @include nav-divider($dropdown-divider-bg); + } + + // Links within the dropdown menu + > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: $line-height-base; + color: $dropdown-link-color; + white-space: nowrap; // prevent links from randomly breaking onto new lines + } +} + +// Hover/Focus state +.dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: $dropdown-link-hover-color; + background-color: $dropdown-link-hover-bg; + } +} + +// Active state +.dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: $dropdown-link-active-color; + text-decoration: none; + outline: 0; + background-color: $dropdown-link-active-bg; + } +} + +// Disabled state +// +// Gray out text and ensure the hover/focus state remains gray + +.dropdown-menu > .disabled > a { + &, + &:hover, + &:focus { + color: $dropdown-link-disabled-color; + } + + // Nuke hover/focus effects + &:hover, + &:focus { + text-decoration: none; + background-color: transparent; + background-image: none; // Remove CSS gradient + @include reset-filter; + cursor: $cursor-disabled; + } +} + +// Open state for the dropdown +.open { + // Show the menu + > .dropdown-menu { + display: block; + } + + // Remove the outline when :focus is triggered + > a { + outline: 0; + } +} + +// Menu positioning +// +// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown +// menu with the parent. +.dropdown-menu-right { + left: auto; // Reset the default from `.dropdown-menu` + right: 0; +} +// With v3, we enabled auto-flipping if you have a dropdown within a right +// aligned nav component. To enable the undoing of that, we provide an override +// to restore the default dropdown menu alignment. +// +// This is only for left-aligning a dropdown menu within a `.navbar-right` or +// `.pull-right` nav component. +.dropdown-menu-left { + left: 0; + right: auto; +} + +// Dropdown section headers +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: $font-size-small; + line-height: $line-height-base; + color: $dropdown-header-color; + white-space: nowrap; // as with > li > a +} + +// Backdrop to catch body clicks on mobile, etc. +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: ($zindex-dropdown - 10); +} + +// Right aligned dropdowns +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// +// Just add .dropup after the standard .dropdown class and you're set, bro. +// TODO: abstract this so that the navbar fixed styles are not placed here? + +.dropup, +.navbar-fixed-bottom .dropdown { + // Reverse the caret + .caret { + border-top: 0; + border-bottom: $caret-width-base dashed; + border-bottom: $caret-width-base solid \9; // IE8 + content: ""; + } + // Different positioning for bottom up menu + .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; + } +} + + +// Component alignment +// +// Reiterate per navbar.less and the modified component alignment there. + +@media (min-width: $grid-float-breakpoint) { + .navbar-right { + .dropdown-menu { + right: 0; left: auto; + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + left: 0; right: auto; + } + } +} diff --git a/www/resources/sass/bootstrap/_forms.scss b/www/resources/sass/bootstrap/_forms.scss new file mode 100644 index 0000000..ac26a6a --- /dev/null +++ b/www/resources/sass/bootstrap/_forms.scss @@ -0,0 +1,617 @@ +// +// Forms +// -------------------------------------------------- + + +// Normalize non-controls +// +// Restyle and baseline non-control form elements. + +fieldset { + padding: 0; + margin: 0; + border: 0; + // Chrome and Firefox set a `min-width: min-content;` on fieldsets, + // so we reset that to ensure it behaves more like a standard block element. + // See https://github.com/twbs/bootstrap/issues/12359. + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: $line-height-computed; + font-size: ($font-size-base * 1.5); + line-height: inherit; + color: $legend-color; + border: 0; + border-bottom: 1px solid $legend-border-color; +} + +label { + display: inline-block; + max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) + margin-bottom: 5px; + font-weight: bold; +} + + +// Normalize form controls +// +// While most of our form styles require extra classes, some basic normalization +// is required to ensure optimum display with or without those classes to better +// address browser inconsistencies. + +// Override content-box in Normalize (* isn't specific enough) +input[type="search"] { + @include box-sizing(border-box); +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; // IE8-9 + line-height: normal; +} + +input[type="file"] { + display: block; +} + +// Make range inputs behave like textual form controls +input[type="range"] { + display: block; + width: 100%; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Focus for file, radio, and checkbox +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + @include tab-focus; +} + +// Adjust output element +output { + display: block; + padding-top: ($padding-base-vertical + 1); + font-size: $font-size-base; + line-height: $line-height-base; + color: $input-color; +} + + +// Common form controls +// +// Shared size and type resets for form controls. Apply `.form-control` to any +// of the following form controls: +// +// select +// textarea +// input[type="text"] +// input[type="password"] +// input[type="datetime"] +// input[type="datetime-local"] +// input[type="date"] +// input[type="month"] +// input[type="time"] +// input[type="week"] +// input[type="number"] +// input[type="email"] +// input[type="url"] +// input[type="search"] +// input[type="tel"] +// input[type="color"] + +.form-control { + display: block; + width: 100%; + height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + padding: $padding-base-vertical $padding-base-horizontal; + font-size: $font-size-base; + line-height: $line-height-base; + color: $input-color; + background-color: $input-bg; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid $input-border; + border-radius: $input-border-radius; // Note: This has no effect on s in CSS. + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s); + + // Customize the `:focus` state to imitate native WebKit styles. + @include form-control-focus; + + // Placeholder + @include placeholder; + + // Unstyle the caret on `` background color +$input-bg: #fff !default; +//** `` background color +$input-bg-disabled: $gray-lighter !default; + +//** Text color for ``s +$input-color: $gray !default; +//** `` border color +$input-border: #ccc !default; + +// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4 +//** Default `.form-control` border radius +// This has no effect on ``s in CSS. +$input-border-radius: $border-radius-base !default; +//** Large `.form-control` border radius +$input-border-radius-large: $border-radius-large !default; +//** Small `.form-control` border radius +$input-border-radius-small: $border-radius-small !default; + +//** Border color for inputs on focus +$input-border-focus: #66afe9 !default; + +//** Placeholder text color +$input-color-placeholder: #999 !default; + +//** Default `.form-control` height +$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default; +//** Large `.form-control` height +$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default; +//** Small `.form-control` height +$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default; + +//** `.form-group` margin +$form-group-margin-bottom: 15px !default; + +$legend-color: $gray-dark !default; +$legend-border-color: #e5e5e5 !default; + +//** Background color for textual input addons +$input-group-addon-bg: $gray-lighter !default; +//** Border color for textual input addons +$input-group-addon-border-color: $input-border !default; + +//** Disabled cursor for form controls and buttons. +$cursor-disabled: not-allowed !default; + + +//== Dropdowns +// +//## Dropdown menu container and contents. + +//** Background for the dropdown menu. +$dropdown-bg: #fff !default; +//** Dropdown menu `border-color`. +$dropdown-border: rgba(0,0,0,.15) !default; +//** Dropdown menu `border-color` **for IE8**. +$dropdown-fallback-border: #ccc !default; +//** Divider color for between dropdown items. +$dropdown-divider-bg: #e5e5e5 !default; + +//** Dropdown link text color. +$dropdown-link-color: $gray-dark !default; +//** Hover color for dropdown links. +$dropdown-link-hover-color: darken($gray-dark, 5%) !default; +//** Hover background for dropdown links. +$dropdown-link-hover-bg: #f5f5f5 !default; + +//** Active dropdown menu item text color. +$dropdown-link-active-color: $component-active-color !default; +//** Active dropdown menu item background color. +$dropdown-link-active-bg: $component-active-bg !default; + +//** Disabled dropdown menu item background color. +$dropdown-link-disabled-color: $gray-light !default; + +//** Text color for headers within dropdown menus. +$dropdown-header-color: $gray-light !default; + +//** Deprecated `$dropdown-caret-color` as of v3.1.0 +$dropdown-caret-color: #000 !default; + + +//-- Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. +// +// Note: These variables are not generated into the Customizer. + +$zindex-navbar: 1000 !default; +$zindex-dropdown: 1000 !default; +$zindex-popover: 1060 !default; +$zindex-tooltip: 1070 !default; +$zindex-navbar-fixed: 1030 !default; +$zindex-modal-background: 1040 !default; +$zindex-modal: 1050 !default; + + +//== Media queries breakpoints +// +//## Define the breakpoints at which your layout will change, adapting to different screen sizes. + +// Extra small screen / phone +//** Deprecated `$screen-xs` as of v3.0.1 +$screen-xs: 480px !default; +//** Deprecated `$screen-xs-min` as of v3.2.0 +$screen-xs-min: $screen-xs !default; +//** Deprecated `$screen-phone` as of v3.0.1 +$screen-phone: $screen-xs-min !default; + +// Small screen / tablet +//** Deprecated `$screen-sm` as of v3.0.1 +$screen-sm: 768px !default; +$screen-sm-min: $screen-sm !default; +//** Deprecated `$screen-tablet` as of v3.0.1 +$screen-tablet: $screen-sm-min !default; + +// Medium screen / desktop +//** Deprecated `$screen-md` as of v3.0.1 +$screen-md: 992px !default; +$screen-md-min: $screen-md !default; +//** Deprecated `$screen-desktop` as of v3.0.1 +$screen-desktop: $screen-md-min !default; + +// Large screen / wide desktop +//** Deprecated `$screen-lg` as of v3.0.1 +$screen-lg: 1200px !default; +$screen-lg-min: $screen-lg !default; +//** Deprecated `$screen-lg-desktop` as of v3.0.1 +$screen-lg-desktop: $screen-lg-min !default; + +// So media queries don't overlap when required, provide a maximum +$screen-xs-max: ($screen-sm-min - 1) !default; +$screen-sm-max: ($screen-md-min - 1) !default; +$screen-md-max: ($screen-lg-min - 1) !default; + + +//== Grid system +// +//## Define your custom responsive grid. + +//** Number of columns in the grid. +$grid-columns: 12 !default; +//** Padding between columns. Gets divided in half for the left and right. +$grid-gutter-width: 30px !default; +// Navbar collapse +//** Point at which the navbar becomes uncollapsed. +$grid-float-breakpoint: $screen-sm-min !default; +//** Point at which the navbar begins collapsing. +$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default; + + +//== Container sizes +// +//## Define the maximum width of `.container` for different screen sizes. + +// Small screen / tablet +$container-tablet: (720px + $grid-gutter-width) !default; +//** For `$screen-sm-min` and up. +$container-sm: $container-tablet !default; + +// Medium screen / desktop +$container-desktop: (940px + $grid-gutter-width) !default; +//** For `$screen-md-min` and up. +$container-md: $container-desktop !default; + +// Large screen / wide desktop +$container-large-desktop: (1140px + $grid-gutter-width) !default; +//** For `$screen-lg-min` and up. +$container-lg: $container-large-desktop !default; + + +//== Navbar +// +//## + +// Basics of a navbar +$navbar-height: 50px !default; +$navbar-margin-bottom: $line-height-computed !default; +$navbar-border-radius: $border-radius-base !default; +$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default; +$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default; +$navbar-collapse-max-height: 340px !default; + +$navbar-default-color: #777 !default; +$navbar-default-bg: #f8f8f8 !default; +$navbar-default-border: darken($navbar-default-bg, 6.5%) !default; + +// Navbar links +$navbar-default-link-color: #777 !default; +$navbar-default-link-hover-color: #333 !default; +$navbar-default-link-hover-bg: transparent !default; +$navbar-default-link-active-color: #555 !default; +$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default; +$navbar-default-link-disabled-color: #ccc !default; +$navbar-default-link-disabled-bg: transparent !default; + +// Navbar brand label +$navbar-default-brand-color: $navbar-default-link-color !default; +$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default; +$navbar-default-brand-hover-bg: transparent !default; + +// Navbar toggle +$navbar-default-toggle-hover-bg: #ddd !default; +$navbar-default-toggle-icon-bar-bg: #888 !default; +$navbar-default-toggle-border-color: #ddd !default; + + +//=== Inverted navbar +// Reset inverted navbar basics +$navbar-inverse-color: lighten($gray-light, 15%) !default; +$navbar-inverse-bg: #222 !default; +$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default; + +// Inverted navbar links +$navbar-inverse-link-color: lighten($gray-light, 15%) !default; +$navbar-inverse-link-hover-color: #fff !default; +$navbar-inverse-link-hover-bg: transparent !default; +$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default; +$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default; +$navbar-inverse-link-disabled-color: #444 !default; +$navbar-inverse-link-disabled-bg: transparent !default; + +// Inverted navbar brand label +$navbar-inverse-brand-color: $navbar-inverse-link-color !default; +$navbar-inverse-brand-hover-color: #fff !default; +$navbar-inverse-brand-hover-bg: transparent !default; + +// Inverted navbar toggle +$navbar-inverse-toggle-hover-bg: #333 !default; +$navbar-inverse-toggle-icon-bar-bg: #fff !default; +$navbar-inverse-toggle-border-color: #333 !default; + + +//== Navs +// +//## + +//=== Shared nav styles +$nav-link-padding: 10px 15px !default; +$nav-link-hover-bg: $gray-lighter !default; + +$nav-disabled-link-color: $gray-light !default; +$nav-disabled-link-hover-color: $gray-light !default; + +//== Tabs +$nav-tabs-border-color: #ddd !default; + +$nav-tabs-link-hover-border-color: $gray-lighter !default; + +$nav-tabs-active-link-hover-bg: $body-bg !default; +$nav-tabs-active-link-hover-color: $gray !default; +$nav-tabs-active-link-hover-border-color: #ddd !default; + +$nav-tabs-justified-link-border-color: #ddd !default; +$nav-tabs-justified-active-link-border-color: $body-bg !default; + +//== Pills +$nav-pills-border-radius: $border-radius-base !default; +$nav-pills-active-link-hover-bg: $component-active-bg !default; +$nav-pills-active-link-hover-color: $component-active-color !default; + + +//== Pagination +// +//## + +$pagination-color: $link-color !default; +$pagination-bg: #fff !default; +$pagination-border: #ddd !default; + +$pagination-hover-color: $link-hover-color !default; +$pagination-hover-bg: $gray-lighter !default; +$pagination-hover-border: #ddd !default; + +$pagination-active-color: #fff !default; +$pagination-active-bg: $brand-primary !default; +$pagination-active-border: $brand-primary !default; + +$pagination-disabled-color: $gray-light !default; +$pagination-disabled-bg: #fff !default; +$pagination-disabled-border: #ddd !default; + + +//== Pager +// +//## + +$pager-bg: $pagination-bg !default; +$pager-border: $pagination-border !default; +$pager-border-radius: 15px !default; + +$pager-hover-bg: $pagination-hover-bg !default; + +$pager-active-bg: $pagination-active-bg !default; +$pager-active-color: $pagination-active-color !default; + +$pager-disabled-color: $pagination-disabled-color !default; + + +//== Jumbotron +// +//## + +$jumbotron-padding: 30px !default; +$jumbotron-color: inherit !default; +$jumbotron-bg: $gray-lighter !default; +$jumbotron-heading-color: inherit !default; +$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default; +$jumbotron-heading-font-size: ceil(($font-size-base * 4.5)) !default; + + +//== Form states and alerts +// +//## Define colors for form feedback states and, by default, alerts. + +$state-success-text: #3c763d !default; +$state-success-bg: #dff0d8 !default; +$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default; + +$state-info-text: #31708f !default; +$state-info-bg: #d9edf7 !default; +$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default; + +$state-warning-text: #8a6d3b !default; +$state-warning-bg: #fcf8e3 !default; +$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default; + +$state-danger-text: #a94442 !default; +$state-danger-bg: #f2dede !default; +$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default; + + +//== Tooltips +// +//## + +//** Tooltip max width +$tooltip-max-width: 200px !default; +//** Tooltip text color +$tooltip-color: #fff !default; +//** Tooltip background color +$tooltip-bg: #000 !default; +$tooltip-opacity: .9 !default; + +//** Tooltip arrow width +$tooltip-arrow-width: 5px !default; +//** Tooltip arrow color +$tooltip-arrow-color: $tooltip-bg !default; + + +//== Popovers +// +//## + +//** Popover body background color +$popover-bg: #fff !default; +//** Popover maximum width +$popover-max-width: 276px !default; +//** Popover border color +$popover-border-color: rgba(0,0,0,.2) !default; +//** Popover fallback border color +$popover-fallback-border-color: #ccc !default; + +//** Popover title background color +$popover-title-bg: darken($popover-bg, 3%) !default; + +//** Popover arrow width +$popover-arrow-width: 10px !default; +//** Popover arrow color +$popover-arrow-color: $popover-bg !default; + +//** Popover outer arrow width +$popover-arrow-outer-width: ($popover-arrow-width + 1) !default; +//** Popover outer arrow color +$popover-arrow-outer-color: fade_in($popover-border-color, 0.05) !default; +//** Popover outer arrow fallback color +$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default; + + +//== Labels +// +//## + +//** Default label background color +$label-default-bg: $gray-light !default; +//** Primary label background color +$label-primary-bg: $brand-primary !default; +//** Success label background color +$label-success-bg: $brand-success !default; +//** Info label background color +$label-info-bg: $brand-info !default; +//** Warning label background color +$label-warning-bg: $brand-warning !default; +//** Danger label background color +$label-danger-bg: $brand-danger !default; + +//** Default label text color +$label-color: #fff !default; +//** Default text color of a linked label +$label-link-hover-color: #fff !default; + + +//== Modals +// +//## + +//** Padding applied to the modal body +$modal-inner-padding: 15px !default; + +//** Padding applied to the modal title +$modal-title-padding: 15px !default; +//** Modal title line-height +$modal-title-line-height: $line-height-base !default; + +//** Background color of modal content area +$modal-content-bg: #fff !default; +//** Modal content border color +$modal-content-border-color: rgba(0,0,0,.2) !default; +//** Modal content border color **for IE8** +$modal-content-fallback-border-color: #999 !default; + +//** Modal backdrop background color +$modal-backdrop-bg: #000 !default; +//** Modal backdrop opacity +$modal-backdrop-opacity: .5 !default; +//** Modal header border color +$modal-header-border-color: #e5e5e5 !default; +//** Modal footer border color +$modal-footer-border-color: $modal-header-border-color !default; + +$modal-lg: 900px !default; +$modal-md: 600px !default; +$modal-sm: 300px !default; + + +//== Alerts +// +//## Define alert colors, border radius, and padding. + +$alert-padding: 15px !default; +$alert-border-radius: $border-radius-base !default; +$alert-link-font-weight: bold !default; + +$alert-success-bg: $state-success-bg !default; +$alert-success-text: $state-success-text !default; +$alert-success-border: $state-success-border !default; + +$alert-info-bg: $state-info-bg !default; +$alert-info-text: $state-info-text !default; +$alert-info-border: $state-info-border !default; + +$alert-warning-bg: $state-warning-bg !default; +$alert-warning-text: $state-warning-text !default; +$alert-warning-border: $state-warning-border !default; + +$alert-danger-bg: $state-danger-bg !default; +$alert-danger-text: $state-danger-text !default; +$alert-danger-border: $state-danger-border !default; + + +//== Progress bars +// +//## + +//** Background color of the whole progress component +$progress-bg: #f5f5f5 !default; +//** Progress bar text color +$progress-bar-color: #fff !default; +//** Variable for setting rounded corners on progress bar. +$progress-border-radius: $border-radius-base !default; + +//** Default progress bar color +$progress-bar-bg: $brand-primary !default; +//** Success progress bar color +$progress-bar-success-bg: $brand-success !default; +//** Warning progress bar color +$progress-bar-warning-bg: $brand-warning !default; +//** Danger progress bar color +$progress-bar-danger-bg: $brand-danger !default; +//** Info progress bar color +$progress-bar-info-bg: $brand-info !default; + + +//== List group +// +//## + +//** Background color on `.list-group-item` +$list-group-bg: #fff !default; +//** `.list-group-item` border color +$list-group-border: #ddd !default; +//** List group border radius +$list-group-border-radius: $border-radius-base !default; + +//** Background color of single list items on hover +$list-group-hover-bg: #f5f5f5 !default; +//** Text color of active list items +$list-group-active-color: $component-active-color !default; +//** Background color of active list items +$list-group-active-bg: $component-active-bg !default; +//** Border color of active list elements +$list-group-active-border: $list-group-active-bg !default; +//** Text color for content within active list items +$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default; + +//** Text color of disabled list items +$list-group-disabled-color: $gray-light !default; +//** Background color of disabled list items +$list-group-disabled-bg: $gray-lighter !default; +//** Text color for content within disabled list items +$list-group-disabled-text-color: $list-group-disabled-color !default; + +$list-group-link-color: #555 !default; +$list-group-link-hover-color: $list-group-link-color !default; +$list-group-link-heading-color: #333 !default; + + +//== Panels +// +//## + +$panel-bg: #fff !default; +$panel-body-padding: 15px !default; +$panel-heading-padding: 10px 15px !default; +$panel-footer-padding: $panel-heading-padding !default; +$panel-border-radius: $border-radius-base !default; + +//** Border color for elements within panels +$panel-inner-border: #ddd !default; +$panel-footer-bg: #f5f5f5 !default; + +$panel-default-text: $gray-dark !default; +$panel-default-border: #ddd !default; +$panel-default-heading-bg: #f5f5f5 !default; + +$panel-primary-text: #fff !default; +$panel-primary-border: $brand-primary !default; +$panel-primary-heading-bg: $brand-primary !default; + +$panel-success-text: $state-success-text !default; +$panel-success-border: $state-success-border !default; +$panel-success-heading-bg: $state-success-bg !default; + +$panel-info-text: $state-info-text !default; +$panel-info-border: $state-info-border !default; +$panel-info-heading-bg: $state-info-bg !default; + +$panel-warning-text: $state-warning-text !default; +$panel-warning-border: $state-warning-border !default; +$panel-warning-heading-bg: $state-warning-bg !default; + +$panel-danger-text: $state-danger-text !default; +$panel-danger-border: $state-danger-border !default; +$panel-danger-heading-bg: $state-danger-bg !default; + + +//== Thumbnails +// +//## + +//** Padding around the thumbnail image +$thumbnail-padding: 4px !default; +//** Thumbnail background color +$thumbnail-bg: $body-bg !default; +//** Thumbnail border color +$thumbnail-border: #ddd !default; +//** Thumbnail border radius +$thumbnail-border-radius: $border-radius-base !default; + +//** Custom text color for thumbnail captions +$thumbnail-caption-color: $text-color !default; +//** Padding around the thumbnail caption +$thumbnail-caption-padding: 9px !default; + + +//== Wells +// +//## + +$well-bg: #f5f5f5 !default; +$well-border: darken($well-bg, 7%) !default; + + +//== Badges +// +//## + +$badge-color: #fff !default; +//** Linked badge text color on hover +$badge-link-hover-color: #fff !default; +$badge-bg: $gray-light !default; + +//** Badge text color in active nav link +$badge-active-color: $link-color !default; +//** Badge background color in active nav link +$badge-active-bg: #fff !default; + +$badge-font-weight: bold !default; +$badge-line-height: 1 !default; +$badge-border-radius: 10px !default; + + +//== Breadcrumbs +// +//## + +$breadcrumb-padding-vertical: 8px !default; +$breadcrumb-padding-horizontal: 15px !default; +//** Breadcrumb background color +$breadcrumb-bg: #f5f5f5 !default; +//** Breadcrumb text color +$breadcrumb-color: #ccc !default; +//** Text color of current page in the breadcrumb +$breadcrumb-active-color: $gray-light !default; +//** Textual separator for between breadcrumb elements +$breadcrumb-separator: "/" !default; + + +//== Carousel +// +//## + +$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default; + +$carousel-control-color: #fff !default; +$carousel-control-width: 15% !default; +$carousel-control-opacity: .5 !default; +$carousel-control-font-size: 20px !default; + +$carousel-indicator-active-bg: #fff !default; +$carousel-indicator-border-color: #fff !default; + +$carousel-caption-color: #fff !default; + + +//== Close +// +//## + +$close-font-weight: bold !default; +$close-color: #000 !default; +$close-text-shadow: 0 1px 0 #fff !default; + + +//== Code +// +//## + +$code-color: #c7254e !default; +$code-bg: #f9f2f4 !default; + +$kbd-color: #fff !default; +$kbd-bg: #333 !default; + +$pre-bg: #f5f5f5 !default; +$pre-color: $gray-dark !default; +$pre-border-color: #ccc !default; +$pre-scrollable-max-height: 340px !default; + + +//== Type +// +//## + +//** Horizontal offset for forms and lists. +$component-offset-horizontal: 180px !default; +//** Text muted color +$text-muted: $gray-light !default; +//** Abbreviations and acronyms border color +$abbr-border-color: $gray-light !default; +//** Headings small color +$headings-small-color: $gray-light !default; +//** Blockquote small color +$blockquote-small-color: $gray-light !default; +//** Blockquote font size +$blockquote-font-size: ($font-size-base * 1.25) !default; +//** Blockquote border color +$blockquote-border-color: $gray-lighter !default; +//** Page header border color +$page-header-border-color: $gray-lighter !default; +//** Width of horizontal description list titles +$dl-horizontal-offset: $component-offset-horizontal !default; +//** Point at which .dl-horizontal becomes horizontal +$dl-horizontal-breakpoint: $grid-float-breakpoint !default; +//** Horizontal line color. +$hr-border: $gray-lighter !default; diff --git a/www/resources/sass/bootstrap/_wells.scss b/www/resources/sass/bootstrap/_wells.scss new file mode 100644 index 0000000..b865711 --- /dev/null +++ b/www/resources/sass/bootstrap/_wells.scss @@ -0,0 +1,29 @@ +// +// Wells +// -------------------------------------------------- + + +// Base class +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: $well-bg; + border: 1px solid $well-border; + border-radius: $border-radius-base; + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); + blockquote { + border-color: #ddd; + border-color: rgba(0,0,0,.15); + } +} + +// Sizes +.well-lg { + padding: 24px; + border-radius: $border-radius-large; +} +.well-sm { + padding: 9px; + border-radius: $border-radius-small; +} diff --git a/www/resources/sass/bootstrap/mixins/_alerts.scss b/www/resources/sass/bootstrap/mixins/_alerts.scss new file mode 100644 index 0000000..3faf0b5 --- /dev/null +++ b/www/resources/sass/bootstrap/mixins/_alerts.scss @@ -0,0 +1,14 @@ +// Alerts + +@mixin alert-variant($background, $border, $text-color) { + background-color: $background; + border-color: $border; + color: $text-color; + + hr { + border-top-color: darken($border, 5%); + } + .alert-link { + color: darken($text-color, 10%); + } +} diff --git a/www/resources/sass/bootstrap/mixins/_background-variant.scss b/www/resources/sass/bootstrap/mixins/_background-variant.scss new file mode 100644 index 0000000..4c7769e --- /dev/null +++ b/www/resources/sass/bootstrap/mixins/_background-variant.scss @@ -0,0 +1,12 @@ +// Contextual backgrounds + +// [converter] $parent hack +@mixin bg-variant($parent, $color) { + #{$parent} { + background-color: $color; + } + a#{$parent}:hover, + a#{$parent}:focus { + background-color: darken($color, 10%); + } +} diff --git a/www/resources/sass/bootstrap/mixins/_border-radius.scss b/www/resources/sass/bootstrap/mixins/_border-radius.scss new file mode 100644 index 0000000..ce19499 --- /dev/null +++ b/www/resources/sass/bootstrap/mixins/_border-radius.scss @@ -0,0 +1,18 @@ +// Single side border-radius + +@mixin border-top-radius($radius) { + border-top-right-radius: $radius; + border-top-left-radius: $radius; +} +@mixin border-right-radius($radius) { + border-bottom-right-radius: $radius; + border-top-right-radius: $radius; +} +@mixin border-bottom-radius($radius) { + border-bottom-right-radius: $radius; + border-bottom-left-radius: $radius; +} +@mixin border-left-radius($radius) { + border-bottom-left-radius: $radius; + border-top-left-radius: $radius; +} diff --git a/www/resources/sass/bootstrap/mixins/_buttons.scss b/www/resources/sass/bootstrap/mixins/_buttons.scss new file mode 100644 index 0000000..b93f84b --- /dev/null +++ b/www/resources/sass/bootstrap/mixins/_buttons.scss @@ -0,0 +1,65 @@ +// Button variants +// +// Easily pump out default styles, as well as :hover, :focus, :active, +// and disabled options for all buttons + +@mixin button-variant($color, $background, $border) { + color: $color; + background-color: $background; + border-color: $border; + + &:focus, + &.focus { + color: $color; + background-color: darken($background, 10%); + border-color: darken($border, 25%); + } + &:hover { + color: $color; + background-color: darken($background, 10%); + border-color: darken($border, 12%); + } + &:active, + &.active, + .open > &.dropdown-toggle { + color: $color; + background-color: darken($background, 10%); + border-color: darken($border, 12%); + + &:hover, + &:focus, + &.focus { + color: $color; + background-color: darken($background, 17%); + border-color: darken($border, 25%); + } + } + &:active, + &.active, + .open > &.dropdown-toggle { + background-image: none; + } + &.disabled, + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus, + &.focus { + background-color: $background; + border-color: $border; + } + } + + .badge { + color: $background; + background-color: $color; + } +} + +// Button sizes +@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) { + padding: $padding-vertical $padding-horizontal; + font-size: $font-size; + line-height: $line-height; + border-radius: $border-radius; +} diff --git a/www/resources/sass/bootstrap/mixins/_center-block.scss b/www/resources/sass/bootstrap/mixins/_center-block.scss new file mode 100644 index 0000000..e06fb5e --- /dev/null +++ b/www/resources/sass/bootstrap/mixins/_center-block.scss @@ -0,0 +1,7 @@ +// Center-align a block level element + +@mixin center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} diff --git a/www/resources/sass/bootstrap/mixins/_clearfix.scss b/www/resources/sass/bootstrap/mixins/_clearfix.scss new file mode 100644 index 0000000..dc3e2ab --- /dev/null +++ b/www/resources/sass/bootstrap/mixins/_clearfix.scss @@ -0,0 +1,22 @@ +// Clearfix +// +// For modern browsers +// 1. The space content is one way to avoid an Opera bug when the +// contenteditable attribute is included anywhere else in the document. +// Otherwise it causes space to appear at the top and bottom of elements +// that are clearfixed. +// 2. The use of `table` rather than `block` is only necessary if using +// `:before` to contain the top-margins of child elements. +// +// Source: http://nicolasgallagher.com/micro-clearfix-hack/ + +@mixin clearfix() { + &:before, + &:after { + content: " "; // 1 + display: table; // 2 + } + &:after { + clear: both; + } +} diff --git a/www/resources/sass/bootstrap/mixins/_forms.scss b/www/resources/sass/bootstrap/mixins/_forms.scss new file mode 100644 index 0000000..277aa5f --- /dev/null +++ b/www/resources/sass/bootstrap/mixins/_forms.scss @@ -0,0 +1,88 @@ +// Form validation states +// +// Used in forms.less to generate the form validation CSS for warnings, errors, +// and successes. + +@mixin form-control-validation($text-color: #555, $border-color: #ccc, $background-color: #f5f5f5) { + // Color the label and help text + .help-block, + .control-label, + .radio, + .checkbox, + .radio-inline, + .checkbox-inline, + &.radio label, + &.checkbox label, + &.radio-inline label, + &.checkbox-inline label { + color: $text-color; + } + // Set the border and box shadow on specific inputs to match + .form-control { + border-color: $border-color; + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work + &:focus { + border-color: darken($border-color, 10%); + $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%); + @include box-shadow($shadow); + } + } + // Set validation states also for addons + .input-group-addon { + color: $text-color; + border-color: $border-color; + background-color: $background-color; + } + // Optional feedback icon + .form-control-feedback { + color: $text-color; + } +} + + +// Form control focus state +// +// Generate a customized focus state and for any input with the specified color, +// which defaults to the `$input-border-focus` variable. +// +// We highly encourage you to not customize the default value, but instead use +// this to tweak colors on an as-needed basis. This aesthetic change is based on +// WebKit's default styles, but applicable to a wider range of browsers. Its +// usability and accessibility should be taken into account with any change. +// +// Example usage: change the default blue border and shadow to white for better +// contrast against a dark gray background. +@mixin form-control-focus($color: $input-border-focus) { + $color-rgba: rgba(red($color), green($color), blue($color), .6); + &:focus { + border-color: $color; + outline: 0; + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba); + } +} + +// Form control sizing +// +// Relative text size, padding, and border-radii changes for form controls. For +// horizontal sizing, wrap controls in the predefined grid classes. `