changeset 5634:677a52ad9486

merging with 729-node-js-newer-version
author Thomas Junk <thomas.junk@intevation.de>
date Thu, 01 Jun 2023 11:23:19 +0200
parents 0d453a8dc8e7 (current diff) 936d6cab2202 (diff)
children a956f764eee0 cdca70301f09 47ee6ecf94de
files
diffstat 59 files changed, 1165 insertions(+), 1416 deletions(-) [+]
line wrap: on
line diff
--- a/client/package.json	Mon May 08 18:11:08 2023 +0200
+++ b/client/package.json	Thu Jun 01 11:23:19 2023 +0200
@@ -7,11 +7,8 @@
     "url": "https://hg.intevation.de/gemma"
   },
   "private": true,
-  "engines": {
-    "node": "^12.16.1"
-  },
   "scripts": {
-    "serve": "make translations && VUE_APP_HGREV=$(hg log -r . --template \"{data|shortdate}-{node|short}\") vue-cli-service serve",
+    "serve": "make translations && VUE_APP_HGREV=$(hg log -r . --template \"{data|shortdate}-{node|short}\") NODE_OPTIONS='--openssl-legacy-provider' vue-cli-service serve",
     "build": "make translations && VUE_APP_HGREV=$(hg log -r . --template \"{data|shortdate}-{node|short}\") vue-cli-service build",
     "analyze": "ANALYZE=true vue-cli-service serve",
     "lint": "vue-cli-service lint",
@@ -74,9 +71,7 @@
     "concurrently": "^4.1.0",
     "copy-webpack-plugin": "^4.6.0",
     "easygettext": "^2.7.0",
-    "node-sass": "^4.10.0",
     "pretty-quick": "^1.8.0",
-    "sass-loader": "^7.0.1",
     "vue-gettext": "^2.1.2",
     "vue-template-compiler": "^2.5.17",
     "webpack-bundle-analyzer": "^3.0.3"
@@ -86,4 +81,4 @@
     "last 2 versions",
     "not ie <= 8"
   ]
