update dependencies

This commit is contained in:
bytedream 2023-11-28 22:15:12 +01:00
parent dc21366f7a
commit 05ddd05a5b
15 changed files with 544 additions and 577 deletions

View File

@ -4,6 +4,5 @@
"trailingComma": "none", "trailingComma": "none",
"printWidth": 100, "printWidth": 100,
"plugins": ["prettier-plugin-svelte"], "plugins": ["prettier-plugin-svelte"],
"pluginSearchDirs": ["."],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
} }

949
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -9,45 +9,45 @@
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"test": "vitest", "test": "vitest",
"lint": "prettier --plugin-search-dir . --check . && eslint .", "lint": "prettier --check . && eslint .",
"format": "prettier --plugin-search-dir . --write ." "format": "prettier --write ."
}, },
"devDependencies": { "devDependencies": {
"@sveltejs/adapter-node": "^1.3.1", "@sveltejs/adapter-node": "^1.3.1",
"@sveltejs/kit": "^1.20.4", "@sveltejs/kit": "^1.27.6",
"@types/bcrypt": "^5.0.0", "@types/bcrypt": "^5.0.2",
"@types/node": "^20.5.6", "@types/node": "^20.10.0",
"@types/validator": "^13.11.1", "@types/validator": "^13.11.7",
"@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/eslint-plugin": "^6.13.1",
"@typescript-eslint/parser": "^5.45.0", "@typescript-eslint/parser": "^6.13.1",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.16",
"daisyui": "^4.4.10", "daisyui": "^4.4.14",
"eslint": "^8.28.0", "eslint": "^8.54.0",
"eslint-config-prettier": "^8.5.0", "eslint-config-prettier": "^9.0.0",
"eslint-plugin-svelte": "^2.30.0", "eslint-plugin-svelte": "^2.35.1",
"postcss": "^8.4.27", "postcss": "^8.4.31",
"prettier": "^2.8.8", "prettier": "^3.1.0",
"prettier-plugin-svelte": "^2.10.1", "prettier-plugin-svelte": "^3.1.2",
"sass": "^1.66.1", "sass": "^1.69.5",
"svelte": "^4.0.5", "svelte": "^4.2.7",
"svelte-check": "^3.4.3", "svelte-check": "^3.6.2",
"svelte-heros-v2": "^0.9.3", "svelte-heros-v2": "^0.10.12",
"svelte-local-storage-store": "^0.6.0", "svelte-local-storage-store": "^0.6.4",
"svelte-multicssclass": "^2.1.1", "svelte-multicssclass": "^2.1.1",
"svelte-preprocess": "^5.0.4", "svelte-preprocess": "^5.1.1",
"tailwindcss": "^3.3.3", "tailwindcss": "^3.3.5",
"tslib": "^2.4.1", "tslib": "^2.6.2",
"typescript": "^5.0.0", "typescript": "^5.3.2",
"vite": "^4.4.2", "vite": "^4.5.0",
"vitest": "^0.34.1" "vitest": "^0.34.6"
}, },
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"bcrypt": "^5.1.1", "bcrypt": "^5.1.1",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"mariadb": "^3.2.0", "mariadb": "^3.2.2",
"sequelize": "^6.32.1", "sequelize": "^6.35.1",
"sequelize-typescript": "^2.1.5", "sequelize-typescript": "^2.1.6",
"sqlite3": "^5.1.6" "sqlite3": "^5.1.6"
} }
} }

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />

View File

