Centered Sign-up Card
A centred registration card with name, email and password fields and a full-width submit.
3 frameworksBeginner
A registration form beside a gradient testimonial panel that stacks below it on mobile.
<!--
The gradient panel paints its own dark surface, so its white text needs no
dark: variants - it looks identical on a light or dark page. It carries real
copy (a heading + pull-quote), so it is a section, not aria-hidden decoration,
and it stacks ABOVE the form only on desktop; on mobile it drops below so the
form leads.
-->
<div class="mx-auto grid w-full max-w-4xl overflow-hidden rounded-2xl border border-gray-200 bg-white shadow-sm md:grid-cols-2 dark:border-gray-800 dark:bg-gray-950">
<form class="order-1 p-6 sm:p-8 md:order-1" action="#" method="post">
<h1 class="text-xl font-bold tracking-tight text-gray-900 dark:text-gray-100">Create your account</h1>
<p class="mt-1 text-sm text-gray-600 dark:text-gray-400">It takes less than a minute.</p>
<div class="mt-6 space-y-4">
<div>
<label for="sgs-email" class="block text-sm font-medium text-gray-700 dark:text-gray-300">Email address</label>
<input id="sgs-email" name="email" type="email" autocomplete="email" required placeholder="you@company.com"
class="mt-1.5 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm placeholder:text-gray-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:placeholder:text-gray-500 dark:focus-visible:ring-blue-400 dark:focus-visible:ring-offset-gray-950" />
</div>
<div>
<label for="sgs-password" class="block text-sm font-medium text-gray-700 dark:text-gray-300">Password</label>
<input id="sgs-password" name="password" type="password" autocomplete="new-password" required placeholder="At least 8 characters"
class="mt-1.5 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm placeholder:text-gray-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:placeholder:text-gray-500 dark:focus-visible:ring-blue-400 dark:focus-visible:ring-offset-gray-950" />
</div>
</div>
<button type="submit"
class="mt-6 inline-flex w-full items-center justify-center rounded-lg bg-blue-600 px-4 py-2.5 text-sm font-semibold text-white transition-colors hover:bg-blue-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 focus-visible:ring-offset-white motion-reduce:transition-none dark:focus-visible:ring-blue-400 dark:focus-visible:ring-offset-gray-950">
Create account
</button>
</form>
<section class="order-2 flex flex-col justify-center gap-3 bg-gradient-to-br from-blue-600 via-indigo-600 to-violet-700 p-6 text-white sm:p-8 md:order-2">
<h2 class="text-lg font-semibold">Join 40,000+ teams</h2>
<p class="text-sm leading-relaxed text-blue-50">
"We shipped our first release the same afternoon we signed up. The setup we
dreaded took ten minutes."
</p>
<p class="text-xs font-medium text-blue-100">- Priya N., Head of Engineering</p>
</section>
</div>| Prop | Type | Default | Description |
|---|---|---|---|
title | string | 'Create your account' | Heading text for the card. |
panelHeading | string | 'Join 40,000+ teams' | Panel heading |
panelText | string | - | Panel text |
submitLabel | string | 'Create account' | Submit label |
onSubmit | (event: FormEvent<HTMLFormElement>) => void | - | Called with the form's values when it is submitted. |
The gradient panel paints its own dark surface, so its white text needs no `dark:` variants and looks identical on a light or dark page. It carries a real heading and pull-quote - set via `panelHeading` and `panelText` - rather than being decoration, and it reflows below the form on mobile.