diff --git a/.editorconfig b/.editorconfig
index 4ab7203cb7a3e0d274441b897d59fafab813930d..242a2410e6f60e05aa6af83c0cf69b769c4481b3 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -20,3 +20,6 @@ block_comment_start = /*
 block_comment_end = */
 line_comment = //
 quote_type = single
+
+[*.yml]
+indent_size = 2
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 02e79e78352e6499e3ff0d946dc505ff6a82fd5a..9cb72713d473e432a20aa6baaa0ade66de263719 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -29,6 +29,7 @@ stages:
   - checks
   - analyse
   - test
+  - cache
   - packaging
   - release
 
@@ -183,24 +184,20 @@ lint-css:
     STYLELINT_CODE_QUALITY_REPORT: $REPORT_DIR/stylelint-codequality.json
   interruptible: true
   cache:
-    - key: "$CI_JOB_NAME_SLUG:CI_COMMIT_REF_SLUG"
+    - key: "CI_COMMIT_REF_SLUG-lint-css"
       paths:
         - $CACHE_LOCATION
+      policy: pull-push
+      when: always
   before_script:
+    - *mkdir-caches
     - *mkdir-reports
     - npm install
-      --no-save --no-audit --no-fund
-      --loglevel=error
-      stylelint@^14.9.1
-      stylelint-config-standard@^26.0.0
-      stylelint-formatter-gitlab
   script:
-    - npx
-      stylelint
+    - npm run lint-css --
       --cache --cache-location $CACHE_LOCATION
       --custom-formatter=node_modules/stylelint-formatter-gitlab
       --output-file $STYLELINT_CODE_QUALITY_REPORT
-      resources/assets/stylesheets
   artifacts:
     reports:
       codequality: $STYLELINT_CODE_QUALITY_REPORT
diff --git a/.stylelintrc.json b/.stylelintrc.json
index 267378203a98e699d73ddafbfd810942b2916f3c..0e5f5c42a3a49fc446cfa4bba3e972b13830bb9a 100644
--- a/.stylelintrc.json
+++ b/.stylelintrc.json
@@ -1,96 +1,60 @@
 {
-    "extends": "stylelint-config-standard",
+    "extends": "stylelint-config-standard-scss",
     "rules": {
         "alpha-value-notation": null,
         "at-rule-empty-line-before": null,
         "at-rule-no-vendor-prefix": null,
-        "block-closing-brace-empty-line-before": null,
-        "block-closing-brace-newline-after": null,
-        "block-closing-brace-newline-before": null,
-        "block-closing-brace-space-before": null,
         "block-no-empty": null,
-        "block-opening-brace-newline-after": null,
-        "block-opening-brace-space-after": null,
-        "block-opening-brace-space-before": null,
         "color-function-notation": null,
-        "color-hex-case": null,
         "color-hex-length": null,
         "color-no-invalid-hex": null,
         "comment-empty-line-before": null,
         "comment-whitespace-inside": null,
         "custom-property-empty-line-before": null,
-        "declaration-bang-space-after": null,
-        "declaration-bang-space-before": null,
         "declaration-block-no-duplicate-properties": null,
         "declaration-block-no-redundant-longhand-properties": null,
         "declaration-block-no-shorthand-property-overrides": null,
-        "declaration-block-semicolon-newline-after": null,
-        "declaration-block-semicolon-space-before": null,
         "declaration-block-single-line-max-declarations": null,
-        "declaration-block-trailing-semicolon": null,
-        "declaration-colon-newline-after": null,
-        "declaration-colon-space-after": null,
-        "declaration-colon-space-before": null,
         "declaration-empty-line-before": null,
         "font-family-name-quotes": null,
         "font-family-no-missing-generic-family-keyword": null,
-        "function-comma-space-after": null,
-        "function-comma-space-before": null,
         "function-name-case": null,
         "function-no-unknown": null,
-        "function-parentheses-newline-inside": null,
-        "function-parentheses-space-inside": null,
         "function-url-quotes": null,
         "hue-degree-notation": null,
-        "indentation": null,
+        "import-notation": "string",
         "keyframes-name-pattern": null,
         "length-zero-no-unit": null,
-        "max-empty-lines": null,
-        "max-line-length": null,
+        "media-feature-range-notation": "prefix",
         "media-feature-name-no-vendor-prefix": null,
         "no-descending-specificity": null,
         "no-duplicate-selectors": null,
-        "no-empty-first-line": null,
         "no-empty-source": null,
-        "no-eol-whitespace": null,
-        "no-extra-semicolons": null,
         "no-invalid-position-at-import-rule": null,
         "no-irregular-whitespace": null,
-        "no-missing-end-of-source-newline": null,
-        "number-leading-zero": null,
         "number-max-precision": null,
-        "number-no-trailing-zeros": null,
         "property-no-vendor-prefix": null,
         "rule-empty-line-before": null,
         "selector-attribute-quotes": null,
         "selector-class-pattern": null,
-        "selector-combinator-space-after": null,
-        "selector-combinator-space-before": null,
-        "selector-descendant-combinator-no-non-space": null,
         "selector-id-pattern": null,
-        "selector-list-comma-newline-after": null,
         "selector-no-vendor-prefix": null,
         "selector-not-notation": null,
         "selector-pseudo-element-colon-notation": null,
         "shorthand-property-no-redundant-values": null,
-        "string-quotes": null,
         "value-keyword-case": null,
-        "value-list-max-empty-lines": null,
         "value-no-vendor-prefix": null,
         "custom-property-pattern": [
             "^([a-z][a-z0-9]*-+)*[a-z0-9]+$",
             {"message": "Expected custom property name to be kebab-case-ish (multiple dashes are allowed"}
-        ]
+        ],
+
+        "scss/at-extend-no-missing-placeholder": null,
+        "scss/at-mixin-pattern": null,
+        "scss/dollar-variable-empty-line-before": null,
+        "scss/dollar-variable-pattern": null,
+        "scss/double-slash-comment-empty-line-before": null
     },
-    "overrides": [
-        {
-            "files": ["**/*.scss"],
-            "customSyntax": "postcss-scss",
-            "rules": {
-                "at-rule-no-unknown": null
-            }
-        }
-    ],
     "ignoreFiles": [
         "resource/assets/stylesheets/jquery-ui.structure.css",
         "resources/assets/stylesheets/vendor/*"
diff --git a/package-lock.json b/package-lock.json
index f9151062361bdb42eddeddc2a2f7e7ff18823741..07e9b6f0fbdb775552f6eb9871bff6d288fead96 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -120,6 +120,9 @@
                 "sprintf-js": "^1.0.3",
                 "stream-browserify": "^3.0.0",
                 "style-loader": "^4.0.0",
+                "stylelint": "^15.11.0",
+                "stylelint-config-standard-scss": "^11.1.0",
+                "stylelint-formatter-gitlab": "^1.0.2",
                 "svgo": "3.3.2",
                 "tablesorter": "2.31.3",
                 "ts-loader": "^9.5.1",
@@ -2138,21 +2141,6 @@
                 "npm": ">=5.7.1"
             }
         },
-        "node_modules/@ckeditor/ckeditor5-dev-translations/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/@ckeditor/ckeditor5-dev-translations/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -2169,18 +2157,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/@ckeditor/ckeditor5-dev-translations/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/@ckeditor/ckeditor5-dev-translations/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2225,21 +2201,6 @@
                 "npm": ">=5.7.1"
             }
         },
-        "node_modules/@ckeditor/ckeditor5-dev-utils/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/@ckeditor/ckeditor5-dev-utils/node_modules/chalk": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
@@ -2253,18 +2214,6 @@
                 "node": ">=8"
             }
         },
-        "node_modules/@ckeditor/ckeditor5-dev-utils/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/@ckeditor/ckeditor5-dev-utils/node_modules/postcss-loader": {
             "version": "4.3.0",
             "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz",
@@ -2760,6 +2709,73 @@
                 "npm": ">=5.7.1"
             }
         },
+        "node_modules/@csstools/css-parser-algorithms": {
+            "version": "2.7.1",
+            "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz",
+            "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools"
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools"
+                }
+            ],
+            "license": "MIT",
+            "engines": {
+                "node": "^14 || ^16 || >=18"
+            },
+            "peerDependencies": {
+                "@csstools/css-tokenizer": "^2.4.1"
+            }
+        },
+        "node_modules/@csstools/css-tokenizer": {
+            "version": "2.4.1",
+            "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz",
+            "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools"
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools"
+                }
+            ],
+            "license": "MIT",
+            "engines": {
+                "node": "^14 || ^16 || >=18"
+            }
+        },
+        "node_modules/@csstools/media-query-list-parser": {
+            "version": "2.1.13",
+            "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz",
+            "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools"
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools"
+                }
+            ],
+            "license": "MIT",
+            "engines": {
+                "node": "^14 || ^16 || >=18"
+            },
+            "peerDependencies": {
+                "@csstools/css-parser-algorithms": "^2.7.1",
+                "@csstools/css-tokenizer": "^2.4.1"
+            }
+        },
         "node_modules/@csstools/selector-specificity": {
             "version": "2.2.0",
             "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz",
@@ -3197,21 +3213,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/@jest/console/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/@jest/console/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3228,18 +3229,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/@jest/console/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/@jest/console/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -3299,21 +3288,6 @@
                 }
             }
         },
-        "node_modules/@jest/core/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/@jest/core/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3330,18 +3304,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/@jest/core/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/@jest/core/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -3469,21 +3431,6 @@
                 }
             }
         },
-        "node_modules/@jest/reporters/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/@jest/reporters/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3500,18 +3447,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/@jest/reporters/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/@jest/reporters/node_modules/jest-worker": {
             "version": "29.7.0",
             "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
@@ -3636,21 +3571,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/@jest/transform/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/@jest/transform/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3667,18 +3587,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/@jest/transform/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/@jest/transform/node_modules/convert-source-map": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
@@ -3714,21 +3622,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/@jest/types/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/@jest/types/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3745,18 +3638,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/@jest/types/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/@jest/types/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -4136,12 +4017,26 @@
             "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
             "dev": true
         },
+        "node_modules/@types/minimist": {
+            "version": "1.2.5",
+            "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
+            "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/@types/node": {
             "version": "20.3.3",
             "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz",
             "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==",
             "dev": true
         },
+        "node_modules/@types/normalize-package-data": {
+            "version": "2.4.4",
+            "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+            "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/@types/parse-json": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
@@ -5053,6 +4948,35 @@
                 "node": ">=8"
             }
         },
+        "node_modules/ansi-styles": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "color-convert": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+            }
+        },
+        "node_modules/ansi-styles/node_modules/color-convert": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "color-name": "~1.1.4"
+            },
+            "engines": {
+                "node": ">=7.0.0"
+            }
+        },
         "node_modules/anymatch": {
             "version": "3.1.3",
             "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -5100,7 +5024,17 @@
                 "node": ">=8"
             }
         },
-        "node_modules/asap": {
+        "node_modules/arrify": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+            "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/asap": {
             "version": "2.0.6",
             "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
             "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
@@ -5114,6 +5048,16 @@
             "dev": true,
             "optional": true
         },
+        "node_modules/astral-regex": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+            "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/asynckit": {
             "version": "0.4.0",
             "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -5209,21 +5153,6 @@
                 "@babel/core": "^7.8.0"
             }
         },
-        "node_modules/babel-jest/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/babel-jest/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -5240,18 +5169,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/babel-jest/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/babel-jest/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -5861,6 +5778,51 @@
                 "node": ">= 6"
             }
         },
+        "node_modules/camelcase-keys": {
+            "version": "7.0.2",
+            "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
+            "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "camelcase": "^6.3.0",
+                "map-obj": "^4.1.0",
+                "quick-lru": "^5.1.1",
+                "type-fest": "^1.2.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/camelcase-keys/node_modules/camelcase": {
+            "version": "6.3.0",
+            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+            "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/camelcase-keys/node_modules/type-fest": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+            "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+            "dev": true,
+            "license": "(MIT OR CC0-1.0)",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/caniuse-api": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
@@ -6380,21 +6342,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/create-jest/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/create-jest/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -6411,18 +6358,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/create-jest/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/create-jest/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -6476,6 +6411,16 @@
                 "postcss": "^8.0.9"
             }
         },
+        "node_modules/css-functions-list": {
+            "version": "3.2.3",
+            "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
+            "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=12 || >=16"
+            }
+        },
         "node_modules/css-line-break": {
             "version": "2.1.0",
             "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
@@ -7362,6 +7307,56 @@
                 }
             }
         },
+        "node_modules/decamelize": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
+            "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/decamelize-keys": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+            "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "decamelize": "^1.1.0",
+                "map-obj": "^1.0.0"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/decamelize-keys/node_modules/decamelize": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+            "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/decamelize-keys/node_modules/map-obj": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+            "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
         "node_modules/decimal.js": {
             "version": "10.4.3",
             "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
@@ -7948,21 +7943,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/eslint/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/eslint/node_modules/argparse": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -7986,18 +7966,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/eslint/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/eslint/node_modules/escape-string-regexp": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -8366,10 +8334,11 @@
             "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
         },
         "node_modules/fast-glob": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz",
-            "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==",
+            "version": "3.3.2",
+            "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+            "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@nodelib/fs.stat": "^2.0.2",
                 "@nodelib/fs.walk": "^1.2.3",
@@ -8520,12 +8489,14 @@
             }
         },
         "node_modules/flat-cache": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-            "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+            "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "flatted": "^3.1.0",
+                "flatted": "^3.2.9",
+                "keyv": "^4.5.3",
                 "rimraf": "^3.0.2"
             },
             "engines": {
@@ -8533,10 +8504,11 @@
             }
         },
         "node_modules/flatted": {
-            "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
-            "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
-            "dev": true
+            "version": "3.3.2",
+            "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
+            "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
+            "dev": true,
+            "license": "ISC"
         },
         "node_modules/flow-parser": {
             "version": "0.211.0",
@@ -8853,6 +8825,47 @@
             "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
             "dev": true
         },
+        "node_modules/global-modules": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+            "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "global-prefix": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/global-prefix": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+            "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "ini": "^1.3.5",
+                "kind-of": "^6.0.2",
+                "which": "^1.3.1"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/global-prefix/node_modules/which": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+            "dev": true,
+            "license": "ISC",
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "which": "bin/which"
+            }
+        },
         "node_modules/globals": {
             "version": "11.12.0",
             "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -8883,6 +8896,13 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/globjoin": {
+            "version": "0.1.4",
+            "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+            "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/graceful-fs": {
             "version": "4.2.11",
             "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -8902,6 +8922,16 @@
             "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
             "dev": true
         },
+        "node_modules/hard-rejection": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+            "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
+            }
+        },
         "node_modules/has": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -8982,6 +9012,39 @@
                 "node": "*"
             }
         },
+        "node_modules/hosted-git-info": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+            "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+            "dev": true,
+            "license": "ISC",
+            "dependencies": {
+                "lru-cache": "^6.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/hosted-git-info/node_modules/lru-cache": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+            "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+            "dev": true,
+            "license": "ISC",
+            "dependencies": {
+                "yallist": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/hosted-git-info/node_modules/yallist": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+            "dev": true,
+            "license": "ISC"
+        },
         "node_modules/html-encoding-sniffer": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
@@ -9000,6 +9063,19 @@
             "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
             "dev": true
         },
+        "node_modules/html-tags": {
+            "version": "3.3.1",
+            "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
+            "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/html2canvas": {
             "version": "1.4.1",
             "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
@@ -9151,12 +9227,22 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/import-local": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
-            "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+        "node_modules/import-lazy": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
+            "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
             "dev": true,
-            "dependencies": {
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/import-local": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+            "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+            "dev": true,
+            "dependencies": {
                 "pkg-dir": "^4.2.0",
                 "resolve-cwd": "^3.0.0"
             },
@@ -9222,6 +9308,13 @@
             "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
             "dev": true
         },
+        "node_modules/ini": {
+            "version": "1.3.8",
+            "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+            "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+            "dev": true,
+            "license": "ISC"
+        },
         "node_modules/interpret": {
             "version": "1.4.0",
             "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
@@ -9368,6 +9461,16 @@
                 "node": ">=8"
             }
         },
+        "node_modules/is-plain-obj": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+            "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
         "node_modules/is-plain-object": {
             "version": "2.0.4",
             "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -9644,21 +9747,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-circus/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-circus/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -9675,18 +9763,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-circus/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-circus/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -9732,21 +9808,6 @@
                 }
             }
         },
-        "node_modules/jest-cli/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-cli/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -9763,18 +9824,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-cli/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-cli/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -9832,21 +9881,6 @@
                 }
             }
         },
-        "node_modules/jest-config/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-config/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -9863,18 +9897,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-config/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-config/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -9902,21 +9924,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-diff/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-diff/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -9933,18 +9940,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-diff/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-diff/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -9985,21 +9980,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-each/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-each/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -10016,18 +9996,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-each/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-each/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10176,21 +10144,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-matcher-utils/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-matcher-utils/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -10207,18 +10160,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-matcher-utils/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-matcher-utils/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10251,21 +10192,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-message-util/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-message-util/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -10282,18 +10208,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-message-util/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-message-util/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10379,21 +10293,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-resolve/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-resolve/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -10410,18 +10309,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-resolve/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-resolve/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10466,21 +10353,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-runner/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-runner/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -10497,18 +10369,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-runner/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-runner/node_modules/jest-worker": {
             "version": "29.7.0",
             "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
@@ -10594,29 +10454,14 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-runtime/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+        "node_modules/jest-runtime/node_modules/chalk": {
+            "version": "4.1.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
             "dev": true,
             "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
-        "node_modules/jest-runtime/node_modules/chalk": {
-            "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-            "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-            "dev": true,
-            "dependencies": {
-                "ansi-styles": "^4.1.0",
-                "supports-color": "^7.1.0"
+                "ansi-styles": "^4.1.0",
+                "supports-color": "^7.1.0"
             },
             "engines": {
                 "node": ">=10"
@@ -10625,18 +10470,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-runtime/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-runtime/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10680,21 +10513,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-snapshot/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-snapshot/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -10711,18 +10529,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-snapshot/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-snapshot/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10752,21 +10558,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-util/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-util/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -10783,18 +10574,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-util/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-util/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10824,21 +10603,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-validate/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-validate/node_modules/camelcase": {
             "version": "6.3.0",
             "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
@@ -10867,18 +10631,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-validate/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-validate/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10910,21 +10662,6 @@
                 "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
             }
         },
-        "node_modules/jest-watcher/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/jest-watcher/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -10941,18 +10678,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/jest-watcher/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/jest-watcher/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -11149,6 +10874,13 @@
                 "node": ">=6"
             }
         },
