You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2020/11/19 12:25:56 UTC

[myfaces-tobago] branch master updated (863f51d -> dec3ee9)

This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git.


    from 863f51d  docs
     new 5eb7c28  TOBAGO-2018: Update jsf_js implementation
     new dec3ee9  TOBAGO-1633: Use TypeScript instead of JavaScript. TOBAGO-2044: Evaluate use of Bootstrap 5

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../tobago/internal/component/AbstractUIFile.java  |    2 -
 .../internal/renderkit/renderer/FileRenderer.java  |   69 +-
 .../renderer/LabelLayoutRendererBase.java          |    4 -
 .../taglib/component/FileTagDeclaration.java       |    4 +-
 .../tobago/internal/util/HttpPartWrapper.java      |    6 +
 .../tobago/renderkit/css/BootstrapClass.java       |   52 +-
 .../tobago/renderkit/html/CustomAttributes.java    |    1 -
 .../tobago/context/TobagoResourceBundle.properties |    1 -
 .../context/TobagoResourceBundle_de.properties     |    1 -
 .../context/TobagoResourceBundle_es.properties     |    1 -
 .../internal/config/AbstractTobagoTestBase.java    |    4 +
 ...ererUnitTest.java => FileRendererUnitTest.java} |   13 +-
 .../label-flexLeft.html => file/file-label.html}   |    9 +-
 .../webapp/content/10-intro/20-docker/tobago.d.ts  |   18 -
 .../50-migration/95-migration/4.0_to_5.0.xhtml     |    5 +
 .../20-component/100-upload/File_Upload.xhtml      |    2 +-
 .../npm/dist/css/tobago.css                        | 1140 +++++---
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../npm/package-lock.json                          |  564 ++--
 .../tobago-theme-charlotteville/npm/package.json   |   12 +-
 .../npm/dist/css/tobago.css                        | 1182 ++++++---
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../tobago-theme-roxborough/npm/package-lock.json  |  564 ++--
 .../tobago-theme-roxborough/npm/package.json       |   12 +-
 .../npm/dist/css/tobago.css                        | 1278 +++++----
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../tobago-theme-scarborough/npm/package-lock.json |  564 ++--
 .../tobago-theme-scarborough/npm/package.json      |   12 +-
 .../tobago-theme-speyside/npm/dist/css/tobago.css  | 1155 +++++---
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../tobago-theme-speyside/npm/package-lock.json    |  564 ++--
 .../tobago-theme-speyside/npm/package.json         |   12 +-
 .../tobago-theme-standard/npm/dist/css/tobago.css  | 1272 +++++----
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../npm/js/jsf-development.js                      |  483 ++--
 .../npm/js/jsf-development.js.map                  |    2 +-
 tobago-theme/tobago-theme-standard/npm/js/jsf.js   |    2 +-
 .../tobago-theme-standard/npm/js/jsf.js.map        |    2 +-
 .../tobago-theme-standard/npm/package-lock.json    | 2774 ++++++--------------
 .../tobago-theme-standard/npm/package.json         |   20 +-
 .../tobago-theme-standard/npm/ts/tobago-file.ts    |   35 +-
 51 files changed, 6225 insertions(+), 5646 deletions(-)
 copy tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/{TextareaRendererUnitTest.java => FileRendererUnitTest.java} (74%)
 copy tobago-core/src/test/resources/renderer/{in/label-flexLeft.html => file/file-label.html} (74%)
 delete mode 100644 tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/20-docker/tobago.d.ts


[myfaces-tobago] 01/02: TOBAGO-2018: Update jsf_js implementation

Posted by lo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit 5eb7c283e32fcf26d49801f83f03a6b1529576c7
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Thu Nov 19 09:13:58 2020 +0100

    TOBAGO-2018: Update jsf_js implementation
    
    * Version from 2020-11-18
    * fixed: file upload
    * new: deep search for Shadow DOM
---
 .../npm/js/jsf-development.js                      | 483 ++++++++++++++-------
 .../npm/js/jsf-development.js.map                  |   2 +-
 tobago-theme/tobago-theme-standard/npm/js/jsf.js   |   2 +-
 .../tobago-theme-standard/npm/js/jsf.js.map        |   2 +-
 4 files changed, 334 insertions(+), 155 deletions(-)

