05 / 30
All 30 in 30 Tailwind CSS Login Forms
- 01Tailwind Split-Screen Brand Hero Login Form
- 02Tailwind Multi-Tenant Workspace Account Switcher
- 03Tailwind Floating Label Login Form with peer Variants
- 04Tailwind Web3 Wallet Connect Login Grid
- 05Tailwind Minimalist Fintech Login Card with Layered Shadow
- 06Tailwind OAuth Social Login Form with Brand SVG Buttons
- 07Tailwind Passwordless Magic Link Login with data-state Machine
- 08Tailwind Aurora Glow Login Card with Drifting Blur Blobs
- 09Tailwind Neon Synthwave Arcade Login Form
- 10Tailwind Sliding Login and Sign Up Panel with peer-checked
- 11Tailwind 3D Flip Login Card with Password Reset Back Face
- 12Tailwind Terminal CLI Prompt Login Form
- 13Tailwind Floating Pill Login Widget Docked Over App Content
- 14Tailwind Gradient Border Login Card with background-clip
- 15Tailwind Slide-Over Side Panel Login without JavaScript
- 16Tailwind Social-First Sign Up with Brand-Compliant Buttons
- 17Tailwind Animated Mascot Login that Covers Its Eyes
- 18Tailwind Accessible Compact Login Modal with Scale-In
- 19Tailwind Glassmorphism Login Card with backdrop-filter
- 20Tailwind Multi-Step Login Wizard with Radio-Driven Track
- 21Tailwind Animated Conic Gradient Border Login Card
- 22Tailwind Secure Vault Login with user-invalid Error State
- 23Tailwind Neo-Brutalist Login Form with Hard Offset Shadow
- 24Tailwind Show Hide Password Toggle with aria-pressed
- 25Tailwind OTP Code Input Grid with Auto-Advance
- 26Tailwind Password Strength Meter with data-score Variants
- 27Tailwind Numeric PIN Pad Login for Kiosks and POS
- 28Tailwind Inline Form Validation with user-valid and user-invalid
- 29Tailwind Particle Constellation Login over Canvas
- 30Tailwind Biometric Face ID Prompt with Pulse Ripples
Tailwind Minimalist Fintech Login Card with Layered Shadow
Crisp, flat, geometric fintech polish: high-contrast type, generous field padding, and the signature two-layer soft shadow that makes a card float just enough. The port's interesting move is the divider — before: and after: flex lines with flex-1 h-px, which is one of the few places two pseudo-element utilities read better than the CSS they replace.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tlf-05 w-full min-h-svh grid place-items-center bg-tlf05-stage font-tlf05-sans p-6">
<form novalidate class="w-[min(380px,100%)] flex flex-col gap-4 p-8 bg-white rounded-[14px] shadow-[0_8px_24px_oklch(0.25_0.03_265/0.08),0_2px_4px_oklch(0.25_0.03_265/0.04)]">
<div aria-hidden="true" class="text-[15px] font-extrabold tracking-tight text-tlf05-acc">▮ Payflow</div>
<h1 class="text-xl font-semibold tracking-tight text-tlf05-ink">Sign in to your account</h1>
<label class="flex flex-col gap-1.5">
<span class="text-[13px] font-semibold text-tlf05-label">Email</span>
<input type="email" autocomplete="email" placeholder="you@company.com" required class="h-11 px-3.5 rounded-lg text-[14.5px] text-tlf05-ink border border-tlf05-edge shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[border-color,box-shadow] duration-150 placeholder:text-tlf05-ph focus-visible:outline-none focus-visible:border-tlf05-acc focus-visible:ring-3 focus-visible:ring-tlf05-halo">
</label>
<label class="flex flex-col gap-1.5">
<span class="text-[13px] font-semibold text-tlf05-label">Password</span>
<input type="password" autocomplete="current-password" placeholder="Enter your password" required class="h-11 px-3.5 rounded-lg text-[14.5px] text-tlf05-ink border border-tlf05-edge shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[border-color,box-shadow] duration-150 placeholder:text-tlf05-ph focus-visible:outline-none focus-visible:border-tlf05-acc focus-visible:ring-3 focus-visible:ring-tlf05-halo">
</label>
<button type="submit" class="h-11 rounded-lg border-0 cursor-pointer bg-tlf05-acc text-white text-[14.5px] font-semibold shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[filter,translate] duration-150 hover:brightness-110 active:translate-y-px focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-tlf05-ring motion-reduce:transition-none motion-reduce:active:translate-y-0">Continue</button>
<div class="flex items-center gap-3 text-xs uppercase tracking-[0.06em] text-tlf05-mut before:content-[''] before:flex-1 before:h-px before:bg-tlf05-rule after:content-[''] after:flex-1 after:h-px after:bg-tlf05-rule"><span>or</span></div>
<button type="button" class="h-11 rounded-lg cursor-pointer bg-white border border-tlf05-edge text-tlf05-ink text-sm font-semibold shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-colors duration-150 hover:bg-tlf05-stage focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-tlf05-ring">Single sign-on (SSO)</button>
<p class="text-center text-[13px] text-tlf05-mut">Don’t have an account? <a href="#" class="font-semibold text-tlf05-acc no-underline hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tlf05-acc">Sign up</a></p>
</form>
</section><section class="tlf-05 w-full min-h-svh grid place-items-center bg-tlf05-stage font-tlf05-sans p-6">
<form novalidate class="w-[min(380px,100%)] flex flex-col gap-4 p-8 bg-white rounded-[14px] shadow-[0_8px_24px_oklch(0.25_0.03_265/0.08),0_2px_4px_oklch(0.25_0.03_265/0.04)]">
<div aria-hidden="true" class="text-[15px] font-extrabold tracking-tight text-tlf05-acc">▮ Payflow</div>
<h1 class="text-xl font-semibold tracking-tight text-tlf05-ink">Sign in to your account</h1>
<label class="flex flex-col gap-1.5">
<span class="text-[13px] font-semibold text-tlf05-label">Email</span>
<input type="email" autocomplete="email" placeholder="you@company.com" required class="h-11 px-3.5 rounded-lg text-[14.5px] text-tlf05-ink border border-tlf05-edge shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[border-color,box-shadow] duration-150 placeholder:text-tlf05-ph focus-visible:outline-none focus-visible:border-tlf05-acc focus-visible:ring-3 focus-visible:ring-tlf05-halo">
</label>
<label class="flex flex-col gap-1.5">
<span class="text-[13px] font-semibold text-tlf05-label">Password</span>
<input type="password" autocomplete="current-password" placeholder="Enter your password" required class="h-11 px-3.5 rounded-lg text-[14.5px] text-tlf05-ink border border-tlf05-edge shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[border-color,box-shadow] duration-150 placeholder:text-tlf05-ph focus-visible:outline-none focus-visible:border-tlf05-acc focus-visible:ring-3 focus-visible:ring-tlf05-halo">
</label>
<button type="submit" class="h-11 rounded-lg border-0 cursor-pointer bg-tlf05-acc text-white text-[14.5px] font-semibold shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[filter,translate] duration-150 hover:brightness-110 active:translate-y-px focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-tlf05-ring motion-reduce:transition-none motion-reduce:active:translate-y-0">Continue</button>
<div class="flex items-center gap-3 text-xs uppercase tracking-[0.06em] text-tlf05-mut before:content-[''] before:flex-1 before:h-px before:bg-tlf05-rule after:content-[''] after:flex-1 after:h-px after:bg-tlf05-rule"><span>or</span></div>
<button type="button" class="h-11 rounded-lg cursor-pointer bg-white border border-tlf05-edge text-tlf05-ink text-sm font-semibold shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-colors duration-150 hover:bg-tlf05-stage focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-tlf05-ring">Single sign-on (SSO)</button>
<p class="text-center text-[13px] text-tlf05-mut">Don’t have an account? <a href="#" class="font-semibold text-tlf05-acc no-underline hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tlf05-acc">Sign up</a></p>
</form>
</section>@import "tailwindcss";
@theme {
--color-tlf05-stage: #f6f9fc;
--color-tlf05-stage: oklch(0.975 0.006 245);
--color-tlf05-ink: #1a1f36;
--color-tlf05-ink: oklch(0.25 0.04 270);
--color-tlf05-label: #3c4257;
--color-tlf05-label: oklch(0.38 0.03 270);
--color-tlf05-mut: #5f6b80;
--color-tlf05-mut: oklch(0.5 0.025 265);
--color-tlf05-ph: #97a1b5;
--color-tlf05-ph: oklch(0.68 0.02 265);
--color-tlf05-edge: #e0e4eb;
--color-tlf05-edge: oklch(0.91 0.008 265);
--color-tlf05-rule: #e6e9f0;
--color-tlf05-rule: oklch(0.93 0.006 265);
--color-tlf05-acc: #5348d6;
--color-tlf05-acc: oklch(0.51 0.2 277);
--color-tlf05-halo: #c4bff2;
--color-tlf05-halo: oklch(0.51 0.2 277 / 0.22);
--color-tlf05-ring: #a79ff0;
--color-tlf05-ring: oklch(0.51 0.2 277 / 0.5);
--font-tlf05-sans: 'Manrope', ui-sans-serif, system-ui, sans-serif;
}
.tlf-05 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tlf05-stage: #f6f9fc;
--color-tlf05-stage: oklch(0.975 0.006 245);
--color-tlf05-ink: #1a1f36;
--color-tlf05-ink: oklch(0.25 0.04 270);
--color-tlf05-label: #3c4257;
--color-tlf05-label: oklch(0.38 0.03 270);
--color-tlf05-mut: #5f6b80;
--color-tlf05-mut: oklch(0.5 0.025 265);
--color-tlf05-ph: #97a1b5;
--color-tlf05-ph: oklch(0.68 0.02 265);
--color-tlf05-edge: #e0e4eb;
--color-tlf05-edge: oklch(0.91 0.008 265);
--color-tlf05-rule: #e6e9f0;
--color-tlf05-rule: oklch(0.93 0.006 265);
--color-tlf05-acc: #5348d6;
--color-tlf05-acc: oklch(0.51 0.2 277);
--color-tlf05-halo: #c4bff2;
--color-tlf05-halo: oklch(0.51 0.2 277 / 0.22);
--color-tlf05-ring: #a79ff0;
--color-tlf05-ring: oklch(0.51 0.2 277 / 0.5);
--font-tlf05-sans: 'Manrope', ui-sans-serif, system-ui, sans-serif;
}
.tlf-05 {
width: 100%;
min-height: 100svh;
}Setup — do this once per project
Skip this if your project already runs Tailwind v4.
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>Compiles in the browser — perfect for a CodePen or a quick test, not for production.
npm install tailwindcss @tailwindcss/vite
npm install tailwindcss @tailwindcss/vite// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})Any v4 setup works — Vite, PostCSS or the CLI. Nothing in this demo is bundler-specific.
@import "tailwindcss";
@theme {
--color-tlf05-stage: #f6f9fc;
--color-tlf05-stage: oklch(0.975 0.006 245);
--color-tlf05-ink: #1a1f36;
--color-tlf05-ink: oklch(0.25 0.04 270);
--color-tlf05-label: #3c4257;
--color-tlf05-label: oklch(0.38 0.03 270);
--color-tlf05-mut: #5f6b80;
--color-tlf05-mut: oklch(0.5 0.025 265);
--color-tlf05-ph: #97a1b5;
--color-tlf05-ph: oklch(0.68 0.02 265);
--color-tlf05-edge: #e0e4eb;
--color-tlf05-edge: oklch(0.91 0.008 265);
--color-tlf05-rule: #e6e9f0;
--color-tlf05-rule: oklch(0.93 0.006 265);
--color-tlf05-acc: #5348d6;
--color-tlf05-acc: oklch(0.51 0.2 277);
--color-tlf05-halo: #c4bff2;
--color-tlf05-halo: oklch(0.51 0.2 277 / 0.22);
--color-tlf05-ring: #a79ff0;
--color-tlf05-ring: oklch(0.51 0.2 277 / 0.5);
--font-tlf05-sans: 'Manrope', ui-sans-serif, system-ui, sans-serif;
}
.tlf-05 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tlf05-stage: #f6f9fc;
--color-tlf05-stage: oklch(0.975 0.006 245);
--color-tlf05-ink: #1a1f36;
--color-tlf05-ink: oklch(0.25 0.04 270);
--color-tlf05-label: #3c4257;
--color-tlf05-label: oklch(0.38 0.03 270);
--color-tlf05-mut: #5f6b80;
--color-tlf05-mut: oklch(0.5 0.025 265);
--color-tlf05-ph: #97a1b5;
--color-tlf05-ph: oklch(0.68 0.02 265);
--color-tlf05-edge: #e0e4eb;
--color-tlf05-edge: oklch(0.91 0.008 265);
--color-tlf05-rule: #e6e9f0;
--color-tlf05-rule: oklch(0.93 0.006 265);
--color-tlf05-acc: #5348d6;
--color-tlf05-acc: oklch(0.51 0.2 277);
--color-tlf05-halo: #c4bff2;
--color-tlf05-halo: oklch(0.51 0.2 277 / 0.22);
--color-tlf05-ring: #a79ff0;
--color-tlf05-ring: oklch(0.51 0.2 277 / 0.5);
--font-tlf05-sans: 'Manrope', ui-sans-serif, system-ui, sans-serif;
}
.tlf-05 {
width: 100%;
min-height: 100svh;
}<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
- The repeated
shadow-[...]across input, button and ghost button is the port's honest cost: the CSS version declared it once as--shadowand referenced it three times. Promoting it to a@themeentry (--shadow-tlf05-card) recovers that — and is the right move the moment a fourth element needs it. before:/after:flex lines on the divider are a genuine improvement in locality: the rule that draws the lines now sits on the element that has them.ring-3exists in v4 (arbitrary ring widths are first-class), so the 3px fintech halo needs no bracket value.- UI change from the CSS original: Manrope replaces the system stack, the muted footer grey lifted from
#697386tooklch(0.5 0.025 265), the divider label from#8792a8to the same token (it was 3.4:1 before), and the accent deepened one step so white button text clears 4.5:1.
Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind Minimalist Fintech Login Card with Layered Shadow
Source: https://codefronts.com/components/tailwind-css-login-forms/tailwind-minimalist-fintech-login-card-layered-shadow/
Crisp, flat, geometric fintech polish: high-contrast type, generous field padding, and the signature two-layer soft shadow that makes a card float just enough. The port's interesting move is the divider — before: and after: flex lines with flex-1 h-px, which is one of the few places two pseudo-element utilities read better than the CSS they replace.
## HTML
```html
<section class="tlf-05 w-full min-h-svh grid place-items-center bg-tlf05-stage font-tlf05-sans p-6">
<form novalidate class="w-[min(380px,100%)] flex flex-col gap-4 p-8 bg-white rounded-[14px] shadow-[0_8px_24px_oklch(0.25_0.03_265/0.08),0_2px_4px_oklch(0.25_0.03_265/0.04)]">
<div aria-hidden="true" class="text-[15px] font-extrabold tracking-tight text-tlf05-acc">▮ Payflow</div>
<h1 class="text-xl font-semibold tracking-tight text-tlf05-ink">Sign in to your account</h1>
<label class="flex flex-col gap-1.5">
<span class="text-[13px] font-semibold text-tlf05-label">Email</span>
<input type="email" autocomplete="email" placeholder="you@company.com" required class="h-11 px-3.5 rounded-lg text-[14.5px] text-tlf05-ink border border-tlf05-edge shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[border-color,box-shadow] duration-150 placeholder:text-tlf05-ph focus-visible:outline-none focus-visible:border-tlf05-acc focus-visible:ring-3 focus-visible:ring-tlf05-halo">
</label>
<label class="flex flex-col gap-1.5">
<span class="text-[13px] font-semibold text-tlf05-label">Password</span>
<input type="password" autocomplete="current-password" placeholder="Enter your password" required class="h-11 px-3.5 rounded-lg text-[14.5px] text-tlf05-ink border border-tlf05-edge shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[border-color,box-shadow] duration-150 placeholder:text-tlf05-ph focus-visible:outline-none focus-visible:border-tlf05-acc focus-visible:ring-3 focus-visible:ring-tlf05-halo">
</label>
<button type="submit" class="h-11 rounded-lg border-0 cursor-pointer bg-tlf05-acc text-white text-[14.5px] font-semibold shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[filter,translate] duration-150 hover:brightness-110 active:translate-y-px focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-tlf05-ring motion-reduce:transition-none motion-reduce:active:translate-y-0">Continue</button>
<div class="flex items-center gap-3 text-xs uppercase tracking-[0.06em] text-tlf05-mut before:content-[''] before:flex-1 before:h-px before:bg-tlf05-rule after:content-[''] after:flex-1 after:h-px after:bg-tlf05-rule"><span>or</span></div>
<button type="button" class="h-11 rounded-lg cursor-pointer bg-white border border-tlf05-edge text-tlf05-ink text-sm font-semibold shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-colors duration-150 hover:bg-tlf05-stage focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-tlf05-ring">Single sign-on (SSO)</button>
<p class="text-center text-[13px] text-tlf05-mut">Don’t have an account? <a href="#" class="font-semibold text-tlf05-acc no-underline hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tlf05-acc">Sign up</a></p>
</form>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tlf05-stage: #f6f9fc;
--color-tlf05-stage: oklch(0.975 0.006 245);
--color-tlf05-ink: #1a1f36;
--color-tlf05-ink: oklch(0.25 0.04 270);
--color-tlf05-label: #3c4257;
--color-tlf05-label: oklch(0.38 0.03 270);
--color-tlf05-mut: #5f6b80;
--color-tlf05-mut: oklch(0.5 0.025 265);
--color-tlf05-ph: #97a1b5;
--color-tlf05-ph: oklch(0.68 0.02 265);
--color-tlf05-edge: #e0e4eb;
--color-tlf05-edge: oklch(0.91 0.008 265);
--color-tlf05-rule: #e6e9f0;
--color-tlf05-rule: oklch(0.93 0.006 265);
--color-tlf05-acc: #5348d6;
--color-tlf05-acc: oklch(0.51 0.2 277);
--color-tlf05-halo: #c4bff2;
--color-tlf05-halo: oklch(0.51 0.2 277 / 0.22);
--color-tlf05-ring: #a79ff0;
--color-tlf05-ring: oklch(0.51 0.2 277 / 0.5);
--font-tlf05-sans: 'Manrope', ui-sans-serif, system-ui, sans-serif;
}
.tlf-05 {
width: 100%;
min-height: 100svh;
}
```Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind Minimalist Fintech Login Card with Layered Shadow
Source: https://codefronts.com/components/tailwind-css-login-forms/tailwind-minimalist-fintech-login-card-layered-shadow/
Crisp, flat, geometric fintech polish: high-contrast type, generous field padding, and the signature two-layer soft shadow that makes a card float just enough. The port's interesting move is the divider — before: and after: flex lines with flex-1 h-px, which is one of the few places two pseudo-element utilities read better than the CSS they replace.
## HTML
```html
<section class="tlf-05 w-full min-h-svh grid place-items-center bg-tlf05-stage font-tlf05-sans p-6">
<form novalidate class="w-[min(380px,100%)] flex flex-col gap-4 p-8 bg-white rounded-[14px] shadow-[0_8px_24px_oklch(0.25_0.03_265/0.08),0_2px_4px_oklch(0.25_0.03_265/0.04)]">
<div aria-hidden="true" class="text-[15px] font-extrabold tracking-tight text-tlf05-acc">▮ Payflow</div>
<h1 class="text-xl font-semibold tracking-tight text-tlf05-ink">Sign in to your account</h1>
<label class="flex flex-col gap-1.5">
<span class="text-[13px] font-semibold text-tlf05-label">Email</span>
<input type="email" autocomplete="email" placeholder="you@company.com" required class="h-11 px-3.5 rounded-lg text-[14.5px] text-tlf05-ink border border-tlf05-edge shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[border-color,box-shadow] duration-150 placeholder:text-tlf05-ph focus-visible:outline-none focus-visible:border-tlf05-acc focus-visible:ring-3 focus-visible:ring-tlf05-halo">
</label>
<label class="flex flex-col gap-1.5">
<span class="text-[13px] font-semibold text-tlf05-label">Password</span>
<input type="password" autocomplete="current-password" placeholder="Enter your password" required class="h-11 px-3.5 rounded-lg text-[14.5px] text-tlf05-ink border border-tlf05-edge shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[border-color,box-shadow] duration-150 placeholder:text-tlf05-ph focus-visible:outline-none focus-visible:border-tlf05-acc focus-visible:ring-3 focus-visible:ring-tlf05-halo">
</label>
<button type="submit" class="h-11 rounded-lg border-0 cursor-pointer bg-tlf05-acc text-white text-[14.5px] font-semibold shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-[filter,translate] duration-150 hover:brightness-110 active:translate-y-px focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-tlf05-ring motion-reduce:transition-none motion-reduce:active:translate-y-0">Continue</button>
<div class="flex items-center gap-3 text-xs uppercase tracking-[0.06em] text-tlf05-mut before:content-[''] before:flex-1 before:h-px before:bg-tlf05-rule after:content-[''] after:flex-1 after:h-px after:bg-tlf05-rule"><span>or</span></div>
<button type="button" class="h-11 rounded-lg cursor-pointer bg-white border border-tlf05-edge text-tlf05-ink text-sm font-semibold shadow-[0_1px_3px_oklch(0.25_0.03_265/0.1),0_1px_2px_oklch(0.25_0.03_265/0.06)] transition-colors duration-150 hover:bg-tlf05-stage focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-tlf05-ring">Single sign-on (SSO)</button>
<p class="text-center text-[13px] text-tlf05-mut">Don’t have an account? <a href="#" class="font-semibold text-tlf05-acc no-underline hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tlf05-acc">Sign up</a></p>
</form>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tlf05-stage: #f6f9fc;
--color-tlf05-stage: oklch(0.975 0.006 245);
--color-tlf05-ink: #1a1f36;
--color-tlf05-ink: oklch(0.25 0.04 270);
--color-tlf05-label: #3c4257;
--color-tlf05-label: oklch(0.38 0.03 270);
--color-tlf05-mut: #5f6b80;
--color-tlf05-mut: oklch(0.5 0.025 265);
--color-tlf05-ph: #97a1b5;
--color-tlf05-ph: oklch(0.68 0.02 265);
--color-tlf05-edge: #e0e4eb;
--color-tlf05-edge: oklch(0.91 0.008 265);
--color-tlf05-rule: #e6e9f0;
--color-tlf05-rule: oklch(0.93 0.006 265);
--color-tlf05-acc: #5348d6;
--color-tlf05-acc: oklch(0.51 0.2 277);
--color-tlf05-halo: #c4bff2;
--color-tlf05-halo: oklch(0.51 0.2 277 / 0.22);
--color-tlf05-ring: #a79ff0;
--color-tlf05-ring: oklch(0.51 0.2 277 / 0.5);
--font-tlf05-sans: 'Manrope', ui-sans-serif, system-ui, sans-serif;
}
.tlf-05 {
width: 100%;
min-height: 100svh;
}
```How this works
Two subtle layers, not one blurry one. That is the whole look, and Tailwind expresses it exactly: a single shadow-[...] holding a 3px ambient and a 2px contact layer, repeated on inputs, the primary button and the ghost button so the card reads as one material.
The divider becomes symmetric utilities. The CSS version wrote .divider::before, .divider::after { content:""; flex:1; height:1px }. Tailwind writes the same thing twice, on the element, and the tradeoff is honest: more characters, but the rule is visible where it renders and the line colour is a token away from a theme change.
Autofill is why this stays a real form. Labels wrap their inputs, autocomplete is on both fields, and nothing about the port changes what a password manager sees — which, for a payments-grade shell, is most of the requirement.
Make it yours
- Float height: edit the two offsets in the shared
shadow-[...]value. - Density:
h-11fields andgap-4are the two dials. - Accent:
--color-tlf05-accdrives brand mark, button, links and the focus halo token derived from it. - Add a card-brand strip above the form using the same shadow utility for continuity.
Gotchas — read before shipping
- Never leave focus invisible. The original removed the outline and replaced it with a halo; the port does the same explicitly with
focus-visible:outline-noneimmediately followed byring-3. - Keep near-black text on white. Crispness is the trust signal in fintech, and a 4.5:1 grey headline undoes the whole aesthetic.
before:content-['']is required even for a decorative line — a pseudo-element with nocontentdoes not render, and the flex utilities on it will look broken for no visible reason.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
Layered shadows, flex dividers and :focus-visible are universally supported; the floor is Tailwind v4's generated sheet.