feat: implementa landing page, inclui loading indicator e retorno para home

This commit is contained in:
2026-05-28 18:33:45 -05:00
parent dfe8eb3a80
commit f5375c42ee
6 changed files with 324 additions and 51 deletions

View File

@@ -4,6 +4,11 @@
<div
class="pointer-events-none absolute left-1/2 top-10 h-[420px] w-[min(92vw,760px)] -translate-x-1/2 rounded-[48px] bg-[radial-gradient(circle_at_20%_30%,rgba(232,184,196,0.58),transparent_28%),radial-gradient(circle_at_72%_24%,rgba(167,229,211,0.56),transparent_30%),radial-gradient(circle_at_52%_78%,rgba(244,197,168,0.5),transparent_34%)] blur-2xl"
aria-hidden="true"></div>
<NuxtLink to="/"
class="absolute left-4 top-4 z-10 inline-flex h-10 items-center justify-center gap-2 rounded-full border border-[#d6d3d1] bg-white/80 px-4 text-[14px] font-medium leading-none text-[#0c0a09] shadow-[0_4px_16px_rgba(0,0,0,0.04)] backdrop-blur transition hover:border-[#0c0a09] md:left-8 md:top-8">
<Icon name="mdi:arrow-left" class="text-base" />
Início
</NuxtLink>
<main
class="relative grid w-full max-w-[1120px] grid-cols-1 items-center gap-8 md:grid-cols-[minmax(0,1fr)_minmax(340px,440px)] md:gap-16"

View File

@@ -4,6 +4,11 @@
<div
class="pointer-events-none absolute left-1/2 top-10 h-[420px] w-[min(92vw,760px)] -translate-x-1/2 rounded-[48px] bg-[radial-gradient(circle_at_20%_30%,rgba(167,229,211,0.62),transparent_28%),radial-gradient(circle_at_72%_24%,rgba(244,197,168,0.56),transparent_30%),radial-gradient(circle_at_52%_78%,rgba(200,184,224,0.5),transparent_34%)] blur-2xl"
aria-hidden="true"></div>
<NuxtLink to="/"
class="absolute left-4 top-4 z-10 inline-flex h-10 items-center justify-center gap-2 rounded-full border border-[#d6d3d1] bg-white/80 px-4 text-[14px] font-medium leading-none text-[#0c0a09] shadow-[0_4px_16px_rgba(0,0,0,0.04)] backdrop-blur transition hover:border-[#0c0a09] md:left-8 md:top-8">
<Icon name="mdi:arrow-left" class="text-base" />
Início
</NuxtLink>
<main
class="relative grid w-full max-w-[1120px] grid-cols-1 items-center gap-8 md:grid-cols-[minmax(0,1fr)_minmax(340px,420px)] md:gap-16"
@@ -96,8 +101,8 @@ const toStr = (val) => (val == null ? '' : String(val))
const schema = toTypedSchema(
z.object({
email: z.preprocess(toStr, z.string().min(1, 'Email é obrigatório').email('Email inválido')),
password: z.preprocess(toStr, z.string().min(8, 'A senha deve ter no mínimo 8 caracteres')),
}),
password: z.preprocess(toStr, z.string().min(8, 'A senha deve ter no mínimo 8 caracteres'))
})
)
async function criarConta({ email, password }) {
@@ -105,7 +110,7 @@ async function criarConta({ email, password }) {
try {
await $fetch('/auth/register', {
method: 'POST',
body: { email, password },
body: { email, password }
})
$toast.success('Conta criada com sucesso!', { duration: 8000 })

View File

@@ -4,6 +4,11 @@
<div
class="pointer-events-none absolute left-1/2 top-10 h-[420px] w-[min(92vw,760px)] -translate-x-1/2 rounded-[48px] bg-[radial-gradient(circle_at_20%_30%,rgba(167,229,211,0.62),transparent_28%),radial-gradient(circle_at_72%_24%,rgba(244,197,168,0.56),transparent_30%),radial-gradient(circle_at_52%_78%,rgba(200,184,224,0.5),transparent_34%)] blur-2xl"
aria-hidden="true"></div>
<NuxtLink to="/"
class="absolute left-4 top-4 z-10 inline-flex h-10 items-center justify-center gap-2 rounded-full border border-[#d6d3d1] bg-white/80 px-4 text-[14px] font-medium leading-none text-[#0c0a09] shadow-[0_4px_16px_rgba(0,0,0,0.04)] backdrop-blur transition hover:border-[#0c0a09] md:left-8 md:top-8">
<Icon name="mdi:arrow-left" class="text-base" />
Início
</NuxtLink>
<main
class="relative grid w-full max-w-[1120px] grid-cols-1 items-center gap-8 md:grid-cols-[minmax(0,1fr)_minmax(340px,420px)] md:gap-16"
aria-labelledby="create-account-title">

View File

@@ -4,6 +4,11 @@
<div
class="pointer-events-none absolute left-1/2 top-10 h-[420px] w-[min(92vw,760px)] -translate-x-1/2 rounded-[48px] bg-[radial-gradient(circle_at_20%_30%,rgba(167,229,211,0.62),transparent_28%),radial-gradient(circle_at_72%_24%,rgba(168,200,232,0.56),transparent_30%),radial-gradient(circle_at_52%_78%,rgba(232,184,196,0.5),transparent_34%)] blur-2xl"
aria-hidden="true"></div>
<NuxtLink to="/"
class="absolute left-4 top-4 z-10 inline-flex h-10 items-center justify-center gap-2 rounded-full border border-[#d6d3d1] bg-white/80 px-4 text-[14px] font-medium leading-none text-[#0c0a09] shadow-[0_4px_16px_rgba(0,0,0,0.04)] backdrop-blur transition hover:border-[#0c0a09] md:left-8 md:top-8">
<Icon name="mdi:arrow-left" class="text-base" />
Início
</NuxtLink>
<main
class="relative grid w-full max-w-[1120px] grid-cols-1 items-center gap-8 md:grid-cols-[minmax(0,1fr)_minmax(340px,440px)] md:gap-16"