diff --git a/.gitignore b/.gitignore index 92671c596ab2ea98a5d070078d481df9e85048ed..7c90059e86e538ee212f9177dceb3adb8b89eb33 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ *~ \#* .#* -safelinks-cleaner-thunderbird.xpi +build/ +*.xpi +node_modules +package-lock.json diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 124cf93e688ed3a1e7a4cbc9fbfc7d96b1a5c337..78ece77101afdfd8b13e968e93668e4703d75537 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,31 +1,229 @@ --- stages: + - prepare - build + - collect - deploy -build: + +# Anchors + +.release_rules: &release_rules + rules: + - if: "$CI_COMMIT_TAG =~ /^release-/ && $CI_COMMIT_BRANCH == 'master'" + when: always + - when: never + + + +# ======================================================================== +# Stage: prepare +# +# Builds unpacked extensions from the source files. +# ======================================================================== + +.prepare: + stage: prepare + image: python:3.7-stretch + script: + - python3 scripts/update-version.py -k "$SSH_TAGGING_KEY" -o version -v + - bash scripts/build.sh --version "$(cat version)" + artifacts: + paths: + - version + - build/** + +prepare:dev: + stage: prepare + image: python:3.7-stretch + script: + - VERSION=$(python3 scripts/update-version.py -n) + - bash scripts/build.sh --version "$VERSION" + only: + - branches + except: + - master + - beta + +prepare:beta: + extends: .prepare + only: + - beta + +prepare:release: + extends: .prepare + <<: *release_rules + + +# ======================================================================== +# Stage: build +# +# Builds packages from the prepared unpacked extensions. +# ======================================================================== + +# +# Build for Edge +# + +.build:edge: + stage: build + image: python:3.7-stretch + script: + - apt-get -y update + - apt-get -y install zip + - cd build/edge + - zip -r ../../safelinks-cleaner-edge-$VARIANT.zip * + artifacts: + paths: + - safelinks-cleaner-edge-$VARIANT.zip + +build:edge:beta: + extends: .build:edge + variables: + VARIANT: beta + rules: + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "beta"' + changes: + - shared/**/* + - firefox/**/* + - edge/**/* + when: always + - if: '$CI_COMMIT_MESSAGE =~ /#force-build:(all|edge)/ && $CI_COMMIT_BRANCH == "beta"' + when: always + - when: never + +build:edge:release: + extends: .build:thunderbird + variables: + VARIANT: release + <<: *release_rules + + +# +# Build for Firefox +# + +.build:firefox: stage: build + image: node:lts-buster + cache: + paths: + - $CI_PROJECT_DIR/.cache/npm + before_script: + - mkdir -p "$CI_PROJECT_DIR/.cache/npm" + script: + - npm install --global web-ext --cache "$CI_PROJECT_DIR/.cache/npm" --prefer-offline --no-audit + - cd build/firefox + - web-ext -a . sign --channel=$CHANNEL + - mv safe_links_cleaner* ../../safelinks-cleaner-firefox-$VARIANT.xpi + artifacts: + paths: + - safelinks-cleaner-firefox-$VARIANT.xpi + +build:firefox:beta: + extends: .build:firefox + variables: + CHANNEL: unlisted + VARIANT: beta + rules: + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "beta"' + changes: + - shared/**/* + - firefox/**/* + when: always + - if: '$CI_COMMIT_MESSAGE =~ /#force-build:(all|firefox)/ && $CI_COMMIT_BRANCH == "beta"' + when: always + - when: never + +build:firefox:release: + extends: .build:firefox + variables: + CHANNEL: listed + VARIANT: release + <<: *release_rules + + +# +# Build for Thunderbird +# + +.build:thunderbird: + stage: build + image: python:3.7-stretch script: - - cat /etc/issue - - uname -a - apt-get -y update - apt-get -y install zip - - cd extension - - zip -r ../safelinks-cleaner-thunderbird.xpi * + - cd build/thunderbird + - zip -r ../../safelinks-cleaner-thunderbird-$VARIANT.xpi * artifacts: paths: - - ./safelinks-cleaner-thunderbird.xpi + - safelinks-cleaner-thunderbird-$VARIANT.xpi + +build:thunderbird:beta: + extends: .build:thunderbird + variables: + VARIANT: beta + rules: + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "beta"' + changes: + - shared/**/* + - thunderbird/**/* + when: always + - if: '$CI_COMMIT_MESSAGE =~ /#force-build:(all|thunderbird)/ && $CI_COMMIT_BRANCH == "beta"' + when: always + - when: never + +build:thunderbird:release: + extends: .build:thunderbird + variables: + VARIANT: release + <<: *release_rules + + +# ======================================================================== +# Stage: collect/deploy +# +# Wait for build artifacts then deploy new beta version to pages. +# ======================================================================== + +collect: + stage: collect + image: busybox + script: + - echo "I have seen the CONSING!" + only: + - beta pages: stage: deploy + image: python:3.7-stretch script: - cp -r site .public - - cp safelinks-cleaner-thunderbird.xpi .public + - sed -i -e "s|%BUILDDATE%|$(date +'%Y-%m-%d %H:%M')|g" .public/index.html + - sed -i -e "s|%VERSION%|$(cat version)|g" .public/index.html + - sed -i -e "s|%PROJECT_URL%|$CI_PROJECT_URL|g" .public/index.html + - cp safelinks-cleaner-firefox-beta.xpi .public + - cp safelinks-cleaner-thunderbird-beta.xpi .public + - cp safelinks-cleaner-edge-beta.zip .public - mv .public public - - ls -lr public + - ls -lR public + needs: + - job: prepare:beta + - job: collect + - project: $CI_PROJECT_PATH + job: build:thunderbird:beta + ref: $CI_COMMIT_REF_NAME + artifacts: true + - project: $CI_PROJECT_PATH + job: build:firefox:beta + ref: $CI_COMMIT_REF_NAME + artifacts: true + - project: $CI_PROJECT_PATH + job: build:edge:beta + ref: $CI_COMMIT_REF_NAME + artifacts: true + only: + - beta artifacts: paths: - public/ - only: - - master - when: always diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000000000000000000000000000000000000..d6548055b6928b0ca048d02d4f099ae11ecfdaec --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @davby02 diff --git a/README.md b/README.md index 580cee758df54c1e02aa296af8f03e2fe36499ef..9af0c871c42fdf003c4bc720fcc022d0128790cd 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,17 @@ -# Microsoft ATP Safe Links Cleaner for Thunderbird +# Safe Links Cleaner -This Thunderbird extension cleans up the display of links rewritten by -Microsoft Advanced Threat Protection. Unlike many similar extensions -it does not change the links, but does ensure that they are displayed -in such a way that the original link is accessible. +This extension cleans up the display of links rewritten by Microsoft +Defender for Office 365 Advanced Threat Protection. Unlike many +similar extensions it does not change the links, but does ensure that +they are displayed in such a way that the original link is accessible. + +The extension currently builds for Thunderbird, Firefox and Edge (it +will only affect links on office.com and office365.com). * Links in plain text email are changed so the original link is displayed. -* A tooltip showing the original link is atted to all rewritten links. +* A tooltip showing the original link is added to all rewritten links. * The context menu for rewritten links has a "copy original link item". @@ -19,9 +22,9 @@ in such a way that the original link is accessible. * Since only the *display* is changed, links that have the URL as the link text will now have link text that differs from the link target. - Thunderbird picks up on this when you click a link and asks if you + This may be picked up on this when you click a link and asks if you want to visit the original link or the safe link. * When composing a message the original links are restored. This - process could potentially change text that isn't meant to be - changed but looks almost like a valid safe link. + process could potentially change text that isn't meant to be changed + but looks almost like a valid safe link. diff --git a/edge/BUILD b/edge/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..cbfeb4d021de2b45c9b9afa886f1cad806dd5dc8 --- /dev/null +++ b/edge/BUILD @@ -0,0 +1,9 @@ +build --source firefox \ + --target edge \ + --override "edge/manifest.override.json" \ + --ext zip + +for size in 16 32 128 ; do + convert -density 256x256 -background transparent "$SHAREDDIR/icon.svg" \ + -resize ${size}x${size} "$targetdir/icon${size}x${size}.png" +done diff --git a/edge/manifest.override.json b/edge/manifest.override.json new file mode 100644 index 0000000000000000000000000000000000000000..8e2830636b450096ade982f6b07c653c2a82da4b --- /dev/null +++ b/edge/manifest.override.json @@ -0,0 +1,7 @@ +{ + "icons": { + "16": "icon16x16.png", + "32": "icon32x32.png", + "128": "icon128x128.png" + } +} diff --git a/extension/_locales/en/messages.json b/extension/_locales/en/messages.json deleted file mode 100644 index b4f672fca009ab18519391db8a3a7ba525a11a4e..0000000000000000000000000000000000000000 --- a/extension/_locales/en/messages.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extensionDescription": { - "message": "Clean up display of links rewritten by Microsoft Defender for Office 365 Safe Links, so it is easy to see and copy the original link.", - "description": "Description of the extension." - }, - - "copyLinkMenuTitle": { - "message": "Copy original link", - "description": "Title of the copy original link menu item." - } -} diff --git a/extension/display.js b/extension/display.js deleted file mode 100644 index 9ecc2593c41301e748f21af10f9c380c2859bd57..0000000000000000000000000000000000000000 --- a/extension/display.js +++ /dev/null @@ -1,161 +0,0 @@ -// Microsoft ATP Safe Links Cleaner -// Copyright 2021 David Byers <david.byers@liu.se> -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -// Display script - - -let currentPopupTarget = null; -let hidePopupTimeout = null; - - -/** - * Return the popup div element, creating it if necessary. - * @returns {Element} The popup element. - */ -function getPopup() { - let popup = document.getElementById(safelinksPopupId); - if (!popup) { - popupElementLocked = false; - popup = document.createElement('div'); - popup.id = safelinksPopupId; - popup.addEventListener('mouseenter', cancelHidePopup, {passive: true}); - popup.addEventListener('mouseleave', scheduleHidePopup, {passive: true}); - document.body.appendChild(popup); - } - return popup; -} - - -/** - * Cancel hiding the popup (if it has been scheduled) and set - * hidePopupTimeout to null. - */ -function cancelHidePopup() { - if (hidePopupTimeout) { - clearTimeout(hidePopupTimeout); - hidePopupTimeout = null; - } -} - - -/** - * Hide the current popup. If there is no popup, one will be created. - */ -function hidePopup() { - cancelHidePopup(); - getPopup().classList.remove(safelinksPopupVisibleClass); - currentPopupTarget = undefined; -} - - -/** - * Schedule hiding the current popup. - */ -function scheduleHidePopup() { - if (!hidePopupTimeout) { - hidePopupTimeout = setTimeout(hidePopup, 100); - } -} - - -/** - * Get the absolute bounds of an element. - * @param {Element} elem - The element for which to return bounds. - * @returns {{top: number, left: number, right: number, bottom: - * number}} The top, left, right, and bottom coordinates of the - * element. - */ -function getAbsoluteBoundingRect(elem) { - let rect = elem.getBoundingClientRect(); - let scrollLeft = window.scrollX; - let scrollTop = window.scrollY; - return { - top: rect.top + window.scrollY, - left: rect.left + window.scrollX, - bottom: rect.bottom + window.scrollY, - right: rect.right + window.scrollX, - } -} - -/** - * Attempt to ensure that at least part of an element is visible. If - * the element's right-hand coordinate is off-screen, move it - * on-screen without moving the left-hand side off-screen. If the - * bottom of the element is off-screen, move it on-screen. - * @param {Element} elem - The element to show. - */ -function clampElementToDocument(elem) { - let elemBounds = getAbsoluteBoundingRect(elem); - - if (elemBounds.bottom > document.documentElement.scrollHeight) { - elem.style.removeProperty('top'); - elem.style.bottom = 0; - } - - if (elemBounds.right > document.documentElement.scrollWidth) { - elem.style.removeProperty('left'); - elem.style.right = 0; - if (getAbsoluteBoundingRect(elem).left < 0) { - elem.style.left = 0; - } - } -} - -/** - * Show the original URL of a link. - * @param {MouseEvent} event - The event triggering this handler. - */ -function showOriginalUrl(event) { - let popup = getPopup(); - cancelHidePopup(); - if (event.target != currentPopupTarget || !popup.classList.contains(safelinksPopupVisibleClass)) { - currentPopupTarget = event.target; - popup.textContent = untangleLink(event.target.href); - popup.style.removeProperty('bottom'); - popup.style.removeProperty('right'); - popup.style.left = event.clientX; - popup.style.top = event.clientY; - popup.classList.add(safelinksPopupVisibleClass); - //clampElementToDocument(popup); - } -} - -/** - * Add event handlers to a link so it will show the original url. - * @param {Element} link - The link to add the popup to. - */ -function addLinkPopup(link) { - link.addEventListener('mouseenter', showOriginalUrl, {passive: true}); - link.addEventListener('mouseleave', scheduleHidePopup, {passive: true}); -} - - -for (const link of document.links) { - // Untangle link text - for (const node of getTextNodes(link)) { - node.textContent = untangleLink(node.textContent); - } - - // Create popup event handlers - if (isTangledLink(link.href)) { - addLinkPopup(link); - } -} diff --git a/extension/manifest.json b/extension/manifest.json deleted file mode 100644 index 9b0767c4ae9bab46b92d711bb42b1e34649e4c57..0000000000000000000000000000000000000000 --- a/extension/manifest.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "manifest_version": 2, - "name": "Microsoft ATP Safe Links Cleaner", - "description": "__MSG_extensionDescription__", - "version": "1.3", - "author": "David Byers", - "homepage_url": "https://gitlab.liu.se/safelinks-cleaner-thunderbird/", - "default_locale": "en", - "icons": { - "48": "icon.svg", - "96": "icon.svg", - "144": "icon.svg", - "192": "icon.svg" - }, - "applications": { - "gecko": { - "id": "safelinks-cleaner-thunderbird@it.liu.se", - "strict_min_version": "78.4.0" - } - }, - "background": { - "scripts": [ - "common.js", - "background.js" - ] - }, - "permissions": [ - "messagesModify", - "clipboardWrite", - "menus", - "compose" - ] -} diff --git a/firefox/content.js b/firefox/content.js new file mode 100644 index 0000000000000000000000000000000000000000..1fff7870ae0480294adfa6810ec9c1ec740130ef --- /dev/null +++ b/firefox/content.js @@ -0,0 +1,26 @@ +// Safe Links Cleaner +// Copyright 2021 David Byers <david.byers@liu.se> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// Content script + + +mutationHandler(); +enableMutationObserver(); diff --git a/firefox/manifest.beta.merge.json b/firefox/manifest.beta.merge.json new file mode 100644 index 0000000000000000000000000000000000000000..5d784b20b6427ef35c05b9eccd84d189f9bfe239 --- /dev/null +++ b/firefox/manifest.beta.merge.json @@ -0,0 +1,9 @@ +{ + "version_name": "%VERSION_NAME%", + "browser_specific_settings": { + "gecko": { + "id": "safelinks-cleaner@it.liu.se", + "update_url": "%PAGES_URL%/%XPIFILE%" + } + } +} diff --git a/firefox/manifest.merge.json b/firefox/manifest.merge.json new file mode 100644 index 0000000000000000000000000000000000000000..5e26fd585e170d49ef0fbd0e3934cb21a0ecfd64 --- /dev/null +++ b/firefox/manifest.merge.json @@ -0,0 +1,27 @@ +{ + "background": { + "scripts": [ + "menu.js" + ] + }, + "content_scripts": [ + { + "matches": [ + "*://outlook.office.com/*", + "*://outlook.office365.com/*" + ], + "css": [ + "style.css" + ], + "js": [ + "mutation.js", + "links.js", + "popup.js", + "content.js" + ] + } + ], + "permissions": [ + "activeTab" + ] +} diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100644 index 0000000000000000000000000000000000000000..1a33e4bbc281049e507ddb3a4f3900338b53c1ed --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,222 @@ +#! /bin/bash + +set -eu + +usage() { + cat <<EOF +Usage: build.sh [--beta] [--debug] [--version VERSION] + +--beta Beta build (can also set CI_COMMIT_BRANCH to beta) +--debug Debug build (can also set DEBUG_BUILD) +--version Version to build (can also set BUILD_VERSION) +EOF + exit 1 +} + +fatal() { + echo "$*" >&2 + exit 1 +} + +parse_args() { + beta="" + debug="${DEBUG_BUILD:-}" + version="${BUILD_VERSION:-}" + + branch="${CI_COMMIT_BRANCH:-}" + if [ "$branch" = "beta" ] ; then + beta=yes + fi + + while [ $# -gt 0 ] ; do + case "$1" in + --version) + version="$2" + shift + ;; + --beta) + beta=yes + ;; + --debug) + debug=yes + ;; + --) + shift + break + ;; + -h|--help) + usage + ;; + -*) + usage + ;; + *) + break + ;; + esac + shift + done + + [ $# -eq 0 ] || usage + [ "$version" ] || usage +} + +setup_globals() { + TARGETS=(thunderbird firefox edge) + BASEDIR="$( cd "$(dirname "${BASH_SOURCE[0]}")/.." >/dev/null 2>&1 && pwd )" + + BUILDDIR="$BASEDIR/build" + SHAREDDIR="$BASEDIR/shared" + + if [ -x "$BASEDIR/node_modules/.bin/web-ext" ] ; then + WEB_EXT="$BASEDIR/node_modules/.bin/web-ext" + else + WEB_EXT="web-ext" + fi + + if [ "$beta" ] ; then + version_name="$version beta" + else + version_name="$version" + fi +} + +copy_source() { + cp -r "$SHAREDDIR"/* "$targetdir" + cp -r "$sourcedir"/* "$targetdir" +} + +clean_debug() { + if [ -z "${debug:-}" ] ; then + for file in "$targetdir"/*.js ; do + sed -i -e '/\/\/ DEBUG$/d' "$file" + done + fi +} + +clean_target() { + rm -f "$targetdir"/*.merge.json \ + "$targetdir"/*.override.json \ + "$targetdir"/BUILD \ + "$targetdir"/*~ \ + "$targetdir"/#* +} + +build_manifests() { + local merge=() + local override=() + local collect_merge + local collect_override + + while [ $# -gt 0 ] ; do + case "$1" in + --merge) + collect="merge" + ;; + --override) + collect="override" + ;; + *) + [ "$collect" = "merge" ] && merge+=("$1") + [ "$collect" = "override" ] && override+=("$1") + ;; + esac + shift + done + [ $# -eq 0 ] || fatal "internal error in call to build" + + python3 "$BASEDIR/scripts/makemanifest.py" \ + --merge "${merge[@]}" --override "${override[@]}" \ + > "$targetdir/manifest.json" + + sed -i -e "s|%XPIFILE%|$xpifile|g" "$targetdir/manifest.json" + sed -i -e "s|%VERSION%|$version|g" "$targetdir/manifest.json" + sed -i -e "s|%VERSION_NAME%|$version_name|g" "$targetdir/manifest.json" + sed -i -e "s|%PAGES_URL%|$CI_PAGES_URL|g" "$targetdir/manifest.json" + sed -i -e "s|%PROJECT_URL%|$CI_PROJECT_URL|g" "$targetdir/manifest.json" +} + +build() { + local merge=() + local tmp_merge=() + local override=() + local tmp_override=() + local quiet= + + while [ $# -gt 0 ] ; do + case "$1" in + --target) + target="$2" + targetdir="$BUILDDIR/$2" + [ "$sourcedir" ] || sourcedir="$targetdir" + shift + ;; + --source) + source="$2" + sourcedir="$BASEDIR/$2" + shift + ;; + --ext) + ext="$2" + shift + ;; + --merge) + tmp_merge+=("$2") + shift + ;; + --override) + tmp_override+=("$2") + shift + ;; + --quiet) + quiet=yes + ;; + *) + fatal "internal error in call to build: $*" + ;; + esac + shift + done + [ $# -eq 0 ] || fatal "internal error in call to build" + + local defaultmerge + declare -a defaultmerge + + merge+=("$SHAREDDIR/manifest.merge.json") + [ -f "$sourcedir/manifest.merge.json" ] && \ + merge+=("$sourcedir/manifest.merge.json") + [ "$beta" -a -f "$sourcedir/manifest.beta.merge.json" ] && \ + merge+=("$sourcedir/manifest.beta.merge.json") + [ "$beta" -a -f "$sourcedir/manifest.beta.override.json" ] && \ + merge+=("$sourcedir/manifest.beta.override.json") + + merge+=("${tmp_merge[@]}") + override+=("${tmp_override[@]}") + + xpifile="safelinks-cleaner-$target.$ext" + outputfile="$BUILDDIR/$xpifile" + + [ "$quiet" ] || echo "[+] building target '$target'" + + [ -d "$targetdir" ] && rm -r "$targetdir" + mkdir -p "$targetdir" + + copy_source + clean_target + clean_debug + build_manifests --merge "${merge[@]}" --override "${override[@]}" +} + + +parse_args "$@" +setup_globals + +[ "$debug" ] && echo "[+] debugging statements enabled" + +for target in "${TARGETS[@]}" ; do + if [ -f "$target/BUILD" ] ; then + . "$target/BUILD" + else + build --source "$target" --target "$target" --ext "xpi" + fi +done diff --git a/scripts/makemanifest.py b/scripts/makemanifest.py new file mode 100644 index 0000000000000000000000000000000000000000..57faca838a377d49a9907664b2d630e44a085352 --- /dev/null +++ b/scripts/makemanifest.py @@ -0,0 +1,69 @@ +#! /usr/bin/python3 + +import argparse +import json +import sys + + +def deepmerge_dict(data_a, data_b, *, path): + result ={} + for key in data_a: + if key not in data_b: + result[key] = data_a[key] + else: + result[key] = deepmerge(data_a[key], data_b[key], path=path + "." + key) + for key in data_b: + if key not in data_a: + result[key] = data_b[key] + return result + + +def deepmerge(data_a, data_b, *, path=""): + if type(data_a) is not type(data_b): + raise TypeError('mismatched types at %s' % path) + if isinstance(data_a, dict): + return deepmerge_dict(data_a, data_b, path=path) + if isinstance(data_a, list): + return data_a + data_b + if data_a != data_b: + raise ValueError('mismatched values at %s' % path) + + + +def main(): + """Main function.""" + parser = argparse.ArgumentParser("Merge fragments of manifest.json files.") + parser.add_argument('--merge', nargs='+', help='input files to merge') + parser.add_argument('--override', nargs='*', default=[], help='override files') + opts = parser.parse_args() + + result = {} + errors = False + for path in opts.merge: + with open(path, 'r') as fp: + try: + data = json.load(fp) + except json.decoder.JSONDecodeError as exc: + print('%s: %s' % (path, str(exc)), file=sys.stderr) + errors = True + if not errors: + result = deepmerge(result, data) + + if errors: + sys.exit(1) + + for path in opts.override: + with open(path, 'r') as fp: + try: + data = json.load(fp) + except json.decoder.JSONDecodeError as exc: + print('%s: %s' % (path, str(exc)), file=sys.stderr) + errors = True + if not errors: + result.update(data) + + print(json.dumps(result, indent=4)) + + +if __name__ == '__main__': + main() diff --git a/scripts/update-version.py b/scripts/update-version.py new file mode 100644 index 0000000000000000000000000000000000000000..c64c1082bd1355ee1aec5edf852ea3a2699c9fde --- /dev/null +++ b/scripts/update-version.py @@ -0,0 +1,287 @@ +import argparse +import atexit +import contextlib +import os +import pipes +import re +import subprocess +import sys +import tempfile + + +_VERBOSE = False + +_VERSION_REGEXP = re.compile( + r""" + (?P<major>0|[1-9]\d*) + \. + (?P<minor>0|[1-9]\d*) + (?: + \. + (?P<patch>0|[1-9]\d*) + (?: + \. + (?P<build>0|[1-9]\d*) + )? + )? + """, + re.VERBOSE) + + +class Version(list): + """Class representing a version number.""" + + def __str__(self): + return '.'.join(str(part) for part in self) + + +def parse_version(version): + """Parse a version number into its components.""" + match = _VERSION_REGEXP.match(version) + if not match: + raise ValueError(f'invalid version format: {version}') + return Version([int(match.group('major') or 0), + int(match.group('minor') or 0), + int(match.group('patch') or 0), + int(match.group('build') or 0)]) + + +def ssh_add_host_keys(host): + """Get host keys for a remote host.""" + known_hosts_path = os.path.expanduser('~/.ssh/known_hosts') + if os.path.exists(known_hosts_path): + verbose(f'{known_hosts_path} already exists: not adding {host}') + return + + verbose(f'ssh-keyscan {host} >> {known_hosts_path}') + scan = subprocess.run(['ssh-keyscan', host], + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL, + text=True) + if scan.stdout: + with open(os.path.expanduser('~/.ssh/known_hosts'), 'a') as known_hosts: + known_hosts.write(scan.stdout) + + +def ssh_create_directory(): + """Create an ssh directory.""" + ssh_directory = os.path.expanduser('~/.ssh') + if os.path.exists(ssh_directory): + verbose(f'{ssh_directory} already exists: not creating') + return + os.mkdir(ssh_directory) + os.chmod(ssh_directory, 0o700) + + +def ssh_kill_agent(): + """Kill the running ssh agent.""" + verbose(f'ssh-agent -k') + subprocess.run(['ssh-agent', '-k']) + if 'SSH_AUTH_SOCK' in os.environ: + os.environ['SSH_AUTH_SOCK'] = '' + if 'SSH_AGENT_PID' in os.environ: + os.environ['SSH_AGENT_PID'] = '' + + +def ssh_start_agent(): + """Start the ssh agent.""" + verbose(f'ssh-agent -s') + agent = subprocess.run(['ssh-agent', '-s'], stdout=subprocess.PIPE, text=True) + match = re.match(r'SSH_AUTH_SOCK=(?P<socket>[^;]+).*SSH_AGENT_PID=(?P<pid>\d+)', + agent.stdout, + re.MULTILINE | re.DOTALL) + if not match: + fatal(f'unable to parse ssh-agent output:\n{agent.stdout}') + os.environ['SSH_AUTH_SOCK'] = match.group('socket') + os.environ['SSH_AGENT_PID'] = match.group('pid') + atexit.register(ssh_kill_agent) + + +def ssh_add_key(ssh_key): + """Add an ssh key to the running agent.""" + verbose(f'ssh-add -') + process = subprocess.run(['ssh-add', '-'], + input=ssh_key, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True) + if process.returncode != 0: + fatal(f'unable to add ssh key:\n{process.stdout}') + + +def git(*args): + """Run git command.""" + verbose(f'git {" ".join(pipes.quote(arg) for arg in args)}') + return subprocess.run(["git"] + list(args), + encoding='utf-8', + stdout=subprocess.PIPE).stdout + + +def parse_tag_list(tag_list): + """Parse a tag list, returing a sorted list of versions.""" + res = [] + for tag in tag_list.split('\n'): + with contextlib.suppress(ValueError): + res.append(parse_version(tag)) + return sorted(res, reverse=True) + + +def get_commit_versions(commit): + """Return all versions pointing to a commit.""" + return parse_tag_list(git('tag', '--points-at', commit)) + + +def get_all_versions(commit): + """Return all versions reachable from a given commit.""" + return parse_tag_list(git('tag', '--merged', commit)) + + +def change_origin_to_ssh(): + """Change the remote origin to use ssh.""" + repository_url = os.environ.get('CI_REPOSITORY_URL') + if repository_url and not repository_url.startswith('git'): + push_url = re.sub(r'.+@([^/]+)/', r'git@\1:', repository_url) + verbose(f'repository url: {push_url}') + git('remote', 'set-url', '--push', 'origin', push_url) + + +def tag_repository(commit, tag): + """Tag a commit.""" + change_origin_to_ssh() + git('tag', tag, commit) + git('push', 'origin', tag) + + +def verbose(message): + if _VERBOSE: + print(f'{_PROGNAME}: {message}') + + +def fatal(message): + print(f'{_PROGNAME}: {message}', file=sys.stderr) + sys.exit(1) + + +def main(): + global _PROGNAME + global _VERBOSE + + parser = argparse.ArgumentParser('automatically update version in git repo') + parser.add_argument('--verbose', '-v', action='store_true', + help='verbose output') + parser.add_argument('--output', '-o', metavar='PATH', + help='output version number to this file') + parser.add_argument('--ssh-key', '-k', metavar='PATH', + help='file containing ssh key') + parser.add_argument('--dry-run', '-n', action='store_true', + help="don't change anything") + opts = parser.parse_args() + + _PROGNAME = sys.argv[0] + if opts.verbose: + _VERBOSE = True + + ssh_key = None + if opts.ssh_key: + with open(opts.ssh_key, 'r') as ssh_key_file: + ssh_key = ssh_key_file.read() + + increment = 1 + + # Get the current branch and bail if there is none + commit_branch = os.environ.get('CI_COMMIT_BRANCH') + if not commit_branch: + commit_branch = git('branch', '--show-current').strip() + verbose(f'CI_COMMIT_BRANCH not set, assuming {commit_branch}') + + # Get the current commit and branch + commit_ref = os.environ.get('CI_COMMIT_SHA') + if not commit_ref: + commit_ref = 'HEAD' + verbose(f'CI_COMMIT_SHA not set, assuming HEAD') + + # Get the pipeline source + pipeline_source = os.environ.get('CI_PIPELINE_SOURCE') + if not pipeline_source: + pipeline_source = 'push' + verbose(f'CI_PIPELINE_SOURCE not set, assuming push') + + # Get the current remote + remote_url = os.environ.get('CI_REPOSITORY_URL') + if not remote_url: + remote_url = git('remote', 'get-url', 'origin').strip() + verbose(f'CI_REPOSITORY_URL not set, assuming {remote_url}') + + if re.match(r'^http', remote_url, re.I): + repository_host = re.sub(r'.+@([^/]+)/.*', r'\1', remote_url) + else: + repository_host = re.sub(r'.+@([^:]+):.*', r'\1', remote_url) + + verbose(f'commit ref: {commit_ref}') + verbose(f'commit branch: {commit_branch}') + verbose(f'pipeline source: {pipeline_source}') + verbose(f'remote url: {remote_url}') + verbose(f'repository host: {repository_host}') + + # Check the pipeline source + if (pipeline_source != 'push'): + verbose(f'pipeline source is not push: not incrementing version') + increment = 0 + + # Check branch + if commit_branch not in ('master', 'beta'): + verbose(f'branch is not master or beta: not incrementing') + increment = 0 + + # Don't do anything if already tagged and at max + commit_versions = get_commit_versions(commit_ref) + all_versions = get_all_versions(commit_ref) + + verbose(f'current version tag: {", ".join(str(version) for version in commit_versions)}') + verbose(f'recent versions: {", ".join(str(version) for version in all_versions[:4])}') + + try: + if commit_versions[0] == all_versions[0]: + verbose(f'branch is already tagged: not incrementing') + increment = 0 + except IndexError: + pass + + (major, minor, patch, build) = all_versions[0] + if commit_branch == 'master': + new_version = str(Version([major, minor, patch + increment])) + elif commit_branch == 'beta': + new_version = str(Version([major, minor, patch, build + increment])) + else: + new_version = str(Version([major, minor, patch, build])) + + + ssh_create_directory() + ssh_add_host_keys(repository_host) + if not opts.dry_run: + if increment: + verbose(f'tagging {commit_branch}: {new_version}') + if ssh_key: + ssh_start_agent() + ssh_add_key(ssh_key) + tag_repository(commit_ref, new_version) + if opts.output: + with open(opts.output, 'w') as output_file: + print(new_version, file=output_file) + else: + print(new_version) + else: + if increment: + verbose(f'git tag {new_version} {commit_ref}') + verbose(f'git push origin') + if opts.output: + verbose(f'echo "{new_version}" > {opts.output}') + if not opts.verbose: + print(f"{new_version}") + + return 0 + + +if __name__ == '__main__': + sys.exit(main()) + diff --git a/shared/_locales/en/messages.json b/shared/_locales/en/messages.json new file mode 100644 index 0000000000000000000000000000000000000000..d2943ff0ce46620aa8ec19cae59ebf40c9264dbf --- /dev/null +++ b/shared/_locales/en/messages.json @@ -0,0 +1,11 @@ +{ + "extensionDescription": { + "message": "Correct the display and quoting of links mangled by Microsoft Defender for Office 365 Safe Links.", + "description": "Description of the extension." + }, + + "copyLinkMenuTitle": { + "message": "Copy original link", + "description": "Title of the \"copy original link\" menu item." + } +} diff --git a/extension/_locales/sv/messages.json b/shared/_locales/sv/messages.json similarity index 57% rename from extension/_locales/sv/messages.json rename to shared/_locales/sv/messages.json index b5572a0e00c2da2e9d6ce09b244ad6de80763f7e..e33708e967e5b64b2d5fa819f3d3e6ef1a420bf1 100644 --- a/extension/_locales/sv/messages.json +++ b/shared/_locales/sv/messages.json @@ -1,6 +1,6 @@ { "extensionDescription": { - "message": "Ändra visning av länkar omskrivna av Microsoft Defender för Office 365 Safe Links, så det är enkelt att se och kopiera den ursrpungliga länken.", + "message": "Korrigera visning och citering av länkar manglade av Microsoft Defender för Office 365 Safe Links.", "description": "Description of the extension." }, diff --git a/extension/icon.svg b/shared/icon.svg similarity index 100% rename from extension/icon.svg rename to shared/icon.svg diff --git a/extension/common.js b/shared/links.js similarity index 66% rename from extension/common.js rename to shared/links.js index 32f296f6c6e89933f2a48d2d379b33ba638d0e55..0a9fe5afbf67ec9d8479aa2731841aa64c2ddfa0 100644 --- a/extension/common.js +++ b/shared/links.js @@ -1,4 +1,4 @@ -// Microsoft ATP Safe Links Cleaner +// Safe Links Cleaner // Copyright 2021 David Byers <david.byers@liu.se> // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -56,7 +56,6 @@ function untangleLink(link) { return decodeURIComponent(url); } catch (e) { - console.log(e); return url; } }); @@ -97,3 +96,56 @@ function getTextNodes(elem) { } return result; } + + +/** + * Add event handlers to a link so it will show the original url. + * @param {Element} link - The link to add the popup to. + */ +function addLinkPopup(link) { + link.addEventListener('mouseenter', withoutMutationObserver(showOriginalUrl), {passive: true}); + link.addEventListener('mouseleave', scheduleHidePopup, {passive: true}); +} + + +/** + * Fix all the links in the document. + * @param {Element} root - DOM element in which to fix links. + */ +function fixAllTheLinks(root) { + console.log('enter fixAllTheLinks'); // DEBUG + for (const link of root.getElementsByTagName('a')) { + console.log(link); // DEBUG + if (link.href) { + // Untangle link text + for (const node of getTextNodes(link)) { + node.textContent = untangleLink(node.textContent); + } + + // Create popup event handlers + if (isTangledLink(link.href)) { + addLinkPopup(link); + } + } + } + console.log('exit fixAllTheLinks'); // DEBUG +} + + +/** + * Remove all safe links in an element + * @param {Element} root - DOM element in which to fix links. + */ +function removeAllTheLinks(root) { + console.log('enter removeAllTheLinks'); // DEBUG + for (const link of root.getElementsByTagName('a')) { + console.log(link); // DEBUG + if (isTangledLink(link.href)) { + link.href = untangleLink(link.href); + } + } + for (const textNode of getTextNodes(root)) { + textNode.textContent = untangleLink(textNode.textContent); + } + console.log('exit removeAllTheLinks'); // DEBUG +} diff --git a/shared/manifest.merge.json b/shared/manifest.merge.json new file mode 100644 index 0000000000000000000000000000000000000000..2585d7da102b703e703ccd0a22400a9644c238f6 --- /dev/null +++ b/shared/manifest.merge.json @@ -0,0 +1,19 @@ +{ + "manifest_version": 2, + "name": "Safe Links Cleaner", + "description": "__MSG_extensionDescription__", + "version": "%VERSION%", + "author": "David Byers", + "homepage_url": "%PROJECT_URL%", + "default_locale": "en", + "icons": { + "48": "icon.svg", + "96": "icon.svg", + "144": "icon.svg", + "192": "icon.svg" + }, + "permissions": [ + "clipboardWrite", + "menus" + ] +} diff --git a/extension/background.js b/shared/menu.js similarity index 83% rename from extension/background.js rename to shared/menu.js index 9d9957cfdd949a06179f89db9b7d88e4060232d7..6dd91cdca89c76ba80dff9e9392e8e3e65810ba6 100644 --- a/extension/background.js +++ b/shared/menu.js @@ -1,4 +1,4 @@ -// Microsoft ATP Safe Links Cleaner +// Safe Links Cleaner // Copyright 2021 David Byers <david.byers@liu.se> // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -19,26 +19,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -// Background scripts +// Context menu -browser.composeScripts.register({ - js: [ - {file: "common.js"}, - {file: "compose.js"} - ], -}); - -browser.messageDisplayScripts.register({ - css: [ - {file: "/style.css"} - ], - js: [ - {file: "/common.js"}, - {file: "/display.js"} - ], -}); - browser.menus.create({ id: "liu-safelinks-copy", title: browser.i18n.getMessage("copyLinkMenuTitle"), @@ -52,4 +35,3 @@ browser.menus.onClicked.addListener((info, tab) => { navigator.clipboard.writeText(untangleLink(info.linkUrl)); } }); - diff --git a/shared/mutation.js b/shared/mutation.js new file mode 100644 index 0000000000000000000000000000000000000000..af84bc644e8950f4a91a47b73e68d8c94d6e91e1 --- /dev/null +++ b/shared/mutation.js @@ -0,0 +1,84 @@ +// Safe Links Cleaner +// Copyright 2021 David Byers <david.byers@liu.se> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// Mutation observer for web browsers + + +let mutationObserver = null; + + +/** + * Handle mutation events. Attempts to detect a composition pane and + * remove nasty links from it. + */ +function mutationHandler(mutationsList, observer) { + let contentNode = (document.getElementById('divRplyFwdMsg') + || document.getElementById('x_divRplyFwdMsg'))?.nextElementSibling; + + console.log('enter mutationHandler'); // DEBUG + while (contentNode) { + removeAllTheLinks(contentNode); + contentNode = contentNode.nextElementSibling; + } + fixAllTheLinks(document.body); + console.log('exit mutationHandler'); // DEBUG +} + + +/** + * Enable the mutation observer, creating it is necessary. + */ +function enableMutationObserver() { + if (!mutationObserver) { + mutationObserver = new MutationObserver(withoutMutationObserver(mutationHandler)); + } + mutationObserver.observe(document.body, { + childList: true, + subtree: true + }); +} + +/** + * Disable the mutation observer if it is enabled + */ +function disableMutationObserver() { + if (mutationObserver) { + mutationObserver.disconnect(); + } +} + +/** + * Wrap a function in code that disables the mutation observer. + * + * @param {function} func - The function to wrap. + * @returns {function} The wrapped function. + */ +function withoutMutationObserver(func) { + return (...args) => { + try { + disableMutationObserver(); + func(...args); + } + finally { + enableMutationObserver(); + } + } +} diff --git a/shared/popup.js b/shared/popup.js new file mode 100644 index 0000000000000000000000000000000000000000..cc1db79ae30bfa4655ce27ce9a8f681847976442 --- /dev/null +++ b/shared/popup.js @@ -0,0 +1,212 @@ +// Safe Links Cleaner +// Copyright 2021 David Byers <david.byers@liu.se> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// Popups + + +// Constants controlling popup placement + +const maxDistanceFromMouse = 30; // Max distance from mouse to popup +const belowPreferenceWeight = 1.5; // How much do we prefer below placement +const belowPreferenceMargin = 30; // How much closer does top need to be to even care + + +let currentPopupTarget = null; +let hidePopupTimeout = null; + + +/** + * Return the popup div element, creating it if necessary. + * @returns {Element} The popup element. + */ +function getPopup() { + let popup = document.getElementById(safelinksPopupId); + if (!popup) { + popupElementLocked = false; + popup = document.createElement('div'); + popup.id = safelinksPopupId; + popup.addEventListener('mouseenter', cancelHidePopup, {passive: true}); + popup.addEventListener('mouseleave', scheduleHidePopup, {passive: true}); + document.body.appendChild(popup); + } + return popup; +} + + +/** + * Cancel hiding the popup (if it has been scheduled) and set + * hidePopupTimeout to null. + */ +function cancelHidePopup() { + if (hidePopupTimeout) { + clearTimeout(hidePopupTimeout); + hidePopupTimeout = null; + } +} + + +/** + * Hide the current popup. If there is no popup, one will be created. + */ +function hidePopup() { + cancelHidePopup(); + getPopup().classList.remove(safelinksPopupVisibleClass); + currentPopupTarget = undefined; +} + + +/** + * Schedule hiding the current popup. + */ +function scheduleHidePopup() { + if (!hidePopupTimeout) { + hidePopupTimeout = setTimeout(withoutMutationObserver(hidePopup), 100); + } +} + + +/** + * Get the absolute bounds of an element. + * @param {Element} elem - The element for which to return bounds. + * @returns {{top: number, left: number, right: number, bottom: + * number}} The top, left, right, and bottom coordinates of the + * element. + */ +function getAbsoluteBoundingRect(elem) { + let rect = elem.getBoundingClientRect(); + let scrollLeft = window.scrollX; + let scrollTop = window.scrollY; + return { + top: rect.top + window.scrollY, + left: rect.left + window.scrollX, + bottom: rect.bottom + window.scrollY, + right: rect.right + window.scrollX, + height: rect.height, + width: rect.width + } +} + + +/** + * Get the viewport bounding rectangle relative the document. + * @returns {object} The bounding rectagle. + */ +function getViewportBoundingRect() { + return { + top: window.scrollY, + left: window.scrollX, + bottom: window.scrollY + window.innerHeight, + right: window.scrollX + window.innerWidth, + height: window.innerHeight, + width: window.innerWidth + } +} + + +/** + * Show the original URL of a link. + * @param {MouseEvent} event - The event triggering this handler. + */ +function showOriginalUrl(event) { + let popup = getPopup(); + cancelHidePopup(); + if (event.target != currentPopupTarget + || !popup.classList.contains(safelinksPopupVisibleClass)) { + currentPopupTarget = event.target; + popup.textContent = untangleLink(event.target.href); + popup.style.removeProperty('bottom'); + popup.style.removeProperty('right'); + + // Get the bounds of the target and viewport + let targetBounds = getAbsoluteBoundingRect(event.target); + let viewportBounds = getViewportBoundingRect(); + + console.log('targetBounds', targetBounds); // DEBUG + console.log('viewportBounds', viewportBounds); // DEBUG + + // Set up the popup and get its initial bounds + popup.style.left = Math.max(targetBounds.left, window.scrollX) + 'px'; + popup.style.top = '-65535px'; + popup.classList.add(safelinksPopupVisibleClass); + let popupBounds = getAbsoluteBoundingRect(popup); + + // Determine the initial position of the popup + let mouseY = event.clientY + window.scrollY; + let distanceToTop = Math.abs(mouseY - targetBounds.top); + let distanceToBottom = Math.abs(mouseY - targetBounds.bottom); + let topIsCloser = (distanceToBottom > belowPreferenceMargin && + distanceToTop * belowPreferenceWeight < distanceToBottom); + let aboveWouldBeVisible = (targetBounds.top - popupBounds.height) >= viewportBounds.top; + let belowWouldBeVisible = (targetBounds.bottom + popupBounds.height) <= viewportBounds.bottom; + + console.log({distanceToTop: distanceToTop, // DEBUG + distanceToBottom: distanceToBottom, // DEBUG + topIsCloser: topIsCloser, // DEBUG + aboveWouldBeVisible: aboveWouldBeVisible, // DEBUG + belowWouldBeVisible: belowWouldBeVisible}); // DEBUG + + if ((topIsCloser && aboveWouldBeVisible) || !belowWouldBeVisible) { + console.log('initial position: top'); // DEBUG + popup.style.top = (targetBounds.top - popupBounds.height) + 'px'; + } + else if ((!topIsCloser && belowWouldBeVisible) || !aboveWouldBeVisible) { + console.log('initial position: bottom'); // DEBUG + popup.style.top = targetBounds.bottom + 'px'; + } + else { + console.log('initial position: not good'); // DEBUG + popup.style.top = targetBounds.bottom + 'px'; + } + + // Get the updated bounds and proceed to adjustments + popupBounds = getAbsoluteBoundingRect(popup); + + // If the popup is really far from the mouse, move it closer + if (popupBounds.top - mouseY > maxDistanceFromMouse) { + console.log('moving upwards to mouse'); // DEBUG + popup.style.top = (mouseY + 2) + 'px'; + popupBounds = getAbsoluteBoundingRect(popup); + } + else if (mouseY - popupBounds.bottom > maxDistanceFromMouse) { + console.log('moving downwards to mouse'); // DEBUG + popup.style.top = (mouseY - popupBounds.height - 2) + 'px'; + popupBounds = getAbsoluteBoundingRect(popup); + } + + // Clamp to bottom of viewport rect + if (popupBounds.bottom > viewportBounds.bottom) { + console.log('clamping to bottom'); // DEBUG + popup.style.top = (viewportBounds.bottom - popupBounds.height) + 'px'; + } + + // Clamp to top of viewport rect + if (popupBounds.top < viewportBounds.top) { + console.log('clamping to top'); // DEBUG + popup.style.top = viewportBounds.top + 'px'; + } + + // Clamp to left of viewport rect + if (popupBounds.left < viewportBounds.left) { + console.log('clamping to left'); // DEBUG + popup.style.left = viewportBounds.left; + 'px'; + } + } +} diff --git a/extension/style.css b/shared/style.css similarity index 82% rename from extension/style.css rename to shared/style.css index 95f271cbd0983e90529959308997a5bc6a2ef07a..421635bdaaa0d7816ed21ea1810827a9ac1f9395 100644 --- a/extension/style.css +++ b/shared/style.css @@ -1,5 +1,5 @@ /* -Microsoft ATP Safe Links Cleaner +Safe Links Cleaner Copyright 2021 David Byers <david.byers@liu.se> Permission is hereby granted, free of charge, to any person obtaining a copy @@ -24,16 +24,13 @@ SOFTWARE. #safelinks-cleaner-thunderbird-popup { display: none; - background: #fffff8; - color: black; + background: #555555; + color: #ffffff; padding: 3px 3px 4px 3px; - position: fixed; + position: absolute; z-index: 1000; border: 1px solid black; - -webkit-box-shadow: 0px 0px 6px 1px rgba(0,0,0,0.5); - -moz-box-shadow: 0px 0px 6px 1px rgba(0,0,0,0.5); - box-shadow: 0px 0px 6px 1px rgba(0,0,0,0.5); - font: 14px sans-serif; + font: 12px sans-serif; } #safelinks-cleaner-thunderbird-popup.safelinks-cleaner-thunderbird-popup-visible { diff --git a/site/assets/css/bootstrap.min.css b/site/assets/css/bootstrap.min.css new file mode 100644 index 0000000000000000000000000000000000000000..21d10bad3e294f129ea09b9dc4e4d2f319fb8de5 --- /dev/null +++ b/site/assets/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.5.2 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/site/assets/css/styles.css b/site/assets/css/styles.css new file mode 100644 index 0000000000000000000000000000000000000000..86005804321764dce6e862745e6e55289da34bde --- /dev/null +++ b/site/assets/css/styles.css @@ -0,0 +1,1476 @@ +/* + * Template Name: PrettyDocs - Bootstrap 4 Template for documentations + * Version: 2.3 + * Author: Xiaoying Riley + * Copyright: 3rd Wave Media + * Twitter: @3rdwave_themes + * License: Creative Commons Attribution 3.0 License + * Website: http://themes.3rdwavemedia.com/ +*/ +/* ======= Base ======= */ +body { + font-family: 'Open Sans', arial, sans-serif; + color: #494d55; + font-size: 14px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +html, body { + height: 100%; +} + +.page-wrapper { + min-height: 100%; + /* equal to footer height */ + margin-bottom: -50px; +} + +.page-wrapper:after { + content: ""; + display: block; + height: 50px; +} + +.footer { + height: 50px; +} + +p { + line-height: 1.5; +} + +a { + color: #3aa7aa; + -webkit-transition: all 0.4s ease-in-out; + -moz-transition: all 0.4s ease-in-out; + -ms-transition: all 0.4s ease-in-out; + -o-transition: all 0.4s ease-in-out; +} + +a:hover { + text-decoration: underline; + color: #339597; +} + +a:focus { + text-decoration: none; +} + +code { + background: #222; + color: #fff; + font-size: 14px; + font-weight: bold; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + padding: 2px 8px; + padding-top: 4px; + display: inline-block; +} + +.btn, a.btn { + -webkit-transition: all 0.4s ease-in-out; + -moz-transition: all 0.4s ease-in-out; + -ms-transition: all 0.4s ease-in-out; + -o-transition: all 0.4s ease-in-out; + font-weight: 600; + font-size: 14px; + line-height: 1.5; +} + +.btn .svg-inline--fa, a.btn .svg-inline--fa { + margin-right: 5px; + position: relative; + top: -1px; +} + +.btn:focus, a.btn:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-primary, a.btn-primary { + background: #40babd; + border: 1px solid #40babd; + color: #fff !important; +} + +.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .btn-primary.hover, .btn-primary:not(:disabled):not(.disabled):active:focus, a.btn-primary:hover, a.btn-primary:focus, a.btn-primary:active, a.btn-primary.active, a.btn-primary.hover, a.btn-primary:not(:disabled):not(.disabled):active:focus { + background: #3aa7aa; + color: #fff !important; + border: 1px solid #3aa7aa; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-green, a.btn-green { + background: #75c181; + border: 1px solid #75c181; + color: #fff !important; +} + +.btn-green:hover, .btn-green:focus, .btn-green:active, .btn-green.active, .btn-green.hover, a.btn-green:hover, a.btn-green:focus, a.btn-green:active, a.btn-green.active, a.btn-green.hover { + background: #63b971; + color: #fff !important; + border: 1px solid #63b971; +} + +.body-green .btn-green, .body-green a.btn-green { + color: #fff !important; +} + +.body-green .btn-green:hover, .body-green .btn-green:focus, .body-green .btn-green:active, .body-green .btn-green.active, .body-green .btn-green.hover, .body-green a.btn-green:hover, .body-green a.btn-green:focus, .body-green a.btn-green:active, .body-green a.btn-green.active, .body-green a.btn-green.hover { + color: #fff !important; +} + +.btn-blue, a.btn-blue { + background: #58bbee; + border: 1px solid #58bbee; + color: #fff !important; +} + +.btn-blue:hover, .btn-blue:focus, .btn-blue:active, .btn-blue.active, .btn-blue.hover, a.btn-blue:hover, a.btn-blue:focus, a.btn-blue:active, a.btn-blue.active, a.btn-blue.hover { + background: #41b2ec; + color: #fff !important; + border: 1px solid #41b2ec; +} + +.btn-orange, a.btn-orange { + background: #F88C30; + border: 1px solid #F88C30; + color: #fff !important; +} + +.btn-orange:hover, .btn-orange:focus, .btn-orange:active, .btn-orange.active, .btn-orange.hover, a.btn-orange:hover, a.btn-orange:focus, a.btn-orange:active, a.btn-orange.active, a.btn-orange.hover { + background: #f77e17; + color: #fff !important; + border: 1px solid #f77e17; +} + +.btn-red, a.btn-red { + background: #f77b6b; + border: 1px solid #f77b6b; + color: #fff !important; +} + +.btn-red:hover, .btn-red:focus, .btn-red:active, .btn-red.active, .btn-red.hover, a.btn-red:hover, a.btn-red:focus, a.btn-red:active, a.btn-red.active, a.btn-red.hover { + background: #f66553; + color: #fff !important; + border: 1px solid #f66553; +} + +.btn-pink, a.btn-pink { + background: #EA5395; + border: 1px solid #EA5395; + color: #fff !important; +} + +.btn-pink:hover, .btn-pink:focus, .btn-pink:active, .btn-pink.active, .btn-pink.hover, a.btn-pink:hover, a.btn-pink:focus, a.btn-pink:active, a.btn-pink.active, a.btn-pink.hover { + background: #e73c87; + color: #fff !important; + border: 1px solid #e73c87; +} + +.btn-purple, a.btn-purple { + background: #8A40A7; + border: 1px solid #8A40A7; + color: #fff !important; +} + +.btn-purple:hover, .btn-purple:focus, .btn-purple:active, .btn-purple.active, .btn-purple.hover, a.btn-purple:hover, a.btn-purple:focus, a.btn-purple:active, a.btn-purple.active, a.btn-purple.hover { + background: #7b3995; + color: #fff !important; + border: 1px solid #7b3995; +} + +.btn-cta { + padding: 7px 15px; +} + +.search-btn { + height: 40px; +} + +.search-btn .svg-inline--fa { + top: 0; + margin-right: 0; +} + +.form-control { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + height: 40px; + border-color: #f0f0f0; +} + +.form-control::-webkit-input-placeholder { + /* WebKit browsers */ + color: #afb3bb; +} + +.form-control:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #afb3bb; +} + +.form-control::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #afb3bb; +} + +.form-control:-ms-input-placeholder { + /* Internet Explorer 10+ */ + color: #afb3bb; +} + +.form-control:focus { + border-color: #e3e3e3; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +input[type="text"], +input[type="email"], +input[type="password"], +input[type="submit"], +input[type="button"], +textarea, +select { + appearance: none; + /* for mobile safari */ + -webkit-appearance: none; +} + +/* ====== Header ====== */ +.header { + background: #00b9e7; + color: rgba(255, 255, 255, 0.85); + border-top: 5px solid #17c7d2; + padding: 30px 0; +} + +.header a { + color: #fff; +} + +.header .container { + position: relative; +} + +.branding { + text-transform: uppercase; + margin-bottom: 10px; +} + +.branding .logo { + font-size: 28px; + margin-top: 0; + margin-bottom: 0; +} + +.branding .logo img { + height: 64px; + width: 64px; + padding-right: 10px; +} + +.branding .logo a { + text-decoration: none; +} + +.branding .text-highlight { + color: #40babd; +} + +.body-green .branding .text-highlight { + color: #75c181; +} + +.body-blue .branding .text-highlight { + color: #58bbee; +} + +.body-orange .branding .text-highlight { + color: #F88C30; +} + +.body-red .branding .text-highlight { + color: #f77b6b; +} + +.body-pink .branding .text-highlight { + color: #EA5395; +} + +.body-purple .branding .text-highlight { + color: #8A40A7; +} + +.branding .text-bold { + font-weight: 800; + color: #fff; +} + +.branding .icon { + font-size: 24px; + color: #40babd; +} + +.body-green .branding .icon { + color: #75c181; +} + +.body-blue .branding .icon { + color: #58bbee; +} + +.body-orange .branding .icon { + color: #F88C30; +} + +.body-red .branding .icon { + color: #f77b6b; +} + +.body-pink .branding .icon { + color: #EA5395; +} + +.body-purple .branding .icon { + color: #8A40A7; +} + +.breadcrumb { + background: none; + margin-bottom: 0; + padding: 0; +} + +.breadcrumb li { + color: rgba(255, 255, 255, 0.5); +} + +.breadcrumb li.active { + color: rgba(255, 255, 255, 0.5); +} + +.breadcrumb li a { + color: rgba(255, 255, 255, 0.5); +} + +.breadcrumb li a:hover { + color: #fff; +} + +.breadcrumb > li + li:before { + color: rgba(0, 0, 0, 0.4); +} + +.search-form { + position: relative; +} + +.search-form .search-input { + font-size: 14px; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + -ms-border-radius: 20px; + -o-border-radius: 20px; + border-radius: 20px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + padding-top: 4px; +} + +.search-form .search-input:focus { + border-color: #616670; +} + +.search-form .search-btn { + color: #797f8b; + background: none; + border: none; + position: absolute; + right: 5px; + top: 0px; + margin-right: 0; +} + +.search-form .search-btn:active, .search-form .search-btn:focus, .search-form .search-btn:hover { + outline: none !important; + color: #31343a; +} + +.top-search-box { + position: absolute; + right: 15px; + top: 15px; +} + +/* ====== Footer ====== */ +.footer { + background: #26282c; + color: rgba(255, 255, 255, 0.6); + padding: 15px 0; +} + +.footer a { + color: #40babd; +} + +.footer .fa-heart { + color: #EA5395; +} + +@media (max-width: 575.98px) { + .top-search-box { + width: 100%; + position: static; + margin-top: 15px; + } +} + +/* ======= Doc Styling ======= */ +.doc-wrapper { + padding: 45px 0; + background: #f9f9fb; +} + +.doc-body { + position: relative; +} + +.doc-header { + margin-bottom: 30px; +} + +.doc-header .doc-title { + color: #40babd; + margin-top: 0; + font-size: 36px; +} + +.body-green .doc-header .doc-title { + color: #75c181; +} + +.body-blue .doc-header .doc-title { + color: #58bbee; +} + +.body-orange .doc-header .doc-title { + color: #F88C30; +} + +.body-red .doc-header .doc-title { + color: #f77b6b; +} + +.body-pink .doc-header .doc-title { + color: #EA5395; +} + +.body-purple .doc-header .doc-title { + color: #8A40A7; +} + +.doc-header .icon { + font-size: 30px; +} + +.doc-header .meta { + color: #a2a6af; +} + +.doc-section { + padding-top: 15px; + padding-bottom: 15px; +} + +.doc-section .section-title { + font-size: 26px; + margin-top: 0; + margin-bottom: 0; + font-weight: bold; + padding-bottom: 10px; + border-bottom: 1px solid #d7d7d7; +} + +.doc-section h1 { + font-size: 24px; + font-weight: bold; +} + +.doc-section h2 { + font-size: 22px; + font-weight: bold; +} + +.doc-section h3 { + font-size: 20px; + font-weight: bold; +} + +.doc-section h4 { + font-size: 18px; + font-weight: bold; +} + +.doc-section h5 { + font-size: 16px; + font-weight: bold; +} + +.doc-section h6 { + font-size: 14px; + font-weight: bold; +} + +.section-block { + padding-top: 15px; + padding-bottom: 15px; +} + +.section-block .block-title { + margin-top: 0; +} + +.section-block .list > li { + margin-bottom: 10px; +} + +.section-block .list ul > li { + margin-top: 5px; +} + +.question { + font-weight: 400 !important; + color: #3aa7aa; +} + +.question .body-green { + color: #63b971; +} + +.body-blue .question { + color: #41b2ec; +} + +.body-orange .question { + color: #f77e17; +} + +.body-pink .question { + color: #e73c87; +} + +.body-purple .question { + color: #7b3995; +} + +.question .svg-inline--fa { + -webkit-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; + position: relative; + top: -2px; +} + +.question .badge { + font-size: 11px; + vertical-align: middle; +} + +.answer { + color: #616670; +} + +.code-block { + margin-top: 30px; + margin-bottom: 30px; +} + +.callout-block { + padding: 30px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + position: relative; + margin-bottom: 30px; +} + +.callout-block a { + color: rgba(0, 0, 0, 0.55) !important; +} + +.callout-block a:hover { + color: rgba(0, 0, 0, 0.65) !important; +} + +.callout-block .icon-holder { + font-size: 30px; + position: absolute; + left: 30px; + top: 30px; + color: rgba(0, 0, 0, 0.25); +} + +.callout-block .content { + margin-left: 60px; +} + +.callout-block .content p:last-child { + margin-bottom: 0; +} + +.callout-block .callout-title { + margin-top: 0; + margin-bottom: 5px; + color: rgba(0, 0, 0, 0.65); +} + +.callout-info { + background: #58bbee; + color: #fff; +} + +.callout-success { + background: #75c181; + color: #fff; +} + +.callout-warning { + background: #F88C30; + color: #fff; +} + +.callout-danger { + background: #f77b6b; + color: #fff; +} + +.table > thead > tr > th { + border-bottom-color: #8bd6d8; +} + +.body-green .table > thead > tr > th { + border-bottom-color: #bbe1c1; +} + +.body-blue .table > thead > tr > th { + border-bottom-color: #b5e1f7; +} + +.body-orange .table > thead > tr > th { + border-bottom-color: #fbc393; +} + +.body-pink .table > thead > tr > th { + border-bottom-color: #f5aecd; +} + +.body-purple .table > thead > tr > th { + border-bottom-color: #b87fce; +} + +.table-bordered > thead > tr > th { + border-bottom-color: inherit; +} + +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f5f5f5; +} + +.screenshot-holder { + margin-top: 15px; + margin-bottom: 15px; + position: relative; + text-align: center; +} + +.screenshot-holder img { + border: 1px solid #f0f0f0; +} + +.screenshot-holder .mask { + display: block; + visibility: hidden; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0, 0, 0, 0.25); + cursor: pointer; + text-decoration: none; +} + +.screenshot-holder .mask .svg-inline--fa { + color: #fff; + font-size: 42px; + display: block; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; +} + +.screenshot-holder:hover .mask { + visibility: visible; +} + +.jumbotron h1 { + font-size: 28px; + margin-top: 0; + margin-bottom: 30px; +} + +.author-profile { + margin-top: 30px; +} + +.author-profile img { + width: 100px; + height: 100px; +} + +.speech-bubble { + background: #fff; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + padding: 30px; + margin-top: 20px; + margin-bottom: 30px; + position: relative; +} + +.speech-bubble .speech-title { + font-size: 16px; +} + +.jumbotron .speech-bubble p { + font-size: 14px; + font-weight: normal; + color: #616670; +} + +.speech-bubble:before { + content: ""; + display: inline-block; + position: absolute; + left: 50%; + top: -10px; + margin-left: -10px; + width: 0; + height: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #fff; +} + +.theme-card { + text-align: center; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + position: relative; + height: 100%; +} + +.theme-card .card-block { + padding: 15px; +} + +.theme-card .mask { + display: block; + visibility: hidden; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0, 0, 0, 0.25); + cursor: pointer; + text-decoration: none; +} + +.theme-card .mask .icon { + color: #fff; + font-size: 42px; + margin-top: 25%; +} + +.theme-card:hover .mask { + visibility: visible; +} + +/* Color Schemes */ +.body-green .header { + border-color: #75c181; +} + +.body-green a { + color: #75c181; +} + +.body-green a:hover { + color: #52b161; +} + +.body-blue .header { + border-color: #58bbee; +} + +.body-blue a { + color: #58bbee; +} + +.body-blue a:hover { + color: #2aa8e9; +} + +.body-orange .header { + border-color: #F88C30; +} + +.body-orange a { + color: #F88C30; +} + +.body-orange a:hover { + color: #ed7108; +} + +.body-pink .header { + border-color: #EA5395; +} + +.body-pink a { + color: #EA5395; +} + +.body-pink a:hover { + color: #e42679; +} + +.body-purple .header { + border-color: #8A40A7; +} + +.body-purple a { + color: #8A40A7; +} + +.body-purple a:hover { + color: #6c3282; +} + +.body-red .header { + border-color: #f77b6b; +} + +.body-red a { + color: #f77b6b; +} + +.body-red a:hover { + color: #f4503b; +} + +/* Sidebar */ +.doc-nav { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.sticky { + position: -webkit-sticky; + position: -moz-sticky; + position: -ms-sticky; + position: -o-sticky; + position: sticky; + top: 0; +} + +.doc-menu { + list-style: none; +} + +.doc-menu .nav-link { + margin-bottom: 5px; + display: block; + padding: 5px 15px; + color: #616670; +} + +.doc-menu .nav-link:hover, .doc-menu .nav-link:focus { + color: #494d55; + text-decoration: none; + background: none; +} + +.doc-menu .nav-link.active { + background: none; + color: #40babd; + font-weight: 600; +} + +.body-green .doc-menu .nav-link.active { + color: #75c181; + border-color: #75c181; +} + +.body-blue .doc-menu .nav-link.active { + color: #58bbee; + border-color: #58bbee; +} + +.body-orange .doc-menu .nav-link.active { + color: #F88C30; + border-color: #F88C30; +} + +.body-red .doc-menu .nav-link.active { + color: #f77b6b; + border-color: #f77b6b; +} + +.body-pink .doc-menu .nav-link.active { + color: #EA5395; + border-color: #EA5395; +} + +.body-purple .doc-menu .nav-link.active { + color: #8A40A7; + border-color: #8A40A7; +} + +.doc-sub-menu { + list-style: none; + padding-left: 0; +} + +.doc-sub-menu .nav-link { + margin-bottom: 10px; + font-size: 12px; + display: block; + color: #616670; + padding: 0; + padding-left: 34px; + background: none; +} + +.doc-sub-menu .nav-link:first-child { + padding-top: 5px; +} + +.doc-sub-menu .nav-link:hover { + color: #494d55; + text-decoration: none; + background: none; +} + +.doc-sub-menu .nav-link:focus { + background: none; +} + +.doc-sub-menu .nav-link.active { + background: none; + color: #40babd; +} + +.body-green .doc-sub-menu .nav-link.active { + color: #75c181; +} + +.body-blue .doc-sub-menu .nav-link.active { + color: #58bbee; +} + +.body-orange .doc-sub-menu .nav-link.active { + color: #F88C30; +} + +.body-red .doc-sub-menu .nav-link.active { + color: #f77b6b; +} + +.body-pink .doc-sub-menu .nav-link.active { + color: #EA5395; +} + +.body-purple .doc-sub-menu .nav-link.active { + color: #8A40A7; +} + +/* +.affix-top { + position: absolute; + top: 15px; +} + +.affix { + top: 15px; +} + +.affix, +.affix-bottom { + width: 230px; +} + +.affix-bottom { + position: absolute; +} +*/ +/* ===== Promo block ===== */ +.promo-block { + background: #3aa7aa; +} + +.body-green .promo-block { + background: #63b971; +} + +.body-blue .promo-block { + background: #41b2ec; +} + +.body-orange .promo-block { + background: #f77e17; +} + +.body-pink .promo-block { + background: #e73c87; +} + +.body-purple .promo-block { + background: #7b3995; +} + +.promo-block a { + color: rgba(0, 0, 0, 0.6); + font-weight: bold; +} + +.promo-block a:hover { + color: rgba(0, 0, 0, 0.7); +} + +.promo-block .promo-block-inner { + padding: 45px; + color: #fff; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} + +.promo-block .promo-title { + font-size: 20px; + font-weight: 800; + margin-top: 0; + margin-bottom: 45px; +} + +.promo-block .promo-title .svg-inline--fa { + color: rgba(0, 0, 0, 0.6); +} + +.promo-block .figure-holder-inner { + background: #fff; + margin-bottom: 30px; + position: relative; + text-align: center; +} + +.promo-block .figure-holder-inner img { + border: 5px solid #fff; +} + +.promo-block .figure-holder-inner .mask { + display: block; + visibility: hidden; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0, 0, 0, 0.7); + cursor: pointer; + text-decoration: none; +} + +.promo-block .figure-holder-inner .mask .svg-inline--fa { + color: #fff; + font-size: 36px; + display: inline-block; + position: absolute; + top: 50%; + left: 50%; + margin-left: -18px; + margin-top: -18px; +} + +.promo-block .figure-holder-inner .mask .svg-inline--fa.pink { + color: #EA5395; +} + +.promo-block .figure-holder-inner:hover .mask { + visibility: visible; +} + +.promo-block .content-holder-inner { + padding-left: 15px; + padding-right: 15px; +} + +.promo-block .content-title { + font-size: 16px; + font-weight: 600; + margin-top: 0; +} + +.promo-block .highlight { + color: rgba(0, 0, 0, 0.6); +} + +.promo-block .btn-cta { + background: rgba(0, 0, 0, 0.35); + border: none; + color: #fff !important; + margin-bottom: 15px; +} + +.promo-block .btn-cta:hover { + background: rgba(0, 0, 0, 0.5); + border: none; + color: #fff !important; +} + +/* Extra small devices (phones, less than 768px) */ +@media (max-width: 767px) { + .jumbotron { + padding: 30px 15px; + } + .jumbotron h1 { + font-size: 24px; + margin-bottom: 15px; + } + .jumbotron p { + font-size: 18px; + } + .promo-block .promo-block-inner { + padding: 30px 15px; + } + .promo-block .content-holder-inner { + padding: 0; + } + .promo-block .promo-title { + margin-bottom: 30px; + } +} + +/* Small devices (tablets, 768px and up) */ +/* Medium devices (desktops, 992px and up) */ +/* Large devices (large desktops, 1200px and up) */ +.sticky { + position: -webkit-sticky; + position: sticky; + top: 0; +} + +.sticky:before, +.sticky:after { + content: ''; + display: table; +} + +/* ======= Landing Page ======= */ +.landing-page .header { + background: #00b9e7; + color: rgba(255, 255, 255, 0.85); + padding: 60px 0; +} + +.landing-page .header a { + color: #fff; +} + +.landing-page .branding { + text-transform: uppercase; + margin-bottom: 20px; +} + +.landing-page .branding .logo { + font-size: 38px; + margin-top: 0; + margin-bottom: 0; +} + +.landing-page .branding .text-bold { + font-weight: 800; + color: #fff; +} + +.landing-page .branding .icon { + font-size: 32px; + color: #40babd; +} + +.landing-page .tagline { + font-weight: 600; + font-size: 20px; +} + +.landing-page .tagline p { + margin-bottom: 5px; +} + +.landing-page .tagline p:last-child { + margin-bottom: 0; +} + +.landing-page .tagline .text-highlight { + color: #266f71; +} + +.landing-page .fa-heart { + color: #EA5395; +} + +.landing-page .cta-container { + margin-top: 30px; +} + +.landing-page .social-container .twitter-tweet { + display: inline-block; + margin-right: 5px; + position: relative; +} + +.landing-page .social-container .fb_iframe_widget { + display: inline-block; + position: relative; + top: 3px; +} + +.cards-section { + padding: 60px 0; + background: #f9f9fb; +} + +.cards-section .title { + margin-top: 0; + margin-bottom: 15px; + font-size: 24px; + font-weight: 600; +} + +.cards-section .intro { + margin: 0 auto; + max-width: 800px; + margin-bottom: 60px; + color: #616670; +} + +.cards-section .cards-wrapper { + max-width: 860px; + margin-left: auto; + margin-right: auto; +} + +.cards-section .item { + margin-bottom: 30px; +} + +.cards-section .item .icon-holder { + margin-bottom: 15px; +} + +.cards-section .item .icon-holder img { + height: 128px; + width: 128px; +} + +.cards-section .item .icon { + font-size: 36px; +} + +.cards-section .item .title { + font-size: 16px; + font-weight: 600; +} + +.cards-section .item .intro { + margin-bottom: 15px; +} + +.cards-section .item-inner { + padding: 45px 30px; + background: #fff; + position: relative; + border: 1px solid #f0f0f0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + height: 100%; +} + +.cards-section .item-inner .link { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1; +} + +.cards-section .item-inner:hover { + background: #f5f5f5; +} + +.cards-section .item-primary .item-inner { + border-top: 3px solid #40babd; +} + +.cards-section .item-primary .item-inner:hover .title { + color: #2d8284; +} + +.cards-section .item-primary .icon { + color: #40babd; +} + +.cards-section .item-green .item-inner { + border-top: 3px solid #75c181; +} + +.cards-section .item-green .item-inner:hover .title { + color: #48a156; +} + +.cards-section .item-green .icon { + color: #75c181; +} + +.cards-section .item-blue .item-inner { + border-top: 3px solid #58bbee; +} + +.cards-section .item-blue .item-inner:hover .title { + color: #179de2; +} + +.cards-section .item-blue .icon { + color: #58bbee; +} + +.cards-section .item-orange .item-inner { + border-top: 3px solid #F88C30; +} + +.cards-section .item-orange .item-inner:hover .title { + color: #d46607; +} + +.cards-section .item-orange .icon { + color: #F88C30; +} + +.cards-section .item-red .item-inner { + border-top: 3px solid #f77b6b; +} + +.cards-section .item-red .item-inner:hover .title { + color: #f33a22; +} + +.cards-section .item-red .icon { + color: #f77b6b; +} + +.cards-section .item-pink .item-inner { + border-top: 3px solid #EA5395; +} + +.cards-section .item-pink .item-inner:hover .title { + color: #d61a6c; +} + +.cards-section .item-pink .icon { + color: #EA5395; +} + +.cards-section .item-purple .item-inner { + border-top: 3px solid #8A40A7; +} + +.cards-section .item-purple .item-inner:hover .title { + color: #5c2b70; +} + +.cards-section .item-purple .icon { + color: #8A40A7; +} + +@media (max-width: 575.98px) { + .main-search-box { + width: 100%; + } + .main-search-box .search-form .search-input { + width: 100%; + } +} + +@media (max-width: 767.98px) { + .cards-section .item-inner { + padding: 30px 15px; + } +} + +@media (min-width: 576px) { + .main-search-box .search-form .search-input { + width: 400px; + } +} + +@media (min-width: 768px) { + .main-search-box .search-form .search-input { + width: 560px; + } +} diff --git a/site/assets/images/chrome.svg b/site/assets/images/chrome.svg new file mode 100644 index 0000000000000000000000000000000000000000..c40feec734250bd185a3f877d20167f4ccfaf01c --- /dev/null +++ b/site/assets/images/chrome.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1 1 176 176"><style><![CDATA[.B{clip-path:url(#C)}.C{fill:#3e2723}.D{fill-opacity:.15}.E{fill-opacity:.2}]]></style><defs><circle id="A" cx="96" cy="96" r="88"/><path id="B" d="M8 184h83.77l38.88-38.88V116h-69.3L8 24.48z"/></defs><clipPath id="C"><use xlink:href="#A"/></clipPath><g class="B" transform="translate(-7 -7)"><path d="M21.97 8v108h39.4L96 56h88V8z" fill="#db4437"/><linearGradient id="D" x1="29.34" x2="81.84" y1="75.02" y2="44.35" gradientUnits="userSpaceOnUse"><stop stop-color="#a52714" stop-opacity=".6" offset="0"/><stop stop-color="#a52714" stop-opacity="0" offset=".66"/></linearGradient><path d="M21.97 8v108h39.4L96 56h88V8z" fill="url(#D)"/><path d="M62.3 115.6L22.48 47.3l-.58 1 39.54 67.8z" class="C D"/><use xlink:href="#B" fill="#0f9d58"/><linearGradient id="E" x1="110.9" x2="52.54" y1="164.5" y2="130.3" gradientUnits="userSpaceOnUse"><stop stop-color="#055524" stop-opacity=".4" offset="0"/><stop stop-color="#055524" stop-opacity="0" offset=".33"/></linearGradient><path d="M8 184h83.77l38.88-38.88V116h-69.3L8 24.48z" fill="url(#E)"/><path d="M129.8 117.3l-.83-.48-38.4 67.15h1.15l38.1-66.64z" fill="#263238" class="D"/><defs><path id="F" d="M8 184h83.77l38.88-38.88V116h-69.3L8 24.48z"/></defs><clipPath id="G"><use xlink:href="#F"/></clipPath><g clip-path="url(#G)"><path d="M96 56l34.65 60-38.88 68H184V56z" fill="#ffcd40"/><linearGradient id="H" x1="121.9" x2="136.6" y1="49.8" y2="114.1" gradientUnits="userSpaceOnUse"><stop stop-color="#ea6100" stop-opacity=".3" offset="0"/><stop stop-color="#ea6100" stop-opacity="0" offset=".66"/></linearGradient><path d="M96 56l34.65 60-38.88 68H184V56z" fill="url(#H)"/></g><path d="M96 56l34.65 60-38.88 68H184V56z" fill="#ffcd40"/><path d="M96 56l34.65 60-38.88 68H184V56z" fill="url(#H)"/><defs><path id="I" d="M96 56l34.65 60-38.88 68H184V56z"/></defs><clipPath id="J"><use xlink:href="#I"/></clipPath><g clip-path="url(#J)"><path d="M21.97 8v108h39.4L96 56h88V8z" fill="#db4437"/><path d="M21.97 8v108h39.4L96 56h88V8z" fill="url(#D)"/></g></g><radialGradient id="K" cx="668.2" cy="55.95" r="84.08" gradientTransform="translate(-576)" gradientUnits="userSpaceOnUse"><stop stop-color="#3e2723" stop-opacity=".2" offset="0"/><stop stop-color="#3e2723" stop-opacity="0" offset="1"/></radialGradient><g transform="translate(-7 -7)"><path d="M96 56v20.95L174.4 56z" fill="url(#K)" class="B"/><g class="B"><defs><path id="L" d="M21.97 8v40.34L61.36 116 96 56h88V8z"/></defs><clipPath id="M"><use xlink:href="#L"/></clipPath><g clip-path="url(#M)"><use xlink:href="#B" fill="#0f9d58"/><path d="M8 184h83.77l38.88-38.88V116h-69.3L8 24.48z" fill="url(#E)"/></g></g></g><radialGradient id="N" cx="597.9" cy="48.52" r="78.04" gradientTransform="translate(-576)" gradientUnits="userSpaceOnUse"><stop stop-color="#3e2723" stop-opacity=".2" offset="0"/><stop stop-color="#3e2723" stop-opacity="0" offset="1"/></radialGradient><path transform="translate(-7 -7)" d="M21.97 48.45l57.25 57.24L61.36 116z" fill="url(#N)" class="B"/><radialGradient id="O" cx="671.8" cy="96.14" r="87.87" gradientTransform="translate(-576)" gradientUnits="userSpaceOnUse"><stop stop-color="#263238" stop-opacity=".2" offset="0"/><stop stop-color="#263238" stop-opacity="0" offset="1"/></radialGradient><g transform="translate(-7 -7)"><path d="M91.83 183.9l20.96-78.2 17.86 10.3z" fill="url(#O)" class="B"/><g class="B"><circle cx="96" cy="96" r="40" fill="#f1f1f1"/><circle cx="96" cy="96" r="32" fill="#4285f4"/><path d="M96 55c-22.1 0-40 17.9-40 40v1c0-22.1 17.9-40 40-40h88v-1H96z" class="C E"/><path d="M130.6 116c-6.92 11.94-19.8 20-34.6 20-14.8 0-27.7-8.06-34.6-20h-.04L8 24.48v1L61.4 117c6.92 11.94 19.8 20 34.6 20 14.8 0 27.68-8.05 34.6-20h.05v-1h-.06z" fill="#fff" fill-opacity=".1"/><path d="M97 56c-.17 0-.33.02-.5.03C118.36 56.3 136 74.08 136 96s-17.64 39.7-39.5 39.97c.17 0 .33.03.5.03 22.1 0 40-17.9 40-40s-17.9-40-40-40z" opacity=".1" class="C"/><path d="M131 117.3c3.4-5.88 5.37-12.68 5.37-19.96a39.87 39.87 0 0 0-1.87-12.09c.95 3.42 1.5 7 1.5 10.73 0 7.28-1.97 14.08-5.37 19.96l.02.04-38.88 68h1.16L131 117.3z" fill="#fff" class="E"/><path d="M96 9c48.43 0 87.72 39.13 88 87.5 0-.17.01-.33.01-.5 0-48.6-39.4-88-88-88S8 47.4 8 96c0 .17.01.33.01.5C8.28 48.13 47.57 9 96 9z" fill="#fff" class="E"/><path d="M96 183c48.43 0 87.72-39.13 88-87.5 0 .17.01.33.01.5 0 48.6-39.4 88-88 88S8 144.6 8 96c0-.17.01-.33.01-.5.27 48.37 39.56 87.5 88 87.5z" class="C D"/></g></g></svg> \ No newline at end of file diff --git a/site/assets/images/edge.svg b/site/assets/images/edge.svg new file mode 100644 index 0000000000000000000000000000000000000000..91d6f639f81ed95e6b6026150cf8c1655873355f --- /dev/null +++ b/site/assets/images/edge.svg @@ -0,0 +1 @@ +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" width="256px" height="256px" viewBox="0 0 256 256"><defs><style>.cls-1{fill:url(#linear-gradient);}.cls-2{opacity:0.35;fill:url(#radial-gradient);}.cls-2,.cls-4{isolation:isolate;}.cls-3{fill:url(#linear-gradient-2);}.cls-4{opacity:0.41;fill:url(#radial-gradient-2);}.cls-5{fill:url(#radial-gradient-3);}.cls-6{fill:url(#radial-gradient-4);}</style><linearGradient id="linear-gradient" x1="63.33" y1="84.03" x2="241.67" y2="84.03" gradientTransform="matrix(1, 0, 0, -1, 0, 266)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0c59a4"/><stop offset="1" stop-color="#114a8b"/></linearGradient><radialGradient id="radial-gradient" cx="161.83" cy="68.91" r="95.38" gradientTransform="matrix(1, 0, 0, -0.95, 0, 248.84)" gradientUnits="userSpaceOnUse"><stop offset="0.72" stop-opacity="0"/><stop offset="0.95" stop-opacity="0.53"/><stop offset="1"/></radialGradient><linearGradient id="linear-gradient-2" x1="157.35" y1="161.39" x2="45.96" y2="40.06" gradientTransform="matrix(1, 0, 0, -1, 0, 266)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1b9de2"/><stop offset="0.16" stop-color="#1595df"/><stop offset="0.67" stop-color="#0680d7"/><stop offset="1" stop-color="#0078d4"/></linearGradient><radialGradient id="radial-gradient-2" cx="-340.29" cy="62.99" r="143.24" gradientTransform="matrix(0.15, -0.99, -0.8, -0.12, 176.64, -125.4)" gradientUnits="userSpaceOnUse"><stop offset="0.76" stop-opacity="0"/><stop offset="0.95" stop-opacity="0.5"/><stop offset="1"/></radialGradient><radialGradient id="radial-gradient-3" cx="113.37" cy="570.21" r="202.43" gradientTransform="matrix(-0.04, 1, 2.13, 0.08, -1179.54, -106.69)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#35c1f1"/><stop offset="0.11" stop-color="#34c1ed"/><stop offset="0.23" stop-color="#2fc2df"/><stop offset="0.31" stop-color="#2bc3d2"/><stop offset="0.67" stop-color="#36c752"/></radialGradient><radialGradient id="radial-gradient-4" cx="376.52" cy="567.97" r="97.34" gradientTransform="matrix(0.28, 0.96, 0.78, -0.23, -303.76, -148.5)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#66eb6e"/><stop offset="1" stop-color="#66eb6e" stop-opacity="0"/></radialGradient></defs><title>Edge_Logo_265x265</title><path class="cls-1" d="M235.68,195.46a93.73,93.73,0,0,1-10.54,4.71,101.87,101.87,0,0,1-35.9,6.46c-47.32,0-88.54-32.55-88.54-74.32A31.48,31.48,0,0,1,117.13,105c-42.8,1.8-53.8,46.4-53.8,72.53,0,73.88,68.09,81.37,82.76,81.37,7.91,0,19.84-2.3,27-4.56l1.31-.44A128.34,128.34,0,0,0,241,201.1,4,4,0,0,0,235.68,195.46Z" transform="translate(-4.63 -4.92)"/><path class="cls-2" d="M235.68,195.46a93.73,93.73,0,0,1-10.54,4.71,101.87,101.87,0,0,1-35.9,6.46c-47.32,0-88.54-32.55-88.54-74.32A31.48,31.48,0,0,1,117.13,105c-42.8,1.8-53.8,46.4-53.8,72.53,0,73.88,68.09,81.37,82.76,81.37,7.91,0,19.84-2.3,27-4.56l1.31-.44A128.34,128.34,0,0,0,241,201.1,4,4,0,0,0,235.68,195.46Z" transform="translate(-4.63 -4.92)"/><path class="cls-3" d="M110.34,246.34A79.2,79.2,0,0,1,87.6,225,80.72,80.72,0,0,1,117.13,105c3.12-1.47,8.45-4.13,15.54-4a32.35,32.35,0,0,1,25.69,13,31.88,31.88,0,0,1,6.36,18.66c0-.21,24.46-79.6-80-79.6-43.9,0-80,41.66-80,78.21a130.15,130.15,0,0,0,12.11,56,128,128,0,0,0,156.38,67.11,75.55,75.55,0,0,1-62.78-8Z" transform="translate(-4.63 -4.92)"/><path class="cls-4" d="M110.34,246.34A79.2,79.2,0,0,1,87.6,225,80.72,80.72,0,0,1,117.13,105c3.12-1.47,8.45-4.13,15.54-4a32.35,32.35,0,0,1,25.69,13,31.88,31.88,0,0,1,6.36,18.66c0-.21,24.46-79.6-80-79.6-43.9,0-80,41.66-80,78.21a130.15,130.15,0,0,0,12.11,56,128,128,0,0,0,156.38,67.11,75.55,75.55,0,0,1-62.78-8Z" transform="translate(-4.63 -4.92)"/><path class="cls-5" d="M156.94,153.78c-.81,1.05-3.3,2.5-3.3,5.66,0,2.61,1.7,5.12,4.72,7.23,14.38,10,41.49,8.68,41.56,8.68A59.56,59.56,0,0,0,230.19,167a61.38,61.38,0,0,0,30.43-52.88c.26-22.41-8-37.31-11.34-43.91C228.09,28.76,182.35,4.92,132.61,4.92a128,128,0,0,0-128,126.2c.48-36.54,36.8-66.05,80-66.05,3.5,0,23.46.34,42,10.07,16.34,8.58,24.9,18.94,30.85,29.21,6.18,10.67,7.28,24.15,7.28,29.52S162,147.2,156.94,153.78Z" transform="translate(-4.63 -4.92)"/><path class="cls-6" d="M156.94,153.78c-.81,1.05-3.3,2.5-3.3,5.66,0,2.61,1.7,5.12,4.72,7.23,14.38,10,41.49,8.68,41.56,8.68A59.56,59.56,0,0,0,230.19,167a61.38,61.38,0,0,0,30.43-52.88c.26-22.41-8-37.31-11.34-43.91C228.09,28.76,182.35,4.92,132.61,4.92a128,128,0,0,0-128,126.2c.48-36.54,36.8-66.05,80-66.05,3.5,0,23.46.34,42,10.07,16.34,8.58,24.9,18.94,30.85,29.21,6.18,10.67,7.28,24.15,7.28,29.52S162,147.2,156.94,153.78Z" transform="translate(-4.63 -4.92)"/></svg> \ No newline at end of file diff --git a/site/assets/images/firefox.svg b/site/assets/images/firefox.svg new file mode 100644 index 0000000000000000000000000000000000000000..47914d66dfe9b9242730e456ec30761dcfbd2e0f --- /dev/null +++ b/site/assets/images/firefox.svg @@ -0,0 +1,450 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + height="81.96698" + width="87.418564" + id="svg1008" + version="1.1" + viewBox="0 0 87.418564 81.96698"> + <metadata + id="metadata1012"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs978"> + <linearGradient + gradientTransform="translate(3.7,-0.0040855)" + gradientUnits="userSpaceOnUse" + y2="74.468002" + x2="6.447" + y1="12.393" + x1="70.786003" + id="a"> + <stop + id="stop834" + stop-color="#fff44f" + offset=".048" /> + <stop + id="stop836" + stop-color="#ffe847" + offset=".111" /> + <stop + id="stop838" + stop-color="#ffc830" + offset=".225" /> + <stop + id="stop840" + stop-color="#ff980e" + offset=".368" /> + <stop + id="stop842" + stop-color="#ff8b16" + offset=".401" /> + <stop + id="stop844" + stop-color="#ff672a" + offset=".462" /> + <stop + id="stop846" + stop-color="#ff3647" + offset=".534" /> + <stop + id="stop848" + stop-color="#e31587" + offset=".705" /> + </linearGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="translate(7978.7,8523.9959)" + r="80.796997" + cy="-8515.1211" + cx="-7907.187" + id="b"> + <stop + id="stop851" + stop-color="#ffbd4f" + offset=".129" /> + <stop + id="stop853" + stop-color="#ffac31" + offset=".186" /> + <stop + id="stop855" + stop-color="#ff9d17" + offset=".247" /> + <stop + id="stop857" + stop-color="#ff980e" + offset=".283" /> + <stop + id="stop859" + stop-color="#ff563b" + offset=".403" /> + <stop + id="stop861" + stop-color="#ff3750" + offset=".467" /> + <stop + id="stop863" + stop-color="#f5156c" + offset=".71" /> + <stop + id="stop865" + stop-color="#eb0878" + offset=".782" /> + <stop + id="stop867" + stop-color="#e50080" + offset=".86" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="translate(7978.7,8523.9959)" + r="80.796997" + cy="-8482.0889" + cx="-7936.7109" + id="c"> + <stop + id="stop870" + stop-color="#960e18" + offset=".3" /> + <stop + id="stop872" + stop-opacity=".74" + stop-color="#b11927" + offset=".351" /> + <stop + id="stop874" + stop-opacity=".343" + stop-color="#db293d" + offset=".435" /> + <stop + id="stop876" + stop-opacity=".094" + stop-color="#f5334b" + offset=".497" /> + <stop + id="stop878" + stop-opacity="0" + stop-color="#ff3750" + offset=".53" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="translate(7978.7,8523.9959)" + r="58.534" + cy="-8533.457" + cx="-7926.9702" + id="d"> + <stop + id="stop881" + stop-color="#fff44f" + offset=".132" /> + <stop + id="stop883" + stop-color="#ffdc3e" + offset=".252" /> + <stop + id="stop885" + stop-color="#ff9d12" + offset=".506" /> + <stop + id="stop887" + stop-color="#ff980e" + offset=".526" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="translate(7978.7,8523.9959)" + r="38.471001" + cy="-8460.9844" + cx="-7945.6479" + id="e"> + <stop + id="stop890" + stop-color="#3a8ee6" + offset=".353" /> + <stop + id="stop892" + stop-color="#5c79f0" + offset=".472" /> + <stop + id="stop894" + stop-color="#9059ff" + offset=".669" /> + <stop + id="stop896" + stop-color="#c139e6" + offset="1" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.972,-0.235,0.275,1.138,10095.002,7833.7939)" + r="20.396999" + cy="-8491.5459" + cx="-7935.6201" + id="f"> + <stop + id="stop899" + stop-opacity="0" + stop-color="#9059ff" + offset=".206" /> + <stop + id="stop901" + stop-opacity=".064" + stop-color="#8c4ff3" + offset=".278" /> + <stop + id="stop903" + stop-opacity=".45" + stop-color="#7716a8" + offset=".747" /> + <stop + id="stop905" + stop-opacity=".6" + stop-color="#6e008b" + offset=".975" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="translate(7978.7,8523.9959)" + r="27.676001" + cy="-8518.4268" + cx="-7937.731" + id="g"> + <stop + id="stop908" + stop-color="#ffe226" + offset="0" /> + <stop + id="stop910" + stop-color="#ffdb27" + offset=".121" /> + <stop + id="stop912" + stop-color="#ffc82a" + offset=".295" /> + <stop + id="stop914" + stop-color="#ffa930" + offset=".502" /> + <stop + id="stop916" + stop-color="#ff7e37" + offset=".732" /> + <stop + id="stop918" + stop-color="#ff7139" + offset=".792" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="translate(7978.7,8523.9959)" + r="118.081" + cy="-8535.9814" + cx="-7915.9771" + id="h"> + <stop + id="stop921" + stop-color="#fff44f" + offset=".113" /> + <stop + id="stop923" + stop-color="#ff980e" + offset=".456" /> + <stop + id="stop925" + stop-color="#ff5634" + offset=".622" /> + <stop + id="stop927" + stop-color="#ff3647" + offset=".716" /> + <stop + id="stop929" + stop-color="#e31587" + offset=".904" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.105,0.995,-0.653,0.069,-4680.304,8470.1869)" + r="86.499001" + cy="-8522.8594" + cx="-7927.165" + id="i"> + <stop + id="stop932" + stop-color="#fff44f" + offset="0" /> + <stop + id="stop934" + stop-color="#ffe847" + offset=".06" /> + <stop + id="stop936" + stop-color="#ffc830" + offset=".168" /> + <stop + id="stop938" + stop-color="#ff980e" + offset=".304" /> + <stop + id="stop940" + stop-color="#ff8b16" + offset=".356" /> + <stop + id="stop942" + stop-color="#ff672a" + offset=".455" /> + <stop + id="stop944" + stop-color="#ff3647" + offset=".57" /> + <stop + id="stop946" + stop-color="#e31587" + offset=".737" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="translate(7978.7,8523.9959)" + r="73.720001" + cy="-8508.1758" + cx="-7938.3828" + id="j"> + <stop + id="stop949" + stop-color="#fff44f" + offset=".137" /> + <stop + id="stop951" + stop-color="#ff980e" + offset=".48" /> + <stop + id="stop953" + stop-color="#ff5634" + offset=".592" /> + <stop + id="stop955" + stop-color="#ff3647" + offset=".655" /> + <stop + id="stop957" + stop-color="#e31587" + offset=".904" /> + </radialGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="translate(7978.7,8523.9959)" + r="80.685997" + cy="-8503.8613" + cx="-7918.9229" + id="k"> + <stop + id="stop960" + stop-color="#fff44f" + offset=".094" /> + <stop + id="stop962" + stop-color="#ffe141" + offset=".231" /> + <stop + id="stop964" + stop-color="#ffaf1e" + offset=".509" /> + <stop + id="stop966" + stop-color="#ff980e" + offset=".626" /> + </radialGradient> + <linearGradient + gradientTransform="translate(3.7,-0.0040855)" + gradientUnits="userSpaceOnUse" + y2="66.806" + x2="15.267" + y1="12.061" + x1="70.013" + id="l"> + <stop + id="stop969" + stop-opacity=".8" + stop-color="#fff44f" + offset=".167" /> + <stop + id="stop971" + stop-opacity=".634" + stop-color="#fff44f" + offset=".266" /> + <stop + id="stop973" + stop-opacity=".217" + stop-color="#fff44f" + offset=".489" /> + <stop + id="stop975" + stop-opacity="0" + stop-color="#fff44f" + offset=".6" /> + </linearGradient> + </defs> + <path + style="fill:url(#a)" + id="path980" + d="m 79.616,26.826915 c -1.684,-4.052 -5.1,-8.427 -7.775,-9.81 a 40.266,40.266 0 0 1 3.925,11.764 l 0.007,0.065 c -4.382,-10.925 -11.813,-15.33 -17.882,-24.9220005 -0.307,-0.485 -0.614,-0.971 -0.913,-1.484 -0.171,-0.293 -0.308,-0.557 -0.427,-0.8 a 7.053,7.053 0 0 1 -0.578,-1.535 0.1,0.1 0 0 0 -0.088,-0.1 0.138,0.138 0 0 0 -0.073,0 c -0.005,0 -0.013,0.009 -0.019,0.011 -0.006,0.002 -0.019,0.011 -0.028,0.015 l 0.015,-0.026 c -9.735,5.7 -13.038,16.2520005 -13.342,21.5300005 a 19.387,19.387 0 0 0 -10.666,4.111 11.587,11.587 0 0 0 -1,-0.758 17.968,17.968 0 0 1 -0.109,-9.473 28.705,28.705 0 0 0 -9.329,7.21 h -0.018 c -1.536,-1.947 -1.428,-8.367 -1.34,-9.708 a 6.928,6.928 0 0 0 -1.294,0.687 28.225,28.225 0 0 0 -3.788,3.245 33.845,33.845 0 0 0 -3.623,4.347 v 0.006 -0.007 a 32.733,32.733 0 0 0 -5.2,11.743 l -0.052,0.256 c -0.073,0.341 -0.336,2.049 -0.381,2.42 0,0.029 -0.006,0.056 -0.009,0.085 A 36.937,36.937 0 0 0 5,41.041915 v 0.2 a 38.759,38.759 0 0 0 76.954,6.554 c 0.065,-0.5 0.118,-0.995 0.176,-1.5 a 39.857,39.857 0 0 0 -2.514,-19.469 z m -44.67,30.338 c 0.181,0.087 0.351,0.181 0.537,0.264 l 0.027,0.017 q -0.282,-0.135 -0.564,-0.281 z m 8.878,-23.376 z m 31.952,-4.934 v -0.037 l 0.007,0.041 z" /> + <path + style="fill:url(#b)" + id="path982" + d="m 79.616,26.826915 c -1.684,-4.052 -5.1,-8.427 -7.775,-9.81 a 40.266,40.266 0 0 1 3.925,11.764 v 0.037 l 0.007,0.041 a 35.1,35.1 0 0 1 -1.206,26.158 c -4.442,9.531 -15.194,19.3 -32.024,18.825 -18.185,-0.515 -34.2,-14.009 -37.194,-31.683 -0.545,-2.787 0,-4.2 0.274,-6.465 A 28.876,28.876 0 0 0 5,41.041915 v 0.2 a 38.759,38.759 0 0 0 76.954,6.554 c 0.065,-0.5 0.118,-0.995 0.176,-1.5 a 39.857,39.857 0 0 0 -2.514,-19.469 z" /> + <path + style="fill:url(#c)" + id="path984" + d="m 79.616,26.826915 c -1.684,-4.052 -5.1,-8.427 -7.775,-9.81 a 40.266,40.266 0 0 1 3.925,11.764 v 0.037 l 0.007,0.041 a 35.1,35.1 0 0 1 -1.206,26.158 c -4.442,9.531 -15.194,19.3 -32.024,18.825 -18.185,-0.515 -34.2,-14.009 -37.194,-31.683 -0.545,-2.787 0,-4.2 0.274,-6.465 A 28.876,28.876 0 0 0 5,41.041915 v 0.2 a 38.759,38.759 0 0 0 76.954,6.554 c 0.065,-0.5 0.118,-0.995 0.176,-1.5 a 39.857,39.857 0 0 0 -2.514,-19.469 z" /> + <path + style="fill:url(#d)" + id="path986" + d="m 60.782,31.382915 c 0.084,0.059 0.162,0.118 0.241,0.177 a 21.1,21.1 0 0 0 -3.6,-4.695 C 45.377,14.816915 54.266,0.7419145 55.765,0.0269145 l 0.015,-0.022 c -9.735,5.7 -13.038,16.2520005 -13.342,21.5300005 0.452,-0.031 0.9,-0.069 1.362,-0.069 a 19.56,19.56 0 0 1 16.982,9.917 z" /> + <path + style="fill:url(#e)" + id="path988" + d="m 43.825,33.788915 c -0.064,0.964 -3.47,4.289 -4.661,4.289 -11.021,0 -12.81,6.667 -12.81,6.667 0.488,5.614 4.4,10.238 9.129,12.684 0.216,0.112 0.435,0.213 0.654,0.312 q 0.569,0.252 1.138,0.466 a 17.235,17.235 0 0 0 5.043,0.973 c 19.317,0.906 23.059,-23.1 9.119,-30.066 a 13.38,13.38 0 0 1 9.345,2.269 19.56,19.56 0 0 0 -16.982,-9.917 c -0.46,0 -0.91,0.038 -1.362,0.069 a 19.387,19.387 0 0 0 -10.666,4.111 c 0.591,0.5 1.258,1.168 2.663,2.553 2.63,2.591 9.375,5.275 9.39,5.59 z" /> + <path + style="fill:url(#f)" + id="path990" + d="m 43.825,33.788915 c -0.064,0.964 -3.47,4.289 -4.661,4.289 -11.021,0 -12.81,6.667 -12.81,6.667 0.488,5.614 4.4,10.238 9.129,12.684 0.216,0.112 0.435,0.213 0.654,0.312 q 0.569,0.252 1.138,0.466 a 17.235,17.235 0 0 0 5.043,0.973 c 19.317,0.906 23.059,-23.1 9.119,-30.066 a 13.38,13.38 0 0 1 9.345,2.269 19.56,19.56 0 0 0 -16.982,-9.917 c -0.46,0 -0.91,0.038 -1.362,0.069 a 19.387,19.387 0 0 0 -10.666,4.111 c 0.591,0.5 1.258,1.168 2.663,2.553 2.63,2.591 9.375,5.275 9.39,5.59 z" /> + <path + style="fill:url(#g)" + id="path992" + d="m 29.965,24.356915 c 0.314,0.2 0.573,0.374 0.8,0.531 a 17.968,17.968 0 0 1 -0.109,-9.473 28.705,28.705 0 0 0 -9.329,7.21 c 0.189,-0.005 5.811,-0.106 8.638,1.732 z" /> + <path + style="fill:url(#h)" + id="path994" + d="m 5.354,42.158915 c 2.991,17.674 19.009,31.168 37.194,31.683 16.83,0.476 27.582,-9.294 32.024,-18.825 a 35.1,35.1 0 0 0 1.206,-26.158 v -0.037 c 0,-0.029 -0.006,-0.046 0,-0.037 l 0.007,0.065 c 1.375,8.977 -3.191,17.674 -10.329,23.555 l -0.022,0.05 c -13.908,11.327 -27.218,6.834 -29.912,5 q -0.282,-0.135 -0.564,-0.281 c -8.109,-3.876 -11.459,-11.264 -10.741,-17.6 a 9.953,9.953 0 0 1 -9.181,-5.775 14.618,14.618 0 0 1 14.249,-0.572 19.3,19.3 0 0 0 14.552,0.572 c -0.015,-0.315 -6.76,-3 -9.39,-5.59 -1.405,-1.385 -2.072,-2.052 -2.663,-2.553 a 11.587,11.587 0 0 0 -1,-0.758 c -0.23,-0.157 -0.489,-0.327 -0.8,-0.531 -2.827,-1.838 -8.449,-1.737 -8.635,-1.732 h -0.018 c -1.536,-1.947 -1.428,-8.367 -1.34,-9.708 a 6.928,6.928 0 0 0 -1.294,0.687 28.225,28.225 0 0 0 -3.788,3.245 33.845,33.845 0 0 0 -3.638,4.337 v 0.006 -0.007 a 32.733,32.733 0 0 0 -5.2,11.743 c -0.019,0.079 -1.396,6.099 -0.717,9.221 z" /> + <path + style="fill:url(#i)" + id="path996" + d="m 57.425,26.864915 a 21.1,21.1 0 0 1 3.6,4.7 c 0.213,0.161 0.412,0.321 0.581,0.476 8.787,8.1 4.183,19.55 3.84,20.365 7.138,-5.881 11.7,-14.578 10.329,-23.555 -4.384,-10.93 -11.815,-15.335 -17.884,-24.9270005 -0.307,-0.485 -0.614,-0.971 -0.913,-1.484 -0.171,-0.293 -0.308,-0.557 -0.427,-0.8 a 7.053,7.053 0 0 1 -0.578,-1.535 0.1,0.1 0 0 0 -0.088,-0.1 0.138,0.138 0 0 0 -0.073,0 c -0.005,0 -0.013,0.009 -0.019,0.011 -0.006,0.002 -0.019,0.011 -0.028,0.015 -1.499,0.711 -10.388,14.7860005 1.66,26.8340005 z" /> + <path + style="fill:url(#j)" + id="path998" + d="m 61.6,32.035915 c -0.169,-0.155 -0.368,-0.315 -0.581,-0.476 -0.079,-0.059 -0.157,-0.118 -0.241,-0.177 a 13.38,13.38 0 0 0 -9.345,-2.269 c 13.94,6.97 10.2,30.972 -9.119,30.066 a 17.235,17.235 0 0 1 -5.043,-0.973 q -0.569,-0.213 -1.138,-0.466 c -0.219,-0.1 -0.438,-0.2 -0.654,-0.312 l 0.027,0.017 c 2.694,1.839 16,6.332 29.912,-5 l 0.022,-0.05 c 0.347,-0.81 4.951,-12.263 -3.84,-20.36 z" /> + <path + style="fill:url(#k)" + id="path1000" + d="m 26.354,44.744915 c 0,0 1.789,-6.667 12.81,-6.667 1.191,0 4.6,-3.325 4.661,-4.289 a 19.3,19.3 0 0 1 -14.552,-0.572 14.618,14.618 0 0 0 -14.249,0.572 9.953,9.953 0 0 0 9.181,5.775 c -0.718,6.337 2.632,13.725 10.741,17.6 0.181,0.087 0.351,0.181 0.537,0.264 -4.733,-2.445 -8.641,-7.069 -9.129,-12.683 z" /> + <path + style="fill:url(#l)" + id="path1002" + d="m 79.616,26.826915 c -1.684,-4.052 -5.1,-8.427 -7.775,-9.81 a 40.266,40.266 0 0 1 3.925,11.764 l 0.007,0.065 c -4.382,-10.925 -11.813,-15.33 -17.882,-24.9220005 -0.307,-0.485 -0.614,-0.971 -0.913,-1.484 -0.171,-0.293 -0.308,-0.557 -0.427,-0.8 a 7.053,7.053 0 0 1 -0.578,-1.535 0.1,0.1 0 0 0 -0.088,-0.1 0.138,0.138 0 0 0 -0.073,0 c -0.005,0 -0.013,0.009 -0.019,0.011 -0.006,0.002 -0.019,0.011 -0.028,0.015 l 0.015,-0.026 c -9.735,5.7 -13.038,16.2520005 -13.342,21.5300005 0.452,-0.031 0.9,-0.069 1.362,-0.069 a 19.56,19.56 0 0 1 16.982,9.917 13.38,13.38 0 0 0 -9.345,-2.269 c 13.94,6.97 10.2,30.972 -9.119,30.066 a 17.235,17.235 0 0 1 -5.043,-0.973 q -0.569,-0.213 -1.138,-0.466 c -0.219,-0.1 -0.438,-0.2 -0.654,-0.312 l 0.027,0.017 q -0.282,-0.135 -0.564,-0.281 c 0.181,0.087 0.351,0.181 0.537,0.264 -4.733,-2.446 -8.641,-7.07 -9.129,-12.684 0,0 1.789,-6.667 12.81,-6.667 1.191,0 4.6,-3.325 4.661,-4.289 -0.015,-0.315 -6.76,-3 -9.39,-5.59 -1.405,-1.385 -2.072,-2.052 -2.663,-2.553 a 11.587,11.587 0 0 0 -1,-0.758 17.968,17.968 0 0 1 -0.109,-9.473 28.705,28.705 0 0 0 -9.329,7.21 h -0.018 c -1.536,-1.947 -1.428,-8.367 -1.34,-9.708 a 6.928,6.928 0 0 0 -1.294,0.687 28.225,28.225 0 0 0 -3.788,3.245 33.845,33.845 0 0 0 -3.623,4.347 v 0.006 -0.007 a 32.733,32.733 0 0 0 -5.2,11.743 l -0.052,0.256 c -0.073,0.341 -0.4,2.073 -0.447,2.445 0,0.028 0,-0.029 0,0 A 45.094,45.094 0 0 0 5,41.041915 v 0.2 a 38.759,38.759 0 0 0 76.954,6.554 c 0.065,-0.5 0.118,-0.995 0.176,-1.5 a 39.857,39.857 0 0 0 -2.514,-19.469 z m -3.845,1.991 0.007,0.041 z" /> +</svg> diff --git a/site/assets/images/gitlab.svg b/site/assets/images/gitlab.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0e22ac32e0cffa49067590b830ef02ea4a0d116 --- /dev/null +++ b/site/assets/images/gitlab.svg @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="210px" height="194px" viewBox="0 0 210 194" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns"> + <!-- Generator: Sketch 3.3.2 (12043) - http://www.bohemiancoding.com/sketch --> + <title>Group</title> + <desc>Created with Sketch.</desc> + <defs></defs> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage"> + <g id="Fill-1-+-Group-24" sketch:type="MSLayerGroup"> + <g id="Group-24" sketch:type="MSShapeGroup"> + <g id="Group"> + <path d="M105.0614,193.655 L105.0614,193.655 L143.7014,74.734 L66.4214,74.734 L105.0614,193.655 L105.0614,193.655 Z" id="Fill-4" fill="#E24329"></path> + <path id="Fill-6" fill="#FC6D26"></path> + <path d="M105.0614,193.6548 L66.4214,74.7338 L12.2684,74.7338 L105.0614,193.6548 Z" id="Fill-8" fill="#FC6D26"></path> + <path id="Fill-10" fill="#FC6D26"></path> + <path d="M12.2685,74.7341 L12.2685,74.7341 L0.5265,110.8731 C-0.5445,114.1691 0.6285,117.7801 3.4325,119.8171 L105.0615,193.6551 L12.2685,74.7341 Z" id="Fill-12" fill="#FCA326"></path> + <path id="Fill-14" fill="#FC6D26"></path> + <path d="M12.2685,74.7342 L66.4215,74.7342 L43.1485,3.1092 C41.9515,-0.5768 36.7375,-0.5758 35.5405,3.1092 L12.2685,74.7342 Z" id="Fill-16" fill="#E24329"></path> + <path d="M105.0614,193.6548 L143.7014,74.7338 L197.8544,74.7338 L105.0614,193.6548 Z" id="Fill-18" fill="#FC6D26"></path> + <path d="M197.8544,74.7341 L197.8544,74.7341 L209.5964,110.8731 C210.6674,114.1691 209.4944,117.7801 206.6904,119.8171 L105.0614,193.6551 L197.8544,74.7341 Z" id="Fill-20" fill="#FCA326"></path> + <path d="M197.8544,74.7342 L143.7014,74.7342 L166.9744,3.1092 C168.1714,-0.5768 173.3854,-0.5758 174.5824,3.1092 L197.8544,74.7342 Z" id="Fill-22" fill="#E24329"></path> + </g> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/site/assets/images/logo.svg b/site/assets/images/logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..0ea13a42b3bc1588853b7f0f51b9c82bb23f7343 --- /dev/null +++ b/site/assets/images/logo.svg @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 283.5 283.5" style="enable-background:new 0 0 283.5 283.5;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;stroke:#231F20;stroke-width:36;stroke-linecap:round;stroke-miterlimit:10;} + .st1{fill:#ED1C24;} + .st2{fill:#231F20;} +</style> +<path class="st0" d="M15.1,199.6"/> +<path class="st0" d="M15.1,216.9"/> +<polygon class="st1" points="246.7,112.4 283.5,149.2 283.5,0 134.3,0 170.6,36.3 118.2,88.7 194.3,164.7 "/> +<g> + <g> + <polygon class="st2" points="263,169.7 246.7,153.4 214.8,185.3 209.5,190.6 209.5,209.5 74,209.5 74,74 91.9,74 97.7,68.1 + 129.5,36.3 113.8,20.5 93.2,0 0,0 0,283.5 283.5,283.5 283.5,190.2 "/> + </g> +</g> +</svg> diff --git a/site/assets/images/opera.svg b/site/assets/images/opera.svg new file mode 100644 index 0000000000000000000000000000000000000000..2ac5ef43d02d5ad03efff2de50435510956d22c2 --- /dev/null +++ b/site/assets/images/opera.svg @@ -0,0 +1 @@ +<svg width="81" height="80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="a" d="M.71 0H68v79.8H.71z"/><path d="M40.61 0C18.573 0 .71 17.863.71 39.902c0 21.399 16.845 38.86 37.997 39.852.633.031 1.266.047 1.902.047 10.215 0 19.532-3.84 26.59-10.153-4.676 3.102-10.144 4.887-15.988 4.887-9.5 0-18.012-4.715-23.734-12.148-4.41-5.207-7.27-12.907-7.465-21.547v-1.88c.195-8.64 3.054-16.339 7.465-21.546C33.199 9.984 41.71 5.27 51.21 5.27c5.844 0 11.316 1.785 15.992 4.886C60.18 3.875 50.918.04 40.762.004 40.71.004 40.66 0 40.609 0z" id="c"/><linearGradient x1="49.999%" y1="0%" x2="49.999%" y2="100%" id="d"><stop stop-color="#FF1B2D" offset="0%"/><stop stop-color="#FF1B2D" offset="25%"/><stop stop-color="#FF1B2D" offset="31.25%"/><stop stop-color="#FF1B2D" offset="34.375%"/><stop stop-color="#FE1B2D" offset="37.5%"/><stop stop-color="#FD1A2D" offset="39.063%"/><stop stop-color="#FD1A2C" offset="40.625%"/><stop stop-color="#FC1A2C" offset="42.188%"/><stop stop-color="#FB1A2C" offset="43.75%"/><stop stop-color="#FA1A2C" offset="44.531%"/><stop stop-color="#FA192C" offset="45.313%"/><stop stop-color="#F9192B" offset="46.094%"/><stop stop-color="#F9192B" offset="46.875%"/><stop stop-color="#F8192B" offset="47.656%"/><stop stop-color="#F8192B" offset="48.438%"/><stop stop-color="#F7192B" offset="49.219%"/><stop stop-color="#F6182B" offset="50%"/><stop stop-color="#F6182A" offset="50.781%"/><stop stop-color="#F5182A" offset="51.563%"/><stop stop-color="#F4182A" offset="52.344%"/><stop stop-color="#F4172A" offset="53.125%"/><stop stop-color="#F3172A" offset="53.906%"/><stop stop-color="#F21729" offset="54.688%"/><stop stop-color="#F11729" offset="55.469%"/><stop stop-color="#F01729" offset="56.25%"/><stop stop-color="#F01629" offset="57.031%"/><stop stop-color="#EF1628" offset="57.813%"/><stop stop-color="#EE1628" offset="58.594%"/><stop stop-color="#ED1528" offset="59.375%"/><stop stop-color="#EC1528" offset="60.156%"/><stop stop-color="#EB1527" offset="60.938%"/><stop stop-color="#EA1527" offset="61.719%"/><stop stop-color="#E91427" offset="62.5%"/><stop stop-color="#E81427" offset="62.891%"/><stop stop-color="#E81426" offset="63.281%"/><stop stop-color="#E71426" offset="63.672%"/><stop stop-color="#E71426" offset="64.063%"/><stop stop-color="#E61326" offset="64.453%"/><stop stop-color="#E61326" offset="64.844%"/><stop stop-color="#E51326" offset="65.234%"/><stop stop-color="#E51326" offset="65.625%"/><stop stop-color="#E41325" offset="66.016%"/><stop stop-color="#E41325" offset="66.406%"/><stop stop-color="#E31225" offset="66.797%"/><stop stop-color="#E21225" offset="67.188%"/><stop stop-color="#E21225" offset="67.578%"/><stop stop-color="#E11225" offset="67.969%"/><stop stop-color="#E11224" offset="68.359%"/><stop stop-color="#E01224" offset="68.75%"/><stop stop-color="#E01124" offset="69.141%"/><stop stop-color="#DF1124" offset="69.531%"/><stop stop-color="#DE1124" offset="69.922%"/><stop stop-color="#DE1124" offset="70.313%"/><stop stop-color="#DD1123" offset="70.703%"/><stop stop-color="#DD1023" offset="71.094%"/><stop stop-color="#DC1023" offset="71.484%"/><stop stop-color="#DB1023" offset="71.875%"/><stop stop-color="#DB1023" offset="72.266%"/><stop stop-color="#DA1023" offset="72.656%"/><stop stop-color="#DA1022" offset="73.047%"/><stop stop-color="#D90F22" offset="73.438%"/><stop stop-color="#D80F22" offset="73.828%"/><stop stop-color="#D80F22" offset="74.219%"/><stop stop-color="#D70F22" offset="74.609%"/><stop stop-color="#D60F21" offset="75%"/><stop stop-color="#D60E21" offset="75.391%"/><stop stop-color="#D50E21" offset="75.781%"/><stop stop-color="#D40E21" offset="76.172%"/><stop stop-color="#D40E21" offset="76.563%"/><stop stop-color="#D30E21" offset="76.953%"/><stop stop-color="#D20D20" offset="77.344%"/><stop stop-color="#D20D20" offset="77.734%"/><stop stop-color="#D10D20" offset="78.125%"/><stop stop-color="#D00D20" offset="78.516%"/><stop stop-color="#D00C20" offset="78.906%"/><stop stop-color="#CF0C1F" offset="79.297%"/><stop stop-color="#CE0C1F" offset="79.688%"/><stop stop-color="#CE0C1F" offset="80.078%"/><stop stop-color="#CD0C1F" offset="80.469%"/><stop stop-color="#CC0B1F" offset="80.859%"/><stop stop-color="#CB0B1E" offset="81.25%"/><stop stop-color="#CB0B1E" offset="81.641%"/><stop stop-color="#CA0B1E" offset="82.031%"/><stop stop-color="#C90A1E" offset="82.422%"/><stop stop-color="#C80A1E" offset="82.813%"/><stop stop-color="#C80A1D" offset="83.203%"/><stop stop-color="#C70A1D" offset="83.594%"/><stop stop-color="#C60A1D" offset="83.984%"/><stop stop-color="#C5091D" offset="84.375%"/><stop stop-color="#C5091C" offset="84.766%"/><stop stop-color="#C4091C" offset="85.156%"/><stop stop-color="#C3091C" offset="85.547%"/><stop stop-color="#C2081C" offset="85.938%"/><stop stop-color="#C2081C" offset="86.328%"/><stop stop-color="#C1081B" offset="86.719%"/><stop stop-color="#C0081B" offset="87.109%"/><stop stop-color="#BF071B" offset="87.5%"/><stop stop-color="#BE071B" offset="87.891%"/><stop stop-color="#BE071A" offset="88.281%"/><stop stop-color="#BD071A" offset="88.672%"/><stop stop-color="#BC061A" offset="89.063%"/><stop stop-color="#BB061A" offset="89.453%"/><stop stop-color="#BA061A" offset="89.844%"/><stop stop-color="#BA0619" offset="90.234%"/><stop stop-color="#B90519" offset="90.625%"/><stop stop-color="#B80519" offset="91.016%"/><stop stop-color="#B70519" offset="91.406%"/><stop stop-color="#B60518" offset="91.797%"/><stop stop-color="#B50418" offset="92.188%"/><stop stop-color="#B50418" offset="92.578%"/><stop stop-color="#B40418" offset="92.969%"/><stop stop-color="#B30417" offset="93.359%"/><stop stop-color="#B20317" offset="93.75%"/><stop stop-color="#B10317" offset="94.141%"/><stop stop-color="#B00317" offset="94.531%"/><stop stop-color="#AF0316" offset="94.922%"/><stop stop-color="#AE0216" offset="95.313%"/><stop stop-color="#AE0216" offset="95.703%"/><stop stop-color="#AD0216" offset="96.094%"/><stop stop-color="#AC0115" offset="96.484%"/><stop stop-color="#AB0115" offset="96.875%"/><stop stop-color="#AA0115" offset="97.266%"/><stop stop-color="#A90115" offset="97.656%"/><stop stop-color="#A80014" offset="98.047%"/><stop stop-color="#A70014" offset="98.438%"/><stop stop-color="#A70014" offset="100%"/></linearGradient><path id="f" d="M0 0h54v70H0z"/><path d="M.477 12.414c3.66-4.32 8.39-6.926 13.554-6.926 11.617 0 21.032 13.168 21.032 29.414 0 16.243-9.415 29.41-21.032 29.41-5.164 0-9.894-2.605-13.554-6.925C6.199 64.82 14.71 69.535 24.21 69.535c5.844 0 11.312-1.785 15.988-4.887 8.168-7.308 13.313-17.925 13.313-29.746 0-11.82-5.145-22.441-13.309-29.746C35.527 2.055 30.055.27 24.211.27 14.71.27 6.199 4.984.477 12.414" id="h"/><linearGradient x1="49.998%" y1="-.001%" x2="49.998%" y2="99.997%" id="i"><stop stop-color="#9C0000" offset="0%"/><stop stop-color="#9C0000" offset=".781%"/><stop stop-color="#9D0000" offset="1.172%"/><stop stop-color="#9D0101" offset="1.563%"/><stop stop-color="#9E0101" offset="1.953%"/><stop stop-color="#9E0202" offset="2.344%"/><stop stop-color="#9F0202" offset="2.734%"/><stop stop-color="#9F0202" offset="3.125%"/><stop stop-color="#A00303" offset="3.516%"/><stop stop-color="#A00303" offset="3.906%"/><stop stop-color="#A10404" offset="4.297%"/><stop stop-color="#A10404" offset="4.688%"/><stop stop-color="#A20505" offset="5.078%"/><stop stop-color="#A30505" offset="5.469%"/><stop stop-color="#A30505" offset="5.859%"/><stop stop-color="#A40606" offset="6.25%"/><stop stop-color="#A40606" offset="6.641%"/><stop stop-color="#A50707" offset="7.031%"/><stop stop-color="#A50707" offset="7.422%"/><stop stop-color="#A60808" offset="7.813%"/><stop stop-color="#A70808" offset="8.203%"/><stop stop-color="#A70808" offset="8.594%"/><stop stop-color="#A80909" offset="8.984%"/><stop stop-color="#A80909" offset="9.375%"/><stop stop-color="#A90A0A" offset="9.766%"/><stop stop-color="#A90A0A" offset="10.156%"/><stop stop-color="#AA0B0B" offset="10.547%"/><stop stop-color="#AA0B0B" offset="10.938%"/><stop stop-color="#AB0B0B" offset="11.328%"/><stop stop-color="#AC0C0C" offset="11.719%"/><stop stop-color="#AC0C0C" offset="12.109%"/><stop stop-color="#AD0D0D" offset="12.5%"/><stop stop-color="#AD0D0D" offset="12.891%"/><stop stop-color="#AE0D0D" offset="13.281%"/><stop stop-color="#AE0E0E" offset="13.672%"/><stop stop-color="#AF0E0E" offset="14.063%"/><stop stop-color="#AF0F0F" offset="14.453%"/><stop stop-color="#B00F0F" offset="14.844%"/><stop stop-color="#B11010" offset="15.234%"/><stop stop-color="#B11010" offset="15.625%"/><stop stop-color="#B21010" offset="16.016%"/><stop stop-color="#B21111" offset="16.406%"/><stop stop-color="#B31111" offset="16.797%"/><stop stop-color="#B31212" offset="17.188%"/><stop stop-color="#B41212" offset="17.578%"/><stop stop-color="#B51313" offset="17.969%"/><stop stop-color="#B51313" offset="18.359%"/><stop stop-color="#B61313" offset="18.75%"/><stop stop-color="#B61414" offset="19.141%"/><stop stop-color="#B71414" offset="19.531%"/><stop stop-color="#B71515" offset="19.922%"/><stop stop-color="#B81515" offset="20.313%"/><stop stop-color="#B81616" offset="20.703%"/><stop stop-color="#B91616" offset="21.094%"/><stop stop-color="#BA1616" offset="21.484%"/><stop stop-color="#BA1717" offset="21.875%"/><stop stop-color="#BB1717" offset="22.266%"/><stop stop-color="#BB1818" offset="22.656%"/><stop stop-color="#BC1818" offset="23.047%"/><stop stop-color="#BC1919" offset="23.438%"/><stop stop-color="#BD1919" offset="23.828%"/><stop stop-color="#BD1919" offset="24.219%"/><stop stop-color="#BE1A1A" offset="24.609%"/><stop stop-color="#BF1A1A" offset="25%"/><stop stop-color="#BF1B1B" offset="25.391%"/><stop stop-color="#C01B1B" offset="25.781%"/><stop stop-color="#C01B1B" offset="26.172%"/><stop stop-color="#C11C1C" offset="26.563%"/><stop stop-color="#C11C1C" offset="26.953%"/><stop stop-color="#C21D1D" offset="27.344%"/><stop stop-color="#C21D1D" offset="27.734%"/><stop stop-color="#C31E1E" offset="28.125%"/><stop stop-color="#C41E1E" offset="28.516%"/><stop stop-color="#C41E1E" offset="28.906%"/><stop stop-color="#C51F1F" offset="29.297%"/><stop stop-color="#C51F1F" offset="29.688%"/><stop stop-color="#C62020" offset="30.078%"/><stop stop-color="#C62020" offset="30.469%"/><stop stop-color="#C72121" offset="30.859%"/><stop stop-color="#C82121" offset="31.25%"/><stop stop-color="#C82121" offset="31.641%"/><stop stop-color="#C92222" offset="32.031%"/><stop stop-color="#C92222" offset="32.422%"/><stop stop-color="#CA2323" offset="32.813%"/><stop stop-color="#CA2323" offset="33.203%"/><stop stop-color="#CB2424" offset="33.594%"/><stop stop-color="#CB2424" offset="33.984%"/><stop stop-color="#CC2424" offset="34.375%"/><stop stop-color="#CD2525" offset="34.766%"/><stop stop-color="#CD2525" offset="35.156%"/><stop stop-color="#CE2626" offset="35.547%"/><stop stop-color="#CE2626" offset="35.938%"/><stop stop-color="#CF2626" offset="36.328%"/><stop stop-color="#CF2727" offset="36.719%"/><stop stop-color="#D02727" offset="37.109%"/><stop stop-color="#D02828" offset="37.5%"/><stop stop-color="#D12828" offset="37.891%"/><stop stop-color="#D22929" offset="38.281%"/><stop stop-color="#D22929" offset="38.672%"/><stop stop-color="#D32929" offset="39.063%"/><stop stop-color="#D32A2A" offset="39.453%"/><stop stop-color="#D42A2A" offset="39.844%"/><stop stop-color="#D42B2B" offset="40.234%"/><stop stop-color="#D52B2B" offset="40.625%"/><stop stop-color="#D62C2C" offset="41.016%"/><stop stop-color="#D62C2C" offset="41.406%"/><stop stop-color="#D72C2C" offset="41.797%"/><stop stop-color="#D72D2D" offset="42.188%"/><stop stop-color="#D82D2D" offset="42.578%"/><stop stop-color="#D82E2E" offset="42.969%"/><stop stop-color="#D92E2E" offset="43.359%"/><stop stop-color="#D92F2F" offset="43.75%"/><stop stop-color="#DA2F2F" offset="44.141%"/><stop stop-color="#DB2F2F" offset="44.531%"/><stop stop-color="#DB3030" offset="44.922%"/><stop stop-color="#DC3030" offset="45.313%"/><stop stop-color="#DC3131" offset="45.703%"/><stop stop-color="#DD3131" offset="46.094%"/><stop stop-color="#DD3232" offset="46.484%"/><stop stop-color="#DE3232" offset="46.875%"/><stop stop-color="#DE3232" offset="47.266%"/><stop stop-color="#DF3333" offset="47.656%"/><stop stop-color="#E03333" offset="48.047%"/><stop stop-color="#E03434" offset="48.438%"/><stop stop-color="#E13434" offset="48.828%"/><stop stop-color="#E13434" offset="49.219%"/><stop stop-color="#E23535" offset="49.609%"/><stop stop-color="#E23535" offset="50%"/><stop stop-color="#E33636" offset="50.391%"/><stop stop-color="#E43636" offset="50.781%"/><stop stop-color="#E43737" offset="51.172%"/><stop stop-color="#E53737" offset="51.563%"/><stop stop-color="#E53737" offset="51.953%"/><stop stop-color="#E63838" offset="52.344%"/><stop stop-color="#E63838" offset="52.734%"/><stop stop-color="#E73939" offset="53.125%"/><stop stop-color="#E73939" offset="53.516%"/><stop stop-color="#E83A3A" offset="53.906%"/><stop stop-color="#E93A3A" offset="54.297%"/><stop stop-color="#E93A3A" offset="54.688%"/><stop stop-color="#EA3B3B" offset="55.078%"/><stop stop-color="#EA3B3B" offset="55.469%"/><stop stop-color="#EB3C3C" offset="55.859%"/><stop stop-color="#EB3C3C" offset="56.25%"/><stop stop-color="#EC3D3D" offset="56.641%"/><stop stop-color="#EC3D3D" offset="57.031%"/><stop stop-color="#ED3D3D" offset="57.422%"/><stop stop-color="#EE3E3E" offset="57.813%"/><stop stop-color="#EE3E3E" offset="58.203%"/><stop stop-color="#EF3F3F" offset="58.594%"/><stop stop-color="#EF3F3F" offset="58.984%"/><stop stop-color="#F03F3F" offset="59.375%"/><stop stop-color="#F04040" offset="59.766%"/><stop stop-color="#F14040" offset="60.156%"/><stop stop-color="#F14141" offset="60.547%"/><stop stop-color="#F24141" offset="60.938%"/><stop stop-color="#F34242" offset="61.328%"/><stop stop-color="#F34242" offset="61.719%"/><stop stop-color="#F44242" offset="62.109%"/><stop stop-color="#F44343" offset="62.5%"/><stop stop-color="#F54343" offset="62.891%"/><stop stop-color="#F54444" offset="63.281%"/><stop stop-color="#F64444" offset="63.672%"/><stop stop-color="#F74545" offset="64.063%"/><stop stop-color="#F74545" offset="64.453%"/><stop stop-color="#F84545" offset="64.844%"/><stop stop-color="#F84646" offset="65.234%"/><stop stop-color="#F94646" offset="65.625%"/><stop stop-color="#F94747" offset="66.016%"/><stop stop-color="#FA4747" offset="66.406%"/><stop stop-color="#FA4848" offset="66.797%"/><stop stop-color="#FB4848" offset="67.188%"/><stop stop-color="#FC4848" offset="67.578%"/><stop stop-color="#FC4949" offset="67.969%"/><stop stop-color="#FD4949" offset="68.359%"/><stop stop-color="#FD4A4A" offset="68.75%"/><stop stop-color="#FE4A4A" offset="69.141%"/><stop stop-color="#FE4B4B" offset="69.531%"/><stop stop-color="#FF4B4B" offset="70.313%"/><stop stop-color="#FF4B4B" offset="71.875%"/><stop stop-color="#FF4B4B" offset="75%"/><stop stop-color="#FF4B4B" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><mask id="b" fill="#fff"><use xlink:href="#a"/></mask><g mask="url(#b)"><mask id="e" fill="#fff"><use xlink:href="#c"/></mask><path fill="url(#d)" fill-rule="nonzero" mask="url(#e)" d="M67.203 0H.711v79.8h66.492z"/></g><g transform="translate(27 5)"><mask id="g" fill="#fff"><use xlink:href="#f"/></mask><g mask="url(#g)"><mask id="j" fill="#fff"><use xlink:href="#h"/></mask><path fill="url(#i)" fill-rule="nonzero" mask="url(#j)" d="M53.512.27H.477v69.265h53.035z"/></g></g></g></svg> \ No newline at end of file diff --git a/site/assets/images/safari.svg b/site/assets/images/safari.svg new file mode 100644 index 0000000000000000000000000000000000000000..5f134765ed68022c22af7317df497bfb88583a7e --- /dev/null +++ b/site/assets/images/safari.svg @@ -0,0 +1,240 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="66.165833mm" + height="65.803795mm" + viewBox="0 0 66.165833 65.803795" + version="1.1" + id="svg8" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="Safari browser logo.svg"> + <title + id="title2819">Safari browser logo</title> + <defs + id="defs2"> + <linearGradient + inkscape:collect="always" + id="linearGradient2135"> + <stop + style="stop-color:#06c2e7;stop-opacity:1" + offset="0" + id="stop2131" /> + <stop + id="stop2143" + offset="0.25000015" + style="stop-color:#0db8ec;stop-opacity:1" /> + <stop + id="stop2139" + offset="0.5000003" + style="stop-color:#12aef1;stop-opacity:1" /> + <stop + style="stop-color:#1f86f9;stop-opacity:1" + offset="0.75000012" + id="stop2141" /> + <stop + style="stop-color:#107ddd;stop-opacity:1" + offset="1" + id="stop2133" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient2127"> + <stop + style="stop-color:#bdbdbd;stop-opacity:1" + offset="0" + id="stop2123" /> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="1" + id="stop2125" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2127" + id="linearGradient2129" + x1="412.97501" + y1="237.60777" + x2="412.97501" + y2="59.392235" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.35154274,0,0,0.35154274,206.79018,159.77261)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2135" + id="radialGradient2137" + cx="413.06128" + cy="136.81819" + fx="413.06128" + fy="136.81819" + r="82.125351" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.38143305,0,0,0.38143298,194.54473,155.58044)" /> + <filter + inkscape:collect="always" + style="color-interpolation-filters:sRGB" + id="filter2222" + x="-0.020909378" + width="1.0418189" + y="-0.0223378" + height="1.0446756"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.95767362" + id="feGaussianBlur2224" /> + </filter> + <filter + inkscape:collect="always" + style="color-interpolation-filters:sRGB" + id="filter2248" + x="-0.048" + width="1.096" + y="-0.048" + height="1.096"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="3.5643107" + id="feGaussianBlur2250" /> + </filter> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1" + inkscape:cx="94.825651" + inkscape:cy="88.085169" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1017" + inkscape:window-x="1358" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:snap-object-midpoints="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:snap-intersection-paths="false" + inkscape:snap-center="false" + inkscape:object-paths="false" + inkscape:object-nodes="false" + fit-margin-left="0.01" + fit-margin-top="0.01" + fit-margin-right="0.01" + fit-margin-bottom="0.01" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Safari browser logo</dc:title> + <dc:date>03/04/2018</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Apple, Inc.</dc:title> + </cc:Agent> + </dc:creator> + <dc:publisher> + <cc:Agent> + <dc:title>CMetalCore</dc:title> + </cc:Agent> + </dc:publisher> + <dc:source>https://fthmb.tqn.com/gnIDz9kkyZVRsWbJJOlHIYf_42g=/768x0/filters:no_upscale()/Safari-Yosemite-56a01c725f9b58eba4af0427.jpg</dc:source> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Capa 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-318.88562,-180.59501)"> + <g + id="g2858"> + <path + transform="matrix(0.33864636,0,0,0.32609457,212.11606,166.11668)" + style="opacity:0.52999998;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.93077397;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill;filter:url(#filter2248)" + d="M 502.08277,148.5 A 89.107765,89.107765 0 0 1 412.975,237.60777 89.107765,89.107765 0 0 1 323.86724,148.5 89.107765,89.107765 0 0 1 412.975,59.392235 89.107765,89.107765 0 0 1 502.08277,148.5 Z" + id="path2226" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path826" + d="m 383.29373,211.97671 a 31.325188,31.325188 0 0 1 -31.32519,31.32519 31.325188,31.325188 0 0 1 -31.32518,-31.32519 31.325188,31.325188 0 0 1 31.32518,-31.32519 31.325188,31.325188 0 0 1 31.32519,31.32519 z" + style="opacity:1;fill:url(#linearGradient2129);fill-opacity:1;stroke:#cdcdcd;stroke-width:0.09301235;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" /> + <path + inkscape:connector-curvature="0" + id="circle828" + d="m 380.83911,211.97671 a 28.870571,28.870571 0 0 1 -28.87057,28.87057 28.870571,28.870571 0 0 1 -28.87057,-28.87057 28.870571,28.870571 0 0 1 28.87057,-28.87057 28.870571,28.870571 0 0 1 28.87057,28.87057 z" + style="opacity:1;fill:url(#radialGradient2137);fill-opacity:1;stroke:none;stroke-width:0.94955933;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" /> + <path + inkscape:connector-curvature="0" + id="rect830" + d="m 351.96854,184.61172 c -0.23319,0 -0.42092,0.18772 -0.42092,0.42092 v 4.85517 c 0,0.2332 0.18773,0.42092 0.42092,0.42092 0.2332,0 0.42092,-0.18772 0.42092,-0.42092 v -4.85517 c 0,-0.2332 -0.18772,-0.42092 -0.42092,-0.42092 z m -2.75367,0.17404 c -0.0279,-0.003 -0.0566,-0.003 -0.0856,3.5e-4 -0.23194,0.0242 -0.39917,0.2304 -0.37495,0.46234 l 0.21218,2.03119 c 0.0242,0.23194 0.23041,0.39918 0.46233,0.37496 0.23195,-0.0242 0.39919,-0.2304 0.37496,-0.46234 l -0.212,-2.03118 c -0.0212,-0.20295 -0.18177,-0.35637 -0.37695,-0.37532 z m 5.5266,0.002 c -0.19519,0.0188 -0.35578,0.17221 -0.37714,0.37513 l -0.21363,2.03102 c -0.0244,0.23192 0.14285,0.43831 0.37478,0.4627 0.23191,0.0244 0.43811,-0.14268 0.46251,-0.3746 l 0.21364,-2.03119 c 0.0244,-0.23192 -0.14286,-0.43814 -0.37478,-0.46252 -0.029,-0.003 -0.0575,-0.003 -0.0854,-5.2e-4 z m -8.3553,0.4082 c -0.028,2.2e-4 -0.0565,0.003 -0.085,0.009 -0.22814,0.0483 -0.37294,0.27089 -0.32464,0.49903 l 1.00552,4.74981 c 0.0483,0.22814 0.27088,0.37293 0.49902,0.32464 0.22814,-0.0483 0.37294,-0.27072 0.32465,-0.49886 l -1.00552,-4.74998 c -0.0423,-0.19963 -0.21792,-0.33543 -0.41401,-0.3339 z m 11.18382,0.004 c -0.19609,-0.002 -0.3718,0.13394 -0.41419,0.33353 l -1.00897,4.74925 c -0.0485,0.22811 0.0962,0.45076 0.32427,0.49922 0.22811,0.0485 0.45076,-0.0962 0.49921,-0.32428 l 1.00897,-4.74926 c 0.0485,-0.2281 -0.0962,-0.45076 -0.32427,-0.49921 -0.0285,-0.006 -0.057,-0.009 -0.085,-0.009 z m -13.88337,0.75717 c -0.0545,-0.005 -0.11077,0.001 -0.16622,0.0194 -0.22178,0.0721 -0.34238,0.3085 -0.27031,0.53028 l 0.6311,1.94236 c 0.0721,0.22179 0.30868,0.34238 0.53046,0.27032 0.22179,-0.0721 0.3422,-0.30868 0.27013,-0.53046 l -0.63109,-1.94236 c -0.054,-0.16634 -0.20059,-0.27568 -0.36407,-0.28958 z m 16.56765,0.001 c -0.16348,0.0139 -0.30999,0.12324 -0.36406,0.28957 l -0.63147,1.94218 c -0.0721,0.22177 0.0484,0.45837 0.27014,0.53046 0.22178,0.0721 0.45837,-0.0484 0.53047,-0.27013 l 0.63146,-1.94236 c 0.0721,-0.22178 -0.0484,-0.45837 -0.27014,-0.53046 -0.0554,-0.018 -0.11191,-0.0239 -0.1664,-0.0193 z m -19.23721,0.9759 c -0.0547,0.001 -0.11004,0.013 -0.16331,0.0367 -0.21298,0.0947 -0.30836,0.34244 -0.21364,0.55553 l 1.97197,4.43662 c 0.0947,0.21308 0.34244,0.30836 0.55553,0.21364 0.21298,-0.0947 0.30854,-0.34244 0.21382,-0.55553 l -1.97216,-4.43662 c -0.071,-0.15983 -0.22817,-0.25351 -0.39221,-0.25033 z m 21.93693,0.0149 c -0.16403,-0.003 -0.32132,0.0901 -0.39257,0.24979 l -1.97798,4.4339 c -0.095,0.21296 -4e-5,0.46088 0.21292,0.55589 0.21297,0.095 0.46088,5e-5 0.5559,-0.21291 l 1.97796,-4.43389 c 0.095,-0.21297 5e-5,-0.46089 -0.21291,-0.5559 -0.0532,-0.0237 -0.10864,-0.0357 -0.16332,-0.0369 z m -24.41484,1.29618 c -0.0808,-0.006 -0.16406,0.012 -0.23979,0.0558 -0.20196,0.1166 -0.27065,0.37302 -0.15406,0.57497 l 1.02115,1.76869 c 0.1166,0.20196 0.373,0.27065 0.57496,0.15405 0.20195,-0.1166 0.27065,-0.37301 0.15406,-0.57497 l -1.02115,-1.76868 c -0.0729,-0.12623 -0.20047,-0.20041 -0.33517,-0.20983 z m 26.85877,0 c -0.13468,0.009 -0.26211,0.0836 -0.33498,0.20983 l -1.02133,1.76868 c -0.1166,0.20196 -0.0477,0.45837 0.15424,0.57497 0.20196,0.1166 0.45837,0.0479 0.57497,-0.15405 l 1.02114,-1.76869 c 0.1166,-0.20195 0.0479,-0.45837 -0.15406,-0.57497 -0.0757,-0.0437 -0.15916,-0.0614 -0.23998,-0.0558 z m -29.26491,1.50073 c -0.081,0.003 -0.16211,0.029 -0.2329,0.0803 -0.18875,0.13693 -0.23048,0.39911 -0.0935,0.58787 l 2.85086,3.92995 c 0.13693,0.18876 0.39929,0.23049 0.58805,0.0936 0.18876,-0.13693 0.23049,-0.39911 0.0935,-0.58787 l -2.85104,-3.92995 c -0.0856,-0.11798 -0.22004,-0.17847 -0.35497,-0.17386 z m 31.70122,0.0214 c -0.13493,-0.005 -0.26941,0.0555 -0.35516,0.17331 l -2.8563,3.92614 c -0.1372,0.18857 -0.0958,0.45086 0.0928,0.58805 0.18858,0.13718 0.45087,0.0959 0.58806,-0.0926 l 2.85613,-3.92614 c 0.13718,-0.18858 0.0957,-0.45086 -0.0928,-0.58805 -0.0707,-0.0514 -0.15176,-0.0778 -0.23272,-0.0807 z m -33.85196,1.78231 c -0.10744,-0.006 -0.21708,0.0299 -0.30374,0.10791 -0.17332,0.15602 -0.18725,0.42109 -0.0312,0.59441 l 1.36648,1.51799 c 0.15601,0.17332 0.42109,0.18726 0.59441,0.0312 0.17332,-0.15602 0.18726,-0.42127 0.0312,-0.59459 l -1.3663,-1.51781 c -0.078,-0.0867 -0.18339,-0.13351 -0.29085,-0.13916 z m 35.97562,0.003 c -0.10745,0.006 -0.21282,0.0525 -0.29084,0.13915 l -1.36648,1.51763 c -0.15606,0.1733 -0.14224,0.43855 0.0311,0.59459 0.17329,0.15604 0.43837,0.14205 0.59441,-0.0312 l 1.36666,-1.51762 c 0.15605,-0.17331 0.14205,-0.43856 -0.0312,-0.59459 -0.0867,-0.078 -0.19611,-0.11354 -0.30357,-0.10791 z m -38.03696,1.97705 c -0.10745,0.006 -0.21266,0.0525 -0.29067,0.13916 -0.15602,0.17332 -0.14207,0.43839 0.0312,0.59441 l 3.60841,3.24834 c 0.17332,0.15603 0.43839,0.14207 0.5944,-0.0312 0.15603,-0.17331 0.14226,-0.43839 -0.0311,-0.59441 l -3.60858,-3.24834 c -0.0867,-0.078 -0.1963,-0.11356 -0.30376,-0.10791 z m 40.10831,0.0142 c -0.10745,-0.006 -0.21722,0.0298 -0.30393,0.10773 l -3.61059,3.24581 c -0.17342,0.15589 -0.18768,0.42097 -0.0318,0.5944 0.1559,0.17342 0.42117,0.18751 0.59459,0.0316 l 3.61077,-3.2458 c 0.17342,-0.1559 0.1875,-0.42098 0.0316,-0.59441 -0.078,-0.0867 -0.18322,-0.13361 -0.29066,-0.13933 z m -41.8225,2.18998 c -0.13494,-0.005 -0.26949,0.0558 -0.35515,0.17367 -0.13707,0.18866 -0.0955,0.4508 0.0932,0.58787 l 1.65224,1.20044 c 0.18866,0.13708 0.45079,0.0957 0.58786,-0.093 0.13708,-0.18866 0.0956,-0.45098 -0.093,-0.58805 l -1.65224,-1.20044 c -0.0707,-0.0514 -0.15193,-0.0776 -0.23289,-0.0805 z m 43.53505,0.0153 c -0.081,0.003 -0.16211,0.0289 -0.23289,0.0803 l -1.65297,1.19936 c -0.18875,0.13694 -0.2305,0.39929 -0.0936,0.58805 0.13695,0.18875 0.39912,0.23031 0.58787,0.0934 l 1.65316,-1.19935 c 0.18875,-0.13694 0.23031,-0.39912 0.0934,-0.58787 -0.0856,-0.11797 -0.22004,-0.17847 -0.35497,-0.17385 z m -45.13697,2.33585 c -0.13469,0.009 -0.26211,0.0836 -0.33499,0.20982 -0.1166,0.20195 -0.0479,0.45837 0.15405,0.57497 l 4.20463,2.42758 c 0.20195,0.1166 0.45837,0.0479 0.57497,-0.15405 0.1166,-0.20195 0.0479,-0.45837 -0.15405,-0.57497 l -4.20463,-2.42759 c -0.0757,-0.0437 -0.15917,-0.0614 -0.23998,-0.0558 z m 46.72744,0 c -0.0808,-0.006 -0.16425,0.012 -0.23998,0.0558 l -4.20463,2.42759 c -0.20195,0.1166 -0.27065,0.37302 -0.15405,0.57497 0.1166,0.20195 0.37302,0.27065 0.57497,0.15405 l 4.20482,-2.42758 c 0.20195,-0.1166 0.27064,-0.37302 0.15404,-0.57497 -0.0729,-0.12622 -0.20048,-0.20041 -0.33517,-0.20982 z m -47.9386,2.50606 c -0.16403,-0.004 -0.32133,0.0899 -0.39258,0.2496 -0.095,0.21298 -6e-5,0.46091 0.21292,0.5559 l 1.86532,0.83202 c 0.21298,0.095 0.46091,7e-5 0.5559,-0.2129 0.095,-0.21298 -1.2e-4,-0.46091 -0.21309,-0.5559 l -1.86515,-0.83202 c -0.0532,-0.0238 -0.10865,-0.0356 -0.16332,-0.0367 z m 49.15794,0.0173 c -0.0547,10e-4 -0.11024,0.013 -0.16351,0.0367 l -1.86569,0.83057 c -0.21304,0.0949 -0.3083,0.34267 -0.21346,0.55571 0.0949,0.21304 0.34286,0.3083 0.5559,0.21346 l 1.8657,-0.83076 c 0.21303,-0.0948 0.30811,-0.34267 0.21327,-0.55571 -0.0711,-0.15978 -0.22818,-0.25323 -0.39221,-0.24997 z m -50.23739,2.60199 c -0.16349,0.0137 -0.31006,0.12291 -0.36424,0.28921 -0.0722,0.22172 0.048,0.45839 0.26977,0.53064 l 4.61629,1.50418 c 0.22171,0.0722 0.45839,-0.0481 0.53064,-0.26977 0.0722,-0.22172 -0.048,-0.4584 -0.26977,-0.53064 l -4.61628,-1.50419 c -0.0554,-0.0181 -0.11192,-0.024 -0.16641,-0.0194 z m 51.31484,0.018 c -0.0545,-0.005 -0.11078,10e-4 -0.16623,0.0194 l -4.61736,1.50092 c -0.22178,0.0721 -0.34223,0.30869 -0.27014,0.53046 0.0721,0.22177 0.30868,0.34223 0.53046,0.27014 l 4.61719,-1.50092 c 0.22178,-0.0721 0.3424,-0.30869 0.27032,-0.53046 -0.0541,-0.16633 -0.20077,-0.2757 -0.36424,-0.28957 z m -51.98736,2.73152 c -0.1961,-0.002 -0.37196,0.13412 -0.41438,0.33371 -0.0485,0.2281 0.0962,0.45073 0.32427,0.49922 l 1.99777,0.42455 c 0.2281,0.0485 0.45072,-0.0962 0.49921,-0.32427 0.0485,-0.22811 -0.0962,-0.45074 -0.32427,-0.49922 l -1.99759,-0.42455 c -0.0285,-0.006 -0.057,-0.009 -0.085,-0.009 z m 52.65462,0.004 c -0.028,2.3e-4 -0.0563,0.004 -0.0848,0.009 l -1.99778,0.42437 c -0.2281,0.0485 -0.37271,0.27093 -0.32426,0.49904 0.0485,0.2281 0.2711,0.3729 0.49921,0.32445 l 1.99759,-0.42437 c 0.2281,-0.0485 0.3729,-0.27111 0.32445,-0.49922 -0.0424,-0.19959 -0.21829,-0.33537 -0.41437,-0.33371 z m -53.16365,2.76167 c -0.1952,0.0187 -0.35587,0.17185 -0.37731,0.37477 -0.0245,0.2319 0.14232,0.43838 0.37422,0.46288 l 4.82829,0.51048 c 0.2319,0.0245 0.43838,-0.1425 0.46288,-0.37441 0.0245,-0.2319 -0.1425,-0.43838 -0.37441,-0.46288 l -4.82828,-0.51048 c -0.029,-0.003 -0.0575,-0.003 -0.0854,-3.5e-4 z m 53.6763,0.0363 c -0.0279,-0.003 -0.0566,-0.003 -0.0856,3.5e-4 l -4.82883,0.50394 c -0.23194,0.0242 -0.39914,0.2304 -0.37496,0.46233 0.0242,0.23194 0.2304,0.39918 0.46234,0.37496 l 4.82883,-0.50394 c 0.23193,-0.0242 0.39914,-0.2304 0.37496,-0.46234 -0.0212,-0.20294 -0.1816,-0.35634 -0.37678,-0.37532 z m -53.75805,2.79473 c -0.2332,0 -0.42091,0.18772 -0.42091,0.42092 0,0.23319 0.18771,0.42091 0.42091,0.42091 h 2.04228 c 0.23319,0 0.4211,-0.18772 0.4211,-0.42091 0,-0.2332 -0.18791,-0.42092 -0.4211,-0.42092 z m 51.79298,0 c -0.23319,0 -0.42092,0.18772 -0.42092,0.42092 10e-6,0.23319 0.18773,0.42091 0.42092,0.42091 h 2.04228 c 0.23319,0 0.42092,-0.18772 0.42092,-0.42091 0,-0.2332 -0.18773,-0.42092 -0.42092,-0.42092 z m -46.80319,2.29461 c -0.0279,-0.003 -0.0564,-0.003 -0.0854,3.5e-4 l -4.82902,0.50394 c -0.23194,0.0242 -0.39913,0.2304 -0.37495,0.46233 0.0242,0.23194 0.2304,0.39918 0.46233,0.37496 l 4.82902,-0.50394 c 0.23194,-0.0242 0.39913,-0.2304 0.37495,-0.46234 -0.0212,-0.20294 -0.18177,-0.35634 -0.37695,-0.37531 z m 43.85314,0.0298 c -0.19521,0.0187 -0.35588,0.17186 -0.37732,0.37478 -0.0245,0.2319 0.14233,0.43838 0.37423,0.46288 l 4.82829,0.51048 c 0.23191,0.0245 0.43837,-0.14251 0.46288,-0.37441 0.0245,-0.2319 -0.14251,-0.43838 -0.37441,-0.46288 l -4.8281,-0.51048 c -0.029,-0.003 -0.0577,-0.003 -0.0856,-3.5e-4 z m -46.2602,2.8436 c -0.028,2.4e-4 -0.0565,0.003 -0.085,0.009 l -1.99777,0.42436 c -0.22811,0.0485 -0.37271,0.27111 -0.32427,0.49922 0.0485,0.22811 0.27111,0.37272 0.49922,0.32427 l 1.99777,-0.42419 c 0.2281,-0.0485 0.37271,-0.27111 0.32426,-0.49921 -0.0424,-0.1996 -0.2181,-0.33537 -0.41419,-0.33372 z m 48.66925,0.004 c -0.19609,-0.002 -0.37177,0.13394 -0.41419,0.33353 -0.0485,0.2281 0.096,0.45074 0.32409,0.49922 l 1.99777,0.42455 c 0.22809,0.0485 0.45073,-0.096 0.49921,-0.32409 0.0485,-0.2281 -0.0962,-0.45092 -0.32426,-0.4994 l -1.9976,-0.42455 c -0.0285,-0.006 -0.057,-0.009 -0.085,-0.009 z m -45.30519,1.65787 c -0.0545,-0.005 -0.11077,0.001 -0.16622,0.0194 l -4.61736,1.50091 c -0.22178,0.0721 -0.34223,0.30869 -0.27014,0.53046 0.0721,0.22178 0.30868,0.34222 0.53046,0.27014 l 4.61719,-1.50092 c 0.22178,-0.0721 0.34241,-0.30869 0.27032,-0.53046 -0.0541,-0.16633 -0.20077,-0.2757 -0.36425,-0.28957 z m 41.93713,0.0149 c -0.16349,0.0137 -0.31005,0.12292 -0.36423,0.28921 -0.0722,0.22173 0.048,0.4584 0.26977,0.53065 l 4.61628,1.50418 c 0.22172,0.0722 0.4584,-0.0481 0.53064,-0.26977 0.0723,-0.22172 -0.048,-0.4584 -0.26977,-0.53065 l -4.61628,-1.50418 c -0.0554,-0.0181 -0.11191,-0.024 -0.16641,-0.0194 z m -43.69909,3.27251 c -0.0547,0.001 -0.11006,0.0128 -0.16332,0.0365 l -1.86587,0.83075 c -0.21304,0.0948 -0.30812,0.34267 -0.21328,0.55571 0.0949,0.21304 0.34268,0.30812 0.55571,0.21328 l 1.86589,-0.83058 c 0.21303,-0.0948 0.30811,-0.34267 0.21327,-0.55571 -0.0711,-0.15978 -0.22837,-0.25323 -0.3924,-0.24997 z m 45.45888,0.016 c -0.16403,-0.004 -0.32133,0.0899 -0.39258,0.24961 -0.095,0.21297 -6e-5,0.4609 0.21291,0.55589 l 1.86515,0.83202 c 0.21297,0.095 0.46091,6e-5 0.5559,-0.21291 0.095,-0.21297 6e-5,-0.4609 -0.21291,-0.55589 l -1.86515,-0.83203 c -0.0532,-0.0238 -0.10864,-0.0356 -0.16332,-0.0367 z m -41.82613,0.91214 c -0.0808,-0.006 -0.16424,0.012 -0.23998,0.0558 l -4.20463,2.42758 c -0.20195,0.1166 -0.27065,0.37302 -0.15405,0.57497 0.1166,0.20195 0.37302,0.27065 0.57497,0.15405 l 4.20463,-2.4274 c 0.20195,-0.1166 0.27064,-0.3732 0.15405,-0.57515 -0.0729,-0.12622 -0.2003,-0.20041 -0.33499,-0.20982 z m 38.20028,0 c -0.13469,0.009 -0.26229,0.0836 -0.33517,0.20982 -0.1166,0.20195 -0.0479,0.45855 0.15405,0.57515 l 4.20463,2.4274 c 0.20196,0.1166 0.45855,0.0479 0.57515,-0.15405 0.1166,-0.20195 0.0479,-0.45837 -0.15404,-0.57497 l -4.20482,-2.42758 c -0.0757,-0.0437 -0.15899,-0.0614 -0.2398,-0.0558 z m -39.24903,3.56244 c -0.081,0.003 -0.16211,0.0291 -0.2329,0.0805 l -1.65296,1.19935 c -0.18875,0.13694 -0.2305,0.39912 -0.0936,0.58787 0.13695,0.18875 0.39912,0.2305 0.58787,0.0935 l 1.65314,-1.19935 c 0.18877,-0.13693 0.23051,-0.39911 0.0936,-0.58786 -0.0856,-0.11797 -0.22022,-0.17866 -0.35516,-0.17404 z m 40.28761,0.0142 c -0.13494,-0.005 -0.26948,0.0558 -0.35515,0.17367 -0.13708,0.18865 -0.0955,0.45098 0.0932,0.58805 l 1.65224,1.20044 c 0.18866,0.13707 0.4508,0.0955 0.58787,-0.0932 0.13707,-0.18866 0.0956,-0.4508 -0.093,-0.58787 l -1.65224,-1.20044 c -0.0707,-0.0514 -0.15193,-0.0778 -0.23289,-0.0807 z m -36.54387,0.14533 c -0.10743,-0.006 -0.21702,0.0298 -0.30374,0.10773 l -3.61076,3.2458 c -0.17342,0.15589 -0.18751,0.42098 -0.0316,0.59441 0.15589,0.17342 0.42097,0.1875 0.5944,0.0316 l 3.61077,-3.2458 c 0.17342,-0.15589 0.18751,-0.42098 0.0316,-0.59441 -0.0779,-0.0867 -0.18322,-0.13361 -0.29067,-0.13933 z m 32.80012,0.0116 c -0.10745,0.006 -0.21283,0.0525 -0.29084,0.13915 -0.15603,0.17332 -0.14207,0.43839 0.0312,0.59441 l 3.60841,3.24834 c 0.17332,0.15604 0.43857,0.14208 0.59459,-0.0312 0.15603,-0.17331 0.14207,-0.43839 -0.0312,-0.5944 l -3.6086,-3.24835 c -0.0867,-0.078 -0.19611,-0.11355 -0.30356,-0.10791 z m -29.37464,3.08358 c -0.13493,-0.005 -0.2696,0.0554 -0.35534,0.1733 l -2.85613,3.92614 c -0.13719,0.18858 -0.0959,0.45087 0.0926,0.58805 0.18857,0.13719 0.45087,0.0959 0.58805,-0.0927 l 2.85613,-3.92614 c 0.13718,-0.18857 0.0959,-0.45086 -0.0926,-0.58805 -0.0707,-0.0514 -0.15175,-0.0778 -0.23271,-0.0806 z m 25.93573,0.0176 c -0.081,0.003 -0.16211,0.0289 -0.2329,0.0803 -0.18875,0.13694 -0.23048,0.39911 -0.0936,0.58787 l 2.85086,3.92995 c 0.13693,0.18876 0.39911,0.2305 0.58787,0.0936 0.18876,-0.13693 0.23049,-0.3991 0.0936,-0.58786 l -2.85086,-3.92996 c -0.0856,-0.11797 -0.22004,-0.17846 -0.35498,-0.17385 z m -29.6228,0.6064 c -0.10745,0.006 -0.21282,0.0525 -0.29084,0.13915 l -1.36649,1.51763 c -0.15605,0.1733 -0.14223,0.43855 0.0311,0.59459 0.1733,0.15604 0.43837,0.14205 0.5944,-0.0313 l 1.36666,-1.51762 c 0.15606,-0.1733 0.14206,-0.43856 -0.0312,-0.59459 -0.0867,-0.078 -0.19611,-0.11354 -0.30357,-0.10791 z m 33.33076,0.002 c -0.10745,-0.006 -0.21691,0.0299 -0.30356,0.10791 -0.17333,0.156 -0.18726,0.42108 -0.0313,0.5944 l 1.3663,1.51799 c 0.15602,0.17333 0.42109,0.18726 0.59442,0.0312 0.17332,-0.15601 0.18726,-0.42126 0.0312,-0.59459 l -1.36631,-1.5178 c -0.078,-0.0867 -0.18339,-0.13351 -0.29084,-0.13916 z m -25.65524,1.68366 c -0.16403,-0.004 -0.32114,0.0899 -0.39239,0.24961 l -1.97816,4.43389 c -0.095,0.21297 -5e-5,0.46089 0.21292,0.5559 0.21296,0.095 0.46089,5e-5 0.55589,-0.21291 l 1.97815,-4.4339 c 0.095,-0.21296 5e-5,-0.46089 -0.21292,-0.55589 -0.0532,-0.0238 -0.10881,-0.0356 -0.16349,-0.0367 z m 17.95556,0.0122 c -0.0547,0.001 -0.11023,0.0128 -0.1635,0.0365 -0.21297,0.0947 -0.30836,0.34244 -0.21363,0.55553 l 1.97196,4.43662 c 0.0947,0.21297 0.34262,0.30836 0.55571,0.21364 0.21298,-0.0947 0.30836,-0.34244 0.21364,-0.55553 l -1.97197,-4.43662 c -0.071,-0.15973 -0.22818,-0.25329 -0.39221,-0.25015 z m -21.43154,1.35867 c -0.13468,0.009 -0.26212,0.0836 -0.33498,0.20982 l -1.02115,1.76869 c -0.11659,0.20195 -0.0479,0.45837 0.15406,0.57497 0.20195,0.1166 0.45837,0.0479 0.57496,-0.15405 l 1.02115,-1.76869 c 0.11659,-0.20195 0.0479,-0.45837 -0.15406,-0.57497 -0.0757,-0.0437 -0.15916,-0.0614 -0.23998,-0.0558 z m 24.93421,0 c -0.0808,-0.006 -0.16406,0.0121 -0.23979,0.0558 -0.20195,0.1166 -0.27065,0.37302 -0.15405,0.57497 l 1.02114,1.76869 c 0.1166,0.20195 0.37302,0.27064 0.57496,0.15405 0.20196,-0.1166 0.27066,-0.37302 0.15406,-0.57497 l -1.02114,-1.76869 c -0.0729,-0.12622 -0.20049,-0.20041 -0.33518,-0.20982 z m -17.0545,0.0634 c -0.19609,-0.002 -0.3718,0.13394 -0.41419,0.33354 l -1.00897,4.74926 c -0.0485,0.2281 0.0962,0.45076 0.32427,0.49921 0.22811,0.0485 0.45076,-0.0962 0.49922,-0.32427 l 1.00896,-4.74926 c 0.0485,-0.2281 -0.0962,-0.45076 -0.32427,-0.49921 -0.0285,-0.006 -0.057,-0.009 -0.085,-0.009 z m 9.1599,0.003 c -0.028,2.2e-4 -0.0563,0.003 -0.0848,0.009 -0.22814,0.0483 -0.37294,0.27071 -0.32465,0.49885 l 1.00553,4.74999 c 0.0483,0.22814 0.27088,0.37293 0.49903,0.32464 0.22814,-0.0483 0.37293,-0.27089 0.32464,-0.49903 l -1.0057,-4.74965 c -0.0423,-0.19963 -0.21793,-0.33543 -0.41402,-0.33391 z m -4.5725,0.47905 c -0.23319,0 -0.42092,0.18772 -0.42092,0.42092 v 4.85517 c 0,0.2332 0.18773,0.42092 0.42092,0.42092 0.2332,0 0.42092,-0.18772 0.42092,-0.42092 v -4.85517 c 0,-0.2332 -0.18772,-0.42092 -0.42092,-0.42092 z m -7.72657,1.56886 c -0.16347,0.0139 -0.31017,0.12324 -0.36423,0.28957 l -0.63129,1.94236 c -0.0721,0.22178 0.0484,0.45837 0.27014,0.53047 0.22177,0.0721 0.45836,-0.0486 0.53046,-0.27032 l 0.63128,-1.94218 c 0.0721,-0.22177 -0.0484,-0.45836 -0.27013,-0.53046 -0.0554,-0.018 -0.11173,-0.024 -0.16623,-0.0194 z m 15.44987,0.001 c -0.0545,-0.005 -0.11078,0.001 -0.16622,0.0193 -0.22178,0.0721 -0.34238,0.30868 -0.27033,0.53047 l 0.63111,1.94235 c 0.0721,0.22179 0.30868,0.3422 0.53046,0.27014 0.22178,-0.0721 0.34238,-0.3085 0.27032,-0.53028 l -0.63128,-1.94236 c -0.0541,-0.16634 -0.20058,-0.27568 -0.36406,-0.28957 z m -10.36543,1.08181 c -0.1952,0.0188 -0.356,0.17203 -0.37732,0.37496 l -0.21346,2.03119 c -0.0244,0.23192 0.14268,0.43812 0.3746,0.46252 0.23192,0.0244 0.4383,-0.14268 0.4627,-0.3746 l 0.21345,-2.03101 c 0.0244,-0.23192 -0.14268,-0.4383 -0.37458,-0.4627 -0.029,-0.003 -0.0575,-0.003 -0.0854,-3.5e-4 z m 5.26736,0.002 c -0.0279,-0.003 -0.0566,-0.003 -0.0856,3.5e-4 -0.23193,0.0242 -0.39917,0.2304 -0.37495,0.46233 l 0.21218,2.03138 c 0.0242,0.23193 0.2304,0.399 0.46234,0.37478 0.23193,-0.0242 0.39918,-0.23041 0.37496,-0.46234 l -0.212,-2.03119 c -0.0212,-0.20295 -0.18178,-0.35637 -0.37697,-0.37533 z" + style="opacity:1;fill:#f4f2f3;fill-opacity:1;stroke:none;stroke-width:0.38088897;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" /> + <path + transform="matrix(0.35154274,0,0,0.35154274,206.79018,159.77261)" + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path2150" + d="m 469.09621,100.6068 -65.50955,38.06124 -41.41979,65.20654 60.59382,-44.88117 z" + style="opacity:0.40900005;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.5614785;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill;filter:url(#filter2222)" /> + <g + id="g2847"> + <path + sodipodi:type="star" + style="opacity:1;fill:#ff5150;fill-opacity:1;stroke:none;stroke-width:1.01970422;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" + id="path2096" + sodipodi:sides="3" + sodipodi:cx="124.97523" + sodipodi:cy="142.65184" + sodipodi:r1="18.791006" + sodipodi:r2="9.395503" + sodipodi:arg1="1.3089969" + sodipodi:arg2="2.3561945" + inkscape:flatsided="true" + inkscape:rounded="1.35308e-016" + inkscape:randomized="0" + d="m 129.8387,160.80256 -23.01419,-23.01419 31.43796,-8.42378 z" + inkscape:transform-center-y="-13.18648" + transform="matrix(0.64804473,-0.3316906,-0.36122382,0.63205852,329.21345,156.86272)" /> + <path + transform="matrix(-0.36122382,0.63205852,0.64804473,-0.3316906,297.96259,186.70411)" + inkscape:transform-center-y="13.186483" + d="m 129.8387,160.80256 -23.01419,-23.01419 31.43796,-8.42378 z" + inkscape:randomized="0" + inkscape:rounded="1.35308e-016" + inkscape:flatsided="true" + sodipodi:arg2="2.3561945" + sodipodi:arg1="1.3089969" + sodipodi:r2="9.395503" + sodipodi:r1="18.791006" + sodipodi:cy="142.65184" + sodipodi:cx="124.97523" + sodipodi:sides="3" + id="path2099" + style="opacity:1;fill:#f1f1f1;fill-opacity:1;stroke:none;stroke-width:1.01970422;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" + sodipodi:type="star" /> + <path + style="opacity:0.243;fill:#000000;stroke:none;stroke-width:0.09301235px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 331.85294,231.18507 23.41607,-15.75201 16.81513,-22.66472 z" + id="path2112" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> +</svg> diff --git a/site/assets/images/thunderbird.svg b/site/assets/images/thunderbird.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b587718edc597d2ec24f973e2f982de44d6732a --- /dev/null +++ b/site/assets/images/thunderbird.svg @@ -0,0 +1,253 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 246.96 242.808" style="enable-background:new 0 0 246.96 242.808;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#363959;} + .st1{fill:url(#SVGID_1_);} + .st2{fill:#FBFBFB;} + .st3{fill:#999999;} + .st4{fill:#F8F8F8;} + .st5{fill:url(#SVGID_2_);} + .st6{fill:url(#SVGID_3_);} + .st7{fill:url(#SVGID_4_);} + .st8{fill:#3F6499;} + .st9{fill:url(#SVGID_5_);} + .st10{fill:url(#SVGID_6_);} + .st11{fill:url(#SVGID_7_);} + .st12{fill:url(#SVGID_8_);} + .st13{filter:url(#Adobe_OpacityMaskFilter);} + .st14{fill:url(#SVGID_10_);} + .st15{mask:url(#SVGID_9_);} + .st16{opacity:0.6;} + .st17{opacity:0.2;} + .st18{fill:url(#SVGID_11_);} + .st19{fill:url(#SVGID_12_);} + .st20{opacity:0.1;fill:#F2F2F2;} + .st21{fill:#2F4282;} + .st22{fill:url(#SVGID_13_);} + .st23{fill:url(#SVGID_14_);} + .st24{fill:#FFFFFF;} + .st25{fill:url(#SVGID_15_);} + .st26{fill:url(#SVGID_16_);} + .st27{fill:url(#SVGID_17_);} + .st28{fill:url(#SVGID_18_);} + .st29{fill:url(#SVGID_19_);} + .st30{fill:url(#SVGID_20_);} + .st31{fill:url(#SVGID_21_);} + .st32{fill:url(#SVGID_22_);} + .st33{fill:url(#SVGID_23_);} + .st34{fill:url(#SVGID_24_);} + .st35{filter:url(#Adobe_OpacityMaskFilter_1_);} + .st36{fill:url(#SVGID_26_);} + .st37{mask:url(#SVGID_25_);} + .st38{fill:url(#SVGID_27_);} + .st39{fill:url(#SVGID_28_);} + .st40{fill:url(#SVGID_29_);} + .st41{fill:url(#SVGID_30_);} + .st42{fill:url(#SVGID_31_);} + .st43{fill:url(#SVGID_32_);} + .st44{fill:url(#SVGID_33_);} + .st45{fill:url(#SVGID_34_);} + .st46{fill:url(#SVGID_35_);} + .st47{fill:url(#SVGID_36_);} + .st48{fill:url(#SVGID_37_);} + .st49{fill:url(#SVGID_38_);} + .st50{fill:url(#SVGID_39_);} + .st51{fill:url(#SVGID_40_);} + .st52{filter:url(#Adobe_OpacityMaskFilter_2_);} + .st53{fill:url(#SVGID_42_);} + .st54{mask:url(#SVGID_41_);} + .st55{fill:url(#SVGID_43_);} + .st56{fill:url(#SVGID_44_);} + .st57{fill:url(#SVGID_45_);} + .st58{fill:url(#SVGID_46_);} + .st59{fill:url(#SVGID_47_);} + .st60{fill:url(#SVGID_48_);} +</style> +<g> + <g> + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="199.533" y1="201.907" x2="39.6787" y2="42.0527"> + <stop offset="0" style="stop-color:#130036"/> + <stop offset="0.2297" style="stop-color:#18023B"/> + <stop offset="0.5122" style="stop-color:#26094A"/> + <stop offset="0.8211" style="stop-color:#3D1563"/> + <stop offset="1" style="stop-color:#4E1D75"/> + </linearGradient> + <path class="st1" d="M188.887,35.492c-14.501-9.472-33.046-12.538-43.281-13.609c-10.954-1.145-20.468-0.943-28.836,0.285 + c-0.709-0.009-1.414-0.037-2.127-0.037c-0.544,0-1.08,0.023-1.627,0.029c0.225-0.275,0.381-0.445,0.381-0.445 + s-0.44,0.069-1.304,0.46c-2.717,0.044-5.421,0.138-8.085,0.32c3.711-4.068,6.751-6.2,6.751-6.2s-3.608,0.528-10.192,6.496 + c-3.132,0.288-6.221,0.67-9.258,1.145c6.918-9.362,14.155-13.304,14.155-13.304s-8.772-1.786-22.507,12.016 + c-1.149,1.155-2.215,2.356-3.246,3.572C39.68,35.907,11.03,61.758,11.03,92.139c0,5.958-1.829,12.511,0.143,19.054 + c-0.788,10.453,0.89,38.975,0.89,38.975s10.837,58.649,52.51,68.846c0.662,0.158-8.707-14.62-12.851-32.442 + c8.069,8.208,17.685,14.699,28.478,15.824c1.325,0.137-6.165-8.64-12.725-19.234l94.698,31.906 + c49.529-21.274,43.763-19.357,54.397-30.875c23.428-25.36,26.708-39.75,20.806-82.235 + C233.383,73.279,212.216,44.875,188.887,35.492z"/> + <polygon class="st2" points="22.687,62.276 8.546,142.68 16.387,166.974 172.911,219.015 201.939,95.591 "/> + <g> + <path class="st3" d="M23.128,65.01c0.785,1.689,0.554,2.089,0.065,2.089c-0.22,0-0.492-0.081-0.747-0.161 + c-0.255-0.081-0.494-0.161-0.648-0.161c-0.433,0-0.189,0.639,2.263,3.72c3.468,4.406,54.399,81.293,57.182,81.293 + c0.015,0,0.028-0.002,0.04-0.006c23.71-8.448,124.543-43.058,124.543-43.058L195.51,93.697L23.128,65.01"/> + </g> + <path class="st4" d="M24.607,63.121c0,0,0.76,3.932,4.281,8.284c3.5,4.392,50.51,75.571,52.869,74.944 + c30.795-8.176,142.525-51.674,142.525-51.674L24.607,63.121z"/> + <polygon class="st3" points="167.321,217.161 18.568,167.703 19.094,171.178 168.976,221.012 "/> + <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="10.2428" y1="95.3113" x2="57.7039" y2="95.3113"> + <stop offset="0" style="stop-color:#3156A8"/> + <stop offset="0.2474" style="stop-color:#3351A4"/> + <stop offset="0.5365" style="stop-color:#3B4397"/> + <stop offset="0.8453" style="stop-color:#472C82"/> + <stop offset="1" style="stop-color:#4E1D75"/> + </linearGradient> + <path class="st5" d="M57.704,59.795c0,0-54.122,15.85-29.288,71.033c0,0-11.387-10.426-18.167-23.757 + C9.944,106.474,21.55,65.242,21.55,65.242L57.704,59.795z"/> + + <radialGradient id="SVGID_3_" cx="59.0732" cy="113.9232" r="85.2466" gradientTransform="matrix(1 0 0 1.45 0 -51.2654)" gradientUnits="userSpaceOnUse"> + <stop offset="0.1654" style="stop-color:#14CDDA"/> + <stop offset="0.5478" style="stop-color:#2061BD"/> + <stop offset="0.6546" style="stop-color:#2658AC"/> + <stop offset="0.864" style="stop-color:#373F81"/> + <stop offset="1" style="stop-color:#432D62"/> + </radialGradient> + <path class="st6" d="M28.416,130.828c-4.707-0.081-12.269-3.964-14.722-8.665c-3.066,51.098,17.782,80.939,50.88,96.853 + C53.759,217.776,0,189.407,0,121.14C0,63.093,46.06,11.208,118.142,8.831c0.442,3.254-35.736,11.414-36.893,15.251 + c-1.796,5.972-5.924,12.473-9.406,17.684c-4.718,7.061,6.557,13.099-1.729,15.001c-12.468,2.861-29.098,1.277-41.361,17.219 + C10.319,97.951,22.62,125.365,28.416,130.828z"/> + <g> + <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="44.5387" y1="57.8975" x2="191.515" y2="57.8975"> + <stop offset="0" style="stop-color:#2061BD"/> + <stop offset="0.1846" style="stop-color:#2B51AC"/> + <stop offset="0.6826" style="stop-color:#442C84"/> + <stop offset="0.9409" style="stop-color:#4E1D75"/> + </linearGradient> + <path class="st7" d="M137.048,10.699c-46.682-3.582-70.707,15.097-86.13,36.817c-5.617,7.906-5.002,15.166-3.068,23.937 + c0.831,3.744,1.671,5.538,0.659,9.355c-0.558,2.106-0.465,4.072-1.158,5.314c-0.959,1.717-2.18,3.594-2.589,6.677 + c-1.022,7.699,1.703,10.151,3.406,12.741c2.426-2.409,7.165-8.079,15.71-11.466c8.545-3.387,14.167-8.477,24.876-13.941 + c14.632-7.463,31.782,3.859,64.3-6.796c10.006-3.279,33.002-37.344,38.461-38.652C176.312,17.873,150.448,11.726,137.048,10.699z + "/> + </g> + <path class="st8" d="M106.207,0.032c0,0-8.335,4.026-11.965,11.301c8.381-4.225,13.246-6.533,15.546-6.808 + c0,0-2.203,1.067-4.935,6.87c4.83-1.547,6.493-2.522,7.819-2.537c0,0-0.385,0.61-0.737,6.402 + c-7.417-2.404-21.693,0.397-29.287,5.153C80.072,6.678,106.207,0.032,106.207,0.032z"/> + <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="66.1736" y1="23.2056" x2="167.2642" y2="111.0823"> + <stop offset="0.0202" style="stop-color:#48A8E0"/> + <stop offset="0.3883" style="stop-color:#2061BD"/> + <stop offset="0.4968" style="stop-color:#2B51AC"/> + <stop offset="0.7892" style="stop-color:#442C84"/> + <stop offset="0.9409" style="stop-color:#4E1D75"/> + </linearGradient> + <path class="st9" d="M139.379,8.63C125.07,6.776,113.109,7.141,102.94,9.1c3.198-3.065,6.898-4.575,6.898-4.575 + c-4.795,0.424-10.781,3.554-15.917,6.868c-2.588,0.826-5.054,1.758-7.39,2.799c1.43-1.885,3.094-3.899,4.72-5.445 + c6.039-5.743,15.006-8.715,15.006-8.715C98.603-0.53,72.989,6.027,57.576,37.245c-2.526,3.077-4.883,6.235-7.129,9.398 + c-5.798,8.164-5.162,15.658-3.162,24.715c0.852,3.867,1.009,10.04,0.168,14.029c-0.168,0.799-2.363,2.863-2.926,8.428 + c-0.602,5.905,1.505,8.804,3.582,11.203c7.38-10.792,14.661-12.931,14.661-12.931C73.1,87.855,77.4,83.335,88.458,77.694 + c15.108-7.709,67.939,17.45,101.512,6.448c10.332-3.384-3.977-47.359,1.663-48.709C175.934,18.073,153.139,10.413,139.379,8.63z" + /> + <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="19.6762" y1="337.4139" x2="217.8353" y2="43.6309"> + <stop offset="0.3787" style="stop-color:#3156A8"/> + <stop offset="1" style="stop-color:#4E1D75"/> + </linearGradient> + <path class="st10" d="M244.176,103.288c-8.276-43.237-48.096-82.572-80.117-84.752c-14.211-0.968-9.847,6.319-18.739,9.094 + c-38.32,11.959-38.906,18.941-38.906,18.941c81.252,3.819,82.484,84.064,60.724,104.366c6.123-1.428,12.762-8.914,18.859-20.666 + c-0.732,4.931-1.36,10.98-2.274,17.729c-2.788,20.595,0.823,63.614-58.356,92.405c0,0,32.372-2.646,48.425-20.717 + c-6.528,15.012-24.441,23.121-24.441,23.121c13.182-1.928,47.81-12.146,69.868-39.732 + C244.185,171.852,251.693,142.558,244.176,103.288z"/> + <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="96.7452" y1="278.6458" x2="206.3175" y2="32.5423"> + <stop offset="0" style="stop-color:#29ABE2"/> + <stop offset="0.7733" style="stop-color:#385AA6"/> + <stop offset="0.8575" style="stop-color:#414293"/> + <stop offset="1" style="stop-color:#4E1D75"/> + </linearGradient> + <path class="st11" d="M164.993,182.221c0,0,26.396-7.38,34.903-21.633c-1.032,16.619-16.107,33.662-16.107,33.662 + s22.038-4.46,31.436-19.968c-1.224,13.994-18.191,32.907-18.191,32.907c17.346-3.113,60.93-30.645,47.143-103.901 + c-8.142-43.262-48.096-82.572-80.117-84.752c-14.211-0.968-9.847,6.319-18.739,9.094c-38.32,11.959-38.906,18.941-38.906,18.941 + c81.252,3.819,102.844,46.344,60.724,103.231c6.123-1.429,8.578-4.794,13.178-10.301 + C180.315,139.501,182.401,161.281,164.993,182.221z"/> + <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="48.2686" y1="92.0337" x2="54.2414" y2="95.4683"> + <stop offset="0" style="stop-color:#B0DCD6"/> + <stop offset="1" style="stop-color:#53ACE0"/> + </linearGradient> + <path class="st12" d="M60.609,85.567c0,0-4.719,3.301-8.136,2.46c-4.045-0.993-4.73-4.913-4.73-4.913 + c-0.089,0.803-0.192,1.578-0.341,2.273c-0.168,0.799-2.363,2.863-2.926,8.428c-0.602,5.905,1.615,9.325,3.692,11.724 + C55.549,94.747,62.72,92.087,62.72,92.087C59.911,91.105,60.609,85.567,60.609,85.567z"/> + <defs> + <filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="162.68" y="18.355" width="14.927" height="6.629"> + <feColorMatrix type="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"/> + </filter> + </defs> + <mask maskUnits="userSpaceOnUse" x="162.68" y="18.355" width="14.927" height="6.629" id="SVGID_9_"> + <g class="st13"> + <radialGradient id="SVGID_10_" cx="154.384" cy="67.9985" r="51.9675" gradientUnits="userSpaceOnUse"> + <stop offset="0.868" style="stop-color:#FFFFFF"/> + <stop offset="1" style="stop-color:#000000"/> + </radialGradient> + <rect x="91.295" y="-7.218" class="st14" width="100.015" height="93.339"/> + </g> + </mask> + <g class="st15"> + <g class="st16"> + <g class="st17"> + <linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="176.2139" y1="23.0851" x2="164.2403" y2="20.5554"> + <stop offset="0" style="stop-color:#3092B9"/> + <stop offset="0.2199" style="stop-color:#258DB6"/> + <stop offset="0.6564" style="stop-color:#1685B1"/> + <stop offset="1" style="stop-color:#1082AF"/> + </linearGradient> + <path class="st18" d="M163.513,18.434c1.106-0.287,5.621,0.204,8.584,1.533c2.964,1.329,8.073,3.679,3.986,4.701 + c-4.088,1.022-6.438-0.613-8.482-2.351S160.754,19.149,163.513,18.434z"/> + </g> + </g> + </g> + <linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="80.7838" y1="38.0252" x2="90.637" y2="77.5443"> + <stop offset="0.0074" style="stop-color:#1398D1;stop-opacity:0"/> + <stop offset="0.2482" style="stop-color:#1187C2;stop-opacity:0.6197"/> + <stop offset="0.6422" style="stop-color:#3F6499;stop-opacity:0.71"/> + <stop offset="1" style="stop-color:#2F4282;stop-opacity:0.5"/> + </linearGradient> + <path class="st19" d="M61.051,84.921c0,0,25.888-42.662,49.292-54.175c2.173-1.093-32.405,9.191-46.32,24.55 + C55.752,64.425,60.132,82.298,61.051,84.921z"/> + <path class="st20" d="M61.051,84.921c0.024-0.015,0.05-0.03,0.075-0.045c6.694-4.136,18.166-6.518,21.864-14.015 + c14.237-28.869,27.354-40.115,27.354-40.115C86.939,42.259,61.051,84.921,61.051,84.921z"/> + <path class="st21" d="M63.512,77.118c0,0-4.666-7.159,2.053-13.687c3.546-3.44,8.919-1.529,9.54-0.91 + c2.644,2.622,0.982,8.156-1.398,11.288C72.362,75.573,68.448,78.319,63.512,77.118z"/> + + <linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="48.7383" y1="14.373" x2="43.1993" y2="11.3027" gradientTransform="matrix(0.9994 0.0349 -0.0349 0.9994 24.5906 57.1202)"> + <stop offset="0" style="stop-color:#F9C21B"/> + <stop offset="0.1479" style="stop-color:#F3BA1B"/> + <stop offset="0.3787" style="stop-color:#E3A41B"/> + <stop offset="0.6634" style="stop-color:#C9801C"/> + <stop offset="0.9884" style="stop-color:#A44E1C"/> + <stop offset="1" style="stop-color:#A34C1C"/> + </linearGradient> + <path class="st22" d="M66.187,76.674c0,0-3.224-4.949,1.422-9.459c2.446-2.376,6.161-1.056,6.592-0.63 + c1.826,1.812,0.676,5.637-0.968,7.8C72.304,75.608,69.598,77.504,66.187,76.674z"/> + <path d="M72.623,71.393c-0.072,1.978-1.746,3.522-3.738,3.454c-1.996-0.069-3.558-1.726-3.487-3.704 + c0.071-1.977,1.744-3.521,3.741-3.453C71.131,67.759,72.692,69.417,72.623,71.393z"/> + </g> + <circle class="st24" cx="66.725" cy="70.287" r="1.136"/> + <linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="206.2113" y1="130.1391" x2="169.4298" y2="47.5264"> + <stop offset="0" style="stop-color:#409EC3"/> + <stop offset="0.62" style="stop-color:#2061BD"/> + </linearGradient> + <path class="st23" d="M228.505,65.01c-17.721-26.976-31.761-33.831-31.761-33.831s0.645,19.65,10.484,29.128 + c1.124,1.083-11.774-8.432-11.774-8.432s-2.758,9.076,3.562,19.51c-1.836-2.439-3.051-3.363-3.051-3.363 + s-11.908,5.491-15.423,13.109c-1.815-3.426-3.176-5.444-3.176-5.444s-8.236,16.437-7.201,35.495 + c1.684,30.988-5.803,42.404-5.803,42.404s20.057-7.695,29.676-32.468c3.974,10.533-0.121,21.619-0.121,21.619 + s16.206-12.109,19.691-34.18c3.863,6.23,2.727,18.664,2.727,18.664s10.344-14.402,10.596-30.086 + c4.794,3.343,5.235,16.399,5.235,16.399S247.502,93.928,228.505,65.01z"/> + <linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="176.7603" y1="103.061" x2="150.4069" y2="21.9536"> + <stop offset="0" style="stop-color:#14B2DA"/> + <stop offset="0.4028" style="stop-color:#297CCC"/> + <stop offset="0.5077" style="stop-color:#256FC5"/> + <stop offset="0.6492" style="stop-color:#2164BF"/> + <stop offset="0.8162" style="stop-color:#2061BD"/> + <stop offset="0.9835" style="stop-color:#2061BD"/> + </linearGradient> + <path class="st25" d="M211.282,46.158c-4.631-8.63-12.803-14.13-19.986-18.582c-17.909-11.105-29.427-12.665-29.427-12.665 + s-16.528,3.074-13.689,7.672c0.146,0.236,0.487,0.535,0.968,0.877c-14.498-6.678-22.722,8.677-22.722,8.677 + c-8.284-0.503-18.371,3.575-21.312,14.499c-0.305,1.134,3.711,0.496,5.777,0.945c12.079,2.626,23.45,8.32,28.675,11.134 + c12.154,6.548,19.365,17.451,23.528,25.629c5.037,9.894,7.094,27.304,7.094,27.304s13.253-18.205,10.086-27.552 + c5.249,3.26,6.285,14.891,6.285,14.891s8.835-13.838,6.223-25.891c6.815,4.153,7.042,12.601,7.042,12.601s6.939-9.631,3.803-25.427 + c6.858,5.453,8.293,12.517,8.293,12.517S217.526,57.794,211.282,46.158z"/> +</g> +</svg> diff --git a/site/favicon.ico b/site/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5d18cfbd641828390dea25c4da7c3820ab88fa52 Binary files /dev/null and b/site/favicon.ico differ diff --git a/site/index.html b/site/index.html index 51c263a331196bc5ca0a409b85df6fb8c5aee0b6..b0f584aa052912869ffe2ee239ea96a65373ee23 100644 --- a/site/index.html +++ b/site/index.html @@ -1,8 +1,140 @@ -<html> +<!DOCTYPE html> +<html lang="en"> <head> - <title>safelinks-cleaner-mailextension</title> - </head> - <body> - <a href="safelinks-cleaner-thunderbird.xpi">Download latest version</a> + <title>Safe Links Cleaner</title> + <!-- Meta --> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="description" content=""> + <meta name="author" content=""> + <link rel="shortcut icon" href="favicon.ico"> + <link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css"> + <link rel="stylesheet" href="assets/css/bootstrap.min.css"> + <link id="theme-style" rel="stylesheet" href="assets/css/styles.css"> + </head> + + <body class="landing-page"> + <div class="page-wrapper"> + <header class="header text-center"> + <div class="container"> + <div class="branding"> + <h1 class="logo"> + <img aria-hidden="true" src="assets/images/logo.svg" /> + <span class="text-bold">Safe Links</span> + <span>Cleaner</span> + </h1> + </div><!--//branding--> + <div class="tagline"> + Browser and mail extension that cleans up the display of + links mangled by Microsoft Defender for Office 365 Safe + Links. Download the stable extension using your browser or + mail program, or join the beta crowd here. + <br /> + <span class="small">Most recent build: %VERSION% (%BUILDDATE% UTC)</span> + </div><!--//tagline--> + </div><!--//container--> + </header><!--//header--> + + <section class="cards-section text-center"> + <div class="container"> + <div id="cards-wrapper" class="cards-wrapper row"> + <div class="item item-green col-lg-4 col-6"> + <div class="item-inner"> + <div class="icon-holder"> + <img aria-hidden="true" src="assets/images/thunderbird.svg" /> + </div><!--//icon-holder--> + <h3 class="title">Thunderbird</h3> + <p class="intro"> + Download the Safe Links Cleaner beta version for + Thunderbird 78.4 or later. + </p> + <a class="btn btn-green" + href="https://addons.thunderbird.net/en-US/thunderbird/addon/microsoft-safe-links-cleaner/">Stable</a> + <a class="btn btn-green" href="safelinks-cleaner-thunderbird-beta.xpi">Beta</a> + </div><!--//item-inner--> + </div><!--//item--> + <div class="item item-pink item-2 col-lg-4 col-6"> + <div class="item-inner"> + <div class="icon-holder"> + <img aria-hidden="true" src="assets/images/firefox.svg" /> + </div><!--//icon-holder--> + <h3 class="title">Firefox</h3> + <p class="intro"> + Download the Safe Links Cleaner beta version for + Mozilla Firefox Browser. + </p> + <a class="btn btn-pink" href="safelinks-cleaner-firefox-beta.xpi">Beta</a> + </div><!--//item-inner--> + </div><!--//item--> + <div class="item item-blue col-lg-4 col-6"> + <div class="item-inner"> + <div class="icon-holder"> + <img aria-hidden="true" src="assets/images/chrome.svg" /> + </div><!--//icon-holder--> + <h3 class="title">Chrome</h3> + <p class="intro"> + Download the Safe Links Cleaner beta version for + the Google Chrome Browser. + </p> + <a class="btn btn-blue disabled">Not yet available</a> + </div><!--//item-inner--> + </div><!--//item--> + <div class="item item-purple col-lg-4 col-6"> + <div class="item-inner"> + <div class="icon-holder"> + <img aria-hidden="true" src="assets/images/edge.svg" /> + </div><!--//icon-holder--> + <h3 class="title">Edge</h3> + <p class="intro"> + Download the Safe Links Cleaner beta version for + the Microsoft Edge Browser. + </p> + <a class="btn btn-buile" href="safelinks-cleaner-edge-beta.zip">Beta</a> + </div><!--//item-inner--> + </div><!--//item--> + <div class="item item-primary col-lg-4 col-6"> + <div class="item-inner"> + <div class="icon-holder"> + <img aria-hidden="true" src="assets/images/safari.svg" /> + </div><!--//icon-holder--> + <h3 class="title">Safari</h3> + <p class="intro"> + <b>Volunteers wanted!</b><br /> + Building Safari extensions requires an Apple + developer account and XCode, neither of which I + have. + </p> + </div><!--//item-inner--> + </div><!--//item--> + <div class="item item-orange col-lg-4 col-6"> + <div class="item-inner"> + <div class="icon-holder"> + <img aria-hidden="true" src="assets/images/gitlab.svg" /> + </div><!--//icon-holder--> + <h3 class="title">Source code</h3> + <p class="intro"> + Get the source code for Safe Links Cleaner from + Linköping University Gitlab. + </p> + <a class="btn btn-orange" href="%PROJECT_URL%"> + Get the source + </a> + </div><!--//item-inner--> + </div><!--//item--> + </div><!--//cards--> + + </div><!--//container--> + </section><!--//cards-section--> + </div><!--//page-wrapper--> + + <footer class="footer text-center"> + <div class="container"> + <small class="copyright">Based on a template designed with + heart by <a href="https://themes.3rdwavemedia.com/" + target="_blank">Xiaoying Riley</a> for developers</small> + </div><!--//container--> + </footer><!--//footer--> </body> -</html> +</html> + diff --git a/thunderbird/BUILD b/thunderbird/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..ed6d71806e82cedf059698da0cbc41b280e3b67a --- /dev/null +++ b/thunderbird/BUILD @@ -0,0 +1,4 @@ +build --source thunderbird \ + --target thunderbird \ + --ext xpi +sed -i -e "s/12px/14px/g" "$targetdir/style.css" \ No newline at end of file diff --git a/thunderbird/background.js b/thunderbird/background.js new file mode 100644 index 0000000000000000000000000000000000000000..28df119348754275ab22ec40920ad352d2e9eefc --- /dev/null +++ b/thunderbird/background.js @@ -0,0 +1,47 @@ +// Safe Links Cleaner +// Copyright 2021 David Byers <david.byers@liu.se> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// Background scripts + + +browser.composeScripts.register({ + css: [ + {file: "/style.css"} + ], + js: [ + {file: "mutation.js"}, + {file: "links.js"}, + {file: "popup.js"}, + {file: "compose.js"} + ], +}); + +browser.messageDisplayScripts.register({ + css: [ + {file: "style.css"} + ], + js: [ + {file: "mutation.js"}, + {file: "links.js"}, + {file: "popup.js"}, + {file: "display.js"}, + ], +}); diff --git a/extension/compose.js b/thunderbird/compose.js similarity index 81% rename from extension/compose.js rename to thunderbird/compose.js index 7cb6213c60238da1cbb2381d386df9858c899175..1e2c427740dbe3a1c1e76041551dda69e71b6448 100644 --- a/extension/compose.js +++ b/thunderbird/compose.js @@ -1,4 +1,4 @@ -// Microsoft ATP Safe Links Cleaner +// Safe Links Cleaner // Copyright 2021 David Byers <david.byers@liu.se> // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -22,13 +22,4 @@ // Compose script -for (const link of document.links) { - if (isTangledLink(link.href)) { - link.href = untangleLink(link.href); - } -} - -for (const node of getTextNodes(document)) { - node.textContent = untangleLink(node.textContent); -} - +removeAllTheLinks(document.body); diff --git a/thunderbird/display.js b/thunderbird/display.js new file mode 100644 index 0000000000000000000000000000000000000000..ebdd02f1433ac3117192a6d0efeaa1316c3fae9f --- /dev/null +++ b/thunderbird/display.js @@ -0,0 +1,25 @@ +// Safe Links Cleaner +// Copyright 2021 David Byers <david.byers@liu.se> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// Display script + + +fixAllTheLinks(document.body); diff --git a/thunderbird/manifest.beta.merge.json b/thunderbird/manifest.beta.merge.json new file mode 100644 index 0000000000000000000000000000000000000000..668fbf1a4ab50d64e34307256385d7b4e9266917 --- /dev/null +++ b/thunderbird/manifest.beta.merge.json @@ -0,0 +1,7 @@ +{ + "applications": { + "gecko": { + "update_url": "%PAGES_URL%/%XPIFILE%" + } + } +} diff --git a/thunderbird/manifest.merge.json b/thunderbird/manifest.merge.json new file mode 100644 index 0000000000000000000000000000000000000000..8e159a3debe2c5d6117814601b04c5f7311ed0d0 --- /dev/null +++ b/thunderbird/manifest.merge.json @@ -0,0 +1,17 @@ +{ + "applications": { + "gecko": { + "id": "safelinks-cleaner@it.liu.se", + "strict_min_version": "78.4.0" + } + }, + "background": { + "scripts": [ + "background.js" + ] + }, + "permissions": [ + "messagesModify", + "compose" + ] +}