+        "node_modules/json-buffer": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+            "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/json-parse-even-better-errors": {
             "version": "2.3.1",
             "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -11229,6 +10961,16 @@
                 "setimmediate": "^1.0.5"
             }
         },
+        "node_modules/keyv": {
+            "version": "4.5.4",
+            "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+            "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "json-buffer": "3.0.1"
+            }
+        },
         "node_modules/kind-of": {
             "version": "6.0.3",
             "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -11256,6 +10998,13 @@
                 "node": ">= 8"
             }
         },
+        "node_modules/known-css-properties": {
+            "version": "0.29.0",
+            "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
+            "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/leven": {
             "version": "3.1.0",
             "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -11381,6 +11130,13 @@
             "integrity": "sha512-kn1IDX0aHfg0FsnPIyxCHTamZXt3YK3aExRH1LW8YhzP6+sCldTm8+E4aIg+nSmM6R4eqdWGrXWtfYI961bwIw==",
             "dev": true
         },
+        "node_modules/lodash.truncate": {
+            "version": "4.4.2",
+            "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+            "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/lodash.uniq": {
             "version": "4.5.0",
             "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -11437,6 +11193,30 @@
                 "tmpl": "1.0.5"
             }
         },
+        "node_modules/map-obj": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+            "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/mathml-tag-names": {
+            "version": "2.1.3",
+            "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+            "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
+            "dev": true,
+            "license": "MIT",
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/wooorm"
+            }
+        },
         "node_modules/md5": {
             "version": "2.3.0",
             "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
@@ -11454,6 +11234,56 @@
             "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
             "dev": true
         },
+        "node_modules/meow": {
+            "version": "10.1.5",
+            "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
+            "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@types/minimist": "^1.2.2",
+                "camelcase-keys": "^7.0.0",
+                "decamelize": "^5.0.0",
+                "decamelize-keys": "^1.1.0",
+                "hard-rejection": "^2.1.0",
+                "minimist-options": "4.1.0",
+                "normalize-package-data": "^3.0.2",
+                "read-pkg-up": "^8.0.0",
+                "redent": "^4.0.0",
+                "trim-newlines": "^4.0.2",
+                "type-fest": "^1.2.2",
+                "yargs-parser": "^20.2.9"
+            },
+            "engines": {
+                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/meow/node_modules/type-fest": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+            "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+            "dev": true,
+            "license": "(MIT OR CC0-1.0)",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/meow/node_modules/yargs-parser": {
+            "version": "20.2.9",
+            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+            "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+            "dev": true,
+            "license": "ISC",
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/merge-stream": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -11512,6 +11342,16 @@
                 "node": ">=6"
             }
         },
+        "node_modules/min-indent": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+            "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=4"
+            }
+        },
         "node_modules/mini-css-extract-plugin": {
             "version": "2.9.2",
             "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz",
@@ -11554,6 +11394,21 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
+        "node_modules/minimist-options": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+            "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "arrify": "^1.0.1",
+                "is-plain-obj": "^1.1.0",
+                "kind-of": "^6.0.3"
+            },
+            "engines": {
+                "node": ">= 6"
+            }
+        },
         "node_modules/minipass": {
             "version": "3.3.6",
             "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
@@ -11742,6 +11597,22 @@
             "dev": true,
             "license": "MIT"
         },
+        "node_modules/normalize-package-data": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+            "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "hosted-git-info": "^4.0.1",
+                "is-core-module": "^2.5.0",
+                "semver": "^7.3.4",
+                "validate-npm-package-license": "^3.0.1"
+            },
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/normalize-path": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -12545,6 +12416,13 @@
                 "js-yaml": "bin/js-yaml.js"
             }
         },
+        "node_modules/postcss-media-query-parser": {
+            "version": "0.2.3",
+            "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+            "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/postcss-merge-longhand": {
             "version": "5.1.7",
             "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz",
@@ -12956,6 +12834,30 @@
                 "postcss": "^8.2.15"
             }
         },
+        "node_modules/postcss-resolve-nested-selector": {
+            "version": "0.1.6",
+            "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz",
+            "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/postcss-safe-parser": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+            "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=12.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/postcss/"
+            },
+            "peerDependencies": {
+                "postcss": "^8.3.3"
+            }
+        },
         "node_modules/postcss-scss": {
             "version": "4.0.9",
             "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
@@ -13401,6 +13303,19 @@
                 }
             ]
         },
+        "node_modules/quick-lru": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+            "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/raf": {
             "version": "3.4.1",
             "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
@@ -13482,19 +13397,131 @@
                 "node": ">=0.10.0"
             }
         },
-        "node_modules/readable-stream": {
-            "version": "2.3.8",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
-            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+        "node_modules/read-pkg": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
+            "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "core-util-is": "~1.0.0",
-                "inherits": "~2.0.3",
-                "isarray": "~1.0.0",
-                "process-nextick-args": "~2.0.0",
-                "safe-buffer": "~5.1.1",
-                "string_decoder": "~1.1.1",
-                "util-deprecate": "~1.0.1"
+                "@types/normalize-package-data": "^2.4.0",
+                "normalize-package-data": "^3.0.2",
+                "parse-json": "^5.2.0",
+                "type-fest": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/read-pkg-up": {
+            "version": "8.0.0",
+            "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
+            "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "find-up": "^5.0.0",
+                "read-pkg": "^6.0.0",
+                "type-fest": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/read-pkg-up/node_modules/find-up": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+            "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "locate-path": "^6.0.0",
+                "path-exists": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/read-pkg-up/node_modules/locate-path": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+            "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "p-locate": "^5.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/read-pkg-up/node_modules/p-locate": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+            "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "p-limit": "^3.0.2"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/read-pkg-up/node_modules/type-fest": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+            "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+            "dev": true,
+            "license": "(MIT OR CC0-1.0)",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/read-pkg/node_modules/type-fest": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+            "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+            "dev": true,
+            "license": "(MIT OR CC0-1.0)",
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/readable-stream": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+            "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+            "dev": true,
+            "dependencies": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
             }
         },
         "node_modules/readdirp": {
@@ -13521,6 +13548,36 @@
                 "node": ">= 0.10"
             }
         },
+        "node_modules/redent": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz",
+            "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "indent-string": "^5.0.0",
+                "strip-indent": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/redent/node_modules/indent-string": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
+            "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/regenerate": {
             "version": "1.4.2",
             "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -14031,6 +14088,24 @@
                 "node": ">=8"
             }
         },
+        "node_modules/slice-ansi": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+            "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "ansi-styles": "^4.0.0",
+                "astral-regex": "^2.0.0",
+                "is-fullwidth-code-point": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+            }
+        },
         "node_modules/sortablejs": {
             "version": "1.14.0",
             "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
@@ -14071,6 +14146,42 @@
                 "source-map": "^0.6.0"
             }
         },
+        "node_modules/spdx-correct": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+            "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-expression-parse": "^3.0.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/spdx-exceptions": {
+            "version": "2.5.0",
+            "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+            "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+            "dev": true,
+            "license": "CC-BY-3.0"
+        },
+        "node_modules/spdx-expression-parse": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+            "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "spdx-exceptions": "^2.1.0",
+                "spdx-license-ids": "^3.0.0"
+            }
+        },
+        "node_modules/spdx-license-ids": {
+            "version": "3.0.20",
+            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz",
+            "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==",
+            "dev": true,
+            "license": "CC0-1.0"
+        },
         "node_modules/sprintf-js": {
             "version": "1.1.3",
             "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
@@ -14247,49 +14358,391 @@
                 "node": ">=6"
             }
         },
-        "node_modules/strip-json-comments": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-            "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+        "node_modules/strip-indent": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz",
+            "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "min-indent": "^1.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/strip-json-comments": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+            "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/style-loader": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz",
+            "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 18.12.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/webpack"
+            },
+            "peerDependencies": {
+                "webpack": "^5.27.0"
+            }
+        },
+        "node_modules/style-search": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
+            "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
+            "dev": true,
+            "license": "ISC"
+        },
+        "node_modules/stylehacks": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz",
+            "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==",
+            "dev": true,
+            "dependencies": {
+                "browserslist": "^4.21.4",
+                "postcss-selector-parser": "^6.0.4"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14.0"
+            },
+            "peerDependencies": {
+                "postcss": "^8.2.15"
+            }
+        },
+        "node_modules/stylelint": {
+            "version": "15.11.0",
+            "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz",
+            "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@csstools/css-parser-algorithms": "^2.3.1",
+                "@csstools/css-tokenizer": "^2.2.0",
+                "@csstools/media-query-list-parser": "^2.1.4",
+                "@csstools/selector-specificity": "^3.0.0",
+                "balanced-match": "^2.0.0",
+                "colord": "^2.9.3",
+                "cosmiconfig": "^8.2.0",
+                "css-functions-list": "^3.2.1",
+                "css-tree": "^2.3.1",
+                "debug": "^4.3.4",
+                "fast-glob": "^3.3.1",
+                "fastest-levenshtein": "^1.0.16",
+                "file-entry-cache": "^7.0.0",
+                "global-modules": "^2.0.0",
+                "globby": "^11.1.0",
+                "globjoin": "^0.1.4",
+                "html-tags": "^3.3.1",
+                "ignore": "^5.2.4",
+                "import-lazy": "^4.0.0",
+                "imurmurhash": "^0.1.4",
+                "is-plain-object": "^5.0.0",
+                "known-css-properties": "^0.29.0",
+                "mathml-tag-names": "^2.1.3",
+                "meow": "^10.1.5",
+                "micromatch": "^4.0.5",
+                "normalize-path": "^3.0.0",
+                "picocolors": "^1.0.0",
+                "postcss": "^8.4.28",
+                "postcss-resolve-nested-selector": "^0.1.1",
+                "postcss-safe-parser": "^6.0.0",
+                "postcss-selector-parser": "^6.0.13",
+                "postcss-value-parser": "^4.2.0",
+                "resolve-from": "^5.0.0",
+                "string-width": "^4.2.3",
+                "strip-ansi": "^6.0.1",
+                "style-search": "^0.1.0",
+                "supports-hyperlinks": "^3.0.0",
+                "svg-tags": "^1.0.0",
+                "table": "^6.8.1",
+                "write-file-atomic": "^5.0.1"
+            },
+            "bin": {
+                "stylelint": "bin/stylelint.mjs"
+            },
+            "engines": {
+                "node": "^14.13.1 || >=16.0.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/stylelint"
+            }
+        },
+        "node_modules/stylelint-config-recommended": {
+            "version": "13.0.0",
+            "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz",
+            "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^14.13.1 || >=16.0.0"
+            },
+            "peerDependencies": {
+                "stylelint": "^15.10.0"
+            }
+        },
+        "node_modules/stylelint-config-recommended-scss": {
+            "version": "13.1.0",
+            "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz",
+            "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "postcss-scss": "^4.0.9",
+                "stylelint-config-recommended": "^13.0.0",
+                "stylelint-scss": "^5.3.0"
+            },
+            "peerDependencies": {
+                "postcss": "^8.3.3",
+                "stylelint": "^15.10.0"
+            },
+            "peerDependenciesMeta": {
+                "postcss": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/stylelint-config-standard": {
+            "version": "34.0.0",
+            "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz",
+            "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "stylelint-config-recommended": "^13.0.0"
+            },
+            "engines": {
+                "node": "^14.13.1 || >=16.0.0"
+            },
+            "peerDependencies": {
+                "stylelint": "^15.10.0"
+            }
+        },
+        "node_modules/stylelint-config-standard-scss": {
+            "version": "11.1.0",
+            "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.1.0.tgz",
+            "integrity": "sha512-5gnBgeNTgRVdchMwiFQPuBOtj9QefYtfXiddrOMJA2pI22zxt6ddI2s+e5Oh7/6QYl7QLJujGnaUR5YyGq72ow==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "stylelint-config-recommended-scss": "^13.1.0",
+                "stylelint-config-standard": "^34.0.0"
+            },
+            "peerDependencies": {
+                "postcss": "^8.3.3",
+                "stylelint": "^15.10.0"
+            },
+            "peerDependenciesMeta": {
+                "postcss": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/stylelint-formatter-gitlab": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/stylelint-formatter-gitlab/-/stylelint-formatter-gitlab-1.0.2.tgz",
+            "integrity": "sha512-Iu5NjHSp/WdhUeICuUKNi6QvpEut5KPwnrx4XU5q1GZEcAvpyqbjBq7yMAEX6850BUza45ARpsfX4yfOcnFWLQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "fs-extra": "^8.1.0",
+                "is-glob": "^4.0.1",
+                "js-yaml": "^3.13.1"
+            },
+            "peerDependencies": {
+                "stylelint": ">=9"
+            }
+        },
+        "node_modules/stylelint-scss": {
+            "version": "5.3.2",
+            "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.2.tgz",
+            "integrity": "sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "known-css-properties": "^0.29.0",
+                "postcss-media-query-parser": "^0.2.3",
+                "postcss-resolve-nested-selector": "^0.1.1",
+                "postcss-selector-parser": "^6.0.13",
+                "postcss-value-parser": "^4.2.0"
+            },
+            "peerDependencies": {
+                "stylelint": "^14.5.1 || ^15.0.0"
+            }
+        },
+        "node_modules/stylelint/node_modules/@csstools/selector-specificity": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
+            "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools"
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools"
+                }
+            ],
+            "license": "MIT-0",
+            "engines": {
+                "node": "^14 || ^16 || >=18"
+            },
+            "peerDependencies": {
+                "postcss-selector-parser": "^6.0.13"
+            }
+        },
+        "node_modules/stylelint/node_modules/argparse": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+            "dev": true,
+            "license": "Python-2.0"
+        },
+        "node_modules/stylelint/node_modules/balanced-match": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+            "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/stylelint/node_modules/cosmiconfig": {
+            "version": "8.3.6",
+            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+            "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "import-fresh": "^3.3.0",
+                "js-yaml": "^4.1.0",
+                "parse-json": "^5.2.0",
+                "path-type": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/d-fischer"
+            },
+            "peerDependencies": {
+                "typescript": ">=4.9.5"
+            },
+            "peerDependenciesMeta": {
+                "typescript": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/stylelint/node_modules/css-tree": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+            "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "mdn-data": "2.0.30",
+                "source-map-js": "^1.0.1"
+            },
+            "engines": {
+                "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+            }
+        },
+        "node_modules/stylelint/node_modules/file-entry-cache": {
+            "version": "7.0.2",
+            "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz",
+            "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "flat-cache": "^3.2.0"
+            },
+            "engines": {
+                "node": ">=12.0.0"
+            }
+        },
+        "node_modules/stylelint/node_modules/is-plain-object": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+            "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/stylelint/node_modules/js-yaml": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "argparse": "^2.0.1"
+            },
+            "bin": {
+                "js-yaml": "bin/js-yaml.js"
+            }
+        },
+        "node_modules/stylelint/node_modules/mdn-data": {
+            "version": "2.0.30",
+            "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+            "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+            "dev": true,
+            "license": "CC0-1.0"
+        },
+        "node_modules/stylelint/node_modules/resolve-from": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+            "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/style-loader": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz",
-            "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==",
+        "node_modules/stylelint/node_modules/signal-exit": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+            "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
             "dev": true,
-            "license": "MIT",
+            "license": "ISC",
             "engines": {
-                "node": ">= 18.12.0"
+                "node": ">=14"
             },
             "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/webpack"
-            },
-            "peerDependencies": {
-                "webpack": "^5.27.0"
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/stylehacks": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz",
-            "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==",
+        "node_modules/stylelint/node_modules/write-file-atomic": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+            "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
-                "browserslist": "^4.21.4",
-                "postcss-selector-parser": "^6.0.4"
+                "imurmurhash": "^0.1.4",
+                "signal-exit": "^4.0.1"
             },
             "engines": {
-                "node": "^10 || ^12 || >=14.0"
-            },
-            "peerDependencies": {
-                "postcss": "^8.2.15"
+                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
         "node_modules/sugarss": {
@@ -14324,6 +14777,36 @@
                 "url": "https://github.com/chalk/supports-color?sponsor=1"
             }
         },
+        "node_modules/supports-hyperlinks": {
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz",
+            "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "has-flag": "^4.0.0",
+                "supports-color": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=14.18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/supports-hyperlinks/node_modules/supports-color": {
+            "version": "7.2.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "has-flag": "^4.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/supports-preserve-symlinks-flag": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@@ -14346,6 +14829,12 @@
                 "node": ">=12.0.0"
             }
         },
+        "node_modules/svg-tags": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+            "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
+            "dev": true
+        },
         "node_modules/svgo": {
             "version": "3.3.2",
             "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
@@ -14436,6 +14925,47 @@
             "dev": true,
             "license": "MIT"
         },
+        "node_modules/table": {
+            "version": "6.9.0",
+            "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
+            "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
+            "dev": true,
+            "license": "BSD-3-Clause",
+            "dependencies": {
+                "ajv": "^8.0.1",
+                "lodash.truncate": "^4.4.2",
+                "slice-ansi": "^4.0.0",
+                "string-width": "^4.2.3",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=10.0.0"
+            }
+        },
+        "node_modules/table/node_modules/ajv": {
+            "version": "8.17.1",
+            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+            "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "fast-deep-equal": "^3.1.3",
+                "fast-uri": "^3.0.1",
+                "json-schema-traverse": "^1.0.0",
+                "require-from-string": "^2.0.2"
+            },
+            "funding": {
+                "type": "github",
+                "url": "https://github.com/sponsors/epoberezkin"
+            }
+        },
+        "node_modules/table/node_modules/json-schema-traverse": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+            "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/tablesorter": {
             "version": "2.31.3",
             "resolved": "https://registry.npmjs.org/tablesorter/-/tablesorter-2.31.3.tgz",
@@ -14732,6 +15262,19 @@
                 "node": ">=12"
             }
         },
+        "node_modules/trim-newlines": {
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
+            "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/ts-api-utils": {
             "version": "1.3.0",
             "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
@@ -14766,21 +15309,6 @@
                 "webpack": "^5.0.0"
             }
         },
