diff --git a/.prettierrc b/.prettierrc
index a77fdde..9573023 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -4,6 +4,5 @@
 	"trailingComma": "none",
 	"printWidth": 100,
 	"plugins": ["prettier-plugin-svelte"],
-	"pluginSearchDirs": ["."],
 	"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
 }
diff --git a/package-lock.json b/package-lock.json
index 95f09e9..e9963d8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,39 +10,39 @@
 			"dependencies": {
 				"bcrypt": "^5.1.1",
 				"dotenv": "^16.3.1",
-				"mariadb": "^3.2.0",
-				"sequelize": "^6.32.1",
-				"sequelize-typescript": "^2.1.5",
+				"mariadb": "^3.2.2",
+				"sequelize": "^6.35.1",
+				"sequelize-typescript": "^2.1.6",
 				"sqlite3": "^5.1.6"
 			},
 			"devDependencies": {
 				"@sveltejs/adapter-node": "^1.3.1",
-				"@sveltejs/kit": "^1.20.4",
-				"@types/bcrypt": "^5.0.0",
-				"@types/node": "^20.5.6",
-				"@types/validator": "^13.11.1",
-				"@typescript-eslint/eslint-plugin": "^5.45.0",
-				"@typescript-eslint/parser": "^5.45.0",
-				"autoprefixer": "^10.4.14",
-				"daisyui": "^4.4.10",
-				"eslint": "^8.28.0",
-				"eslint-config-prettier": "^8.5.0",
-				"eslint-plugin-svelte": "^2.30.0",
-				"postcss": "^8.4.27",
-				"prettier": "^2.8.8",
-				"prettier-plugin-svelte": "^2.10.1",
-				"sass": "^1.66.1",
-				"svelte": "^4.0.5",
-				"svelte-check": "^3.4.3",
-				"svelte-heros-v2": "^0.9.3",
-				"svelte-local-storage-store": "^0.6.0",
+				"@sveltejs/kit": "^1.27.6",
+				"@types/bcrypt": "^5.0.2",
+				"@types/node": "^20.10.0",
+				"@types/validator": "^13.11.7",
+				"@typescript-eslint/eslint-plugin": "^6.13.1",
+				"@typescript-eslint/parser": "^6.13.1",
+				"autoprefixer": "^10.4.16",
+				"daisyui": "^4.4.14",
+				"eslint": "^8.54.0",
+				"eslint-config-prettier": "^9.0.0",
+				"eslint-plugin-svelte": "^2.35.1",
+				"postcss": "^8.4.31",
+				"prettier": "^3.1.0",
+				"prettier-plugin-svelte": "^3.1.2",
+				"sass": "^1.69.5",
+				"svelte": "^4.2.7",
+				"svelte-check": "^3.6.2",
+				"svelte-heros-v2": "^0.10.12",
+				"svelte-local-storage-store": "^0.6.4",
 				"svelte-multicssclass": "^2.1.1",
-				"svelte-preprocess": "^5.0.4",
-				"tailwindcss": "^3.3.3",
-				"tslib": "^2.4.1",
-				"typescript": "^5.0.0",
-				"vite": "^4.4.2",
-				"vitest": "^0.34.1"
+				"svelte-preprocess": "^5.1.1",
+				"tailwindcss": "^3.3.5",
+				"tslib": "^2.6.2",
+				"typescript": "^5.3.2",
+				"vite": "^4.5.0",
+				"vitest": "^0.34.6"
 			}
 		},
 		"node_modules/@aashutoshrathi/word-wrap": {
@@ -456,9 +456,9 @@
 			}
 		},
 		"node_modules/@eslint/eslintrc": {
-			"version": "2.1.1",
-			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz",
-			"integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==",
+			"version": "2.1.3",
+			"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+			"integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
 			"dev": true,
 			"dependencies": {
 				"ajv": "^6.12.4",
@@ -479,14 +479,23 @@
 			}
 		},
 		"node_modules/@eslint/js": {
-			"version": "8.46.0",
-			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz",
-			"integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==",
+			"version": "8.54.0",
+			"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz",
+			"integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==",
 			"dev": true,
 			"engines": {
 				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
 			}
 		},
+		"node_modules/@fastify/busboy": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz",
+			"integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==",
+			"dev": true,
+			"engines": {
+				"node": ">=14"
+			}
+		},
 		"node_modules/@gar/promisify": {
 			"version": "1.1.3",
 			"resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
@@ -494,12 +503,12 @@
 			"optional": true
 		},
 		"node_modules/@humanwhocodes/config-array": {
-			"version": "0.11.10",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
-			"integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
+			"version": "0.11.13",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+			"integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
 			"dev": true,
 			"dependencies": {
-				"@humanwhocodes/object-schema": "^1.2.1",
+				"@humanwhocodes/object-schema": "^2.0.1",
 				"debug": "^4.1.1",
 				"minimatch": "^3.0.5"
 			},
@@ -521,15 +530,15 @@
 			}
 		},
 		"node_modules/@humanwhocodes/object-schema": {
-			"version": "1.2.1",
-			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-			"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+			"integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
 			"dev": true
 		},
 		"node_modules/@jest/schemas": {
-			"version": "29.6.0",
-			"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz",
-			"integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==",
+			"version": "29.6.3",
+			"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+			"integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
 			"dev": true,
 			"dependencies": {
 				"@sinclair/typebox": "^0.27.8"
@@ -875,24 +884,25 @@
 			}
 		},
 		"node_modules/@sveltejs/kit": {
-			"version": "1.22.4",
-			"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.22.4.tgz",
-			"integrity": "sha512-Opkqw1QXk4Cc25b/heJP2D7mX+OUBFAq4MXKfET58svTTxdeiHFKzmnuRsSF3nmxESqrLjqPAgHpib+knNGzRw==",
+			"version": "1.27.6",
+			"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.27.6.tgz",
+			"integrity": "sha512-GsjTkMbKzXdbeRg0tk8S7HNShQ4879ftRr0ZHaZfjbig1xQwG57Bvcm9U9/mpLJtCapLbLWUnygKrgcLISLC8A==",
 			"dev": true,
 			"hasInstallScript": true,
 			"dependencies": {
-				"@sveltejs/vite-plugin-svelte": "^2.4.1",
+				"@sveltejs/vite-plugin-svelte": "^2.5.0",
 				"@types/cookie": "^0.5.1",
 				"cookie": "^0.5.0",
 				"devalue": "^4.3.1",
 				"esm-env": "^1.0.0",
 				"kleur": "^4.1.5",
 				"magic-string": "^0.30.0",
-				"mime": "^3.0.0",
+				"mrmime": "^1.0.1",
 				"sade": "^1.8.1",
 				"set-cookie-parser": "^2.6.0",
 				"sirv": "^2.0.2",
-				"undici": "~5.22.0"
+				"tiny-glob": "^0.2.9",
+				"undici": "~5.26.2"
 			},
 			"bin": {
 				"svelte-kit": "svelte-kit.js"
@@ -901,36 +911,36 @@
 				"node": "^16.14 || >=18"
 			},
 			"peerDependencies": {
-				"svelte": "^3.54.0 || ^4.0.0-next.0",
+				"svelte": "^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0",
 				"vite": "^4.0.0"
 			}
 		},
 		"node_modules/@sveltejs/vite-plugin-svelte": {
-			"version": "2.4.3",
-			"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.3.tgz",
-			"integrity": "sha512-NY2h+B54KHZO3kDURTdARqthn6D4YSIebtfW75NvZ/fwyk4G+AJw3V/i0OBjyN4406Ht9yZcnNWMuRUFnDNNiA==",
+			"version": "2.5.3",
+			"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.5.3.tgz",
+			"integrity": "sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==",
 			"dev": true,
 			"dependencies": {
-				"@sveltejs/vite-plugin-svelte-inspector": "^1.0.3",
+				"@sveltejs/vite-plugin-svelte-inspector": "^1.0.4",
 				"debug": "^4.3.4",
 				"deepmerge": "^4.3.1",
 				"kleur": "^4.1.5",
-				"magic-string": "^0.30.1",
-				"svelte-hmr": "^0.15.2",
+				"magic-string": "^0.30.3",
+				"svelte-hmr": "^0.15.3",
 				"vitefu": "^0.2.4"
 			},
 			"engines": {
 				"node": "^14.18.0 || >= 16"
 			},
 			"peerDependencies": {
-				"svelte": "^3.54.0 || ^4.0.0",
+				"svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0",
 				"vite": "^4.0.0"
 			}
 		},
 		"node_modules/@sveltejs/vite-plugin-svelte-inspector": {
-			"version": "1.0.3",
-			"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz",
-			"integrity": "sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==",
+			"version": "1.0.4",
+			"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz",
+			"integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==",
 			"dev": true,
 			"dependencies": {
 				"debug": "^4.3.4"
@@ -944,6 +954,18 @@
 				"vite": "^4.0.0"
 			}
 		},
+		"node_modules/@sveltejs/vite-plugin-svelte/node_modules/magic-string": {
+			"version": "0.30.5",
+			"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
+			"integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+			"dev": true,
+			"dependencies": {
+				"@jridgewell/sourcemap-codec": "^1.4.15"
+			},
+			"engines": {
+				"node": ">=12"
+			}
+		},
 		"node_modules/@tootallnate/once": {
 			"version": "1.1.2",
 			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -954,9 +976,9 @@
 			}
 		},
 		"node_modules/@types/bcrypt": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz",