-}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/src/assets/application.css	Thu Jun 01 11:23:19 2023 +0200
@@ -0,0 +1,234 @@
+/* This is Free Software under GNU Affero General Public License v >= 3.0;
+ * without warranty, see README.md and license for details.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ * License-Filename: LICENSES/AGPL-3.0.txt
+ *
+ * Copyright (C) 2018 by via donau
+ *   – Österreichische Wasserstraßen-Gesellschaft mbH
+ * Software engineering by Intevation GmbH
+ *
+ * Author(s):
+ * Thomas Junk <thomas.junk@intevation.de>
+ * Markus Kottländer <markus.kottlaender@intevation>
+ */
+@import "tooltip.css";
+
+:root {
+  --shadow-xs: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);
+  --border-radius: 0.25rem;
+  --icon-height: 2rem;
+  --icon-width: 2rem;
+  --large-offset: 2rem;
+  --offset: 1rem;
+  --sidebar-width: 13rem;
+  --slight-transparent: 0.96;
+  --small-offset: 0.5rem;
+  --smaller: 0.9rem;
+  --transition-fast: 0.3s;
+  --x-large-offset: 3rem;
+  --xx-large-offset: 5rem;
+
+  --color-info: #17a2b8;
+  --color-info-h: 188;
+  --color-info-s: 78%;
+  --color-info-l: 41%;
+}
+
+
+::placeholder {
+  color: #ccc !important;
+  font-size: smaller;
+  font-weight: bold;
+}
+
+html {
+  overflow: hidden;
+}
+
+a {
+  color: var(--color-info);
+}
+
+a:hover,
+a:active,
+a:focus {
+  color: hsl(var(--color-info-h), var(--color-info-s), calc(var(--color-info-l) - 13%));
+}
+
+.w-90 {
+  width: 90%;
+}
+
+.w-95 {
+  width: 95%;
+}
+
+.debug {
+  border: 1px solid red;
+}
+
+.debug2 {
+  border: 1px solid magenta;
+}
+
+.debug3 {
+  border: 1px solid greenyellow;
+}
+
+.header {
+  font-weight: bold;
+  font-size: 0.9em;
+}
+
+.ui-element {
+  pointer-events: auto;
+}
+
+.shadow-xs {
+  box-shadow: var(--shadow-xs);
+}
+
+.box {
+  opacity: var(--slight-transparent);
+  max-height: 0;
+  max-width: 0;
+  overflow: hidden;
+  margin: 0;
+  box-shadow: var(--shadow-xs);
+  transition: max-width 0.4s, max-height 0.4s, margin 0.4s;
+}
+
+.box h6,
+.contextbox h6 {
+  color: var(--color-info);
+  font-weight: bold;
+}
+
+.box-control {
+  display: flex;
+  color: #888;
+  padding: 4px 7px;
+  border-radius: 0.25rem;
+  cursor: pointer;
+  transition: background-color 0.3s, color 0.3s;
+}
+
+.box-control .small {
+  padding: 4px;
+}
+
+.box-control:hover {
+  color: #666;
+  background-color: #eee;
+}
+
+.expanded {
+  max-height: 999px;
+  max-width: 999px;
+  margin: 0 0.05rem 0.5rem 0.25rem;
+}
+
+.box-body {
+  padding: 0.75rem;
+  text-align: left;
+  position: relative;
+}
+
+/* needed to fix the whitespace problem of
+//   https://github.com/Polyconseil/vue-gettext/issues/80;
+// use like
+//    <a href="..">link</a>
+//    <span v-translate class="fix-trans-space">contributors.</span>
+//
+// done centrally, so we can fix it centrally for better vue-gettext version */
+.fix-trans-space,
+.fix-trans-space:before {
+  content: " ";
+}
+
+.closebutton {
+  position: absolute;
+  right: var(--offset);
+}
+
+.headline {
+  font-weight: bold;
+}
+
+.fade-enter-active,
+.fade-leave-active {
+  transition: opacity 0.3s;
+}
+.fade-enter,
+.fade-leave-to {
+  opacity: 0;
+}
+
+.pointer {
+  cursor: pointer;
+}
+
+.btn:disabled,
+.btn.disabled {
+  opacity: 0.4;
+}
+
+.btn-xs {
+  padding: 0.3rem 0.4rem;
+  font-size: 0.75rem;
+  line-height: 1;
+}
+
+.snotifyToast {
+  text-align: left;
+  border-radius: 0.25rem;
+  box-shadow: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);
+  border-left: 0 !important;
+}
+.snotifyToast .snotifyToast__title {
+  font-size: 1.2rem;
+}
+.snotifyToast .snotifyToast__body {
+  white-space: pre-line;
+}
+.snotifyToast.snotify-info {
+  border-top: 4px solid var(--color-info);
+}
+.snotifyToast.snotify-info .snotify-icon--info {
+  background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20version=%221.1%22%20x=%220px%22%20y=%220px%22%20viewBox=%220%200%20512%20512%22%20fill=%22%2317a2b8%22%3E%3Cg%3E%3Cpath%20d=%22M256,0C114.84,0,0,114.84,0,256S114.84,512,256,512,512,397.16,512,256,397.15,0,256,0Zm0,478.43C133.35,478.43,33.57,378.64,33.57,256S133.35,33.58,256,33.58,478.42,133.36,478.42,256,378.64,478.43,256,478.43Z%22/%3E%3Cpath%20d=%22M251.26,161.24a22.39,22.39,0,1,0-22.38-22.39A22.39,22.39,0,0,0,251.26,161.24Z%22/%3E%3Cpath%20d=%22M286.84,357.87h-14v-160A16.79,16.79,0,0,0,256,181.05H225.17a16.79,16.79,0,0,0,0,33.58h14.05V357.87H225.17a16.79,16.79,0,0,0,0,33.57h61.67a16.79,16.79,0,1,0,0-33.57Z%22/%3E%3C/g%3E%3C/svg%3E");
+}
+.snotifyToast.snotify-error {
+  border-top: 4px solid #f44336;
+}
+
+select.form-control-sm.small {
+  padding: 0.25rem 0.1rem;
+  font-size: 0.75rem;
+}
+
+input.form-control-sm.small {
+  padding: 0.25rem 0.2rem;
+  font-size: 0.75rem;
+}
+
+.truncate {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.wh-100 {
+  width: 100% !important;
+  height: 100% !important;
+}
+
+.wh-50 {
+  width: 50% !important;
+  height: 50% !important;
+}
+
+.custom-control-input:checked ~ .custom-control-label::before {
+  border-color: var(--color-info);
+  background-color: var(--color-info);
+}
--- a/client/src/assets/application.scss	Mon May 08 18:11:08 2023 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,232 +0,0 @@
-/* This is Free Software under GNU Affero General Public License v >= 3.0;
- * without warranty, see README.md and license for details.
- *
- * SPDX-License-Identifier: AGPL-3.0-or-later
- * License-Filename: LICENSES/AGPL-3.0.txt
- *
- * Copyright (C) 2018 by via donau
- *   – Österreichische Wasserstraßen-Gesellschaft mbH
- * Software engineering by Intevation GmbH
- *
- * Author(s):
- * Thomas Junk <thomas.junk@intevation.de>
- * Markus Kottländer <markus.kottlaender@intevation>
- */
-@import "@/assets/tooltip.scss";
-
-$shadow-xs: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);
-$border-radius: 0.25rem;
-$icon-height: 2rem;
-$icon-width: 2rem;
-$large-offset: 2rem;
-$offset: 1rem;
-$sidebar-width: 13rem;
-$slight-transparent: 0.96;
-$small-offset: 0.5rem;
-$smaller: 0.9rem;
-$transition-fast: 0.3s;
-$x-large-offset: 3rem;
-$xx-large-offset: 5rem;
-$color-info: #17a2b8;
-
-::placeholder {
-  color: #ccc !important;
-  font-size: smaller;
-  font-weight: bold;
-}
-
-html {
-  overflow: hidden;
-}
-
-a {
-  color: $color-info;
-}
-
-a:hover,
-a:active,
-a:focus {
-  color: darken($color-info, 13);
-}
-
-.w-90 {
-  width: 90%;
-}
-
-.w-95 {
-  width: 95%;
-}
-
-.debug {
-  border: 1px solid red;
-}
-
-.debug2 {
-  border: 1px solid magenta;
-}
-
-.debug3 {
-  border: 1px solid greenyellow;
-}
-
-%fully-centered {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  transform: translate(-50%, -50%);
-}
-
-.header {
-  font-weight: bold;
-  font-size: 0.9em;
-}
-
-.ui-element {
-  pointer-events: auto;
-}
-
-.shadow-xs {
-  box-shadow: $shadow-xs;
-}
-
-.box {
-  opacity: $slight-transparent;
-  max-height: 0;
-  max-width: 0;
-  overflow: hidden;
-  margin: 0;
-  box-shadow: $shadow-xs;
-  transition: max-width 0.4s, max-height 0.4s, margin 0.4s;
-}
-
-.box h6,
-.contextbox h6 {
-  color: $color-info;
-  font-weight: bold;
-}
-
-.box-control {
-  display: flex;
-  color: #888;
-  padding: 4px 7px;
-  border-radius: 0.25rem;
-  cursor: pointer;
-  transition: background-color 0.3s, color 0.3s;
-  &.small {
-    padding: 4px;
-  }
-  &:hover {
-    color: #666;
-    background-color: #eee;
-  }
-}
-
-.expanded {
-  max-height: 999px;
-  max-width: 999px;
-  margin: 0 0.05rem 0.5rem 0.25rem;
-}
-
-.box-body {
-  padding: 0.75rem;
-  text-align: left;
-  position: relative;
-}
-
-// needed to fix the whitespace problem of
-//   https://github.com/Polyconseil/vue-gettext/issues/80;
-// use like
-//    <a href="..">link</a>
-//    <span v-translate class="fix-trans-space">contributors.</span>
-//
-// done centrally, so we can fix it centrally for better vue-gettext version
-.fix-trans-space,
-.fix-trans-space:before {
-  content: " ";
-}
-
-.closebutton {
-  position: absolute;
-  right: $offset;
-}
-
-.headline {
-  font-weight: bold;
-}
-
-.fade-enter-active,
-.fade-leave-active {
-  transition: opacity 0.3s;
-}
-.fade-enter,
-.fade-leave-to {
-  opacity: 0;
-}
-
-.pointer {
-  cursor: pointer;
-}
-
-.btn:disabled,
-.btn.disabled {
-  opacity: 0.4;
-}
-
-.btn-xs {
-  padding: 0.3rem 0.4rem;
-  font-size: 0.75rem;
-  line-height: 1;
-}
-
-.snotifyToast {
-  text-align: left;
-  border-radius: 0.25rem;
-  box-shadow: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);
-  border-left: 0 !important;
-  &.snotify-info {
-    border-top: 4px solid $color-info;
-    .snotify-icon--info {
-      background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20version=%221.1%22%20x=%220px%22%20y=%220px%22%20viewBox=%220%200%20512%20512%22%20fill=%22%2317a2b8%22%3E%3Cg%3E%3Cpath%20d=%22M256,0C114.84,0,0,114.84,0,256S114.84,512,256,512,512,397.16,512,256,397.15,0,256,0Zm0,478.43C133.35,478.43,33.57,378.64,33.57,256S133.35,33.58,256,33.58,478.42,133.36,478.42,256,378.64,478.43,256,478.43Z%22/%3E%3Cpath%20d=%22M251.26,161.24a22.39,22.39,0,1,0-22.38-22.39A22.39,22.39,0,0,0,251.26,161.24Z%22/%3E%3Cpath%20d=%22M286.84,357.87h-14v-160A16.79,16.79,0,0,0,256,181.05H225.17a16.79,16.79,0,0,0,0,33.58h14.05V357.87H225.17a16.79,16.79,0,0,0,0,33.57h61.67a16.79,16.79,0,1,0,0-33.57Z%22/%3E%3C/g%3E%3C/svg%3E");
-    }
-  }
-  &.snotify-error {
-    border-top: 4px solid #f44336;
-  }
-  .snotifyToast__title {
-    font-size: 1.2rem;
-  }
-  .snotifyToast__body {
-    white-space: pre-line;
-  }
-}
-
-select.form-control-sm.small {
-  padding: 0.25rem 0.1rem;
-  font-size: 0.75rem;
-}
-
-input.form-control-sm.small {
-  padding: 0.25rem 0.2rem;
-  font-size: 0.75rem;
-}
-
-.truncate {
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-.wh-100 {
-  width: 100% !important;
-  height: 100% !important;
-}
-
-.wh-50 {
-  width: 50% !important;
-  height: 50% !important;
-}
-
-.custom-control-input:checked ~ .custom-control-label::before {
-  border-color: $color-info;
-  background-color: $color-info;
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/src/assets/tooltip.css	Thu Jun 01 11:23:19 2023 +0200
@@ -0,0 +1,121 @@
+/* This is Free Software under GNU Affero General Public License v >= 3.0
+ * without warranty, see README.md and license for details.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ * License-Filename: LICENSES/AGPL-3.0.txt
+ *
+ * Copyright (C) 2018 by via donau
+ *   – Österreichische Wasserstraßen-Gesellschaft mbH
+ * Software engineering by Intevation GmbH
+ *
+ * Author(s):
+ * Thomas Junk <thomas.junk@intevation.de>
+ */
+.tooltip {
+  display: block !important;
+  z-index: 10000;
+}
+
+.tooltip .tooltip-inner {
+  background: white;
+  box-shadow: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);
+  color: #666;
+  border-radius: 0.25rem;
+  padding: 5px 10px 4px;
+  font-size: 0.8rem;
+  max-width: 500px;
+}
+
+.tooltip .tooltip-arrow {
+  width: 0;
+  height: 0;
+  border-style: solid;
+  position: absolute;
+  margin: 5px;
+  border-color: white;
+  z-index: 1;
+}
+
+.tooltip[x-placement^="top"] {
+  margin-bottom: 5px;
+}
+
+.tooltip[x-placement^="top"] .tooltip-arrow {
+  border-width: 5px 5px 0 5px;
+  border-left-color: transparent !important;
+  border-right-color: transparent !important;
+  border-bottom-color: transparent !important;
+  bottom: -5px;
+  left: calc(50% - 5px);
+  margin-top: 0;
+  margin-bottom: 0;
+}
+
+.tooltip[x-placement^="bottom"] {
+  margin-top: 5px;
+}
+
+.tooltip[x-placement^="bottom"] .tooltip-arrow {
+  border-width: 0 5px 5px 5px;
+  border-left-color: transparent !important;
+  border-right-color: transparent !important;
+  border-top-color: transparent !important;
+  top: -5px;
+  left: calc(50% - 5px);
+  margin-top: 0;
+  margin-bottom: 0;
+}
+
+.tooltip[x-placement^="right"] {
+  margin-left: 5px;
+}
+
+.tooltip[x-placement^="right"] .tooltip-arrow {
+  border-width: 5px 5px 5px 0;
+  border-left-color: transparent !important;
+  border-top-color: transparent !important;
+  border-bottom-color: transparent !important;
+  left: -5px;
+  top: calc(50% - 5px);
+  margin-left: 0;
+  margin-right: 0;
+}
+
+.tooltip[x-placement^="left"] {
+  margin-right: 5px;
+}
+
+.tooltip[x-placement^="left"] .tooltip-arrow {
+  border-width: 5px 0 5px 5px;
+  border-top-color: transparent !important;
+  border-right-color: transparent !important;
+  border-bottom-color: transparent !important;
+  right: -5px;
+  top: calc(50% - 5px);
+  margin-left: 0;
+  margin-right: 0;
+}
+
+.tooltip.popover .popover-inner {
+  background: #f9f9f9;
+  color: white;
+  padding: 24px;
+  border-radius: 5px;
+  box-shadow: 0 5px 30px rgba(0, 0, 0, 0.1);
+}
+
+.tooltip.popover .popover-arrow {
+  border-color: #f9f9f9;
+}
+
+.tooltip[aria-hidden="true"] {
+  visibility: hidden;
+  opacity: 0;
+  transition: opacity 0.15s, visibility 0.15s;
+}
+
+.tooltip[aria-hidden="false"] {
+  visibility: visible;
+  opacity: 1;
+  transition: opacity 0.15s;
+}
--- a/client/src/assets/tooltip.scss	Mon May 08 18:11:08 2023 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/* This is Free Software under GNU Affero General Public License v >= 3.0
- * without warranty, see README.md and license for details.
- *
- * SPDX-License-Identifier: AGPL-3.0-or-later
- * License-Filename: LICENSES/AGPL-3.0.txt
- *
- * Copyright (C) 2018 by via donau
- *   – Österreichische Wasserstraßen-Gesellschaft mbH
- * Software engineering by Intevation GmbH
- *
- * Author(s):
- * Thomas Junk <thomas.junk@intevation.de>
- */
-.tooltip {
-  display: block !important;
-  z-index: 10000;
-}
-
-.tooltip .tooltip-inner {
-  background: white;
-  box-shadow: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);
-  color: #666;
-  border-radius: 0.25rem;
-  padding: 5px 10px 4px;
-  font-size: 0.8rem;
-  max-width: 500px;
-}
-
-.tooltip .tooltip-arrow {
-  width: 0;
-  height: 0;
-  border-style: solid;
-  position: absolute;
-  margin: 5px;
-  border-color: white;
-  z-index: 1;
-}
-
-.tooltip[x-placement^="top"] {
-  margin-bottom: 5px;
-}
-
-.tooltip[x-placement^="top"] .tooltip-arrow {
-  border-width: 5px 5px 0 5px;
-  border-left-color: transparent !important;
-  border-right-color: transparent !important;
-  border-bottom-color: transparent !important;
-  bottom: -5px;
-  left: calc(50% - 5px);
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-.tooltip[x-placement^="bottom"] {
-  margin-top: 5px;
-}
-
-.tooltip[x-placement^="bottom"] .tooltip-arrow {
-  border-width: 0 5px 5px 5px;
-  border-left-color: transparent !important;
-  border-right-color: transparent !important;
-  border-top-color: transparent !important;
-  top: -5px;
-  left: calc(50% - 5px);
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-.tooltip[x-placement^="right"] {
-  margin-left: 5px;
-}
-
-.tooltip[x-placement^="right"] .tooltip-arrow {
-  border-width: 5px 5px 5px 0;
-  border-left-color: transparent !important;
-  border-top-color: transparent !important;
-  border-bottom-color: transparent !important;
-  left: -5px;
-  top: calc(50% - 5px);
-  margin-left: 0;
-  margin-right: 0;
-}
-
-.tooltip[x-placement^="left"] {
-  margin-right: 5px;
-}
-
-.tooltip[x-placement^="left"] .tooltip-arrow {
-  border-width: 5px 0 5px 5px;
-  border-top-color: transparent !important;
-  border-right-color: transparent !important;
-  border-bottom-color: transparent !important;
-  right: -5px;
-  top: calc(50% - 5px);
-  margin-left: 0;
-  margin-right: 0;
-}
-
-.tooltip.popover .popover-inner {
-  background: #f9f9f9;
-  color: white;
-  padding: 24px;
-  border-radius: 5px;
-  box-shadow: 0 5px 30px rgba(black, 0.1);
-}
-
-.tooltip.popover .popover-arrow {
-  border-color: #f9f9f9;
-}
-
-.tooltip[aria-hidden="true"] {
-  visibility: hidden;
-  opacity: 0;
-  transition: opacity 0.15s, visibility 0.15s;
-}
-
-.tooltip[aria-hidden="false"] {
-  visibility: visible;
-  opacity: 1;
-  transition: opacity 0.15s;
-}
--- a/client/src/components/App.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/App.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -39,28 +39,31 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-#app
-  height: 100%
-  width: 100%
-  font-family: "Avenir", Helvetica, Arial, sans-serif
-  -webkit-font-smoothing: antialiased
-  -moz-osx-font-smoothing: grayscale
-  text-align: center
-  color: #2c3e50
+<style scoped>
+#app {
+  height: 100%;
+  width: 100%;
+  font-family: "Avenir", Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  text-align: center;
+  color: #2c3e50;
+}
 
-  .userinterface
-    position: absolute
-    top: 0
-    left: 0
-    right: 0
-    bottom: 0
-    z-index: 4
-    pointer-events: none
+#app .userinterface {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 4;
+  pointer-events: none;
+}
 
