refactor(ui): standardize page layouts and component styling
Introduce structural CSS classes for page shells, headers, and surface cards Update primary theme color to red and neutral to zinc across the application
This commit is contained in:
@@ -1,13 +1,59 @@
|
||||
<template>
|
||||
<UContainer class="py-10 lg:py-16">
|
||||
<div class="mx-auto max-w-md">
|
||||
<UCard class="border border-default bg-default shadow-sm">
|
||||
<UContainer class="page-shell-narrow">
|
||||
<div class="grid gap-8 lg:grid-cols-[minmax(0,1fr)_27rem] lg:items-center">
|
||||
<section class="page-header">
|
||||
<UBadge :label="t('login.badge')" color="primary" variant="soft" class="page-eyebrow" />
|
||||
<h1 class="page-title">
|
||||
{{ t('login.title') }}
|
||||
</h1>
|
||||
<p class="page-description">
|
||||
{{ t('layout.brand') }}
|
||||
</p>
|
||||
|
||||
<div class="grid gap-3 sm:grid-cols-2 lg:grid-cols-1">
|
||||
<div class="surface-card rounded-lg p-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="flex size-10 items-center justify-center rounded-lg bg-primary/10 text-primary">
|
||||
<UIcon name="i-lucide-lock-keyhole" class="size-5" />
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm font-semibold text-highlighted">
|
||||
{{ t('login.signIn') }}
|
||||
</p>
|
||||
<p class="text-sm text-muted">
|
||||
{{ t('login.remember') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="surface-card rounded-lg p-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="flex size-10 items-center justify-center rounded-lg bg-primary/10 text-primary">
|
||||
<UIcon name="i-lucide-fingerprint" class="size-5" />
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-sm font-semibold text-highlighted">
|
||||
{{ t('login.passkey') }}
|
||||
</p>
|
||||
<p class="text-sm text-muted">
|
||||
{{ t('login.or') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<UCard class="surface-card overflow-hidden rounded-lg">
|
||||
<template #header>
|
||||
<div class="space-y-2">
|
||||
<UBadge :label="t('login.badge')" color="primary" variant="soft" class="rounded-full" />
|
||||
<h1 class="text-3xl font-bold text-highlighted">
|
||||
{{ t('login.title') }}
|
||||
</h1>
|
||||
<div class="space-y-1">
|
||||
<p class="text-sm font-semibold text-primary">
|
||||
{{ t('login.badge') }}
|
||||
</p>
|
||||
<h2 class="text-xl font-semibold text-highlighted">
|
||||
{{ t('login.signIn') }}
|
||||
</h2>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -45,22 +91,20 @@
|
||||
|
||||
<div class="my-6 flex items-center gap-3">
|
||||
<div class="h-px flex-1 bg-default" />
|
||||
<span class="text-xs font-semibold uppercase tracking-[0.2em] text-muted">{{ t('login.or') }}</span>
|
||||
<span class="text-xs font-semibold uppercase text-muted">{{ t('login.or') }}</span>
|
||||
<div class="h-px flex-1 bg-default" />
|
||||
</div>
|
||||
|
||||
<div class="space-y-4">
|
||||
<UButton
|
||||
:label="t('login.passkey')"
|
||||
color="neutral"
|
||||
variant="outline"
|
||||
size="xl"
|
||||
class="w-full justify-center"
|
||||
icon="i-lucide-fingerprint"
|
||||
:loading="passkeyPending"
|
||||
@click="loginWithPasskey"
|
||||
/>
|
||||
</div>
|
||||
<UButton
|
||||
:label="t('login.passkey')"
|
||||
color="neutral"
|
||||
variant="outline"
|
||||
size="xl"
|
||||
class="w-full justify-center"
|
||||
icon="i-lucide-fingerprint"
|
||||
:loading="passkeyPending"
|
||||
@click="loginWithPasskey"
|
||||
/>
|
||||
</UCard>
|
||||
</div>
|
||||
</UContainer>
|
||||
|
||||
Reference in New Issue
Block a user