-			"integrity": "sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==",
+			"version": "5.0.2",
+			"resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.2.tgz",
+			"integrity": "sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==",
 			"dev": true,
 			"dependencies": {
 				"@types/node": "*"
@@ -1003,9 +1025,9 @@
 			"integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA=="
 		},
 		"node_modules/@types/json-schema": {
-			"version": "7.0.12",
-			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
-			"integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
+			"version": "7.0.15",
+			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+			"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
 			"dev": true
 		},
 		"node_modules/@types/ms": {
@@ -1014,14 +1036,17 @@
 			"integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
 		},
 		"node_modules/@types/node": {
-			"version": "20.5.6",
-			"resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz",
-			"integrity": "sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ=="
+			"version": "20.10.0",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz",
+			"integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==",
+			"dependencies": {
+				"undici-types": "~5.26.4"
+			}
 		},
 		"node_modules/@types/pug": {
-			"version": "2.0.6",
-			"resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz",
-			"integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==",
+			"version": "2.0.10",
+			"resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz",
+			"integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==",
 			"dev": true
 		},
 		"node_modules/@types/resolve": {
@@ -1031,43 +1056,44 @@
 			"dev": true
 		},
 		"node_modules/@types/semver": {
-			"version": "7.5.0",
-			"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
-			"integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
+			"version": "7.5.6",
+			"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+			"integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
 			"dev": true
 		},
 		"node_modules/@types/validator": {
-			"version": "13.11.1",
-			"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz",
-			"integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A=="
+			"version": "13.11.7",
+			"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.7.tgz",
+			"integrity": "sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q=="
 		},
 		"node_modules/@typescript-eslint/eslint-plugin": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
-			"integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
+			"version": "6.13.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.1.tgz",
+			"integrity": "sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==",
 			"dev": true,
 			"dependencies": {
-				"@eslint-community/regexpp": "^4.4.0",
-				"@typescript-eslint/scope-manager": "5.62.0",
-				"@typescript-eslint/type-utils": "5.62.0",
-				"@typescript-eslint/utils": "5.62.0",
+				"@eslint-community/regexpp": "^4.5.1",
+				"@typescript-eslint/scope-manager": "6.13.1",
+				"@typescript-eslint/type-utils": "6.13.1",
+				"@typescript-eslint/utils": "6.13.1",
+				"@typescript-eslint/visitor-keys": "6.13.1",
 				"debug": "^4.3.4",
 				"graphemer": "^1.4.0",
-				"ignore": "^5.2.0",
-				"natural-compare-lite": "^1.4.0",
-				"semver": "^7.3.7",
-				"tsutils": "^3.21.0"
+				"ignore": "^5.2.4",
+				"natural-compare": "^1.4.0",
+				"semver": "^7.5.4",
+				"ts-api-utils": "^1.0.1"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^16.0.0 || >=18.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
 				"url": "https://opencollective.com/typescript-eslint"
 			},
 			"peerDependencies": {
-				"@typescript-eslint/parser": "^5.0.0",
-				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+				"@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
+				"eslint": "^7.0.0 || ^8.0.0"
 			},
 			"peerDependenciesMeta": {
 				"typescript": {
@@ -1076,25 +1102,26 @@
 			}
 		},
 		"node_modules/@typescript-eslint/parser": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
-			"integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+			"version": "6.13.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.1.tgz",
+			"integrity": "sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/scope-manager": "5.62.0",
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/typescript-estree": "5.62.0",
+				"@typescript-eslint/scope-manager": "6.13.1",
+				"@typescript-eslint/types": "6.13.1",
+				"@typescript-eslint/typescript-estree": "6.13.1",
+				"@typescript-eslint/visitor-keys": "6.13.1",
 				"debug": "^4.3.4"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^16.0.0 || >=18.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
 				"url": "https://opencollective.com/typescript-eslint"
 			},
 			"peerDependencies": {
-				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+				"eslint": "^7.0.0 || ^8.0.0"
 			},
 			"peerDependenciesMeta": {
 				"typescript": {
@@ -1103,16 +1130,16 @@
 			}
 		},
 		"node_modules/@typescript-eslint/scope-manager": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
-			"integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+			"version": "6.13.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.1.tgz",
+			"integrity": "sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0"
+				"@typescript-eslint/types": "6.13.1",
+				"@typescript-eslint/visitor-keys": "6.13.1"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^16.0.0 || >=18.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -1120,25 +1147,25 @@
 			}
 		},
 		"node_modules/@typescript-eslint/type-utils": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
-			"integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
+			"version": "6.13.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.1.tgz",
+			"integrity": "sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/typescript-estree": "5.62.0",
-				"@typescript-eslint/utils": "5.62.0",
+				"@typescript-eslint/typescript-estree": "6.13.1",
+				"@typescript-eslint/utils": "6.13.1",
 				"debug": "^4.3.4",
-				"tsutils": "^3.21.0"
+				"ts-api-utils": "^1.0.1"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^16.0.0 || >=18.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
 				"url": "https://opencollective.com/typescript-eslint"
 			},
 			"peerDependencies": {
-				"eslint": "*"
+				"eslint": "^7.0.0 || ^8.0.0"
 			},
 			"peerDependenciesMeta": {
 				"typescript": {
@@ -1147,12 +1174,12 @@
 			}
 		},
 		"node_modules/@typescript-eslint/types": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
-			"integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+			"version": "6.13.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.1.tgz",
+			"integrity": "sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==",
 			"dev": true,
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^16.0.0 || >=18.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -1160,21 +1187,21 @@
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
-			"integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+			"version": "6.13.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.1.tgz",
+			"integrity": "sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/visitor-keys": "5.62.0",
+				"@typescript-eslint/types": "6.13.1",
+				"@typescript-eslint/visitor-keys": "6.13.1",
 				"debug": "^4.3.4",
 				"globby": "^11.1.0",
 				"is-glob": "^4.0.3",
-				"semver": "^7.3.7",
-				"tsutils": "^3.21.0"
+				"semver": "^7.5.4",
+				"ts-api-utils": "^1.0.1"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^16.0.0 || >=18.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -1187,69 +1214,74 @@
 			}
 		},
 		"node_modules/@typescript-eslint/utils": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
-			"integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+			"version": "6.13.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.1.tgz",
+			"integrity": "sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==",
 			"dev": true,
 			"dependencies": {
-				"@eslint-community/eslint-utils": "^4.2.0",
-				"@types/json-schema": "^7.0.9",
-				"@types/semver": "^7.3.12",
-				"@typescript-eslint/scope-manager": "5.62.0",
-				"@typescript-eslint/types": "5.62.0",
-				"@typescript-eslint/typescript-estree": "5.62.0",
-				"eslint-scope": "^5.1.1",
-				"semver": "^7.3.7"
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"@types/json-schema": "^7.0.12",
+				"@types/semver": "^7.5.0",
+				"@typescript-eslint/scope-manager": "6.13.1",
+				"@typescript-eslint/types": "6.13.1",
+				"@typescript-eslint/typescript-estree": "6.13.1",
+				"semver": "^7.5.4"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^16.0.0 || >=18.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
 				"url": "https://opencollective.com/typescript-eslint"
 			},
 			"peerDependencies": {
-				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+				"eslint": "^7.0.0 || ^8.0.0"
 			}
 		},
 		"node_modules/@typescript-eslint/visitor-keys": {
-			"version": "5.62.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
-			"integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+			"version": "6.13.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.1.tgz",
+			"integrity": "sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "5.62.0",
-				"eslint-visitor-keys": "^3.3.0"
+				"@typescript-eslint/types": "6.13.1",
+				"eslint-visitor-keys": "^3.4.1"
 			},
 			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+				"node": "^16.0.0 || >=18.0.0"
 			},
 			"funding": {
 				"type": "opencollective",
 				"url": "https://opencollective.com/typescript-eslint"
 			}
 		},