-        "node_modules/ts-loader/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/ts-loader/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -14797,18 +15325,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/ts-loader/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/ts-loader/node_modules/source-map": {
             "version": "0.7.4",
             "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
@@ -15060,6 +15576,17 @@
             "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
             "dev": true
         },
+        "node_modules/validate-npm-package-license": {
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+            "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "dependencies": {
+                "spdx-correct": "^3.0.0",
+                "spdx-expression-parse": "^3.0.0"
+            }
+        },
         "node_modules/vlq": {
             "version": "0.2.3",
             "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
@@ -15192,22 +15719,6 @@
                 }
             }
         },
-        "node_modules/vue-loader/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/vue-loader/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -15225,19 +15736,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/vue-loader/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/vue-loader/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -15322,22 +15820,6 @@
                 "vue": ">=3.0.0"
             }
         },
-        "node_modules/vue3-gettext/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/vue3-gettext/node_modules/argparse": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -15372,19 +15854,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/vue3-gettext/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/vue3-gettext/node_modules/cosmiconfig": {
             "version": "9.0.0",
             "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
@@ -15975,62 +16444,6 @@
                 "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
             }
         },
-        "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
-        "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
-        "node_modules/wrap-ansi/node_modules/ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
-        "node_modules/wrap-ansi/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
         "node_modules/wrappy": {
             "version": "1.0.2",
             "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/package.json b/package.json
index 89c6b41fbb9b0b90413a26d0ae6b2ec6fc88ad6b..81ed9d5ee1087fa1ca16f9481a17c01e0e788673 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,8 @@
         "webpack-dev": "webpack --config webpack.dev.js --mode development",
         "webpack-prod": "webpack --config webpack.prod.js --mode production",
         "webpack-watch": "webpack --config webpack.dev.js --mode development --watch",
-        "test": "jest tests/jest/"
+        "test": "jest tests/jest/",
+        "lint-css": "stylelint \"resources/assets/**/*.{css,scss,vue}\""
     },
     "author": "",
     "license": "GPL-2.0",
@@ -127,6 +128,9 @@
         "sprintf-js": "^1.0.3",
         "stream-browserify": "^3.0.0",
         "style-loader": "^4.0.0",
+        "stylelint": "^15.11.0",
+        "stylelint-config-standard-scss": "^11.1.0",
+        "stylelint-formatter-gitlab": "^1.0.2",
         "svgo": "3.3.2",
         "tablesorter": "2.31.3",
         "ts-loader": "^9.5.1",
diff --git a/resources/assets/stylesheets/fullcalendar.scss b/resources/assets/stylesheets/fullcalendar.scss
index 75d35b705e4de31cda12ae0461178e28b198c9e6..b9d5f40254af56b96cc6f9f914d6a4b6b857b498 100644
--- a/resources/assets/stylesheets/fullcalendar.scss
+++ b/resources/assets/stylesheets/fullcalendar.scss
@@ -1,6 +1,6 @@
 @import "scss/variables";
 @import "scss/buttons";