@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { IconSolid } from 'svelte-heros-v2'; import { Eye, EyeSlash } from 'svelte-heros-v2';
import { createEventDispatcher } from 'svelte'; import { createEventDispatcher } from 'svelte';
export let id: string | null = null; export let id: string | null = null;
@ -106,17 +106,9 @@
}} }}
> >
{#if type === 'password'} {#if type === 'password'}
<IconSolid <EyeSlash variation="solid" size={passwordEyeSize[size]} />
name="eye-slash-solid"
width={passwordEyeSize[size]}
height={passwordEyeSize[size]}
/>
{:else} {:else}
<IconSolid <Eye variation="solid" size={passwordEyeSize[size]} />
name="eye-solid"
width={passwordEyeSize[size]}
height={passwordEyeSize[size]}
/>
{/if} {/if}
</button> </button>
{/if} {/if}

View File

@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { createEventDispatcher, getContext, onDestroy } from 'svelte'; import { createEventDispatcher, getContext, onDestroy } from 'svelte';
import type { Writable } from 'svelte/store'; import type { Writable } from 'svelte/store';
import { IconSolid } from 'svelte-heros-v2'; import { ChevronDown, ChevronUp } from 'svelte-heros-v2';
let id = crypto.randomUUID(); let id = crypto.randomUUID();
let asc = false; let asc = false;
@ -26,10 +26,10 @@
}} }}
> >
<span class="mr-1"><slot /></span> <span class="mr-1"><slot /></span>
<IconSolid {#if $ascHeader === id && asc}
name={$ascHeader === id && asc ? 'chevron-up-solid' : 'chevron-down-solid'} <ChevronUp variation="solid" />
width="12" {:else}
height="12" <ChevronDown variation="solid" />
/> {/if}
</button> </button>
</th> </th>

View File

@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { IconOutline } from 'svelte-heros-v2'; import { ExclamationCircle } from 'svelte-heros-v2';
import { fly } from 'svelte/transition'; import { fly } from 'svelte/transition';
import { onDestroy } from 'svelte'; import { onDestroy } from 'svelte';
@ -45,7 +45,7 @@
> >
<div class="alert alert-error border-none relative text-gray-900 overflow-hidden"> <div class="alert alert-error border-none relative text-gray-900 overflow-hidden">
<div class="flex gap-2 z-10"> <div class="flex gap-2 z-10">
<IconOutline name="exclamation-circle-outline" /> <ExclamationCircle />
<slot /> <slot />
</div> </div>
<progress <progress

View File

@ -25,13 +25,6 @@
active: false 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 showMenuPermanent = false;
let menuButtonScrollIndex: number | null = null; let menuButtonScrollIndex: number | null = null;
@ -81,7 +74,7 @@
/> />
<main> <main>
<div class="min-h-screen w-full"> <div class="h-screen w-full">
<slot /> <slot />
</div> </div>
</main> </main>

View File

@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { env } from '$env/dynamic/public'; import { env } from '$env/dynamic/public';
import Countdown from '$lib/components/Countdown/Countdown.svelte'; import Countdown from '$lib/components/Countdown/Countdown.svelte';
import { IconOutline } from 'svelte-heros-v2'; import { User } from 'svelte-heros-v2';
let information = [ let information = [
{ {
@ -98,7 +98,7 @@
</div> </div>
<div class="stat"> <div class="stat">
<div class="stat-figure"> <div class="stat-figure">
<IconOutline name="user-outline" /> <User />
</div> </div>
<div class="stat-title">Angemeldete Spieler</div> <div class="stat-title">Angemeldete Spieler</div>
<div class="stat-value">156</div> <div class="stat-value">156</div>

View File

@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { page } from '$app/stores'; import { page } from '$app/stores';
import { env } from '$env/dynamic/public'; 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 { buttonTriggeredRequest } from '$lib/components/utils';
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import type { LayoutData } from './$types'; import type { LayoutData } from './$types';
@ -26,21 +26,21 @@
let tabs = [ let tabs = [
{ {
path: `${env.PUBLIC_BASE_PATH}/admin/users`, path: `${env.PUBLIC_BASE_PATH}/admin/users`,
icon: 'user-group-outline', icon: UserGroup,
name: 'Registrierte Nutzer', name: 'Registrierte Nutzer',
badge: data.userCount, badge: data.userCount,
enabled: data.userCount != null enabled: data.userCount != null
}, },
{ {
path: `${env.PUBLIC_BASE_PATH}/admin/reports`, path: `${env.PUBLIC_BASE_PATH}/admin/reports`,
icon: 'flag-outline', icon: Flag,
name: 'Reports', name: 'Reports',
badge: $reportCount, badge: $reportCount,
enabled: data.reportCount != null enabled: data.reportCount != null
}, },
{ {
path: `${env.PUBLIC_BASE_PATH}/admin/admin`, path: `${env.PUBLIC_BASE_PATH}/admin/admin`,
icon: 'users-outline', icon: Users,
name: 'Website Admins', name: 'Website Admins',
badge: $adminCount, badge: $adminCount,
enabled: data.adminCount != null enabled: data.adminCount != null
@ -55,7 +55,7 @@
{#if tab.enabled} {#if tab.enabled}
<li> <li>
<a href={tab.path}> <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> <span class="mr-1" class:underline={$page.url.pathname === tab.path}>{tab.name}</span>
<div class="badge">{tab.badge}</div> <div class="badge">{tab.badge}</div>
</a> </a>
@ -67,7 +67,7 @@
<ul class="menu menu-vertical"> <ul class="menu menu-vertical">
<li> <li>
<button on:click={(e) => buttonTriggeredRequest(e, logout())}> <button on:click={(e) => buttonTriggeredRequest(e, logout())}>
<IconOutline name="arrow-left-on-rectangle-outline" /> <ArrowLeftOnRectangle />
<span>Ausloggen</span> <span>Ausloggen</span>
</button> </button>
</li> </li>

View File

@ -1,26 +1,26 @@
<script lang="ts"> <script lang="ts">
import type { PageData } from './$types'; import type { PageData } from './$types';
import { env } from '$env/dynamic/public'; import { env } from '$env/dynamic/public';
import { IconOutline } from 'svelte-heros-v2'; import { Flag, UserGroup, Users } from 'svelte-heros-v2';
export let data: PageData; export let data: PageData;
let tabs = [ let tabs = [
{ {
path: `${env.PUBLIC_BASE_PATH}/admin/users`, path: `${env.PUBLIC_BASE_PATH}/admin/users`,
icon: 'user-group-outline', icon: UserGroup,
name: 'Registrierte Nutzer', name: 'Registrierte Nutzer',
enabled: data.userCount != null enabled: data.userCount != null
}, },
{ {
path: `${env.PUBLIC_BASE_PATH}/admin/reports`, path: `${env.PUBLIC_BASE_PATH}/admin/reports`,
icon: 'flag-outline', icon: Flag,
name: 'Reports', name: 'Reports',
enabled: data.reportCount != null enabled: data.reportCount != null
}, },
{ {
path: `${env.PUBLIC_BASE_PATH}/admin/admin`, path: `${env.PUBLIC_BASE_PATH}/admin/admin`,
icon: 'users-outline', icon: Users,
name: 'Website Admins', name: 'Website Admins',
enabled: data.adminCount != null enabled: data.adminCount != null
} }
@ -36,7 +36,7 @@
href={tab.path} href={tab.path}
title={tab.name} title={tab.name}
> >
<IconOutline width="5rem" height="5rem" name={tab.icon} /> <svelte:component this={tab.icon} width="5rem" height="5rem" />
</a> </a>
<span>{tab.name}</span> <span>{tab.name}</span>
</div> </div>

View File

@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import type { PageData } from './$types'; import type { PageData } from './$types';
import Badges from '$lib/components/Input/Badges.svelte'; 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 Input from '$lib/components/Input/Input.svelte';
import { Permissions } from '$lib/permissions'; import { Permissions } from '$lib/permissions';
import { env } from '$env/dynamic/public'; import { env } from '$env/dynamic/public';
@ -155,7 +155,7 @@
admin.edit = false; admin.edit = false;
}} }}
> >
<IconOutline name="check-outline" width="18" height="18" /> <Check size="18" />
</button> </button>
</span> </span>
<span class="w-min" class:cursor-not-allowed={!permissions.adminWrite()}> <span class="w-min" class:cursor-not-allowed={!permissions.adminWrite()}>
@ -167,7 +167,7 @@
admin = admin.before; admin = admin.before;
}} }}
> >
<IconOutline name="no-symbol-outline" width="18" height="18" /> <NoSymbol size="18" />
</button> </button>
</span> </span>
{:else} {:else}
@ -180,7 +180,7 @@
admin.before = structuredClone(admin); admin.before = structuredClone(admin);
}} }}
> >
<IconOutline name="pencil-square-outline" width="18" height="18" /> <PencilSquare size="18" />
</button> </button>
</span> </span>
<span class="w-min" class:cursor-not-allowed={!permissions.adminWrite()}> <span class="w-min" class:cursor-not-allowed={!permissions.adminWrite()}>
@ -189,7 +189,7 @@
disabled={!permissions.adminWrite()} disabled={!permissions.adminWrite()}
on:click={(e) => buttonTriggeredRequest(e, deleteAdmin(admin.id))} on:click={(e) => buttonTriggeredRequest(e, deleteAdmin(admin.id))}
> >
<IconOutline name="trash-outline" width="18" height="18" /> <Trash size="18" />
</button> </button>
</span> </span>
{/if} {/if}
@ -228,7 +228,7 @@
newAdminPermissions = []; newAdminPermissions = [];
}} }}
> >
<IconOutline name="user-plus-outline" width="18" height="18" /> <UserPlus size="18" />
</button> </button>
</span> </span>
</td> </td>

