feat(portal): redesign registration wizard, header and login with Vuexy patterns

- Registration page: switch to blank layout with split-screen design (event branding
  illustration on left, AppStepper wizard on right), replacing generic chip stepper
- Portal header: refined to flat surface bar with proper branding and icon-based nav
- Login page: upgrade to Vuexy V2 auth pattern with split-screen illustration
- Success page: blank layout with centered card, avatar icon, and footer mask

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-10 20:47:24 +02:00
parent d1ad0e1f89
commit 212db0d3cb
4 changed files with 691 additions and 320 deletions

View File

@@ -36,55 +36,90 @@ watch([isFallbackStateActive, refLoadingIndicator], () => {
<AppLoadingIndicator ref="refLoadingIndicator" />
<VAppBar
color="primary"
flat
color="surface"
border="b"
density="comfortable"
>
<VAppBarNavIcon
class="d-sm-none"
@click="isMobileMenuOpen = !isMobileMenuOpen"
/>
<VContainer
fluid
class="d-flex align-center py-0"
style="max-inline-size: 1440px;"
>
<!-- Logo & Brand -->
<RouterLink
to="/"
class="d-flex align-center gap-x-2 text-decoration-none"
>
<VIcon
icon="tabler-users-group"
size="26"
color="primary"
/>
<span class="text-h6 font-weight-bold text-high-emphasis">
Crewli
</span>
</RouterLink>
<VAppBarTitle class="text-h6">
Crewli Portal
</VAppBarTitle>
<!-- Mobile nav toggle -->
<VAppBarNavIcon
class="d-sm-none ms-auto"
@click="isMobileMenuOpen = !isMobileMenuOpen"
/>
<template #append>
<div class="d-none d-sm-flex align-center gap-2">
<!-- Desktop navigation -->
<div class="d-none d-sm-flex align-center gap-1 ms-6">
<VBtn
v-for="item in navItems"
:key="item.to"
:to="item.to"
variant="text"
color="white"
color="default"
size="small"
class="text-medium-emphasis"
>
<VIcon
start
:icon="item.icon"
size="18"
/>
{{ item.title }}
</VBtn>
</div>
<VSpacer />
<!-- Auth actions -->
<VBtn
v-if="authStore.isAuthenticated"
variant="outlined"
color="white"
class="ms-2"
variant="tonal"
color="primary"
size="small"
@click="authStore.logout(); $router.push('/login')"
>
<VIcon
start
icon="tabler-logout"
size="18"
/>
Uitloggen
</VBtn>
<VBtn
v-else
variant="outlined"
color="white"
class="ms-2"
variant="tonal"
color="primary"
size="small"
to="/login"
>
<VIcon
start
icon="tabler-login"
size="18"
/>
Inloggen
</VBtn>
</template>
</VContainer>
</VAppBar>
<!-- Mobile navigation drawer -->
@@ -126,6 +161,7 @@ watch([isFallbackStateActive, refLoadingIndicator], () => {
<VContainer
fluid
class="pa-4 pa-sm-6"
style="max-inline-size: 1440px;"
>
<RouterView v-slot="{ Component }">
<Suspense