+		"node_modules/@ungap/structured-clone": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+			"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+			"dev": true
+		},
 		"node_modules/@vitest/expect": {
-			"version": "0.34.1",
-			"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.1.tgz",
-			"integrity": "sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==",
+			"version": "0.34.6",
+			"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz",
+			"integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==",
 			"dev": true,
 			"dependencies": {
-				"@vitest/spy": "0.34.1",
-				"@vitest/utils": "0.34.1",
-				"chai": "^4.3.7"
+				"@vitest/spy": "0.34.6",
+				"@vitest/utils": "0.34.6",
+				"chai": "^4.3.10"
 			},
 			"funding": {
 				"url": "https://opencollective.com/vitest"
 			}
 		},
 		"node_modules/@vitest/runner": {
-			"version": "0.34.1",
-			"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.1.tgz",
-			"integrity": "sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==",
+			"version": "0.34.6",
+			"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz",
+			"integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==",
 			"dev": true,
 			"dependencies": {
-				"@vitest/utils": "0.34.1",
+				"@vitest/utils": "0.34.6",
 				"p-limit": "^4.0.0",
 				"pathe": "^1.1.1"
 			},
@@ -1285,9 +1317,9 @@
 			}
 		},
 		"node_modules/@vitest/snapshot": {
-			"version": "0.34.1",
-			"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.1.tgz",
-			"integrity": "sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==",
+			"version": "0.34.6",
+			"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz",
+			"integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==",
 			"dev": true,
 			"dependencies": {
 				"magic-string": "^0.30.1",
@@ -1299,9 +1331,9 @@
 			}
 		},
 		"node_modules/@vitest/spy": {
-			"version": "0.34.1",
-			"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.1.tgz",
-			"integrity": "sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==",
+			"version": "0.34.6",
+			"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz",
+			"integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==",
 			"dev": true,
 			"dependencies": {
 				"tinyspy": "^2.1.1"
@@ -1311,9 +1343,9 @@
 			}
 		},
 		"node_modules/@vitest/utils": {
-			"version": "0.34.1",
-			"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.1.tgz",
-			"integrity": "sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==",
+			"version": "0.34.6",
+			"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz",
+			"integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==",
 			"dev": true,
 			"dependencies": {
 				"diff-sequences": "^29.4.3",
@@ -1510,9 +1542,9 @@
 			}
 		},
 		"node_modules/autoprefixer": {
-			"version": "10.4.14",
-			"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
-			"integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
+			"version": "10.4.16",
+			"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
+			"integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
 			"dev": true,
 			"funding": [
 				{
@@ -1522,12 +1554,16 @@
 				{
 					"type": "tidelift",
 					"url": "https://tidelift.com/funding/github/npm/autoprefixer"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
 				}
 			],
 			"dependencies": {
-				"browserslist": "^4.21.5",
-				"caniuse-lite": "^1.0.30001464",
-				"fraction.js": "^4.2.0",
+				"browserslist": "^4.21.10",
+				"caniuse-lite": "^1.0.30001538",
+				"fraction.js": "^4.3.6",
 				"normalize-range": "^0.1.2",
 				"picocolors": "^1.0.0",
 				"postcss-value-parser": "^4.2.0"
@@ -1657,18 +1693,6 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
-		"node_modules/busboy": {
-			"version": "1.6.0",
-			"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
-			"integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
-			"dev": true,
-			"dependencies": {
-				"streamsearch": "^1.1.0"
-			},
-			"engines": {
-				"node": ">=10.16.0"
-			}
-		},
 		"node_modules/cac": {
 			"version": "6.7.14",
 			"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
@@ -1738,9 +1762,9 @@
 			}
 		},
 		"node_modules/caniuse-lite": {
-			"version": "1.0.30001518",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001518.tgz",
-			"integrity": "sha512-rup09/e3I0BKjncL+FesTayKtPrdwKhUufQFd3riFw1hHg8JmIFoInYfB102cFcY/pPgGmdyl/iy+jgiDi2vdA==",
+			"version": "1.0.30001565",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz",
+			"integrity": "sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==",
 			"dev": true,
 			"funding": [
 				{
@@ -1758,18 +1782,18 @@
 			]
 		},
 		"node_modules/chai": {
-			"version": "4.3.7",
-			"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
-			"integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
+			"version": "4.3.10",
+			"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz",
+			"integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==",
 			"dev": true,
 			"dependencies": {
 				"assertion-error": "^1.1.0",
-				"check-error": "^1.0.2",
-				"deep-eql": "^4.1.2",
-				"get-func-name": "^2.0.0",
-				"loupe": "^2.3.1",
+				"check-error": "^1.0.3",
+				"deep-eql": "^4.1.3",
+				"get-func-name": "^2.0.2",
+				"loupe": "^2.3.6",
 				"pathval": "^1.1.1",
-				"type-detect": "^4.0.5"
+				"type-detect": "^4.0.8"
 			},
 			"engines": {
 				"node": ">=4"
@@ -1792,10 +1816,13 @@
 			}
 		},
 		"node_modules/check-error": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
-			"integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
+			"integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
 			"dev": true,
+			"dependencies": {
+				"get-func-name": "^2.0.2"
+			},
 			"engines": {
 				"node": "*"
 			}
@@ -1988,9 +2015,9 @@
 			}
 		},
 		"node_modules/daisyui": {
-			"version": "4.4.10",
-			"resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.4.10.tgz",
-			"integrity": "sha512-NGDsOLtCQ9UzfeOUlKn1lwneQte4UoINmAaDBcrMAbZviu/jWm7PSR9DqH3eE/AY/TpkImdAPVK+kGsZlpEFkQ==",
+			"version": "4.4.14",
+			"resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.4.14.tgz",
+			"integrity": "sha512-1g37QzzDFM0QLQe+qRBswkGKyaGijk84t01UMg1ytkFhQxru3zeMh5nWcpC9KnqzKgnITkpSebpGqq4gP8zRrg==",
 			"dev": true,
 			"dependencies": {
 				"css-selector-tokenizer": "^0.8",
@@ -2101,9 +2128,9 @@
 			"dev": true
 		},
 		"node_modules/diff-sequences": {
-			"version": "29.4.3",
-			"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
-			"integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
+			"version": "29.6.3",
+			"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+			"integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
 			"dev": true,
 			"engines": {
 				"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -2255,18 +2282,19 @@
 			}
 		},
 		"node_modules/eslint": {
-			"version": "8.46.0",
-			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz",
-			"integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==",
+			"version": "8.54.0",
+			"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz",
+			"integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==",
 			"dev": true,
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.2.0",
 				"@eslint-community/regexpp": "^4.6.1",
-				"@eslint/eslintrc": "^2.1.1",
-				"@eslint/js": "^8.46.0",
-				"@humanwhocodes/config-array": "^0.11.10",
+				"@eslint/eslintrc": "^2.1.3",
+				"@eslint/js": "8.54.0",
+				"@humanwhocodes/config-array": "^0.11.13",
 				"@humanwhocodes/module-importer": "^1.0.1",
 				"@nodelib/fs.walk": "^1.2.8",
+				"@ungap/structured-clone": "^1.2.0",
 				"ajv": "^6.12.4",
 				"chalk": "^4.0.0",
 				"cross-spawn": "^7.0.2",
@@ -2274,7 +2302,7 @@
 				"doctrine": "^3.0.0",
 				"escape-string-regexp": "^4.0.0",
 				"eslint-scope": "^7.2.2",
-				"eslint-visitor-keys": "^3.4.2",
+				"eslint-visitor-keys": "^3.4.3",
 				"espree": "^9.6.1",
 				"esquery": "^1.4.2",
 				"esutils": "^2.0.2",
@@ -2308,10 +2336,22 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
+		"node_modules/eslint-compat-utils": {
+			"version": "0.1.2",
+			"resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz",
+			"integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			},
+			"peerDependencies": {
+				"eslint": ">=6.0.0"
+			}
+		},
 		"node_modules/eslint-config-prettier": {
-			"version": "8.9.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.9.0.tgz",
-			"integrity": "sha512-+sbni7NfVXnOpnRadUA8S28AUlsZt9GjgFvABIRL9Hkn8KqNzOp+7Lw4QWtrwn20KzU3wqu1QoOj2m+7rKRqkA==",
+			"version": "9.0.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+			"integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
 			"dev": true,
 			"bin": {
 				"eslint-config-prettier": "bin/cli.js"
@@ -2321,22 +2361,23 @@
 			}
 		},
 		"node_modules/eslint-plugin-svelte": {
-			"version": "2.32.4",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.32.4.tgz",
-			"integrity": "sha512-VJ12i2Iogug1jvhwxSlognnfGj76P5gks/V4pUD4SCSVQOp14u47MNP0zAG8AQR3LT0Fi1iUvIFnY4l9z5Rwbg==",
+			"version": "2.35.1",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.35.1.tgz",
+			"integrity": "sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==",
 			"dev": true,
 			"dependencies": {
 				"@eslint-community/eslint-utils": "^4.2.0",
 				"@jridgewell/sourcemap-codec": "^1.4.14",
 				"debug": "^4.3.1",
+				"eslint-compat-utils": "^0.1.2",
 				"esutils": "^2.0.3",
-				"known-css-properties": "^0.28.0",
+				"known-css-properties": "^0.29.0",
 				"postcss": "^8.4.5",
 				"postcss-load-config": "^3.1.4",
 				"postcss-safe-parser": "^6.0.0",
 				"postcss-selector-parser": "^6.0.11",
 				"semver": "^7.5.3",
-				"svelte-eslint-parser": "^0.32.2"
+				"svelte-eslint-parser": ">=0.33.0 <1.0.0"
 			},
 			"engines": {
 				"node": "^14.17.0 || >=16.0.0"
@@ -2355,31 +2396,6 @@
 			}
 		},
 		"node_modules/eslint-scope": {
-			"version": "5.1.1",
-			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-			"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-			"dev": true,
-			"dependencies": {
-				"esrecurse": "^4.3.0",
-				"estraverse": "^4.1.1"
-			},
-			"engines": {
-				"node": ">=8.0.0"
-			}
-		},
-		"node_modules/eslint-visitor-keys": {
-			"version": "3.4.2",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz",
-			"integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==",
-			"dev": true,
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			},
-			"funding": {
-				"url": "https://opencollective.com/eslint"
-			}
-		},
-		"node_modules/eslint/node_modules/eslint-scope": {
 			"version": "7.2.2",
 			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
 			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
@@ -2395,13 +2411,16 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
-		"node_modules/eslint/node_modules/estraverse": {
-			"version": "5.3.0",
-			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-			"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+		"node_modules/eslint-visitor-keys": {
+			"version": "3.4.3",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
 			"dev": true,
 			"engines": {
-				"node": ">=4.0"
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
 			}
 		},
 		"node_modules/esm-env": {
@@ -2439,15 +2458,6 @@
 				"node": ">=0.10"
 			}
 		},
-		"node_modules/esquery/node_modules/estraverse": {
-			"version": "5.3.0",
-			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-			"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-			"dev": true,
-			"engines": {
-				"node": ">=4.0"
-			}
-		},
 		"node_modules/esrecurse": {
 			"version": "4.3.0",
 			"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
@@ -2460,7 +2470,7 @@
 				"node": ">=4.0"
 			}
 		},
-		"node_modules/esrecurse/node_modules/estraverse": {
+		"node_modules/estraverse": {
 			"version": "5.3.0",
 			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
 			"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
@@ -2469,15 +2479,6 @@
 				"node": ">=4.0"
 			}
 		},
-		"node_modules/estraverse": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-			"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-			"dev": true,
-			"engines": {
-				"node": ">=4.0"
-			}
-		},
 		"node_modules/estree-walker": {
 			"version": "3.0.3",
 			"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
@@ -2617,16 +2618,16 @@
 			"dev": true
 		},
 		"node_modules/fraction.js": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-			"integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+			"version": "4.3.7",