View File

@ -9,7 +9,7 @@
import Textarea from '$lib/components/Input/Textarea.svelte'; import Textarea from '$lib/components/Input/Textarea.svelte';
import { reportCount } from '$lib/stores'; import { reportCount } from '$lib/stores';
import HeaderBar from './HeaderBar.svelte'; 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 NewReportModal from './NewReportModal.svelte';
import { onDestroy, onMount } from 'svelte'; import { onDestroy, onMount } from 'svelte';
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
@ -139,7 +139,7 @@
title="Nach Ersteller filtern" title="Nach Ersteller filtern"
on:click|stopPropagation={() => (reportFilter.reporter = report.reporter.username)} on:click|stopPropagation={() => (reportFilter.reporter = report.reporter.username)}
> >
<IconOutline name="magnifying-glass-outline" width="14" height="14" /> <MagnifyingGlass size="14" />
</button> </button>
</td> </td>
<td> <td>
@ -151,7 +151,7 @@
on:click|stopPropagation={() => on:click|stopPropagation={() =>
(reportFilter.reported = report.reported.username)} (reportFilter.reported = report.reported.username)}
> >
<IconOutline name="magnifying-glass-outline" width="14" height="14" /> <MagnifyingGlass size="14" />
</button> </button>
{/if} {/if}
</td> </td>
@ -180,7 +180,7 @@
<td colspan="100"> <td colspan="100">
<div class="flex justify-center items-center"> <div class="flex justify-center items-center">
<button class="btn btn-sm" on:click={() => newReportModal.show()}> <button class="btn btn-sm" on:click={() => newReportModal.show()}>
<IconOutline name="plus-outline" /> <Plus />
<span>Neuer Report</span> <span>Neuer Report</span>
</button> </button>
</div> </div>
@ -198,7 +198,7 @@
<form class="dropdown dropdown-end"> <form class="dropdown dropdown-end">
<!-- svelte-ignore a11y-no-noninteractive-tabindex a11y-label-has-associated-control --> <!-- svelte-ignore a11y-no-noninteractive-tabindex a11y-label-has-associated-control -->
<label tabindex="0" class="btn btn-sm btn-circle btn-ghost text-center"> <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> </label>
<!-- svelte-ignore a11y-no-noninteractive-tabindex --> <!-- svelte-ignore a11y-no-noninteractive-tabindex -->
<ul <ul

