# Login 3

> login

A shadcn/ui block from the [@cnippet-blocks](https://blocks.cnippet.dev/?utm_source=shadcn.exchange) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/cnippet-blocks/login-3).

- Page, with a live preview: https://shadcn.exchange/r/cnippet-blocks/login-3
- Screenshot: https://shadcn.exchange/shot/cnippet-blocks/login-3/light.png
- Registry item: https://blocks.cnippet.dev/r/login-3.json
- Categories: login
- Listed: 2026-11-01, source last changed 2026-11-01

## Install

```bash
npx shadcn@latest add https://shadcn.exchange/r/cnippet-blocks/login-3.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- npm packages: `lucide-react`
- Registry items: `@cnippet/button`, `@cnippet/checkbox`, `@cnippet/input`, `@cnippet/label`, `@cnippet/utils`

## Files

### `registry/default/sections/login-3.tsx`

```tsx
"use client";

import { Eye, EyeOff } from "lucide-react";
import * as React from "react";
import { Button } from "@/components/ui/button";
import { Checkbox } from "@/components/ui/checkbox";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { cn } from "@/lib/utils";

// Vario Logo
function VarioLogo({ className }: { className?: string }) {
  return (
    <div className={cn("flex items-center gap-1", className)}>
      <svg className="h-8 w-8" viewBox="0 0 32 32">
        <circle cx="10" cy="16" fill="#ff6b35" r="4" />
        <circle cx="22" cy="10" fill="#ff6b35" r="3" />
        <circle cx="22" cy="22" fill="#ff6b35" r="3" />
      </svg>
      <span className="font-bold text-2xl text-gray-900 dark:text-gray-100">
        Vario<sup className="font-normal text-neutral-400 text-xs">UI</sup>
      </span>
    </div>
  );
}

export function Login3() {
  const [showPassword, setShowPassword] = React.useState(false);
  const [agreeTerms, setAgreeTerms] = React.useState(false);

  return (
    <section className="flex min-h-screen w-full flex-col items-center justify-center bg-[#f0f0f0] px-4 py-12">
      {/* Background pattern */}
      <div
        className="absolute inset-0 opacity-[0.03]"
        style={{
          backgroundImage: `url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fillRule='evenodd'%3E%3Cg fill='%23000000' fill-opacity='1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`,
        }}
      />

      {/* Logo */}
      <VarioLogo className="relative z-10 mb-12" />

      {/* Login Card */}
      <div className="relative w-full max-w-lg rounded-3xl border border-gray-200 bg-white p-8 shadow-sm md:p-10 dark:border-neutral-700">
        {/* Header */}
        <div className="mb-8">
          <h1 className="mb-2 font-bold text-2xl text-gray-900 dark:text-gray-100">
            Login to Vario
          </h1>
          <p className="text-gray-600 text-sm dark:text-gray-400">
            Lorem ipsum dolor sit amet consectetur.
          </p>
        </div>

        {/* Form */}
        <form className="space-y-5">
          <div className="grid grid-cols-2 gap-4">
            <div>
              <Label className="mb-2 block font-medium text-gray-700 text-sm dark:text-gray-300">
                First Name <span className="text-red-500">*</span>
              </Label>
              <Input
                className="h-12 rounded-xl border-gray-200 dark:border-neutral-700"
                placeholder="John"
                type="text"
              />
            </div>
            <div>
              <Label className="mb-2 block font-medium text-gray-700 text-sm dark:text-gray-300">
                Last Name <span className="text-red-500">*</span>
              </Label>
              <Input
                className="h-12 rounded-xl border-gray-200 dark:border-neutral-700"
                placeholder="Smith"
                type="text"
              />
            </div>
          </div>

          <div>
            <Label className="mb-2 block font-medium text-gray-700 text-sm dark:text-gray-300">
              Email Address <span className="text-red-500">*</span>
            </Label>
            <Input
              className="h-12 rounded-xl border-gray-200 dark:border-neutral-700"
              placeholder="john@example.com"
              type="email"
            />
          </div>

          <div>
            <Label className="mb-2 block font-medium text-gray-700 text-sm dark:text-gray-300">
              Password <span className="text-red-500">*</span>
            </Label>
            <div className="relative">
              <Input
                className="h-12 rounded-xl border-gray-200 pr-12 dark:border-neutral-700"
                placeholder="••••••••"
                type={showPassword ? "text" : "password"}
              />
              <button
                className="absolute top-1/2 right-4 -translate-y-1/2 text-neutral-400 hover:text-gray-600 dark:text-gray-400"
                onClick={() => setShowPassword(!showPassword)}
                type="button"
              >
                {showPassword ? (
                  <EyeOff className="h-5 w-5" />
                ) : (
                  <Eye className="h-5 w-5" />
                )}
              </button>
            </div>
          </div>

          <div className="flex items-center gap-2 pt-2">
            <Checkbox
              checked={agreeTerms}
              id="terms-vario"
              onCheckedChange={(checked) => setAgreeTerms(checked as boolean)}
            />
            <Label
              className="text-gray-600 text-sm dark:text-gray-400"
              htmlFor="terms-vario"
            >
              I agree to the{" "}
              <a
                className="font-medium text-gray-900 hover:underline dark:text-gray-100"
                href="#"
              >
                Terms
              </a>{" "}
              and{" "}
              <a
                className="font-medium text-gray-900 hover:underline dark:text-gray-100"
                href="#"
              >
                Privacy Policy
              </a>
            </Label>
          </div>

          <Button
            className="mt-4 h-12 w-full rounded-xl bg-neutral-900 font-medium text-white hover:bg-neutral-800"
            type="submit"
          >
            Register
          </Button>
        </form>
      </div>
    </section>
  );
}

export default Login3;
```