+			"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+			"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
 			"dev": true,
 			"engines": {
 				"node": "*"
 			},
 			"funding": {
 				"type": "patreon",
-				"url": "https://www.patreon.com/infusion"
+				"url": "https://github.com/sponsors/rawify"
 			}
 		},
 		"node_modules/fs-minipass": {
@@ -2685,9 +2686,9 @@
 			}
 		},
 		"node_modules/get-func-name": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
-			"integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
+			"integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
 			"dev": true,
 			"engines": {
 				"node": "*"
@@ -2725,9 +2726,9 @@
 			}
 		},
 		"node_modules/globals": {
-			"version": "13.20.0",
-			"resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-			"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+			"version": "13.23.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+			"integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
 			"dev": true,
 			"dependencies": {
 				"type-fest": "^0.20.2"
@@ -2739,6 +2740,12 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/globalyzer": {
+			"version": "0.1.0",
+			"resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+			"integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
+			"dev": true
+		},
 		"node_modules/globby": {
 			"version": "11.1.0",
 			"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -2759,6 +2766,12 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/globrex": {
+			"version": "0.1.2",
+			"resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+			"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+			"dev": true
+		},
 		"node_modules/graceful-fs": {
 			"version": "4.2.11",
 			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -3094,9 +3107,9 @@
 			}
 		},
 		"node_modules/known-css-properties": {
-			"version": "0.28.0",
-			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz",
-			"integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==",
+			"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
 		},
 		"node_modules/levn": {
@@ -3172,12 +3185,12 @@
 			"dev": true
 		},
 		"node_modules/loupe": {
-			"version": "2.3.6",
-			"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
-			"integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
+			"version": "2.3.7",
+			"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
+			"integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
 			"dev": true,
 			"dependencies": {
-				"get-func-name": "^2.0.0"
+				"get-func-name": "^2.0.1"
 			}
 		},
 		"node_modules/lru-cache": {
@@ -3253,15 +3266,15 @@
 			}
 		},
 		"node_modules/mariadb": {
-			"version": "3.2.0",
-			"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.2.0.tgz",
-			"integrity": "sha512-IH2nidQat1IBMxP5gjuNxG6dADtz1PESEC6rKrcATen5v3ngFyZITjehyYiwNfz3zUNQupfYmVntz93M+Pz8pQ==",
+			"version": "3.2.2",
+			"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.2.2.tgz",
+			"integrity": "sha512-9ClJCFsLcK7WnPXVxuKGd7p0CBvNch3i5nwAf1HEqERj7RV60DG/0dJu4DfO33gpYQd9Cr4jq17O76/2VjSbkg==",
 			"dependencies": {
 				"@types/geojson": "^7946.0.10",
 				"@types/node": "^17.0.45",
 				"denque": "^2.1.0",
 				"iconv-lite": "^0.6.3",
-				"lru-cache": "^7.14.0"
+				"lru-cache": "^10.0.1"
 			},
 			"engines": {
 				"node": ">= 12"
@@ -3273,11 +3286,11 @@
 			"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
 		},
 		"node_modules/mariadb/node_modules/lru-cache": {
-			"version": "7.18.3",
-			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
-			"integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+			"version": "10.1.0",
+			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
+			"integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
 			"engines": {
-				"node": ">=12"
+				"node": "14 || >=16.14"
 			}
 		},
 		"node_modules/mdn-data": {
@@ -3308,18 +3321,6 @@
 				"node": ">=8.6"
 			}
 		},
-		"node_modules/mime": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
-			"integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
-			"dev": true,
-			"bin": {
-				"mime": "cli.js"
-			},
-			"engines": {
-				"node": ">=10.0.0"
-			}
-		},
 		"node_modules/min-indent": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
@@ -3450,15 +3451,15 @@
 			}
 		},
 		"node_modules/mlly": {
-			"version": "1.4.0",
-			"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz",
-			"integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==",
+			"version": "1.4.2",
+			"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz",
+			"integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==",
 			"dev": true,
 			"dependencies": {
-				"acorn": "^8.9.0",
+				"acorn": "^8.10.0",
 				"pathe": "^1.1.1",
 				"pkg-types": "^1.0.3",
-				"ufo": "^1.1.2"
+				"ufo": "^1.3.0"
 			}
 		},
 		"node_modules/moment": {
@@ -3538,12 +3539,6 @@
 			"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
 			"dev": true
 		},
-		"node_modules/natural-compare-lite": {
-			"version": "1.4.0",
-			"resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
-			"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
-			"dev": true
-		},
 		"node_modules/negotiator": {
 			"version": "0.6.3",
 			"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -3916,9 +3911,9 @@
 			}
 		},
 		"node_modules/postcss": {
-			"version": "8.4.27",
-			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz",
-			"integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==",
+			"version": "8.4.31",
+			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+			"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
 			"dev": true,
 			"funding": [
 				{
@@ -4044,9 +4039,9 @@
 			}
 		},
 		"node_modules/postcss-scss": {
-			"version": "4.0.6",
-			"resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz",
-			"integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==",
+			"version": "4.0.9",
+			"resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
+			"integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
 			"dev": true,
 			"funding": [
 				{
@@ -4056,13 +4051,17 @@
 				{
 					"type": "tidelift",
 					"url": "https://tidelift.com/funding/github/npm/postcss-scss"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
 				}
 			],
 			"engines": {
 				"node": ">=12.0"
 			},
 			"peerDependencies": {
-				"postcss": "^8.4.19"
+				"postcss": "^8.4.29"
 			}
 		},
 		"node_modules/postcss-selector-parser": {
@@ -4094,37 +4093,37 @@
 			}
 		},
 		"node_modules/prettier": {
-			"version": "2.8.8",
-			"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
-			"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
+			"integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
 			"dev": true,
 			"bin": {
-				"prettier": "bin-prettier.js"
+				"prettier": "bin/prettier.cjs"
 			},
 			"engines": {
-				"node": ">=10.13.0"
+				"node": ">=14"
 			},
 			"funding": {
 				"url": "https://github.com/prettier/prettier?sponsor=1"
 			}
 		},
 		"node_modules/prettier-plugin-svelte": {
-			"version": "2.10.1",
-			"resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz",
-			"integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.1.2.tgz",
+			"integrity": "sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==",
 			"dev": true,
 			"peerDependencies": {
-				"prettier": "^1.16.4 || ^2.0.0",
-				"svelte": "^3.2.0 || ^4.0.0-next.0"
+				"prettier": "^3.0.0",
+				"svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0"
 			}
 		},
 		"node_modules/pretty-format": {
-			"version": "29.6.2",
-			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz",
-			"integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==",
+			"version": "29.7.0",
+			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+			"integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
 			"dev": true,
 			"dependencies": {
-				"@jest/schemas": "^29.6.0",
+				"@jest/schemas": "^29.6.3",
 				"ansi-styles": "^5.0.0",
 				"react-is": "^18.0.0"
 			},
@@ -4164,9 +4163,9 @@
 			}
 		},
 		"node_modules/punycode": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-			"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+			"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
 			"dev": true,
 			"engines": {
 				"node": ">=6"
@@ -4303,9 +4302,9 @@
 			}
 		},
 		"node_modules/rollup": {
-			"version": "3.27.0",
-			"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.0.tgz",
-			"integrity": "sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==",
+			"version": "3.29.4",
+			"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
+			"integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
 			"dev": true,
 			"bin": {
 				"rollup": "dist/bin/rollup"
@@ -4402,9 +4401,9 @@
 			}
 		},
 		"node_modules/sass": {
-			"version": "1.66.1",
-			"resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz",
-			"integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==",
+			"version": "1.69.5",
+			"resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz",
+			"integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
 			"dev": true,
 			"dependencies": {
 				"chokidar": ">=3.0.0 <4.0.0",
@@ -4433,9 +4432,9 @@
 			}
 		},
 		"node_modules/sequelize": {
-			"version": "6.32.1",
-			"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.32.1.tgz",
-			"integrity": "sha512-3Iv0jruv57Y0YvcxQW7BE56O7DC1BojcfIrqh6my+IQwde+9u/YnuYHzK+8kmZLhLvaziRT1eWu38nh9yVwn/g==",
+			"version": "6.35.1",
+			"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.35.1.tgz",
+			"integrity": "sha512-UlP5k33nJsN11wCDLaWZXw9bB8w4ESKc5QmG6D04qMimwBwKVNeqRJiaaBlEJdtg8cRK+OJh95dliP+uEi+g9Q==",
 			"funding": [
 				{
 					"type": "opencollective",
@@ -4446,14 +4445,14 @@
 				"@types/debug": "^4.1.8",
 				"@types/validator": "^13.7.17",
 				"debug": "^4.3.4",
-				"dottie": "^2.0.4",
+				"dottie": "^2.0.6",
 				"inflection": "^1.13.4",
 				"lodash": "^4.17.21",
 				"moment": "^2.29.4",
 				"moment-timezone": "^0.5.43",
-				"pg-connection-string": "^2.6.0",
+				"pg-connection-string": "^2.6.1",
 				"retry-as-promised": "^7.0.4",
-				"semver": "^7.5.1",
+				"semver": "^7.5.4",
 				"sequelize-pool": "^7.1.0",
 				"toposort-class": "^1.0.1",
 				"uuid": "^8.3.2",
@@ -4502,9 +4501,9 @@
 			}
 		},
 		"node_modules/sequelize-typescript": {
-			"version": "2.1.5",
-			"resolved": "https://registry.npmjs.org/sequelize-typescript/-/sequelize-typescript-2.1.5.tgz",
-			"integrity": "sha512-x1CNODct8gJyfZPwEZBU5uVGNwgJI2Fda913ZxD5ZtCSRyTDPBTS/0uXciF+MlCpyqjpmoCAPtudQWzw579bzA==",
+			"version": "2.1.6",
+			"resolved": "https://registry.npmjs.org/sequelize-typescript/-/sequelize-typescript-2.1.6.tgz",
+			"integrity": "sha512-Vc2N++3en346RsbGjL3h7tgAl2Y7V+2liYTAOZ8XL0KTw3ahFHsyAUzOwct51n+g70I1TOUDgs06Oh6+XGcFkQ==",
 			"dependencies": {
 				"glob": "7.2.0"
 			},
@@ -4711,15 +4710,6 @@
 			"integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==",
 			"dev": true
 		},
-		"node_modules/streamsearch": {
-			"version": "1.1.0",
-			"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
-			"integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
-			"dev": true,
-			"engines": {
-				"node": ">=10.0.0"
-			}
-		},
 		"node_modules/string_decoder": {
 			"version": "1.3.0",
 			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -4855,9 +4845,9 @@
 			}
 		},
 		"node_modules/svelte": {
-			"version": "4.1.2",
-			"resolved": "https://registry.npmjs.org/svelte/-/svelte-4.1.2.tgz",
-			"integrity": "sha512-/evA8U6CgOHe5ZD1C1W3va9iJG7mWflcCdghBORJaAhD2JzrVERJty/2gl0pIPrJYBGZwZycH6onYf+64XXF9g==",
+			"version": "4.2.7",
+			"resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.7.tgz",
+			"integrity": "sha512-UExR1KS7raTdycsUrKLtStayu4hpdV3VZQgM0akX8XbXgLBlosdE/Sf3crOgyh9xIjqSYB3UEBuUlIQKRQX2hg==",
 			"dev": true,
 			"dependencies": {
 				"@ampproject/remapping": "^2.2.1",
@@ -4871,7 +4861,7 @@
 				"estree-walker": "^3.0.3",
 				"is-reference": "^3.0.1",
 				"locate-character": "^3.0.0",
-				"magic-string": "^0.30.0",
+				"magic-string": "^0.30.4",
 				"periscopic": "^3.1.0"
 			},
 			"engines": {
@@ -4879,9 +4869,9 @@
 			}
 		},
 		"node_modules/svelte-check": {
-			"version": "3.4.6",
-			"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.6.tgz",
-			"integrity": "sha512-OBlY8866Zh1zHQTkBMPS6psPi7o2umTUyj6JWm4SacnIHXpWFm658pG32m3dKvKFL49V4ntAkfFHKo4ztH07og==",
+			"version": "3.6.2",
+			"resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.2.tgz",
+			"integrity": "sha512-E6iFh4aUCGJLRz6QZXH3gcN/VFfkzwtruWSRmlKrLWQTiO6VzLsivR6q02WYLGNAGecV3EocqZuCDrC2uttZ0g==",
 			"dev": true,
 			"dependencies": {
 				"@jridgewell/trace-mapping": "^0.3.17",
@@ -4890,27 +4880,27 @@
 				"import-fresh": "^3.2.1",
 				"picocolors": "^1.0.0",
 				"sade": "^1.7.4",
-				"svelte-preprocess": "^5.0.4",
+				"svelte-preprocess": "^5.1.0",
 				"typescript": "^5.0.3"
 			},
 			"bin": {
 				"svelte-check": "bin/svelte-check"
 			},
 			"peerDependencies": {
-				"svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0"
+				"svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0"
 			}
 		},
 		"node_modules/svelte-eslint-parser": {
-			"version": "0.32.2",
-			"resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.32.2.tgz",
-			"integrity": "sha512-Ok9D3A4b23iLQsONrjqtXtYDu5ZZ/826Blaw2LeFZVTg1pwofKDG4mz3/GYTax8fQ0plRGHI6j+d9VQYy5Lo/A==",
+			"version": "0.33.1",
+			"resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz",
+			"integrity": "sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==",
 			"dev": true,
 			"dependencies": {
 				"eslint-scope": "^7.0.0",
 				"eslint-visitor-keys": "^3.0.0",
 				"espree": "^9.0.0",
-				"postcss": "^8.4.25",
-				"postcss-scss": "^4.0.6"
+				"postcss": "^8.4.29",
+				"postcss-scss": "^4.0.8"
 			},
 			"engines": {
 				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4927,62 +4917,37 @@
 				}
 			}
 		},