-    .boxes
-      position: relative
-      z-index: 10
+#app .userinterface .boxes {
+  position: relative;
+  z-index: 10;
+}
 </style>
 
 <script>
--- a/client/src/components/Contextbox.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/Contextbox.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -91,11 +91,11 @@
 };
 </script>
 
-<style lang="scss" scoped>
+<style scoped>
 .contextbox {
   position: relative;
   background-color: #ffffff;
-  opacity: $slight-transparent;
+  opacity: var(--slight-transparent);
   transition: max-width 0.3s, max-height 0.3s;
   overflow: hidden;
   background: #fff;
@@ -123,7 +123,7 @@
   z-index: 2;
   right: 0;
   top: 7px;
-  height: $icon-width;
-  width: $icon-height;
+  height: var(--icon-width);
+  width: var(--icon-height);
 }
 </style>
--- a/client/src/components/DiagramLegend.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/DiagramLegend.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -15,36 +15,44 @@
   </div>
 </template>
 
-<style lang="sass">
-.diagram-legend
-  position: relative
-  width: 180px
-  font-size: 0.8rem
-  display: flex
-  border-right: solid 1px #dee2e6
-  .toggle
-    margin-left: 0
-    position: absolute
-    z-index: 1
-    top: 0.25rem
-    left: 0.25rem
-    svg
-      transition: transform 0.3s
-  &.collapsed
-    width: 0
-    border-right: none
-    .toggle
-      left: 0.25rem
-      svg
-        transform: rotateY(180deg)
-  .legend
-    margin: 10px 0
-    span
-      vertical-align: middle
-      display: inline-block
-      width: 12px
-      height: 12px
-      border-radius: 50%
+<style>
+.diagram-legend {
+  position: relative;
+  width: 180px;
+  font-size: 0.8rem;
+  display: flex;
+  border-right: solid 1px #dee2e6;
+}
+.diagram-legend .toggle {
+  margin-left: 0;
+  position: absolute;
+  z-index: 1;
+  top: 0.25rem;
+  left: 0.25rem;
+}
+.diagram-legend .toggle svg {
+  transition: transform 0.3s;
+}
+.diagram-legend.collapsed {
+  width: 0;
+  border-right: none;
+}
+.diagram-legend.collapsed .toggle {
+  left: 0.25rem;
+}
+.diagram-legend.collapsed .toggle svg {
+  transform: rotateY(180deg);
+}
+.diagram-legend .legend {
+  margin: 10px 0;
+}
+.diagram-legend .legend span {
+  vertical-align: middle;
+  display: inline-block;
+  width: 12px;
+  height: 12px;
+  border-radius: 50%;
+}
 </style>
 
 <script>
--- a/client/src/components/KeyboardHandler.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/KeyboardHandler.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -6,22 +6,24 @@
   </transition>
 </template>
 
-<style lang="sass" scoped>
-.notice
-  position: absolute
-  top: 0
-  width: 100%
-  text-align: center
-  z-index: 1
-  font-size: 11px
-  line-height: 11px
-  > span
-    opacity: 0.5
-    background: white
-    display: inline-block
-    border-bottom-right-radius: 0.25rem
-    border-bottom-left-radius: 0.25rem
-    padding: 3px 5px
+<style scoped>
+.notice {
+  position: absolute;
+  top: 0;
+  width: 100%;
+  text-align: center;
+  z-index: 1;
+  font-size: 11px;
+  line-height: 11px;
+}
+.notice > span {
+  opacity: 0.5;
+  background: white;
+  display: inline-block;
+  border-bottom-right-radius: 0.25rem;
+  border-bottom-left-radius: 0.25rem;
+  padding: 3px 5px;
+}
 </style>
 
 <script>
--- a/client/src/components/Login.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/Login.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -87,11 +87,14 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 .login {
   min-width: 375px;
   min-height: 500px;
-  @extend %fully-centered;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
 }
 
 .loginform {
--- a/client/src/components/Logs.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/Logs.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -57,7 +57,7 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 .statuscontainer {
   width: 87%;
   position: relative;
@@ -65,8 +65,8 @@
 
 .logmenu {
   position: relative;
-  margin-left: $offset;
-  margin-top: $offset;
+  margin-left: var(--offset);
+  margin-top: var(--offset);
 }
 
 .logs {
@@ -80,17 +80,17 @@
 
 .refresh {
   position: absolute;
-  right: $offset;
+  right: var(--offset);
   bottom: 0;
 }
 
 .logoutput {
-  margin-left: $offset;
-  margin-right: $offset;
-  margin-top: $offset;
+  margin-left: var(--offset);
+  margin-right: var(--offset);
+  margin-top: var(--offset);
   height: 90%;
   overflow: auto;
-  transition: $transition-fast;
+  transition: var(--transition-fast);
 }
 
 .statusline {
--- a/client/src/components/Main.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/Main.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -22,28 +22,34 @@
   </div>
 </template>
 
-<style lang="sass">
-#panes
-  top: -1px
-  right: -1px
-  bottom: -1px
-  left: -1px
-  z-index: 1
-  &.rotate1
-    flex-wrap: wrap
-    flex-direction: row
-  &.rotate2
-    flex-wrap: wrap-reverse
-    flex-direction: column
-  &.rotate3
-    flex-wrap: wrap-reverse
-    flex-direction: row-reverse
-  &.rotate4
-    flex-wrap: wrap
-    flex-direction: column-reverse
-  .pane
-    border: solid 1px #dee2e6
-    background: #fff
+<style>
+#panes {
+  top: -1px;
+  right: -1px;
+  bottom: -1px;
+  left: -1px;
+  z-index: 1;
+}
+#panes.rotate1 {
+  flex-wrap: wrap;
+  flex-direction: row;
+}
+#panes.rotate2 {
+  flex-wrap: wrap-reverse;
+  flex-direction: column;
+}
+#panes.rotate3 {
+  flex-wrap: wrap-reverse;
+  flex-direction: row-reverse;
+}
+#panes.rotate4 {
+  flex-wrap: wrap;
+  flex-direction: column-reverse;
+}
+#panes .pane {
+  border: solid 1px #dee2e6;
+  background: #fff;
+}
 </style>
 
 <script>
--- a/client/src/components/Pdftool.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/Pdftool.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -89,7 +89,7 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 input,
 select {
   font-size: 0.8em;
--- a/client/src/components/Popup.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/Popup.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -65,53 +65,63 @@
   </transition>
 </template>
 
-<style lang="sass" scoped>
-.dateselection
-  width: 250px
-.overlay
-  position: fixed
-  z-index: 9
-  top: 0
-  right: 0
-  bottom: 0
-  left: 0
-  background: rgba(0, 0, 0, .3)
-  .popup
-    display: flex
-    flex-direction: column
-    box-shadow: 0 .5rem 1rem rgba(0,0,0,.15)
-    background-color: #fff
-    border-radius: 0.25rem
-    max-width: 320px
-    .popup-header
-      display: flex
-      justify-content: space-between
-      align-items: center
-      padding-left: .5rem
-      border-bottom: 1px solid #dee2e6
-      color: $color-info
-      margin-bottom: 0
-      padding: 0.25rem
-      font-weight: bold
-      .popup-title
-        padding-left: 0.25rem
-        .popup-icon
-          margin-right: 0.25rem
-      .popup-close
-        color: #aaa
-        padding: 3px 5px
-        border-radius: 0.25rem
-        cursor: pointer
-        transition: background-color 0.3s, color 0.3s
-        &:hover
-          color: #888
-          background-color: #eee
-    .popup-footer
-      display: flex
-      justify-content: space-between
-      align-items: center
-      border-top: 1px solid #dee2e6
-      padding: 0.25rem
+<style scoped>
+.dateselection {
+  width: 250px;
+}
+
+.overlay {
+  position: fixed;
+  z-index: 9;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  background: rgba(0, 0, 0, 0.3);
+}
+.overlay .popup {
+  display: flex;
+  flex-direction: column;
+  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  background-color: #fff;
+  border-radius: 0.25rem;
+  max-width: 320px;
+}
+.overlay .popup .popup-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding-left: 0.5rem;
+  border-bottom: 1px solid #dee2e6;
+  color: var(--color-info);
+  margin-bottom: 0;
+  padding: 0.25rem;
+  font-weight: bold;
+}
+.overlay .popup .popup-header .popup-title {
+  padding-left: 0.25rem;
+}
+.overlay .popup .popup-header .popup-title .popup-icon {
+  margin-right: 0.25rem;
+}
+.overlay .popup .popup-header .popup-close {
+  color: #aaa;
+  padding: 3px 5px;
+  border-radius: 0.25rem;
+  cursor: pointer;
+  transition: background-color 0.3s, color 0.3s;
+}
+.overlay .popup .popup-header .popup-close:hover {
+  color: #888;
+  background-color: #eee;
+}
+.overlay .popup .popup-footer {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  border-top: 1px solid #dee2e6;
+  padding: 0.25rem;
+}
 </style>
 
 <script>
