# Features 3

> Numbered feature list with horizontal rows, icon hover, and whileInView slide-in.

A shadcn/ui block from the [@nusaiba](https://nusaiba.dev) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/nusaiba/features-3).

- Page, with a live preview: https://shadcn.exchange/r/nusaiba/features-3
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/nusaiba/features-3-light-d624896f2d1e17fe.png
- Registry item: https://nusaiba.dev/r/base-nova/features-3.json
- Categories: features
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://nusaiba.dev/r/base-nova/features-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: `motion`
- Registry items: `@nusaiba/foundation`

## Files

### `registry/blocks/features/3/features-motion-section.tsx`

```tsx
"use client";

import {
	ClockIcon,
	HeadphonesIcon,
	PlugIcon,
	ShieldCheckIcon,
} from "lucide-react";
import { motion } from "motion/react";
import { SectionShell, ContentRail } from "@/components/layout-contract";

const features = [
	{
		title: "Ship 2× faster",
		description:
			"Cut planning overhead with templates, automations, and a single source of truth.",
		icon: ClockIcon,
	},
	{
		title: "Enterprise-grade security",
		description:
			"SOC 2 Type II, SSO, and audit logs — security your IT team can approve.",
		icon: ShieldCheckIcon,
	},
	{
		title: "100+ integrations",
		description:
			"Connect Slack, GitHub, Figma, and the tools your team already relies on.",
		icon: PlugIcon,
	},
	{
		title: "Dedicated support",
		description:
			"Onboarding help and priority support so you're never stuck on launch day.",
		icon: HeadphonesIcon,
	},
];

export function FeaturesMotionSection() {
	return (
		<SectionShell spacingMode="section">
			<ContentRail maxWidth="max-w-3xl">
				<div className="max-w-xl">
					<h2 className="text-balance font-medium text-2xl tracking-tight md:text-4xl">
						The platform teams switch to and stay on
					</h2>
					<p className="mt-4 text-muted-foreground text-sm md:text-base">
						Speed, security, and support — without the enterprise price tag or
						six-month rollout.
					</p>
				</div>

				<div className="mt-12 divide-y divide-border border-y border-border">
					{features.map((feature, index) => {
						const Icon = feature.icon;
						return (
							<motion.div
								className="group flex flex-col gap-4 py-8 sm:flex-row sm:items-start sm:gap-6 md:gap-10 md:py-10"
								initial={{ opacity: 0, x: -12 }}
								key={feature.title}
								transition={{ delay: index * 0.08, duration: 0.45, ease: "easeOut" }}
								viewport={{ once: true }}
								whileInView={{ opacity: 1, x: 0 }}
							>
								<div className="flex items-center gap-4 sm:contents">
									<span className="w-8 shrink-0 font-mono text-muted-foreground text-sm tabular-nums">
										{String(index + 1).padStart(2, "0")}
									</span>
									<motion.div
										className="flex size-11 shrink-0 items-center justify-center rounded-[var(--radius-md)] border bg-card text-foreground/80 shadow-sm"
										whileHover={{ rotate: 4, scale: 1.04 }}
									>
										<Icon className="size-5" />
									</motion.div>
								</div>
								<div className="min-w-0 flex-1">
									<h3 className="font-medium text-base md:text-lg">{feature.title}</h3>
									<p className="mt-2 text-muted-foreground text-sm leading-relaxed">
										{feature.description}
									</p>
								</div>
							</motion.div>
						);
					})}
				</div>
			</ContentRail>
		</SectionShell>
	);
}
```