-		"node_modules/svelte-eslint-parser/node_modules/eslint-scope": {
-			"version": "7.2.2",
-			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
-			"dev": true,
-			"dependencies": {
-				"esrecurse": "^4.3.0",
-				"estraverse": "^5.2.0"
-			},
-			"engines": {
-				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-			},
-			"funding": {
-				"url": "https://opencollective.com/eslint"
-			}
-		},
-		"node_modules/svelte-eslint-parser/node_modules/estraverse": {
-			"version": "5.3.0",
-			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-			"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-			"dev": true,
-			"engines": {
-				"node": ">=4.0"
-			}
-		},
 		"node_modules/svelte-heros-v2": {
-			"version": "0.9.3",
-			"resolved": "https://registry.npmjs.org/svelte-heros-v2/-/svelte-heros-v2-0.9.3.tgz",
-			"integrity": "sha512-g2nwoWDp8WhKuAlUWj3SufTYQbFjBaoaynMOStggZoIgaEBlSjF4Yh4GKYGTWF4izenOy1R3Kal453chtLmFUg==",
+			"version": "0.10.12",
+			"resolved": "https://registry.npmjs.org/svelte-heros-v2/-/svelte-heros-v2-0.10.12.tgz",
+			"integrity": "sha512-0wspy0z9UFS9f/iPKQQ1JDHlNY6e7h+LVW+wJ0qJnuWDpvsJllmoCX2g0frYbMPDWZJEwh2pkO25Dp3lDGCxGQ==",
 			"dev": true,
 			"peerDependencies": {
 				"svelte": "^3.54.0 || ^4.0.0"
 			}
 		},
 		"node_modules/svelte-hmr": {
-			"version": "0.15.2",
-			"resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz",
-			"integrity": "sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==",
+			"version": "0.15.3",
+			"resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz",
+			"integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==",
 			"dev": true,
 			"engines": {
 				"node": "^12.20 || ^14.13.1 || >= 16"
 			},
 			"peerDependencies": {
-				"svelte": "^3.19.0 || ^4.0.0-next.0"
+				"svelte": "^3.19.0 || ^4.0.0"
 			}
 		},
 		"node_modules/svelte-local-storage-store": {
-			"version": "0.6.0",
-			"resolved": "https://registry.npmjs.org/svelte-local-storage-store/-/svelte-local-storage-store-0.6.0.tgz",
-			"integrity": "sha512-UbCY/yT/YUadU5IX/gZkoRQnA+ebFZHKKQjlJvfWHnBj3CPe9sNn8ndxYz/xy4LUzGjuBLq8+wH5RYK54ba3wA==",
+			"version": "0.6.4",
+			"resolved": "https://registry.npmjs.org/svelte-local-storage-store/-/svelte-local-storage-store-0.6.4.tgz",
+			"integrity": "sha512-45WoY2vSGPQM1sIQJ9jTkPPj20hYeqm+af6mUGRFSPP5WglZf36YYoZqwmZZ8Dt/2SU8lem+BTA8/Z/8TkqNLg==",
 			"dev": true,
 			"engines": {
 				"node": ">=0.14"
 			},
 			"peerDependencies": {
-				"svelte": "^3.48.0 || ^4.0.0"
+				"svelte": "^3.48.0 || >4.0.0"
 			}
 		},
 		"node_modules/svelte-multicssclass": {
@@ -4992,9 +4957,9 @@
 			"dev": true
 		},
 		"node_modules/svelte-preprocess": {
-			"version": "5.0.4",
-			"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz",
-			"integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==",
+			"version": "5.1.1",
+			"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.1.tgz",
+			"integrity": "sha512-p/Dp4hmrBW5mrCCq29lEMFpIJT2FZsRlouxEc5qpbOmXRbaFs7clLs8oKPwD3xCFyZfv1bIhvOzpQkhMEVQdMw==",
 			"dev": true,
 			"hasInstallScript": true,
 			"dependencies": {
@@ -5017,7 +4982,7 @@
 				"sass": "^1.26.8",
 				"stylus": "^0.55.0",
 				"sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0",
-				"svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0",
+				"svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0",
 				"typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0"
 			},
 			"peerDependenciesMeta": {
@@ -5065,10 +5030,22 @@
 				"node": ">=12"
 			}
 		},
+		"node_modules/svelte/node_modules/magic-string": {
+			"version": "0.30.5",
+			"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
+			"integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+			"dev": true,
+			"dependencies": {
+				"@jridgewell/sourcemap-codec": "^1.4.15"
+			},
+			"engines": {
+				"node": ">=12"
+			}
+		},
 		"node_modules/tailwindcss": {
-			"version": "3.3.3",
-			"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz",
-			"integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==",
+			"version": "3.3.5",
+			"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
+			"integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
 			"dev": true,
 			"dependencies": {
 				"@alloc/quick-lru": "^5.2.0",
@@ -5076,10 +5053,10 @@
 				"chokidar": "^3.5.3",
 				"didyoumean": "^1.2.2",
 				"dlv": "^1.1.3",
-				"fast-glob": "^3.2.12",
+				"fast-glob": "^3.3.0",
 				"glob-parent": "^6.0.2",
 				"is-glob": "^4.0.3",
-				"jiti": "^1.18.2",
+				"jiti": "^1.19.1",
 				"lilconfig": "^2.1.0",
 				"micromatch": "^4.0.5",
 				"normalize-path": "^3.0.0",
@@ -5202,6 +5179,16 @@
 				"node": ">=0.8"
 			}
 		},