-@import "mixins.scss";
+@import "mixins";
 
 a.fc-event, td.fc-event {
     border-radius: 0;
@@ -20,7 +20,7 @@ a.fc-event, td.fc-event {
         height: 30px;
 
         .fc-button {
-            @include button();
+            @include button;
             margin-top: 0;
             margin-bottom: 0;
             padding: 0;
@@ -93,11 +93,11 @@ html.responsive-display .fc .fc-view:not(.fc-timeGridDay-view) .fc-day-header {
     .fullcalendar-dialogwidget-widget {
         background: var(--white);
         border: 1px solid var(--content-color-40);
-        margin: 15px 0px 0;
+        margin: 15px 0 0;
     }
 
     .fullcalendar-dialogwidget-widget-header {
-        @include clearfix();
+        @include clearfix;
         background: var(--content-color-20);
         color: var(--base-color);
         font-weight: bold;
@@ -123,7 +123,7 @@ html.responsive-display .fc .fc-view:not(.fc-timeGridDay-view) .fc-day-header {
 #external-events{
     td.fc-event {
         border-radius: 0;
-        margin: 2px 0px;
+        margin: 2px 0;
         background-color: var(--content-color);
         border: 1px solid var(--brand-color-light);
     }
@@ -154,8 +154,7 @@ html.responsive-display .fc .fc-view:not(.fc-timeGridDay-view) .fc-day-header {
     column-gap: 16px;
     width: 200px;
     height: 204px;
-    margin: 10px 0px;
-    margin-left: calc(50% - 100px);
+    margin: 10px 0 10px calc(50% - 100px);
 
     input {
         opacity: 0;
@@ -168,7 +167,7 @@ html.responsive-display .fc .fc-view:not(.fc-timeGridDay-view) .fc-day-header {
                 background-repeat: no-repeat;
                 content: ' ';
                 display: inline-block;
-                margin: 0px 1px 1px 1px;
+                margin: 0 1px 1px 1px;
                 vertical-align: text-top;
                 background-image: none;
                 background-size: 100%;
@@ -193,8 +192,8 @@ html.responsive-display .fc .fc-view:not(.fc-timeGridDay-view) .fc-day-header {
     height: 20px;
 
     position: absolute;
-    top: 0px;
-    right: 0px;
+    top: 0;
+    right: 0;
 
     &.white {
         @include background-icon(group4, info_alt, 100%);
@@ -206,8 +205,8 @@ html.responsive-display .fc .fc-view:not(.fc-timeGridDay-view) .fc-day-header {
 
 .fc[data-fullcalendar="1"].print-view {
     position: absolute;
-    top: 0px;
-    left: 0px;
+    top: 0;
+    left: 0;
     height: 2000px;
     width: 2000px;
 
diff --git a/resources/assets/stylesheets/highcontrast.scss b/resources/assets/stylesheets/highcontrast.scss
index fe4c654f49cf093519c628ce6f423fe7ed861588..64774991edd494bf139760a449fbfa4dffdebc7c 100644
--- a/resources/assets/stylesheets/highcontrast.scss
+++ b/resources/assets/stylesheets/highcontrast.scss
@@ -1,4 +1,4 @@
-@import "mixins.scss";
+@import "mixins";
 $darkgray: #30343b;
 $lightgray: #e7ebf1;
 
diff --git a/resources/assets/stylesheets/mixins/arrow.scss b/resources/assets/stylesheets/mixins/arrow.scss
index 1de36a449ed2ee705c54f5479bbb90a160206bc4..e25a1a9349a8d43cd7d96645bbc1817047ce2c24 100644
--- a/resources/assets/stylesheets/mixins/arrow.scss
+++ b/resources/assets/stylesheets/mixins/arrow.scss
@@ -108,7 +108,6 @@
     margin-top: -$width;
 }
 
-//
 @mixin arrow-left($width, $color, $margin: $width) {
     @extend %base;
     margin-left: $margin;
diff --git a/resources/assets/stylesheets/mixins/colors.scss b/resources/assets/stylesheets/mixins/colors.scss
index 7471e33c8b6907cbec9bfa1fbccf170e1a00454f..e4d8766e7629b5b806543801e337702b207e87ad 100644
--- a/resources/assets/stylesheets/mixins/colors.scss
+++ b/resources/assets/stylesheets/mixins/colors.scss
@@ -1,26 +1,36 @@
-//if you like, change this (your brand color)
+@use "sass:color";
+
+// if you like, change this (your brand color)
 $base-color: #28497c; // #28497c
 
 
-//PLEASE, no changes from here
-//$base-gray: #3c454e; // #3c454e
-//calculated base gray
-$base-gray: hsl(hue($base-color),
-                saturation(#3c454e),
-                lightness(#3c454e));
+// PLEASE, no changes from here
+// $base-gray: #3c454e; // #3c454e
+// calculated base gray
+$base-gray: hsl(
+    color.hue($base-color),
+    color.saturation(#3c454e),
+    color.lightness(#3c454e)
+);
 
 $brand-color-dark: $base-color;
-$brand-color-darker: hsl(hue($base-color),
-                         (saturation($base-color) + 5.4%),
-                         (lightness($base-color) - 4%)); // #1f3f70;
-
-$brand-color-light: hsl(hue($base-color),
-                        (saturation($base-color) - 6%),
-                        (lightness($base-color) + 6.5%)); // #36598f;
-
-$brand-color-lighter: hsl((hue($base-color) + 2.5),
-                          (saturation($base-color) - 25.5%),
-                          (lightness($base-color) + 31%)); // #899ab9;
+$brand-color-darker: hsl(
+    color.hue($base-color),
+    (color.saturation($base-color) + 5.4%),
+    (color.lightness($base-color) - 4%)
+); // #1f3f70;
+
+$brand-color-light: hsl(
+    color.hue($base-color),
+    (color.saturation($base-color) - 6%),
+    (color.lightness($base-color) + 6.5%)
+); // #36598f;
+
+$brand-color-lighter: hsl(
+    (color.hue($base-color) + 2.5),
+    (color.saturation($base-color) - 25.5%),
+    (color.lightness($base-color) + 31%)
+); // #899ab9;
 /* This code calculates another activity color in case you dont wanna stick with red
 
 $active-color: hsv((hsvhue($red) - hsvhue($base-color) + hsvhue($origin-base-color)),
@@ -34,29 +44,29 @@ $white: #fff;
 // Default studip base color
 $origin-base-color: #28497c; // #28497c
 
-$base-color-80: mix($base-color, #fff, 80%); // #536d96
-$base-color-60: mix($base-color, #fff, 60%); // #7e92b0
-$base-color-40: mix($base-color, #fff, 40%); // #a9b6cb
-$base-color-20: mix($base-color, #fff, 20%); // #d4dbe5
+$base-color-80: color.mix($base-color, #fff, 80%); // #536d96
+$base-color-60: color.mix($base-color, #fff, 60%); // #7e92b0
+$base-color-40: color.mix($base-color, #fff, 40%); // #a9b6cb
+$base-color-20: color.mix($base-color, #fff, 20%); // #d4dbe5
 
 $content-color: $brand-color-lighter;
-$content-color-80: mix($content-color, #fff, 80%); // #a1aec7
-$content-color-60: mix($content-color, #fff, 60%); // #b8c2d5
-$content-color-40: mix($content-color, #fff, 40%); // #d0d7e3
-$content-color-20: mix($content-color, #fff, 20%); // #e7ebf1
-$content-color-10: mix($content-color, #fff, 10%); // #e7ebf1
+$content-color-80: color.mix($content-color, #fff, 80%); // #a1aec7
+$content-color-60: color.mix($content-color, #fff, 60%); // #b8c2d5
+$content-color-40: color.mix($content-color, #fff, 40%); // #d0d7e3
+$content-color-20: color.mix($content-color, #fff, 20%); // #e7ebf1
+$content-color-10: color.mix($content-color, #fff, 10%); // #e7ebf1
 
 $dark-gray-color: $base-gray;
-$dark-gray-color-80: mix($dark-gray-color, #fff, 80%); // #636a71
-$dark-gray-color-75: mix($dark-gray-color, #fff, 75%); // #6c737a
-$dark-gray-color-60: mix($dark-gray-color, #fff, 60%); // #898f94
-$dark-gray-color-45: mix($dark-gray-color, #fff, 45%); // #a7abaf
-$dark-gray-color-40: mix($dark-gray-color, #fff, 40%); // #b1b5b8
-$dark-gray-color-30: mix($dark-gray-color, #fff, 30%); // #c4c7c9
-$dark-gray-color-20: mix($dark-gray-color, #fff, 20%); // #d8dadc
-$dark-gray-color-15: mix($dark-gray-color, #fff, 15%); // #e1e3e4
-$dark-gray-color-10: mix($dark-gray-color, #fff, 10%); // #ebeced
-$dark-gray-color-5: mix($dark-gray-color, #fff, 5%); // #f5f5f6
+$dark-gray-color-80: color.mix($dark-gray-color, #fff, 80%); // #636a71
+$dark-gray-color-75: color.mix($dark-gray-color, #fff, 75%); // #6c737a
+$dark-gray-color-60: color.mix($dark-gray-color, #fff, 60%); // #898f94
+$dark-gray-color-45: color.mix($dark-gray-color, #fff, 45%); // #a7abaf
+$dark-gray-color-40: color.mix($dark-gray-color, #fff, 40%); // #b1b5b8
+$dark-gray-color-30: color.mix($dark-gray-color, #fff, 30%); // #c4c7c9
+$dark-gray-color-20: color.mix($dark-gray-color, #fff, 20%); // #d8dadc
+$dark-gray-color-15: color.mix($dark-gray-color, #fff, 15%); // #e1e3e4
+$dark-gray-color-10: color.mix($dark-gray-color, #fff, 10%); // #ebeced
+$dark-gray-color-5: color.mix($dark-gray-color, #fff, 5%); // #f5f5f6
 
 $light-gray-color: $dark-gray-color-75;
 $light-gray-color-80: $dark-gray-color-60;
@@ -64,61 +74,61 @@ $light-gray-color-60: $dark-gray-color-45;
 $light-gray-color-40: $dark-gray-color-30;
 $light-gray-color-20: $dark-gray-color-15;
 
-//colors. a lot of.
+// colors. a lot of.
 
 $yellow: #ffbd33;
-$yellow-80: mix($yellow, #fff, 80%); // #ffca5c
-$yellow-60: mix($yellow, #fff, 60%); // #ffd785
-$yellow-40: mix($yellow, #fff, 40%); // #ffe4ad
-$yellow-20: mix($yellow, #fff, 20%); // #fff2d6
+$yellow-80: color.mix($yellow, #fff, 80%); // #ffca5c
+$yellow-60: color.mix($yellow, #fff, 60%); // #ffd785
+$yellow-40: color.mix($yellow, #fff, 40%); // #ffe4ad
+$yellow-20: color.mix($yellow, #fff, 20%); // #fff2d6
 
 $orange: #f26e00;
-$orange-80: mix($orange, #fff, 80%); // #f58b33
-$orange-60: mix($orange, #fff, 60%); // #f7a866
-$orange-40: mix($orange, #fff, 40%); // #fac599
-$orange-20: mix($orange, #fff, 20%); // #fce2cc
+$orange-80: color.mix($orange, #fff, 80%); // #f58b33
+$orange-60: color.mix($orange, #fff, 60%); // #f7a866
+$orange-40: color.mix($orange, #fff, 40%); // #fac599
+$orange-20: color.mix($orange, #fff, 20%); // #fce2cc
 
 $red: #d60000;
-$red-80: mix($red, #fff, 80%); // #de3333
-$red-60: mix($red, #fff, 60%); // #e76666
-$red-40: mix($red, #fff, 40%); // #ef9999
-$red-20: mix($red, #fff, 20%); // #f7cccc
+$red-80: color.mix($red, #fff, 80%); // #de3333
+$red-60: color.mix($red, #fff, 60%); // #e76666
+$red-40: color.mix($red, #fff, 40%); // #ef9999
+$red-20: color.mix($red, #fff, 20%); // #f7cccc
 
 $violet: #b02e7c;
-$violet-80: mix($violet, #fff, 80%); // #c05896
-$violet-60: mix($violet, #fff, 60%); // #d082b0
-$violet-40: mix($violet, #fff, 40%); // #dfabcb
-$violet-20: mix($violet, #fff, 20%); // #efd5e5
+$violet-80: color.mix($violet, #fff, 80%); // #c05896
+$violet-60: color.mix($violet, #fff, 60%); // #d082b0
+$violet-40: color.mix($violet, #fff, 40%); // #dfabcb
+$violet-20: color.mix($violet, #fff, 20%); // #efd5e5
 
 $dark-violet: #682c8b;
-$dark-violet-80: mix($dark-violet, #fff, 80%); // #8656a2
-$dark-violet-60: mix($dark-violet, #fff, 60%); // #a480b9
-$dark-violet-40: mix($dark-violet, #fff, 40%); // #c2aad0
-$dark-violet-20: mix($dark-violet, #fff, 20%); // #e0d4e7
+$dark-violet-80: color.mix($dark-violet, #fff, 80%); // #8656a2
+$dark-violet-60: color.mix($dark-violet, #fff, 60%); // #a480b9
+$dark-violet-40: color.mix($dark-violet, #fff, 40%); // #c2aad0
+$dark-violet-20: color.mix($dark-violet, #fff, 20%); // #e0d4e7
 
 $green: #6ead10;
-$green-80: mix($green, #fff, 80%); // #8bbd40
-$green-60: mix($green, #fff, 60%); // #a8ce70
-$green-40: mix($green, #fff, 40%); // #c5dea0
-$green-20: mix($green, #fff, 20%); // #e2efcf
+$green-80: color.mix($green, #fff, 80%); // #8bbd40
+$green-60: color.mix($green, #fff, 60%); // #a8ce70
+$green-40: color.mix($green, #fff, 40%); // #c5dea0
+$green-20: color.mix($green, #fff, 20%); // #e2efcf
 
 $dark-green: #008512;
-$dark-green-80: mix($dark-green, #fff, 80%); // #339d41
-$dark-green-60: mix($dark-green, #fff, 60%); // #66b570
-$dark-green-40: mix($dark-green, #fff, 40%); // #99cea0
-$dark-green-20: mix($dark-green, #fff, 20%); // #cce6cf
+$dark-green-80: color.mix($dark-green, #fff, 80%); // #339d41
+$dark-green-60: color.mix($dark-green, #fff, 60%); // #66b570
+$dark-green-40: color.mix($dark-green, #fff, 40%); // #99cea0
+$dark-green-20: color.mix($dark-green, #fff, 20%); // #cce6cf
 
 $petrol: #0E817B; // old #129c94;
-$petrol-80: mix($petrol, #fff, 80%); // #41afaa
-$petrol-60: mix($petrol, #fff, 60%); // #70c3bf
-$petrol-40: mix($petrol, #fff, 40%); // #a0d7d4
-$petrol-20: mix($petrol, #fff, 20%); // #cfebe9
+$petrol-80: color.mix($petrol, #fff, 80%); // #41afaa
+$petrol-60: color.mix($petrol, #fff, 60%); // #70c3bf
+$petrol-40: color.mix($petrol, #fff, 40%); // #a0d7d4
+$petrol-20: color.mix($petrol, #fff, 20%); // #cfebe9
 
 $brown: #a85d45;
-$brown-80: mix($brown, #fff, 80%); // #b97d6a
-$brown-60: mix($brown, #fff, 60%); // #ca9eaf
-$brown-40: mix($brown, #fff, 40%); // #dcbeb4
-$brown-20: mix($brown, #fff, 20%); // #edded9
+$brown-80: color.mix($brown, #fff, 80%); // #b97d6a
+$brown-60: color.mix($brown, #fff, 60%); // #ca9eaf
+$brown-40: color.mix($brown, #fff, 40%); // #dcbeb4
+$brown-20: color.mix($brown, #fff, 20%); // #edded9
 
 // contrast colors
 $contrast-content-white: text-contrast($content-color, #ffffff, #000000);
@@ -133,10 +143,10 @@ $table-footer-color: $dark-gray-color-15;
 $active-color: $red;
 
 $activity-color: $yellow;
-$activity-color-80: mix($activity-color, #fff, 80%); // #ffca5c
-$activity-color-60: mix($activity-color, #fff, 60%); // #ffd785
-$activity-color-40: mix($activity-color, #fff, 40%); // #ffe4ad
-$activity-color-20: mix($activity-color, #fff, 20%); // #fff2d6
+$activity-color-80: color.mix($activity-color, #fff, 80%); // #ffca5c
+$activity-color-60: color.mix($activity-color, #fff, 60%); // #ffd785
+$activity-color-40: color.mix($activity-color, #fff, 40%); // #ffe4ad
+$activity-color-20: color.mix($activity-color, #fff, 20%); // #fff2d6
 
 // Group colors (for my courses grouping)
 $group-color-0: $dark-violet;
@@ -150,64 +160,64 @@ $group-color-7: $petrol;
 $group-color-8: $brown;
 
 // Calender color mapping
-$calendar-day-event:        $brand-color-dark;
-$calendar-day-event-aux:    $base-color-60;
+$calendar-day-event: $brand-color-dark;
+$calendar-day-event-aux: $base-color-60;
 
-$calendar-category-1:       $dark-violet;
-$calendar-category-1-aux:   $dark-violet-60;
+$calendar-category-1: $dark-violet;
+$calendar-category-1-aux: $dark-violet-60;
 
-$calendar-category-2:       $violet;
-$calendar-category-2-aux:   $violet-60;
+$calendar-category-2: $violet;
+$calendar-category-2-aux: $violet-60;
 
-$calendar-category-3:       $red;
-$calendar-category-3-aux:   $red-60;
+$calendar-category-3: $red;
+$calendar-category-3-aux: $red-60;
 
-$calendar-category-4:       $orange;
-$calendar-category-4-aux:   $orange-60;
+$calendar-category-4: $orange;
+$calendar-category-4-aux: $orange-60;
 
-$calendar-category-5:       $yellow;
-$calendar-category-5-aux:   $yellow-60;
+$calendar-category-5: $yellow;
+$calendar-category-5-aux: $yellow-60;
 
-$calendar-category-6:       $green;
-$calendar-category-6-aux:   $green-60;
+$calendar-category-6: $green;
+$calendar-category-6-aux: $green-60;
 
-$calendar-category-7:       $dark-green;
-$calendar-category-7-aux:   $dark-green-60;
+$calendar-category-7: $dark-green;
+$calendar-category-7-aux: $dark-green-60;
 
-$calendar-category-8:       $petrol;
-$calendar-category-8-aux:   $petrol-60;
+$calendar-category-8: $petrol;
+$calendar-category-8-aux: $petrol-60;
 
-$calendar-category-9:       $brown;
-$calendar-category-9-aux:   $brown-60;
+$calendar-category-9: $brown;
+$calendar-category-9-aux: $brown-60;
 
-$calendar-category-10:      $dark-violet-60;
-$calendar-category-10-aux:  $dark-violet-20;
+$calendar-category-10: $dark-violet-60;
+$calendar-category-10-aux: $dark-violet-20;
 
-$calendar-category-11:      $violet-60;
-$calendar-category-11-aux:  $violet-20;
+$calendar-category-11: $violet-60;
+$calendar-category-11-aux: $violet-20;
 
-$calendar-category-12:      $red-60;
-$calendar-category-12-aux:  $red-20;
+$calendar-category-12: $red-60;
+$calendar-category-12-aux: $red-20;
 
-$calendar-category-13:      $orange-60;
-$calendar-category-13-aux:  $orange-20;
+$calendar-category-13: $orange-60;
+$calendar-category-13-aux: $orange-20;
 
-$calendar-category-14:      $yellow-60;
-$calendar-category-14-aux:  $yellow-20;
+$calendar-category-14: $yellow-60;
+$calendar-category-14-aux: $yellow-20;
 
-$calendar-category-15:      $green-60;
-$calendar-category-15-aux:  $green-20;
+$calendar-category-15: $green-60;
+$calendar-category-15-aux: $green-20;
 
-$calendar-category-16:      $dark-green-60;
-$calendar-category-16-aux:  $dark-green-20;
+$calendar-category-16: $dark-green-60;
+$calendar-category-16-aux: $dark-green-20;
 
-$calendar-category-17:      $petrol-60;
-$calendar-category-17-aux:  $petrol-20;
+$calendar-category-17: $petrol-60;
+$calendar-category-17-aux: $petrol-20;
 
-$calendar-category-18:      $brown-60;
-$calendar-category-18-aux:  $brown-20;
+$calendar-category-18: $brown-60;
+$calendar-category-18-aux: $brown-20;
 
-$calendar-category-255:     $light-gray-color-60;
+$calendar-category-255: $light-gray-color-60;
 $calendar-category-255-aux: $light-gray-color-20;
 
 
@@ -306,12 +316,12 @@ $color--shadow: $color--gray-4;
 $color--focus: $color--gray-4;
 
 $color--warning: $color--red-1;
-$color--warning-alternative: mix($color--warning, $color--white, 20%);
+$color--warning-alternative: color.mix($color--warning, $color--white, 20%);
 $color--attention: $color--yellow-1;
-$color--attention-alternative: mix($color--attention, $color--white, 20%);
+$color--attention-alternative: color.mix($color--attention, $color--white, 20%);
 $color--good: $color--green-1;
-$color--good-alternative: mix($color--good, $color--white, 20%);
+$color--good-alternative: color.mix($color--good, $color--white, 20%);
 $color--info: $color--blue-2;
-$color--info-alternative: mix($color--info, $color--white, 20%);
+$color--info-alternative: color.mix($color--info, $color--white, 20%);
 
 $color-image-placeholder-background: $color--gray-6;
diff --git a/resources/assets/stylesheets/mixins/misc.scss b/resources/assets/stylesheets/mixins/misc.scss
index 1fe9d0883aacedaaf208c7579086ce5174e290ab..58e68d8d995fa39e2713c456de950984c0784637 100644
--- a/resources/assets/stylesheets/mixins/misc.scss
+++ b/resources/assets/stylesheets/mixins/misc.scss
@@ -1,3 +1,5 @@
+@use "sass:color";
+
 // Clearfix
 // --------
 // For clearing floats like a boss h5bp.com/q
@@ -27,12 +29,12 @@
 
 // https://codepen.io/kennyglenn/pen/kxqWjP
 @function text-contrast($color, $dark, $light, $threshold: 51) {
-    @return if(lightness($color) < $threshold, $light, $dark)
+    @return if(color.lightness($color) < $threshold, $light, $dark)
 }
 
 
 @mixin vertical-three-colors($startColor: #00b3ee, $midColor: #7a43b6, $colorStop: 50%, $endColor: #c3325f) {
-    background-color: mix($midColor, $endColor, 80%);
+    background-color: color.mix($midColor, $endColor, 80%);
     background-image: linear-gradient($startColor, $midColor $colorStop, $endColor);
     background-repeat: no-repeat;
 }
diff --git a/resources/assets/stylesheets/mixins/studip.scss b/resources/assets/stylesheets/mixins/studip.scss
index 320c6f7fd63650611caf9ea518dd31c32c01f14a..2196a86ce7e638408a6f5ebe9d7d999d11e9150d 100644
--- a/resources/assets/stylesheets/mixins/studip.scss
+++ b/resources/assets/stylesheets/mixins/studip.scss
@@ -1,3 +1,7 @@
+@use "sass:color";
+@use "sass:math";
+@use "sass:string";
+
 /**
  * studip-mixins.less
  *
@@ -45,8 +49,8 @@
 }
 
 @function icon-path($icon, $role: clickable) {
-    $icon: unquote($icon);
-    $role: unquote($role);
+    $icon: string.unquote($icon);
+    $role: string.unquote($role);
 
     $color: 'blue';
     @if $role == info {
@@ -67,7 +71,7 @@
 }
 
 @function icon-size($size) {
-    @if unitless($size) {
+    @if math.is-unitless($size) {
         @warn "Assuming icon size to be in pixels";
         $size: $size * 1px;
     }
@@ -105,7 +109,7 @@
 }
 
 @mixin icon($position, $icon, $role: clickable, $size: $icon-size-default, $padding: 0, $inline: false) {
-    $position: unquote($position);
+    $position: $position;
 
     @if $inline {
         $size: $icon-size-inline;
@@ -138,7 +142,7 @@
     vertical-align: bottom;
 
     @include background-icon($default-icon-name, $size: $icon-size-default);
-    @include hide-text();
+    @include hide-text;
     @include square($icon-size-default);
 
     &.toggled {
@@ -179,8 +183,8 @@
     background-size: 140px;
     background-position: calc(50% - 100px) calc(50% + 40px);
 
-    @if ($background-color) {
-        background-color: mix($background-color, rgba(255, 255, 255, 0), 70%);
+    @if $background-color {
+        background-color: color.mix($background-color, rgba(255, 255, 255, 0), 70%);
     }
 
     text-align: center;
@@ -233,7 +237,7 @@
 // Define action icons for widgets
 @mixin widget-action($action, $icon: $action, $role: clickable) {
     .widget-action[data-action="#{$action}"] {
-        @include hide-text();
+        @include hide-text;
 
         width: var(--icon-size-default);
         height: var(--icon-size-default);
@@ -248,29 +252,3 @@
         @content;
     }
 }
-
-@mixin scrollbox-horizontal() {
-    overflow: auto;
-
-    background:
-        /* Shadow covers */
-        linear-gradient(90deg, white 30%, rgba(255,255,255,0)),
-        linear-gradient(90deg, rgba(255,255,255,0), white 70%) 100% 0,
-
-            /* Shadows */
-        radial-gradient(farthest-side at 0 50%, rgba(0,0,0,.2), rgba(0,0,0,0)),
-        radial-gradient(farthest-side at 100% 50%, rgba(0,0,0,.2), rgba(0,0,0,0)) 100% 0;
-    background:
-        /* Shadow covers */
-        linear-gradient(90deg, white 30%, rgba(255,255,255,0)),
-        linear-gradient(90deg, rgba(255,255,255,0), white 70%) 100% 0,
-
-            /* Shadows */
-        radial-gradient(farthest-side at 0 50%, rgba(0,0,0,.2), rgba(0,0,0,0)),
-        radial-gradient(farthest-side at 100% 50%, rgba(0,0,0,.2), rgba(0,0,0,0)) 100% 0;
-    background-repeat: no-repeat;
-    background-size: 40px 100%, 40px 100%, 14px 100%, 14px 100%;
-
-    /* Opera doesn't support this in the shorthand */
-    background-attachment: local, local, scroll, scroll;
-}
diff --git a/resources/assets/stylesheets/scss/actionmenu.scss b/resources/assets/stylesheets/scss/actionmenu.scss
index 559034a6c0cb0248233dc399461b37245b74da9e..24239e95d955ff53c9ada53823f5ffd57ff78af7 100644
--- a/resources/assets/stylesheets/scss/actionmenu.scss
+++ b/resources/assets/stylesheets/scss/actionmenu.scss
@@ -235,7 +235,7 @@ $action-menu-shadow: 2px 2px 0 var(--color--action-menu-shadow);
                 opacity: 0;
                 transform: rotateX(180deg);
             }
-            to {
+            100% {
                 opacity: 1;
                 transform: rotateX(0);
             }
@@ -257,7 +257,7 @@ $action-menu-shadow: 2px 2px 0 var(--color--action-menu-shadow);
                 opacity: 1;
                 transform: rotateX(0);
             }
-            to {
+            100% {
                 opacity: 0;
                 transform: rotateX(180deg);
             }
diff --git a/resources/assets/stylesheets/scss/admin.scss b/resources/assets/stylesheets/scss/admin.scss
index 7136737f7ebd606b0292d2ab692fe2d2f31b8ece..e3c625beb87eb461b3560208d3be2133b5c37f85 100644
--- a/resources/assets/stylesheets/scss/admin.scss
+++ b/resources/assets/stylesheets/scss/admin.scss
@@ -134,7 +134,7 @@ fieldset.attribute_table {
 
 .course-admin {
     .course-completion {
-        @include hide-text();
+        @include hide-text;
         @include square($icon-size-default);
         background-repeat: no-repeat;
         display: block;
diff --git a/resources/assets/stylesheets/scss/ajax.scss b/resources/assets/stylesheets/scss/ajax.scss
index e79e44fc45d6daa25cd07fd0aa102250f162cd36..947ebd59c5ef23eba8d508f18c925b8a4827694d 100644
--- a/resources/assets/stylesheets/scss/ajax.scss
+++ b/resources/assets/stylesheets/scss/ajax.scss
@@ -36,7 +36,7 @@
     background: url("#{$image-path}/loading-indicator.svg") center no-repeat;
     display: inline-block;
     @include size(var(--icon-size-inline), var(--icon-size-inline));
-    @include hide-text();
+    @include hide-text;
 
     img,
     image,
diff --git a/resources/assets/stylesheets/scss/avatar.scss b/resources/assets/stylesheets/scss/avatar.scss
index 717c6b864ff060b0a82938ebca5469c0dc3bcd58..beaa219d88055ba1bdc0fe06a7e8c2ff48a93753 100644
--- a/resources/assets/stylesheets/scss/avatar.scss
+++ b/resources/assets/stylesheets/scss/avatar.scss
@@ -120,14 +120,14 @@ form.settings-avatar {
         color: initial;
     }
 
-    @include media-breakpoint-small-up() {
+    @include media-breakpoint-small-up {
         .form-group {
             display: flex;
             align-items: normal;
         }
     }
 
-    @include media-breakpoint-small-down() {
+    @include media-breakpoint-small-down {
         .file-upload {
             position: initial;
             left: 0;
diff --git a/resources/assets/stylesheets/scss/blubber.scss b/resources/assets/stylesheets/scss/blubber.scss
index 4e7bf34f880fc4c9d1621fd77e81028cafc0cf10..80101bb7e1ef090d3af808b62733415bd144605e 100644
--- a/resources/assets/stylesheets/scss/blubber.scss
+++ b/resources/assets/stylesheets/scss/blubber.scss
@@ -1,3 +1,5 @@
+@use "sass:color";
+
 .blubber_panel {
     display: flex;
     align-items: stretch;
@@ -164,7 +166,7 @@
 
     .empty_blubber_background {
         @include empty-placeholder-image('blubber');
-        background-color: mix($dark-gray-color-5, rgba(255, 255, 255, 0), 70%);
+        background-color: color.mix($dark-gray-color-5, rgba(255, 255, 255, 0), 70%);
 
         > :first-child {
             position: relative;
@@ -506,7 +508,7 @@ ol.tagcloud {
     }
 }
 
-//Animationen des Widgets:
+// Animationen des Widgets:
 .blubberthreadwidget-list-move,
 .blubberthreadwidget-list-enter-active,
 .blubberthreadwidget-list-leave-active {
diff --git a/resources/assets/stylesheets/scss/breakpoints.scss b/resources/assets/stylesheets/scss/breakpoints.scss
index 07bf9be550473ecca0b08274263eb9abbde99f5f..bbc40ec853b0ba49518605e352085105fdec4dd3 100644
--- a/resources/assets/stylesheets/scss/breakpoints.scss
+++ b/resources/assets/stylesheets/scss/breakpoints.scss
@@ -1,4 +1,4 @@
-//** Major Breakpoints
+// Major Breakpoints
 $major-breakpoint-tiny: 0;
 $major-breakpoint-small: 576px;
 $major-breakpoint-medium: 768px;
@@ -6,5 +6,5 @@ $major-breakpoint-large: 1024px;
 $major-breakpoint-xlarge: 1280px;
 $major-breakpoint-xxlarge: 1600px;
 
-//** Breakpoint for sidebar display
+// Breakpoint for sidebar display
 $minor-breakpoint-sidebar-fullscreen: 450px;
diff --git a/resources/assets/stylesheets/scss/buttons.scss b/resources/assets/stylesheets/scss/buttons.scss
index f1ef48307cb51fd529be580700a01fb950efad30..db400c2bc548eb3a5492066953c9e72de5afc71f 100644
--- a/resources/assets/stylesheets/scss/buttons.scss
+++ b/resources/assets/stylesheets/scss/buttons.scss
@@ -43,7 +43,7 @@
 
 a.button,
 button.button {
-    @include button();
+    @include button;
 }
 
 .button-with-empty-icon {
diff --git a/resources/assets/stylesheets/scss/calendar.scss b/resources/assets/stylesheets/scss/calendar.scss
index e5bc90b2cd6c85e767ed2416d12c65503fc28a62..8f89cef237c5c924eac24852691d20aff4a3ff13 100644
--- a/resources/assets/stylesheets/scss/calendar.scss
+++ b/resources/assets/stylesheets/scss/calendar.scss
@@ -1,3 +1,5 @@
+@use "sass:color";
+
 .fc-body {
     .fc-event {
 
@@ -11,10 +13,10 @@
 
         &.course-color-0 {
             border-color: $group-color-0;
-            background-color: lighten($group-color-0, 45%);
+            background-color: color.adjust($group-color-0, $lightness: 45%);
 
             &:hover {
-                background-color: lighten($group-color-0, 50%);
+                background-color: color.adjust($group-color-0, $lightness: 50%);
             }
 
             .fc-time {
@@ -24,10 +26,10 @@
 
         &.course-color-1 {
             border-color: $group-color-1;
-            background-color: lighten($group-color-1, 45%);
+            background-color: color.adjust($group-color-1, $lightness: 45%);
 
             &:hover {
-                background-color: lighten($group-color-1, 50%);
+                background-color: color.adjust($group-color-1, $lightness: 50%);
             }
 
             .fc-time {
@@ -37,10 +39,10 @@
 
         &.course-color-2 {
             border-color: $group-color-2;
-            background-color: lighten($group-color-2, 45%);
+            background-color: color.adjust($group-color-2, $lightness: 45%);;
 
             &:hover {
-                background-color: lighten($group-color-2, 50%);
+                background-color: color.adjust($group-color-2, $lightness: 50%);;
             }
 
             .fc-time {
@@ -50,10 +52,10 @@
 
         &.course-color-3 {
             border-color: $group-color-3;
-            background-color: lighten($group-color-3, 45%);
+            background-color: color.adjust($group-color-3, $lightness: 45%);;
 
             &:hover {
-                background-color: lighten($group-color-3, 50%);
+                background-color: color.adjust($group-color-3, $lightness: 50%);;
             }
 
             .fc-time {
@@ -63,10 +65,10 @@
 
         &.course-color-4 {
             border-color: $group-color-4;
-            background-color: lighten($group-color-4, 45%);
+            background-color: color.adjust($group-color-4, $lightness: 45%);;
 
             &:hover {
-                background-color: lighten($group-color-4, 50%);
+                background-color: color.adjust($group-color-4, $lightness: 50%);;
             }
 
             .fc-time {
@@ -76,10 +78,10 @@
 
         &.course-color-5 {
             border-color: $group-color-5;
-            background-color: lighten($group-color-5, 45%);
+            background-color: color.adjust($group-color-5, $lightness: 45%);;
 
             &:hover {
-                background-color: lighten($group-color-5, 50%);
+                background-color: color.adjust($group-color-5, $lightness: 50%);;
             }
 
             .fc-time {
@@ -89,10 +91,10 @@
 
         &.course-color-6 {
             border-color: $group-color-6;
-            background-color: lighten($group-color-6, 45%);
+            background-color: color.adjust($group-color-6, $lightness: 45%);;
 
             &:hover {
-                background-color: lighten($group-color-6, 50%);
+                background-color: color.adjust($group-color-6, $lightness: 50%);;
             }
 
             .fc-time {
@@ -102,10 +104,10 @@
 
         &.course-color-7 {
             border-color: $group-color-7;
-            background-color: lighten($group-color-7, 45%);
+            background-color: color.adjust($group-color-7, $lightness: 45%);;
 
             &:hover {
-                background-color: lighten($group-color-7, 50%);
+                background-color: color.adjust($group-color-7, $lightness: 50%);;
             }
 
             .fc-time {
@@ -115,10 +117,10 @@
 
         &.course-color-8 {
             border-color: $group-color-8;
-            background-color: lighten($group-color-8, 45%);
+            background-color: color.adjust($group-color-8, $lightness: 45%);;
 
             &:hover {
-                background-color: lighten($group-color-8, 50%);
+                background-color: color.adjust($group-color-8, $lightness: 50%);;
             }
 
             .fc-time {
diff --git a/resources/assets/stylesheets/scss/courseware.scss b/resources/assets/stylesheets/scss/courseware.scss
index 8c9d87f64cca54d28e3fbe3eac2dfd3a587a8cd1..092a236da95c6707a20a014a53fe2d72c2523a87 100644
--- a/resources/assets/stylesheets/scss/courseware.scss
+++ b/resources/assets/stylesheets/scss/courseware.scss
@@ -1,37 +1,37 @@
-@use '../mixins.scss' as *;
+@use '../mixins' as *;
 
-@import './courseware/variables.scss';
+@import './courseware/variables';
 
-@import './courseware/a11y.scss';
-@import './courseware/blockadder.scss';
-@import './courseware/comments.scss';
-@import './courseware/content-courses.scss';
-@import './courseware/dashboard.scss';
-@import './courseware/sortable.scss';
-@import './courseware/toolbar.scss';
-@import './courseware/widgets.scss';
-@import './courseware/wizards.scss';
+@import './courseware/a11y';
+@import './courseware/blockadder';
+@import './courseware/comments';
+@import './courseware/content-courses';
+@import './courseware/dashboard';
+@import './courseware/sortable';
+@import './courseware/toolbar';
+@import './courseware/widgets';
+@import './courseware/wizards';
 
-@import './courseware/shelf.scss';
-@import './courseware/structural-element.scss';
-@import './courseware/containers/default-container.scss';
-@import './courseware/containers/accordion.scss';
-@import './courseware/containers/list.scss';
-@import './courseware/containers/tabs.scss';
-@import './courseware/blocks/default-block.scss';
+@import './courseware/shelf';
+@import './courseware/structural-element';
+@import './courseware/containers/default-container';
+@import './courseware/containers/accordion';
+@import './courseware/containers/list';
+@import './courseware/containers/tabs';
+@import './courseware/blocks/default-block';
 
 
-@import './courseware/layouts/call-to-action.scss';
-@import './courseware/layouts/collapsible.scss';
-@import './courseware/layouts/companion.scss';
-@import './courseware/layouts/import-zip.scss';
-@import './courseware/layouts/input-file.scss';
-@import './courseware/layouts/permissions.scss';
-@import './courseware/layouts/progress.scss';
-@import './courseware/layouts/radioset.scss';
-@import './courseware/layouts/ribbon.scss';
-@import './courseware/layouts/tabs.scss';
-@import './courseware/layouts/talk-bubble.scss';
-@import './courseware/layouts/tile.scss';
-@import './courseware/layouts/tree.scss';
-@import './courseware/layouts/tree-units.scss';
+@import './courseware/layouts/call-to-action';
+@import './courseware/layouts/collapsible';
+@import './courseware/layouts/companion';
+@import './courseware/layouts/import-zip';
+@import './courseware/layouts/input-file';
+@import './courseware/layouts/permissions';
+@import './courseware/layouts/progress';
+@import './courseware/layouts/radioset';
+@import './courseware/layouts/ribbon';
+@import './courseware/layouts/tabs';
+@import './courseware/layouts/talk-bubble';
+@import './courseware/layouts/tile';
+@import './courseware/layouts/tree';
+@import './courseware/layouts/tree-units';
diff --git a/resources/assets/stylesheets/scss/courseware/blocks/headline.scss b/resources/assets/stylesheets/scss/courseware/blocks/headline.scss
index 9fa792f61956b41f895474d34aa1bc89dd4f618b..2bfaaceb605a5b78cdac8f448d1c4c8de9666ecb 100644
--- a/resources/assets/stylesheets/scss/courseware/blocks/headline.scss
+++ b/resources/assets/stylesheets/scss/courseware/blocks/headline.scss
@@ -1,6 +1,6 @@
-@use '../../../mixins.scss' as *;
-@import '../gradients.scss';
-@import '../variables.scss';
+@use '../../../mixins' as *;
+@import '../gradients';
+@import '../variables';
 
 $big-icon-size: 196;
 $big-icon-size-px: $big-icon-size * 1px;
diff --git a/resources/assets/stylesheets/scss/courseware/blocks/image-map.scss b/resources/assets/stylesheets/scss/courseware/blocks/image-map.scss
index 398ce99f43b6e303bc30c891997fa8c6025accbc..0e55b43dba0f2ac632494b2cdcca6c96d2fb1bde 100644
--- a/resources/assets/stylesheets/scss/courseware/blocks/image-map.scss
+++ b/resources/assets/stylesheets/scss/courseware/blocks/image-map.scss
@@ -1,4 +1,4 @@
-@import '../variables.scss';
+@import '../variables';
 
 .cw-block-image-map {
     .cw-image-map-canvas,
@@ -32,4 +32,4 @@
             cursor: grab;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/resources/assets/stylesheets/scss/courseware/blocks/keypoint.scss b/resources/assets/stylesheets/scss/courseware/blocks/keypoint.scss
index f162403016a1829cbf313c6ed3ed2be32717e2b1..7e1040a734837f5fc6e32401572a743f04921c9f 100644
--- a/resources/assets/stylesheets/scss/courseware/blocks/keypoint.scss
+++ b/resources/assets/stylesheets/scss/courseware/blocks/keypoint.scss
@@ -1,5 +1,5 @@
-@use '../../../mixins.scss' as *;
-@import '../variables.scss';
+@use '../../../mixins' as *;
+@import '../variables';
 
 .cw-keypoint-content {
     position: relative;
diff --git a/resources/assets/stylesheets/scss/courseware/blocks/table-of-contents.scss b/resources/assets/stylesheets/scss/courseware/blocks/table-of-contents.scss
index f1c1d225b8478bb7de25996097a5641f31cca395..76bc53cd17cee8436d9034cb68ae182d514cc68a 100644
--- a/resources/assets/stylesheets/scss/courseware/blocks/table-of-contents.scss
+++ b/resources/assets/stylesheets/scss/courseware/blocks/table-of-contents.scss
@@ -1,5 +1,5 @@
-@use '../../../mixins.scss' as *;
-@import '../variables.scss';
+@use '../../../mixins' as *;
+@import '../variables';
 
 .cw-block-table-of-contents {
     .cw-block-content {
diff --git a/resources/assets/stylesheets/scss/courseware/blocks/timeline.scss b/resources/assets/stylesheets/scss/courseware/blocks/timeline.scss
index e727313845b489603614a63c871ace856d894d04..49256b7c4bc9402d0d80b38eecf2af3ecb28686c 100644
--- a/resources/assets/stylesheets/scss/courseware/blocks/timeline.scss
+++ b/resources/assets/stylesheets/scss/courseware/blocks/timeline.scss
@@ -1,4 +1,4 @@
-@import '../variables.scss';
+@import '../variables';
 
 %clearfix {
     &:after, &:before {
@@ -236,9 +236,9 @@
     }
 }
 .cw-container-colspan-half {
-    @include oneSidedTimeline();
+    @include oneSidedTimeline;
 }
 
 @media only screen and (max-width: 1070px) {
-    @include oneSidedTimeline();
+    @include oneSidedTimeline;
 }
diff --git a/resources/assets/stylesheets/scss/courseware/containers/accordion.scss b/resources/assets/stylesheets/scss/courseware/containers/accordion.scss
index e8c45905ba07d9086a9c119b63f82e562b4febe0..5cbd2df277a9d748fc8f09a4b4a6d12541b27c5b 100644
--- a/resources/assets/stylesheets/scss/courseware/containers/accordion.scss
+++ b/resources/assets/stylesheets/scss/courseware/containers/accordion.scss
@@ -1,4 +1,4 @@
-@import '../layouts/collapsible.scss';
+@import '../layouts/collapsible';
 .cw-container-accordion {
 
     .cw-block-wrapper-active {
diff --git a/resources/assets/stylesheets/scss/courseware/layouts/tabs.scss b/resources/assets/stylesheets/scss/courseware/layouts/tabs.scss
index 2db91ce1e2d7da4b4f95a884319249f22e208c7f..c79f950a97150625481519af685a784e53cb8343 100644
--- a/resources/assets/stylesheets/scss/courseware/layouts/tabs.scss
+++ b/resources/assets/stylesheets/scss/courseware/layouts/tabs.scss
@@ -1,5 +1,5 @@
-@use '../../../mixins.scss' as *;
-@import '../variables.scss';
+@use '../../../mixins' as *;
+@import '../variables';
 
 .cw-tabs-nav {
     display: flex;
diff --git a/resources/assets/stylesheets/scss/courseware/sortable.scss b/resources/assets/stylesheets/scss/courseware/sortable.scss
index 7eaccdad97c299536d56c077835dd8c1fdac7bb1..b0edc5a9e7d7617f514005863f6f2adcff5454c3 100644
--- a/resources/assets/stylesheets/scss/courseware/sortable.scss
+++ b/resources/assets/stylesheets/scss/courseware/sortable.scss
@@ -1,4 +1,4 @@
-@import '../drag-handle.scss';
+@import '../drag-handle';
 
 .cw-sortable-handle {
     @extend .drag-handle;
@@ -106,7 +106,7 @@
     border: dashed 2px var(--content-color-40);
     margin-top: -5px;
     margin-bottom: 15px;
-    
+
     a {
         opacity: 0;
     }
@@ -154,4 +154,4 @@
     .cw-block {
         opacity: 0;
     }
-}
\ No newline at end of file
+}
diff --git a/resources/assets/stylesheets/scss/courseware/structural-element.scss b/resources/assets/stylesheets/scss/courseware/structural-element.scss
index b17bb99f3493ec1933c7ad86ea804c38ab3b50c3..c41c09b281fcd4da219789c79100329e67ea3c8f 100644
--- a/resources/assets/stylesheets/scss/courseware/structural-element.scss
+++ b/resources/assets/stylesheets/scss/courseware/structural-element.scss
@@ -1,5 +1,6 @@
-@use '../../mixins.scss' as *;
-@import './variables.scss';
+@use '../../mixins' as *;
+@use "sass:map";
+@import './variables';
 
 #course-courseware-index,
 #contents-courseware-index,
@@ -80,53 +81,53 @@
     .cw-structural-element-color {
         color: var(--white);
         &.black {
-            background-color: map-get($tile-colors, 'black');
+            background-color: map.get($tile-colors, 'black');
         }
         &.charcoal {
-            background-color: map-get($tile-colors, 'charcoal');
+            background-color: map.get($tile-colors, 'charcoal');
         }
         &.royal-purple {
-            background-color: map-get($tile-colors, 'royal-purple');
+            background-color: map.get($tile-colors, 'royal-purple');
         }
         &.iguana-green {
-            background-color: map-get($tile-colors, 'iguana-green');
+            background-color: map.get($tile-colors, 'iguana-green');
         }
         &.queen-blue {
-            background-color: map-get($tile-colors, 'queen-blue');
+            background-color: map.get($tile-colors, 'queen-blue');
         }
         &.verdigris {
-            background-color: map-get($tile-colors, 'verdigris');
+            background-color: map.get($tile-colors, 'verdigris');
         }
         &.mulberry {
-            background-color: map-get($tile-colors, 'mulberry');
+            background-color: map.get($tile-colors, 'mulberry');
         }
         &.pumpkin {
-            background-color: map-get($tile-colors, 'pumpkin');
+            background-color: map.get($tile-colors, 'pumpkin');
         }
         &.sunglow {
-            background-color: map-get($tile-colors, 'sunglow');
+            background-color: map.get($tile-colors, 'sunglow');
         }
         &.apple-green {
-            background-color: map-get($tile-colors, 'apple-green');
+            background-color: map.get($tile-colors, 'apple-green');
         }
 
         &.studip-blue {
-            background-color: map-get($tile-colors, 'studip-blue');
+            background-color: map.get($tile-colors, 'studip-blue');
         }
         &.studip-lightblue {
-            background-color: map-get($tile-colors, 'studip-lightblue');
+            background-color: map.get($tile-colors, 'studip-lightblue');
         }
         &.studip-red {
-            background-color: map-get($tile-colors, 'studip-red');
+            background-color: map.get($tile-colors, 'studip-red');
         }
         &.studip-green {
-            background-color: map-get($tile-colors, 'studip-green');
+            background-color: map.get($tile-colors, 'studip-green');
         }
         &.studip-yellow {
-            background-color: map-get($tile-colors, 'studip-yellow');
+            background-color: map.get($tile-colors, 'studip-yellow');
         }
         &.studip-gray {
-            background-color: map-get($tile-colors, 'studip-gray');
+            background-color: map.get($tile-colors, 'studip-gray');
         }
     }
 
diff --git a/resources/assets/stylesheets/scss/courseware/variables.scss b/resources/assets/stylesheets/scss/courseware/variables.scss
index 8ce915f3a209cdfacd51eb11dafc3a9225de2ee7..37be478da63bd95c1363ff3308bf587a37e757d2 100644
--- a/resources/assets/stylesheets/scss/courseware/variables.scss
+++ b/resources/assets/stylesheets/scss/courseware/variables.scss
@@ -33,7 +33,7 @@ $tile-colors: (
     studip-gray: #636a71,
 );
 
-$icon-colors:(
+$icon-colors: (
     icon-white: #ffffff,
     icon-black: #000000,
     icon-red: #cb1800,
@@ -42,7 +42,7 @@ $icon-colors:(
     icon-gray: #6e6e6e,
     icon-yellow: #ffad00
 );
-$border-colors:(
+$border-colors: (
     white: #ffffff,
     black: #000000,
     studip-red: #cb1800,
@@ -202,4 +202,4 @@ $icons: (
     video2,
     visibility-visible,
     wizard
-);
\ No newline at end of file
+);
diff --git a/resources/assets/stylesheets/scss/cronjobs.scss b/resources/assets/stylesheets/scss/cronjobs.scss
index 4e45baf0c7e2714b12d2e1700dcc20a64ea6e883..7ae84627961611fd8675b372eee26162414475ea 100644
--- a/resources/assets/stylesheets/scss/cronjobs.scss
+++ b/resources/assets/stylesheets/scss/cronjobs.scss
@@ -89,7 +89,7 @@
         margin: 0 0 0.5em;
     }
 
-    //> table > thead > tr > th { .table_header_bold; }
+    // > table > thead > tr > th { .table_header_bold; }
     > table {
         margin-bottom: 1em;
     }
diff --git a/resources/assets/stylesheets/scss/css_tree.scss b/resources/assets/stylesheets/scss/css_tree.scss
index d446b9c28e20cb9d9306cf2115845bf3bef9aca9..b30adc20c64a778cb4002c7ddc3d581534ffdf52 100644
--- a/resources/assets/stylesheets/scss/css_tree.scss
+++ b/resources/assets/stylesheets/scss/css_tree.scss
@@ -84,7 +84,7 @@ $css-tree-border: 1px solid var(--light-gray-color-80);
 .css-tree.selectable {
     input[type=checkbox] {
         + label {
-            @include hide-text();
+            @include hide-text;
         }
         ~ input[type=radio] + label {
             margin-left: 0;
diff --git a/resources/assets/stylesheets/scss/dashboard.scss b/resources/assets/stylesheets/scss/dashboard.scss
index fba2413b28c965299a4f9b3e42374c7c951f975b..1ed90bdff0936837f0e505dfcd26425e574db3ed 100644
--- a/resources/assets/stylesheets/scss/dashboard.scss
+++ b/resources/assets/stylesheets/scss/dashboard.scss
@@ -57,13 +57,13 @@
 .document-range, .document-size {
     display: none;
 
-    @include media-breakpoint-medium-up() {
+    @include media-breakpoint-medium-up {
         display: inline;
     }
 }
 
 // small: nur volle breite
-@include media-breakpoint-small-up() {
+@include media-breakpoint-small-up {
     .grid-stack-one-column-mode {
         .document-range, .document-size {
             display: inline;
@@ -157,12 +157,12 @@ form div.files-search {
 
     .input-group-append a.button.reset {
         @include button-with-icon(refresh, clickable, clickable);
-        @include hide-text();
+        @include hide-text;
         top: 2px;
     }
 }
 
-@include media-breakpoint-tiny-down() {
+@include media-breakpoint-tiny-down {
 
     .files-search-search {
         margin-bottom: 0;
@@ -176,22 +176,22 @@ form div.files-search {
 
 .files-search-active-filters {
     li:first-child {
-        @include hidden-tiny-down();
+        @include hidden-tiny-down;
     }
 }
 
 .files-search-results {
     caption span {
-        @include hidden-tiny-down();
+        @include hidden-tiny-down;
     }
 
     th:nth-child(3), td:nth-child(3) {
-        @include hidden-tiny-down();
+        @include hidden-tiny-down;
     }
 
     th:nth-child(1), td:nth-child(1),
     th:nth-child(5), td:nth-child(5),
     th:nth-child(6), td:nth-child(6) {
-        @include hidden-small-down();
+        @include hidden-small-down;
     }
 }
diff --git a/resources/assets/stylesheets/scss/dialog.scss b/resources/assets/stylesheets/scss/dialog.scss
index 3db493a329c3f66a2b1abd19f98e40bcbff0ea0c..1e5d02d5a93dd3840d8182f5ca777e3dd7c93841 100644
--- a/resources/assets/stylesheets/scss/dialog.scss
+++ b/resources/assets/stylesheets/scss/dialog.scss
@@ -68,7 +68,7 @@
             white-space: nowrap;
         }
         .ui-button {
-            @include button(); // Include button mixin
+            @include button; // Include button mixin
             font-weight: normal;
 
             &.accept,
diff --git a/resources/assets/stylesheets/scss/documents.scss b/resources/assets/stylesheets/scss/documents.scss
index b3d1238b8e4cfab53fe286218720e59ddf25a7ea..ee5f39234f7dedc1d72620d193b8ef30c09f7a0c 100644
--- a/resources/assets/stylesheets/scss/documents.scss
+++ b/resources/assets/stylesheets/scss/documents.scss
@@ -10,7 +10,7 @@
         min-height: 1.5em;
         width: 40px;
         z-index: 1;
-    
+
         > a, ul {
             background-color: var(--white);
             padding: 5px;
@@ -28,7 +28,7 @@
                 flex-direction: column-reverse;
             }
         }
-    
+
         ul {
             display: none;
             list-style: none;
@@ -54,7 +54,7 @@
 
 .document-dialog {
     $info-width: 150px;
-    @include clearfix();
+    @include clearfix;
     > aside {
         float: left;
         width: $info-width;
diff --git a/resources/assets/stylesheets/scss/enrolment.scss b/resources/assets/stylesheets/scss/enrolment.scss
index 41a08d36ab5255108688f81279189ee337cc04d9..eec7a65390ca01271a5770b956137af026bae528 100644
--- a/resources/assets/stylesheets/scss/enrolment.scss
+++ b/resources/assets/stylesheets/scss/enrolment.scss
@@ -6,7 +6,7 @@
         overflow-x: auto;
         padding: 0;
 
-        @include media-breakpoint-medium-up() {
+        @include media-breakpoint-medium-up {
             max-height: 200px;
         }
         li {
diff --git a/resources/assets/stylesheets/scss/files.scss b/resources/assets/stylesheets/scss/files.scss
index 31dadfb88e549d47fe48c10e26fbccc3b9477f72..e8f3fc85d8ced904cc26b30746bae2c08467e8bf 100644
--- a/resources/assets/stylesheets/scss/files.scss
+++ b/resources/assets/stylesheets/scss/files.scss
@@ -277,7 +277,7 @@ table.documents tfoot {
 
 
 /* for file/edit and folder/edit only: */
-@include media-breakpoint-small-down() {
+@include media-breakpoint-small-down {
     /* mobile view: */
     #file_aside,
     #folder_aside {
@@ -340,7 +340,7 @@ table.documents tfoot {
     }
 }
 
-@include media-breakpoint-small-up() {
+@include media-breakpoint-small-up {
     /* desktop view: */
 
     #file_aside,
diff --git a/resources/assets/stylesheets/scss/forms.scss b/resources/assets/stylesheets/scss/forms.scss
index dd1d67cd1bdf7a844cf520418c81dd937fdf0ecc..0a707c8f17c6c8fc14abb800c96d926ad950ad5b 100644
--- a/resources/assets/stylesheets/scss/forms.scss
+++ b/resources/assets/stylesheets/scss/forms.scss
@@ -271,7 +271,7 @@ form.default {
         }
     }
 
-    //Special inputs
+    // Special inputs
 
     label.file-upload {
         @include background-icon(upload);
@@ -468,7 +468,7 @@ form.default {
         margin-top: 0.5ex;
     }
 
-    //hidden radio buttons with icon:
+    // hidden radio buttons with icon:
 
     input[type="radio"].hidden-checkbox, input[type="checkbox"].hidden-checkbox {
         display:none;
@@ -516,7 +516,7 @@ form.default {
         }
     }
 
-    //designing vue-select in studipform:
+    // designing vue-select in studipform:
     .vs__dropdown-toggle {
         border-radius: 0;
     }
@@ -574,7 +574,7 @@ form.narrow {
 }
 
 // give forms some optimized styling for very narrow screen sizes
-@include media-breakpoint-tiny-down(){
+@include media-breakpoint-tiny-down{
     form.default {
         label.col-1, div.col-1, section.col-1,
         label.col-2, div.col-2, section.col-2,
diff --git a/resources/assets/stylesheets/scss/globalsearch.scss b/resources/assets/stylesheets/scss/globalsearch.scss
index f6823eb71c8309130056cd2dbefe2ef99bb7d824..5f5e3fab9242c3b8791e07a1f3aef152b178cf9c 100644
--- a/resources/assets/stylesheets/scss/globalsearch.scss
+++ b/resources/assets/stylesheets/scss/globalsearch.scss
@@ -1,3 +1,5 @@
+@use "sass:color";
+
 #quicksearch_item {
     align-self: flex-start;
 }
@@ -323,7 +325,7 @@ html:not(.size-large) {
             right: -1px;
             bottom: -1px;
             left: -1px;
-            background: mix($base-color, rgba(255,0,0,0), 50%);
+            background: color.mix($base-color, rgba(255,0,0,0), 50%);
             z-index: 5;
             pointer-events: none;
         }
diff --git a/resources/assets/stylesheets/scss/grid.scss b/resources/assets/stylesheets/scss/grid.scss
index f8979b6976c8660a608b8e012f9b45e2f0f99d2e..ae5927bd76cb7eb87abd60e813e4b71101e3b399 100644
--- a/resources/assets/stylesheets/scss/grid.scss
+++ b/resources/assets/stylesheets/scss/grid.scss
@@ -18,12 +18,12 @@ $grid-element-width: 270px;
 }
 
 // Responsive displays
-@include media-breakpoint-small-down() {
+@include media-breakpoint-small-down {
     .studip-grid {
         grid-template-columns: 1fr 1fr;
     }
 }
-@include media-breakpoint-tiny-down() {
+@include media-breakpoint-tiny-down {
     .studip-grid {
         grid-template-columns: 100%;
     }
diff --git a/resources/assets/stylesheets/scss/header.scss b/resources/assets/stylesheets/scss/header.scss
index dc904b1efa0d95480ab8c4599f94036172327f12..b4268cd83cb9d4bb1b77cefde8de14a4f50b3efb 100644
--- a/resources/assets/stylesheets/scss/header.scss
+++ b/resources/assets/stylesheets/scss/header.scss
@@ -1,3 +1,5 @@
+@use "sass:math";
+
 #main-header {
     grid-column: 1 / 3;
     grid-row: 1 / 2;
@@ -83,7 +85,7 @@
         flex: 0 1 auto;
 
         &.studip-logo {
-            @include hide-text();
+            @include hide-text;
             @include retina-background-image('logos/studip4-logo.png', 'logos/studip4-logo@2x.png', 130px, 92px);
             background-repeat: no-repeat;
             background-image: none, url("#{$image-path}/logos/studip4-logo.svg");
@@ -161,7 +163,7 @@
         justify-content: space-between;
         background-color: var(--color--main-navigation-background);
         color: var(--color--font-primary);
-        min-height: ceil($font-size-navigation2 * 2.25); // 16px * 2.25 = 36px
+        min-height: math.ceil($font-size-navigation2 * 2.25); // 16px * 2.25 = 36px
         border-bottom: 1px solid var(--color--main-navigation-border);
         padding-left: $page-margin;
         padding-right: $page-margin;
diff --git a/resources/assets/stylesheets/scss/installer.scss b/resources/assets/stylesheets/scss/installer.scss
index 916d74624a68a421f83c8f905926f77521995646..865144f93c997b6c1107b4ec60923eb7d9daab10 100644
--- a/resources/assets/stylesheets/scss/installer.scss
+++ b/resources/assets/stylesheets/scss/installer.scss
@@ -1,4 +1,4 @@
-@import "../mixins/colors.scss";
+@import "../mixins/colors";
 
 body#install {
     grid-template-columns: auto;
diff --git a/resources/assets/stylesheets/scss/lists.scss b/resources/assets/stylesheets/scss/lists.scss
index 80796b72a6ff928fc202fe714276a5ce3f7845fa..71df12c6c8e3c1fc9e3365cef8a04c8ce0843ac0 100644
--- a/resources/assets/stylesheets/scss/lists.scss
+++ b/resources/assets/stylesheets/scss/lists.scss
@@ -26,7 +26,7 @@ ol {
     }
 }
 
-//comma separated
+// comma separated
 .list-csv {
     @extend .list-inline;
     margin-left: 0;
diff --git a/resources/assets/stylesheets/scss/messagebox.scss b/resources/assets/stylesheets/scss/messagebox.scss
index dbd173e52f6e304a65f36404be955cad2f83ca5f..9b77522ab48b596338172a7f8b1ba393f47d17ba 100644
--- a/resources/assets/stylesheets/scss/messagebox.scss
+++ b/resources/assets/stylesheets/scss/messagebox.scss
@@ -54,7 +54,7 @@ div.messagebox_details {
 }
 
 // Messagebox definitions
-@mixin messagebox ($name, $color, $background-color, $border-color: $color, $image: $name) {
+@mixin messagebox($name, $color, $background-color, $border-color: $color, $image: $name) {
     div.messagebox_#{$name} {
         color: $color;
         background-color: $background-color;
diff --git a/resources/assets/stylesheets/scss/mvv.scss b/resources/assets/stylesheets/scss/mvv.scss
index 289b50ebc575f22c988340f1a6d18dc8041aa507..48b063bc7b14ac62f3485455a2c67b18823c80d2 100644
--- a/resources/assets/stylesheets/scss/mvv.scss
+++ b/resources/assets/stylesheets/scss/mvv.scss
@@ -11,7 +11,7 @@
         }
 
         input[type="submit"] {
-            @include hide-text();
+            @include hide-text;
             width: 29px;
             height: 20px;
             @include background-icon(search, info_alt);
diff --git a/resources/assets/stylesheets/scss/navigation-hoverborder.scss b/resources/assets/stylesheets/scss/navigation-hoverborder.scss
index cf0fab2c254ce2b4e24fce4f1c735837e1076631..16dc09b880dfa21f4e580a7a92021c635463e7f3 100644
--- a/resources/assets/stylesheets/scss/navigation-hoverborder.scss
+++ b/resources/assets/stylesheets/scss/navigation-hoverborder.scss
@@ -20,7 +20,7 @@
                     opacity var(--transition-duration);
     }
 }
-@mixin border-shrink() {
+@mixin border-shrink {
     left: 50%;
     right: 50%;
     opacity: 0;
@@ -33,12 +33,12 @@ body:not(.fixed) #navigation-level-1-items {
     > li:not(.active) {
         @include border-beneath(var(--dark-gray-color-40));
         &:not(:hover)::after {
-            @include border-shrink();
+            @include border-shrink;
         }
     }
 
     &:hover > li:not(:hover)::after {
-        @include border-shrink();
+        @include border-shrink;
     }
 
     .action-menu-icon {
@@ -64,7 +64,7 @@ body:not(.fixed) #navigation-level-1-items {
         &:not(.current) {
             @include border-beneath(var(--dark-gray-color-40), -2px, 3px);
             &:not(:hover)::after {
-                @include border-shrink();
+                @include border-shrink;
             }
         }
     }
diff --git a/resources/assets/stylesheets/scss/navigation.scss b/resources/assets/stylesheets/scss/navigation.scss
index 4af54bfd67994c57cbf7fa0ccaaa2c07803a9a28..3af4f97ffab39818579da903b5ce1702b1630047 100644
--- a/resources/assets/stylesheets/scss/navigation.scss
+++ b/resources/assets/stylesheets/scss/navigation.scss
@@ -195,7 +195,7 @@ body:not(.fixed) #navigation-level-1-items {
                     flex: 1 0 70%;
                     text-align: left;
                     white-space: nowrap;
-                    //margin-top: -10px;
+                    // margin-top: -10px;
                 }
                 br {
                     display: none;
diff --git a/resources/assets/stylesheets/scss/oer.scss b/resources/assets/stylesheets/scss/oer.scss
index 4d4fd631b0b2d3cd2adf55390098720cc7805eb8..4d70adfa2528a31c9f33f187b526ba940176903d 100644
--- a/resources/assets/stylesheets/scss/oer.scss
+++ b/resources/assets/stylesheets/scss/oer.scss
@@ -459,7 +459,7 @@ ul.reviews, ol.reviews {
 }
 
 @keyframes oer-filter-panel-appears {
-    from {
+    0% {
         max-height: 0;
         border-bottom-width: 0;
         overflow: hidden;
@@ -469,7 +469,7 @@ ul.reviews, ol.reviews {
         overflow: hidden;
         border-bottom-width: 10px;
     }
-    to {
+    100% {
         max-height: 183px;
         overflow: hidden;
         border-bottom-width: 10px;
@@ -478,12 +478,12 @@ ul.reviews, ol.reviews {
 
 
 @keyframes oer-tag-appears {
-    from {
+    0% {
         opacity: 0;
         transform: scale(0.5);
         filter: blur(4px);
     }
-    to {
+    100% {
         transform: scale(1);
         opacity: 1;
         filter: blur(0px);
diff --git a/resources/assets/stylesheets/scss/opengraph.scss b/resources/assets/stylesheets/scss/opengraph.scss
index 727f6dac5247cacc35b7852899993469ec18472d..074a5e53a62e2db967d4afa7a9f053692654b1b9 100644
--- a/resources/assets/stylesheets/scss/opengraph.scss
+++ b/resources/assets/stylesheets/scss/opengraph.scss
@@ -18,9 +18,10 @@
                 border-right: thin solid var(--dark-gray-color-20);
             }
         }
-        .switch-left, .switch-right {
-            @include hide-text();
-            @include square(20px);
+        .switch-left,
+        .switch-right {
+            @include hide-text;
+            @include square(var(--icon-size-default));
             background-position: center;
             background-repeat: no-repeat;
             padding: 0;
@@ -30,15 +31,15 @@
             }
         }
         .switch-left {
-            @include background-icon('arr_1left', 'clickable');
+            @include background-icon(arr_1left);
             &[disabled] {
-                @include background-icon('arr_1left', 'inactive');
+                @include background-icon(arr_1left);
             }
         }
         .switch-right {
-            @include background-icon('arr_1right', 'clickable');
+            @include background-icon(arr_1right);
             &[disabled] {
-                @include background-icon('arr_1right', 'inactive');
+                @include background-icon(arr_1right);
             }
         }
     }
@@ -55,7 +56,7 @@
     $padding: 10px;
     $height: 120px;
 
-    @include clearfix();
+    @include clearfix;
 
     font-size: 0.8em;
     border: 1px solid var(--dark-gray-color-20);
diff --git a/resources/assets/stylesheets/scss/pagination.scss b/resources/assets/stylesheets/scss/pagination.scss
index 99b8adf7bc64a13d8c471f3de5df6e89847f0f71..2f74bccf30ade3194349413cdf2d0158eff3befc 100644
--- a/resources/assets/stylesheets/scss/pagination.scss
+++ b/resources/assets/stylesheets/scss/pagination.scss
@@ -39,7 +39,7 @@
     .prev,
     .next {
         .pagination--link {
-            @include hide-text();
+            @include hide-text;
             background-position: center;
             background-repeat: no-repeat;
             display: inline-block;
diff --git a/resources/assets/stylesheets/scss/plus.scss b/resources/assets/stylesheets/scss/plus.scss
index 5c032cd0e6d7981a2a68ca443dcaadc27e7ab07e..f12f01acb3e298ff58eabf46c2589ca1c7502891 100644
--- a/resources/assets/stylesheets/scss/plus.scss
+++ b/resources/assets/stylesheets/scss/plus.scss
@@ -1,3 +1,5 @@
+@use "sass:color";
+
 .plus {
     .element_header {
         display: inline-block;
@@ -45,8 +47,8 @@
         width: 250px;
         text-align: center;
         background-color: $content-color-20;
-        border-top: 1px solid mix($brand-color-lighter, $white, 80%);
-        border-bottom: 1px solid mix($brand-color-lighter, $white, 80%);
+        border-top: 1px solid color.mix($brand-color-lighter, $white, 80%);
+        border-bottom: 1px solid color.mix($brand-color-lighter, $white, 80%);
     }
 
     .descriptionbox {
diff --git a/resources/assets/stylesheets/scss/profile.scss b/resources/assets/stylesheets/scss/profile.scss
index c180e0398fe2fc390b6da679945289020eaa6b7f..51bca828ac033ea10053a0ddc4f0b51bdf0e0780 100644
--- a/resources/assets/stylesheets/scss/profile.scss
+++ b/resources/assets/stylesheets/scss/profile.scss
@@ -19,7 +19,7 @@
     }
 }
 
-@include media-breakpoint-tiny-down(){
+@include media-breakpoint-tiny-down{
 
     table.settings-privacy {
         &, thead, tbody, th, td, tr {
@@ -80,7 +80,7 @@
     border-bottom: 1px solid var(--table-header-color);
 }
 
-@include media-breakpoint-small-up(){
+@include media-breakpoint-small-up {
     #select_fach_abschluss tbody {
         td::before {
             display: none;
diff --git a/resources/assets/stylesheets/scss/questionnaire.scss b/resources/assets/stylesheets/scss/questionnaire.scss
index f4d28e3219b3dd05f40a61de7dd47ee0d268c2d9..38703553b1491db16a2c287475f72fec87201ea8 100644
--- a/resources/assets/stylesheets/scss/questionnaire.scss
+++ b/resources/assets/stylesheets/scss/questionnaire.scss
@@ -160,13 +160,17 @@ $width: 270px;
         fill: var(--black);
     }
 
-    .ct-series-a .ct-bar, .ct-series-a .ct-line, .ct-series-a .ct-point, .ct-series-a .ct-slice-donut {
-        //Balkenfarbe
+    // Balkenfarbe
+    .ct-series-a .ct-bar,
+    .ct-series-a .ct-line,
+    .ct-series-a .ct-point,
+    .ct-series-a .ct-slice-donut {
         stroke: var(--red);
     }
 
-    //Tortenstücke:
-    .ct-series-a .ct-area, .ct-series-a .ct-slice-pie {
+    // Tortenstücke:
+    .ct-series-a .ct-area,
+    .ct-series-a .ct-slice-pie {
         fill: var(--red);
     }
 
diff --git a/resources/assets/stylesheets/scss/responsive.scss b/resources/assets/stylesheets/scss/responsive.scss
index 5ab4e2b94761894415a6cadeeb8dad3bc7b6aabc..35ffa7c9557def6f52890cd6c2ae2b5120de0819 100644
--- a/resources/assets/stylesheets/scss/responsive.scss
+++ b/resources/assets/stylesheets/scss/responsive.scss
@@ -1,4 +1,4 @@
-@use "../mixins/colors.scss";
+@use "../mixins/colors";
 @import "breakpoints";
 @import "buttons";
 @import "sidebar";
@@ -691,7 +691,7 @@ html:not(.responsive-display):not(.fullscreen-mode) {
 
 /* content from old responsive.less */
 .responsive-display {
-    @include media-breakpoint-small-down() {
+    @include media-breakpoint-small-down {
         #navigation-level-1,
         #navigation-level1-items,
         .current_page,
@@ -855,7 +855,7 @@ html:not(.responsive-display):not(.fullscreen-mode) {
         }
     }
 
-    @include media-breakpoint-tiny-down() {
+    @include media-breakpoint-tiny-down {
         #index,
         #login,
         #request_new_password,
diff --git a/resources/assets/stylesheets/scss/studip-overlay.scss b/resources/assets/stylesheets/scss/studip-overlay.scss
index 6670768ffbf58e3014ec06d013414285c2da2e8b..2f60faa6b2b35ce4783f27e7bee09778c3be8e68 100644
--- a/resources/assets/stylesheets/scss/studip-overlay.scss
+++ b/resources/assets/stylesheets/scss/studip-overlay.scss
@@ -1,4 +1,4 @@
-@mixin center()
+@mixin center
 {
     position: absolute;
     left: 50%;
@@ -37,7 +37,7 @@
         cursor: wait;
 
         h1 {
-            @include center();
+            @include center;
 
             margin-bottom: 0;
             padding-bottom: 100px;
@@ -47,7 +47,7 @@
         }
 
         progress {
-            @include center();
+            @include center;
 
             margin-top: 45px;
             width: 80%;
diff --git a/resources/assets/stylesheets/scss/table_of_contents.scss b/resources/assets/stylesheets/scss/table_of_contents.scss
index c058c54540ebd8190443c63d789fcf766aefeb30..b155e3dc2399d12bbd6ef2f57561183703b9eaae 100644
--- a/resources/assets/stylesheets/scss/table_of_contents.scss
+++ b/resources/assets/stylesheets/scss/table_of_contents.scss
@@ -1,4 +1,6 @@
-$base-gray-color-5: mix($base-gray, #fff, 5%);
+@use "sass:color";
+
+$base-gray-color-5: color.mix($base-gray, #fff, 5%);
 
 ul.numberedchapters {
     counter-reset: section;
@@ -16,7 +18,6 @@ ul.numberedchapters {
 }
 
 #toc {
-    margin: 11px;
     text-align: left;
     z-index: 100;
     position: absolute;
@@ -24,7 +25,7 @@ ul.numberedchapters {
     top: -11px;
     background-color: var(--white);
     border: 1px solid var(--content-color-40);
-    margin-bottom: 10px;
+    margin: 11px 11px 10px;
     box-shadow: 2px 2px var(--dark-gray-color-30);
     width: min(100%, 540px);
 
diff --git a/resources/assets/stylesheets/scss/tables.scss b/resources/assets/stylesheets/scss/tables.scss
index 08ec3e006d8481d4b9fd37da5aa007173850afe9..c2fa3122b9d22cd91affc1ee4db8ffd1bb930983 100644
--- a/resources/assets/stylesheets/scss/tables.scss
+++ b/resources/assets/stylesheets/scss/tables.scss
@@ -1,5 +1,10 @@
+@use "sass:color";
+
 /* --- Tabellen ------------------------------------------------------------- */
-table.header, .table_header { //normale Tabellenheader
+
+// normale Tabellenheader
+table.header,
+.table_header {
     background-color: var(--table-header-color);
     border-bottom: 1px solid var(--color--table-border);
     color: var(--black);
@@ -7,7 +12,8 @@ table.header, .table_header { //normale Tabellenheader
 
 }
 
-.table_header_bold { //formerly known as topic(-header)
+// formerly known as topic(-header)
+.table_header_bold {
     background-color: var(--color--table-header);
     border-color: var(--color--table-border);
     border-style: solid;
@@ -52,7 +58,7 @@ table.toolbar {
 
 td.toolbar,
 td.printhead {
-    @include gradient-bar();
+    @include gradient-bar;
 }
 
 td {
@@ -332,7 +338,7 @@ tr.sortable {
     }
 
     td:first-child[colspan], .divider > th, .divider > td {
-        background-color: lighten($brand-color-lighter, 20%);
+        background-color: color.adjust($brand-color-lighter, $lightness: 20%);
         border-bottom: 1px solid var(--color--table-border);
         border-top: 1px solid var(--color--table-border);
         color: var(--black);
@@ -397,7 +403,7 @@ tr.sortable {
 
 table.tree {
     .header > td {
-        @include gradient-bar();
+        @include gradient-bar;
 
         a.link {
             padding-left: 5px;
@@ -666,7 +672,7 @@ table.default {
         }
 
         .toggle-switch {
-            @include hide-text();
+            @include hide-text;
             @include background-icon(arr_1down);
             display: inline-block;
             height: $icon-size-inline;
@@ -842,10 +848,10 @@ table.withdetails {
 
 // Responsive helper
 .table-scrollbox-horizontal {
-    @include scrollbox-horizontal();
+    @include scrollbox-horizontal;
 }
 
-//New table form for Course Search
+// New table form for Course Search
 table.course-search {
     $max-width-s: 8em;
     $max-width-m: 48em;
@@ -869,7 +875,7 @@ table.course-search {
     }
 }
 
-//Show Tree Table
+// Show Tree Table
 table.show-tree {
     width: 100%;
     padding: 0 10px 10px 10px;
diff --git a/resources/assets/stylesheets/scss/tree.scss b/resources/assets/stylesheets/scss/tree.scss
index 1d700f92eb5d1b29b85151f055abd167e56bae47..1716eb7a4277ad292c263198b083ed028c48b0bb 100644
--- a/resources/assets/stylesheets/scss/tree.scss
+++ b/resources/assets/stylesheets/scss/tree.scss
@@ -1,3 +1,5 @@
+@use "sass:color";
+
 $tree-outline: 1px solid var(--light-gray-color-40);
 
 .studip-tree {
@@ -34,7 +36,7 @@ $tree-outline: 1px solid var(--light-gray-color-40);
             .studip-tree-navigation {
                 background-color: var(--white);
                 border: 1px solid var(--content-color-40);
-                box-shadow: 2px 2px mix($base-gray, $white, 20%);
+                box-shadow: 2px 2px color.mix($base-gray, $white, 20%);
                 right: -20px;
                 padding: 10px;
                 position: absolute;
diff --git a/resources/assets/stylesheets/scss/typography.scss b/resources/assets/stylesheets/scss/typography.scss
index eaef03570a1139b0fede77b3d03f7623b45a0820..5268145843558483a77a35076bb9d21b35389c18 100644
--- a/resources/assets/stylesheets/scss/typography.scss
+++ b/resources/assets/stylesheets/scss/typography.scss
@@ -22,7 +22,6 @@ textarea {
   line-height: inherit;
 }
 
-//
 // Typography
 // --------------------------------------------------
 
diff --git a/resources/assets/stylesheets/scss/variables.scss b/resources/assets/stylesheets/scss/variables.scss
index 09675196ad6f7c3b10b9c9aedb6909bb120f84b3..77de3532b205a817358882a8030848f0c4542e77 100644
--- a/resources/assets/stylesheets/scss/variables.scss
+++ b/resources/assets/stylesheets/scss/variables.scss
@@ -1,37 +1,38 @@
-@import "../mixins/misc.scss";
-@import '../mixins/colors.scss';
+@use "sass:math";
+@import "../mixins/misc";
+@import '../mixins/colors';
 
 // Typography
-$text-color:              #000;
+$text-color: #000;
 
-$font-family-base:        "Lato", sans-serif;
+$font-family-base: "Lato", sans-serif;
 
-$font-size-base:          14px;
-$font-size-large:         ceil($font-size-base * 1.25); // 18px
-$font-size-small:         ceil($font-size-base * 0.85); // 12px
+$font-size-base: 14px;
+$font-size-large: math.ceil($font-size-base * 1.25); // 18px
+$font-size-small: math.ceil($font-size-base * 0.85); // 12px
 
-$font-size-h1:            floor($font-size-base * 1.6); // 22px
-$font-size-h2:            ceil($font-size-base * 1.4); // 20px
-$font-size-h3:            ceil($font-size-base * 1.1); // 16px
-$font-size-h4:            $font-size-base;
-$font-size-h5:            $font-size-base;
-$font-size-h6:            $font-size-base;
+$font-size-h1: math.floor($font-size-base * 1.6); // 22px
+$font-size-h2: math.ceil($font-size-base * 1.4); // 20px
+$font-size-h3: math.ceil($font-size-base * 1.1); // 16px
+$font-size-h4: $font-size-base;
+$font-size-h5: $font-size-base;
+$font-size-h6: $font-size-base;
 
-$font-size-navigation2:   ceil($font-size-base * 1.1); // 16px
+$font-size-navigation2: math.ceil($font-size-base * 1.1); // 16px
 
 $font-size-widget-header: $font-size-large;
-$font-size-caption:       $font-size-h1;
+$font-size-caption: $font-size-h1;
 
-//** Unit-less `line-height` for use in components like buttons.
-$line-height-base:        1.428571429; // 20/14
-//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
-$line-height-computed:    floor($font-size-base * $line-height-base); // ~20px
+// Unit-less `line-height` for use in components like buttons.
+$line-height-base: 1.428571429; // 20/14
+// Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$line-height-computed: math.floor($font-size-base * $line-height-base); // ~20px
 
-//** By default, this inherits from the `<body>`.
-$headings-font-family:    inherit;
-$headings-font-weight:    700;
-$headings-line-height:    1.1;
-$headings-color:          #000;
+// By default, this inherits from the `<body>`.
+$headings-font-family: inherit;
+$headings-font-weight: 700;
+$headings-line-height: 1.1;
+$headings-color: #000;
 
 // Design specific
 $bar-bottom-container-height: 40px;
@@ -43,7 +44,7 @@ $icon-size-inline: 16px;
 $icon-size-button: $icon-size-inline;
 
 // Avatar sizes:
-$avatar-small:  25px;
+$avatar-small: 25px;
 $avatar-medium: 100px;
 $avatar-normal: 250px;
 
diff --git a/resources/assets/stylesheets/scss/visibility.scss b/resources/assets/stylesheets/scss/visibility.scss
index 7201ef8362a8bd373750513a8aab875ec1d68c2e..98fccf2b960cea5f535ea409450919ef511a54c3 100644
--- a/resources/assets/stylesheets/scss/visibility.scss
+++ b/resources/assets/stylesheets/scss/visibility.scss
@@ -1,219 +1,219 @@
-@mixin media-breakpoint-xxlarge-down() {
+@mixin media-breakpoint-xxlarge-down {
     @content;
 }
 
-@mixin media-breakpoint-xlarge-down() {
+@mixin media-breakpoint-xlarge-down {
     @media (max-width: ($major-breakpoint-xxlarge - 1px)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-large-down() {
+@mixin media-breakpoint-large-down {
     @media (max-width: ($major-breakpoint-xlarge - 1px)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-medium-down() {
+@mixin media-breakpoint-medium-down {
     @media (max-width: ($major-breakpoint-large - 1px)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-small-down() {
+@mixin media-breakpoint-small-down {
     @media (max-width: ($major-breakpoint-medium - 1px)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-tiny-down() {
+@mixin media-breakpoint-tiny-down {
     @media (max-width: ($major-breakpoint-small - 1px)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-xxlarge-up() {
+@mixin media-breakpoint-xxlarge-up {
     @media (min-width: ($major-breakpoint-xxlarge)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-xlarge-up() {
+@mixin media-breakpoint-xlarge-up {
     @media (min-width: ($major-breakpoint-xlarge)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-large-up() {
+@mixin media-breakpoint-large-up {
     @media (min-width: ($major-breakpoint-large)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-medium-up() {
+@mixin media-breakpoint-medium-up {
     @media (min-width: ($major-breakpoint-medium)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-small-up() {
+@mixin media-breakpoint-small-up {
     @media (min-width: ($major-breakpoint-small)) {
         @content;
     }
 }
 
-@mixin media-breakpoint-tiny-up() {
+@mixin media-breakpoint-tiny-up {
     @content;
 }
 
-@mixin sidebar-breakpoint-down() {
+@mixin sidebar-breakpoint-down {
     @media (max-width: ($minor-breakpoint-sidebar-fullscreen)) {
         @content;
     }
 }
 
 @mixin hidden-xxlarge-down {
-    @include media-breakpoint-xxlarge-down() {
+    @include media-breakpoint-xxlarge-down {
         display: none !important;
     }
 }
 
 @mixin hidden-xxlarge-up {
-    @include media-breakpoint-xxlarge-up() {
+    @include media-breakpoint-xxlarge-up {
         display: none !important;
     }
 }
 
 @mixin hidden-xlarge-down {
-    @include media-breakpoint-xlarge-down() {
+    @include media-breakpoint-xlarge-down {
         display: none !important;
     }
 }
 
 @mixin hidden-xlarge-up {
-    @include media-breakpoint-xlarge-up() {
+    @include media-breakpoint-xlarge-up {
         display: none !important;
     }
 }
 
 @mixin hidden-large-down {
-    @include media-breakpoint-large-down() {
+    @include media-breakpoint-large-down {
         display: none !important;
     }
 }
 
 @mixin hidden-large-up {
-    @include media-breakpoint-large-up() {
+    @include media-breakpoint-large-up {
         display: none !important;
     }
 }
 
 @mixin hidden-medium-down {
-    @include media-breakpoint-medium-down() {
+    @include media-breakpoint-medium-down {
         display: none !important;
     }
 }
 
 @mixin hidden-medium-up {
-    @include media-breakpoint-medium-up() {
+    @include media-breakpoint-medium-up {
         display: none !important;
     }
 }
 
 @mixin hidden-small-down {
-    @include media-breakpoint-small-down() {
+    @include media-breakpoint-small-down {
         display: none !important;
     }
 }
 
 @mixin hidden-small-up {
-    @include media-breakpoint-small-up() {
+    @include media-breakpoint-small-up {
         display: none !important;
     }
 }
 
 @mixin hidden-tiny-down {
-    @include media-breakpoint-tiny-down() {
+    @include media-breakpoint-tiny-down {
         display: none !important;
     }
 }
 
 @mixin hidden-tiny-up {
-    @include media-breakpoint-tiny-up() {
+    @include media-breakpoint-tiny-up {
         display: none !important;
     }
 }
 
 
 .hidden-xxlarge-down {
-    @include media-breakpoint-xxlarge-down() {
+    @include media-breakpoint-xxlarge-down {
         display: none !important;
     }
 }
 
 .hidden-xxlarge-up {
-    @include media-breakpoint-xxlarge-up() {
+    @include media-breakpoint-xxlarge-up {
         display: none !important;
     }
 ;
 }
 
 .hidden-xlarge-down {
-    @include media-breakpoint-xlarge-down() {
+    @include media-breakpoint-xlarge-down {
         display: none !important;
     }
 }
 
 .hidden-xxlarge-up {
-    @include media-breakpoint-large-up() {
+    @include media-breakpoint-large-up {
         display: none !important;
     }
 }
 
 .hidden-large-down {
-    @include media-breakpoint-large-down() {
+    @include media-breakpoint-large-down {
         display: none !important;
     }
 }
 
 .hidden-large-up {
-    @include media-breakpoint-large-up() {
+    @include media-breakpoint-large-up {
         display: none !important;
     }
 }
 
 .hidden-medium-down {
-    @include media-breakpoint-medium-down() {
+    @include media-breakpoint-medium-down {
         display: none !important;
     }
 }
 
 .hidden-medium-up {
-    @include media-breakpoint-medium-up() {
+    @include media-breakpoint-medium-up {
         display: none !important;
     }
 }
 
 .hidden-small-down {
-    @include media-breakpoint-small-down() {
+    @include media-breakpoint-small-down {
         display: none !important;
     }
 }
 
 .hidden-small-up {
-    @include media-breakpoint-small-up() {
+    @include media-breakpoint-small-up {
         display: none !important;
     }
 }
 
 .hidden-tiny-down {
-    @include media-breakpoint-tiny-down() {
+    @include media-breakpoint-tiny-down {
         display: none !important;
     }
 }
 
 .hidden-tiny-up {
-    @include media-breakpoint-tiny-up() {
+    @include media-breakpoint-tiny-up {
         display: none !important;
     }
 }
diff --git a/resources/assets/stylesheets/scss/wizard.scss b/resources/assets/stylesheets/scss/wizard.scss
index 6c5f81e8141b22986f03a584936b68dcd028a448..4a9fd5d3ba71388ee5779df338e30c730154ef25 100644
--- a/resources/assets/stylesheets/scss/wizard.scss
+++ b/resources/assets/stylesheets/scss/wizard.scss
@@ -241,7 +241,7 @@ form.default fieldset.radiobutton-set {
     }
 }
 
-@include media-breakpoint-small-down() {
+@include media-breakpoint-small-down {
     .wizard-wrapper {
 
         .wizard-meta {
@@ -260,7 +260,7 @@ form.default fieldset.radiobutton-set {
     }
 }
 
-@include media-breakpoint-tiny-down() {
+@include media-breakpoint-tiny-down {
     .wizard-wrapper {
         .wizard-meta {
             display: none;
diff --git a/resources/assets/stylesheets/statusgroups.scss b/resources/assets/stylesheets/statusgroups.scss
index dc82127495a0f282d1568c7353468693dbec1007..44e4b3d1044084f02889adf46e619d5e3b5b1937 100644
--- a/resources/assets/stylesheets/statusgroups.scss
+++ b/resources/assets/stylesheets/statusgroups.scss
@@ -1,4 +1,4 @@
-@import "mixins.scss";
+@import "mixins";
 @import "vendor/jquery-nestable.css";
 
 .tree-seperator {
diff --git a/resources/assets/stylesheets/studip.scss b/resources/assets/stylesheets/studip.scss
index 4713c32d8960d9c7125fbe932eacadd2838c4509..624e99a43265362a9321f481bdaea9ae2d701ae6 100644
--- a/resources/assets/stylesheets/studip.scss
+++ b/resources/assets/stylesheets/studip.scss
@@ -19,7 +19,7 @@
 @import "scss/avatar";
 @import "scss/badges";
 @import "scss/big-image-handler";
-@import "scss/blockquote.scss";
+@import "scss/blockquote";
 @import "scss/blubber";
 @import "scss/buttons";
 @import "scss/calendar";
@@ -56,7 +56,7 @@
 @import "scss/globalsearch";
 @import "scss/links";
 @import "scss/lists";
-@import "scss/loading-skeleton.scss";
+@import "scss/loading-skeleton";
 @import "scss/messages";
 @import "scss/messagebox";
 @import "scss/my_courses";
@@ -71,7 +71,7 @@
 @import "scss/personal-notifications";
 @import "scss/plugins";
 @import "scss/plus";
-@import "scss/progress_indicator.scss";
+@import "scss/progress_indicator";
 @import "scss/profile";
 @import "scss/qrcode";
 @import "scss/questionnaire";
@@ -287,7 +287,7 @@ td.index_box_cell {
     .buttons {
         font-size: 0.75em;
 
-        @include clearfix();
+        @include clearfix;
         margin: 0 !important;  // Locked since .buttons is pretty generic
         padding: 0 !important; // and other styles could easily interfere
 
@@ -526,7 +526,7 @@ div.info { padding-left: 1%; }
         flex-basis: 300px;
         margin-left: 10px;
         &:first-child {
-            margin-left: 0px;
+            margin-left: 0;
         }
     }
 }
diff --git a/resources/vue/components/MyCoursesTiles.vue b/resources/vue/components/MyCoursesTiles.vue
index c530fd15f79d487e71bb71fa2443a762420d5afa..1649238afb78c4095f332d3a1f8716979208da78 100644
--- a/resources/vue/components/MyCoursesTiles.vue
+++ b/resources/vue/components/MyCoursesTiles.vue
@@ -158,10 +158,10 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-@use '../../assets/stylesheets/mixins.scss';
-@use '../../assets/stylesheets/scss/breakpoints.scss' as *;
-@use '../../assets/stylesheets/scss/variables.scss';
-@import '../../assets/stylesheets/scss/visibility.scss'; // Needs to be imported (breakpoint variables are missing)
+@use '../../assets/stylesheets/mixins';
+@use '../../assets/stylesheets/scss/breakpoints' as *;
+@use '../../assets/stylesheets/scss/variables';
+@import '../../assets/stylesheets/scss/visibility'; // Needs to be imported (breakpoint variables are missing)
 
 $tile-border-width: 1px;
 $tile-color-width: 15px;
diff --git a/resources/vue/components/courseware/blocks/CoursewareAudioBlock.vue b/resources/vue/components/courseware/blocks/CoursewareAudioBlock.vue
index 4789c9fa1096d9eee6dcca0a1fe5193c056cf966..676aac52c0c15f6fcaa0ab5f8d10ec9e87794413 100644
--- a/resources/vue/components/courseware/blocks/CoursewareAudioBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareAudioBlock.vue
@@ -1014,5 +1014,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/audio.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/audio';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareBiographyAchievementsBlock.vue b/resources/vue/components/courseware/blocks/CoursewareBiographyAchievementsBlock.vue
index 07872d89cce93a0ac785f9bb9ec25d33dcca8615..6f45407c7b4f589dfbdffdd45a5c0ac53e32b9a1 100644
--- a/resources/vue/components/courseware/blocks/CoursewareBiographyAchievementsBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareBiographyAchievementsBlock.vue
@@ -196,5 +196,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-    @import "../../../../assets/stylesheets/scss/courseware/blocks/biography.scss";
-</style>
\ No newline at end of file
+    @import "../../../../assets/stylesheets/scss/courseware/blocks/biography";
+</style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareBiographyCareerBlock.vue b/resources/vue/components/courseware/blocks/CoursewareBiographyCareerBlock.vue
index c38394752dbf0f6077668c73c3dcfec74605749d..05bd06370b420291422a1cfc0753a2c25e837872 100644
--- a/resources/vue/components/courseware/blocks/CoursewareBiographyCareerBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareBiographyCareerBlock.vue
@@ -11,7 +11,7 @@
         >
             <template #content>
                 <ol class="cw-timeline">
-                    <li 
+                    <li
                         v-for="(item, index) in sortedItems"
                         :key="index"
                         class="cw-timeline-item"
@@ -254,6 +254,6 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-    @import "../../../../assets/stylesheets/scss/courseware/blocks/timeline.scss";
-    @import "../../../../assets/stylesheets/scss/courseware/blocks/biography.scss";
-</style>
\ No newline at end of file
+    @import "../../../../assets/stylesheets/scss/courseware/blocks/timeline";
+    @import "../../../../assets/stylesheets/scss/courseware/blocks/biography";
+</style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareBiographyGoalsBlock.vue b/resources/vue/components/courseware/blocks/CoursewareBiographyGoalsBlock.vue
index 0dbf881f3fb0b5cd28dea5316e45957002d2c597..cba078fdbac8f8e953c9723ca5f4bd609ba83a22 100644
--- a/resources/vue/components/courseware/blocks/CoursewareBiographyGoalsBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareBiographyGoalsBlock.vue
@@ -132,5 +132,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-    @import "../../../../assets/stylesheets/scss/courseware/blocks/biography.scss";
-</style>
\ No newline at end of file
+    @import "../../../../assets/stylesheets/scss/courseware/blocks/biography";
+</style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareBiographyPersonalInformationBlock.vue b/resources/vue/components/courseware/blocks/CoursewareBiographyPersonalInformationBlock.vue
index 8de1843ff91c826d8b842541edcff1b0c83dc245..2cc8e868e36d0cd9c710a4b0e572b8b3ae87cc06 100644
--- a/resources/vue/components/courseware/blocks/CoursewareBiographyPersonalInformationBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareBiographyPersonalInformationBlock.vue
@@ -182,5 +182,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-    @import "../../../../assets/stylesheets/scss/courseware/blocks/biography.scss";
-</style>
\ No newline at end of file
+    @import "../../../../assets/stylesheets/scss/courseware/blocks/biography";
+</style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareCanvasBlock.vue b/resources/vue/components/courseware/blocks/CoursewareCanvasBlock.vue
index 49c9cfc1f0f5ae0d3b6b7c3a7a73f3ba6460f7ce..b46a08fba457f48aaf2c00f377aa421a0268da1b 100644
--- a/resources/vue/components/courseware/blocks/CoursewareCanvasBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareCanvasBlock.vue
@@ -706,5 +706,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/canvas.scss';
-</style>
\ No newline at end of file
+@import '../../../../assets/stylesheets/scss/courseware/blocks/canvas';
+</style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareCodeBlock.vue b/resources/vue/components/courseware/blocks/CoursewareCodeBlock.vue
index a0dd11543b98b9c4664c88526fb1a5da5036dc2c..465ad41fe719b1297cddfdd72a7a710570ea10a0 100644
--- a/resources/vue/components/courseware/blocks/CoursewareCodeBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareCodeBlock.vue
@@ -95,5 +95,5 @@ export default {
 };
 </script>
 <style lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/code.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/code';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareConfirmBlock.vue b/resources/vue/components/courseware/blocks/CoursewareConfirmBlock.vue
index 60d9ae154c46d9a531a8f9a69b7d3af0bed7b2d8..caf31613b3c7aad239479a11534b1d6582dcc368 100644
--- a/resources/vue/components/courseware/blocks/CoursewareConfirmBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareConfirmBlock.vue
@@ -114,5 +114,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/confirm.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/confirm';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareDateBlock.vue b/resources/vue/components/courseware/blocks/CoursewareDateBlock.vue
index 7fbc1b24e330925431f46a47b26b0d4995eccba4..4b2cc2db16554376481e7e70b3ffa7a5e64134cd 100644
--- a/resources/vue/components/courseware/blocks/CoursewareDateBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareDateBlock.vue
@@ -201,5 +201,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/date.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/date';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareDialogCardsBlock.vue b/resources/vue/components/courseware/blocks/CoursewareDialogCardsBlock.vue
index 1847c6d86f5f026410f10a23e017467b99d3ba9f..eb0240944aca7ea7f82d60ab680e47c38139bd75 100644
--- a/resources/vue/components/courseware/blocks/CoursewareDialogCardsBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareDialogCardsBlock.vue
@@ -298,5 +298,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/dialog-cards.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/dialog-cards';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareDocumentBlock.vue b/resources/vue/components/courseware/blocks/CoursewareDocumentBlock.vue
index 55e7b01c547931fc3b8e72936eac4ecbd11308da..26d8c261795cc6a2292b47d23c5f4aaad1d75589 100644
--- a/resources/vue/components/courseware/blocks/CoursewareDocumentBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareDocumentBlock.vue
@@ -832,5 +832,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/document.scss';
-</style>
\ No newline at end of file
+@import '../../../../assets/stylesheets/scss/courseware/blocks/document';
+</style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareDownloadBlock.vue b/resources/vue/components/courseware/blocks/CoursewareDownloadBlock.vue
index 0207acab4d0dc54caddb84df9664996bf2da1fa8..bb24534b6ab08f92304112afaeb213cb7dfb22c5 100644
--- a/resources/vue/components/courseware/blocks/CoursewareDownloadBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareDownloadBlock.vue
@@ -282,5 +282,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/files.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/files';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareEmbedBlock.vue b/resources/vue/components/courseware/blocks/CoursewareEmbedBlock.vue
index de1f833830ed399acc51d23a2fd41af409478fe4..d3c32c8a51c7708a98647ad652c55afbfba540d4 100644
--- a/resources/vue/components/courseware/blocks/CoursewareEmbedBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareEmbedBlock.vue
@@ -248,5 +248,5 @@ export default {
 };
 </script>
 <style lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/embed.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/embed';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareFolderBlock.vue b/resources/vue/components/courseware/blocks/CoursewareFolderBlock.vue
index 239556c2fd2805f7893ce9d5997811352ed8f1b2..a9e445c9088ff4d7948be8308599608670e0205e 100644
--- a/resources/vue/components/courseware/blocks/CoursewareFolderBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareFolderBlock.vue
@@ -377,5 +377,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/files.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/files';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareGalleryBlock.vue b/resources/vue/components/courseware/blocks/CoursewareGalleryBlock.vue
index 9a32689998b0813629e60daae75dbd531561460a..1af78bf7bffe86e8fbe2b7a5ea1e462568503076 100644
--- a/resources/vue/components/courseware/blocks/CoursewareGalleryBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareGalleryBlock.vue
@@ -396,5 +396,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/gallery.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/gallery';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareHeadlineBlock.vue b/resources/vue/components/courseware/blocks/CoursewareHeadlineBlock.vue
index 3d992f68ac775a8c26d49cf353e5afeedb8fdb03..5a7f9e5e6cd5ffd78ae2109196788adb6963142a 100644
--- a/resources/vue/components/courseware/blocks/CoursewareHeadlineBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareHeadlineBlock.vue
@@ -629,5 +629,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-    @import "../../../../assets/stylesheets/scss/courseware/blocks/headline.scss";
+@import "../../../../assets/stylesheets/scss/courseware/blocks/headline";
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue b/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue
index 49ea664e4b4a1fcdfbb8396f2035667fe92a974d..bea1fe9ca5a348ab952d17726c314c1ed16ab1d3 100644
--- a/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareIframeBlock.vue
@@ -281,5 +281,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/iframe.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/iframe';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareImageMapBlock.vue b/resources/vue/components/courseware/blocks/CoursewareImageMapBlock.vue
index 4fd312870a07020df4822df2b882c0b78e66dc50..31b4e845a77d3b329410d0250c4cbb52ebba25d9 100644
--- a/resources/vue/components/courseware/blocks/CoursewareImageMapBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareImageMapBlock.vue
@@ -814,5 +814,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/image-map.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/image-map';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareKeyPointBlock.vue b/resources/vue/components/courseware/blocks/CoursewareKeyPointBlock.vue
index 55bf2a9e71156f3e6c3ef3229562e87916c30a9d..69671f770afeb9b3ae0a6043f3306870056c4701 100644
--- a/resources/vue/components/courseware/blocks/CoursewareKeyPointBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareKeyPointBlock.vue
@@ -190,5 +190,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/keypoint.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/keypoint';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareLinkBlock.vue b/resources/vue/components/courseware/blocks/CoursewareLinkBlock.vue
index b87b29b2146c8e73522daac1e4a6824beef3de7b..78d17dca05cbc71220c0fd1a1297897ae0809a6f 100644
--- a/resources/vue/components/courseware/blocks/CoursewareLinkBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareLinkBlock.vue
@@ -209,7 +209,7 @@ export default {
             let empty = false;
             let info = '';
             let defaultTitle = '';
-                
+
             switch (this.currentType) {
                 case 'external':
                     info = this.$gettext('Bitte wählen Sie eine URL als Ziel aus.');
@@ -218,7 +218,7 @@ export default {
                     this.currentUnitTarget = '';
                     this.currentTitle = this.currentTitle || this.currentUrl;
                     break;
-                case 'internal': 
+                case 'internal':
                     info = this.$gettext('Bitte wählen Sie eine Seite als Ziel aus.');
                     empty = this.currentTarget === '';
                     if (!empty) {
@@ -288,5 +288,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/link.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/link';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareLtiBlock.vue b/resources/vue/components/courseware/blocks/CoursewareLtiBlock.vue
index 91965015964c4d459f1ec8cb6a787460c0efa477..0ccf9b6ca631828d1a493fc71a387ae8fe94647e 100644
--- a/resources/vue/components/courseware/blocks/CoursewareLtiBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareLtiBlock.vue
@@ -296,5 +296,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/lti.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/lti';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareTableOfContentsBlock.vue b/resources/vue/components/courseware/blocks/CoursewareTableOfContentsBlock.vue
index 4330f13acd489bdb978e7ddacb2ff95273c35bcd..78673fa2b10eee676408873a6ddab94fdb6633c7 100644
--- a/resources/vue/components/courseware/blocks/CoursewareTableOfContentsBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareTableOfContentsBlock.vue
@@ -204,5 +204,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/table-of-contents.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/table-of-contents';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareTextBlock.vue b/resources/vue/components/courseware/blocks/CoursewareTextBlock.vue
index ef351092e29cc1897f8296d8d9fa8660d29627c5..411b8b790db2d7c50300f29ff8e63dbb7dbb642e 100644
--- a/resources/vue/components/courseware/blocks/CoursewareTextBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareTextBlock.vue
@@ -113,5 +113,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/text.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/text';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareTimelineBlock.vue b/resources/vue/components/courseware/blocks/CoursewareTimelineBlock.vue
index 1f305f8f0668ce1994ca574b87708058ffb15b6c..bdc3d8023152da7fc322c2e948dd0990d8649108 100644
--- a/resources/vue/components/courseware/blocks/CoursewareTimelineBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareTimelineBlock.vue
@@ -303,5 +303,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/timeline.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/timeline';
 </style>
diff --git a/resources/vue/components/courseware/blocks/CoursewareTypewriterBlock.vue b/resources/vue/components/courseware/blocks/CoursewareTypewriterBlock.vue
index ab7f7c5dd63d7b39303f8ff156c2622f645eaf7f..c983bb841ababc15b43e8179010be9b149008942 100644
--- a/resources/vue/components/courseware/blocks/CoursewareTypewriterBlock.vue
+++ b/resources/vue/components/courseware/blocks/CoursewareTypewriterBlock.vue
@@ -152,5 +152,5 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-@import '../../../../assets/stylesheets/scss/courseware/blocks/typewriter.scss';
+@import '../../../../assets/stylesheets/scss/courseware/blocks/typewriter';
 </style>
diff --git a/resources/vue/components/stock-images/ZipUploadDialog.vue b/resources/vue/components/stock-images/ZipUploadDialog.vue
index 102be161592ce55dba313b713a95ef0e6a9ea1fa..36a0d5af8bad4f7980c5e7a4a6629a376b958984 100644
--- a/resources/vue/components/stock-images/ZipUploadDialog.vue
+++ b/resources/vue/components/stock-images/ZipUploadDialog.vue
@@ -59,6 +59,6 @@ export default {
 };
 </script>
 <style lang="scss">
-@import url('./../../../assets/stylesheets/scss/courseware/layouts/input-file.scss');
+@import './../../../assets/stylesheets/scss/courseware/layouts/input-file';
 
 </style>