View File

@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import type { PageData } from './$types'; 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 Input from '$lib/components/Input/Input.svelte';
import Select from '$lib/components/Input/Select.svelte'; import Select from '$lib/components/Input/Select.svelte';
import { env } from '$env/dynamic/public'; import { env } from '$env/dynamic/public';
@ -172,7 +172,7 @@
user.edit = false; user.edit = false;
}} }}
> >
<IconOutline name="check-outline" width="18" height="18" /> <Check size="18" />
</button> </button>
<button <button
class="btn btn-sm btn-square" class="btn btn-sm btn-square"
@ -181,7 +181,7 @@
user = user.before; user = user.before;
}} }}
> >
<IconOutline name="no-symbol-outline" width="18" height="18" /> <NoSymbol size="18" />
</button> </button>
{:else} {:else}
<button <button
@ -191,13 +191,13 @@
user.edit = true; user.edit = true;
}} }}
> >
<IconOutline name="pencil-square-outline" width="18" height="18" /> <PencilSquare size="18" />
</button> </button>
<button <button
class="btn btn-sm btn-square" class="btn btn-sm btn-square"
on:click={(e) => buttonTriggeredRequest(e, deleteUser(user.id))} on:click={(e) => buttonTriggeredRequest(e, deleteUser(user.id))}
> >
<IconOutline name="trash-outline" width="18" height="18" /> <Trash size="18" />
</button> </button>
{/if} {/if}
</div> </div>

View File

@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { IconSolid } from 'svelte-heros-v2'; import { ChevronRight } from 'svelte-heros-v2';
import { createEventDispatcher } from 'svelte'; import { createEventDispatcher } from 'svelte';
import { env } from '$env/dynamic/public'; import { env } from '$env/dynamic/public';
@ -18,7 +18,7 @@
<div class="flex items-center h-12 mb-2"> <div class="flex items-center h-12 mb-2">
<button class="sm:absolute btn btn-sm btn-square" on:click={() => dispatch('close')}> <button class="sm:absolute btn btn-sm btn-square" on:click={() => dispatch('close')}>
<IconSolid name="chevron-left-solid" /> <ChevronRight variation="outline" />
</button> </button>
<h1 class="text-center text-xl sm:text-3xl m-auto">Registrierung erfolgreich</h1> <h1 class="text-center text-xl sm:text-3xl m-auto">Registrierung erfolgreich</h1>
</div> </div>