+		"node_modules/tiny-glob": {
+			"version": "0.2.9",
+			"resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
+			"integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
+			"dev": true,
+			"dependencies": {
+				"globalyzer": "0.1.0",
+				"globrex": "^0.1.2"
+			}
+		},
 		"node_modules/tinybench": {
 			"version": "2.5.0",
 			"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz",
@@ -5218,9 +5205,9 @@
 			}
 		},
 		"node_modules/tinyspy": {
-			"version": "2.1.1",
-			"resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz",
-			"integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==",
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz",
+			"integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==",
 			"dev": true,
 			"engines": {
 				"node": ">=14.0.0"
@@ -5257,6 +5244,18 @@
 			"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
 			"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
 		},
+		"node_modules/ts-api-utils": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
+			"integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==",
+			"dev": true,
+			"engines": {
+				"node": ">=16.13.0"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.2.0"
+			}
+		},
 		"node_modules/ts-interface-checker": {
 			"version": "0.1.13",
 			"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
@@ -5264,30 +5263,9 @@
 			"dev": true
 		},
 		"node_modules/tslib": {
-			"version": "2.6.1",
-			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
-			"integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
-			"dev": true
-		},
-		"node_modules/tsutils": {
-			"version": "3.21.0",
-			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-			"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
-			"dev": true,
-			"dependencies": {
-				"tslib": "^1.8.1"
-			},
-			"engines": {
-				"node": ">= 6"
-			},
-			"peerDependencies": {
-				"typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
-			}
-		},
-		"node_modules/tsutils/node_modules/tslib": {
-			"version": "1.14.1",
-			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+			"version": "2.6.2",
+			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+			"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
 			"dev": true
 		},
 		"node_modules/type-check": {
@@ -5324,9 +5302,9 @@
 			}
 		},
 		"node_modules/typescript": {
-			"version": "5.1.6",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
-			"integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+			"version": "5.3.2",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz",
+			"integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==",
 			"dev": true,
 			"bin": {
 				"tsc": "bin/tsc",
@@ -5337,23 +5315,28 @@
 			}
 		},
 		"node_modules/ufo": {
-			"version": "1.2.0",
-			"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.2.0.tgz",
-			"integrity": "sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==",
+			"version": "1.3.2",
+			"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz",
+			"integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==",
 			"dev": true
 		},
 		"node_modules/undici": {
-			"version": "5.22.1",
-			"resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz",
-			"integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==",
+			"version": "5.26.5",
+			"resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz",
+			"integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==",
 			"dev": true,
 			"dependencies": {
-				"busboy": "^1.6.0"
+				"@fastify/busboy": "^2.0.0"
 			},
 			"engines": {
 				"node": ">=14.0"
 			}
 		},
+		"node_modules/undici-types": {
+			"version": "5.26.5",
+			"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+			"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+		},
 		"node_modules/unique-filename": {
 			"version": "1.1.1",
 			"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
@@ -5433,14 +5416,14 @@
 			}
 		},
 		"node_modules/vite": {
-			"version": "4.4.7",
-			"resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz",
-			"integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==",
+			"version": "4.5.0",
+			"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz",
+			"integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==",
 			"dev": true,
 			"dependencies": {
 				"esbuild": "^0.18.10",
-				"postcss": "^8.4.26",
-				"rollup": "^3.25.2"
+				"postcss": "^8.4.27",
+				"rollup": "^3.27.1"
 			},
 			"bin": {
 				"vite": "bin/vite.js"
@@ -5488,9 +5471,9 @@
 			}
 		},
 		"node_modules/vite-node": {
-			"version": "0.34.1",
-			"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.1.tgz",
-			"integrity": "sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==",
+			"version": "0.34.6",
+			"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz",
+			"integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==",
 			"dev": true,
 			"dependencies": {
 				"cac": "^6.7.14",
@@ -5498,7 +5481,7 @@
 				"mlly": "^1.4.0",
 				"pathe": "^1.1.1",
 				"picocolors": "^1.0.0",
-				"vite": "^3.0.0 || ^4.0.0"
+				"vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0"
 			},
 			"bin": {
 				"vite-node": "vite-node.mjs"
@@ -5511,12 +5494,12 @@
 			}
 		},
 		"node_modules/vitefu": {
-			"version": "0.2.4",
-			"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz",
-			"integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==",
+			"version": "0.2.5",
+			"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz",
+			"integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==",
 			"dev": true,
 			"peerDependencies": {
-				"vite": "^3.0.0 || ^4.0.0"
+				"vite": "^3.0.0 || ^4.0.0 || ^5.0.0"
 			},
 			"peerDependenciesMeta": {
 				"vite": {
@@ -5525,23 +5508,23 @@
 			}
 		},
 		"node_modules/vitest": {
-			"version": "0.34.1",
-			"resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.1.tgz",
-			"integrity": "sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==",
+			"version": "0.34.6",
+			"resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz",
+			"integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==",
 			"dev": true,
 			"dependencies": {
 				"@types/chai": "^4.3.5",
 				"@types/chai-subset": "^1.3.3",
 				"@types/node": "*",
-				"@vitest/expect": "0.34.1",
-				"@vitest/runner": "0.34.1",
-				"@vitest/snapshot": "0.34.1",
-				"@vitest/spy": "0.34.1",
-				"@vitest/utils": "0.34.1",
+				"@vitest/expect": "0.34.6",
+				"@vitest/runner": "0.34.6",
+				"@vitest/snapshot": "0.34.6",
+				"@vitest/spy": "0.34.6",
+				"@vitest/utils": "0.34.6",
 				"acorn": "^8.9.0",
 				"acorn-walk": "^8.2.0",
 				"cac": "^6.7.14",
-				"chai": "^4.3.7",
+				"chai": "^4.3.10",
 				"debug": "^4.3.4",
 				"local-pkg": "^0.4.3",
 				"magic-string": "^0.30.1",
@@ -5551,8 +5534,8 @@
 				"strip-literal": "^1.0.1",
 				"tinybench": "^2.5.0",
 				"tinypool": "^0.7.0",
-				"vite": "^3.0.0 || ^4.0.0",
-				"vite-node": "0.34.1",
+				"vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0",
+				"vite-node": "0.34.6",
 				"why-is-node-running": "^2.2.2"
 			},
 			"bin": {
diff --git a/package.json b/package.json
index 56c1c81..d24ae27 100644
--- a/package.json
+++ b/package.json
@@ -9,45 +9,45 @@
 		"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
 		"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
 		"test": "vitest",
-		"lint": "prettier --plugin-search-dir . --check . && eslint .",
-		"format": "prettier --plugin-search-dir . --write ."
+		"lint": "prettier --check . && eslint .",
+		"format": "prettier --write ."
 	},
 	"devDependencies": {
 		"@sveltejs/adapter-node": "^1.3.1",
-		"@sveltejs/kit": "^1.20.4",
-		"@types/bcrypt": "^5.0.0",
-		"@types/node": "^20.5.6",
-		"@types/validator": "^13.11.1",
-		"@typescript-eslint/eslint-plugin": "^5.45.0",
-		"@typescript-eslint/parser": "^5.45.0",
-		"autoprefixer": "^10.4.14",
-		"daisyui": "^4.4.10",
-		"eslint": "^8.28.0",
-		"eslint-config-prettier": "^8.5.0",
-		"eslint-plugin-svelte": "^2.30.0",
-		"postcss": "^8.4.27",
-		"prettier": "^2.8.8",
-		"prettier-plugin-svelte": "^2.10.1",
-		"sass": "^1.66.1",
-		"svelte": "^4.0.5",
-		"svelte-check": "^3.4.3",
-		"svelte-heros-v2": "^0.9.3",
-		"svelte-local-storage-store": "^0.6.0",
+		"@sveltejs/kit": "^1.27.6",
+		"@types/bcrypt": "^5.0.2",
+		"@types/node": "^20.10.0",
+		"@types/validator": "^13.11.7",
+		"@typescript-eslint/eslint-plugin": "^6.13.1",
+		"@typescript-eslint/parser": "^6.13.1",
+		"autoprefixer": "^10.4.16",
+		"daisyui": "^4.4.14",
+		"eslint": "^8.54.0",
+		"eslint-config-prettier": "^9.0.0",
+		"eslint-plugin-svelte": "^2.35.1",
+		"postcss": "^8.4.31",
+		"prettier": "^3.1.0",
+		"prettier-plugin-svelte": "^3.1.2",
+		"sass": "^1.69.5",
+		"svelte": "^4.2.7",
+		"svelte-check": "^3.6.2",
+		"svelte-heros-v2": "^0.10.12",
+		"svelte-local-storage-store": "^0.6.4",
 		"svelte-multicssclass": "^2.1.1",
-		"svelte-preprocess": "^5.0.4",
-		"tailwindcss": "^3.3.3",
-		"tslib": "^2.4.1",
-		"typescript": "^5.0.0",
-		"vite": "^4.4.2",
-		"vitest": "^0.34.1"
+		"svelte-preprocess": "^5.1.1",
+		"tailwindcss": "^3.3.5",
+		"tslib": "^2.6.2",
+		"typescript": "^5.3.2",
+		"vite": "^4.5.0",
+		"vitest": "^0.34.6"
 	},
 	"type": "module",
 	"dependencies": {
 		"bcrypt": "^5.1.1",
 		"dotenv": "^16.3.1",
-		"mariadb": "^3.2.0",
-		"sequelize": "^6.32.1",
-		"sequelize-typescript": "^2.1.5",
+		"mariadb": "^3.2.2",
+		"sequelize": "^6.35.1",
+		"sequelize-typescript": "^2.1.6",
 		"sqlite3": "^5.1.6"
 	}
 }
diff --git a/src/app.html b/src/app.html
index 41bc78e..6a5b9ec 100644
--- a/src/app.html
+++ b/src/app.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html>
+<!doctype html>
 <html lang="en">
 	<head>
 		<meta charset="utf-8" />
diff --git a/src/lib/components/Input/Input.svelte b/src/lib/components/Input/Input.svelte
index 2270809..8a22aee 100644
--- a/src/lib/components/Input/Input.svelte
+++ b/src/lib/components/Input/Input.svelte
@@ -1,5 +1,5 @@
 <script lang="ts">
-	import { IconSolid } from 'svelte-heros-v2';
+	import { Eye, EyeSlash } from 'svelte-heros-v2';
 	import { createEventDispatcher } from 'svelte';
 
 	export let id: string | null = null;
@@ -106,17 +106,9 @@
 						}}
 					>
 						{#if type === 'password'}
-							<IconSolid
-								name="eye-slash-solid"
-								width={passwordEyeSize[size]}
-								height={passwordEyeSize[size]}
-							/>
+							<EyeSlash variation="solid" size={passwordEyeSize[size]} />
 						{:else}
-							<IconSolid
-								name="eye-solid"
-								width={passwordEyeSize[size]}
-								height={passwordEyeSize[size]}
-							/>
+							<Eye variation="solid" size={passwordEyeSize[size]} />
 						{/if}
 					</button>
 				{/if}
diff --git a/src/lib/components/Table/SortableTh.svelte b/src/lib/components/Table/SortableTh.svelte
index a75b918..83c9f9f 100644
--- a/src/lib/components/Table/SortableTh.svelte
+++ b/src/lib/components/Table/SortableTh.svelte
@@ -1,7 +1,7 @@
 <script lang="ts">
 	import { createEventDispatcher, getContext, onDestroy } from 'svelte';
 	import type { Writable } from 'svelte/store';
-	import { IconSolid } from 'svelte-heros-v2';
+	import { ChevronDown, ChevronUp } from 'svelte-heros-v2';
 
 	let id = crypto.randomUUID();
 	let asc = false;
@@ -26,10 +26,10 @@
 		}}
 	>
 		<span class="mr-1"><slot /></span>