--- a/client/src/components/Search.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/Search.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -86,7 +86,7 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 .searchcontainer {
   opacity: 0.96;
 }
--- a/client/src/components/Sidebar.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/Sidebar.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -189,7 +189,7 @@
 };
 </script>
 
-<style lang="scss" scoped>
+<style scoped>
 .menubutton {
   height: 2rem;
   width: 2rem;
@@ -219,16 +219,16 @@
   color: #333;
   text-decoration: none;
   font-size: 90%;
-  .indicator {
-    left: auto;
-    right: 10px;
-    top: 8px;
-    border-radius: 0.25rem;
-  }
-  &.router-link-exact-active .indicator {
-    background: #fff;
-    color: #333;
-  }
+}
+.menu a .indicator {
+  left: auto;
+  right: 10px;
+  top: 8px;
+  border-radius: 0.25rem;
+}
+.menu a.router-link-exact-active .indicator {
+  background: #fff;
+  color: #333;
 }
 
 .menu a svg path {
@@ -259,19 +259,19 @@
 
 .sidebar {
   background-color: #ffffff;
-  padding-top: $large-offset;
-  opacity: $slight-transparent;
-  transition: $transition-fast;
+  padding-top: var(--large-offset);
+  opacity: var(--slight-transparent);
+  transition: var(--transition-fast);
   overflow: hidden;
 }
 
 .sidebarcollapsed {
-  max-height: $icon-height;
-  max-width: $icon-width;
+  max-height: var(--icon-height);
+  max-width: var(--icon-width);
 }
 
 .sidebarextended {
-  max-width: $sidebar-width;
-  min-width: $sidebar-width;
+  max-width: var(--sidebar-width);
+  min-width: var(--sidebar-width);
 }
 </style>
--- a/client/src/components/Spacer.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/Spacer.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -34,17 +34,17 @@
 };
 </script>
 
-<style lang="scss" scoped>
+<style scoped>
 .spacer {
   height: 90vh;
 }
 
 .spacer-collapsed {
-  min-width: $icon-width + $small-offset;
-  transition: $transition-fast;
+  min-width: var(--icon-width) + var(--small-offset);
+  transition: var(--transition-fast);
 }
 
 .spacer-expanded {
-  min-width: $sidebar-width + $small-offset;
+  min-width: var(--sidebar-width) + var(--small-offset);
 }
 </style>
--- a/client/src/components/TimeSlider.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/TimeSlider.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -42,13 +42,13 @@
     </div>
   </div>
 </template>
-<style lang="scss" scoped>
+<style scoped>
 #slider {
   position: absolute;
   bottom: 0;
   min-width: 100vw;
 }
-// reposition time slider in case of opened diagram
+/* reposition time slider in case of opened diagram */
 #slider.reposition {
   bottom: 50%;
 }
@@ -60,7 +60,7 @@
 input::-webkit-clear-button {
   display: none;
 }
-// hide clear button on IE
+/* hide clear button on IE */
 input::-ms-clear {
   display: none;
 }
--- a/client/src/components/fairway/AvailableFairwayDepthDialogue.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/fairway/AvailableFairwayDepthDialogue.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -344,17 +344,19 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
+<style scoped>
 input,
-select
-  font-size: 0.8em
+select {
+  font-size: 0.8em;
+}
 
-.custom-control
-  padding-left: 1.2rem
-  .custom-control-label
-    &::before,
-    &::after
-      left: -1.2rem
+.custom-control {
+  padding-left: 1.2rem;
+}
+.custom-control .custom-control-label::before,
+.custom-control .custom-control-label::after {
+  left: -1.2rem;
+}
 </style>
 
 <script>
--- a/client/src/components/fairway/BottleneckDialogue.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/fairway/BottleneckDialogue.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -298,10 +298,10 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style lang="css" scoped>
 .input-button-right {
-  border-top-right-radius: $border-radius;
-  border-bottom-right-radius: $border-radius;
+  border-top-right-radius: var(border-radius);
+  border-bottom-right-radius: var(border-radius);
   border-top-left-radius: 0 !important;
   border-bottom-left-radius: 0 !important;
 }
@@ -309,8 +309,8 @@
 .rounded-left-only {
   border-top-right-radius: 0 !important;
   border-bottom-right-radius: 0 !important;
-  border-top-left-radius: $border-radius;
-  border-bottom-left-radius: $border-radius;
+  border-top-left-radius: var(border-radius);
+  border-bottom-left-radius: var(border-radius);
 }
 
 input,
--- a/client/src/components/fairway/Fairwayprofile.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/fairway/Fairwayprofile.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -119,28 +119,30 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.direction-indicator
-  width: 70px
-  height: 0
-  border-top: dashed 2px #333
-  position: absolute
-  bottom: 50px
-  left: 115px
-  margin-left: -35px
-  &::after
-    content: ""
-    width: 0
-    height: 0
-    border-width: 10px
-    border-top-width: 5px
-    border-bottom-width: 5px
-    border-style: solid
-    border-color: transparent
-    border-left-color: #333
-    position: absolute
-    right: -20px
-    top: -6px
+<style scoped>
+.direction-indicator {
+  width: 70px;
+  height: 0;
+  border-top: dashed 2px #333;
+  position: absolute;
+  bottom: 50px;
+  left: 115px;
+  margin-left: -35px;
+}
+.direction-indicator::after {
+  content: "";
+  width: 0;
+  height: 0;
+  border-width: 10px;
+  border-top-width: 5px;
+  border-bottom-width: 5px;
+  border-style: solid;
+  border-color: transparent;
+  border-left-color: #333;
+  position: absolute;
+  right: -20px;
+  top: -6px;
+}
 </style>
 
 <script>
