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"
+    ]
+}