diff --git a/tobago-theme/tobago-theme-standard/npm/js/jsf-development.js b/tobago-theme/tobago-theme-standard/npm/js/jsf-development.js
index 7f6cfe5..3934c61 100644
--- a/tobago-theme/tobago-theme-standard/npm/js/jsf-development.js
+++ b/tobago-theme/tobago-theme-standard/npm/js/jsf-development.js
@@ -399,6 +399,7 @@ var __spreadArrays = (this && this.__spreadArrays) || function () {
 Object.defineProperty(exports, "__esModule", { value: true });
 var Monad_1 = __webpack_require__(/*! ./Monad */ "./src/main/typescript/ext/monadish/Monad.ts");
 var Stream_1 = __webpack_require__(/*! ./Stream */ "./src/main/typescript/ext/monadish/Stream.ts");
+var SourcesCollectors_1 = __webpack_require__(/*! ./SourcesCollectors */ "./src/main/typescript/ext/monadish/SourcesCollectors.ts");
 var Lang_1 = __webpack_require__(/*! ./Lang */ "./src/main/typescript/ext/monadish/Lang.ts");
 var trim = Lang_1.Lang.trim;
 var objToArray = Lang_1.Lang.objToArray;
@@ -644,17 +645,40 @@ var DomQuery = /** @class */ (function () {
     });
     Object.defineProperty(DomQuery.prototype, "elements", {
         get: function () {
-            var _this = this;
-            var elements = this.stream.flatMap(function (item) {
-                var formElement = item.value.value;
-                return new Stream_1.Stream(formElement.elements ? objToArray(formElement.elements) : []);
-            }).filter(function (item) { return !!item; }).collect(new DomQueryCollector());
-            return elements
-                .orElseLazy(function () { return _this.querySelectorAll("input, select, textarea, fieldset"); });
+            //a simple querySelectorAll should suffice
+            return this.querySelectorAll("input, checkbox, select, textarea, fieldset");
         },
         enumerable: true,
         configurable: true
     });
+    Object.defineProperty(DomQuery.prototype, "deepElements", {
+        get: function () {
+            var elemStr = "input, select, textarea, checkbox, fieldset";
+            return this.querySelectorAllDeep(elemStr);
+        },
+        enumerable: true,
+        configurable: true
+    });
+    /**
+     * a deep search which treats the single isolated shadow doms
+     * separately and runs the query on earch shadow dom
+     * @param queryStr
+     */
+    DomQuery.prototype.querySelectorAllDeep = function (queryStr) {
+        var found = [];
+        var queryRes = this.querySelectorAll(queryStr);
+        if (queryRes.length) {
+            found.push(queryRes);
+        }
+        var shadowRoots = this.querySelectorAll("*").shadowRoot;
+        if (shadowRoots.length) {
+            var shadowRes = shadowRoots.querySelectorAllDeep(queryStr);
+            if (shadowRes.length) {
+                found.push(shadowRes);
+            }
+        }
+        return new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], found)))();
+    };
     Object.defineProperty(DomQuery.prototype, "disabled", {
         /**
          * todo align this api with the rest of the apis
@@ -715,11 +739,16 @@ var DomQuery = /** @class */ (function () {
     });
     Object.defineProperty(DomQuery.prototype, "asArray", {
         get: function () {
-            var ret = [];
-            this.each(function (item) {
-                ret.push(item);
-            });
-            return ret;
+            //filter not supported by IE11
+            return [].concat(Stream_1.LazyStream.of.apply(Stream_1.LazyStream, this.rootNode).filter(function (item) { return item != null; })
+                .map(function (item) { return DomQuery.byId(item); }).collect(new SourcesCollectors_1.ArrayCollector()));
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(DomQuery.prototype, "asNodeArray", {
+        get: function () {
+            return [].concat(Stream_1.Stream.of(this.rootNode).filter(function (item) { return item != null; }).collect(new SourcesCollectors_1.ArrayCollector()));
         },
         enumerable: true,
         configurable: true
@@ -731,7 +760,12 @@ var DomQuery = /** @class */ (function () {
      * @returns a results dom query object
      */
     DomQuery.querySelectorAll = function (selector) {
-        return new DomQuery(document).querySelectorAll(selector);
+        if (selector.indexOf("/shadow/") != -1) {
+            return new DomQuery(document)._querySelectorAllDeep(selector);
+        }
+        else {
+            return new DomQuery(document)._querySelectorAll(selector);
+        }
     };
     /**
      * byId producer
@@ -739,9 +773,10 @@ var DomQuery = /** @class */ (function () {
      * @param selector id
      * @return a DomQuery containing the found elements
      */
-    DomQuery.byId = function (selector) {
+    DomQuery.byId = function (selector, deep) {
+        if (deep === void 0) { deep = false; }
         if (isString(selector)) {
-            return new DomQuery(document).byId(selector);
+            return (!deep) ? new DomQuery(document).byId(selector) : new DomQuery(document).byIdDeep(selector);
         }
         else {
             return new DomQuery(selector);
@@ -830,6 +865,14 @@ var DomQuery = /** @class */ (function () {
         return (index < this.rootNode.length) ? Monad_1.Optional.fromNullable(this.rootNode[index]) : defaults;
     };
     /**
+     * returns the files from a given elmement
+     * @param index
+     */
+    DomQuery.prototype.filesFromElem = function (index) {
+        var _a;
+        return (index < this.rootNode.length) ? ((_a = this.rootNode[index]) === null || _a === void 0 ? void 0 : _a.files) ? this.rootNode[index].files : [] : [];
+    };
+    /**
      * returns the value array< of all elements
      */
     DomQuery.prototype.allElems = function () {
@@ -877,13 +920,22 @@ var DomQuery = /** @class */ (function () {
             }
         });
     };
+    DomQuery.prototype.querySelectorAll = function (selector) {
+        //We could merge both methods, but for now this is more readable
+        if (selector.indexOf("/shadow/") != -1) {
+            return this._querySelectorAllDeep(selector);
+        }
+        else {
+            return this._querySelectorAll(selector);
+        }
+    };
     /**
-     * query selector all on the existing dom query object
+     * query selector all on the existing dom queryX object
      *
      * @param selector the standard selector
      * @return a DomQuery with the results
      */
-    DomQuery.prototype.querySelectorAll = function (selector) {
+    DomQuery.prototype._querySelectorAll = function (selector) {
         var _a, _b;
         if (!((_a = this === null || this === void 0 ? void 0 : this.rootNode) === null || _a === void 0 ? void 0 : _a.length)) {
             return this;
@@ -898,18 +950,38 @@ var DomQuery = /** @class */ (function () {
         }
         return new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], nodes)))();
     };
+    /*deep with a selector and a peudo /shadow/ marker to break into the next level*/
+    DomQuery.prototype._querySelectorAllDeep = function (selector) {
+        var _a;
+        if (!((_a = this === null || this === void 0 ? void 0 : this.rootNode) === null || _a === void 0 ? void 0 : _a.length)) {
+            return this;
+        }
+        var nodes = [];
+        var foundNodes = new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], this.rootNode)))();
+        var selectors = selector.split(/\/shadow\//);
+        for (var cnt2 = 0; cnt2 < selectors.length; cnt2++) {
+            if (selectors[cnt2] == "") {
+                continue;
+            }
+            var levelSelector = selectors[cnt2];
+            foundNodes = foundNodes.querySelectorAll(levelSelector);
+            if (cnt2 < selectors.length - 1) {
+                foundNodes = foundNodes.shadowRoot;
+            }
+        }
+        return foundNodes;
+    };
     /**
      * core byId method
      * @param id the id to search for
      * @param includeRoot also match the root element?
      */
     DomQuery.prototype.byId = function (id, includeRoot) {
-        var _a;
         var res = [];
-        for (var cnt = 0; includeRoot && cnt < this.rootNode.length; cnt++) {
-            if (((_a = this.rootNode[cnt]) === null || _a === void 0 ? void 0 : _a.id) == id) {
-                res.push(new DomQuery(this.rootNode[cnt]));
-            }
+        if (includeRoot) {
+            res = res.concat(Stream_1.LazyStream.of.apply(Stream_1.LazyStream, ((this === null || this === void 0 ? void 0 : this.rootNode) || [])).filter(function (item) { return id == item.id; })
+                .map(function (item) { return new DomQuery(item); })
+                .collect(new SourcesCollectors_1.ArrayCollector()));
         }
         //for some strange kind of reason the # selector fails
         //on hidden elements we use the attributes match selector
@@ -917,20 +989,33 @@ var DomQuery = /** @class */ (function () {
         res = res.concat(this.querySelectorAll("[id=\"" + id + "\"]"));
         return new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], res)))();
     };
+    DomQuery.prototype.byIdDeep = function (id, includeRoot) {
+        var res = [];
+        if (includeRoot) {
+            res = res.concat(Stream_1.LazyStream.of.apply(Stream_1.LazyStream, ((this === null || this === void 0 ? void 0 : this.rootNode) || [])).filter(function (item) { return id == item.id; })
+                .map(function (item) { return new DomQuery(item); })
+                .collect(new SourcesCollectors_1.ArrayCollector()));
+        }
+        var subItems = this.querySelectorAllDeep("[id=\"" + id + "\"]");
+        if (subItems.length) {
+            res.push(subItems);
+        }
+        return new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], res)))();
+    };
     /**
      * same as byId just for the tag name
      * @param tagName
      * @param includeRoot
      */
-    DomQuery.prototype.byTagName = function (tagName, includeRoot) {
+    DomQuery.prototype.byTagName = function (tagName, includeRoot, deep) {
         var _a;
         var res = [];
         if (includeRoot) {
-            res = Stream_1.Stream.of.apply(Stream_1.Stream, ((_a = this === null || this === void 0 ? void 0 : this.rootNode) !== null && _a !== void 0 ? _a : [])).filter(function (element) { return (element === null || element === void 0 ? void 0 : element.tagName) == tagName; })
+            res = Stream_1.LazyStream.of.apply(Stream_1.LazyStream, ((_a = this === null || this === void 0 ? void 0 : this.rootNode) !== null && _a !== void 0 ? _a : [])).filter(function (element) { return (element === null || element === void 0 ? void 0 : element.tagName) == tagName; })
                 .reduce(function (reduction, item) { return reduction.concat([item]); }, res)
-                .value;
+                .orElse(res).value;
         }
-        res = res.concat(this.querySelectorAll(tagName));
+        (deep) ? res.push(this.querySelectorAllDeep(tagName)) : res.push(this.querySelectorAll(tagName));
         return new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], res)))();
     };
     /**
@@ -950,21 +1035,10 @@ var DomQuery = /** @class */ (function () {
      */
     DomQuery.prototype.hasClass = function (clazz) {
         var hasIt = false;
-        this.each(function (item) {
-            var oldClass = item.attr("class").value || "";
-            if (oldClass.toLowerCase().indexOf(clazz.toLowerCase()) == -1) {
-                return;
-            }
-            else {
-                var oldClasses = oldClass.split(/\s+/gi);
-                var found = false;
-                for (var cnt = 0; cnt < oldClasses.length && !found; cnt++) {
-                    found = oldClasses[cnt].toLowerCase() == clazz.toLowerCase();
-                }
-                hasIt = hasIt || found;
-                if (hasIt) {
-                    return false;
-                }
+        this.eachElem(function (node) {
+            hasIt = node.classList.contains(clazz);
+            if (hasIt) {
+                return false;
             }
         });
         return hasIt;
@@ -975,13 +1049,7 @@ var DomQuery = /** @class */ (function () {
      * @param clazz the style class to append
      */
     DomQuery.prototype.addClass = function (clazz) {
-        this.each(function (item) {
-            var oldClass = item.attr("class").value || "";
-            if (!item.hasClass(clazz)) {
-                item.attr("class").value = trim(oldClass + " " + clazz);
-                return;
-            }
-        });
+        this.eachElem(function (item) { return item.classList.add(clazz); });
         return this;
     };
     /**
@@ -990,26 +1058,37 @@ var DomQuery = /** @class */ (function () {
      * @param clazz
      */
     DomQuery.prototype.removeClass = function (clazz) {
-        this.each(function (item) {
-            if (item.hasClass(clazz)) {
-                var oldClass = item.attr("class").value || "";
-                var newClasses = [];
-                var oldClasses = oldClass.split(/\s+/gi);
-                for (var cnt = 0; cnt < oldClasses.length; cnt++) {
-                    if (oldClasses[cnt].toLowerCase() != clazz.toLowerCase()) {
-                        newClasses.push(oldClasses[cnt]);
-                    }
-                }
-                item.attr("class").value = newClasses.join(" ");
-            }
-        });
+        this.eachElem(function (item) { return item.classList.remove(clazz); });
         return this;
     };
     /**
      * checks whether we have a multipart element in our children
+     * or are one
      */
-    DomQuery.prototype.isMultipartCandidate = function () {
-        return this.querySelectorAll("input[type='file']").firstElem().isPresent();
+    DomQuery.prototype.isMultipartCandidate = function (deep) {
+        var _this = this;
+        if (deep === void 0) { deep = false; }
+        var isCandidate = function (item) {
+            var _a;
+            if (item.length == 0) {
+                return false;
+            }
+            if (item.length == 1) {
+                if (item.tagName.get("booga").value.toLowerCase() == "input" &&
+                    (((_a = item.attr("type")) === null || _a === void 0 ? void 0 : _a.value) || "").toLowerCase() == "file") {
+                    return true;
+                }
+                if (deep) {
+                    return _this.querySelectorAllDeep("input[type='file']").firstElem().isPresent();
+                }
+                else {
+                    return _this.querySelectorAll("input[type='file']").firstElem().isPresent();
+                }
+            }
+            return item.isMultipartCandidate(deep);
+        };
+        var ret = this.stream.filter(function (item) { return isCandidate(item); }).first().isPresent();
+        return ret;
     };
     /**
      * innerHtml equivalkent
@@ -1027,6 +1106,13 @@ var DomQuery = /** @class */ (function () {
         this.innerHtml = inval;
         return this;
     };
+    /**
+     * Standard dispatch event method, delegated from node
+     */
+    DomQuery.prototype.dispatchEvent = function (evt) {
+        this.eachElem(function (elem) { return elem.dispatchEvent(evt); });
+        return this;
+    };
     Object.defineProperty(DomQuery.prototype, "innerHtml", {
         get: function () {
             var retArr = [];
@@ -1376,7 +1462,8 @@ var DomQuery = /** @class */ (function () {
      * @param runEmbeddedScripts
      * @param runEmbeddedCss
      */
-    DomQuery.prototype.outerHTML = function (markup, runEmbeddedScripts, runEmbeddedCss) {
+    DomQuery.prototype.outerHTML = function (markup, runEmbeddedScripts, runEmbeddedCss, deep) {
+        if (deep === void 0) { deep = false; }
         var _a;
         if (this.isAbsent()) {
             return;
@@ -1477,12 +1564,8 @@ var DomQuery = /** @class */ (function () {
             var scriptElements = new DomQuery(this.filterSelector("script"), this.querySelectorAll("script"));
             //script execution order by relative pos in their dom tree
             scriptElements.stream
-                .flatMap(function (item) {
-                return Stream_1.Stream.of(item.values);
-            })
-                .sort(function (node1, node2) {
-                return node1.compareDocumentPosition(node2) - 3; //preceding 2, following == 4
-            })
+                .flatMap(function (item) { return Stream_1.Stream.of(item.values); })
+                .sort(function (node1, node2) { return node1.compareDocumentPosition(node2) - 3; }) //preceding 2, following == 4)
                 .each(function (item) { return execScrpt(item); });
             if (finalScripts.length) {
                 this.globalEval(finalScripts.join("\n"));
@@ -1529,30 +1612,23 @@ var DomQuery = /** @class */ (function () {
                 applyStyle(item, "@import url('" + item.getAttribute("href") + "');");
             }
             else if (tagName && equalsIgnoreCase(tagName, "style") && equalsIgnoreCase(item.getAttribute("type"), "text/css")) {
-                var innerText = [];
+                var innerText_1 = [];
                 //compliant browsers know child nodes
                 var childNodes = item.childNodes;
                 if (childNodes) {
-                    var len = childNodes.length;
-                    for (var cnt = 0; cnt < len; cnt++) {
-                        innerText.push(childNodes[cnt].innerHTML || childNodes[cnt].data);
-                    }
+                    childNodes.forEach(function (child) { return innerText_1.push(child.innerHTML || child.data); });
                     //non compliant ones innerHTML
                 }
                 else if (item.innerHTML) {
-                    innerText.push(item.innerHTML);
+                    innerText_1.push(item.innerHTML);
                 }
-                applyStyle(item, innerText.join(""));
+                applyStyle(item, innerText_1.join(""));
             }
         };
         var scriptElements = new DomQuery(this.filterSelector("link, style"), this.querySelectorAll("link, style"));
         scriptElements.stream
-            .flatMap(function (item) {
-            return Stream_1.Stream.of(item.values);
-        })
-            .sort(function (node1, node2) {
-            return node1.compareDocumentPosition(node2) - 3; //preceding 2, following == 4
-        })
+            .flatMap(function (item) { return Stream_1.Stream.of(item.values); })
+            .sort(function (node1, node2) { return node1.compareDocumentPosition(node2) - 3; })
             .each(function (item) { return execCss(item); });
         return this;
     };
@@ -1564,15 +1640,11 @@ var DomQuery = /** @class */ (function () {
         return this;
     };
     DomQuery.prototype.addEventListener = function (type, listener, options) {
-        this.eachElem(function (node) {
-            node.addEventListener(type, listener, options);
-        });
+        this.eachElem(function (node) { return node.addEventListener(type, listener, options); });
         return this;
     };
     DomQuery.prototype.removeEventListener = function (type, listener, options) {
-        this.eachElem(function (node) {
-            node.removeEventListener(type, listener, options);
-        });
+        this.eachElem(function (node) { return node.removeEventListener(type, listener, options); });
         return this;
     };
     /**
@@ -1737,15 +1809,18 @@ var DomQuery = /** @class */ (function () {
         get: function () {
             var cDataBlock = [];
             var TYPE_CDATA_BLOCK = 4;
-            // response may contain several blocks
-            return this.lazyStream
-                .flatMap(function (item) { return item.childNodes.stream; })
-                .filter(function (item) { var _a, _b; return ((_b = (_a = item === null || item === void 0 ? void 0 : item.value) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.nodeType) == TYPE_CDATA_BLOCK; })
-                .reduce(function (reduced, item) {
+            var res = this.lazyStream.flatMap(function (item) {
+                return item.childNodes.stream;
+            }).filter(function (item) {
+                var _a, _b;
+                return ((_b = (_a = item === null || item === void 0 ? void 0 : item.value) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.nodeType) == TYPE_CDATA_BLOCK;
+            }).reduce(function (reduced, item) {
                 var _a, _b, _c;
                 reduced.push((_c = (_b = (_a = item === null || item === void 0 ? void 0 : item.value) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : "");
                 return reduced;
-            }, []).value.join("");
+            }, []).value;
+            // response may contain several blocks
+            return res.join("");
         },
         enumerable: true,
         configurable: true
@@ -1777,34 +1852,60 @@ var DomQuery = /** @class */ (function () {
     DomQuery.prototype.reset = function () {
         this.pos = -1;
     };
-    DomQuery.prototype.createShadowRoot = function () {
-        var shadowRoots = [];
-        this.eachElem(function (item) {
-            var _a;
-            var shadowElement;
-            if ((_a = item) === null || _a === void 0 ? void 0 : _a.createShadowRoot) {
-                shadowElement = DomQuery.byId(item.createShadowRoot());
-            }
-            else {
-                throw Error("Shadow dom creation not supported by the browser, please use a shim, to gain this functionality");
-            }
-        });
-        return new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], shadowRoots)))();
-    };
     DomQuery.prototype.attachShadow = function (params) {
+        if (params === void 0) { params = { mode: "open" }; }
         var shadowRoots = [];
         this.eachElem(function (item) {
             var _a;
             var shadowElement;
             if ((_a = item) === null || _a === void 0 ? void 0 : _a.attachShadow) {
                 shadowElement = DomQuery.byId(item.attachShadow(params));
+                shadowRoots.push(shadowElement);
             }
             else {
-                //throw error (Shadow dom creation not supported by the browser, please use a shim, to gain this functionality)
+                throw new Error("Shadow dom creation not supported by the browser, please use a shim, to gain this functionality");
             }
         });
         return new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], shadowRoots)))();
     };
+    Object.defineProperty(DomQuery.prototype, "shadowElements", {
+        /**
+         * returns the embedded shadow elements
+         */
+        get: function () {
+            var shadowElements = this.querySelectorAll("*")
+                .filter(function (item) { return item.hasShadow; });
+            var mapped = (shadowElements.allElems() || []).map(function (element) { return element.shadowRoot; });
+            return new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], mapped)))();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(DomQuery.prototype, "shadowRoot", {
+        get: function () {
+            var shadowRoots = [];
+            for (var cnt = 0; cnt < this.rootNode.length; cnt++) {
+                if (this.rootNode[cnt].shadowRoot) {
+                    shadowRoots.push(this.rootNode[cnt].shadowRoot);
+                }
+            }
+            return new (DomQuery.bind.apply(DomQuery, __spreadArrays([void 0], shadowRoots)))();
+        },
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(DomQuery.prototype, "hasShadow", {
+        get: function () {
+            for (var cnt = 0; cnt < this.rootNode.length; cnt++) {
+                if (this.rootNode[cnt].shadowRoot) {
+                    return true;
+                }
+            }
+            return false;
+        },
+        enumerable: true,
+        configurable: true
+    });
     //from
     // http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/
     DomQuery.getCaretPosition = function (ctrl) {
@@ -3925,7 +4026,7 @@ var Implementation;
          *  typecheck assert!, we opt for strong typing here
          *  because it makes it easier to detect bugs
          */
-        var element = monadish_1.DQ.byId(form);
+        var element = monadish_1.DQ.byId(form, true);
         if (!element.isTag(Const_1.TAG_FORM)) {
             throw new Error(getMessage("ERR_VIEWSTATE"));
         }
@@ -4949,7 +5050,7 @@ var ExtDomquery = /** @class */ (function (_super) {
                 .map((function (item) { return !item.attr("src").value.match(/jsf\.js\?ln=javax\.faces/gi); }))
                 .first();
             if (nonceScript.isPresent()) {
-                nonce.value = DomQuery_1.DomQuery.byId(nonceScript.value).attr("nonce").value;
+                nonce.value = DomQuery_1.DomQuery.byId(nonceScript.value, true).attr("nonce").value;
             }
             return nonce.value;
         },
@@ -5163,7 +5264,7 @@ var ExtLang;
         //html 5 for handling
         if (queryElem.attr(Const_1.TAG_FORM).isPresent()) {
             var formId = queryElem.attr(Const_1.TAG_FORM).value;
-            var foundForm = DomQuery_1.DQ.byId(formId);
+            var foundForm = DomQuery_1.DQ.byId(formId, true);
             if (foundForm.isPresent()) {
                 return foundForm;
             }
@@ -5330,7 +5431,7 @@ var EventData = /** @class */ (function () {
             .orElse(context.getIf(Const_1.P_PARTIAL_SOURCE).value)
             .orElse(context.getIf(Const_1.CTX_PARAM_PASS_THR, Const_1.P_PARTIAL_SOURCE).value).value;
         if (sourceId) {
-            eventData.source = monadish_1.DQ.byId(sourceId).first().value.value;
+            eventData.source = monadish_1.DQ.byId(sourceId, true).first().value.value;
         }
         if (name !== Const_1.BEGIN) {
             eventData.responseCode = (_a = request === null || request === void 0 ? void 0 : request.status) === null || _a === void 0 ? void 0 : _a.toString();
@@ -5420,7 +5521,7 @@ function resolveForm(requestCtx, elem, event) {
     var _a, _b, _c;
     var configId = (_c = (_b = (_a = requestCtx.value) === null || _a === void 0 ? void 0 : _a.myfaces) === null || _b === void 0 ? void 0 : _b.form) !== null && _c !== void 0 ? _c : Const_1.MF_NONE; //requestCtx.getIf(MYFACES, "form").orElse(MF_NONE).value;
     return monadish_1.DQ
-        .byId(configId)
+        .byId(configId, true)
         .orElseLazy(function () { return Lang_1.ExtLang.getForm(elem.getAsElem(0).value, event); });
 }
 exports.resolveForm = resolveForm;
@@ -5491,7 +5592,7 @@ function resolveDefaults(event, opts, el) {
     if (el === void 0) { el = null; }
     var _a;
     //deep copy the options, so that further transformations to not backfire into the callers
-    var resolvedEvent = event, options = new monadish_1.Config(opts).deepCopy, elem = monadish_1.DQ.byId(el || resolvedEvent.target), elementId = elem.id, requestCtx = new monadish_1.Config({}), internalCtx = new monadish_1.Config({}), windowId = resolveWindowId(options), isResetValues = true === ((_a = options.value) === null || _a === void 0 ? void 0 : _a.resetValues);
+    var resolvedEvent = event, options = new monadish_1.Config(opts).deepCopy, elem = monadish_1.DQ.byId(el || resolvedEvent.target, true), elementId = elem.id, requestCtx = new monadish_1.Config({}), internalCtx = new monadish_1.Config({}), windowId = resolveWindowId(options), isResetValues = true === ((_a = options.value) === null || _a === void 0 ? void 0 : _a.resetValues);
     return { resolvedEvent: resolvedEvent, options: options, elem: elem, elementId: elementId, requestCtx: requestCtx, internalCtx: internalCtx, windowId: windowId, isResetValues: isResetValues };
 }
 exports.resolveDefaults = resolveDefaults;
@@ -5583,7 +5684,7 @@ exports.resolveContexts = resolveContexts;
  */
 function resolveSourceElement(context, internalContext) {
     var elemId = resolveSourceElementId(context, internalContext);
-    return monadish_2.DQ.byId(elemId.value);
+    return monadish_2.DQ.byId(elemId.value, true);
 }
 exports.resolveSourceElement = resolveSourceElement;
 /**
@@ -5911,14 +6012,14 @@ var ResponseProcessor = /** @class */ (function () {
      * @param cdataBlock the cdata block with the new html code
      */
     ResponseProcessor.prototype.update = function (node, cdataBlock) {
-        var result = monadish_1.DQ.byId(node.id.value).outerHTML(cdataBlock, false, false);
+        var result = monadish_1.DQ.byId(node.id.value, true).outerHTML(cdataBlock, false, false);
         var sourceForm = result === null || result === void 0 ? void 0 : result.parents(Const_1.TAG_FORM).orElse(result.byTagName(Const_1.TAG_FORM, true));
         if (sourceForm) {
             this.storeForPostProcessing(sourceForm, result);
         }
     };
     ResponseProcessor.prototype.delete = function (node) {
-        monadish_1.DQ.byId(node.id.value).delete();
+        monadish_1.DQ.byId(node.id.value, true).delete();
     };
     /**
      * attributes leaf tag... process the attributes
@@ -5926,7 +6027,7 @@ var ResponseProcessor = /** @class */ (function () {
      * @param node
      */
     ResponseProcessor.prototype.attributes = function (node) {
-        var elem = monadish_1.DQ.byId(node.id.value);
+        var elem = monadish_1.DQ.byId(node.id.value, true);
         node.byTagName(Const_1.TAG_ATTR).each(function (item) {
             elem.attr(item.attr(Const_1.ATTR_NAME).value).value = item.attr(Const_1.ATTR_VALUE).value;
         });
@@ -5949,11 +6050,11 @@ var ResponseProcessor = /** @class */ (function () {
         var after = node.attr(Const_1.TAG_AFTER);
         var insertNodes = monadish_1.DQ.fromMarkup(node.cDATAAsString);
         if (before.isPresent()) {
-            monadish_1.DQ.byId(before.value).insertBefore(insertNodes);
+            monadish_1.DQ.byId(before.value, true).insertBefore(insertNodes);
             this.internalContext.assign(Const_1.UPDATE_ELEMS).value.push(insertNodes);
         }
         if (after.isPresent()) {
-            var domQuery = monadish_1.DQ.byId(after.value);
+            var domQuery = monadish_1.DQ.byId(after.value, true);
             domQuery.insertAfter(insertNodes);
             this.internalContext.assign(Const_1.UPDATE_ELEMS).value.push(insertNodes);
         }
@@ -5971,7 +6072,7 @@ var ResponseProcessor = /** @class */ (function () {
             var insertId = item.attr(Const_1.ATTR_ID);
             var insertNodes = monadish_1.DQ.fromMarkup(item.cDATAAsString);
             if (insertId.isPresent()) {
-                monadish_1.DQ.byId(insertId.value).insertBefore(insertNodes);
+                monadish_1.DQ.byId(insertId.value, true).insertBefore(insertNodes);
                 _this.internalContext.assign(Const_1.UPDATE_ELEMS).value.push(insertNodes);
             }
         });
@@ -5979,7 +6080,7 @@ var ResponseProcessor = /** @class */ (function () {
             var insertId = item.attr(Const_1.ATTR_ID);
             var insertNodes = monadish_1.DQ.fromMarkup(item.cDATAAsString);
             if (insertId.isPresent()) {
-                monadish_1.DQ.byId(insertId.value).insertAfter(insertNodes);
+                monadish_1.DQ.byId(insertId.value, true).insertAfter(insertNodes);
                 _this.internalContext.assign(Const_1.UPDATE_ELEMS).value.push(insertNodes);
             }
         });
@@ -6013,7 +6114,7 @@ var ResponseProcessor = /** @class */ (function () {
         monadish_1.Stream.ofAssoc(this.internalContext.getIf(Const_1.APPLIED_VST).orElse({}).value)
             .each(function (item) {
             var value = item[1];
-            var nameSpace = monadish_1.DQ.byId(value.nameSpace).orElse(document.body);
+            var nameSpace = monadish_1.DQ.byId(value.nameSpace, true).orElse(document.body);
             var affectedForms = nameSpace.byTagName(Const_1.TAG_FORM);
             var affectedForms2 = nameSpace.filter(function (item) { return item.tagName.orElse(Const_1.EMPTY_STR).value.toLowerCase() == Const_1.TAG_FORM; });
             _this.appendViewStateToForms(new monadish_1.DomQuery(affectedForms, affectedForms2), value.value);
@@ -6170,6 +6271,7 @@ var XhrFormData = /** @class */ (function (_super) {
         _this.dataSource = dataSource;
         _this.partialIdsArray = partialIdsArray;
         _this.encode = encode;
+        _this.fileInputs = {};
         //a call to getViewState before must pass the encoded line
         //a call from getViewState passes the form element as datasource
         //so we have two call points
@@ -6181,6 +6283,55 @@ var XhrFormData = /** @class */ (function (_super) {
         }
         return _this;
     }
+    /**
+     * generic application of ids
+     * @param executes
+     */
+    XhrFormData.prototype.applyFileInputs = function () {
+        var _this = this;
+        var executes = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            executes[_i] = arguments[_i];
+        }
+        monadish_1.LazyStream.of.apply(monadish_1.LazyStream, executes).map(function (id) {
+            if (id == "@all") {
+                return monadish_1.DomQuery.querySelectorAll("input[type='file']");
+            }
+            else if (id == "@form") {
+                return _this.dataSource.querySelectorAllDeep("input[type='file']");
+            }
+            else {
+                var element = monadish_1.DomQuery.byId(id, true);
+                return _this.getFileInputs(element);
+            }
+        })
+            .filter(function (item) {
+            return !!item.length;
+        })
+            .each(function (item) {
+            _this.fileInputs[item.id.value] = true;
+        });
+    };
+    XhrFormData.prototype.getFileInputs = function (rootElment) {
+        var _this = this;
+        var ret = rootElment.lazyStream.map(function (item) {
+            var _a;
+            if (item.length == 0) {
+                return null;
+            }
+            if (item.length == 1) {
+                if (item.tagName.get("booga").value.toLowerCase() == "input" &&
+                    (((_a = item.attr("type")) === null || _a === void 0 ? void 0 : _a.value) || '').toLowerCase() == "file") {
+                    return item;
+                }
+                return rootElment.querySelectorAllDeep("input[type='file']").firstElem().getAsElem(0).value;
+            }
+            return _this.getFileInputs(item);
+        }).filter(function (item) {
+            return item != null;
+        }).collect(new monadish_1.ArrayCollector());
+        return new (monadish_1.DomQuery.bind.apply(monadish_1.DomQuery, __spreadArrays([void 0], ret)))();
+    };
     XhrFormData.prototype.handleFormSource = function () {
         //encode and append the issuing item if not a partial ids array of ids is passed
         /*
@@ -6202,7 +6353,7 @@ var XhrFormData = /** @class */ (function (_super) {
      * @param form the form holding the viewstate value
      */
     XhrFormData.prototype.applyViewState = function (form) {
-        var viewState = form.byId(Const_1.P_VIEWSTATE).inputValue;
+        var viewState = form.byId(Const_1.P_VIEWSTATE, true).inputValue;
         this.appendIf(viewState.isPresent(), Const_1.P_VIEWSTATE).value = viewState.value;
     };
     /**
@@ -6211,33 +6362,51 @@ var XhrFormData = /** @class */ (function (_super) {
      * @param encoded
      */
     XhrFormData.prototype.assignEncodedString = function (encoded) {
-        var _this = this;
-        var keyValueEntries = encoded.split(/&/gi);
+        var keyValueEntries = decodeURIComponent(encoded).split(/&/gi);
+        this.assignString(keyValueEntries);
+    };
+    XhrFormData.prototype.assignString = function (keyValueEntries) {
+        var toMerge = new monadish_1.Config({});
         monadish_2.Stream.of.apply(monadish_2.Stream, keyValueEntries).map(function (line) { return line.split(/=(.*)/gi); })
             //special case of having keys without values
             .map(function (keyVal) { var _a, _b; return keyVal.length < 3 ? [(_a = keyVal === null || keyVal === void 0 ? void 0 : keyVal[0]) !== null && _a !== void 0 ? _a : [], (_b = keyVal === null || keyVal === void 0 ? void 0 : keyVal[1]) !== null && _b !== void 0 ? _b : []] : keyVal; })
             .each(function (keyVal) {
             var _a, _b;
-            _this.append(keyVal[0]).value = (_b = (_a = keyVal === null || keyVal === void 0 ? void 0 : keyVal.splice(1)) === null || _a === void 0 ? void 0 : _a.join("")) !== null && _b !== void 0 ? _b : "";
+            toMerge.append(keyVal[0]).value = (_b = (_a = keyVal === null || keyVal === void 0 ? void 0 : keyVal.splice(1)) === null || _a === void 0 ? void 0 : _a.join("")) !== null && _b !== void 0 ? _b : "";
         });
+        //merge with overwrite but no append! (aka no double entries are allowed)
+        this.shallowMerge(toMerge);
     };
     // noinspection JSUnusedGlobalSymbols
     /**
      * @returns a Form data representation
      */
     XhrFormData.prototype.toFormData = function () {
+        var _this = this;
         var ret = new FormData();
-        var _loop_1 = function (key) {
-            if (this_1.value.hasOwnProperty(key)) {
-                monadish_2.Stream.of.apply(monadish_2.Stream, this_1.value[key]).each(function (item) { return ret.append(key, item); });
-            }
-        };
-        var this_1 = this;
-        for (var key in this.value) {
-            _loop_1(key);
-        }
+        monadish_2.Stream.of.apply(monadish_2.Stream, Object.keys(this.value)).filter(function (key) { return !(key in _this.fileInputs); })
+            .each(function (key) {
+            monadish_2.Stream.of.apply(monadish_2.Stream, _this.value[key]).each(function (item) { return ret.append(key, item); });
+        });
+        monadish_2.Stream.of.apply(monadish_2.Stream, Object.keys(this.fileInputs)).each(function (key) {
+            monadish_1.DomQuery.byId(key, true).eachElem(function (elem) {
+                var _a;
+                var identifier = _this.resolveSubmitIdentifier(elem);
+                if (!((_a = elem === null || elem === void 0 ? void 0 : elem.files) === null || _a === void 0 ? void 0 : _a.length)) {
+                    ret.append(identifier, elem.value);
+                    return;
+                }
+                ret.append(identifier, elem.files[0]);
+            });
+        });
         return ret;
     };
+    XhrFormData.prototype.resolveSubmitIdentifier = function (elem) {
+        var _a;
+        var identifier = elem.name;
+        identifier = (((_a = elem === null || elem === void 0 ? void 0 : elem.name) !== null && _a !== void 0 ? _a : "").replace(/s+/gi, "") == "") ? elem.id : identifier;
+        return identifier;
+    };
     /**
      * returns an encoded string representation of our xhr form data
      *
@@ -6255,14 +6424,6 @@ var XhrFormData = /** @class */ (function (_super) {
             return encodeURIComponent(keyVal[0]) + "=" + encodeURIComponent(keyVal[1]);
         })
             .collect(new monadish_1.ArrayCollector());
-        /* for (let key in this.value) {
-             if (this.value.hasOwnProperty(key)) {
-                 //key value already encoded so no need to reencode them again
-                 Stream.of(...this.value[key]).each(item => {
-                     entries.push(`${encodeURIComponent(key)}=${encodeURIComponent(item)}`);
-                 });
-             }
-         }*/
         return entries.join("&");
     };
     /**
@@ -6285,14 +6446,17 @@ var XhrFormData = /** @class */ (function (_super) {
             toEncode = parentItem;
         }
         //lets encode the form elements
-        this.shallowMerge(toEncode.querySelectorAll("input, checkbox, select, textarea").encodeFormElement());
+        this.shallowMerge(toEncode.deepElements.encodeFormElement());
     };
     Object.defineProperty(XhrFormData.prototype, "isMultipartRequest", {
         /**
          * checks if the given datasource is a multipart request source
+         * multipart is only needed if one of the executes is a file input
+         * since file inputs are stateless, they fall out of the viewstate
+         * and need special handling
          */
         get: function () {
-            return this.dataSource instanceof monadish_3.DQ && this.dataSource.querySelectorAll("input[type='file']").isPresent();
+            return !!Object.keys(this.fileInputs).length;
         },
         enumerable: true,
         configurable: true
@@ -6390,11 +6554,22 @@ var XhrRequest = /** @class */ (function () {
         var _this = this;
         var ignoreErr = failSaveExecute;
         var xhrObject = this.xhrObject;
+        var executesArr = function () {
+            return _this.requestContext.getIf(Const_1.CTX_PARAM_PASS_THR, Const_1.P_EXECUTE).get("none").value.split(/\s+/gi);
+        };
         try {
-            var viewState = jsf.getViewState(this.sourceForm.getAsElem(0).value);
+            var formElement = this.sourceForm.getAsElem(0).value;
+            var viewState = jsf.getViewState(formElement);
             //encoded we need to decode
-            var formData = new XhrFormData_1.XhrFormData(decodeURIComponent(viewState));
-            this.contentType = formData.isMultipartRequest ? Const_1.MULTIPART : this.contentType;
+            //We generated a base representation of the current form
+            var formData = new XhrFormData_1.XhrFormData(this.sourceForm);
+            //in case someone has overloaded the viewstate with addtional decorators we merge
+            //that in, there is no way around it, the spec allows it and getViewState
+            //must be called, so whatever getViewState delivers has higher priority then
+            //whatever the formData object delivers
+            formData.assignEncodedString(viewState);
+            formData.applyFileInputs.apply(formData, executesArr());
+            this.contentType = formData.isMultipartRequest ? "undefined" : this.contentType;
             //next step the pass through parameters are merged in for post params
             var requestContext = this.requestContext;
             var passThroughParams = requestContext.getIf(Const_1.CTX_PARAM_PASS_THR);
@@ -6412,7 +6587,9 @@ var XhrRequest = /** @class */ (function () {
             //a bug in the xhr stub library prevents the setRequestHeader to be properly executed on fake xhr objects
             //normal browsers should resolve this
             //tests can quietly fail on this one
-            ignoreErr(function () { return xhrObject.setRequestHeader(Const_1.CONTENT_TYPE, _this.contentType + "; charset=utf-8"); });
+            if (this.contentType != "undefined") {
+                ignoreErr(function () { return xhrObject.setRequestHeader(Const_1.CONTENT_TYPE, _this.contentType + "; charset=utf-8"); });
+            }
             ignoreErr(function () { return xhrObject.setRequestHeader(Const_1.HEAD_FACES_REQ, Const_1.VAL_AJAX); });
             //probably not needed anymore, will test this
             //some webkit based mobile browsers do not follow the w3c spec of
@@ -6567,9 +6744,11 @@ var XhrRequest = /** @class */ (function () {
     XhrRequest.prototype.sendRequest = function (formData) {
         var isPost = this.ajaxType != Const_1.REQ_TYPE_GET;
         if (formData.isMultipartRequest) {
+            //in case of a multipart request we send in a formData object as body
             this.xhrObject.send((isPost) ? formData.toFormData() : null);
         }
         else {
+            //in case of a normal request we send it normally
             this.xhrObject.send((isPost) ? formData.toString() : null);
         }
     };
diff --git a/tobago-theme/tobago-theme-standard/npm/js/jsf-development.js.map b/tobago-theme/tobago-theme-standard/npm/js/jsf-development.js.map
index 5b79616..62aedd9 100644
--- a/tobago-theme/tobago-theme-standard/npm/js/jsf-development.js.map
+++ b/tobago-theme/tobago-theme-standard/npm/js/jsf-development.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/main/typescript/api/Jsf.ts","webpack:///./src/main/typescript/ext/monadish/DomQuery.ts","webpack:///./src/main/typescript/ext/monadish/Lang.ts","webpack:///./src/main/typescript/ext/monadish/Monad.ts","webpack:///./src/main/typescript/ext/monadish/SourcesCollectors.ts","webpack:///./src/main/typescript/ext/monadish/Stream.ts","webpack:///./src/main/typescript/ext/monadish/XmlQuery.ts","webpack:///./src/main/typescri [...]
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/main/typescript/api/Jsf.ts","webpack:///./src/main/typescript/ext/monadish/DomQuery.ts","webpack:///./src/main/typescript/ext/monadish/Lang.ts","webpack:///./src/main/typescript/ext/monadish/Monad.ts","webpack:///./src/main/typescript/ext/monadish/SourcesCollectors.ts","webpack:///./src/main/typescript/ext/monadish/Stream.ts","webpack:///./src/main/typescript/ext/monadish/XmlQuery.ts","webpack:///./src/main/typescri [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/npm/js/jsf.js b/tobago-theme/tobago-theme-standard/npm/js/jsf.js
index b13c4c2..117c761 100644
--- a/tobago-theme/tobago-theme-standard/npm/js/jsf.js
+++ b/tobago-theme/tobago-theme-standard/npm/js/jsf.js
@@ -1,2 +1,2 @@
-!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e, [...]
+!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e, [...]
 //# sourceMappingURL=jsf.js.map
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/npm/js/jsf.js.map b/tobago-theme/tobago-theme-standard/npm/js/jsf.js.map
index 976aa67..ce5148e 100644
--- a/tobago-theme/tobago-theme-standard/npm/js/jsf.js.map
+++ b/tobago-theme/tobago-theme-standard/npm/js/jsf.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/main/typescript/impl/core/Const.ts","webpack:///./src/main/typescript/ext/monadish/index.ts","webpack:///./src/main/typescript/ext/monadish/Monad.ts","webpack:///./src/main/typescript/ext/monadish/Lang.ts","webpack:///./src/main/typescript/impl/util/Lang.ts","webpack:///./src/main/typescript/ext/monadish/DomQuery.ts","webpack:///./src/main/typescript/ext/monadish/Stream.ts","webpack:///./src/main/typescript/impl/Aja [...]
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/main/typescript/impl/core/Const.ts","webpack:///./src/main/typescript/ext/monadish/index.ts","webpack:///./src/main/typescript/ext/monadish/Monad.ts","webpack:///./src/main/typescript/ext/monadish/Lang.ts","webpack:///./src/main/typescript/impl/util/Lang.ts","webpack:///./src/main/typescript/ext/monadish/DomQuery.ts","webpack:///./src/main/typescript/ext/monadish/SourcesCollectors.ts","webpack:///./src/main/typescri [...]
\ No newline at end of file


[myfaces-tobago] 02/02: TOBAGO-1633: Use TypeScript instead of JavaScript. TOBAGO-2044: Evaluate use of Bootstrap 5

Posted by lo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit dec3ee97d9b76ac5412a381aa5f271e4dc64c584
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Thu Nov 19 13:25:17 2020 +0100

    TOBAGO-1633: Use TypeScript instead of JavaScript.
    TOBAGO-2044: Evaluate use of Bootstrap 5
    
    * Bootstrap 5.0.0 alpha 3
    * Refactor File Upload
    * Fix File-Upload with AJAX (also jsf-js)
    * Support for Shadow DOM (jsf-js)
---
 .../tobago/internal/component/AbstractUIFile.java  |    2 -
 .../internal/renderkit/renderer/FileRenderer.java  |   69 +-
 .../renderer/LabelLayoutRendererBase.java          |    4 -
 .../taglib/component/FileTagDeclaration.java       |    4 +-
 .../tobago/internal/util/HttpPartWrapper.java      |    6 +
 .../tobago/renderkit/css/BootstrapClass.java       |   52 +-
 .../tobago/renderkit/html/CustomAttributes.java    |    1 -
 .../tobago/context/TobagoResourceBundle.properties |    1 -
 .../context/TobagoResourceBundle_de.properties     |    1 -
 .../context/TobagoResourceBundle_es.properties     |    1 -
 .../internal/config/AbstractTobagoTestBase.java    |    4 +
 .../renderkit/renderer/FileRendererUnitTest.java   |   42 +
 .../test/resources/renderer/file/file-label.html   |   12 +-
 .../50-migration/95-migration/4.0_to_5.0.xhtml     |    5 +
 .../20-component/100-upload/File_Upload.xhtml      |    2 +-
 .../npm/dist/css/tobago.css                        | 1140 +++++---
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../npm/package-lock.json                          |  564 ++--
 .../tobago-theme-charlotteville/npm/package.json   |   12 +-
 .../npm/dist/css/tobago.css                        | 1182 ++++++---
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../tobago-theme-roxborough/npm/package-lock.json  |  564 ++--
 .../tobago-theme-roxborough/npm/package.json       |   12 +-
 .../npm/dist/css/tobago.css                        | 1278 +++++----
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../tobago-theme-scarborough/npm/package-lock.json |  564 ++--
 .../tobago-theme-scarborough/npm/package.json      |   12 +-
 .../tobago-theme-speyside/npm/dist/css/tobago.css  | 1155 +++++---
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../tobago-theme-speyside/npm/package-lock.json    |  564 ++--
 .../tobago-theme-speyside/npm/package.json         |   12 +-
 .../tobago-theme-standard/npm/dist/css/tobago.css  | 1272 +++++----
 .../npm/dist/css/tobago.css.map                    |    2 +-
 .../npm/dist/css/tobago.min.css                    |    2 +-
 .../npm/dist/css/tobago.min.css.map                |    2 +-
 .../tobago-theme-standard/npm/package-lock.json    | 2774 ++++++--------------
 .../tobago-theme-standard/npm/package.json         |   20 +-
 .../tobago-theme-standard/npm/ts/tobago-file.ts    |   35 +-
 46 files changed, 5930 insertions(+), 5466 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFile.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFile.java
index a5f08d0..2041e6c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFile.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUIFile.java
@@ -70,8 +70,6 @@ public abstract class AbstractUIFile extends UIInput implements SupportsLabelLay
 
   public abstract Integer getTabIndex();
 
-  public abstract String getPlaceholder();
-
   @Override
   public String getFieldId(final FacesContext facesContext) {
     return getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + "field";
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRenderer.java
index e578f65..021b340 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRenderer.java
@@ -23,15 +23,14 @@ import org.apache.myfaces.tobago.context.TobagoContext;
 import org.apache.myfaces.tobago.internal.component.AbstractUIFile;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.HttpPartWrapper;
+import org.apache.myfaces.tobago.internal.util.StringUtils;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
 import org.apache.myfaces.tobago.renderkit.css.Icons;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
-import org.apache.myfaces.tobago.renderkit.html.CustomAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
 import org.apache.myfaces.tobago.renderkit.html.HtmlInputTypes;
 import org.apache.myfaces.tobago.util.ComponentUtils;
-import org.apache.myfaces.tobago.util.ResourceUtils;
 import org.apache.myfaces.tobago.validator.FileItemValidator;
 import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
 import org.slf4j.Logger;
@@ -83,33 +82,40 @@ public class FileRenderer<T extends AbstractUIFile>
     }
 
     final boolean multiple = component.isMultiple() && !component.isRequired();
+    final String clientId = component.getClientId(facesContext);
     final Object request = facesContext.getExternalContext().getRequest();
     if (request instanceof HttpServletRequest) {
+      final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
+      final List<Part> parts = new ArrayList<>();
       try {
-        final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
-        if (multiple) {
-          final List<Part> parts = new ArrayList<>();
-          for (final Part part : httpServletRequest.getParts()) {
-            if (component.getClientId(facesContext).equals(part.getName())) {
-              LOG.debug("Uploaded file '{}', size={}, type='{}'",
-                  part.getSubmittedFileName(), part.getSize(), part.getContentType());
+        for (final Part part : httpServletRequest.getParts()) {
+          if (clientId.equals(part.getName())) {
+            final String fileName = part.getSubmittedFileName();
+            final String contentType = part.getContentType();
+            LOG.debug("Uploaded file '{}', size={}, type='{}'.", fileName, part.getSize(), contentType);
+            if (StringUtils.isBlank(fileName)) {
+              LOG.warn("No fileName provided for clientId='{}'.", clientId);
+            } else if (StringUtils.isBlank(contentType)) {
+              LOG.warn("No contentType provided for clientId='{}'.", clientId);
+            } else {
               parts.add(new HttpPartWrapper(part));
             }
-            component.setSubmittedValue(parts.toArray(new Part[0]));
+            if (!multiple && parts.size() > 0) { // found one, and one is enough
+              break;
+            }
           }
+        }
+        if (multiple) {
+          LOG.debug("Adding {} parts {}.", parts.size(), parts);
+          component.setSubmittedValue(parts.toArray(new Part[0]));
         } else {
-          final Part part = httpServletRequest.getPart(component.getClientId(facesContext));
-          final String submittedFileName = part.getSubmittedFileName();
-          if (LOG.isDebugEnabled()) {
-            LOG.debug("Uploaded file '{}', size={}, type='{}'",
-                submittedFileName, part.getSize(), part.getContentType());
-          }
-          if (submittedFileName.length() > 0) {
-            component.setSubmittedValue(new HttpPartWrapper(part));
+          if (parts.size() > 0) {
+            LOG.debug("Adding one part {}.", parts.get(0));
+            component.setSubmittedValue(parts.get(0));
           }
         }
       } catch (final Exception e) {
-        LOG.error("", e);
+        LOG.error("clientId='" + clientId + "'", e);
         component.setValid(false);
       }
     } else { // todo: PortletRequest
@@ -120,16 +126,6 @@ public class FileRenderer<T extends AbstractUIFile>
   }
 
   @Override
-  protected void encodeAttributes(final FacesContext facesContext, final T component) throws IOException {
-    final String placeholder = component.getPlaceholder();
-    final String multiFormat = ResourceUtils.getString(facesContext, "file.selected");
-
-    final TobagoResponseWriter writer = getResponseWriter(facesContext);
-    writer.writeAttribute(HtmlAttributes.PLACEHOLDER, placeholder, true);
-    writer.writeAttribute(CustomAttributes.MULTI_FORMAT, multiFormat, true);
-  }
-
-  @Override
   protected void encodeBeginField(final FacesContext facesContext, final T component) throws IOException {
 
     final String clientId = component.getClientId(facesContext);
@@ -146,10 +142,9 @@ public class FileRenderer<T extends AbstractUIFile>
 
     writer.startElement(HtmlElements.DIV);
     writer.writeClassAttribute(
-        BootstrapClass.FORM_FILE,
+        BootstrapClass.INPUT_GROUP,
         TobagoClass.FILE.createMarkup(component.getMarkup()),
-        component.getCustomClass(),
-        BootstrapClass.FORM_CONTROL_PLAINTEXT);
+        component.getCustomClass());
     HtmlRendererUtils.writeDataAttributes(facesContext, writer, component);
 
     writer.startElement(HtmlElements.INPUT);
@@ -159,7 +154,7 @@ public class FileRenderer<T extends AbstractUIFile>
     writer.writeAttribute(HtmlAttributes.TABINDEX, -1);
     writer.writeIdAttribute(fieldId);
     writer.writeClassAttribute(
-        BootstrapClass.FORM_FILE_INPUT,
+        BootstrapClass.FORM_CONTROL,
         BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(component)));
     writer.writeNameAttribute(clientId);
     // readonly seems not making sense in browsers.
@@ -177,16 +172,10 @@ public class FileRenderer<T extends AbstractUIFile>
     encodeBehavior(writer, facesContext, component);
 
     writer.startElement(HtmlElements.LABEL);
-    writer.writeClassAttribute(BootstrapClass.FORM_FILE_LABEL);
+    writer.writeClassAttribute(BootstrapClass.INPUT_GROUP_TEXT);
     writer.writeAttribute(HtmlAttributes.FOR, fieldId, false);
     writer.startElement(HtmlElements.SPAN);
-    writer.writeClassAttribute(BootstrapClass.FORM_FILE_TEXT);
-    writer.endElement(HtmlElements.SPAN);
-    writer.startElement(HtmlElements.SPAN);
-    writer.writeClassAttribute(BootstrapClass.FORM_FILE_BUTTON);
     writer.startElement(HtmlElements.I);
-    // TODO: define a name
-    writer.writeAttribute(HtmlAttributes.TITLE, "Browse", false);
     writer.writeClassAttribute(Icons.FA, Icons.FOLDER_OPEN);
     writer.endElement(HtmlElements.I);
     writer.endElement(HtmlElements.SPAN);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java
index 25bb717..f000468 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java
@@ -81,9 +81,6 @@ public abstract class LabelLayoutRendererBase<T extends UIComponent & SupportsLa
     encodeEndSurroundingLabel(facesContext, component);
   }
 
-  protected void encodeAttributes(final FacesContext facesContext, final T component) throws IOException {
-  }
-
   @Override
   public void encodeChildrenInternal(final FacesContext context, final T component) throws IOException {
     if (component.getChildCount() > 0) {
@@ -154,7 +151,6 @@ public abstract class LabelLayoutRendererBase<T extends UIComponent & SupportsLa
     } else {
       writer.startElement(getComponentTag());
       writer.writeIdAttribute(clientId);
-      encodeAttributes(facesContext, component);
       writer.writeClassAttribute(
           flex ? TobagoClass.LABEL__CONTAINER :  null,
           BootstrapClass.MB_3,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FileTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FileTagDeclaration.java
index b72d6b7..29b6e55 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FileTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/FileTagDeclaration.java
@@ -33,7 +33,6 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.HasHelp;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasIdBindingAndRendered;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasLabel;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasLabelLayout;
-import org.apache.myfaces.tobago.internal.taglib.declaration.HasPlaceholder;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasRequiredMessage;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasTabIndex;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasTip;
@@ -80,8 +79,7 @@ import javax.faces.component.UIInput;
 public interface FileTagDeclaration
     extends HasValidator, HasValidatorMessage, HasRequiredMessage, HasConverterMessage,
     HasValueChangeListener, HasIdBindingAndRendered, IsDisabled, IsFocus, IsMultiple,
-    HasLabel, HasLabelLayout, HasAccessKey, HasTip, HasHelp, IsReadonly, IsRequired, HasTabIndex, IsVisual,
-    HasPlaceholder {
+    HasLabel, HasLabelLayout, HasAccessKey, HasTip, HasHelp, IsReadonly, IsRequired, HasTabIndex, IsVisual {
 
   /**
    * Value binding expression pointing to a
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HttpPartWrapper.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HttpPartWrapper.java
index 9ed828d..c37d032 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HttpPartWrapper.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/util/HttpPartWrapper.java
@@ -126,4 +126,10 @@ public class HttpPartWrapper implements Part, FacesWrapper<Part>, StateHolder {
     return delegate;
   }
 
+  @Override
+  public String toString() {
+    return "HttpPartWrapper{" +
+        "delegate=" + delegate +
+        '}';
+  }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java
index 052f879..4b806e1 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java
@@ -251,17 +251,17 @@ public enum BootstrapClass implements CssItem {
   @Deprecated
   CUSTOM_CONTROL_INPUT("form-check-input"),
   /**
-   * @deprecated since 5.0.0, please use {@link #FORM_FILE}
+   * @deprecated since 5.0.0
    */
   @Deprecated
   CUSTOM_FILE("custom-file"),
   /**
-   * @deprecated since 5.0.0, please use {@link #FORM_FILE_INPUT}
+   * @deprecated since 5.0.0
    */
   @Deprecated
   CUSTOM_FILE_INPUT("custom-file-input"),
   /**
-   * @deprecated since 5.0.0, please use {@link #FORM_FILE_LABEL}
+   * @deprecated since 5.0.0
    */
   @Deprecated
   CUSTOM_FILE_LABEL("custom-file-label"),
@@ -305,8 +305,20 @@ public enum BootstrapClass implements CssItem {
   FLEX_COLUMN_REVERSE("flex-column-reverse"),
   FLEX_ROW("flex-row"),
   FLEX_ROW_REVERSE("flex-row-reverse"),
-  FONT_ITALIC("font-italic"),
+  /**
+   * @deprecated since 5.0.0, please use {@link #FST_ITALIC}
+   */
+  @Deprecated
+  FONT_ITALIC("fst-italic"),
+  /**
+   * @deprecated since 5.0.0, please use {@link #FW_BOLD}
+   */
+  @Deprecated
   FONT_WEIGHT_BOLD("font-weight-bold"),
+  /**
+   * @deprecated since 5.0.0, please use {@link #FW_LIGHT}
+   */
+  @Deprecated
   FONT_WEIGHT_LIGHT("font-weight-light"),
   FORM_CHECK("form-check"),
   FORM_CHECK_INLINE("form-check-inline"),
@@ -314,10 +326,30 @@ public enum BootstrapClass implements CssItem {
   FORM_CHECK_LABEL("form-check-label"),
   FORM_CONTROL("form-control"),
   FORM_CONTROL_PLAINTEXT("form-control-plaintext"),
+  /**
+   * @deprecated since 5.0.0
+   */
+  @Deprecated
   FORM_FILE("form-file"),
+  /**
+   * @deprecated since 5.0.0
+   */
+  @Deprecated
   FORM_FILE_BUTTON("form-file-button"),
+  /**
+   * @deprecated since 5.0.0
+   */
+  @Deprecated
   FORM_FILE_INPUT("form-file-input"),
+  /**
+   * @deprecated since 5.0.0
+   */
+  @Deprecated
   FORM_FILE_LABEL("form-file-label"),
+  /**
+   * @deprecated since 5.0.0
+   */
+  @Deprecated
   FORM_FILE_TEXT("form-file-text"),
   /**
    * @deprecated since 5.0.0, please use {@link #MB_3} or other
@@ -331,6 +363,12 @@ public enum BootstrapClass implements CssItem {
   FORM_INLINE("form-inline"),
   FORM_SELECT("form-select"),
   FORM_SWITCH("form-switch"),
+  FST_ITALIC("fst-italic"),
+  FW_BOLD("fw-bold"),
+  FW_BOLDER("fw-bolder"),
+  FW_NORMAL("fw-normal"),
+  FW_LIGHT("fw-light"),
+  FW_LIGHTER("fw-lighter"),
   INPUT_GROUP("input-group"),
   /**
    * @deprecated since 5.0.0
@@ -651,11 +689,11 @@ public enum BootstrapClass implements CssItem {
     if (markup == null || markup.contains(Markup.NONE)) {
       return null;
     } else if (markup.contains(Markup.BOLD)) {
-      return BootstrapClass.FONT_WEIGHT_BOLD;
+      return BootstrapClass.FW_BOLD;
     } else if (markup.contains(Markup.THIN)) {
-      return BootstrapClass.FONT_WEIGHT_LIGHT;
+      return BootstrapClass.FW_LIGHT;
     } else if (markup.contains(Markup.ITALIC)) {
-      return BootstrapClass.FONT_ITALIC;
+      return BootstrapClass.FST_ITALIC;
     } else {
       return null;
     }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/html/CustomAttributes.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/html/CustomAttributes.java
index b2a1fd7..1f1201c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/html/CustomAttributes.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/html/CustomAttributes.java
@@ -49,7 +49,6 @@ public enum CustomAttributes implements MarkupLanguageAttributes {
   LOCAL_MENU("local-menu"),
   MAX_ITEMS("max-items"),
   MIN_CHARS("min-chars"),
-  MULTI_FORMAT("multi-format"),
   OMIT("omit"),
   ORIENTATION("orientation"),
   PARENT("parent"),
diff --git a/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle.properties b/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle.properties
index 4329d89..d792331 100644
--- a/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle.properties
+++ b/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle.properties
@@ -35,7 +35,6 @@ sheet.rowX=Row {0}
 sheet.prev=Previous Page
 sheet.sorting=Click to sort this column
 sheet.toPage=Page {0}
-file.selected={} files selected
 help.title=Help
 date.title=Date Picker
 date.today=Today
diff --git a/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle_de.properties b/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle_de.properties
index 7a755c9..c9e66f5 100644
--- a/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle_de.properties
+++ b/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle_de.properties
@@ -35,7 +35,6 @@ sheet.rowX=Zeile {0}
 sheet.prev=vorherige Seite
 sheet.sorting=nach dieser Spalte sortieren
 sheet.toPage=Seite {0}
-file.selected={} Dateien ausgew\u00E4hlt
 help.title=Hilfe
 date.title=Datumsauswahl
 date.today=Heute
diff --git a/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle_es.properties b/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle_es.properties
index 04d5453..89c5dda 100644
--- a/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle_es.properties
+++ b/tobago-core/src/main/resources/org/apache/myfaces/tobago/context/TobagoResourceBundle_es.properties
@@ -35,7 +35,6 @@ sheet.rowX=Registro {0}
 sheet.prev=P\u00E1gina Anterior
 sheet.sorting=Ordenar por esta columna
 sheet.toPage=P\u00E1gina {0}
-file.selected={} archivos seleccionados
 help.title=Ayudar
 date.title=Escoger fecha
 date.today=Hoy
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
index 0b4b920..1703913 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/AbstractTobagoTestBase.java
@@ -29,6 +29,7 @@ import org.apache.myfaces.tobago.component.UIBadge;
 import org.apache.myfaces.tobago.component.UIBox;
 import org.apache.myfaces.tobago.component.UIButton;
 import org.apache.myfaces.tobago.component.UIButtons;
+import org.apache.myfaces.tobago.component.UIFile;
 import org.apache.myfaces.tobago.component.UIGridLayout;
 import org.apache.myfaces.tobago.component.UIIn;
 import org.apache.myfaces.tobago.component.UILink;
@@ -52,6 +53,7 @@ import org.apache.myfaces.tobago.internal.renderkit.renderer.BadgeRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.BoxRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.ButtonRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.ButtonsRenderer;
+import org.apache.myfaces.tobago.internal.renderkit.renderer.FileRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.GridLayoutRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.InRenderer;
 import org.apache.myfaces.tobago.internal.renderkit.renderer.LinkRenderer;
@@ -125,6 +127,7 @@ public abstract class AbstractTobagoTestBase extends AbstractJsfTestCase {
     application.addComponent(Tags.box.componentType(), UIBox.class.getName());
     application.addComponent(Tags.button.componentType(), UIButton.class.getName());
     application.addComponent(Tags.buttons.componentType(), UIButtons.class.getName());
+    application.addComponent(Tags.file.componentType(), UIFile.class.getName());
     application.addComponent(Tags.gridLayout.componentType(), UIGridLayout.class.getName());
     application.addComponent(Tags.in.componentType(), UIIn.class.getName());
     application.addComponent(Tags.link.componentType(), UILink.class.getName());
@@ -149,6 +152,7 @@ public abstract class AbstractTobagoTestBase extends AbstractJsfTestCase {
     renderKit.addRenderer(UIBox.COMPONENT_FAMILY, RendererTypes.BOX, new BoxRenderer());
     renderKit.addRenderer(UIButton.COMPONENT_FAMILY, RendererTypes.BUTTON, new ButtonRenderer());
     renderKit.addRenderer(UIButtons.COMPONENT_FAMILY, RendererTypes.BUTTONS, new ButtonsRenderer());
+    renderKit.addRenderer(UIFile.COMPONENT_FAMILY, RendererTypes.FILE, new FileRenderer());
     renderKit.addRenderer(UIGridLayout.COMPONENT_FAMILY, RendererTypes.GRID_LAYOUT, new GridLayoutRenderer());
     renderKit.addRenderer(UIIn.COMPONENT_FAMILY, RendererTypes.IN, new InRenderer());
     renderKit.addRenderer(UILink.COMPONENT_FAMILY, RendererTypes.LINK, new LinkRenderer());
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRendererUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRendererUnitTest.java
new file mode 100644
index 0000000..19a00c4
--- /dev/null
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRendererUnitTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.tobago.internal.renderkit.renderer;
+
+import org.apache.myfaces.tobago.component.RendererTypes;
+import org.apache.myfaces.tobago.component.Tags;
+import org.apache.myfaces.tobago.component.UIFile;
+import org.apache.myfaces.tobago.util.ComponentUtils;
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+
+public class FileRendererUnitTest extends RendererTestBase {
+
+  @Test
+  public void fileLabel() throws IOException {
+    final UIFile c = (UIFile) ComponentUtils.createComponent(
+        facesContext, Tags.file.componentType(), RendererTypes.File, "id");
+    c.setLabel("label");
+    c.encodeAll(facesContext);
+
+    Assert.assertEquals(loadHtml("renderer/file/file-label.html"), formattedResult());
+  }
+}
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/20-docker/tobago.d.ts b/tobago-core/src/test/resources/renderer/file/file-label.html
similarity index 68%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/20-docker/tobago.d.ts
rename to tobago-core/src/test/resources/renderer/file/file-label.html
index f88b4ba..fffaa17 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/20-docker/tobago.d.ts
+++ b/tobago-core/src/test/resources/renderer/file/file-label.html
@@ -1,4 +1,4 @@
-/*
+<!--
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -13,6 +13,12 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- */
+-->
 
-declare var Tobago;
+<tobago-file id='id' class='tobago-label-container mb-3'>
+  <label for='id::field' class='col-form-label'>label</label>
+  <div class='input-group'>
+    <input type='file' tabindex='-1' id='id::field' class='form-control' name='id'>
+    <label class='input-group-text' for='id::field'><span><i class='fa fa-folder-open'></i></span></label>
+  </div>
+</tobago-file>
\ No newline at end of file
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/50-migration/95-migration/4.0_to_5.0.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/50-migration/95-migration/4.0_to_5.0.xhtml
index 4277db8..b7f3b07 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/50-migration/95-migration/4.0_to_5.0.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/50-migration/95-migration/4.0_to_5.0.xhtml
@@ -59,6 +59,11 @@
         <code class="language-markup">&lt;tc:in></code>.
       </tc:section>
 
+      <tc:section label="File Upload">
+        The attribute <code class="language-markup">placehoder</code> in <code class="language-markup">&lt;tc:file></code>
+        has been removed, because its not supported with Bootstrap 5.
+      </tc:section>
+
     </tc:section>
 
     <tc:section id="javascript-api" label="JavaScript API">
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/100-upload/File_Upload.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/100-upload/File_Upload.xhtml
index 74565c0..3936b7f 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/100-upload/File_Upload.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/100-upload/File_Upload.xhtml
@@ -77,7 +77,7 @@
       to the <code class="language-markup">&lt;tc:file/></code> tag.</p>
     <p><tc:badge value="Warning" markup="warning"/> The Ajax feature of file upload works with JSF 2.2 or higher!</p>
 
-    <tc:file label="Ajax" value="#{uploadController.fileAjax}">
+    <tc:file label="Ajax" value="#{uploadController.fileAjax}" id="fileAjax">
       <f:ajax listener="#{uploadController.uploadAjax}" render="s3 :page:messages"/>
     </tc:file>
 
diff --git a/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.css b/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.css
index c90bbfe..eb1837d 100644
--- a/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.css
+++ b/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.css
@@ -32,7 +32,7 @@
  * limitations under the License.
  */
 /*!
- * Bootstrap v5.0.0-alpha2 (https://getbootstrap.com/)
+ * Bootstrap v5.0.0-alpha3 (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)
@@ -59,7 +59,7 @@
   --bs-danger: #ff00be;
   --bs-light: #ffffff;
   --bs-dark: #529696;
-  --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+  --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
   --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
   --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
 }
@@ -70,6 +70,12 @@
   box-sizing: border-box;
 }
 
+@media (prefers-reduced-motion: no-preference) {
+  :root {
+    scroll-behavior: smooth;
+  }
+}
+
 body {
   margin: 0;
   font-family: var(--bs-font-sans-serif);
@@ -264,7 +270,6 @@ pre {
   margin-bottom: 1rem;
   overflow: auto;
   font-size: 0.875em;
-  -ms-overflow-style: scrollbar;
 }
 
 pre code {
@@ -343,8 +348,8 @@ button {
 }
 
 button:focus {
-  outline: 1px dotted;
-  outline: 5px auto -webkit-focus-ring-color;
+  outline: dotted 1px;
+  outline: -webkit-focus-ring-color auto 5px;
 }
 
 input,
@@ -359,11 +364,6 @@ textarea {
 }
 
 button,
-input {
-  overflow: visible;
-}
-
-button,
 select {
   text-transform: none;
 }
@@ -417,7 +417,6 @@ legend {
   margin-bottom: 0.5rem;
   font-size: calc(1.275rem + 0.3vw);
   line-height: inherit;
-  white-space: normal;
 }
 
 @media (min-width: 1200px) {
@@ -457,6 +456,10 @@ legend + * {
   padding: 0;
 }
 
+::file-selector-button {
+  font: inherit;
+}
+
 ::-webkit-file-upload-button {
   font: inherit;
   -webkit-appearance: button;
@@ -1824,75 +1827,75 @@ progress {
 }
 
 .table-primary {
-  --bs-table-bg: #cfe2e2;
-  --bs-table-striped-bg: #c5d7d7;
+  --bs-table-bg: #dceaea;
+  --bs-table-striped-bg: #d1dede;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #bacbcb;
+  --bs-table-active-bg: #c6d3d3;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #bfd1d1;
+  --bs-table-hover-bg: #ccd8d8;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #bacbcb;
+  border-color: #c6d3d3;
 }
 
 .table-secondary {
-  --bs-table-bg: #e9e6d6;
-  --bs-table-striped-bg: #dddbcb;
+  --bs-table-bg: #f0ede2;
+  --bs-table-striped-bg: #e4e1d7;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #d2cfc1;
+  --bs-table-active-bg: #d8d5cb;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #d8d5c6;
+  --bs-table-hover-bg: #dedbd1;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #d2cfc1;
+  border-color: #d8d5cb;
 }
 
 .table-success {
-  --bs-table-bg: #e7fcff;
-  --bs-table-striped-bg: #dbeff2;
+  --bs-table-bg: #eefdff;
+  --bs-table-striped-bg: #e2f0f2;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #d0e3e6;
+  --bs-table-active-bg: #d6e4e6;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #d6e9ec;
+  --bs-table-hover-bg: #dceaec;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #d0e3e6;
+  border-color: #d6e4e6;
 }
 
 .table-info {
-  --bs-table-bg: #c7e3c5;
-  --bs-table-striped-bg: #bdd8bb;
+  --bs-table-bg: #d7ebd6;
+  --bs-table-striped-bg: #ccdfcb;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #b3ccb1;
+  --bs-table-active-bg: #c2d4c1;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #b8d2b6;
+  --bs-table-hover-bg: #c7d9c6;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #b3ccb1;
+  border-color: #c2d4c1;
 }
 
 .table-warning {
-  --bs-table-bg: #ffb8ed;
-  --bs-table-striped-bg: #f2afe1;
+  --bs-table-bg: #ffccf2;
+  --bs-table-striped-bg: #f2c2e6;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #e6a6d5;
+  --bs-table-active-bg: #e6b8da;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #ecaadb;
+  --bs-table-hover-bg: #ecbde0;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #e6a6d5;
+  border-color: #e6b8da;
 }
 
 .table-danger {
-  --bs-table-bg: #ffb8ed;
-  --bs-table-striped-bg: #f2afe1;
+  --bs-table-bg: #ffccf2;
+  --bs-table-striped-bg: #f2c2e6;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #e6a6d5;
+  --bs-table-active-bg: #e6b8da;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #ecaadb;
+  --bs-table-hover-bg: #ecbde0;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #e6a6d5;
+  border-color: #e6b8da;
 }
 
 .table-light {
@@ -1992,7 +1995,6 @@ progress {
 .form-control {
   display: block;
   width: 100%;
-  min-height: calc(1.5em + 0.75rem + 2px);
   padding: 0.375rem 0.75rem;
   font-size: 1rem;
   font-weight: 400;
@@ -2014,6 +2016,14 @@ progress {
   }
 }
 
+.form-control[type="file"] {
+  overflow: hidden;
+}
+
+.form-control[type="file"]:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+
 .form-control:focus {
   color: #a0a0a0;
   background-color: #fffbe8;
@@ -2022,6 +2032,10 @@ progress {
   box-shadow: 0 0 0 0.25rem rgba(82, 150, 150, 0.25);
 }
 
+.form-control::-webkit-date-and-time-value {
+  height: 1.5em;
+}
+
 .form-control::-moz-placeholder {
   color: #777777;
   opacity: 1;
@@ -2047,6 +2061,60 @@ progress {
   opacity: 1;
 }
 
+.form-control::file-selector-button {
+  padding: 0.375rem 0.75rem;
+  margin: -0.375rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+  margin-inline-end: 0.75rem;
+  color: #a0a0a0;
+  background-color: #d0d0d0;
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: 1px;
+  border-radius: 0;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .form-control::file-selector-button {
+    transition: none;
+  }
+}
+
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+  background-color: #c6c6c6;
+}
+
+.form-control::-webkit-file-upload-button {
+  padding: 0.375rem 0.75rem;
+  margin: -0.375rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+  margin-inline-end: 0.75rem;
+  color: #a0a0a0;
+  background-color: #d0d0d0;
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: 1px;
+  border-radius: 0;
+  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .form-control::-webkit-file-upload-button {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+  background-color: #c6c6c6;
+}
+
 .form-control-plaintext {
   display: block;
   width: 100%;
@@ -2071,6 +2139,20 @@ progress {
   border-radius: 0.2rem;
 }
 
+.form-control-sm::file-selector-button {
+  padding: 0.25rem 0.5rem;
+  margin: -0.25rem -0.5rem;
+  -webkit-margin-end: 0.5rem;
+  margin-inline-end: 0.5rem;
+}
+
+.form-control-sm::-webkit-file-upload-button {
+  padding: 0.25rem 0.5rem;
+  margin: -0.25rem -0.5rem;
+  -webkit-margin-end: 0.5rem;
+  margin-inline-end: 0.5rem;
+}
+
 .form-control-lg {
   min-height: calc(1.5em + 1rem + 2px);
   padding: 0.5rem 1rem;
@@ -2078,23 +2160,55 @@ progress {
   border-radius: 0.3rem;
 }
 
+.form-control-lg::file-selector-button {
+  padding: 0.5rem 1rem;
+  margin: -0.5rem -1rem;
+  -webkit-margin-end: 1rem;
+  margin-inline-end: 1rem;
+}
+
+.form-control-lg::-webkit-file-upload-button {
+  padding: 0.5rem 1rem;
+  margin: -0.5rem -1rem;
+  -webkit-margin-end: 1rem;
+  margin-inline-end: 1rem;
+}
+
+textarea.form-control {
+  min-height: calc(1.5em + 0.75rem + 2px);
+}
+
+textarea.form-control-sm {
+  min-height: calc(1.5em + 0.5rem + 2px);
+}
+
+textarea.form-control-lg {
+  min-height: calc(1.5em + 1rem + 2px);
+}
+
 .form-control-color {
   max-width: 3rem;
+  height: auto;
   padding: 0.375rem;
 }
 
+.form-control-color:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+
 .form-control-color::-moz-color-swatch {
+  height: 1.5em;
   border-radius: 0.25rem;
 }
 
 .form-control-color::-webkit-color-swatch {
+  height: 1.5em;
   border-radius: 0.25rem;
 }
 
 .form-select {
   display: block;
   width: 100%;
-  height: calc(1.5em + 0.75rem + 2px);
   padding: 0.375rem 1.75rem 0.375rem 0.75rem;
   font-size: 1rem;
   font-weight: 400;
@@ -2119,13 +2233,7 @@ progress {
   box-shadow: 0 0 0 0.25rem rgba(82, 150, 150, 0.25);
 }
 
-.form-select:focus::-ms-value {
-  color: #a0a0a0;
-  background-color: #fffbe8;
-}
-
 .form-select[multiple], .form-select[size]:not([size="1"]) {
-  height: auto;
   padding-right: 0.75rem;
   background-image: none;
 }
@@ -2141,7 +2249,6 @@ progress {
 }
 
 .form-select-sm {
-  height: calc(1.5em + 0.5rem + 2px);
   padding-top: 0.25rem;
   padding-bottom: 0.25rem;
   padding-left: 0.5rem;
@@ -2149,7 +2256,6 @@ progress {
 }
 
 .form-select-lg {
-  height: calc(1.5em + 1rem + 2px);
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
   padding-left: 1rem;
@@ -2232,11 +2338,11 @@ progress {
 .form-check-input:disabled {
   pointer-events: none;
   filter: none;
-  opacity: .5;
+  opacity: 0.5;
 }
 
 .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {
-  opacity: .5;
+  opacity: 0.5;
 }
 
 .form-switch {
@@ -2271,93 +2377,10 @@ progress {
   pointer-events: none;
 }
 
-.form-file {
-  --bs-form-file-height: calc(1.5em + 0.75rem + 2px);
-  position: relative;
-}
-
-.form-file-input {
-  position: relative;
-  z-index: 2;
-  width: 100%;
-  height: var(--bs-form-file-height);
-  margin: 0;
-  opacity: 0;
-}
-
-.form-file-input:focus-within ~ .form-file-label {
-  border-color: #d5cfb0;
-  box-shadow: 0 0 0 0.25rem rgba(82, 150, 150, 0.25);
-}
-
-.form-file-input[disabled] ~ .form-file-label .form-file-text,
-.form-file-input:disabled ~ .form-file-label .form-file-text {
-  background-color: #323232;
-}
-
-.form-file-label {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-  z-index: 1;
-  display: flex;
-  height: var(--bs-form-file-height);
-  border-color: #777777;
-  border-radius: 0.25rem;
-}
-
-.form-file-text {
-  display: block;
-  flex-grow: 1;
-  padding: 0.375rem 0.75rem;
-  overflow: hidden;
-  font-weight: 400;
-  line-height: 1.5;
-  color: #a0a0a0;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  background-color: #fffbe8;
-  border-color: inherit;
-  border-style: solid;
-  border-width: 1px;
-  border-top-left-radius: inherit;
-  border-bottom-left-radius: inherit;
-}
-
-.form-file-button {
-  display: block;
-  flex-shrink: 0;
-  padding: 0.375rem 0.75rem;
-  margin-left: -1px;
-  line-height: 1.5;
-  color: #a0a0a0;
-  background-color: #d0d0d0;
-  border-color: inherit;
-  border-style: solid;
-  border-width: 1px;
-  border-top-right-radius: inherit;
-  border-bottom-right-radius: inherit;
-}
-
-.form-file-sm {
-  --bs-form-file-height: calc(1.5em + 0.5rem + 2px);
-  font-size: 0.875rem;
-}
-
-.form-file-sm .form-file-text,
-.form-file-sm .form-file-button {
-  padding: 0.25rem 0.5rem;
-}
-
-.form-file-lg {
-  --bs-form-file-height: calc(1.5em + 1rem + 2px);
-  font-size: 1.25rem;
-}
-
-.form-file-lg .form-file-text,
-.form-file-lg .form-file-button {
-  padding: 0.5rem 1rem;
+.btn-check[disabled] + .btn, .btn-check:disabled + .btn {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.65;
 }
 
 .form-range {
@@ -2382,10 +2405,6 @@ progress {
   box-shadow: 0 0 0 1px #fffbe8, 0 0 0 0.25rem rgba(82, 150, 150, 0.25);
 }
 
-.form-range:focus::-ms-thumb {
-  box-shadow: 0 0 0 1px #fffbe8, 0 0 0 0.25rem rgba(82, 150, 150, 0.25);
-}
-
 .form-range::-moz-focus-outer {
   border: 0;
 }
@@ -2411,7 +2430,7 @@ progress {
 }
 
 .form-range::-webkit-slider-thumb:active {
-  background-color: #bfdcdc;
+  background-color: #cbe0e0;
 }
 
 .form-range::-webkit-slider-runnable-track {
@@ -2444,7 +2463,7 @@ progress {
 }
 
 .form-range::-moz-range-thumb:active {
-  background-color: #bfdcdc;
+  background-color: #cbe0e0;
 }
 
 .form-range::-moz-range-track {
@@ -2457,66 +2476,107 @@ progress {
   border-radius: 1rem;
 }
 
-.form-range::-ms-thumb {
-  width: 1rem;
-  height: 1rem;
-  margin-top: 0;
-  margin-right: 0.25rem;
-  margin-left: 0.25rem;
-  background-color: #529696;
-  border: 0;
-  border-radius: 1rem;
-  -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-  appearance: none;
+.form-range:disabled {
+  pointer-events: none;
+}
+
+.form-range:disabled::-webkit-slider-thumb {
+  background-color: #adb5bd;
+}
+
+.form-range:disabled::-moz-range-thumb {
+  background-color: #adb5bd;
+}
+
+.form-floating {
+  position: relative;
+}
+
+.form-floating > .form-control,
+.form-floating > .form-select {
+  height: calc(3.5rem + 2px);
+  padding: 1rem 0.75rem;
+}
+
+.form-floating > label {
+  position: absolute;
+  top: 0;
+  left: 0;
+  height: 100%;
+  padding: 1rem 0.75rem;
+  pointer-events: none;
+  border: 1px solid transparent;
+  transform-origin: 0 0;
+  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
 }
 
 @media (prefers-reduced-motion: reduce) {
-  .form-range::-ms-thumb {
-    -ms-transition: none;
+  .form-floating > label {
     transition: none;
   }
 }
 
-.form-range::-ms-thumb:active {
-  background-color: #bfdcdc;
+.form-floating > .form-control::-moz-placeholder {
+  color: transparent;
 }
 
-.form-range::-ms-track {
-  width: 100%;
-  height: 0.5rem;
+.form-floating > .form-control:-ms-input-placeholder {
   color: transparent;
-  cursor: pointer;
-  background-color: transparent;
-  border-color: transparent;
-  border-width: 0.5rem;
 }
 
-.form-range::-ms-fill-lower {
-  background-color: #dee2e6;
-  border-radius: 1rem;
+.form-floating > .form-control::-ms-input-placeholder {
+  color: transparent;
 }
 
-.form-range::-ms-fill-upper {
-  margin-right: 15px;
-  background-color: #dee2e6;
-  border-radius: 1rem;
+.form-floating > .form-control::placeholder {
+  color: transparent;
 }
 
-.form-range:disabled {
-  pointer-events: none;
+.form-floating > .form-control:not(:-moz-placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
 }
 
-.form-range:disabled::-webkit-slider-thumb {
-  background-color: #adb5bd;
+.form-floating > .form-control:not(:-ms-input-placeholder) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
 }
 
-.form-range:disabled::-moz-range-thumb {
-  background-color: #adb5bd;
+.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
 }
 
-.form-range:disabled::-ms-thumb {
-  background-color: #adb5bd;
+.form-floating > .form-control:-webkit-autofill {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-select {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:focus ~ label,
+.form-floating > .form-control:not(:placeholder-shown) ~ label,
+.form-floating > .form-select ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:-webkit-autofill ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
 }
 
 .input-group {
@@ -2528,8 +2588,7 @@ progress {
 }
 
 .input-group > .form-control,
-.input-group > .form-select,
-.input-group > .form-file {
+.input-group > .form-select {
   position: relative;
   flex: 1 1 auto;
   width: 1%;
@@ -2537,25 +2596,10 @@ progress {
 }
 
 .input-group > .form-control:focus,
-.input-group > .form-select:focus,
-.input-group > .form-file .form-file-input:focus ~ .form-file-label {
+.input-group > .form-select:focus {
   z-index: 3;
 }
 
-.input-group > .form-file > .form-file-input:focus {
-  z-index: 4;
-}
-
-.input-group > .form-file:not(:last-child) > .form-file-label {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-
-.input-group > .form-file:not(:first-child) > .form-file-label {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-
 .input-group .btn {
   position: relative;
   z-index: 2;
@@ -2580,14 +2624,6 @@ progress {
   border-radius: 0.25rem;
 }
 
-.input-group-lg > .form-control {
-  min-height: calc(1.5em + 1rem + 2px);
-}
-
-.input-group-lg > .form-select {
-  height: calc(1.5em + 1rem + 2px);
-}
-
 .input-group-lg > .form-control,
 .input-group-lg > .form-select,
 .input-group-lg > .input-group-text,
@@ -2597,14 +2633,6 @@ progress {
   border-radius: 0.3rem;
 }
 
-.input-group-sm > .form-control {
-  min-height: calc(1.5em + 0.5rem + 2px);
-}
-
-.input-group-sm > .form-select {
-  height: calc(1.5em + 0.5rem + 2px);
-}
-
 .input-group-sm > .form-control,
 .input-group-sm > .form-select,
 .input-group-sm > .input-group-text,
@@ -2619,13 +2647,19 @@ progress {
   padding-right: 1.75rem;
 }
 
-.input-group > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),
-.input-group > .dropdown-toggle:nth-last-child(n + 3) {
+.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {
   border-top-right-radius: 0;
   border-bottom-right-radius: 0;
 }
 
-.input-group > :not(:first-child):not(.dropdown-menu) {
+.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
   margin-left: -1px;
   border-top-left-radius: 0;
   border-bottom-left-radius: 0;
@@ -2712,15 +2746,6 @@ progress {
   margin-left: .5em;
 }
 
-.was-validated .form-file-input:valid ~ .form-file-label, .form-file-input.is-valid ~ .form-file-label {
-  border-color: #abf5ff;
-}
-
-.was-validated .form-file-input:valid:focus ~ .form-file-label, .form-file-input.is-valid:focus ~ .form-file-label {
-  border-color: #abf5ff;
-  box-shadow: 0 0 0 0.25rem rgba(171, 245, 255, 0.25);
-}
-
 .invalid-feedback {
   display: none;
   width: 100%;
@@ -2753,7 +2778,7 @@ progress {
 .was-validated .form-control:invalid, .form-control.is-invalid {
   border-color: #ff00be;
   padding-right: calc(1.5em + 0.75rem);
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ff00be' 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='%23ff00be' stroke='none'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff00be'%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='%23ff00be' stroke='none'/%3e%3c/svg%3e");
   background-repeat: no-repeat;
   background-position: right calc(0.375em + 0.1875rem) center;
   background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
@@ -2772,7 +2797,7 @@ progress {
 .was-validated .form-select:invalid, .form-select.is-invalid {
   border-color: #ff00be;
   padding-right: calc(0.75em + 2.3125rem);
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23323232' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ff00be' 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 [...]
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23323232' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff00be'%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 [...]
   background-position: right 0.75rem center, center right 1.75rem;
   background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
 }
@@ -2802,15 +2827,6 @@ progress {
   margin-left: .5em;
 }
 
-.was-validated .form-file-input:invalid ~ .form-file-label, .form-file-input.is-invalid ~ .form-file-label {
-  border-color: #ff00be;
-}
-
-.was-validated .form-file-input:invalid:focus ~ .form-file-label, .form-file-input.is-invalid:focus ~ .form-file-label {
-  border-color: #ff00be;
-  box-shadow: 0 0 0 0.25rem rgba(255, 0, 190, 0.25);
-}
-
 .btn {
   display: inline-block;
   font-weight: 400;
@@ -2861,14 +2877,14 @@ fieldset:disabled .btn {
 
 .btn-primary:hover {
   color: #000000;
-  background-color: #64aaaa;
-  border-color: #5ca6a6;
+  background-color: #6ca6a6;
+  border-color: #63a1a1;
 }
 
 .btn-check:focus + .btn-primary, .btn-primary:focus {
   color: #000000;
-  background-color: #64aaaa;
-  border-color: #5ca6a6;
+  background-color: #6ca6a6;
+  border-color: #63a1a1;
   box-shadow: 0 0 0 0.25rem rgba(70, 128, 128, 0.5);
 }
 
@@ -2876,8 +2892,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,
 .show > .btn-primary.dropdown-toggle {
   color: #000000;
-  background-color: #6cafaf;
-  border-color: #5ca6a6;
+  background-color: #75abab;
+  border-color: #63a1a1;
 }
 
 .btn-check:checked + .btn-primary:focus,
@@ -2900,14 +2916,14 @@ fieldset:disabled .btn {
 
 .btn-secondary:hover {
   color: #000000;
-  background-color: #bfb686;
-  border-color: #bbb17e;
+  background-color: #beb483;
+  border-color: #bab07c;
 }
 
 .btn-check:focus + .btn-secondary, .btn-secondary:focus {
   color: #000000;
-  background-color: #bfb686;
-  border-color: #bbb17e;
+  background-color: #beb483;
+  border-color: #bab07c;
   box-shadow: 0 0 0 0.25rem rgba(151, 142, 93, 0.5);
 }
 
@@ -2915,8 +2931,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,
 .show > .btn-secondary.dropdown-toggle {
   color: #000000;
-  background-color: #c4bb8e;
-  border-color: #bbb17e;
+  background-color: #c1b98a;
+  border-color: #bab07c;
 }
 
 .btn-check:checked + .btn-secondary:focus,
@@ -2939,14 +2955,14 @@ fieldset:disabled .btn {
 
 .btn-success:hover {
   color: #000000;
-  background-color: #d1faff;
-  border-color: #c5f8ff;
+  background-color: #b8f7ff;
+  border-color: #b3f6ff;
 }
 
 .btn-check:focus + .btn-success, .btn-success:focus {
   color: #000000;
-  background-color: #d1faff;
-  border-color: #c5f8ff;
+  background-color: #b8f7ff;
+  border-color: #b3f6ff;
   box-shadow: 0 0 0 0.25rem rgba(145, 208, 217, 0.5);
 }
 
@@ -2954,8 +2970,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-success, .btn-success:active, .btn-success.active,
 .show > .btn-success.dropdown-toggle {
   color: #000000;
-  background-color: #defbff;
-  border-color: #c5f8ff;
+  background-color: #bcf7ff;
+  border-color: #b3f6ff;
 }
 
 .btn-check:checked + .btn-success:focus,
@@ -2978,14 +2994,14 @@ fieldset:disabled .btn {
 
 .btn-info:hover {
   color: #000000;
-  background-color: #43b939;
-  border-color: #3fb036;
+  background-color: #56ab4f;
+  border-color: #4ca645;
 }
 
 .btn-check:focus + .btn-info, .btn-info:focus {
   color: #000000;
-  background-color: #43b939;
-  border-color: #3fb036;
+  background-color: #56ab4f;
+  border-color: #4ca645;
   box-shadow: 0 0 0 0.25rem rgba(48, 133, 41, 0.5);
 }
 
@@ -2993,8 +3009,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-info, .btn-info:active, .btn-info.active,
 .show > .btn-info.dropdown-toggle {
   color: #000000;
-  background-color: #46c33c;
-  border-color: #3fb036;
+  background-color: #60b059;
+  border-color: #4ca645;
 }
 
 .btn-check:checked + .btn-info:focus,
@@ -3134,14 +3150,14 @@ fieldset:disabled .btn {
 
 .btn-dark:hover {
   color: #000000;
-  background-color: #64aaaa;
-  border-color: #5ca6a6;
+  background-color: #6ca6a6;
+  border-color: #63a1a1;
 }
 
 .btn-check:focus + .btn-dark, .btn-dark:focus {
   color: #000000;
-  background-color: #64aaaa;
-  border-color: #5ca6a6;
+  background-color: #6ca6a6;
+  border-color: #63a1a1;
   box-shadow: 0 0 0 0.25rem rgba(70, 128, 128, 0.5);
 }
 
@@ -3149,8 +3165,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,
 .show > .btn-dark.dropdown-toggle {
   color: #000000;
-  background-color: #6cafaf;
-  border-color: #5ca6a6;
+  background-color: #75abab;
+  border-color: #63a1a1;
 }
 
 .btn-check:checked + .btn-dark:focus,
@@ -3447,15 +3463,6 @@ fieldset:disabled .btn {
   border-radius: 0.2rem;
 }
 
-.btn-block {
-  display: block;
-  width: 100%;
-}
-
-.btn-block + .btn-block {
-  margin-top: 0.5rem;
-}
-
 .fade {
   transition: opacity 0.15s linear;
 }
@@ -3709,7 +3716,7 @@ fieldset:disabled .btn {
 }
 
 .dropdown-item:hover, .dropdown-item:focus {
-  color: #16181b;
+  color: #1e2125;
   background-color: #f8f9fa;
 }
 
@@ -4474,28 +4481,120 @@ fieldset:disabled .btn {
   }
 }
 
-.accordion {
+.accordion-button {
+  position: relative;
+  display: flex;
+  align-items: center;
+  width: 100%;
+  padding: 1rem 1.25rem;
+  font-size: 1rem;
+  color: #b2a76d;
+  background-color: transparent;
+  border: 1px solid rgba(0, 0, 0, 0.125);
+  border-radius: 0;
   overflow-anchor: none;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
 }
 
-.accordion > .card {
-  overflow: hidden;
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button {
+    transition: none;
+  }
 }
 
-.accordion > .card:not(:last-of-type) {
-  border-bottom: 0;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
+.accordion-button.collapsed {
+  border-bottom-width: 0;
 }
 
-.accordion > .card:not(:first-of-type) {
+.accordion-button:not(.collapsed) {
+  color: #4a8787;
+  background-color: #eef5f5;
+}
+
+.accordion-button:not(.collapsed)::after {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%234a8787'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  transform: rotate(180deg);
+}
+
+.accordion-button::after {
+  flex-shrink: 0;
+  width: 1.25rem;
+  height: 1.25rem;
+  margin-left: auto;
+  content: "";
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23b2a76d'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-size: 1.25rem;
+  transition: transform 0.2s ease-in-out;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button::after {
+    transition: none;
+  }
+}
+
+.accordion-button:hover {
+  z-index: 2;
+}
+
+.accordion-button:focus {
+  z-index: 3;
+  border-color: #d5cfb0;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(82, 150, 150, 0.25);
+}
+
+.accordion-header {
+  margin-bottom: 0;
+}
+
+.accordion-item:first-of-type .accordion-button {
+  border-top-left-radius: 0.25rem;
+  border-top-right-radius: 0.25rem;
+}
+
+.accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-width: 1px;
+  border-bottom-right-radius: 0.25rem;
+  border-bottom-left-radius: 0.25rem;
+}
+
+.accordion-item:last-of-type .accordion-collapse {
+  border-bottom-width: 1px;
+  border-bottom-right-radius: 0.25rem;
+  border-bottom-left-radius: 0.25rem;
+}
+
+.accordion-collapse {
+  border: solid rgba(0, 0, 0, 0.125);
+  border-width: 0 1px;
+}
+
+.accordion-body {
+  padding: 1rem 1.25rem;
+}
+
+.accordion-flush .accordion-button {
+  border-right: 0;
+  border-left: 0;
+  border-radius: 0;
+}
+
+.accordion-flush .accordion-collapse {
+  border-width: 0;
+}
+
+.accordion-flush .accordion-item:first-of-type .accordion-button {
+  border-top-width: 0;
   border-top-left-radius: 0;
   border-top-right-radius: 0;
 }
 
-.accordion > .card > .card-header {
-  border-radius: 0;
-  margin-bottom: -1px;
+.accordion-flush .accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-width: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
 }
 
 .breadcrumb {
@@ -4508,16 +4607,12 @@ fieldset:disabled .btn {
   border-radius: 0.25rem;
 }
 
-.breadcrumb-item {
-  display: flex;
-}
-
 .breadcrumb-item + .breadcrumb-item {
   padding-left: 0.5rem;
 }
 
 .breadcrumb-item + .breadcrumb-item::before {
-  display: inline-block;
+  float: left;
   padding-right: 0.5rem;
   color: #777777;
   content: "/";
@@ -4672,87 +4767,88 @@ fieldset:disabled .btn {
   position: absolute;
   top: 0;
   right: 0;
+  z-index: 2;
   padding: 1.25rem 1rem;
 }
 
 .alert-primary {
-  color: #2b4e4e;
+  color: #315a5a;
   background-color: #dceaea;
-  border-color: #cfe2e2;
+  border-color: #cbe0e0;
 }
 
 .alert-primary .alert-link {
-  color: #192d2d;
+  color: #274848;
 }
 
 .alert-secondary {
-  color: #5d5739;
+  color: #6b6441;
   background-color: #f0ede2;
-  border-color: #e9e6d6;
+  border-color: #e8e5d3;
 }
 
 .alert-secondary .alert-link {
-  color: #3d3926;
+  color: #565034;
 }
 
 .alert-success {
-  color: #597f85;
+  color: #446266;
   background-color: #eefdff;
-  border-color: #e7fcff;
+  border-color: #e6fcff;
 }
 
 .alert-success .alert-link {
-  color: #456266;
+  color: #364e52;
 }
 
 .alert-info {
-  color: #1d5119;
+  color: #225e1d;
   background-color: #d7ebd6;
-  border-color: #c7e3c5;
+  border-color: #c3e1c1;
 }
 
 .alert-info .alert-link {
-  color: #0f2a0d;
+  color: #1b4b17;
 }
 
 .alert-warning {
-  color: #850063;
+  color: #990072;
   background-color: #ffccf2;
-  border-color: #ffb8ed;
+  border-color: #ffb3ec;
 }
 
 .alert-warning .alert-link {
-  color: #52003d;
+  color: #7a005b;
 }
 
 .alert-danger {
-  color: #850063;
+  color: #990072;
   background-color: #ffccf2;
-  border-color: #ffb8ed;
+  border-color: #ffb3ec;
 }
 
 .alert-danger .alert-link {
-  color: #52003d;
+  color: #7a005b;
 }
 
 .alert-light {
-  color: #858585;
+  color: #666666;
   background-color: white;
   border-color: white;
 }
 
 .alert-light .alert-link {
-  color: #6c6c6c;
+  color: #525252;
 }
 
 .alert-dark {
-  color: #2b4e4e;
+  color: #315a5a;
   background-color: #dceaea;
-  border-color: #cfe2e2;
+  border-color: #cbe0e0;
 }
 
 .alert-dark .alert-link {
-  color: #192d2d;
+  color: #274848;
 }
 
 @-webkit-keyframes progress-bar-stripes {
@@ -4800,8 +4896,8 @@ fieldset:disabled .btn {
 }
 
 .progress-bar-animated {
-  -webkit-animation: progress-bar-stripes 1s linear infinite;
-  animation: progress-bar-stripes 1s linear infinite;
+  -webkit-animation: 1s linear infinite progress-bar-stripes;
+  animation: 1s linear infinite progress-bar-stripes;
 }
 
 @media (prefers-reduced-motion: reduce) {
@@ -5044,131 +5140,131 @@ fieldset:disabled .btn {
 }
 
 .list-group-item-primary {
-  color: #2b4e4e;
-  background-color: #cfe2e2;
+  color: #315a5a;
+  background-color: #dceaea;
 }
 
 .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
-  color: #2b4e4e;
-  background-color: #bfd8d8;
+  color: #315a5a;
+  background-color: #c6d3d3;
 }
 
 .list-group-item-primary.list-group-item-action.active {
   color: #ffffff;
-  background-color: #2b4e4e;
-  border-color: #2b4e4e;
+  background-color: #315a5a;
+  border-color: #315a5a;
 }
 
 .list-group-item-secondary {
-  color: #5d5739;
-  background-color: #e9e6d6;
+  color: #6b6441;
+  background-color: #f0ede2;
 }
 
 .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
-  color: #5d5739;
-  background-color: #e0dcc5;
+  color: #6b6441;
+  background-color: #d8d5cb;
 }
 
 .list-group-item-secondary.list-group-item-action.active {
   color: #ffffff;
-  background-color: #5d5739;
-  border-color: #5d5739;
+  background-color: #6b6441;
+  border-color: #6b6441;
 }
 
 .list-group-item-success {
-  color: #597f85;
-  background-color: #e7fcff;
+  color: #446266;
+  background-color: #eefdff;
 }
 
 .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
-  color: #597f85;
-  background-color: #cef9ff;
+  color: #446266;
+  background-color: #d6e4e6;
 }
 
 .list-group-item-success.list-group-item-action.active {
   color: #ffffff;
-  background-color: #597f85;
-  border-color: #597f85;
+  background-color: #446266;
+  border-color: #446266;
 }
 
 .list-group-item-info {
-  color: #1d5119;
-  background-color: #c7e3c5;
+  color: #225e1d;
+  background-color: #d7ebd6;
 }
 
 .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
-  color: #1d5119;
-  background-color: #b6dbb4;
+  color: #225e1d;
+  background-color: #c2d4c1;
 }
 
 .list-group-item-info.list-group-item-action.active {
   color: #ffffff;
-  background-color: #1d5119;
-  border-color: #1d5119;
+  background-color: #225e1d;
+  border-color: #225e1d;
 }
 
 .list-group-item-warning {
-  color: #850063;
-  background-color: #ffb8ed;
+  color: #990072;
+  background-color: #ffccf2;
 }
 
 .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
-  color: #850063;
-  background-color: #ff9fe7;
+  color: #990072;
+  background-color: #e6b8da;
 }
 
 .list-group-item-warning.list-group-item-action.active {
   color: #ffffff;
-  background-color: #850063;
-  border-color: #850063;
+  background-color: #990072;
+  border-color: #990072;
 }
 
 .list-group-item-danger {
-  color: #850063;
-  background-color: #ffb8ed;
+  color: #990072;
+  background-color: #ffccf2;
 }
 
 .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
-  color: #850063;
-  background-color: #ff9fe7;
+  color: #990072;
+  background-color: #e6b8da;
 }
 
 .list-group-item-danger.list-group-item-action.active {
   color: #ffffff;
-  background-color: #850063;
-  border-color: #850063;
+  background-color: #990072;
+  border-color: #990072;
 }
 
 .list-group-item-light {
-  color: #858585;
+  color: #666666;
   background-color: white;
 }
 
 .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
-  color: #858585;
-  background-color: #f2f2f2;
+  color: #666666;
+  background-color: #e6e6e6;
 }
 
 .list-group-item-light.list-group-item-action.active {
   color: #ffffff;
-  background-color: #858585;
-  border-color: #858585;
+  background-color: #666666;
+  border-color: #666666;
 }
 
 .list-group-item-dark {
-  color: #2b4e4e;
-  background-color: #cfe2e2;
+  color: #315a5a;
+  background-color: #dceaea;
 }
 
 .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
-  color: #2b4e4e;
-  background-color: #bfd8d8;
+  color: #315a5a;
+  background-color: #c6d3d3;
 }
 
 .list-group-item-dark.list-group-item-action.active {
   color: #ffffff;
-  background-color: #2b4e4e;
-  border-color: #2b4e4e;
+  background-color: #315a5a;
+  border-color: #315a5a;
 }
 
 .btn-close {
@@ -5177,8 +5273,7 @@ fieldset:disabled .btn {
   height: 1em;
   padding: 0.25em 0.25em;
   color: #000000;
-  background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23000000' viewBox='0 0 16 16'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") no-repeat center center/1em auto;
-  background-clip: content-box;
+  background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;
   border: 0;
   border-radius: 0.25rem;
   opacity: 0.5;
@@ -5802,7 +5897,7 @@ fieldset:disabled .btn {
   width: 1rem;
   margin-left: -0.5rem;
   content: "";
-  border-bottom: 1px solid #f7f7f7;
+  border-bottom: 1px solid #f0f0f0;
 }
 
 .bs-popover-left, .bs-popover-auto[x-placement^="left"] {
@@ -5832,8 +5927,8 @@ fieldset:disabled .btn {
   padding: 0.5rem 1rem;
   margin-bottom: 0;
   font-size: 1rem;
-  background-color: #f7f7f7;
-  border-bottom: 1px solid #ebebeb;
+  background-color: #f0f0f0;
+  border-bottom: 1px solid #d8d8d8;
   border-top-left-radius: calc(0.3rem - 1px);
   border-top-right-radius: calc(0.3rem - 1px);
 }
@@ -5978,11 +6073,11 @@ fieldset:disabled .btn {
 }
 
 .carousel-control-prev-icon {
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffffff' viewBox='0 0 16 16'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 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='%23ffffff' viewBox='0 0 16 16'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
 }
 
 .carousel-indicators {
@@ -6070,8 +6165,8 @@ fieldset:disabled .btn {
   border: 0.25em solid currentColor;
   border-right-color: transparent;
   border-radius: 50%;
-  -webkit-animation: spinner-border 0.75s linear infinite;
-  animation: spinner-border 0.75s linear infinite;
+  -webkit-animation: 0.75s linear infinite spinner-border;
+  animation: 0.75s linear infinite spinner-border;
 }
 
 .spinner-border-sm {
@@ -6108,8 +6203,8 @@ fieldset:disabled .btn {
   background-color: currentColor;
   border-radius: 50%;
   opacity: 0;
-  -webkit-animation: spinner-grow 0.75s linear infinite;
-  animation: spinner-grow 0.75s linear infinite;
+  -webkit-animation: 0.75s linear infinite spinner-grow;
+  animation: 0.75s linear infinite spinner-grow;
 }
 
 .spinner-grow-sm {
@@ -6117,6 +6212,14 @@ fieldset:disabled .btn {
   height: 1rem;
 }
 
+@media (prefers-reduced-motion: reduce) {
+  .spinner-border,
+  .spinner-grow {
+    -webkit-animation-duration: 1.5s;
+    animation-duration: 1.5s;
+  }
+}
+
 .clearfix::after {
   display: block;
   clear: both;
@@ -6128,7 +6231,7 @@ fieldset:disabled .btn {
 }
 
 .link-primary:hover, .link-primary:focus {
-  color: #7db8b8;
+  color: #75abab;
 }
 
 .link-secondary {
@@ -6136,7 +6239,7 @@ fieldset:disabled .btn {
 }
 
 .link-secondary:hover, .link-secondary:focus {
-  color: #ccc59f;
+  color: #c1b98a;
 }
 
 .link-success {
@@ -6144,7 +6247,7 @@ fieldset:disabled .btn {
 }
 
 .link-success:hover, .link-success:focus {
-  color: #f8feff;
+  color: #bcf7ff;
 }
 
 .link-info {
@@ -6152,7 +6255,7 @@ fieldset:disabled .btn {
 }
 
 .link-info:hover, .link-info:focus {
-  color: #59c950;
+  color: #60b059;
 }
 
 .link-warning {
@@ -6160,7 +6263,7 @@ fieldset:disabled .btn {
 }
 
 .link-warning:hover, .link-warning:focus {
-  color: #ff4dd2;
+  color: #ff33cb;
 }
 
 .link-danger {
@@ -6168,7 +6271,7 @@ fieldset:disabled .btn {
 }
 
 .link-danger:hover, .link-danger:focus {
-  color: #ff4dd2;
+  color: #ff33cb;
 }
 
 .link-light {
@@ -6184,7 +6287,7 @@ fieldset:disabled .btn {
 }
 
 .link-dark:hover, .link-dark:focus {
-  color: #7db8b8;
+  color: #75abab;
 }
 
 .ratio {
@@ -6363,6 +6466,14 @@ fieldset:disabled .btn {
   overflow: hidden !important;
 }
 
+.overflow-visible {
+  overflow: visible !important;
+}
+
+.overflow-scroll {
+  overflow: scroll !important;
+}
+
 .d-inline {
   display: inline !important;
 }
@@ -6375,6 +6486,10 @@ fieldset:disabled .btn {
   display: block !important;
 }
 
+.d-grid {
+  display: grid !important;
+}
+
 .d-table {
   display: table !important;
 }
@@ -6700,6 +6815,30 @@ fieldset:disabled .btn {
   flex-wrap: wrap-reverse !important;
 }
 
+.gap-0 {
+  gap: 0 !important;
+}
+
+.gap-1 {
+  gap: 0.25rem !important;
+}
+
+.gap-2 {
+  gap: 0.5rem !important;
+}
+
+.gap-3 {
+  gap: 1rem !important;
+}
+
+.gap-4 {
+  gap: 1.5rem !important;
+}
+
+.gap-5 {
+  gap: 3rem !important;
+}
+
 .justify-content-start {
   justify-content: flex-start !important;
 }
@@ -7214,23 +7353,55 @@ fieldset:disabled .btn {
   padding-left: 3rem !important;
 }
 
-.font-weight-light {
+.fs-1 {
+  font-size: calc(1.375rem + 1.5vw) !important;
+}
+
+.fs-2 {
+  font-size: calc(1.325rem + 0.9vw) !important;
+}
+
+.fs-3 {
+  font-size: calc(1.3rem + 0.6vw) !important;
+}
+
+.fs-4 {
+  font-size: calc(1.275rem + 0.3vw) !important;
+}
+
+.fs-5 {
+  font-size: 1.25rem !important;
+}
+
+.fs-6 {
+  font-size: 1rem !important;
+}
+
+.fst-italic {
+  font-style: italic !important;
+}
+
+.fst-normal {
+  font-style: normal !important;
+}
+
+.fw-light {
   font-weight: 300 !important;
 }
 
-.font-weight-lighter {
+.fw-lighter {
   font-weight: lighter !important;
 }
 
-.font-weight-normal {
+.fw-normal {
   font-weight: 400 !important;
 }
 
-.font-weight-bold {
+.fw-bold {
   font-weight: 700 !important;
 }
 
-.font-weight-bolder {
+.fw-bolder {
   font-weight: bolder !important;
 }
 
@@ -7398,14 +7569,6 @@ fieldset:disabled .btn {
   text-decoration: line-through !important;
 }
 
-.font-italic {
-  font-style: italic !important;
-}
-
-.font-normal {
-  font-style: normal !important;
-}
-
 .text-break {
   word-wrap: break-word !important;
   word-break: break-word !important;
@@ -7448,11 +7611,19 @@ fieldset:disabled .btn {
   border-radius: 0.25rem !important;
 }
 
-.rounded-sm {
+.rounded-0 {
+  border-radius: 0 !important;
+}
+
+.rounded-1 {
   border-radius: 0.2rem !important;
 }
 
-.rounded-lg {
+.rounded-2 {
+  border-radius: 0.25rem !important;
+}
+
+.rounded-3 {
   border-radius: 0.3rem !important;
 }
 
@@ -7464,10 +7635,6 @@ fieldset:disabled .btn {
   border-radius: 50rem !important;
 }
 
-.rounded-0 {
-  border-radius: 0 !important;
-}
-
 .rounded-top {
   border-top-left-radius: 0.25rem !important;
   border-top-right-radius: 0.25rem !important;
@@ -7515,6 +7682,9 @@ fieldset:disabled .btn {
   .d-sm-block {
     display: block !important;
   }
+  .d-sm-grid {
+    display: grid !important;
+  }
   .d-sm-table {
     display: table !important;
   }
@@ -7569,6 +7739,24 @@ fieldset:disabled .btn {
   .flex-sm-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-sm-0 {
+    gap: 0 !important;
+  }
+  .gap-sm-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-sm-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-sm-3 {
+    gap: 1rem !important;
+  }
+  .gap-sm-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-sm-5 {
+    gap: 3rem !important;
+  }
   .justify-content-sm-start {
     justify-content: flex-start !important;
   }
@@ -7991,6 +8179,9 @@ fieldset:disabled .btn {
   .d-md-block {
     display: block !important;
   }
+  .d-md-grid {
+    display: grid !important;
+  }
   .d-md-table {
     display: table !important;
   }
@@ -8045,6 +8236,24 @@ fieldset:disabled .btn {
   .flex-md-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-md-0 {
+    gap: 0 !important;
+  }
+  .gap-md-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-md-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-md-3 {
+    gap: 1rem !important;
+  }
+  .gap-md-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-md-5 {
+    gap: 3rem !important;
+  }
   .justify-content-md-start {
     justify-content: flex-start !important;
   }
@@ -8467,6 +8676,9 @@ fieldset:disabled .btn {
   .d-lg-block {
     display: block !important;
   }
+  .d-lg-grid {
+    display: grid !important;
+  }
   .d-lg-table {
     display: table !important;
   }
@@ -8521,6 +8733,24 @@ fieldset:disabled .btn {
   .flex-lg-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-lg-0 {
+    gap: 0 !important;
+  }
+  .gap-lg-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-lg-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-lg-3 {
+    gap: 1rem !important;
+  }
+  .gap-lg-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-lg-5 {
+    gap: 3rem !important;
+  }
   .justify-content-lg-start {
     justify-content: flex-start !important;
   }
@@ -8943,6 +9173,9 @@ fieldset:disabled .btn {
   .d-xl-block {
     display: block !important;
   }
+  .d-xl-grid {
+    display: grid !important;
+  }
   .d-xl-table {
     display: table !important;
   }
@@ -8997,6 +9230,24 @@ fieldset:disabled .btn {
   .flex-xl-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-xl-0 {
+    gap: 0 !important;
+  }
+  .gap-xl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xl-5 {
+    gap: 3rem !important;
+  }
   .justify-content-xl-start {
     justify-content: flex-start !important;
   }
@@ -9419,6 +9670,9 @@ fieldset:disabled .btn {
   .d-xxl-block {
     display: block !important;
   }
+  .d-xxl-grid {
+    display: grid !important;
+  }
   .d-xxl-table {
     display: table !important;
   }
@@ -9473,6 +9727,24 @@ fieldset:disabled .btn {
   .flex-xxl-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-xxl-0 {
+    gap: 0 !important;
+  }
+  .gap-xxl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xxl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xxl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xxl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xxl-5 {
+    gap: 3rem !important;
+  }
   .justify-content-xxl-start {
     justify-content: flex-start !important;
   }
@@ -9876,6 +10148,57 @@ fieldset:disabled .btn {
   }
 }
 
+@media (min-width: 1200px) {
+  .fs-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-2 {
+    font-size: 2rem !important;
+  }
+  .fs-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-4 {
+    font-size: 1.5rem !important;
+  }
+  .fs-sm-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-sm-2 {
+    font-size: 2rem !important;
+  }
+  .fs-sm-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-sm-4 {
+    font-size: 1.5rem !important;
+  }
+  .fs-md-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-md-2 {
+    font-size: 2rem !important;
+  }
+  .fs-md-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-md-4 {
+    font-size: 1.5rem !important;
+  }
+  .fs-lg-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-lg-2 {
+    font-size: 2rem !important;
+  }
+  .fs-lg-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-lg-4 {
+    font-size: 1.5rem !important;
+  }
+}
+
 @media print {
   .d-print-inline {
     display: inline !important;
@@ -9886,6 +10209,9 @@ fieldset:disabled .btn {
   .d-print-block {
     display: block !important;
   }
+  .d-print-grid {
+    display: grid !important;
+  }
   .d-print-table {
     display: table !important;
   }
@@ -10681,7 +11007,7 @@ tobago-dropdown {
 }
 
 tobago-dropdown .tobago-dropdown-selected, .tobago-page-menuStore .tobago-dropdown-selected {
-  color: #16181b;
+  color: #1e2125;
   text-decoration: none;
   background-color: #f8f9fa;
 }
diff --git a/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.css.map b/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.css.map
index cf96373..895b9cb 100644
--- a/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago.css","../../scss/tobago-theme.scss","../../scss/_custom.scss","../../node_modules/bootstrap/scss/bootstrap.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","../../node_modules/bootstrap/scss/_variables.scss","../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/m [...]
\ No newline at end of file
+{"version":3,"sources":["tobago.css","../../scss/tobago-theme.scss","../../scss/_custom.scss","../../node_modules/bootstrap/scss/bootstrap.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","../../node_modules/bootstrap/scss/_variables.scss","../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/m [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.min.css b/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.min.css
index 845caa0..9c54aa0 100644
--- a/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#ff00be;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#ffffff;--bs-gray:#777777;--bs-gray-dark:#323232;--bs-primary:#529696;--bs-secondary:#b2a76d;--bs-success:#abf5ff;--bs-info:#389c30;--bs-warning:#ff00be;--bs-danger:#ff00be;--bs-light:#ffffff;--bs-dark:#529696;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Robo [...]
+@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#ff00be;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#ffffff;--bs-gray:#777777;--bs-gray-dark:#323232;--bs-primary:#529696;--bs-secondary:#b2a76d;--bs-success:#abf5ff;--bs-info:#389c30;--bs-warning:#ff00be;--bs-danger:#ff00be;--bs-light:#ffffff;--bs-dark:#529696;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Robo [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.min.css.map b/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.min.css.map
index 525b663..2292f3f 100644
--- a/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-charlotteville/npm/dist/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","dist/css/tobago.css","../../node_modules/bootstrap/scss/vendor/_rfs.scss","tobago.css","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/mixins/_lists.scss","../../node_modules/bootstrap/scss/_images.scss","../../node_modules/bootstrap/scss/mixins/_image.scss","../../node_mod [...]
\ No newline at end of file
+{"version":3,"sources":["../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","dist/css/tobago.css","../../node_modules/bootstrap/scss/vendor/_rfs.scss","tobago.css","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/mixins/_lists.scss","../../node_modules/bootstrap/scss/_images.scss","../../node_modules/bootstrap/scss/mixins/_image.scss","../../node_mod [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-charlotteville/npm/package-lock.json b/tobago-theme/tobago-theme-charlotteville/npm/package-lock.json
index 5ed1a7e..102b6e7 100644
--- a/tobago-theme/tobago-theme-charlotteville/npm/package-lock.json
+++ b/tobago-theme/tobago-theme-charlotteville/npm/package-lock.json
@@ -31,9 +31,9 @@
       }
     },
     "@eslint/eslintrc": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz",
-      "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==",
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz",
+      "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==",
       "dev": true,
       "requires": {
         "ajv": "^6.12.4",
@@ -105,9 +105,9 @@
       "dev": true
     },
     "acorn": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz",
-      "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
       "dev": true
     },
     "acorn-jsx": {
@@ -117,9 +117,9 @@
       "dev": true
     },
     "ajv": {
-      "version": "6.12.5",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz",
-      "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==",
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
       "requires": {
         "fast-deep-equal": "^3.1.1",
@@ -147,9 +147,9 @@
       "dev": true
     },
     "ansi-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-      "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+      "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
       "dev": true
     },
     "ansi-styles": {
@@ -283,9 +283,9 @@
       "dev": true
     },
     "aws4": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
-      "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
       "dev": true
     },
     "balanced-match": {
@@ -309,19 +309,10 @@
       "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
       "dev": true
     },
-    "block-stream": {
-      "version": "0.0.9",
-      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
-      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
-      "dev": true,
-      "requires": {
-        "inherits": "~2.0.0"
-      }
-    },
     "bootstrap": {
-      "version": "5.0.0-alpha2",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.0-alpha2.tgz",
-      "integrity": "sha512-ZhW32+m5ImJoEkDKn43QQk2KovpJFisV/7TAg/RCzDi+B8m7FUgLHWx1Auu0Jt3/DQXDYwp6iwsprP3ej4u3ng==",
+      "version": "5.0.0-alpha3",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.0-alpha3.tgz",
+      "integrity": "sha512-ghwrMFNzqOwfB0nJ1iYbkERd+EK1PblUl7rEEynY35jD0TUlSY6yrjG2M42qI++NhAUBEqGcjmmHkMGs3QyNHA==",
       "dev": true
     },
     "brace-expansion": {
@@ -454,6 +445,12 @@
         "readdirp": "~3.4.0"
       }
     },
+    "chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "dev": true
+    },
     "clean-css": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
@@ -491,17 +488,6 @@
           "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
         "strip-ansi": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -761,6 +747,12 @@
         "ansi-colors": "^4.1.1"
       }
     },
+    "env-paths": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
+      "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
+      "dev": true
+    },
     "error-ex": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -813,13 +805,13 @@
       "dev": true
     },
     "eslint": {
-      "version": "7.10.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.10.0.tgz",
-      "integrity": "sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz",
+      "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@eslint/eslintrc": "^0.1.3",
+        "@eslint/eslintrc": "^0.2.1",
         "ajv": "^6.10.0",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
@@ -828,7 +820,7 @@
         "enquirer": "^2.3.5",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^2.1.0",
-        "eslint-visitor-keys": "^1.3.0",
+        "eslint-visitor-keys": "^2.0.0",
         "espree": "^7.3.0",
         "esquery": "^1.2.0",
         "esutils": "^2.0.2",
@@ -857,19 +849,12 @@
         "v8-compile-cache": "^2.0.3"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-          "dev": true
-        },
         "ansi-styles": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
-          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
           "dev": true,
           "requires": {
-            "@types/color-name": "^1.1.1",
             "color-convert": "^2.0.1"
           }
         },
@@ -948,15 +933,6 @@
           "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
           "dev": true
         },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        },
         "supports-color": {
           "version": "7.2.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -1018,12 +994,20 @@
       "dev": true,
       "requires": {
         "eslint-visitor-keys": "^1.1.0"
+      },
+      "dependencies": {
+        "eslint-visitor-keys": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+          "dev": true
+        }
       }
     },
     "eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
+      "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
       "dev": true
     },
     "espree": {
@@ -1035,6 +1019,14 @@
         "acorn": "^7.4.0",
         "acorn-jsx": "^5.2.0",
         "eslint-visitor-keys": "^1.3.0"
+      },
+      "dependencies": {
+        "eslint-visitor-keys": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+          "dev": true
+        }
       }
     },
     "esprima": {
@@ -1224,6 +1216,15 @@
         "universalify": "^1.0.0"
       }
     },
+    "fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -1237,18 +1238,6 @@
       "dev": true,
       "optional": true
     },
-    "fstream": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
-      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "inherits": "~2.0.0",
-        "mkdirp": ">=0.5 0",
-        "rimraf": "2"
-      }
-    },
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -1399,13 +1388,13 @@
       }
     },
     "globule": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz",
-      "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
+      "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
       "dev": true,
       "requires": {
         "glob": "~7.1.1",
-        "lodash": "~4.17.12",
+        "lodash": "~4.17.10",
         "minimatch": "~3.0.2"
       }
     },
@@ -1422,12 +1411,12 @@
       "dev": true
     },
     "har-validator": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+      "version": "5.1.5",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
       "dev": true,
       "requires": {
-        "ajv": "^6.5.5",
+        "ajv": "^6.12.3",
         "har-schema": "^2.0.0"
       }
     },
@@ -1508,9 +1497,9 @@
       }
     },
     "import-fresh": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
-      "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz",
+      "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==",
       "dev": true,
       "requires": {
         "parent-module": "^1.0.0",
@@ -1540,12 +1529,6 @@
       "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
       "dev": true
     },
-    "in-publish": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz",
-      "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==",
-      "dev": true
-    },
     "indent-string": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
@@ -1686,9 +1669,9 @@
       "dev": true
     },
     "js-base64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz",
-      "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+      "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
       "dev": true
     },
     "js-tokens": {
@@ -1828,16 +1811,6 @@
         "signal-exit": "^3.0.0"
       }
     },
-    "lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-      "dev": true,
-      "requires": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
-      }
-    },
     "map-obj": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
@@ -1923,6 +1896,25 @@
       "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
+    "minipass": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+      "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      }
+    },
+    "minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      }
+    },
     "mkdirp": {
       "version": "0.5.5",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
@@ -1939,9 +1931,9 @@
       "dev": true
     },
     "nan": {
-      "version": "2.14.1",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
-      "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
+      "version": "2.14.2",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+      "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
       "dev": true
     },
     "natural-compare": {
@@ -1957,30 +1949,46 @@
       "dev": true
     },
     "node-gyp": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
-      "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
-      "dev": true,
-      "requires": {
-        "fstream": "^1.0.0",
-        "glob": "^7.0.3",
-        "graceful-fs": "^4.1.2",
-        "mkdirp": "^0.5.0",
-        "nopt": "2 || 3",
-        "npmlog": "0 || 1 || 2 || 3 || 4",
-        "osenv": "0",
-        "request": "^2.87.0",
-        "rimraf": "2",
-        "semver": "~5.3.0",
-        "tar": "^2.0.0",
-        "which": "1"
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz",
+      "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==",
+      "dev": true,
+      "requires": {
+        "env-paths": "^2.2.0",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.2.3",
+        "nopt": "^5.0.0",
+        "npmlog": "^4.1.2",
+        "request": "^2.88.2",
+        "rimraf": "^3.0.2",
+        "semver": "^7.3.2",
+        "tar": "^6.0.2",
+        "which": "^2.0.2"
       },
       "dependencies": {
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
         "semver": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
-          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+          "version": "7.3.2",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+          "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
           "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
@@ -1991,23 +1999,22 @@
       "dev": true
     },
     "node-sass": {
-      "version": "4.14.1",
-      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz",
-      "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-5.0.0.tgz",
+      "integrity": "sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw==",
       "dev": true,
       "requires": {
         "async-foreach": "^0.1.3",
         "chalk": "^1.1.1",
-        "cross-spawn": "^3.0.0",
+        "cross-spawn": "^7.0.3",
         "gaze": "^1.0.0",
         "get-stdin": "^4.0.1",
         "glob": "^7.0.3",
-        "in-publish": "^2.0.0",
         "lodash": "^4.17.15",
         "meow": "^3.7.0",
         "mkdirp": "^0.5.1",
         "nan": "^2.13.2",
-        "node-gyp": "^3.8.0",
+        "node-gyp": "^7.1.0",
         "npmlog": "^4.0.0",
         "request": "^2.88.0",
         "sass-graph": "2.2.5",
@@ -2041,15 +2048,37 @@
           }
         },
         "cross-spawn": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
-          "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
           "dev": true,
           "requires": {
-            "lru-cache": "^4.0.1",
-            "which": "^1.2.9"
+            "shebang-regex": "^3.0.0"
           }
         },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+          "dev": true
+        },
         "strip-ansi": {
           "version": "3.0.1",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -2064,13 +2093,22 @@
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
           "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
           "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
     "nopt": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
       "dev": true,
       "requires": {
         "abbrev": "1"
@@ -2256,28 +2294,6 @@
         "word-wrap": "^1.2.3"
       }
     },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "dev": true
-    },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-      "dev": true
-    },
-    "osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "dev": true,
-      "requires": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.0"
-      }
-    },
     "p-limit": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -2321,10 +2337,13 @@
       }
     },
     "path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-      "dev": true
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+      "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+      "dev": true,
+      "requires": {
+        "pinkie-promise": "^2.0.0"
+      }
     },
     "path-is-absolute": {
       "version": "1.0.1",
@@ -2647,12 +2666,6 @@
       "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "dev": true
     },
-    "pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-      "dev": true
-    },
     "psl": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -2710,15 +2723,6 @@
             "path-exists": "^2.0.0",
             "pinkie-promise": "^2.0.0"
           }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
         }
       }
     },
@@ -2842,9 +2846,9 @@
       }
     },
     "rollup": {
-      "version": "2.28.2",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.28.2.tgz",
-      "integrity": "sha512-8txbsFBFLmm9Xdt4ByTOGa9Muonmc8MfNjnGAR8U8scJlF1ZW7AgNZa7aqBXaKtlvnYP/ab++fQIq9dB9NWUbg==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.1.tgz",
+      "integrity": "sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==",
       "dev": true,
       "requires": {
         "fsevents": "~2.1.2"
@@ -3028,13 +3032,31 @@
       }
     },
     "string-width": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
-      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+      "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
       "dev": true,
       "requires": {
+        "emoji-regex": "^7.0.1",
         "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^4.0.0"
+        "strip-ansi": "^5.1.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
       }
     },
     "string.prototype.padend": {
@@ -3099,12 +3121,12 @@
       }
     },
     "strip-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+      "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
       "dev": true,
       "requires": {
-        "ansi-regex": "^3.0.0"
+        "ansi-regex": "^5.0.0"
       }
     },
     "strip-bom": {
@@ -3150,45 +3172,28 @@
         "lodash": "^4.17.14",
         "slice-ansi": "^2.1.0",
         "string-width": "^3.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
       }
     },
     "tar": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
-      "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz",
+      "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==",
       "dev": true,
       "requires": {
-        "block-stream": "*",
-        "fstream": "^1.0.12",
-        "inherits": "2"
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^3.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        }
       }
     },
     "text-table": {
@@ -3302,9 +3307,9 @@
       "dev": true
     },
     "typescript": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz",
-      "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==",
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz",
+      "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==",
       "dev": true
     },
     "universalify": {
@@ -3335,9 +3340,9 @@
       "dev": true
     },
     "v8-compile-cache": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
-      "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
+      "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
       "dev": true
     },
     "validate-npm-package-license": {
@@ -3388,6 +3393,33 @@
       "dev": true,
       "requires": {
         "string-width": "^1.0.2 || 2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
       }
     },
     "word-wrap": {
@@ -3413,17 +3445,6 @@
           "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
         "strip-ansi": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -3457,9 +3478,9 @@
       "dev": true
     },
     "yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true
     },
     "yargs": {
@@ -3480,12 +3501,6 @@
         "yargs-parser": "^13.1.2"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
         "find-up": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
@@ -3505,15 +3520,6 @@
             "path-exists": "^3.0.0"
           }
         },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
         "p-locate": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
@@ -3523,31 +3529,11 @@
             "p-limit": "^2.0.0"
           }
         },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
           "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
         }
       }
     },
diff --git a/tobago-theme/tobago-theme-charlotteville/npm/package.json b/tobago-theme/tobago-theme-charlotteville/npm/package.json
index 2fe369e..710de7b 100644
--- a/tobago-theme/tobago-theme-charlotteville/npm/package.json
+++ b/tobago-theme/tobago-theme-charlotteville/npm/package.json
@@ -50,19 +50,19 @@
   },
   "devDependencies": {
     "tobago-core": "file:../../../tobago-core/npm",
-    "ajv": "^6.12.5",
+    "ajv": "^6.12.6",
     "ajv-keywords": "^3.5.2",
     "autoprefixer": "^9.8.6",
-    "bootstrap": "5.0.0-alpha2",
+    "bootstrap": "5.0.0-alpha3",
     "clean-css-cli": "^4.3.0",
-    "eslint": "^7.10.0",
+    "eslint": "^7.13.0",
     "eslint-plugin-compat": "^3.8.0",
-    "node-sass": "^4.14.1",
+    "node-sass": "^5.0.0",
     "npm-run-all": "^4.1.5",
     "popper.js": "^1.16.1",
     "postcss-cli": "^7.1.2",
-    "rollup": "^2.28.2",
+    "rollup": "^2.33.1",
     "tslint": "^6.1.3",
-    "typescript": "^4.0.3"
+    "typescript": "^4.0.5"
   }
 }
diff --git a/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.css b/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.css
index ab7a551..c3fadaa 100644
--- a/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.css
+++ b/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.css
@@ -63,7 +63,7 @@
 }
 
 /*!
- * Bootstrap v5.0.0-alpha2 (https://getbootstrap.com/)
+ * Bootstrap v5.0.0-alpha3 (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)
@@ -90,7 +90,7 @@
   --bs-danger: #ffb243;
   --bs-light: #777777;
   --bs-dark: #323232;
-  --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+  --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
   --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
   --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
 }
@@ -101,6 +101,12 @@
   box-sizing: border-box;
 }
 
+@media (prefers-reduced-motion: no-preference) {
+  :root {
+    scroll-behavior: smooth;
+  }
+}
+
 body {
   margin: 0;
   font-family: var(--bs-font-sans-serif);
@@ -295,7 +301,6 @@ pre {
   margin-bottom: 1rem;
   overflow: auto;
   font-size: 0.875em;
-  -ms-overflow-style: scrollbar;
 }
 
 pre code {
@@ -374,8 +379,8 @@ button {
 }
 
 button:focus {
-  outline: 1px dotted;
-  outline: 5px auto -webkit-focus-ring-color;
+  outline: dotted 1px;
+  outline: -webkit-focus-ring-color auto 5px;
 }
 
 input,
@@ -390,11 +395,6 @@ textarea {
 }
 
 button,
-input {
-  overflow: visible;
-}
-
-button,
 select {
   text-transform: none;
 }
@@ -448,7 +448,6 @@ legend {
   margin-bottom: 0.5rem;
   font-size: calc(1.275rem + 0.3vw);
   line-height: inherit;
-  white-space: normal;
 }
 
 @media (min-width: 1200px) {
@@ -488,6 +487,10 @@ legend + * {
   padding: 0;
 }
 
+::file-selector-button {
+  font: inherit;
+}
+
 ::-webkit-file-upload-button {
   font: inherit;
   -webkit-appearance: button;
@@ -1855,75 +1858,75 @@ progress {
 }
 
 .table-primary {
-  --bs-table-bg: #f4dcb8;
-  --bs-table-striped-bg: #e8d1af;
+  --bs-table-bg: #f7e6cc;
+  --bs-table-striped-bg: #ebdbc2;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #dcc6a6;
+  --bs-table-active-bg: #decfb8;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #e2ccaa;
+  --bs-table-hover-bg: #e4d5bd;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #dcc6a6;
+  border-color: #decfb8;
 }
 
 .table-secondary {
-  --bs-table-bg: #d6b8f0;
-  --bs-table-striped-bg: #cbafe4;
+  --bs-table-bg: #e2ccf5;
+  --bs-table-striped-bg: #d7c2e9;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #c1a6d8;
+  --bs-table-active-bg: #cbb8dd;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #c6aade;
+  --bs-table-hover-bg: #d1bde3;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #c1a6d8;
+  border-color: #cbb8dd;
 }
 
 .table-success {
-  --bs-table-bg: #bfd5ba;
-  --bs-table-striped-bg: #b5cab1;
+  --bs-table-bg: #d2e1ce;
+  --bs-table-striped-bg: #c8d6c4;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #acc0a7;
+  --bs-table-active-bg: #bdcbb9;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #b1c5ac;
+  --bs-table-hover-bg: #c2d0bf;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #acc0a7;
+  border-color: #bdcbb9;
 }
 
 .table-info {
-  --bs-table-bg: #bdbce0;
-  --bs-table-striped-bg: #b4b3d5;
+  --bs-table-bg: #d0cfe9;
+  --bs-table-striped-bg: #c6c5dd;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #aaa9ca;
+  --bs-table-active-bg: #bbbad2;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #afaecf;
+  --bs-table-hover-bg: #c0bfd8;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #aaa9ca;
+  border-color: #bbbad2;
 }
 
 .table-warning {
-  --bs-table-bg: #e9d5bd;
-  --bs-table-striped-bg: #ddcab4;
+  --bs-table-bg: #f0e1d0;
+  --bs-table-striped-bg: #e4d6c6;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #d2c0aa;
+  --bs-table-active-bg: #d8cbbb;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #d8c5af;
+  --bs-table-hover-bg: #ded0c0;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #d2c0aa;
+  border-color: #d8cbbb;
 }
 
 .table-danger {
-  --bs-table-bg: #ffe9ca;
-  --bs-table-striped-bg: #f2ddc0;
+  --bs-table-bg: #fff0d9;
+  --bs-table-striped-bg: #f2e4ce;
   --bs-table-striped-color: #000000;
-  --bs-table-active-bg: #e6d2b6;
+  --bs-table-active-bg: #e6d8c3;
   --bs-table-active-color: #000000;
-  --bs-table-hover-bg: #ecd8bb;
+  --bs-table-hover-bg: #ecdec9;
   --bs-table-hover-color: #000000;
   color: #000000;
-  border-color: #e6d2b6;
+  border-color: #e6d8c3;
 }
 
 .table-light {
@@ -2023,7 +2026,6 @@ progress {
 .form-control {
   display: block;
   width: 100%;
-  min-height: calc(1.5em + 0.75rem + 4px);
   padding: 0.375rem 0.75rem;
   font-size: 1rem;
   font-weight: 400;
@@ -2045,6 +2047,14 @@ progress {
   }
 }
 
+.form-control[type="file"] {
+  overflow: hidden;
+}
+
+.form-control[type="file"]:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+
 .form-control:focus {
   color: #a0a0a0;
   background-color: #000000;
@@ -2053,6 +2063,10 @@ progress {
   box-shadow: 0 0 0 0.25rem rgba(214, 130, 0, 0.25);
 }
 
+.form-control::-webkit-date-and-time-value {
+  height: 1.5em;
+}
+
 .form-control::-moz-placeholder {
   color: #777777;
   opacity: 1;
@@ -2078,6 +2092,60 @@ progress {
   opacity: 1;
 }
 
+.form-control::file-selector-button {
+  padding: 0.375rem 0.75rem;
+  margin: -0.375rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+  margin-inline-end: 0.75rem;
+  color: #a0a0a0;
+  background-color: #e9ecef;
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: 2px;
+  border-radius: 0;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .form-control::file-selector-button {
+    transition: none;
+  }
+}
+
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+  background-color: #dde0e3;
+}
+
+.form-control::-webkit-file-upload-button {
+  padding: 0.375rem 0.75rem;
+  margin: -0.375rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+  margin-inline-end: 0.75rem;
+  color: #a0a0a0;
+  background-color: #e9ecef;
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: 2px;
+  border-radius: 0;
+  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .form-control::-webkit-file-upload-button {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+  background-color: #dde0e3;
+}
+
 .form-control-plaintext {
   display: block;
   width: 100%;
@@ -2102,6 +2170,20 @@ progress {
   border-radius: 0.2rem;
 }
 
+.form-control-sm::file-selector-button {
+  padding: 0.25rem 0.5rem;
+  margin: -0.25rem -0.5rem;
+  -webkit-margin-end: 0.5rem;
+  margin-inline-end: 0.5rem;
+}
+
+.form-control-sm::-webkit-file-upload-button {
+  padding: 0.25rem 0.5rem;
+  margin: -0.25rem -0.5rem;
+  -webkit-margin-end: 0.5rem;
+  margin-inline-end: 0.5rem;
+}
+
 .form-control-lg {
   min-height: calc(1.5em + 1rem + 4px);
   padding: 0.5rem 1rem;
@@ -2109,23 +2191,55 @@ progress {
   border-radius: 0.3rem;
 }
 
+.form-control-lg::file-selector-button {
+  padding: 0.5rem 1rem;
+  margin: -0.5rem -1rem;
+  -webkit-margin-end: 1rem;
+  margin-inline-end: 1rem;
+}
+
+.form-control-lg::-webkit-file-upload-button {
+  padding: 0.5rem 1rem;
+  margin: -0.5rem -1rem;
+  -webkit-margin-end: 1rem;
+  margin-inline-end: 1rem;
+}
+
+textarea.form-control {
+  min-height: calc(1.5em + 0.75rem + 4px);
+}
+
+textarea.form-control-sm {
+  min-height: calc(1.5em + 0.5rem + 4px);
+}
+
+textarea.form-control-lg {
+  min-height: calc(1.5em + 1rem + 4px);
+}
+
 .form-control-color {
   max-width: 3rem;
+  height: auto;
   padding: 0.375rem;
 }
 
+.form-control-color:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+
 .form-control-color::-moz-color-swatch {
+  height: 1.5em;
   border-radius: 0.25rem;
 }
 
 .form-control-color::-webkit-color-swatch {
+  height: 1.5em;
   border-radius: 0.25rem;
 }
 
 .form-select {
   display: block;
   width: 100%;
-  height: calc(1.5em + 0.75rem + 4px);
   padding: 0.375rem 1.75rem 0.375rem 0.75rem;
   font-size: 1rem;
   font-weight: 400;
@@ -2150,13 +2264,7 @@ progress {
   box-shadow: 0 0 0 0.25rem rgba(214, 130, 0, 0.25);
 }
 
-.form-select:focus::-ms-value {
-  color: #a0a0a0;
-  background-color: #000000;
-}
-
 .form-select[multiple], .form-select[size]:not([size="1"]) {
-  height: auto;
   padding-right: 0.75rem;
   background-image: none;
 }
@@ -2172,7 +2280,6 @@ progress {
 }
 
 .form-select-sm {
-  height: calc(1.5em + 0.5rem + 4px);
   padding-top: 0.25rem;
   padding-bottom: 0.25rem;
   padding-left: 0.5rem;
@@ -2180,7 +2287,6 @@ progress {
 }
 
 .form-select-lg {
-  height: calc(1.5em + 1rem + 4px);
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
   padding-left: 1rem;
@@ -2263,11 +2369,11 @@ progress {
 .form-check-input:disabled {
   pointer-events: none;
   filter: none;
-  opacity: .5;
+  opacity: 0.5;
 }
 
 .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {
-  opacity: .5;
+  opacity: 0.5;
 }
 
 .form-switch {
@@ -2302,93 +2408,10 @@ progress {
   pointer-events: none;
 }
 
-.form-file {
-  --bs-form-file-height: calc(1.5em + 0.75rem + 4px);
-  position: relative;
-}
-
-.form-file-input {
-  position: relative;
-  z-index: 2;
-  width: 100%;
-  height: var(--bs-form-file-height);
-  margin: 0;
-  opacity: 0;
-}
-
-.form-file-input:focus-within ~ .form-file-label {
-  border-color: #ffbd57;
-  box-shadow: 0 0 0 0.25rem rgba(214, 130, 0, 0.25);
-}
-
-.form-file-input[disabled] ~ .form-file-label .form-file-text,
-.form-file-input:disabled ~ .form-file-label .form-file-text {
-  background-color: #323232;
-}
-
-.form-file-label {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-  z-index: 1;
-  display: flex;
-  height: var(--bs-form-file-height);
-  border-color: #777777;
-  border-radius: 0.25rem;
-}
-
-.form-file-text {
-  display: block;
-  flex-grow: 1;
-  padding: 0.375rem 0.75rem;
-  overflow: hidden;
-  font-weight: 400;
-  line-height: 1.5;
-  color: #a0a0a0;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  background-color: #000000;
-  border-color: inherit;
-  border-style: solid;
-  border-width: 2px;
-  border-top-left-radius: inherit;
-  border-bottom-left-radius: inherit;
-}
-
-.form-file-button {
-  display: block;
-  flex-shrink: 0;
-  padding: 0.375rem 0.75rem;
-  margin-left: -2px;
-  line-height: 1.5;
-  color: #a0a0a0;
-  background-color: #e9ecef;
-  border-color: inherit;
-  border-style: solid;
-  border-width: 2px;
-  border-top-right-radius: inherit;
-  border-bottom-right-radius: inherit;
-}
-
-.form-file-sm {
-  --bs-form-file-height: calc(1.5em + 0.5rem + 4px);
-  font-size: 0.875rem;
-}
-
-.form-file-sm .form-file-text,
-.form-file-sm .form-file-button {
-  padding: 0.25rem 0.5rem;
-}
-
-.form-file-lg {
-  --bs-form-file-height: calc(1.5em + 1rem + 4px);
-  font-size: 1.25rem;
-}
-
-.form-file-lg .form-file-text,
-.form-file-lg .form-file-button {
-  padding: 0.5rem 1rem;
+.btn-check[disabled] + .btn, .btn-check:disabled + .btn {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.65;
 }
 
 .form-range {
@@ -2413,10 +2436,6 @@ progress {
   box-shadow: 0 0 0 1px #000000, 0 0 0 0.25rem rgba(214, 130, 0, 0.25);
 }
 
-.form-range:focus::-ms-thumb {
-  box-shadow: 0 0 0 1px #000000, 0 0 0 0.25rem rgba(214, 130, 0, 0.25);
-}
-
 .form-range::-moz-focus-outer {
   border: 0;
 }
@@ -2442,7 +2461,7 @@ progress {
 }
 
 .form-range::-webkit-slider-thumb:active {
-  background-color: #ffd18a;
+  background-color: #f3dab3;
 }
 
 .form-range::-webkit-slider-runnable-track {
@@ -2475,7 +2494,7 @@ progress {
 }
 
 .form-range::-moz-range-thumb:active {
-  background-color: #ffd18a;
+  background-color: #f3dab3;
 }
 
 .form-range::-moz-range-track {
@@ -2488,66 +2507,107 @@ progress {
   border-radius: 1rem;
 }
 
-.form-range::-ms-thumb {
-  width: 1rem;
-  height: 1rem;
-  margin-top: 0;
-  margin-right: 0.25rem;
-  margin-left: 0.25rem;
-  background-color: #d68200;
-  border: 0;
-  border-radius: 1rem;
-  -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-  appearance: none;
+.form-range:disabled {
+  pointer-events: none;
+}
+
+.form-range:disabled::-webkit-slider-thumb {
+  background-color: #adb5bd;
+}
+
+.form-range:disabled::-moz-range-thumb {
+  background-color: #adb5bd;
+}
+
+.form-floating {
+  position: relative;
+}
+
+.form-floating > .form-control,
+.form-floating > .form-select {
+  height: calc(3.5rem + 4px);
+  padding: 1rem 0.75rem;
+}
+
+.form-floating > label {
+  position: absolute;
+  top: 0;
+  left: 0;
+  height: 100%;
+  padding: 1rem 0.75rem;
+  pointer-events: none;
+  border: 2px solid transparent;
+  transform-origin: 0 0;
+  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
 }
 
 @media (prefers-reduced-motion: reduce) {
-  .form-range::-ms-thumb {
-    -ms-transition: none;
+  .form-floating > label {
     transition: none;
   }
 }
 
-.form-range::-ms-thumb:active {
-  background-color: #ffd18a;
+.form-floating > .form-control::-moz-placeholder {
+  color: transparent;
 }
 
-.form-range::-ms-track {
-  width: 100%;
-  height: 0.5rem;
+.form-floating > .form-control:-ms-input-placeholder {
   color: transparent;
-  cursor: pointer;
-  background-color: transparent;
-  border-color: transparent;
-  border-width: 0.5rem;
 }
 
-.form-range::-ms-fill-lower {
-  background-color: #dee2e6;
-  border-radius: 1rem;
+.form-floating > .form-control::-ms-input-placeholder {
+  color: transparent;
 }
 
-.form-range::-ms-fill-upper {
-  margin-right: 15px;
-  background-color: #dee2e6;
-  border-radius: 1rem;
+.form-floating > .form-control::placeholder {
+  color: transparent;
 }
 
-.form-range:disabled {
-  pointer-events: none;
+.form-floating > .form-control:not(:-moz-placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
 }
 
-.form-range:disabled::-webkit-slider-thumb {
-  background-color: #adb5bd;
+.form-floating > .form-control:not(:-ms-input-placeholder) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
 }
 
-.form-range:disabled::-moz-range-thumb {
-  background-color: #adb5bd;
+.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
 }
 
-.form-range:disabled::-ms-thumb {
-  background-color: #adb5bd;
+.form-floating > .form-control:-webkit-autofill {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-select {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:focus ~ label,
+.form-floating > .form-control:not(:placeholder-shown) ~ label,
+.form-floating > .form-select ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:-webkit-autofill ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
 }
 
 .input-group {
@@ -2559,8 +2619,7 @@ progress {
 }
 
 .input-group > .form-control,
-.input-group > .form-select,
-.input-group > .form-file {
+.input-group > .form-select {
   position: relative;
   flex: 1 1 auto;
   width: 1%;
@@ -2568,25 +2627,10 @@ progress {
 }
 
 .input-group > .form-control:focus,
-.input-group > .form-select:focus,
-.input-group > .form-file .form-file-input:focus ~ .form-file-label {
+.input-group > .form-select:focus {
   z-index: 3;
 }
 
-.input-group > .form-file > .form-file-input:focus {
-  z-index: 4;
-}
-
-.input-group > .form-file:not(:last-child) > .form-file-label {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-
-.input-group > .form-file:not(:first-child) > .form-file-label {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-
 .input-group .btn {
   position: relative;
   z-index: 2;
@@ -2611,14 +2655,6 @@ progress {
   border-radius: 0.25rem;
 }
 
-.input-group-lg > .form-control {
-  min-height: calc(1.5em + 1rem + 4px);
-}
-
-.input-group-lg > .form-select {
-  height: calc(1.5em + 1rem + 4px);
-}
-
 .input-group-lg > .form-control,
 .input-group-lg > .form-select,
 .input-group-lg > .input-group-text,
@@ -2628,14 +2664,6 @@ progress {
   border-radius: 0.3rem;
 }
 
-.input-group-sm > .form-control {
-  min-height: calc(1.5em + 0.5rem + 4px);
-}
-
-.input-group-sm > .form-select {
-  height: calc(1.5em + 0.5rem + 4px);
-}
-
 .input-group-sm > .form-control,
 .input-group-sm > .form-select,
 .input-group-sm > .input-group-text,
@@ -2650,13 +2678,19 @@ progress {
   padding-right: 1.75rem;
 }
 
-.input-group > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),
-.input-group > .dropdown-toggle:nth-last-child(n + 3) {
+.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {
   border-top-right-radius: 0;
   border-bottom-right-radius: 0;
 }
 
-.input-group > :not(:first-child):not(.dropdown-menu) {
+.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
   margin-left: -2px;
   border-top-left-radius: 0;
   border-bottom-left-radius: 0;
@@ -2743,15 +2777,6 @@ progress {
   margin-left: .5em;
 }
 
-.was-validated .form-file-input:valid ~ .form-file-label, .form-file-input.is-valid ~ .form-file-label {
-  border-color: #1C690A;
-}
-
-.was-validated .form-file-input:valid:focus ~ .form-file-label, .form-file-input.is-valid:focus ~ .form-file-label {
-  border-color: #1C690A;
-  box-shadow: 0 0 0 0.25rem rgba(28, 105, 10, 0.25);
-}
-
 .invalid-feedback {
   display: none;
   width: 100%;
@@ -2784,7 +2809,7 @@ progress {
 .was-validated .form-control:invalid, .form-control.is-invalid {
   border-color: #ffb243;
   padding-right: calc(1.5em + 0.75rem);
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ffb243' 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='%23ffb243' stroke='none'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ffb243'%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='%23ffb243' stroke='none'/%3e%3c/svg%3e");
   background-repeat: no-repeat;
   background-position: right calc(0.375em + 0.1875rem) center;
   background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
@@ -2803,7 +2828,7 @@ progress {
 .was-validated .form-select:invalid, .form-select.is-invalid {
   border-color: #ffb243;
   padding-right: calc(0.75em + 2.3125rem);
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23323232' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ffb243' 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 [...]
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23323232' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ffb243'%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 [...]
   background-position: right 0.75rem center, center right 1.75rem;
   background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
 }
@@ -2833,15 +2858,6 @@ progress {
   margin-left: .5em;
 }
 
-.was-validated .form-file-input:invalid ~ .form-file-label, .form-file-input.is-invalid ~ .form-file-label {
-  border-color: #ffb243;
-}
-
-.was-validated .form-file-input:invalid:focus ~ .form-file-label, .form-file-input.is-invalid:focus ~ .form-file-label {
-  border-color: #ffb243;
-  box-shadow: 0 0 0 0.25rem rgba(255, 178, 67, 0.25);
-}
-
 .btn {
   display: inline-block;
   font-weight: 400;
@@ -2892,14 +2908,14 @@ fieldset:disabled .btn {
 
 .btn-primary:hover {
   color: #000000;
-  background-color: #fc9900;
-  border-color: #f09100;
+  background-color: #dc9526;
+  border-color: #da8f1a;
 }
 
 .btn-check:focus + .btn-primary, .btn-primary:focus {
   color: #000000;
-  background-color: #fc9900;
-  border-color: #f09100;
+  background-color: #dc9526;
+  border-color: #da8f1a;
   box-shadow: 0 0 0 0.25rem rgba(182, 111, 0, 0.5);
 }
 
@@ -2907,8 +2923,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,
 .show > .btn-primary.dropdown-toggle {
   color: #000000;
-  background-color: #ff9f0a;
-  border-color: #f09100;
+  background-color: #de9b33;
+  border-color: #da8f1a;
 }
 
 .btn-check:checked + .btn-primary:focus,
@@ -2931,14 +2947,14 @@ fieldset:disabled .btn {
 
 .btn-secondary:hover {
   color: #fff;
-  background-color: #5800a5;
-  border-color: #510098;
+  background-color: #5c00ad;
+  border-color: #5600a2;
 }
 
 .btn-check:focus + .btn-secondary, .btn-secondary:focus {
   color: #fff;
-  background-color: #5800a5;
-  border-color: #510098;
+  background-color: #5c00ad;
+  border-color: #5600a2;
   box-shadow: 0 0 0 0.25rem rgba(130, 38, 211, 0.5);
 }
 
@@ -2946,8 +2962,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,
 .show > .btn-secondary.dropdown-toggle {
   color: #fff;
-  background-color: #510098;
-  border-color: #4a008b;
+  background-color: #5600a2;
+  border-color: #510098;
 }
 
 .btn-check:checked + .btn-secondary:focus,
@@ -2970,14 +2986,14 @@ fieldset:disabled .btn {
 
 .btn-success:hover {
   color: #fff;
-  background-color: #134607;
-  border-color: #103a06;
+  background-color: #185909;
+  border-color: #165408;
 }
 
 .btn-check:focus + .btn-success, .btn-success:focus {
   color: #fff;
-  background-color: #134607;
-  border-color: #103a06;
+  background-color: #185909;
+  border-color: #165408;
   box-shadow: 0 0 0 0.25rem rgba(62, 128, 47, 0.5);
 }
 
@@ -2985,8 +3001,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-success, .btn-success:active, .btn-success.active,
 .show > .btn-success.dropdown-toggle {
   color: #fff;
-  background-color: #103a06;
-  border-color: #0c2f04;
+  background-color: #165408;
+  border-color: #154f08;
 }
 
 .btn-check:checked + .btn-success:focus,
@@ -3009,14 +3025,14 @@ fieldset:disabled .btn {
 
 .btn-info:hover {
   color: #fff;
-  background-color: #0e0b6c;
-  border-color: #0d0961;
+  background-color: #100c7a;
+  border-color: #0f0b72;
 }
 
 .btn-check:focus + .btn-info, .btn-info:focus {
   color: #fff;
-  background-color: #0e0b6c;
-  border-color: #0d0961;
+  background-color: #100c7a;
+  border-color: #0f0b72;
   box-shadow: 0 0 0 0.25rem rgba(54, 50, 160, 0.5);
 }
 
@@ -3024,8 +3040,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-info, .btn-info:active, .btn-info.active,
 .show > .btn-info.dropdown-toggle {
   color: #fff;
-  background-color: #0d0961;
-  border-color: #0b0855;
+  background-color: #0f0b72;
+  border-color: #0e0b6b;
 }
 
 .btn-check:checked + .btn-info:focus,
@@ -3048,14 +3064,14 @@ fieldset:disabled .btn {
 
 .btn-warning:hover {
   color: #000000;
-  background-color: #d57c16;
-  border-color: #c97614;
+  background-color: #be7f36;
+  border-color: #ba772a;
 }
 
 .btn-check:focus + .btn-warning, .btn-warning:focus {
   color: #000000;
-  background-color: #d57c16;
-  border-color: #c97614;
+  background-color: #be7f36;
+  border-color: #ba772a;
   box-shadow: 0 0 0 0.25rem rgba(151, 88, 15, 0.5);
 }
 
@@ -3063,8 +3079,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,
 .show > .btn-warning.dropdown-toggle {
   color: #000000;
-  background-color: #e08317;
-  border-color: #c97614;
+  background-color: #c18641;
+  border-color: #ba772a;
 }
 
 .btn-check:checked + .btn-warning:focus,
@@ -3087,14 +3103,14 @@ fieldset:disabled .btn {
 
 .btn-danger:hover {
   color: #000000;
-  background-color: #ffc269;
-  border-color: #ffbc5d;
+  background-color: #ffbe5f;
+  border-color: #ffba56;
 }
 
 .btn-check:focus + .btn-danger, .btn-danger:focus {
   color: #000000;
-  background-color: #ffc269;
-  border-color: #ffbc5d;
+  background-color: #ffbe5f;
+  border-color: #ffba56;
   box-shadow: 0 0 0 0.25rem rgba(217, 151, 57, 0.5);
 }
 
@@ -3102,8 +3118,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,
 .show > .btn-danger.dropdown-toggle {
   color: #000000;
-  background-color: #ffc776;
-  border-color: #ffbc5d;
+  background-color: #ffc169;
+  border-color: #ffba56;
 }
 
 .btn-check:checked + .btn-danger:focus,
@@ -3126,14 +3142,14 @@ fieldset:disabled .btn {
 
 .btn-light:hover {
   color: #000000;
-  background-color: #8a8a8a;
-  border-color: #848484;
+  background-color: #8b8b8b;
+  border-color: #858585;
 }
 
 .btn-check:focus + .btn-light, .btn-light:focus {
   color: #000000;
-  background-color: #8a8a8a;
-  border-color: #848484;
+  background-color: #8b8b8b;
+  border-color: #858585;
   box-shadow: 0 0 0 0.25rem rgba(101, 101, 101, 0.5);
 }
 
@@ -3141,8 +3157,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-light, .btn-light:active, .btn-light.active,
 .show > .btn-light.dropdown-toggle {
   color: #000000;
-  background-color: #919191;
-  border-color: #848484;
+  background-color: #929292;
+  border-color: #858585;
 }
 
 .btn-check:checked + .btn-light:focus,
@@ -3165,14 +3181,14 @@ fieldset:disabled .btn {
 
 .btn-dark:hover {
   color: #fff;
-  background-color: #1f1f1f;
-  border-color: #191919;
+  background-color: #2b2b2b;
+  border-color: #282828;
 }
 
 .btn-check:focus + .btn-dark, .btn-dark:focus {
   color: #fff;
-  background-color: #1f1f1f;
-  border-color: #191919;
+  background-color: #2b2b2b;
+  border-color: #282828;
   box-shadow: 0 0 0 0.25rem rgba(81, 81, 81, 0.5);
 }
 
@@ -3180,8 +3196,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,
 .show > .btn-dark.dropdown-toggle {
   color: #fff;
-  background-color: #191919;
-  border-color: #121212;
+  background-color: #282828;
+  border-color: #262626;
 }
 
 .btn-check:checked + .btn-dark:focus,
@@ -3478,15 +3494,6 @@ fieldset:disabled .btn {
   border-radius: 0.2rem;
 }
 
-.btn-block {
-  display: block;
-  width: 100%;
-}
-
-.btn-block + .btn-block {
-  margin-top: 0.5rem;
-}
-
 .fade {
   transition: opacity 0.15s linear;
 }
@@ -3740,7 +3747,7 @@ fieldset:disabled .btn {
 }
 
 .dropdown-item:hover, .dropdown-item:focus {
-  color: #16181b;
+  color: #1e2125;
   background-color: #f8f9fa;
 }
 
@@ -4500,28 +4507,120 @@ fieldset:disabled .btn {
   }
 }
 
-.accordion {
+.accordion-button {
+  position: relative;
+  display: flex;
+  align-items: center;
+  width: 100%;
+  padding: 1rem 1.25rem;
+  font-size: 1rem;
+  color: #777777;
+  background-color: transparent;
+  border: 2px solid rgba(0, 0, 0, 0.125);
+  border-radius: 0;
   overflow-anchor: none;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
 }
 
-.accordion > .card {
-  overflow: hidden;
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button {
+    transition: none;
+  }
 }
 
-.accordion > .card:not(:last-of-type) {
-  border-bottom: 0;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
+.accordion-button.collapsed {
+  border-bottom-width: 0;
+}
+
+.accordion-button:not(.collapsed) {
+  color: #c17500;
+  background-color: #fbf3e6;
+}
+
+.accordion-button:not(.collapsed)::after {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23c17500'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  transform: rotate(180deg);
+}
+
+.accordion-button::after {
+  flex-shrink: 0;
+  width: 1.25rem;
+  height: 1.25rem;
+  margin-left: auto;
+  content: "";
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23777777'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-size: 1.25rem;
+  transition: transform 0.2s ease-in-out;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button::after {
+    transition: none;
+  }
+}
+
+.accordion-button:hover {
+  z-index: 2;
+}
+
+.accordion-button:focus {
+  z-index: 3;
+  border-color: #ffbd57;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(214, 130, 0, 0.25);
+}
+
+.accordion-header {
+  margin-bottom: 0;
+}
+
+.accordion-item:first-of-type .accordion-button {
+  border-top-left-radius: 0.25rem;
+  border-top-right-radius: 0.25rem;
+}
+
+.accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-width: 2px;
+  border-bottom-right-radius: 0.25rem;
+  border-bottom-left-radius: 0.25rem;
+}
+
+.accordion-item:last-of-type .accordion-collapse {
+  border-bottom-width: 2px;
+  border-bottom-right-radius: 0.25rem;
+  border-bottom-left-radius: 0.25rem;
+}
+
+.accordion-collapse {
+  border: solid rgba(0, 0, 0, 0.125);
+  border-width: 0 2px;
+}
+
+.accordion-body {
+  padding: 1rem 1.25rem;
+}
+
+.accordion-flush .accordion-button {
+  border-right: 0;
+  border-left: 0;
+  border-radius: 0;
+}
+
+.accordion-flush .accordion-collapse {
+  border-width: 0;
 }
 
-.accordion > .card:not(:first-of-type) {
+.accordion-flush .accordion-item:first-of-type .accordion-button {
+  border-top-width: 0;
   border-top-left-radius: 0;
   border-top-right-radius: 0;
 }
 
-.accordion > .card > .card-header {
-  border-radius: 0;
-  margin-bottom: -2px;
+.accordion-flush .accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-width: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
 }
 
 .breadcrumb {
@@ -4534,16 +4633,12 @@ fieldset:disabled .btn {
   border-radius: 0.25rem;
 }
 
-.breadcrumb-item {
-  display: flex;
-}
-
 .breadcrumb-item + .breadcrumb-item {
   padding-left: 0.5rem;
 }
 
 .breadcrumb-item + .breadcrumb-item::before {
-  display: inline-block;
+  float: left;
   padding-right: 0.5rem;
   color: #777777;
   content: "/";
@@ -4698,87 +4793,88 @@ fieldset:disabled .btn {
   position: absolute;
   top: 0;
   right: 0;
+  z-index: 2;
   padding: 1.25rem 1rem;
 }
 
 .alert-primary {
-  color: #6f4400;
+  color: #804e00;
   background-color: #f7e6cc;
-  border-color: #f4dcb8;
+  border-color: #f3dab3;
 }
 
 .alert-primary .alert-link {
-  color: #3c2500;
+  color: #663e00;
 }
 
 .alert-secondary {
-  color: #38006a;
+  color: #41007a;
   background-color: #e2ccf5;
-  border-color: #d6b8f0;
+  border-color: #d3b3ef;
 }
 
 .alert-secondary .alert-link {
-  color: #1d0037;
+  color: #340062;
 }
 
 .alert-success {
-  color: #0f3705;
+  color: #113f06;
   background-color: #d2e1ce;
-  border-color: #bfd5ba;
+  border-color: #bbd2b6;
 }
 
 .alert-success .alert-link {
-  color: #020801;
+  color: #0e3205;
 }
 
 .alert-info {
-  color: #0a074a;
+  color: #0b0856;
   background-color: #d0cfe9;
-  border-color: #bdbce0;
+  border-color: #b8b7dd;
 }
 
 .alert-info .alert-link {
-  color: #04031b;
+  color: #090645;
 }
 
 .alert-warning {
-  color: #5d3609;
+  color: #6b3e0b;
   background-color: #f0e1d0;
-  border-color: #e9d5bd;
+  border-color: #e8d2b8;
 }
 
 .alert-warning .alert-link {
-  color: #2f1b05;
+  color: #563209;
 }
 
 .alert-danger {
-  color: #855d23;
+  color: #66471b;
   background-color: #fff0d9;
-  border-color: #ffe9ca;
+  border-color: #ffe8c7;
 }
 
 .alert-danger .alert-link {
-  color: #5d4118;
+  color: #523916;
 }
 
 .alert-light {
-  color: #3e3e3e;
+  color: #474747;
   background-color: #e4e4e4;
-  border-color: #d9d9d9;
+  border-color: #d6d6d6;
 }
 
 .alert-light .alert-link {
-  color: #252525;
+  color: #393939;
 }
 
 .alert-dark {
-  color: #1a1a1a;
+  color: #1e1e1e;
   background-color: #d6d6d6;
-  border-color: #c6c6c6;
+  border-color: #c2c2c2;
 }
 
 .alert-dark .alert-link {
-  color: #010101;
+  color: #181818;
 }
 
 @-webkit-keyframes progress-bar-stripes {
@@ -4826,8 +4922,8 @@ fieldset:disabled .btn {
 }
 
 .progress-bar-animated {
-  -webkit-animation: progress-bar-stripes 1s linear infinite;
-  animation: progress-bar-stripes 1s linear infinite;
+  -webkit-animation: 1s linear infinite progress-bar-stripes;
+  animation: 1s linear infinite progress-bar-stripes;
 }
 
 @media (prefers-reduced-motion: reduce) {
@@ -5070,131 +5166,131 @@ fieldset:disabled .btn {
 }
 
 .list-group-item-primary {
-  color: #6f4400;
-  background-color: #f4dcb8;
+  color: #804e00;
+  background-color: #f7e6cc;
 }
 
 .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
-  color: #6f4400;
-  background-color: #f1d1a2;
+  color: #804e00;
+  background-color: #decfb8;
 }
 
 .list-group-item-primary.list-group-item-action.active {
   color: #fff;
-  background-color: #6f4400;
-  border-color: #6f4400;
+  background-color: #804e00;
+  border-color: #804e00;
 }
 
 .list-group-item-secondary {
-  color: #38006a;
-  background-color: #d6b8f0;
+  color: #41007a;
+  background-color: #e2ccf5;
 }
 
 .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
-  color: #38006a;
-  background-color: #caa3ec;
+  color: #41007a;
+  background-color: #cbb8dd;
 }
 
 .list-group-item-secondary.list-group-item-action.active {
   color: #fff;
-  background-color: #38006a;
-  border-color: #38006a;
+  background-color: #41007a;
+  border-color: #41007a;
 }
 
 .list-group-item-success {
-  color: #0f3705;
-  background-color: #bfd5ba;
+  color: #113f06;
+  background-color: #d2e1ce;
 }
 
 .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
-  color: #0f3705;
-  background-color: #b0cbaa;
+  color: #113f06;
+  background-color: #bdcbb9;
 }
 
 .list-group-item-success.list-group-item-action.active {
   color: #fff;
-  background-color: #0f3705;
-  border-color: #0f3705;
+  background-color: #113f06;
+  border-color: #113f06;
 }
 
 .list-group-item-info {
-  color: #0a074a;
-  background-color: #bdbce0;
+  color: #0b0856;
+  background-color: #d0cfe9;
 }
 
 .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
-  color: #0a074a;
-  background-color: #acabd8;
+  color: #0b0856;
+  background-color: #bbbad2;
 }
 
 .list-group-item-info.list-group-item-action.active {
   color: #fff;
-  background-color: #0a074a;
-  border-color: #0a074a;
+  background-color: #0b0856;
+  border-color: #0b0856;
 }
 
 .list-group-item-warning {
-  color: #5d3609;
-  background-color: #e9d5bd;
+  color: #6b3e0b;
+  background-color: #f0e1d0;
 }
 
 .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
-  color: #5d3609;
-  background-color: #e3c9aa;
+  color: #6b3e0b;
+  background-color: #d8cbbb;
 }
 
 .list-group-item-warning.list-group-item-action.active {
   color: #fff;
-  background-color: #5d3609;
-  border-color: #5d3609;
+  background-color: #6b3e0b;
+  border-color: #6b3e0b;
 }
 
 .list-group-item-danger {
-  color: #855d23;
-  background-color: #ffe9ca;
+  color: #66471b;
+  background-color: #fff0d9;
 }
 
 .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
-  color: #855d23;
-  background-color: #ffdeb1;
+  color: #66471b;
+  background-color: #e6d8c3;
 }
 
 .list-group-item-danger.list-group-item-action.active {
   color: #fff;
-  background-color: #855d23;
-  border-color: #855d23;
+  background-color: #66471b;
+  border-color: #66471b;
 }
 
 .list-group-item-light {
-  color: #3e3e3e;
-  background-color: #d9d9d9;
+  color: #474747;
+  background-color: #e4e4e4;
 }
 
 .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
-  color: #3e3e3e;
-  background-color: #cccccc;
+  color: #474747;
+  background-color: #cdcdcd;
 }
 
 .list-group-item-light.list-group-item-action.active {
   color: #fff;
-  background-color: #3e3e3e;
-  border-color: #3e3e3e;
+  background-color: #474747;
+  border-color: #474747;
 }
 
 .list-group-item-dark {
-  color: #1a1a1a;
-  background-color: #c6c6c6;
+  color: #1e1e1e;
+  background-color: #d6d6d6;
 }
 
 .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
-  color: #1a1a1a;
-  background-color: #b9b9b9;
+  color: #1e1e1e;
+  background-color: #c1c1c1;
 }
 
 .list-group-item-dark.list-group-item-action.active {
   color: #fff;
-  background-color: #1a1a1a;
-  border-color: #1a1a1a;
+  background-color: #1e1e1e;
+  border-color: #1e1e1e;
 }
 
 .btn-close {
@@ -5203,8 +5299,7 @@ fieldset:disabled .btn {
   height: 1em;
   padding: 0.25em 0.25em;
   color: #000000;
-  background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23000000' viewBox='0 0 16 16'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") no-repeat center center/1em auto;
-  background-clip: content-box;
+  background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;
   border: 0;
   border-radius: 0.25rem;
   opacity: 0.5;
@@ -5828,7 +5923,7 @@ fieldset:disabled .btn {
   width: 1rem;
   margin-left: -0.5rem;
   content: "";
-  border-bottom: 2px solid #f7f7f7;
+  border-bottom: 2px solid #f0f0f0;
 }
 
 .bs-popover-left, .bs-popover-auto[x-placement^="left"] {
@@ -5858,8 +5953,8 @@ fieldset:disabled .btn {
   padding: 0.5rem 1rem;
   margin-bottom: 0;
   font-size: 1rem;
-  background-color: #f7f7f7;
-  border-bottom: 2px solid #ebebeb;
+  background-color: #f0f0f0;
+  border-bottom: 2px solid #d8d8d8;
   border-top-left-radius: calc(0.3rem - 2px);
   border-top-right-radius: calc(0.3rem - 2px);
 }
@@ -6004,11 +6099,11 @@ fieldset:disabled .btn {
 }
 
 .carousel-control-prev-icon {
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 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' viewBox='0 0 16 16'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
 }
 
 .carousel-indicators {
@@ -6096,8 +6191,8 @@ fieldset:disabled .btn {
   border: 0.25em solid currentColor;
   border-right-color: transparent;
   border-radius: 50%;
-  -webkit-animation: spinner-border 0.75s linear infinite;
-  animation: spinner-border 0.75s linear infinite;
+  -webkit-animation: 0.75s linear infinite spinner-border;
+  animation: 0.75s linear infinite spinner-border;
 }
 
 .spinner-border-sm {
@@ -6134,8 +6229,8 @@ fieldset:disabled .btn {
   background-color: currentColor;
   border-radius: 50%;
   opacity: 0;
-  -webkit-animation: spinner-grow 0.75s linear infinite;
-  animation: spinner-grow 0.75s linear infinite;
+  -webkit-animation: 0.75s linear infinite spinner-grow;
+  animation: 0.75s linear infinite spinner-grow;
 }
 
 .spinner-grow-sm {
@@ -6143,6 +6238,14 @@ fieldset:disabled .btn {
   height: 1rem;
 }
 
+@media (prefers-reduced-motion: reduce) {
+  .spinner-border,
+  .spinner-grow {
+    -webkit-animation-duration: 1.5s;
+    animation-duration: 1.5s;
+  }
+}
+
 .clearfix::after {
   display: block;
   clear: both;
@@ -6154,7 +6257,7 @@ fieldset:disabled .btn {
 }
 
 .link-primary:hover, .link-primary:focus {
-  color: #ffa924;
+  color: #de9b33;
 }
 
 .link-secondary {
@@ -6162,7 +6265,7 @@ fieldset:disabled .btn {
 }
 
 .link-secondary:hover, .link-secondary:focus {
-  color: #43007f;
+  color: #5600a2;
 }
 
 .link-success {
@@ -6170,7 +6273,7 @@ fieldset:disabled .btn {
 }
 
 .link-success:hover, .link-success:focus {
-  color: #092303;
+  color: #165408;
 }
 
 .link-info {
@@ -6178,7 +6281,7 @@ fieldset:disabled .btn {
 }
 
 .link-info:hover, .link-info:focus {
-  color: #0a0749;
+  color: #0f0b72;
 }
 
 .link-warning {
@@ -6186,7 +6289,7 @@ fieldset:disabled .btn {
 }
 
 .link-warning:hover, .link-warning:focus {
-  color: #e99027;
+  color: #c18641;
 }
 
 .link-danger {
@@ -6194,7 +6297,7 @@ fieldset:disabled .btn {
 }
 
 .link-danger:hover, .link-danger:focus {
-  color: #ffd190;
+  color: #ffc169;
 }
 
 .link-light {
@@ -6202,7 +6305,7 @@ fieldset:disabled .btn {
 }
 
 .link-light:hover, .link-light:focus {
-  color: #9d9d9d;
+  color: #929292;
 }
 
 .link-dark {
@@ -6210,7 +6313,7 @@ fieldset:disabled .btn {
 }
 
 .link-dark:hover, .link-dark:focus {
-  color: #0c0c0c;
+  color: #282828;
 }
 
 .ratio {
@@ -6389,6 +6492,14 @@ fieldset:disabled .btn {
   overflow: hidden !important;
 }
 
+.overflow-visible {
+  overflow: visible !important;
+}
+
+.overflow-scroll {
+  overflow: scroll !important;
+}
+
 .d-inline {
   display: inline !important;
 }
@@ -6401,6 +6512,10 @@ fieldset:disabled .btn {
   display: block !important;
 }
 
+.d-grid {
+  display: grid !important;
+}
+
 .d-table {
   display: table !important;
 }
@@ -6726,6 +6841,30 @@ fieldset:disabled .btn {
   flex-wrap: wrap-reverse !important;
 }
 
+.gap-0 {
+  gap: 0 !important;
+}
+
+.gap-1 {
+  gap: 0.25rem !important;
+}
+
+.gap-2 {
+  gap: 0.5rem !important;
+}
+
+.gap-3 {
+  gap: 1rem !important;
+}
+
+.gap-4 {
+  gap: 1.5rem !important;
+}
+
+.gap-5 {
+  gap: 3rem !important;
+}
+
 .justify-content-start {
   justify-content: flex-start !important;
 }
@@ -7240,23 +7379,55 @@ fieldset:disabled .btn {
   padding-left: 3rem !important;
 }
 
-.font-weight-light {
+.fs-1 {
+  font-size: calc(1.375rem + 1.5vw) !important;
+}
+
+.fs-2 {
+  font-size: calc(1.325rem + 0.9vw) !important;
+}
+
+.fs-3 {
+  font-size: calc(1.3rem + 0.6vw) !important;
+}
+
+.fs-4 {
+  font-size: calc(1.275rem + 0.3vw) !important;
+}
+
+.fs-5 {
+  font-size: 1.25rem !important;
+}
+
+.fs-6 {
+  font-size: 1rem !important;
+}
+
+.fst-italic {
+  font-style: italic !important;
+}
+
+.fst-normal {
+  font-style: normal !important;
+}
+
+.fw-light {
   font-weight: 300 !important;
 }
 
-.font-weight-lighter {
+.fw-lighter {
   font-weight: lighter !important;
 }
 
-.font-weight-normal {
+.fw-normal {
   font-weight: 400 !important;
 }
 
-.font-weight-bold {
+.fw-bold {
   font-weight: 700 !important;
 }
 
-.font-weight-bolder {
+.fw-bolder {
   font-weight: bolder !important;
 }
 
@@ -7424,14 +7595,6 @@ fieldset:disabled .btn {
   text-decoration: line-through !important;
 }
 
-.font-italic {
-  font-style: italic !important;
-}
-
-.font-normal {
-  font-style: normal !important;
-}
-
 .text-break {
   word-wrap: break-word !important;
   word-break: break-word !important;
@@ -7474,11 +7637,19 @@ fieldset:disabled .btn {
   border-radius: 0.25rem !important;
 }
 
-.rounded-sm {
+.rounded-0 {
+  border-radius: 0 !important;
+}
+
+.rounded-1 {
   border-radius: 0.2rem !important;
 }
 
-.rounded-lg {
+.rounded-2 {
+  border-radius: 0.25rem !important;
+}
+
+.rounded-3 {
   border-radius: 0.3rem !important;
 }
 
@@ -7490,10 +7661,6 @@ fieldset:disabled .btn {
   border-radius: 50rem !important;
 }
 
-.rounded-0 {
-  border-radius: 0 !important;
-}
-
 .rounded-top {
   border-top-left-radius: 0.25rem !important;
   border-top-right-radius: 0.25rem !important;
@@ -7541,6 +7708,9 @@ fieldset:disabled .btn {
   .d-sm-block {
     display: block !important;
   }
+  .d-sm-grid {
+    display: grid !important;
+  }
   .d-sm-table {
     display: table !important;
   }
@@ -7595,6 +7765,24 @@ fieldset:disabled .btn {
   .flex-sm-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-sm-0 {
+    gap: 0 !important;
+  }
+  .gap-sm-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-sm-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-sm-3 {
+    gap: 1rem !important;
+  }
+  .gap-sm-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-sm-5 {
+    gap: 3rem !important;
+  }
   .justify-content-sm-start {
     justify-content: flex-start !important;
   }
@@ -8017,6 +8205,9 @@ fieldset:disabled .btn {
   .d-md-block {
     display: block !important;
   }
+  .d-md-grid {
+    display: grid !important;
+  }
   .d-md-table {
     display: table !important;
   }
@@ -8071,6 +8262,24 @@ fieldset:disabled .btn {
   .flex-md-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-md-0 {
+    gap: 0 !important;
+  }
+  .gap-md-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-md-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-md-3 {
+    gap: 1rem !important;
+  }
+  .gap-md-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-md-5 {
+    gap: 3rem !important;
+  }
   .justify-content-md-start {
     justify-content: flex-start !important;
   }
@@ -8493,6 +8702,9 @@ fieldset:disabled .btn {
   .d-lg-block {
     display: block !important;
   }
+  .d-lg-grid {
+    display: grid !important;
+  }
   .d-lg-table {
     display: table !important;
   }
@@ -8547,6 +8759,24 @@ fieldset:disabled .btn {
   .flex-lg-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-lg-0 {
+    gap: 0 !important;
+  }
+  .gap-lg-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-lg-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-lg-3 {
+    gap: 1rem !important;
+  }
+  .gap-lg-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-lg-5 {
+    gap: 3rem !important;
+  }
   .justify-content-lg-start {
     justify-content: flex-start !important;
   }
@@ -8969,6 +9199,9 @@ fieldset:disabled .btn {
   .d-xl-block {
     display: block !important;
   }
+  .d-xl-grid {
+    display: grid !important;
+  }
   .d-xl-table {
     display: table !important;
   }
@@ -9023,6 +9256,24 @@ fieldset:disabled .btn {
   .flex-xl-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-xl-0 {
+    gap: 0 !important;
+  }
+  .gap-xl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xl-5 {
+    gap: 3rem !important;
+  }
   .justify-content-xl-start {
     justify-content: flex-start !important;
   }
@@ -9445,6 +9696,9 @@ fieldset:disabled .btn {
   .d-xxl-block {
     display: block !important;
   }
+  .d-xxl-grid {
+    display: grid !important;
+  }
   .d-xxl-table {
     display: table !important;
   }
@@ -9499,6 +9753,24 @@ fieldset:disabled .btn {
   .flex-xxl-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-xxl-0 {
+    gap: 0 !important;
+  }
+  .gap-xxl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xxl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xxl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xxl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xxl-5 {
+    gap: 3rem !important;
+  }
   .justify-content-xxl-start {
     justify-content: flex-start !important;
   }
@@ -9902,6 +10174,57 @@ fieldset:disabled .btn {
   }
 }
 
+@media (min-width: 1200px) {
+  .fs-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-2 {
+    font-size: 2rem !important;
+  }
+  .fs-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-4 {
+    font-size: 1.5rem !important;
+  }
+  .fs-sm-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-sm-2 {
+    font-size: 2rem !important;
+  }
+  .fs-sm-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-sm-4 {
+    font-size: 1.5rem !important;
+  }
+  .fs-md-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-md-2 {
+    font-size: 2rem !important;
+  }
+  .fs-md-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-md-4 {
+    font-size: 1.5rem !important;
+  }
+  .fs-lg-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-lg-2 {
+    font-size: 2rem !important;
+  }
+  .fs-lg-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-lg-4 {
+    font-size: 1.5rem !important;
+  }
+}
+
 @media print {
   .d-print-inline {
     display: inline !important;
@@ -9912,6 +10235,9 @@ fieldset:disabled .btn {
   .d-print-block {
     display: block !important;
   }
+  .d-print-grid {
+    display: grid !important;
+  }
   .d-print-table {
     display: table !important;
   }
@@ -10707,7 +11033,7 @@ tobago-dropdown {
 }
 
 tobago-dropdown .tobago-dropdown-selected, .tobago-page-menuStore .tobago-dropdown-selected {
-  color: #16181b;
+  color: #1e2125;
   text-decoration: none;
   background-color: #f8f9fa;
 }
diff --git a/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.css.map b/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.css.map
index 0ff264f..9bd07cd 100644
--- a/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago.css","../../scss/tobago-theme.scss","../../scss/_custom.scss","../../node_modules/bootstrap/scss/bootstrap.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","../../node_modules/bootstrap/scss/_variables.scss","../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/m [...]
\ No newline at end of file
+{"version":3,"sources":["tobago.css","../../scss/tobago-theme.scss","../../scss/_custom.scss","../../node_modules/bootstrap/scss/bootstrap.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","../../node_modules/bootstrap/scss/_variables.scss","../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/m [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.min.css b/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.min.css
index 793623f..f41d466 100644
--- a/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";@font-face{font-family:Amaranth;font-style:normal;font-weight:400;src:url(../fonts/Amaranth-Regular.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:normal;font-weight:700;src:url(../fonts/Amaranth-Bold.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:italic;src:url(../fonts/Amaranth-Italic.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:italic;font-weight:700;src:url(../fonts/Amaranth-BoldItalic.otf) format("opentyp [...]
+@charset "UTF-8";@font-face{font-family:Amaranth;font-style:normal;font-weight:400;src:url(../fonts/Amaranth-Regular.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:normal;font-weight:700;src:url(../fonts/Amaranth-Bold.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:italic;src:url(../fonts/Amaranth-Italic.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:italic;font-weight:700;src:url(../fonts/Amaranth-BoldItalic.otf) format("opentyp [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.min.css.map b/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.min.css.map
index 8014444..9ed7909 100644
--- a/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-roxborough/npm/dist/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/_custom.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","dist/css/tobago.css","../../node_modules/bootstrap/scss/vendor/_rfs.scss","tobago.css","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/mixins/_lists.scss","../../node_modules/bootstrap/scss/_images.scss","../../node_modules/bootstrap/scss/mixins/_i [...]
\ No newline at end of file
+{"version":3,"sources":["../../scss/_custom.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","dist/css/tobago.css","../../node_modules/bootstrap/scss/vendor/_rfs.scss","tobago.css","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/mixins/_lists.scss","../../node_modules/bootstrap/scss/_images.scss","../../node_modules/bootstrap/scss/mixins/_i [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/npm/package-lock.json b/tobago-theme/tobago-theme-roxborough/npm/package-lock.json
index 48983f6..71b9f8f 100644
--- a/tobago-theme/tobago-theme-roxborough/npm/package-lock.json
+++ b/tobago-theme/tobago-theme-roxborough/npm/package-lock.json
@@ -31,9 +31,9 @@
       }
     },
     "@eslint/eslintrc": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz",
-      "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==",
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz",
+      "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==",
       "dev": true,
       "requires": {
         "ajv": "^6.12.4",
@@ -105,9 +105,9 @@
       "dev": true
     },
     "acorn": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz",
-      "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
       "dev": true
     },
     "acorn-jsx": {
@@ -117,9 +117,9 @@
       "dev": true
     },
     "ajv": {
-      "version": "6.12.5",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz",
-      "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==",
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
       "requires": {
         "fast-deep-equal": "^3.1.1",
@@ -147,9 +147,9 @@
       "dev": true
     },
     "ansi-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-      "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+      "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
       "dev": true
     },
     "ansi-styles": {
@@ -283,9 +283,9 @@
       "dev": true
     },
     "aws4": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
-      "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
       "dev": true
     },
     "balanced-match": {
@@ -309,19 +309,10 @@
       "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
       "dev": true
     },
-    "block-stream": {
-      "version": "0.0.9",
-      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
-      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
-      "dev": true,
-      "requires": {
-        "inherits": "~2.0.0"
-      }
-    },
     "bootstrap": {
-      "version": "5.0.0-alpha2",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.0-alpha2.tgz",
-      "integrity": "sha512-ZhW32+m5ImJoEkDKn43QQk2KovpJFisV/7TAg/RCzDi+B8m7FUgLHWx1Auu0Jt3/DQXDYwp6iwsprP3ej4u3ng==",
+      "version": "5.0.0-alpha3",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.0-alpha3.tgz",
+      "integrity": "sha512-ghwrMFNzqOwfB0nJ1iYbkERd+EK1PblUl7rEEynY35jD0TUlSY6yrjG2M42qI++NhAUBEqGcjmmHkMGs3QyNHA==",
       "dev": true
     },
     "brace-expansion": {
@@ -454,6 +445,12 @@
         "readdirp": "~3.4.0"
       }
     },
+    "chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "dev": true
+    },
     "clean-css": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
@@ -491,17 +488,6 @@
           "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
         "strip-ansi": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -761,6 +747,12 @@
         "ansi-colors": "^4.1.1"
       }
     },
+    "env-paths": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
+      "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
+      "dev": true
+    },
     "error-ex": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -813,13 +805,13 @@
       "dev": true
     },
     "eslint": {
-      "version": "7.10.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.10.0.tgz",
-      "integrity": "sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz",
+      "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@eslint/eslintrc": "^0.1.3",
+        "@eslint/eslintrc": "^0.2.1",
         "ajv": "^6.10.0",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
@@ -828,7 +820,7 @@
         "enquirer": "^2.3.5",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^2.1.0",
-        "eslint-visitor-keys": "^1.3.0",
+        "eslint-visitor-keys": "^2.0.0",
         "espree": "^7.3.0",
         "esquery": "^1.2.0",
         "esutils": "^2.0.2",
@@ -857,19 +849,12 @@
         "v8-compile-cache": "^2.0.3"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-          "dev": true
-        },
         "ansi-styles": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
-          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
           "dev": true,
           "requires": {
-            "@types/color-name": "^1.1.1",
             "color-convert": "^2.0.1"
           }
         },
@@ -948,15 +933,6 @@
           "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
           "dev": true
         },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        },
         "supports-color": {
           "version": "7.2.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -1018,12 +994,20 @@
       "dev": true,
       "requires": {
         "eslint-visitor-keys": "^1.1.0"
+      },
+      "dependencies": {
+        "eslint-visitor-keys": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+          "dev": true
+        }
       }
     },
     "eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
+      "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
       "dev": true
     },
     "espree": {
@@ -1035,6 +1019,14 @@
         "acorn": "^7.4.0",
         "acorn-jsx": "^5.2.0",
         "eslint-visitor-keys": "^1.3.0"
+      },
+      "dependencies": {
+        "eslint-visitor-keys": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+          "dev": true
+        }
       }
     },
     "esprima": {
@@ -1224,6 +1216,15 @@
         "universalify": "^1.0.0"
       }
     },
+    "fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -1237,18 +1238,6 @@
       "dev": true,
       "optional": true
     },
-    "fstream": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
-      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "inherits": "~2.0.0",
-        "mkdirp": ">=0.5 0",
-        "rimraf": "2"
-      }
-    },
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -1399,13 +1388,13 @@
       }
     },
     "globule": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz",
-      "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
+      "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
       "dev": true,
       "requires": {
         "glob": "~7.1.1",
-        "lodash": "~4.17.12",
+        "lodash": "~4.17.10",
         "minimatch": "~3.0.2"
       }
     },
@@ -1422,12 +1411,12 @@
       "dev": true
     },
     "har-validator": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+      "version": "5.1.5",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
       "dev": true,
       "requires": {
-        "ajv": "^6.5.5",
+        "ajv": "^6.12.3",
         "har-schema": "^2.0.0"
       }
     },
@@ -1508,9 +1497,9 @@
       }
     },
     "import-fresh": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
-      "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz",
+      "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==",
       "dev": true,
       "requires": {
         "parent-module": "^1.0.0",
@@ -1540,12 +1529,6 @@
       "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
       "dev": true
     },
-    "in-publish": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz",
-      "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==",
-      "dev": true
-    },
     "indent-string": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
@@ -1686,9 +1669,9 @@
       "dev": true
     },
     "js-base64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz",
-      "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+      "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
       "dev": true
     },
     "js-tokens": {
@@ -1828,16 +1811,6 @@
         "signal-exit": "^3.0.0"
       }
     },
-    "lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-      "dev": true,
-      "requires": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
-      }
-    },
     "map-obj": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
@@ -1923,6 +1896,25 @@
       "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
+    "minipass": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+      "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      }
+    },
+    "minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      }
+    },
     "mkdirp": {
       "version": "0.5.5",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
@@ -1939,9 +1931,9 @@
       "dev": true
     },
     "nan": {
-      "version": "2.14.1",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
-      "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
+      "version": "2.14.2",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+      "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
       "dev": true
     },
     "natural-compare": {
@@ -1957,30 +1949,46 @@
       "dev": true
     },
     "node-gyp": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
-      "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
-      "dev": true,
-      "requires": {
-        "fstream": "^1.0.0",
-        "glob": "^7.0.3",
-        "graceful-fs": "^4.1.2",
-        "mkdirp": "^0.5.0",
-        "nopt": "2 || 3",
-        "npmlog": "0 || 1 || 2 || 3 || 4",
-        "osenv": "0",
-        "request": "^2.87.0",
-        "rimraf": "2",
-        "semver": "~5.3.0",
-        "tar": "^2.0.0",
-        "which": "1"
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz",
+      "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==",
+      "dev": true,
+      "requires": {
+        "env-paths": "^2.2.0",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.2.3",
+        "nopt": "^5.0.0",
+        "npmlog": "^4.1.2",
+        "request": "^2.88.2",
+        "rimraf": "^3.0.2",
+        "semver": "^7.3.2",
+        "tar": "^6.0.2",
+        "which": "^2.0.2"
       },
       "dependencies": {
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
         "semver": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
-          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+          "version": "7.3.2",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+          "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
           "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
@@ -1991,23 +1999,22 @@
       "dev": true
     },
     "node-sass": {
-      "version": "4.14.1",
-      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz",
-      "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-5.0.0.tgz",
+      "integrity": "sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw==",
       "dev": true,
       "requires": {
         "async-foreach": "^0.1.3",
         "chalk": "^1.1.1",
-        "cross-spawn": "^3.0.0",
+        "cross-spawn": "^7.0.3",
         "gaze": "^1.0.0",
         "get-stdin": "^4.0.1",
         "glob": "^7.0.3",
-        "in-publish": "^2.0.0",
         "lodash": "^4.17.15",
         "meow": "^3.7.0",
         "mkdirp": "^0.5.1",
         "nan": "^2.13.2",
-        "node-gyp": "^3.8.0",
+        "node-gyp": "^7.1.0",
         "npmlog": "^4.0.0",
         "request": "^2.88.0",
         "sass-graph": "2.2.5",
@@ -2041,15 +2048,37 @@
           }
         },
         "cross-spawn": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
-          "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
           "dev": true,
           "requires": {
-            "lru-cache": "^4.0.1",
-            "which": "^1.2.9"
+            "shebang-regex": "^3.0.0"
           }
         },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+          "dev": true
+        },
         "strip-ansi": {
           "version": "3.0.1",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -2064,13 +2093,22 @@
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
           "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
           "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
     "nopt": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
       "dev": true,
       "requires": {
         "abbrev": "1"
@@ -2256,28 +2294,6 @@
         "word-wrap": "^1.2.3"
       }
     },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "dev": true
-    },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-      "dev": true
-    },
-    "osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "dev": true,
-      "requires": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.0"
-      }
-    },
     "p-limit": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -2321,10 +2337,13 @@
       }
     },
     "path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-      "dev": true
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+      "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+      "dev": true,
+      "requires": {
+        "pinkie-promise": "^2.0.0"
+      }
     },
     "path-is-absolute": {
       "version": "1.0.1",
@@ -2647,12 +2666,6 @@
       "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "dev": true
     },
-    "pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-      "dev": true
-    },
     "psl": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -2710,15 +2723,6 @@
             "path-exists": "^2.0.0",
             "pinkie-promise": "^2.0.0"
           }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
         }
       }
     },
@@ -2842,9 +2846,9 @@
       }
     },
     "rollup": {
-      "version": "2.28.2",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.28.2.tgz",
-      "integrity": "sha512-8txbsFBFLmm9Xdt4ByTOGa9Muonmc8MfNjnGAR8U8scJlF1ZW7AgNZa7aqBXaKtlvnYP/ab++fQIq9dB9NWUbg==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.1.tgz",
+      "integrity": "sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==",
       "dev": true,
       "requires": {
         "fsevents": "~2.1.2"
@@ -3028,13 +3032,31 @@
       }
     },
     "string-width": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
-      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+      "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
       "dev": true,
       "requires": {
+        "emoji-regex": "^7.0.1",
         "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^4.0.0"
+        "strip-ansi": "^5.1.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
       }
     },
     "string.prototype.padend": {
@@ -3099,12 +3121,12 @@
       }
     },
     "strip-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+      "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
       "dev": true,
       "requires": {
-        "ansi-regex": "^3.0.0"
+        "ansi-regex": "^5.0.0"
       }
     },
     "strip-bom": {
@@ -3150,45 +3172,28 @@
         "lodash": "^4.17.14",
         "slice-ansi": "^2.1.0",
         "string-width": "^3.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
       }
     },
     "tar": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
-      "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz",
+      "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==",
       "dev": true,
       "requires": {
-        "block-stream": "*",
-        "fstream": "^1.0.12",
-        "inherits": "2"
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^3.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        }
       }
     },
     "text-table": {
@@ -3302,9 +3307,9 @@
       "dev": true
     },
     "typescript": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz",
-      "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==",
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz",
+      "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==",
       "dev": true
     },
     "universalify": {
@@ -3335,9 +3340,9 @@
       "dev": true
     },
     "v8-compile-cache": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
-      "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
+      "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
       "dev": true
     },
     "validate-npm-package-license": {
@@ -3388,6 +3393,33 @@
       "dev": true,
       "requires": {
         "string-width": "^1.0.2 || 2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
       }
     },
     "word-wrap": {
@@ -3413,17 +3445,6 @@
           "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
         "strip-ansi": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -3457,9 +3478,9 @@
       "dev": true
     },
     "yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true
     },
     "yargs": {
@@ -3480,12 +3501,6 @@
         "yargs-parser": "^13.1.2"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
         "find-up": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
@@ -3505,15 +3520,6 @@
             "path-exists": "^3.0.0"
           }
         },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
         "p-locate": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
@@ -3523,31 +3529,11 @@
             "p-limit": "^2.0.0"
           }
         },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
           "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
         }
       }
     },
diff --git a/tobago-theme/tobago-theme-roxborough/npm/package.json b/tobago-theme/tobago-theme-roxborough/npm/package.json
index e8e9e37..5e21830 100644
--- a/tobago-theme/tobago-theme-roxborough/npm/package.json
+++ b/tobago-theme/tobago-theme-roxborough/npm/package.json
@@ -50,19 +50,19 @@
   },
   "devDependencies": {
     "tobago-core": "file:../../../tobago-core/npm",
-    "ajv": "^6.12.5",
+    "ajv": "^6.12.6",
     "ajv-keywords": "^3.5.2",
     "autoprefixer": "^9.8.6",
-    "bootstrap": "5.0.0-alpha2",
+    "bootstrap": "5.0.0-alpha3",
     "clean-css-cli": "^4.3.0",
-    "eslint": "^7.10.0",
+    "eslint": "^7.13.0",
     "eslint-plugin-compat": "^3.8.0",
-    "node-sass": "^4.14.1",
+    "node-sass": "^5.0.0",
     "npm-run-all": "^4.1.5",
     "popper.js": "^1.16.1",
     "postcss-cli": "^7.1.2",
-    "rollup": "^2.28.2",
+    "rollup": "^2.33.1",
     "tslint": "^6.1.3",
-    "typescript": "^4.0.3"
+    "typescript": "^4.0.5"
   }
 }
diff --git a/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.css b/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.css
index 52f7109..dfa057b 100644
--- a/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.css
+++ b/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.css
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 /*!
- * Bootstrap v5.0.0-alpha2 (https://getbootstrap.com/)
+ * Bootstrap v5.0.0-alpha3 (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)
@@ -42,8 +42,8 @@
   --bs-warning: #ffc107;
   --bs-danger: #dc3545;
   --bs-light: #f8f9fa;
-  --bs-dark: #343a40;
-  --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+  --bs-dark: #212529;
+  --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
   --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
   --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
 }
@@ -54,6 +54,12 @@
   box-sizing: border-box;
 }
 
+@media (prefers-reduced-motion: no-preference) {
+  :root {
+    scroll-behavior: smooth;
+  }
+}
+
 body {
   margin: 0;
   font-family: var(--bs-font-sans-serif);
@@ -226,7 +232,7 @@ a {
 }
 
 a:hover {
-  color: #024dbc;
+  color: #0a58ca;
 }
 
 a:not([href]):not([class]), a:not([href]):not([class]):hover {
@@ -248,7 +254,6 @@ pre {
   margin-bottom: 1rem;
   overflow: auto;
   font-size: 0.875em;
-  -ms-overflow-style: scrollbar;
 }
 
 pre code {
@@ -327,8 +332,8 @@ button {
 }
 
 button:focus {
-  outline: 1px dotted;
-  outline: 5px auto -webkit-focus-ring-color;
+  outline: dotted 1px;
+  outline: -webkit-focus-ring-color auto 5px;
 }
 
 input,
@@ -343,11 +348,6 @@ textarea {
 }
 
 button,
-input {
-  overflow: visible;
-}
-
-button,
 select {
   text-transform: none;
 }
@@ -401,7 +401,6 @@ legend {
   margin-bottom: 0.5rem;
   font-size: calc(1.275rem + 0.3vw);
   line-height: inherit;
-  white-space: normal;
 }
 
 @media (min-width: 1200px) {
@@ -441,6 +440,10 @@ legend + * {
   padding: 0;
 }
 
+::file-selector-button {
+  font: inherit;
+}
+
 ::-webkit-file-upload-button {
   font: inherit;
   -webkit-appearance: button;
@@ -1808,75 +1811,75 @@ progress {
 }
 
 .table-primary {
-  --bs-table-bg: #bbd6fe;
-  --bs-table-striped-bg: #b2cbf1;
+  --bs-table-bg: #cfe2ff;
+  --bs-table-striped-bg: #c5d7f2;
   --bs-table-striped-color: #000;
-  --bs-table-active-bg: #a8c1e5;
+  --bs-table-active-bg: #bacbe6;
   --bs-table-active-color: #000;
-  --bs-table-hover-bg: #adc6eb;
+  --bs-table-hover-bg: #bfd1ec;
   --bs-table-hover-color: #000;
   color: #000;
-  border-color: #a8c1e5;
+  border-color: #bacbe6;
 }
 
 .table-secondary {
-  --bs-table-bg: #d6d8db;
-  --bs-table-striped-bg: #cbcdd0;
+  --bs-table-bg: #e2e3e5;
+  --bs-table-striped-bg: #d7d8da;
   --bs-table-striped-color: #000;
-  --bs-table-active-bg: #c1c2c5;
+  --bs-table-active-bg: #cbccce;
   --bs-table-active-color: #000;
-  --bs-table-hover-bg: #c6c8cb;
+  --bs-table-hover-bg: #d1d2d4;
   --bs-table-hover-color: #000;
   color: #000;
-  border-color: #c1c2c5;
+  border-color: #cbccce;
 }
 
 .table-success {
-  --bs-table-bg: #bfddcf;
-  --bs-table-striped-bg: #b5d2c5;
+  --bs-table-bg: #d1e7dd;
+  --bs-table-striped-bg: #c7dbd2;
   --bs-table-striped-color: #000;
-  --bs-table-active-bg: #acc7ba;
+  --bs-table-active-bg: #bcd0c7;
   --bs-table-active-color: #000;
-  --bs-table-hover-bg: #b1ccbf;
+  --bs-table-hover-bg: #c1d6cc;
   --bs-table-hover-color: #000;
   color: #000;
-  border-color: #acc7ba;
+  border-color: #bcd0c7;
 }
 
 .table-info {
-  --bs-table-bg: #bbf0fb;
-  --bs-table-striped-bg: #b2e4ee;
+  --bs-table-bg: #cff4fc;
+  --bs-table-striped-bg: #c5e8ef;
   --bs-table-striped-color: #000;
-  --bs-table-active-bg: #a8d8e2;
+  --bs-table-active-bg: #badce3;
   --bs-table-active-color: #000;
-  --bs-table-hover-bg: #addee8;
+  --bs-table-hover-bg: #bfe2e9;
   --bs-table-hover-color: #000;
   color: #000;
-  border-color: #a8d8e2;
+  border-color: #badce3;
 }
 
 .table-warning {
-  --bs-table-bg: #ffeeba;
-  --bs-table-striped-bg: #f2e2b1;
+  --bs-table-bg: #fff3cd;
+  --bs-table-striped-bg: #f2e7c3;
   --bs-table-striped-color: #000;
-  --bs-table-active-bg: #e6d6a7;
+  --bs-table-active-bg: #e6dbb9;
   --bs-table-active-color: #000;
-  --bs-table-hover-bg: #ecdcac;
+  --bs-table-hover-bg: #ece1be;
   --bs-table-hover-color: #000;
   color: #000;
-  border-color: #e6d6a7;
+  border-color: #e6dbb9;
 }
 
 .table-danger {
-  --bs-table-bg: #f5c6cb;
-  --bs-table-striped-bg: #e9bcc1;
+  --bs-table-bg: #f8d7da;
+  --bs-table-striped-bg: #eccccf;
   --bs-table-striped-color: #000;
-  --bs-table-active-bg: #ddb2b7;
+  --bs-table-active-bg: #dfc2c4;
   --bs-table-active-color: #000;
-  --bs-table-hover-bg: #e3b7bc;
+  --bs-table-hover-bg: #e5c7ca;
   --bs-table-hover-color: #000;
   color: #000;
-  border-color: #ddb2b7;
+  border-color: #dfc2c4;
 }
 
 .table-light {
@@ -1892,15 +1895,15 @@ progress {
 }
 
 .table-dark {
-  --bs-table-bg: #343a40;
-  --bs-table-striped-bg: #3e444a;
+  --bs-table-bg: #212529;
+  --bs-table-striped-bg: #2c3034;
   --bs-table-striped-color: #fff;
-  --bs-table-active-bg: #484e53;
+  --bs-table-active-bg: #373b3e;
   --bs-table-active-color: #fff;
-  --bs-table-hover-bg: #43494e;
+  --bs-table-hover-bg: #323539;
   --bs-table-hover-color: #fff;
   color: #fff;
-  border-color: #484e53;
+  border-color: #373b3e;
 }
 
 .table-responsive {
@@ -1976,12 +1979,11 @@ progress {
 .form-control {
   display: block;
   width: 100%;
-  min-height: calc(1.5em + 0.75rem + 2px);
   padding: 0.375rem 0.75rem;
   font-size: 1rem;
   font-weight: 400;
   line-height: 1.5;
-  color: #495057;
+  color: #212529;
   background-color: #fff;
   background-clip: padding-box;
   border: 1px solid #ced4da;
@@ -1998,14 +2000,26 @@ progress {
   }
 }
 
+.form-control[type="file"] {
+  overflow: hidden;
+}
+
+.form-control[type="file"]:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+
 .form-control:focus {
-  color: #495057;
+  color: #212529;
   background-color: #fff;
-  border-color: #8bbafe;
+  border-color: #86b7fe;
   outline: 0;
   box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
 }
 
+.form-control::-webkit-date-and-time-value {
+  height: 1.5em;
+}
+
 .form-control::-moz-placeholder {
   color: #6c757d;
   opacity: 1;
@@ -2031,6 +2045,60 @@ progress {
   opacity: 1;
 }
 
+.form-control::file-selector-button {
+  padding: 0.375rem 0.75rem;
+  margin: -0.375rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+  margin-inline-end: 0.75rem;
+  color: #212529;
+  background-color: #e9ecef;
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: 1px;
+  border-radius: 0;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .form-control::file-selector-button {
+    transition: none;
+  }
+}
+
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+  background-color: #dde0e3;
+}
+
+.form-control::-webkit-file-upload-button {
+  padding: 0.375rem 0.75rem;
+  margin: -0.375rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+  margin-inline-end: 0.75rem;
+  color: #212529;
+  background-color: #e9ecef;
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: 1px;
+  border-radius: 0;
+  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .form-control::-webkit-file-upload-button {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+  background-color: #dde0e3;
+}
+
 .form-control-plaintext {
   display: block;
   width: 100%;
@@ -2055,6 +2123,20 @@ progress {
   border-radius: 0.2rem;
 }
 
+.form-control-sm::file-selector-button {
+  padding: 0.25rem 0.5rem;
+  margin: -0.25rem -0.5rem;
+  -webkit-margin-end: 0.5rem;
+  margin-inline-end: 0.5rem;
+}
+
+.form-control-sm::-webkit-file-upload-button {
+  padding: 0.25rem 0.5rem;
+  margin: -0.25rem -0.5rem;
+  -webkit-margin-end: 0.5rem;
+  margin-inline-end: 0.5rem;
+}
+
 .form-control-lg {
   min-height: calc(1.5em + 1rem + 2px);
   padding: 0.5rem 1rem;
@@ -2062,28 +2144,60 @@ progress {
   border-radius: 0.3rem;
 }
 
+.form-control-lg::file-selector-button {
+  padding: 0.5rem 1rem;
+  margin: -0.5rem -1rem;
+  -webkit-margin-end: 1rem;
+  margin-inline-end: 1rem;
+}
+
+.form-control-lg::-webkit-file-upload-button {
+  padding: 0.5rem 1rem;
+  margin: -0.5rem -1rem;
+  -webkit-margin-end: 1rem;
+  margin-inline-end: 1rem;
+}
+
+textarea.form-control {
+  min-height: calc(1.5em + 0.75rem + 2px);
+}
+
+textarea.form-control-sm {
+  min-height: calc(1.5em + 0.5rem + 2px);
+}
+
+textarea.form-control-lg {
+  min-height: calc(1.5em + 1rem + 2px);
+}
+
 .form-control-color {
   max-width: 3rem;
+  height: auto;
   padding: 0.375rem;
 }
 
+.form-control-color:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+
 .form-control-color::-moz-color-swatch {
+  height: 1.5em;
   border-radius: 0.25rem;
 }
 
 .form-control-color::-webkit-color-swatch {
+  height: 1.5em;
   border-radius: 0.25rem;
 }
 
 .form-select {
   display: block;
   width: 100%;
-  height: calc(1.5em + 0.75rem + 2px);
   padding: 0.375rem 1.75rem 0.375rem 0.75rem;
   font-size: 1rem;
   font-weight: 400;
   line-height: 1.5;
-  color: #495057;
+  color: #212529;
   vertical-align: middle;
   background-color: #fff;
   background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
@@ -2098,18 +2212,12 @@ progress {
 }
 
 .form-select:focus {
-  border-color: #8bbafe;
+  border-color: #86b7fe;
   outline: 0;
   box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
 }
 
-.form-select:focus::-ms-value {
-  color: #495057;
-  background-color: #fff;
-}
-
 .form-select[multiple], .form-select[size]:not([size="1"]) {
-  height: auto;
   padding-right: 0.75rem;
   background-image: none;
 }
@@ -2121,11 +2229,10 @@ progress {
 
 .form-select:-moz-focusring {
   color: transparent;
-  text-shadow: 0 0 0 #495057;
+  text-shadow: 0 0 0 #212529;
 }
 
 .form-select-sm {
-  height: calc(1.5em + 0.5rem + 2px);
   padding-top: 0.25rem;
   padding-bottom: 0.25rem;
   padding-left: 0.5rem;
@@ -2133,7 +2240,6 @@ progress {
 }
 
 .form-select-lg {
-  height: calc(1.5em + 1rem + 2px);
   padding-top: 0.5rem;
   padding-bottom: 0.5rem;
   padding-left: 1rem;
@@ -2189,7 +2295,7 @@ progress {
 }
 
 .form-check-input:focus {
-  border-color: #8bbafe;
+  border-color: #86b7fe;
   outline: 0;
   box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
 }
@@ -2216,11 +2322,11 @@ progress {
 .form-check-input:disabled {
   pointer-events: none;
   filter: none;
-  opacity: .5;
+  opacity: 0.5;
 }
 
 .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {
-  opacity: .5;
+  opacity: 0.5;
 }
 
 .form-switch {
@@ -2236,7 +2342,7 @@ progress {
 }
 
 .form-switch .form-check-input:focus {
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%238bbafe'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e");
 }
 
 .form-switch .form-check-input:checked {
@@ -2255,93 +2361,10 @@ progress {
   pointer-events: none;
 }
 
-.form-file {
-  --bs-form-file-height: calc(1.5em + 0.75rem + 2px);
-  position: relative;
-}
-
-.form-file-input {
-  position: relative;
-  z-index: 2;
-  width: 100%;
-  height: var(--bs-form-file-height);
-  margin: 0;
-  opacity: 0;
-}
-
-.form-file-input:focus-within ~ .form-file-label {
-  border-color: #8bbafe;
-  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
-}
-
-.form-file-input[disabled] ~ .form-file-label .form-file-text,
-.form-file-input:disabled ~ .form-file-label .form-file-text {
-  background-color: #e9ecef;
-}
-
-.form-file-label {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-  z-index: 1;
-  display: flex;
-  height: var(--bs-form-file-height);
-  border-color: #ced4da;
-  border-radius: 0.25rem;
-}
-
-.form-file-text {
-  display: block;
-  flex-grow: 1;
-  padding: 0.375rem 0.75rem;
-  overflow: hidden;
-  font-weight: 400;
-  line-height: 1.5;
-  color: #495057;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  background-color: #fff;
-  border-color: inherit;
-  border-style: solid;
-  border-width: 1px;
-  border-top-left-radius: inherit;
-  border-bottom-left-radius: inherit;
-}
-
-.form-file-button {
-  display: block;
-  flex-shrink: 0;
-  padding: 0.375rem 0.75rem;
-  margin-left: -1px;
-  line-height: 1.5;
-  color: #495057;
-  background-color: #e9ecef;
-  border-color: inherit;
-  border-style: solid;
-  border-width: 1px;
-  border-top-right-radius: inherit;
-  border-bottom-right-radius: inherit;
-}
-
-.form-file-sm {
-  --bs-form-file-height: calc(1.5em + 0.5rem + 2px);
-  font-size: 0.875rem;
-}
-
-.form-file-sm .form-file-text,
-.form-file-sm .form-file-button {
-  padding: 0.25rem 0.5rem;
-}
-
-.form-file-lg {
-  --bs-form-file-height: calc(1.5em + 1rem + 2px);
-  font-size: 1.25rem;
-}
-
-.form-file-lg .form-file-text,
-.form-file-lg .form-file-button {
-  padding: 0.5rem 1rem;
+.btn-check[disabled] + .btn, .btn-check:disabled + .btn {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.65;
 }
 
 .form-range {
@@ -2366,10 +2389,6 @@ progress {
   box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
 }
 
-.form-range:focus::-ms-thumb {
-  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
-}
-
 .form-range::-moz-focus-outer {
   border: 0;
 }
@@ -2395,7 +2414,7 @@ progress {
 }
 
 .form-range::-webkit-slider-thumb:active {
-  background-color: #bed8fe;
+  background-color: #b6d4fe;
 }
 
 .form-range::-webkit-slider-runnable-track {
@@ -2428,7 +2447,7 @@ progress {
 }
 
 .form-range::-moz-range-thumb:active {
-  background-color: #bed8fe;
+  background-color: #b6d4fe;
 }
 
 .form-range::-moz-range-track {
@@ -2441,66 +2460,107 @@ progress {
   border-radius: 1rem;
 }
 
-.form-range::-ms-thumb {
-  width: 1rem;
-  height: 1rem;
-  margin-top: 0;
-  margin-right: 0.25rem;
-  margin-left: 0.25rem;
-  background-color: #0d6efd;
-  border: 0;
-  border-radius: 1rem;
-  -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-  appearance: none;
+.form-range:disabled {
+  pointer-events: none;
+}
+
+.form-range:disabled::-webkit-slider-thumb {
+  background-color: #adb5bd;
+}
+
+.form-range:disabled::-moz-range-thumb {
+  background-color: #adb5bd;
+}
+
+.form-floating {
+  position: relative;
+}
+
+.form-floating > .form-control,
+.form-floating > .form-select {
+  height: calc(3.5rem + 2px);
+  padding: 1rem 0.75rem;
+}
+
+.form-floating > label {
+  position: absolute;
+  top: 0;
+  left: 0;
+  height: 100%;
+  padding: 1rem 0.75rem;
+  pointer-events: none;
+  border: 1px solid transparent;
+  transform-origin: 0 0;
+  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
 }
 
 @media (prefers-reduced-motion: reduce) {
-  .form-range::-ms-thumb {
-    -ms-transition: none;
+  .form-floating > label {
     transition: none;
   }
 }
 
-.form-range::-ms-thumb:active {
-  background-color: #bed8fe;
+.form-floating > .form-control::-moz-placeholder {
+  color: transparent;
 }
 
-.form-range::-ms-track {
-  width: 100%;
-  height: 0.5rem;
+.form-floating > .form-control:-ms-input-placeholder {
   color: transparent;
-  cursor: pointer;
-  background-color: transparent;
-  border-color: transparent;
-  border-width: 0.5rem;
 }
 
-.form-range::-ms-fill-lower {
-  background-color: #dee2e6;
-  border-radius: 1rem;
+.form-floating > .form-control::-ms-input-placeholder {
+  color: transparent;
 }
 
-.form-range::-ms-fill-upper {
-  margin-right: 15px;
-  background-color: #dee2e6;
-  border-radius: 1rem;
+.form-floating > .form-control::placeholder {
+  color: transparent;
 }
 
-.form-range:disabled {
-  pointer-events: none;
+.form-floating > .form-control:not(:-moz-placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
 }
 
-.form-range:disabled::-webkit-slider-thumb {
-  background-color: #adb5bd;
+.form-floating > .form-control:not(:-ms-input-placeholder) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
 }
 
-.form-range:disabled::-moz-range-thumb {
-  background-color: #adb5bd;
+.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
 }
 
-.form-range:disabled::-ms-thumb {
-  background-color: #adb5bd;
+.form-floating > .form-control:-webkit-autofill {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-select {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:focus ~ label,
+.form-floating > .form-control:not(:placeholder-shown) ~ label,
+.form-floating > .form-select ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:-webkit-autofill ~ label {
+  opacity: 0.65;
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
 }
 
 .input-group {
@@ -2512,8 +2572,7 @@ progress {
 }
 
 .input-group > .form-control,
-.input-group > .form-select,
-.input-group > .form-file {
+.input-group > .form-select {
   position: relative;
   flex: 1 1 auto;
   width: 1%;
@@ -2521,25 +2580,10 @@ progress {
 }
 
 .input-group > .form-control:focus,
-.input-group > .form-select:focus,
-.input-group > .form-file .form-file-input:focus ~ .form-file-label {
+.input-group > .form-select:focus {
   z-index: 3;
 }
 
-.input-group > .form-file > .form-file-input:focus {
-  z-index: 4;
-}
-
-.input-group > .form-file:not(:last-child) > .form-file-label {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-
-.input-group > .form-file:not(:first-child) > .form-file-label {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-
 .input-group .btn {
   position: relative;
   z-index: 2;
@@ -2556,7 +2600,7 @@ progress {
   font-size: 1rem;
   font-weight: 400;
   line-height: 1.5;
-  color: #495057;
+  color: #212529;
   text-align: center;
   white-space: nowrap;
   background-color: #e9ecef;
@@ -2564,14 +2608,6 @@ progress {
   border-radius: 0.25rem;
 }
 
-.input-group-lg > .form-control {
-  min-height: calc(1.5em + 1rem + 2px);
-}
-
-.input-group-lg > .form-select {
-  height: calc(1.5em + 1rem + 2px);
-}
-
 .input-group-lg > .form-control,
 .input-group-lg > .form-select,
 .input-group-lg > .input-group-text,
@@ -2581,14 +2617,6 @@ progress {
   border-radius: 0.3rem;
 }
 
-.input-group-sm > .form-control {
-  min-height: calc(1.5em + 0.5rem + 2px);
-}
-
-.input-group-sm > .form-select {
-  height: calc(1.5em + 0.5rem + 2px);
-}
-
 .input-group-sm > .form-control,
 .input-group-sm > .form-select,
 .input-group-sm > .input-group-text,
@@ -2603,13 +2631,19 @@ progress {
   padding-right: 1.75rem;
 }
 
-.input-group > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),
-.input-group > .dropdown-toggle:nth-last-child(n + 3) {
+.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {
   border-top-right-radius: 0;
   border-bottom-right-radius: 0;
 }
 
-.input-group > :not(:first-child):not(.dropdown-menu) {
+.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
   margin-left: -1px;
   border-top-left-radius: 0;
   border-bottom-left-radius: 0;
@@ -2696,15 +2730,6 @@ progress {
   margin-left: .5em;
 }
 
-.was-validated .form-file-input:valid ~ .form-file-label, .form-file-input.is-valid ~ .form-file-label {
-  border-color: #198754;
-}
-
-.was-validated .form-file-input:valid:focus ~ .form-file-label, .form-file-input.is-valid:focus ~ .form-file-label {
-  border-color: #198754;
-  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
-}
-
 .invalid-feedback {
   display: none;
   width: 100%;
@@ -2737,7 +2762,7 @@ progress {
 .was-validated .form-control:invalid, .form-control.is-invalid {
   border-color: #dc3545;
   padding-right: calc(1.5em + 0.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-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%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(0.375em + 0.1875rem) center;
   background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
@@ -2756,7 +2781,7 @@ progress {
 .was-validated .form-select:invalid, .form-select.is-invalid {
   border-color: #dc3545;
   padding-right: calc(0.75em + 2.3125rem);
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), 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 [...]
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%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 [...]
   background-position: right 0.75rem center, center right 1.75rem;
   background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
 }
@@ -2786,15 +2811,6 @@ progress {
   margin-left: .5em;
 }
 
-.was-validated .form-file-input:invalid ~ .form-file-label, .form-file-input.is-invalid ~ .form-file-label {
-  border-color: #dc3545;
-}
-
-.was-validated .form-file-input:invalid:focus ~ .form-file-label, .form-file-input.is-invalid:focus ~ .form-file-label {
-  border-color: #dc3545;
-  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
-}
-
 .btn {
   display: inline-block;
   font-weight: 400;
@@ -2845,14 +2861,14 @@ fieldset:disabled .btn {
 
 .btn-primary:hover {
   color: #fff;
-  background-color: #025ce2;
-  border-color: #0257d5;
+  background-color: #0b5ed7;
+  border-color: #0a58ca;
 }
 
 .btn-check:focus + .btn-primary, .btn-primary:focus {
   color: #fff;
-  background-color: #025ce2;
-  border-color: #0257d5;
+  background-color: #0b5ed7;
+  border-color: #0a58ca;
   box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);
 }
 
@@ -2860,8 +2876,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,
 .show > .btn-primary.dropdown-toggle {
   color: #fff;
-  background-color: #0257d5;
-  border-color: #0252c9;
+  background-color: #0a58ca;
+  border-color: #0a53be;
 }
 
 .btn-check:checked + .btn-primary:focus,
@@ -2884,14 +2900,14 @@ fieldset:disabled .btn {
 
 .btn-secondary:hover {
   color: #fff;
-  background-color: #5a6268;
-  border-color: #545b62;
+  background-color: #5c636a;
+  border-color: #565e64;
 }
 
 .btn-check:focus + .btn-secondary, .btn-secondary:focus {
   color: #fff;
-  background-color: #5a6268;
-  border-color: #545b62;
+  background-color: #5c636a;
+  border-color: #565e64;
   box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);
 }
 
@@ -2899,8 +2915,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,
 .show > .btn-secondary.dropdown-toggle {
   color: #fff;
-  background-color: #545b62;
-  border-color: #4e555b;
+  background-color: #565e64;
+  border-color: #51585e;
 }
 
 .btn-check:checked + .btn-secondary:focus,
@@ -2923,14 +2939,14 @@ fieldset:disabled .btn {
 
 .btn-success:hover {
   color: #fff;
-  background-color: #136740;
-  border-color: #115c39;
+  background-color: #157347;
+  border-color: #146c43;
 }
 
 .btn-check:focus + .btn-success, .btn-success:focus {
   color: #fff;
-  background-color: #136740;
-  border-color: #115c39;
+  background-color: #157347;
+  border-color: #146c43;
   box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);
 }
 
@@ -2938,8 +2954,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-success, .btn-success:active, .btn-success.active,
 .show > .btn-success.dropdown-toggle {
   color: #fff;
-  background-color: #115c39;
-  border-color: #0f5133;
+  background-color: #146c43;
+  border-color: #13653f;
 }
 
 .btn-check:checked + .btn-success:focus,
@@ -2962,14 +2978,14 @@ fieldset:disabled .btn {
 
 .btn-info:hover {
   color: #000;
-  background-color: #2fd3f4;
-  border-color: #23d0f3;
+  background-color: #31d2f2;
+  border-color: #25cff2;
 }
 
 .btn-check:focus + .btn-info, .btn-info:focus {
   color: #000;
-  background-color: #2fd3f4;
-  border-color: #23d0f3;
+  background-color: #31d2f2;
+  border-color: #25cff2;
   box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5);
 }
 
@@ -2977,8 +2993,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-info, .btn-info:active, .btn-info.active,
 .show > .btn-info.dropdown-toggle {
   color: #000;
-  background-color: #3cd5f4;
-  border-color: #23d0f3;
+  background-color: #3dd5f3;
+  border-color: #25cff2;
 }
 
 .btn-check:checked + .btn-info:focus,
@@ -3001,14 +3017,14 @@ fieldset:disabled .btn {
 
 .btn-warning:hover {
   color: #000;
-  background-color: #ffcb2d;
-  border-color: #ffc721;
+  background-color: #ffca2c;
+  border-color: #ffc720;
 }
 
 .btn-check:focus + .btn-warning, .btn-warning:focus {
   color: #000;
-  background-color: #ffcb2d;
-  border-color: #ffc721;
+  background-color: #ffca2c;
+  border-color: #ffc720;
   box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);
 }
 
@@ -3016,8 +3032,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,
 .show > .btn-warning.dropdown-toggle {
   color: #000;
-  background-color: #ffce3a;
-  border-color: #ffc721;
+  background-color: #ffcd39;
+  border-color: #ffc720;
 }
 
 .btn-check:checked + .btn-warning:focus,
@@ -3040,14 +3056,14 @@ fieldset:disabled .btn {
 
 .btn-danger:hover {
   color: #fff;
-  background-color: #c82333;
-  border-color: #bd2130;
+  background-color: #bb2d3b;
+  border-color: #b02a37;
 }
 
 .btn-check:focus + .btn-danger, .btn-danger:focus {
   color: #fff;
-  background-color: #c82333;
-  border-color: #bd2130;
+  background-color: #bb2d3b;
+  border-color: #b02a37;
   box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);
 }
 
@@ -3055,8 +3071,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,
 .show > .btn-danger.dropdown-toggle {
   color: #fff;
-  background-color: #bd2130;
-  border-color: #b21f2d;
+  background-color: #b02a37;
+  border-color: #a52834;
 }
 
 .btn-check:checked + .btn-danger:focus,
@@ -3079,14 +3095,14 @@ fieldset:disabled .btn {
 
 .btn-light:hover {
   color: #000;
-  background-color: white;
-  border-color: white;
+  background-color: #f9fafb;
+  border-color: #f9fafb;
 }
 
 .btn-check:focus + .btn-light, .btn-light:focus {
   color: #000;
-  background-color: white;
-  border-color: white;
+  background-color: #f9fafb;
+  border-color: #f9fafb;
   box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);
 }
 
@@ -3094,8 +3110,8 @@ fieldset:disabled .btn {
 .btn-check:active + .btn-light, .btn-light:active, .btn-light.active,
 .show > .btn-light.dropdown-toggle {
   color: #000;
-  background-color: white;
-  border-color: white;
+  background-color: #f9fafb;
+  border-color: #f9fafb;
 }
 
 .btn-check:checked + .btn-light:focus,
@@ -3112,41 +3128,41 @@ fieldset:disabled .btn {
 
 .btn-dark {
   color: #fff;
-  background-color: #343a40;
-  border-color: #343a40;
+  background-color: #212529;
+  border-color: #212529;
 }
 
 .btn-dark:hover {
   color: #fff;
-  background-color: #23272b;
-  border-color: #1d2124;
+  background-color: #1c1f23;
+  border-color: #1a1e21;
 }
 
 .btn-check:focus + .btn-dark, .btn-dark:focus {
   color: #fff;
-  background-color: #23272b;
-  border-color: #1d2124;
-  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);
+  background-color: #1c1f23;
+  border-color: #1a1e21;
+  box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);
 }
 
 .btn-check:checked + .btn-dark,
 .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,
 .show > .btn-dark.dropdown-toggle {
   color: #fff;
-  background-color: #1d2124;
-  border-color: #171a1d;
+  background-color: #1a1e21;
+  border-color: #191c1f;
 }
 
 .btn-check:checked + .btn-dark:focus,
 .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,
 .show > .btn-dark.dropdown-toggle:focus {
-  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);
+  box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);
 }
 
 .btn-dark:disabled, .btn-dark.disabled {
   color: #fff;
-  background-color: #343a40;
-  border-color: #343a40;
+  background-color: #212529;
+  border-color: #212529;
 }
 
 .btn-outline-primary {
@@ -3374,34 +3390,34 @@ fieldset:disabled .btn {
 }
 
 .btn-outline-dark {
-  color: #343a40;
-  border-color: #343a40;
+  color: #212529;
+  border-color: #212529;
 }
 
 .btn-outline-dark:hover {
   color: #fff;
-  background-color: #343a40;
-  border-color: #343a40;
+  background-color: #212529;
+  border-color: #212529;
 }
 
 .btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {
-  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);
+  box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);
 }
 
 .btn-check:checked + .btn-outline-dark,
 .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {
   color: #fff;
-  background-color: #343a40;
-  border-color: #343a40;
+  background-color: #212529;
+  border-color: #212529;
 }
 
 .btn-check:checked + .btn-outline-dark:focus,
 .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {
-  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);
+  box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);
 }
 
 .btn-outline-dark:disabled, .btn-outline-dark.disabled {
-  color: #343a40;
+  color: #212529;
   background-color: transparent;
 }
 
@@ -3412,7 +3428,7 @@ fieldset:disabled .btn {
 }
 
 .btn-link:hover {
-  color: #024dbc;
+  color: #0a58ca;
 }
 
 .btn-link:disabled, .btn-link.disabled {
@@ -3431,15 +3447,6 @@ fieldset:disabled .btn {
   border-radius: 0.2rem;
 }
 
-.btn-block {
-  display: block;
-  width: 100%;
-}
-
-.btn-block + .btn-block {
-  margin-top: 0.5rem;
-}
-
 .fade {
   transition: opacity 0.15s linear;
 }
@@ -3693,7 +3700,7 @@ fieldset:disabled .btn {
 }
 
 .dropdown-item:hover, .dropdown-item:focus {
-  color: #16181b;
+  color: #1e2125;
   background-color: #f8f9fa;
 }
 
@@ -4453,28 +4460,120 @@ fieldset:disabled .btn {
   }
 }
 
-.accordion {
+.accordion-button {
+  position: relative;
+  display: flex;
+  align-items: center;
+  width: 100%;
+  padding: 1rem 1.25rem;
+  font-size: 1rem;
+  color: #212529;
+  background-color: transparent;
+  border: 1px solid rgba(0, 0, 0, 0.125);
+  border-radius: 0;
   overflow-anchor: none;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
 }
 
-.accordion > .card {
-  overflow: hidden;
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button {
+    transition: none;
+  }
 }
 
-.accordion > .card:not(:last-of-type) {
-  border-bottom: 0;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
+.accordion-button.collapsed {
+  border-bottom-width: 0;
 }
 
-.accordion > .card:not(:first-of-type) {
+.accordion-button:not(.collapsed) {
+  color: #0c63e4;
+  background-color: #e7f1ff;
+}
+
+.accordion-button:not(.collapsed)::after {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  transform: rotate(180deg);
+}
+
+.accordion-button::after {
+  flex-shrink: 0;
+  width: 1.25rem;
+  height: 1.25rem;
+  margin-left: auto;
+  content: "";
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-size: 1.25rem;
+  transition: transform 0.2s ease-in-out;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button::after {
+    transition: none;
+  }
+}
+
+.accordion-button:hover {
+  z-index: 2;
+}
+
+.accordion-button:focus {
+  z-index: 3;
+  border-color: #86b7fe;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+}
+
+.accordion-header {
+  margin-bottom: 0;
+}
+
+.accordion-item:first-of-type .accordion-button {
+  border-top-left-radius: 0.25rem;
+  border-top-right-radius: 0.25rem;
+}
+
+.accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-width: 1px;
+  border-bottom-right-radius: 0.25rem;
+  border-bottom-left-radius: 0.25rem;
+}
+
+.accordion-item:last-of-type .accordion-collapse {
+  border-bottom-width: 1px;
+  border-bottom-right-radius: 0.25rem;
+  border-bottom-left-radius: 0.25rem;
+}
+
+.accordion-collapse {
+  border: solid rgba(0, 0, 0, 0.125);
+  border-width: 0 1px;
+}
+
+.accordion-body {
+  padding: 1rem 1.25rem;
+}
+
+.accordion-flush .accordion-button {
+  border-right: 0;
+  border-left: 0;
+  border-radius: 0;
+}
+
+.accordion-flush .accordion-collapse {
+  border-width: 0;
+}
+
+.accordion-flush .accordion-item:first-of-type .accordion-button {
+  border-top-width: 0;
   border-top-left-radius: 0;
   border-top-right-radius: 0;
 }
 
-.accordion > .card > .card-header {
-  border-radius: 0;
-  margin-bottom: -1px;
+.accordion-flush .accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-width: 0;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
 }
 
 .breadcrumb {
@@ -4487,16 +4586,12 @@ fieldset:disabled .btn {
   border-radius: 0.25rem;
 }
 
-.breadcrumb-item {
-  display: flex;
-}
-
 .breadcrumb-item + .breadcrumb-item {
   padding-left: 0.5rem;
 }
 
 .breadcrumb-item + .breadcrumb-item::before {
-  display: inline-block;
+  float: left;
   padding-right: 0.5rem;
   color: #6c757d;
   content: "/";
@@ -4530,14 +4625,14 @@ fieldset:disabled .btn {
 
 .page-link:hover {
   z-index: 2;
-  color: #024dbc;
+  color: #0a58ca;
   background-color: #e9ecef;
   border-color: #dee2e6;
 }
 
 .page-link:focus {
   z-index: 3;
-  color: #024dbc;
+  color: #0a58ca;
   background-color: #e9ecef;
   outline: 0;
   box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
@@ -4651,87 +4746,88 @@ fieldset:disabled .btn {
   position: absolute;
   top: 0;
   right: 0;
+  z-index: 2;
   padding: 1.25rem 1rem;
 }
 
 .alert-primary {
-  color: #073984;
+  color: #084298;
   background-color: #cfe2ff;
-  border-color: #bbd6fe;
+  border-color: #b6d4fe;
 }
 
 .alert-primary .alert-link {
-  color: #042454;
+  color: #06357a;
 }
 
 .alert-secondary {
-  color: #383d41;
+  color: #41464b;
   background-color: #e2e3e5;
-  border-color: #d6d8db;
+  border-color: #d3d6d8;
 }
 
 .alert-secondary .alert-link {
-  color: #202326;
+  color: #34383c;
 }
 
 .alert-success {
-  color: #0d462c;
+  color: #0f5132;
   background-color: #d1e7dd;
-  border-color: #bfddcf;
+  border-color: #badbcc;
 }
 
 .alert-success .alert-link {
-  color: #051b11;
+  color: #0c4128;
 }
 
 .alert-info {
-  color: #07697d;
+  color: #055160;
   background-color: #cff4fc;
-  border-color: #bbf0fb;
+  border-color: #b6effb;
 }
 
 .alert-info .alert-link {
-  color: #04404d;
+  color: #04414d;
 }
 
 .alert-warning {
-  color: #856404;
+  color: #664d03;
   background-color: #fff3cd;
-  border-color: #ffeeba;
+  border-color: #ffecb5;
 }
 
 .alert-warning .alert-link {
-  color: #533f03;
+  color: #523e02;
 }
 
 .alert-danger {
-  color: #721c24;
+  color: #842029;
   background-color: #f8d7da;
-  border-color: #f5c6cb;
+  border-color: #f5c2c7;
 }
 
 .alert-danger .alert-link {
-  color: #491217;
+  color: #6a1a21;
 }
 
 .alert-light {
-  color: #818182;
+  color: #636464;
   background-color: #fefefe;
   border-color: #fdfdfe;
 }
 
 .alert-light .alert-link {
-  color: #686868;
+  color: #4f5050;
 }
 
 .alert-dark {
-  color: #1b1e21;
-  background-color: #d6d8d9;
-  border-color: #c6c8ca;
+  color: #141619;
+  background-color: #d3d3d4;
+  border-color: #bcbebf;
 }
 
 .alert-dark .alert-link {
-  color: #040505;
+  color: #101214;
 }
 
 @-webkit-keyframes progress-bar-stripes {
@@ -4779,8 +4875,8 @@ fieldset:disabled .btn {
 }
 
 .progress-bar-animated {
-  -webkit-animation: progress-bar-stripes 1s linear infinite;
-  animation: progress-bar-stripes 1s linear infinite;
+  -webkit-animation: 1s linear infinite progress-bar-stripes;
+  animation: 1s linear infinite progress-bar-stripes;
 }
 
 @media (prefers-reduced-motion: reduce) {
@@ -5023,131 +5119,131 @@ fieldset:disabled .btn {
 }
 
 .list-group-item-primary {
-  color: #073984;
-  background-color: #bbd6fe;
+  color: #084298;
+  background-color: #cfe2ff;
 }
 
 .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
-  color: #073984;
-  background-color: #a2c7fe;
+  color: #084298;
+  background-color: #bacbe6;
 }
 
 .list-group-item-primary.list-group-item-action.active {
   color: #fff;
-  background-color: #073984;
-  border-color: #073984;
+  background-color: #084298;
+  border-color: #084298;
 }
 
 .list-group-item-secondary {
-  color: #383d41;
-  background-color: #d6d8db;
+  color: #41464b;
+  background-color: #e2e3e5;
 }
 
 .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
-  color: #383d41;
-  background-color: #c8cbcf;
+  color: #41464b;
+  background-color: #cbccce;
 }
 
 .list-group-item-secondary.list-group-item-action.active {
   color: #fff;
-  background-color: #383d41;
-  border-color: #383d41;
+  background-color: #41464b;
+  border-color: #41464b;
 }
 
 .list-group-item-success {
-  color: #0d462c;
-  background-color: #bfddcf;
+  color: #0f5132;
+  background-color: #d1e7dd;
 }
 
 .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
-  color: #0d462c;
-  background-color: #aed4c3;
+  color: #0f5132;
+  background-color: #bcd0c7;
 }
 
 .list-group-item-success.list-group-item-action.active {
   color: #fff;
-  background-color: #0d462c;
-  border-color: #0d462c;
+  background-color: #0f5132;
+  border-color: #0f5132;
 }
 
 .list-group-item-info {
-  color: #07697d;
-  background-color: #bbf0fb;
+  color: #055160;
+  background-color: #cff4fc;
 }
 
 .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
-  color: #07697d;
-  background-color: #a3ebfa;
+  color: #055160;
+  background-color: #badce3;
 }
 
 .list-group-item-info.list-group-item-action.active {
   color: #fff;
-  background-color: #07697d;
-  border-color: #07697d;
+  background-color: #055160;
+  border-color: #055160;
 }
 
 .list-group-item-warning {
-  color: #856404;
-  background-color: #ffeeba;
+  color: #664d03;
+  background-color: #fff3cd;
 }
 
 .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
-  color: #856404;
-  background-color: #ffe8a1;
+  color: #664d03;
+  background-color: #e6dbb9;
 }
 
 .list-group-item-warning.list-group-item-action.active {
   color: #fff;
-  background-color: #856404;
-  border-color: #856404;
+  background-color: #664d03;
+  border-color: #664d03;
 }
 
 .list-group-item-danger {
-  color: #721c24;
-  background-color: #f5c6cb;
+  color: #842029;
+  background-color: #f8d7da;
 }
 
 .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
-  color: #721c24;
-  background-color: #f1b0b7;
+  color: #842029;
+  background-color: #dfc2c4;
 }
 
 .list-group-item-danger.list-group-item-action.active {
   color: #fff;
-  background-color: #721c24;
-  border-color: #721c24;
+  background-color: #842029;
+  border-color: #842029;
 }
 
 .list-group-item-light {
-  color: #818182;
-  background-color: #fdfdfe;
+  color: #636464;
+  background-color: #fefefe;
 }
 
 .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
-  color: #818182;
-  background-color: #ececf6;
+  color: #636464;
+  background-color: #e5e5e5;
 }
 
 .list-group-item-light.list-group-item-action.active {
   color: #fff;
-  background-color: #818182;
-  border-color: #818182;
+  background-color: #636464;
+  border-color: #636464;
 }
 
 .list-group-item-dark {
-  color: #1b1e21;
-  background-color: #c6c8ca;
+  color: #141619;
+  background-color: #d3d3d4;
 }
 
 .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
-  color: #1b1e21;
-  background-color: #b9bbbe;
+  color: #141619;
+  background-color: #bebebf;
 }
 
 .list-group-item-dark.list-group-item-action.active {
   color: #fff;
-  background-color: #1b1e21;
-  border-color: #1b1e21;
+  background-color: #141619;
+  border-color: #141619;
 }
 
 .btn-close {
@@ -5156,8 +5252,7 @@ fieldset:disabled .btn {
   height: 1em;
   padding: 0.25em 0.25em;
   color: #000;
-  background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 16 16'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") no-repeat center center/1em auto;
-  background-clip: content-box;
+  background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;
   border: 0;
   border-radius: 0.25rem;
   opacity: 0.5;
@@ -5781,7 +5876,7 @@ fieldset:disabled .btn {
   width: 1rem;
   margin-left: -0.5rem;
   content: "";
-  border-bottom: 1px solid #f7f7f7;
+  border-bottom: 1px solid #f0f0f0;
 }
 
 .bs-popover-left, .bs-popover-auto[x-placement^="left"] {
@@ -5811,8 +5906,8 @@ fieldset:disabled .btn {
   padding: 0.5rem 1rem;
   margin-bottom: 0;
   font-size: 1rem;
-  background-color: #f7f7f7;
-  border-bottom: 1px solid #ebebeb;
+  background-color: #f0f0f0;
+  border-bottom: 1px solid #d8d8d8;
   border-top-left-radius: calc(0.3rem - 1px);
   border-top-right-radius: calc(0.3rem - 1px);
 }
@@ -5957,11 +6052,11 @@ fieldset:disabled .btn {
 }
 
 .carousel-control-prev-icon {
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 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' viewBox='0 0 16 16'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
 }
 
 .carousel-indicators {
@@ -6049,8 +6144,8 @@ fieldset:disabled .btn {
   border: 0.25em solid currentColor;
   border-right-color: transparent;
   border-radius: 50%;
-  -webkit-animation: spinner-border 0.75s linear infinite;
-  animation: spinner-border 0.75s linear infinite;
+  -webkit-animation: 0.75s linear infinite spinner-border;
+  animation: 0.75s linear infinite spinner-border;
 }
 
 .spinner-border-sm {
@@ -6087,8 +6182,8 @@ fieldset:disabled .btn {
   background-color: currentColor;
   border-radius: 50%;
   opacity: 0;
-  -webkit-animation: spinner-grow 0.75s linear infinite;
-  animation: spinner-grow 0.75s linear infinite;
+  -webkit-animation: 0.75s linear infinite spinner-grow;
+  animation: 0.75s linear infinite spinner-grow;
 }
 
 .spinner-grow-sm {
@@ -6096,6 +6191,14 @@ fieldset:disabled .btn {
   height: 1rem;
 }
 
+@media (prefers-reduced-motion: reduce) {
+  .spinner-border,
+  .spinner-grow {
+    -webkit-animation-duration: 1.5s;
+    animation-duration: 1.5s;
+  }
+}
+
 .clearfix::after {
   display: block;
   clear: both;
@@ -6107,7 +6210,7 @@ fieldset:disabled .btn {
 }
 
 .link-primary:hover, .link-primary:focus {
-  color: #024dbc;
+  color: #0a58ca;
 }
 
 .link-secondary {
@@ -6115,7 +6218,7 @@ fieldset:disabled .btn {
 }
 
 .link-secondary:hover, .link-secondary:focus {
-  color: #494f54;
+  color: #565e64;
 }
 
 .link-success {
@@ -6123,7 +6226,7 @@ fieldset:disabled .btn {
 }
 
 .link-success:hover, .link-success:focus {
-  color: #0d462c;
+  color: #146c43;
 }
 
 .link-info {
@@ -6131,7 +6234,7 @@ fieldset:disabled .btn {
 }
 
 .link-info:hover, .link-info:focus {
-  color: #54dbf6;
+  color: #3dd5f3;
 }
 
 .link-warning {
@@ -6139,7 +6242,7 @@ fieldset:disabled .btn {
 }
 
 .link-warning:hover, .link-warning:focus {
-  color: #ffd454;
+  color: #ffcd39;
 }
 
 .link-danger {
@@ -6147,7 +6250,7 @@ fieldset:disabled .btn {
 }
 
 .link-danger:hover, .link-danger:focus {
-  color: #a71d2a;
+  color: #b02a37;
 }
 
 .link-light {
@@ -6155,15 +6258,15 @@ fieldset:disabled .btn {
 }
 
 .link-light:hover, .link-light:focus {
-  color: white;
+  color: #f9fafb;
 }
 
 .link-dark {
-  color: #343a40;
+  color: #212529;
 }
 
 .link-dark:hover, .link-dark:focus {
-  color: #121416;
+  color: #1a1e21;
 }
 
 .ratio {
@@ -6342,6 +6445,14 @@ fieldset:disabled .btn {
   overflow: hidden !important;
 }
 
+.overflow-visible {
+  overflow: visible !important;
+}
+
+.overflow-scroll {
+  overflow: scroll !important;
+}
+
 .d-inline {
   display: inline !important;
 }
@@ -6354,6 +6465,10 @@ fieldset:disabled .btn {
   display: block !important;
 }
 
+.d-grid {
+  display: grid !important;
+}
+
 .d-table {
   display: table !important;
 }
@@ -6536,7 +6651,7 @@ fieldset:disabled .btn {
 }
 
 .border-dark {
-  border-color: #343a40 !important;
+  border-color: #212529 !important;
 }
 
 .border-white {
@@ -6679,6 +6794,30 @@ fieldset:disabled .btn {
   flex-wrap: wrap-reverse !important;
 }
 
+.gap-0 {
+  gap: 0 !important;
+}
+
+.gap-1 {
+  gap: 0.25rem !important;
+}
+
+.gap-2 {
+  gap: 0.5rem !important;
+}
+
+.gap-3 {
+  gap: 1rem !important;
+}
+
+.gap-4 {
+  gap: 1.5rem !important;
+}
+
+.gap-5 {
+  gap: 3rem !important;
+}
+
 .justify-content-start {
   justify-content: flex-start !important;
 }
@@ -7193,23 +7332,55 @@ fieldset:disabled .btn {
   padding-left: 3rem !important;
 }
 
-.font-weight-light {
+.fs-1 {
+  font-size: calc(1.375rem + 1.5vw) !important;
+}
+
+.fs-2 {
+  font-size: calc(1.325rem + 0.9vw) !important;
+}
+
+.fs-3 {
+  font-size: calc(1.3rem + 0.6vw) !important;
+}
+
+.fs-4 {
+  font-size: calc(1.275rem + 0.3vw) !important;
+}
+
+.fs-5 {
+  font-size: 1.25rem !important;
+}
+
+.fs-6 {
+  font-size: 1rem !important;
+}
+
+.fst-italic {
+  font-style: italic !important;
+}
+
+.fst-normal {
+  font-style: normal !important;
+}
+
+.fw-light {
   font-weight: 300 !important;
 }
 
-.font-weight-lighter {
+.fw-lighter {
   font-weight: lighter !important;
 }
 
-.font-weight-normal {
+.fw-normal {
   font-weight: 400 !important;
 }
 
-.font-weight-bold {
+.fw-bold {
   font-weight: 700 !important;
 }
 
-.font-weight-bolder {
+.fw-bolder {
   font-weight: bolder !important;
 }
 
@@ -7266,7 +7437,7 @@ fieldset:disabled .btn {
 }
 
 .text-dark {
-  color: #343a40 !important;
+  color: #212529 !important;
 }
 
 .text-white {
@@ -7338,7 +7509,7 @@ fieldset:disabled .btn {
 }
 
 .bg-dark {
-  background-color: #343a40 !important;
+  background-color: #212529 !important;
 }
 
 .bg-body {
@@ -7377,14 +7548,6 @@ fieldset:disabled .btn {
   text-decoration: line-through !important;
 }
 
-.font-italic {
-  font-style: italic !important;
-}
-
-.font-normal {
-  font-style: normal !important;
-}
-
 .text-break {
   word-wrap: break-word !important;
   word-break: break-word !important;
@@ -7427,11 +7590,19 @@ fieldset:disabled .btn {
   border-radius: 0.25rem !important;
 }
 
-.rounded-sm {
+.rounded-0 {
+  border-radius: 0 !important;
+}
+
+.rounded-1 {
   border-radius: 0.2rem !important;
 }
 
-.rounded-lg {
+.rounded-2 {
+  border-radius: 0.25rem !important;
+}
+
+.rounded-3 {
   border-radius: 0.3rem !important;
 }
 
@@ -7443,10 +7614,6 @@ fieldset:disabled .btn {
   border-radius: 50rem !important;
 }
 
-.rounded-0 {
-  border-radius: 0 !important;
-}
-
 .rounded-top {
   border-top-left-radius: 0.25rem !important;
   border-top-right-radius: 0.25rem !important;
@@ -7494,6 +7661,9 @@ fieldset:disabled .btn {
   .d-sm-block {
     display: block !important;
   }
+  .d-sm-grid {
+    display: grid !important;
+  }
   .d-sm-table {
     display: table !important;
   }
@@ -7548,6 +7718,24 @@ fieldset:disabled .btn {
   .flex-sm-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-sm-0 {
+    gap: 0 !important;
+  }
+  .gap-sm-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-sm-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-sm-3 {
+    gap: 1rem !important;
+  }
+  .gap-sm-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-sm-5 {
+    gap: 3rem !important;
+  }
   .justify-content-sm-start {
     justify-content: flex-start !important;
   }
@@ -7970,6 +8158,9 @@ fieldset:disabled .btn {
   .d-md-block {
     display: block !important;
   }
+  .d-md-grid {
+    display: grid !important;
+  }
   .d-md-table {
     display: table !important;
   }
@@ -8024,6 +8215,24 @@ fieldset:disabled .btn {
   .flex-md-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-md-0 {
+    gap: 0 !important;
+  }
+  .gap-md-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-md-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-md-3 {
+    gap: 1rem !important;
+  }
+  .gap-md-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-md-5 {
+    gap: 3rem !important;
+  }
   .justify-content-md-start {
     justify-content: flex-start !important;
   }
@@ -8446,6 +8655,9 @@ fieldset:disabled .btn {
   .d-lg-block {
     display: block !important;
   }
+  .d-lg-grid {
+    display: grid !important;
+  }
   .d-lg-table {
     display: table !important;
   }
@@ -8500,6 +8712,24 @@ fieldset:disabled .btn {
   .flex-lg-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-lg-0 {
+    gap: 0 !important;
+  }
+  .gap-lg-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-lg-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-lg-3 {
+    gap: 1rem !important;
+  }
+  .gap-lg-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-lg-5 {
+    gap: 3rem !important;
+  }
   .justify-content-lg-start {
     justify-content: flex-start !important;
   }
@@ -8922,6 +9152,9 @@ fieldset:disabled .btn {
   .d-xl-block {
     display: block !important;
   }
+  .d-xl-grid {
+    display: grid !important;
+  }
   .d-xl-table {
     display: table !important;
   }
@@ -8976,6 +9209,24 @@ fieldset:disabled .btn {
   .flex-xl-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-xl-0 {
+    gap: 0 !important;
+  }
+  .gap-xl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xl-5 {
+    gap: 3rem !important;
+  }
   .justify-content-xl-start {
     justify-content: flex-start !important;
   }
@@ -9398,6 +9649,9 @@ fieldset:disabled .btn {
   .d-xxl-block {
     display: block !important;
   }
+  .d-xxl-grid {
+    display: grid !important;
+  }
   .d-xxl-table {
     display: table !important;
   }
@@ -9452,6 +9706,24 @@ fieldset:disabled .btn {
   .flex-xxl-wrap-reverse {
     flex-wrap: wrap-reverse !important;
   }
+  .gap-xxl-0 {
+    gap: 0 !important;
+  }
+  .gap-xxl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xxl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xxl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xxl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xxl-5 {
+    gap: 3rem !important;
+  }
   .justify-content-xxl-start {
     justify-content: flex-start !important;
   }
@@ -9855,6 +10127,57 @@ fieldset:disabled .btn {
   }
 }
 
+@media (min-width: 1200px) {
+  .fs-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-2 {
+    font-size: 2rem !important;
+  }
+  .fs-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-4 {
+    font-size: 1.5rem !important;
+  }
+  .fs-sm-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-sm-2 {
+    font-size: 2rem !important;
+  }
+  .fs-sm-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-sm-4 {
+    font-size: 1.5rem !important;
+  }
+  .fs-md-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-md-2 {
+    font-size: 2rem !important;
+  }
+  .fs-md-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-md-4 {
+    font-size: 1.5rem !important;
+  }
+  .fs-lg-1 {
+    font-size: 2.5rem !important;
+  }
+  .fs-lg-2 {
+    font-size: 2rem !important;
+  }
+  .fs-lg-3 {
+    font-size: 1.75rem !important;
+  }
+  .fs-lg-4 {
+    font-size: 1.5rem !important;
+  }
+}
+
 @media print {
   .d-print-inline {
     display: inline !important;
@@ -9865,6 +10188,9 @@ fieldset:disabled .btn {
   .d-print-block {
     display: block !important;
   }
+  .d-print-grid {
+    display: grid !important;
+  }
   .d-print-table {
     display: table !important;
   }
@@ -10167,11 +10493,11 @@ fieldset:disabled .btn {
 }
 
 .datepicker-input.in-edit {
-  border-color: #72abfe;
+  border-color: #6da8fe;
 }
 
 .datepicker-input.in-edit:focus, .datepicker-input.in-edit:active {
-  box-shadow: 0 0 0.25em 0.25em rgba(114, 171, 254, 0.2);
+  box-shadow: 0 0 0.25em 0.25em rgba(109, 168, 254, 0.2);
 }
 
 .btn-secondary {
@@ -10183,13 +10509,13 @@ fieldset:disabled .btn {
 .btn-secondary:hover {
   color: #000;
   background-color: white;
-  border-color: #dde1e5;
+  border-color: #d3d8de;
 }
 
 .btn-check:focus + .btn-secondary, .btn-secondary:focus {
   color: #000;
   background-color: white;
-  border-color: #dde1e5;
+  border-color: #d3d8de;
   box-shadow: 0 0 0 0.25rem rgba(175, 180, 185, 0.5);
 }
 
@@ -10198,7 +10524,7 @@ fieldset:disabled .btn {
 .show > .btn-secondary.dropdown-toggle {
   color: #000;
   background-color: white;
-  border-color: #dde1e5;
+  border-color: #d3d8de;
 }
 
 .btn-check:checked + .btn-secondary:focus,
@@ -10367,7 +10693,7 @@ tobago-date input::-ms-clear {
 }
 
 tobago-date input:disabled {
-  color: rgba(73, 80, 87, 0.5);
+  color: rgba(33, 37, 41, 0.5);
 }
 
 /* for pickers with more than one icon, e.g. date-time picker */
@@ -10493,7 +10819,7 @@ tobago-in {
 }
 
 .tobago-in:disabled {
-  color: rgba(73, 80, 87, 0.5);
+  color: rgba(33, 37, 41, 0.5);
 }
 
 .tobago-in-markup-number {
@@ -10537,7 +10863,7 @@ button.tobago-link {
 }
 
 button.tobago-link:focus, button.tobago-link:hover {
-  color: #024dbc;
+  color: #0a58ca;
   cursor: pointer;
   outline: none;
   text-decoration: underline;
@@ -10699,7 +11025,7 @@ tobago-dropdown {
 }
 
 tobago-dropdown .tobago-dropdown-selected, .tobago-page-menuStore .tobago-dropdown-selected {
-  color: #16181b;
+  color: #1e2125;
   text-decoration: none;
   background-color: #f8f9fa;
 }
@@ -11592,7 +11918,7 @@ tobago-tab .nav-link:not([href]):not([tabindex]):not(.active) {
 }
 
 tobago-tab .nav-link:not([href]):not([tabindex]):not(.active):hover {
-  color: #024dbc;
+  color: #0a58ca;
 }
 
 tobago-tab .nav-link:not([href]):not([tabindex]).disabled {
@@ -11777,7 +12103,7 @@ tobago-tree-listbox .tobago-treeListbox-select, .tobago-treeListbox .tobago-tree
 
 /* textarea --------------------------------------------------------- */
 tobago-textarea textarea:disabled {
-  color: rgba(73, 80, 87, 0.5);
+  color: rgba(33, 37, 41, 0.5);
 }
 
 /* facesMessages messageLayout focus shadows ------------------------ */
diff --git a/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.css.map b/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.css.map
index 0016e68..49068a1 100644
--- a/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago.css","../../scss/tobago-theme.scss","../../node_modules/bootstrap/scss/bootstrap.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","../../node_modules/bootstrap/scss/_variables.scss","../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/mixins/_lists.scss","../../ [...]
\ No newline at end of file
+{"version":3,"sources":["tobago.css","../../scss/tobago-theme.scss","../../node_modules/bootstrap/scss/bootstrap.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","../../node_modules/bootstrap/scss/_variables.scss","../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../node_modules/bootstrap/scss/_functions.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../nod [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.min.css b/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.min.css
index afe3c01..31cc0bd 100644
--- a/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#343a40;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto, [...]
+@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto, [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.min.css.map b/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.min.css.map
index 4594284..5014344 100644
--- a/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-scarborough/npm/dist/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","dist/css/tobago.css","../../node_modules/bootstrap/scss/vendor/_rfs.scss","tobago.css","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/mixins/_lists.scss","../../node_modules/bootstrap/scss/_images.scss","../../node_modules/bootstrap/scss/mixins/_image.scss","../../node_mod [...]
\ No newline at end of file
+{"version":3,"sources":["../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","dist/css/tobago.css","../../node_modules/bootstrap/scss/vendor/_rfs.scss","tobago.css","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/mixins/_lists.scss","../../node_modules/bootstrap/scss/_images.scss","../../node_modules/bootstrap/scss/mixins/_image.scss","../../node_mod [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/npm/package-lock.json b/tobago-theme/tobago-theme-scarborough/npm/package-lock.json
index d5b1bb4..356adea 100644
--- a/tobago-theme/tobago-theme-scarborough/npm/package-lock.json
+++ b/tobago-theme/tobago-theme-scarborough/npm/package-lock.json
@@ -31,9 +31,9 @@
       }
     },
     "@eslint/eslintrc": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz",
-      "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==",
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz",
+      "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==",
       "dev": true,
       "requires": {
         "ajv": "^6.12.4",
@@ -105,9 +105,9 @@
       "dev": true
     },
     "acorn": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz",
-      "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
       "dev": true
     },
     "acorn-jsx": {
@@ -117,9 +117,9 @@
       "dev": true
     },
     "ajv": {
-      "version": "6.12.5",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz",
-      "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==",
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
       "requires": {
         "fast-deep-equal": "^3.1.1",
@@ -147,9 +147,9 @@
       "dev": true
     },
     "ansi-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-      "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+      "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
       "dev": true
     },
     "ansi-styles": {
@@ -283,9 +283,9 @@
       "dev": true
     },
     "aws4": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
-      "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
       "dev": true
     },
     "balanced-match": {
@@ -309,19 +309,10 @@
       "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
       "dev": true
     },
-    "block-stream": {
-      "version": "0.0.9",
-      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
-      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
-      "dev": true,
-      "requires": {
-        "inherits": "~2.0.0"
-      }
-    },
     "bootstrap": {
-      "version": "5.0.0-alpha2",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.0-alpha2.tgz",
-      "integrity": "sha512-ZhW32+m5ImJoEkDKn43QQk2KovpJFisV/7TAg/RCzDi+B8m7FUgLHWx1Auu0Jt3/DQXDYwp6iwsprP3ej4u3ng==",
+      "version": "5.0.0-alpha3",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.0-alpha3.tgz",
+      "integrity": "sha512-ghwrMFNzqOwfB0nJ1iYbkERd+EK1PblUl7rEEynY35jD0TUlSY6yrjG2M42qI++NhAUBEqGcjmmHkMGs3QyNHA==",
       "dev": true
     },
     "brace-expansion": {
@@ -454,6 +445,12 @@
         "readdirp": "~3.4.0"
       }
     },
+    "chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "dev": true
+    },
     "clean-css": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
@@ -491,17 +488,6 @@
           "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
         "strip-ansi": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -761,6 +747,12 @@
         "ansi-colors": "^4.1.1"
       }
     },
+    "env-paths": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
+      "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
+      "dev": true
+    },
     "error-ex": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -813,13 +805,13 @@
       "dev": true
     },
     "eslint": {
-      "version": "7.10.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.10.0.tgz",
-      "integrity": "sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz",
+      "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@eslint/eslintrc": "^0.1.3",
+        "@eslint/eslintrc": "^0.2.1",
         "ajv": "^6.10.0",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
@@ -828,7 +820,7 @@
         "enquirer": "^2.3.5",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^2.1.0",
-        "eslint-visitor-keys": "^1.3.0",
+        "eslint-visitor-keys": "^2.0.0",
         "espree": "^7.3.0",
         "esquery": "^1.2.0",
         "esutils": "^2.0.2",
@@ -857,19 +849,12 @@
         "v8-compile-cache": "^2.0.3"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-          "dev": true
-        },
         "ansi-styles": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
-          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
           "dev": true,
           "requires": {
-            "@types/color-name": "^1.1.1",
             "color-convert": "^2.0.1"
           }
         },
@@ -948,15 +933,6 @@
           "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
           "dev": true
         },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        },
         "supports-color": {
           "version": "7.2.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -1018,12 +994,20 @@
       "dev": true,
       "requires": {
         "eslint-visitor-keys": "^1.1.0"
+      },
+      "dependencies": {
+        "eslint-visitor-keys": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+          "dev": true
+        }
       }
     },
     "eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
+      "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
       "dev": true
     },
     "espree": {
@@ -1035,6 +1019,14 @@
         "acorn": "^7.4.0",
         "acorn-jsx": "^5.2.0",
         "eslint-visitor-keys": "^1.3.0"
+      },
+      "dependencies": {
+        "eslint-visitor-keys": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+          "dev": true
+        }
       }
     },
     "esprima": {
@@ -1224,6 +1216,15 @@
         "universalify": "^1.0.0"
       }
     },
+    "fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -1237,18 +1238,6 @@
       "dev": true,
       "optional": true
     },
-    "fstream": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
-      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "inherits": "~2.0.0",
-        "mkdirp": ">=0.5 0",
-        "rimraf": "2"
-      }
-    },
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -1399,13 +1388,13 @@
       }
     },
     "globule": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz",
-      "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
+      "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
       "dev": true,
       "requires": {
         "glob": "~7.1.1",
-        "lodash": "~4.17.12",
+        "lodash": "~4.17.10",
         "minimatch": "~3.0.2"
       }
     },
@@ -1422,12 +1411,12 @@
       "dev": true
     },
     "har-validator": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+      "version": "5.1.5",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
       "dev": true,
       "requires": {
-        "ajv": "^6.5.5",
+        "ajv": "^6.12.3",
         "har-schema": "^2.0.0"
       }
     },
@@ -1508,9 +1497,9 @@
       }
     },
     "import-fresh": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
-      "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz",
+      "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==",
       "dev": true,
       "requires": {
         "parent-module": "^1.0.0",
@@ -1540,12 +1529,6 @@
       "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
       "dev": true
     },
-    "in-publish": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz",
-      "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==",
-      "dev": true
-    },
     "indent-string": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
@@ -1686,9 +1669,9 @@
       "dev": true
     },
     "js-base64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz",
-      "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+      "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
       "dev": true
     },
     "js-tokens": {
@@ -1828,16 +1811,6 @@
         "signal-exit": "^3.0.0"
       }
     },
-    "lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-      "dev": true,
-      "requires": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
-      }
-    },
     "map-obj": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
@@ -1923,6 +1896,25 @@
       "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
+    "minipass": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+      "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      }
+    },
+    "minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      }
+    },
     "mkdirp": {
       "version": "0.5.5",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
@@ -1939,9 +1931,9 @@
       "dev": true
     },
     "nan": {
-      "version": "2.14.1",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
-      "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
+      "version": "2.14.2",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+      "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
       "dev": true
     },
     "natural-compare": {
@@ -1957,30 +1949,46 @@
       "dev": true
     },
     "node-gyp": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
-      "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
-      "dev": true,
-      "requires": {
-        "fstream": "^1.0.0",
-        "glob": "^7.0.3",
-        "graceful-fs": "^4.1.2",
-        "mkdirp": "^0.5.0",
-        "nopt": "2 || 3",
-        "npmlog": "0 || 1 || 2 || 3 || 4",
-        "osenv": "0",
-        "request": "^2.87.0",
-        "rimraf": "2",
-        "semver": "~5.3.0",
-        "tar": "^2.0.0",
-        "which": "1"
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz",
+      "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==",
+      "dev": true,
+      "requires": {
+        "env-paths": "^2.2.0",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.2.3",
+        "nopt": "^5.0.0",
+        "npmlog": "^4.1.2",
+        "request": "^2.88.2",
+        "rimraf": "^3.0.2",
+        "semver": "^7.3.2",
+        "tar": "^6.0.2",
+        "which": "^2.0.2"
       },
       "dependencies": {
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
         "semver": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
-          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+          "version": "7.3.2",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+          "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
           "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
@@ -1991,23 +1999,22 @@
       "dev": true
     },
     "node-sass": {
-      "version": "4.14.1",
-      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz",
-      "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-5.0.0.tgz",
+      "integrity": "sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw==",
       "dev": true,
       "requires": {
         "async-foreach": "^0.1.3",
         "chalk": "^1.1.1",
-        "cross-spawn": "^3.0.0",
+        "cross-spawn": "^7.0.3",
         "gaze": "^1.0.0",
         "get-stdin": "^4.0.1",
         "glob": "^7.0.3",
-        "in-publish": "^2.0.0",
         "lodash": "^4.17.15",
         "meow": "^3.7.0",
         "mkdirp": "^0.5.1",
         "nan": "^2.13.2",
-        "node-gyp": "^3.8.0",
+        "node-gyp": "^7.1.0",
         "npmlog": "^4.0.0",
         "request": "^2.88.0",
         "sass-graph": "2.2.5",
@@ -2041,15 +2048,37 @@
           }
         },
         "cross-spawn": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
-          "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
           "dev": true,
           "requires": {
-            "lru-cache": "^4.0.1",
-            "which": "^1.2.9"
+            "shebang-regex": "^3.0.0"
           }
         },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+          "dev": true
+        },
         "strip-ansi": {
           "version": "3.0.1",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -2064,13 +2093,22 @@
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
           "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
           "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
     "nopt": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
       "dev": true,
       "requires": {
         "abbrev": "1"
@@ -2256,28 +2294,6 @@
         "word-wrap": "^1.2.3"
       }
     },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "dev": true
-    },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-      "dev": true
-    },
-    "osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "dev": true,
-      "requires": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.0"
-      }
-    },
     "p-limit": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -2321,10 +2337,13 @@
       }
     },
     "path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-      "dev": true
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+      "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+      "dev": true,
+      "requires": {
+        "pinkie-promise": "^2.0.0"
+      }
     },
     "path-is-absolute": {
       "version": "1.0.1",
@@ -2647,12 +2666,6 @@
       "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "dev": true
     },
-    "pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-      "dev": true
-    },
     "psl": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -2710,15 +2723,6 @@
             "path-exists": "^2.0.0",
             "pinkie-promise": "^2.0.0"
           }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
         }
       }
     },
@@ -2842,9 +2846,9 @@
       }
     },
     "rollup": {
-      "version": "2.28.2",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.28.2.tgz",
-      "integrity": "sha512-8txbsFBFLmm9Xdt4ByTOGa9Muonmc8MfNjnGAR8U8scJlF1ZW7AgNZa7aqBXaKtlvnYP/ab++fQIq9dB9NWUbg==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.1.tgz",
+      "integrity": "sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==",
       "dev": true,
       "requires": {
         "fsevents": "~2.1.2"
@@ -3028,13 +3032,31 @@
       }
     },
     "string-width": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
-      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+      "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
       "dev": true,
       "requires": {
+        "emoji-regex": "^7.0.1",
         "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^4.0.0"
+        "strip-ansi": "^5.1.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
       }
     },
     "string.prototype.padend": {
@@ -3099,12 +3121,12 @@
       }
     },
     "strip-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+      "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
       "dev": true,
       "requires": {
-        "ansi-regex": "^3.0.0"
+        "ansi-regex": "^5.0.0"
       }
     },
     "strip-bom": {
@@ -3150,45 +3172,28 @@
         "lodash": "^4.17.14",
         "slice-ansi": "^2.1.0",
         "string-width": "^3.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
       }
     },
     "tar": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
-      "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz",
+      "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==",
       "dev": true,
       "requires": {
-        "block-stream": "*",
-        "fstream": "^1.0.12",
-        "inherits": "2"
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^3.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        }
       }
     },
     "text-table": {
@@ -3302,9 +3307,9 @@
       "dev": true
     },
     "typescript": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz",
-      "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==",
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz",
+      "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==",
       "dev": true
     },
     "universalify": {
@@ -3335,9 +3340,9 @@
       "dev": true
     },
     "v8-compile-cache": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
-      "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
+      "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
       "dev": true
     },
     "validate-npm-package-license": {
@@ -3388,6 +3393,33 @@
       "dev": true,
       "requires": {
         "string-width": "^1.0.2 || 2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
       }
     },
     "word-wrap": {
@@ -3413,17 +3445,6 @@
           "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
         "strip-ansi": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -3457,9 +3478,9 @@
       "dev": true
     },
     "yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true
     },
     "yargs": {
@@ -3480,12 +3501,6 @@
         "yargs-parser": "^13.1.2"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
         "find-up": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
@@ -3505,15 +3520,6 @@
             "path-exists": "^3.0.0"
           }
         },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
         "p-locate": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
@@ -3523,31 +3529,11 @@
             "p-limit": "^2.0.0"
           }
         },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
... 9621 lines suppressed ...