-		<IconSolid
-			name={$ascHeader === id && asc ? 'chevron-up-solid' : 'chevron-down-solid'}
-			width="12"
-			height="12"
-		/>
+		{#if $ascHeader === id && asc}
+			<ChevronUp variation="solid" />
+		{:else}
+			<ChevronDown variation="solid" />
+		{/if}
 	</button>
 </th>
diff --git a/src/lib/components/Toast/ErrorToast.svelte b/src/lib/components/Toast/ErrorToast.svelte
index 0c270fc..3590231 100644
--- a/src/lib/components/Toast/ErrorToast.svelte
+++ b/src/lib/components/Toast/ErrorToast.svelte
@@ -1,5 +1,5 @@
 <script lang="ts">
-	import { IconOutline } from 'svelte-heros-v2';
+	import { ExclamationCircle } from 'svelte-heros-v2';
 	import { fly } from 'svelte/transition';
 	import { onDestroy } from 'svelte';
 
@@ -45,7 +45,7 @@
 	>
 		<div class="alert alert-error border-none relative text-gray-900 overflow-hidden">
 			<div class="flex gap-2 z-10">
-				<IconOutline name="exclamation-circle-outline" />
+				<ExclamationCircle />
 				<slot />
 			</div>
 			<progress
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 6d4f694..68212f2 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -25,13 +25,6 @@
 			active: false
 		}
 	];
-	let footerLinks = [
-		{
-			name: 'Teamspeak',
-			icon: '<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 576 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M152.8 37.2c-32.2 38.1-56.1 82.6-69.9 130.5c0 .2-.1 .3-.1 .5C43.5 184.4 16 223 16 268c0 59.6 48.4 108 108 108s108-48.4 108-108c0-53.5-38.9-97.9-90-106.5c15.7-41.8 40.4-79.6 72.3-110.7c1.8-1.6 4-2.6 6.3-3.1c37.2-11.5 76.7-13.3 114.8-5.2C454.7 67.6 534 180.7 517.1 301.3c-8.4 62.6-38.6 112.7-87.7 151.4c-50.1 39.7-107.5 54.3-170.2 52.2l-24-1c12.4 2.8 25 4.9 37.6 6.3c40.7 4.2 81.4 2.1 120.1-12.5c94-35.5 149.3-102.3 162.9-202.5c4.8-52.6-5.8-105.4-30.8-152C454.6 11.3 290.8-38.4 159 32c-2.4 1.4-4.5 3.1-6.3 5.2zM309.4 433.9c-2.1 11.5-4.2 21.9-14.6 31.3c53.2-1 123.2-29.2 161.8-97.1c39.7-69.9 37.6-139.9-6.3-207.8C413.8 105 360.5 77.9 293.7 73.7c1.5 2.3 3.2 4.4 5.2 6.3l5.2 6.3c25.1 31.3 37.6 67.9 42.8 107.5c2.1 15.7-1 30.3-13.6 41.8c-4.2 3.1-5.2 6.3-4.2 10.4l7.3 17.7L365.7 318c5.2 11.5 4.2 19.8-6.3 28.2c-3.2 2.5-6.7 4.6-10.4 6.3l-18.8 8.4 3.1 13.6c3.1 6.3 1 12.5-3.1 17.7c-2.5 2.4-3.8 5.9-3.1 9.4c2.1 11.5-2.1 19.8-12.5 25.1c-2.1 1-4.2 5.2-5.2 7.3zm-133.6-3.1c16.7 11.5 34.5 20.9 53.2 26.1c24 5.2 41.8-6.3 44.9-30.3c1-8.4 5.2-14.6 12.5-17.7c7.3-4.2 8.4-7.3 2.1-13.6l-9.4-8.4 13.6-4.2c6.3-2.1 7.3-5.2 5.2-11.5c-1.4-3-2.4-6.2-3.1-9.4c-3.1-14.6-2.1-15.7 11.5-18.8c8.4-3.1 15.7-6.3 21.9-12.5c3.1-2.1 3.1-4.2 1-8.4l-16.7-30.3c-1-1.9-2.1-3.8-3.1-5.7c-6.4-11.7-13-23.6-15.7-37.1c-2.1-9.4-1-17.7 8.4-24c5.2-4.2 8.4-9.4 8.4-16.7c-.4-10.1-1.5-20.3-3.1-30.3c-6.3-37.6-23-68.9-51.2-95c-5.2-4.2-9.4-6.3-16.7-4.2L203.9 91.5c2 1.2 4 2.4 6 3.6l0 0c6.3 3.7 12.2 7.3 17 12.1c30.3 26.1 41.8 61.6 45.9 100.2c1 8.4 0 16.7-7.3 21.9c-8.4 5.2-10.4 12.5-7.3 20.9c4.9 13.2 10.4 26 16.7 38.6L291.6 318c-6.3 8.4-13.6 11.5-21.9 14.6c-12.5 3.1-14.6 7.3-10.4 20.9c.6 1.5 1.4 2.8 2.1 4.2c2.1 5.2 1 8.4-4.2 10.4l-12.5 3.1 5.2 4.2 4.2 4.2c4.2 5.2 4.2 8.4-2.1 10.4c-7.3 4.2-11.5 9.4-11.5 17.7c0 12.5-7.3 19.8-18.8 24c-3.8 1-7.6 1.5-11.5 1l-34.5-2.1z"/></svg>',
-			href: 'ts3server://mhsl.eu'
-		}
-	];
 
 	let showMenuPermanent = false;
 	let menuButtonScrollIndex: number | null = null;
@@ -81,7 +74,7 @@
 />
 
 <main>
-	<div class="min-h-screen w-full">
+	<div class="h-screen w-full">
 		<slot />
 	</div>
 </main>
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 478f037..9aec0d0 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -1,7 +1,7 @@
 <script lang="ts">
 	import { env } from '$env/dynamic/public';
 	import Countdown from '$lib/components/Countdown/Countdown.svelte';