--- a/client/src/components/gauge/Gauges.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/gauge/Gauges.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -93,7 +93,7 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 input,
 select {
   font-size: 0.8em;
--- a/client/src/components/identify/Identify.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/identify/Identify.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -246,26 +246,27 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 .features {
   max-height: 19rem;
   overflow-y: auto;
-  small {
-    .zoom-btn {
-      margin-top: -0.25rem;
-      margin-right: -0.5rem;
-      margin-bottom: -0.25rem;
-      svg {
-        vertical-align: middle;
-      }
-    }
-    &:nth-child(even) {
-      background: #f8f8f8;
-    }
-    &:hover {
-      background: #eeeeee;
-    }
-  }
+}
+
+.features small {
+}
+.features small .zoom-btn {
+  margin-top: -0.25rem;
+  margin-right: -0.5rem;
+  margin-bottom: -0.25rem;
+}
+.features small .zoom-btn svg {
+  vertical-align: middle;
+}
+.features small:nth-child(even) {
+  background: #f8f8f8;
+}
+.features small:hover {
+  background: #eeeeee;
 }
 
 .versioninfo {
--- a/client/src/components/importconfiguration/ImportDetails.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importconfiguration/ImportDetails.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -88,7 +88,7 @@
   </div>
 </template>
 
-<style lang="scss" scoped></style>
+<style scoped></style>
 
 <script>
 /* This is Free Software under GNU Affero General Public License v >= 3.0
--- a/client/src/components/importconfiguration/ScheduledImports.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importconfiguration/ScheduledImports.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -1172,7 +1172,7 @@
 };
 </script>
 
-<style lang="scss" scoped>
+<style scoped>
 .cronfield {
   width: 55px;
 }
@@ -1183,7 +1183,7 @@
 
 .importscheduledetails {
   width: 100%;
-  margin-top: $offset;
-  margin-right: $offset;
+  margin-top: var(--offset);
+  margin-right: var(--offset);
 }
 </style>
--- a/client/src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importconfiguration/types/ApprovedGaugeMeasurement.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -161,4 +161,4 @@
 };
 </script>
 
-<style lang="scss" scoped></style>
+<style scoped></style>
--- a/client/src/components/importconfiguration/types/WaterwayProfiles.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importconfiguration/types/WaterwayProfiles.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -197,4 +197,4 @@
 };
 </script>
 
-<style lang="scss" scoped></style>
+<style scoped></style>
--- a/client/src/components/importoverview/AGMLogItem.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importoverview/AGMLogItem.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -101,33 +101,42 @@
 };
 </script>
 
-<style lang="sass" scoped>
-.diffs
-  width: 100%
-  overflow-y: auto
-  > div
-    border-top: dashed 1px #dee2e6
-    &:first-child
-      border-top: none
-    .compare-table
-      position: relative
-      overflow: hidden
-      &::after
-        content: ''
-        position: absolute
-        top: 0
-        right: -5px
-        bottom: 0
-        left: -5px
-        box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.4)
-      > div
-        font-size: 0.7rem
-        &:nth-child(odd)
-          background-color: #f8f9fa
+<style scoped>
+.diffs {
+  width: 100%;
+  overflow-y: auto;
+}
+.diffs > div {
+  border-top: dashed 1px #dee2e6;
+}
+.diffs > div:first-child {
+  border-top: none;
+}
+.diffs > div .compare-table {
+  position: relative;
+  overflow: hidden;
+}
+.diffs > div .compare-table::after {
+  content: "";
+  position: absolute;
+  top: 0;
+  right: -5px;
+  bottom: 0;
+  left: -5px;
+  box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.4);
+}
+.diffs > div .compare-table > div {
+  font-size: 0.7rem;
+}
+.diffs > div .compare-table > div:nth-child(odd) {
+  background-color: #f8f9fa;
+}
 
-.split
-  max-height: 35vh
+.split {
+  max-height: 35vh;
+}
 
-.full
-  max-height: 70vh
+.full {
+  max-height: 70vh;
+}
 </style>
--- a/client/src/components/importoverview/AdditionalLog.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importoverview/AdditionalLog.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -20,18 +20,19 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.additionallog
-  overflow-y: auto
-  &.split
-    max-height: 35vh
-
-  > div
-    &:not(:first-child)
-      border-top-style: dashed !important
-
-    &:hover
-      background-color: #fcfcfc
+<style scoped>
+.additionallog {
+  overflow-y: auto;
+}
+.additionallog.split {
+  max-height: 35vh;
+}
+.additionallog > div:not(:first-child) {
+  border-top-style: dashed !important;
+}
+.additionallog > div:hover {
+  background-color: #fcfcfc;
+}
 </style>
 
 <script>
--- a/client/src/components/importoverview/ApprovedGaugeMeasurementDetail.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importoverview/ApprovedGaugeMeasurementDetail.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -24,35 +24,44 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.diffs
-  width: 100%
-  overflow-y: auto
-  > div
-    border-top: dashed 1px #dee2e6
-    &:first-child
-      border-top: none
-    .compare-table
-      position: relative
-      overflow: hidden
-      &::after
-        content: ''
-        position: absolute
-        top: 0
-        right: -5px
-        bottom: 0
-        left: -5px
-        box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.4)
-      > div
-        font-size: 0.7rem
-        &:nth-child(odd)
-          background-color: #f8f9fa
+<style scoped>
+.diffs {
+  width: 100%;
+  overflow-y: auto;
+}
+.diffs > div {
+  border-top: dashed 1px #dee2e6;
+}
+.diffs > div:first-child {
+  border-top: none;
+}
+.diffs > div .compare-table {
+  position: relative;
+  overflow: hidden;
+}
+.diffs > div .compare-table::after {
+  content: "";
+  position: absolute;
+  top: 0;
+  right: -5px;
+  bottom: 0;
+  left: -5px;
+  box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.4);
+}
+.diffs > div .compare-table > div {
+  font-size: 0.7rem;
+}
+.diffs > div .compare-table > div:nth-child(odd) {
+  background-color: #f8f9fa;
+}
 
-.split
-  max-height: 35vh
+.split {
+  max-height: 35vh;
+}
 
-.full
-  max-height: 70vh
+.full {
+  max-height: 70vh;
+}
 </style>
 
 <script>
--- a/client/src/components/importoverview/BottleneckDetail.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importoverview/BottleneckDetail.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -41,32 +41,40 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.bottleneckdetails
-  width: 100%
-  overflow-y: auto
-  > div
-    border-top: dashed 1px #dee2e6
-    &:first-child
-      border-top: none
-    .properties
-      position: relative
-      overflow: hidden
-      &::after
-        content: ''
-        position: absolute
-        top: 0
-        right: -5px
-        bottom: 0
-        left: -5px
-        box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.4)
-      tr
-        font-size: 0.7rem
-        &:nth-child(odd)
-          background-color: #f8f9fa
+<style scoped>
+.bottleneckdetails {
+  width: 100%;
+  overflow-y: auto;
+}
+.bottleneckdetails > div {
+  border-top: dashed 1px #dee2e6;
+}
+.bottleneckdetails > div:first-child {
+  border-top: none;
+}
+.bottleneckdetails > div .properties {
+  position: relative;
+  overflow: hidden;
+}
+.bottleneckdetails > div .properties::after {
+  content: "";
+  position: absolute;
+  top: 0;
+  right: -5px;
+  bottom: 0;
+  left: -5px;
+  box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.4);
+}
+.bottleneckdetails > div .properties tr {
+  font-size: 0.7rem;
+}
+.bottleneckdetails > div .properties tr:nth-child(odd) {
+  background-color: #f8f9fa;
+}
 
-.split
-  max-height: 35vh
+.split {
+  max-height: 35vh;
+}
 </style>
 
 <script>
--- a/client/src/components/importoverview/ImportOverview.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importoverview/ImportOverview.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -113,9 +113,10 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.spinner-overlay
-  top: 110px
+<style scoped>
+.spinner-overlay {
+  top: 110px;
+}
 </style>
 
 <script>
--- a/client/src/components/importoverview/LogEntry.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importoverview/LogEntry.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -60,31 +60,38 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.action
-  height: 100%
-  width: 50%
-  border: 0
-  background: white
-  outline: none
-  &.approved
-    color: green
-    &.active,
-    &:hover
-      color: white
-      background: green
-  &.rejected
-    border-left: 1px solid #dee2e6
-    color: red
-    &.active,
-    &:hover
-      color: white
-      background: red
-.active
-  .action
-    background-color: #d2eaee
-    &.rejected
-      border-left: solid 1px rgba(255, 255, 255, 0.3)
+<style scoped>
+.action {
+  height: 100%;
+  width: 50%;
+  border: 0;
+  background: white;
+  outline: none;
+}
+.action.approved {
+  color: green;
+}
+.action.approved.active,
+.action.approved:hover {
+  color: white;
+  background: green;
+}
+.action.rejected {
+  border-left: 1px solid #dee2e6;
+  color: red;
+}
+.action.rejected.active,
+.action.rejected:hover {
+  color: white;
+  background: red;
+}
+
+.active .action {
+  background-color: #d2eaee;
+}
+.active .action.rejected {
+  border-left: solid 1px rgba(255, 255, 255, 0.3);
+}
 </style>
 
 <script>
--- a/client/src/components/importoverview/LogItem.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importoverview/LogItem.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -43,14 +43,17 @@
 };
 </script>
 
-<style lang="sass" scoped>
-.kind
-  width: 9%
+<style scoped>
+.kind {
+  width: 9%;
+}
 
-.time
-  width: 26%
+.time {
+  width: 26%;
+}
 
-.message
-  width: 65%
-  word-wrap: break-word
+.message {
+  width: 65%;
+  word-wrap: break-word;
+}
 </style>
--- a/client/src/components/importoverview/SectionDetails.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importoverview/SectionDetails.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -31,7 +31,7 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 .comparison {
   width: 668px;
   border-top: dashed 1px #dee2e6;
--- a/client/src/components/importoverview/StretchDetails.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/importoverview/StretchDetails.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -37,7 +37,7 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 .comparison {
   width: 668px;
   border-top: dashed 1px #dee2e6;
--- a/client/src/components/layers/LegendElement.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/layers/LegendElement.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -235,7 +235,7 @@
 };
 </script>
 
-<style lang="scss" scoped>
+<style scoped>
 .legendelement {
   max-height: 1.5rem;
   width: 2rem;
--- a/client/src/components/map/Map.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/map/Map.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -7,17 +7,33 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.map
-  width: 100%
-  height: 100%
-  background-color: #eee
-  background-image: linear-gradient(45deg, #e8e8e8 25%, transparent 25%, transparent 75%, #e8e8e8 75%, #e8e8e8), linear-gradient(45deg, #e8e8e8 25%, transparent 25%, transparent 75%, #e8e8e8 75%, #e8e8e8)
-  background-size: 20px 20px
-  background-position: 0 0, 10px 10px
-
-  &.nocursor
-    cursor: none
+<style scoped>
+.map {
+  width: 100%;
+  height: 100%;
+  background-color: #eee;
+  background-image: linear-gradient(
+      45deg,
+      #e8e8e8 25%,
+      transparent 25%,
+      transparent 75%,
+      #e8e8e8 75%,
+      #e8e8e8
+    ),
+    linear-gradient(
+      45deg,
+      #e8e8e8 25%,
+      transparent 25%,
+      transparent 75%,
+      #e8e8e8 75%,
+      #e8e8e8
+    );
+  background-size: 20px 20px;
+  background-position: 0 0, 10px 10px;
+}
+.map.nocursor {
+  cursor: none;
+}
 </style>
 
 <script>
--- a/client/src/components/map/MapPopup.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/map/MapPopup.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -97,25 +97,28 @@
   </div>
 </template>
 
-<style lang="sass">
-.map-popup
-  position: absolute
-  background: #fff
-  min-width: 200px
-  min-height: 85px
-  box-shadow: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2)
-  border-top-left-radius: 0 !important
-  margin-left: 10px
-  &::before
-    content: ""
-    position: absolute
-    top: 0
-    left: -10px
-    border: 5px solid transparent
-    border-top: 5px solid white
-    border-right: 5px solid white
-  .coordinates
-    font-size: 70%
+<style>
+.map-popup {
+  position: absolute;
+  background: #fff;
+  min-width: 200px;
+  min-height: 85px;
+  box-shadow: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);
+  border-top-left-radius: 0 !important;
+  margin-left: 10px;
+}
+.map-popup::before {
+  content: "";
+  position: absolute;
+  top: 0;
+  left: -10px;
+  border: 5px solid transparent;
+  border-top: 5px solid white;
+  border-right: 5px solid white;
+}
+.map-popup .coordinates {
+  font-size: 70%;
+}
 </style>
 
 <script>
--- a/client/src/components/map/Zoom.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/map/Zoom.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -15,23 +15,26 @@
   </div>
 </template>
 
-<style lang="sass">
-.zoom-buttons
-  position: absolute
-  z-index: 1
-  bottom: $small-offset
-  left: 50%
-  margin-left: -$icon-width
-  margin-bottom: 0
-  transition: margin-bottom 0.3s
-  &.move
-    bottom: $large-offset * 1.5
-  .zoom-button
-    min-height: $icon-width
-    min-width: $icon-width
-    z-index: 1
-    outline: none
-    color: #666
+<style>
+.zoom-buttons {
+  position: absolute;
+  z-index: 1;
+  bottom: var(--small-offset);
+  left: 50%;
+  margin-left: -var(--icon-width);
+  margin-bottom: 0;
+  transition: margin-bottom 0.3s;
+}
+.zoom-buttons.move {
+  bottom: calc(var(--large-offset) * 1.5);
+}
+.zoom-buttons .zoom-button {
+  min-height: var(--icon-width);
+  min-width: var(--icon-width);
+  z-index: 1;
+  outline: none;
+  color: #666;
+}
 </style>
 
 <script>
--- a/client/src/components/sections/SectionForm.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/sections/SectionForm.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -189,12 +189,13 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.input-button
-  border-top-left-radius: 0
-  border-bottom-left-radius: 0
-  right: 0
-  height: 31px
+<style scoped>
+.input-button {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+  right: 0;
+  height: 31px;
+}
 </style>
 
 <script>
--- a/client/src/components/sections/Sections.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/sections/Sections.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -76,12 +76,13 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.input-button
-  border-top-left-radius: 0
-  border-bottom-left-radius: 0
-  right: 0
-  height: 31px
+<style scoped>
+.input-button {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+  right: 0;
+  height: 31px;
+}
 </style>
 
 <script>
--- a/client/src/components/stretches/Stretches.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/stretches/Stretches.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -78,12 +78,13 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.input-button
-  border-top-left-radius: 0
-  border-bottom-left-radius: 0
-  right: 0
-  height: 31px
+<style scoped>
+.input-button {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+  right: 0;
+  height: 31px;
+}
 </style>
 
 <script>
--- a/client/src/components/systemconfiguration/ColorSettings.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/systemconfiguration/ColorSettings.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -67,27 +67,32 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.savebuttons
- position:relative
- top: -4em;
-/deep/
-  .card
-    overflow: hidden
-    .card-header
-      padding: .25rem 1rem
-    .vc-chrome
-      box-shadow: none
-      border-radius: 0
-      width: 100%
-      .vc-chrome-saturation-wrap
-        border-radius: 0
-        padding-bottom: 45%
-      &.hide
-        .vc-chrome-alpha-wrap
-          display: none !important
-        .vc-chrome-hue-wrap
-          margin-top: 10px
+<style scoped>
+.savebuttons {
+  top: -4em;
+}
+
+::v-deep .card {
+  overflow: hidden;
+}
+::v-deep .card .card-header {
+  padding: 0.25rem 1rem;
+}
+::v-deep .card .vc-chrome {
+  box-shadow: none;
+  border-radius: 0;
+  width: 100%;
+}
+::v-deep .card .vc-chrome .vc-chrome-saturation-wrap {
+  border-radius: 0;
+  padding-bottom: 45%;
+}
+::v-deep .card .vc-chrome.hide .vc-chrome-alpha-wrap {
+  display: none !important;
+}
+::v-deep .card .vc-chrome.hide .vc-chrome-hue-wrap {
+  margin-top: 10px;
+}
 </style>
 
 <script>
--- a/client/src/components/systemconfiguration/DataAccuracy.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/systemconfiguration/DataAccuracy.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -279,33 +279,43 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.card
-  width: 33.333%
-  &:nth-child(1)
-    > .card-header
-      border-bottom: solid 2px #28a745
-  &:nth-child(2)
-    > .card-header
-      border-bottom: solid 2px #ffc107
-  &:nth-child(3)
-    > .card-header
-      border-bottom: solid 2px #dc3545
+<style scoped>
+.card {
+  width: 33.333%;
+}
+.card:nth-child(1) > .card-header {
+  border-bottom: solid 2px #28a745;
+}
+.card:nth-child(2) > .card-header {
+  border-bottom: solid 2px #ffc107;
+}
+.card:nth-child(3) > .card-header {
+  border-bottom: solid 2px #dc3545;
+}
+
 .rounded-left,
-.rounded-left .card-header
-  border-top-right-radius: 0
-  border-bottom-right-radius: 0
+.rounded-left .card-header {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
 .rounded-right,
-.rounded-right .card-header
-  border-top-left-radius: 0
-  border-bottom-left-radius: 0
-.card-header
-  padding: 0.25rem
-.card-body
-  padding: 0.5rem
-  .form-control-sm
-    height: 24px
-    font-size: 12px
+.rounded-right .card-header {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.card-header {
+  padding: 0.25rem;
+}
+
+.card-body {
+  padding: 0.5rem;
+}
+.card-body .form-control-sm {
+  height: 24px;
+  font-size: 12px;
+}
 </style>
 
 <script>
--- a/client/src/components/systemconfiguration/MorphologyClassbreaks.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/systemconfiguration/MorphologyClassbreaks.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -222,45 +222,57 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.numfield:invalid
- border: 2px solid
- border-color: #ff0000
+<style scoped>
+.numfield:invalid {
+  border: 2px solid;
+  border-color: #ff0000;
+}
 
-.classbreak
-  width: 154px
-  .btn-outline-secondary
-    border-color: #ccc
-    color: #ccc
-    &:hover:not(.hasColor)
-      background: #eee !important
-  .input-group-prepend
-    .btn-outline-secondary.hasColor
-      color: rgba(255, 255, 255, 0.5)
-  .input-group-append
-    .btn-outline-secondary
-      &:hover
-        color: #dc3545
-      &:last-child:hover
-        color: #28a745
-  .color-picker
-    position: absolute
-    top: -4px
-    left: 19px
-    z-index: 9
-    overflow: hidden
-    border-top-left-radius: 0 !important
-    .btn
-      border-radius: 0 !important
-    .vc-chrome
-      box-shadow: none
-/deep/
-  .vc-chrome-alpha-wrap
-    display: none !important
-  .vc-chrome-hue-wrap
-    margin-top: 10px
-  .vc-chrome-saturation-wrap
-    border-radius: 0
+.classbreak {
+  width: 154px;
+}
+.classbreak .btn-outline-secondary {
+  border-color: #ccc;
+  color: #ccc;
+}
+.classbreak .btn-outline-secondary:hover:not(.hasColor) {
+  background: #eee !important;
+}
+.classbreak .input-group-prepend .btn-outline-secondary.hasColor {
+  color: rgba(255, 255, 255, 0.5);
+}
+.classbreak .input-group-append .btn-outline-secondary:hover {
+  color: #dc3545;
+}
+.classbreak .input-group-append .btn-outline-secondary:last-child:hover {
+  color: #28a745;
+}
+.classbreak .color-picker {
+  position: absolute;
+  top: -4px;
+  left: 19px;
+  z-index: 9;
+  overflow: hidden;
+  border-top-left-radius: 0 !important;
+}
+.classbreak .color-picker .btn {
+  border-radius: 0 !important;
+}
+.classbreak .color-picker .vc-chrome {
+  box-shadow: none;
+}
+
+::v-deep .vc-chrome-alpha-wrap {
+  display: none !important;
+}
+
+::v-deep .vc-chrome-hue-wrap {
+  margin-top: 10px;
+}
+
+::v-deep .vc-chrome-saturation-wrap {
+  border-radius: 0;
+}
 </style>
 
 <script>
--- a/client/src/components/systemconfiguration/PDFTemplates.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/systemconfiguration/PDFTemplates.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -73,13 +73,13 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 .table th,
 td {
-  font-size: $smaller;
+  font-size: var(--smaller);
   border-top: 0px !important;
   text-align: left;
-  padding: $small-offset !important;
+  padding: var(--small-offset) !important;
 }
 </style>
 
--- a/client/src/components/systemconfiguration/Systemconfiguration.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/systemconfiguration/Systemconfiguration.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -69,12 +69,13 @@
   </div>
 </template>
 
-<style lang="sass">
-.nav-pills
-  .nav-link
-    border-radius: 0
-    &.active
-      background: $color-info
+<style>
+.nav-pills .nav-link {
+  border-radius: 0;
+}
+.nav-pills .nav-link.active {
+  background: var(--color-info);
+}
 </style>
 
 <script>
--- a/client/src/components/toolbar/TimeSlider.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/toolbar/TimeSlider.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -72,7 +72,7 @@
   }
 };
 </script>
-<style lang="scss" scoped>
+<style scoped>
 .menuEntry {
   font-size: 9px;
   font-weight: bold;
--- a/client/src/components/toolbar/Toolbar.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/toolbar/Toolbar.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -28,9 +28,9 @@
   </div>
 </template>
 
-<style lang="scss">
-// not scoped to affect nested components
-// doen't work when put in application/assets/application.sass... why??? o_O
+<style>
+/* not scoped to affect nested components
+// doen't work when put in application/assets/application.sass... why??? o_O */
 .toolbar {
   box-shadow: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);
   overflow: hidden;
@@ -61,10 +61,10 @@
   pointer-events: auto;
   position: relative;
   overflow: hidden;
-  &.disabled {
-    color: #ccc;
-    cursor: default;
-  }
+}
+.toolbar-button.disabled {
+  color: #ccc;
+  cursor: default;
 }
 
 .toolbar-button:last-child {
--- a/client/src/components/ui/UIBoxHeader.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/ui/UIBoxHeader.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -40,32 +40,39 @@
   </h6>
 </template>
 
-<style lang="sass">
-.box-header
-  display: flex
-  justify-content: space-between
-  align-items: center
-  min-height: 34px
-  padding-left: .5rem
-  border-bottom: 1px solid #dee2e6
-  color: $color-info
-  margin-bottom: 0
-  padding: 0.25rem
-  font-weight: bold
-  background: white
-  border-top-left-radius: .25rem
-  border-top-right-radius: .25rem
-  .box-title
-    padding-left: 0.25rem
-    .box-icon
-      margin-right: 0.25rem
-  .box-control
-    margin-left: 3px
-  &.small
-    padding: 0.1rem 0.1rem 0.1rem 0.25rem
-    min-height: 27px
-.checkbox-header
-  cursor: pointer
+<style>
+.box-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  min-height: 34px;
+  padding-left: 0.5rem;
+  border-bottom: 1px solid #dee2e6;
+  color: var(--color-info);
+  margin-bottom: 0;
+  padding: 0.25rem;
+  font-weight: bold;
+  background: white;
+  border-top-left-radius: 0.25rem;
+  border-top-right-radius: 0.25rem;
+}
+.box-header .box-title {
+  padding-left: 0.25rem;
+}
+.box-header .box-title .box-icon {
+  margin-right: 0.25rem;
+}
+.box-header .box-control {
+  margin-left: 3px;
+}
+.box-header.small {
+  padding: 0.1rem 0.1rem 0.1rem 0.25rem;
+  min-height: 27px;
+}
+
+.checkbox-header {
+  cursor: pointer;
+}
 </style>
 
 <script>
--- a/client/src/components/ui/UISpinnerOverlay.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/ui/UISpinnerOverlay.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -6,19 +6,20 @@
   </transition>
 </template>
 
-<style lang="sass">
-.spinner-overlay
-  background: rgba(255, 255, 255, 0.9)
-  position: absolute
-  z-index: 99
-  top: 0
-  right: 0
-  bottom: 0
-  left: 0
-  display: flex
-  align-items: center
-  justify-content: center
-  color: #888
+<style>
+.spinner-overlay {
+  background: rgba(255, 255, 255, 0.9);
+  position: absolute;
+  z-index: 99;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  color: #888;
+}
 </style>
 
 <script>
--- a/client/src/components/ui/UITableBody.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/ui/UITableBody.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -22,33 +22,39 @@
   </div>
 </template>
 
-<style lang="sass">
-.table-body
-  .row-container
-    > .row
-      &:hover
-        background-color: #fcfcfc
-      .table-cell
-        display: flex
-        align-items: center
-        padding: 1.5px 3px
-        border-right: solid 1px #dee2e6
-        &:last-child
-          border-right: none
-        &.center
-          justify-content: center
-    .expand
-      border-bottom: solid 2px $color-info
+<style>
+.table-body .row-container > .row:hover {
+  background-color: #fcfcfc;
+}
 
-    &.active
-      > .row
-        color: #fff
-        .table-cell
-          border-right-color: rgba(255, 255, 255, 0.3)
-          background-color: $color-info
-          color: #fff
-          a
-            color: #fff !important
+.table-body .row-container > .row .table-cell {
+  display: flex;
+  align-items: center;
+  padding: 1.5px 3px;
+  border-right: solid 1px #dee2e6;
+}
+.table-body .row-container > .row .table-cell:last-child {
+  border-right: none;
+}
+.table-body .row-container > .row .table-cell.center {
+  justify-content: center;
+}
+
+.table-body .row-container .expand {
+  border-bottom: solid 2px var(--color-info);
+}
+
+.table-body .row-container.active > .row {
+  color: #fff;
+}
+.table-body .row-container.active > .row .table-cell {
+  border-right-color: rgba(255, 255, 255, 0.3);
+  background-color: var(--color-info);
+  color: #fff;
+}
+.table-body .row-container.active > .row .table-cell a {
+  color: #fff !important;
+}
 </style>
 
 <script>
--- a/client/src/components/ui/UITableHeader.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/ui/UITableHeader.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -28,22 +28,26 @@
   </div>
 </template>
 
-<style lang="sass">
-.table-header
-  > a
-    border-right: solid 1px #e7e8e9
-    background-color: #f8f9fa
-    a
-      outline: none
-      &:hover
-        text-decoration: none
-        background-color: #f8f9fa
-  &.sortable
-    a:not(.sorting-disabled)
-      cursor: pointer
-      &:hover,
-      &.active
-        background: #e7e8e9
+<style>
+.table-header > a {
+  border-right: solid 1px #e7e8e9;
+  background-color: #f8f9fa;
+}
+.table-header > a a {
+  outline: none;
+}
+.table-header > a a:hover {
+  text-decoration: none;
+  background-color: #f8f9fa;
+}
+
+.table-header.sortable a:not(.sorting-disabled) {
+  cursor: pointer;
+}
+.table-header.sortable a:not(.sorting-disabled):hover,
+.table-header.sortable a:not(.sorting-disabled).active {
+  background: #e7e8e9;
+}
 </style>
 
 <script>
--- a/client/src/components/usermanagement/Userdetail.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/usermanagement/Userdetail.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -141,16 +141,16 @@
   </div>
 </template>
 
-<style lang="scss" scoped>
+<style scoped>
 .submit-button {
   position: absolute;
-  right: $offset;
-  bottom: $offset;
+  right: var(--offset);
+  bottom: var(--offset);
 }
 .mailbutton {
   width: 12vw;
   position: absolute;
-  left: $large-offset;
+  left: var(--large-offset);
   bottom: 0;
 }
 
@@ -161,12 +161,12 @@
 .userdetails {
   min-width: 400px;
   max-height: 693px;
-  margin-right: $offset;
+  margin-right: var(--offset);
   overflow-y: auto;
 }
 
 form {
-  font-size: $smaller;
+  font-size: var(--smaller);
 }
 </style>
 
--- a/client/src/components/usermanagement/Usermanagement.vue	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/components/usermanagement/Usermanagement.vue	Thu Jun 01 11:23:19 2023 +0200
@@ -134,28 +134,35 @@
   </div>
 </template>
 
-<style lang="sass" scoped>
-.content
-  width: 100%
+<style scoped>
+.content {
+  width: 100%;
+}
 
-.userdetails
-  width: 50%
+.userdetails {
+  width: 50%;
+}
 
-.main
-  height: 100%
+.main {
+  height: 100%;
+}
 
-.icon
-  font-size: large
+.icon {
+  font-size: large;
+}
 
-.userlist
-  min-width: 520px
-  height: 100%
+.userlist {
+  min-width: 520px;
+  height: 100%;
+}
 
-.userlistsmall
-  width: 100%
+.userlistsmall {
+  width: 100%;
+}
 
-.userlistextended
-  width: 100%
+.userlistextended {
+  width: 100%;
+}
 </style>
 
 <script>
--- a/client/src/main.js	Mon May 08 18:11:08 2023 +0200
+++ b/client/src/main.js	Thu Jun 01 11:23:19 2023 +0200
@@ -42,6 +42,7 @@
 import "../node_modules/ol/ol.css";
 import "../node_modules/highlight.js/styles/paraiso-dark.css";
 import "../node_modules/vue-snotify/styles/simple.css";
+import "./assets/application.css";
 
 // fontawesome5 icons
 import {
--- a/client/vue.config.js	Mon May 08 18:11:08 2023 +0200
+++ b/client/vue.config.js	Thu Jun 01 11:23:19 2023 +0200
@@ -18,15 +18,6 @@
       config.plugin("BundleAnalyzerPlugin").use(BundleAnalyzerPlugin, []);
     }
   },