-	import { IconOutline } from 'svelte-heros-v2';
+	import { User } from 'svelte-heros-v2';
 
 	let information = [
 		{
@@ -98,7 +98,7 @@
 			</div>
 			<div class="stat">
 				<div class="stat-figure">
-					<IconOutline name="user-outline" />
+					<User />
 				</div>
 				<div class="stat-title">Angemeldete Spieler</div>
 				<div class="stat-value">156</div>
diff --git a/src/routes/admin/+layout.svelte b/src/routes/admin/+layout.svelte
index 36e55b8..0808eef 100644
--- a/src/routes/admin/+layout.svelte
+++ b/src/routes/admin/+layout.svelte
@@ -1,7 +1,7 @@
 <script lang="ts">
 	import { page } from '$app/stores';
 	import { env } from '$env/dynamic/public';
-	import { IconOutline } from 'svelte-heros-v2';
+	import { ArrowLeftOnRectangle, Flag, UserGroup, Users } from 'svelte-heros-v2';
 	import { buttonTriggeredRequest } from '$lib/components/utils';
 	import { goto } from '$app/navigation';
 	import type { LayoutData } from './$types';
@@ -26,21 +26,21 @@
 	let tabs = [
 		{
 			path: `${env.PUBLIC_BASE_PATH}/admin/users`,
-			icon: 'user-group-outline',
+			icon: UserGroup,
 			name: 'Registrierte Nutzer',
 			badge: data.userCount,
 			enabled: data.userCount != null
 		},
 		{
 			path: `${env.PUBLIC_BASE_PATH}/admin/reports`,
-			icon: 'flag-outline',
+			icon: Flag,
 			name: 'Reports',
 			badge: $reportCount,
 			enabled: data.reportCount != null
 		},
 		{
 			path: `${env.PUBLIC_BASE_PATH}/admin/admin`,
-			icon: 'users-outline',
+			icon: Users,
 			name: 'Website Admins',
 			badge: $adminCount,
 			enabled: data.adminCount != null
@@ -55,7 +55,7 @@
 				{#if tab.enabled}
 					<li>
 						<a href={tab.path}>
-							<IconOutline name={tab.icon} />
+							<svelte:component this={tab.icon} />
 							<span class="mr-1" class:underline={$page.url.pathname === tab.path}>{tab.name}</span>
 							<div class="badge">{tab.badge}</div>
 						</a>
@@ -67,7 +67,7 @@
 			<ul class="menu menu-vertical">
 				<li>
 					<button on:click={(e) => buttonTriggeredRequest(e, logout())}>
-						<IconOutline name="arrow-left-on-rectangle-outline" />
+						<ArrowLeftOnRectangle />
 						<span>Ausloggen</span>
 					</button>
 				</li>
diff --git a/src/routes/admin/+page.svelte b/src/routes/admin/+page.svelte
index 4070068..6a086c7 100644
--- a/src/routes/admin/+page.svelte
+++ b/src/routes/admin/+page.svelte
@@ -1,26 +1,26 @@
 <script lang="ts">
 	import type { PageData } from './$types';
 	import { env } from '$env/dynamic/public';
-	import { IconOutline } from 'svelte-heros-v2';
+	import { Flag, UserGroup, Users } from 'svelte-heros-v2';
 
 	export let data: PageData;
 
 	let tabs = [
 		{
 			path: `${env.PUBLIC_BASE_PATH}/admin/users`,
-			icon: 'user-group-outline',
+			icon: UserGroup,
 			name: 'Registrierte Nutzer',
 			enabled: data.userCount != null
 		},
 		{
 			path: `${env.PUBLIC_BASE_PATH}/admin/reports`,
-			icon: 'flag-outline',
+			icon: Flag,
 			name: 'Reports',
 			enabled: data.reportCount != null
 		},
 		{
 			path: `${env.PUBLIC_BASE_PATH}/admin/admin`,
-			icon: 'users-outline',
+			icon: Users,
 			name: 'Website Admins',
 			enabled: data.adminCount != null
 		}
@@ -36,7 +36,7 @@
 					href={tab.path}
 					title={tab.name}
 				>
-					<IconOutline width="5rem" height="5rem" name={tab.icon} />
+					<svelte:component this={tab.icon} width="5rem" height="5rem" />
 				</a>
 				<span>{tab.name}</span>
 			</div>
diff --git a/src/routes/admin/admin/+page.svelte b/src/routes/admin/admin/+page.svelte
index 535db1b..339066e 100644
--- a/src/routes/admin/admin/+page.svelte
+++ b/src/routes/admin/admin/+page.svelte
@@ -1,7 +1,7 @@
 <script lang="ts">
 	import type { PageData } from './$types';
 	import Badges from '$lib/components/Input/Badges.svelte';
-	import { IconOutline } from 'svelte-heros-v2';
+	import { Check, NoSymbol, PencilSquare, Trash, UserPlus } from 'svelte-heros-v2';
 	import Input from '$lib/components/Input/Input.svelte';
 	import { Permissions } from '$lib/permissions';
 	import { env } from '$env/dynamic/public';
@@ -155,7 +155,7 @@
 										admin.edit = false;
 									}}
 								>
-									<IconOutline name="check-outline" width="18" height="18" />
+									<Check size="18" />
 								</button>
 							</span>
 							<span class="w-min" class:cursor-not-allowed={!permissions.adminWrite()}>
@@ -167,7 +167,7 @@
 										admin = admin.before;
 									}}
 								>
-									<IconOutline name="no-symbol-outline" width="18" height="18" />
+									<NoSymbol size="18" />
 								</button>
 							</span>
 						{:else}
@@ -180,7 +180,7 @@
 										admin.before = structuredClone(admin);
 									}}
 								>
-									<IconOutline name="pencil-square-outline" width="18" height="18" />
+									<PencilSquare size="18" />
 								</button>
 							</span>
 							<span class="w-min" class:cursor-not-allowed={!permissions.adminWrite()}>
@@ -189,7 +189,7 @@
 									disabled={!permissions.adminWrite()}
 									on:click={(e) => buttonTriggeredRequest(e, deleteAdmin(admin.id))}
 								>
-									<IconOutline name="trash-outline" width="18" height="18" />
+									<Trash size="18" />
 								</button>
 							</span>
 						{/if}
@@ -228,7 +228,7 @@
 							newAdminPermissions = [];
 						}}
 					>
-						<IconOutline name="user-plus-outline" width="18" height="18" />
+						<UserPlus size="18" />
 					</button>
 				</span>
 			</td>
diff --git a/src/routes/admin/reports/+page.svelte b/src/routes/admin/reports/+page.svelte
index fa5027f..032819f 100644
--- a/src/routes/admin/reports/+page.svelte
+++ b/src/routes/admin/reports/+page.svelte
@@ -9,7 +9,7 @@
 	import Textarea from '$lib/components/Input/Textarea.svelte';
 	import { reportCount } from '$lib/stores';
 	import HeaderBar from './HeaderBar.svelte';
-	import { IconOutline } from 'svelte-heros-v2';
+	import { MagnifyingGlass, Plus, Share } from 'svelte-heros-v2';
 	import NewReportModal from './NewReportModal.svelte';
 	import { onDestroy, onMount } from 'svelte';
 	import { goto } from '$app/navigation';
@@ -139,7 +139,7 @@
 								title="Nach Ersteller filtern"
 								on:click|stopPropagation={() => (reportFilter.reporter = report.reporter.username)}
 							>
-								<IconOutline name="magnifying-glass-outline" width="14" height="14" />
+								<MagnifyingGlass size="14" />
 							</button>
 						</td>
 						<td>
@@ -151,7 +151,7 @@
 									on:click|stopPropagation={() =>
 										(reportFilter.reported = report.reported.username)}
 								>
-									<IconOutline name="magnifying-glass-outline" width="14" height="14" />
+									<MagnifyingGlass size="14" />
 								</button>
 							{/if}
 						</td>
@@ -168,10 +168,10 @@
 							{report.status === 'none'
 								? 'Unbearbeitet'
 								: report.status === 'review'
-								? 'In Bearbeitung'
-								: report.status === 'reviewed'
-								? 'Bearbeitet'
-								: ''}
+								  ? 'In Bearbeitung'
+								  : report.status === 'reviewed'
+								    ? 'Bearbeitet'
+								    : ''}
 						</td>
 						<td>{report.draft ? 'Entwurf' : 'Erstellt'}</td>
 					</tr>
@@ -180,7 +180,7 @@
 					<td colspan="100">
 						<div class="flex justify-center items-center">
 							<button class="btn btn-sm" on:click={() => newReportModal.show()}>
-								<IconOutline name="plus-outline" />
+								<Plus />
 								<span>Neuer Report</span>
 							</button>
 						</div>
@@ -198,7 +198,7 @@
 				<form class="dropdown dropdown-end">
 					<!-- svelte-ignore a11y-no-noninteractive-tabindex a11y-label-has-associated-control -->
 					<label tabindex="0" class="btn btn-sm btn-circle btn-ghost text-center">
-						<IconOutline name="share-outline" height="1rem" width="auto" />
+						<Share size="1rem" />
 					</label>
 					<!-- svelte-ignore a11y-no-noninteractive-tabindex -->
 					<ul
diff --git a/src/routes/admin/users/+page.svelte b/src/routes/admin/users/+page.svelte
index 833fa1b..9185cd9 100644
--- a/src/routes/admin/users/+page.svelte
+++ b/src/routes/admin/users/+page.svelte
@@ -1,6 +1,6 @@
 <script lang="ts">
 	import type { PageData } from './$types';
-	import { IconOutline } from 'svelte-heros-v2';
+	import { Check, NoSymbol, PencilSquare, Trash } from 'svelte-heros-v2';
 	import Input from '$lib/components/Input/Input.svelte';
 	import Select from '$lib/components/Input/Select.svelte';
 	import { env } from '$env/dynamic/public';
@@ -172,7 +172,7 @@
 													user.edit = false;
 												}}
 											>
-												<IconOutline name="check-outline" width="18" height="18" />
+												<Check size="18" />
 											</button>
 											<button
 												class="btn btn-sm btn-square"
@@ -181,7 +181,7 @@
 													user = user.before;
 												}}
 											>
-												<IconOutline name="no-symbol-outline" width="18" height="18" />
+												<NoSymbol size="18" />
 											</button>
 										{:else}
 											<button
@@ -191,13 +191,13 @@
 													user.edit = true;
 												}}
 											>
-												<IconOutline name="pencil-square-outline" width="18" height="18" />
+												<PencilSquare size="18" />
 											</button>
 											<button
 												class="btn btn-sm btn-square"
 												on:click={(e) => buttonTriggeredRequest(e, deleteUser(user.id))}
 											>
-												<IconOutline name="trash-outline" width="18" height="18" />
+												<Trash size="18" />
 											</button>
 										{/if}
 									</div>
diff --git a/src/routes/register/RegistrationComplete.svelte b/src/routes/register/RegistrationComplete.svelte
index cd9fafb..0840b18 100644
--- a/src/routes/register/RegistrationComplete.svelte
+++ b/src/routes/register/RegistrationComplete.svelte
@@ -1,5 +1,5 @@
 <script lang="ts">
-	import { IconSolid } from 'svelte-heros-v2';
+	import { ChevronRight } from 'svelte-heros-v2';
 	import { createEventDispatcher } from 'svelte';
 	import { env } from '$env/dynamic/public';
 
@@ -18,7 +18,7 @@
 
 <div class="flex items-center h-12 mb-2">
 	<button class="sm:absolute btn btn-sm btn-square" on:click={() => dispatch('close')}>
-		<IconSolid name="chevron-left-solid" />
+		<ChevronRight variation="outline" />
 	</button>
 	<h1 class="text-center text-xl sm:text-3xl m-auto">Registrierung erfolgreich</h1>
 </div>