-  css: {
-    loaderOptions: {
-      // pass options to sass-loader
-      sass: {
-        // @/ is an alias to src/
-        data: `@import "@/assets/application.scss";`
-      }
-    }
-  },
   devServer: {
     proxy: {
       "/api": {
--- a/client/yarn.lock	Mon May 08 18:11:08 2023 +0200
+++ b/client/yarn.lock	Thu Jun 01 11:23:19 2023 +0200
@@ -1710,11 +1710,6 @@
   resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
   integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
 
-amdefine@>=0.0.4:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-  integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
-
 animate.css@^3.7.0:
   version "3.7.2"
   resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-3.7.2.tgz#e73e0d50e92cb1cfef1597d9b38a9481020e08ea"
@@ -1795,7 +1790,7 @@
   dependencies:
     default-require-extensions "^1.0.0"
 
-aproba@^1.0.3, aproba@^1.1.1:
+aproba@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
   integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
@@ -1805,14 +1800,6 @@
   resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e"
   integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==
 
-are-we-there-yet@~1.1.2:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
-  integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
-  dependencies:
-    delegates "^1.0.0"
-    readable-stream "^2.0.6"
-
 argparse@^1.0.7:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -1852,11 +1839,6 @@
   resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
   integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
 
-array-find-index@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
-  integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
-
 array-flatten@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -1953,11 +1935,6 @@
   resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
   integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
 
-async-foreach@^0.1.3:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
-  integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=
-
 async-limiter@~1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
@@ -2308,13 +2285,6 @@
   dependencies:
     file-uri-to-path "1.0.0"
 
-block-stream@*:
-  version "0.0.9"
-  resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
-  integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
-  dependencies:
-    inherits "~2.0.0"
-
 bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.5:
   version "3.7.2"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
@@ -2658,29 +2628,11 @@
     no-case "^2.2.0"
     upper-case "^1.1.1"
 
-camelcase-keys@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
-  integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
-  dependencies:
-    camelcase "^2.0.0"
-    map-obj "^1.0.0"
-
 camelcase@^1.0.2:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
   integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
 
-camelcase@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-  integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
-
-camelcase@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
-  integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
-
 camelcase@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
@@ -2758,7 +2710,7 @@
     escape-string-regexp "^1.0.5"
     supports-color "^5.3.0"
 
-chalk@^1.1.1, chalk@^1.1.3:
+chalk@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
   integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
@@ -2944,15 +2896,6 @@
     right-align "^0.1.1"
     wordwrap "0.0.2"
 
-cliui@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
-  integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
-  dependencies:
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wrap-ansi "^2.0.0"
-
 cliui@^4.0.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
@@ -2980,15 +2923,6 @@
     strip-ansi "^6.0.0"
     wrap-ansi "^6.2.0"
 
-clone-deep@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
-  integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
-  dependencies:
-    is-plain-object "^2.0.4"
-    kind-of "^6.0.2"
-    shallow-clone "^3.0.0"
-
 clone@2.x:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
@@ -3187,11 +3121,6 @@
   resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
   integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
 
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-  integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-
 consolidate@^0.15.1:
   version "0.15.1"
   resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
@@ -3336,14 +3265,6 @@
     shebang-command "^1.2.0"
     which "^1.2.9"
 
-cross-spawn@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
-  integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI=
-  dependencies:
-    lru-cache "^4.0.1"
-    which "^1.2.9"
-
 cross-spawn@^5.0.1, cross-spawn@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@@ -3596,13 +3517,6 @@
   resolved "https://registry.yarnpkg.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615"
   integrity sha1-8xz35PPiGLBybnOMqSoC00iO9hU=
 
-currently-unhandled@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
-  integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
-  dependencies:
-    array-find-index "^1.0.1"
-
 cyclist@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
@@ -3953,7 +3867,7 @@
   dependencies:
     ms "^2.1.1"
 
-decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
   integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
@@ -4099,11 +4013,6 @@
   resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
   integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
 
-delegates@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-  integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-
 depd@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
@@ -5275,16 +5184,6 @@
     bindings "^1.5.0"
     nan "^2.12.1"
 
-fstream@^1.0.0, fstream@^1.0.12:
-  version "1.0.12"
-  resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
-  integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
-  dependencies:
-    graceful-fs "^4.1.2"
-    inherits "~2.0.0"
-    mkdirp ">=0.5 0"
-    rimraf "2"
-
 ftp@~0.3.10:
   version "0.3.10"
   resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
@@ -5303,27 +5202,6 @@
   resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
   integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
 
-gauge@~2.7.3:
-  version "2.7.4"
-  resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
-  integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
-  dependencies:
-    aproba "^1.0.3"
-    console-control-strings "^1.0.0"
-    has-unicode "^2.0.0"
-    object-assign "^4.1.0"
-    signal-exit "^3.0.0"
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wide-align "^1.1.0"
-
-gaze@^1.0.0:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
-  integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==
-  dependencies:
-    globule "^1.0.0"
-
 gensync@^1.0.0-beta.1:
   version "1.0.0-beta.1"
   resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
@@ -5358,11 +5236,6 @@
   resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
   integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
 
-get-stdin@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
-  integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
-
 get-stdin@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
@@ -5459,7 +5332,7 @@
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1:
+glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
   version "7.1.6"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
   integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@@ -5554,15 +5427,6 @@
     pify "^4.0.1"
     slash "^2.0.0"
 
-globule@^1.0.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.1.tgz#90a25338f22b7fbeb527cee63c629aea754d33b9"
-  integrity sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==
-  dependencies:
-    glob "~7.1.1"
-    lodash "~4.17.12"
-    minimatch "~3.0.2"
-
 good-listener@^1.2.2:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
@@ -5660,11 +5524,6 @@
   resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
   integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
 
-has-unicode@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-  integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
-
 has-value@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
@@ -6045,18 +5904,6 @@
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
   integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
 
-in-publish@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c"
-  integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==
-
-indent-string@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
-  integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
-  dependencies:
-    repeating "^2.0.0"
-
 indexes-of@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
@@ -6075,7 +5922,7 @@
     once "^1.3.0"
     wrappy "1"
 
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -6135,11 +5982,6 @@
   dependencies:
     loose-envify "^1.0.0"
 
-invert-kv@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-  integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
-
 invert-kv@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
@@ -6994,11 +6836,6 @@
     import-local "^1.0.0"
     jest-cli "^23.6.0"
 
-js-base64@^2.1.8:
-  version "2.5.2"
-  resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209"
-  integrity sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==
-
 js-beautify@^1.6.12, js-beautify@^1.6.14:
   version "1.11.0"
   resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.11.0.tgz#afb873dc47d58986360093dcb69951e8bcd5ded2"
@@ -7277,13 +7114,6 @@
   resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
   integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
 
-lcid@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
-  integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
-  dependencies:
-    invert-kv "^1.0.0"
-
 lcid@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
@@ -7357,7 +7187,7 @@
     json5 "^0.5.0"
     object-assign "^4.0.1"
 
-loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
   integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
@@ -7573,7 +7403,7 @@
   resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
   integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
 
-lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.12:
+lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0:
   version "4.17.15"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
   integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
@@ -7602,14 +7432,6 @@
   dependencies:
     js-tokens "^3.0.0 || ^4.0.0"
 
-loud-rejection@^1.0.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
-  integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
-  dependencies:
-    currently-unhandled "^0.4.1"
-    signal-exit "^3.0.0"
-
 lower-case@^1.1.1:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
@@ -7669,11 +7491,6 @@
   resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
   integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
 
-map-obj@^1.0.0, map-obj@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
-  integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
-
 map-visit@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
@@ -7740,22 +7557,6 @@
     errno "^0.1.3"
     readable-stream "^2.0.1"
 
-meow@^3.7.0:
-  version "3.7.0"
-  resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
-  integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
-  dependencies:
-    camelcase-keys "^2.0.0"
-    decamelize "^1.1.2"
-    loud-rejection "^1.0.0"
-    map-obj "^1.0.1"
-    minimist "^1.1.3"
-    normalize-package-data "^2.3.4"
-    object-assign "^4.0.1"
-    read-pkg-up "^1.0.1"
-    redent "^1.0.0"
-    trim-newlines "^1.0.0"
-
 merge-descriptors@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -7900,7 +7701,7 @@
   dependencies:
     brace-expansion "^1.0.0"
 
-minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
+minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
   integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -7912,7 +7713,7 @@
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
   integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
 
-minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
+minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
   integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
@@ -7969,7 +7770,7 @@
   dependencies:
     minimist "0.0.8"
 
-"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@~0.5.1:
+mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@~0.5.1:
   version "0.5.5"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
   integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
@@ -8077,7 +7878,7 @@
     object-assign "^4.0.1"
     thenify-all "^1.0.0"
 
-nan@^2.12.1, nan@^2.13.2:
+nan@^2.12.1:
   version "2.14.1"
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
   integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
@@ -8160,24 +7961,6 @@
   resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
   integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
 
-node-gyp@^3.8.0:
-  version "3.8.0"
-  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
-  integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
-  dependencies:
-    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"
-
 node-int64@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -8237,36 +8020,6 @@
   resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4"
   integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==
 
-node-sass@^4.10.0:
-  version "4.14.0"
-  resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.0.tgz#a8e9d7720f8e15b4a1072719dcf04006f5648eeb"
-  integrity sha512-AxqU+DFpk0lEz95sI6jO0hU0Rwyw7BXVEv6o9OItoXLyeygPeaSpiV4rwQb10JiTghHaa0gZeD21sz+OsQluaw==
-  dependencies:
-    async-foreach "^0.1.3"
-    chalk "^1.1.1"
-    cross-spawn "^3.0.0"
-    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"
-    npmlog "^4.0.0"
-    request "^2.88.0"
-    sass-graph "^2.2.4"
-    stdout-stream "^1.4.0"
-    "true-case-path" "^1.0.2"
-
-"nopt@2 || 3":
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
-  integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
-  dependencies:
-    abbrev "1"
-
 nopt@^4.0.3:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
@@ -8275,7 +8028,7 @@
     abbrev "1"
     osenv "^0.1.4"
 
-normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
+normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
   integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
@@ -8336,16 +8089,6 @@
   dependencies:
     path-key "^3.0.0"
 
-"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
-  integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
-  dependencies:
-    are-we-there-yet "~1.1.2"
-    console-control-strings "~1.1.0"
-    gauge "~2.7.3"
-    set-blocking "~2.0.0"
-
 nth-check@^1.0.2, nth-check@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
@@ -8585,13 +8328,6 @@
   resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
   integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
 
-os-locale@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
-  integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
-  dependencies:
-    lcid "^1.0.0"
-
 os-locale@^3.0.0, os-locale@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
@@ -8606,7 +8342,7 @@
   resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
   integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
 
-osenv@0, osenv@^0.1.4:
+osenv@^0.1.4:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
   integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
@@ -9872,7 +9608,7 @@
     parse-json "^5.0.0"
     type-fest "^0.6.0"
 
-"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
+"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
   version "2.3.7"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
   integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -9920,14 +9656,6 @@
   dependencies:
     util.promisify "^1.0.0"
 
-redent@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
-  integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
-  dependencies:
-    indent-string "^2.1.0"
-    strip-indent "^1.0.1"
-
 regenerate-unicode-properties@^8.2.0:
   version "8.2.0"
   resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
@@ -10212,7 +9940,7 @@
   dependencies:
     align-text "^0.1.1"
 
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
+rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
   version "2.7.1"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
   integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@@ -10320,27 +10048,6 @@
   dependencies:
     truncate-utf8-bytes "^1.0.0"
 
-sass-graph@^2.2.4:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
-  integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=
-  dependencies:
-    glob "^7.0.0"
-    lodash "^4.0.0"
-    scss-tokenizer "^0.2.3"
-    yargs "^7.0.0"
-
-sass-loader@^7.0.1:
-  version "7.3.1"
-  resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.3.1.tgz#a5bf68a04bcea1c13ff842d747150f7ab7d0d23f"
-  integrity sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==
-  dependencies:
-    clone-deep "^4.0.1"
-    loader-utils "^1.0.1"
-    neo-async "^2.5.0"
-    pify "^4.0.1"
-    semver "^6.3.0"
-
 sax@^1.1.4, sax@^1.2.4, sax@~1.2.4:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
@@ -10363,14 +10070,6 @@
     ajv "^6.12.0"
     ajv-keywords "^3.4.1"
 
-scss-tokenizer@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
-  integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE=
-  dependencies:
-    js-base64 "^2.1.8"
-    source-map "^0.4.2"
-
 select-hose@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
@@ -10408,11 +10107,6 @@
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
   integrity sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=
 
-semver@~5.3.0:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-  integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
-
 send@0.17.1:
   version "0.17.1"
   resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
@@ -10465,7 +10159,7 @@
     parseurl "~1.3.3"
     send "0.17.1"
 
-set-blocking@^2.0.0, set-blocking@~2.0.0:
+set-blocking@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
   integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
@@ -10503,13 +10197,6 @@
     inherits "^2.0.1"
     safe-buffer "^5.0.1"
 
-shallow-clone@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
-  integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
-  dependencies:
-    kind-of "^6.0.2"
-
 shebang-command@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -10698,13 +10385,6 @@
   resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
   integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
 
-source-map@^0.4.2:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
-  integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
-  dependencies:
-    amdefine ">=0.0.4"
-
 source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
@@ -10848,13 +10528,6 @@
   resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
   integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
 
-stdout-stream@^1.4.0:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de"
-  integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==
-  dependencies:
-    readable-stream "^2.0.1"
-
 stealthy-require@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
@@ -10905,7 +10578,7 @@
     astral-regex "^1.0.0"
     strip-ansi "^4.0.0"
 
-string-width@^1.0.1, string-width@^1.0.2:
+string-width@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
   integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
@@ -10914,7 +10587,7 @@
     is-fullwidth-code-point "^1.0.0"
     strip-ansi "^3.0.0"
 
-"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
   integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -11059,13 +10732,6 @@
   resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
   integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
 
-strip-indent@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
-  integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
-  dependencies:
-    get-stdin "^4.0.1"
-
 strip-indent@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
@@ -11184,15 +10850,6 @@
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
   integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
 
-tar@^2.0.0:
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
-  integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
-  dependencies:
-    block-stream "*"
-    fstream "^1.0.12"
-    inherits "2"
-
 tcp-port-used@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.1.tgz#46061078e2d38c73979a2c2c12b5a674e6689d70"
@@ -11406,23 +11063,11 @@
   resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
   integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
 
-trim-newlines@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
-  integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
-
 trim-right@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
   integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
 
-"true-case-path@^1.0.2":
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
-  integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==
-  dependencies:
-    glob "^7.1.2"
-
 truncate-utf8-bytes@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
@@ -12161,17 +11806,12 @@
     tr46 "^1.0.1"
     webidl-conversions "^4.0.2"
 
-which-module@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
-  integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
-
 which-module@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
   integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
 
-which@1, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1:
+which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
   integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -12185,13 +11825,6 @@
   dependencies:
     isexe "^2.0.0"
 
-wide-align@^1.1.0:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
-  integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
-  dependencies:
-    string-width "^1.0.2 || 2"
-
 window-size@0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
@@ -12370,13 +12003,6 @@
     camelcase "^5.0.0"
     decamelize "^1.2.0"
 
-yargs-parser@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
-  integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=
-  dependencies:
-    camelcase "^3.0.0"
-
 yargs-parser@^9.0.2:
   version "9.0.2"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
@@ -12471,25 +12097,6 @@
     y18n "^4.0.0"
     yargs-parser "^18.1.1"
 
-yargs@^7.0.0:
-  version "7.1.0"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
-  integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=
-  dependencies:
-    camelcase "^3.0.0"
-    cliui "^3.2.0"
-    decamelize "^1.1.1"
-    get-caller-file "^1.0.1"
-    os-locale "^1.4.0"
-    read-pkg-up "^1.0.1"
-    require-directory "^2.1.1"
-    require-main-filename "^1.0.1"
-    set-blocking "^2.0.0"
-    string-width "^1.0.2"
-    which-module "^1.0.0"
-    y18n "^3.2.1"
-    yargs-parser "^5.0.0"
-
 yargs@~3.10.0:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"